home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!news.tek.com!news.cna.tek.com!not-for-mail
- From: billr@saab.cna.tek.com (Bill Randle)
- Newsgroups: comp.sources.games
- Subject: v18i070: xboing - blockout variant with color and sound for X, Part11/30
- Date: 30 Aug 1993 10:27:52 -0700
- Organization: Tektronix, Inc., Redmond, OR
- Lines: 1693
- Approved: billr@saab.CNA.TEK.COM
- Message-ID: <25tdao$hv7@saab.cna.tek.com>
- NNTP-Posting-Host: saab.cna.tek.com
- Xref: uunet comp.sources.games:1870
-
- Submitted-by: jck@kimba.catt.citri.edu.au (Justin Kibell)
- Posting-number: Volume 18, Issue 70
- Archive-name: xboing/part11
- Environment: X11, Xlib, XPM
-
-
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 11 (of 30)."
- # Contents: highscore.c include/keys.h sounds/applause.au.uu
- # Wrapped by billr@saab on Mon Aug 30 09:14:25 1993
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'highscore.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'highscore.c'\"
- else
- echo shar: Extracting \"'highscore.c'\" \(27771 characters\)
- sed "s/^X//" >'highscore.c' <<'END_OF_FILE'
- X#include "include/copyright.h"
- X
- X/*
- X * Include file dependencies:
- X */
- X
- X#include <stdio.h>
- X#include <stdlib.h>
- X#include <stddef.h>
- X#include <ctype.h>
- X#include <unistd.h>
- X#include <sys/time.h>
- X#include <sys/param.h>
- X#include <sys/file.h>
- X#include <sys/types.h>
- X#include <netinet/in.h>
- X#include <pwd.h>
- X#include <X11/Xlib.h>
- X#include <X11/Xutil.h>
- X#include <X11/Xos.h>
- X#include <xpm.h>
- X
- X#include "include/error.h"
- X#include "include/misc.h"
- X#include "include/main.h"
- X#include "include/audio.h"
- X#include "include/special.h"
- X#include "include/init.h"
- X#include "include/inst.h"
- X#include "include/stage.h"
- X#include "include/blocks.h"
- X#include "include/ball.h"
- X#include "include/sfx.h"
- X#include "include/score.h"
- X#include "include/paddle.h"
- X#include "include/level.h"
- X#include "include/mess.h"
- X#include "include/intro.h"
- X
- X#include "bitmaps/highscores.xpm"
- X
- X#include "include/highscore.h"
- X
- X/*
- X * Internal macro definitions:
- X */
- X
- X#define GAP 13
- X#define NUM_HIGHSCORES 10
- X
- X#ifndef MAXPATHLEN
- X#define MAXPATHLEN 1024
- X#endif
- X
- X/*
- X * Internal type declarations:
- X */
- X
- X#if NeedFunctionPrototypes
- Xstatic void SetHighScoreWait(int newMode, int waitFrame);
- Xstatic void InitialiseHighScores(void);
- Xstatic void SortHighScores(void);
- Xstatic char *GetHomeDir(void);
- Xstatic void DeleteScore(int index);
- Xstatic int LockUnlock(int cmd);
- X#else
- Xstatic int LockUnlock();
- Xstatic void DeleteScore();
- Xstatic char *GetHomeDir();
- Xstatic void SetHighScoreWait();
- Xstatic void InitialiseHighScores();
- Xstatic void SortHighScores();
- X#endif
- X
- X/*
- X * Internal variable declarations:
- X */
- X
- Xstatic int nextFrame = 0;
- Xstatic int endFrame = 0;
- Xenum HighScoreStates HighScoreState;
- Xstatic Pixmap titlePixmap, titlePixmapM;
- Xstatic int waitingFrame, waitMode;
- Xstatic int sparkley = 0;
- Xstatic int sindex = 0;
- Xstatic int si = 0;
- Xstatic int scoreType = GLOBAL;
- X
- XhighScoreEntry highScores[NUM_HIGHSCORES];
- X
- X#if NeedFunctionPrototypes
- Xvoid SetUpHighScore(Display *display, Window window, Colormap colormap)
- X#else
- Xvoid SetUpHighScore(display, window, colormap)
- X Display *display;
- X Window window;
- X Colormap colormap;
- X#endif
- X{
- X XpmAttributes attributes;
- X int XpmErrorStatus;
- X
- X attributes.valuemask = XpmColormap;
- X attributes.colormap = colormap;
- X
- X /* Load the highscore title pixmap */
- X XpmErrorStatus = XpmCreatePixmapFromData(display, window, highscores_xpm,
- X &titlePixmap, &titlePixmapM, &attributes);
- X HandleXPMError(display, XpmErrorStatus, "InitialiseHighScore()");
- X
- X /* Free the xpm pixmap attributes */
- X XpmFreeAttributes(&attributes);
- X
- X /* Setup the high score table */
- X InitialiseHighScores();
- X ResetHighScore(GLOBAL);
- X}
- X
- X#if NeedFunctionPrototypes
- Xstatic void DoTitle(Display *display, Window window)
- X#else
- Xstatic void DoTitle(display, window)
- X Display *display;
- X Window window;
- X#endif
- X{
- X char string[80];
- X
- X /* Clear */
- X DrawStageBackground(display, window, BACKGROUND_0);
- X
- X /* Draw the highscore title */
- X RenderShape(display, window, titlePixmap, titlePixmapM,
- X 59, 20, 377, 37, False);
- X
- X /* Let the dudes know how to start the game */
- X strcpy(string, "Press <Space> to start the game");
- X DrawShadowCentredText(display, window, textFont,
- X string, PLAY_HEIGHT - 40, tann, PLAY_WIDTH);
- X
- X /* Set the message window to have the other display toggle key */
- X if (scoreType == GLOBAL)
- X SetCurrentMessage(display, messWindow,
- X "<H> - Personal Best", False);
- X else
- X SetCurrentMessage(display, messWindow,
- X "<h> - Roll of Honour", False);
- X
- X SetHighScoreWait(HIGHSCORE_SHOW, frame + 10);
- X}
- X
- X#if NeedFunctionPrototypes
- Xstatic void DoHighScores(Display *display, Window window)
- X#else
- Xstatic void DoHighScores(display, window)
- X Display *display;
- X Window window;
- X#endif
- X{
- X int i, len, plen;
- X int xr = 30;
- X int ym = 75;
- X int xs = xr + 30;
- X int xl = xs + 80;
- X int xt = xl + 35;
- X int xg = xt + 55;
- X int xn = xg + 90;
- X int y = 180;
- X char string[80];
- X char string2[80];
- X char *p;
- X time_t theTime;
- X
- X /* Read the high score table */
- X if (ReadHighScoreTable(GLOBAL) == False)
- X InitialiseHighScores();
- X
- X /* Draw the boing master at top of the list */
- X strcpy(string, "Boing Master");
- X DrawShadowCentredText(display, window, textFont,
- X string, ym, red, PLAY_WIDTH);
- X ym += textFont->ascent + GAP;
- X
- X /* Render the boing master's name */
- X strcpy(string, highScores[0].name);
- X DrawShadowCentredText(display, window, titleFont,
- X string, ym, yellow, PLAY_WIDTH);
- X ym += textFont->ascent + GAP * 2;
- X
- X /* Read the high score table */
- X if (ReadHighScoreTable(scoreType) == False)
- X InitialiseHighScores();
- X
- X /* Explain that this is the roll of honour */
- X if (scoreType == GLOBAL)
- X strcpy(string, "- The Roll of Honour -");
- X else
- X strcpy(string, "- Personal Best -");
- X DrawShadowCentredText(display, window, textFont,
- X string, ym, green, PLAY_WIDTH);
- X ym += textFont->ascent + GAP;
- X
- X /* Draw the titles for the highscore table */
- X strcpy(string, "#");
- X len = strlen(string);
- X DrawText(display, window, xr+2, y+2, textFont, black, string, len);
- X DrawText(display, window, xr, y, textFont, yellow, string, len);
- X
- X strcpy(string, "Score");
- X len = strlen(string);
- X DrawText(display, window, xs+2, y+2, textFont, black, string, len);
- X DrawText(display, window, xs, y, textFont, yellow, string, len);
- X
- X strcpy(string, "L");
- X len = strlen(string);
- X DrawText(display, window, xl+2, y+2, textFont, black, string, len);
- X DrawText(display, window, xl, y, textFont, yellow, string, len);
- X
- X strcpy(string, "Time");
- X len = strlen(string);
- X DrawText(display, window, xt+2, y+2, textFont, black, string, len);
- X DrawText(display, window, xt, y, textFont, yellow, string, len);
- X
- X strcpy(string, "Date");
- X len = strlen(string);
- X DrawText(display, window, xg+2, y+2, textFont, black, string, len);
- X DrawText(display, window, xg, y, textFont, yellow, string, len);
- X
- X strcpy(string, "Player");
- X len = strlen(string);
- X DrawText(display, window, xn+2, y+2, textFont, black, string, len);
- X DrawText(display, window, xn, y, textFont, yellow, string, len);
- X
- X y += textFont->ascent + GAP / 2;
- X
- X /* Draw the line above the table */
- X DrawLine(display, window, 22, y+2, PLAY_WIDTH - 18, y+2, black, 3);
- X DrawLine(display, window, 20, y, PLAY_WIDTH - 20, y, white, 3);
- X
- X y += textFont->ascent;
- X
- X /* Draw the scores into the table */
- X for (i = 0; i < NUM_HIGHSCORES; i++)
- X {
- X if (ntohl(highScores[i].score) > (u_long) 0)
- X {
- X /* Draw the rank */
- X sprintf(string, "%d", i+1);
- X if (ntohl(highScores[i].score) != score)
- X DrawShadowText(display, window, textFont, string, xr, y, tann);
- X else
- X DrawShadowText(display, window, textFont, string, xr, y, green);
- X
- X /* Draw the score */
- X sprintf(string, "%ld", ntohl(highScores[i].score));
- X if (highScores[i].score != score)
- X DrawShadowText(display, window, textFont, string, xs, y, red);
- X else
- X DrawShadowText(display, window, textFont, string, xs, y, green);
- X
- X /* Write out the level reached */
- X sprintf(string, "%ld", ntohl(highScores[i].level));
- X DrawShadowText(display, window, textFont, string, xl, y, green);
- X
- X /* Game duration in minutes and seconds */
- X sprintf(string, "%d'%d\"",
- X ntohl(highScores[i].gameTime) / 60,
- X ntohl(highScores[i].gameTime) % 60);
- X if (ntohl(highScores[i].score) != score)
- X DrawShadowText(display, window, textFont, string, xt, y, tann);
- X else
- X DrawShadowText(display, window, textFont, string, xt, y, green);
- X
- X /* Construct the date for the highscore entry */
- X theTime = (time_t) ntohl(highScores[i].time);
- X strftime(string, 10, "%d %b %y", localtime(&theTime));
- X string[9] = '\0'; /* Just to be sure */
- X if (ntohl(highScores[i].score) != score)
- X DrawShadowText(display, window, textFont, string, xg, y, white);
- X else
- X DrawShadowText(display, window, textFont, string, xg, y, green);
- X
- X /* Name of the boing master */
- X strcpy(string, highScores[i].name);
- X plen = XTextWidth(textFont, string, len);
- X
- X /* Only use the first name if too big for screen */
- X if ((plen + xn) > PLAY_WIDTH)
- X {
- X /* Find the first space and null terminate there */
- X p = strchr(string, ' ');
- X *p = '\0';
- X strcpy(string2, string);
- X
- X /* Draw a much smaller version of your name */
- X if (ntohl(highScores[i].score) != score)
- X DrawShadowText(display, window, textFont, string2, xn, y,
- X yellow);
- X else
- X DrawShadowText(display, window, textFont, string2, xn, y,
- X green);
- X }
- X else
- X {
- X /* Write out users name */
- X if (ntohl(highScores[i].score) != score)
- X DrawShadowText(display, window, textFont, string, xn, y,
- X yellow);
- X else
- X DrawShadowText(display, window, textFont, string, xn, y,
- X green);
- X }
- X
- X }
- X else
- X {
- X /* This bit is for when the table entry is blank */
- X sprintf(string, "%d", i+1);
- X DrawShadowText(display, window, textFont, string, xr, y, tann);
- X
- X /* Draw dashes for blank entries */
- X strcpy(string, "--");
- X DrawShadowText(display, window, textFont, string, xs, y, red);
- X DrawShadowText(display, window, textFont, string, xl, y, green);
- X DrawShadowText(display, window, textFont, string, xt, y, tann);
- X DrawShadowText(display, window, textFont, string, xg, y, white);
- X DrawShadowText(display, window, textFont, string, xn, y, yellow);
- X }
- X
- X y += textFont->ascent + GAP;
- X }
- X
- X /* Draw the line above the table */
- X DrawLine(display, window, 22, y+2, PLAY_WIDTH - 18, y+2, black, 3);
- X DrawLine(display, window, 20, y, PLAY_WIDTH - 20, y, white, 3);
- X
- X SetHighScoreWait(HIGHSCORE_SPARKLE, frame + 2);
- X}
- X
- X#if NeedFunctionPrototypes
- Xstatic void DoSparkle(Display *display, Window window)
- X#else
- Xstatic void DoSparkle(display, window)
- X Display *display;
- X Window window;
- X#endif
- X{
- X static Pixmap store; /* backing store for the sparkle */
- X static int x = 6; /* X position of the sparkle */
- X
- X if (!store)
- X {
- X /* Create some backing store for the sparkle star */
- X store = XCreatePixmap(display, window, 20, 20,
- X DefaultDepth(display, XDefaultScreen(display)));
- X }
- X
- X if (frame == endFrame)
- X {
- X /* Bug out of the sparkle and goto next sequence */
- X si = 0;
- X sindex = 0;
- X sparkley = 180 + textFont->ascent + 20;
- X
- X /* End the sparkle and now set up for finish */
- X SetHighScoreWait(HIGHSCORE_FINISH, frame + 1000);
- X return;
- X }
- X
- X if (sindex == 0)
- X XCopyArea(display, window, store, gc, x, sparkley, 20, 20, 0, 0);
- X
- X if (frame == nextFrame)
- X {
- X /* Draw the sparkle frame */
- X RenderShape(display, window, stars[sindex], starsM[sindex],
- X x, sparkley, 20, 20, False);
- X
- X sindex++;
- X nextFrame = frame + 15;
- X
- X /* Last frame of sparkle so reset */
- X if (sindex == 11)
- X {
- X XCopyArea(display, store, window, gc, 0, 0, 20, 20, x, sparkley);
- X
- X sindex = 0;
- X nextFrame = frame + 100;
- X sparkley += textFont->ascent + GAP;
- X
- X si++;
- X
- X if ((ntohl(highScores[si].score) <= (u_long) 0) || (si == 10))
- X {
- X si = 0;
- X sindex = 0;
- X sparkley = 180 + textFont->ascent + 20;
- X }
- X }
- X }
- X}
- X
- X
- X
- X#if NeedFunctionPrototypes
- Xstatic void SetHighScoreWait(int newMode, int waitFrame)
- X#else
- Xstatic void SetHighScoreWait(newMode, waitFrame)
- X int newMode;
- X int waitFrame;
- X#endif
- X{
- X waitingFrame = waitFrame;
- X waitMode = newMode;
- X HighScoreState = HIGHSCORE_WAIT;
- X}
- X
- X#if NeedFunctionPrototypes
- Xvoid DoHighScoreWait(void)
- X#else
- Xvoid DoHighScoreWait()
- X#endif
- X{
- X /* Wait for the end frame then change mode */
- X if (frame == waitingFrame)
- X HighScoreState = waitMode;
- X}
- X
- X#if NeedFunctionPrototypes
- Xstatic void DoFinish(Display *display, Window window)
- X#else
- Xstatic void DoFinish(display, window)
- X Display *display;
- X Window window;
- X#endif
- X{
- X mode = MODE_INTRO;
- X HighScoreState = HIGHSCORE_TITLE;
- X ResetIntroduction();
- X
- X if (noSound == False)
- X playSoundFile("weeek", 100);
- X
- X SetGameSpeed(FAST_SPEED);
- X}
- X
- X#if NeedFunctionPrototypes
- Xvoid HighScore(Display *display, Window window)
- X#else
- Xvoid HighScore(display, window)
- X Display *display;
- X Window window;
- X#endif
- X{
- X /* Switch on the highscore table state */
- X switch (HighScoreState)
- X {
- X case HIGHSCORE_TITLE:
- X if (getSpecialEffects(display) == True)
- X DoTitle(display, bufferWindow);
- X else
- X DoTitle(display, window);
- X break;
- X
- X case HIGHSCORE_SHOW:
- X if (getSpecialEffects(display) == True)
- X {
- X DoHighScores(display, bufferWindow);
- X while (WindowBlindEffect(display, window));
- X }
- X else
- X DoHighScores(display, window);
- X break;
- X
- X case HIGHSCORE_SPARKLE:
- X DoSparkle(display, window);
- X if ((frame % FLASH) == 0)
- X RandomDrawSpecials(display);
- X BorderGlow(display, window);
- X break;
- X
- X case HIGHSCORE_FINISH:
- X DoFinish(display, window);
- X break;
- X
- X case HIGHSCORE_WAIT:
- X DoHighScoreWait();
- X break;
- X
- X default:
- X break;
- X }
- X}
- X
- X#if NeedFunctionPrototypes
- Xvoid CommandlineHighscorePrint(void)
- X#else
- Xvoid CommandlineHighscorePrint()
- X#endif
- X{
- X char string[11];
- X int i;
- X time_t theTime;
- X
- X InitialiseHighScores();
- X
- X /* Must have table initialised with scores */
- X if (ReadHighScoreTable(GLOBAL) == False)
- X InitialiseHighScores();
- X
- X /* Print out a pretty title message for scores */
- X fprintf(stdout, "XBoing Roll of Honour\n\n");
- X fprintf(stdout, "Rank\tScore\t Level\tTime\tDate Name\n");
- X fprintf(stdout,
- X "----------------------------------------------------------------\n");
- X
- X /* Zoom through the highscore table from the top */
- X for (i = 0; i < NUM_HIGHSCORES; i++)
- X {
- X theTime = (time_t) ntohl(highScores[i].time);
- X strftime(string, 10, "%d %b %y", localtime(&theTime));
- X
- X if (ntohl(highScores[i].score) > 0)
- X {
- X /* Print out the actual record */
- X fprintf(stdout, "%d\t%ld\t %ld\t%d'%d\"\t%s %s\n",
- X i + 1, ntohl(highScores[i].score),
- X ntohl(highScores[i].level),
- X ntohl(highScores[i].gameTime) / 60,
- X ntohl(highScores[i].gameTime) % 60,
- X string, highScores[i].name);
- X }
- X }
- X
- X /* Print a trailing line to make the table look good */
- X fprintf(stdout,
- X "----------------------------------------------------------------\n");
- X fflush(stdout);
- X
- X /* Now display the personal highscore table */
- X
- X InitialiseHighScores();
- X
- X /* Must have table initialised with scores */
- X if (ReadHighScoreTable(PERSONAL) == False)
- X InitialiseHighScores();
- X
- X /* Print out a pretty title message for scores */
- X fprintf(stdout, "\nPersonal Best\n\n");
- X fprintf(stdout, "Rank\tScore\t Level\tTime\tDate Name\n");
- X fprintf(stdout,
- X "----------------------------------------------------------------\n");
- X
- X /* Zoom through the highscore table from the top */
- X for (i = 0; i < NUM_HIGHSCORES; i++)
- X {
- X theTime = (time_t) ntohl(highScores[i].time);
- X strftime(string, 10, "%d %b %y", localtime(&theTime));
- X
- X if (ntohl(highScores[i].score) > 0)
- X {
- X /* Print out the actual record */
- X fprintf(stdout, "%d\t%ld\t %ld\t%d'%d\"\t%s %s\n",
- X i + 1, ntohl(highScores[i].score),
- X ntohl(highScores[i].level),
- X ntohl(highScores[i].gameTime) / 60,
- X ntohl(highScores[i].gameTime) % 60,
- X string, highScores[i].name);
- X }
- X }
- X
- X /* Print a trailing line to make the table look good */
- X fprintf(stdout,
- X "----------------------------------------------------------------\n");
- X fflush(stdout);
- X}
- X
- X#if NeedFunctionPrototypes
- Xint GetHighScoreRanking(u_long score)
- X#else
- Xint GetHighScoreRanking(score)
- X u_long score;
- X#endif
- X{
- X int i;
- X
- X /* Must have table initialised with scores */
- X if (ReadHighScoreTable(GLOBAL) == False)
- X InitialiseHighScores();
- X
- X /* Zoom through the highscore table from the top */
- X for (i = 0; i < NUM_HIGHSCORES; i++)
- X {
- X /* Is my score better than theirs */
- X if (score >= ntohl(highScores[i].score))
- X return (i + 1);
- X }
- X
- X /* Not even in highscore table yet! */
- X return -1;
- X}
- X
- X#if NeedFunctionPrototypes
- Xstatic void ShiftScoresDown(int index, u_long score, u_long level,
- X time_t gameTime, char *name)
- X#else
- Xstatic void ShiftScoresDown(index, score, level, gameTime, name)
- X int index;
- X u_long score;
- X u_long level;
- X time_t gameTime;
- X char *name;
- X#endif
- X{
- X /* This function will shift all score below the index down
- X * towards the end and kill off the last dude. Sorry mate.
- X */
- X int i;
- X
- X /* Move all the scores down one notch */
- X for (i = NUM_HIGHSCORES-1; i > index; i--)
- X {
- X /* Shift the scores down one notch */
- X highScores[i].score = highScores[i-1].score;
- X highScores[i].level = highScores[i-1].level;
- X highScores[i].time = highScores[i-1].time;
- X highScores[i].gameTime = highScores[i-1].gameTime;
- X highScores[i].userId = highScores[i-1].userId;
- X strcpy(highScores[i].name, highScores[i-1].name);
- X }
- X
- X /* Add our new high score to the high score table */
- X highScores[index].score = htonl(score);
- X highScores[index].level = htonl(level);
- X highScores[index].gameTime = htonl(gameTime);
- X highScores[index].userId = htonl(getuid());
- X highScores[index].time = htonl(time(NULL));
- X strcpy(highScores[index].name, name);
- X}
- X
- X#if NeedFunctionPrototypes
- Xchar *getUsersFullName(void)
- X#else
- Xchar *getUsersFullName()
- X#endif
- X{
- X struct passwd *pass;
- X char *comma;
- X char *cp1, *cp2;
- X static char fullname[80];
- X
- X /* Get user information from password file */
- X if (!(pass = getpwuid(getuid())))
- X return("Anonymous?"); /* Unknown user oops. */
- X
- X /* find a comma indicating further info after name */
- X comma = index(pass->pw_gecos, ',');
- X
- X /* NULL out the comma */
- X if (comma) *comma = '\0';
- X
- X cp1 = pass->pw_gecos;
- X cp2 = fullname;
- X
- X /* Search through the gecos field looking for an '&' which on very
- X * old UNIX systems is supposed to be the users user name with the
- X * first letter uppercased.
- X */
- X while(*cp1)
- X {
- X /* Look for the '&' symbol */
- X if(*cp1 != '&')
- X *cp2++ = *cp1++;
- X else
- X {
- X /* A ha. Now copy the users name to be in place of '&' */
- X strcpy(cp2, pass->pw_name);
- X
- X /* Convert the first letter to uppercase. */
- X if(islower(*cp2))
- X *cp2 = toupper(*cp2);
- X
- X /* Continue with the remaining string */
- X while(*cp2) cp2++;
- X cp1++;
- X }
- X }
- X
- X /* Return their name without any trailing stuff */
- X return(fullname);
- X}
- X
- X#if NeedFunctionPrototypes
- Xstatic void DeleteScore(int index)
- X#else
- Xstatic void DeleteScore(index)
- X int index;
- X#endif
- X{
- X /* Delete the given score and shift all others up to fill in the hole */
- X int i;
- X
- X /* Move all the scores down one notch */
- X for (i = index; i < NUM_HIGHSCORES-1; i++)
- X {
- X /* Shift the scores up one notch */
- X highScores[i].score = highScores[i+1].score;
- X highScores[i].level = highScores[i+1].level;
- X highScores[i].time = highScores[i+1].time;
- X highScores[i].gameTime = highScores[i+1].gameTime;
- X highScores[i].userId = highScores[i+1].userId;
- X strcpy(highScores[i].name, highScores[i+1].name);
- X }
- X
- X highScores[i].score = htonl((u_long)0);
- X highScores[i].level = htonl((u_long)1);
- X highScores[i].gameTime = htonl(0);
- X highScores[i].userId = htonl(getuid());
- X highScores[i].time = htonl(time(NULL));
- X strcpy(highScores[i].name, "To be announced!");
- X}
- X
- X#if NeedFunctionPrototypes
- Xint CheckAndAddScoreToHighScore(u_long score, u_long level, time_t gameTime,
- X int type)
- X#else
- Xint CheckAndAddScoreToHighScore(score, level, gameTime, type)
- X u_long score;
- X u_long level;
- X time_t gameTime;
- X int type;
- X#endif
- X{
- X int i;
- X int id = -1;
- X char name[80];
- X
- X /* Lock the file for me only */
- X if (type == GLOBAL)
- X#ifdef USE_FLOCK
- X id = LockUnlock(LOCK_EX);
- X#else
- X id = LockUnlock(F_LOCK);
- X#endif
- X
- X /* Read in the lastest scores */
- X if (ReadHighScoreTable(type) == False)
- X InitialiseHighScores();
- X
- X /* Speed up by obtaining users name */
- X strcpy(name, getUsersFullName());
- X
- X if (type == GLOBAL)
- X {
- X /* Go through the highscore table */
- X for (i = 0; i < NUM_HIGHSCORES; i++)
- X {
- X if (ntohl(highScores[i].userId) == getuid())
- X {
- X /* Can the last score be added to the highscores */
- X if (score > ntohl(highScores[i].score))
- X {
- X /* Delete and move up all old scores */
- X DeleteScore(i);
- X
- X break;
- X }
- X else
- X {
- X /* Don't add as score is smaller */
- X return False;
- X }
- X }
- X } /* for */
- X
- X /* Now add the new score into the table */
- X for (i = 0; i < NUM_HIGHSCORES; i++)
- X {
- X /* Can the last game be added to the highscores */
- X if (score > ntohl(highScores[i].score))
- X {
- X ShiftScoresDown(i, score, level, gameTime, name);
- X
- X /* Add to the highscore by writing it out */
- X (void) WriteHighScoreTable(type);
- X
- X /* Unlock the file now thanks */
- X if (id != -1)
- X#ifdef USE_FLOCK
- X id = LockUnlock(LOCK_UN);
- X#else
- X id = LockUnlock(F_ULOCK);
- X#endif
- X
- X /* Yes - it was placed in the highscore */
- X return True;
- X }
- X }
- X
- X /* Unlock the file now thanks */
- X if (id != -1)
- X#ifdef USE_FLOCK
- X id = LockUnlock(LOCK_UN);
- X#else
- X id = LockUnlock(F_ULOCK);
- X#endif
- X
- X /* Not even a highscore - loser! */
- X return False;
- X }
- X else /* Type == PERSONAL */
- X {
- X /* Go through the highscore table */
- X for (i = 0; i < NUM_HIGHSCORES; i++)
- X {
- X /* Can the last game be added to the highscores */
- X if (score > ntohl(highScores[i].score))
- X {
- X ShiftScoresDown(i, score, level, gameTime, name);
- X
- X /* Add to the highscore by writing it out */
- X (void) WriteHighScoreTable(type);
- X
- X /* Yes - it was placed in the highscore */
- X return True;
- X }
- X }
- X
- X /* Not even a highscore - loser! */
- X return False;
- X }
- X}
- X
- X#if NeedFunctionPrototypes
- Xstatic void SortHighScores(void)
- X#else
- Xstatic void SortHighScores()
- X#endif
- X{
- X int i, j;
- X highScoreEntry tempHighScore;
- X
- X /* The old bubble sort strikes again :-) */
- X for (i = 0; i < NUM_HIGHSCORES - 1; ++i)
- X {
- X for (j = NUM_HIGHSCORES - 1; j > i; --j)
- X {
- X /* Who has the higher score */
- X if (highScores[j-1].score < highScores[j].score)
- X {
- X /* Swap the entries around - use memcpy in future */
- X tempHighScore.score = highScores[j-1].score;
- X tempHighScore.level = highScores[j-1].level;
- X tempHighScore.gameTime = highScores[j-1].gameTime;
- X tempHighScore.userId = highScores[j-1].userId;
- X strcpy(tempHighScore.name, highScores[j-1].name);
- X
- X highScores[j-1].score = highScores[j].score;
- X highScores[j-1].level = highScores[j].level;
- X highScores[j-1].gameTime = highScores[j].gameTime;
- X highScores[j-1].userId = highScores[j].userId;
- X strcpy(highScores[j-1].name, highScores[j].name);
- X
- X highScores[j].score = tempHighScore.score;
- X highScores[j].level = tempHighScore.level;
- X highScores[j].gameTime = tempHighScore.gameTime;
- X highScores[j].userId = tempHighScore.userId;
- X strcpy(highScores[j].name, tempHighScore.name);
- X }
- X }
- X }
- X}
- X
- X#if NeedFunctionPrototypes
- Xstatic void InitialiseHighScores(void)
- X#else
- Xstatic void InitialiseHighScores()
- X#endif
- X{
- X int i;
- X
- X /* Loop down table clearing everything out */
- X for (i = 0; i < NUM_HIGHSCORES; i++)
- X {
- X /* Null out all entries */
- X highScores[i].score = htonl((u_long) 0);
- X highScores[i].level = htonl((u_long) 1);
- X highScores[i].gameTime = htonl(0);
- X highScores[i].userId = htonl(0);
- X highScores[i].time = htonl(time(NULL));
- X strcpy(highScores[i].name, "To be announced!");
- X }
- X}
- X
- X#if NeedFunctionPrototypes
- Xstatic char *GetHomeDir(void)
- X#else
- Xstatic char *GetHomeDir()
- X#endif
- X{
- X int uid;
- X struct passwd *pw;
- X register char *ptr;
- X static char dest[MAXPATHLEN];
- X
- X /* This function will return the home directory of the user
- X * by either using the HOME environment variable or constructing
- X * it through the USER environment variable.
- X */
- X
- X if ((ptr = getenv("HOME")) != NULL)
- X (void) strcpy(dest, ptr);
- X else
- X {
- X /* HOME variable is not present so get USER var */
- X if ((ptr = getenv("USER")) != NULL)
- X pw = getpwnam(ptr);
- X else
- X {
- X /* Obtain user id etc. */
- X uid = getuid();
- X pw = getpwuid(uid);
- X }
- X
- X if (pw)
- X (void) strcpy(dest, pw->pw_dir);
- X else
- X *dest = '\0';
- X }
- X
- X /* This will be NULL on error or the actual path */
- X return dest;
- X}
- X
- X#if NeedFunctionPrototypes
- Xint ReadHighScoreTable(int type)
- X#else
- Xint ReadHighScoreTable(type)
- X int type;
- X#endif
- X{
- X /* Read the high score table into memory structure */
- X FILE *hsfp;
- X int i;
- X char filename[MAXPATHLEN];
- X char *str;
- X
- X /* Are we going to use the global or personal highscore file */
- X if (type == GLOBAL)
- X {
- X /* Use the environment variable if it exists */
- X if ((str = getenv("XBOING_SCORE_FILE")) != NULL)
- X strcpy(filename, str);
- X else
- X strcpy(filename, HIGH_SCORE_FILE);
- X }
- X else
- X sprintf(filename, "%s/.xboing-scores", GetHomeDir());
- X
- X /* Open the high score file */
- X if ((hsfp = fopen(filename, "r")) == NULL)
- X {
- X /* Cannot open the high score file */
- X WarningMessage("Cannot open high score file for reading.");
- X return False;
- X }
- X
- X /* Read all high score entries */
- X for (i = 0; i < NUM_HIGHSCORES; i++)
- X {
- X /* Read the highscore entry */
- X if (fread(&highScores[i], sizeof(highScoreEntry), 1, hsfp) != 1)
- X {
- X if (fclose(hsfp) < 0)
- X WarningMessage("Cannot close high score file.");
- X return False;
- X }
- X }
- X
- X /* Close the high score file */
- X if (fclose(hsfp) < 0)
- X WarningMessage("Cannot close high score file.");
- X
- X return True;
- X}
- X
- X
- X#if NeedFunctionPrototypes
- Xint WriteHighScoreTable(int type)
- X#else
- Xint WriteHighScoreTable(type)
- X int type;
- X#endif
- X{
- X /* write the high score table to the high score file */
- X FILE *hsfp;
- X int i;
- X char filename[MAXPATHLEN];
- X char *str;
- X
- X /* Make sure the table is sorted */
- X SortHighScores();
- X
- X /* Are we going to use the global or personal highscore file */
- X if (type == GLOBAL)
- X {
- X /* Use the environment variable if it exists */
- X if ((str = getenv("XBOING_SCORE_FILE")) != NULL)
- X strcpy(filename, str);
- X else
- X strcpy(filename, HIGH_SCORE_FILE);
- X }
- X else
- X sprintf(filename, "%s/.xboing-scores", GetHomeDir());
- X
- X /* Open the high score file */
- X if ((hsfp = fopen(filename, "w+")) == NULL)
- X {
- X /* Cannot open the high score file */
- X WarningMessage("Cannot open high score file for writing.");
- X return False;
- X }
- X
- X /* Write out all high score entries */
- X for (i = 0; i < NUM_HIGHSCORES; i++)
- X {
- X /* Write the highscore entry */
- X if (fwrite(&highScores[i], sizeof(highScoreEntry), 1, hsfp) != 1)
- X {
- X if (fclose(hsfp) < 0)
- X WarningMessage("Cannot close high score file.");
- X return False;
- X }
- X }
- X
- X /* Make sure that the permissions on the file are rw for everyone */
- X fchmod(fileno(hsfp), 0666);
- X
- X /* Close the high score file */
- X if (fclose(hsfp) < 0)
- X WarningMessage("Cannot close high score file.");
- X
- X return True;
- X}
- X
- X#if NeedFunctionPrototypes
- Xvoid RedrawHighScore(Display *display, Window window)
- X#else
- Xvoid RedrawHighScore(display, window)
- X Display *display;
- X Window window;
- X#endif
- X{
- X /* Draw the title screen for highscore table */
- X DoTitle(display, window);
- X}
- X
- X#if NeedFunctionPrototypes
- Xvoid FreeHighScore(Display *display)
- X#else
- Xvoid FreeHighScore(display)
- X Display *display;
- X#endif
- X{
- X /* Free up those memory leaks thanks */
- X if (titlePixmap) XFreePixmap(display, titlePixmap);
- X if (titlePixmapM) XFreePixmap(display, titlePixmapM);
- X}
- X
- X#if NeedFunctionPrototypes
- Xvoid ResetHighScore(int type)
- X#else
- Xvoid ResetHighScore(type)
- X int type;
- X#endif
- X{
- X HighScoreState = HIGHSCORE_TITLE;
- X nextFrame = frame + 100;
- X endFrame = frame + 4000;
- X
- X /* Reset the sparkles for the names */
- X sparkley = 180 + textFont->ascent + 20;
- X sindex = 0;
- X si = 0;
- X scoreType = type;
- X}
- X
- X#if NeedFunctionPrototypes
- Xstatic int LockUnlock(int cmd)
- X#else
- Xstatic int LockUnlock(cmd)
- X int cmd;
- X#endif
- X{
- X int inter = -1;
- X char filename[1024];
- X char *str;
- X
- X /* Use the environment variable if it exists */
- X if ((str = getenv("XBOING_SCORE_FILE")) != NULL)
- X strcpy(filename, str);
- X else
- X strcpy(filename, HIGH_SCORE_FILE);
- X
- X /* Open the highscore file for both read & write */
- X if (cmd == F_LOCK || cmd == LOCK_EX)
- X inter = open(filename, O_RDWR);
- X
- X /* Ok - if successful then lock or unlock the file */
- X if (inter != -1)
- X#ifndef USE_FLOCK
- X lockf(inter, cmd, sizeof(highScores));
- X#else
- X flock(inter, cmd);
- X#endif
- X
- X /* Are we unlocking the file */
- X if (cmd == F_ULOCK || cmd == LOCK_UN)
- X {
- X /* Close the file now thanks */
- X close(inter);
- X inter = -1;
- X }
- X
- X /* Return success */
- X return inter;
- X}
- END_OF_FILE
- if test 27771 -ne `wc -c <'highscore.c'`; then
- echo shar: \"'highscore.c'\" unpacked with wrong size!
- fi
- # end of 'highscore.c'
- fi
- if test -f 'include/keys.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'include/keys.h'\"
- else
- echo shar: Extracting \"'include/keys.h'\" \(720 characters\)
- sed "s/^X//" >'include/keys.h' <<'END_OF_FILE'
- X#ifndef _KEYS_H_
- X#define _KEYS_H_
- X
- X#include "copyright.h"
- X
- X/*
- X * Dependencies on other include files:
- X */
- X
- X#include <X11/Xlib.h>
- X
- X/*
- X * Constants and macros:
- X */
- X
- X/*
- X * Type declarations:
- X */
- X
- Xenum KeysStates
- X{
- X KEYS_TITLE,
- X KEYS_TEXT,
- X KEYS_SPARKLE,
- X KEYS_WAIT,
- X KEYS_FINISH
- X};
- X
- X/*
- X * Function prototypes:
- X */
- X
- X#if NeedFunctionPrototypes
- Xvoid SetUpKeys(Display *display, Window window, Colormap colormap);
- Xvoid Keys(Display *display, Window window);
- Xvoid RedrawKeys(Display *display, Window window);
- Xvoid FreeKeyControl(Display *display);
- Xvoid ResetKeys(void);
- X#else
- Xvoid SetUpKeys();
- Xvoid Keys();
- Xvoid RedrawKeys();
- Xvoid FreeKeyControl();
- Xvoid ResetKeys();
- X#endif
- X
- Xextern enum KeysStates KeysState;
- X
- X#endif
- END_OF_FILE
- if test 720 -ne `wc -c <'include/keys.h'`; then
- echo shar: \"'include/keys.h'\" unpacked with wrong size!
- fi
- # end of 'include/keys.h'
- fi
- if test -f 'sounds/applause.au.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'sounds/applause.au.uu'\"
- else
- echo shar: Extracting \"'sounds/applause.au.uu'\" \(27680 characters\)
- sed "s/^X//" >'sounds/applause.au.uu' <<'END_OF_FILE'
- Xbegin 644 applause.au
- XM+G-N9````"```$Y%`````0``'T`````!``````````!#]\7=_^/1;TA-16_K
- XMS,'_3F?,RO?OUV],7]WK/T?-P<?1;U7OYT]"3<?O8[[.2#E/O;'-.E_94455
- XMW\M.2LC`PMU.15'?6U?;L,%.0D%3[^_+44IWY]U`/6?K/T_'Q+UW.3(_W[6^
- XM44>_O5G3WU\^3E?-S^N\]S[CY]D_/='?8V-GU[S'VUM?455*3=N[NU'5QC\R
- XM/M_+R]?!;SI/R]W915_9U6-)SKR\RN]`;]=C4T9$V\3&V5E;4W?,O\3W-#9+
- XMSN/#PLX^/^.[_T7?VV/OR]D_9\S7QFMK[TSCNKG5;UU-/T/=5V?9]_?WW]?!
- XMUS],X\+'74IWQKG&4S0]Y]-,8]UW6\C-;SQ&[]?7PK?(,$;*7U-OQ_]3Q\CO
- XM1D1,S=/OPD\WP[+9/SM%1^.QN]7_T?=%.#AWQ;E&4<G=1$U=46='5;[5V<_$
- XMR#L\4UO*S-G5SU'-W6_9W<WO/D%CRKC145_.R?]&2-_773-CN[C33TM,QKQK
- XM1EF^V45!U=/O3/_"445-S%E56=6^34UKXTUWQ\GW/$9G7]^\TTE;Q]/_9U5=
- XMY]GK56?.Q\XS1N?W7\"S3#=G:T'K[U71Q.O$QSI&W>?KR==G1-W7Z^=G[\==
- XM1>O)R$A$2<N_3#]KL+_1/BXPQL;CO[J]=SPZ2D'=[T<_P+2VUTY1;U$N+\JG
- XMQ#LYRFO#9SIKO,`T1L'73DX^RKG,9SW1P,5-W[O1ZUTX+S>VP=?OS^](455)
- XM7<[/X\B_ST%$36?;Z]&_ZT-=V\;/=W=C65/;PU5;_W=5V6M+S-?%O,E+,C-$
- XMO+F\2T=)S,:^2#M&;TI3P\A9Z\YW=_?7_U'?9V--W<)*2%7,5T/?S<Y5V<-9
- XM34K3S?=?U;Q-45E.37?,O+Y?.$3?SFO?TUE17<[3ZU-"1,BYMDQ*5UU*/M>[
- XMO-U(1UMWWV?+[V<_2<2N23%%:U]CW\2\V5=`.U7-3U'%N,4W/%W+Z^-?R\Y!
- XM.E?&R=U=6U]KSMFZ6T)%T;_5RO=/3D%WX\K/U^_;TUW_9SD\4;>MKTXS-W?;
- XMU4])V]4V/;6S[S\O+:VO0UW(4?_?3&/3_U=-V]O9U\G-15%-;W?+V]WG-UW*
- XMQ,#;,#?/RL"[SG=,340[8[G'.4^M_RI5NK@Z.U?+;]7'U5<_X[[W9V/$/T[+
- XMNUDW-L--/[2OV3EOSE?7NLU-75<]-KW=5=>_R]EC4T)%1L^ZK[]$3%=G1TS_
- XMS&=%[\3#1E%OQ\]W5]_C1DQCL+A9.DU?3V_=S,G9P\U/T\P[.?>WWSI/Q\9G
- XM9]=;66-K0S+#L;K=S=-1/5EW7>O!N]5,6TE?;T5=P+Q?,4#=S.?3RDM$4_=K
- XM;\SGZ]'3S4X]05G,OK[&P5T\*BD\J*&M+2U!O,/32CHYM[[_25W/74S1R=%7
- XMY\I%/N?&63KWO+@^/E/.1SZ[MK]%/D157^O;OME-0^-C5=VZMT8Q.\';5;6U
- XMV3\Z-,V\N<S(2CD\8[ZYQSTY=]/*=\['6TM,U='K5TWKT<6W63L\V>?_V[^\
- XM."Y!QE%*QLG"=TE+;\A&7]/#OL-$.#S,PFM,=^__QL'G=__=8U_5W>/,=TU*
- XM4UEOS+OW/%_/[V??P5U$64I`2+S*7<K-4SS;O&<Y/<1W1,6]5U'(XSPYR5U`
- XMO;UC1MVYSD,W=U%!N;+C/M?)S,1K.4O3Q,'O0D';U<_7TT\__\5G55O!V_].
- XM.SN]M,9O3C_WO\K.YT93VTM-6[>RO#8X2LW5W>?;Y^?WWTD_1N?9PKW53E=3
- XM1\KO3G='RKS"2UE$V\_+:U7+/3]WO,K!,3[+UU<^S+_K/#Y+R^-WR-E+3_]9
- XM;^OGV\UK/3WWR\'*W>M525?)T7=$:\'+9TE(46-;R<BVO3`]3&?.WVO'SFM3
- XM36?`RMM;/=_G9__CS[W(_SQ.:__-S-W;.BPTK[I.3<&UT4,\U<MO0_?9U<6^
- XM3%UC7?_;W>]G+T>MK4XWL;WCM$]W]UF[SD]'7?]#7]'9S\-#/57K3D_3S-55
- XM1NN_OME=3%]K3^_7X]W(T45-56OW:T[9O\K-QS$G+JVBM3B_RCOWU</_P\;W
- XM]UU`/V?&S?];Z]7?/T=-T<K,W]?.5TM);VO?U=%-4]O=64W`M\LO.\ZZT5=,
- XMX_<[3LF]:T++Q,H_/UG12C]OSL=O5>/77SY?Z\G)U6?9V45`5<._[TUW;UMG
- XMU__CRW=C;U]#3]W;R\]OV<#..CQ5N\5C2TY;T]O7YUU=2E?C2_>\[V=/S/]/
- XM[]TQ-O^UJ:DH+<;9+2^RMD8T7[G$X^\]0-/?7V\]U;#!43O'PBM3K4TUZ\M`
- XM2MG9SO=C=VMG9VM/3LJ_S5-9]_=).M6Y445.X^OC9_]O6UWKT>]O65__9U=;
- XMU]?7YV]KT?=17>MW6_?KY]/;V]W_=TM(V[YW6T=GS<_-S=]'3%?_W=/=:TMG
- XM]W?)ON=)2$__ZTE1_^=79]7)R55%2%5WT]W9;VO/UTM*3L7'SUE11U'GP<3O
- XM8\;,/2XYN;K3N;A,+4O+_T9*N[W;1EEG35O.VVM3]__?O,(Z/TO;O;\_1^-9
- XMYV])27>]O<AC7T9,8\S5=]_$RFM!44Q-S\1K2_?.U6/O7T=KP_='17??S]_K
- XMU<Y;2W??T7=!1\?92TKKT=GG9UW3_SX^QNM*;]_;44U/:]G3V^O914I,R,G.
- XM=^/K:TY?8___Y]?(=S]7Q[Y.3^O3[V=C0CU.;]79[T[_SLM':\W1XU_GX]M*
- XM/EO;Q=%5//?`;U5C;^_OX__?8]_+S5O5S&_O_[B_/#9'R[^]V34UW<C,1D)W
- XM_U5.9\2_443KR6=(54MKR-WW]UU`Z]]O24W!O]-33EMG5?=K23[ORL;1Q<0^
- XM/SY1;[_;7<S.[UMG]]]?35-/6\?)S^],/-W17>?#PME`/LO$76?7U5'KT5M(
- XM44YOV=]CU<W"9TQ-75U5Q>M=9T,_7<_(TV=3:\__S6\W2[ZR7SC?W?=G_^OG
- XMSE5,S,!&4V=WO[KO0$[=UU-3_UGGR-E?S$D]2-_KRCI'2\/5:^]79^/96\K#
- XMXSQ5TUO7S=7G8\?+55%G3^O"9TUKS=W_/T!3SL_)3D%#R+K=44$ZT=&]:T(\
- XMW[:S53=!8]O`Q+X_.5';7T%;56>[P>=.74M76^?/ON<T2\KW3.N^UTI78V/?
- XMZT1/S,?;V3X[8]5)8[^\VTI.0.?7[]'=5W?*RT;_OU4MQ='#5U,\OKQC;[YC
- XM36MKP,9*1V_KR]WOR,"[2#<\=U-,T[I/;[U#-V?_.SS#WS_.O+^^_S!,R=O/
- XMSE_3R,AG-S'!QC];S+C(6VO.]T-*3S11M\T^0\E7/[WC1C97N;_G6?]$.]''
- XMREM).TK=O\//=U-=ZTY!S,3-3$<]W]O3P[S.-CA$6\K#1F^TREE50#-CO\EK
- XM]]_?V]O7UU]-7UOOT\[5W6]OSKQ+.S[5W>-G1,_%SCY3V<K?36=O3#E'_\2W
- XML&,_-"H_K;%9+^>WL-M#.U=;;UU;S<3W66=K=UUWS<K*0T%#3>M?OLC.4V?,
- XM74E)5TEGV5_W[_^\O%MC2W=`/4JXKK#.2C8W5==C647*MKEO9U$\]\(X/K%G
- XM-L7"ZU\Z/K?5.U?#R&OO6<G(:S1$U\S5V]?.O_\[.$91OVM-V;W!1DWKVT]%
- XM]TM?OKR]+RDSLKG&YU5(U=M+2>>]]VO3XSY"4V.^O%/"N=U'15>\S$XN-T6O
- XMJ;`V/>_$XS4[S*]!0.OKO;'_-2<N8ZFRQ=%K2SX\2-_.NTHV.^?1UU=+7<O;
- XM]S\^QL755='(O,Y)0&?,Q^=1X]]?7\/&73Q!NLT\/N?!SN]CO]DW0%E*;]O,
- XMX^MO/S3*K:A'+"[3O+H_55]';^>ZML9,;\HY*D>QJ5<P-[NUZSO,N$Q)3<;!
- XM8U'+S3U`157`NT=+Y\//5^O3UTM`0\RPS$@\/]O5X\O*]VM?[^]C15OCT<W3
- XM3E%`T;NYU4`Q/U_=P;O(S\S"S5\_7>_;53E$S\KG0D''Q>.]:SQ30SRXO;`_
- XM1$=73NM;4<7*V4@]0KS57SO!K30F,KR_L;/*ZS,O-\VRK]-,/EG+/3]-9U_W
- XMT<'93'?/44I1SLSW/EO)WU%"O[O1148\U^]7O\!$.D/&V7=WY^?_3$'=SLI*
- XM1F//=VL[2LW34T[;R,5;U=%*.4C1N\]K2>>XMSP]3/=G;\K'S=7?3L[_7W?C
- XMW4@U0;G-7=G-ZS]19S4]_\7-2W>\V3@^4^=G8V=5O;5'[ZJN=SDI+<"GV32P
- XMJ[TL+S3OP<)3/T-OQJYC]\A&/D-;0$EKS[;!VT!&YTI'/D+'O:[C+CS3N=,]
- XM.<.\S3Y%X[++/3U76=755V/'O-/*NV-*55<]=W?,9UG?63Q(4>?'TV].1F/*
- XM2SE3N+;;/5M=T]=W6T+!O=UC9TWKW^M=6^/W;]O)[S]1X\9)3.>[NM<D)DBE
- XMNDO=TTA%[]M+-LV]Q-U;5TU)W6],5;VYU4=-V]G_4=7=2SI!7[_"]ST\3U%;
- XM_]_.R5\^U;2\.#E$P\S+Y]'G/T#7O.\_9U598_?#V55=X\7O34%-Z\S?56OG
- XMY^_OU^MK74]G44S3643K8TW7=TE#M<;C15=W/6_,V[RZTS$VY[#?-EG=U\G;
- XM64S?SCE"Q+I3/UG(5>O;0C_?UTY(OMDWS*ZZ25=.-M>O1C9-Q<A3R;7*-6.[
- XM432X6S$_/<FW9TS_[\I*4=^ZO^MO8V-!W<_W037(KK`Z)V?,XV=77]7*O'<Q
- XM,<VYSE>UJME*.4-'3,'+YUV^[RLTV;2ZW44U2FMC0_>\L\1/3%?;W4I*:\[1
- XM/SM&L+378TP]7=-55T[3QEM$65]O44YGP;C=/DK(R&=!16?KR=,]1NNWO5-3
- XMS,P\.TG/P\-;0=_K2]794^_WWTK(PC9"V<?%O%]K3E5'/3E'T[+52TE+S,[=
- XM;],[O[;90%'%OLWK3CY"64Q1QLQKT]7-3TD]1$?ON=%&Z[_#63]9V]79V=U+
- XM[]_5=T[/U4_/6SEONKHS0L[?7T)?V^MG6UMWT^OG=]7+ZTM":_]/9\IG4<R[
- XMOTH_2D]36<_.ZT@^W;_*:UM(R/]$TV_WNS<JLJ]+/,>S4=?O0%-G]]N^=T](
- XM1SO&KUWKP,3),2DU4\*CO#8O6\#-ZS-7S-_9M*Y?,3)9R<-56<G3:U?3P<Y1
- XM1E_G;]G3RV/K75=G4T%CU]/9]]M734YCX_],6V-KU]5?V]?(Z]7-3UUW2V]W
- XMWW=76<B\QSXU-DJTJCTEP[$]8[3_.T,^YZ]&,%7*Z_=744CCS^-;:U6\UT%.
- XMZ\_)1#K.S=MK7UMG_^?3YU/=S\_-YTQ)0TI;:]?W7>/5ZU_KR&=77]_=1T!1
- XMJJRR)BK?R#,MM['*,S_1P=/?]TU-U^=,3./;2$SO53]$S\5=5V^_R>-=5UE=
- XMR[Q72G?94U/__^=+65-9X\/G2TSGXTG1Q-_9W5U776O_]^]125UO[UUWQ\O;
- XMZV]W=T[WUW=WQ\KC]V-1:V-%9VMK4_?)ONM*1UE==\W3T_=.Y\C923Y'O\AG
- XM16MOQ;O;4TW9YTI5]_]?3%//S=5&1$=;U<=O8UM53UEC7]7$U>LW-]O$Q-?/
- XMRE/_S]_K76O-ST-.;^MC7='*_SU+9]'%Q%5GWUU&3->_03],3L^Z8VO!_T%1
- XM1$K#WW=GR\Y+7]MG]]710DQKS<UO7]573DW774I)7\G1ZTM,U<I(04[9U6_*
- XM9TCKU]GCSDY(0DNZO+W1WT_5T4<^/$AWO]=7;]%O2DMK=TYGSF]KS\UW45-?
- XM_V];Y]'9_UM9T;_3T=-5]W=C9\;,8_??2%/;3E_5V=O=24Q-16_K:\G;54C;
- XMQ]M3]^-?=V/-QN-WV_=7]\&X_T117UG?VUUK65UWVSHY/\/`9U/;T>=;=_=?
- XM;]'*;T/GY\=71L^_WT=O9SUCO]'CSM].1F_KT]_W44Q-5\NZ6T1,;]GC;U%$
- XM7>/=Q]53O\#C__]-3FM;2T1CT]U-1SYCS=--2T;;S;_#Y]UG:]]58V-96__5
- XMV4=K=^>_:[[$SD?;V?=`1;Z^T5M7ZSTW/M^\M-\]-$'?QF-"75U'4?]K2TQ.
- XMQ<3.W=/W2U_?V<G.=\RYT\;".R\X[[FU4SFYNTHZ25^ZO5T]_\E;;UE7V\)/
- XM03H_7\BWSF/CU>].1F]C7^O,W\AG-RU;L]%;8V<_.[JUYS1!8\F[O-%-03U#
- XM4=G?8[O%S&=O9T9.]V_;PL'38_?K33S14TW7Q>L^/EGCW4Q/=U=-3E/$QO=`
- XM07==4U7,R-UWT=%GZ]G58UW'R,E=[_<[/E6QN,E/+E&ZO#LP8\LX-\K(R4P_
- XM1_]GU^O=W[[93,SG]^<]/$E3:[K"2TQ7V6=*T5E+=\O1VU5/RL;756]WS>],
- XM4TY?U='W6TX_1N?G;^>_OLAG9U=KRK]O45GG:U7KW<SG2#GKR\G-UU%/T]D]
- XM4[_715O$Q$E16TOCO+W_2EOK6>OW:\YW7>/C_^_C8^?K8U=33TWGT\]O4T97
- XM_^?OUU%$R\790%_(PL6]2F,[1L:XT=E;4?>_P,I*3EU125/=U>_C[_?.T>-*
- XM3%]G[V_7Q<-=15%,:\M3/#(_Q:>EKBTB*KN]S<W_53U`8[JYS$%/S,#+=T-#
- XM5]_9;UU.7=/C[\7&75M%2M7K0VO1R\G,Z[RS43H^:T]*4TKWQ]';T?],65WW
- XMSLU/=]/GY]GG74]134]-9UW(T_=GV<QW_V/?T^/#_ST\R*ZTRSX[0\G?9V/C
- XM6<J\P=';SS<E);>?GR\D+JBMRBXT6[YC-M=,Z\FON5<L*%7'O:J]2+NMRSL[
- XMRET_TT4RY_]*0TW,R4?%P/]#9\9(27?#S<;79U514]'-W]M%/U'C5]]C65W3
- XMXUMC6TU/]\#)Y^/G3D%"3M>]O.M56VOO6='+T<S+:T?/OD4S/+FX7??945EC
- XMS\W11DE;V>M?V<:\0#A'R+B^_U]1XTQ#6]]GSM=-0D3=W=GKT]=97?_153W/
- XMP,MW]^=;=^O/V>/OW4[;R<;W:TU17W?=7TWWS,!/W\:_O3`K+\3`W=/;44=&
- XM05/&VSS`KE7?]]O/ZSI!O+M=V[Q?1F-?Z\&]NK7K)B`HJZ*K3%=1M[M/,]W!
- XMS-\X+S75N[CC]]'3WUTT-DW*RLC,74E'2DMCV='C_V-79\W(W3@Z4ZJP2RM*
- XML:IG+>M-+V.YKR\TP:O`1CI%VU=#=\[-:T1GQLC7S^?755]O+SC=M+W9V<[O
- XMXVL_/$M755M5Q<#345U7ZU]-37=?[]O'V>M*W]7K9V=93U.WSS[/S5/3RFM$
- XM0SU.P;A'1L>^O6]/9^\]2,W5/FO%R5ECUV-C3#U/T<5/1UGWW<N_O+[10D1*
- XMU\W1W=UORE=-55U'15E?T=%O=\C1S<#?2T[?5UGWS6?GPKE++BU;O[W%UV\Z
- XM8\'C=W=,:\-3,BPYU:S93$3#S4[5T4953TC5ML911U=KSNOCT^]K:T=)9\W3
- XMY^/W2CY(;]UCZ]EK0$=5NKO.X]/'_T8S0W>^7U?CNKN_23(R3=F]3SI*MKU*
- XM1,K=1$A/1$>ZN>MW1CC3T<-?[\]*.T:QT3?OP[[$5T`_0TQ9[V]=Q;=7.=W#
- XMTS\_3O_O;U%*2>??S;_*YT9`3E],3<_%O<Q/2M7/5U=K3=G(;T%%9\O'RV]3
- XM[W=O14[WP<]K6UGC4U5;0VO#N<]/[^LZ.EF[PM'7_V_O]T<Q2+W"63C9RL]*
- XM4>?;Q+M-0TA7W]=73[Z\SSDZ/-''QF=;Y]]C3D1(Z]]=6]'`S#L\2VM9Z[G"
- XMU]G#4R\NT;>V74XP-].KM"<?O+*_26/$:\^Z1CU%QLI=0TG7Q>_1U=G$]T,\
- XM7<*[V3S_Q\7+649/1#1+S[S,T?=13U'?=TA-R,[,X\W)7T?WP[[5345CT\K9
- XMW=%C3#__S'=)4=/=:V_?]T_75UM(Z[^Z2C4OO*>O+#+?V49`P+?(,4/'QM?K
- XM4TU&8]V_P]O(;U%GU<5K0T#WZV_.VVM/0#SCR,5C6U5975OGW=U5X]W3P\/?
- XM;T(\.T=9QJO'049;OLM9.3Q=S.];5\RYO4DS-L.XNTE7S<Q,.T[#NL`_-E^]
- XM:\/.]S4]0\N]V3\\[\#";T__WW=;.$G#UUOON;\K,/^NL;]`+2$VJY\\+%FQ
- XM5SJMJL<L1,3?;UTQ.4`]PZ:_.E'/2D*_LSXX[W=+4[?*YVM,0+^UQSPZ_]U5
- XM2>?=X\"^-S)"]^]CP[[-8__?0$+=PL3"P4PW4</)7UO/S5M//CI(U[F]Q?=*
- XM8W<Q.V>LJK,Y,3;$MK<\-O?`5S(UTZI1*"FXK55)YV-'.6NKJD1(R$I!1M_%
- XMMCDQ3?=GQ\]/45=/]]'+VT=38T@WRL;GV_]*5=',W<G;/4-W]]UWWV=;[]_;
- XM44!'Q5_K_UU$2->^U6M)3U7KT\1"2>?/ZTM17TW+QMO-PO]/Z\7%SF<^1N-W
- XM;U]34<W,V<?,=VOOX__?66-9549!SE=5]]GKWT1)1F_#P#@VR[FY3CT_2\Q?
- XMO\C'-3C.=]O.]V];449WS+J_/#Y9O<'+53X_2E/+O[]50DM14__'=TMC76?1
- XMT]U(/D[-S>OKS<?.R\[;R5U14V/_3E7WX^/OYTY+/M?$T]/97TK/O49*SM5,
- XM-6^ZLF-"P+GG/F?;/$?7SN_K:UUC]^M%U\2[W<>[-RTZ_[2N.BTYM<)%+C[(
- XMK[KW.BL^.C2NLN/*O=<[4\99/4ZRO$E/]V]/Z\K#XU5#RW=;06__S&M'/_=3
- XM1^O;5T3?UUG_T<5O5TVQK!\?*[B?J$4L]Z^N2C0O7>M9V[RS2S8VR;C#0TK.
- XMS6L_=\C+2$E;V=__Y]'WW<I"-S[7P[]7O\Y`1.OCW41*_[O-8T,\4<G374U+
- XMR[R^Q4!`5<#.24S5Q5E+64-"5;[%Z]7755%K=V=;1L"XQ$]$2E=W5VO(T=U=
- XMU]E=6\J[/S0_W>_;T\_W8]?K5UWO3U51W]?9XV,_/D^YN\]1W;U9,CK(PLE7
- XM5?^\W4WKSV](.399O[3*3T'?RV\^0,[`QC<T.KRUS3E$_^/*Q,W%[U]`0[V[
- XMP5%#/$1KT<?'9U%K441?UV]K=V_CVU=5T7=1Y^/C45__V^/OW4U!X]OK66?_
- XMWV\\26_7VV=?8VOW9V/W_^_=_U7-W7=?_^?GZ\_=54IGZ]MG8W?1TUU/66?O
- XM[V-G3=G/R6=+1MW3Z]'*W4]*;\[._UGO9U5GS]=?1%'7VTY*Z\O+145?U=]W
- XM/D%3T6=`6='-;_?5U]UW3TU76U_5R\T\2=_.T\+1XTYWV<YK9V]+4<NVR4<]
- XM3'=W1CE!6<_'P=/=;T9#X]U=:U512-G;S-W3Q=?)QVL].%/;;]?7S]E5.4!5
- XMT=/CX]?;0$-5O\[C5U__RL///T5OS6M=X]_C8]W&9^_1_TE'/4C$6T1&Z[_#
- XMYV?GTU532CO_S<?K=VMW_]GW75GKT\O.TU%33^_9[TK7O>M31-/!RSXZ0D9*
- XM6\;%]VO,PUE&1DU9W[^Y[TU/R\3C9VM)55=;T<EW7UG_WU%$SMEK64L^W<[=
- XM]\U;2FMO9W?.Z\I+2[P_P\E!6ZA1'R`]6;FU7TG-P\0^3M%*1EU&26_KSU__
- XMW6_.O,_O2E-&34WWS,O.R&M+3MGC1%W;VV_3Z\N^XTQ)W\MK25OG;VM.;\S,
- XM5U-O;V=K9UGGXT(]R]__[V]5S\W*_TUOXW='35]/2D_9YUW/RL5C657-RV-!
- XM3_?7YV.^N%--_V](-./`P/_WP_=.1%WG2TWW[U'OR]U32-W._]W79UWO4<K`
- XMO\SC/$%WXUE&V4](1E77RV]-8\3%8]_=XV-5Q\C_15EC[W=K8]M97]/?34A(
- XM3U'CW6??=TG?X\;%P\TS+#6SKKLJK:.T/A\C8Y^W,TJ_MU%&44`Y1K6\W3\\
- XM//?/Q[G.ZT%&4]G=6UW_U>M!3_?_3^/*33T_]V]5V<S*S,O,54QCOK2W9S8J
- XM.*ZARB<UNJ=O+BK1O<!*2E-GU=_92CHV4;NSP,_79U4\25]3[\W7/#[?O\55
- XM.$W$O$Y,:TM';[[+64`X/\:ZN3P[W[Q.0/=GS]E3/E^__U5K9UU9=V=9[^?G
- XM3E_;S&-11$[?S,_?_T%&V<W;V=U,26=+3U/77UF_N<5'5UL_6\Y;1/]=4U5/
- XMY[O10#M;R,#'749*7]OKYVO9[T4^.V^^OTI%/\/(8\2VOV-1]]];0$[(R%--
- XMS>]=5U%3R<)W4\"W-C$^QU?CT4\[*S/;K;O.S-5+5=//63>XO\L\,3%*O:VZ
- XM0S;3R>]?U_]13E7_S,M.3E=?Q,P\3&O'OE\T+J^IMSQ/SDQ1R4$]S\A92E%C
- XM:U].45M%8\_O7=753TK9RE]12E%CR=7O75];=[FO0#4\SL++3]W(0$'CPV-%
- XM25WKV<_/_TY1=VL_3.?3ZTY;]_]*4U_3:T_=RL[K[W=)3??(R=E?_]MK3DU,
- XM[_?9OLE+/__;]TE+5==O1^O`OCY`[^MWUV?.O\'3.5G33&_`3D;G;U53U=M*
- XM:\OG1$A/W]G9;V/?R]/O;]]C75U/;\;754IO[V]&47=?V=?WX]7?_VM17_=W
- XM6??'W5]K8UM=9U]53??GZ]?K:TM55W?K=SY%T<7756]=57=73<_K6V]/[\+K
- XM7;S'_T<ZZ[[!_VMGU=U.1$Q=Z\?.3T17]VM56^_;44Y3SM?G7__?S]/C]V]7
- XM_^?-W_?;=TQOS>/_]W=52DCWU]-?1U/KWV=3W_?CW]/O2D-%2MG-R_]?[UGG
- XMR6-,1.?`_W?GXV>]O$]%57=)8^M9S+W3/F_916N^WUE'=TU!4VMGO<3=4?_5
- XMQO=9Z\[(XT],5U]K;^_?UW=)6V]7[U<]5<;=0D/_2D'(P\?K;U-?Z__3Q]=;
- XM=]/G6TU56>/_SK_=2SO!M3XV1\[+S#\U/\+76TCCP4L\.]MGV^]OS.=.R;R]
- XM44A-5TQ)QLCWT<3O/49+76M9]__CS]GO8V=G4W<_/DV_Q7?OZ^=OV=U?W<KG
- XM23O=U??+Q?_GM:Y'*27.K\MC6TM9S,=O0SW?OCA"U[>Y428WMK1&+K>MKS@N
- XM-^O'2$^WMBXFX[R_6V]GR>]?[\G3/$C;44@_RK/;/$!+WUM,SUG)3#S_M,7$
- XM]W=33,U?13[GS,YKT\=G2U&]N<5376-/3U-OT>]O4SU,X\;*9TY/S]?/YV?5
- XMO<]13$Q-7>?7V>/5SO]14U?;SV];.$C$M,M(_\]KM[#=*CV_P4`VPL/O7]OW
- XM]^M./TQO3]6_U^_GT>/WW]E%2U=.56M93MG7X]]52MNY9RHNV:O&S[<_,-O'
- XM,RYO0LK#S+QG+C6LJBU'M=U7QE=-VS4TW;O;6UE,1%_3:]_'S,%K-#A)N;7,
- XM3-_#SFM!;U_5-CA.L+Y-,5F^M]].RV\]Y\7;.4'KP+M(6=E51V/W9]^_T4,Y
- XM3,7%VT_O]]-;=_?K03VQK;T_3<I30DS;R=_K=T5'4\G-8TM3;U=18UE&7W?=
- XM9UOK:\G?7UE15UUGW\N_R&]*8^O9_^]K4U%7=UUKZ^_;Y_]90T[G7T9,[]U1
- XMV\;1Z]_OZ^M33%%?3E?5S-%CY]7;V]'/W5=.2TI?V\O'X]E//4_7S-7=V4=,
- XM;V=C4U__S\/9]TD[/L/"]UOGW?]O65E13TSGPLS1[U5*44]1RL?C75M-2DM=
- XMQ\[97U=?W??C_TLY3MO7T<%9V^]-=^OW3$IC;^_WXVM-3O_K745WQL!$,2WC
- XMNJRV6SI7]\?-SD8^1LG*W44]2;['8V_)R7?GSS]&749#=[O,24?=RE53:TP^
- XMW;W`46MK3<R_R^-1OE4N+N>OQ4A$M\+CP;W/,C!-U4TY0TM(S*^Z0RV^K[T^
- XMZ[9*,3O)RU-;OK9%,3RRNULU0N=50V_-QL/5W55$1]_5V6M==\3*76?1PF=*
- XM3,3(23)5S$Q(_\O7]__K=VOWRLW5=^?_7U57U=_G46OC:TQ3Z^?;U4Q+P,1;
- XM-<[O-377]]%W5=7+64],/=?WP,!-2E5;25'C74S*Q]%K245G;UEGW]W$SU-C
- XMZ^/1TUU39V_C;^_;;SO?O5?KQEM?VSY3=_=-RLK'V\W+]TA+ZU=,[]GG4_?W
- XM4T9,8UMO8UGWR=EC7U=O75N_PTM/O;@^5\I--CW!P\[1=TEG[_].67=?9UU,
- XM56?C_UO;RE5#3=/W4=W/X_?*5;^^V;K(03(W2+NZO\933N]93-M=241;ZUEK
- XMR<W1ZU=!W=]?/4?KO-%75?_7RMOK2UOWT<[;6TQ-Q<'$]UL_/$;_9^_=Y_=G
- XMT\]91$_GW_=9:^/?R;W/9U=33T[GZV?CS]_5=V]O54-+9TQ+6\_CY^=,/]?!
- XMS5]7/-^NJC4K1;;32MW74__76=-9U[M)J4XH*].TJ4DC-ZB?+R[333Q5RUU5
- XMUSTPR\I"S;H]/=_'Z]W$V6_?;^_G4TS7U<Y.1$C$TUG5[U$\1%%?W]MK5UW_
- XMT]WKX]GK=UM59^/-W>O,P-]O5U=?76/5PN=9_W=;6U]51&/K44I;6=OKW\K`
- XM/T%=S>_CU=]WP,M+/5O=W>_K34IC9V?;QK[_4T=?55U;6>O5[V/OW^/?WUEC
- XM6U.]QN\T-7>UN,[_2/]W[V];2\_$WTI';UWW:TWOQDE"3[O%V5515]?(7T=K
- XMQ<I73;FR=^MW0$M923W_UVMW:T_=PM,_16OWRUU%Z^/CUTY"X\].1T;?W\?%
- XMQ==)3F?,U^MC3$1*[\?-XU=G]U]17^]76^_%R5E1]\7;46O=T]G_77?=T>?1
- XMRTU"14)%[[K/5]?)W5=?]W=K6?_,ZUM;]_]93U%?Y^_O74-#V<?;5^_/9TU7
- XMX_?_54Y,S,_._U='7]5+4>OG]W=O7U599V]+35WOX]O7QLYG3$W7VW?9U^_W
- XM_[[)6UMC[]W7S6]-2T]9Y]G_6U?_[^/OYTOCSLO1YT=-]]?91TO.Q]]GYT9+
- XMQ-U)Z\KW-3_1O+M;3>O35S\^WVM-S+WO2DJ\REU.3F]O;\S'T_=!54IKW_]!
- XM3<-(NM'+VTM!55=&3L>_RO]?=]'G6TQ9W]7O/V/CWTM+3,G!O^M'65,PQ-LZ
- XMX^LQ)D*XI+4]1VN^73\Z1M^\SM_W4V];R-M7U</1Z^/=44]CXW=,0$KCV>/9
- XMY]7/=TQ98UGWV\[_U<S_Z]/3YUUGT\=+3&?_Q\E&3L*_V4U16___56??W__?
- XMU=]/55O_75E=1]N]KL8_*2#?HZ\K+[VMS5M$5]'7RU<\.5W;V=G5V<[+Y^OC
- XM5UMOWT__S,O/VUL_/D!)T<9W6^O3;__!:T*XN%T[=]=*5<:_]TWOP,XZ1MW*
- XM_^?,]ST^2M'3UT]5_^M?76=K2D71M]4].U%59[V]TTI/9^/;RO=9W>-;;]?K
- XM04?GQ_]GW6M5__?G9UECVUM+56?KR\_O24W1S^?=T=E;4^O&R.-/66MG]]=W
- XM13O)N[WKT4K?S,U;.#"\MT!1T\]K3<.\V6=W=V-OSFL\/UO+P-=&/K>YV3M*
- XM;]W9=W?__V]==UE54U'_]TU7RL'O3%ECX\_$R44V.N>XP/=954Y9_^M?:]_3
- XMS^\]1V/(O<M;67=*3%G3T>/7_V/9S]U+4?]O4U7CT<Y95]W98W=K=^OCV]5;
- XM0T]OV5O3P=-W8^M=77==8]_W_]/C;U=78\S946=GT<_=9W=KW<7,7VMGW>-K
- XM8V-W1%V_VS\U0\J\0S_.TVO+R.M74^O;[V\^/5>VN==#-SBRK[HY+S*SK.<J
- XM0KBWR,+&2BQOL\W3S49GST`^8_];VW=C8V-,449+5W?_:[NTNTQCW_]`.TS1
- XMT^OOV]W-U^=51$W_Q<#,T5]CY^/K6?_O3D]*6\C&6VM#0%7*S<_1]VMC;^O9
- XMYU%)2V-=QKK31CD^6\&[UU'GS$5'[\';33,]:[UK2\2UX[G`8S0^2;:ONSA$
- XM8^/,US1CLTXRLK\\:T<[Q+M+PKW&ZUT__\G$/U'!O=U//T]11T%%Y^??R,?3
- XM33_WWW=12U&[M\MGY\]O75E$14;KQ\G_3%O54S].SLK7=UEKU\_3_VO_X]O;
- XMS\[*V55(6^O;=^//S%]76V=/6U]=3TO/R7?CX^/K6=_-6]]16TK;T\?,5TMC
- XMMO\\3%].;U?;OL7=2DA59T_!PME#,CJYL+HU0KC,,36QO<Y;,#AW8^]11UM5
- XM2F_&P.MO6??!O6]=U5E9W\=C8UE,0?_3ZVMK45%WT<O7U=]=05W7S5]G[^?1
- XMT]_7R<YO5TE(T\[#R^=GVTW/S,G_0%-+.SQ+Q;W+77?5ZUE3/D.^O>\U,#VH
- XMI=$E0JR\/3>_:SW"R<7G73^WNT<][TA*S\M?2]O163\Z2KC-_TG_S=M/.>?5
- XMW<#'R,K=3U7_S^_-U5<]3N/OZ^MO_]_(SE])0$W=V>=WV=',S5<_4=?/Q-=C
- XM65U.V<E;1T_)Q=?/Q-_GZ_=5U]_-4SM!U<-(/O>_W5T^0&_*ZUEKV]=OZ\_?
- XM:W=92%WCU=G?Z_?OY\S744)/W\;.5<I?/TEWT;?*,T3.O]U3Y\I?/D_&Q=U*
- XM4__/4^]GW\G11$MCU<:\2SYCP,S=:SQ":[_1P]]"/#;3M*_/6U7$S/=#0V/,
- XM;TA?[U-9V<)+1E7CS,]WW]'G1V_"MTDV/LMW5=>\PDY,5>?CT=5?1$U1]UUG
- XMZ\SO/5?#U]MW1TQKZ\W`44--9]7-76/=W?=GU<O*_U=.3$O_R<=?3D_3V=OW
- XM33Y/;]7=UUWK=U';S=_KV\U78]W(W6?W:_]51L[`TU?/TT97V]OC8TI57=O_
- XM_U=C=]/GZ[_!W3$L+K6GP$9!RK_CV]%;3TM,X[:M*3]WP-%;=^/+W<QO-SQO
- XMS4T_1VO19^_944Q5[]7)O5^_23AWO;U9.D2QSVM(0TK1TUM%:\EO0N?&V=?5
- XMYUWC]T-':[W73CU+O+]".+N[V4MG[TQCTT@\0=O;WV_OU>])36_G;\W$RM-C
- XMU^-+V<+=RV_C4T)%S=EK6=_1U\C5V\U.0CK7SLGO65W(T5?_[UO)P\;;23W;
- XMRMU,3%U7:\QWS<M/5]%G.SU.3;S!R\K"N>,Z+V/7R/]3:U<_0:^LR#IOO,I.
- XM/415O[WG-DW#Q$I&64`]S\AWT\'!;V-C;U_'7]W#)<^FO:Q3'R*EGZLT1+.V
- XM3S'_Q\$[/>?G2$;?O+I?3V=9.S3=MZNU9S,[=\'&9T%'7V?3TTP_1^??W4A+
- XM4=W#Q$X_1,2]P_?3RN]"2VM10DM=V]/3Q\/-3$AOO<A=.TI1Q<C/8^O`;T0]
- XM4??9S]G5T?]9=UU7U\OG54!![]_5V]G;VW=)7\_*Q-5C8U53U]%=V>?#SELZ
- XM/%WWWUUC5<S*R??=YU]?8_?9SF?G[^/W9U59:[_G2/_OT<[5V=7=3%-C3DU5
- XMZ^O?W^/O___;8TU'W^=GY^O9T\O3]^/?]W?9V]O;V5]!0UO1VUU,Y]7W]]]1
- XM3TQ+2F>YSF?OQ\E!.DS1[V_.U=G-[TE$2&_.U5$_0]7,V<W=V>-99\/K54Y1
- XMS]7;YS\TS:^L02TOO+I?/\&Q/T'1ZSQ*VT95U_?=R7=WWVM):[V\VULX0->X
- XMU4E1SN<^2-==0#YW[U-GU<QCZ^/9[W?GYW??T=-O6^O1V>_=SU=.7\K(S-W9
- XM6TIKT<[G8_?;WUE+0$I;W6==;^/52S]-7UG;S<G-]]7.9V=;U<[C:U=.7<R]
- XMS4U1VSU#NO]`+SZ_N++5/C0YV;B]TUL_2/_*N.?&.3^MK;4G*5FP-S?&0U&Z
- XM/^?"Q?\\/#Y&U<CW2TG?T6=W_\O-Q[C33EU/2<7%]T-KU]]93.OK2TIOQ,G,
- XM3DU956?=7VMGU<[G8UUKZ\>^74E3;W?5V>-K:TU!26.^Q,Y;2$-,]^=14UG5
- XMQ\:_R,X[-SM$SJ^YUTI.RZ^T=S0\54_K-\#-QSLG):J?I"8J3ZW/.]^UN2TJ
- XM/J>N33_(OS@]ML5-/$MWSN?GZUM+W<?94U%5]^==R[BXS5];3T]/65]K2#_1
- XM;V>OI:<G'Q^OGZ,Y/D[&P<\[/FM-5>_/8U\_1T?.LJF\1BPT:\K3UU512L>X
- XMOW=92U'7T?=,1=_5U5_=P\I;3VMW_]=O9U=3X\_5:TYCS\O+W?]=9^_/U6-*
- XM0DE7ZV?K]^=O6TQ-7]__Z]WO9V?GU<[3[VMWX]?_8U%32DU5[\]1Q;S*3T!5
- XMO[KC6U-59V];5=7C:V-=9_];66OWT>?=47?5TW?,V5%.74Y33LW!6TWW]^/C
- XM4]]W34I9W]-=76O`3=/.TT)1MKA5(R;CH<$KOZ'(-C[*53\X,43'NKY`1SY/
- XMX[_K46_$SM]+8]//VV__74,V/>?.S[_%_S9`V]E/3>__5^?3QMO7TVM?_]W9
- XMX]]53]O.T5M?W?=32$Y`/^N^VTX^W\?#545$]^?CYV]?74U9OK_5:UM;S<++
- XM5U/K]V='7TS'SKW)0RLB3J:J.B;WK[@\,T+#QO=,6W?7Z^_7V<?K3?_G]]_O
- XM;V]WZ]?C_^]W755G;U=,6>OW6V_KS]O_7^?9]UUC;^_;Y^_O[^?K5U?KW?_O
- XM]UU=9UWKT>M1/T'WNL5;06?G6]_&W4X_1-W%]TMW:U5-8V/#ON,Q/\K#5T[%
- XMUTQ3V==18\_?Z]7K:V=5;]WC7>/K:U%KX\S5=U-=WU-WW>?3WST^7[/1.6^Y
- XM8T=?2C[_U4U75T5%U_==XUUC8_]O3UO,U=W_65-5[^?_[^/3R=]W757GWW?W
- XMW^OO]V_CS]'3_TM*[\]K9_=59_]94V-;4?_7W_]G75M95V?GWV]CX\7-T>_;
- XM=W=37='GXV?.P%-CZ_?113]9P>=55UWWVTI#:V]C8UU7U<G(X]7/55-79^?/
- XMW?=G=U?W8U==:UW;S_=C;_?WZ^]+6]755S';O+53-SZVO>-34UE?SM5W4<W1
- XMW^_C8TM9[]')TV=356]K]W=97<G555=O3$)7W<QO66MG54Y=W>_WS<K?74Q(
- XM[\_&[]5W9V=WW>/9SV=16V-C[^__[^]?64QK4TEWY]]K7>?C_V?WY^_GU==?
- XMX]U=45_)Q='O]V=W6]_;W5]O_]'CXTY-1>O5U]OO=TI/8]??:U]?4U?_R557
- XMS?]/T<O?]W=G:TM?W]W;U>-G5UEK7^]W6^O?8U-.3%WOY_=KV]MW;VO_=VMC
- XMU\W7V=GGWUUK3T?O7>O79U%?Z\]G6U==Z^=53V_7R6=-3/_K_W=K:]?=V^],
- XM3>?;R,[9U^=?3#]?O\P_/F_&5TEGQ<C?25/W1D!.]\_O3MG(Y\:_24(YQ:JT
- XM,D^[3DG-7U5/.D&_;T?OVTU5P\?OS-]CW5MOZ___75__;V?O_V/OV^_OXV-=
- XM7>O5T^_OU=U355%7=]_CW]EO64Y9;^/GZV-=7]_3[]OK35%+6^O*Q>MO6V_G
- XM7UEW___K_U'WTV_K[V];;UU=YV_GW6/O:U_;[W==65M;1TW3R=%K=_=W:V/G
- XMT=%75W?-RLWGW5LW,=FWNM=OW6?5UVOK7T=,3DI(7V_GS=7*UST^4\3'X^_9
- XMYU]W8U=53./&W6MGU]WG44Y;7V-OO\_O.S0Q_\*TR$H^V<G,34S;YW=KV\9G
- XM/3I.8^/#S_?5Q,+_=]W;9V-'1E4_1G?,OKT\+3,^][:XU5_9WV=C9TQ-3V?;
- XMQ+6]RUM1YUWKW4Y#0=G#O6=.4>O.9V--9^OWS=/C5U]WW>/KX]71:TM'55EW
- XM9TU1T^=K;V?CZTH^6\%G/U?9;__C9V=7]\K9X]];;^=G]__O;VOG=]WG[^O9
- XM[^-;24A%1=W-PM%94U55]TU?64KG5;2\33TN5;:TR-'?Y_]K53`OP[_G15/=
- XM56O3O-U)5]GCW^]W66?57]?57W?GZV_;8VL_0%O5Y]WG[]'O/2U`PJS%2#_?
- XMS.\P/,S`ZT];W\Q?24M/X]552+JWS4!(TU'O9U'%N-]502[$KTQ;1;RPURLF
- XM*N>KI+-/.5G$ZSHRPKIG3\;$_^/C7>__5>O5WW=?:_=O45E9[^OW:]W+[U5;
- XMY]E)0$;5S=EGT<3W=UW=V^?G]UE*[\Q-5=W;W<];4]?O7>MO6TEOS5M+3]73
- XMWUU-14ECYT9)[\?$RE5;]]O;W5UKW^M;]^/KZ]'/8__;[V=KZ]??75E79V]=
- XM34Y;SM'G_U5-5>/=:U5?_^/O]_?WY_=O=V]KZ]7/WV]O;_=96U-W[VM?34SO
- XMV=5.9^=O9^/W=^/?7U'W[_]O:W?OZ]WOU>-O8UO;S.M54__OZVMO9U-145-9
- XM7?]W9TY?4UMK;U_O35/KT]',ZUU+5=W1:V_7R]E1Z]M7=_?_W]?O;UU-45=K
- XM4UEC]^??Y^?=3D7WY]?5]TM#7\'(_U/%O5%5]]]51^?=9VMC=]O?8]7.RUEW
- XM[S<^0;C,3E=9[TM'W=_.S==C3VMW1=7$7TM=7U?GQBPON\7-5]O_V=_C8S]#
- XM[\C945?+;SQ/T=%.8\UK6UOO3TS=__?W]]O9V7=C7^]98_?O=^_;:V]9X^/K
- XM_UO7V?=C549'2N_,VUE,=[S`YTA=YVM=]^_)YV-O2T1+V]G(Q,_?]^/C[VO_
- XM[VM/0$=574U(U<K-Z^_O8V-W:V=/47?9_UOKT<S?8U/WX^/KY^?K;U=W=^O_
- XM8_??_VMG_V-96W?O;W=K5U-==]GG]W?O[]O3UU-=U]5C6T(^1&_1R\R_V4]#
- XM25%9X]WW:VMO45_7U>MO:V?_Y_?O[_=W]^OG]W?GW?=;;]_=V?]14UM?;^/5
- XM=V]523<R1<*LL\\Q+SVXL+A%/$%$4<_/SEU.7=G;Y^]W=]O1:UG3SV]75=WC
- XMR$I"3_=70CUCQ,/)6??W6UE775]=6^O7T]EK:__=V]_WZ^/_X]_W:U]32D=7
- XMS]/KW]W;W=]71DCOW?_?V?]O]^?==U]?:V-79^/G9W?;Y^MO76?GW>=G66_?
- XMW=W_6W?O_UM;4U5O]U=CW=G_44]WU<S7_T];[^OKR,UO5???8V__:TYW6V_-
- XMUU_K:T=$=\O)54]C6VO9[T].6]73W6=52CU;T;S-=U7KR\Q.2&O,WTM(;^=9
- XM5U=CU\YK4]_&9UO'O6=./RMCK[3-0^.UPRPUV;;"]^_/T4A&5=/=3$!'W<_&
- XMZV]5U=/7;^OW6V_G35=CW>/5VU=!16O7]TY!8\F^=TU.X\]W7=G?X]G3SLQ%
- XM/4C%S6]._\_G76_;YV]934Y.2TI3=]O_7>MOZ]]956??T]OW=V=WYW?O]V-?
- XM7?_O]^OO9U=567?7U>/_[W?;V^?_]V=95U57:UMGU^/OSL[K1$I?WV=G]^OO
- XMX^MG;___[]W7V]_G7U%;;_=C6U5?8V-K7W??W^=W9V-K:W=O=^O*UUE35=_.
- XMR-UO64(^/>>_NM%C3/_;T?=93T]776M=76?_Y\[+[V-9[^-GT>/_56-W54M/
- XM9UGGT=OO5VM/W\C?]T]'6\:V=S=9O;?50T!7;]W39TQ99V_5R]$W/M^TU435
- XMOM]#U\).6>=17=M51V-K9^]K7V=567=K=]7W;W=K8\W-W7?CU^/W=^O_;V_W
- XM9V-K6U5;]^_KV>]C=^_W7__K6U]O]V]CX]UK3TA.M=/9*BQGM;_*2BZ\L<MC
- XM6U?+TV-54UW+_V__;^M.U=^[R$(K-].JNCL\W<-52V?763],S]%*.\2UNSX\
- XM3[^^Q%%3T\+7Y___:U==5V?OY^=W_^O3_V]?7V/WZ^MW]^_O;_=G76O_RLSW
- XM5V]O]^OW4U7GZ^M=55_O:V]K=^O?ZV_G]_=GWW=9RM%W__]-55]C4V/7[_?_
- XM:VOKV_?_=VM977=WZ]_G;V]WW]_W]W?C[_]G5^_.S%M"/U/9PM55Z]]C_]WG
- XM3E?WS]/CZ^]G=^?KW\[=9VO_[V=?9VMG8UG_]VMW:UUK:V-O[^-O;^_3W>_W
- XM[^OOX^?O;V_K]_];7?_GZU=;5]=W45=9_]O1WUM39]W7WTM,6^?GZ]GW9U]?
- XM:]/1Y_]G:V=G=V]O7UUK[^OO=V-K=_?O]_?W_V]K_V]O;___=V/_]_==55=G
- XMW\[.8T93U</564;_T\Y?9^?5YU=OW]]966-C5UWO[VMG;VM?7V-W[V]G:^_W
- XM9V_KX]WG;^_K_^_GZW?W]^??XUU976OO:VMO:V=G:___=__W:V=?76=O]_]O
- XM;^_CY^/GX^OW;__K]V]KZ^=G7V=W_W=W:U]C;W=W:V]W=W?_]_?W[^__]^_W
- XM=_?OV5]5]]=O3L[*9TA+3LO(V4M;Y^MO9VMW=VM?8W?_9V_K[VMG[^/=X^__
- XM]^OW9U]C___O[VM;:W=W__]W=_]W=V]O=W=C:_]O8V?_=VMG[]G5YVMO;_?_
- XM__?_]_]K_^?G;V=C8W==6U5=XV=K=^OG[U]98^OK_VMK:]_GY__W=_]G9__W
- XMZ_]K:V]G_^/O4__+SM];14%%S+BRWT(W0__$O]E+05/?S>-53U_WS-U+6]_;
- XM64IWT<]52T_=WVM?V\Y71DS;X___V]?W9VO?T]=12W?9WU=+5]/5_]_.T4(]
- XM2;[,65O7VU%?X^-?75U136=CY\K79V?K=UE/Y]/;5V?WZVM=9^_W:^/775-=
- XMV>=G:__G]V]?9_]W;W?_=_]W____=VOW]_?K;U5OV=M;5UMW=^__=__W_W=W
- XM:V=OZ_]W=W=W]_]W:_?__^O_;_?O]W=?9__CXV]=8___:VMW=U]W_W=K[_?W
- XM9V-=]_=K;^OK:V_O=__W7U]GT]/W7V=O=V]K14K9Q<+,;UW?ZV].3UMK655;
- XM_]MW:__O=VOWY]UK6UO9S<]=4VOKZV]?;]G3W55.5^?=_U%9_^O_;V_O[V=C
- XM8__W;V=K[_]O9__K]UEKU>]K:U_K4UE;U]O=[^-O9U_K;^=W:V-C77=WY]/_
- XM[VM?75%7]]/);TE/=]%W4U71T___W\]75UUC=]_/=U=?=_]W]^]O:^]W[V__
- XM]VM57]'C3T!KQ<]12,[97^O.SV/W[TQ/]]G7ZVM79V]W9UU.U\_56U=;7U53
- XM7^/.V7=966/_Y^]W;V__W>/?W^]O_^OW]_]O:VOO[W=;6U]C75UC_^_O]_?_
- XM;U]5W=%C=]E52=_C;]WC8^OO8__K_VO_W^-W;_]W;V/__V-C7=_C]_?G4\S,
- XM44$YO+7_2<W54=G9=]UO6UM=R\C73#](P+_*7__K54_WV]E?4T]W9U?;S-U?
- XM:VOWV=7_65OO;U]?7VOW]V];:W=K9_?K=_?K]W?__W?_Y]O_=^OW__]W7U=?
- XM8^O;WVM=9^_W=V-G]^_K=UM7__?W_W=O=__G_W?W[W=W[W=W=V]O]_=O:_?O
- XM:V=O=__W]W?W]__GZ_?_=V-5:]WK7V/O_VOW=U?O5_?_[]5C43T]YZ^]0#O9
- XMNE-#6<E5/MO.:U'?V55;_W=G]^MK:]_O=]G=;V=O_U]5____Z^]O;V__]V]G
- XM;__W;V__Y^-?2U^\TVM!1-&U/2_KOKVZN_\\3O]/T\$_2MU745_&XT9WXUO-
- XMQ-MW_V_=[V-G76-K:_?KV_=73U]O:]_=W^_?[U-1[\G3]U%78]_7Q_=?3TY?
- XMW]GC;U]O=V==:^/G;W=K8V-O[^OG7U]G_VMKX^OW]^OGZ^OKY^_GW]WC/3_)
- XMQ]_;W>\].#G_R,;K_]'W03C=Q,1(7>O_6_]G4=_*VW?5UUE13>O;T>?_9V_G
- XM]V=G_V]G7^/W;V-O]_=G=_?_8__=:VMO__?O:V-;9V_WZ]O7Y^/O=^_KW=?O
- XM3E-766=C=_]C:V-K=^_WZ_??]V=G;_??Y^?;W>/_:V=O=W=W]_=K6]W5YTE(
- XM3]G3V?]W8VMC76-K8^O=[U]G;V/WW\[_4??'PTQ)T='_7^_K=W?_5U__[V-;
- XM;_]K8V____?O:V=K____]^_W[]__;VMK=____W?__W?___?O]_]W]^]W=_?K
- XM[_]O]^_W:V_KX^=94VOWXV=G=___=W=K9W?_=_?__^_?X___[]_O=U]G=W=W
- XM_V]KY^?==W=W;VO_:\W/[U];8__OV]]K8U]KX^/O;VMG]_]W9V=W;W=W:V]W
- XM=W?CW=UK7V/_]_]G;_?C]__WZ^MO:V]O_W?_=V]C8VOWX_=W9VMK:VMK__?_
- XM______?_=W=W_W=W_W=C;VMW[^?O___WZ_]W__?___]K9VMK____;V]O=___
- XM=___[^OO]_____]W9V-?=_?OZ^M.0T?!P=M+_]UG75E9Z\KC8UEK:V_W;VOG
- XMV^]G6?______:W?O_V]O;_?O[_____]G=]5C6>?C;VMO7V?_Z^O?W?]WYUU5
- XM6VMG]_=W9V?WX^/K:W?O]^__]V]=5V/5S]UG_]OO75GO;V?_]^?K]VMO=W?_
- XM__=W___W=VO_=W=O=V]K8VMO[U_K=]_CZVM71&_)P%E.7<?-8TIWT=/C:UMC
- XM8TI*9^=W[\[/9V/K[T]*T<?=5UU?_^__]_?7Q6-!1T1$QKB[/CA"Q+WG3D5C
- XMV]5O4U/_W=/9=UOKU]MC75______=VM?=^/G;UWW[V]K;W?GVVM.3\S1=]_7
- XM[___8^_3W6MW;^/K:VMW__]K7V-O_W?_;VMO[_?_=^_W=VMO[_?_;______W
- XM_W?_Z^__=W?W=VMC;W?O_W=W]^MW;V=O:V=W__?_=V_W[_?__W=O=_?_=W?G
- XMZW?_Z_=K_U?_[^_GXV]=5VOKVV]G8_=W_V_W]W?__VM=5__K]_____]W]^OK
- XM_W=W____=_]W[^OK]W?_[_]==W=WZV]CW]E.3V?O]_=O:UG=S=UW;V=!1F^X
- XMOVL_:\+92D+5VU]CU<Y12??=[_?=W5U?[^/_;V=;7]_?_W=W;_?C]U-GX^-W
- XM=V]O;VMW_V/G;V-K8V=W[^/C]^]W]_=G;_]O8V-OZ_?_=_?W]_=W:___=V__
- XM[__W[_=W]^O___=W;W?_]_]W_W?W=V==7V?OZ_?_[_=O;VMK_^/K_W?_]_]W
- XM]_?W=^_O_W=K:V]W=W?__V_______W?___]W]^_C[W=W=^_W_W?___]W____
- XM_W=W__?W]_]O;W?_;VMK;W?______W=O=_____________?K]V=W=^_O8T]5
- XM=]7-;U-WW]_O;V=C:V]C:^OCYVMG=_]W:V]O;V=K=W=O=_?O]___]_]W=W=O
- XM:W?G:U=9_^_9R^M,3MW*:U5/T]-O1&O%U5E*W=-=76]K6UO__^__9VOG]W=W
- XM____]_____?W____]_=W=V]W_^__;____^_W__]W=V]O;V=G:_____?O[__W
- XMZV]O_^_W_V__]___]_]W_W?__W=W;V______=V]K=_]W=___]^OK[_]W;___
- XM__]O=W=G9V_OZ_=W=_]W=_?W;VO_[_]K__]O=V_KY^/_9U=C[]GG=V/_X]UW
- XM65=WW^?_:___=VMO_^__:U]K]_=W;__W]W=W=____W?_[_]K=_?O=W=W____
- XM__]W:W?_____=__W]___=_]O;V___W=W;W?__V]W=V]W__]O=__W=V____=K
- XM;V_W[_=W=___]^_W__=W;V]W__]W:V=G9V=O[^OW=W=O:V]O[^??WUM/64_W
- XMS^-W[]?36TQ7U=?K65E=6^_*VU-+U\S?3V_==UEKZU5KW]OW9UWW]VM?_]]W
- XM8V_;ZV=?:^_O=V__]^__=__O[_?_______]W__]O:VMW_W=O:_________]W
- XM]U_K[V__;_=K7__OZ_]WYV-GX\SO0DK=T7=;:^OC=V]K__]G=_?O:V]OW^];
- XM[^O5Y_=C6UEK=^/G=V-O[]W_8V-K]W?W=V-O[^?W___W[_?W___O]W=W_^?W
- XM]V-GW_=O9VMO;W=W9_?W]_?__^OO_VMO_V]K:W?_____________;___]___
- XM__]W=W=W_W?___]W]_?_=____W?_=W?_=W?W]_]W;W?K]W=W[_=W;]=W:UE7
- XM_]7?6TWOV^MG[^MC6^_W:VO____K[V=O[_]O=^____?W_V]K;___________
- XM_W=K;__W=V]O______?_=V]W[^_W______]W__?__W?O___W__]W=_____]O
- XM=___=W?W[^]W;W?__W=W___________W___W]_]W=__W]W=W__?__W?___]W
- XM;V]W__]W=____V]O;__W_____________________W?_____=_?_=V=O[W=G
- XM7>?*]U'_Y_=C_^]W__]G=^_W=__W;V?W_V]O__?O___O]_____]C:W?_____
- XM;V=G;^?K_______O_V]W_^_O]V]O___W____=W=W_W=W=V=O[_]O;_?WZ^__
- XM9V]W__?KW=/;_U]/7=G(8TI-V]]C[^-K55OOW=UW8V/G[W?_[_=G=_?_:___
- XM=V_W_W=W__]K=V]W]_?_;_]O7^OK_W=C]^M?5>?7W6MC;___=W?W[W=O=___
- XM__?W=__W]_]W__]W__]W;W?_=_____?_=V]O;W?_=W?__W=W____=W=W____
- XM=______W]_=O________________=_____________________?W______]W
- XM=____W?____W____]_______=________W?_]____W?__W=O____________
- XM=W?_]_]W________=W=W=___________________]_?O____=_____]O;W?_
- XM_V]O=W?_______?_:VOWY_]K;_]W__=K:^__;^__=__W_W?_]_?_]_]W;V]K
- XM=__W=W=W=W=W]_]W=V]W]_?W_W=W_____W?____W]W?_]_]O;W?W[^______
- XM___W]_]O=W?_=___=W?W__?_]_?_=W?_____________________________
- XM_W?_______________]W=_____________________]W=__W_W=W___K[_]O
- XM_^______;W=K=__W]____V]O__?_____:V/_]_]W=W=O=_?O]_]K7V]O[]OG
- XM_V?_ZW=K:W?_]_]W:_______________=W=O=____W=W____;W?_________
- XM______________________]W=______________K__?_]_]W_____W?___]W
- XM=W?_____________________]W?_____]W?___]W=___________________
- XM____________=W=W__]W_________W=W=___________________________
- XM______]W______]W=W?___]W=_____]W=____W?_]____W=W=VMO]^?CZV=?
- XM9_?W_W=O:W?_]^_W_W?___]O=__O_V]K_^_W=V]O___W_W=O____]^_W__?_
- XM_____W=O=_______]__W_________________________W?______W=W=___
- XM_W?__________________________________W=W=__W[_=W;____W=O____
- XM=W?__W=W____=W?_______________?_____________=W?_____________
- XM____________________________________________________________
- XM___W___W]_____________]W________________=_____]W____________
- XM_W?______________________________________W=O__?O]V]K=_?W_W=W
- XM______________]W=_____]W______________]W____________________
- XM____________________________________________=________W?_____
- XM_____________________^OW__?_]_______________________________
- XM_______________________________W______________?_____________
- XM________________________________________]___]_?_]_=W]^]O:^-9
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XM____________________________________________________________
- XL____________________________________________________________
- X`
- Xend
- END_OF_FILE
- if test 27680 -ne `wc -c <'sounds/applause.au.uu'`; then
- echo shar: \"'sounds/applause.au.uu'\" unpacked with wrong size!
- fi
- # end of 'sounds/applause.au.uu'
- fi
- echo shar: End of archive 11 \(of 30\).
- cp /dev/null ark11isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 30 archives.
- echo "Now execute sdecode.sh to build files."
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-