From ba49a155b547ab6038bac8a878605565900e8f48 Mon Sep 17 00:00:00 2001 From: Thomas Veerman Date: Fri, 1 Feb 2013 13:13:19 +0100 Subject: [PATCH] fb: introduce framebuffer support to Minix This patch introduces a framebuffer to Minix. It's written for the ARM port of Minix, but has an architectural split that separates the hardware dependent part from the non-hardware dependent part. Futhermore, this driver was developed using a screen that has a native resolution of 1024x600 pixels and having lack of support for obtaining EDID from the screen. Consequently, it uses a hardcoded resolution of 1024x600. The driver uses an interface based on the Linux ioctl API, but supports only a very limited subset. --- commands/MAKEDEV/MAKEDEV.sh | 10 +- commands/Makefile | 1 - distrib/sets/lists/minix/md.evbarm | 1 + distrib/sets/lists/minix/mi | 2 + drivers/Makefile | 2 +- drivers/fb/Makefile | 15 + drivers/fb/arch/earm/Makefile.inc | 7 + drivers/fb/arch/earm/dss.h | 65 + drivers/fb/arch/earm/fb_arch.c | 271 +++ drivers/fb/fb.c | 426 ++++ drivers/fb/fb.h | 13 + drivers/fb/logos.h | 3054 ++++++++++++++++++++++++++++ drivers/ramdisk/Makefile | 2 +- drivers/ramdisk/proto.arm.small | 1 + drivers/ramdisk/proto.dev | 1 + drivers/ramdisk/rc.arm | 2 +- etc/system.conf | 12 + include/minix/Makefile | 2 +- include/minix/dmap.h | 1 + include/minix/fb.h | 38 + include/sys/Makefile | 4 +- include/sys/ioc_fb.h | 14 + sys/sys/ioctl.h | 1 + 23 files changed, 3936 insertions(+), 9 deletions(-) create mode 100644 drivers/fb/Makefile create mode 100644 drivers/fb/arch/earm/Makefile.inc create mode 100644 drivers/fb/arch/earm/dss.h create mode 100644 drivers/fb/arch/earm/fb_arch.c create mode 100644 drivers/fb/fb.c create mode 100644 drivers/fb/fb.h create mode 100644 drivers/fb/logos.h create mode 100644 include/minix/fb.h create mode 100644 include/sys/ioc_fb.h diff --git a/commands/MAKEDEV/MAKEDEV.sh b/commands/MAKEDEV/MAKEDEV.sh index 43f547b3f..d41ba53f2 100644 --- a/commands/MAKEDEV/MAKEDEV.sh +++ b/commands/MAKEDEV/MAKEDEV.sh @@ -23,13 +23,14 @@ case $#:$1 in ttypa ttypb ttypc ttypd ttype ttypf \ ttyq0 ttyq1 ttyq2 ttyq3 ttyq4 ttyq5 ttyq6 ttyq7 ttyq8 ttyq9 \ ttyqa ttyqb ttyqc ttyqd ttyqe ttyqf \ - eth klog random uds filter fbd hello + eth klog random uds filter fbd hello fb0 ;; 0:|1:-\?) cat >&2 <&2 ex=1 diff --git a/commands/Makefile b/commands/Makefile index 40be52a6a..c5eeee6d9 100644 --- a/commands/Makefile +++ b/commands/Makefile @@ -38,5 +38,4 @@ SUBDIR+= atnormalize dosread fdisk loadfont \ autopart part partition playwave \ recwave repartition screendump .endif - .include diff --git a/distrib/sets/lists/minix/md.evbarm b/distrib/sets/lists/minix/md.evbarm index 615228e39..190302443 100644 --- a/distrib/sets/lists/minix/md.evbarm +++ b/distrib/sets/lists/minix/md.evbarm @@ -95,5 +95,6 @@ ./usr/lib/libpadconf.a minix-sys ./usr/lib/libpadconf_pic.a minix-sys ./usr/mdec minix-sys +./usr/sbin/fb minix-sys ./usr/sbin/gpio minix-sys ./usr/sbin/random minix-sys diff --git a/distrib/sets/lists/minix/mi b/distrib/sets/lists/minix/mi index 4461eada6..d1616b56c 100644 --- a/distrib/sets/lists/minix/mi +++ b/distrib/sets/lists/minix/mi @@ -576,6 +576,7 @@ ./usr/include/minix/drvlib.h minix-sys ./usr/include/minix/ds.h minix-sys ./usr/include/minix/endpoint.h minix-sys +./usr/include/minix/fb.h minix-sys ./usr/include/minix/fslib.h minix-sys ./usr/include/minix/gcov.h minix-sys ./usr/include/minix/gpio.h minix-sys @@ -792,6 +793,7 @@ ./usr/include/sys/ioc_block.h minix-sys ./usr/include/sys/ioccom.h minix-sys ./usr/include/sys/ioc_disk.h minix-sys +./usr/include/sys/ioc_fb.h minix-sys ./usr/include/sys/ioc_fbd.h minix-sys ./usr/include/sys/ioc_file.h minix-sys ./usr/include/sys/ioc_memory.h minix-sys diff --git a/drivers/Makefile b/drivers/Makefile index 10f4a0357..a5306585f 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -23,7 +23,7 @@ SUBDIR= ahci amddev atl2 at_wini audio dec21140A dp8390 dpeth \ .endif .if ${MACHINE_ARCH} == "earm" -SUBDIR= gpio mmc log tty random +SUBDIR= fb gpio mmc log tty random .endif .endif # ${MKIMAGEONLY} != "yes" diff --git a/drivers/fb/Makefile b/drivers/fb/Makefile new file mode 100644 index 000000000..2744ccfdb --- /dev/null +++ b/drivers/fb/Makefile @@ -0,0 +1,15 @@ +# Makefile for the framebuffer driver. +PROG= fb + +.include "arch/${MACHINE_ARCH}/Makefile.inc" + +SRCS+= fb.c + +DPADD+= ${LIBCHARDRIVER} ${LIBSYS} +LDADD+= -lchardriver -lsys + +MAN= + +BINDIR?= /usr/sbin + +.include diff --git a/drivers/fb/arch/earm/Makefile.inc b/drivers/fb/arch/earm/Makefile.inc new file mode 100644 index 000000000..2afe6fe56 --- /dev/null +++ b/drivers/fb/arch/earm/Makefile.inc @@ -0,0 +1,7 @@ +# Makefile for arch-dependent framebuffer code +.include + +HERE=${.CURDIR}/arch/${MACHINE_ARCH} +.PATH: ${HERE} + +SRCS += fb_arch.c diff --git a/drivers/fb/arch/earm/dss.h b/drivers/fb/arch/earm/dss.h new file mode 100644 index 000000000..4e5a2aec6 --- /dev/null +++ b/drivers/fb/arch/earm/dss.h @@ -0,0 +1,65 @@ +#ifndef __DSS_H__ +#define __DSS_H__ + +/* DSS Base Registers */ +#define OMAP3_DSS_BASE 0x48050000 +#define OMAP3_DISPC_BASE 0x48050400 +#define OMAP3_VENC_BASE 0x48050C00 + +#define OMAP3_DSS_SYSCONFIG(b) (b + 0x10) +#define OMAP3_DSS_SYSSTATUS(b) (b + 0x14) + +#define OMAP3_DISPC_IRQSTATUS(b) (b + 0x18) +#define OMAP3_DISPC_CONTROL(b) (b + 0x40) +#define OMAP3_DISPC_CONFIG(b) (b + 0x44) +#define OMAP3_DISPC_DEFAULT_COLOR0(b) (b + 0x4c) +#define OMAP3_DISPC_DEFAULT_COLOR1(b) (b + 0x50) +#define OMAP3_DISPC_TIMINGH(b) (b + 0x64) +#define OMAP3_DISPC_TIMINGV(b) (b + 0x68) +#define OMAP3_DISPC_POL_FREQ(b) (b + 0x6c) +#define OMAP3_DISPC_DIVISOR(b) (b + 0x70) +#define OMAP3_DISPC_SIZE_DIG(b) (b + 0x78) +#define OMAP3_DISPC_SIZE_LCD(b) (b + 0x7c) +#define OMAP3_DISPC_GFX_BA0(b) (b + 0x80) +#define OMAP3_DISPC_GFX_BA1(b) (b + 0x84) +#define OMAP3_DISPC_GFX_SIZE(b) (b + 0x8c) +#define OMAP3_DISPC_GFX_ATTRIBUTES(b) (b + 0xa0) +#define OMAP3_DISPC_GFX_ROW_INC(b) (b + 0xac) +#define OMAP3_DISPC_GFX_PIXEL_INC(b) (b + 0xb0) + +#define LOADMODE_SHIFT 1 +#define TFTSTN_SHIFT 3 +#define DATALINES_SHIFT 8 +#define GFXFORMAT_SHIFT 1 +#define GFXBURSTSIZE_SHIFT 6 + +#define DSS_SOFTRESET (1 << 1) +#define DSS_RESETDONE (1 << 0) + +#define DISPC_LCDENABLE (1 << 0) +#define DISPC_DIGITALENABLE (1 << 1) +#define DISPC_GOLCD (1 << 5) +#define DISPC_GODIGITAL (1 << 6) +#define DISPC_GPIN0 (1 << 13) +#define DISPC_GPIN1 (1 << 14) +#define DISPC_GPOUT0 (1 << 15) +#define DISPC_GPOUT1 (1 << 16) +#define DISPC_ENABLESIGNAL (1 << 28) +#define DISPC_FRAMEDONE (1 << 0) +#define DISPC_GFXENABLE (1 << 0) +#define DISPC_GFXFORMAT_BMP1 0x0 +#define DISPC_GFXFORMAT_BMP2 0x1 +#define DISPC_GFXFORMAT_BMP4 0x2 +#define DISPC_GFXFORMAT_BMP8 0x3 +#define DISPC_GFXFORMAT_RGB12 0x4 +#define DISPC_GFXFORMAT_ARGB16 0x5 +#define DISPC_GFXFORMAT_RGB16 0x6 +#define DISPC_GFXFORMAT_RGB24 0x8 +#define DISPC_GFXFORMAT_RGB24P 0x9 +#define DISPC_GFXFORMAT_ARGB32 0xC +#define DISPC_GFXFORMAT_RGBA32 0xD +#define DISPC_GFXFORMAT_RGBx 0xE +#define DISPC_GFXBURSTSIZE_4 0x0 +#define DISPC_GFXBURSTSIZE_8 0x1 +#define DISPC_GFXBURSTSIZE_16 0x2 +#endif /* __DSS_H__ */ diff --git a/drivers/fb/arch/earm/fb_arch.c b/drivers/fb/arch/earm/fb_arch.c new file mode 100644 index 000000000..5dbf7340f --- /dev/null +++ b/drivers/fb/arch/earm/fb_arch.c @@ -0,0 +1,271 @@ +/* Architecture dependent part for the framebuffer on the OMAP3. Since we don't + * have support for EDID (which requires support for i2c, also something we + * don't have, yet), but we do have a screen with 1024*600 resolution for our + * testing purposes, we hardcode that resolution here. There's obvious room for + * improvement. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "dss.h" +#define SCREEN_WIDTH 1024 +#define SCREEN_HEIGHT 600 +#define PAGES_NR 2 + +static vir_bytes dss_phys_base; /* Address of dss phys memory map */ +static vir_bytes dispc_phys_base; /* Address of dispc phys memory map */ +static vir_bytes fb_vir; +static phys_bytes fb_phys; +static size_t fb_size; +static int initialized = 0; + +struct panel_config { + u32_t timing_h; + u32_t timing_v; + u32_t pol_freq; + u32_t divisor; + u32_t lcd_size; + u32_t panel_type; + u32_t data_lines; + u32_t load_mode; + u32_t panel_color; +}; + +static const struct panel_config default_cfg = { + /* See OMAP TRM section 15.7 for the register values/encoding */ + .timing_h = 0x1a4024c9, /* Horizontal timing */ + .timing_v = 0x02c00509, /* Vertical timing */ + .pol_freq = 0x00007028, /* Pol Freq */ + .divisor = 0x00010001, /* 96MHz Pixel Clock */ + .lcd_size = ((SCREEN_HEIGHT - 1) << 16 | (SCREEN_WIDTH - 1)), + .panel_type = 0x01, /* TFT */ + .data_lines = 0x03, /* 24 Bit RGB */ + .load_mode = 0x02, /* Frame Mode */ + .panel_color = 0xFFFFFF /* WHITE */ +}; + +static const struct fb_fix_screeninfo fbfs = { + .xpanstep = 0, + .ypanstep = 0, + .ywrapstep = 0, + .line_length = SCREEN_WIDTH * 4, + .mmio_start = 0, /* Not implemented for char. special, so */ + .mmio_len = 0 /* these are set to 0 */ +}; + +static struct fb_var_screeninfo fbvs = { + .xres = SCREEN_WIDTH, + .yres = SCREEN_HEIGHT, + .xres_virtual = SCREEN_WIDTH, + .yres_virtual = SCREEN_HEIGHT*2, + .xoffset = 0, + .yoffset = 0, + .bits_per_pixel = 32, + .red = { + .offset = 16, + .length = 8, + .msb_right = 0 + }, + .green = { + .offset = 8, + .length = 8, + .msb_right = 0 + }, + .blue = { + .offset = 0, + .length = 8, + .msb_right = 0 + }, + .transp = { + .offset = 24, + .length = 8, + .msb_right = 0 + } +}; + +static inline u32_t +readw(vir_bytes addr) +{ + return *((volatile u32_t *) addr); +} + +static inline void +writew(vir_bytes addr, u32_t val) +{ + *((volatile u32_t *) addr) = val; +} + +static void +arch_configure_display(int minor) +{ +/* Tell hardware where frame buffer is and turn display on */ + u32_t off, rdispc; + + if (!initialized) return; + if (minor != 0) return; + + off = fbvs.yoffset * fbvs.xres_virtual * (fbvs.bits_per_pixel/8); + + writew((vir_bytes) OMAP3_DISPC_GFX_BA0(dispc_phys_base), + fb_phys + (phys_bytes) off); + rdispc = readw((vir_bytes) OMAP3_DISPC_CONTROL(dispc_phys_base)); + rdispc |= DISPC_LCDENABLE | DISPC_DIGITALENABLE | DISPC_GOLCD | + DISPC_GODIGITAL | DISPC_GPOUT0 | DISPC_GPOUT1; + writew((vir_bytes) OMAP3_DISPC_CONTROL(dispc_phys_base), rdispc); +} + +int +arch_get_device(int minor, struct device *dev) +{ + if (!initialized) return ENXIO; + if (minor != 0) return ENXIO; + dev->dv_base = fb_vir; + dev->dv_size = fb_size; + return OK; +} + +int +arch_get_varscreeninfo(int minor, struct fb_var_screeninfo *fbvsp) +{ + if (!initialized) return ENXIO; + if (minor != 0) return ENXIO; + + *fbvsp = fbvs; + return OK; +} + +int +arch_put_varscreeninfo(int minor, struct fb_var_screeninfo *fbvsp) +{ + int r = OK; + + assert(fbvsp != NULL); + + if (!initialized) return ENXIO; + if (minor != 0) return ENXIO; + + /* For now we only allow to play with the yoffset setting */ + if (fbvsp->yoffset != fbvs.yoffset) { + if (fbvsp->yoffset < 0 || fbvsp->yoffset > fbvs.yres) { + return EINVAL; + } + + fbvs.yoffset = fbvsp->yoffset; + } + + /* Now update hardware with new settings */ + arch_configure_display(minor); + return OK; +} + +int +arch_get_fixscreeninfo(int minor, struct fb_fix_screeninfo *fbfsp) +{ + if (!initialized) return ENXIO; + if (minor != 0) return ENXIO; + + *fbfsp = fbfs; + return OK; +} + +int +arch_pan_display(int minor, struct fb_var_screeninfo *fbvsp) +{ + return arch_put_varscreeninfo(minor, fbvsp); +} + +int +arch_fb_init(int minor, struct device *dev) +{ + u32_t rdispc; + struct minix_mem_range mr; + + const struct panel_config *panel_cfg = &default_cfg; + + assert(dev != NULL); + if (minor != 0) return ENXIO; /* We support only one minor */ + + if (initialized) { + dev->dv_base = fb_vir; + dev->dv_size = fb_size; + return OK; + } + + initialized = 1; + + /* Configure DSS memory access */ + mr.mr_base = OMAP3_DSS_BASE; + mr.mr_limit = mr.mr_base + 0x60; + if (sys_privctl(SELF, SYS_PRIV_ADD_MEM, &mr) != OK) { + panic("Unable to request access to DSS(1) memory"); + } + + dss_phys_base = (vir_bytes) vm_map_phys(SELF, (void *) OMAP3_DSS_BASE, + 0x60); + + if (dss_phys_base == (vir_bytes) MAP_FAILED) { + panic("Unable to request access to DSS(2) memory"); + } + + /* Configure DISPC memory access */ + mr.mr_base = OMAP3_DISPC_BASE; + mr.mr_limit = mr.mr_base + 0x430; + if (sys_privctl(SELF, SYS_PRIV_ADD_MEM, &mr) != OK) { + panic("Unable to request access to DISPC(1) memory"); + } + dispc_phys_base = (vir_bytes) vm_map_phys(SELF, + (void *) OMAP3_DISPC_BASE, + 0x430); + + if (dispc_phys_base == (vir_bytes) MAP_FAILED) { + panic("Unable to request access to DISPC(2) memory"); + } + + /* Set timings, screen mode, screen size, etc. */ + writew(OMAP3_DISPC_TIMINGH(dispc_phys_base), panel_cfg->timing_h); + writew(OMAP3_DISPC_TIMINGV(dispc_phys_base), panel_cfg->timing_v); + writew(OMAP3_DISPC_POL_FREQ(dispc_phys_base), panel_cfg->pol_freq); + writew(OMAP3_DISPC_DIVISOR(dispc_phys_base), panel_cfg->divisor); + writew(OMAP3_DISPC_CONFIG(dispc_phys_base), + panel_cfg->load_mode << LOADMODE_SHIFT); + writew(OMAP3_DISPC_CONTROL(dispc_phys_base), + panel_cfg->panel_type << TFTSTN_SHIFT | + panel_cfg->data_lines << DATALINES_SHIFT); + + writew((vir_bytes) OMAP3_DISPC_SIZE_LCD(dispc_phys_base), + panel_cfg->lcd_size); + writew((vir_bytes) OMAP3_DISPC_GFX_SIZE(dispc_phys_base), + panel_cfg->lcd_size); + writew(OMAP3_DISPC_DEFAULT_COLOR0(dispc_phys_base), + panel_cfg->panel_color); + + /* Enable gfx engine */ + writew(OMAP3_DISPC_GFX_ATTRIBUTES(dispc_phys_base), + (DISPC_GFXBURSTSIZE_16 << GFXBURSTSIZE_SHIFT) | + (DISPC_GFXFORMAT_RGB24 << GFXFORMAT_SHIFT) | + (DISPC_GFXENABLE)); + writew(OMAP3_DISPC_GFX_ROW_INC(dispc_phys_base), 1); + writew(OMAP3_DISPC_GFX_PIXEL_INC(dispc_phys_base), 1); + + /* Allocate contiguous physical memory for the display buffer */ + fb_size = fbvs.yres_virtual * fbvs.xres_virtual * + (fbvs.bits_per_pixel / 8); + fb_vir = (vir_bytes) alloc_contig(fb_size, 0, &fb_phys); + if (fb_vir == (vir_bytes) MAP_FAILED) { + panic("Unable to allocate contiguous memory\n"); + } + dev->dv_base = fb_vir; + dev->dv_size = fb_size; + + /* Configure buffer settings and turn on LCD/Digital */ + arch_configure_display(minor); + + return OK; +} + diff --git a/drivers/fb/fb.c b/drivers/fb/fb.c new file mode 100644 index 000000000..d97fc3699 --- /dev/null +++ b/drivers/fb/fb.c @@ -0,0 +1,426 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "logos.h" +#include "fb.h" + +#define FB_DEV_NR 1 +/* + * Function prototypes for the fb driver. + */ +static int fb_open(message *m); +static int fb_close(message *m); +static struct device * fb_prepare(dev_t device); +static int fb_transfer(endpoint_t endpt, int opcode, u64_t position, + iovec_t *iov, unsigned int nr_req, endpoint_t user_endpt, unsigned int + flags); +static int fb_do_read(endpoint_t ep, iovec_t *iov, int minor, u64_t pos, + size_t *io_bytes); +static int fb_do_write(endpoint_t ep, iovec_t *iov, int minor, u64_t pos, + size_t *io_bytes); +static int fb_ioctl(message *m); +static void paint_bootlogo(int minor); +static void paint_restartlogo(int minor); +static void paint_centered(int minor, char *data, int width, int height); +static int do_get_varscreeninfo(int minor, endpoint_t ep, cp_grant_id_t gid); +static int do_put_varscreeninfo(int minor, endpoint_t ep, cp_grant_id_t gid); +static int do_get_fixscreeninfo(int minor, endpoint_t ep, cp_grant_id_t gid); +static int do_pan_display(int minor, endpoint_t ep, cp_grant_id_t gid); + +/* SEF functions and variables. */ +static void sef_local_startup(void); +static int sef_cb_init(int type, sef_init_info_t *info); +static int sef_cb_lu_state_save(int); +static int lu_state_restore(void); + +/* Entry points to the fb driver. */ +static struct chardriver fb_tab = +{ + fb_open, + fb_close, + fb_ioctl, + fb_prepare, + fb_transfer, + nop_cleanup, + nop_alarm, + nop_cancel, + nop_select, + NULL +}; + +/** Represents the /dev/fb device. */ +static struct device fb_device[FB_DEV_NR]; +static int fb_minor, has_restarted = 0; + +static int open_counter[FB_DEV_NR]; /* Open count */ + +static int +fb_open(message *m) +{ + static int initialized = 0; + + if (m->DEVICE < 0 || m->DEVICE >= FB_DEV_NR) return ENXIO; + + if (arch_fb_init(m->DEVICE, &fb_device[m->DEVICE]) == OK) { + open_counter[m->DEVICE]++; + if (!initialized) { + if (has_restarted) { + paint_restartlogo(m->DEVICE); + has_restarted = 0; + } else { + paint_bootlogo(m->DEVICE); + } + initialized = 1; + } + return OK; + } + return ENXIO ; +} + +static int +fb_close(message *m) +{ + if (m->DEVICE < 0 || m->DEVICE >= FB_DEV_NR) return ENXIO; + assert(open_counter[m->DEVICE] > 0); + open_counter[m->DEVICE]--; + return OK; +} + +static struct device * +fb_prepare(dev_t dev) +{ + if (dev < 0 || dev >= FB_DEV_NR) return NULL; + assert(open_counter[dev] > 0); + fb_minor = dev; + return &fb_device[dev]; +} + +static int +fb_transfer(endpoint_t endpt, int opcode, u64_t position, + iovec_t *iov, unsigned nr_req, endpoint_t UNUSED(user_endpt), + unsigned int UNUSED(flags)) +{ + size_t io_bytes = 0, ret; + + if (nr_req != 1) { + /* This should never trigger for char drivers at the moment. */ + printf("fb: vectored transfer, using first element only\n"); + } + + switch (opcode) { + case DEV_GATHER_S: + /* Userland read operation */ + ret = fb_do_read(endpt, iov, fb_minor, position, &io_bytes); + iov->iov_size -= io_bytes; + break; + case DEV_SCATTER_S: + /* Userland write operation */ + ret = fb_do_write(endpt, iov, fb_minor, position, &io_bytes); + iov->iov_size -= io_bytes; + break; + default: + return EINVAL; + } + return ret; +} + +static int +fb_do_read(endpoint_t ep, iovec_t *iov, int minor, u64_t pos, size_t *io_bytes) +{ + struct device dev; + + arch_get_device(minor, &dev); + + if (pos >= dev.dv_size) return EINVAL; + + if (dev.dv_size - pos < iov->iov_size) { + *io_bytes = dev.dv_size - pos; + } else { + *io_bytes = iov->iov_size; + } + + if (*io_bytes <= 0) { + return OK; + } + + return sys_safecopyto(ep, (cp_grant_id_t) iov->iov_addr, 0, + (vir_bytes) (dev.dv_base + ex64lo(pos)), + *io_bytes); +} + +static int +fb_ioctl(message *m) +{ +/* Process I/O control requests */ + endpoint_t ep; + cp_grant_id_t gid; + int minor; + unsigned int request; + int r; + + minor = m->DEVICE; + request = m->COUNT; + ep = (endpoint_t) m->USER_ENDPT; + gid = (cp_grant_id_t) m->IO_GRANT; + + if (minor != 0) return EINVAL; + + switch(request) { + case FBIOGET_VSCREENINFO: + r = do_get_varscreeninfo(minor, ep, gid); + return r; + case FBIOPUT_VSCREENINFO: + r = do_put_varscreeninfo(minor, ep, gid); + return r; + case FBIOGET_FSCREENINFO: + r = do_get_fixscreeninfo(minor, ep, gid); + return r; + case FBIOPAN_DISPLAY: + r = do_pan_display(minor, ep, gid); + return r; + } + + return EINVAL; +} + +static int +do_get_varscreeninfo(int minor, endpoint_t ep, cp_grant_id_t gid) +{ + int r; + struct fb_var_screeninfo fbvs; + + if ((r = arch_get_varscreeninfo(minor, &fbvs)) == OK) { + r = sys_safecopyto(ep, gid, 0, (vir_bytes) &fbvs, sizeof(fbvs)); + } + + return r; +} + +static int +do_put_varscreeninfo(int minor, endpoint_t ep, cp_grant_id_t gid) +{ + int r; + struct fb_var_screeninfo fbvs_copy; + + if ((r = sys_safecopyfrom(ep, gid, 0, (vir_bytes) &fbvs_copy, + sizeof(fbvs_copy))) != OK) { + return r; + } + + return arch_put_varscreeninfo(minor, &fbvs_copy); +} + +static int +do_pan_display(int minor, endpoint_t ep, cp_grant_id_t gid) +{ + int r; + struct fb_var_screeninfo fbvs_copy; + + if ((r = sys_safecopyfrom(ep, gid, 0, (vir_bytes) &fbvs_copy, + sizeof(fbvs_copy))) != OK) { + return r; + } + + return arch_pan_display(minor, &fbvs_copy); +} + +static int +do_get_fixscreeninfo(int minor, endpoint_t ep, cp_grant_id_t gid) +{ + int r; + struct fb_fix_screeninfo fbfs; + + if ((r = arch_get_fixscreeninfo(minor, &fbfs)) == OK) { + r = sys_safecopyto(ep, gid, 0, (vir_bytes) &fbfs, sizeof(fbfs)); + } + + return r; +} + +static int +fb_do_write(endpoint_t ep, iovec_t *iov, int minor, u64_t pos, size_t *io_bytes) +{ + struct device dev; + + arch_get_device(minor, &dev); + + if (pos >= dev.dv_size) { + return EINVAL; + } + + if (dev.dv_size - pos < iov->iov_size) { + *io_bytes = dev.dv_size - pos; + } else { + *io_bytes = iov->iov_size; + } + + if (*io_bytes <= 0) { + return OK; + } + + return sys_safecopyfrom(ep, (cp_grant_id_t) iov->iov_addr, 0, + (vir_bytes) (dev.dv_base + ex64lo(pos)), + *io_bytes); +} + +static int +sef_cb_lu_state_save(int UNUSED(state)) { +/* Save the state. */ + ds_publish_u32("open_counter", open_counter[0], DSF_OVERWRITE); + + return OK; +} + +static int +lu_state_restore() { +/* Restore the state. */ + u32_t value; + + ds_retrieve_u32("open_counter", &value); + ds_delete_u32("open_counter"); + open_counter[0] = (int) value; + + return OK; +} + +static void +sef_local_startup() +{ + /* Register init callbacks. Use the same function for all event types */ + sef_setcb_init_fresh(sef_cb_init); + sef_setcb_init_lu(sef_cb_init); + sef_setcb_init_restart(sef_cb_init); + + /* Register live update callbacks */ + /* - Agree to update immediately when LU is requested in a valid state*/ + sef_setcb_lu_prepare(sef_cb_lu_prepare_always_ready); + /* - Support live update starting from any standard state */ + sef_setcb_lu_state_isvalid(sef_cb_lu_state_isvalid_standard); + /* - Register a custom routine to save the state. */ + sef_setcb_lu_state_save(sef_cb_lu_state_save); + + /* Let SEF perform startup. */ + sef_startup(); +} + +static int +sef_cb_init(int type, sef_init_info_t *UNUSED(info)) +{ +/* Initialize the fb driver. */ + int do_announce_driver = TRUE; + + open_counter[0] = 0; + switch(type) { + case SEF_INIT_FRESH: + printf("framebuffer fresh: pid %d\n", getpid()); + break; + + case SEF_INIT_LU: + /* Restore the state. */ + lu_state_restore(); + do_announce_driver = FALSE; + + printf("framebuffer: I'm a new version!\n"); + break; + + case SEF_INIT_RESTART: + printf("framebuffer restarted: pid %d\n", getpid()); + has_restarted = 1; + break; + } + + /* Announce we are up when necessary. */ + if (do_announce_driver) { + chardriver_announce(); + } + + /* Initialization completed successfully. */ + return OK; +} + +int +main(void) +{ + sef_local_startup(); + chardriver_task(&fb_tab, CHARDRIVER_SYNC); + return OK; +} + +static void +paint_bootlogo(int minor) +{ + paint_centered(minor, bootlogo_data, bootlogo_width, bootlogo_height); +} + +static void +paint_restartlogo(int minor) +{ + paint_centered(minor, restartlogo_data, restartlogo_width, + restartlogo_height); + micro_delay(1 * 1000000); /* 1 second */ +} + +static void +paint_centered(int minor, char *data, int width, int height) +{ + u8_t pixel[3]; + u32_t i, min_x, min_y, max_x, max_y, x_painted = 0, rows = 0; + int r, bytespp; + struct device dev; + struct fb_var_screeninfo fbvs; + + /* Put display in a known state to simplify positioning code below */ + if ((r = arch_get_varscreeninfo(minor, &fbvs)) != OK) { + printf("fb: unable to get screen info: %d\n", r); + } + fbvs.yoffset = 0; + if ((r = arch_pan_display(minor, &fbvs)) != OK) { + printf("fb: unable to pan display: %d\n", r); + } + + arch_get_device(minor, &dev); + + /* Paint on a white canvas */ + bytespp = fbvs.bits_per_pixel / 8; + for (i = 0; i < fbvs.xres * fbvs.yres * bytespp; i+= bytespp) + *((u32_t *)((u32_t) dev.dv_base + i)) = 0x00FFFFFF; + + /* First seek to start */ + min_x = fbvs.xres / 2 - width / 2; + max_x = fbvs.xres / 2 + width / 2; + min_y = fbvs.yres / 2 - height / 2; + max_y = fbvs.yres / 2 + height / 2; + i = min_x * fbvs.xres + min_y; + + /* Add the image data */ + for (i = ((min_y * fbvs.xres) + min_x) * bytespp; rows < height;) { + GET_PIXEL(data, pixel); + + ((unsigned char *)((u32_t) dev.dv_base + i))[0] = pixel[2]; + ((unsigned char *)((u32_t) dev.dv_base + i))[1] = pixel[1]; + ((unsigned char *)((u32_t) dev.dv_base + i))[2] = pixel[0]; + ((unsigned char *)((u32_t) dev.dv_base + i))[3] = 0; + + x_painted++;/* Keep tab of how many row pixels we've painted */ + if (x_painted == width) { + /* We've reached the end of the row, carriage return + * and go to next line. + */ + x_painted = 0; + rows++; + i = (((min_y + rows) * fbvs.xres) + min_x) * 4; + } else { + i += 4; + } + } +} + diff --git a/drivers/fb/fb.h b/drivers/fb/fb.h new file mode 100644 index 000000000..2784ef6d5 --- /dev/null +++ b/drivers/fb/fb.h @@ -0,0 +1,13 @@ +#ifndef __FB_H__ +#define __FB_H__ + +int arch_fb_init(int minor, struct device *dev); +int arch_get_device(int minor, struct device *dev); +int arch_get_varscreeninfo(int minor, struct fb_var_screeninfo *fbvsp); +int arch_put_varscreeninfo(int minor, struct fb_var_screeninfo *fbvs_copy); +int arch_get_fixscreeninfo(int minor, struct fb_fix_screeninfo *fbfsp); +int arch_pan_display(int minor, struct fb_var_screeninfo *fbvs_copy); + +#define FB_MESSAGE "Hello, world! From framebuffer!\n" + +#endif /* __FB_H__ */ diff --git a/drivers/fb/logos.h b/drivers/fb/logos.h new file mode 100644 index 000000000..a88c4be94 --- /dev/null +++ b/drivers/fb/logos.h @@ -0,0 +1,3054 @@ +#ifndef __FB_BOOTLOGO_H_ +#define __FB_BOOTLOGO_H_ + +static unsigned int bootlogo_width = 170; +static unsigned int bootlogo_height = 220; + +#define GET_PIXEL(data,pixel) {\ +pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ +pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ +pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ +data += 4; \ +} +static char *bootlogo_data = + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````_0DY\\_`P\\_`P`0T]````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "^PH:Z/4E````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````_`P\\YO(BV.05U=`1RM8'O(2U>(2" + "Z?8F_0DY````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````````````````````````P\\_`````@X^" + "]@(RY/$AT-T-O,?XJ;3FN,3UZ?8F`````P\\_`````0T]_0DY_`P\\`````P\\_````" + "`P\\_````S=H*K[KKM\\+TVN<7````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````Z?4FK+;HL;WN]`0T`````P```P```P\\_````````````" + "`````0T]^04U\\?XN[?HJ\\/TM_@HZ`P\\__@HZW.D9OLK[O\\O\\V^@8^P(2]P,S````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````````````````````````P\\_````````" + "^04US-D)S=@)]/`Q\\OTNJ;/EGJC:X>P=``\\``````P\\_````````````_@HZY?(B" + "SML+T-L,Y_(C_`P\\`````@X^````````ZOI:_ABI+$" + "C97'D)C*CI;(GJ;8Y>`A`0T]YO$BOX>W^P<````````V^@8R=8&^`@X````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````]P,SX.T=X.T=N<7VI+#AX^`@`````0T]```^`P\\]^@8V_PL[\\_`PP,S]DY_0" + "B97&G*;8P\\W_[ODJ``X_Y_(CL;OMCI;(BY/%CY?)CY?)D9G+CY7(HZS>ZO4F````" + "YO$BP(2T=T-`@X^````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````\\_`PT]`0\\_`P`P\\_ZOX>R=8&T=X.[/DGVN<6T-T+P,S]G*;8B)+$GZG;S]H+^P4V``X_\\?PMQ<`!J[7G" + "FZ77DIK,CI;(D)C*CY?)D)C*C97'JK+D_0DY`P\\_[ODJP5F\"24%J,3EB*4ER.:'*DN(2NX>Q<`!_PL[````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````Z?0EL[[PRM8'R]8'R-4%NL3VE9W/CY?)D)C*F*#24ER.!1!!!!!!" + "!!!!!!!!!1%\"!!!!\"15&/$AYEZ/4[/DI`````0L\\_PDZ`@P]^`8W]/\\P\\/LL^@0U" + "_`H[`P\\_````^04UT=X.[_PL\\?TNN\\7WZ_(2Y.`A[/86T=X.Z_@H_`P\\_0DY]@(R_@HZ`````P\\_^@8V" + "\\O\\O_0DY`````@X^`0T]````````W.D9\\O\\O````Y?(BP,S]PX>`0T]]0$Q" + "[_LKY_,CSMD*NL7VN,+TN<3VO,CYQM,#P\\_`LKWNN,/TN\\7WLKSNM\\/TR-,$M;_Q" + "LKWNL+OMO,CYTM\\/O86_0DYW^PI['CL+SMK+CIHJS>J++DML'SN\\7WQM$\"QM,#Q=(\"JK;GHZW?" + "I['CP\\_`O,CYH:O=J;/EQM,#Q-$!HZ[?L[WOP````]`0TN05Z/0B^@4S_@DWO\\OZ,#QM!!!!!1%\"" + "(BY?E*#1]`0T````_0P(T-L,``\\`]/\\P" + "X^X?[?HJY/$AS-D)PP\\W_KKKKHJS>PLS^NL;WI;'BIZ_AK;?IPI*_@O\\O\\PL[_NL;WP,S]P,S]QM$\"YO,C_@HZ`0T]\\?XNR]@(" + "[_PL````[/DIX^`@Z_@H5&\"1!!!!!1%\"'BI;GZG;F*+4BY/%D)C*CY?)CY?)D)C*" + "CY?)CY?)C)3&J+#B``X_````T]`0L+OLML#RTMX.````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````````````````P\\_[OLKR-,$S]P,R]@(" + "S-D)K;?IC);(CY?)D)C*D)C*CY?)D)C*:G*D4EJ,3%:(2%*$-T%S,3MM,#IL+SEK" + ".D1VB9/%KKCJ5F*3%B)3\"!1%!!!!)S-DT-L,``X_XNT>P(2P8.4-U76>9E)S.D)C*CY?)CY?)CI;(D)C*C);(B)+$V^87````````" + "\\/TMPH:Q-$!PL[_NL;WG*C9DYW/J[?H" + "P,S]L[_PFZ77L[WOHZW?KKKKO\\O\\P,S]O\\O\\PH:T=X.\\O\\O````]0$QZ/4E^04UJK;G!1%\"!!!!(\"Q=2%2%(RU?45N-EJ#2B9'#" + "A(R^B9'#D)C*D)C*BI+$C);(RM4&``````````X_Y.`@L;SMU>(2````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````Z_(2X.T=Q]0$PM+[PWNL;V>86Q-$!OLK[XN\\?````Z_@HRM<'R-4%" + "U^04?(BY!!!!*S=H3EJ++#9H45N-6F262U6'>X6WBY/%D)C*CY?)B)'\"HZO=Z/,D" + "``\\``@`_````]`,SN,/UOLG[^P8.U[OLK_PL[" + "^`@XZ_@HT]`0LKSNCYG+NL3V^P4V_@@Y_PDZ_PDZ_`H[^`8WR-,$O.4-U3EB*" + "*35F&25686V>DYO-CY?)BY/%AI'\"M\\'S_@HZ`````P\\_`````P\\_R-4%L;OM[?@I" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````]`0TN,+TJ[?HR=8&R]@(R-4%Q<`!F:/5BI+$C97'" + "CI;(CY?)D)C*DIK,EJ#2A(R^/DAZ.T5W7FB:BI;'W^P<`````P\\_````_@@YV.,4" + "SMD*T-T-UN,3W^P<\\/TM``X_VN46I;'BO,CYR-4%T=X.Q-$!PM\\/T" + "P,K\\KKCJI;'BOH2V96^A'2=9,CQN?(:XEI[0CI;(C97'H*K<" + "U-\\0``\\``````P\\_`P\\_`P\\_S]P,JK;GX^\\?``\\`````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````Y_,CJK7GKKKKRM<'R=8&R=8&P,K\\HZW?E9_1CI;(BY/%C)3&AHZ`=7VO9V^A" + ".T5W-#YP,#IL*C1F8&JNL;WP\\_`P\\_`PL[_P,S]ML+SL;WNN\\?XN\\?XML+SLKSNEZ'3LKSN" + "O\\O\\OLK[OLK[O\\O\\ML+SM<'RP,S]O,CYK[OLP,S]N,3UIK+CNL;WP,S]K+CIHZ_@" + "M\\/TP\\_`P\\_`P\\_`Q-$!O,CYN\\?X\\O\\O`@X^]`0T`P\\_`````````````0T]\\?XN" + "[?HJT]X/B)+$9W&CC);(DIK,BI+$GJC:[ODJ`0L\\`````P\\_`P\\_`````P\\_R-4%" + "I;'BT]`0````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````````````````P\\_TMT.HZW?LK[OS-D)" + "QM,#Y_0D^`@X[ODJVN46OLCZHZW?C);(;WFK3EB*.4-U,#IL,#IL,CQN*3-EGZG;" + "_`P\\T-T-PL[_Q]0$SMD*X^`@`@X^]`0TW.D9PL[_Z?8F`0L\\P,K\\H:O=L[_PP(2`@X^\\_`PY/$AY?(BZ/4EX^`@V^@8S=H*Q]0$P,S]OLK[T]`0T-L,FJ36C97'" + "BI+$IK#B`P\\_`````P\\_`````P\\_````X.T=I;#BNL7V_0DY````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````P\\__0@XO`AQ]0$KKKKK+CIML+SOP=X^X?[?HJ`P\\_`````P\\_`P\\_" + "````_@HZOLGZJ++DVN46`P\\_````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````[/@IK+;HI;'BQM,#R]@(V^@8ZOL;WN[/DI`P\\_T]`0O\\O\\" + "U.$1R]@(OLK[JK;GIK+CN<7VP\\_`P\\_`NL;WOLK[P\\_`IK+CL[_PQ<`!I:_AL[_P" + "OLK[HZ_@M<'RM<'RHJS>K+;HOLK[OLK[OLK[OLK[KKKKM\\/TNP=HZW?IK+CR-4%R]@(V^@8_0DY_@HZ_0DY" + "_0DY_0DY_0DY_0DY_@HZ_@HZ_@HZ_0DY_`P\\^PI*[@N,+TO\\O\\K;GJJK;GO\\O\\P,S]OX>P\\_`N,+TN,+TN,+TM\\'SM+[PN(2LK[OIK#BL+KLP,K\\Q=(\"Q-$!Y_0D````W.D9" + "J;7FL[WOQ<`!Q=(\"L[_PHJS>I['CL;OMM;_QPL[WOP,K\\K[OLM<'RX>X>Q=(\"ML#RJ;/EH:O=J;/ENL3V" + "OLK[K[OLI[/DK[GKQ,[`WNL;]`0T`````0T]X.LX>HZW?JK3FNL;W" + "R-4%W.D9[/DI^04U_@HZ_PL[_`P\\Z?8FOX>N\\?XIK+CK+CINL;WP,S]Y/$A`P\\_Y?(BK;?IL[WOQ-$!QM,#K[OL" + "HJS>HJS>HZW?L;WNQ-$!J+3EN<7VP86J++DH:W>HJ[?KKKKT]`0VN<7K;GJLK[OQ-$!W^P<^PH:NL;WHZ_@L+SMO,;XO\\O\\P,S]OLK[N,3UML#RM\\'SN,+TN,3UN\\7WOJ;/EM\\/TQ]0$U.$1" + "U^04O\\O\\J;7FH:W>H:O=H*KL[_PX.T=_PL[Y_0DO,CY" + "I:_AI['CJ;/ET]X/``\\`ZO86]`0T````[?HJSML+PH*KHJ[?I[/DK+;HM;_QM\\'SN,+TM;_Q" + "K;?II['CHZW?HZW?I*[@HJS>H*S=OL[WOQ-$!O\\O\\QM,#L;WNH:O=ML#RO\\G[" + "I['CHZW?J++DP(2OLK[O\\O\\PIK#BK+;HM,#QO,CYNL;WML#RJ[7GHZW?I*[@" + "HZW?H*KK+;HOLK[Z_@H`@X^P\\_`" + "JK;GO,CYOLK[Z_@H]@(RM,#QPL[_]P,S`P\\_X^`@PL[_OLK[PH:T]`0L;WNN,3U[OLK````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````Y_0DPJK3FN(2````W>H:M\\/TOLK[O,CY[/DI\\_XOL;WNP,S]" + "^PJK;GN<7VR-4%VN<7TMX/L+SMML+S" + "YO,C````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````@X^W>@9O,?YN,/UM;_QLKSNLKSNKKGJJK3FJ++D" + "J++DHZW?HZW?HJS>HJS>HZW?HJ[?HZW?I[/DKKKKML+SN\\?XO(0OHJS>I*[@HZ_@I:_A" + "LKSNP,K\\NL;WJK;GHZ_@I;'BK[GKOLCZR=0%OLCZN<7VX^`@````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````````````````````````````````@X^" + "V>86O,;XN\\7WM<#QL[WOL+KLL;OMK[GKJ++DI:_AK+;HML#RM+[PJK;GJK;GLK[O" + "M\\/TML+SL;WNJ[?HI[/DI[/DJ;7FKKKKL[_PN<7VOR]@&O,CYQ=(\"WNL;U.$1NL;WL[_PN<7VPO,;XQ-$!" + "QM,#ML+SLK[O]0$Q]@(ROLK[N<7VVN<7_`P\\S-D)WNL;`P``````ZOX>`0T]````WNL;P\\_`S-D)SML+S-D)S-D)R=8&RM<'P,S]M<'RK+CIK+CIL+KL" + "L[WOM;_QM\\'SN,+TN,+TP86V.45U>(2R-4%N<7VL[_POHZW?H:O=" + "J+3EN\\?XO,CYNL;WN\\?XO,CYN\\?XN\\?XN\\?XO,CYNL;WN<7VN<7VM<'RPX>SML+T=X.X.T=_`P\\`````````P\\_\\O\\O_PL[````_`P\\_@HZ_@HZ[_PL\\?XN" + "_@HZ_`P\\[_PLKKCJN\\7WQM,#M\\/TH*K(2`P\\_U^04XN\\?````]`0TT-T-J;/EHZW?JK;GU.$1[/DI^@8V^`@X^@8V````" + "`P\\_[?HJX.T=\\?XN`0T]\\O\\OYO,CV^@8Q-$!L+SMJ;7FJ+3EJ;/EJ;/EI:_AH:W>" + "I+#AL+SMRM<'TM\\/T]`0TMT.U^(3V.45T=X.P,S]PH:O=J;/EN<7VO(2S]P,SML+R=8&O(2N86GJK;6666.T=X.45V,S]P$AY/!!!!!1%\"!!!!!!!!#QM,+SML" + "3EJ+UN,3`P\\__PL[^`@X_@HZ`@X^Y_0DJ;/ELKSNL[WOHJS>J;/EIK#BJ[?HQ-$!" + "^04UY/$AM\\/TYO,C`P\\_P(2US-D)`````````````P\\_`P\\_`````````P\\_" + "^`@X\\O\\OZ?8FW.D9VN<7W^P86V.45TM\\/P,S]K[GKI*_@J;/EL+KLKKGKJ[7G" + "PGJK;M<'RY/$A[OLK\\_`P^04U`0T]_@HZZ?0ES]H+" + "N\\7WNL;WQ-$!R=8&UN,3YO,C^PX>X>X>U>(2" + "M<'RQ]0$U>(2U^04U.$1R-4%M<'RJK3FK;?ILKSNM+[PW^P<````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````^@8VQ](#M+_PM\\/TP,S]TM\\/WNL;YO,C" + "[/DI]@(R^`@X]`0T]@(R\\/TM\\_`P_`P\\`````````@X^_PL[_@HZ`P\\_````````" + "[OLKIK+C45V.%B)3!!!!!1%\"!!!!!1%\"\"!1%!Q-$!Q-$\"!1%\"!1%!1-#!A1$!Q5%" + "!A1$!Q5%!A1$!A1$!A1$!!%!#!I*@HZ_^PH:^P(2]@(R^P(2U````_@HZ_`P\\Z/4EIK#BI*[@HZW?IK#BP,S]PL[_\\O\\O\\?XNQ=(\"" + "````<7VN!!!!!A1$!1-#!A1$!A1$!A)#!A)#!!%!!!!!!1%\"!!!!!!!!!!%!!!!!" + "!A)#!Q5%!Q5%!1-#!Q5%!A1$!A1$!!)\"!!!!!1%\"#AI+3UN,KKKK]0$Q````````" + "`P\\_`@X^`````````````P\\_`0T]_`P\\`0T]`@X^`0T]`0T]`@X^`P\\_]0$QUN,3" + "`P\\_````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "``````````````````````````````````````````````\\`Y_,DN,/TR=8&TM\\/" + "Y?(B^P(2" + "?HJ[*35F!!!!!!!!!!%!!A1$!A1$!A1$!A1$!A1$!A1$!A1$!!)\"!!%!.4=W@(Z^" + "JKCHML3TM,+RC)K*.DAX!!%!!!)\"!A1$!A1$!A1$!A1$!1%\"!A)#M,#Q`P\\__@HZ" + "^P0DY_\"1='!!%!!!!!!A1$!A1$!A1$!Q5%" + "!A1$!A1$!A1$!15'!Q-\"!1!!)C-FML?[[/(:P+/.G(68C&]`H8ZBR,3E^04SL,#R" + "'\"A9!!!!!!1!!Q5%!A1$!Q5%!!!!&256W.D9````_PL[Z?8FP9Q;S:]/\\PR=<),CYM!!!!!Q-$!A1\"!Q5%!A1$!A1$!A1$!Q5%!Q5%!A1$" + "!1-#!!%!!!%!!A1$-T-TDI[/Z_@H`````````P\\_`@X^`@X^`P\\_`0T]`@X^`0T]" + "`0L\\_`H[PLS^I:_AS-<(````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "X.T=N<7VNL;WU.$1TM\\/T]`0[?HJ]`0T]P,S_`P\\`0T]`P\\_````````Y_0DB)3%" + ")C)C!!!!!!%!!!)\"!A1$!Q-$!A1$!A1$!A1$!Q5%!A1$!A1$!A1$!Q5#!!!!.TQY" + "]0,PTT6VN@<&RA;!!!!!Q5%!A1$!Q5%" + "!Q-$!!!!=(\"Q`P\\__PL[[_PLQ-$!M,#QR-4%S]P,_0DY^`@X[_PL_`P^.$5X!!!!" + "!A1$!Q5%!Q-\"!!!!#!U1PM,$T@9R=0%GZG;I:_AT=T.````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````````P\\_U.$1I['CUN$2^`@X]`0T^04U" + "^04U]P,S]`0T_@HZ````````S]P,9W.D$Q]0!!!!!!%!!A1$!Q5%!A1$!A1$!Q5%" + "!A1$!A1$!A1$!A1$!A1$!Q5%!A1$!!!!'\"Q(" + "\"!1%!!%!!!)\"!A1$!Q5%!Q5%!A1$!Q5%!A1$!A1$!A1$!A1$!Q5%!A1$!A1$!Q5%" + "!1-#!!%!HJ[=^O\\LBW.$@VAZ@%YM54)6)R-''QY&-BU-9$9/;TU,7CM\"=6=]``\\]" + "66:9!!%!!1-#!A1$!Q5%!!)\"!A)#R]@(````_@HZV.45QM,#QM,#U^04_`P\\_`P\\" + "````<7VN!!%!!A1\"\"!1#!1-!!!%$.TM]ZNP6AVQ\\BG!]BFU^9%%F*BA,&1Q$*RA&" + "7T!.<$Q/8SY&=F!V````J;/E!!!!!A1\"!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$" + "!A1$!A1$!Q5%!A1$!A1$!A1$!!%!!!)\"!!%!/$AYI+#A]@(R````````````````" + "````_`P\\T=P-Q,_`X.P=_PL[````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````^`@XY/$AS]P,SML+X^`@\\?XN" + "\\?XN\\_`P]`0T_PL[````[/DICIK++SML!!!!!!!!!1-#!A1$!A1$!Q5%!1-#!A1$" + "!Q5%!A1$!A1$!Q5%!A1$!A1$!A1$!A1$!Q5%!A1$!!%!)S-D^PX>F:;;1%!_\"QM-!1%$!!)\"" + ",RI*<$Q/5S9!D8JJ]P,U'\"A9!!%!!A1$!Q5%!A1$!!%!9'\"A````_`P\\Z?8FQM,#" + "Q=(\"W>H:`0T]`P\\_Y/$A%2%0!!!#!A1\"\"!1%!!)\"\"QE)T=T+X>$(^00P```^_0DW" + "V.45C9G*-4-S\"1='!!)!(R%';4E*63I!AGV;`P``:76H!1!!!A1$!A1$!A1$!A1$" + "!A1$!A1$!A1$!A1$!A1$!A1$!A1$!Q5%!1-#!A1$!Q5%!A1$!A1$!A1$!A1$!!%!" + "!!!!6666Y?(B`````0T]`P\\__PL[]`0TQ,[`N\\;WO\\G[UN(3]P,S````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````\\/TMQ=(\"O,?Y" + "R-4%Z?8F]P,S^`@X_@HZ````[?HJ5&\"1!!!!!!!!\"!1%!A1$!A1$!1-#!Q5%!A1$" + "!A1$!A1$!A1$!Q5%!A1$\"!9&!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!1%\"G:G:" + "`P``]?HG`@`_`````P\\_\\/\\LCYO,(#%>!!)\"!!!!%!E$:$=/7CU$;%]\\^PL\\-T-T" + "!!!!!1-#!Q5%!A1$!!%!+CIK^04U`@X^\\/TMR-4%Q=(\"X.T=````````O05Q,[`LKSNO,?Y[?HJ````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````\\/TMRM4&K[KLJ[?HM,#QP\\_`Y_0DQ]0$" + "+#AI!A)#!A)#!Q-$!A1$!A1$!A1$!Q5%!A1$!A1$!Q5%!A1$!A1$!A1$!A1$!A1$" + "!Q5%!A1$!A1$!A1$!A1$!A1$!A1$!1-#!!!!RMD(]_TGP+G9Y^T7]/`N^`@VZ_8I" + "B);&(\"Q?!!)\"!!!##A=#84-.6#Q*7%-S_@HX04U^!!%!!Q5%!A1$!A1$!!%!$1U." + "VN<7````YO,CR=8&QM,#U.$1\\_`P````B97&!1%\"!!1&\"!1%!!1&!1!!*3EIZ?(?" + "IY6NRL/CX^P9[O\\P^@8VV^<5;7NK%\"!1!!!!!1-#6#Y+7SY&;&)^````T=P-!!-#" + "!!1!!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!Q5%!Q5%!A1$!Q5%!1-#!A1$!A1$" + "!A1$!A1$!A1$!A1$!Q5%!A1$!1%\"\"!1%JK;G````````]`0TT=X.I*[@?(>XX:WQ]0$````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````_PL[Y?(BP\\W_KKCJJK3F?XN\\%R-4!1%\"!A1$!A1$!A1$!A1$!A1$" + "!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!Q5%!A1$!Q5%!A1$" + "!Q5%!!%!$1]/Y_8E\\_LGBW\"\"GHB>F96Y=H:X7FN>*SEI\"A9'!1%\"!!!%&!Q\"9D5/" + "2C-&95^\"_PL],T%Q!!%!!A1$!Q5%!A1$!1-#!A)#PL[__`P\\S-D)QM,#R-4%QM,#" + "T-T-````G*?8`P\\_````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````````````````````````````@X^X^`@" + "XN\\??HJ[$!Q-!A)#\"!9&!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$" + "!A1$!A1$!A1$!A1$!A1$!A1$!1-#!A1$!Q5%!Q5%!A1$!!%!%2-3[_XM``\\]@F=W" + "<$E/;T];%\"%-!!-'!A%!!1-#!A)#!!!!.C!*9T52/\"I#D(NT\\?PM%\")2!!%!!A1$" + "!A1$!Q5%!!)\"!!!!M<'R`0T]R]@(R-4%R-4%QM,#TM\\/`P\\_@HZ_!!!!\"!1#!!1$" + "!Q5#!1%\"!!1%R]@&CG:%:41*X>Q]0$Q]0$Q]0$Y/$A````" + "H*S=!!!!!!1$!A-&!Q5#!1-#!!!!+CQLZO,@>F!L94%\";DM0945//C!(,\"E)1C1+" + ":TA-:TA/1R]!=6Z0```^````RM@*!!!!!!)\"!A1$!A1$!A1$!A1$!A1$!A1$!A1$" + "!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!Q5%!Q5%!A1$!A1$!A1$!A1$!1-#" + "!1%\"FZ?8`````@X^`0T]`P\\_`@X^`P\\_V^@8KKGJKKGJL;OML[[P`0T]````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````]`0TXN\\?Z?8FX.T=WNL;YO,C^P(2````W.D9QM,#R=8&Q]0$[OLK`P\\_H*S=!!!!!!1$!A-&!A1\"!Q-$" + "\"!-\"!!!!E*38YNL0;$E08CU%<$E/,ZO!1%!!A1$!A1$!A1$!A1$!A1$!!%!#1E*QM,#^`@XRM<'Q]0$" + "QM,#R]@(]`0T````DY_0!!!!!Q5#!Q5%!!5\"\"!1#!Q5%!!!#$AY/UN08Y>L5=V!S" + "6#E'6SA!5S=!3S-!1C-(KEY:_R]/[````\\`$S0$Y^!!!#!Q%#!Q5%" + "!1-#!Q5%!A1$!Q5%!!)\"!!!!L[_P]0$QR-4%QM,#R-4%S]P,^@8V````B)3%!!!!" + "!Q-\"!Q-\"!15%\"!1%!!1$!A-&!1!!*C9EY?(@```^RHBX`@\\```````\\]``\\`" + "`P`````````^````Y>`A/DIY!!!!!A1\"\"!1'!A1$!A1$!A1$!Q5%!A1$!!)\"!!!!" + "K;GJ^04UR]@(Q]0$Q]0$S]P,V.45_`P\\GJK;!!!#!Q-&\"!1#!!-#!A1$!Q5#\"!-\"" + "!!1$!!!!*35HU.,2``````\\```X``0`````\\`````0````\\`BIC(!1!!!1%\"!Q5#" + "!A-&!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$" + "!A1$!A1$!A1$!Q5%!A1$!A1$!Q5%!!%!3%B)_0DY_@HZ^04U[_PL]0$Q`0T]````" + "]P,SM\\+TD)O->X>X_0DY````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````FJ;7/$AY" + "+CIKA9'\"[_PL`````````````````P\\_N\\?X!!!!!A)#!A1$!1-#!!%!!!)\"!!!!" + "!!)\"!A1$!A1$!Q5%!A1$!A1$!A1$!Q5%!A1$!!1$!!1$!A1$!A1$!Q5%!A1$!A1$" + "!Q5%!A1$!Q5%!Q5%!1-#!!)\"15&\"RM<'````````````````_0DYI+#A'BI;!!!!" + "!A1$!Q5%!A1$!A1$!A1$!A1$!A1$!A1$!!)\"!1%\"KKKK_PL[SML+QM,#Q]0$S]P," + "QM,#^@8VIK+C!!!!!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!!%!$Q]0D)S-]`0T" + "`P\\_````````````V.455V.4!!!!!1%\"!A1$!A1$!A1$!A1$!A1$!A1$!A1$!Q5%" + "!Q5%!Q5%!A1$!A1$!Q5%!A1$!Q5%!A1$!A1$!A1$!A1$!A1$!!)\"!!%!!!!!!!!!" + "\"!1%!1%\"@(R]_`P\\\\?XN\\O\\O^04U_@HZ`0T]\\_XOM\\'SHZ_@9G*CO,CY````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````P\\_J;7F+CIK+SML:76FJ;7FY_0D````" + "`````````P\\_6666!!!!!!%!(2]?IK+C?HJ[/DI[$AY/!!!!!!%!!!!!!A)#!A1$" + "!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!Q5%!1-#!Q5%!1-#!Q5%!A1$!Q5%!A1$" + "!!%!\"15&/DI[=H*SB)3%;7FJ+#AI!!!!!1%\"!A1$!A1$!A1$!A1$!A1$!Q5%!A1$" + "!Q5%!A1$!1-#!1%\"LK[O````U>(2QM,#R=8&T=X.R-4%_PL[GZO9W.DB)3%>H:W2%2%#AI+!!!!" + "!A)#!A1$!1-#!Q5%!Q5%!Q5%!A1$!A1$!A1$!A1$!Q5%!1-#\"!9&!Q5%!A1$!Q5%" + "!1-#!A1$!!)\"!!%!!!!!!!!!%2%215&\"C9G*G*C9#1E*!!!!PL[_^PX>^@8V\\/TMO,CY;WNL*35F!A)#!!!!!!!!!!)\"\"!9&!A1$!Q5%!A1$" + "!Q5%!A1$!Q5%!A1$!A1$!Q5%!A1$!A1$!A1$!A1$!A1$!!)\"!!%!!!!!!!!!!!!!" + "!1%\"!A1$!A1$!A1$!A1$!Q5%!A1$!A1$!A1$!A1$!A1$!A1$!!)\"!A)#N,3U````" + "X.T=Q-$!T=X.TM\\/R-4%_PL[ML+S!!!!!A)#!Q5%!1-#!Q5%!A1$!Q5%!A1$!A1$" + "!Q5%!A1$!Q5%!!%!!!!!!!!!!!!!!!%!!1-#!A1$!A1$!A1$!Q5%!A1$!A1$!1-#" + "\"!9&!A1$!A1$!A1$!A1$!A1$!A1$!Q-$\"!1%!1%\"!!!!!!!!!A)#,#QM=X.TPL[_" + "\\_`P^@8VUN,3AI+#!1%\"*35F[?HJ]`0T]`0T]P$RY.\\@OLCZGJC:@XV_4%J,H!!!!!A)#!!!!!Q-$(C!@7&B9IK+C" + "Y_0D_0DYU^04@X^`,#QM!A)#!!!!!!!!!1-#!A1$!A1$!Q5%!1-#!Q5%!A1$!A1$" + "!Q5%!A1$!A1$!Q5%!A1$!Q5%!A1$!A1$!Q5%!Q5%!Q5%!A1$!A1$!Q5%!A1$!A1$" + "!A1$!Q5%!A1$!A1$!A1$!Q5%!1-#!A)#OLK[````Z?8FP\\_`U^04S]P,RM<'_0DY" + "Y?(B%2%2!!!!!A1$!A1$!A1$!A1$!Q5%!A1$!A1$!Q5%!A1$!A1$!A1$!A1$!A1$" + "!Q5%!Q5%!A1$!A1$!Q5%!Q5%!A1$!A1$!Q5%!Q5%!A1$!A1$!A1$!A1$!Q-$!Q-$" + "!A)#!1%\"!!!!\"A9'.T=XD)S-WNL;^`@XW^PI,S]P3%B)ZO" + ".T=X-4%R;7FJ_`P\\````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````P\\_H*S==(\"QR-4%_`P\\````````````````````````````]P,S45V.!!!!" + "!A)#!A1$!Q5%!Q5%!!)\"!!!!!!!!!A)#-$!QBY?(W>H:^04UQ=(\"7VV=$B!0!!%!" + "!!%!!1-#!Q5%!A1$!A1$!Q5%!A1$!A1$!Q5%!A1$!1-#!A1$!A1$!Q5%!A1$!Q5%" + "!A1$!Q5%!A1$!A1$!Q5%!1-#!Q5%!A1$!Q5%!1-#!!)\")C)CZ/4E````Z?8FR=8&" + "QM,#Q=(\"U.$1`0T]````5&\"1!!!!!Q5%!A1$!A1$!Q5%!A1$!Q5%!A1$!1-#!Q5%" + "!A1$!A1$!A1$!A1$!Q5%!A1$\"!9&!1-#!Q5%!A1$!A1$!A1$!A1$!Q5%!A1$!A1$" + "!!!!!!!!&\"15;WNLTM\\/_0DYU>(2?XN\\*S=H!!%!!!%!!!)\"!!)\"!Q-$!A)#!!!!" + "!!!!\"A9'FJ;7`P\\_`@X^^`@X]P,S^`@X``\\`R=0%/DI[15&\"6666T]`0````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````^04UCIK+7&B9DI[/" + "T]`0^@8V`P\\_`````````````P\\_````_PL[=X.T!!!!!1%\"!A)#!1-#!Q5%!Q-$" + "!Q-$!A)#!1%\"!!!!!!!!.D9WFZ?8\\O\\O\\_`PF*35+3EJ!!!!!!!!!1%\"\"!1%!A1$" + "!Q5%!A1$!A1$!1-#!Q5%!A1$!A1$!Q5%!A1$!A1$!Q5%!1-#!Q5%!Q5%!A1$!Q5%" + "!A1$!A)#\"!1%!!!!!!!!9W.D````````W.D9V>86S=H*Q-$!Y?(B`P\\_`P\\_E*#1" + "!!!!!!!!!Q5%!Q5%!A1$!A1$!A1$!A1$!Q5%!A1$!Q5%!Q5%!A1$!Q5%!A1$!A1$" + "!A1$!A1$!A1$!A1$!Q5%!A1$!A1$!A)#!!!!!!!!-T-THZ_@]`0TZO(2W>H:" + "[_PL_PL[`````P\\_M\\/T*35F!!!!!!)\"!!%!!!!!!!!!!1%\"!!!!!1%\"!!!!!!!!" + "!!!!$!Q-9W.DUN,3`0T]M\\/T0DY_!1%\"!!!!!1-#!A1$!A1$!A1$!Q5%!A1$!A1$" + "!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!Q5%!A1$!A1$!A)#!!!!#QM,:G:G[?HJ" + "````_@HZSML+TM\\/S=H*S-D)^`@XVN<7Z/4E^P(2U%\"!1!!%!!!)\"!A1$!A1$" + "!Q5%!A1$!A1$!A1$!Q5%!A1$!Q5%!A1$!A1$!A1$!A1$!A1$!A1$!A1$!Q5%!1-#" + "!!!!\"!1%4%R-R-4%`P\\_R=8&5V.4#1E*!!!!!!!!!1%\"!Q-$!!!!!!!!!!!!\"1='" + "04]_A9'\"ML+SY/$A`@X^`````P\\__PL[\\?XNZ/,DZO4F]P$R[OHJ='^P0$Q]?8FZ" + "Z/4E````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````]0$QPX6WK;?IZ?8F````````]P,S" + "K+CI9W.D-D)S&B97&R=8&B97%\")2#1M+#1M+$AY/$Q]0#!A)!!!!!!!!.T=XOLK[" + "^@8VQ=(\"35N+!Q-$!!!!!1-#!Q5%!A1$!A1$!A1$!A1$!A1$!A1$!Q5%!A1$!Q5%" + "!A1$!Q5%!A1$!1%\"!!!!$AY/;WNLW^P<````````````Z_@HQM,#R=8&QM,#V.45" + "YO,CP,S]X.T=````````YO,C>H:W%2%2!!)\"!!)\"!A1$!A1$!1-#!Q5%!A1$!Q5%" + "!A1$!Q5%!A1$!A1$!A1$!Q5%!A1$!!)\"!!!!\"A9'86V>W>H:`@X^JK;G-4%R!!!!" + "!!!!!!!!!!!!!1%\"!!!!!A)#'BI;2U>(@(R]N,+TX^X?Z?0EZ?0EZ/,DZ_8G[_HK" + "[ODJZ?0EZ/,D\\O\\O`P\\__@HZBY?(.45VF*35_PL[````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````U-\\0" + "9W&C+3EJ$!Q-+CAJ>H2VK[OL^P(2TM\\/U.$1V.45T]`0P\\_`J[?HE*#1C9G*J;7FY?(B`P\\_R=8&45V.!A)#" + "!!%!!!)\"!Q5%!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!A1$!!%!$!Q-8>W$R%1!!%!!!)\"!Q5%!A1$!A1$!A1$!A1$!A1$!A1$!Q5%!A1$!!)\"" + "!!%!\"!9&9'\"AY?(B_@HZDY_0&B97!!!!!!!!!!!!$AY/-D)S04U^2%2%<7VNJ+3E" + "TM\\/Y/$AZ?0EX^X?V^87X>P=\\?PM^@0U\\_`P[/DI[OLK]P,S_`H[````^04UA)#!" + "+SML@8V^`P\\_`P\\_````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````^P$!Q-!!%!!1-#!A1$!1-#" + "!A1$!1-#!A1$!A1$!!%!!!!!5V.4W>H:`````````````````````````P\\_W^P<" + "Q]0$Q]0$R=8&Q]0$Q=(\"T]`0`````P\\_`````````P\\_````````X^`@8&Z>!!)\"" + "!!%!!1-#\"!9&!A1$!A1$!A1$!A1$!A)#!1%\"!A)#56&2W.D9^04UA9'\"$AY/!!!!" + ".T=X>H:WB)3%G*C9S-D)[?HJ]@(R^@8V^@8VZO4FWND:W.<8V^87X.LP=" + "XNT>Z_@H`0T]`````@X^]`0T\\/LLO\\O\\35F*)S-D6V>8]0$Q````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "_@HZK[GKIK'BK;?IM;_QQ],$X>X>]`(S`PT^`@P]]P,SZ?8FXN\\?^`@X`P\\_````" + "````^@8V]`0T````````_0DY\\?PM[/`AY>`AYO$BZ_@HYO,CX.L05V^87Z/,D_PDZ``\\`^`8W]`0T``````\\`\\?PMX.L<" + "W.<8V>05V.,4WNL;^@8V`P\\_`````````````````````````````````P\\_````" + "````U>(2.45V!!%!!1-#!A1$!1%\"-T-TWNL;`````````````````````P\\_````" + "`````P\\_`P\\_\\O\\OR=8&Q]0$R-4%R-4%QM,#[/DI`````P\\_````````````````" + "`P\\_````````````Z/4E/TM\\!!)\"!A1$!1%\"!!!!+#AIK[OL^P(2K[OLN,3U" + "V^@8_0DY`````````P\\_`P\\_`````@X^^`@X]`0T]`0T^04U_0@9X.L05V^87W.<8WND:T-L,BY7'3UF+8V^@I[/D" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````Z/4E8&R=1E*#BI;'U^04\\_`P````\\_`P\\/TM]/\\P[_HKV^87" + "T]X/QM$\"O,;XO,;XQ<`!VN46Z_8GY>`AWND:WND:X.LVN46T=P-R-,$OLCZN,+TN@9W.<8W^H;Y>`AZ_8GT]X/CIG+K[OL````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````_PL[AI+#" + "256&,CYO+CIK/4EZCIK+`P\\__PDZXNT>V^87VN46T-L,P\\W_N\\7WK+;HGJC:FZ77" + "GJC:I:_ALKSNNL3VPLS^Z/,D_@HZ`````````````````````P\\_````````````" + "`````````````P\\_`````P\\_````````U.$16F:7S]P,`````````P\\_`````P\\_" + "````````````````````````V^@8D)S-56&2.D9W0$Q]2E:'8V^@JK;G_PL[````" + "`````````````````P\\_`````````````````P\\_U>(27FJ;Y?(B`0T]Y_0D\\O\\O" + "`````````P\\_`0T]`P\\_`@X^`@X^`P\\_`0T]_PL[]0$QZO@9W>@9X.LT=E9_1F:36]P,S````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````ML+S4%R-/4EZ)C)C&256;GJK]P,S" + "W^H;V>05V^87V^87W.<8W>@9W.<8V.,4T=P-Q,[`ML#RK+;HJK3FI['CGZG;F:76" + "G*C9J;7FN<7VS-D)WND:ZO4F\\?PM]0$Q^@8V`0T]````````````````````````" + "````I[/DGJK;`````````````````````````````````P\\_````````ZOJ;/EL+KLLKSNO,;XQ<`!" + "TMT.V^87W^H;XNT>X.L(*TH*O<^P81E\"\"8VV?ML#RX.P=WND:V^87W.<8V^87V^87VN46V^87" + "V^87V^87W>@9WND:X>P=X.L@9V>05T=P-P\\W_M<'RKKKKH*S=EZ/4FZ?8J[?H" + "R-,$V^87XNT>Y_(C]P$R````````````````````````2E:'45V.````````````" + "`P``````````````````````````ZO05WND:X.LP=W^H;W^H;^0,T`@X^`@X^_`P\\^`@X" + "`P\\_\\/LLG*;8:'2EO,CY`P\\_````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````OLK[DY_0J;7F" + "X^X?\\OTNZ?0EY.\\@WND:V^87VN46V^87V^87V^87V^87V>05V^87VN46W.<8V^87" + "V^87V^87WND:]?`Q````````_@HZ[/DIU^04O,CYIK+CH*KX>+CIKTM\\/`````P\\_````/DI[6666````````````````" + "_0DYY?(BR=8&K[OLH:W>FZ?8I+#ALK[OP,K\\S=@)V.,4X.LX.L@9W>@9" + "W.<8W.<8W.<8V^87X.L<^0,T^PAY+$Z/4E`P\\_````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````Z_@HN,3UI;'BDY_0CYK+KKCJVN46\\/LL" + "[/H:Y_0D" + "[?HJ]P,S`@X^`````@X^[_PLTM\\/M<'RG:G:F:76L+SMS]P,[OLK````R]@(%1]1" + "RM4&]`(S````UN,3@X^`]P,S`````````````P\\_````256&%R-4UN,3````]@(R" + ">X>X#AI+!1%\"\"!1%!Q-$\"!1%\"15&!!!!$Q]0Z?8F`````P\\_````````[/DI;WNL" + "WNL;````````````=8&R,#QM_@HZ_`P\\\\?XNS]P,J[?HFJ;7H:W>NL;WUN,3\\_`P" + "`````@X^X>X>V^87W.<8VN46VN46VN46W.<8V^87W.<8W.<8V^87V^87V>05V>05" + "V>86YO,C`@X^````>(2U/TM\\[OLK````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````_PL[E:'276F:256&.45V-$!Q?8FZX>X>````Y/$AV>05V^87V>05V>05" + "V^87VN46V^87V^87VN46W.<8V>05W.<8[/DI^@8V_PL[`0T]`P\\_`@X^`@X^````" + "````````_`P\\Z_@HS=H*L[_PH*S=M,#QDY_01%\"!T]X/[?@I````````````````" + "`````P\\_````````````@HZ_!!!!6&25GZO<5V.4\"!1%!1%\"\"!1%\"!1%\"15&\"!1%" + "\"!1%!!!!.$1U`@X^`````````P\\_`````````````````````````@X^EZ/42E:'" + "QM,#LK[OJ;7FML+ST]`0\\?XN````````````````````_`P\\\\?XNZ?0EX>P=WND<" + "W>@;WNL;W^H;WND:W>@9W>@9^@0U\\OTNYO,CY>`A]`0T````````V.4535F*-4%R" + "D)S-`@X^````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````]@(RO\\O\\D)S-" + "=(\"Q6666,S]P97&BZ_@H_0DYXN\\?WNL;WND:W>@9V^87V^87V^87V^87VN46VN46" + "W>@9^P4V``````\\``````````````P\\_`````````P\\__PL[]P,Q]P,Q^`@V`@X\\" + "^PHL+SMML+S?HJ[/DI[L;WNY/$A_PL[````````````" + "`@X^`P\\__@HZ^@8V^04U^@8V`0L\\`````````0T]_`P\\_PL[_`P\\^@8VW.<8WND:" + "[OLK`````P\\_````]0$QGJK;3EJ+(\"Q=-D)S?(BY>X>XZ/4E````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````X>X>35F*,3UND9W.````" + "`P\\__`P\\_PL[_@HZ^`@XWND:V.,4V>05VN46VN46X.L<]@(R]P,S]P$R\\_`P\\O\\O" + "]0$Q]0$Q]0$Q]0$Q]P,S_PL[`@X^`0T[^@8T\\_`N_0DY````H*S=)3%BS=H*GZO<" + "2%2%V>86`@X^2E:'B97&`````P\\_`````````P\\_U^04)3%B!!!!!1%\"\"!1%\"15&" + "!Q-$\"15&!Q-$!!!!!Q-$FJ;7`````P\\_`````````P\\_?8FZ5&\"1````V^@8,#QM" + "J[?HR-4%CYO,'RM<[?HH`P\\_`P\\_`0T]`P\\_`@X^`@X^`P\\__0DYZ_T;W^L9" + "X^\\=[OLI]0$O\\_`N]@(P`@X^`0T]X^`@Z?8F_`P\\_`P\\`@X^`@X^````R-4%0$Q]" + "6V>8FJ;7XN\\?````R=8&]@(R````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````^@8V;'BI0T]`V>86X^X?\\?XN`````````P\\_`P\\_`P\\_" + "`````````````````P\\_Z?8F86V>\"A9'!!!!!!!!!!!!!!!!!!!!-T-TP86E:'2;'BI9G*C@X^`P(/DI[@X^`" + "X.T=[/DI_PL[`````````@X^`P\\_`P\\_````[?@IX>P=Z/,D[ODJ\\?PM]/\\P]/\\P" + "]?`Q^0,T_0(2[OLK^`@X````````````````````" + "`````````````````P\\_````_0DYZ?0EX.LW.<8\\O\\O`````P\\_`````````````````P\\_`````P\\_`P\\_\\_XO" + "[ODJF:/5-4%RU>(2YO$BZ_8G]`(S`0T]`````````````````P\\_````````]`(S" + "Y.\\@V.,4Z?0E<'RM'\"A9]@(R`P\\_`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^" + "`P\\_`@X^`P\\_`0T]`P\\_`@X^`0T]`@X^````]@(RN\\?X<7VN2U>(56&2:76FCYO," + "T]`0`@X^````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````````````````````````P\\_`````P\\_" + "M,#Q0T]`/$AYH*S=]P,S````````````_`P\\^@8V]P,SYO$BW>@9XNT>^`8W^`8W" + "^`8W^`8W^`8W^`8W^P4V^`8W^`8W^`8W``\\`\\?XN&\"153%:(Y>`AW.<8W.<8[?@I" + "^`@X`0T]`P\\_`P\\_`@X^_PL[^P@9" + "W.<8Y_0B\\_`N^`@V_0DW_0DW_0DW]P,QZ?8DW^H;V>05Y.\\@OLK[!A)#>(2U````" + "`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`0T]`P\\_" + "`@X^`@X^````BI;'+CIK3UN,JK;GV>86]`0T````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````````````P\\_L+SM8V^@>86VF:76M,#Q" + "L+SMAY/$:W>HUN$2X>P=WND:X^X?]/\\P_@@Y_0H2VZO4FWND:V.,4W^H;Y>`AZ/,DZO4FZ/,DX^X?" + "WND:W.<8Z/,DNL3V)#!A!1%\"!A)#!!!!7VN05Y>`ATMT.+SML$!Q-Y/$A`````@X^`@X^`@X^`@X^`@X^`@X^" + "`@X^`@X^`@X^`@X^`0T]`@X^`P\\_`@X^`@X^`@X^`P\\_````````GJK;0$Q]R-4%" + "`````P\\_````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````P\\_X>X>7FJ;/$AY0T]`.T=X%R-4>X>XZO4FX>P=X>P=" + "^P4V``\\``0L\\]?`Q\\?TKZ_IVN46Z/,DW^H;V^87V^87V>05VN46W^H;YO$BXNT>DIS.%R-4!!!!!Q-$" + "\"!1%\"!1%!!!!0DY_O\\O\\Z/,DX^X?W>@9VN46VN46VN46W>@9X^X?ZO4FO,;X,CQN" + "!!!!BY?(`````@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^`@X^" + "`@X^`@X^`P\\_````_@HZS-D)AY/$3EJ+?(BY_@HZ````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````V.45@X^`15&\",S]P?XF[Z/0DY>`AZ/,D]?`QZ/4EL+SMFJ;7K[KIPP=Y.\\@V^87R-,$EJ#2/TE[!1!!!1%\"!Q-$\"!1%\"!1%\"!1%\"!1%!!!!$Q]096^A" + "L+KLT]X/W^H;Y>`AX.LH:`````@X^`P\\_`@X^`@X^`@X^`@X^`@X^`P\\_`P\\_````" + "````````````````_PL[V^@8DY_01E*#2E:'=X.TS]P,`P\\_````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````G:G:4EZ/9G*C:76F3%B)*#1E(\"Q=(\"Q='\"A9" + "&R=8K[GK``X__@@Y^`8W_0H7VN<:76F<7VN6V>8,#QM)#!A97&B^P4V`0L\\_05V$@V&%C66+C&*)*2=5*2A3A6.%B62&@V&%?EZ\"" + "`````````0T]`@X^`@X^`@X^`0T]`@X^`@X^`P\\_````^`@XD)S-.D9W15&\"8FZ?" + "Z/4E`P\\_````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````````P\\_````````HJ[?4U^086V>6&25" + ";7>IDYW/S-<(W^H;]P$R_@@Y^`8W_@@Y^P4V^`8W^P4V^PTXB=VHB@X(JBWXR?XXVCYHZE" + "Z9\"EZXVD_YJKDF\"\"!1!!!Q-$\"11#!1!!-D1T]0$Q`````0T]`@X^`@X^`P\\_`@X^" + "````````````````PL[_6V>81E*#56&2A)#!W^P<````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````P\\_`P\\_R=8&?XN\\4U^01%\"!2E2&D)O,WND:_0(I[/DM,#QLKSNY>`AW>@9Z?0E^`8W^`8W^`8W" + "^`8W_0(6&25;'BIO\\O\\`P\\_````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````N,3U" + "76F:3EJ+/TM\\-D)SI+#AZ_8GX.L`A^P4V_0!!)\"!1)%!1!!+#%86T!1)\"!Q!!!!!##!A)" + "9V\"*R['/]='K`MKS`-KT\\M#JQ:[,7UJ#\"!1%!!%!!A)%!!%!+3EJT=T)``\\``@`_" + "`@X^`@X^````U^0415&\",3UN1E*#GJK;YO,C````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````^@8VM,#Q45V.0$Q]0$Q]BI;'IK+CVN<7`P\\_````" + "_PDZ^P8V_PDZ`@X^````````M\\/T+#AI!!!!!!!!!!!!\"!1#*\"]=1D1R14-Q*2U;" + "\"11!!!!!!!!!!!!!!A)#9'\"A[OLK`````@X^`P\\_`@X^````ZOH:````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````X>X>F:765&\"1.T=X,S]P/$AY97&BFZ?8\\_XO`PT^^`8W_0DY`0T]`P\\_" + "````]@(RG:G:15&\"$AY/!!!#!1!!!Q!!!1!!!!!!!!%!!1)%)#!A:G:GS=H*`P\\_" + "`````@X^`@X^`0T]`````0T]=(\"Q.T=X?HJ[]@(R`````P\\_````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````````````````````````P\\_[?HJKKKK" + "@HZ_8V^@04U^-D)S6666X^`@``X_^`@X^`@X`0T]`@X^`````````@X^Y?(BN\\7W" + "EZ/4A)+\"?XV]BI;)I+#CS=H*]@(P`P\\_`````P\\_`@X^`@X^`@X^`P\\_]0$Q>X>X" + "0DY_D9W._PL[`P\\_`P\\_````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````````````````P\\_`````P\\_`@X^Y_0DE:'21U.$86V`@X^`````P\\_`@X^`@X^`@X^`@X^`0T]`P\\_" + "`@X^`@X^_`X]`P\\``@X``@X^`@X^`P\\_````Y/$A7&B98&R=[?HJ````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````WNL;" + ";WNL<7VNP\\_``0T]`````````@X^`PX\\`PT^`0T]`@X^`P\\]`@X^`PT^`PT^`P\\_" + "`````P\\_O,CY2%2%6V>8V>86`P\\_````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````\\/TMBY?(4EZ/;WNLO,CY]0$Q" + "`````````````P``````````````````````````Y?(BB97&0T]`BI;'[OLK````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "`````````````````````P\\_UN,3BI;'4EZ/56&2CYO,L;WNPHS-D)`````P\\_````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````\\/TML;WN;7FJ4EZ/3EJ+35F*56&26&256V>886V>>X>XJ+3EV.45_PL[" + "`````P\\_````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````_PL[[?HJ" + "YO,CV^@8RM<'R]@(W.D9]@(R`````````P\\_````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````H[GSA)_>A*#AA*'BA*'BA*'BA*'BA*'BA*'BA*'BH[OX````````````````" + "````````````````````````````````H[GSA)_>A*#AA*'BA*'BA*'BA*'BA*'B" + "A*'BA*'BA*'B````````````````````````H[GSA)_>A*#AA*'BA*'BA*'BA*'B" + "X_0H````````````````````X_,FA)[A*#AA*'BA*'BA*'BA*'B" + "X_0H````````````X_,FA)[,!4>J!4ZW!4ZW!4ZW!4ZW!4VUT^HB````````````````````````````" + "````````````````````P]<-!#>,!4>J!4ZW!4ZW!4ZW!4ZWP]X:````````````" + "````````````1&BO!$\"=!4NS!4ZW!4ZW!4ZW!4ZWP]X:````````````````1&JT" + "!4.C!4VU!4ZW!4ZW!4ZW!4ZW!4ZW=9_M````````````````````````````````" + "````````X_,F%#^-!$&@!4RT!4ZW!4ZW!4ZW!4ZW!4ZWP]X<````````````````" + "````````````````````````````````````````````````````````````````" + "````````P]<-1&>M!#:*!#Z9!46G!4NS!4ZW!4VW!4NR%5&O=)C@\\`(T````````" + "````````````````````1&RV!5&^!6;F!6KM!6KM!6KM!6KM!6KM!6KM!6KM!6GL" + "L]<=````````````````````````````````````````T^49!#J1!5C+!6GK!6KM" + "!6KM!6KM!6KM!6KM!6KM!6KM!6KM````````````````````````1&RV!5&^!6;F" + "!6KM!6KM!6KM!6KMP^0E````````````````````P]<.!$&@!5[6!6KM!6KM!6KM" + "!6KM!6GL18KQ````````````````````````````````````````````````P]<." + "!$&@!5[6!6KM!6KM!6KM!6KMP^0E````````````````````````1&RV!5&^!6;F" + "!6KM!6KM!6KM!6KMP^0E````````````````X_4I%5F_!6/@!6GL!6KM!6KM!6KM" + "!6KM!6/AT^PF````````````````````````````````````5'2W!$&>!5O1!6CJ" + "!6KM!6KM!6KM!6KM=;(/````````````````````````````````````````````" + "````````````````````````````````````````\\`(S5'2W!#:+!4:H!57&!6#:" + "!67E!6GK!6KM!6GL!6CJ!63C!5S4%5O!L\\X,````````````````````````1&VY" + "!5?)!6[V!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_=;$.````````````````````" + "````````````````````DZSH!4.C!6/A!7/^!7/_!7/_!7/_!7/_!7/_!7/_!7/_" + "!7/_````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````" + "````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_!7/_!6WSD[\\+````````" + "````````````````````````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_" + "P^4I````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````" + "````````````````D[7Z!5_8!7#Y!7/_!7/_!7/_!7/_!7'[-8/P````````````" + "````````````````````L\\?`!#>,!53#!6SQ!7/^!7/_!7/_!7/_)8@&\\`8[````" + "````````````````````````````````````````````````````````````````" + "````````````\\`(S-%B?!#V7!5*`!6/A!6WT!7+]!7/_!7/_!7/_!7/_!7/_!7/^" + "!7#Z!6KM!5S3H\\4(````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_" + "!7/_!7/_!7/_!7/_-8K^````````````````````````````````````````5'>\\" + "!4RT!6GK!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_````````````````````" + "````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````P]@.!46F" + "!67D!7/_!7/_!7/_!7/_!7/_!7+]%7+M\\`0W````````````````````````````" + "````````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````````````````````" + "````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````````-7'." + "!6?H!7+^!7/_!7/_!7/_!7/_!6[UA;4&````````````````````````\\`(S%#^," + "!4FN!67C!7'\\!7/_!7/_!7/_!7/_L]XI````````````````````````````````" + "````````````````````````````````````````````````````5'2W!#V7!5?)" + "!6KN!7'\\!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/^!6_X!6+>T^LE````" + "````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_!6_XX_DR" + "````````````````````````````````````!#:*!57&!6[U!7/_!7/_!7/_!7/_" + "!7/_!7/_!7/_!7/_!7/_````````````````````````1&VY!5?)!6[V!7/_!7/_" + "!7/_!7/_P^4I````````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_!7/_" + "!7/_!7#Y9:'^````````````````````````````````````````P]@.!46F!67D" + "!7/_!7/_!7/_!7/_P^4I````````````````````````1&VY!5?)!6[V!7/_!7/_" + "!7/_!7/_P^4I````````````````````````T^@?!5?*!6[U!7/_!7/_!7/_!7/_" + "!7+^!6CJX_@O````````````````````9('#!#^:!5S4!6_X!7/_!7/_!7/_!7/_" + "5:01````````````````````````````````````````````````````````````" + "````````````````````````P]<-!#:+!5*`!6KN!7+^!7/_!7/_!7/_!7/_!7/_" + "!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7#Z)7;H````````````````1&VY!5?)!6[V" + "!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7+^H\\\\;````````````````````````" + "````````P]<-!#R6!5_8!7'\\!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_````" + "````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````" + "````````P]@.!46F!67D!7/_!7/_!7/_!7/_!7/_!7/_!7/^!6KOP^$@````````" + "````````````````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````" + "````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````" + "````````````````A:KS!6'=!7'[!7/_!7/_!7/_!7/_!7'[18ST````````````" + "````P]<-!#:*!5*_!6KO!7/^!7/_!7/_!7/_%7X\"\\`8[````````````````````" + "````````````````````````````````````````````````````````````````" + "5'6Y!46G!6/@!7'\\!7/_!7/_!7/_5:01X_PV````\\`4ZD\\06%7/Q!7#Y!7/^!7/_" + "!7/_!7/_!6[UL]<;````````````1&VY!5?)!6[V!7/_!7/_!7/_%7X\"!7/^!7/^" + "!7/_!7/_!7/_9:<*````````````````````````````````A)_=!46F!67D!7/_" + "!7/_!7/_%7X\"!7/^!7/^!7/_!7/_!7/_!7/_````````````````````````1&VY" + "!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````P]@.!46F!67D!7/_" + "!7/_!7/_!7/_!7/_!7/_!7/_!7'\\)7GM````````````````````````````````" + "````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````````````````````````1&VY" + "!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````````````````-7+1" + "!6CJ!7+^!7/_!7/_!7/_!7/_!6WSD[X*````````\\`(S)$R6!4>J!6/A!7'\\!7/_" + "!7/_!7/_!7/_H]0E````````````````````````````````````````````````" + "````````````````````````````````````\\`(S!#:)!53#!6WS!7/_!7/_!7/_" + "A<$>````````````````````L]06!6+=!6_X!7/_!7/_!7/_!7/^=;$,````````" + "````1&VY!5?)!6[V!7/_!7/_!7/_19H-%7G]!7'[!7/^!7/_!7/_%7;W````````" + "````````````````````````-%RG!4^Y!6KN!7/_!7/_!7/_5:01!6_X!7'[!7/_" + "!7/_!7/_!7/_````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_" + "P^4I````````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_!7/_!7/_!7/_" + "!7/_!6[VA;4'````````````````````````````````P]@.!46F!67D!7/_!7/_" + "!7/_!7/_P^4I````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_" + "P^4I````````````````````````````````P]L5!5C,!6[U!7/_!7/_!7/_!7/_" + "!7+]%7+MX_@N````=)#0!#V7!5K/!6[V!7/_!7/_!7/_!7/_19H.````````````" + "````````````````````````````````````````````````````````````````" + "````````````L\\?`!#Z:!6#:!7'\\!7/_!7/_%7X\"````````````````````````" + "````)63%!6?G!7/^!7/_!7/_!7/_190#````````````1&VY!5?)!6[V!7/_!7/_" + "!7/_19@*59X&!6OP!7'[!7/_!7/_!7'[T^XL````````````````````````\\`(S" + "!#B.!5G,!6_X!7/_!7/_%7X\"A;\\:!6CI!6[U!7/_!7/_!7/_!7/_````````````" + "````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````" + "P]@.!46F!67D!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/^%7+OX_@O````````" + "````````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````````````" + "````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````" + "````````````````=9[K!6+?!7'[!7/_!7/_!7/_!7/_!7#Y59;YT^DB!#F0!5\"[" + "!6GL!7/^!7/_!7/_!7/_%7X\"X_PV````````````````````````````````````" + "````````````````````````````````````````````````````X_0GA*CO9:'^" + "198&%7G\\!7'\\9:T4````````````````````````````1'&`!5W5!7'[!7/_!7/_" + "!7/_19<(````````````1&VY!5?)!6[V!7/_!7/_!7/_19<)D\\47!6/@!6WT!7/_" + "!7/_!7/^D\\06````````````````````````L\\?`!#^:!6'K!6;F!7/_!7/_!7/_D\\D?A;@,!5O0!6KM!7/_!7/_!7/_" + "!7/_````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````" + "````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_" + "!7/^!6SRL]89````````````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_" + "P^4I````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````" + "````````````````````````````````````P]L6!5K/!6[V!7/_!7/_!7/_!7/_" + "!7'\\!6OP!6CI!6[U!7/_!7/_!7/_!7/_19H.````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````T^49!#J2" + "!5O2!7#Z!7/_!7/_!7/_H],B````````````1&VY!5?)!6[V!7/_!7/_!7/_19<)" + "````%5S%!6/A!7/^!7/_!7/_!6[U````````````````````````-%RH!5\"\\!6OO" + "!7/_!7/_!7/_T_$PA;,#!5;'!6KM!7/_!7/_!7/_!7/_````````````````````" + "````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````P]@.!46F" + "!67D!7/_!7/_!7/_!7/_-9$*!7'\\!7+^!7/_!7/_!7/_!7+])7KP\\`0W````````" + "````````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````````````````````" + "````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````````````" + "````````````````58;:!63B!7'\\!7/_!7/_!7/_!7/_!7/^!7+]!7/^!7/_!7/_" + "!7/_!7/_T_(R````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````X_,F-%FB!4:I!63C!7+^!7/_!7/_)8@&````" + "````````````1&VY!5?)!6[V!7/_!7/_!7/_19<)````58?````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````P]<-L\\D!" + "=)'3%$.4!42D!5O1!6[U!7/_!7/_!7/_P^@M````````````````1&VY!5?)!6[V" + "!7/_!7/_!7/_19<)````D[;[!57%!6WT!7/_!7/_!7/_=;$-````````````````" + "H[KT!$&>!6+=!7+^!7/_!7/_9:T5````A:KS!4^Y!6KM!7/_!7/_!7/_!7/_````" + "````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````" + "````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^8JH\\P5!6'=!7#X!7/_!7/_!7/_" + "!7/^!6GLT^PG````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````" + "````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````" + "````````````````````````````````````L\\\\-!5S4!6_X!7/_!7/_!7/_!7/_" + "!7/_!7/_!7/_!7/_-9$*````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````T^49!#&!!#^!5*`!6SR!7/_!7/_!7/_X_LU````A*3H!4ZW!6KM!7/_" + "!7/_!7/_!7/_````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_" + "P^4I````````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````X_8K" + "!57&!6WS!7/_!7/_!7/_!7/_!6WSH\\H2````````````P]@.!46F!67D!7/_!7/_" + "!7/_!7/_P^4I````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_" + "P^4I````````````````````````````````````````````````````X_4J!57&" + "!6WS!7/_!7/_!7/_!7/_!7/_!7/_9:T6````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````DZSI!4:I!6;F!7/_!7/_" + "!7/_!7/_!7/_9:T3P^0G````````````````````````1&VY!5?)!6[V!7/_!7/_" + "!7/_19<)````````5'[*!5W5!7'[!7/_!7/_!7+^H\\X;````````X_,F!#J1!5O2" + "!7#Z!7/_!7/_)8@&````````A*+D!4ZW!6KM!7/_!7/_!7/_!7/_````````````" + "````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````" + "P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````````A:GQ!6#;!7'[!7/_!7/_!7/_" + "!7+]%7'L\\`0W````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````````````" + "````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````" + "````````````````````````````````L\\H#!4BL!6?G!7/_!7/_!7/_!7/_!7/_" + "!7/_-8X%````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````A*#@!4NR!6CJ!7/_!7/_!7/_!7/_!7/_!6_W!6#:17O5" + "\\`,U````````````````1&VY!5?)!6[V!7/_!7/_!7/_19<)````````H[W[!53$" + "!6WS!7/_!7/_!7/_9:<)````````DZOH!$&@!6+?!7/^!7/_!7/_9:T4````````" + "A*'B!4ZW!6KM!7/_!7/_!7/_!7/_````````````````````````1&VY!5?)!6[V" + "!7/_!7/_!7/_!7/_P^4I````````````````````P]@.!46F!67D!7/_!7/_!7/_" + "!7/_P^4I````````\\`(T)6?*!6GL!7/^!7/_!7/_!7/_!7#X9:#]````````P]@." + "!46F!67D!7/_!7/_!7/_!7/_P^4I````````````````````````1&VY!5?)!6[V" + "!7/_!7/_!7/_!7/_P^4I````````````````````````````````````````````" + "````\\`(S%#^-!4NS!6CJ!7/_!7/_!7/_!7/_!7/_!7/_!7#XA;<)````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````5'B^" + "%5O!19/`19@*!7#X!7+]!7/_!7/_!7'\\!6SR!6/A%6#+X_8K````````````1&VY" + "!5?)!6[V!7/_!7/_!7/_19<)````````X_0H!4JP!6CI!7/_!7/_!7/_)8#\\````" + "````5'>\\!4NR!6CJ!7/_!7/_!7/_H],C````````A*'B!4ZW!6KM!7/_!7/_!7/_" + "!7/_````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````" + "````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````````````P]L6" + "!5K/!6[V!7/_!7/_!7/_!7/^!6KOP^$@````P]@/!46F!67D!7/_!7/_!7/_!7/_" + "P^4I````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````" + "````````````````````````````````````````````5'2W!#^K!67D" + "!7/_!7/_!7/_!7/_P^4I````````````````````````1&VY!5?)!6[V!7/_!7/_" + "!7/_!7/_P^4I````````````````````````````````````````\\`(S)$R6!4>K" + "!63B!7'\\!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_!6WSD[\\+````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````P]L5!5C+!6WT!7/_!7/_!7/_!7+^-8;W````````1&VY!5?)!6[V" + "!7/_!7/_!7/_19<)````````````H[WZ!5*`!6SR!7/_!7/_!7/_59X&D[P&!4NR" + "!6/A!7/^!7/_!7/_=;88````````````A*'B!4ZW!6KM!7/_!7/_!7/_!7/_````" + "````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````" + "````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````````````````````D[7Y" + "!5[8!7#Y!7/_!7/_!7/_!7+^%7+NH\\D/!4^Z!6;F!7/_!7/_!7/_!7/_P^4I````" + "````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````" + "````````````````````````````=)#/!#V7!5K/!6[V!7/_!7/_!7/_!7/_!7/_" + "!7/_!7/_!7/_!7/_!7/_!7+]%7+MX_@N````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````%52S!6;F" + "!7/^!7/_!7/_!7/_!6[V\\`0Y````1&VY!5?)!6[V!7/_!7/_!7/_19<)````````" + "````X_0H!4FO!6?I!7/_!7/_!7/_!6[U18KQ!5G-!6GL!7/_!7/_!7/_L]TG````" + "````````A*'B!4ZW!6KM!7/_!7/_!7/_!7/_````````````````````````1&VY" + "!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````P]@.!46F!67D!7/_" + "!7/_!7/_!7/_P^4I````````````````````````-7'.!6?H!7+^!7/_!7/_!7/_" + "!7#Z)7GM!5S4!6GL!7/_!7/_!7/_!7/_P^4I````````````````````````1&VY" + "!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````````````````````" + "P]<-!#6)!5\"\\!6GL!7/^!7/_!7/_!7/_%7X\"5:01!7#Y!7'\\!7/_!7/_!7/_!7/_" + "!7#Y18OR````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````1'&`!5[7!7'\\!7/_!7/_!7/_!7+^P^0G" + "````1&VY!5?)!6[V!7/_!7/_!7/_19<)````````````````)%NR!6+?!7/^!7/_" + "!7/_!7'\\!6OP!6CI!6[U!7/_!7/_!7/_\\`4Z````````````A*'B!4ZW!6KM!7/_" + "!7/_!7/_!7/_````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_" + "P^4I````````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````````" + "````````````````P]L4!5C+!6[U!7/_!7/_!7/_!7/^!6[V!6KO!6_X!7/_!7/_" + "!7/_!7/_P^4I````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_" + "P^4I````````````````````````````````````-%FB!4:H!6+?!7'[!7/_!7/_" + "!7/_!7/_D\\HA\\`4Z)7?I!6KO!7/^!7/_!7/_!7/_!7/^!6SRL]89````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````T^49\\`(S````````````````````````" + "````````1&ZZ!5G-!6_X!7/_!7/_!7/_!7/_P^4I````1&VY!5?)!6[V!7/_!7/_" + "!7/_19<)````````````````9(K3!5O2!7#Z!7/_!7/_!7/_!7+]!7'[!7+]!7/_" + "!7/_-9$*````````````````A*'B!4ZW!6KM!7/_!7/_!7/_!7/_````````````" + "````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````" + "P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````````````````````````````99+B" + "!6/@!7'\\!7/_!7/_!7/_!7/^!7+]!7/^!7/_!7/_!7/_!7/_P^4I````````````" + "````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````" + "````````````A)W;!#N3!5C,!6[U!7/_!7/_!7/_!7/_19H.````````P]X:!5O1" + "!6[V!7/_!7/_!7/_!7/_!7+]%7#K\\`0W````````````````````````````````" + "````````````````````````````````````````````````X_,FA)[<5'>]1&RV" + "%$67!#J1!#V7H\\#`````````````````````````````````-&\"N!5C+!6_W!7/_" + "!7/_!7/_!7/_P^4I````1&VY!5?)!6[V!7/_!7/_!7/_19<)````````````````" + "H[WZ!5*`!6SR!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_=;88````````````````" + "A*'B!4ZW!6KM!7/_!7/_!7/_!7/_````````````````````````1&VY!5?)!6[V" + "!7/_!7/_!7/_!7/_P^4I````````````````````P]@.!46F!67D!7/_!7/_!7/_" + "!7/_P^4I````````````````````````````\\`(U%5['!6KO!7/^!7/_!7/_!7/_" + "!7/_!7/_!7/_!7/_!7/_!7/_P^4I````````````````````````1&VY!5?)!6[V" + "!7/_!7/_!7/_!7/_P^4I````````````````````````````T^49!#2&!4ZW!6CJ" + "!7+^!7/_!7/_!7/_!7/_X_PV````````````99+B!6/A!7'\\!7/_!7/_!7/_!7/_" + "!6_X593V````````````````````````````````````````````````````````" + "````````````````````````X_,F!#:)!4BL!53#!5C,!5W5!6'<99_[````````" + "````````````````````\\`(S!#F0!5O1!7#Z!7/_!7/_!7/_!7/_\\`4Z````1&VY" + "!5?)!6[V!7/_!7/_!7/_19<)````````````````X_0H!4FO!6?I!7/_!7/_!7/_" + "!7/_!7/_!7/_!7/_!7/_L]TG````````````````A*'B!4ZW!6KM!7/_!7/_!7/_" + "!7/_````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````" + "````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I````````````````" + "````````````````H\\(\"!5W5!7#X!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_" + "P^4I````````````````````````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````" + "````````````````````````1&:L!42D!6'=!7'[!7/_!7/_!7/_!7/_A<$>````" + "````````````\\`(U%5['!6KO!7/^!7/_!7/_!7/_!7/^!6OPP^$@````````````" + "````````````````````````````````````````````````````````````````" + "````)%:J!5O1!6SR!6_X!7'\\!7/^%7;W\\`0X````````````````````````DZOG" + "!$\"=!6'=!7+^!7/_!7/_!7/_)8@&````````1&VY!5?)!6[V!7/_!7/_!7/_19<)" + "````````````````````)%NR!6+?!7/^!7/_!7/_!7/_!7/_!7/_!7/_!7/_````" + "````````````````A*'B!4ZW!6KM!7/_!7/_!7/_!7/_````````````````````" + "````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````P]@.!46F" + "!67D!7/_!7/_!7/_!7/_P^4I````````````````````````````````````17O5" + "!6;F!7+]!7/_!7/_!7/_!7/_!7/_!7/_!7/_!7/_P^4I````````````````````" + "````1&VY!5?)!6[V!7/_!7/_!7/_!7/_P^4I````````````````````````DZOF" + "!#J1!5;(!6WS!7/_!7/_!7/_!7/_-9$*````````````````````````L\\\\,!5S4" + "!6_X!7/_!7/_!7/_!7/_!7'\\)7GN\\`,W````````````````````````````````" + "````````````````````````````````````````````9(K3!5O2!7#Z!7/_!7/_" + "!7/_!7'[9:'`````````````````````T^49%$&1!4ZW!6GL!7/_!7/_!7/_!7/_" + "A<$<````````1&VY!5?)!6[V!7/_!7/_!7/_19<)````````````````````9(K3" + "!5O2!7#Z!7/_!7/_!7/_!7/_!7/_!7/_19H.````````````````````A*'B!4ZW" + "!6KM!7/_!7/_!7/_!7/_````````````````````````1&VY!5?)!6[V!7/_!7/_" + "!7/_!7/_P^4I````````````````````P]@.!46F!67D!7/_!7/_!7/_!7/_P^4I" + "````````````````````````````````````T^@?!5;'!6WS!7/_!7/_!7/_!7/_" + "!7/_!7/_!7/_!7/_P^4I````````````````````````1&VY!5?)!6[V!7/_!7/_" + "!7/_!7/_P^4I````````````````````X_,F%$&/!4RT!6?G!7+]!7/_!7/_!7/_" + "!7/_T_(R````````````````````````````58?````" + "````````````````````1&VY!5?)!6[V!7/_!7/_!7/_19<)````````````````" + "````````L\\L%!5\"\\!6OO!7/_!7/_!7/_!7/_D\\D?````````````````````````" + "A*'B!4ZW!6KM!7/_!7/_!7/_!7/_````````````````````````1&VY!5?)!6[V" + "!7/_!7/_!7/_!7/_P^4I````````````````````P]@.!46F!67D!7/_!7/_!7/_" + "!7/_P^4I````````````````````````````````````````````````X_4I%6#+" + "!6SQ!7/^!7/_!7/_!7/_!7/_P^4I````````````````````````1&VY!5?)!6[V" + "!7/_!7/_!7/_!7/_P^4I````````L\\?`!#>,!5/\"!6OP!7/^!7/_!7/_!7/_%7X\"" + "\\`8[````````````````````````````````````````````````````A:GQ!6#;" + "!7'[!7/_!7/_!7/_!7/_!7'[-8+P````````````````````````````````````" + "````````````````````````````````````````````````P^$@18_Z!6WT!7+]" + "!7/_!7/_!7/_!7/_!7/_%7X\"9:T5X_LV````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````\\`0XP^0FA;L3A;T6A;X7D\\<;P^8J````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````"; + +static unsigned int restartlogo_width = 206; +static unsigned int restartlogo_height = 54; + +static char *restartlogo_data = + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````!!!!!!!!````````````````````````````````````" + "````````````DY_0*C9G\"15&!!!!!!!!````````!!!!!!!!````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````!!!!!!!!````````````````````````````" + "````````````````````````!!!!!!!!````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````!!!!!!!!" + "!!!!!!!!!!!!#AI++CIK=8&RZ_@H````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````!!!!!!!!````````````````````````````````````````````" + "FJ;7!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````!!!!!!!!````````````````````````````````````" + "````````````````!!!!!!!!````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````!!!!!!!!!!!!!!!!" + "!!!!!!!!!!!!!!!!&R=8XN\\?````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````!!!!!!!!````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````!!!!!!!!````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````!!!!!!!!````````````````````````````````````````````-4%R!!!!" + "D9W.^P86V\\?XN````````" + "````````````!!!!!!!!`P\\_G*C9.$1U$!Q-!A)#````!!!!!!!!!!!!!!!!!!!!" + "!!!!!!!!````````````````XN\\?;7FJ)S-D\"Q=($Q]015&\"L[_P````````````" + "````````````````OLK[1E*#$AY/#QM,.$1UH*S=````!!!!!!!!````````````" + "````````````````````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!````````````" + "!!!!!!!!`P\\_GJK;-T-T#QM,$AY/1U.$O\\O\\````````````````````````````" + "````````````````````````OLK[1E*#$AY/#QM,.$1UH*S=````!!!!!!!!````" + "````````````!!!!!!!!`P\\_G*C9.$1U$!Q-!A)#````````!!!!!!!!````````" + "````-$!Q!!!!KKKK````````````````````````KKKK!!!!-4%R````````````" + "XN\\?;7FJ)S-D\"Q=($Q]015&\"L[_P````````````````````````!!!!!!!!`P\\_" + "G*C9.$1U$!Q-!A)#!!!!!!!!````````````````````Q=(\"!!!!)S-D````````" + "````````OH!!!!!!!!!!!!!!!!````!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + "````````````OH!!!!!!!!!!!!!!!!````````!!!!!!!!````````````EZ/4" + "!!!!3%B)````````````````````````2U>(!!!!F*35````````OH!!!!!!!!" + "!!!!!!!!!!!!!!!!````````````[_PLLK[O)#!A!!!!@HZ_````````````Y_0D" + "$AY/!!!!7FJ;T=X.]`0TYO,CD)S-#1E*!!!!Q=(\"````````````(R]@!!!!9G*C" + "X.T=_@HZ\\?XNM\\/T2E:'````````````````!!!!!!!!````````````````````" + "````````0T]`J;7FYO,C_PL[\\?XNOLK[.45V!!!!=8&R````````````````!!!!" + "!!!!!A)#=X.TW.D9`0T]````````````!!!!!!!!````````````````````````" + "Y_0D$AY/!!!!7FJ;T=X.]`0TYO,CD)S-#1E*!!!!Q=(\"````````````V.45\"15&" + "!!!!:W>HX.T=_PL[W^P<:'2E!!!!!!!!!!!!````````````````````````````" + "````````````````!!!!!!!!````````````````````````!!!!!!!!!!!!:76F" + "W^P<_@HZW^P<:'2E!!!!\"15&V>86````````````````````````````````````" + "V.45\"15&!!!!:W>HX.T=_PL[W^P<:'2E!!!!!!!!!!!!````````````````!!!!" + "!!!!!A)#=X.TW.D9`0T]````````````!!!!!!!!````````````\\O\\O#!A)!A)#" + "YO,C````````````````YO,C!A)##!A)\\O\\O````Y_0D$AY/!!!!7FJ;T=X.]`0T" + "YO,CD)S-#1E*!!!!Q=(\"````````````````!!!!!!!!!A)#=X.TW.D9`0T]````" + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!76F:_PL[````````````=X.T!!!!8FZ?" + "````````````````````EJ+3!!!!6666````````````#1E*!!!![_PL````````" + "````````````````````````````!!!!!!!!````````````````````````````" + "````````````````````````YO,C!!!!*35F````````````````!!!!!!!!;WNL" + "````````````````````````!!!!!!!!````````````````````````=X.T!!!!" + "8FZ?````````````````````EJ+3!!!!6666````````````:G:G!!!!56&2````" + "````````````````45V.!!!!!!!!````````````````````````````````````" + "````````!!!!!!!!````````````````````````!!!!!!!!4EZ/````````````" + "````````45V.!!!!:W>H````````````````````````````````````:G:G!!!!" + "56&2````````````````````45V.!!!!!!!!````````````````!!!!!!!!;WNL" + "````````````````````````!!!!!!!!````````````````7&B9!!!!AI+#````" + "````````````A9'\"!!!!76F:````````=X.T!!!!8FZ?````````````````````" + "EJ+3!!!!6666````````````````!!!!!!!!;WNL````````````````!!!!!!!!" + "!!!!!!!!!!!!!!!!!!!!(BY?V^@8````````````````+SML!!!!S]P,````````" + "````````````Z_@H!!!!'RM<````````````0$Q]!!!!,#QMC9G*R]@(_0DY````" + "````````````````````!!!!!!!!````````````````````````````Z/4E=(\"Q" + "+SML#QM,!!!!!!!!!!!!!!!!\"Q=(````````````````!!!!!!!!U^04````````" + "````````````````!!!!!!!!````````````````````````+SML!!!!S]P,````" + "````````````````Z_@H!!!!'RM<````````````*#1E!!!!R=8&````````````" + "````````R-4%!!!!!!!!````````````````````````````````````````````" + "!!!!!!!!````````````````````````!!!!!!!!R-4%````````````````````" + "R-4%!!!!*35F````````````````````````````````````*#1E!!!!R=8&````" + "````````````````R-4%!!!!!!!!````````````````!!!!!!!!U^04````````" + "````````````````!!!!!!!!````````````````O\\O\\!!!!)3%B`P\\_````````" + "`P\\_)#!A!!!!P,S]````````+SML!!!!S]P,````````````````````Z_@H!!!!" + "'RM<````````````````!!!!!!!!U^04````````````````!!!!!!!!````````" + "_0DYS]P,15&\"!!!!)C)C^P(2'BI;!!!!!!!!!!!!#!A)3UN,PL[_````" + "````````````!!!!!!!!````````````````````````V>86%B)3!!!!!!!!!!!!" + "!!!!!!!!!!!!!!!!!!!!````````````````!!!!!!!!^PH:````````````````````````````````" + "````````````````````````````````\\O\\O>86V!!!!+CIK````````````!!!!" + "!!!!````````````````````````$AY/!!!!X>X>````````````````U>(2!!!!" + "!!!!````````````````!!!!!!!!````````````````````````````!!!!!!!!" + "````````````````````````*C9G!!!!W>H:````````````````````````````" + "````````````````*#1E!!!!R=8&````````````````````R-4%!!!!!!!!````" + "````````````````````````````````````````!!!!!!!!````````````````" + "````````!!!!!!!!R-4%````````````````````R-4%!!!!*35F````````````" + "````````````````````````*#1E!!!!R=8&````````````````````R-4%!!!!" + "!!!!````````````````!!!!!!!!````````````````````````````!!!!!!!!" + "````````````````````Y?(B!A)##!A)\\O\\O\\?XN\"Q=(!A)#Y?(B````````````" + "*C9G!!!!W>H:````````````````````````````````````````````````!!!!" + "!!!!````````````````````!!!!!!!!````````````````````````.$1U!!!!" + "G*C9````````=H*S!!!!9W.D````````````````````````````````````````" + "````````````````````````````\\_`P!!!!#1E*````````````\"Q=(!!!!]P,S" + "````````````````````\"Q=(!!!!ZO!!!!!!!!````" + "````````````!!!!!!!!````````````````````````````\"Q=(!!!!]P,S````" + "````````````````=H*S!!!!9W.D````````````````````````````````````" + "````````:G:G!!!!56&2````````````````````45V.!!!!!!!!````````````" + "````````````````````````````````!!!!!!!!````````````````````````" + "!!!!!!!!4EZ/````````````````````45V.!!!!:G:G````````````````````" + "````````````````:G:G!!!!56&2````````````````````45V.!!!!!!!!````" + "````````````!!!!!!!!````````````````````````````!!!!!!!!````````" + "````````````````2E:'!!!!EZ/4EJ+3!!!!2E:'````````````````=H*S!!!!" + "9W.D````````````````````````````````````````````````!!!!!!!!````" + "````````````````!!!!!!!!````````````````````````K;GJ!!!!*C9G`@X^" + "````ZOH:5V.4%B)3$AY/56&2[_PL````````!!!!````````````" + "````````````````_@HZ;GJK%B)3&R=8CIK+!!!!`````````@X^AY/$)#!A%2%2" + "97&B^04U````````!!!!````````````W>H:5V.4%B)3$AY/56&2[_PL````04U^" + "J[?H````````````Y?(B'2E:]0$Q````````WNL;)S-D````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````#1E*^@8V````````````!!!!````````````!!!!5&\"1X^`@^04U" + "A9'\"/TM\\````````!!!!````````````````D9W.1U.$XN\\?\\O\\O8&R==H*S````" + "````!!!!5&\"1X^`@^04UA9'\"/TM\\````````!!!!````````````````!!!!````" + "````````@8V^2%2%Y_0DY_0D15&\"@HZ_````````!!!!5&\"1X^`@^04UA9'\"/TM\\" + "````````,CYOPL[_^P86````````U^04)S-D````````!!!!Z_@H````````^@8V#1E*````````" + "````````````````]@(R(\"Q=````````!!!!````````````````````````````" + ")S-DV>86````````U^04!!!!````````+#AIW.D9````````[/DI(R]@````````" + "!!!!````````````````````````````]@(R(\"Q=````````.45VJ;7F````WNL;" + "(\"Q=^@8V````````````^04U#1E*````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````)3%B" + "W^P<````````````!!!!````````````!!!!````````````````!!!!````````" + "!!!!````````````````#1E*!!!!!!!!!!!!!!!!!A)#````````!!!!````````" + "````````!!!!````````!!!!````````````````!!!!````````````#!A)^`@X" + "````````^`@X#!A)````````!!!!````````````````!!!!````````S]P,1E*#" + "%2%2!!!!!!!!!Q-$````````!!!!````````````````````````````#!A)^`@X" + "````````^`@X!!!!````````#1E*!!!!!!!!!!!!!!!!!A)#````````!!!!````" + "````````S]P,1E*#%2%2!!!!!!!!!Q-$````````M,#Q*S=H`0T]76F:EJ+3````" + "````````````WNL;)C)C````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````6666I+#A````" + "````````!!!!````````````!!!!````````````````!!!!````````!1%\"````" + "````````````*S=HX^`@````````````````````````!!!!````````````````" + "!!!!````````!1%\"````````````````!!!!````````````)C)CV>86````````" + "U^04)S-D````````!!!!````````````````!!!!````````)S-DI;'B\\?XN`0T]" + "\\?XN!!!!````````!!!!````````````````````````````)S-DV>86````````" + "V.45!!!!````````*S=HX^`@````````````````````````!!!!````````````" + ")S-DI;'B\\?XN`0T]\\?XN!!!!`````````P\\_,3UN>86V)#!A_@HZ````````````" + "````HZ_@7&B9````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````IK+C4%R-````````````" + "!!!!````````````!!!!````````````````!!!!````````&256VN<7````````" + "````E*#12%2%VN<7_@HZUN,36V>8````````!!!!````````````````!!!!````" + "````&256VN<7````````````!!!!````````````?XN\\2%2%Y_0DY_0D1E*#@(R]" + "````````!!!!````````````````!!!!````````'\"A9L[_P_0DYX>X>5V.4!!!!" + "````````!!!!````````````````````````````@8V^2E:'Z/4EZ/4E2%2%!!!!" + "````````E*#12%2%VN<7_@HZUN,36V>8````````!!!!````````````'\"A9L[_P" + "_0DYX>X>5V.4!!!!````````````K+CI!!!!H*S=````````````````````3UN," + "J;7F````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````````````````````````````````" + "````````````````````````````````````^@8V&\"15W>H:````````!!!!````" + "````````!!!!````````````````!!!!````````D9W.%\"!1!!!!`````````@X^" + "EJ+3+#AI\"Q=(,3UNM,#Q````````!!!!````````````````!!!!````````D9W." + "%\"!1!!!!````````!!!!````````````^`@X<7VN&R=8&R=8<7VN^`@X````````" + "!!!!````````````````!!!!````````N<7V*S=H\"15&(BY?EJ+3!!!!````````" + "!!!!````````````````````````````_0DY;'BI%2%2&B97CIK+!!!!````````" + "`@X^EJ+3+#AI\"Q=(,3UNM,#Q````````!!!!````````````N<7V*S=H\"15&(BY?" + "EJ+3!!!!````````````K[OL*35F_`P\\````````````````W.D9&256^P + +struct fb_fix_screeninfo { + char id[16]; /* Identification string */ + u16_t xpanstep; + u16_t ypanstep; + u16_t ywrapstep; + u32_t line_length; + phys_bytes mmio_start; + size_t mmio_len; + u16_t reserved[15]; +}; + +struct fb_bitfield { + u32_t offset; + u32_t length; + u32_t msb_right; +}; + +struct fb_var_screeninfo { + u32_t xres; /* visible resolution */ + u32_t yres; + u32_t xres_virtual; /* virtual resolution */ + u32_t yres_virtual; + u32_t xoffset; /* offset from virtual to visible */ + u32_t yoffset; + u32_t bits_per_pixel; + struct fb_bitfield red; /* bitfield in fb mem if true color */ + struct fb_bitfield green; + struct fb_bitfield blue; + struct fb_bitfield transp; /* transparency */ + u16_t reserved[10]; +}; + +#endif /* __MINIX_FB_H_ */ diff --git a/include/sys/Makefile b/include/sys/Makefile index a0e608832..e6084b23f 100644 --- a/include/sys/Makefile +++ b/include/sys/Makefile @@ -3,8 +3,8 @@ INCSDIR= /usr/include/sys # Minix specific system headers INCS= elf64.h elf_common.h elf_core.h elf_generic.h \ - ioc_block.h ioc_disk.h ioc_fbd.h ioc_file.h ioc_memory.h ioc_net.h \ - ioc_sound.h ioc_tape.h ioc_tty.h \ + ioc_block.h ioc_disk.h ioc_fb.h ioc_fbd.h ioc_file.h ioc_memory.h \ + ioc_net.h ioc_sound.h ioc_tape.h ioc_tty.h \ kbdio.h \ procfs.h statfs.h svrctl.h video.h vm.h diff --git a/include/sys/ioc_fb.h b/include/sys/ioc_fb.h new file mode 100644 index 000000000..ef1ae9825 --- /dev/null +++ b/include/sys/ioc_fb.h @@ -0,0 +1,14 @@ +/* sys/ioc_fb.h - Framebuffer command codes + * + */ + +#ifndef _S_I_FB_H +#define _S_I_FB_H + +/* The I/O control requests. */ +#define FBIOGET_VSCREENINFO _IOR('V', 1, struct fb_var_screeninfo) +#define FBIOPUT_VSCREENINFO _IOW('V', 2, struct fb_var_screeninfo) +#define FBIOGET_FSCREENINFO _IOR('V', 3, struct fb_fix_screeninfo) +#define FBIOPAN_DISPLAY _IOW('V', 4, struct fb_var_screeninfo) + +#endif /* _S_I_FB_H */ diff --git a/sys/sys/ioctl.h b/sys/sys/ioctl.h index da3ae0b58..dc5666f33 100644 --- a/sys/sys/ioctl.h +++ b/sys/sys/ioctl.h @@ -20,6 +20,7 @@ #include /* 'm' */ #include /* 'M' */ #include /* 's' */ +#include /* 'F' */ #if defined(_NETBSD_SOURCE) #define TIOCDRAIN TCDRAIN -- 2.44.0