diff --git a/Makefile.am b/Makefile.am index a14152a..310e126 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,14 +1,24 @@ bin_PROGRAMS=psplash psplash-write -AM_CFLAGS = $(GCC_FLAGS) -D_GNU_SOURCE +AM_CFLAGS = $(GCC_FLAGS) $(EXTRA_GCC_FLAGS) -D_GNU_SOURCE -DFONT_HEADER=\"$(FONT_NAME)-font.h\" -DFONT_DEF=$(FONT_NAME)_font psplash_SOURCES = psplash.c psplash.h psplash-fb.c psplash-fb.h \ psplash-console.c psplash-console.h \ psplash-colors.h psplash-config.h \ - psplash-poky-img.h psplash-bar-img.h radeon-font.h + psplash-poky-img.h psplash-bar-img.h $(FONT_NAME)-font.h +BUILT_SOURCES = psplash-poky-img.h psplash-bar-img.h psplash_write_SOURCES = psplash-write.c psplash.h +if HAVE_SYSTEMD +psplash_CPPFLAGS = $(SYSTEMD_CFLAGS) -DHAVE_SYSTEMD +psplash_LDFLAGS= $(SYSTEMD_LIBS) +bin_PROGRAMS += psplash-systemd +psplash_systemd_CPPFLAGS = $(SYSTEMD_CFLAGS) +psplash_systemd_LDFLAGS= $(SYSTEMD_LIBS) +psplash_systemd_SOURCES = psplash-systemd.c psplash.h +endif + EXTRA_DIST = make-image-header.sh MAINTAINERCLEANFILES = aclocal.m4 compile config.guess config.sub configure depcomp install-sh ltmain.sh Makefile.in missing @@ -16,3 +26,8 @@ MAINTAINERCLEANFILES = aclocal.m4 compile config.guess config.sub configure depc snapshot: $(MAKE) dist distdir=$(PACKAGE)-snap`date +"%Y%m%d"` +psplash-bar-img.h: base-images/psplash-bar.png + $(top_srcdir)/make-image-header.sh $< BAR +psplash-poky-img.h: base-images/psplash-poky.png + $(top_srcdir)/make-image-header.sh $< POKY + diff --git a/base-images/poky-logo.png b/base-images/poky-logo.png deleted file mode 100644 index 6452078..0000000 Binary files a/base-images/poky-logo.png and /dev/null differ diff --git a/base-images/psplash-bar.png b/base-images/psplash-bar.png new file mode 100644 index 0000000..56e1d86 Binary files /dev/null and b/base-images/psplash-bar.png differ diff --git a/base-images/psplash-hand.png b/base-images/psplash-hand.png new file mode 100644 index 0000000..35498d3 Binary files /dev/null and b/base-images/psplash-hand.png differ diff --git a/base-images/poky-logo2.png b/base-images/psplash-poky.png similarity index 100% rename from base-images/poky-logo2.png rename to base-images/psplash-poky.png diff --git a/configure.ac b/configure.ac index 1c4d919..2d836a1 100644 --- a/configure.ac +++ b/configure.ac @@ -12,8 +12,41 @@ if test "x$GCC" = "xyes"; then GCC_FLAGS="-g -Wall -Wextra" fi +AC_ARG_WITH([systemd], AS_HELP_STRING([--with-systemd], [Build with systemd + support])) + +AS_IF([test "x$with_systemd" = "xyes"], [ + PKG_CHECK_MODULES(SYSTEMD, libsystemd >= 221) +]) + +AM_CONDITIONAL([HAVE_SYSTEMD], [test "x$with_systemd" = "xyes"]) + AC_SUBST(GCC_FLAGS) +AC_ARG_WITH([font], + AS_HELP_STRING([--with-font], [Set font to use (default is 'radeon')]), + [FONT_NAME=$withval], + [FONT_NAME=radeon]) +AC_SUBST([FONT_NAME]) + +AC_ARG_ENABLE([startup-msg], + AS_HELP_STRING([--disable-startup-msg], [Disable text banner output on startup]), + [disable_startup_msg=true], + [disable_startup_msg=false]) +AS_IF([test x$disable_startup_msg = xtrue], [ + EXTRA_GCC_FLAGS="$EXTRA_GCC_FLAGS -DPSPLASH_DISABLE_STARTUP_MSG" +]) + +AC_ARG_ENABLE([img-fullscreen], + AS_HELP_STRING([--enable-img-fullscreen], [Enable the logo image in fullscreen mode)]), + [img_fullscreen=true], + [img_fullscreen=false]) +AS_IF([test x$img_fullscreen = xtrue], [ + EXTRA_GCC_FLAGS="$EXTRA_GCC_FLAGS -DPSPLASH_IMG_FULLSCREEN=1" +]) + +AC_SUBST(EXTRA_GCC_FLAGS) + AC_OUTPUT([ Makefile ]) diff --git a/make-image-header.sh b/make-image-header.sh index d7cf67c..d1c184c 100755 --- a/make-image-header.sh +++ b/make-image-header.sh @@ -1,4 +1,7 @@ #!/bin/sh +# +# SPDX-License-Identifier: GPL-2.0-or-later +# set -e diff --git a/psplash-bar-img.h b/psplash-bar-img.h deleted file mode 100644 index c1c7626..0000000 --- a/psplash-bar-img.h +++ /dev/null @@ -1,47 +0,0 @@ -/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ - -#define BAR_IMG_ROWSTRIDE (920) -#define BAR_IMG_WIDTH (230) -#define BAR_IMG_HEIGHT (28) -#define BAR_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */ -#define BAR_IMG_RLE_PIXEL_DATA ((uint8*) \ - "\203\354\354\341\377\4\326\326\315\377\236\236\233\377\200\200\201\377" \ - "nnq\377\377mmp\377\331mmp\377\4nnq\377\200\200\201\377\236\236\233\377" \ - "\326\326\315\377\205\354\354\341\377\2\260\260\253\377oor\377\377mmp" \ - "\377\337mmp\377\2oor\377\260\260\253\377\203\354\354\341\377\1\262\262" \ - "\256\377\377mmp\377\343mmp\377\4\262\262\256\377\354\354\341\377\332" \ - "\332\321\377pps\377\377mmp\377\343mmp\377\3pps\377\332\332\321\377\244" \ - "\244\241\377\204mmp\377\1\205\205\205\377\377\354\354\341\377\333\354" \ - "\354\341\377\1\205\205\205\377\204mmp\377\2\244\244\241\377\210\210\210" \ - "\377\203mmp\377\2\203\203\203\377\351\351\336\377\377\354\354\341\377" \ - "\333\354\354\341\377\2\351\351\336\377\203\203\203\377\203mmp\377\2\210" \ - "\210\210\377qqs\377\203mmp\377\1\255\255\251\377\377\354\354\341\377" \ - "\335\354\354\341\377\1\255\255\251\377\203mmp\377\1qqs\377\204mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \ - "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\204mmp\377" \ - "\1qqs\377\203mmp\377\1\255\255\251\377\377\354\354\341\377\335\354\354" \ - "\341\377\1\255\255\251\377\203mmp\377\2qqs\377\210\210\210\377\203mm" \ - "p\377\2\203\203\203\377\351\351\336\377\377\354\354\341\377\333\354\354" \ - "\341\377\2\351\351\336\377\203\203\203\377\203mmp\377\2\210\210\210\377" \ - "\244\244\241\377\204mmp\377\1\205\205\205\377\377\354\354\341\377\333" \ - "\354\354\341\377\1\205\205\205\377\204mmp\377\3\244\244\241\377\332\332" \ - "\321\377pps\377\377mmp\377\343mmp\377\4pps\377\332\332\321\377\354\354" \ - "\341\377\262\262\256\377\377mmp\377\343mmp\377\1\262\262\256\377\203" \ - "\354\354\341\377\2\260\260\253\377oor\377\377mmp\377\337mmp\377\2oor" \ - "\377\260\260\253\377\205\354\354\341\377\4\326\326\315\377\236\236\233" \ - "\377\200\200\201\377nnq\377\377mmp\377\331mmp\377\4nnq\377\200\200\201" \ - "\377\236\236\233\377\326\326\315\377\203\354\354\341\377") - - diff --git a/psplash-colors.h b/psplash-colors.h index d701089..82a9893 100644 --- a/psplash-colors.h +++ b/psplash-colors.h @@ -4,15 +4,7 @@ * Copyright (c) 2012 sleep(5) ltd * Author: Tomas Frydrych * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * SPDX-License-Identifier: GPL-2.0-or-later * */ diff --git a/psplash-config.h b/psplash-config.h index 82bb76d..48ddf53 100644 --- a/psplash-config.h +++ b/psplash-config.h @@ -4,15 +4,7 @@ * Copyright (c) 2014 MenloSystems GmbH * Author: Olaf Mandel * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * SPDX-License-Identifier: GPL-2.0-or-later * */ @@ -20,10 +12,12 @@ #define _HAVE_PSPLASH_CONFIG_H /* Text to output on program start; if undefined, output nothing */ -#define PSPLASH_STARTUP_MSG "" +#define PSPLASH_STARTUP_MSG "Setting up the system. This might take up to 15 minutes." /* Bool indicating if the image is fullscreen, as opposed to split screen */ +#ifndef PSPLASH_IMG_FULLSCREEN #define PSPLASH_IMG_FULLSCREEN 0 +#endif /* Position of the image split from top edge, numerator of fraction */ #define PSPLASH_IMG_SPLIT_NUMERATOR 5 diff --git a/psplash-console.c b/psplash-console.c index 055f5b0..3a40620 100644 --- a/psplash-console.c +++ b/psplash-console.c @@ -3,15 +3,7 @@ * * Copyright (c) 2006 Matthew Allum * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * SPDX-License-Identifier: GPL-2.0-or-later * */ diff --git a/psplash-console.h b/psplash-console.h index c444d27..c893bf2 100644 --- a/psplash-console.h +++ b/psplash-console.h @@ -3,15 +3,7 @@ * * Copyright (c) 2006 Matthew Allum * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * SPDX-License-Identifier: GPL-2.0-or-later * */ diff --git a/psplash-fb.c b/psplash-fb.c index c064d18..6603572 100644 --- a/psplash-fb.c +++ b/psplash-fb.c @@ -3,21 +3,53 @@ * * Copyright (c) 2006 Matthew Allum * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * SPDX-License-Identifier: GPL-2.0-or-later * */ #include #include "psplash.h" +static void +psplash_wait_for_vsync(PSplashFB *fb) +{ + int err = ioctl(fb->fd, FBIO_WAITFORVSYNC, 0); + if (err != 0) + fprintf(stderr, "Error, FB vsync ioctl [%d]\n", err); +} + +void +psplash_fb_flip(PSplashFB *fb, int sync) +{ + char *tmp; + + if (fb->double_buffering) { + + /* Carry out the flip after a vsync */ + psplash_wait_for_vsync(fb); + + /* Switch the current activate area in fb */ + if (fb->fb_var.yoffset == 0 ) { + fb->fb_var.yoffset = fb->real_height; + } else { + fb->fb_var.yoffset = 0; + } + if (ioctl(fb->fd, FBIOPAN_DISPLAY, &fb->fb_var) == -1 ) { + fprintf(stderr, "psplash_fb_flip: FBIOPAN_DISPLAY failed\n"); + } + + /* Switch the front and back data pointers */ + tmp = fb->fdata; + fb->fdata = fb->bdata; + fb->bdata = tmp; + + /* Sync new front to new back when requested */ + if (sync) { + memcpy(fb->bdata, fb->fdata, fb->stride * fb->real_height); + } + } +} + void psplash_fb_destroy (PSplashFB *fb) { @@ -163,6 +195,29 @@ psplash_fb_new (int angle, int fbdev_id) goto fail; } + /* Setup double virtual resolution for double buffering */ + if (ioctl(fb->fd, FBIOPAN_DISPLAY, &fb_var) == -1) { + fprintf(stderr, "FBIOPAN_DISPLAY not supported, double buffering disabled"); + } else { + if (fb_var.yres_virtual == fb_var.yres * 2) { + DBG("Virtual resolution already double"); + fb->double_buffering = 1; + } else { + fb_var.yres_virtual = fb_var.yres * 2; + if (ioctl(fb->fd, FBIOPUT_VSCREENINFO, &fb_var) == -1) { + fprintf(stderr, "FBIOPUT_VSCREENINFO failed, double buffering disabled"); + } else { + if (ioctl(fb->fd, FBIOGET_FSCREENINFO, &fb_fix) == -1) { + perror(" Error getting the fixed framebuffer info"); + goto fail; + } else { + DBG("Virtual resolution set to double"); + fb->double_buffering = 1; + } + } + } + } + fb->real_width = fb->width = fb_var.xres; fb->real_height = fb->height = fb_var.yres; fb->bpp = fb_var.bits_per_pixel; @@ -201,8 +256,7 @@ psplash_fb_new (int angle, int fbdev_id) fb->width, fb->height, fb->bpp, fb->stride); fb->base = (char *) mmap ((caddr_t) NULL, - /*fb_fix.smem_len */ - fb->stride * fb->height, + fb_fix.smem_len, PROT_READ|PROT_WRITE, MAP_SHARED, fb->fd, 0); @@ -217,6 +271,23 @@ psplash_fb_new (int angle, int fbdev_id) fb->data = fb->base + off; + if (fb->double_buffering) { + /* fb_var is needed when flipping the buffers */ + memcpy(&fb->fb_var, &fb_var, sizeof(struct fb_var_screeninfo)); + if (fb->fb_var.yoffset == 0) { + printf("to back\n"); + fb->fdata = fb->data; + fb->bdata = fb->data + fb->stride * fb->height; + } else { + printf("to front\n"); + fb->fdata = fb->data + fb->stride * fb->height; + fb->bdata = fb->data; + } + } else { + fb->fdata = fb->data; + fb->bdata = fb->data; + } + #if 0 /* FIXME: No support for 8pp as yet */ if (visual == FB_VISUAL_PSEUDOCOLOR @@ -274,6 +345,8 @@ psplash_fb_plot_pixel (PSplashFB *fb, uint8 green, uint8 blue) { + /* Always write to back data (bdata) which points to the right data with or + * without double buffering support */ int off; if (x < 0 || x > fb->width-1 || y < 0 || y > fb->height-1) @@ -301,22 +374,22 @@ psplash_fb_plot_pixel (PSplashFB *fb, { case 24: #if __BYTE_ORDER == __BIG_ENDIAN - *(fb->data + off + 0) = red; - *(fb->data + off + 1) = green; - *(fb->data + off + 2) = blue; + *(fb->bdata + off + 0) = red; + *(fb->bdata + off + 1) = green; + *(fb->bdata + off + 2) = blue; #else - *(fb->data + off + 0) = blue; - *(fb->data + off + 1) = green; - *(fb->data + off + 2) = red; + *(fb->bdata + off + 0) = blue; + *(fb->bdata + off + 1) = green; + *(fb->bdata + off + 2) = red; #endif break; case 32: - *(volatile uint32_t *) (fb->data + off) + *(volatile uint32_t *) (fb->bdata + off) = (red << 16) | (green << 8) | (blue); break; case 16: - *(volatile uint16_t *) (fb->data + off) + *(volatile uint16_t *) (fb->bdata + off) = ((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3); break; default: @@ -328,21 +401,21 @@ psplash_fb_plot_pixel (PSplashFB *fb, { case 24: #if __BYTE_ORDER == __BIG_ENDIAN - *(fb->data + off + 0) = blue; - *(fb->data + off + 1) = green; - *(fb->data + off + 2) = red; + *(fb->bdata + off + 0) = blue; + *(fb->bdata + off + 1) = green; + *(fb->bdata + off + 2) = red; #else - *(fb->data + off + 0) = red; - *(fb->data + off + 1) = green; - *(fb->data + off + 2) = blue; + *(fb->bdata + off + 0) = red; + *(fb->bdata + off + 1) = green; + *(fb->bdata + off + 2) = blue; #endif break; case 32: - *(volatile uint32_t *) (fb->data + off) + *(volatile uint32_t *) (fb->bdata + off) = (blue << 16) | (green << 8) | (red); break; case 16: - *(volatile uint16_t *) (fb->data + off) + *(volatile uint16_t *) (fb->bdata + off) = ((blue >> 3) << 11) | ((green >> 2) << 5) | (red >> 3); break; default: @@ -353,13 +426,13 @@ psplash_fb_plot_pixel (PSplashFB *fb, switch (fb->bpp) { case 32: - *(volatile uint32_t *) (fb->data + off) + *(volatile uint32_t *) (fb->bdata + off) = ((red >> (8 - fb->red_length)) << fb->red_offset) | ((green >> (8 - fb->green_length)) << fb->green_offset) | ((blue >> (8 - fb->blue_length)) << fb->blue_offset); break; case 16: - *(volatile uint16_t *) (fb->data + off) + *(volatile uint16_t *) (fb->bdata + off) = ((red >> (8 - fb->red_length)) << fb->red_offset) | ((green >> (8 - fb->green_length)) << fb->green_offset) | ((blue >> (8 - fb->blue_length)) << fb->blue_offset); diff --git a/psplash-fb.h b/psplash-fb.h index d0dce10..16e2b20 100644 --- a/psplash-fb.h +++ b/psplash-fb.h @@ -3,15 +3,7 @@ * * Copyright (c) 2006 Matthew Allum * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * SPDX-License-Identifier: GPL-2.0-or-later * */ @@ -29,6 +21,7 @@ enum RGBMode { typedef struct PSplashFB { int fd; + struct fb_var_screeninfo fb_var; struct termios save_termios; int type; int visual; @@ -38,6 +31,11 @@ typedef struct PSplashFB char *data; char *base; + /* Support for double buffering */ + int double_buffering; + char *bdata; + char *fdata; + int angle, fbdev_id; int real_width, real_height; @@ -93,5 +91,7 @@ psplash_fb_draw_text (PSplashFB *fb, const PSplashFont *font, const char *text); +void +psplash_fb_flip(PSplashFB *fb, int sync); #endif diff --git a/psplash-hand-img.h b/psplash-hand-img.h deleted file mode 100644 index a015e2c..0000000 --- a/psplash-hand-img.h +++ /dev/null @@ -1,320 +0,0 @@ -/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ - -#define HAND_IMG_ROWSTRIDE (400) -#define HAND_IMG_WIDTH (100) -#define HAND_IMG_HEIGHT (106) -#define HAND_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */ -#define HAND_IMG_RLE_PIXEL_DATA ((uint8*) \ - "\204\354\354\341\377\10\337\337\325\377\262\262\255\377\230\230\226\377" \ - "}}\177\377vvx\377\217\217\217\377\252\252\246\377\320\320\310\377\216" \ - "\354\354\341\377\10\350\350\335\377\271\271\263\377\235\235\233\377\202" \ - "\202\203\377ssv\377\212\212\212\377\245\245\242\377\306\306\277\377\216" \ - "\354\354\341\377\11\352\352\337\377\276\276\270\377\241\241\236\377\206" \ - "\206\207\377ssu\377\206\206\207\377\241\241\236\377\276\276\270\377\352" \ - "\352\337\377\216\354\354\341\377\10\311\311\302\377\246\246\243\377\214" \ - "\214\213\377ttv\377\201\201\202\377\234\234\232\377\267\267\262\377\346" \ - "\346\333\377\230\354\354\341\377\2\277\277\271\377uuw\377\207mmp\377" \ - "\2\245\245\242\377\350\350\335\377\213\354\354\341\377\2\320\320\310" \ - "\377\200\200\201\377\207mmp\377\2\224\224\223\377\340\340\326\377\213" \ - "\354\354\341\377\2\330\330\317\377\210\210\210\377\207mmp\377\2\207\207" \ - "\207\377\327\327\316\377\213\354\354\341\377\2\343\343\331\377\231\231" \ - "\227\377\207mmp\377\2||~\377\314\314\304\377\226\354\354\341\377\1\234" \ - "\234\232\377\212mmp\377\2\201\201\202\377\343\343\331\377\211\354\354" \ - "\341\377\2\267\267\262\377nnq\377\211mmp\377\2vvx\377\323\323\312\377" \ - "\211\354\354\341\377\2\304\304\275\377pps\377\211mmp\377\2pps\377\301" \ - "\301\272\377\211\354\354\341\377\2\330\330\317\377yy{\377\212mmp\377" \ - "\1\260\260\253\377\224\354\354\341\377\1\276\276\270\377\214mmp\377\1" \ - "\232\232\230\377\210\354\354\341\377\2\326\326\315\377pps\377\213mmp" \ - "\377\2\201\201\202\377\350\350\335\377\207\354\354\341\377\2\340\340" \ - "\326\377vvx\377\213mmp\377\2ttv\377\336\336\324\377\207\354\354\341\377" \ - "\2\352\352\337\377\207\207\207\377\213mmp\377\2nnq\377\320\320\310\377" \ - "\222\354\354\341\377\2\337\337\325\377uuw\377\215mmp\377\1\303\303\275" \ - "\377\206\354\354\341\377\2\352\352\337\377\205\205\206\377\215mmp\377" \ - "\1\247\247\244\377\207\354\354\341\377\1\223\223\222\377\215mmp\377\1" \ - "\220\220\217\377\207\354\354\341\377\1\257\257\253\377\215mmp\377\2\200" \ - "\200\201\377\347\347\335\377\221\354\354\341\377\1\257\257\253\377\216" \ - "mmp\377\1\213\213\213\377\206\354\354\341\377\1\313\313\304\377\216m" \ - "mp\377\2qqt\377\352\352\337\377\205\354\354\341\377\1\333\333\322\377" \ - "\217mmp\377\1\327\327\316\377\206\354\354\341\377\1wwy\377\216mmp\377" \ - "\1\303\303\275\377\221\354\354\341\377\1\226\226\225\377\216mmp\377\2" \ - "rrt\377\353\353\340\377\205\354\354\341\377\1\262\262\256\377\217mmp" \ - "\377\1\326\326\315\377\205\354\354\341\377\1\302\302\274\377\217mmp\377" \ - "\1\274\274\266\377\205\354\354\341\377\1\336\336\325\377\217mmp\377\1" \ - "\252\252\246\377\221\354\354\341\377\1}}\177\377\217mmp\377\1\326\326" \ - "\315\377\205\354\354\341\377\1\231\231\227\377\217mmp\377\1\275\275\267" \ - "\377\205\354\354\341\377\1\251\251\246\377\217mmp\377\1\242\242\237\377" \ - "\205\354\354\341\377\1\305\305\276\377\217mmp\377\1\221\221\220\377\221" \ - "\354\354\341\377\220mmp\377\1\304\304\275\377\205\354\354\341\377\1\210" \ - "\210\210\377\217mmp\377\1\254\254\250\377\205\354\354\341\377\1\230\230" \ - "\226\377\217mmp\377\1\220\220\217\377\205\354\354\341\377\1\264\264\257" \ - "\377\217mmp\377\1\200\200\201\377\221\354\354\341\377\220mmp\377\1\304" \ - "\304\275\377\205\354\354\341\377\1\210\210\210\377\217mmp\377\1\254\254" \ - "\250\377\205\354\354\341\377\1\230\230\226\377\217mmp\377\1\220\220\217" \ - "\377\205\354\354\341\377\1\264\264\257\377\217mmp\377\1\200\200\201\377" \ - "\221\354\354\341\377\220mmp\377\1\304\304\275\377\205\354\354\341\377" \ - "\1\210\210\210\377\217mmp\377\1\254\254\250\377\205\354\354\341\377\1" \ - "\230\230\226\377\217mmp\377\1\220\220\217\377\205\354\354\341\377\1\264" \ - "\264\257\377\217mmp\377\1\200\200\201\377\221\354\354\341\377\220mmp" \ - "\377\1\304\304\275\377\205\354\354\341\377\1\210\210\210\377\217mmp\377" \ - "\1\254\254\250\377\205\354\354\341\377\1\230\230\226\377\217mmp\377\1" \ - "\220\220\217\377\205\354\354\341\377\1\264\264\257\377\217mmp\377\1\200" \ - "\200\201\377\221\354\354\341\377\220mmp\377\1\304\304\275\377\205\354" \ - "\354\341\377\1\210\210\210\377\217mmp\377\1\254\254\250\377\205\354\354" \ - "\341\377\1\230\230\226\377\217mmp\377\1\220\220\217\377\205\354\354\341" \ - "\377\1\264\264\257\377\217mmp\377\1\200\200\201\377\221\354\354\341\377" \ - "\220mmp\377\1\304\304\275\377\205\354\354\341\377\1\210\210\210\377\217" \ - "mmp\377\1\254\254\250\377\205\354\354\341\377\1\230\230\226\377\217m" \ - "mp\377\1\220\220\217\377\205\354\354\341\377\1\264\264\257\377\217mm" \ - "p\377\1\200\200\201\377\221\354\354\341\377\220mmp\377\1\304\304\275" \ - "\377\205\354\354\341\377\1\210\210\210\377\217mmp\377\1\254\254\250\377" \ - "\205\354\354\341\377\1\230\230\226\377\217mmp\377\1\220\220\217\377\205" \ - "\354\354\341\377\1\264\264\257\377\217mmp\377\1\200\200\201\377\221\354" \ - "\354\341\377\220mmp\377\1\304\304\275\377\205\354\354\341\377\1\210\210" \ - "\210\377\217mmp\377\1\254\254\250\377\205\354\354\341\377\1\230\230\226" \ - "\377\217mmp\377\1\220\220\217\377\205\354\354\341\377\1\264\264\257\377" \ - "\217mmp\377\1\200\200\201\377\221\354\354\341\377\220mmp\377\1\304\304" \ - "\275\377\205\354\354\341\377\1\210\210\210\377\217mmp\377\1\254\254\250" \ - "\377\205\354\354\341\377\1\230\230\226\377\217mmp\377\1\220\220\217\377" \ - "\205\354\354\341\377\1\264\264\257\377\217mmp\377\1\200\200\201\377\221" \ - "\354\354\341\377\220mmp\377\1\304\304\275\377\205\354\354\341\377\1\210" \ - "\210\210\377\217mmp\377\1\254\254\250\377\205\354\354\341\377\1\230\230" \ - "\226\377\217mmp\377\1\220\220\217\377\205\354\354\341\377\1\264\264\257" \ - "\377\217mmp\377\1\200\200\201\377\221\354\354\341\377\220mmp\377\1\304" \ - "\304\275\377\205\354\354\341\377\1\210\210\210\377\217mmp\377\1\254\254" \ - "\250\377\205\354\354\341\377\1\230\230\226\377\217mmp\377\1\220\220\217" \ - "\377\205\354\354\341\377\1\264\264\257\377\217mmp\377\1\200\200\201\377" \ - "\221\354\354\341\377\220mmp\377\1\304\304\275\377\205\354\354\341\377" \ - "\1\210\210\210\377\217mmp\377\1\254\254\250\377\205\354\354\341\377\1" \ - "\230\230\226\377\217mmp\377\1\220\220\217\377\205\354\354\341\377\1\264" \ - "\264\257\377\217mmp\377\1\200\200\201\377\221\354\354\341\377\220mmp" \ - "\377\1\304\304\275\377\205\354\354\341\377\1\210\210\210\377\217mmp\377" \ - "\1\254\254\250\377\205\354\354\341\377\1\230\230\226\377\217mmp\377\1" \ - "\220\220\217\377\205\354\354\341\377\1\264\264\257\377\217mmp\377\1\200" \ - "\200\201\377\221\354\354\341\377\220mmp\377\1\304\304\275\377\205\354" \ - "\354\341\377\1\210\210\210\377\217mmp\377\1\254\254\250\377\205\354\354" \ - "\341\377\1\230\230\226\377\217mmp\377\1\220\220\217\377\205\354\354\341" \ - "\377\1\264\264\257\377\217mmp\377\1\200\200\201\377\221\354\354\341\377" \ - "\220mmp\377\1\304\304\275\377\205\354\354\341\377\1\210\210\210\377\217" \ - "mmp\377\1\254\254\250\377\205\354\354\341\377\1\230\230\226\377\217m" \ - "mp\377\1\220\220\217\377\205\354\354\341\377\1\264\264\257\377\217mm" \ - "p\377\1\200\200\201\377\221\354\354\341\377\220mmp\377\1\304\304\275" \ - "\377\205\354\354\341\377\1\210\210\210\377\217mmp\377\7\221\221\220\377" \ - "\263\263\256\377\255\255\251\377\251\251\246\377\256\256\252\377\263" \ - "\263\256\377\206\206\206\377\217mmp\377\1\220\220\217\377\205\354\354" \ - "\341\377\1\264\264\257\377\217mmp\377\1\200\200\201\377\221\354\354\341" \ - "\377\220mmp\377\1\304\304\275\377\205\354\354\341\377\1\210\210\210\377" \ - "\245mmp\377\1\220\220\217\377\205\354\354\341\377\1\264\264\257\377\217" \ - "mmp\377\1\200\200\201\377\221\354\354\341\377\220mmp\377\1\304\304\275" \ - "\377\205\354\354\341\377\1\210\210\210\377\245mmp\377\1\220\220\217\377" \ - "\205\354\354\341\377\1\264\264\257\377\217mmp\377\1\200\200\201\377\221" \ - "\354\354\341\377\220mmp\377\1\304\304\275\377\205\354\354\341\377\1\210" \ - "\210\210\377\245mmp\377\1\220\220\217\377\205\354\354\341\377\1\264\264" \ - "\257\377\217mmp\377\1\200\200\201\377\221\354\354\341\377\220mmp\377" \ - "\1\304\304\275\377\205\354\354\341\377\1\210\210\210\377\245mmp\377\1" \ - "\220\220\217\377\205\354\354\341\377\1\264\264\257\377\217mmp\377\1\200" \ - "\200\201\377\221\354\354\341\377\220mmp\377\1\304\304\275\377\204\354" \ - "\354\341\377\2\302\302\273\377ttw\377\245mmp\377\2wwy\377\310\310\301" \ - "\377\204\354\354\341\377\1\264\264\257\377\217mmp\377\1\200\200\201\377" \ - "\221\354\354\341\377\220mmp\377\1\304\304\275\377\202\354\354\341\377" \ - "\2\335\335\323\377\223\223\222\377\251mmp\377\2\231\231\227\377\341\341" \ - "\327\377\202\354\354\341\377\1\264\264\257\377\217mmp\377\1\200\200\201" \ - "\377\221\354\354\341\377\220mmp\377\4\304\304\275\377\352\352\337\377" \ - "\264\264\257\377rru\377\253mmp\377\4uuw\377\274\274\266\377\354\354\341" \ - "\377\264\264\257\377\217mmp\377\1\200\200\201\377\221\354\354\341\377" \ - "\220mmp\377\2\253\253\247\377\206\206\206\377\257mmp\377\2\216\216\215" \ - "\377\243\243\240\377\217mmp\377\1\200\200\201\377\221\354\354\341\377" \ - "\242mmp\377\17\201\201\202\377\230\230\226\377\245\245\242\377\261\261" \ - "\255\377\276\276\270\377\313\313\303\377\330\330\317\377\341\341\327" \ - "\377\327\327\316\377\312\312\303\377\275\275\267\377\261\261\254\377" \ - "\244\244\241\377\227\227\226\377\177\177\200\377\241mmp\377\1\200\200" \ - "\201\377\221\354\354\341\377\237mmp\377\3\212\212\212\377\262\262\255" \ - "\377\331\331\320\377\217\354\354\341\377\3\327\327\316\377\257\257\252" \ - "\377\207\207\207\377\236mmp\377\1\200\200\201\377\221\354\354\341\377" \ - "\234mmp\377\3\214\214\213\377\273\273\265\377\341\341\327\377\225\354" \ - "\354\341\377\3\337\337\325\377\267\267\262\377\206\206\207\377\233mm" \ - "p\377\1\200\200\201\377\221\354\354\341\377\232mmp\377\2\203\203\203" \ - "\377\307\307\300\377\232\354\354\341\377\3\353\353\340\377\300\300\272" \ - "\377}}\177\377\231mmp\377\1\200\200\201\377\221\354\354\341\377\230m" \ - "mp\377\3zz|\377\273\273\266\377\353\353\340\377\235\354\354\341\377\3" \ - "\351\351\336\377\264\264\257\377vvx\377\227mmp\377\1\200\200\201\377" \ - "\221\354\354\341\377\226mmp\377\3pps\377\260\260\253\377\347\347\335" \ - "\377\241\354\354\341\377\2\344\344\331\377\246\246\242\377\226mmp\377" \ - "\1\200\200\201\377\221\354\354\341\377\225mmp\377\2xxz\377\320\320\310" \ - "\377\245\354\354\341\377\2\305\305\276\377ssu\377\224mmp\377\1\200\200" \ - "\201\377\221\354\354\341\377\224mmp\377\2\206\206\207\377\336\336\325" \ - "\377\247\354\354\341\377\2\326\326\315\377~~\177\377\223mmp\377\1\200" \ - "\200\201\377\221\354\354\341\377\223mmp\377\2\231\231\227\377\347\347" \ - "\335\377\251\354\354\341\377\2\343\343\331\377\216\216\215\377\222mm" \ - "p\377\1\200\200\201\377\221\354\354\341\377\222mmp\377\1\255\255\251" \ - "\377\254\354\354\341\377\2\352\352\337\377\237\237\235\377\221mmp\377" \ - "\1\200\200\201\377\221\354\354\341\377\221mmp\377\1\240\240\236\377\256" \ - "\354\354\341\377\2\353\353\340\377\222\222\221\377\220mmp\377\1\200\200" \ - "\201\377\221\354\354\341\377\220mmp\377\2\215\215\214\377\352\352\337" \ - "\377\257\354\354\341\377\2\345\345\332\377\201\201\202\377\217mmp\377" \ - "\1\200\200\201\377\221\354\354\341\377\217mmp\377\2}}\177\377\342\342" \ - "\330\377\261\354\354\341\377\2\332\332\321\377uuw\377\216mmp\377\1\200" \ - "\200\201\377\221\354\354\341\377\216mmp\377\2ssu\377\327\327\316\377" \ - "\263\354\354\341\377\2\313\313\304\377nnq\377\215mmp\377\1\200\200\201" \ - "\377\221\354\354\341\377\216mmp\377\1\302\302\274\377\265\354\354\341" \ - "\377\1\262\262\256\377\215mmp\377\1\200\200\201\377\221\354\354\341\377" \ - "\215mmp\377\1\214\214\214\377\266\354\354\341\377\2\351\351\336\377~" \ - "~\177\377\214mmp\377\1\200\200\201\377\221\354\354\341\377\215mmp\377" \ - "\1\322\322\311\377\227\354\354\341\377\11\341\341\327\377\304\304\275" \ - "\377\270\270\262\377\253\253\247\377\243\243\240\377\255\255\251\377" \ - "\271\271\264\377\306\306\277\377\344\344\332\377\227\354\354\341\377" \ - "\1\301\301\273\377\214mmp\377\1\200\200\201\377\221\354\354\341\377\214" \ - "mmp\377\1\231\231\227\377\225\354\354\341\377\3\343\343\331\377\263\263" \ - "\256\377\212\212\212\377\210mmp\377\4oor\377\217\217\217\377\270\270" \ - "\262\377\347\347\334\377\225\354\354\341\377\1\207\207\207\377\213mm" \ - "p\377\1\200\200\201\377\221\354\354\341\377\213mmp\377\2oor\377\333\333" \ - "\322\377\223\354\354\341\377\3\347\347\335\377\260\260\253\377ttw\377" \ - "\215mmp\377\3yy{\377\270\270\263\377\352\352\337\377\223\354\354\341" \ - "\377\1\314\314\304\377\213mmp\377\1\200\200\201\377\221\354\354\341\377" \ - "\213mmp\377\1\245\245\242\377\223\354\354\341\377\2\322\322\312\377{" \ - "{}\377\221mmp\377\2\203\203\203\377\333\333\321\377\223\354\354\341\377" \ - "\1\221\221\220\377\212mmp\377\1\200\200\201\377\221\354\354\341\377\213" \ - "mmp\377\1\334\334\322\377\222\354\354\341\377\2\301\301\272\377qqs\377" \ - "\223mmp\377\2vvx\377\314\314\305\377\222\354\354\341\377\1\310\310\301" \ - "\377\212mmp\377\1\200\200\201\377\221\354\354\341\377\212mmp\377\1\204" \ - "\204\204\377\222\354\354\341\377\1\273\273\266\377\226mmp\377\2oor\377" \ - "\311\311\301\377\221\354\354\341\377\2\351\351\336\377ssv\377\211mmp" \ - "\377\1\200\200\201\377\221\354\354\341\377\212mmp\377\1\254\254\250\377" \ - "\221\354\354\341\377\2\315\315\305\377oor\377\227mmp\377\2ttw\377\330" \ - "\330\317\377\221\354\354\341\377\1\230\230\226\377\211mmp\377\1\200\200" \ - "\201\377\221\354\354\341\377\212mmp\377\1\323\323\313\377\220\354\354" \ - "\341\377\2\336\336\325\377vvx\377\231mmp\377\2\177\177\200\377\346\346" \ - "\334\377\220\354\354\341\377\1\277\277\271\377\211mmp\377\1\200\200\201" \ - "\377\221\354\354\341\377\211mmp\377\1||}\377\221\354\354\341\377\1\234" \ - "\234\232\377\233mmp\377\1\254\254\250\377\220\354\354\341\377\2\344\344" \ - "\332\377oor\377\210mmp\377\1\200\200\201\377\221\354\354\341\377\211" \ - "mmp\377\1\243\243\240\377\220\354\354\341\377\1\324\324\314\377\234m" \ - "mp\377\2rrt\377\340\340\326\377\220\354\354\341\377\1\217\217\217\377" \ - "\210mmp\377\1\200\200\201\377\221\354\354\341\377\211mmp\377\1\301\301" \ - "\272\377\220\354\354\341\377\1\225\225\224\377\235mmp\377\1\245\245\242" \ - "\377\220\354\354\341\377\1\255\255\251\377\210mmp\377\1\200\200\201\377" \ - "\221\354\354\341\377\211mmp\377\1\316\316\306\377\217\354\354\341\377" \ - "\2\347\347\335\377qqs\377\235mmp\377\1||~\377\220\354\354\341\377\1\272" \ - "\272\264\377\210mmp\377\1\200\200\201\377\221\354\354\341\377\211mmp" \ - "\377\1\332\332\321\377\217\354\354\341\377\1\305\305\276\377\237mmp\377" \ - "\1\325\325\314\377\217\354\354\341\377\1\306\306\277\377\210mmp\377\1" \ - "\200\200\201\377\221\354\354\341\377\211mmp\377\1\347\347\335\377\217" \ - "\354\354\341\377\1\242\242\237\377\237mmp\377\1\262\262\255\377\217\354" \ - "\354\341\377\1\323\323\313\377\210mmp\377\1\200\200\201\377\221\354\354" \ - "\341\377\210mmp\377\1ttw\377\220\354\354\341\377\1\222\222\221\377\237" \ - "mmp\377\1\242\242\237\377\217\354\354\341\377\1\340\340\326\377\210m" \ - "mp\377\1\200\200\201\377\221\354\354\341\377\210mmp\377\1\201\201\202" \ - "\377\220\354\354\341\377\1\204\204\205\377\237mmp\377\1\224\224\223\377" \ - "\217\354\354\341\377\2\353\353\340\377nnq\377\207mmp\377\1\200\200\201" \ - "\377\221\354\354\341\377\210mmp\377\1\214\214\214\377\220\354\354\341" \ - "\377\1xxz\377\237mmp\377\1\210\210\210\377\220\354\354\341\377\1xxz\377" \ - "\207mmp\377\1\200\200\201\377\221\354\354\341\377\1wwy\377\207mmp\377" \ - "\1\206\206\206\377\220\354\354\341\377\1~~\177\377\237mmp\377\1\216\216" \ - "\216\377\220\354\354\341\377\1rrt\377\207mmp\377\1\200\200\201\377\221" \ - "\354\354\341\377\1\204\204\204\377\207mmp\377\1yy{\377\220\354\354\341" \ - "\377\1\214\214\213\377\237mmp\377\1\234\234\232\377\217\354\354\341\377" \ - "\1\345\345\332\377\210mmp\377\1\200\200\201\377\221\354\354\341\377\1" \ - "\221\221\220\377\207mmp\377\2nnq\377\352\352\337\377\217\354\354\341" \ - "\377\1\231\231\227\377\237mmp\377\1\251\251\246\377\217\354\354\341\377" \ - "\1\330\330\317\377\210mmp\377\1\200\200\201\377\221\354\354\341\377\1" \ - "\236\236\233\377\210mmp\377\1\337\337\325\377\217\354\354\341\377\1\264" \ - "\264\257\377\237mmp\377\1\304\304\275\377\217\354\354\341\377\1\313\313" \ - "\304\377\210mmp\377\1\200\200\201\377\221\354\354\341\377\1\253\253\247" \ - "\377\210mmp\377\1\322\322\312\377\217\354\354\341\377\1\333\333\321\377" \ - "\236mmp\377\2pps\377\346\346\334\377\217\354\354\341\377\1\276\276\270" \ - "\377\210mmp\377\1\200\200\201\377\221\354\354\341\377\1\270\270\262\377" \ - "\210mmp\377\1\306\306\277\377\220\354\354\341\377\1\202\202\203\377\235" \ - "mmp\377\1\222\222\221\377\220\354\354\341\377\1\262\262\255\377\210m" \ - "mp\377\1\200\200\201\377\221\354\354\341\377\1\305\305\276\377\210mm" \ - "p\377\1\261\261\255\377\220\354\354\341\377\1\267\267\262\377\235mmp" \ - "\377\1\307\307\300\377\220\354\354\341\377\1\235\235\233\377\210mmp\377" \ - "\1\200\200\201\377\221\354\354\341\377\1\322\322\311\377\210mmp\377\1" \ - "\212\212\212\377\220\354\354\341\377\2\352\352\337\377\201\201\202\377" \ - "\233mmp\377\1\216\216\216\377\220\354\354\341\377\2\353\353\340\377w" \ - "wy\377\210mmp\377\1\200\200\201\377\221\354\354\341\377\2\347\347\334" \ - "\377qqs\377\210mmp\377\1\341\341\327\377\220\354\354\341\377\1\306\306" \ - "\277\377\232mmp\377\2nnq\377\324\324\314\377\220\354\354\341\377\1\316" \ - "\316\306\377\211mmp\377\1\200\200\201\377\222\354\354\341\377\1\224\224" \ - "\223\377\210mmp\377\1\273\273\265\377\221\354\354\341\377\1\245\245\242" \ - "\377\231mmp\377\1\264\264\257\377\221\354\354\341\377\1\247\247\243\377" \ - "\211mmp\377\1\200\200\201\377\222\354\354\341\377\1\273\273\266\377\210" \ - "mmp\377\1\223\223\222\377\221\354\354\341\377\2\353\353\340\377\221\221" \ - "\220\377\227mmp\377\1\235\235\233\377\222\354\354\341\377\1\177\177\200" \ - "\377\211mmp\377\1\200\200\201\377\222\354\354\341\377\2\342\342\330\377" \ - "nnq\377\207mmp\377\2pps\377\346\346\334\377\221\354\354\341\377\2\345" \ - "\345\333\377\217\217\217\377\225mmp\377\2\230\230\226\377\351\351\336" \ - "\377\221\354\354\341\377\1\327\327\316\377\212mmp\377\1\200\200\201\377" \ - "\223\354\354\341\377\1\213\213\213\377\210mmp\377\1\275\275\267\377\222" \ - "\354\354\341\377\2\352\352\337\377\243\243\240\377\223mmp\377\1\257\257" \ - "\252\377\223\354\354\341\377\1\251\251\246\377\212mmp\377\1\200\200\201" \ - "\377\223\354\354\341\377\1\263\263\256\377\210mmp\377\2}}~\377\351\351" \ - "\336\377\223\354\354\341\377\2\302\302\274\377~~\177\377\217mmp\377\2" \ - "\205\205\206\377\313\313\304\377\223\354\354\341\377\2\340\340\326\377" \ - "rrt\377\212mmp\377\1\200\200\201\377\223\354\354\341\377\1\332\332\321" \ - "\377\211mmp\377\1\263\263\256\377\224\354\354\341\377\3\351\351\336\377" \ - "\267\267\262\377\177\177\200\377\213mmp\377\3\204\204\204\377\277\277" \ - "\271\377\353\353\340\377\224\354\354\341\377\1\240\240\236\377\213mm" \ - "p\377\1\200\200\201\377\224\354\354\341\377\1\203\203\204\377\210mmp" \ - "\377\2uuw\377\344\344\331\377\226\354\354\341\377\13\326\326\315\377" \ - "\256\256\252\377\220\220\217\377\202\202\203\377uuw\377mmp\377vvx\377" \ - "\204\204\204\377\222\222\221\377\263\263\256\377\333\333\322\377\226" \ - "\354\354\341\377\2\331\331\320\377nnq\377\213mmp\377\1\200\200\201\377" \ - "\224\354\354\341\377\1\300\300\272\377\211mmp\377\1\247\247\243\377\233" \ - "\354\354\341\377\1\353\353\340\377\233\354\354\341\377\1\226\226\224" \ - "\377\214mmp\377\1\200\200\201\377\224\354\354\341\377\2\353\353\340\377" \ - "\207\207\207\377\210mmp\377\2pps\377\334\334\323\377\265\354\354\341" \ - "\377\1\320\320\310\377\215mmp\377\1\200\200\201\377\225\354\354\341\377" \ - "\1\314\314\305\377\211mmp\377\2\211\211\211\377\350\350\335\377\263\354" \ - "\354\341\377\2\343\343\331\377~~\177\377\215mmp\377\1\200\200\201\377" \ - "\226\354\354\341\377\1\222\222\221\377\211mmp\377\1\234\234\232\377\262" \ - "\354\354\341\377\2\352\352\337\377\216\216\215\377\216mmp\377\1\200\200" \ - "\201\377\226\354\354\341\377\2\327\327\316\377nnq\377\211mmp\377\1\262" \ - "\262\255\377\261\354\354\341\377\1\242\242\237\377\217mmp\377\1\200\200" \ - "\201\377\227\354\354\341\377\1\236\236\234\377\212mmp\377\1\307\307\300" \ - "\377\257\354\354\341\377\1\270\270\263\377\220mmp\377\1\200\200\201\377" \ - "\227\354\354\341\377\2\337\337\325\377rru\377\211mmp\377\2ssv\377\326" \ - "\326\315\377\255\354\354\341\377\2\312\312\303\377oor\377\220mmp\377" \ - "\1\200\200\201\377\230\354\354\341\377\1\304\304\275\377\212mmp\377\2" \ - "ttv\377\310\310\301\377\253\354\354\341\377\2\274\274\266\377pps\377" \ - "\221mmp\377\1\200\200\201\377\231\354\354\341\377\1\257\257\252\377\212" \ - "mmp\377\2nnq\377\263\263\256\377\250\354\354\341\377\2\353\353\340\377" \ - "\246\246\243\377\223mmp\377\1{{|\377\210\314\314\304\377\2\315\315\305" \ - "\377\337\337\325\377\220\354\354\341\377\1\231\231\227\377\213mmp\377" \ - "\2\235\235\233\377\351\351\336\377\245\354\354\341\377\2\345\345\332" \ - "\377\221\221\220\377\237mmp\377\3yy{\377\224\224\223\377\314\314\304" \ - "\377\215\354\354\341\377\2\350\350\335\377\210\210\210\377\213mmp\377" \ - "\2\212\212\212\377\336\336\325\377\243\354\354\341\377\2\327\327\316" \ - "\377\201\201\202\377\243mmp\377\2\240\240\236\377\345\345\333\377\214" \ - "\354\354\341\377\2\340\340\326\377zz|\377\213mmp\377\3qqs\377\251\251" \ - "\245\377\344\344\332\377\237\354\354\341\377\3\340\340\326\377\241\241" \ - "\236\377nnq\377\245mmp\377\2\204\204\204\377\351\351\336\377\214\354" \ - "\354\341\377\2\323\323\312\377rrt\377\214mmp\377\3vvx\377\263\263\256" \ - "\377\350\350\335\377\233\354\354\341\377\3\346\346\333\377\253\253\247" \ - "\377rrt\377\250mmp\377\1\251\251\246\377\215\354\354\341\377\2\323\323" \ - "\312\377zz|\377\215mmp\377\3||}\377\274\274\266\377\347\347\334\377\227" \ - "\354\354\341\377\3\344\344\332\377\266\266\261\377wwy\377\252mmp\377" \ - "\2nnq\377\323\323\313\377\215\354\354\341\377\2\340\340\326\377\211\211" \ - "\211\377\216mmp\377\4pps\377\223\223\222\377\272\272\265\377\341\341" \ - "\327\377\221\354\354\341\377\4\336\336\325\377\267\267\262\377\217\217" \ - "\217\377oor\377\255mmp\377\1\253\253\247\377\216\354\354\341\377\2\350" \ - "\350\335\377\234\234\232\377\221mmp\377\6\212\212\212\377\261\261\254" \ - "\377\310\310\301\377\325\325\314\377\341\341\327\377\353\353\340\377" \ - "\205\354\354\341\377\6\353\353\340\377\341\341\327\377\324\324\313\377" \ - "\307\307\300\377\257\257\252\377\207\207\207\377\261mmp\377\1\221\221" \ - "\220\377\220\354\354\341\377\2\263\263\256\377nnq\377\224mmp\377\7oo" \ - "r\377{{|\377\210\210\210\377\221\221\220\377\207\207\207\377zz|\377n" \ - "nq\377\266mmp\377\1vvx\377\221\354\354\341\377\2\310\310\301\377ttw\377" \ - "\320mmp\377\1}}~\377\222\354\354\341\377\3\341\341\327\377\242\242\237" \ - "\377oor\377\316mmp\377\1\227\227\226\377\224\354\354\341\377\2\332\332" \ - "\321\377\227\227\225\377\315mmp\377\1\262\262\255\377\226\354\354\341" \ - "\377\2\321\321\311\377\214\214\214\377\312mmp\377\2uuw\377\337\337\325" \ - "\377\230\354\354\341\377\2\307\307\300\377\210\210\210\377\310mmp\377" \ - "\1\277\277\271\377\233\354\354\341\377\4\336\336\324\377\267\267\262" \ - "\377\217\217\217\377oor\377\303mmp\377\1\235\235\232\377\237\354\354" \ - "\341\377\4\345\345\332\377\300\300\272\377\230\230\226\377ttv\377\276" \ - "mmp\377\2uuw\377\277\277\271\377\243\354\354\341\377\11\351\351\336\377" \ - "\323\323\313\377\306\306\277\377\271\271\264\377\254\254\250\377\237" \ - "\237\235\377\222\222\221\377\205\205\206\377yy{\377\263mmp\377\4~~\177" \ - "\377\227\227\226\377\260\260\254\377\340\340\326\377\204\354\354\341" \ - "\377") - - diff --git a/psplash-poky-img.h b/psplash-poky-img.h deleted file mode 100644 index 76267e6..0000000 --- a/psplash-poky-img.h +++ /dev/null @@ -1,1021 +0,0 @@ -/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ - -#define POKY_IMG_ROWSTRIDE (1708) -#define POKY_IMG_WIDTH (427) -#define POKY_IMG_HEIGHT (214) -#define POKY_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */ -#define POKY_IMG_RLE_PIXEL_DATA ((uint8*) \ - "\377\363ZE\0\377\363ZE\0\377\363ZE\0\377\363ZE\0\377\363ZE\0\377\363Z" \ - "E\0\377\363ZE\0\377\363ZE\0\377\363ZE\0\377\363ZE\0\377\363ZE\0\377\363" \ - "ZE\0\377\363ZE\0\377\363ZE\0\377\363ZE\0\217\363ZE\0\6\312\335\216\377" \ - "\300\327z\377\306\327\202\377\312\335\216\377\322\341\240\377\342\350" \ - "\266\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\250\363ZE\0\1\267\317^\377" \ - "\206\253\307F\377\5\261\310P\377\263\313Z\377\300\324q\377\311\331\205" \ - "\377\332\344\253\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\242\363ZE\0" \ - "\1\267\317^\377\213\253\307F\377\4\261\310P\377\266\320f\377\311\331" \ - "\205\377\333\350\264\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\236\363" \ - "ZE\0\1\267\317^\377\217\253\307F\377\2\263\312R\377\306\327\202\377\377" \ - "\363ZE\0\377\363ZE\0\377\363ZE\0\234\363ZE\0\1\267\317^\377\222\253\307" \ - "F\377\2\267\317^\377\322\340\231\377\377\363ZE\0\377\363ZE\0\377\363" \ - "ZE\0\231\363ZE\0\1\267\317^\377\224\253\307F\377\2\252\310O\377\312\335" \ - "\216\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\227\363ZE\0\1\267\317^\377" \ - "\226\253\307F\377\2\252\310O\377\312\335\216\377\377\363ZE\0\377\363" \ - "ZE\0\377\363ZE\0\225\363ZE\0\1\267\317^\377\230\253\307F\377\2\263\313" \ - "Z\377\324\344\243\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\223\363ZE\0" \ - "\1\267\317^\377\232\253\307F\377\1\276\321h\377\377\363ZE\0\377\363Z" \ - "E\0\377\363ZE\0\222\363ZE\0\1\267\317^\377\233\253\307F\377\2\262\311" \ - "Q\377\321\336\227\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\220\363ZE\0" \ - "\1\267\317^\377\235\253\307F\377\1\274\321n\377\377\363ZE\0\377\363Z" \ - "E\0\377\363ZE\0\217\363ZE\0\1\267\317^\377\236\253\307F\377\1\263\313" \ - "Z\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\216\363ZE\0\1\267\317^\377" \ - "\237\253\307F\377\2\261\310P\377\332\344\253\377\377\363ZE\0\377\363" \ - "ZE\0\377\363ZE\0\214\363ZE\0\1\267\317^\377\241\253\307F\377\1\321\336" \ - "\227\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\213\363ZE\0\1\267\317^\377" \ - "\242\253\307F\377\1\306\327\202\377\377\363ZE\0\377\363ZE\0\377\363Z" \ - "E\0\212\363ZE\0\1\267\317^\377\243\253\307F\377\1\300\327z\377\377\363" \ - "ZE\0\377\363ZE\0\377\363ZE\0\211\363ZE\0\1\267\317^\377\244\253\307F" \ - "\377\1\303\331|\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\210\363ZE\0\1" \ - "\267\317^\377\245\253\307F\377\1\311\331\205\377\377\363ZE\0\377\363" \ - "ZE\0\377\363ZE\0\207\363ZE\0\1\267\317^\377\245\253\307F\377\2\261\307" \ - "G\377\322\341\240\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\206\363ZE\0" \ - "\1\267\317^\377\246\253\307F\377\2\252\310O\377\333\350\264\377\377\363" \ - "ZE\0\377\363ZE\0\377\363ZE\0\205\363ZE\0\1\267\317^\377\247\253\307F" \ - "\377\1\262\311Q\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\205\363ZE\0\1" \ - "\267\317^\377\250\253\307F\377\1\276\321h\377\377\363ZE\0\377\363ZE\0" \ - "\377\363ZE\0\204\363ZE\0\1\267\317^\377\251\253\307F\377\1\312\335\216" \ - "\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\203\363ZE\0\1\267\317^\377\251" \ - "\253\307F\377\1\252\310O\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\203" \ - "\363ZE\0\1\267\317^\377\252\253\307F\377\1\274\317f\377\377\363ZE\0\377" \ - "\363ZE\0\377\363ZE\0\202\363ZE\0\1\267\317^\377\253\253\307F\377\1\312" \ - "\335\216\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\2\363ZE\0\267\317^\377" \ - "\253\253\307F\377\1\263\312R\377\377\363ZE\0\377\363ZE\0\377\363ZE\0" \ - "\2\363ZE\0\267\317^\377\254\253\307F\377\1\306\327\202\377\377\363ZE" \ - "\0\377\363ZE\0\377\363ZE\0\1\267\317^\377\254\253\307F\377\1\262\311" \ - "Q\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\1\267\317^\377\255\253\307" \ - "F\377\1\300\327z\377\377\363ZE\0\377\363ZE\0\376\363ZE\0\1\267\317^\377" \ - "\255\253\307F\377\1\261\310P\377\377\363ZE\0\377\363ZE\0\376\363ZE\0" \ - "\1\267\317^\377\256\253\307F\377\1\311\331\205\377\377\363ZE\0\377\363" \ - "ZE\0\375\363ZE\0\1\267\317^\377\256\253\307F\377\1\252\310O\377\377\363" \ - "ZE\0\377\363ZE\0\375\363ZE\0\1\267\317^\377\257\253\307F\377\1\322\341" \ - "\240\377\377\363ZE\0\377\363ZE\0\374\363ZE\0\1\267\317^\377\257\253\307" \ - "F\377\1\267\317^\377\377\363ZE\0\377\363ZE\0\374\363ZE\0\1\267\317^\377" \ - "\260\253\307F\377\377\363ZE\0\377\363ZE\0\374\363ZE\0\1\267\317^\377" \ - "\260\253\307F\377\1\322\340\231\377\377\363ZE\0\377\363ZE\0\373\363Z" \ - "E\0\1\267\317^\377\260\253\307F\377\1\266\320f\377\377\363ZE\0\377\363" \ - "ZE\0\373\363ZE\0\1\267\317^\377\260\253\307F\377\1\252\310O\377\377\363" \ - "ZE\0\377\363ZE\0\373\363ZE\0\1\267\317^\377\261\253\307F\377\1\333\350" \ - "\264\377\377\363ZE\0\377\363ZE\0\372\363ZE\0\1\267\317^\377\261\253\307" \ - "F\377\1\314\337\220\377\377\363ZE\0\377\363ZE\0\372\363ZE\0\1\267\317" \ - "^\377\261\253\307F\377\1\274\317f\377\377\363ZE\0\377\363ZE\0\372\363" \ - "ZE\0\1\267\317^\377\261\253\307F\377\1\261\310P\377\377\363ZE\0\377\363" \ - "ZE\0\372\363ZE\0\1\267\317^\377\262\253\307F\377\377\363ZE\0\377\363" \ - "ZE\0\372\363ZE\0\1\267\317^\377\262\253\307F\377\1\334\347\255\377\377" \ - "\363ZE\0\377\363ZE\0\371\363ZE\0\1\267\317^\377\262\253\307F\377\1\321" \ - "\336\227\377\377\363ZE\0\377\363ZE\0\371\363ZE\0\1\267\317^\377\262\253" \ - "\307F\377\1\311\331\205\377\377\363ZE\0\377\363ZE\0\371\363ZE\0\1\267" \ - "\317^\377\262\253\307F\377\1\303\331|\377\377\363ZE\0\377\363ZE\0\371" \ - "\363ZE\0\1\267\317^\377\262\253\307F\377\1\300\324q\377\377\363ZE\0\377" \ - "\363ZE\0\371\363ZE\0\1\267\317^\377\262\253\307F\377\1\274\317f\377\377" \ - "\363ZE\0\377\363ZE\0\371\363ZE\0\1\267\317^\377\262\253\307F\377\1\267" \ - "\317^\377\377\363ZE\0\326\363ZE\0\4\372\262\253\377\366\227\206\377\365" \ - "\202u\377\363q`\377\202\362iV\377\1\364cO\377\202\362iV\377\5\363q`\377" \ - "\364\200n\377\370\223\205\377\371\260\243\377\370\276\262\377\255\363" \ - "ZE\0\202\271\347\340\377\257\363ZE\0\10\271\347\340\377\264\342\333\377" \ - "\227\326\315\377\211\321\306\377\211\325\320\377\232\330\317\377\246" \ - "\334\324\377\264\342\333\377\256\363ZE\0\1\267\317^\377\262\253\307F" \ - "\377\1\263\313Z\377\377\363ZE\0\320\363ZE\0\5\373\272\260\377\365\210" \ - "x\377\362iV\377\361YD\377\357O:\377\216\361H2\377\6\362I9\377\357O:\377" \ - "\361YD\377\362iV\377\365\202u\377\371\270\256\377\250\363ZE\0\206\234" \ - "\333\322\377\1\246\334\324\377\202\250\336\326\377\1\264\342\333\377" \ - "\237\363ZE\0\4\264\342\333\377\250\336\326\377\246\334\324\377\235\334" \ - "\323\377\205\234\333\322\377\2\232\330\317\377}\316\302\377\206o\312" \ - "\275\377\5p\313\276\377w\315\307\377}\316\302\377\216\326\313\377\250" \ - "\336\326\377\250\363ZE\0\1\276\321h\377\202\263\312R\377\202\263\313" \ - "Z\377\1\267\317^\377\202\266\320f\377\1\271\323h\377\242\300\324q\377" \ - "\1\271\323h\377\202\266\320f\377\1\267\317^\377\202\263\313Z\377\202" \ - "\263\312R\377\2\263\313Z\377\274\317f\377\262\274\321n\377\1\316\324" \ - "u\377\202\372\326\201\377\3\372\330\211\377\372\332\221\377\375\337\243" \ - "\377\335\363ZE\0\3\375\337\243\377\375\334\223\377\372\330\211\377\202" \ - "\372\326\201\377\261\363ZE\0\4\370\223\205\377\362iV\377\362R<\377\362" \ - "I3\377\230\361H2\377\3\361Q;\377\362iV\377\365\210x\377\245\363ZE\0\213" \ - "\234\333\322\377\3\236\335\324\377\250\336\326\377\264\342\333\377\227" \ - "\363ZE\0\3\264\342\333\377\246\334\324\377\235\334\323\377\212\234\333" \ - "\322\377\2\232\330\317\377}\316\302\377\213o\312\275\377\4h\312\302\377" \ - "}\316\302\377\216\326\313\377\264\342\333\377\244\363ZE\0\1\300\324q" \ - "\377\207\263\313Z\377\202\267\317^\377\4\274\317f\377\300\324q\377\300" \ - "\327z\377\306\327\202\377\230\311\331\205\377\4\306\327\202\377\300\327" \ - "z\377\300\324q\377\266\320f\377\202\267\317^\377\207\263\313Z\377\2\263" \ - "\312R\377\261\307G\377\262\253\307F\377\1\307\311V\377\207\371\313^\377" \ - "\5\370\313e\377\373\317o\377\372\326\201\377\372\332\221\377\371\346" \ - "\264\377\320\363ZE\0\4\374\335\232\377\372\326\201\377\374\320p\377\370" \ - "\313e\377\207\371\313^\377\1\375\337\243\377\255\363ZE\0\3\366\227\206" \ - "\377\362iV\377\357O:\377\237\361H2\377\3\362I3\377\364cO\377\365\220" \ - "\203\377\242\363ZE\0\217\234\333\322\377\2\246\334\324\377\264\342\333" \ - "\377\221\363ZE\0\2\252\340\331\377\235\334\323\377\216\234\333\322\377" \ - "\2\232\330\317\377}\316\302\377\216o\312\275\377\4p\313\276\377{\315" \ - "\301\377\211\325\320\377\264\342\333\377\241\363ZE\0\1\300\324q\377\214" \ - "\263\313Z\377\4\267\317^\377\274\317f\377\300\324q\377\300\327z\377\222" \ - "\311\331\205\377\4\300\327z\377\300\324q\377\276\321h\377\267\317^\377" \ - "\214\263\313Z\377\2\263\312R\377\261\307G\377\262\253\307F\377\1\307" \ - "\311V\377\214\371\313^\377\3\370\313e\377\370\324x\377\374\335\232\377" \ - "\311\363ZE\0\3\375\337\243\377\372\326\201\377\370\313e\377\214\371\313" \ - "^\377\1\375\337\243\377\253\363ZE\0\2\366{l\377\357O:\377\245\361H2\377" \ - "\3\362I9\377\363q`\377\371\270\256\377\237\363ZE\0\222\234\333\322\377" \ - "\1\250\336\326\377\214\363ZE\0\2\264\342\333\377\246\334\324\377\221" \ - "\234\333\322\377\2\232\330\317\377}\316\302\377\221o\312\275\377\3p\313" \ - "\276\377{\315\301\377\246\334\324\377\237\363ZE\0\1\300\324q\377\217" \ - "\263\313Z\377\4\267\317^\377\271\323h\377\300\324q\377\306\327\202\377" \ - "\214\311\331\205\377\4\306\327\202\377\300\324q\377\274\317f\377\267" \ - "\317^\377\217\263\313Z\377\2\263\312R\377\261\307G\377\262\253\307F\377" \ - "\1\307\311V\377\220\371\313^\377\2\373\317o\377\374\335\232\377\303\363" \ - "ZE\0\2\375\337\243\377\370\324x\377\220\371\313^\377\1\375\337\243\377" \ - "\250\363ZE\0\2\373\272\260\377\365l_\377\253\361H2\377\2\364cO\377\371" \ - "\252\237\377\235\363ZE\0\1\235\334\323\377\223\234\333\322\377\2\246" \ - "\334\324\377\271\347\340\377\207\363ZE\0\1\252\340\331\377\224\234\333" \ - "\322\377\2\232\330\317\377}\316\302\377\224o\312\275\377\2p\313\276\377" \ - "\232\330\317\377\235\363ZE\0\1\300\327z\377\222\263\313Z\377\3\267\317" \ - "^\377\300\324q\377\303\331|\377\210\311\331\205\377\3\306\327\202\377" \ - "\274\321n\377\267\317^\377\222\263\313Z\377\2\263\312R\377\261\307G\377" \ - "\262\253\307F\377\1\310\313_\377\223\371\313^\377\2\372\326\201\377\371" \ - "\346\264\377\276\363ZE\0\2\372\330\211\377\370\313e\377\222\371\313^" \ - "\377\1\375\337\243\377\247\363ZE\0\1\364kX\377\257\361H2\377\2\363[L" \ - "\377\371\270\256\377\233\363ZE\0\1\236\335\324\377\225\234\333\322\377" \ - "\2\246\334\324\377\271\347\340\377\203\363ZE\0\1\250\336\326\377\226" \ - "\234\333\322\377\2\232\330\317\377}\316\302\377\226o\312\275\377\2t\312" \ - "\304\377\232\330\317\377\233\363ZE\0\1\300\327z\377\225\263\313Z\377" \ - "\2\276\321h\377\303\331|\377\204\311\331\205\377\2\300\327z\377\276\321" \ - "h\377\225\263\313Z\377\2\263\312R\377\261\307G\377\262\253\307F\377\2" \ - "\317\314a\377\367\312d\377\224\371\313^\377\2\372\316n\377\376\343\254" \ - "\377\272\363ZE\0\1\370\324x\377\225\371\313^\377\1\375\337\243\377\245" \ - "\363ZE\0\1\363q`\377\263\361H2\377\1\364kX\377\232\363ZE\0\1\246\334" \ - "\324\377\227\234\333\322\377\3\232\330\317\377\227\326\315\377\232\330" \ - "\317\377\227\234\333\322\377\2\232\330\317\377}\316\302\377\230o\312" \ - "\275\377\2p\313\276\377\246\334\324\377\231\363ZE\0\1\311\331\205\377" \ - "\227\263\313Z\377\1\271\323h\377\202\303\331|\377\1\276\321h\377\227" \ - "\263\313Z\377\2\263\312R\377\261\307G\377\262\253\307F\377\2\324\322" \ - "m\377\367\312d\377\226\371\313^\377\2\370\313e\377\376\343\254\377\266" \ - "\363ZE\0\1\373\317o\377\227\371\313^\377\1\375\337\243\377\243\363ZE" \ - "\0\2\367\231\216\377\361Q;\377\265\361H2\377\2\357O3\377\365\210x\377" \ - "\230\363ZE\0\1\250\336\326\377\225\234\333\322\377\3\232\330\317\377" \ - "\211\321\306\377{\315\301\377\202}\316\302\377\2\211\325\320\377\232" \ - "\330\317\377\225\234\333\322\377\2\232\330\317\377}\316\302\377\232o" \ - "\312\275\377\1{\315\301\377\230\363ZE\0\1\311\331\205\377\227\263\313" \ - "Z\377\202\263\312R\377\1\262\311Q\377\230\263\313Z\377\2\263\312R\377" \ - "\261\307G\377\262\253\307F\377\2\334\326\200\377\367\312d\377\230\371" \ - "\313^\377\1\373\317o\377\263\363ZE\0\1\372\326\201\377\231\371\313^\377" \ - "\1\375\337\243\377\242\363ZE\0\2\362iV\377\362I3\377\270\361H2\377\1" \ - "\364cO\377\227\363ZE\0\1\264\342\333\377\223\234\333\322\377\2\232\330" \ - "\317\377\227\326\315\377\205}\316\302\377\3x\317\311\377\211\321\306" \ - "\377\232\330\317\377\224\234\333\322\377\2\232\330\317\377}\316\302\377" \ - "\233o\312\275\377\2y\312\276\377\232\330\317\377\226\363ZE\0\1\312\335" \ - "\216\377\226\263\313Z\377\2\263\312R\377\252\310O\377\202\253\307F\377" \ - "\2\252\310O\377\262\311Q\377\226\263\313Z\377\2\263\312R\377\261\307" \ - "G\377\262\253\307F\377\2\355\340\246\377\367\312d\377\231\371\313^\377" \ - "\2\370\313e\377\374\332\213\377\257\363ZE\0\2\375\337\243\377\370\313" \ - "e\377\232\371\313^\377\1\375\337\243\377\240\363ZE\0\2\366\247\234\377" \ - "\360XC\377\273\361H2\377\2\362R<\377\367\231\216\377\226\363ZE\0\222" \ - "\234\333\322\377\2\232\330\317\377\211\321\306\377\211}\316\302\377\1" \ - "\216\326\313\377\223\234\333\322\377\2\232\330\317\377}\316\302\377\235" \ - "o\312\275\377\1x\317\311\377\225\363ZE\0\1\314\337\220\377\224\263\313" \ - "Z\377\2\263\312R\377\261\310P\377\206\253\307F\377\2\252\310O\377\263" \ - "\312R\377\224\263\313Z\377\2\263\312R\377\261\307G\377\261\253\307F\377" \ - "\3\261\310P\377\363ZE\0\367\312d\377\233\371\313^\377\1\373\317o\377" \ - "\255\363ZE\0\1\372\326\201\377\234\371\313^\377\1\375\337\243\377\237" \ - "\363ZE\0\2\367\213\201\377\362I3\377\275\361H2\377\2\362I3\377\363yj" \ - "\377\225\363ZE\0\1\246\334\324\377\220\234\333\322\377\2\232\330\317" \ - "\377\211\321\306\377\212}\316\302\377\2x\317\311\377\211\321\306\377" \ - "\222\234\333\322\377\2\232\330\317\377}\316\302\377\236o\312\275\377" \ - "\2{\315\301\377\264\342\333\377\223\363ZE\0\2\321\336\227\377\267\317" \ - "^\377\222\263\313Z\377\2\263\312R\377\261\310P\377\210\253\307F\377\2" \ - "\261\310P\377\263\312R\377\223\263\313Z\377\2\263\312R\377\261\307G\377" \ - "\261\253\307F\377\3\266\320f\377\363ZE\0\367\312d\377\234\371\313^\377" \ - "\2\370\313e\377\374\335\232\377\251\363ZE\0\2\372\346\255\377\370\313" \ - "e\377\235\371\313^\377\1\375\337\243\377\236\363ZE\0\1\363q`\377\301" \ - "\361H2\377\1\364cO\377\224\363ZE\0\1\246\334\324\377\217\234\333\322" \ - "\377\1\232\330\317\377\216}\316\302\377\2\211\321\306\377\232\330\317" \ - "\377\220\234\333\322\377\2\232\330\317\377}\316\302\377\237o\312\275" \ - "\377\2t\312\304\377\246\334\324\377\222\363ZE\0\2\322\340\231\377\266" \ - "\320f\377\221\263\313Z\377\1\263\312R\377\213\253\307F\377\2\261\307" \ - "G\377\262\311Q\377\222\263\313Z\377\2\263\312R\377\261\307G\377\261\253" \ - "\307F\377\3\312\335\216\377\363ZE\0\367\312d\377\236\371\313^\377\1\372" \ - "\326\201\377\247\363ZE\0\1\372\332\221\377\237\371\313^\377\1\375\337" \ - "\243\377\235\363ZE\0\1\364cO\377\303\361H2\377\1\360XC\377\223\363ZE" \ - "\0\1\252\340\331\377\216\234\333\322\377\1\220\330\315\377\220}\316\302" \ - "\377\2\200\322\306\377\232\330\317\377\217\234\333\322\377\2\232\330" \ - "\317\377}\316\302\377\241o\312\275\377\1\227\326\315\377\221\363ZE\0" \ - "\2\322\340\231\377\274\321n\377\220\263\313Z\377\1\252\310O\377\216\253" \ - "\307F\377\1\261\310P\377\221\263\313Z\377\2\263\312R\377\261\307G\377" \ - "\261\253\307F\377\3\333\350\264\377\363ZE\0\367\312d\377\237\371\313" \ - "^\377\1\372\316n\377\245\363ZE\0\1\370\324x\377\240\371\313^\377\1\375" \ - "\337\243\377\234\363ZE\0\1\363[L\377\305\361H2\377\2\362R<\377\373\272" \ - "\260\377\222\363ZE\0\215\234\333\322\377\2\216\326\313\377x\317\311\377" \ - "\222}\316\302\377\1\232\330\317\377\216\234\333\322\377\2\232\330\317" \ - "\377}\316\302\377\242o\312\275\377\1\211\321\306\377\220\363ZE\0\2\322" \ - "\340\231\377\300\327z\377\216\263\313Z\377\2\263\312R\377\252\310O\377" \ - "\220\253\307F\377\2\261\310P\377\263\312R\377\217\263\313Z\377\2\263" \ - "\312R\377\261\307G\377\260\253\307F\377\1\261\310P\377\202\363ZE\0\1" \ - "\367\312d\377\240\371\313^\377\1\370\313e\377\243\363ZE\0\1\373\317o" \ - "\377\241\371\313^\377\1\375\337\243\377\233\363ZE\0\1\360XC\377\307\361" \ - "H2\377\2\357O:\377\371\270\256\377\221\363ZE\0\1\235\334\323\377\213" \ - "\234\333\322\377\2\216\326\313\377x\317\311\377\224}\316\302\377\1\232" \ - "\330\317\377\215\234\333\322\377\2\232\330\317\377}\316\302\377\243o" \ - "\312\275\377\1\211\321\306\377\217\363ZE\0\3\322\340\231\377\306\327" \ - "\202\377\267\317^\377\215\263\313Z\377\1\252\310O\377\222\253\307F\377" \ - "\1\261\310P\377\217\263\313Z\377\2\263\312R\377\261\307G\377\260\253" \ - "\307F\377\1\263\313Z\377\202\363ZE\0\1\367\312d\377\242\371\313^\377" \ - "\1\371\346\264\377\240\363ZE\0\1\370\313e\377\242\371\313^\377\1\375" \ - "\337\243\377\232\363ZE\0\1\362R<\377\311\361H2\377\2\361Q;\377\371\270" \ - "\256\377\220\363ZE\0\1\250\336\326\377\212\234\333\322\377\2\216\326" \ - "\313\377w\315\307\377\226}\316\302\377\1\232\330\317\377\214\234\333" \ - "\322\377\2\232\330\317\377}\316\302\377\244o\312\275\377\1\200\322\306" \ - "\377\216\363ZE\0\3\322\340\231\377\311\331\205\377\271\323h\377\214\263" \ - "\313Z\377\1\252\310O\377\224\253\307F\377\1\252\310O\377\216\263\313" \ - "Z\377\2\263\312R\377\261\307G\377\260\253\307F\377\1\321\336\227\377" \ - "\202\363ZE\0\1\367\312d\377\243\371\313^\377\1\372\346\255\377\236\363" \ - "ZE\0\1\370\313e\377\243\371\313^\377\1\375\337\243\377\231\363ZE\0\1" \ - "\361YD\377\313\361H2\377\1\360XC\377\221\363ZE\0\211\234\333\322\377" \ - "\1\227\326\315\377\230}\316\302\377\2\200\322\306\377\232\330\317\377" \ - "\213\234\333\322\377\2\232\330\317\377}\316\302\377\245o\312\275\377" \ - "\1\211\325\320\377\215\363ZE\0\3\322\340\231\377\311\331\205\377\300" \ - "\324q\377\212\263\313Z\377\2\263\312R\377\252\310O\377\226\253\307F\377" \ - "\1\261\310P\377\215\263\313Z\377\2\263\312R\377\261\307G\377\257\253" \ - "\307F\377\1\261\310P\377\203\363ZE\0\1\367\312d\377\244\371\313^\377" \ - "\1\377\345\264\377\234\363ZE\0\1\372\316n\377\244\371\313^\377\1\375" \ - "\337\243\377\230\363ZE\0\1\362iV\377\315\361H2\377\1\361`L\377\220\363" \ - "ZE\0\1\246\334\324\377\207\234\333\322\377\1\232\330\317\377\232}\316" \ - "\302\377\2\211\321\306\377\232\330\317\377\212\234\333\322\377\2\232" \ - "\330\317\377}\316\302\377\246o\312\275\377\1\232\330\317\377\214\363" \ - "ZE\0\1\322\340\231\377\202\311\331\205\377\212\263\313Z\377\1\252\310" \ - "O\377\230\253\307F\377\1\261\310P\377\214\263\313Z\377\2\263\312R\377" \ - "\261\307G\377\257\253\307F\377\1\267\317^\377\203\363ZE\0\1\367\312d" \ - "\377\244\371\313^\377\1\370\313e\377\233\363ZE\0\1\373\317o\377\245\371" \ - "\313^\377\1\375\337\243\377\227\363ZE\0\1\366{l\377\317\361H2\377\1\362" \ - "iV\377\217\363ZE\0\1\264\342\333\377\206\234\333\322\377\2\232\330\317" \ - "\377x\317\311\377\233}\316\302\377\2\211\321\306\377\232\330\317\377" \ - "\211\234\333\322\377\2\232\330\317\377}\316\302\377\247o\312\275\377" \ - "\1\250\336\326\377\213\363ZE\0\1\322\340\231\377\202\311\331\205\377" \ - "\1\276\321h\377\210\263\313Z\377\1\261\310P\377\232\253\307F\377\1\252" \ - "\310O\377\213\263\313Z\377\2\263\312R\377\261\307G\377\257\253\307F\377" \ - "\1\322\340\231\377\203\363ZE\0\1\367\312d\377\245\371\313^\377\1\370" \ - "\313e\377\231\363ZE\0\1\374\320p\377\246\371\313^\377\1\375\337\243\377" \ - "\226\363ZE\0\2\367\231\216\377\362I3\377\320\361H2\377\1\366{l\377\217" \ - "\363ZE\0\205\234\333\322\377\2\232\330\317\377\211\321\306\377\235}\316" \ - "\302\377\1\216\326\313\377\211\234\333\322\377\2\232\330\317\377}\316" \ - "\302\377\247o\312\275\377\1t\312\304\377\213\363ZE\0\1\322\340\231\377" \ - "\202\311\331\205\377\1\300\327z\377\207\263\313Z\377\1\255\313Q\377\234" \ - "\253\307F\377\1\262\311Q\377\212\263\313Z\377\2\263\312R\377\261\307" \ - "G\377\256\253\307F\377\1\263\312R\377\204\363ZE\0\1\367\312d\377\246" \ - "\371\313^\377\1\373\317o\377\227\363ZE\0\1\372\326\201\377\247\371\313" \ - "^\377\1\375\337\243\377\226\363ZE\0\1\357O:\377\322\361H2\377\1\366\247" \ - "\234\377\216\363ZE\0\1\250\336\326\377\204\234\333\322\377\1\211\321" \ - "\306\377\237}\316\302\377\1\232\330\317\377\210\234\333\322\377\2\232" \ - "\330\317\377}\316\302\377\250o\312\275\377\1}\316\302\377\212\363ZE\0" \ - "\1\322\340\231\377\203\311\331\205\377\1\267\317^\377\205\263\313Z\377" \ - "\1\263\312R\377\236\253\307F\377\1\263\312R\377\211\263\313Z\377\2\263" \ - "\312R\377\261\307G\377\256\253\307F\377\1\300\327z\377\204\363ZE\0\1" \ - "\367\312d\377\247\371\313^\377\1\372\326\201\377\225\363ZE\0\1\374\335" \ - "\232\377\250\371\313^\377\1\375\337\243\377\225\363ZE\0\1\361`L\377\323" \ - "\361H2\377\1\357O:\377\217\363ZE\0\203\234\333\322\377\2\232\330\317" \ - "\377x\317\311\377\237}\316\302\377\2\211\321\306\377\232\330\317\377" \ - "\207\234\333\322\377\2\232\330\317\377}\316\302\377\251o\312\275\377" \ - "\1\216\326\313\377\211\363ZE\0\1\322\340\231\377\203\311\331\205\377" \ - "\1\300\324q\377\204\263\313Z\377\2\263\312R\377\252\310O\377\236\253" \ - "\307F\377\1\252\310O\377\211\263\313Z\377\2\263\312R\377\261\307G\377" \ - "\255\253\307F\377\1\252\310O\377\205\363ZE\0\1\367\312d\377\250\371\313" \ - "^\377\1\374\335\232\377\224\363ZE\0\251\371\313^\377\1\375\337\243\377" \ - "\224\363ZE\0\1\365\210x\377\325\361H2\377\1\364kX\377\216\363ZE\0\3\246" \ - "\334\324\377\234\333\322\377\232\330\317\377\242}\316\302\377\1\211\321" \ - "\306\377\207\234\333\322\377\2\232\330\317\377}\316\302\377\251o\312" \ - "\275\377\2p\313\276\377\264\342\333\377\210\363ZE\0\1\322\340\231\377" \ - "\204\311\331\205\377\1\267\317^\377\203\263\313Z\377\1\252\310O\377\240" \ - "\253\307F\377\1\252\310O\377\210\263\313Z\377\2\263\312R\377\261\307" \ - "G\377\255\253\307F\377\1\274\317f\377\205\363ZE\0\1\367\312d\377\250" \ - "\371\313^\377\1\370\313e\377\223\363ZE\0\1\370\313e\377\251\371\313^" \ - "\377\1\375\337\243\377\223\363ZE\0\2\373\272\260\377\357O:\377\326\361" \ - "H2\377\1\366\247\234\377\216\363ZE\0\2\234\333\322\377\211\321\306\377" \ - "\242}\316\302\377\2x\317\311\377\232\330\317\377\206\234\333\322\377" \ - "\2\232\330\317\377}\316\302\377\252o\312\275\377\1{\315\301\377\210\363" \ - "ZE\0\1\322\340\231\377\204\311\331\205\377\1\274\321n\377\202\263\313" \ - "Z\377\1\263\312R\377\242\253\307F\377\1\263\312R\377\207\263\313Z\377" \ - "\2\263\312R\377\261\307G\377\255\253\307F\377\1\333\350\264\377\205\363" \ - "ZE\0\1\367\312d\377\251\371\313^\377\1\370\313e\377\221\363ZE\0\1\372" \ - "\330\211\377\252\371\313^\377\1\375\337\243\377\223\363ZE\0\1\364cO\377" \ - "\327\361H2\377\1\361Q;\377\216\363ZE\0\1\235\334\323\377\244}\316\302" \ - "\377\1x\317\311\377\206\234\333\322\377\2\232\330\317\377}\316\302\377" \ - "\253o\312\275\377\1\216\326\313\377\207\363ZE\0\1\322\340\231\377\204" \ - "\311\331\205\377\3\306\327\202\377\267\317^\377\263\312R\377\243\253" \ - "\307F\377\2\261\310P\377\263\312R\377\206\263\313Z\377\2\263\312R\377" \ - "\261\307G\377\254\253\307F\377\1\274\321n\377\206\363ZE\0\1\367\312d" \ - "\377\252\371\313^\377\1\372\330\211\377\217\363ZE\0\1\377\345\264\377" \ - "\253\371\313^\377\1\375\337\243\377\222\363ZE\0\2\367\231\216\377\362" \ - "I3\377\330\361H2\377\1\365\202u\377\215\363ZE\0\1\246\334\324\377\245" \ - "}\316\302\377\1\211\325\320\377\205\234\333\322\377\2\232\330\317\377" \ - "}\316\302\377\253o\312\275\377\1p\313\276\377\207\363ZE\0\1\322\340\231" \ - "\377\205\311\331\205\377\2\300\324q\377\261\310P\377\244\253\307F\377" \ - "\1\252\310O\377\206\263\313Z\377\2\263\312R\377\261\307G\377\253\253" \ - "\307F\377\1\252\310O\377\207\363ZE\0\1\367\312d\377\253\371\313^\377" \ - "\217\363ZE\0\1\372\316n\377\253\371\313^\377\1\375\337\243\377\222\363" \ - "ZE\0\1\360XC\377\331\361H2\377\1\357O:\377\215\363ZE\0\2\234\333\322" \ - "\377\211\321\306\377\245}\316\302\377\1\232\330\317\377\204\234\333\322" \ - "\377\2\232\330\317\377}\316\302\377\254o\312\275\377\1}\316\302\377\206" \ - "\363ZE\0\1\322\340\231\377\205\311\331\205\377\2\300\327z\377\252\310" \ - "O\377\245\253\307F\377\1\262\311Q\377\205\263\313Z\377\2\263\312R\377" \ - "\261\307G\377\253\253\307F\377\1\300\327z\377\207\363ZE\0\1\367\312d" \ - "\377\253\371\313^\377\1\373\320w\377\215\363ZE\0\1\374\335\232\377\254" \ - "\371\313^\377\1\375\337\243\377\221\363ZE\0\1\365\210x\377\333\361H2" \ - "\377\1\363yj\377\213\363ZE\0\4\264\342\333\377\234\333\322\377\232\330" \ - "\317\377x\317\311\377\244}\316\302\377\1\216\326\313\377\204\234\333" \ - "\322\377\2\232\330\317\377}\316\302\377\255o\312\275\377\206\363ZE\0" \ - "\1\322\340\231\377\205\311\331\205\377\2\274\317f\377\262\311Q\377\245" \ - "\253\307F\377\1\252\310O\377\205\263\313Z\377\2\263\312R\377\261\307" \ - "G\377\252\253\307F\377\1\262\311Q\377\210\363ZE\0\1\367\312d\377\254" \ - "\371\313^\377\215\363ZE\0\1\370\313e\377\254\371\313^\377\1\375\337\243" \ - "\377\221\363ZE\0\1\362R<\377\333\361H2\377\1\357O:\377\213\363ZE\0\1" \ - "\235\334\323\377\202\234\333\322\377\1\211\321\306\377\245}\316\302\377" \ - "\1\232\330\317\377\203\234\333\322\377\2\232\330\317\377}\316\302\377" \ - "\255o\312\275\377\1}\316\302\377\205\363ZE\0\1\322\340\231\377\204\311" \ - "\331\205\377\1\300\327z\377\202\263\313Z\377\1\252\310O\377\245\253\307" \ - "F\377\1\262\311Q\377\204\263\313Z\377\2\263\312R\377\261\307G\377\252" \ - "\253\307F\377\1\322\341\240\377\210\363ZE\0\1\367\312d\377\254\371\313" \ - "^\377\1\373\320w\377\213\363ZE\0\1\375\334\223\377\255\371\313^\377\1" \ - "\375\337\243\377\220\363ZE\0\1\366\227\206\377\335\361H2\377\1\363yj" \ - "\377\211\363ZE\0\1\264\342\333\377\203\234\333\322\377\1\232\330\317" \ - "\377\245}\316\302\377\1\216\326\313\377\203\234\333\322\377\2\232\330" \ - "\317\377}\316\302\377\256o\312\275\377\205\363ZE\0\1\322\340\231\377" \ - "\204\311\331\205\377\1\266\320f\377\202\263\313Z\377\1\263\312R\377\245" \ - "\253\307F\377\1\252\310O\377\204\263\313Z\377\2\263\312R\377\261\307" \ - "G\377\251\253\307F\377\1\274\317f\377\211\363ZE\0\1\367\312d\377\255" \ - "\371\313^\377\1\371\346\264\377\212\363ZE\0\1\370\313e\377\255\371\313" \ - "^\377\1\375\337\243\377\220\363ZE\0\1\363SC\377\335\361H2\377\1\357O" \ - ":\377\211\363ZE\0\1\235\334\323\377\204\234\333\322\377\2\232\330\317" \ - "\377x\317\311\377\243}\316\302\377\2\203\317\313\377\232\330\317\377" \ - "\202\234\333\322\377\2\232\330\317\377}\316\302\377\256o\312\275\377" \ - "\1\211\321\306\377\204\363ZE\0\1\322\340\231\377\203\311\331\205\377" \ - "\1\300\327z\377\204\263\313Z\377\1\262\311Q\377\245\253\307F\377\1\262" \ - "\311Q\377\203\263\313Z\377\2\263\312R\377\261\307G\377\250\253\307F\377" \ - "\1\261\310P\377\212\363ZE\0\1\367\312d\377\255\371\313^\377\1\373\320" \ - "w\377\211\363ZE\0\1\372\332\221\377\256\371\313^\377\1\375\337\243\377" \ - "\217\363ZE\0\1\371\252\237\377\337\361H2\377\1\367\213\201\377\210\363" \ - "ZE\0\206\234\333\322\377\2\216\326\313\377x\317\311\377\243}\316\302" \ - "\377\1\216\326\313\377\202\234\333\322\377\2\232\330\317\377}\316\302" \ - "\377\257o\312\275\377\204\363ZE\0\1\322\340\231\377\203\311\331\205\377" \ - "\1\276\321h\377\205\263\313Z\377\1\252\310O\377\244\253\307F\377\1\252" \ - "\310O\377\203\263\313Z\377\2\263\312R\377\261\307G\377\250\253\307F\377" \ - "\1\324\344\243\377\212\363ZE\0\1\367\312d\377\256\371\313^\377\211\363" \ - "ZE\0\1\370\313e\377\256\371\313^\377\1\375\337\243\377\217\363ZE\0\1" \ - "\364cO\377\337\361H2\377\1\363[L\377\207\363ZE\0\1\250\336\326\377\207" \ - "\234\333\322\377\1\216\326\313\377\243}\316\302\377\1\211\321\306\377" \ - "\202\234\333\322\377\2\232\330\317\377}\316\302\377\257o\312\275\377" \ - "\1\246\334\324\377\203\363ZE\0\1\322\340\231\377\202\311\331\205\377" \ - "\1\306\327\202\377\207\263\313Z\377\1\261\310P\377\244\253\307F\377\1" \ - "\263\312R\377\202\263\313Z\377\2\263\312R\377\261\307G\377\247\253\307" \ - "F\377\1\311\331\205\377\213\363ZE\0\1\367\312d\377\256\371\313^\377\1" \ - "\372\330\211\377\207\363ZE\0\1\375\337\243\377\257\371\313^\377\1\375" \ - "\337\243\377\217\363ZE\0\341\361H2\377\1\371\270\256\377\206\363ZE\0" \ - "\211\234\333\322\377\1\211\321\306\377\243}\316\302\377\4\232\330\317" \ - "\377\234\333\322\377\232\330\317\377}\316\302\377\257o\312\275\377\1" \ - "{\315\301\377\203\363ZE\0\1\322\340\231\377\202\311\331\205\377\1\300" \ - "\324q\377\210\263\313Z\377\1\261\310P\377\243\253\307F\377\1\261\310" \ - "P\377\202\263\313Z\377\2\263\312R\377\261\307G\377\246\253\307F\377\1" \ - "\274\321n\377\214\363ZE\0\1\367\312d\377\256\371\313^\377\1\370\313e" \ - "\377\207\363ZE\0\1\374\320p\377\257\371\313^\377\1\375\337\243\377\216" \ - "\363ZE\0\1\366\227\206\377\341\361H2\377\1\366tb\377\205\363ZE\0\1\264" \ - "\342\333\377\211\234\333\322\377\2\232\330\317\377\211\321\306\377\242" \ - "}\316\302\377\4\216\326\313\377\234\333\322\377\232\330\317\377}\316" \ - "\302\377\260o\312\275\377\203\363ZE\0\1\322\340\231\377\202\311\331\205" \ - "\377\1\266\320f\377\210\263\313Z\377\1\263\312R\377\243\253\307F\377" \ - "\1\261\310P\377\202\263\313Z\377\2\263\312R\377\261\307G\377\245\253" \ - "\307F\377\1\266\320f\377\215\363ZE\0\1\367\312d\377\257\371\313^\377" \ - "\1\374\335\232\377\206\363ZE\0\260\371\313^\377\1\375\337\243\377\216" \ - "\363ZE\0\1\364cO\377\341\361H2\377\1\363SC\377\205\363ZE\0\1\246\334" \ - "\324\377\212\234\333\322\377\2\232\330\317\377\211\321\306\377\241}\316" \ - "\302\377\4\200\322\306\377\234\333\322\377\232\330\317\377}\316\302\377" \ - "\260o\312\275\377\1\234\333\322\377\202\363ZE\0\3\322\340\231\377\311" \ - "\331\205\377\300\327z\377\212\263\313Z\377\1\262\311Q\377\243\253\307" \ - "F\377\4\263\312R\377\263\313Z\377\263\312R\377\261\307G\377\244\253\307" \ - "F\377\1\263\313Z\377\216\363ZE\0\1\367\312d\377\257\371\313^\377\1\373" \ - "\320w\377\205\363ZE\0\1\372\330\211\377\260\371\313^\377\1\375\337\243" \ - "\377\216\363ZE\0\1\362I3\377\342\361H2\377\1\371\270\256\377\204\363" \ - "ZE\0\214\234\333\322\377\2\232\330\317\377\211\321\306\377\241}\316\302" \ - "\377\202\232\330\317\377\1}\316\302\377\260o\312\275\377\1}\316\302\377" \ - "\202\363ZE\0\3\322\340\231\377\311\331\205\377\300\324q\377\213\263\313" \ - "Z\377\1\262\311Q\377\242\253\307F\377\4\252\310O\377\263\313Z\377\263" \ - "\312R\377\261\307G\377\243\253\307F\377\1\263\313Z\377\217\363ZE\0\1" \ - "\367\312d\377\257\371\313^\377\1\370\313e\377\205\363ZE\0\1\370\313e" \ - "\377\260\371\313^\377\1\375\337\243\377\215\363ZE\0\1\370\242\232\377" \ - "\343\361H2\377\1\365\202u\377\203\363ZE\0\1\264\342\333\377\215\234\333" \ - "\322\377\2\232\330\317\377\211\321\306\377\240}\316\302\377\3\227\326" \ - "\315\377\232\330\317\377}\316\302\377\261o\312\275\377\202\363ZE\0\3" \ - "\322\340\231\377\306\327\202\377\266\320f\377\214\263\313Z\377\2\262" \ - "\311Q\377\261\307G\377\240\253\307F\377\4\252\310O\377\263\313Z\377\263" \ - "\312R\377\261\307G\377\242\253\307F\377\1\263\313Z\377\220\363ZE\0\1" \ - "\367\312d\377\260\371\313^\377\1\375\337\243\377\204\363ZE\0\1\367\312" \ - "d\377\260\371\313^\377\1\375\337\243\377\215\363ZE\0\1\363yj\377\343" \ - "\361H2\377\1\360XC\377\203\363ZE\0\1\250\336\326\377\216\234\333\322" \ - "\377\2\232\330\317\377\211\321\306\377\237}\316\302\377\3\211\321\306" \ - "\377\232\330\317\377}\316\302\377\261o\312\275\377\4\250\336\326\377" \ - "\363ZE\0\322\340\231\377\300\327z\377\216\263\313Z\377\1\262\311Q\377" \ - "\241\253\307F\377\202\263\312R\377\1\261\307G\377\241\253\307F\377\1" \ - "\267\317^\377\221\363ZE\0\1\367\312d\377\260\371\313^\377\1\372\326\201" \ - "\377\203\363ZE\0\1\375\337\243\377\261\371\313^\377\1\375\337\243\377" \ - "\215\363ZE\0\1\360XC\377\343\361H2\377\1\357O:\377\203\363ZE\0\1\246" \ - "\334\324\377\220\234\333\322\377\2\211\321\306\377x\317\311\377\236}" \ - "\316\302\377\2\232\330\317\377}\316\302\377\261o\312\275\377\4\227\326" \ - "\315\377\363ZE\0\322\340\231\377\300\324q\377\217\263\313Z\377\1\262" \ - "\311Q\377\240\253\307F\377\3\262\311Q\377\263\312R\377\261\307G\377\240" \ - "\253\307F\377\1\266\320f\377\222\363ZE\0\1\367\312d\377\260\371\313^" \ - "\377\1\370\313e\377\203\363ZE\0\1\374\320p\377\261\371\313^\377\1\375" \ - "\337\243\377\215\363ZE\0\1\362I3\377\344\361H2\377\1\372\262\253\377" \ - "\202\363ZE\0\222\234\333\322\377\2\227\326\315\377x\317\311\377\235}" \ - "\316\302\377\2\232\330\317\377}\316\302\377\261o\312\275\377\4}\316\302" \ - "\377\363ZE\0\322\340\231\377\276\321h\377\220\263\313Z\377\2\263\312" \ - "R\377\252\310O\377\236\253\307F\377\3\252\310O\377\263\312R\377\261\307" \ - "G\377\237\253\307F\377\1\300\324q\377\223\363ZE\0\1\367\312d\377\260" \ - "\371\313^\377\1\367\312d\377\203\363ZE\0\1\370\313e\377\261\371\313^" \ - "\377\1\375\337\243\377\214\363ZE\0\1\371\252\237\377\345\361H2\377\1" \ - "\367\231\216\377\202\363ZE\0\223\234\333\322\377\2\232\330\317\377\211" \ - "\321\306\377\233}\316\302\377\3x\317\311\377\216\326\313\377}\316\302" \ - "\377\261o\312\275\377\4t\312\304\377\363ZE\0\321\336\227\377\267\317" \ - "^\377\222\263\313Z\377\1\252\310O\377\236\253\307F\377\2\262\311Q\377" \ - "\261\307G\377\236\253\307F\377\1\312\335\216\377\224\363ZE\0\1\367\312" \ - "d\377\261\371\313^\377\1\375\337\243\377\202\363ZE\0\262\371\313^\377" \ - "\1\375\337\243\377\214\363ZE\0\1\367\213\201\377\345\361H2\377\3\363" \ - "q`\377\363ZE\0\250\336\326\377\224\234\333\322\377\2\232\330\317\377" \ - "\216\326\313\377\233}\316\302\377\2\211\321\306\377}\316\302\377\261" \ - "o\312\275\377\3p\313\276\377\363ZE\0\321\336\227\377\224\263\313Z\377" \ - "\1\262\311Q\377\235\253\307F\377\2\262\311Q\377\261\307G\377\234\253" \ - "\307F\377\1\263\313Z\377\226\363ZE\0\1\367\312d\377\261\371\313^\377" \ - "\3\372\326\201\377\363ZE\0\376\343\254\377\262\371\313^\377\1\375\337" \ - "\243\377\214\363ZE\0\1\366{l\377\345\361H2\377\3\363SC\377\363ZE\0\246" \ - "\334\324\377\226\234\333\322\377\2\232\330\317\377\211\321\306\377\231" \ - "}\316\302\377\2\211\321\306\377}\316\302\377\262o\312\275\377\2\237\332" \ - "\313\377\314\337\220\377\225\263\313Z\377\2\263\312R\377\252\310O\377" \ - "\233\253\307F\377\2\262\311Q\377\261\307G\377\232\253\307F\377\2\252" \ - "\310O\377\311\331\205\377\227\363ZE\0\1\367\312d\377\261\371\313^\377" \ - "\3\374\320p\377\363ZE\0\372\332\221\377\262\371\313^\377\1\375\337\243" \ - "\377\214\363ZE\0\1\362iV\377\346\361H2\377\2\363ZE\0\236\335\324\377" \ - "\230\234\333\322\377\2\220\330\315\377\211\321\306\377\231}\316\302\377" \ - "\262o\312\275\377\2\221\325\304\377\311\331\205\377\227\263\313Z\377" \ - "\2\252\310O\377\261\310P\377\231\253\307F\377\2\261\310P\377\261\307" \ - "G\377\231\253\307F\377\2\274\317f\377\342\350\266\377\230\363ZE\0\1\367" \ - "\312d\377\261\371\313^\377\3\370\313e\377\363ZE\0\373\317o\377\262\371" \ - "\313^\377\1\375\337\243\377\214\363ZE\0\1\361YD\377\261\361H2\377\3\357" \ - "O:\377\362R<\377\357O:\377\262\361H2\377\2\363ZE\0\235\334\323\377\231" \ - "\234\333\322\377\4\232\330\317\377\216\326\313\377\203\317\313\377x\317" \ - "\311\377\223}\316\302\377\4x\317\311\377\211\321\306\377\203\317\313" \ - "\377p\313\276\377\261o\312\275\377\2\206\323\301\377\311\331\205\377" \ - "\230\263\313Z\377\2\263\312R\377\252\310O\377\230\253\307F\377\2\261" \ - "\310P\377\261\307G\377\227\253\307F\377\2\263\313Z\377\322\340\231\377" \ - "\232\363ZE\0\1\367\312d\377\261\371\313^\377\3\370\313e\377\363ZE\0\370" \ - "\313e\377\262\371\313^\377\1\375\337\243\377\214\363ZE\0\1\361Q;\377" \ - "\257\361H2\377\2\360XC\377\370\223\205\377\203\363ZE\0\2\370\242\232" \ - "\377\363[L\377\260\361H2\377\2\331\267\252\377\235\334\323\377\233\234" \ - "\333\322\377\3\232\330\317\377\227\326\315\377\211\321\306\377\220}\316" \ - "\302\377\2x\317\311\377\220\330\315\377\204\363ZE\0\3\236\335\324\377" \ - "w\315\307\377h\312\302\377\256o\312\275\377\2}\316\302\377\274\324~\377" \ - "\232\263\313Z\377\2\262\311Q\377\252\310O\377\225\253\307F\377\4\261" \ - "\307G\377\263\312R\377\262\311Q\377\261\307G\377\224\253\307F\377\2\263" \ - "\312R\377\311\331\205\377\234\363ZE\0\1\367\312d\377\261\371\313^\377" \ - "\3\370\313e\377\363ZE\0\370\313e\377\262\371\313^\377\1\375\337\243\377" \ - "\214\363ZE\0\1\357O3\377\256\361H2\377\1\361YD\377\207\363ZE\0\1\365" \ - "lY\377\257\361H2\377\1\316\246\233\377\236\234\333\322\377\3\232\330" \ - "\317\377\220\330\315\377\211\321\306\377\216}\316\302\377\1\246\334\324" \ - "\377\207\363ZE\0\1{\315\301\377\256o\312\275\377\2{\315\301\377\262\321" \ - "z\377\234\263\313Z\377\2\262\311Q\377\252\310O\377\221\253\307F\377\2" \ - "\261\307G\377\300\324q\377\203\363ZE\0\2\333\350\264\377\276\321h\377" \ - "\220\253\307F\377\3\252\310O\377\263\313Z\377\312\335\216\377\236\363" \ - "ZE\0\1\367\312d\377\257\371\313^\377\2\370\313e\377\374\335\232\377\203" \ - "\363ZE\0\2\376\343\254\377\372\316n\377\260\371\313^\377\1\375\337\243" \ - "\377\214\363ZE\0\1\362I3\377\255\361H2\377\1\357O:\377\211\363ZE\0\1" \ - "\361Q;\377\256\361H2\377\1\306\234\214\377\241\234\333\322\377\4\232" \ - "\330\317\377\216\326\313\377\211\321\306\377x\317\311\377\211}\316\302" \ - "\377\1\227\326\315\377\210\363ZE\0\1\271\347\340\377\256o\312\275\377" \ - "\2y\312\276\377\250\316v\377\236\263\313Z\377\3\263\312R\377\252\310" \ - "O\377\261\307G\377\216\253\307F\377\1\322\340\231\377\206\363ZE\0\1\312" \ - "\335\216\377\216\253\307F\377\2\267\317^\377\322\341\240\377\240\363" \ - "ZE\0\1\367\312d\377\256\371\313^\377\1\372\316n\377\207\363ZE\0\1\373" \ - "\320w\377\257\371\313^\377\1\375\337\243\377\214\363ZE\0\256\361H2\377" \ - "\1\365l_\377\211\363ZE\0\1\370\223\205\377\256\361H2\377\1\306\234\214" \ - "\377\244\234\333\322\377\5\232\330\317\377\227\326\315\377\211\321\306" \ - "\377}\316\302\377x\317\311\377\205}\316\302\377\212\363ZE\0\1\211\321" \ - "\306\377\255o\312\275\377\2p\313\276\377\251\315n\377\241\263\313Z\377" \ - "\2\262\311Q\377\261\310P\377\213\253\307F\377\1\311\331\205\377\210\363" \ - "ZE\0\1\300\327z\377\212\253\307F\377\2\263\313Z\377\321\336\227\377\243" \ - "\363ZE\0\1\367\312d\377\256\371\313^\377\211\363ZE\0\1\372\316n\377\256" \ - "\371\313^\377\1\375\337\243\377\214\363ZE\0\256\361H2\377\1\367\231\216" \ - "\377\211\363ZE\0\1\372\262\253\377\256\361H2\377\1\306\234\214\377\250" \ - "\234\333\322\377\202\232\330\317\377\1\216\326\313\377\202\211\321\306" \ - "\377\1}\316\302\377\212\363ZE\0\1\232\330\317\377\255o\312\275\377\2" \ - "u\313\270\377\251\315n\377\244\263\313Z\377\1\263\312R\377\202\261\310" \ - "P\377\1\261\307G\377\205\253\307F\377\1\252\310O\377\212\363ZE\0\206" \ - "\253\307F\377\3\262\311Q\377\300\327z\377\324\344\243\377\246\363ZE\0" \ - "\1\367\312d\377\255\371\313^\377\1\372\326\201\377\211\363ZE\0\1\374" \ - "\335\232\377\256\371\313^\377\1\375\337\243\377\214\363ZE\0\202\363S" \ - "C\377\202\361YD\377\1\363[L\377\202\364cO\377\2\362iV\377\365lY\377\242" \ - "\363q`\377\4\364kX\377\364dU\377\364cO\377\372\262\253\377\211\363ZE" \ - "\0\1\371\270\256\377\256\361H2\377\1\252\226\207\377\253w\315\307\377" \ - "\203{\315\301\377\212\363ZE\0\1\232\330\317\377\255o\312\275\377\2u\313" \ - "\270\377\251\315n\377\247\263\313Z\377\202\263\312R\377\5\262\311Q\377" \ - "\252\310O\377\261\310P\377\252\310O\377\267\317^\377\212\363ZE\0\5\263" \ - "\313Z\377\266\320f\377\307\326{\377\321\336\227\377\332\344\253\377\252" \ - "\363ZE\0\1\367\312d\377\255\371\313^\377\1\375\337\243\377\212\363ZE" \ - "\0\256\371\313^\377\1\375\337\243\377\214\363ZE\0\206\360XC\377\203\361" \ - "YD\377\5\363[L\377\362iV\377\363q`\377\363yj\377\364\200n\377\227\365" \ - "\202u\377\6\364\200n\377\366{l\377\363q`\377\362iV\377\364cO\377\363" \ - "[L\377\202\361YD\377\2\360XC\377\370\223\205\377\211\363ZE\0\1\370\242" \ - "\232\377\256\361H2\377\1\252\226\207\377\256o\312\275\377\212\363ZE\0" \ - "\1\216\326\313\377\255o\312\275\377\2u\313\270\377\246\311d\377\254\252" \ - "\310O\377\2\261\310P\377\266\320f\377\212\363ZE\0\2\321\336\227\377\333" \ - "\350\264\377\255\363ZE\0\1\367\312d\377\255\371\313^\377\1\375\337\243" \ - "\377\212\363ZE\0\256\370\313e\377\1\377\345\264\377\214\363ZE\0\214\360" \ - "XC\377\5\361YD\377\361`L\377\362iV\377\363q`\377\366{l\377\221\365\202" \ - "u\377\5\364\200n\377\363yj\377\364kX\377\361`L\377\361YD\377\207\360" \ - "XC\377\1\362iV\377\211\363ZE\0\1\364kX\377\256\361H2\377\1\252\226\207" \ - "\377\256o\312\275\377\1\232\330\317\377\211\363ZE\0\1{\315\301\377\255" \ - "o\312\275\377\2u\313\270\377\246\311d\377\255\253\307F\377\1\263\313" \ - "Z\377\212\363ZE\0\202\253\307F\377\5\252\310O\377\263\312R\377\266\320" \ - "f\377\300\327z\377\322\341\240\377\250\363ZE\0\256\371\313^\377\1\375" \ - "\334\223\377\211\363ZE\0\1\377\345\264\377\205\371\313^\377\203\370\313" \ - "e\377\246\372\316n\377\1\371\346\264\377\214\363ZE\0\1\361YD\377\217" \ - "\360XC\377\4\361`L\377\362iV\377\366tb\377\364\200n\377\213\365\202u" \ - "\377\5\364\200n\377\363yj\377\365lY\377\361`L\377\361YD\377\212\360X" \ - "C\377\2\361YD\377\370\223\205\377\207\363ZE\0\2\367\240\222\377\362I" \ - "3\377\256\361H2\377\1\264\232\214\377\256o\312\275\377\1y\312\276\377" \ - "\210\363ZE\0\1\216\326\313\377\256o\312\275\377\2u\313\270\377\251\312" \ - "^\377\255\253\307F\377\2\252\310O\377\333\350\264\377\210\363ZE\0\1\322" \ - "\341\240\377\207\253\307F\377\4\252\310O\377\267\317^\377\303\331|\377" \ - "\334\347\255\377\244\363ZE\0\256\371\313^\377\1\373\317o\377\211\363" \ - "ZE\0\1\372\326\201\377\211\371\313^\377\203\370\313e\377\242\372\316" \ - "n\377\215\363ZE\0\1\361YD\377\221\360XC\377\4\361YD\377\361`L\377\363" \ - "q`\377\366{l\377\207\365\202u\377\4\364\200n\377\363q`\377\364cO\377" \ - "\361YD\377\216\360XC\377\2\361YD\377\365\220\203\377\205\363ZE\0\2\365" \ - "\220\203\377\357O:\377\257\361H2\377\1\277\244\226\377\257o\312\275\377" \ - "\2{\315\301\377\264\342\333\377\205\363ZE\0\1\211\325\320\377\257o\312" \ - "\275\377\2u\313\270\377\261\313a\377\256\253\307F\377\1\267\317^\377" \ - "\210\363ZE\0\1\263\312R\377\213\253\307F\377\3\262\311Q\377\300\327z" \ - "\377\333\350\264\377\241\363ZE\0\1\370\313e\377\256\371\313^\377\1\375" \ - "\334\223\377\207\363ZE\0\2\376\343\254\377\370\313e\377\214\371\313^" \ - "\377\202\370\313e\377\240\372\316n\377\215\363ZE\0\1\363[L\377\223\360" \ - "XC\377\202\361YD\377\2\365lY\377\366{l\377\203\365\202u\377\4\364\200" \ - "n\377\363q`\377\364cO\377\361YD\377\222\360XC\377\5\364cO\377\365\202" \ - "u\377\370\223\205\377\366{l\377\360X=\377\261\361H2\377\1\301\271\262" \ - "\377\261o\312\275\377\5}\316\302\377\232\330\317\377\246\334\324\377" \ - "\216\326\313\377t\312\304\377\260o\312\275\377\2}\316\265\377\261\313" \ - "a\377\257\253\307F\377\1\266\320f\377\205\363ZE\0\2\342\350\266\377\263" \ - "\313Z\377\216\253\307F\377\3\261\307G\377\263\313Z\377\321\336\227\377" \ - "\237\363ZE\0\1\370\313e\377\257\371\313^\377\1\372\332\221\377\205\363" \ - "ZE\0\2\375\337\243\377\370\313e\377\217\371\313^\377\204\370\313e\377" \ - "\234\372\316n\377\215\363ZE\0\1\361`L\377\226\360XC\377\5\361YD\377\365" \ - "l_\377\364\200n\377\366tb\377\364cO\377\227\360XC\377\1\361Q;\377\263" \ - "\361H2\377\2\363ZE\0p\313\276\377\345o\312\275\377\2\207\317\270\377" \ - "\267\317^\377\261\253\307F\377\4\266\320f\377\314\341\230\377\312\335" \ - "\216\377\266\320f\377\223\253\307F\377\2\261\310P\377\311\331\205\377" \ - "\235\363ZE\0\1\370\313e\377\260\371\313^\377\5\370\313e\377\373\327\202" \ - "\377\375\337\243\377\372\332\221\377\370\313e\377\224\371\313^\377\1" \ - "\370\313e\377\234\372\316n\377\215\363ZE\0\1\364cO\377\227\360XC\377" \ - "\3\360X=\377\361Q;\377\362R<\377\230\360XC\377\1\361Q;\377\262\361H2" \ - "\377\3\357O:\377\363ZE\0q\314\277\377\345o\312\275\377\2\223\322\274" \ - "\377\267\317^\377\262\253\307F\377\2\266\320f\377\263\312R\377\226\253" \ - "\307F\377\2\261\310P\377\312\335\216\377\233\363ZE\0\1\373\317o\377\262" \ - "\371\313^\377\1\370\313e\377\227\371\313^\377\2\367\312d\377\370\313" \ - "e\377\231\372\316n\377\1\373\317o\377\215\363ZE\0\1\362iV\377\226\360" \ - "XC\377\2\357O:\377\362I3\377\202\361H2\377\2\362I9\377\363S=\377\226" \ - "\360XC\377\1\361Q;\377\262\361H2\377\3\364cO\377\363ZE\0{\315\301\377" \ - "\345o\312\275\377\2\245\334\307\377\267\317^\377\262\253\307F\377\2\300" \ - "\324q\377\263\312R\377\230\253\307F\377\2\255\313Q\377\324\344\243\377" \ - "\231\363ZE\0\1\370\324x\377\262\371\313^\377\1\370\313e\377\232\371\313" \ - "^\377\1\370\313e\377\227\372\316n\377\1\374\320p\377\215\363ZE\0\1\363" \ - "q`\377\224\360XC\377\2\363S=\377\357O3\377\206\361H2\377\1\362R<\377" \ - "\225\360XC\377\1\361Q;\377\262\361H2\377\3\365\210x\377\363ZE\0\211\321" \ - "\306\377\345o\312\275\377\2\363ZE\0\267\317^\377\262\253\307F\377\2\322" \ - "\336\220\377\263\312R\377\232\253\307F\377\1\274\321n\377\230\363ZE\0" \ - "\1\375\334\223\377\262\371\313^\377\202\370\313e\377\232\371\313^\377" \ - "\1\370\313e\377\226\372\316n\377\1\373\317o\377\215\363ZE\0\2\363yj\377" \ - "\361YD\377\222\360XC\377\1\361Q;\377\211\361H2\377\2\362I9\377\363SC" \ - "\377\223\360XC\377\1\361Q;\377\262\361H2\377\3\371\252\237\377\363ZE" \ - "\0\235\334\323\377\344o\312\275\377\3w\315\307\377\363ZE\0\267\317^\377" \ - "\261\253\307F\377\3\252\310O\377\342\350\266\377\263\312R\377\233\253" \ - "\307F\377\2\261\310P\377\321\336\227\377\227\363ZE\0\262\371\313^\377" \ - "\202\370\313e\377\233\371\313^\377\2\367\312d\377\370\313e\377\224\372" \ - "\316n\377\1\370\324x\377\215\363ZE\0\2\366{l\377\361YD\377\220\360XC" \ - "\377\2\360X=\377\357O:\377\213\361H2\377\2\362I3\377\363S=\377\222\360" \ - "XC\377\1\361Q;\377\261\361H2\377\1\362I3\377\203\363ZE\0\344o\312\275" \ - "\377\3\211\321\306\377\363ZE\0\267\317^\377\261\253\307F\377\3\263\313" \ - "Z\377\363ZE\0\263\312R\377\234\253\307F\377\2\261\307G\377\300\324q\377" \ - "\226\363ZE\0\262\371\313^\377\202\370\313e\377\235\371\313^\377\1\370" \ - "\313e\377\223\372\316n\377\1\372\326\201\377\215\363ZE\0\2\365\202u\377" \ - "\364cO\377\217\360XC\377\2\363S=\377\357O3\377\216\361H2\377\1\362R<" \ - "\377\221\360XC\377\1\361Q;\377\261\361H2\377\1\362R<\377\203\363ZE\0" \ - "\1w\315\307\377\343o\312\275\377\3\234\333\322\377\363ZE\0\267\317^\377" \ - "\261\253\307F\377\3\300\327z\377\363ZE\0\263\312R\377\236\253\307F\377" \ - "\1\263\313Z\377\225\363ZE\0\1\372\316n\377\261\371\313^\377\202\370\313" \ - "e\377\236\371\313^\377\1\370\313e\377\222\372\316n\377\1\372\330\211" \ - "\377\215\363ZE\0\2\365\202u\377\364kX\377\216\360XC\377\1\363S=\377\220" \ - "\361H2\377\2\362I3\377\362R<\377\220\360XC\377\1\361Q;\377\261\361H2" \ - "\377\1\364kX\377\203\363ZE\0\1x\317\311\377\343o\312\275\377\3\271\347" \ - "\340\377\363ZE\0\267\317^\377\261\253\307F\377\3\322\341\240\377\363" \ - "ZE\0\263\312R\377\237\253\307F\377\2\261\310P\377\332\344\253\377\223" \ - "\363ZE\0\1\370\324x\377\261\371\313^\377\2\370\313e\377\372\316n\377" \ - "\240\371\313^\377\1\370\313e\377\217\372\316n\377\2\373\317o\377\372" \ - "\330\211\377\215\363ZE\0\3\365\202u\377\366tb\377\361YD\377\214\360X" \ - "C\377\2\363S=\377\362I3\377\222\361H2\377\1\361Q;\377\217\360XC\377\1" \ - "\361Q;\377\261\361H2\377\1\366\247\234\377\203\363ZE\0\1\232\330\317" \ - "\377\342o\312\275\377\1y\312\276\377\202\363ZE\0\1\267\317^\377\261\253" \ - "\307F\377\202\363ZE\0\1\263\312R\377\241\253\307F\377\1\322\340\231\377" \ - "\222\363ZE\0\1\374\335\232\377\261\371\313^\377\3\370\313e\377\372\316" \ - "n\377\370\313e\377\240\371\313^\377\1\370\313e\377\216\372\316n\377\2" \ - "\373\320w\377\372\332\221\377\215\363ZE\0\3\365\202u\377\364\200n\377" \ - "\361YD\377\213\360XC\377\2\363SC\377\362I3\377\224\361H2\377\1\361Q;" \ - "\377\216\360XC\377\1\361Q;\377\260\361H2\377\1\357O:\377\205\363ZE\0" \ - "\342o\312\275\377\1\211\321\306\377\202\363ZE\0\1\267\317^\377\260\253" \ - "\307F\377\1\261\310P\377\202\363ZE\0\1\263\312R\377\242\253\307F\377" \ - "\1\312\335\216\377\222\363ZE\0\1\367\312d\377\260\371\313^\377\3\370" \ - "\313e\377\372\316n\377\370\313e\377\241\371\313^\377\202\370\313e\377" \ - "\214\372\316n\377\2\372\326\201\377\375\334\223\377\215\363ZE\0\202\365" \ - "\202u\377\1\362iV\377\212\360XC\377\2\363S=\377\362I3\377\226\361H2\377" \ - "\1\361Q;\377\215\360XC\377\1\361Q;\377\260\361H2\377\1\364cO\377\205" \ - "\363ZE\0\1x\317\311\377\341o\312\275\377\1\264\342\333\377\202\363ZE" \ - "\0\1\267\317^\377\260\253\307F\377\1\303\331|\377\202\363ZE\0\1\263\312" \ - "R\377\243\253\307F\377\1\306\327\202\377\221\363ZE\0\1\374\320p\377\260" \ - "\371\313^\377\1\370\313e\377\202\372\316n\377\242\371\313^\377\202\370" \ - "\313e\377\213\372\316n\377\2\372\330\211\377\375\334\223\377\215\363" \ - "ZE\0\202\365\202u\377\1\366tb\377\211\360XC\377\2\360X=\377\362I3\377" \ - "\230\361H2\377\1\361Q;\377\214\360XC\377\1\361Q;\377\260\361H2\377\1" \ - "\367\240\222\377\205\363ZE\0\1\232\330\317\377\340o\312\275\377\1t\312" \ - "\304\377\203\363ZE\0\1\267\317^\377\260\253\307F\377\1\334\347\255\377" \ - "\202\363ZE\0\1\263\312R\377\244\253\307F\377\1\311\331\205\377\220\363" \ - "ZE\0\1\372\332\221\377\260\371\313^\377\1\370\313e\377\202\372\316n\377" \ - "\243\371\313^\377\1\370\313e\377\212\372\316n\377\3\373\320w\377\372" \ - "\332\221\377\375\334\223\377\215\363ZE\0\203\365\202u\377\1\363[L\377" \ - "\210\360XC\377\1\362I3\377\231\361H2\377\2\362I3\377\362R<\377\213\360" \ - "XC\377\1\361Q;\377\257\361H2\377\1\362R<\377\207\363ZE\0\1t\312\304\377" \ - "\337o\312\275\377\1\216\326\313\377\203\363ZE\0\1\267\317^\377\257\253" \ - "\307F\377\1\261\310P\377\203\363ZE\0\1\263\312R\377\244\253\307F\377" \ - "\2\261\307G\377\321\336\227\377\220\363ZE\0\260\371\313^\377\1\370\313" \ - "e\377\202\372\316n\377\1\370\313e\377\243\371\313^\377\202\370\313e\377" \ - "\210\372\316n\377\1\372\326\201\377\202\375\334\223\377\215\363ZE\0\203" \ - "\365\202u\377\2\364kX\377\361YD\377\206\360XC\377\1\357O:\377\234\361" \ - "H2\377\1\363S=\377\212\360XC\377\1\361Q;\377\257\361H2\377\1\363q`\377" \ - "\207\363ZE\0\1\211\321\306\377\337o\312\275\377\204\363ZE\0\1\267\317" \ - "^\377\257\253\307F\377\1\306\327\202\377\203\363ZE\0\1\263\312R\377\245" \ - "\253\307F\377\2\252\310O\377\332\344\253\377\217\363ZE\0\1\373\320w\377" \ - "\257\371\313^\377\1\370\313e\377\202\372\316n\377\1\370\313e\377\244" \ - "\371\313^\377\1\370\313e\377\210\372\316n\377\1\372\330\211\377\202\375" \ - "\334\223\377\215\363ZE\0\203\365\202u\377\1\366{l\377\206\360XC\377\1" \ - "\361Q;\377\235\361H2\377\2\362I3\377\363SC\377\211\360XC\377\1\361Q;" \ - "\377\257\361H2\377\1\371\270\256\377\207\363ZE\0\1\264\342\333\377\336" \ - "o\312\275\377\1w\315\307\377\204\363ZE\0\1\267\317^\377\257\253\307F" \ - "\377\204\363ZE\0\1\263\312R\377\246\253\307F\377\1\261\310P\377\217\363" \ - "ZE\0\1\375\337\243\377\257\371\313^\377\1\370\313e\377\203\372\316n\377" \ - "\1\370\313e\377\244\371\313^\377\207\372\316n\377\2\373\320w\377\372" \ - "\332\221\377\202\375\334\223\377\215\363ZE\0\204\365\202u\377\2\364c" \ - "O\377\361YD\377\203\360XC\377\1\363S=\377\237\361H2\377\1\357O:\377\211" \ - "\360XC\377\1\361Q;\377\256\361H2\377\1\364cO\377\211\363ZE\0\1{\315\301" \ - "\377\335o\312\275\377\1\250\336\326\377\204\363ZE\0\1\267\317^\377\256" \ - "\253\307F\377\1\267\317^\377\204\363ZE\0\1\263\312R\377\247\253\307F" \ - "\377\1\263\313Z\377\217\363ZE\0\1\370\313e\377\256\371\313^\377\1\370" \ - "\313e\377\203\372\316n\377\1\370\313e\377\244\371\313^\377\1\370\313" \ - "e\377\206\372\316n\377\1\372\326\201\377\203\375\334\223\377\215\363" \ - "ZE\0\204\365\202u\377\2\366tb\377\361YD\377\202\360XC\377\2\363SC\377" \ - "\362I3\377\240\361H2\377\1\362R<\377\210\360XC\377\1\361Q;\377\256\361" \ - "H2\377\1\367\240\222\377\211\363ZE\0\1\235\334\323\377\334o\312\275\377" \ - "\1p\313\276\377\205\363ZE\0\1\267\317^\377\256\253\307F\377\1\331\342" \ - "\242\377\204\363ZE\0\1\263\312R\377\250\253\307F\377\1\300\324q\377\216" \ - "\363ZE\0\1\372\330\211\377\256\371\313^\377\1\370\313e\377\204\372\316" \ - "n\377\1\367\312d\377\244\371\313^\377\1\370\313e\377\204\372\316n\377" \ - "\2\373\317o\377\372\332\221\377\203\375\334\223\377\215\363ZE\0\205\365" \ - "\202u\377\4\364cO\377\361YD\377\360XC\377\357O:\377\241\361H2\377\2\362" \ - "I3\377\363SC\377\207\360XC\377\1\361Q;\377\255\361H2\377\1\364cO\377" \ - "\213\363ZE\0\1{\315\301\377\333o\312\275\377\1\235\334\323\377\205\363" \ - "ZE\0\1\267\317^\377\255\253\307F\377\1\263\313Z\377\205\363ZE\0\1\263" \ - "\312R\377\251\253\307F\377\1\314\341\230\377\216\363ZE\0\256\371\313" \ - "^\377\1\370\313e\377\204\372\316n\377\1\370\313e\377\245\371\313^\377" \ - "\1\370\313e\377\203\372\316n\377\1\372\326\201\377\204\375\334\223\377" \ - "\215\363ZE\0\205\365\202u\377\3\366tb\377\361YD\377\362R<\377\243\361" \ - "H2\377\1\357O:\377\207\360XC\377\1\361Q;\377\255\361H2\377\1\367\240" \ - "\222\377\213\363ZE\0\1\246\334\324\377\332o\312\275\377\1y\312\276\377" \ - "\206\363ZE\0\1\267\317^\377\255\253\307F\377\1\322\341\240\377\205\363" \ - "ZE\0\1\263\312R\377\251\253\307F\377\1\252\310O\377\216\363ZE\0\1\372" \ - "\326\201\377\255\371\313^\377\1\370\313e\377\205\372\316n\377\1\367\312" \ - "d\377\244\371\313^\377\1\370\313e\377\203\372\316n\377\1\372\332\221" \ - "\377\204\375\334\223\377\215\363ZE\0\206\365\202u\377\1\364cO\377\245" \ - "\361H2\377\1\362R<\377\206\360XC\377\1\361Q;\377\254\361H2\377\1\364" \ - "dU\377\215\363ZE\0\1w\315\307\377\331o\312\275\377\1\250\336\326\377" \ - "\206\363ZE\0\1\267\317^\377\254\253\307F\377\1\267\317^\377\206\363Z" \ - "E\0\1\263\312R\377\252\253\307F\377\1\274\321n\377\216\363ZE\0\255\371" \ - "\313^\377\1\370\313e\377\205\372\316n\377\1\370\313e\377\245\371\313" \ - "^\377\3\370\313e\377\372\316n\377\372\326\201\377\205\375\334\223\377" \ - "\215\363ZE\0\206\365\202u\377\1\362iV\377\245\361H2\377\1\362I3\377\206" \ - "\360XC\377\1\361Q;\377\253\361H2\377\2\362I3\377\373\272\260\377\215" \ - "\363ZE\0\1\264\342\333\377\330o\312\275\377\1}\316\302\377\207\363ZE" \ - "\0\1\267\317^\377\254\253\307F\377\1\332\344\253\377\206\363ZE\0\1\263" \ - "\312R\377\253\253\307F\377\1\332\344\253\377\215\363ZE\0\1\372\330\211" \ - "\377\254\371\313^\377\1\370\313e\377\206\372\316n\377\246\371\313^\377" \ - "\1\373\317o\377\206\375\334\223\377\215\363ZE\0\205\365\202u\377\3\366" \ - "{l\377\361YD\377\357O:\377\245\361H2\377\1\362R<\377\205\360XC\377\1" \ - "\361Q;\377\253\361H2\377\1\363yj\377\217\363ZE\0\1\200\322\306\377\326" \ - "o\312\275\377\2p\313\276\377\271\347\340\377\207\363ZE\0\1\267\317^\377" \ - "\253\253\307F\377\1\276\321h\377\207\363ZE\0\1\263\312R\377\253\253\307" \ - "F\377\1\263\313Z\377\216\363ZE\0\1\370\313e\377\253\371\313^\377\1\370" \ - "\313e\377\206\372\316n\377\1\370\313e\377\245\371\313^\377\1\373\317" \ - "o\377\206\375\334\223\377\215\363ZE\0\205\365\202u\377\4\362iV\377\360" \ - "XC\377\363SC\377\362I3\377\244\361H2\377\2\362I3\377\363SC\377\204\360" \ - "XC\377\1\361Q;\377\252\361H2\377\1\362R<\377\221\363ZE\0\1p\313\276\377" \ - "\324o\312\275\377\2h\312\302\377\232\330\317\377\210\363ZE\0\1\267\317" \ - "^\377\252\253\307F\377\1\252\310O\377\210\363ZE\0\1\263\312R\377\254" \ - "\253\307F\377\1\312\335\216\377\215\363ZE\0\1\375\337\243\377\253\371" \ - "\313^\377\1\370\313e\377\207\372\316n\377\1\370\313e\377\244\371\313" \ - "^\377\2\372\316n\377\372\330\211\377\205\375\334\223\377\215\363ZE\0" \ - "\204\365\202u\377\2\366{l\377\361YD\377\202\360XC\377\1\362R<\377\245" \ - "\361H2\377\1\361Q;\377\204\360XC\377\1\361Q;\377\252\361H2\377\1\366" \ - "\247\234\377\221\363ZE\0\1\246\334\324\377\324o\312\275\377\1}\316\302" \ - "\377\211\363ZE\0\1\267\317^\377\252\253\307F\377\1\312\335\216\377\210" \ - "\363ZE\0\1\263\312R\377\254\253\307F\377\1\263\312R\377\216\363ZE\0\1" \ - "\373\320w\377\252\371\313^\377\1\370\313e\377\207\372\316n\377\1\370" \ - "\313e\377\243\371\313^\377\3\370\313e\377\372\316n\377\373\320w\377\205" \ - "\375\334\223\377\215\363ZE\0\204\365\202u\377\1\364kX\377\204\360XC\377" \ - "\1\357O:\377\244\361H2\377\1\362I3\377\204\360XC\377\1\361Q;\377\251" \ - "\361H2\377\1\363q`\377\223\363ZE\0\2\211\321\306\377p\313\276\377\321" \ - "o\312\275\377\2p\313\276\377\271\347\340\377\211\363ZE\0\1\267\317^\377" \ - "\251\253\307F\377\1\266\320f\377\211\363ZE\0\1\263\312R\377\255\253\307" \ - "F\377\1\311\331\205\377\216\363ZE\0\1\370\313e\377\251\371\313^\377\1" \ - "\370\313e\377\210\372\316n\377\1\370\313e\377\241\371\313^\377\1\370" \ - "\313e\377\203\372\316n\377\1\372\330\211\377\204\375\334\223\377\215" \ - "\363ZE\0\203\365\202u\377\2\364\200n\377\361YD\377\204\360XC\377\2\363" \ - "SC\377\362I3\377\244\361H2\377\1\362R<\377\203\360XC\377\1\361Q;\377" \ - "\250\361H2\377\1\361YD\377\225\363ZE\0\1{\315\301\377\321o\312\275\377" \ - "\1\232\330\317\377\212\363ZE\0\1\267\317^\377\250\253\307F\377\1\261" \ - "\310P\377\212\363ZE\0\1\263\312R\377\255\253\307F\377\1\263\312R\377" \ - "\216\363ZE\0\1\374\335\232\377\251\371\313^\377\1\370\313e\377\211\372" \ - "\316n\377\1\370\313e\377\240\371\313^\377\204\372\316n\377\2\370\324" \ - "x\377\372\332\221\377\203\375\334\223\377\215\363ZE\0\203\365\202u\377" \ - "\2\363q`\377\361YD\377\205\360XC\377\1\363S=\377\244\361H2\377\1\362" \ - "I3\377\203\360XC\377\1\361Q;\377\247\361H2\377\1\361Q;\377\226\363ZE" \ - "\0\2\264\342\333\377p\313\276\377\316o\312\275\377\2h\312\302\377\211" \ - "\321\306\377\213\363ZE\0\1\267\317^\377\250\253\307F\377\1\321\336\227" \ - "\377\212\363ZE\0\1\263\312R\377\256\253\307F\377\1\322\340\231\377\216" \ - "\363ZE\0\1\372\326\201\377\250\371\313^\377\1\370\313e\377\212\372\316" \ - "n\377\237\371\313^\377\1\370\313e\377\205\372\316n\377\1\372\330\211" \ - "\377\203\375\334\223\377\215\363ZE\0\203\365\202u\377\1\364cO\377\207" \ - "\360XC\377\1\363S=\377\244\361H2\377\1\363SC\377\202\360XC\377\1\361" \ - "Q;\377\246\361H2\377\2\362I3\377\370\242\232\377\227\363ZE\0\2\250\336" \ - "\326\377p\313\276\377\315o\312\275\377\1}\316\302\377\214\363ZE\0\1\267" \ - "\317^\377\247\253\307F\377\1\300\324q\377\213\363ZE\0\1\263\312R\377" \ - "\256\253\307F\377\1\267\317^\377\217\363ZE\0\1\373\317o\377\247\371\313" \ - "^\377\1\370\313e\377\212\372\316n\377\1\370\313e\377\235\371\313^\377" \ - "\1\370\313e\377\206\372\316n\377\1\372\326\201\377\203\375\334\223\377" \ - "\215\363ZE\0\202\365\202u\377\1\366{l\377\211\360XC\377\1\362R<\377\243" \ - "\361H2\377\1\357O:\377\202\360XC\377\1\361Q;\377\246\361H2\377\1\370" \ - "\223\205\377\231\363ZE\0\1\232\330\317\377\314o\312\275\377\1p\313\276" \ - "\377\215\363ZE\0\1\267\317^\377\246\253\307F\377\1\263\313Z\377\214\363" \ - "ZE\0\1\263\312R\377\257\253\307F\377\1\342\350\266\377\217\363ZE\0\1" \ - "\370\313e\377\246\371\313^\377\1\370\313e\377\213\372\316n\377\1\370" \ - "\313e\377\233\371\313^\377\1\370\313e\377\207\372\316n\377\2\373\317" \ - "o\377\372\332\221\377\202\375\334\223\377\215\363ZE\0\202\365\202u\377" \ - "\1\364kX\377\212\360XC\377\1\361Q;\377\242\361H2\377\1\362I3\377\202" \ - "\360XC\377\1\361Q;\377\245\361H2\377\1\365\210x\377\233\363ZE\0\1\216" \ - "\326\313\377\312o\312\275\377\1p\313\276\377\216\363ZE\0\1\267\317^\377" \ - "\245\253\307F\377\1\263\313Z\377\215\363ZE\0\1\263\312R\377\257\253\307" \ - "F\377\1\300\324q\377\220\363ZE\0\1\370\313e\377\245\371\313^\377\1\370" \ - "\313e\377\214\372\316n\377\1\370\313e\377\231\371\313^\377\1\370\313" \ - "e\377\211\372\316n\377\1\372\330\211\377\202\375\334\223\377\215\363" \ - "ZE\0\3\365\202u\377\364\200n\377\364cO\377\213\360XC\377\1\357O:\377" \ - "\242\361H2\377\3\363S=\377\360XC\377\361Q;\377\244\361H2\377\1\365\202" \ - "u\377\235\363ZE\0\1\211\321\306\377\310o\312\275\377\1p\313\276\377\217" \ - "\363ZE\0\1\267\317^\377\244\253\307F\377\1\263\312R\377\216\363ZE\0\1" \ - "\263\312R\377\257\253\307F\377\1\262\311Q\377\220\363ZE\0\1\376\343\254" \ - "\377\245\371\313^\377\1\370\313e\377\215\372\316n\377\1\370\313e\377" \ - "\227\371\313^\377\202\370\313e\377\211\372\316n\377\1\373\320w\377\202" \ - "\375\334\223\377\215\363ZE\0\3\365\202u\377\366{l\377\361YD\377\214\360" \ - "XC\377\1\357O:\377\241\361H2\377\3\357O:\377\360XC\377\361Q;\377\243" \ - "\361H2\377\1\365\202u\377\237\363ZE\0\1\216\326\313\377\306o\312\275" \ - "\377\2y\312\276\377\271\347\340\377\217\363ZE\0\1\267\317^\377\243\253" \ - "\307F\377\1\263\312R\377\217\363ZE\0\1\263\312R\377\257\253\307F\377" \ - "\2\261\307G\377\334\347\255\377\220\363ZE\0\1\375\337\243\377\244\371" \ - "\313^\377\1\370\313e\377\216\372\316n\377\1\370\313e\377\225\371\313" \ - "^\377\1\370\313e\377\213\372\316n\377\3\373\317o\377\372\330\211\377" \ - "\375\334\223\377\215\363ZE\0\2\365\202u\377\363q`\377\216\360XC\377\1" \ - "\357O:\377\240\361H2\377\3\362I9\377\360XC\377\361Q;\377\241\361H2\377" \ - "\2\362I3\377\367\213\201\377\241\363ZE\0\1\216\326\313\377\304o\312\275" \ - "\377\1{\315\301\377\221\363ZE\0\1\267\317^\377\242\253\307F\377\1\263" \ - "\312R\377\220\363ZE\0\1\263\312R\377\260\253\307F\377\1\300\324q\377" \ - "\221\363ZE\0\2\375\337\243\377\367\312d\377\242\371\313^\377\1\370\313" \ - "e\377\217\372\316n\377\1\370\313e\377\223\371\313^\377\1\370\313e\377" \ - "\215\372\316n\377\2\372\326\201\377\375\334\223\377\215\363ZE\0\2\365" \ - "\202u\377\364dU\377\217\360XC\377\1\362R<\377\240\361H2\377\2\363SC\377" \ - "\361Q;\377\240\361H2\377\2\362I3\377\370\223\205\377\243\363ZE\0\2\234" \ - "\333\322\377p\313\276\377\301o\312\275\377\1x\317\311\377\222\363ZE\0" \ - "\1\267\317^\377\241\253\307F\377\1\263\313Z\377\221\363ZE\0\1\263\312" \ - "R\377\260\253\307F\377\1\262\311Q\377\222\363ZE\0\1\375\337\243\377\242" \ - "\371\313^\377\1\370\313e\377\220\372\316n\377\1\370\313e\377\221\371" \ - "\313^\377\1\370\313e\377\216\372\316n\377\2\370\324x\377\375\334\223" \ - "\377\215\363ZE\0\2\364\200n\377\363[L\377\220\360XC\377\1\362R<\377\237" \ - "\361H2\377\2\363S=\377\361Q;\377\237\361H2\377\2\357O:\377\366\247\234" \ - "\377\245\363ZE\0\2\250\336\326\377t\312\304\377\277o\312\275\377\1\211" \ - "\321\306\377\223\363ZE\0\1\267\317^\377\237\253\307F\377\2\261\307G\377" \ - "\267\317^\377\222\363ZE\0\1\263\312R\377\260\253\307F\377\1\252\310O" \ - "\377\223\363ZE\0\2\377\345\264\377\370\313e\377\240\371\313^\377\1\370" \ - "\313e\377\221\372\316n\377\1\370\313e\377\217\371\313^\377\1\370\313" \ - "e\377\217\372\316n\377\2\373\320w\377\372\332\221\377\215\363ZE\0\1\366" \ - "{l\377\222\360XC\377\2\360X=\377\357O3\377\235\361H2\377\202\361Q;\377" \ - "\236\361H2\377\1\361`L\377\251\363ZE\0\1}\316\302\377\275o\312\275\377" \ - "\1\232\330\317\377\224\363ZE\0\1\267\317^\377\237\253\307F\377\1\274" \ - "\321n\377\223\363ZE\0\1\263\312R\377\261\253\307F\377\1\324\344\243\377" \ - "\224\363ZE\0\1\372\316n\377\237\371\313^\377\1\370\313e\377\222\372\316" \ - "n\377\1\370\313e\377\215\371\313^\377\1\370\313e\377\220\372\316n\377" \ - "\2\373\317o\377\372\330\211\377\215\363ZE\0\1\363q`\377\224\360XC\377" \ - "\1\357O:\377\234\361H2\377\2\357O:\377\361Q;\377\235\361H2\377\1\365" \ - "\202u\377\253\363ZE\0\1\216\326\313\377\272o\312\275\377\1t\312\304\377" \ - "\226\363ZE\0\1\267\317^\377\236\253\307F\377\1\311\331\205\377\224\363" \ - "ZE\0\1\263\312R\377\261\253\307F\377\1\300\324q\377\225\363ZE\0\1\372" \ - "\326\201\377\236\371\313^\377\1\370\313e\377\223\372\316n\377\1\370\313" \ - "e\377\213\371\313^\377\1\370\313e\377\222\372\316n\377\1\372\326\201" \ - "\377\215\363ZE\0\1\364kX\377\225\360XC\377\2\363S=\377\362I3\377\232" \ - "\361H2\377\2\362I3\377\357O:\377\233\361H2\377\2\361YD\377\371\260\243" \ - "\377\255\363ZE\0\2\264\342\333\377w\315\307\377\267o\312\275\377\1\211" \ - "\325\320\377\227\363ZE\0\1\267\317^\377\234\253\307F\377\2\262\311Q\377" \ - "\342\350\266\377\225\363ZE\0\1\263\312R\377\261\253\307F\377\1\263\312" \ - "R\377\226\363ZE\0\1\375\337\243\377\235\371\313^\377\1\370\313e\377\225" \ - "\372\316n\377\1\370\313e\377\207\371\313^\377\202\370\313e\377\223\372" \ - "\316n\377\1\372\326\201\377\215\363ZE\0\1\364cO\377\226\360XC\377\2\363" \ - "SC\377\357O:\377\232\361H2\377\1\361Q;\377\231\361H2\377\2\362I3\377" \ - "\365\210x\377\261\363ZE\0\1\232\330\317\377\263o\312\275\377\3p\313\276" \ - "\377}\316\302\377\264\342\333\377\230\363ZE\0\1\267\317^\377\233\253" \ - "\307F\377\1\300\327z\377\227\363ZE\0\1\263\312R\377\262\253\307F\377" \ - "\230\363ZE\0\1\373\320w\377\233\371\313^\377\1\370\313e\377\226\372\316" \ - "n\377\1\370\313e\377\205\371\313^\377\1\370\313e\377\225\372\316n\377" \ - "\1\373\320w\377\215\363ZE\0\1\361`L\377\230\360XC\377\2\363S=\377\357" \ - "O:\377\230\361H2\377\1\357O:\377\227\361H2\377\2\362I3\377\363q`\377" \ - "\265\363ZE\0\1\211\321\306\377\260o\312\275\377\2{\315\301\377\246\334" \ - "\324\377\232\363ZE\0\1\267\317^\377\231\253\307F\377\2\267\317^\377\333" \ - "\350\264\377\230\363ZE\0\1\263\312R\377\262\253\307F\377\231\363ZE\0" \ - "\2\375\337\243\377\370\313e\377\231\371\313^\377\1\370\313e\377\230\372" \ - "\316n\377\2\370\313e\377\371\313^\377\202\370\313e\377\226\372\316n\377" \ - "\1\374\320p\377\215\363ZE\0\1\363[L\377\232\360XC\377\2\362R<\377\362" \ - "I3\377\226\361H2\377\1\362I3\377\225\361H2\377\3\362I3\377\362iV\377" \ - "\372\262\253\377\267\363ZE\0\2\264\342\333\377\211\321\306\377\254o\312" \ - "\275\377\2{\315\301\377\232\330\317\377\234\363ZE\0\1\267\317^\377\227" \ - "\253\307F\377\2\263\312R\377\312\335\216\377\232\363ZE\0\1\263\312R\377" \ - "\262\253\307F\377\1\332\344\253\377\232\363ZE\0\2\372\330\211\377\370" \ - "\313e\377\227\371\313^\377\1\370\313e\377\230\372\316n\377\3\373\320" \ - "w\377\372\326\201\377\373\320w\377\227\372\316n\377\1\373\317o\377\215" \ - "\363ZE\0\1\361YD\377\234\360XC\377\2\362R<\377\357O:\377\224\361H2\377" \ - "\1\362I3\377\223\361H2\377\3\357O:\377\363q`\377\373\272\260\377\274" \ - "\363ZE\0\2\211\321\306\377q\314\277\377\247o\312\275\377\2}\316\302\377" \ - "\235\334\323\377\236\363ZE\0\1\267\317^\377\225\253\307F\377\2\263\312" \ - "R\377\312\335\216\377\234\363ZE\0\1\263\312R\377\262\253\307F\377\1\322" \ - "\341\240\377\234\363ZE\0\2\372\326\201\377\370\313e\377\225\371\313^" \ - "\377\1\370\313e\377\226\372\316n\377\2\373\320w\377\372\326\201\377\203" \ - "\375\334\223\377\2\372\330\211\377\373\320w\377\225\372\316n\377\1\373" \ - "\317o\377\215\363ZE\0\1\361YD\377\236\360XC\377\3\363S=\377\361Q;\377" \ - "\362I3\377\243\361H2\377\2\361YD\377\365\210x\377\301\363ZE\0\3\232\330" \ - "\317\377}\316\302\377p\313\276\377\240o\312\275\377\4p\313\276\377t\312" \ - "\304\377\211\321\306\377\264\342\333\377\240\363ZE\0\1\267\317^\377\223" \ - "\253\307F\377\2\263\313Z\377\312\335\216\377\236\363ZE\0\1\263\312R\377" \ - "\262\253\307F\377\1\314\337\220\377\236\363ZE\0\2\372\330\211\377\370" \ - "\313e\377\223\371\313^\377\1\370\313e\377\224\372\316n\377\3\373\320" \ - "w\377\372\326\201\377\372\332\221\377\206\375\334\223\377\3\372\330\211" \ - "\377\373\320w\377\373\317o\377\223\372\316n\377\215\363ZE\0\1\361YD\377" \ - "\241\360XC\377\2\362R<\377\357O:\377\217\361H2\377\1\362I3\377\215\361" \ - "H2\377\4\362I3\377\363S=\377\366tb\377\371\270\256\377\306\363ZE\0\3" \ - "\211\321\306\377{\315\301\377t\312\304\377\233o\312\275\377\3t\312\304" \ - "\377}\316\302\377\250\336\326\377\243\363ZE\0\1\267\317^\377\220\253" \ - "\307F\377\3\261\310P\377\266\320f\377\324\344\243\377\240\363ZE\0\1\263" \ - "\312R\377\262\253\307F\377\1\306\327\202\377\240\363ZE\0\2\374\335\232" \ - "\377\372\316n\377\221\371\313^\377\1\370\313e\377\221\372\316n\377\3" \ - "\373\317o\377\370\324x\377\372\330\211\377\213\375\334\223\377\3\372" \ - "\330\211\377\375\322y\377\373\317o\377\221\372\316n\377\215\363ZE\0\245" \ - "\360XC\377\3\363S=\377\357O:\377\357O3\377\226\361H2\377\4\362I9\377" \ - "\364cO\377\370\223\205\377\373\272\260\377\314\363ZE\0\2\236\335\324" \ - "\377}\316\302\377\224o\312\275\377\5p\313\276\377o\312\275\377y\312\276" \ - "\377\211\325\320\377\264\342\333\377\246\363ZE\0\1\267\317^\377\216\253" \ - "\307F\377\2\263\313Z\377\321\336\227\377\243\363ZE\0\1\263\312R\377\262" \ - "\253\307F\377\1\300\324q\377\243\363ZE\0\2\372\332\221\377\370\313e\377" \ - "\216\371\313^\377\1\370\313e\377\217\372\316n\377\3\373\320w\377\372" \ - "\326\201\377\372\332\221\377\217\375\334\223\377\3\372\332\221\377\372" \ - "\326\201\377\373\320w\377\217\372\316n\377\215\363ZE\0\251\360XC\377" \ - "\5\363S=\377\362R<\377\357O:\377\362I9\377\362I3\377\211\361H2\377\6" \ - "\362I3\377\361Q;\377\363[L\377\363q`\377\370\223\205\377\371\252\237" \ - "\377\325\363ZE\0\5\271\347\340\377\246\334\324\377\216\326\313\377x\317" \ - "\311\377t\312\304\377\202o\312\275\377\1p\313\276\377\203o\312\275\377" \ - "\203p\313\276\377\4w\315\307\377\200\322\306\377\232\330\317\377\264" \ - "\342\333\377\253\363ZE\0\1\267\317^\377\210\253\307F\377\5\261\307G\377" \ - "\253\307F\377\262\311Q\377\300\324q\377\324\344\243\377\246\363ZE\0\1" \ - "\263\312R\377\262\253\307F\377\1\276\321h\377\246\363ZE\0\3\375\337\243" \ - "\377\375\322y\377\370\313e\377\212\371\313^\377\1\370\313e\377\213\372" \ - "\316n\377\4\373\320w\377\372\326\201\377\373\327\202\377\372\332\221" \ - "\377\226\375\334\223\377\3\372\330\211\377\372\326\201\377\373\320w\377" \ - "\213\372\316n\377\215\363ZE\0\255\362I3\377\203\361H2\377\1\362I3\377" \ - "\202\361H2\377\1\363yj\377\377\363ZE\0\234\363ZE\0\1\267\317^\377\202" \ - "\253\307F\377\7\261\307G\377\261\310P\377\263\313Z\377\274\317f\377\306" \ - "\327\202\377\321\336\227\377\332\344\253\377\252\363ZE\0\1\263\312R\377" \ - "\262\253\307F\377\1\274\317f\377\252\363ZE\0\4\376\343\254\377\375\337" \ - "\243\377\372\330\211\377\370\324x\377\202\370\313e\377\203\371\313^\377" \ - "\1\370\313e\377\204\372\316n\377\2\373\317o\377\373\320w\377\202\370" \ - "\324x\377\2\372\326\201\377\372\330\211\377\202\372\332\221\377\233\375" \ - "\334\223\377\202\372\332\221\377\6\372\330\211\377\372\326\201\377\375" \ - "\322y\377\370\324x\377\373\320w\377\374\320p\377\204\372\316n\377\1\377" \ - "\345\264\377\214\363ZE\0\263\361H2\377\1\365\220\203\377\377\363ZE\0" \ - "\377\363ZE\0\270\363ZE\0\1\374\335\232\377\202\371\313^\377\257\370\313" \ - "e\377\3\371\313^\377\367\312d\377\376\343\254\377\214\363ZE\0\263\361" \ - "H2\377\1\370\223\205\377\377\363ZE\0\377\363ZE\0\270\363ZE\0\1\371\346" \ - "\264\377\263\371\313^\377\1\376\343\254\377\214\363ZE\0\263\361H2\377" \ - "\1\367\231\216\377\377\363ZE\0\377\363ZE\0\270\363ZE\0\1\371\346\264" \ - "\377\263\371\313^\377\1\377\345\264\377\214\363ZE\0\263\361H2\377\1\370" \ - "\242\232\377\377\363ZE\0\377\363ZE\0\270\363ZE\0\1\371\346\264\377\263" \ - "\371\313^\377\215\363ZE\0\263\361H2\377\1\372\262\253\377\377\363ZE\0" \ - "\377\363ZE\0\270\363ZE\0\1\371\346\264\377\263\371\313^\377\215\363Z" \ - "E\0\263\361H2\377\377\363ZE\0\377\363ZE\0\271\363ZE\0\1\371\346\264\377" \ - "\263\371\313^\377\215\363ZE\0\262\361H2\377\1\362I3\377\377\363ZE\0\377" \ - "\363ZE\0\271\363ZE\0\1\371\346\264\377\262\371\313^\377\1\370\313e\377" \ - "\215\363ZE\0\262\361H2\377\1\361YD\377\377\363ZE\0\377\363ZE\0\271\363" \ - "ZE\0\1\371\346\264\377\262\371\313^\377\1\373\317o\377\215\363ZE\0\262" \ - "\361H2\377\1\363q`\377\377\363ZE\0\377\363ZE\0\271\363ZE\0\1\371\346" \ - "\264\377\262\371\313^\377\1\372\326\201\377\215\363ZE\0\262\361H2\377" \ - "\1\370\223\205\377\377\363ZE\0\377\363ZE\0\271\363ZE\0\1\371\346\264" \ - "\377\262\371\313^\377\1\372\330\211\377\215\363ZE\0\262\361H2\377\1\372" \ - "\262\253\377\377\363ZE\0\377\363ZE\0\271\363ZE\0\1\371\346\264\377\262" \ - "\371\313^\377\1\375\337\243\377\215\363ZE\0\262\361H2\377\377\363ZE\0" \ - "\377\363ZE\0\272\363ZE\0\1\371\346\264\377\262\371\313^\377\216\363Z" \ - "E\0\261\361H2\377\1\361YD\377\377\363ZE\0\377\363ZE\0\272\363ZE\0\1\371" \ - "\346\264\377\261\371\313^\377\1\370\313e\377\216\363ZE\0\261\361H2\377" \ - "\1\365\220\203\377\377\363ZE\0\377\363ZE\0\272\363ZE\0\1\371\346\264" \ - "\377\261\371\313^\377\1\372\330\211\377\216\363ZE\0\261\361H2\377\1\371" \ - "\270\256\377\377\363ZE\0\377\363ZE\0\272\363ZE\0\1\371\346\264\377\261" \ - "\371\313^\377\1\375\337\243\377\216\363ZE\0\260\361H2\377\1\357O:\377" \ - "\377\363ZE\0\377\363ZE\0\273\363ZE\0\1\371\346\264\377\261\371\313^\377" \ - "\217\363ZE\0\260\361H2\377\1\365\202u\377\377\363ZE\0\377\363ZE\0\273" \ - "\363ZE\0\1\371\346\264\377\260\371\313^\377\1\370\324x\377\217\363ZE" \ - "\0\260\361H2\377\1\370\276\262\377\377\363ZE\0\377\363ZE\0\273\363ZE" \ - "\0\1\371\346\264\377\260\371\313^\377\1\375\337\243\377\217\363ZE\0\257" \ - "\361H2\377\1\361YD\377\377\363ZE\0\377\363ZE\0\274\363ZE\0\1\371\346" \ - "\264\377\260\371\313^\377\220\363ZE\0\257\361H2\377\1\367\240\222\377" \ - "\377\363ZE\0\377\363ZE\0\274\363ZE\0\1\371\346\264\377\257\371\313^\377" \ - "\1\372\326\201\377\220\363ZE\0\256\361H2\377\1\360XC\377\377\363ZE\0" \ - "\377\363ZE\0\275\363ZE\0\1\371\346\264\377\257\371\313^\377\221\363Z" \ - "E\0\256\361H2\377\1\367\213\201\377\377\363ZE\0\377\363ZE\0\275\363Z" \ - "E\0\1\371\346\264\377\256\371\313^\377\1\373\317o\377\221\363ZE\0\255" \ - "\361H2\377\1\363SC\377\377\363ZE\0\377\363ZE\0\276\363ZE\0\1\371\346" \ - "\264\377\256\371\313^\377\1\376\343\254\377\221\363ZE\0\255\361H2\377" \ - "\1\365\220\203\377\377\363ZE\0\377\363ZE\0\276\363ZE\0\1\371\346\264" \ - "\377\255\371\313^\377\1\370\313e\377\222\363ZE\0\254\361H2\377\1\361" \ - "YD\377\377\363ZE\0\377\363ZE\0\277\363ZE\0\1\371\346\264\377\255\371" \ - "\313^\377\1\376\343\254\377\222\363ZE\0\254\361H2\377\1\367\240\222\377" \ - "\377\363ZE\0\377\363ZE\0\277\363ZE\0\1\371\346\264\377\254\371\313^\377" \ - "\1\373\317o\377\223\363ZE\0\253\361H2\377\1\364kX\377\377\363ZE\0\377" \ - "\363ZE\0\300\363ZE\0\1\371\346\264\377\254\371\313^\377\224\363ZE\0\252" \ - "\361H2\377\1\361Q;\377\377\363ZE\0\377\363ZE\0\301\363ZE\0\1\371\346" \ - "\264\377\253\371\313^\377\1\372\330\211\377\224\363ZE\0\252\361H2\377" \ - "\1\366\227\206\377\377\363ZE\0\377\363ZE\0\301\363ZE\0\1\371\346\264" \ - "\377\252\371\313^\377\1\370\313e\377\225\363ZE\0\251\361H2\377\1\364" \ - "kX\377\377\363ZE\0\377\363ZE\0\302\363ZE\0\1\371\346\264\377\251\371" \ - "\313^\377\2\367\312d\377\376\343\254\377\225\363ZE\0\250\361H2\377\1" \ - "\362R<\377\377\363ZE\0\377\363ZE\0\303\363ZE\0\1\371\346\264\377\251" \ - "\371\313^\377\1\372\326\201\377\226\363ZE\0\250\361H2\377\1\372\262\253" \ - "\377\377\363ZE\0\377\363ZE\0\303\363ZE\0\1\371\346\264\377\250\371\313" \ - "^\377\1\373\317o\377\227\363ZE\0\247\361H2\377\1\370\223\205\377\377" \ - "\363ZE\0\377\363ZE\0\304\363ZE\0\1\371\346\264\377\247\371\313^\377\1" \ - "\370\313e\377\230\363ZE\0\246\361H2\377\1\364\200n\377\377\363ZE\0\377" \ - "\363ZE\0\305\363ZE\0\1\371\346\264\377\247\371\313^\377\1\377\345\264" \ - "\377\230\363ZE\0\245\361H2\377\1\363yj\377\377\363ZE\0\377\363ZE\0\306" \ - "\363ZE\0\1\371\346\264\377\246\371\313^\377\1\375\337\243\377\231\363" \ - "ZE\0\244\361H2\377\1\364yd\377\377\363ZE\0\377\363ZE\0\307\363ZE\0\1" \ - "\371\346\264\377\245\371\313^\377\1\372\332\221\377\232\363ZE\0\243\361" \ - "H2\377\1\363yj\377\377\363ZE\0\377\363ZE\0\310\363ZE\0\1\371\346\264" \ - "\377\244\371\313^\377\1\372\330\211\377\233\363ZE\0\241\361H2\377\2\362" \ - "I3\377\366{l\377\377\363ZE\0\377\363ZE\0\311\363ZE\0\1\371\346\264\377" \ - "\243\371\313^\377\1\372\330\211\377\234\363ZE\0\240\361H2\377\2\362I" \ - "3\377\367\213\201\377\377\363ZE\0\377\363ZE\0\312\363ZE\0\1\371\346\264" \ - "\377\242\371\313^\377\1\375\334\223\377\235\363ZE\0\237\361H2\377\2\357" \ - "O:\377\370\242\232\377\377\363ZE\0\377\363ZE\0\313\363ZE\0\1\371\346" \ - "\264\377\240\371\313^\377\2\370\313e\377\375\337\243\377\236\363ZE\0" \ - "\236\361H2\377\1\363S=\377\377\363ZE\0\377\363ZE\0\315\363ZE\0\1\371" \ - "\346\264\377\237\371\313^\377\2\370\313e\377\371\346\264\377\237\363" \ - "ZE\0\235\361H2\377\1\363q`\377\377\363ZE\0\377\363ZE\0\316\363ZE\0\1" \ - "\371\346\264\377\236\371\313^\377\1\373\317o\377\241\363ZE\0\233\361" \ - "H2\377\2\360XC\377\366\247\234\377\377\363ZE\0\377\363ZE\0\317\363ZE" \ - "\0\1\371\346\264\377\235\371\313^\377\1\372\332\221\377\242\363ZE\0\231" \ - "\361H2\377\2\362I3\377\366{l\377\377\363ZE\0\377\363ZE\0\321\363ZE\0" \ - "\1\371\346\264\377\233\371\313^\377\1\370\313e\377\244\363ZE\0\227\361" \ - "H2\377\2\362I3\377\363q`\377\377\363ZE\0\377\363ZE\0\323\363ZE\0\1\371" \ - "\346\264\377\231\371\313^\377\2\370\313e\377\375\334\223\377\245\363" \ - "ZE\0\226\361H2\377\2\362iV\377\371\270\256\377\377\363ZE\0\377\363ZE" \ - "\0\324\363ZE\0\1\371\346\264\377\227\371\313^\377\2\367\312d\377\372" \ - "\326\201\377\247\363ZE\0\223\361H2\377\3\357O:\377\365lY\377\371\270" \ - "\256\377\377\363ZE\0\377\363ZE\0\326\363ZE\0\1\371\346\264\377\226\371" \ - "\313^\377\1\372\326\201\377\251\363ZE\0\220\361H2\377\3\362I3\377\361" \ - "YD\377\365\202u\377\377\363ZE\0\377\363ZE\0\331\363ZE\0\1\371\346\264" \ - "\377\223\371\313^\377\2\370\313e\377\372\326\201\377\253\363ZE\0\215" \ - "\361H2\377\4\362I3\377\363SC\377\366tb\377\372\262\253\377\377\363ZE" \ - "\0\377\363ZE\0\333\363ZE\0\1\371\346\264\377\221\371\313^\377\2\370\313" \ - "e\377\375\334\223\377\255\363ZE\0\212\361H2\377\4\362I3\377\361`L\377" \ - "\370\223\205\377\373\272\260\377\377\363ZE\0\377\363ZE\0\336\363ZE\0" \ - "\1\371\346\264\377\216\371\313^\377\2\370\313e\377\372\330\211\377\260" \ - "\363ZE\0\203\361H2\377\6\357O3\377\363S=\377\364cO\377\363yj\377\367" \ - "\231\216\377\372\262\253\377\377\363ZE\0\377\363ZE\0\343\363ZE\0\1\371" \ - "\346\264\377\212\371\313^\377\3\370\313e\377\370\324x\377\375\337\243" \ - "\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\240\363ZE\0\1\371\346\264\377" \ - "\203\371\313^\377\202\370\313e\377\4\373\320w\377\372\332\221\377\375" \ - "\337\243\377\371\346\264\377\377\363ZE\0\377\363ZE\0\377\363ZE\0\377" \ - "\363ZE\0\377\363ZE\0\377\363ZE\0\377\363ZE\0\217\363ZE\0") - diff --git a/psplash-systemd.c b/psplash-systemd.c new file mode 100644 index 0000000..b4f8837 --- /dev/null +++ b/psplash-systemd.c @@ -0,0 +1,608 @@ +/* + * pslash-systemd - systemd integration for psplash + * + * Copyright (c) 2020 Toradex + * + * Author: Stefan Agner + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "psplash.h" + +#include +#include +#include +#include +#include +#include + +#define RESULT_BUFFER_SIZE 2048 +#define PSPLASH_UPDATE_USEC 1000000 +// maximum wait multiplier of average delay to wait for next psplash-systemd +#define PSPLASH_MAX_WAIT_MULTIPLIER 12 +#define RUN_PSPLASH_SYSTEMD "/run/psplash-systemd" +#define RUN_PSPLASH_SYSTEMD_FLAG "/run/psplash-systemd.running" +#define SYSROOT_DIR "/run/systemd/system" +#define PSPLASH_SYSTEMD_SERVICE "psplash-systemd.service" +#define BASIC_TARGET_WANTS "basic.target.wants" +const char *FIRST_TIME_BOOT_COMMAND = + "MSG Setting up. This may take up to 15 minutes."; + +typedef uint64_t usec_t; + +static int pipe_fd; +static int progress_base; +static int progress_weight; +static int progress_weighted; +static int progress_runs; +static FILE *logfile; +static FILE *comm_file; + +// debug function +#define print_log fprintf +// #define print_log do_print_log + +// custom logging to the file + stdour/stderr +void do_print_log(FILE *stream, const char *fmt, ...) { + time_t now; + struct tm *tm; + va_list args; + char *str; + + va_start (args, fmt); + if (vasprintf(&str, fmt, args) < 0) + return; + + if (logfile) { + now =time(NULL); + tm = localtime (&now); + va_start (args, fmt); + fprintf(logfile, "%02d:%02d:%02d %s", tm->tm_hour, tm->tm_min, tm->tm_sec, str); + } + fprintf(stream, "%s", str); + free(str); +} + +int check_if_seed_is_loaded() { + const char * const host = "/run/snapd.socket"; + const char * const message = "GET /v2/snaps/system/conf?keys=seed.loaded HTTP/1.0\r\n\r\n"; + static char output[1024]; + + + const int sockfd = socket(AF_UNIX, SOCK_STREAM, 0); + if (sockfd < 0) { + return -1; + } + + struct sockaddr_un serv_addr = {0}; + serv_addr.sun_family = AF_UNIX; + strncpy(serv_addr.sun_path, host, sizeof(serv_addr.sun_path) - 1); + int ret = connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)); + if (ret == -1) { + close(sockfd); + return -1; + } + + const int total = strlen(message); + int bytes, received; + int sent = 0; + do { + bytes = write(sockfd, message + sent, total - sent); + if (bytes < 0) { + close(sockfd); + return -1; + } + + if (bytes == 0) + break; + sent += bytes; + } while (sent < total); + + char response[RESULT_BUFFER_SIZE]; + memset(response, 0, RESULT_BUFFER_SIZE); + + received = 0; + const ssize_t bytes_read = recv(sockfd, response, RESULT_BUFFER_SIZE, MSG_CMSG_CLOEXEC); + if (bytes_read <= 0) { + close(sockfd); + return -1; + } + + return strstr(response, "\"seed.loaded\":true") != NULL ? 1 : 0; +} + +int check_if_screenly_client_is_installed() { + const char * const host = "/run/snapd.socket"; + const char * const message = "GET /v2/snaps HTTP/1.0\r\n\r\n"; + + const int sockfd = socket(AF_UNIX, SOCK_STREAM, 0); + if (sockfd < 0) { + print_log(stdout, "Error opening socket: "); + return -1; + } + + struct sockaddr_un serv_addr = {0}; + serv_addr.sun_family = AF_UNIX; + strncpy(serv_addr.sun_path, host, sizeof(serv_addr.sun_path) - 1); + int ret = connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)); + if (ret == -1) { + close(sockfd); + print_log(stdout, "Error connecting: "); + return -1; + } + + const int total = strlen(message); + int bytes, received; + int sent = 0; + do { + bytes = write(sockfd, message + sent, total - sent); + if (bytes < 0) { + perror("Error writing message to socket"); + close(sockfd); + return -1; + } + + if (bytes == 0) + break; + sent += bytes; + } while (sent < total); + + char *response = malloc(sizeof(char) * 50000); + memset(response,0,sizeof(char) * 50000); + received = 0; + const ssize_t bytes_read= recv(sockfd, response, 50000, MSG_CMSG_CLOEXEC); + if (bytes_read <= 0) { + print_log(stdout, "Error receiving an answer"); + free(response); + close(sockfd); + return -1; + } + + if(strstr(response, "screenly-client") != NULL) { + free(response); + print_log(stdout, "Found screenly-client snap.\n"); + return 1; + } else { + free(response); + return -1; + } +} + +void display_first_time_boot_message(int pipe_fd) { + print_log(stdout, "The first phase of the first boot detected\n"); + write(pipe_fd, FIRST_TIME_BOOT_COMMAND, strlen(FIRST_TIME_BOOT_COMMAND) + 1); +} + +bool is_snapd_mode_install() { + static const char* first_boot_marker = "snapd_recovery_mode=install"; + static const unsigned int buffer_size = 1024; + + FILE *cmdline_file = fopen("/proc/cmdline", "r"); + if (cmdline_file == NULL) { + print_log(stdout, "Cannot open cmdline file\n"); + return 0; + } + + char cmdline[buffer_size]; + char* result = fgets(cmdline, buffer_size, cmdline_file); + fclose(cmdline_file); + + if (result == NULL) { + print_log(stdout, "Cannot read cmdline file\n"); + return 0; + } + + return strstr(cmdline, first_boot_marker) != NULL; +} + + +int get_progress() +{ + sd_bus_error error = SD_BUS_ERROR_NULL; + static double current_progress = 0; + static bool first_boot_messaged_displayed = 0; + + double progress = 0; + sd_bus *bus = NULL; + int r; + char buffer[64]; + int len; + + /* Connect to the system bus */ + r = sd_bus_new(&bus); + if (r < 0) { + print_log(stderr, "Failed to get bus: %s\n", strerror(-r)); + goto finish; + } + + r = sd_bus_set_address(bus, "unix:path=/run/systemd/private"); + if (r < 0) { + print_log(stderr, "Failed to set bus address: %s\n", strerror(-r)); + goto finish; + } + + r = sd_bus_start(bus); + if (r < 0) { + print_log(stderr, "Failed to connect to systemd private bus: %s\n", strerror(-r)); + goto finish; + } + + /* Issue the method call and store the respons message in m */ + r = sd_bus_get_property_trivial(bus, + "org.freedesktop.systemd1", /* service to contact */ + "/org/freedesktop/systemd1", /* object path */ + "org.freedesktop.systemd1.Manager", /* interface name */ + "Progress", /* method name */ + &error, /* object to return error in */ + 'd', /* return message on success */ + &progress); /* value */ + if (r < 0) { + print_log(stderr, "Failed to connect to system bus: %s\n", strerror(-r)); + goto finish; + } + + if (!first_boot_messaged_displayed) { + if (is_snapd_mode_install()) { + display_first_time_boot_message(pipe_fd); + first_boot_messaged_displayed = 1; + } else { + int res = check_if_seed_is_loaded(); + + if (res == 0) { + display_first_time_boot_message(pipe_fd); + first_boot_messaged_displayed = 1; + } else if (res == 1) { + first_boot_messaged_displayed = 1; + } + } + } + /* + * Systemd's progress seems go backwards at times. Prevent that + * progress bar on psplash goes backward by just communicating the + * highest observed progress so far. + */ + if (current_progress < progress) + current_progress = progress; + + progress_weighted = progress_base + current_progress * progress_weight; + // print_log(stdout, "Progress: %f, weighted: %d\n", progress, progress_weighted); + /* len = snprintf(buffer, 20, "PROGRESS %d", progress_weighted); */ + /* len = write(pipe_fd, buffer, len + 1); */ + int systemd_loaded = -1; + if (progress == 1.0) { + print_log(stdout, "Systemd reported progress of 1.0, quit monitoring loop\n"); + // send QUIT command only if overal proress is 100 + if (progress_weighted == 100) { + print_log(stdout, "systemd is fully booted\n"); + } + } else { + goto finish; + } + + if (check_if_screenly_client_is_installed() != -1) { + print_log(stdout, "system is fully booted and screenly-client is installed\n"); + len = write(pipe_fd, "QUIT", 5); + r = -1; + } + +finish: + sd_bus_error_free(&error); + sd_bus_unref(bus); + return r; +} + +int psplash_handler(sd_event_source *s, + uint64_t usec, + void *userdata) +{ + sd_event *event = userdata; + int r; + + progress_runs++; + r = get_progress(); + if (r < 0) + goto err; + + r = sd_event_source_set_time(s, usec + PSPLASH_UPDATE_USEC); + if (r < 0) + goto err; + + return 0; +err: + sd_event_exit(event, EXIT_FAILURE); + + return r; +} + +/** + * we finished initrd portion of the boot + * keep pipe file open, so main psplash process survives root pivot + * in the mean time emulate "gentle" progress and keep watching for + * signal from rootfs psplash-systemd + * we wait max 10 seconds + * it takes ~3+ seconds for systemd start post root pivot and start + * next psplash-systemd instance, at which point progress is ~0.5 + */ +void wait_for_next_monitor() { + char buffer[20]; + int len; + int i; + int progress_increments; + int average_delay; + + // this is estimate: but on average it stake 1.3 times to run through initrd section + // as it takes to pivot root and next monitor to start + average_delay = progress_runs / 1.3; + // increment progress by: + // average progress of next section by the time next monitor starts ~0.3 times + // progress weight of next section is 100 - weight of this sercion (we have two sections) + // divide that number by average delay for next monitor to start + progress_increments = 0.3 * (100 - progress_weight) / average_delay; + + for (i=0 ; i < PSPLASH_MAX_WAIT_MULTIPLIER * average_delay; ++i) { + // check if next section started by reading from comm_file file + if (comm_file){ + rewind(comm_file); // always read from the begining + if (fgets(buffer,sizeof(buffer), comm_file) !=NULL) { + // file is empty, moment read succeeds, other side is running + fclose(comm_file); + comm_file = NULL; + return; + } + } + progress_weighted += progress_increments; + // print_log(stdout, "Progress: weighted: %d\n", progress_weighted); + /* len = snprintf(buffer, 20, "PROGRESS %d", progress_weighted); */ + /* len = write(pipe_fd, buffer, len + 1); */ + sleep(1); + } +} + +int do_main() +{ + sd_event *event; + sd_event_source *event_source = NULL; + int r; + sigset_t ss; + usec_t time_now; + char *rundir; + + print_log(stdout, "Entering main loop of systemd monitor.\n"); + /* Open pipe for psplash */ + rundir = getenv("PSPLASH_FIFO_DIR"); + + if (!rundir) + rundir = "/run"; + + r = chdir(rundir); + if (r < 0 ) { + r = -errno; + goto finish; + } + + if ((pipe_fd = open (PSPLASH_FIFO,O_WRONLY|O_NONBLOCK)) == -1) { + print_log(stderr, "Error unable to open fifo: %s\n", strerror(errno)); + exit(EXIT_FAILURE); + } + + // update progress before we register for the event loop + get_progress(); + + r = sd_event_default(&event); + if (r < 0) + goto finish; + + if (sigemptyset(&ss) < 0 || + sigaddset(&ss, SIGTERM) < 0 || + sigaddset(&ss, SIGINT) < 0) { + r = -errno; + goto finish; + } + + /* Block SIGTERM first, so that the event loop can handle it */ + if (sigprocmask(SIG_BLOCK, &ss, NULL) < 0) { + r = -errno; + print_log(stderr, "Failed to set SIG_BLOCK mask: %s\n", strerror(errno)); + goto finish; + } + + /* Let's make use of the default handler and "floating" reference + * features of sd_event_add_signal() */ + r = sd_event_add_signal(event, NULL, SIGTERM, NULL, NULL); + if (r < 0) { + print_log(stdout, "sd_event add SIGTERM signal error: %s\n", strerror(errno)); + goto finish; + } + + r = sd_event_add_signal(event, NULL, SIGINT, NULL, NULL); + if (r < 0) { + print_log(stdout, "sd_event add SIGINT signal error: %s\n", strerror(errno)); + goto finish; + } + + r = sd_event_now(event, CLOCK_MONOTONIC, &time_now); + if (r < 0) { + print_log(stdout, "sd_event_now error: %s\n", strerror(errno)); + goto finish; + } + + r = sd_event_add_time(event, &event_source, CLOCK_MONOTONIC, + time_now, 0, psplash_handler, event); + if (r < 0) + goto finish; + + r = sd_event_source_set_enabled(event_source, SD_EVENT_ON); + if (r < 0) + goto finish; + + r = sd_event_loop(event); +finish: + sd_event_source_disable_unref(event_source); + event = sd_event_unref(event); + if(progress_weighted != 100) { + wait_for_next_monitor(); + } + // it's safe to close the pipe now + close(pipe_fd); + + return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; +} + + +int copy_itself(const char *source, const char *target) { + int sf; + int tf; + int r; + unsigned char buffer[4096]; + + sf = open(source, O_RDONLY); + if (sf<0) { + print_log(stderr, "open %s failed: %s\n", source, strerror(errno)); + return -errno; + } + + tf = open(target, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, 0755); + if (tf<0) { + print_log(stderr, "open %s failed: %s\n", target, strerror(errno)); + return -errno; + } + + while(1) { + r = read(sf, buffer, 4096); + if (r == -1) { + print_log(stderr, "Error reading from %s : %s\n", source, strerror(errno)); + goto finish; + } + if (r == 0) { + break; + } + r = write(tf, buffer, r); + if (r == -1) { + print_log(stderr, "Error writing to %s : %s\n", target, strerror(errno)); + goto finish; + } + } + +finish: + close(sf); + close(tf); + return r; +} + +// sets up service file under /sysroot/run/systemd/system/ +void setup_service() { + FILE *new_service; + int r; + new_service = fopen(SYSROOT_DIR"/"PSPLASH_SYSTEMD_SERVICE, "a+"); + if (new_service) { + print_log(stdout, "Empty service file created\n"); + fprintf(new_service, "[Unit]\n"); + fprintf(new_service, "Description=Start psplash-systemd progress communication helper\n"); + fprintf(new_service, "DefaultDependencies=no\n"); + fprintf(new_service, "RequiresMountsFor=/run\n\n"); + fprintf(new_service, "[Service]\n"); + fprintf(new_service, "ExecStart=/run/psplash-systemd\n"); + fprintf(new_service, "RemainAfterExit=yes\n"); + fprintf(new_service, "Environment=\"PSPLASH_BASE=35\"\n"); + fprintf(new_service, "Environment=\"PSPLASH_WEIGHT=65\"\n\n"); + fprintf(new_service, "[Install]\n"); + fprintf(new_service, "WantedBy=basic.target\n"); + fclose(new_service); + // creare sym link to enable the new service + r = mkdir(SYSROOT_DIR"/"BASIC_TARGET_WANTS, 0755); + if (r == -1) + print_log(stderr,"Failed to create %s dir to enable new servive: %s\n", BASIC_TARGET_WANTS, strerror(errno)); + r = symlink("../"PSPLASH_SYSTEMD_SERVICE, SYSROOT_DIR"/"BASIC_TARGET_WANTS"/"PSPLASH_SYSTEMD_SERVICE); + if (r == -1) + print_log(stderr,"Failed to enable psplash-systemd service: %s\n", strerror(errno)); + } else { + print_log(stderr,"Failed to create new service file: %s\n", strerror(errno)); + } +} + + +/** + * Two modes of operation are avaiabe + * - default: monitor systemd boot progress + * no parameter is passed + * - setup: prepare for root pivot + * 'setup' parameter is passed + * - copies psplash-systemd executable to /run + * - created new systemd service file under /sysroot/run/systemd/system/ + * and enables it + * This operation can be only called when system is ready for it + * e.g. /sysroot/run/systemd/system/ is created + */ +int main(int argc, char *argv[]) { + int r; + const char *env; + int cleanup = 0; + + env = getenv("PSPLASH_LOG"); + if (env) { + logfile = fopen(env, "a+"); + } + if (argc == 1 ) { + // if we run from RUN_PSPLASH_SYSTEMD we should signal we started + // by writing to the RUN_PSPLASH_SYSTEMD_FLAG file + comm_file = fopen(RUN_PSPLASH_SYSTEMD_FLAG, "a+"); + if(comm_file) { + if (!strncmp(argv[0], RUN_PSPLASH_SYSTEMD, strlen(RUN_PSPLASH_SYSTEMD))) { + // write/flush and close the file, to make sure + // other process has something to read + fprintf(comm_file, "Runnin..."); + fflush(comm_file); + fclose(comm_file); + comm_file = NULL; + cleanup = 1; + } + } + } else if (!strncmp(argv[1], "setup", strlen("setup"))) { + // copy itself to the /run directory + r = copy_itself(argv[0], RUN_PSPLASH_SYSTEMD); + if (r <0) + print_log(stderr, "Failed to copy itself to /run dir: %s\n", strerror(-r)); + // create new service unit + setup_service(); + goto finish; + } + + env = getenv("PSPLASH_BASE"); + if (env) { + progress_base = atoi(env); + } + env = getenv("PSPLASH_WEIGHT"); + if (env) { + progress_weight = atoi(env); + } + if (!progress_weight) { + // if weight is 0 -> not defined -> default 100 + // if base is not defined, it's correct to be 0 + progress_weight = 100; + } + + r = do_main(); + +finish: + if (logfile) + fclose(logfile); + + if (comm_file) + fclose(comm_file); + + if (cleanup) { + // try to delete "flag" file, ignore error + remove(RUN_PSPLASH_SYSTEMD_FLAG); + } + return r; +} diff --git a/psplash-write.c b/psplash-write.c index 3fdba95..a12467a 100644 --- a/psplash-write.c +++ b/psplash-write.c @@ -5,15 +5,7 @@ * * Parts of this file based on 'usplash' copyright Matthew Garret. * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * SPDX-License-Identifier: GPL-2.0-or-later * */ @@ -29,13 +21,13 @@ int main(int argc, char **argv) { - char *tmpdir; + char *rundir; int pipe_fd; - tmpdir = getenv("TMPDIR"); + rundir = getenv("PSPLASH_FIFO_DIR"); - if (!tmpdir) - tmpdir = "/tmp"; + if (!rundir) + rundir = "/run"; if (argc!=2) { @@ -43,7 +35,7 @@ int main(int argc, char **argv) exit(-1); } - chdir(tmpdir); + chdir(rundir); if ((pipe_fd = open (PSPLASH_FIFO,O_WRONLY|O_NONBLOCK)) == -1) { diff --git a/psplash.c b/psplash.c index 992e199..8935f50 100644 --- a/psplash.c +++ b/psplash.c @@ -1,20 +1,12 @@ -/* - * pslash - a lightweight framebuffer splashscreen for embedded devices. +/* + * pslash - a lightweight framebuffer splashscreen for embedded devices. * * Copyright (c) 2006 Matthew Allum * - * Parts of this file ( fifo handling ) based on 'usplash' copyright + * Parts of this file ( fifo handling ) based on 'usplash' copyright * Matthew Garret. * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * SPDX-License-Identifier: GPL-2.0-or-later * */ @@ -23,7 +15,11 @@ #include "psplash-colors.h" #include "psplash-poky-img.h" #include "psplash-bar-img.h" -#include "radeon-font.h" +#include +#ifdef HAVE_SYSTEMD +#include +#endif +#include FONT_HEADER #define SPLIT_LINE_POS(fb) \ ( (fb)->height \ @@ -45,24 +41,24 @@ psplash_draw_msg (PSplashFB *fb, const char *msg) { int w, h; - psplash_fb_text_size (&w, &h, &radeon_font, msg); + psplash_fb_text_size (&w, &h, &FONT_DEF, msg); DBG("displaying '%s' %ix%i\n", msg, w, h); /* Clear */ - psplash_fb_draw_rect (fb, - 0, - SPLIT_LINE_POS(fb) - h, + psplash_fb_draw_rect (fb, + 0, + SPLIT_LINE_POS(fb) - h, fb->width, h, PSPLASH_BACKGROUND_COLOR); psplash_fb_draw_text (fb, - (fb->width-w)/2, + (fb->width-w)/2, SPLIT_LINE_POS(fb) - h, PSPLASH_TEXT_COLOR, - &radeon_font, + &FONT_DEF, msg); } @@ -74,13 +70,13 @@ psplash_draw_progress (PSplashFB *fb, int value) /* 4 pix border */ x = ((fb->width - BAR_IMG_WIDTH)/2) + 4 ; y = SPLIT_LINE_POS(fb) + 4; - width = BAR_IMG_WIDTH - 8; + width = BAR_IMG_WIDTH - 8; height = BAR_IMG_HEIGHT - 8; if (value > 0) { barwidth = (CLAMP(value,0,100) * width) / 100; - psplash_fb_draw_rect (fb, x + barwidth, y, + psplash_fb_draw_rect (fb, x + barwidth, y, width - barwidth, height, PSPLASH_BAR_BACKGROUND_COLOR); psplash_fb_draw_rect (fb, x, y, barwidth, @@ -89,7 +85,7 @@ psplash_draw_progress (PSplashFB *fb, int value) else { barwidth = (CLAMP(-value,0,100) * width) / 100; - psplash_fb_draw_rect (fb, x, y, + psplash_fb_draw_rect (fb, x, y, width - barwidth, height, PSPLASH_BAR_BACKGROUND_COLOR); psplash_fb_draw_rect (fb, x + width - barwidth, @@ -97,46 +93,55 @@ psplash_draw_progress (PSplashFB *fb, int value) PSPLASH_BAR_COLOR); } - DBG("value: %i, width: %i, barwidth :%i\n", value, + DBG("value: %i, width: %i, barwidth :%i\n", value, width, barwidth); } -static int +static int parse_command (PSplashFB *fb, char *string) { char *command; DBG("got cmd %s", string); - + if (strcmp(string,"QUIT") == 0) return 1; command = strtok(string," "); - if (!strcmp(command,"PROGRESS")) + if (!strcmp(command,"PROGRESS")) { - psplash_draw_progress (fb, atoi(strtok(NULL,"\0"))); - } - else if (!strcmp(command,"MSG")) + char *arg = strtok(NULL, "\0"); + + if (arg) { + psplash_draw_progress(fb, atoi(arg)); + } + } + else if (!strcmp(command,"MSG")) { - psplash_draw_msg (fb, strtok(NULL,"\0")); - } - else if (!strcmp(command,"QUIT")) + char *arg = strtok(NULL, "\0"); + + if (arg) + psplash_draw_msg (fb, arg); + } + else if (!strcmp(command,"QUIT")) { return 1; } + psplash_fb_flip(fb, 0); return 0; } -void -psplash_main (PSplashFB *fb, int pipe_fd, int timeout) +void +psplash_main (PSplashFB *fb, int pipe_fd, int timeout) { int err; ssize_t length = 0; fd_set descriptors; struct timeval tv; char *end; + char *cmd; char command[2048]; tv.tv_sec = timeout; @@ -147,14 +152,14 @@ psplash_main (PSplashFB *fb, int pipe_fd, int timeout) end = command; - while (1) + while (1) { - if (timeout != 0) + if (timeout != 0) err = select(pipe_fd+1, &descriptors, NULL, NULL, &tv); else err = select(pipe_fd+1, &descriptors, NULL, NULL, NULL); - - if (err <= 0) + + if (err <= 0) { /* if (errno == EINTR) @@ -162,38 +167,49 @@ psplash_main (PSplashFB *fb, int pipe_fd, int timeout) */ return; } - + length += read (pipe_fd, end, sizeof(command) - (end - command)); - if (length == 0) + if (length == 0) { /* Reopen to see if there's anything more for us */ close(pipe_fd); pipe_fd = open(PSPLASH_FIFO,O_RDONLY|O_NONBLOCK); goto out; } - - if (command[length-1] == '\0') - { - if (parse_command(fb, command)) - return; - length = 0; - } - else if (command[length-1] == '\n') - { - command[length-1] = '\0'; - if (parse_command(fb, command)) - return; - length = 0; - } + cmd = command; + do { + int cmdlen; + char *cmdend = memchr(cmd, '\n', length); + + /* Replace newlines with string termination */ + if (cmdend) + *cmdend = '\0'; + + cmdlen = strnlen(cmd, length); + + /* Skip string terminations */ + if (!cmdlen && length) + { + length--; + cmd++; + continue; + } + + if (parse_command(fb, cmd)) + return; + + length -= cmdlen; + cmd += cmdlen; + } while (length); out: end = &command[length]; - + tv.tv_sec = timeout; tv.tv_usec = 0; - + FD_ZERO(&descriptors); FD_SET(pipe_fd,&descriptors); } @@ -201,10 +217,15 @@ psplash_main (PSplashFB *fb, int pipe_fd, int timeout) return; } -int -main (int argc, char** argv) +bool +is_first_boot() { + +} + +int +main (int argc, char** argv) { - char *tmpdir; + char *rundir; int pipe_fd, i = 0, angle = 0, fbdev_id = 0, ret = 0; PSplashFB *fb; bool disable_console_switch = FALSE; @@ -235,22 +256,22 @@ main (int argc, char** argv) } fail: - fprintf(stderr, - "Usage: %s [-n|--no-console-switch][-a|--angle <0|90|180|270>][-f|--fbdev <0..9>]\n", + fprintf(stderr, + "Usage: %s [-n|--no-console-switch][-a|--angle <0|90|180|270>][-f|--fbdev <0..9>]\n", argv[0]); exit(-1); } - tmpdir = getenv("TMPDIR"); + rundir = getenv("PSPLASH_FIFO_DIR"); - if (!tmpdir) - tmpdir = "/tmp"; + if (!rundir) + rundir = "/run"; - chdir(tmpdir); + chdir(rundir); if (mkfifo(PSPLASH_FIFO, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP)) { - if (errno!=EEXIST) + if (errno!=EEXIST) { perror("mkfifo"); exit(-1); @@ -258,8 +279,8 @@ main (int argc, char** argv) } pipe_fd = open (PSPLASH_FIFO,O_RDONLY|O_NONBLOCK); - - if (pipe_fd==-1) + + if (pipe_fd==-1) { perror("pipe open"); exit(-2); @@ -274,44 +295,33 @@ main (int argc, char** argv) goto fb_fail; } +#ifdef HAVE_SYSTEMD + sd_notify(0, "READY=1"); +#endif + /* Clear the background with #ecece1 */ psplash_fb_draw_rect (fb, 0, 0, fb->width, fb->height, PSPLASH_BACKGROUND_COLOR); - /* Draw the Poky logo */ - psplash_fb_draw_image (fb, - (fb->width - POKY_IMG_WIDTH)/2, -#if PSPLASH_IMG_FULLSCREEN - (fb->height - POKY_IMG_HEIGHT)/2, -#else - (fb->height * PSPLASH_IMG_SPLIT_NUMERATOR - / PSPLASH_IMG_SPLIT_DENOMINATOR - POKY_IMG_HEIGHT)/2, -#endif - POKY_IMG_WIDTH, - POKY_IMG_HEIGHT, - POKY_IMG_BYTES_PER_PIXEL, - POKY_IMG_ROWSTRIDE, - POKY_IMG_RLE_PIXEL_DATA); - - /* Draw progress bar border */ - psplash_fb_draw_image (fb, - (fb->width - BAR_IMG_WIDTH)/2, - SPLIT_LINE_POS(fb), - BAR_IMG_WIDTH, - BAR_IMG_HEIGHT, - BAR_IMG_BYTES_PER_PIXEL, - BAR_IMG_ROWSTRIDE, - BAR_IMG_RLE_PIXEL_DATA); - - psplash_draw_progress (fb, 0); - -#ifdef PSPLASH_STARTUP_MSG - psplash_draw_msg (fb, PSPLASH_STARTUP_MSG); -#endif + psplash_fb_draw_image (fb, + (fb->width - CORE_IMG_WIDTH)/2, + (fb->height - CORE_IMG_HEIGHT)/2, + CORE_IMG_WIDTH, + CORE_IMG_HEIGHT, + CORE_IMG_BYTES_PER_PIXEL, + CORE_IMG_ROWSTRIDE, + CORE_IMG_RLE_PIXEL_DATA); + + /* Scene set so let's flip the buffers. */ + /* The first time we also synchronize the buffers so we can build on an + * existing scene. After the first scene is set in both buffers, only the + * text and progress bar change which overwrite the specific areas with every + * update. + */ + psplash_fb_flip(fb, 1); psplash_main (fb, pipe_fd, 0); - psplash_fb_destroy (fb); fb_fail: diff --git a/psplash.h b/psplash.h index 7b1298f..1c42ec7 100644 --- a/psplash.h +++ b/psplash.h @@ -3,15 +3,7 @@ * * Copyright (c) 2006 Matthew Allum * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * SPDX-License-Identifier: GPL-2.0-or-later * */ diff --git a/radeon-font.h b/radeon-font.h index d2c59a4..ca70cba 100644 --- a/radeon-font.h +++ b/radeon-font.h @@ -1,3 +1,5 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + #include "psplash.h" /* Font generated from 'radeon' bdf font */