Ticket #10981: full_patch.diff

File full_patch.diff, 529.4 KB (added by Duffadash, 4 months ago)
  • AUTHORS

    diff --git a/AUTHORS b/AUTHORS
    index 2800b62..7ccd755 100644
    a b Other contributions  
    533533     Janne Huttunen               - V3 actor mask support, Dig/FT SMUSH audio
    534534     Kovacs Endre Janos           - Several fixes for Simon1
    535535     Jeroen Janssen               - Numerous readability and bugfix patches
    536      Keith Kaisershot             - Several Pegasus Prime patches
     536     Keith Kaisershot             - Several Pegasus Prime patches and DVD
     537                                    additions
    537538     Andreas Karlsson             - Initial port for SymbianOS
    538539     Claudio Matsuoka             - Daily Linux builds
    539540     Thomas Mayer                 - PSP port contributions
  • Makefile

    diff --git a/Makefile b/Makefile
    index 93a84a5..8f84b26 100644
    a b ZIP ?= zip -q  
    7878# Misc stuff - you should never have to edit this                     #
    7979#######################################################################
    8080
    81 EXECUTABLE  := $(EXEPRE)scummvm$(EXEEXT)
     81EXECUTABLE  := $(EXEPRE)PegasusPrime$(EXEEXT)
    8282
    8383include $(srcdir)/Makefile.common
    8484
  • Makefile.common

    diff --git a/Makefile.common b/Makefile.common
    index b56300a..57647db 100644
    a b dist-src: \  
    233233DIST_FILES_DOCS:=$(addprefix $(srcdir)/,AUTHORS COPYING COPYING.BSD COPYING.LGPL COPYING.FREEFONT COPYRIGHT NEWS README)
    234234
    235235# Themes files
    236 DIST_FILES_THEMES=scummmodern.zip scummclassic.zip
     236DIST_FILES_THEMES=scummclassic.zip
    237237ifdef USE_TRANSLATION
    238238DIST_FILES_THEMES+=translations.dat
    239239endif
  • backends/mixer/sdl/sdl-mixer.cpp

    diff --git a/backends/mixer/sdl/sdl-mixer.cpp b/backends/mixer/sdl/sdl-mixer.cpp
    index 7c709e9..b391782 100644
    a b  
    3333#ifdef GP2X
    3434#define SAMPLES_PER_SEC 11025
    3535#else
    36 #define SAMPLES_PER_SEC 22050
     36#define SAMPLES_PER_SEC 44100
    3737#endif
    3838//#define SAMPLES_PER_SEC 44100
    3939
  • backends/platform/sdl/macosx/macosx-main.cpp

    diff --git a/backends/platform/sdl/macosx/macosx-main.cpp b/backends/platform/sdl/macosx/macosx-main.cpp
    index 1b9fc1b..712a4ab 100644
    a b  
    2020 *
    2121 */
    2222
     23// Disable symbol overrides so that we can use system headers.
     24#define FORBIDDEN_SYMBOL_ALLOW_ALL
     25
    2326#include "common/scummsys.h"
    2427
    2528#ifdef MACOSX
    2629
    2730#include "backends/platform/sdl/macosx/macosx.h"
    2831#include "backends/plugins/sdl/sdl-provider.h"
     32#include "base/commandLine.h"
    2933#include "base/main.h"
     34#include "common/config-manager.h"
     35#include "common/fs.h"
     36
     37#include "CoreFoundation/CoreFoundation.h"
     38
     39#define PEGASUS_DVD_TARGET "pegasus-dvd-release"
    3040
    3141int main(int argc, char *argv[]) {
    3242
    int main(int argc, char *argv[]) {  
    4151        PluginManager::instance().addPluginProvider(new SDLPluginProvider());
    4252#endif
    4353
     54        // HACK: Special Pegasus release parameters
     55
     56        // Attempt to detect the PP Data directory
     57        // Get URL of the Resource directory of the .app bundle
     58        CFURLRef fileUrl = CFBundleCopyBundleURL(CFBundleGetMainBundle());
     59
     60        if (!fileUrl) {
     61                warning("Failed to get bundle URL");
     62                return 1;
     63        }
     64
     65        // Try to convert the URL to an absolute path
     66        char buf[MAXPATHLEN];
     67        if (!CFURLGetFileSystemRepresentation(fileUrl, true, (UInt8 *)buf, sizeof(buf))) {
     68                warning("Failed to get FS representation of bundle URL");
     69                return 1;
     70        }
     71
     72        CFRelease(fileUrl);
     73
     74        Common::String bundlePath(buf);
     75        Common::FSNode bundleNode(bundlePath);
     76        Common::FSNode bundleParent = bundleNode.getParent();
     77        Common::FSNode ppDataDirectory = bundleParent.getChild("PP Data");
     78
     79        Common::String ppDataPath;
     80
     81        // If we have the "PP Data" folder in the same directory as this bundle
     82        if (ppDataDirectory.exists()) {
     83                // Try to use this directory
     84                ppDataPath = ppDataDirectory.getPath();
     85        } else {
     86                // Try to get it off the disc
     87                Common::String discPath("/Volumes/Journeyman/");
     88                Common::FSNode discNode(discPath);
     89                Common::FSNode discDataDirectory = discNode.getChild("PP Data");
     90                if (discDataDirectory.exists()) {
     91                        ppDataPath = discDataDirectory.getPath();
     92                } else {
     93                        warning("Game data missing");
     94                        return 1;
     95                }
     96        }
     97
     98        // Work this into the config file
     99        Base::registerDefaults();
     100        ConfMan.loadDefaultConfigFile();
     101
     102        // Add the special target if it doesn't already exist
     103        if (!ConfMan.hasGameDomain(PEGASUS_DVD_TARGET)) {
     104                ConfMan.addGameDomain(PEGASUS_DVD_TARGET);
     105                ConfMan.set("gameid", "pegasus", PEGASUS_DVD_TARGET);
     106                ConfMan.set("gfx_mode", "opengl_linear", PEGASUS_DVD_TARGET);
     107                ConfMan.set("fullscreen", "true", PEGASUS_DVD_TARGET);
     108                ConfMan.set("platform", "macintosh", PEGASUS_DVD_TARGET);
     109        }
     110
     111        // Always update the path
     112        ConfMan.set("path", ppDataPath, PEGASUS_DVD_TARGET);
     113
     114        // Flush for good luck
     115        ConfMan.flushToDisk();
     116
     117        const char *pegasusParams[] = {
     118                argv[0],
     119                "--gui-theme=scummpegasus",
     120                PEGASUS_DVD_TARGET
     121        };
     122
    44123        // Invoke the actual ScummVM main entry point:
    45         int res = scummvm_main(argc, argv);
     124        int res = scummvm_main(ARRAYSIZE(pegasusParams), pegasusParams);
    46125
    47126        // Free OSystem
    48127        delete (OSystem_MacOSX *)g_system;
  • backends/platform/sdl/macosx/macosx.cpp

    diff --git a/backends/platform/sdl/macosx/macosx.cpp b/backends/platform/sdl/macosx/macosx.cpp
    index 924e33b..5e61df3 100644
    a b  
    4343
    4444OSystem_MacOSX::OSystem_MacOSX()
    4545        :
    46         OSystem_POSIX("Library/Preferences/ScummVM Preferences") {
     46        OSystem_POSIX("Library/Preferences/Pegasus Prime Preferences") {
    4747}
    4848
    4949void OSystem_MacOSX::init() {
  • backends/platform/sdl/posix/posix-main.cpp

    diff --git a/backends/platform/sdl/posix/posix-main.cpp b/backends/platform/sdl/posix/posix-main.cpp
    index d07db11..2bacaa8 100644
    a b  
    2020 *
    2121 */
    2222
     23// Disable symbol overrides so that we can use system headers.
     24#define FORBIDDEN_SYMBOL_ALLOW_ALL
     25
    2326#include "common/scummsys.h"
    2427
    2528#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(MAEMO) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) && !defined(PLAYSTATION3)
    2629
     30#include <mntent.h>
     31
    2732#include "backends/platform/sdl/posix/posix.h"
    2833#include "backends/plugins/sdl/sdl-provider.h"
     34#include "base/commandLine.h"
    2935#include "base/main.h"
     36#include "common/config-manager.h"
     37#include "common/fs.h"
     38
     39#define PEGASUS_DVD_TARGET "pegasus-dvd-release"
    3040
    3141int main(int argc, char *argv[]) {
    3242
    int main(int argc, char *argv[]) {  
    4151        PluginManager::instance().addPluginProvider(new SDLPluginProvider());
    4252#endif
    4353
     54        Common::String dataPath(DATA_PATH);
     55        Common::FSNode ppDataDirectory(dataPath + "/PP Data/");
     56
     57        Common::String ppDataPath;
     58
     59        // If we have the "PP Data" folder in the same directory as this bundle
     60        if (ppDataDirectory.exists()) {
     61                // Try to use this directory
     62                ppDataPath = ppDataDirectory.getPath();
     63        } else {
     64                // Search mounted volumes for the Journeyman disc
     65                bool foundData = false;
     66                FILE* fp = setmntent(_PATH_MOUNTED, "r");
     67                mntent* ent;
     68                while ((ent = getmntent(fp))) {
     69                        Common::String discPath(ent->mnt_dir);
     70                        Common::FSNode discNode(discPath);
     71                        Common::FSNode discDataDirectory = discNode.getChild("PP Data");
     72                        if (discDataDirectory.exists()) {
     73                                foundData = true;
     74                                ppDataPath = discDataDirectory.getPath();
     75                                break;
     76                        }
     77                }
     78               
     79                if (!foundData) {
     80                        warning("Game data missing");
     81                        return 1;
     82                }
     83        }
     84
     85        Base::registerDefaults();
     86        ConfMan.loadDefaultConfigFile();
     87
     88        // Add the special target if it doesn't already exist
     89        if (!ConfMan.hasGameDomain(PEGASUS_DVD_TARGET)) {
     90                ConfMan.addGameDomain(PEGASUS_DVD_TARGET);
     91                ConfMan.set("gameid", "pegasus", PEGASUS_DVD_TARGET);
     92                ConfMan.set("gfx_mode", "opengl_linear", PEGASUS_DVD_TARGET);
     93                ConfMan.set("fullscreen", "true", PEGASUS_DVD_TARGET);
     94                ConfMan.set("platform", "linux", PEGASUS_DVD_TARGET);
     95        }
     96
     97        // Always update the path
     98        ConfMan.set("path", ppDataPath, PEGASUS_DVD_TARGET);
     99
     100        // Flush for good luck
     101        ConfMan.flushToDisk();
     102
     103        const char *pegasusParams[] = {
     104                argv[0],
     105                "--gui-theme=scummpegasus",
     106                PEGASUS_DVD_TARGET
     107        };
     108
    44109        // Invoke the actual ScummVM main entry point:
    45         int res = scummvm_main(argc, argv);
     110        int res = scummvm_main(ARRAYSIZE(pegasusParams), pegasusParams);
    46111
    47112        // Free OSystem
    48113        delete (OSystem_POSIX *)g_system;
  • backends/platform/sdl/posix/posix.cpp

    diff --git a/backends/platform/sdl/posix/posix.cpp b/backends/platform/sdl/posix/posix.cpp
    index a711c3a..2d8a4e5 100644
    a b Common::WriteStream *OSystem_POSIX::createLogFile() {  
    107107#ifdef MACOSX
    108108        logFile += "/Library";
    109109#else
    110         logFile += "/.scummvm";
     110        logFile += "/.PegasusPrime";
    111111#endif
    112112#ifdef SAMSUNGTV
    113113        logFile = "/mtd_ram";
    Common::WriteStream *OSystem_POSIX::createLogFile() {  
    151151                return 0;
    152152        }
    153153
    154         logFile += "/scummvm.log";
     154        logFile += "/Pegasus Prime.log";
    155155
    156156        Common::FSNode file(logFile);
    157157        Common::WriteStream *stream = file.createWriteStream();
  • backends/platform/sdl/posix/posix.h

    diff --git a/backends/platform/sdl/posix/posix.h b/backends/platform/sdl/posix/posix.h
    index 01a0152..f2e6a46 100644
    a b  
    2828class OSystem_POSIX : public OSystem_SDL {
    2929public:
    3030        // Let the subclasses be able to change _baseConfigName in the constructor
    31         OSystem_POSIX(Common::String baseConfigName = ".scummvmrc");
     31        OSystem_POSIX(Common::String baseConfigName = ".PegasusPrimerc");
    3232        virtual ~OSystem_POSIX() {}
    3333
    3434        virtual bool hasFeature(Feature f);
  • backends/platform/sdl/win32/win32-main.cpp

    diff --git a/backends/platform/sdl/win32/win32-main.cpp b/backends/platform/sdl/win32/win32-main.cpp
    index e5b26c3..a93c04a 100644
    a b  
    3737
    3838#include "backends/platform/sdl/win32/win32.h"
    3939#include "backends/plugins/sdl/sdl-provider.h"
     40#include "base/commandLine.h"
    4041#include "base/main.h"
     42#include "common/config-manager.h"
     43#include "common/fs.h"
    4144
    4245int __stdcall WinMain(HINSTANCE /*hInst*/, HINSTANCE /*hPrevInst*/,  LPSTR /*lpCmdLine*/, int /*iShowCmd*/) {
    4346        SDL_SetModuleHandle(GetModuleHandle(NULL));
    4447        return main(__argc, __argv);
    4548}
    4649
     50#define PEGASUS_DVD_TARGET "pegasus-dvd-release"
     51
    4752int main(int argc, char *argv[]) {
    4853        // Create our OSystem instance
    4954        g_system = new OSystem_Win32();
    int main(int argc, char *argv[]) {  
    5661        PluginManager::instance().addPluginProvider(new SDLPluginProvider());
    5762#endif
    5863
     64        // Get the path to our EXE
     65        HMODULE hModule = GetModuleHandleW(NULL);
     66        WCHAR wideCharPath[MAX_PATH];
     67        GetModuleFileNameW(hModule, wideCharPath, MAX_PATH);
     68
     69        // Convert to ANSI
     70        char buf[MAX_PATH];
     71        WideCharToMultiByte(CP_ACP, 0, wideCharPath, -1, buf, MAX_PATH, NULL, NULL);
     72
     73        // Find the directory the EXE is in
     74        Common::String exePath(buf);
     75        Common::FSNode exeNode(exePath);
     76        Common::FSNode ppDataDirectory = exeNode.getParent().getChild("PP Data");
     77
     78        Common::String ppDataPath;
     79
     80        // If we have the "PP Data" folder in the same directory as this bundle
     81        if (ppDataDirectory.exists()) {
     82                // Try to use this directory
     83                ppDataPath = ppDataDirectory.getPath();
     84        } else {
     85                // Search mounted volumes for the Journeyman disc
     86                bool foundData = false;
     87                char szLogicalDrives[26 * 4 + 1];
     88                DWORD dwResult = GetLogicalDriveStrings(sizeof(szLogicalDrives), szLogicalDrives);
     89                if (dwResult > 0 && dwResult <= sizeof(szLogicalDrives)) {
     90                        char *szSingleDrive = szLogicalDrives;
     91                        while (*szSingleDrive) {
     92                                if (GetVolumeInformation(szSingleDrive, buf, sizeof(buf), NULL, NULL, NULL, NULL, 0) && !scumm_stricmp(buf, "Journeyman")) {
     93                                        Common::String discPath(szSingleDrive);
     94                                        Common::FSNode discNode(discPath);
     95                                        Common::FSNode discDataDirectory = discNode.getChild("PP Data");
     96                                        if (discDataDirectory.exists()) {
     97                                                foundData = true;
     98                                                ppDataPath = discDataDirectory.getPath();
     99                                                break;
     100                                        }
     101                                }
     102                                szSingleDrive += strlen(szSingleDrive) + 1;
     103                        }
     104                }
     105
     106                if (!foundData) {
     107                        warning("Game data missing");
     108                        return 1;
     109                }
     110        }
     111
     112        // Work this into the config file
     113        Base::registerDefaults();
     114        ConfMan.loadDefaultConfigFile();
     115
     116        // Add the special target if it doesn't already exist
     117        if (!ConfMan.hasGameDomain(PEGASUS_DVD_TARGET)) {
     118                ConfMan.addGameDomain(PEGASUS_DVD_TARGET);
     119                ConfMan.set("gameid", "pegasus", PEGASUS_DVD_TARGET);
     120                ConfMan.set("gfx_mode", "opengl_linear", PEGASUS_DVD_TARGET);
     121                ConfMan.set("fullscreen", "true", PEGASUS_DVD_TARGET);
     122                ConfMan.set("console", "false", PEGASUS_DVD_TARGET);
     123                ConfMan.set("platform", "windows", PEGASUS_DVD_TARGET);
     124        }
     125
     126        // Always update the path
     127        ConfMan.set("path", ppDataPath, PEGASUS_DVD_TARGET);
     128
     129        // Flush for good luck
     130        ConfMan.flushToDisk();
     131
     132        const char *pegasusParams[] = {
     133                argv[0],
     134                "--gui-theme=scummpegasus",
     135                PEGASUS_DVD_TARGET
     136        };
     137
    59138        // Invoke the actual ScummVM main entry point:
    60         int res = scummvm_main(argc, argv);
     139        int res = scummvm_main(ARRAYSIZE(pegasusParams), pegasusParams);
    61140
    62141        // Free OSystem
    63142        delete (OSystem_Win32 *)g_system;
  • backends/platform/sdl/win32/win32.cpp

    diff --git a/backends/platform/sdl/win32/win32.cpp b/backends/platform/sdl/win32/win32.cpp
    index 5f860ad..eb89ffb 100644
    a b  
    4444
    4545#include "common/memstream.h"
    4646
    47 #define DEFAULT_CONFIG_FILE "scummvm.ini"
     47#define DEFAULT_CONFIG_FILE "Pegasus Prime.ini"
    4848
    4949void OSystem_Win32::init() {
    5050        // Initialize File System Factory
    Common::String OSystem_Win32::getDefaultConfigFileName() {  
    175175                        }
    176176                }
    177177
    178                 strcat(configFile, "\\ScummVM");
     178                strcat(configFile, "\\Pegasus Prime");
    179179                if (!CreateDirectory(configFile, NULL)) {
    180180                        if (GetLastError() != ERROR_ALREADY_EXISTS)
    181                                 error("Cannot create ScummVM application data folder");
     181                                error("Cannot create Pegasus Prime application data folder");
    182182                }
    183183
    184184                strcat(configFile, "\\" DEFAULT_CONFIG_FILE);
    Common::WriteStream *OSystem_Win32::createLogFile() {  
    237237                        CreateDirectory(logFile, NULL);
    238238                }
    239239
    240                 strcat(logFile, "\\ScummVM");
     240                strcat(logFile, "\\Pegasus Prime");
    241241                CreateDirectory(logFile, NULL);
    242242                strcat(logFile, "\\Logs");
    243243                CreateDirectory(logFile, NULL);
    244                 strcat(logFile, "\\scummvm.log");
     244                strcat(logFile, "\\Pegasus Prime.log");
    245245
    246246                Common::FSNode file(logFile);
    247247                Common::WriteStream *stream = file.createWriteStream();
  • backends/saves/posix/posix-saves.cpp

    diff --git a/backends/saves/posix/posix-saves.cpp b/backends/saves/posix/posix-saves.cpp
    index 9682832..b31d820 100644
    a b  
    4343
    4444
    4545#ifdef MACOSX
    46 #define DEFAULT_SAVE_PATH "Documents/ScummVM Savegames"
     46#define DEFAULT_SAVE_PATH "Library/Application Support/Pegasus Prime Saves"
    4747#else
    48 #define DEFAULT_SAVE_PATH ".scummvm"
     48#define DEFAULT_SAVE_PATH ".PegasusPrime"
    4949#endif
    5050
    5151POSIXSaveFileManager::POSIXSaveFileManager() {
  • backends/saves/windows/windows-saves.cpp

    diff --git a/backends/saves/windows/windows-saves.cpp b/backends/saves/windows/windows-saves.cpp
    index b84ab13..943ea75 100644
    a b WindowsSaveFileManager::WindowsSaveFileManager() {  
    6363                        }
    6464                }
    6565
    66                 strcat(defaultSavepath, "\\ScummVM");
     66                strcat(defaultSavepath, "\\Pegasus Prime");
    6767                if (!CreateDirectory(defaultSavepath, NULL)) {
    6868                        if (GetLastError() != ERROR_ALREADY_EXISTS)
    69                                 error("Cannot create ScummVM application data folder");
     69                                error("Cannot create Pegasus Prime application data folder");
    7070                }
    7171
    7272                strcat(defaultSavepath, "\\Saved games");
    7373                if (!CreateDirectory(defaultSavepath, NULL)) {
    7474                        if (GetLastError() != ERROR_ALREADY_EXISTS)
    75                                 error("Cannot create ScummVM Saved games folder");
     75                                error("Cannot create Pegasus Prime Saved games folder");
    7676                }
    7777
    7878                ConfMan.registerDefault("savepath", defaultSavepath);
  • configure

    diff --git a/configure b/configure
    index 5499cec..b874090 100755
    a b _plugin_prefix=  
    159159_plugin_suffix=
    160160_nasm=auto
    161161_optimization_level=
    162 _default_optimization_level=-O2
     162_default_optimization_level=-Os
    163163# Default commands
    164164_ranlib=ranlib
    165165_strip=strip
  • devtools/credits.pl

    diff --git a/devtools/credits.pl b/devtools/credits.pl
    index 53f0d11..4fdc0db 100755
    a b begin_credits("Credits");  
    10971097                                add_person("Janne Huttunen", "", "V3 actor mask support, Dig/FT SMUSH audio");
    10981098                                add_person("Kov&aacute;cs Endre J&aacute;nos", "", "Several fixes for Simon1");
    10991099                                add_person("Jeroen Janssen", "japj", "Numerous readability and bugfix patches");
    1100                                 add_person("Keith Kaisershot", "blitter", "Several Pegasus Prime patches");
     1100                                add_person("Keith Kaisershot", "blitter", "Several Pegasus Prime patches and DVD additions");
    11011101                                add_person("Andreas Karlsson", "Sprawl", "Initial port for SymbianOS");
    11021102                                add_person("Claudio Matsuoka", "", "Daily Linux builds");
    11031103                                add_person("Thomas Mayer", "", "PSP port contributions");
  • new file dists/pegasus/Info.plist

    diff --git a/dists/pegasus/Info.plist b/dists/pegasus/Info.plist
    new file mode 100644
    index 0000000..4490d1e
    - +  
     1<?xml version="1.0" encoding="UTF-8"?>
     2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     3<plist version="1.0">
     4<dict>
     5        <key>CFBundleDevelopmentRegion</key>
     6        <string>English</string>
     7        <key>CFBundleLocalizations</key>
     8        <array>
     9                <string>en</string>
     10                <string>ca</string>
     11                <string>cs</string>
     12                <string>da</string>
     13                <string>de</string>
     14                <string>es</string>
     15                <string>fr</string>
     16                <string>hu</string>
     17                <string>it</string>
     18                <string>nb</string>
     19                <string>nn</string>
     20                <string>pl</string>
     21                <string>pt</string>
     22                <string>ru</string>
     23                <string>se</string>
     24                <string>uk</string>
     25        </array>
     26        <key>CFBundleDisplayName</key>
     27        <string>ScummVM</string>
     28        <key>CFBundleExecutable</key>
     29        <string>scummvm</string>
     30        <key>CFBundleGetInfoString</key>
     31        <string>1.6.0git, Copyright 2001-2013 The ScummVM team</string>
     32        <key>CFBundleIconFile</key>
     33        <string>pegasus.icns</string>
     34        <key>CFBundleIdentifier</key>
     35        <string>org.scummvm.scummvm</string>
     36        <key>CFBundleInfoDictionaryVersion</key>
     37        <string>6.0</string>
     38        <key>CFBundleName</key>
     39        <string>ScummVM</string>
     40        <key>CFBundlePackageType</key>
     41        <string>APPL</string>
     42        <key>CFBundleShortVersionString</key>
     43        <string>1.6.0git</string>
     44        <key>CFBundleVersion</key>
     45        <string>1.6.0git</string>
     46        <key>NSPrincipalClass</key>
     47        <string>NSApplication</string>
     48        <key>NSHumanReadableCopyright</key>
     49        <string>Copyright 2001-2013 The ScummVM team</string>
     50        <key>SUFeedURL</key>
     51        <string>http://www.scummvm.org/appcasts/macosx/release.xml</string>
     52        <key>SUPublicDSAKeyFile</key>
     53        <string>dsa_pub.pem</string>
     54</dict>
     55</plist>
  • new file dists/pegasus/PegasusPrime.desktop

    diff --git a/dists/pegasus/PegasusPrime.desktop b/dists/pegasus/PegasusPrime.desktop
    new file mode 100644
    index 0000000..a9a2a63
    - +  
     1[Desktop Entry]
     2Name=Pegasus Prime
     3Comment=The epic time travel adventure begins
     4Exec=PegasusPrime
     5Icon=pegasus
     6Terminal=false
     7Type=Application
     8Categories=Game;AdventureGame;
     9StartupNotify=false
  • new file dists/pegasus/debian/README.source

    diff --git a/dists/pegasus/debian/README.source b/dists/pegasus/debian/README.source
    new file mode 100644
    index 0000000..a7252c2
    - +  
     1This project uses a custom build of ScummVM licensed under GNU GPLv2 using
     2revision d04667e58a889e4744f36fb5797a69fa437a1abf. You may obtain the sources
     3from GitHub: https://github.com/scummvm/scummvm (direct link:
     4https://github.com/scummvm/scummvm/archive/d04667e58a889e4744f36fb5797a69fa437a1abf.zip).
     5On top of that revision, it has been patched with the "full_patch.diff"
     6(included in the pegasusprime source tarball) The dists/pegasus directory
     7missing from the patch is also included in the pegasusprime source tarball.
     8
     9This is a cutdown ScummVM build because Pegasus Prime does not need many of the
     10usual features of ScummVM.
  • new file dists/pegasus/debian/changelog

    diff --git a/dists/pegasus/debian/changelog b/dists/pegasus/debian/changelog
    new file mode 100644
    index 0000000..c681a98
    - +  
     1pegasusprime (1.0-5) unstable; urgency=low
     2
     3  * Minor bugfix release
     4
     5 -- Keith Kaisershot <archives@thejourneymanproject.com>  Mon, 10 Mar 2014 13:29:11 -0800
     6
     7pegasusprime (1.0-4) unstable; urgency=low
     8
     9  * Minor bugfix release
     10
     11 -- Keith Kaisershot <archives@thejourneymanproject.com>  Sun, 09 Mar 2014 18:18:45 -0800
     12
     13pegasusprime (1.0-3) unstable; urgency=low
     14
     15  * Minor bugfix release
     16
     17 -- Keith Kaisershot <archives@thejourneymanproject.com>  Thu, 27 Feb 2014 10:05:56 -0800
     18
     19pegasusprime (1.0-2) unstable; urgency=low
     20
     21  * Minor bugfix release
     22
     23 -- Keith Kaisershot <archives@thejourneymanproject.com>  Mon, 24 Feb 2014 18:15:56 -0800
     24
     25pegasusprime (1.0-1) unstable; urgency=low
     26
     27  * Initial release
     28
     29 -- Keith Kaisershot <archives@thejourneymanproject.com>  Tue, 31 Dec 2013 15:44:53 -0600
  • new file dists/pegasus/debian/compat

    diff --git a/dists/pegasus/debian/compat b/dists/pegasus/debian/compat
    new file mode 100644
    index 0000000..7f8f011
    - +  
     17
  • new file dists/pegasus/debian/control

    diff --git a/dists/pegasus/debian/control b/dists/pegasus/debian/control
    new file mode 100644
    index 0000000..0362061
    - +  
     1Source: pegasusprime
     2Section: games
     3Priority: optional
     4Maintainer: Keith Kaisershot <archives@thejourneymanproject.com>
     5Build-Depends: debhelper (>= 7.0.50~), autotools-dev
     6Standards-Version: 3.8.4
     7Homepage: http://www.thejourneymanproject.com
     8
     9Package: pegasusprime
     10Architecture: any
     11Depends: ${shlibs:Depends}, ${misc:Depends}
     12Description: time travel adventure game
     13 Experience the origin of the Journeyman Project series in this "director's
     14 cut" remake of the award-winning time travel adventure game with greatly
     15 enhanced animation and sound. As Agent 5 of the Temporal Protectorate, you
     16 must explore across centuries for clues to a sinister mystery as Earth's
     17 future hangs in the balance.
  • new file dists/pegasus/debian/copyright

    diff --git a/dists/pegasus/debian/copyright b/dists/pegasus/debian/copyright
    new file mode 100644
    index 0000000..2fa382e
    - +  
     1Pegasus Prime was debianized by Keith Kaisershot <archives@thejourneymanproject.com> the 31st Dec 2013.
     2
     3Upstream Authors: see `/usr/share/doc/scummvm/AUTHORS'.
     4
     5ScummVM is Copyright © 2002-2013 The ScummVM Project
     6
     7 This program is free software; you can redistribute it and/or modify it
     8 under the terms of the GNU General Public License as published by the
     9 Free Software Foundation; either version 2, or (at your option) any
     10 later version.
     11
     12 On Debian GNU/Linux systems, the complete text of the GNU General
     13 Public License can be found in `/usr/share/common-licenses/GPL'.
     14
     15This copyright also applies to the Debian-related build scripts.
     16
     17Some parts of ScummVM (the mt32 softsynth code) is covered by a more
     18permissive BSD-style license:
     19
     20 * Permission is hereby granted, free of charge, to any person obtaining a copy
     21 * of this software and associated documentation files (the "Software"), to
     22 * deal in the Software without restriction, including without limitation the
     23 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
     24 * sell copies of the Software, and to permit persons to whom the Software is
     25 * furnished to do so, subject to the following conditions:
     26 *
     27 * The above copyright notice and this permission notice shall be included in
     28 * all copies or substantial portions of the Software.
     29 *
     30 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     31 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     32 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     33 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     34 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     35 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
     36 * IN THE SOFTWARE.
  • new file dists/pegasus/debian/docs

    diff --git a/dists/pegasus/debian/docs b/dists/pegasus/debian/docs
    new file mode 100644
    index 0000000..c73c810
    - +  
     1AUTHORS
     2COPYRIGHT
     3README
     4TODO
     5NEWS
  • new file dists/pegasus/debian/menu

    diff --git a/dists/pegasus/debian/menu b/dists/pegasus/debian/menu
    new file mode 100644
    index 0000000..bf946ff
    - +  
     1?package(pegasusprime):needs="x11" section="Games/Adventure" \
     2  title="Pegasus Prime" command="/usr/games/PegasusPrime" \
     3  icon="/usr/share/icons/pegasus.xpm"
  • new file dists/pegasus/debian/rules

    diff --git a/dists/pegasus/debian/rules b/dists/pegasus/debian/rules
    new file mode 100755
    index 0000000..5f72554
    - +  
     1#!/usr/bin/make -f
     2
     3%:
     4        dh $@
     5
     6override_dh_auto_configure:
     7        ./configure --prefix=/usr --bindir=/usr/games --datadir=/usr/share/PegasusPrime --docdir=/usr/share/doc/pegasusprime --disable-all-engines --enable-engine=pegasus --enable-optimizations --enable-keymapper --disable-eventrecorder --disable-mt32emu --disable-alsa --disable-bink --disable-faad --disable-flac --disable-fluidsynth --disable-mad --disable-png --disable-timidity
     8
     9override_dh_auto_test:
     10
     11
     12
  • new file dists/pegasus/debian/source/format

    diff --git a/dists/pegasus/debian/source/format b/dists/pegasus/debian/source/format
    new file mode 100644
    index 0000000..163aaf8
    - +  
     13.0 (quilt)
  • new file dists/pegasus/pegasus.xpm

    diff --git a/dists/pegasus/pegasus.icns b/dists/pegasus/pegasus.icns
    new file mode 100644
    index 0000000..83a4351
    Binary files /dev/null and b/dists/pegasus/pegasus.icns differ
    diff --git a/dists/pegasus/pegasus.ico b/dists/pegasus/pegasus.ico
    new file mode 100644
    index 0000000..d523358
    Binary files /dev/null and b/dists/pegasus/pegasus.ico differ
    diff --git a/dists/pegasus/pegasus.xpm b/dists/pegasus/pegasus.xpm
    new file mode 100644
    index 0000000..d967ede
    - +  
     1/* XPM */
     2static const char *pegasus_icon[] = {
     3/* columns rows colors chars-per-pixel */
     4"256 256 256 2 ",
     5"   c #010101",
     6".  c #0B0301",
     7"X  c #010B01",
     8"o  c #0B0B02",
     9"O  c #02010B",
     10"+  c #0B030B",
     11"@  c #060A0B",
     12"#  c #130301",
     13"$  c #1B0301",
     14"%  c #130B02",
     15"&  c #180B07",
     16"*  c #061403",
     17"=  c #171504",
     18"-  c #020113",
     19";  c #090516",
     20":  c #150916",
     21">  c #171618",
     22",  c #0A1415",
     23"<  c #240301",
     24"1  c #2C0200",
     25"2  c #270B03",
     26"3  c #330300",
     27"4  c #3B0300",
     28"5  c #340C01",
     29"6  c #3B0B01",
     30"7  c #38090B",
     31"8  c #2C1400",
     32"9  c #261703",
     33"0  c #331300",
     34"q  c #3B1300",
     35"w  c #371A03",
     36"e  c #261717",
     37"r  c #310E17",
     38"t  c #18280A",
     39"y  c #282703",
     40"u  c #372702",
     41"i  c #2F2C11",
     42"p  c #050225",
     43"a  c #170526",
     44"s  c #16112D",
     45"d  c #261627",
     46"f  c #2D1231",
     47"g  c #2F282D",
     48"h  c #1C202A",
     49"j  c #470902",
     50"k  c #560A03",
     51"l  c #441401",
     52"z  c #4B1B00",
     53"x  c #481702",
     54"c  c #531C00",
     55"v  c #591704",
     56"b  c #4F1216",
     57"n  c #661906",
     58"m  c #661B15",
     59"M  c #73170C",
     60"N  c #492702",
     61"B  c #542300",
     62"V  c #5B2300",
     63"C  c #592A02",
     64"Z  c #493502",
     65"A  c #583803",
     66"S  c #4E2D16",
     67"D  c #632C01",
     68"F  c #692605",
     69"G  c #762906",
     70"H  c #683602",
     71"J  c #773603",
     72"K  c #6B2517",
     73"L  c #782916",
     74"P  c #723618",
     75"I  c #4E132D",
     76"U  c #6E192D",
     77"Y  c #502D2D",
     78"T  c #732D2A",
     79"R  c #374619",
     80"E  c #564606",
     81"W  c #694703",
     82"Q  c #784703",
     83"!  c #764816",
     84"~  c #705208",
     85"^  c #776B07",
     86"/  c #77492D",
     87"(  c #5D532A",
     88")  c #12044D",
     89"_  c #2E104C",
     90"`  c #332A4D",
     91"'  c #310E6D",
     92"]  c #22156A",
     93"[  c #4F1250",
     94"{  c #772C4F",
     95"}  c #5D2264",
     96"|  c #6B5354",
     97" . c #3A474B",
     98".. c #873904",
     99"X. c #852A19",
     100"o. c #863719",
     101"O. c #913209",
     102"+. c #AD3503",
     103"@. c #872A26",
     104"#. c #8A3626",
     105"$. c #96392B",
     106"%. c #963736",
     107"&. c #8B2D34",
     108"*. c #A33D2F",
     109"=. c #871A0F",
     110"-. c #874902",
     111";. c #974904",
     112":. c #895602",
     113">. c #965902",
     114",. c #904B18",
     115"<. c #A75703",
     116"1. c #B05009",
     117"2. c #996602",
     118"3. c #8E6D07",
     119"4. c #A56903",
     120"5. c #B86803",
     121"6. c #A97506",
     122"7. c #B77804",
     123"8. c #AF7316",
     124"9. c #95452A",
     125"0. c #984937",
     126"q. c #8E492C",
     127"w. c #A6452B",
     128"e. c #A64533",
     129"r. c #B64F2E",
     130"t. c #B06D2D",
     131"y. c #8D6D2F",
     132"u. c #C8540B",
     133"i. c #C66904",
     134"p. c #C87702",
     135"a. c #D67903",
     136"s. c #D1700F",
     137"d. c #E67903",
     138"f. c #F17105",
     139"g. c #C95626",
     140"h. c #CD562D",
     141"j. c #D0712D",
     142"k. c #E95F15",
     143"l. c #92314D",
     144"z. c #93306F",
     145"x. c #A33365",
     146"c. c #984B4B",
     147"v. c #A64F52",
     148"b. c #95476F",
     149"n. c #AB506F",
     150"m. c #A76C59",
     151"M. c #D2645D",
     152"N. c #C13800",
     153"B. c #B6870D",
     154"V. c #A6950F",
     155"C. c #C88603",
     156"Z. c #D88703",
     157"A. c #D1920D",
     158"S. c #E68803",
     159"D. c #E99702",
     160"F. c #F99902",
     161"G. c #F39011",
     162"H. c #D7AC05",
     163"J. c #FEA401",
     164"K. c #FEAB00",
     165"L. c #F7A705",
     166"P. c #FEB400",
     167"I. c #FFBB00",
     168"U. c #F9B808",
     169"Y. c #FEA916",
     170"T. c #FEB718",
     171"R. c #E8AC05",
     172"E. c #CE8B2E",
     173"W. c #EB942A",
     174"Q. c #FBB32E",
     175"!. c #DCAC2B",
     176"~. c #FFC400",
     177"^. c #FECB00",
     178"/. c #FAC708",
     179"(. c #FED400",
     180"). c #FFDB01",
     181"_. c #FAD808",
     182"`. c #FFC719",
     183"'. c #F7D411",
     184"]. c #FFE400",
     185"[. c #FFEB00",
     186"{. c #FBE609",
     187"}. c #FFF300",
     188"|. c #FFFE00",
     189" X c #FDF508",
     190".X c #FDEA16",
     191"XX c #FFC728",
     192"oX c #FFD82A",
     193"OX c #FFC737",
     194"+X c #FFD535",
     195"@X c #EBCF2C",
     196"#X c #FEE92E",
     197"$X c #D6CA06",
     198"%X c #AA9361",
     199"&X c #FBB44C",
     200"*X c #E3985E",
     201"=X c #FECB4D",
     202"-X c #FECF73",
     203";X c #FFE96E",
     204":X c #FCE855",
     205">X c #320A90",
     206",X c #3509AE",
     207"<X c #211698",
     208"1X c #591FA0",
     209"2X c #6A51A6",
     210"3X c #3407D0",
     211"4X c #3106F9",
     212"5X c #2623E7",
     213"6X c #4F0EFA",
     214"7X c #6E14FD",
     215"8X c #712FFA",
     216"9X c #5B22DA",
     217"0X c #6A52EA",
     218"qX c #962F8C",
     219"wX c #A230A3",
     220"eX c #AE528E",
     221"rX c #AF50AF",
     222"tX c #A25A9A",
     223"yX c #CF5F9E",
     224"uX c #A735D0",
     225"iX c #8B19FE",
     226"pX c #8C36F6",
     227"aX c #B737FE",
     228"sX c #AB33F9",
     229"dX c #9A2ADA",
     230"fX c #CA35FE",
     231"gX c #E039E4",
     232"hX c #B352CE",
     233"jX c #954BF6",
     234"kX c #B14FF7",
     235"lX c #A357D9",
     236"zX c #CF52CF",
     237"xX c #CF50FC",
     238"cX c #FD5AFF",
     239"vX c #EC50FC",
     240"bX c #D36CFB",
     241"nX c #FE67FF",
     242"mX c #FD77FE",
     243"MX c #E86FFB",
     244"NX c #D868D0",
     245"BX c #C92FAB",
     246"VX c #FDB394",
     247"CX c #FDB3AC",
     248"ZX c #E3929D",
     249"AX c #FFCD8F",
     250"SX c #FEEE8A",
     251"DX c #FFCAAA",
     252"FX c #FFEDAD",
     253"GX c #FF86FE",
     254"HX c #FF97FF",
     255"JX c #F491E9",
     256"KX c #FEB1FA",
     257"LX c #F9A7D0",
     258"PX c #FFC7D8",
     259"IX c #9E9595",
     260"UX c None",
     261/* pixels */
     262"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     263"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     264"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     265"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     266"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     267"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     268"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     269"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     270"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     271"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     272"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     273"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& = = = > = > t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     274"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXg g i i e w 9 2 8 8 8 0 w 9 9 e e h g ` ` ` ` `  .` UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     275"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> g g Y ` Y Y b l q 0 7 5 5 2 1 3 1 7 q q l 7 S I Y `  .`  . .<X .<X`  .UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     276"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXe e i S S Y S Y r 5 < 1 < < < < # # # # % 3 k k k x j x j x r i e ` ` ` `  . . .` R UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     277"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> i i S S S b q 5 3 1 < # % # . . . . .       . 7 M k k k j j k k k k k c b w i g R g g g t > t > UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     278"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> e i S b x 6 7 3 < $ . . .       O       O     O   . b &.&.=.M n n M M n k n k v k k k j r r 9 e = % o * o o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     279"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> g S S c x j 1 2 # . #             O   O   O   O O     . I &.l.l.&.@.@.@.L X.X.K F n k k j j 4 3 1 5 & % % % @ o o o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     280"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXe i S S b j 4 < # . .     .           O     O O   O   O O   . b { %.&.&.#.@.#.&.@.@.@.L L K n n n v k j 5 < < $ # # . . o o * UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     281"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXe i Y S k k 3 < # .   O   O   O     O O O     O       O O O . . : Y &.&.%.@.@.#.&.&.&.#.#.#.@.@.#.#.T L L K n k j 3 1 < $ % o o * * o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     282"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& e i b x j 3 $ .         O O O     O O     O O     O   O O O O O @ : I l.&.#.&.#.&.#.$.$.#.#.o.#.#.#.#.@.@.L L L m n k j 3 3 < # . @ o * = t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     283"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX% e e w b j 4 < # . O                 O       O     O O   O   O O + + . & Y %.%.%.%.%.$.%.$.#.#.$.#.#.#.o.L X.X.L L L L L K v v j 1 1 # # o * = t t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     284"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& e 2 7 j 4 1 #   .           O     O   O   O     O O     O O O O O ; + & > T l.v.e.e.e.9.9.$.$.$.9.#.#.#.#.#.#.#.#.X.L L L L K K n v 6 1 < # % = t i R t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     285"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo > 9 5 4 4 1 $ . O     O     O   O   O   O   O O     O   O   O   O O O + + & & T n.M.M.m.v.0.w.w.9.w.9.$.9.9.9.9.#.#.#.#.o.#.X.L =.M L K F k 4 1 < = t t y R R > UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     286"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX% e 2 5 j 3 $ .     O       O     O     O   O O     O     O         O     o & % e q.*XCXVXVX*X*X*X*Xt.h.r.r.0.q.#.$.#.#.o.@.o.o.o.o.X.L L L K n v j 4 1 & = t t y t * UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     287"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& > 1 4 4 1 # .             O     O   O     O     O O                   O X @ + & e 0.VXFXDXAX;X;X;X:X;X-XVX*X*XM.r.e.w.#.$.#.#.o.o.o.X.o.L K L G n F c j 1 < 9 t t t t t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     288"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX & 2 5 4 4 < .   O         O O   O O   O   O O   O                     O   @ X % > & 9 0.VXFXFX;X;X;X;X:X:X;X;X;X;X-X&X*X*Xe.,.w.9.$.O.o.o.#.L G L L G K m v j 4 1 $ o t t t t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     289"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo & r 7 4 3 $ .   O   O     O       O       O O   O                       X   X o @ > & e 0.AXDXDXSX-XSX;X;X;X;X:X;X:X:X:X-X-XVX*Xh.w.$.O.o.#.X.L L L L L G K F n v 4 < # * t t R t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     290"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX@ > r l j 3 $ .       O     O   O   O   O O                                     X X + > & w c.VXPXFXAX;XSXAX;XSX-X-X-X;X-X:X:X=X;XDXVXM.v.*.$.#.o.@.#.o.X.L L K G F F c j 1 % = * t t t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     291"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> d I b j 3 #       O O   O O   O       O   O                               X X O @ @ , & e i v.CXPXPXAXAX-XAXAXSXAXSX-X-X:X=X=X:X:X-XPXPXCXZXr.#.o.o.#.P P X.L L F K K K v l < $ * * t t t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     292"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX: f I r j 3 $ . O           O   O O   O O                                     @   @ @ , , > > e c.CXPXPXDXSXSXAXSXDXAXSXAX-X-X-X-X-X-X=XDXKXKXPXCX*Xg.,.#.#.#.L P X.G K m G K V x 3 2 o * t t t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     293"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX: d g I 7 4 $ O O O O O O   O         O                                           @ @ , , > > h i c.CXPXPXDXAXDXAXAXAXAXAXAXAX-X-XAX-X-X-X;XPXKXKXPXVXVXE.w.o.#.o.o.L L L K F n n n x 1 $ * * * * * UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     294"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& 2 r 7 j 1 # . O O O   O O       O O O                                   O     @ @ , , , , h > e r c.ZXKXCXDXAXAXAXAXAXDXAXDXAXAXAXAXVX-X-X-XCXLXCXAX-X-XVX*Xg.O.#.X.X.o.L P L n n n v q 1 #   @ X X   UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     295"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX% & e 7 4 4 $ O O O O O   O   O O O O                                         @ @ , @ , , , , , > e i v.JXKXPXDXDXDXFXDXDXAXDXDXDXDXAXAXAX-XAX-XAXAXVXAX-X-X-XVX-X*X$.X.@.@.P L L L K n m m x 1           X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     296"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX & < 1 4 3 <   O   O O O O O O     O                                       X   @ , , , - @ , , , , e g n.JXJXDXDXDXDXDXAXAXDXAXAXDXDXDXAXAXAXAXVX-X-XVX-XVXVXAX-X-X-X*Xr.=.@.P L T L K K m V v x $             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     297"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX: 2 1 3 j < . O O O O O O O     O O O                                     O @ @ , , , @ @ @ , , > > h g qXGXKXCXDXDXDXFXDXPXDXVXVXVXDXDXDXCXAXAXAX-X-X-X-X-XVX-XVX-XVXDXVXv.O.L #.T L L K F m n v j #             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     298"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& & < 4 j 3 # O O O O O O O O O O O                                       O @ @ , @ , @ O - , h > d h d f rXGXKXLXPXPXPXPXPXPXPXDXCXCXVXDXCXDXDXAXAXAX-X-XVX-XVXAXVXAXCXCXJXLXM.=.X.@.P X.L K K n n v 7 X             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     299"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& e & 1 j 4 # O - O O O O O   O O O O                                     O @ @ @ , @ O O O , s h h g g g Y tXGXKXKXKXKXPXKXKXKXKXKXPXDXVXVXDXVXAXVXAXAXAXAXVXVXVXDXDXLXPXKXKXHXJXyX@.o.T L P L m m v v x <               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     300"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& 2 5 4 4 < O O - O O O O O O O O O                                     O - @ @ @ ; O @ , : h h ` ` ` g g g rXGXHXKXKXKXKXKXKXKXKXKXPXPXDXVXDXDXDXDXVXDXDXDXDXDXDXCXLXPXKXKXHXHXGXmXyX&.L L L L K m m v v j .           @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     301"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& 2 5 j j 1 . O O O O O O O O O O                                   O O O O @ @ @ @ - - + @ , s g h ` g g g I tXGXKXPXPXPXPXPXPXKXKXKXKXLXCXCXCXCXCXDXCXCXCXPXPXLXLXPXKXKXKXHXGXGXGXGXmXzX{ U T T K K K m v v 5               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     302"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& & 1 4 j 4 # O - - - O O - - O O O                               O O O O O O @ @ @ + - @ ; @ @ , e d d g g g g b.LXPXPXFXDXDXDXPXPXPXKXKXKXLXCXVXZXCXCXCXLXLXKXKXKXKXKXKXKXHXGXGXGXGXGXHXGXzX{ L T L L K m n v k 2 X           UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     303"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& < 1 4 4 < . - - - - O O O O - - O                                   O   O O @ O - + + + @ @ @ + , > d e d I Y l.ZXIX*XVXAXFXDXDXFXDXDXPXPXKXLXCXVXVXCXCXCXPXLXKXKXKXKXKXHXGXGXGXGXGXHXGXGXmXrXT L U K K m m n v j .           @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     304"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX: & 2 3 4 1 # O - - - - O - O - O O                             O O O O O @ + + O @ + @ . . @ : > f I Y { { c.c.v.n.b.Y T T c.%XZXVXAXAXAXDXDXDXCXCXVXVXVXVXVXCXCXPXKXKXHXHXGXGXHXHXHXHXHXHXHXGXmXx.L L K K m m v v v 5 O             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     305"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo & < 1 3 3 $ O p p p - - - - O O O                             O O O O O + @ + ; @ + .   o d Y { c.n.n.M.M.M.M.j.M.tX9X} g d e I Y P / 0.%X*XAXAXAXVXVXZXZXZXVXZXVXVXPXKXHXHXGXHXHXHXHXHXHXHXHXGXGXNX@.L K T K m m v v k $             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     306"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX: & 1 1 4 1 O - p p p - - - - - O O                         O @ O O O @ @ + + O O % + + r T b.n.n.M.M.M.M.M.M.j.j.M.uX8X2X_ a : : 2 & r r S / y.*XVXVXVXVXVXZXZX*XZXVXZXJXmXHXHXHXHXKXHXHXHXHXHXHXmXnXeX@.T T K m m v v v 6               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     307"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX+ & 2 1 3 3 < O p p p p - p - - p O                         X @ - O O @ + @ O + + . . : Y c.BXM.M.M.M.M.j.k.h.k.h.j.h.rX8X9X) ; : : : : d f e 9 r S 0.*XAXAXVX*X*XM.*X*X*XZXJXGXHXHXHXHXKXHXKXHXHXHXGXnXvXl.L T K K m m v v x #             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     308"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& < 1 3 4 1 # p p ) p p p p p p -                         O O , - O O + ; + @ : # + f c.yXyXM.h.h.h.h.h.h.h.j.h.j.h.M.rXpX1X_ a : : a > a : > > e e w b 0.*XVXZX*X*XM.M.M.M.JXGXHXHXHXHXKXHXKXHXHXGXGXmXnXzXU L U U K m k v v 5 .             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     309"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX: & 2 3 4 4 $ + p p p p p p p p - O                         @ ; - O O O @ + + . # d l.M.yXyXM.M.h.h.u.u.k.h.h.h.h.h.g.h.eXpX1X_ : & : > : : : : : : : > : r m v.M.ZXyXZX*XM.k.yXmXGXHXHXHXHXHXHXHXHXHXGXGXmXcXrXT M K K m m n v k #           @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     310"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX% : < 1 4 1 + : ) ) ) p ) p p p O                         O O - O . O + . . O + Y v.yXyXM.M.h.h.h.h.h.h.k.h.h.h.h.h.g.r.qX8X1X_ : + : : + + : : + : : & : : & < Y M.LXNXZXyXM.M.NXnXGXJXHXHXHXHXHXHXGXGXGXmXmXvXl.m m K m m v v b 2               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     311"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX+ 2 1 1 4 1 : p ) ] ) p p p p p O                         O O O +   O     O & / yXyXM.h.h.h.h.N.h.h.N.g.h.h.h.h.h.g.g.t.b.dX1X) ; + ; ; ; ; + + + + + + : & : & & Y M.JXJXNXNXyXyXNXmXmXGXHXHXHXGXHXGXHXGXmXnXnXwXU K m m m m v v 6 .             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     312"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. % $ 1 1 3 < a ) ] ) ) ) ) ) p p O                         O O O     . .   2 x.yXyXM.M.k.h.h.h.N.N.h.h.h.g.g.h.h.h.g.g.t.b.dX1X_ - . + ; ; O O . + . O + & + & : + : b b.MXGXNXNXyXyXvXnXmXmXGXGXGXGXGXGXGXmXmXnXvXl.m m m m m m n x <               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     313"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& $ < < 3 3 $ ) <X<X] ) ) ) p p p                         O O O   O . . O r v.yXM.M.h.h.h.g.r.h.h.h.h.N.h.g.h.k.h.h.g.g.r.qX2X1X] - O . ; - O O   O O . + + + : + & & e d z.mXGXMXzXzXzXxXnXnXmXmXGXGXmXGXGXmXmXnXnXx.U K m m m v v v 3               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     314"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX# # < 1 4 1 : <X<X<X) ] ) ) ) ) -                           O O . O   O 2 v.yXyXn.g.g.g.g.g.g.g.r.g.g.N.g.g.g.h.h.h.g.s.r.b.dX1X_ ;   + ; O O O     O O   O + + : : > > e d tXmXmXMXzXrXhXxXvXnXnXmXmXmXmXmXmXmXmXnXBXU T U m m m v v 6 .             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     315"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX# & $ 7 7 r 7 _ 3X3X<X<X] ] ) ) p -                             O . .   < x.M.BXh.h.g.r.r.r.r.g.r.g.g.g.g.u.s.g.g.h.h.j.g.r.qX2X1X) -   O O O O           O O . + + ; : @ > > g zXGXmXMXzXrXhXxXvXcXnXnXmXmXmXmXnXmXnXgX{ K K m m m n v j $               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     316"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX: d f f [ I _ >X4X4X<X<X<X] ] ) ) O                               . # # { M.eXM.h.r.r.r.r.h.h.r.r.h.r.g.g.g.g.g.g.g.h.g.g.r.eX9X1X_ -   O O O O O             O O O ; ; > > e > [ NXmXMXNXhXhXuXkXvXcXcXnXnXnXnXnXnXcXcXqXm m m m m m b x 3 .           @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     317"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX: g ' ' [ U [ 3X4X4X5X<X<X] <X) p -                             . . . I n.n.v.r.r.r.r.r.r.r.r.r.g.r.N.r.g.r.u.g.g.u.g.u.g.t.b.uX1X_ - O O - O O O               . O @ , > e > > h } mXmXvXzXrXuXkXfXvXvXcXcXcXcXnXnXcXcXBXU K m m m v v v l .             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     318"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX > <X,X,X>X[ ] 3X4X4X4X3X<X<X<X) p O                           O .   j x.n.M.r.r.r.r.r.r.r.r.r.r.r.h.r.r.g.N.r.u.N.g.g.g.u.r.qX0X1Xf - O O - O O                   O @ , , > h h > > 2XmXnXNXyXwXrXaXaXvXvXvXcXcXcXcXcXcXgX} m m m m v v v l # O           UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     319"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX, ) 9X0X9X1X1X<X5X4X4X4X4X3X<X<X) p - O                         . # # @.yXx.v.e.*.*.r.x.h.v.r.r.r.r.r.r.r.g.r.1.r.r.g.r.1.r.r.b.dX1Xf O   O O O O O         O O   O   @ , > > h > , > f hXmXnXzXeXwXuXsXxXxXvXcXcXvXcXvXvXgXqXY m m m m v v l < O             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     320"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXs <X5X5X8X9X,X,X3X4X4X4X4X4X<X<X) p - O   O                   .   $ b x.M.v.r.*.*.r.e.h.v.r.r.r.r.r.w.r.N.r.r.r.r.N.r.1.r.1.r.b.dX1X_ O   O O O O O               @ @ @ * t , > h d h g } MXnXzXBXeXwXuXaXfXxXvXvXvXvXvXvXsXqXU m m m b v v k < .             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     321"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX) <X8X0X5X3X} ,X4X4X4X4X4X4X4X<Xp - - O O O                     O 7 l.n.v.r.e.r.*.e.r.*.e.e.r.e.r.r.r.r.r.r.*.N.r.r.r.r.+.1.w.b.1X1X_ . O O O     O           O O O X @ * , , > i h d d _ uXnXvXzXrXqXuXkXaXfXfXgXvXvXgXfXuXqXm m m m m v v x 5               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     322"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXp ] 5X0X8X,X} [ ,X4X4X4X4X4X4X4X,Xp - - O O                   .     b n.eXh.e.e.*.e.e.e.e.r.v.e.e.r.e.r.w.r.w.r.e.w.r.w.w.1.+.w.z.1X1X) * X O O O     O           O O @ X * * , t h h i h h 1XvXvXzXhXwXwXuXaXkXfXfXvXfXfXfXdXwXU m m m m b v k 5               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     323"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXs ] 0X5X>X_ I _ ,X4X4X4X4X4X4X4X3X) p - O O O                     . &.eXqXr.r.*.*.e.e.e.e.e.e.e.e.e.e.r.r.r.w.r.e.r.+.w.r.w.w.O.z.1X1X_ O   O - O O O       O       O   X @ , , t h g g h h ' kXvXxXhXwXwXuXsXaXfXfXxXfXfXfXsXwXT m m m v v v v 5 .             X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     324"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXp ` ' ' f 7 7 _ ,X4X6X4X4X4X4X4X3X) - - - O O                 . O $ x.rXx.r.e.e.e.r.*.e.e.e.e.e.e.e.e.e.*.w.w.w.w.w.r.w.w.w.O.w.{ 1X1Xh O   . O O O   O O             X @ @ * * , e g h d h ` dXvXgXzXwXuXuXsXaXfXfXfXfXfXaXaXwXU m m b b v v v 6 .               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     325"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX, > e : < 7 j _ ,X6X6X6X4X4X4X4X5X) - - O O O                 . . b eXeXx.*.*.*.e.*.e.e.*.e.e.e.e.*.w.w.e.e.w.w.w.w.w.w.w.w.O.O.l.1X1Xh O . . O O                 O O X @ * , * , t g t h g f wXfXvXuXuXuXuXsXaXaXaXfXaXfXfXfXwX{ m m m m v v x 6 #             @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     326"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& & # $ 1 7 7 ' ,X6X6X6X4X6X4X4X4X) p - - O O O                 # { BXeX*.*.*.w.*.*.e.e.e.e.e.0.e.%.e.w.e.w.w.w.e.9.9.w.$.o.O.#.| } 1X_ + . . O O O   O           O   O   * * , , t t i h g f } zXxXdXwXuXsXaXsXaXfXfXsXfXsXfXdX{ m m m v m v x q <               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     327"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. & $ 2 r r 7 ' ,X6X7X6X6X4X6X4X3X) - p - - O                 . # l.eXn.*.+.*.w.w.*.e.*.*.e.e.e.%.e.%.e.e.$.9.w.w.w.e.9.$.O.O.#.{ 1X1X_ + . . +     O   O         O       @ * * , t g h g g g ` uXxXuXdXdXsXaXfXfXfXiXfXfXfXfXBX{ m m n b v v v x 1           O   UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     328"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo & 2 2 r r I ' ,X9X6X6X6X4X4X4X4X] - - O - O                   < x.yXx.*.$.*.*.*.e.e.*.e.0.e.0.e.9.e.9.9.e.e.9.e.9.9.w.r.t.w.,.{ 1X>Xs # . . + . O           O         X @ @ * t , g h h g h _ wXpXuXrXdXaXsXaXsXfXsXfXfXfXfXdXU v m b n v v x x 1       X   X   UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     329"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. & < 2 r I I ' 3X6X7X6X6X6X6X4X4X) - p - O O           .     . 7 n.BXM.*.+.*.*.e.e.$.e.$.e.e.w.e.e.$.w.e.w.9.$.$.9.e.t.j.E.E.5.,.` ' e = & # . @   O   O               X @ * * , t t h g h h _ 1XdXuXuXsXsXaXaXaXsXsXfXfXiXsXdXU m m m m V v c x 0 o   X     X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     330"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX@ & < 2 r r [ ,X6X6X6X7X6X6X4X6X4X) - - - - O O           .     I eXyXx.*.+.*.*.*.*.%.*.e.e.e.%.*.9.e.$.9.e.9.e.w.r.j.E.E.A.S.Z.<.@.K B q 2 $ .       .     O             @ * * * t t h g h h f } dXdXuXsXsXaXaXaXsXsXfXsXsXdXz.T m m v v v v c c l = * X X X     UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     331"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo & 2 < r I [ 1X6X6X7X6X6X6X6X4X4X) - p - O O             .   . I eXBXv.*.O.w.*.*.*.e.$.*.$.e.$.%.*.$.e.$.9.9.w.g.s.S.S.S.G.L.L.Z.i.1.O.n 6 & . .     O   O             X X X * , t t h g g h ` z.wXuXsXaXaXaXaXaXsXaXiXfXdXz.U m m m m n v c v c u y * * * X X   UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     332"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. & 2 e r I I 1X3X7X7X6X7X6X6X6X4X) p - - - - O         .   . . U BXyXx.*.O.$.*.*.e.$.*.*.*.$.e.e.$.e.$.$.w.w.g.s.S.S.a.S.K.~.(.~.I.D.a.1.=.j $ # .   O             O   X @ * * * > t g h g h f 1XwXwXsXaXsXsXfXfXsXsXsXdXz.&.U m m m V V v v c B u y t = * * o @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     333"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX# > 2 2 e b I [ ,X6X7X7X7X6X6X7X4X<Xp p - - - O           .     k yXzXn.*.O.$.*.$.%.*.*.$.*.*.$.e.$.$.9.$.,.r.s.a.d.a.Z.J.^._.).).(.(.^.J.k.O.k 1 & .                 O O X X * * t t h g g s _ 1XwXuXdXsXsXaXsXsXfXiXdXqX&.@.M m F m m v v v c c Z y y y y = * + UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     334"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX+ & e r r e I [ ' 3X7X7X7X6X6X6X6X,Xp p p - O O           .     j eXzXM.*.=.$.*.*.$.%.*.$.$.$.%.$.$.$.$.*.w.u.s.i.u.S.F.~.).).).(.(.^.^.~.Q.g.=.k 1 + O . O           O   X * * * t > i g h h _ 1XrXwXdXaXaXaXaXfXiXuXqXl.&.@.K m S n V n v V n V u u y y y y *   UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     335"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo : e r : r I [ [ ,X7X7X6X7X6X6X6X3X) p - - O O         .       7 x.zXyX*.+.$.$.$.*.$.$.*.*.$.$.$.$.$.$.*.w.u.5.1.s.F.K.~.).).).).^.(.~.Y.G.u.=.M j $ ; O                 X X X * , t h h g g f } wXdXsXsXsXsXsXiXdXx.z.l.&.U U m F n n V v F F V u u y y R y *   UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     336"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX@ & e 2 & & r I I >X6X7X7X6X7X6X6X4X<X- p - - - O             . < l.BXyXx.=.*.*.*.*.$.$.%.$.$.$.$.$.$.$.*.,.;.O.O.i.D.L.U.(.).).(.^.~.P.W.t.,.G M k r ; O                 X X * o t t h h h e r z.wXuXsXsXsXsXsXwXz.l.l.&.U =.M m m V v c n G J Z u Z y y y y t O UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     337"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX & = & # # $ r [ 1X7XiX7X7X6X6X6X6X,Xp - O - -   O     .     O $ l.zXzXe.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.$.O.G n n J 7.H.U.^.(.).(.~.P.W.j.0./ T m k 7 a O                   X * * > t t t e e g { qXwXsXjXsXdXwXx.z.l.l.U =.U U F F n V v F J J A u y u Z y y t X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     338"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX@ o # & # $ $ r [ 1XiX7X7X7X6X6X6X6X4X) O - - - O O     .       . I zXyXx.&.$.&.$.$.@.$.$.$.$.$.$.$.%.$.$.o.G k l N W 3.A.I.^.).^.U.D.8.q.| | } U b 7 ; O                   X X * = t t t > > I &.x.BXiXsXdXqXx.l.l.&.&.@.L K n F F n n n F ..Q H Z u u u y y = UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     339"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX  @ % # # $ < 2 [ dX7XiX7X7X7X6X7X6X4X,X- - - - O O O   O O O .   r BXzXn.*.$.#.@.%.&.&.$.$.$.$.$.$.$.$.#.X.n j 0 9 u N Q H./.(.(.U.Z.,.T Y } } I k 7 : O                 X X X * , > h > > h U l.qXwXdXuXqXl.l.l.l.U =.L K m F F n V V F J ..Q A Z Z N u u y = UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     340"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX@ . # $ $ < 5 I 1X9X7X7X7X6X6X6X6X6X4X) - - - O O O     O .     # l.zXBXv.$.#.@.$.$.$.$.%.%.$.$.%.$.$.#.X.n j 8 9 9 = 2 ~ H.)._.U.6.P S Y / Y b k 7 ; @ X                 X X X * = t > @ d &.x.x.qXwXqXz.l.&.&.U =.@.L m K F F n n n J ....W W E Z u Z Z y = UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     341"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX @ % $ $ < 8 b { qX9X7X7X7X7X7X6X6X4X] p p - - O O   O O . .   + b yXgXn.$.#.&.&.$.$.$.%.$.*.%.$.$.$.$.=.v j 5 & o .   2 B.].}.H.Q c l N b b k j 3 O O             O X @ X X * @ t , = , r l.l.l.l.l.l.l.&.&.=.@.@.X.M K F F F F v F ..;...W E W A Z Z Z i = UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     342"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX X % $ < 2 5 k [ z.1X,X7X7X7X6X6X6X6X3Xs - - - - O O O O       O d l.gXeX*.%.&.%.%.$.%.%.$.%.$.%.%.$.@.@.n j 5 & % .     3._.[.H.A N 7 w z x j j $ + O                 X X * * * = > > > T %.&.&.l.&.&.&.&.@.=.&.L M K K n F F n V J ;.;.-.W ~ ~ E A E E i = UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     343"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX  X % 2 1 5 0 j U U } 1X6X7X7X7X6X6X6X4X>X- - - - - O O O O .   + : I BXzXx.%.%.&.%.%.%.%.%.%.%.$.%.$.$.@.m 4 1 2 o     X ~ /.{.B.H N l q x c j 3 #                 X X X X X @ * * @ > r &.%.&.*.&.&.@.@.=.@.=.=.X.L F F F G F D G -.>.<.Q Q ~ ~ W A W ~ E o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     344"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXO X * $ 5 6 q 6 v U } 1X9XiXiX6X8X6X6X6X4X) O - - - - O O O O . . + & x.vXrXv.%.@.@.%.%.%.%.%.&.$.$.&.$.@.M j 3 < .     X u V.'.3.S q q q j k j 1 .                 X O X X X o = o @ > T $.%.&.%.%.&.@.X.=.@.U @.=.F G F F F F F -.;.>.>.^ ~ :.~ W W :.3.u o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     345"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX  X X $ 5 l l z b { z.qXqX7X7X8X6X6X6X4X6X,Xp - - - O O O . O + + +   I BXzXeX%.$.$.%.%.%.%.%.$.&.%.&.$.$.L j 4 < .       t 3.V.A w q 0 6 j j j < O     X             X @ * @ * * @ * b &.%.%.*.&.*.&.@.@.@.=.=.=.L M G F G F F ..;.<.<.:.2.2.:.:.~ ~ 6.2.y UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     346"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX X * % 5 l c B Y c.b.z.} 1X7X6X6X6X6X6X6X4X>X- - - O O O O O O O     - l.zXrXx.c.%.*.%.%.%.%.%.$.&.%.%.%.@.m j 3 .       X y y > & 0 q 6 j j 3 # O                   X X * o * o @ d &.0.%.%.%.%.$.@.=.@.X.X.X.L D G F G D F J ;.;.<.>.3.6.6.3.:.^ :.C.6.y UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     347"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX * * 2 x v C c.c.b.x.{ } 1X6X8X6X6X6X5X6X3X) p - O O O O O .   O . O 7 qXzXhXx.l.%.l.%.%.%.&.%.&.$.%.%.&.m j 3 #   X         + e 7 q j j j <     X   X X         X X = * o o o , T 0.%.%.%.*.l.%.@.$.=.X.X.G G G D G F F J ;.<.<.<.2.6.6.6.3.:.:.4.D.6.= UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     348"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX * * 9 N S T c.c./ %.&.{ } 9X7X6X6X6X4X6X5X>X) -   O O O O O O O .   O r BXgXhXn.e.%.%.%.%.%.%.%.%.v.v.l.U k 4 $ .       O @ : 5 5 6 l j 4 $   X   @ X       X X   o o * * * @ S %.c.*.l.c.%.%.%.$.@.$.=.L G H G G G F G -.<.i.4.2.6.B.7.6.2.3.4.Z.L.3.X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     349"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX * * = N T / / ,.y.*.&.=.U 1X7X6X7X6X6X5X4X,X] ) O O O - O O O O . O . ; f eXvXrXx.%.%.%.%.%.%.%.l.v.x.v.&.m j 3 #       . & w 5 5 6 6 j 1 .   O   X   @ X @   O X o * o , & b &.%.%.%.%.%.l.*.%.@.@.=.=...G G G G F G ..<.i.5.2.2.C.C.7.6.6.2.C.D.L.E X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     350"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX * X * Z / / ,.,.,.,.,.$.=.U 1X6X6X6X4X6X3X,X>X' p p - O O O O O O O O + ; r z.zXwXv.l.%.&.&.%.l.x.b.n.l.&.M k 7 < . O   . & 8 0 6 l j j $     o   X   X O   @   o X o & & b &.$.$.#.#.%.%.%.%.$.@.X.L G J J G G G D J <.i.5.5.6.C.C.C.7.6.6.7.S.P.A.u . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     351"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX @ * * i ! / ,.! ,.! ,.,.w.=.[ 9X6X6X6X6X3X,X>X' ) a p O O O O   . O . + ; ; 7 l.eXn.v.%.%.%.%.c.qXeXn.%.@.@.m 7 1 #     . < 5 7 q j k 4 #         @   X   .   o     X > b @.$.$.$.@.#.$.%.*.*.$.X.L ..G G J G J F J <.5.i.4.5.C.Z.A.C.C.6.7.C.D.I.B.y @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     352"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX@ X * t u ~ ! -.:.,.3.:.y.j.r.=.I ,X4X5X6X3X,X>X' ] ) a - - O O   O O ; O + ; - < U x.eXx.l.%.%.n.rXrXn.&.=.@.=.j 4 2 % * # < 7 7 l x k 1     X   . . . O X @     X   w T $.$.@.@.@.#.%.%.$.%.%.X.G J G J G G J G J <.p.p.5.4.B.A.A.A.C.B.6.C.S.L.~.3.y @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     353"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX    * * t E ~ :.,.;.,.,.t.E.M.e.M [ 1X3X9X3X,X<X>X] _ ) a ; O O O   . O ; O - O O $ I { eXn.x.l.eXuXuXqX&.&.&.U m j j w y i g b b b x 3 #       .       .         > Y @.&.@.$.@.@.#.@.&.%.#.o.o...J G J J G J G J <.p.p.5.7.C.C.D.D.D.C.C.C.D.K.~.R.W e UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     354"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX  X * t E ^ 3.:.,.,.8.j.E.*XM.1.K I >X,X,X,X>X' ' ) ) ) a ; ; - O   O O O O + ; ; ; d I { b.z.rXhXkXuXn.l.l.&.=.k v S S ( Y { I b j < O @ .   .       . . & > Y T &.$.$.@.@.@.$.@.&.$.o.o.X.P ..G G G J G G -.4.p.p.7.7.p.S.D.D.A.Z.Z.A.D.P.~.^.C.y % UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     355"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX   X t E ^ 3.2.,.2.t.E.E.W.j.j.+.v I ' >X>X' ' ' _ _ _ a a p ; O O O O O ; + - @ ; > > d } b.wXrXrXzXhXwXx.%.&.M v S R Y Y Y Y b 4 # . + o   . . . . & r m U &.$.$.$.@.o.X.@.$.@.@.@.X.G J G G J J J J J -.5.p.p.p.p.C.D.D.L.D.Z.A.D.R.L.U.^.~.2.t * UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     356"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo X @ t E y.y.y.8.t.t.E.*XE.E.j.s.+.=.I _ ' _ _ _ _ ) a a a p ; ; O O O O O O @ - ; , , > , h ` } z.z.qXwXqXqXz.&.n k u i S b k j < o o % @ & & > e S T &.$.$.$.$.@.$.@.@.o.X.X.X.L J J X.G J J G J J ..8.p.C.p.p.Z.A.D.L.D.D.D.D.A.R.@XQ.U./.L.W t , UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     357"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXe h e > t y Z ^ y.t.t.t.E.*X*X*Xj.B.s.j.+.=.k f f ) _ _ _ _ a a a ; ; ; O O O O O ; @ ; ; : > ; > > > h g Y [ } } } { b j l 8 w j j 4 < < 5 6 w b m T T %.%.$.$.$.$.@.X.X.X.o.X.X.X.G G J L J J ..G J ..,.5.p.a.Z.Z.A.R.P.I.I.L.D.D.D.A.!.!.=X!.Q.*X| ) ` _ ` UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     358"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXy e i g Y  .` g Y i i w w u N ! y.y.m.%XZXZXZX%Xj.p.s.s.s.g.=.k r f a a f ) a a a : + ; + O O O O O O + ; ; ; ; : > > ; , : & : r r Y r j j 3 6 k k k k n m m L #.%.0.%.%.%.#.@.#.o.X.o.L L o.G G G J G L G G G F J ;.7.a.a.p.p.Z.D.U./._.^.~.P.D.C.C.V.%X%X%X%XIXtX0X2X2X2X2X0X2X2X . .i = = UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     359"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> e e g Y g Y Y Y Y Y Y Y S S A m M C S Y | | tXtXIXNXIXZX*X*Xj.E.A.s.g.=.k b r r a r a a : : : + + O O O + + O + + , : : : : : : & # & $ & 2 & 5 j k F G v k =.+.O.$.@.@.X.L &.#.&.o.L o.G ..X.G L G P J G H G ..J J J J o.4.s.a.a.a.Z.Z.H.$X{..X.X`.D.6.2.:.Q ~ ! / / | ( } 2X2X2X2X2X2X2X2X2X| R i y 9 = = * o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     360"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXi e g g i Y Y Y T Y { l.&.l.l.&.@.&.l.&.{ &.l.{ z.z.z.b.b.IXlXIXyXIXyX*XW.W.G.u.O.M k 7 r r : : : : + : # + O . O . . . + . . + # # & & & # # % = $ 2 6 k O.1.;.O.M =.1.1.1.,.L G M L L L L G G G G G G ..J G G H G G J J ..,.4.p.Z.Z.p.i.d.R.$X_.{..X:X@X8.-.H H S N N C N u w r e d  .g g `  . .g Y u w y 9 9 9 = = = % o o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     361"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& e e Y Y m S K I U { z.qXx.x.BXx.n.qXBXx.qXqXx.qXqXqXx.eXn.b.n.b.tXIXlXyXIXeX%XE.G.G.d.N.=.k j < : + : : + + + + + + . O + . . . . . # . # # % & & 9 2 & 2 k =.u.a.5.1.O.M O.+.1.+...G F v F G F G G F G G G J G J G G G G G ..>.6.p.C.a.a.a.a.S.R.(..X:X&XE.,.W D C N N z w w w 9 = & % % * % < & t * = % & % & & % % % % % o = % = , = UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     362"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& & e 9 8 7 b Y U &.z.z.BXBXgXgXgXvXgXgXgXgXgXgXzXvXNXzXxXxXgXzXzXyXeXeXqXb.eXeXeXn.m.t.t.G.G.G.s.O.=.k j 1 < # + + + . . & + + + . . . . % . # # % % 9 9 w w 6 k M u.f.a.i.5.u.O.=.O.N.u.u.<...G n F F F F F L F F G D G J J -.;.4.8.C.C.p.i.p.a.d.D.L.~.'.Q.t.,.E S C S S 7 q 0 9 9 % % . o         .   * o   o . .         . . . . . % = = = t * UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     363"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX% : e 8 w x N k M &.wXgXvXgXcXcXcXcXcXcXcXcXcXcXcXcXcXcXcXvXMXMXMXvXxXkXxXhXzXrXwXqXz.b.l.q.o.-.,.s.F.F.s.+.M k k 5 8 & & & & + # % # & % & $ % % % % = 9 9 u Z C G =.N.f.F.S.p.5.i.s.O.=.+.u.i.a.p.5.>.;.G G J ........Q ,.,.1.1.8.p.Z.C.Z.C.C.a.a.a.F.P./.!.8.P c l l 0 w 0 2 9 e & = X o X   X X                                   .   . . % o o y R R i > UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     364"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& & 2 $ 1 4 k m { x.BXgXvXvXvXnXnXcXnXcXnXnXcXnXnXcXcXcXcXcXcXvXvXvXbXxXxXxXxXfXkXkXhXhXhXqX{ &.@.=.G O.1.S.Y.F.d.u.+.=.n v 4 < 2 2 $ & < & 9 w w w 9 9 8 8 w N H H ..+.u.Y.K.F.D.Z.j.Z.s.u.+.O.N.u.u.s.A.Z.s.i.5.5.5.8.5.p.8.s.8.A.s.a.a.a.a.p.S.S.F.F.F.L.A.>.H x l 6 0 2 = = % % o % o o o     X     X                                             . o i R R R t t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     365"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& & & 2 2 1 7 k U z.gXvXcXcXcXcXcXcXnXnXnXnXnXnXnXnXcXcXcXcXnXvXvXMXvXvXvXbXxXxXxXxXxXxXxXfXkXhXqXl.U T L K G O.i.Y.K.J.f.N.O.=.n k j x l 0 8 w u u Z Z A N w z B D -.1.u.d.T.(.^.L.S.S.A.Z.d.S.u.+.+.N.u.k.d.d.d.a.p.a.Z.a.p.a.Z.Z.S.S.S.F.D.S.S.S.S.L.P.L.A.2.D j 6 5 2 & & = o o o o o o X   .   X   X       X X                                         o * t R R R R t t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     366"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& & $ < 5 1 3 U wXgXgXcXnXcXcXnXnXcXnXnXnXmXnXnXnXcXnXcXcXcXnXcXvXvXvXbXbXxXxXxXxXxXbXxXkXxXkXkXkXzXeXz.{ &.@.L M G ,.s.Y.I.K.G.a.u.+.+.O.O.F F D H W :.2.2.Q ......O.N.k.G./.(.{.{.P.F.G.Z.Z.Z.S.f.f.N.N.N.N.i.a.i.f.d.S.f.S.d.d.S.S.S.D.D.K.P.P.P.K.P.P.C.2.H v 6 1 2 % = % o * o X o X o X   X     X           X                                               o t y y y R t * UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     367"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& & 2 1 3 3 3 j BXgXvXcXcXcXnXnXnXnXnXnXmXnXnXnXnXnXnXnXnXnXMXMXMXMXMXbXMXbXbXxXbXxXbXxXxXkXxXxXkXkXaXhXzXrXx.l.l.@.L M k G ,.A.^.(.P.K.F.S.f.u.u.N.i.a.p.i.i.i.i.5.<.u.a.G.F.P.~.(._.{.~.Y.D.Z.a.d.S.f.F.F.f.u.1.N.N.u.k.f.f.F.f.S.f.f.D.R.U.U.R.~.(.).~.A.2.L c l 2 2 % o o o o o o o         X                                                                       . o * = t t y t t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     368"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& & 2 2 < 1 4 j z.gXvXcXnXcXcXcXnXnXnXnXnXnXnXnXnXnXnXnXnXnXnXmXmXMXGXMXMXMXMXMXMXbXMXbXbXxXxXkXkXkXkXkXkXhXrXrXeXn.x.x.&.@.L n n G 8.R.I.^.~.P.J.S.F.F.F.S.d.i.i.i.p.C.Z.D.U.~.~.I.I.^.{.{._./.S.a.Z.S.S.F.F.J.J.F.S.i.u.u.u.u.a.a.a.d.f.F.R.~._.{.}.[.(.A.4.J b b b 2 = o o o o o o X   X X                                                                                 X   . X * t t t t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     369"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX: > 2 2 < 1 1 I BXvXcXvXcXcXcXnXnXnXnXnXnXnXmXnXnXnXnXnXnXmXJXJXJXKXJXJXKXLXLXLXCXVXVXLXLXbXbXbXbXxXkXaXaXkXrXBXrXeXeXn.n.v.l.@.=.M v K ,.A.U././.I.P.K.J.F.G.S.a.B.C.D.U.^.(.(.^.^.I.I.I._._._.(.D.S.d.S.S.S.F.J.J.J.P.K.D.Z.p.7.p.C.A.A.H.U./.].}.|.[.H.2.J m m b r & & o o X o . X o     X                                                                                           X * t R t t @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     370"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXe e 2 2 6 3 7 wXgXcXcXcXcXcXcXnXnXnXnXnXnXnXnXnXnXnXmXmXJXVX-X-X-X-X-X;X-X;X:X:X+X#X#X#X#X:X:X=XVXZXNXNXkXaXsXhXeXwXx.n.n.x.x.c.*.%.@.M v v P t.R.U.I.I.I.P.J.J.L.L.U.U.(.].].].).(.^.~.I.P.^._.]._.U.S.S.S.F.F.J.K.P.P.~.~.~.I.U.U.I.^._.].].[.}.|.|.R.7.Q c b I I f r % o X .   X X                                                                                                       X X t t t t t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     371"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> d d e r 5 4 I BXvXvXvXcXcXcXcXnXnXnXnXmXnXnXnXmXMXJXCXVX-X:X=X+X+X=X+X#X#X#X#X#X#X#X.X#X.X.X.X.X.XoX+X&X&X*X*XM.rXwXeXeXx.n.x.x.v.%.%.$.X.G n v V ! E.W.I.I.I.P.P.~.^.(.(.].{.[.[.).).(.^.I.P.I.(.).]./.D.S.D.F.F.J.K.P.I.~.~.I.^.(.).].[.}.}.}.|.|._.C.;.H K b b r : : & o o . .   X                                                                                                             * * t t t t * UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     372"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> d e r 3 j j } gXcXvXcXcXcXcXnXnXnXnXnXnXnXnXnXmXJXLX-X=X+X#X+XoX+X#X#X+X#X+XoX+X#X#X#X#XoX.XoX.XoX.X{.{..X'./.U.W.M.eXeXn.n.x.v.l.c.c.%.%.#.X.G n v c ( t.!.Y.P.I.I.~.^.(.).].[.[.[.].).(.^.I.I.I.(.).].^.L.F.L.F.F.J.J.P.~.~.I.~.~.(.).].[.}.}.|. X'.8.! F B b [ [ f : o o o                                                                                                                         X t t t t t @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     373"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& e d e 5 3 j wXvXvXvXcXcXcXcXnXcXnXcXnXnXnXnXmXJXVX&XOX+X+X+X+XoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX'.oX_..XoX'._.'.XXXXXXQ.W.j.n.x.x.v.v.%.%.%.%.$.$.X.M v v S ( y.%XW.U.~.~.^.).).].[.[.[.].).).(.^.^.^.(.].].(.I.I.I.J.J.K.P.I.~.I.I.I.~.(.(.].[.}.|._.6.,.P P v v b [ _ a . X .                                                                                                                             * * * * X X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     374"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& & 2 2 r j I dXgXvXgXvXvXvXcXcXnXcXcXnXnXnXmXJXVX&X+XoXXXXX+X+XoX+XoX+X+XoX+XoX+XoXoXoX#XoXoX.XoX'..X`.'..X'.`.`.`.XXT././.T.W.h.n.x.c.%.%.%.%.$.o.O.X.M v x x Y / y.E.Y.~.(.].).].[.].[.].).).).).].).].].].^.~./.^.^.~.~.~.~.~.I.P.U.~.(.).[.}.[.$X2.P K K m v I f _ s @     .                                             X   X                                                                                         X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     375"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. # & < < 1 b dXvXvXvXvXvXvXcXcXcXcXcXnXcXnXMXCX&XXXQ.OXOXXXOXXXXX+XOXoX+X+X+XoX+X+X+XoXoXoXoXoXoXoXoXoX'.oXoX`.`.`.XXT.T.`.T./.U.K.h.c.l.%.9.%.$.$.$.#.o.L n k c S R S ! 8.D.{.).).).[.[.].[.].].].].].[.[.[.].~.P.U.^.^.(.^.~.~.~.I.I.~.~.^.].}.[.A.>.! T T S v b I _ s @ o                                                     X   X X X                                                                                     @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     376"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo # $ 1 4 3 k uXfXgXgXvXvXcXcXcXcXMXcXcXcXmXCX*XOXOXOXOXOXOXOXOXOXOX+X+XOX+XOXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX`.`.`.XXXXT.T.T.T.`.U.U.U.K.j.e.%.%.$.$.$.o.#.@.o.G v k x z w u Z Q A.{.).].}.}.[.[.[.[.[.[.[.[.].[.].~.L.I.^.(.(.(.(.(.^.(.^.^.(.).[.[.C.Q H D F m v j r d : O @ . O                                               X X         X                                                                                         UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     377"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX  . & : 7 k k m wXfXvXvXvXvXvXvXvXvXvXcXcXcXLX&XOXOXOXQ.OXQ.OXOXOXXX+XOX+X+X+X+X+X+X+X+X+XoXoXoX+X+XoX+XoXXX+X`.`.XX`.`.Q.Q.T.T.T.T.T.T.U./.P.G.r.%.&.#.#.o.o.o.o.G F k 6 l 0 9 9 2 B C.{.}.|.|.}.}.}.}.|.}.}.[.].].).~.P.U.^.(.).).].).)._.].{.{.[.).7.D V z x x v k 7 & o .                                                   X X X X X X   X                                                                                             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     378"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. . o : I I U U x.fXfXfXvXvXvXvXvXxXvXcXnXMXVX=XXXQ.OXOXQ.OXQ.OXXXXXOXXXOX+XOX+X+X=X+X=X=X+X+X+XOX=X+XOXOXXXXXXXQ.XXT.XXQ.T.T.Y.Y.T.Y.T.L.Y.P.K.K.G.r.$.#.$.o.o.X.o.X.G k 6 l l 8 9 2 8 A $X|.|.|.|.}.}.}.}.}.[.[.].].).U.J.P.~.(.(._.).].).].[. X|.|.B.C B N c c k k 6 % .                                                     X X X X   X X   X   X                                                                                           UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     379"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo & : I U [ } z.gXfXvXvXxXvXxXvXvXvXvXMXJX&XXXXXXXOXQ.Q.OXXXOXOXOXOXOXOXOXOX=X+X=X=X=X=X=X=X=X=XOX+X+X+X+XOXXXXXXXT.XXXX`.XXQ.Y.T.Y.Q.Y.Y.Y.Y.L.F.J.F.1.$.O.$.X.o.X.X.G F l l 6 0 9 9 9 i 3. X|.|.|.|.[.}.}.[.].].].].).I.L.P.~.^.(.(.(.).].].}.|.|.}.3.S S m S V k j 2 o   .                                                     X X X X X X X   X   X X                                                                                         UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     380"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX% $ : f [ [ } } uXfXfXfXxXxXvXxXvXvXvXvXCX+X`.XXXXOXXXXXOXQ.XXXXOXOXOXOX=X=X=X=X=X=X=X=X=X:X=X+X+X+XoXoXoXoX'.'.`./.'.'./.`.`.`.`.T.T.T.Y.Y.Y.Y.G.F.Y.Y.S.1.;.o.o.L ....L K c j 6 0 w y 9 y A '.|.|.|.}.[.}.[.[.].].].).(.P.J.K.I.~.^.^.^.(.].[.}.|.|.H./ Y Y Y Y m k 2 %                                                         X X   X X X X X X X X o X X X X X X                                                                               @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     381"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. & & 7 [ } U } uXkXfXxXfXxXxXxXxXvXbXMXZXOX'.XXXXXXXXOXOXQ.Q.OXOXOX=XOXOX=X=X=X=X=X-X=X&X=X=XOXoXoXoX'.oX_.'.'.'.'.'./.`.`./.`.T./.`.U.T.T.Y.Y.F.F.Y.G.F.F.G.1.o.o.X.X.X.G G v j l q u y y 9 y V.|.|.|.|.[.[.[.[.[.].).].).K.F.K.P.^.^.(.(.(.).].|.|. Xy.| | Y Y U b k 2 .                                       . . .   . .   o   o . o . o X * X X o X X X X X X X X X X                                                                               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     382"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo . o a j I [ { qXsXfXfXxXfXxXxXxXfXxXvXCXoX'.+XXXXXXXQ.XXXXXXXXOXOXOX&X=X=X=X&X-X&X=X=X=X=X=X=XXX_.)._./.XX&X&X=X&XQ.OXOX&X&XQ.Y.U.P.U.~.~.~.~.I.P.K.Y.G.F.G.G.i.O.X.L L X.G G v j j x u u u y 9 ^ |.|.|.|.[.].[.}.[.[.].].).D.F.K.P.~.~.^.(.^.).[.}.|.@X| { Y Y Y m b b r :                                       . % o % % % % % % % % % = % = = o X o X   X   X X X X X X X X                                                                             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     383"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo o . & 7 b U [ qXsXsXfXaXxXxXxXxXxXxXMXCXoXXXXXXXXXXXXXXXXXXXXXOXOX&X=X=X=X=X&X=X=X=X=XOXOXOX&XXX/.`.Q.Q.!.ZXZXNXIXIXNXNXZXZXZXZXZX*X*XQ.`.U.I.I.I.U.Y.Y.Y.G.G.G.G.<.X...o.J L G F k k z A E Z u 9 Z _.|.|.}.[.}.[.[.].].}.$XE 9 :.L.~.~.^.^.^.(.).[.}.|.@X( Y S S S S m b f p .                         . . . % . % o = 2 2 8 2 0 0 0 w q 0 w 0 0 0 8 2 % % o = o o X X X X X X X X   X                                                                       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     384"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. # & 1 b b [ } sXaXsXfXkXfXfXxXxXxXxXVX.X'.XXXXXXXXXXXXXXXXXXOXOX=X=X=X&X=X&X-X&X=XXXXX@XQ.Q.&X*XZXNXhXlXlXlXkXkXkXkXlXkXkXkXlXlXkXkXhXhXNXNX*XW.R.W.A.G.J.F.F.F.W.1.O.O.L G L G G V v V A ~ E Z y Z _.|.|.}.}.}.[.].).).H.u     X A A.~.I.^.^.(.).[.|.}.V.S w w u b z k b r ; O                   X . % % 9 9 9 y w N z c V V D D H J -.-.J H H D D C B z N w 8 = % o .   X X X X X X X X X                                                                   O UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     385"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. . # : 7 b U U dXsXsXsXaXaXfXkXkXxXfXVX'.oXXX`.`.`.`.XXXXXXXXXXOX=X=X=X&X-X&X=X&X=XOX`./.`.*X*XyXlXbXlXlXuXtX2X2X2X2X2X2X2X2X2XrX2X2XrXlXlXbXxXbXNXyXM.E.D.F.F.J.F.G.s.1.O.G L G ....G n D E ~ W Z u E $X|.|.|.}.|.|.}.].V.= X     O O y 6.U.^.).)._.[.}.}.H.u 8 w w l j j j r ;           .   .       X = = 2 q z B D J :.>.>.<.2.4.7.7.7.8.6.8.t.8.2.Q Q H B c z 0 2 # o o     X   X X X X X                                                                   @   UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     386"UXUXUXUXUXUXUXUXUXUXUXUXUXUX. . # # r j b U qXsXsXsXaXaXkXaXaXxXfXZX'.oXXXXX`.`.`.XXXXXX`.XXQ.OXOX&X=X&X-X&X&X=X&XQ.T.Q.ZXNXkXkXkXlX2X} ` ` g g  .g g h h ` g f I g ` } 2XlXlXkXkXjXjXrXeXj.s.d.F.F.Z.1.O.o.M G ;.O.G n G Q ^ W E E ~ _.|.|.}.[.|.{.V.~ * X             * E V.^.(._.}.|.|.V.w 9 9 w w q j 4 2 . .     . # .         9 Z Z N c n F ..:.6.A.A.B.B.7.C.B.C.B.B.B.E.%XV.E.V.8.2.Q J H V z q 8 = o o   X   X X X X X X                                                                   UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     387"UXUXUXUXUXUXUXUXUXUXUXUXUXUX. . . $ 7 k b U dXsXsXsXsXaXaXkXxXaXyX~._.XXXXXX`.`.`.`.T.XXQ.OXOXOX&X=X&X&X=X&X&X&XT.Y.ZXhXjXkXkXlX2X` s a e 9 = = t t t * t * * * * % o s ) `  .] 2XkXkXpX9X1X} 0.S.S.Z.g.;.O.G O.;.<.=.G J :.3.~ W E :.$X|.|.|._.V.Z .                   O   = E B./.[.|.|.H.u 2 2 2 5 5 j 4 < . . . . . # . #   o y W 7.5.2.>.>.4.7.A.A.E.A.B.C.B.B.7.B.7.8.B.8.E.E.E.E.E.B.E.V.6.4.:.J B w 2 & % .         X X X                                                                     UXUXUXUXUXUXUXUXUXUXUXUXUX",
     388"UXUXUXUXUXUXUXUXUXUXUXUXUXo . . . < 4 k U qXiXsXsXaXaXaXaXkXaXyXT._.oXoXoX`.`.`.`.XXXXXXQ.Q.&X=X&X=X=XOXOXQ.&X&X*XNXjXjXlX2X} ` d + + + & & = > = > = = * , t , > > = > h h h s _ ` } } } ' ' } c.1.<.5.,.O...;.1.<.O.G -.3.3.~ W W ^ $X$X$X^ i X           UXUXUXUXUX      O   = S ^ V.$XV.w # & 2 8 6 j j 3 # . % . % . % # 9 A Q 4.7.C.7.7.7.B.A.E.A.E.B.7.7.8.6.6.6.6.7.8.B.E.E.E.E.E.E.A.E.A.B.8.6.Q D B q 2 = % X X .   X X X                                                                     UXUXUXUXUXUXUXUXUXUXUXUX",
     389"UXUXUXUXUXUXUXUXUXUXUXUX. . . . $ 1 j k U dXiXsXsXiXsXsXsXkXzXQ.'.`.XX`.`.`.`.`.`.`.XXQ.OXOX=X&X=X&XOXXXXXU.W.yXkXkXjX2X` p . . . : + o & @ + @ , & @ @ , = , t , & @ > , h h h ; ; p > : a _ [ ' U O...O.+.;.1.5.1.O.O.;.6.3.:.~ ~ ~ ^ ( =               UXUXUXUXUXUXUX          X * = Z E 9 % $ 2 w l c k 4 $ # . % . % % 9 W 2.4.6.C.7.7.7.6.C.A.A.E.B.7.6.6.4.4.2.6.6.8.8.8.8.B.V.E.E.V.E.B.E.E.B.E.B.>.J C l 8 % . .           X                                                                   UXUXUXUXUXUXUXUXUXUXUXUX",
     390"UXUXUXUXUXUXUXUXUXUXUXUX. . . . < 3 j k } dXdXdXuXdXsXsXsXfX*X`.XXoXXX`.`.`.`.`.`.Q.OXQ.OX&X&X&X=XOXXX`.U.Q.hXkXkXlX2Xs ; + # # # + # . + + + o , @ ; + @ , , , , > % , s h h h > > & # # : r _ ' ' U G =.;.u.i.1.;.+.;.4.C.4.>.:.:.A X             X UXUXUXUXUXUXUXUXUXUXUX            O @ = & < 5 l z V n j < # # # . % 9 H >.2.4.4.6.B.B.7.6.7.C.B.E.B.6.6.4.4.2.<.2.4.6.6.6.B.8.B.E.V.E.E.B.E.B.E.E.E.B.2.Q V z w 9 % o       X                                                                       UXUXUXUXUXUXUXUXUXUXUX",
     391"UXUXUXUXUXUXUXUXUXUXUXo # . . & 1 j k U qXwXwXwXuXuXuXsXsXM.I.XXXX`.`.`.`./.U.`.XXXXXXOXQ.OX&X&XOXXX/.U.*XlXjXkX2Xf   . . o + + + + +   O . O O .   + O @ , , t h > , : , s s h > > = & & 2 w f _ ' ' U J 1.p.d.1.+.;.5.C.C.6.2.2.:.~ =           UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX          O & 8 0 N A H ! J M j 2 9 = 9 w D J J :.:.2.4.6.6.6.6.6.B.B.B.B.6.6.4.6.4.2.4.4.6.6.6.6.8.8.8.8.8.V.t.B.B.B.B.E.V.E.V.:.J D N 9 * o                                                                             UXUXUXUXUXUXUXUXUXUXUX",
     392"UXUXUXUXUXUXUXUXUXUXUX& % . . < 4 j I { qXqXqXwXwXwXwXuXrXW./.XX`.XX`.`.U.`.U.`.XXQ.XXQ.&X&X&XQ.XXI.P.W.lXkXlX| >   . & . + . + O O O O     O   O   O O - @ t , t e > : : s s s s > > & 2 9 9 2 f [ ' >XT 4.a.i.u.N.i.Z.A.C.C.6.8.y.y.i o     UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX      > 9 w u A ! ,.,.:.O.M v z Z Q :.:.Q -.:.2.3.3.2.3.4.6.6.6.B.B.6.6.4.4.2.2.2.2.2.6.8.6.6.6.8.8.V.8.B.B.t.V.E.V.8.E.B.E.7.>.P D N 9 =     X   X                                                                     UXUXUXUXUXUXUXUXUXUX",
     393"UXUXUXUXUXUXUXUXUXUX@ & % o # 1 4 k U { z.z.qXqXqXtXeXwXM.Y.`.Q.T.XXT.T.T.U.T.`.Q.OX&XQ.Q.&X&XOXU.I.*XlXkXlX} p + % # # + + O . O .     O     O   O O - - , > e t g d > > , > s d s : > : & & 2 : f _ ' [ ;.i.k.u.u.a.D.D.H.!.%XIXm.| S > o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> i i S N N A ! ! ,.>.-.O.O.=.;.8.7.7.B.6.6.6.6.6.6.2.2.4.6.6.8.8.6.4.4.4.2.4.4.4.4.4.4.6.6.6.6.6.8.8.t.B.B.8.B.t.B.B.E.V.B.B.3.-.H N 9 % .             X X X                                                           UXUXUXUXUXUXUXUXUX",
     394"UXUXUXUXUXUXUXUXUXUX. % . . $ 3 j k U z.z.z.z.z.qXqXeXn.G.T.Q.T.T.Q.T.Y.T.U.T.Q.Q.OXQ.&X&XQ.Q.T.I.E.kXjXlX .p . # + . + . O O                     O O O ; ; & e d i g g e e e d > e e = 2 9 2 8 1 7 b b =.N.k.f.k.s.a.Z.C.E.%XlX0XlX|  .i > %   UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> i g ( Y S P S P H W ! ,.;.<.1.N.f.G.G.D.R.H.A.C.C.C.V.6.6.2.3.4.6.6.3.2.2.2.2.2.2.2.3.8.3.6.4.4.2.4.4.6.8.8.8.8.8.6.V.8.8.E.V.E.B.8.-.D N = o   X   X         X                                                           UXUXUXUXUXUXUXUXUX",
     395"UXUXUXUXUXUXUXUXUX@ . . . . $ 4 k U { { l.z.l.z.z.z.z.j.Y.Q.Q.Y.Y.T.Y.U.U.U.Q.Q.&X&XQ.Q.Q.Q.XXP.W.rXjX2X} :   . + + + + O O                     O O O ; : a d d g Y S g g e e e e e e u w q x v M =.N.N.f.f.f.f.u.+.;.-.H T b.2X2XtX| ( w u y e % @ UXUXUXUXUXUXUXUXUXUXUXUXUX@ e g Y ( Y ( S S S N B C A ~ Q ;.5.Z.J.F.F.J.J.F.F.D.H.H.H.H.A.C.B.B.6.6.2.>.2.>.2.2.2.2.6.4.4.2.4.4.4.4.2.4.6.6.6.8.6.8.8.8.8.V.t.B.8.B.2.H V 0 % o X             X                                                             UXUXUXUXUXUXUXUX",
     396"UXUXUXUXUXUXUXUXUX        # $ 7 b U { l.l.{ l.z.z.z.x.W.T.Y.Q.Y.T.T.T.U.Y.T.Q.&X&X&X&XW.Q.XX`.Y.tXdX2Xf + . # . . .   O                         O O @ ; : d f ` Y  .g g R S u u w N A H J ..+.N.N.k.f.F.F.J.F.u.+.M m k 6 j j b Y I I 7 0 8 w 9 y e > UXUXUXUXUXUXUXUXUXUX& & e i S S S K S v l x k z v c v n ..;.$X).I.P.J.F.F.F.F.L.R.H.H.H.H.H.H.H.C.7.2.2.2.<.>.2.2.3.6.2.2.2.2.2.4.2.4.4.4.6.6.6.6.6.8.8.8.B.B.B.B.8.:.V x 8 = o   X         X                                                             UXUXUXUXUXUXUXUX",
     397"UXUXUXUXUXUXUXUX.         $ < j M U U &.&.l.l.l.l.x.h.Y.Y.Q.Y.Q.Y.Y.Y.Y.L.Y.&X&X&XW.&XQ.T.XXU.m.2X` e & % # + . + O                             O O ; : e r f Y Y R Y S S S N B D G ;.N.u.k.f.G.F.J.J.J.J.J.i.$.+.M j 7 5 2 2 < 1 1 < < 3 < 2 9 u S R i > UXUXUXUXUXUXUX@ e 7 w w 7 c v k v k k v n v n F ..<.;.v 2._.[.).~.F.F.F.S.D.F.L.L.L.L.L.R.R.D.H.C.C.6.4.2.>.2.6.6.2.2.2.>.>.>.2.2.2.2.2.2.4.2.3.6.3.6.8.8.B.8.B.8.Q c q 2 o   X X       X X X                                                         UXUXUXUXUXUXUXUX",
     398"UXUXUXUXUXUXUXUXX       . $ 1 k U U &.&.&.&.&.l.l.l.s.Y.Y.Y.W.Y.Y.Y.Y.Y.Y.Y.&X&XQ.W.&XQ.Y.T.A.} ' s % % + . . O O                           O O O + : : d f Y Y Y ( A P H J ..;.N.i.f.G.F.F.K.K.P.P.P.P.L.t.q.O.1.O.3 8 2 # # # # $ # $ 1 1 1 2 w R R R i e UXUXUXUXUX> 9 w r 0 3 7 j j k k m U K K F G -.S.L.;.n D 3.$X[.).^.~.U.U.L.D.L.F.L.L.F.L.D.D.L.R.R.H.A.C.2.>.2.2.2.2.2.2.>.>.>.>.>.2.2.2.2.2.2.2.4.2.3.8.8.6.8.V.3.K x 5 % X X   X       X X               O                                           UXUXUXUXUXUXUX",
     399"UXUXUXUXUXUXUX        O . < 4 k =.U U U &.&.&.l.l.w.G.T.Y.Q.Q.Y.Y.Y.Y.Y.L.Q.&X*X*X&X&XW.Y.T.v.' f > & % % +   O                               O O + : e e Y ( ( ~ ! Q ;.1.N.k.f.G.J.P.I.P.P.P.P.I.P.P.Y.E./ U +.u.5.x & % # % . . . . . # < 1 1 0 i i i i e & UXUXUX> 9 r w 5 < 1 1 j k k n U m K F G D 5.P.D.H v G H 3.$X].).).(.(.^.~.I.R.D.H.F.F.F.J.J.R.D.R.H.H.C.6.3.3.2.2.>.>.>.:.:.>.>.:.>.>.>.2.2.2.3.2.2.3.3.2.6.8.8.Q N q 2 o X   X     O * X X           O   O O                                       UXUXUXUXUXUXUX",
     400"UXUXUXUXUXUXUXo * , s h + 1 4 v U @.U @.&.&.&.&.l.u.G.Y.Y.W.Y.Y.Y.Y.G.Y.W.Q.VX&XW.!.Q.Q.Y.E.} ` d & @ . . .                               O O O ; + e e i E ~ 3.:.<.1.u.d.G.K./.~.^.~.~.I.P.P.I.P.I.R.A./ U O.1.a.a.B % # % # # .   .   .   # < 1 & o o X X @ @ @ & 2 8 8 < 1 1 1 4 k M M m K K n V J >.D.~.6.u l n H W ^ B.).).(.(.(.).).(././.^.U.L.L.F.D.D.D.D.H.H.H.A.6.3.:.:.>.:.-.>.;.>.;.;.:.>.>.2.2.2.2.2.2.2.2.2.2.6.:.D x 0 % o . X X     X X X         O O   ; + + .                                   UXUXUXUXUXUXUX",
     401"UXUXUXUXUXUXUX: ] <X<Xh : 3 4 b M U @.@.@.&.U &.*.d.Y.Y.G.Y.W.Y.G.Y.Y.G.W.*X&X*X*XW.Y.Y.W.b.` ` : o % . +                                   O . + > i i H :.6.i.i.s.G.U.(.].).).(.(.^.~./.I.I.I.I.P.8.P Y @.N.d.D.S.Q % . # . .               . $ $ .         o & 9 2 2 < 1 3 3 7 k m m K G F V B D -.Z.P.L.W 9 8 x n C Z E V.~.).(._.).).].{.[.[.{.).(.U.D.d.Z.S.L.R.R.H.A.6.:.:.-.:.-.-.-.:.-.:.>.:.>.:.>.:.2.2.2.2.3.2.2.2.3.Q c q 2 . X X X X   X @         O O ; : a a a ) p O                                 UXUXUXUXUXUX",
     402"UXUXUXUXUXUX, ] 5X5X<Xh $ 3 j m U L L @.@.@.&.@.w.G.Y.Y.Y.G.W.Y.Y.G.G.W.&X*X*XW.W.W.Y.Y.%X} f d & # .                                       O + % e u H ..1.i.a.D./.{.|.|.|.].].).(.~.~.~.I.I./.U.A.! P T O.i.F.F.Z.;.< . . . . .               . # # .         o 2 2 < 1 3 3 4 k n m K F V V V D J 5.K.K.p.Z 9 & q F D A R  .E.'.).(.(._._.).].[.[.}.}.|.{.U.D.S.S.Z.D.D.H.A.6.:.-.:.-.:.-.:.:.;.:.;.:.>.>.>.>.2.>.>.:.:.:.>.:.:.D l 5 &   X         X   O     O ; a ) ' ,X3X3X) X     X                           UXUXUXUXUXUX",
     403"UXUXUXUXUXUXh ] 5X5X<Xh < 4 k b M U M L L @.@.@.g.G.G.F.G.Y.W.W.G.G.G.W.*X*X*XW.E.W.Y.W.n.[ h : # . . .                                     + . = e C ;.N.d.D.'. X|.|.|.|.|.}.].).^.^.~.~.~.I.L.8./ K T +.1.d.F.F.D.<.0   . . .                   . # .         . 2 2 2 1 1 4 k k M n F V V V D H ;.D.P.L.2.u % % 8 V G P ( | | E.$X].(.(.(.).).].[.}.|.|.|.|._.R.S.d.Z.C.Z.A.C.8.>.-.-.;.-.-.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.J z 5 < .   X X       X O O O ; a _ >X3X6X7XiX' O O                               UXUXUXUXUXUX",
     404"UXUXUXUXUXUX` <X5X5X] p < j k m K M M L L X.@.o.s.G.G.Y.W.G.G.G.G.G.W.*X*X*Xj.j.W.G.H.M.z._ d o . .                                       . @ % 8 C ..N.d.`. X|.|.|.|.|.|.|. X[.(.(.^./.~.^.R.>.P / T O.1.S.D.F.D.S.5.x . . . .                     # #         # e e r 1 3 j k n n n V F V D F -.p.J.K.S.Q 9 % % 2 w c ! ( |  .| y.H.).(.^.(.).].[.|.|.|.|.|.|.}._.U.S.a.p.Z.Z.7.2.:.-.:.-.-.-.-.-.-.-.:.-.:.-.-.:.-.-.-.Q Q Q Q Q D l 2 $ O X X X         O O : ) >X3X4X6XiXiX1X: O                                 UXUXUXUXUX",
     405"UXUXUXUXUXUX] <X5X<X_ : < j m m L K L L L L o.$.s.G.G.G.G.W.W.A.S.E.E.W.W.E.j.s.E.S.A.m.} p : o . .                                         . = x O.1.A.'. X|.|.|.|.|.|.|.|.|.}.].).).^.~.R.,.H P / ,.+.a.F.L.D.S.S.i.D # . . .                     . # .       & r r r 3 j k n n v V V V F F H <.D.J.J.p.A = o o % = w C (  . .R R W H.).(.).).).].}.|.|.|.|.|.|.}.]./.A.i.C.C.7.6.>.Q -.-.-.-.-.-.-.:.-.Q -.-.-.Q Q -.Q Q J J J H H x 5 8 : ; * X X O   O O O a _ ,X3X6X7XiXsX1Xf O   O O                           UXUXUXUXUX",
     406"UXUXUXUXUXs <X5X5X2Xh # 1 j b M M K L L L X.o.1.s.G.G.G.W.W.G.G.A.j.W.j.j.j.7.j.s.A.E.qX_ s + o .                                         . % 9 k O.s.'. X|.|.|.|.|.|.|.|.|.|.|.}.].].].Y.,.D H H $.1.u.S.K.F.D.S.Z.i.J &     .                       . . .   X & Y g e j k n n v V V n F D D -.7.D.F.D.6.Z & . % % . & q v b R i t y E H.|.[.].].[.|.|.|.|.|.}.}.[.[.).U.Z.5.i.7.5.>.-.-.-.-.-.-.-.Q -.-.-.Q ..Q ..J J J J J H D F D z q 2 a _ > *     O O O ; r ' >X3X6X7XiXfX7Xf @   O O                           UXUXUXUXUX",
     407"UXUXUXUXUXh <X5X5X<Xe & < j n K K M M L L G o.1.G.G.G.G.d.W.j.W.W.s.A.j.j.i.5.i.s.E.M.} s : + o .                                         . # 5 k +.U.}.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.!.>.H H H G O.1.a.L.L.G.A.Z.p.7.Q 2 . . . .                       . .   o h ` ` g j k n n v V V V n D J >.C.D.D.Z.2.u % o % % o . & 8 q l y y y y Z $X|.}.[.[.|.|.|.}.}.[.}.].].).^.L.7.>.<.>.>.-.-.-...-.-.Q -.-.J J J J J J J J J H G D D F V c q 3 a f h * X X   O - - a ' >X9X6XiXiXfXdX_ O   O O                             UXUXUXUX",
     408"UXUXUXUXUX` 5X5X5X .t # 1 7 m n n K K G L L O.u.f.S.f.S.G.W.W.S.A.s.s.s.i.8.u.8.s.j.c.f : : % o . O                                       o & j M u.).[. X}.|.|.|.|.|.|.|.|.|.|.|.|.@X>.H H L X.X.=.1.S.L.F.S.A.A.7.8.-.8 . .                           . # X , ` 1X} Y b M n n V V F V V D ..7.Z.Z.Z.C.Q 9 % % . % . . . . 9 5 q 9 = 9 % Z _.|.}.|.|.|.}.}.[.}.[.[.{.].^.P.B.......-.-.-.Q ..Q J J Q J J J J J H J J G D D F V V V c B 6 7 r ) f > * * @ - ; p a ' >X,X6X7XiXiX7X' @   O O                             UXUXUXUX",
     409"UXUXUXUXUX .5X5X5Xt , o 1 j b n m F M M M G X.u.G.G.G.G.Z.W.j.E.j.j.s.5.1.<.1.5.s.E.c.a ; + + .           O   O   O O                     . & k M S.).).].}. X|.|.|.|.|.|.|.|.|.|.{.6.J D T T l.&.O.5.D.L.G.Z.Z.s.E.s.;.0 # . .                         . # o , <X2X>XI M k v v V n V F V D :.C.D.C.C.7.A 9 % o . % .     . . & 0 q 9 = = y ^ {.|.|.|.}.}.}.}.[.[.[.{.{._.H.4.J M ..-.-.-.J J Q J J J J J H J H G H D D D D D D V c V c l 4 r f ] ` * *   - - ; a _ >X,X6X7XiXiX6X' - X O O                             UXUXUXUX",
     410"UXUXUXUX, ` ] ) s + # < 7 7 b n n n G G K G =.s.G.G.G.s.E.G.W.s.s.i.s.1.<.1.1.1.8.j.T a ; @ o . O         O O O O O O O               . . O & 4 F C./.'.(.).}.|.|.|.|.|.|.|.|.|.{.6.Q H P l.b.eXx.1.Z.D.Z.Z.s.C.E.8.j.>.q # .                           . # . , <X5X .} U M M V V V F V C H 2.C.C.C.C.6.A 9 % X . . .         % 2 5 0 2 = t t V.}.}.|. X}.{.[.}.[.[. X/.B.3.,.P M =...Q -.J J J H J J J H H G H D D D D D D V V B B V B l b f ' 1X] h * O - - p a _ ' 9X6X7X7X7X9X' +   - O                             UXUXUXUX",
     411"UXUXUXUX, , @ X     # 1 6 l v n n n K M G n J s.G.f.G.s.s.j.j.j.s.i.i.1.+.;.;.1.g.5.S + @ + @ + O O O O O O - - - - O O   O         . + + . # 5 F t.A.R././.].}.|.|.|.|.|.|.|.'.8.H H P q.n.rXyXm.j.W.E.A.8.8.8.8.t.s.8.N # .                           . # . +  .0X` { U M n V V V n V D J 4.C.C.7.7.6.A & = o . .         X   o # 2 q 2 t t R V.].|.|.}.{.[.}.[.].^.B.! ! ! H K G J J J J J J J J H J H D D D D D D D D V V V V B V B l 7 [ } 3X1Xh *   - - ; a _ ' 3X6X7X7X7X,X_ ; O O @ O                           UXUXUXUX",
     412"UXUXUXUX@ X         # < 7 k v m n n F M n n J s.G.f.W.G.A.Z.j.A.8.i.1.1.;.+.;.1.4.,.x , @ @ @ + O O O - O - ; ; ; ; - O         O O . . % o % = z F ! V.H.H.^.{.|.|.|.|.|. X#Xt.W ~ H ! c.n.qXv.j.E.E.E.E.8.8.4.<.8.t.8.z                               . .   % e ` [ U m m n V V V V V D Q 6.7.7.7.7.4.A % o o .               . o & 2 0 u i E y.:X$X X{.}.}.[.{./.B.Q ! / / q.X.G ..J J H H H H H H D J D F D D D D V V V V V V V C B l l r } 1X<Xh = X - ; p a f 1X6X6X7XiX7X,X_ ; @ O O O                           UXUXUXUX",
     413"UXUXUXUXO X         # < q x v n n F n n n G L i.d.G.s.a.s.j.s.j.s.1.1.;.+.;.;.1.1.,.N & @ @ @ @ @ O ; - - p p a p ; ; - O O O O O . . O + & > = 9 6 x E 3.B.H.).}.|. X X.X@Xy.! ! P J ,.l.l.e.1.5.8.t.j.m.j.8.1.>.;.<.-.8 . .                             . . # 9 > b m m m V V V V V V H 2.6.6.6.6.6.4.A % o   .   X X             % & 5 q u R ( IXIX$X$X[.[.[.].T.y.E ( ( / 0.,.;.-.Q Q H J H J D H D H H F H D D C D D C C V V B B B z x r _ ,X} g * @ ; - p a _ ,X6X7X7XiX7X>Xs p O O O O                           UXUXUXUX",
     414"UXUXUXUX            . < j v v n n n F n n F ..i.G.S.a.s.s.s.s.i.i.<.;.+.+.O.O.;.,...S : & : , + , - ; , p a a a a : - - - O O O ; + @ + * , > i w c x N Z ! 3.H. X|.}..X-Xy.! P J o.o.#.$.,.;.<.<.8.4.r.t.t.t.8.;.;...F < .                               . . % 2 & j m m n B B V V v V J :.6.6.6.6.6.2.A o     . X * X               o 2 0 z Z R IXIXIX$X$X{.|._.E.( S A P S #.t.p.7.4.:.Q H H D D H D H D D D D D D D D V D V V C V B x l w _ 1X}  .t @ ; - ; a ' ,X6X7X7XiX7X>Xa : O - - O                           UXUXUXUX",
     415"UXUXUXUX            . < 6 x v v v n F n n n G i.s.d.s.i.8.5.1.1.1.+.O.O.O.O.o.O.o.J w a s e > : : : a a > s f f f a p p - + + O + @ & = t > g { eXqXT N u ( y.%X@X{.@X%Xy.! ! -.o.O.O.O.O.;.;.<.;.;.;.;.q.0.0.,.,.....V #   .                             . # 2 8 < 4 x v m V c V V V V H 2.4.6.6.4.6.4.A = . .   X * *                 o 2 l N R R IXIXIX%X$X X!.y.P E A D V x D >.C.R.C.2.Q Q H H D H D D D F D D D D C C V V B V V B N l q f 1X} g > * + ; - a >X6X7XiXiXiX6X3X) : @ - @ O                           UXUXUXUX",
     416"UXUXUXUX          . . $ 6 j v v n v n F n G G 1.s.s.i.5.1.<.;.;.O.O.=.O...G o.o.o.F 0 > d d f d a a s f f f f f f f a p ; ; @ + o o * > h ` tXbXmXNXy.A E / m.IXIXZX%Xc.P P q.#.$.O.O.O.;.<.,.<.,.;.;...,.,.q.q.,.;.-.D $                                 . # 8 8 5 4 k v V c c v V V V J 2.2.2.2.2.2.4.W % o     X * *                 X o & 5 R R | %XIXIXIX%X%Xy.( E A B x 9 % 8 W 7.A.C.7.2.-.H D C D D D D D D D D D V V D V V C V z w l ` 1X} Y t = , ; : a >X6X7XiX7XiX7X6X>X,   O -                             UXUXUXUX",
     417"UXUXUXUXX         o . $ 3 x c n n v n n F F G 1.i.s.1.1.1.;.+.O.O.O.G ..=.X.#.o.o.G 5 > f f f d d d f f _ _ [ _ f s > ; ; ; , @ @ * t g b.NXGXNXyXn.w.J ! y.m.IXIXIXtXy./ ,.$.$.$.O.;.;.,.>.4.,.;.;.;.;...P / q.,.,.,.V #     .                           . & w 0 2 4 x V V V c V v V D Q :.:.:.>.>.2.2.W 9       X X X                   X . % w u R (  .2XIX%X%Xy.^ P c l 9 * * = = N Q 2.C.C.6.:.Q J H D D D D D D D D D D C C C C B z z w [ 9X1XR y > ; ; ; r >X6X7XiXiXiXiX7X,Xp O O -   X                         UXUXUXUX",
     418"UXUXUXUX  X X X X   . # 1 l v v v n n n n n G ;.1.1.1.O.O.O.O.=.=.=.G G L #.#.%.$.F 6 > f _ f [ _ ` _ _ [ _ ` _ _ d d , , , > s > h | hXMXGXNXeXm.v.w.,.,.,.m.m.eXm.n.c.*.*.$.$.O.O.,.,.,.;.,.1.,.,.;.....J P ! ,.9.,.N #                                 . & w w 0 3 j v V c c V V c V W Q :.:.:.:.:.3.Q 9         X                       X * = 9 q l w Y y.m.y.! H z 5 9 * * * o o o % w Q 6.C.B.4.:.-.J H D D D D D D C D C C C C B N N b 1X0X} g y t h ; ; r >X6X7XiXiXiXfXiX>Xa . O O O                           UXUXUXUX",
     419"UXUXUXUX  X X X     . # $ l v v n n v n n n G =.;.1.O.O...=.M G G M G =.#.#.%.c.$.K l d f ` [ ` [ _ ` [ ` _ [ _ f d > , , , h g z.rXbXbXNXeXv.c.0.0.9.,.,.w.v.m.m.n.n.v.w.w.,.O.,.;.,.;.,.,.,.,.,.,.,.o.....o.o.,.2.,.0                                     2 w w 2 1 j v V V c c c V V H ~ ~ Q :.~ ~ :.~ y X                             X X * * t = 8 w w N E R N N w = * * * * X   X o = 9 N Q 4.C.7.2.:.Q H H D D D C D C D C C C C Z l } 1X1X1Xg y t , : ; a >X6XiXiXaXfXfXiX' + + O O                             UXUXUXUX",
     420"UXUXUXUX@ X X X X . . . $ 6 k v v v n n n F F ..;.+.O...=.G G M M G M X.%.l.l.c.#.M b d ` ` ' } [ ` ` [ ' ` f h > > > > ` ` } rXbXGXNXeXv.0.9.9.0.9.q.0.0.r.w.w.v.v.e.w.,.w.9.,.;.-...o.,.,.,.,.,.,.,.....L P o.,.8.J =                                   . 2 u N 8 3 j v V v c c c V C H H W ~ Q Q Q Q W y .                           X X * * t * * * t 9 9 9 9 = = * * * * * * o *   X X X % 2 N :.7.B.7.6.>.-.J H D C C C C C C D C z b ' 9X9X} t t t > > ; _ ,X7XiXiXfXfXfXdX) @ O @ -                             UXUXUXUX",
     421"UXUXUXUX  X   X X     . $ 3 k x v v v n v n n F O.O.O.M M M M n M M M X.%.l.n.b.&.M m I ` ] ' } [ ` f f f f d s > > s g } bXGXbXbXyXn.0.q.9.9.,.9.9.0.0.0.0.9.0.0.0.0.9.,.O.,.o.,.,.,.o.o.,.9.q.q.q.,.o...J o.P q.8.D #                                   # 8 A Z 2 3 j k V c c B c B B D A H W H Q W ~ A 9 .                           X X t * * * * * * * * = * X * * * * * * X * * * o       X o 9 Z :.7.p.C.4.:.Q H H D C C C C V C N w 1X2X2X` y t h > , + _ 3XiXiXfXfXfXfX,Xd ; O @ O                             UXUXUXUX",
     422"UXUXUXUXX X X       . . # 3 k x v v v v n n n G O.O.=.M M n n M n M M @.&.x.b.x.#.M m I f _ ' [ ` f d : > : h h h ` } rXbXGXGXNXeXm.0.q.9.$.q.9.9.9.0.0.e.0.0.0.0.0.w.9.o.9.,.,.,.o.,.,.,.9.9.,.q.,.q.,.,.P ..o.,.8.S                                     $ w A Z 8 1 j x v V c c c c V B z B B C H H H A 9 o                         X * * * * * * * * * * * * * * * * * X * * X X * X X X X X X o X o 9 E W 4.7.7.2.:.Q J H C C C C C C Y } 0X1XR y t t > : : ' 6X7XsXfXfXgXiX>Xa ;   O O                             UXUXUXUX",
     423"UXUXUXUX    X         . # 1 j k v k v v v n n F G ..M M n n n n n M =.L &.l.b.b.l.T U I g ` ` ` f g f > , > g } qXhXMXGXbXNXyXn.m.0.9.#.9.9.q.0.0.0.0.0.0.0.0.0.0.y.9.q.,.9.o.9.9.9.9.,.9.q.9.9.9.,.q.,.,.o.o.,.>.q.w                                   . < z A Z 9 1 j k c c z z c c c x l 6 l x B N B z 9 o .                     X * * * * * * * * * * * * * X * X X X * X X X * X X X X X           * = y u Q 2.7.B.6.:.W D C C A A N I 1X9X` t y t i e @ ; >X6XiXsXfXfXfXiX] a ; O   O O                           UXUXUXUX",
     424"UXUXUXUX  X             . 1 j v k k v v n V n F G M M n M M n M n M M M L &.l.b.l.{ K b f f h d e > > h h } eXzXMXGXbXhXtXn.m.c.0.0.9.q.9.9.$.9.9.q.0.0.0.r.0.0.0.9.0.9.q.9.9.9.9.q.9.0.w.y.0.q.y.9.q.q./ q.q.y.,.P : O                                 . < N A Z y 1 j k c c z c c c c x 5 5 3 6 q l x q 2 #                       X X * * * * * * * * * X * X X * X X X X X X X X X X X X X X . X     o o o = = u H >.6.6.3.-.Q H A A S [ 2X1X` y i i h > @ p >X6XiXsXfXfXfX9X) ; ; O @ @ O                           UXUXUXUX",
     425"UXUXUXUX                . < 4 x c v v v n v v n M n k n k k n n n M M M L L &.l.b.%.U m r s e & o @ > [ rXMXGXMXJXNXtXm.v.c.0.q.q.q.9.0.9.q.0.9.9.9.0.0.0.v.0.0.9.0.9.9.9.0.9.q.9.0.0.v.c.v.0.c.c.0.0.0.0.q.,.8.w.I + +                                   1 N E Z r 2 4 j k c c c x c c l 3 1 1 1 3 6 6 5 2 $                       X X X X X X * * * * X X * X X X * X * X X * X X   X   X                     X X o 9 Z Q >.6.2.Q W A Z ' 9X1XR y t i i > & : >X7X7XsXfXfXiX>Xp - - @ O                             X UXUXUXUX",
     426"UXUXUXUX                . $ 3 x x v v k v v n n n n n k n n n n n n M M M M L { %.c.$.L b e f h s } 2XbXMXMXNXhXtXn.c.c.c.c.c.0.0.q.9.9.9.q.q.9.9.9.0.0.0.e.0.0.0.0.0.0.0.0.c.c.0.v.t.v.v.m.v.v.c.c.y.m.c.0.,.t.b._ + +                                 . 5 C A N 9 < 4 k x c c x c c c x 3 1 1 1 1 3 5 3 5 <                           X X X X X X   X X X X X X X X X X X X X X X   X X X X                 X X X X X o 9 z ~ 2.2.:.A S ' 1X` t y i t e e > a ,X9X7XsXfXfXiX' - O O - O                     X X   X   UXUXUXUX",
     427"UXUXUXUX                . $ 3 j k v c v v v v n k M k n k n n n n n n M L G X.X.#.w.9...K I _ } dXxXbXbXhXyXn.m.b.c.c.0.0.0.0.0.q.9.9.q.9.$.9.9.9.9.0.0.0.0.c.0.0.c.0.0.0.c.c.c.m.n.n.m.m.n.n.n.tXm.eXtXn.t.t.tXqX_ a + . .                             # 5 Z E u % $ 4 j x x z c x c c x 3 1 1 1 1 1 1 1 1 1 #                             X X     X X X X X X X X X X X X X X X X X X X                     . X   X . o o = 9 N Q :.W u _ f t t y t R t > = s >X6X7XiXiXiX6X) @ O O O O                 % % * X   X   UXUXUXUX",
     428"UXUXUXUX                  # < l c c k z v v k v n v n k n k k k n n n G M O.;.<.1.<.4.:.H Y dXxXbXbXrXn.c.0.q.q.q.c.q.c.0.0.0.q.9.9.$.q.q.9.$.q.9.9.0.0.0.0.t.c.v.c.c.v.v.v.n.m.n.n.eXtXtXrXrXNXlXbXbXrXn.m.tXwX1Xs a + O O .                           $ 6 A W u % $ 3 j k x c x c c z x 6 1 < 1 1 1 1 1 5 1 1 .                                     X X X X X X     X X X X X X X                               X     . .   o . & u A u > * = t > t t > = > e >X3X7X7XiX7X<X; X     O X                 = 9 o o X X X UXUXUXUX",
     429"UXUXUXUX                  # < 6 x k x k v v v v v v n k k n k M v n G =.,.1.1.5.i.5.t.l.} 1X2XrXrXm.c.%./ P q.! #.q.q.q.0.0.0.9.q.$.,.9.#.9.#.9.9.9.0.0.0.v.v.0.v.c.v.v.v.n.n.n.eXrXtXhXbXkXlXbXbXbXlXtXm.b.uX2X' ) _ a ; O O                           < q W ~ u % % 3 j x x z x x x x z l 1 < < 1 1 1 1 1 1 1 < .                                         X X X X   X X X X X   X   X                             . .   . .   X X 9 S P u = = o & t > > > : & ' 6X7X7X7X3X)   @ O O O                 . 2 9 = o X X   UXUXUXUX",
     430"UXUXUXUX                . . # 4 x k x k c v v v v v k k v v G M G O.;.1.5.5.1.8.0.b.2X8X8X,Xd ! t.9.q.! / P #.q.q.q.q.q.q.9.0.9.q.9.q.o.o.9.9.9.9.0.0.0.c.v.c.v.v.v.v.m.n.n.eXIXyXhXlXkXbXbXbXbXbXbXtXm.n.rXwX1X>X_ ' ' p O                           . < z Q ~ w # % 5 j x z x x x x z c l 1 < < 1 1 1 1 1 3 3 3 <                                       X     X X     X X X X X     X X                             .   . . . . % R q.T A A i y > o @ , ; + : _ 3X7X7X7X<X    O O O                   . y y t = * o X UXUXUXUX",
     431"UXUXUXUXUX                . # 1 x x x x k z k v v v n n n M ..;.1.<.1.<...J P } 1X6X9X1X' a + 0 :.4.,.,.o.P q.#.#.q.q.#.q.#.#.q.9.9.9.#.9.#.9.9.9.0.0.0.e.c.v.v.v.n.n.n.eXeXeXrXlXkXkXbXbXbXbXbXbXyXm.n.rXlX1X1X>X,X9X1X;                           . # 5 H 3.~ y # % < j v z x x x x x x x 3 < 1 1 1 1 1 1 1 3 3 3 < .                                           X   X   X X     X X                                 . . . . . & i c.{ T W H H S i r 9 : + : : a ,X6X6X3X) O     O O X                 % u y t = = o o UXUXUXUX",
     432"UXUXUXUXUX                  . $ j x x k x x x v F G J ..;.1.1.;.;.-.F c r f ' ,X3X1X' s ; ; +   S ,.4.,.,.,.#.#.#.,.o.,.q.,.q.9.9.,.9.o.o.9.q.q.0.0.0.v.c.v.v.m.n.n.n.eXeXyXNXlXbXkXbXbXbXbXbXbXrXn.n.tXlXdX1X>X9XiXiX'                             . # q :.2.^ w & % 8 j v c x x x x l x x 6 < < 1 1 1 1 3 3 3 3 3 3 <                                                     X X X   X                                 .   . o o 9 / v.c.T W W P P P S S w r 2 2 < >X6X3X' p ;     O         X         o 9 u y y = = = o UXUXUXUX",
     433"UXUXUXUXUX    X             . $ 3 l j x k x c n G ..<.i.u.;.J V N r r a s _ ' ' ] ] a + + . + + # S t.8.,.,.,.o.o.! o.o.o.#.,.o.q.#.,.9.9.#.$.$.9.0.0.c.v.v.n.n.n.n.n.eXIXhXlXkXbXbXbXbXbXbXJXlXeXeXtXuX9X1X1X9XsXfX9X)   O O                       # $ l 3.2.~ N & % 2 q c k c x x x x x x l 1 < 1 1 1 1 3 3 3 3 3 4 3 <                                                 X   X   X   X                             .   X o o o Y v.b.c./ ~ ! ! ! W P A T S r r 3 ' ,X>Xa - O     X                   % y u y y y = * o UXUXUXUX",
     434"UXUXUXUXUX    O               $ < 6 l j x n F ..;.5.i.5.P b & : + : p a a a a a a O O + O O + + . # K t.8.>.,.,.-.P P o.,.o.,.q.o.q.q.o.9.q.%.q.0.0.c.v.m.b.m.eXtXeXeXyXlXlXbXkXbXbXbXJXJXbXNXn.n.rXpXdX9X1XdXfXgXiX,Xp - O O O                   . % < D 2.3.3.Z & 9 & 0 j z x x l l l x x j 3 1 1 1 1 1 3 3 3 3 4 3 4 3 < X                                                   X X   X                           .   X   X X S c.n.c./ ! ! ! ! ! ! P P P S m b l _ >X_ : . O                       # 2 u R u y y 9 % o UXUXUXUX",
     435"UXUXUXUXUXUXX     X   X X   . # $ 5 x c F ..<.p.a.t.#.[ _ ; + O O O ; ; a +     X X   O . + + . + O # S t.8.2.;.,.....P o.,.o.#.,.#.#.q.q.$.q.0.0.c.c.v.v.n.eXtXtXtXrXlXbXbXbXbXbXbXMXbXbXyXm.tXrXlX0X8XpXsXvXcXfX6X] a ; O                       . 2 q Q 6.4.3.Z 8 8 8 8 l c c x l l x x x l 6 1 1 1 3 3 3 3 3 3 3 3 4 4 4 1 . X                                                         X                         X . o o S c.b.| / ~ ~ ! ! / / P P T T T T I T [ { r + # . O         X     X     & u Z Z Z y y t @   UXUXUXUX",
     436"UXUXUXUXUXUXX X X             . $ 5 B Q >.5.i.r.#.I _ ) a + . . . O O . O .               . @ + + + . # x ,.8.6.>.,.o.o.P o.o.! #.q.#.#.#.9.0.0.c.c.v.n.n.eXeXtXNXlXbXbXbXbXJXbXbXGXbXNXyXn.tXlXlX8XpXdXxXvXnXxXiX3X) p - O O                   . % q c 2.B.6.:.Z w w 8 8 x c v x l l l l q q q 3 3 3 1 1 3 3 4 3 3 4 4 3 6 6 3 &                                                   X                         X   . o o % S c.c.c./ ! ! ! ,.! / ! P P P T { } qX1X{ U 2 # # # .                 X   & N Z Z Z u y t @ UXUXUXUXUX",
     437"UXUXUXUXUXUX.   X   X   X     . # 0 H <.i.1.#.Y _ s a a : .   .                         O O @ @ + . + + . 7 ,.t.8.8.:.,.o.o.o.,.o.#.q.#.#.q.0.c.c.v.n.n.tXtXrXNXlXkXbXbXbXMXbXMXbXNXyXeXn.2XlXpXpX8XlXxXmXmXcXaX6X<Xa ; O O O                 . . $ l Q B.B.B.:.B u w u w x c V N l l l l l l l 5 3 3 1 1 3 3 5 4 6 3 3 4 4 j l j <                                                   X   X                     X X X = S 0.c.{ / ! ~ ! ! / ! / P P P T { { z.1XqXz.b 2 $ $ # # #           . .   . w Z Z Z Z u u 9 o UXUXUXUXUX",
     438"UXUXUXUXUXUX. X X               $ 5 Q <...S f f a a ; + .     .                           O + @ + + + + O # 7 K y.8.8.2.,.q.,.o.#.P #.&.&.%.c.c.v.m.n.tXlXlXlXbXbXbXbXbXbXbXJXZXyXtXn.tXdXdX0XdXpXkXMXmXmXnXkXpX6X) : - O O                 . . # < B 2.B.C.B.>.Z N N N u S c v c x l q q q l q q 6 3 3 1 3 3 4 4 4 3 4 4 6 4 l x x 5 %   X   X                                       X                     X X X = u P q.c.{ / ! ! ! ! q./ / ! P P L T { } } z.z.[ r 8 2 & & & # # .       . . & 8 A W E Z u y u =   UXUXUXUXUX",
     439"UXUXUXUXUXUX  X   X     X X     $ 3 l w e > a p - O .                                     O + ; > & : . + ; + r Y c.t.8.8.1.,.$.9.q.q.%.c.c.c.c.n.n.tXhXlXbXbXbXbXbXbXJXNXyXtXyXtXtXrX2X0X8XpXkXbXmXmXmXnXvXjX6X>Xa ; ; O O O           . . . . < 6 Q C.C.B.B.:.A N N A E A B B c c q q q l l q q 6 6 3 1 1 3 5 6 6 4 4 4 4 4 j k c z 6 < o X X X X                                   X X X       X .   X X   o 9 C ! #.&./ ! ~ ! ! ! / / / q.P P L T T T T T U I I e 2 8 9 2 2 < $ # .   . & & 5 A ~ ~ E Z Z Z y =   UXUXUXUXUX",
     440"UXUXUXUXUXUXUX  X           X * $ $   O - O O . .                                           : : : : : : + @ + : r f T c.t.8.8.8.8.w.9.,.q.0.c.c.v.b.eXyXNXlXNXNXbXZXyXIXyXeXyXtXlXuX2XpXpXlXbXMXGXmXmXnXvXaX8X3X) a ; - O O             . . . % 2 x 2.C.C.7.B.3.A A A A E ! A N c c l q q q q w q q 6 3 3 1 3 5 6 6 4 4 4 4 4 j l l x c j 5 $ o X X X                                   X X X X X   X X   o 9 q H o.o.P / / ~ ! ! ! / / / / / P P P T T T T m v q 8 9 9 9 9 = 2 2 % # # 2 2 0 5 c Q ^ ~ E A Z Z u = UXUXUXUXUXUX",
     441"UXUXUXUXUXUXUX    X     X X * * # .     O .       O                                         + : : > e > : : + : ; r r Y 0.y.%Xt.t.t.t.t.t.t.v.e.v.v.n.n.yXIXyXZXyXyXeXeXtXtXlXjXjX0XpXsXbXMXmXGXGXmXmXnXxXpX8X,Xf ; ; O O O           . . . % 2 5 Q B.C.C.C.C.4.Q E E E ! ( E C V V z q q q q q q q 0 3 3 1 3 6 5 6 4 4 4 4 6 6 l l x k z x l q 2 & X X X                     X           X X X X X X o 9 w C H H P ! ! W W ! ~ ! / q./ q./ T P K K T ( T v b j 8 9 9 9 9 9 9 9 2 = = 0 N C w w H :.Q ~ E E Z Z y = UXUXUXUXUXUX",
     442"UXUXUXUXUXUXUX  X X     X * * * X                                                           O ; : d d a f d e : a : : & f Y z.b.eXb.m.m.t.m.t.M.m.n.n.%Xn.tXeXeXIXhXlXlXdXpXpXpXpXkXxXMXmXGXGXmXmXmXnXvXjX8X6X' a - O O O           . . . # 9 0 B 6.A.Z.C.C.C.6.~ ~ ~ E ! ~ E Z N D V x q q 0 q q q q 5 3 1 3 3 6 6 3 4 4 4 4 4 j 6 x x x x c x x l 0 8 % X   X X   X     X X X X X X X X o X X o & w N A J J H H H H ! W ! ~ ! / / / / / / P P P T T P V x l 8 9 9 9 9 9 2 9 2 9 9 w D Q A z z W :.:.~ W E W E 9 X UXUXUXUXUXUX",
     443"UXUXUXUXUXUXUX        X X * * * X o . .                                                     O + : > f f f f f d r a a s s _ _ ' } tXtXtXtXeXeXIXyX%XtXyXeXtXtXlXlXjXjXjXpXjXkXkXbXMXGXGXGXGXGXmXmXmXxXkX8X6X>Xs ; ; ; O O         . . . . % 2 c >.Z.Z.C.Z.C.Z.7.^ ~ ( ( E ~ E A C D F V l 0 q q q q 5 0 5 3 3 3 5 6 5 4 3 4 4 4 6 j l l z z c x x z c x l w 9 & = % % = o o o = o = o o % = 9 u N C A H H H H D D H W ~ ! ! ! / / q.| 0.q.T P K P T P K v l 8 9 9 2 2 9 9 9 9 & % 9 A -.J C z Z Q :.:.~ ~ W ~ E = UXUXUXUXUXUXUX",
     444"UXUXUXUXUXUXUXUX  X   X * * * * X X . . .                                                     O + : a f f ` _ ` ` f f s f s s _ ` } 1X2XlXjXjXjXlXkXlXlXjXlXjXpXjXkXkXkXbXbXbXMXmXGXGXmXmXGXmXmXnXvXkX8X8X9X_ a a ; O O         . . . . % 2 q -.A.Z.Z.C.C.C.C.C.3.! ~ ~ ~ W ~ W A V D F z q 5 0 0 q q 6 6 5 3 3 6 5 3 5 3 3 4 4 4 4 6 q l l j l x x x z N c z z x w w w w w w u u w w w N B C D H H H C D D A A H W ~ ! ! / / / / | | / T P P H K P C c x 8 9 8 2 9 9 2 9 2 = 9 9 N :.-.C z V Q >.Q ~ ~ ~ ~ :.W @ UXUXUXUXUXUXUX",
     445"UXUXUXUXUXUXUXUX      X X * * X X o . # # .                                                     O + : : d f _ ' ` ' } ` _ ` _ ] ] ' 9X7X8X0XjX0XjXjXjXjXkXkXkXkXkXxXMXMXGXGXmXGXGXGXGXGXmXmXnXnXMXjX8X6X9X] a a ; O O         .   . . % 2 0 V C.L.D.Z.Z.C.Z.A.D.7.^ ~ ~ W W W W A D H H D z 0 5 0 q 0 6 q 5 5 5 3 6 5 4 3 3 3 3 4 4 4 6 6 l l l l l x x x x z c B B B B N B B B B B C A D H H A H H D A A C D H H ! ! ! / / / / 0.| q.T P P K F H C B l 8 9 9 8 9 8 8 9 9 9 2 9 w Q ;.-.V N J >.3.Q Q Q Q 3.2.A @ UXUXUXUXUXUXUX",
     446"UXUXUXUXUXUXUXUX    X X X X X X X X . . # #                                                         X + : r f _ ` ' } } ] } <X2X9X9X8X8X8XpXjXjXjXkXkXbXkXbXbXMXMXmXGXGXGXGXGXGXGXmXmXmXmXnXnXbXjX8X9X5X} ` a ; + O O       . . . % $ 9 8 x <.D.F.D.D.C.C.Z.D.D.7.^ W W W Q H H W W A H J C l q 0 5 q 0 q 5 5 5 6 5 6 3 3 3 1 1 3 4 4 6 6 6 6 6 l l j l l x l x z N N N N B N B B C Z C C C C C C C C C C A H H W ! ! ! / / / / q.q./ P K H H K V c x w 8 9 8 8 8 9 9 8 8 8 9 u Q :.J H D J <.2.:.Q Q Q :.6.4.y   UXUXUXUXUXUXUX",
     447"UXUXUXUXUXUXUXUX          X   X     X . # # .                                                     X +   @ > > h f _ ' ' 2X9X6X8X8X8XpXpXjXjXjXkXkXxXMXMXGXMXmXGXGXGXmXmXmXGXGXmXmXmXmXnXnXMXxXjX8X8X6X1X` s ; ; + +   . .   . . % # = 8 q Q D.L.D.F.D.C.C.D.P.R.6.~ ~ W W W W W Q :.W J ..J B q 5 q q 6 q 5 q 0 5 5 6 3 3 3 3 3 5 3 4 4 4 6 6 6 6 6 l l l l l l z z z B B B B B B C B B C C C C B N C B D H H Q ! ! ! / ! / / q./ P K A F C F V B N 8 9 9 9 8 8 8 8 8 8 8 y y H ;.:.J D J <.7.2.>.Q Q Q <.Z.~ X UXUXUXUXUXUXUXUX",
     448"UXUXUXUXUXUXUXUXUXX O X     X X o   . o % # # .                                                         @ @ + : a d f ` ] 9X6X8XpXpXkXkXkXkXxXMXMXcXmXmXGXmXGXGXGXGXGXGXGXmXmXmXmXnXnXnXMXxXjX8X8X8X9X1X] a ; ; + O       . % . # % 2 l H Z.F.F.D.S.S.S.S.L.I.I.6.~ ~ E W W W Q 3.2.:.Q ..J J V q 6 0 q q 5 q 5 0 5 5 6 3 3 3 3 3 4 4 4 4 3 4 6 6 6 6 4 6 l l q l z z N c N N B B B B C B A C C C B A C A H ! ! ! W K H K H K K F C D C C V V c q w 9 9 8 w 8 8 8 8 9 9 w u H >.-.J J D >.7.5.<.:.-.-.-.4.Z.Z O UXUXUXUXUXUXUXUX",
     449"UXUXUXUXUXUXUXUXUX  X           X     o = & $ #                                                       X X X   @ @ , a , h ] 9X0XpXjXsXxXvXMXnXnXnXmXmXmXmXmXmXGXmXmXmXmXmXmXnXnXnXMXbXkXkXjX8X7X8X6X6X>X) : - O . O   . . % % % % 2 w D p.J.F.D.D.D.S.D.L.I.^.U.3.E ^ ~ W Q Q ^ :.2.3.:.Q Q ..J B q 0 5 q 0 5 5 6 5 5 5 3 3 3 3 3 3 3 4 4 3 3 5 3 3 6 4 6 q l l l z z z N c N B N B B B B A C B B A D H H Q ! W H A B V B V B B V V V V V V z w 9 9 8 8 9 9 8 9 9 8 8 w u A <.2.J J J >.p.p.4.4.:.-.>.<.a.6.=   UXUXUXUXUXUXUXUX",
     450"UXUXUXUXUXUXUXUXUX                  o = = y 9 # # .                                                       X     @ @ @ ; : d ] 9X8XpXjXxXvXcXnXmXmXmXmXmXmXmXmXmXmXmXnXmXnXnXnXMXbXbXkXkXjX8X8X6X8X6X5X' : ; O O O . . . . % o % 9 2 v 5.F.J.F.S.D.S.F.F.P.(.^.U.6.E ~ ~ E ^ :.:.2.3.4.2.Q Q ..J J N 0 5 0 q 5 q 0 6 5 5 5 5 3 3 4 3 3 4 3 3 3 3 4 6 6 6 6 l x x z N z B N c N B B B B A C C B B B C D H H ! Q A B c z c c c c c V V V V N z w 8 8 8 8 8 8 w 9 9 8 9 8 u E <.>.J J J ;.a.a.7.5.4.:.;.5.d.F.W O UXUXUXUXUXUXUXUXUX",
     451"UXUXUXUXUXUXUXUXUXUX        X     o = % = 9 9 9 < $                                                             @ O O , : > > ) ,X3X6X8XjXbXMXbXMXMXnXnXnXnXnXnXcXxXxXxXxXxXjXpX8XpXpX8X8X8X5X9X1X,X>Xs ; O O O .   . . % & = 9 w v >.L.K.J.F.D.S.F.F.F./._.^.U.V.E E ~ :.~ :.:.2.2.2.4.:.-.Q J J J z 5 0 0 q q q 0 q 5 5 5 5 6 6 5 6 3 3 5 4 3 6 6 6 q l l l x z z N z N c z B B B C C C B c B V C A H ! ! ! H V c c k z c x c V B c z q w 8 8 8 9 8 8 9 w 9 w 8 8 u A 2.>.-.-.-.-.5.Z.p.7.<.4.2.<.a.J.D.y X UXUXUXUXUXUXUXUXUX",
     452"UXUXUXUXUXUXUXUXUXUX      X o X   X = = y y u w 0 3 $ .                                                       O     X @ ; ; ; @ ; ) ] 3X,X0XjXjXjXkXxXxXkXaXsXiXdX9X9X9X3X,X,X>X>X,X3X9X9X>X_ s : < + - O . . . o . . % 2 y u B G 5.~.(.P.J.F.F.S.F.L.U./.).~.U.B.u Z 3.3.3.2.2.2.4.2.4.4.>.Q -.;.;.J C q 2 q q 5 0 q q 5 0 5 5 6 5 3 1 3 3 3 6 6 q 6 l l x x x z N c B c B N B B B C C N c c B V C H P P ( P P C V c x x x c k N x w w 8 8 9 8 8 8 w 9 8 8 8 u u Z :.4.>.:.-.-.<.p.S.Z.p.5.4.4.5.a.D.J.:.O   UXUXUXUXUXUXUXUXUX",
     453"UXUXUXUXUXUXUXUXUXUXUX    X * o = = = 9 9 w y u w 0 1 $ .                                                     X X X O @ - , @ @ : : g ` ] <X3X0X0X0X9X9X3X3X,X,X>X>X' ' ) _ ) _ ) ' >X>X] a : . . + O . O O . % . . % = y u C -.C.~.(.^.~.K.F.F.D.F.U.U.(.).~.U.~ 9 y ^ V.6.6.3.2.2.2.4.4.>.-.Q :.;.;.-.H q 0 q q q 6 0 0 q q 5 5 5 5 1 1 5 3 6 3 6 l x l x z z z N B z B c c B C B B B z z c c V D H W P ( ! H H V c c v z z z l w 0 8 8 9 w 8 9 8 w 8 9 9 w u A :.<.<.;.;.-.5.D.L.S.p.7.5.5.i.Z.D.K.F.u   UXUXUXUXUXUXUXUXUXUX",
     454"UXUXUXUXUXUXUXUXUXUXUXO     X = t y = = 9 9 w u u N q 1 $ .                                                           @ @ @ @ - - , h h h h _ ] <X<X<X] ] ) ) ) f a a a a a : a a f _ s a - ; O O O O O   . # . . % = y Z H ..C.(.].(.(.~.P.J.F.J.L.~.(.).(.^.H.N % y ^ B.B.A.6.2.>.>.>.2.4.4.:.-.;.>.;.>.J q 2 5 5 q q 0 q q 0 5 0 2 5 1 5 1 1 5 q l x x z z z z z N c c N B B B V B B z N B B D H H J P P H H H D V c x l q w 8 w 9 8 8 8 8 8 w 8 8 9 8 8 u E 4.5.>.-.;.;.4.T.`.J.D.C.7.5.i.C.D.K.P.2.o O UXUXUXUXUXUXUXUXUXUX",
     455"UXUXUXUXUXUXUXUXUXUXUX      X = y y y y y 9 u u u Z C N l 1 # .                                                       X X O @ @ , ; , , > > h g g g g g d a a a ; : ; a : ; : : a a p ; ; ; + O O + + . . # % % o 9 w N -.<.A.(.).{._._.^./.K.J.T./._._.).(./.! o * y W 3.B.!.A.6.2.2.>.>.4.5.4.>.>.<.<.<.<.-.B 0 5 q w q q q 0 0 5 0 5 5 5 5 5 5 q l l l z z z c c c B B B B B B B B B B B B B D H H H H D D B B B z q w w 8 8 8 8 9 8 9 w 0 8 8 w 8 8 2 A :.2.5.<.-.;.;.7.T.#XXXL.D.p.i.i.p.S.J.I.A.w   UXUXUXUXUXUXUXUXUXUXUX",
     456"UXUXUXUXUXUXUXUXUXUXUXUX  X X * y E Z y 9 9 u u N Z A A D x 1 $ # .                                                       X O @ @ , , s > s h > > , , > : ; ; ; ; ; + ; + ; + + ; + ; O . + + O . . . . % % % & & 9 u J 5.R.).).)._.{._.(.^.I.XX=X+X'.{.).^.B.&   o y E 3.B.!.W.A.8.>.>.<.4.5.5.7.<.<.<.<.;.5.;.H N q 0 0 5 0 0 0 5 0 0 0 8 5 5 5 q q q q l z z z c c B B B B B B B B V B V B C D H H C C B z z l q w 0 8 9 8 8 8 8 0 8 0 8 8 8 9 w 0 w W 4.5.<.<.1.<.<.p.I.oX+XOXT.F.Z.a.Z.S.J.P.P.:.O   UXUXUXUXUXUXUXUXUXUXUX",
     457"UXUXUXUXUXUXUXUXUXUXUXUX      X t E E i w y y w N Z A H H D c 4 < # . .                                                     O   @ @ , , s , ; , ; @ ; , ; ; + + ; ; + + ; ; + + O . O . O . . + . . # . . % = & 9 8 x -.R.].].).)._._._.(.^./.+X;X#X_.].).'.E     @ = E :.6.!.Q.W.A.4.;.4.<.4.5.i.7.4.<.;.<.<.<.;.Q B 0 2 0 0 q 6 0 5 0 5 0 0 5 0 5 0 q w w q q z z z z N B B B B c B V B B B B B C B B N w w q w 0 0 8 8 9 8 8 w 0 8 8 0 w 8 8 2 8 Z ~ 4.p.5.1.;.;.5.Z.I.'.XX+XOXXXY.F.D.Z.L.P.~.Z.9   UXUXUXUXUXUXUXUXUXUXUXUX",
     458"UXUXUXUXUXUXUXUXUXUXUXUXUX  X O = u ^ ~ Z N u N N Z A H W W Q F j 1 < # # .                                                       @ + + - + @ O @ - O O @ ; + ; + + + + . O . O . . O   . . . . % % = o % 9 8 w l F ;.H.).].{.).).)._._.{..X:X;XSX#X(.)._.B.o       , u ~ 6.A.&XOXY.C.5.4.<.5.5.7.p.5.5.<.<.<.<.5.u.<.J N 2 5 0 0 0 q 0 0 0 5 0 5 2 0 0 0 0 0 0 0 w q l z l z l x l z N N z N z N w w w q w 0 8 8 8 8 8 0 0 8 0 0 w 8 8 8 8 8 2 u W 4.7.5.<.;.;.5.s.R.~.~.~.`.XXOXOXQ.T.L.J.K.~.U.! . O UXUXUXUXUXUXUXUXUXUXUXUX",
     459"UXUXUXUXUXUXUXUXUXUXUXUXUX  . X o t E 3.3.E Z u Z Z A A W W Q -.J n j 3 < # # . .   .   . .                                                     O O . O   O .               .   .     . . . o . % & % 9 9 u N V ..a.Y.^.).[.[.{.).).).)..X#X;XSX;X:X(.].H.w         * = E 2.B.Q.Q.XXU.D.5.4.5.7.5.p.a.a.p.5.<.<.5.i.i.i.<.J N q 0 0 0 q 0 q q 0 0 0 0 0 0 5 8 5 8 0 8 w 0 0 w 8 0 0 0 q w w 0 w 0 8 8 8 8 8 8 8 0 0 0 8 8 0 8 w 8 w w 8 8 9 N Q 4.i.i.i.1.;.;.5.U./.(.^.~.I././.XX=XOX`./.~./.~.7.    UXUXUXUXUXUXUXUXUXUXUXUXUX",
     460"UXUXUXUXUXUXUXUXUXUXUXUXUXUX  O o t i ^ %X3.E Z B Z A W H W Q Q :.-.F k j 3 < . . . . . .                                                                                 . . . . . o o o % o % % % 9 9 w B G <.D.I.I.I.^.).[.].).).).]..X:XSXSX;X:X).).3.          + X u 2.A.Y.Q.XXT.P.D.5.5.5.5.p.p.a.p.Z.i.5.5.5.5.5.i.1.>.J A l 0 0 0 0 0 0 0 0 0 0 q 0 q 0 0 0 0 8 8 0 8 0 5 8 0 0 0 0 8 8 w 8 w 8 0 8 w 0 0 w 0 w 0 0 8 0 8 8 8 8 Z W 4.p.p.5.1.<.+.+.i.P..X{.(.^.I.I.I./.`.=X-X+X`./._.L.w     UXUXUXUXUXUXUXUXUXUXUXUXUX",
     461"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX  * * y E V.*XV.( A A A H W W Q Q Q ;.>...M k j 3 $ # . . # . . .   .   .                                                           .     .   . . . o o o % & = = 9 9 w l V ;.C.I.~.I.I.I.~.^.].].].].]. X.X;XSX;X;X#X).H.y     UXUXUX  O * ~ A.Q.Q.T.U.I.I.D.i.5.i.i.p.p.a.a.d.a.i.5.<.1.5.i.i.5.>.Q A N 0 0 5 5 0 0 0 0 0 w 0 0 0 0 0 0 0 8 0 0 8 8 8 8 8 0 8 8 8 0 0 w 0 0 0 w w 0 0 0 8 8 0 8 9 w N Q 4.7.i.i.5.1.;.+.i.S.K.~._.{.{.^.I.I.I.~.XX=X:X=XoX_./.:.    UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     462"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX  O o 9 Z ^ %X*XV.:.W A A W ~ Q -.:.:.>.<.<.;...n k 4 < & # # % # . . . . . . .     .     .                                 . .   . . . . . o o = o o % = = = 8 w w c C ..7.I.(.^.I.I.I.~.I.^.(.].{.{.]. X#X:XSXSX;X#X/.E O   UXUXUXUX      u B.Q.Q.U.U.I.P.P.D.p.p.p.p.p.a.Z.S.S.d.d.p.5.5.5.5.i.i.u.5.>.H C w 0 0 0 0 0 w 0 0 0 0 w q 0 0 w 0 0 w 0 0 0 8 w 8 w w 0 0 w w w 0 w 8 w w 8 8 0 w Z W 2.6.p.a.i.5.1.1.+.1.d.F.P.I.I.(.{..X_./.I.P.~.=XAX-X+X`./.4.# O   UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     463"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX  o = y E %X*X!.B.2.W W Q Q Q Q :.:.>.2.<.5.<.1.O.M k j 5 2 & $ $ # # . # # . . . . . . .   . . .   .   . . .   . . . . .   . o . o o % o = % % = 9 = 9 y u N V D :.C.R.(.].(.(.~.I.I.I.~.I.~.).{.[.[. X#X:XSXSX:X.X~       UXUXUXUXUX    X E W.Q.T.K.P.I.I.~.L.Z.a.p.a.Z.d.S.S.F.S.F.S.p.i.5.i.p.i.a.i.i.4.:.W A N N q q w w w w 0 w w w 0 w q 0 0 w w 8 w w w w w w w w w w w w w w N A ~ ~ 2.5.p.a.i.i.u.1.+.N.a.S.J.J.P.P.P.~.{.{.'.^.~.~.`.-X;X:XoX'.Z.& X   UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     464"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX    X y Z y.%X*X!.A.2.:.W Q Q :.:.>.>.2.4.4.5.5.i.u.+.M k l 5 1 2 2 $ % # # . % . . . .   . . . . . . . . . . . . . o . . o o o o * = o = = = = 9 8 u q z C H :.7.U.[.}.].).(.^.^.I.I.I.I.~.~.).[.}.[. X#X:XSXSX:XV.      UXUXUXUXUXUXUX    = E.Y.Y.K.P.P.P.~.~.P.D.a.a.a.Z.S.S.F.F.F.J.L.F.Z.p.i.5.5.1.u.a.a.7.4.>.Q J C w q w w w 0 0 8 2 8 2 8 8 8 8 8 8 8 8 8 8 0 0 w u u u Z A Q 3.6.p.C.a.i.5.u.1.N.1.u.a.D.K.P.J.J.J.K.K.I.'..X_.(.(._.=XAX;X=X'.I.Z     UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     465"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX    o y ^ %X!.!.Y.D.C.>.Q Q -.:.>.>.<.4.5.7.5.5.i.a.i.+.O.M k j 6 2 2 2 & % $ % # # % # # # % . % o . . % % # % o % % % % = = = = = = = y 9 8 u N V J ,.8.H._. X}.[.].].].(.(.^.~.I.I.~.^.).[.[.[.[..X#X:XSX;X@XZ O   UXUXUXUXUXUXUXUX  O - E Y.Y.P.P.P.P.I.I.I.P.L.S.d.S.S.S.S.F.F.F.J.K.K.L.Z.p.5.5.i.i.a.d.a.i.7.<.2.:.Q W W A Z N N N N u w 0 8 8 8 w w w N Z Z Z Z E ~ :.2.6.B.p.p.i.a.a.u.u.1.1.u.S.K.I.I.P.K.J.J.K.K.P.P./._.{.).).#XSXSXSX:X/.:.o O   UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     466"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX    * R y.E.E.!.L.D.Z.7.>.:.:.>.>.4.5.4.5.5.7.p.D.D.S.d.i.N.O.M M k x l 5 5 2 8 5 5 2 & 2 $ & % & & = & & & = = 9 9 9 9 w 9 w u u w N B C H J -.7.U..X X X|.|.|.[.[.[.].).(.^.^.~.~.(.].[.}.[.[.[. X#X;XSX:XR   O   UXUXUXUXUXUXUXUXUX    O ( Y.J.K.P.P.I.I.~.~.~.K.D.S.S.S.S.F.F.J.J.K.P.P.I.L.F.Z.a.p.a.a.a.d.i.d.p.p.p.p.7.6.6.2.3.3.:.! Q Q W H W ~ :.:.3.6.3.6.6.C.B.Z.a.a.p.a.i.i.k.u.u.i.a.D.P.~.(.^.~.I.K.J.K.J.K.K.P.I._.{.]..X:XAXSXSX:X2.#     UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     467"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX    * t ( %X*XA.D.R.L.F.Z.4.>.>.>.<.4.5.7.p.p.Z.Z.S.D.D.F.S.f.d.u.+.O.=.M n v j j j 5 5 5 2 2 8 2 8 2 9 2 8 8 0 8 0 w q N x c D G J -.<.7.A.H.(.}.|.|.|.|.|.|.|.[.].].].).(.(.^.^.(.].[.}.[.}.[.[. X X;XSX( X X   UXUXUXUXUXUXUXUXUXUXUX    O ~ P.I.P.K.P.I.~.~.~.^.~.L.D.S.F.F.J.J.K.P.P.I.I.I.I.K.L.D.Z.a.a.a.d.i.d.d.d.S.d.d.Z.Z.p.p.7.7.7.8.7.p.p.p.7.B.C.p.Z.Z.d.a.a.a.a.d.u.u.u.u.a.d.D.L.I.^.^.^.^.^.~.P.P.K.J.J.J.J.I.^.(.].{..X;XSXSX-X2.=     UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     468"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX  X   t m.%XA.R.D.D.L.F.F.p.5.<.4.4.5.7.p.Z.Z.S.D.D.D.D.F.F.F.F.G.k.k.N.N.+.O.=.=.n n v k v c v n n v n n n G G G G G ..O.;.1.i.p.R.'. X|.|.|.|.|.|.|.|.|.|.}.}.[.].].).).(.).).[.}.}.}.[.[.[.}.|..X;X| @   O UXUXUXUXUXUXUXUXUXUXUXUXUX    O 3.I.K.K.P.P.I.I.~.^.(.^.P.F.F.L.J.J.K.P.P.P.P.I.I.I.I.I.K.L.D.S.Z.d.d.d.d.d.d.d.f.d.d.d.d.d.a.d.d.S.d.d.a.d.d.d.d.d.d.f.d.a.i.k.s.d.S.D.R.(.).).(.(.^.^.^.~.~.P.P.K.J.J.L.U.^._.).]..X#X;XSXSX8.= O   UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     469"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX    X g y.E.H.D.D.F.L.J.J.D.S.7.5.5.7.p.a.C.Z.D.D.F.F.L.F.F.F.F.F.F.F.F.f.f.f.f.f.u.u.1.1.1.u.u.1.u.1.u.u.u.s.a.d.G.L.U.^.].[.}. X|.|.|.|.|.|.|.|.|.|.|.|.|.}.[.[.[.].].].[.}.}.[.[.[.[.[.[.[.|.#X| O     UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX    O :.K.P.K.P.P.I.~.~.(.(.(.~.P.J.K.K.P.P.P.P.P.P.I.I.I.I.I.I.I.P.P.L.L.D.D.Z.S.S.S.d.d.d.d.d.d.d.d.d.d.d.d.d.S.S.Z.Z.Z.A.Z.D.R.U.(.].].[.].].).).).).(.^.~.~.~.I.P.K.J.K.~.).).].).]..X:XSXFX%X= O X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     470"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX      i y.A.D.D.F.J.F.F.J.K.L.Z.p.p.p.C.Z.Z.D.D.R.D.F.F.J.F.J.J.J.K.K.K.J.J.J.F.F.F.F.G.G.F.G.F.G.D.F.L.U.U./._.{.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.[.[.[.[.[.}.}.[.[.[.[.[.}.}. X.X(       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX    O X :.P.P.P.P.I.~.~.~.^.(.(.(.~.~.P.P.P.P.P.I.I.I.I.P.I.I.P.I.~.~.^.^.~.~./.R.U.R.R.R.H.H.R.H.H.D.H.H.H.R.I.~._.'._.{.$X{. X}.|.|.|.}.[.].).(.(.).(.(.^.^.~.~.I.I.P.I.(.].].).).).{.#X:XSXIXe     UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     471"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX      g y.H.F.D.F.J.J.J.K.P.P.D.Z.Z.S.S.S.D.D.F.L.F.J.J.J.J.J.K.K.J.K.K.J.K.K.K.K.K.P.P.P.P.I.~.~.^._.).[.[.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.[.}.}.}.}.}.[.[.[.[.}.}.|. X~       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX      O Q P.P.P.I.I.~.^.^.^.(.).(.^.^.I.P.P.P.P.P.I.P.I.I.I.I.I.I.~.^.(.(.).).].].|.}.[.}.{.[.].[.{.}.}.}.|.}.|.|.|.|.|.|.|.|.|.}.}.}.[.[.].).(.).(.(.^.^.^.~.~.^.^.(.).[.[.].].].].{.#X;XZXd X   UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     472"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX      i y.A.D.F.J.J.J.K.K.P.I.P.L.L.D.D.R.D.F.F.L.J.J.J.J.J.K.J.K.K.K.K.K.P.P.P.I.~.~.^.^.(.(.).).].].[.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.[.}.[.}.}.}.[.[.[.[.[.{.}. X~         UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX        ~ P.I.P.I.~.~.~.^.^.(.(.(._.).(.^.I.P.I.P.P.P.I.I.I.~.~.~.^.(.(.(.).].].[.}.|.|.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.[.[.].).).(.(.(.^.^.(.^.(.).].[.[.[.].).].].[.{.:X%Xe       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     473"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX      y 3.D.F.F.F.J.K.K.K.I.~.I.I.I.L.R.F.F.F.L.J.J.J.J.J.J.J.K.K.K.P.P.I.I.I.~.^.^.(.(._.).).[.[.[.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.[.[.[.}.[.}.[.[.[.}.[.}.|.$X~ X       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX        ~ P.I.I.~.~.^.~.~.^.^.(.).].].].).(.^.~.I.I.U.I.I.~.~.^.^.^.(.(.)._.].[.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.[.].].].).).(.(.(.(.).).].[.[.[.}.[.].].].].].|.#X%X>       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     474"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX      % ^ F.F.J.J.J.J.K.K.P.I.I.~.~.I.P.K.K.J.L.J.J.J.J.J.J.K.K.L.K.P.I.I.I.~.^.^.^.(.).).].].[.[.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.[.[.[.[.[.[.[.].[.[.[.[.|.}.$Xu X       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX      . E R.~.~.~.^.~.~.~.~.(.(.(.).[.[.[.].].(.^.^.~.~.~.I.~.^.^.(.(._.].].].[.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.[.[.[.].).).).).).].[.[.[.[.[.].].).].].[.]. X.Xy.@       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     475"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX        E Z.F.F.J.J.K.K.K.P.I.~.~.^.^.^.^.I.P.P.P.K.K.K.L.K.P.P.K.P.I.P.I.~.^.~.^.(.(.(._.).].[.[.[.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.}.[.[.[.[.[.[.[.[.[.].].[.[.V.=         UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX    O O u A.~.I.I.~.~.~.^.^.^.(.(.).].[.[.[.}.}.[.{.).(.^.^.^.(.(.).).].[.[.}.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.[.[.].].].].].].[.[.[.[.[.[.].].].].].].[.H.(       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     476"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX      O = 4.F.F.F.J.K.K.K.P.I.~.~.^.^.(.(.^.^.^.~.I.I.P.P.P.P.P.P.P.I.I.I.~.^.^.(.(.)._.].).].[.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.[.[.[.[.[.].[.].[.[.[._.[._.^ O       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX        * :.R.~.I.~.~.^.~.^.(.^.).].].[.[.|.|.|.|.|.}.}.].].].).).).].[.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.[.[.[.[.[.[.[.[.[.[.].].].].].[.].].[.].V.>       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     477"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX        o -.F.J.J.K.K.K.I.I.I.I.^.^.^.(.(.(.(.(.(.(.^.^.^.~.^.~.~.~.~.~.~.^.(.(.(.).].].[.[.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.[.[.[.[.[.[.].[.].[.[.}.}.}.H.Z         UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX    X   E C.~.^.^.~.~.^.^.(.(.).].[.}.}.|.|.|.|.|.|.|.|.}.[.}.[.}.}.}.}.|.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.[.}.[.[.[.[.[.[.[.].].].[.].].].].].H.^ %       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     478"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX    X   A p.J.K.K.P.P.I.I.I.I.~.^.^.^.(.(.).].].[.{.[.[.[.[.[.].].].].].].].[.[.}.}.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.{.}.[.[.[.[.[.[.[.[.].[.}._.^ =         UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX        % 6.R.~.~.~.^.(.(.).(.).[.[.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.}.[.[.[.[.[.[.].].].[.].[.].].].].[.V.y         UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     479"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX        o Q A.K.K.L.K.P.I.I.I.~.^.~.^.^.(._.].}.}.}.|.}.|.|.|.|.|.|.|.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.}.[.[.{.].[.[.].[.].[._.V.9           UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX        O u 6.~.^.^.^.^.(.).].].[.}.}.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.[.}.[.[.[.[.[.[.].].[.].].].].].[.].H.~           UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     480"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX      X 9 ~ D.L.L.K.I.I.~.~.~.^.~.^.^.).).].[.[.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.[.}.}.[.[.].].].}.).V.Z           UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX            E B.~.I.^.(.].].[.}.}.}.}.}.|.|.|.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.}.[.[.].].].[.[.].].[.[.].).(.].H.^ =         UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     481"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX        O u 6.D.P.~.^.^.^.~.~.~.^.(.(.).].[.[.}.}.}.}.|.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.[.[.}.}.|.|.}.].V.Z             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX          X E A.(.].}.}.}.}.}.}.|.|.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.|.}.}.[.[.].].[.].].].].[.}.}.[.).$X3.y           UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     482"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX        o Z 3.H.I.~.I.I.~.~.^.(.(.).].{.].}.[.}.}.|.}.|.|.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.].].}.}._.V.E =           UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX          9 E V._.[.}.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.[.[.].[.[.].[.[.[.].].].}.}.$X^ u           UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     483"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX          O 9 A 3.D.I.~.~.~.^.^._.).].[.[.}.}.}.}.}.}.}.|.|.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}._.V.W y             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX          o u W V.$X|.|.|.|.|.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.[.[.[.].].[.].[.|.[.[.$X3.E 9           UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     484"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX        O   o Z ^ B.H.R.U.~._.[.[.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.{.}.$XV.3.Z o X           UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX              % Z 3.V.$X{.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.}.}.[.].{._.$XV.3.Z           O UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     485"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX              * y E 3.H.U.(.].|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.$XV.^ u * *             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX      X   X * * y E 3.$X{.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.]._.H.3.~ y =   X         UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     486"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX              X = u E ^ V.H._.}.}.}.}.}.|.|.}.}.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.$X$XV.^ E 9     O             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX                . y Z ~ ^ V.$X$X|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.].$XV.^ ~ Z 9                 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     487"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX                . o 9 Z E ^ ^ 3.^ 3.V.V.V.V.V.V.V.V.V.V.V.V.3.^ V.^ E E u t * * *     X         UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX                * * o 9 y E E ^ ^ ^ V.V.V.V.V.V.V.V.V.V.V.V.V.V.^ 3.^ E E u 9 o X               UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     488"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX            X           * X   % = % t = = 9 = = * X         *           X X         UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX          X           *         o * * = y = = t o o o X X X                         UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     489"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX                  X             X           O       X X             UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX              X X                     X   X                   X       UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     490"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX                                            UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX                                        UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     491"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     492"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     493"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     494"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     495"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     496"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     497"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     498"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     499"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     500"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     501"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     502"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     503"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     504"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     505"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     506"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     507"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     508"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     509"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     510"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     511"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     512"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     513"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     514"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     515"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     516"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
     517"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX"
     518};
  • dists/scummvm.rc

    diff --git a/dists/pegasus/scummpegasus.zip b/dists/pegasus/scummpegasus.zip
    new file mode 100644
    index 0000000..78a790e
    Binary files /dev/null and b/dists/pegasus/scummpegasus.zip differ
    diff --git a/dists/scummvm.rc b/dists/scummvm.rc
    index f0609c1..1a9796e 100644
    a b  
    99#define IDI_COUNT 1002
    1010#define ID_GDF_XML __GDF_XML
    1111
    12 IDI_ICON               ICON    DISCARDABLE     "icons/scummvm.ico"
     12IDI_ICON               ICON    DISCARDABLE     "dists/pegasus/pegasus.ico"
    1313IDI_COUNT              ICON    DISCARDABLE     "icons/count.ico"
    1414
    1515ID_GDF_XML             DATA    "dists/win32/scummvm.gdf.xml"
    1616
    1717scummclassic.zip       FILE    "gui/themes/scummclassic.zip"
    18 scummmodern.zip        FILE    "gui/themes/scummmodern.zip"
     18scummpegasus.zip        FILE    "dists/pegasus/scummpegasus.zip"
    1919#ifdef USE_TRANSLATION
    2020translations.dat       FILE    "gui/themes/translations.dat"
    2121#endif
  • engines/pegasus/ai/ai_action.cpp

    diff --git a/engines/pegasus/ai/ai_action.cpp b/engines/pegasus/ai/ai_action.cpp
    index 38d6390..6f24647 100644
    a b AIPlayMessageAction::AIPlayMessageAction(const Common::String &movieName, bool k  
    4545}
    4646
    4747void AIPlayMessageAction::performAIAction(AIRule *) {
    48         if (g_AIArea) {
     48        if (g_AIArea && g_AIArea->isChattyAI()) {
    4949                g_AIArea->checkMiddleArea();
    5050                g_AIArea->playAIMovie(kRightAreaSignature, _movieName, _keepLastFrame, _interruptionFilter);
    5151        }
  • engines/pegasus/ai/ai_area.cpp

    diff --git a/engines/pegasus/ai/ai_area.cpp b/engines/pegasus/ai/ai_area.cpp
    index 5ac8af8..c6aeda8 100644
    a b  
    2929#include "pegasus/pegasus.h"
    3030#include "pegasus/ai/ai_area.h"
    3131#include "pegasus/items/biochips/aichip.h"
     32#include "pegasus/items/biochips/arthurchip.h"
    3233#include "pegasus/items/biochips/biochipitem.h"
    3334#include "pegasus/items/biochips/opticalchip.h"
    3435#include "pegasus/items/biochips/pegasuschip.h"
    AIArea::AIArea(InputHandler *nextHandler) : InputHandler(nextHandler), _leftArea  
    5051        _middleBiochipTime = 0xffffffff;
    5152        _rightBiochipTime = 0xffffffff;
    5253        _lockCount = 0;
     54        _chattyAI = true;
     55        ((PegasusEngine *)g_engine)->requestToggle(false);
    5356        startIdling();
    5457}
    5558
    void AIArea::activateHotspots() {  
    452455                        case kOpticalBiochip:
    453456                                ((OpticalChip *)currentBiochip)->activateOpticalHotspots();
    454457                                break;
     458                        case kArthurBiochip:
     459                                if (vm->isDVD())
     460                                        ((ArthurChip *)currentBiochip)->activateArthurHotspots();
     461                                break;
    455462                        }
    456463        } else if (_middleAreaOwner == kInventorySignature) {
    457464                InventoryItem *currentItem = ((PegasusEngine *)g_engine)->getCurrentInventoryItem();
    void AIArea::clickInHotspot(const Input &input, const Hotspot *hotspot) {  
    490497                                        handled = true;
    491498                                }
    492499                                break;
     500                        case kArthurBiochip:
     501                                if (vm->isDVD() && (hotspot->getHotspotFlags() & kArthurBiochipSpotFlag) != 0) {
     502                                        ((ArthurChip *)currentBiochip)->clickInArthurHotspot(hotspot->getObjectID());
     503                                        handled = true;
     504                                }
     505                                break;
    493506                        }
    494507                }
    495508        } else if (_middleAreaOwner == kInventorySignature) {
    void AIArea::forceAIUnlocked() {  
    533546        }
    534547}
    535548
     549void AIArea::setChattyAI(bool flag) {
     550        _chattyAI = flag;
     551
     552        if (g_arthurChip)
     553                g_arthurChip->setUpArthurChip();
     554
     555        if (flag) {
     556                playAIMovie(kRightAreaSignature, "Images/AI/Globals/XGLOB01", false, kHintInterruption);
     557        } else {
     558                playAIMovie(kRightAreaSignature, "Images/AI/Globals/XGLOB00", false, kHintInterruption);
     559                if (g_arthurChip)
     560                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBB29", kArthurDisabledAI);
     561        }
     562}
     563
    536564void AIArea::checkRules() {
    537565        if (_lockCount == 0 && ((PegasusEngine *)g_engine)->playerAlive())
    538566                for (AIRuleList::iterator it = _AIRules.begin(); it != _AIRules.end(); it++)
  • engines/pegasus/ai/ai_area.h

    diff --git a/engines/pegasus/ai/ai_area.h b/engines/pegasus/ai/ai_area.h
    index 806e6ef..5541eca 100644
    a b public:  
    130130        void unlockAI();
    131131        void forceAIUnlocked();
    132132
     133        bool isChattyAI() { return _chattyAI; }
     134        void setChattyAI(bool);
     135
    133136        void checkMiddleArea();
    134137        void checkRules();
    135138
    protected:  
    163166        AIRuleList _AIRules;
    164167
    165168        uint _lockCount;
     169
     170        bool _chattyAI;
    166171};
    167172
    168173extern AIArea *g_AIArea;
  • new file engines/pegasus/chase.cpp

    diff --git a/engines/pegasus/chase.cpp b/engines/pegasus/chase.cpp
    new file mode 100644
    index 0000000..43f88d3
    - +  
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * Additional copyright for this file:
     8 * Copyright (C) 1995-2013 Presto Studios, Inc.
     9 *
     10 * This program is free software; you can redistribute it and/or
     11 * modify it under the terms of the GNU General Public License
     12 * as published by the Free Software Foundation; either version 2
     13 * of the License, or (at your option) any later version.
     14
     15 * This program is distributed in the hope that it will be useful,
     16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     18 * GNU General Public License for more details.
     19
     20 * You should have received a copy of the GNU General Public License
     21 * along with this program; if not, write to the Free Software
     22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     23 *
     24 */
     25
     26#include "pegasus/chase.h"
     27
     28namespace Pegasus {
     29
     30// Notification constants.
     31
     32static const NotificationFlags kChaseNotificationFlags = kChaseEnteredBranchZone |
     33                                                                                                                        kChaseExitedBranchZone |
     34                                                                                                                        kChaseFinished;
     35
     36ChaseInteraction::ChaseInteraction(const InteractionID interactionID, Neighborhood *handler,
     37        const NotificationID notificationID, NotificationManager *manager) : GameInteraction(interactionID, handler),
     38        _chaseNotification(notificationID, manager), _steerPict(kNoDisplayElement), _directionNeeded(false),
     39        _turnDirection(kNoTurn) {
     40
     41        // HACK HACK HACK HACK HACK
     42        // TRIPLE SUPER ULTRA HACK
     43        // This avoids a nasty optimization bug I have been unable to track down
     44        // after days and days of searching. Let's just ship the game already.
     45        setNextHandler(0);
     46
     47        _neighborhoodNotification = handler->getNeighborhoodNotification();
     48}
     49
     50void ChaseInteraction::openInteraction() {
     51        _steerPict.initFromPICTFile("Images/Interface/steer.pict", true);
     52
     53        _chaseNotification.notifyMe(this, kChaseNotificationFlags, kChaseNotificationFlags);
     54
     55        _neighborhoodNotification->notifyMe(this, kDelayCompletedFlag | kSpotSoundCompletedFlag,
     56                                                                                kDelayCompletedFlag | kSpotSoundCompletedFlag);
     57}
     58
     59void ChaseInteraction::closeInteraction() {
     60        _steerPict.hide();
     61        _steerPict.deallocateSurface();
     62
     63        _chaseNotification.cancelNotification(this);
     64
     65        _neighborhoodNotification->cancelNotification(this);
     66}
     67
     68void ChaseInteraction::receiveNotification(Notification *notification, const NotificationFlags flags) {
     69        if (notification == &_chaseNotification)
     70                switch (flags) {
     71                case kChaseEnteredBranchZone:
     72                        _directionNeeded = true;
     73                        showControlsHint();
     74                        setUpBranch();
     75                        break;
     76                case kChaseExitedBranchZone:
     77                        switch (_turnDirection) {
     78                        case kTurnLeft:
     79                                branchLeft();
     80                                break;
     81                        case kTurnRight:
     82                                branchRight();
     83                                break;
     84                        case kNoTurn:
     85                                dontBranch();
     86                                break;
     87                        default:
     88                                break;
     89                        }
     90                        hideControlsHint();
     91                        _turnDirection = kNoTurn;
     92                        _directionNeeded = false;
     93                        break;
     94                case kChaseFinished:
     95                        _owner->requestDeleteCurrentInteraction();
     96                        break;
     97                default:
     98                        break;
     99                }
     100}
     101
     102void ChaseInteraction::handleInput(const Input &input, const Hotspot *cursorSpot) {
     103        if (input.anyDirectionInput()) {
     104                if (_directionNeeded) {
     105                        if (input.leftButtonAnyDown())
     106                                _turnDirection = kTurnLeft;
     107                        else if (input.rightButtonAnyDown())
     108                                _turnDirection = kTurnRight;
     109                }
     110        } else {
     111                this->InputHandler::handleInput(input, cursorSpot);
     112        }
     113}
     114
     115void ChaseInteraction::showControlsHint() {
     116        _steerPict.show();
     117}
     118
     119void ChaseInteraction::hideControlsHint() {
     120        _steerPict.hide();
     121}
     122
     123} // End of namespace Pegasus
  • new file engines/pegasus/chase.h

    diff --git a/engines/pegasus/chase.h b/engines/pegasus/chase.h
    new file mode 100644
    index 0000000..1e9881d
    - +  
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * Additional copyright for this file:
     8 * Copyright (C) 1995-2013 Presto Studios, Inc.
     9 *
     10 * This program is free software; you can redistribute it and/or
     11 * modify it under the terms of the GNU General Public License
     12 * as published by the Free Software Foundation; either version 2
     13 * of the License, or (at your option) any later version.
     14
     15 * This program is distributed in the hope that it will be useful,
     16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     18 * GNU General Public License for more details.
     19
     20 * You should have received a copy of the GNU General Public License
     21 * along with this program; if not, write to the Free Software
     22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     23 *
     24 */
     25
     26#ifndef PEGASUS_CHASE_H
     27#define PEGASUS_CHASE_H
     28
     29#include "pegasus/hotspot.h"
     30#include "pegasus/interaction.h"
     31#include "pegasus/notification.h"
     32#include "pegasus/neighborhood/neighborhood.h"
     33
     34namespace Pegasus {
     35 
     36// Notification constants.
     37
     38static const NotificationFlags kChaseEnteredBranchZone = 1;
     39static const NotificationFlags kChaseExitedBranchZone = kChaseEnteredBranchZone << 1;
     40static const NotificationFlags kChaseFinished = kChaseExitedBranchZone << 1;
     41
     42// Time to choose a direction.
     43
     44static const TimeValue kDecisionTime = 600 * 2;
     45
     46class ChaseInteraction : public GameInteraction, public NotificationReceiver {
     47public:
     48        ChaseInteraction(const InteractionID, Neighborhood *, NotificationID, NotificationManager *);
     49        virtual ~ChaseInteraction() {}
     50
     51        virtual void handleInput(const Input &, const Hotspot *);
     52
     53protected:
     54
     55        virtual void openInteraction();
     56        virtual void initInteraction() {}
     57        virtual void closeInteraction();
     58
     59        virtual void receiveNotification(Notification *, const NotificationFlags);
     60
     61        virtual void setUpBranch() {}
     62        virtual void branchLeft() {}
     63        virtual void branchRight() {}
     64        virtual void dontBranch() {}
     65
     66        virtual void showControlsHint();
     67        virtual void hideControlsHint();
     68
     69        Notification _chaseNotification;
     70
     71        Notification *_neighborhoodNotification;
     72
     73        Picture _steerPict;
     74
     75private:
     76
     77        bool _directionNeeded;
     78        TurnDirection _turnDirection;
     79};
     80
     81} // End of namespace Pegasus
     82
     83#endif
  • engines/pegasus/constants.h

    diff --git a/engines/pegasus/constants.h b/engines/pegasus/constants.h
    index f81d219..76fabe8 100644
    a b static const NotificationID kNoradPressureNotificationID = kNoradFillingStationN  
    379379static const NotificationID kNoradUtilityNotificationID = kNoradPressureNotificationID + 1;
    380380static const NotificationID kNoradElevatorNotificationID = kNoradUtilityNotificationID + 1;
    381381static const NotificationID kNoradSubPlatformNotificationID = kNoradElevatorNotificationID + 1;
    382 static const NotificationID kSubControlNotificationID = kNoradSubPlatformNotificationID + 1;
     382static const NotificationID kNoradSubChaseNotificationID = kNoradSubPlatformNotificationID + 1;
     383static const NotificationID kSubControlNotificationID = kNoradSubChaseNotificationID + 1;
    383384static const NotificationID kNoradGreenBallNotificationID = kSubControlNotificationID + 1;
    384385static const NotificationID kNoradGlobeNotificationID = kNoradGreenBallNotificationID + 1;
    385386static const NotificationID kCaldoriaVidPhoneNotificationID = kNoradGlobeNotificationID + 1;
    386387static const NotificationID kCaldoriaMessagesNotificationID = kCaldoriaVidPhoneNotificationID + 1;
    387388static const NotificationID kCaldoriaBombTimerNotificationID = kCaldoriaMessagesNotificationID + 1;
     389static const NotificationID kMarsTunnelPodNotificationID = kCaldoriaBombTimerNotificationID + 1;
     390static const NotificationID kMarsCanyonChaseNotificationID = kMarsTunnelPodNotificationID + 1;
    388391
    389392// Sent to the shell by fShellNotification.
    390393static const NotificationFlags kGameStartingFlag = 1;
    static const HotSpotID kAISolveSpotID = kAIHint3SpotID + 1;  
    463466static const HotSpotID kAIBriefingSpotID = kAISolveSpotID + 1;
    464467static const HotSpotID kAIScanSpotID = kAIBriefingSpotID + 1;
    465468
    466 static const HotSpotID kPegasusRecallSpotID = kAIScanSpotID + 1;
     469static const HotSpotID kArthurWisdomSpotID = kAIScanSpotID + 1;
     470static const HotSpotID kChattyArthurSpotID = kArthurWisdomSpotID + 1;
     471static const HotSpotID kChattyAISpotID = kChattyArthurSpotID + 1;
     472static const HotSpotID kArthurHeadSpotID = kChattyAISpotID + 1;
     473
     474static const HotSpotID kPegasusRecallSpotID = kArthurHeadSpotID + 1;
    467475
    468476static const HotSpotID kAriesSpotID = kPegasusRecallSpotID + 1;
    469477static const HotSpotID kMercurySpotID = kAriesSpotID + 1;
    static const HotSpotFlags kInfoReturnSpotFlag = kDropBiochipSpotFlag << 1;  
    501509// Biochip and inventory hot spot flags...
    502510
    503511static const HotSpotFlags kAIBiochipSpotFlag = kInfoReturnSpotFlag << 1;
    504 static const HotSpotFlags kPegasusBiochipSpotFlag = kAIBiochipSpotFlag << 1;
     512static const HotSpotFlags kArthurBiochipSpotFlag = kAIBiochipSpotFlag << 1;
     513static const HotSpotFlags kPegasusBiochipSpotFlag = kArthurBiochipSpotFlag << 1;
    505514static const HotSpotFlags kOpticalBiochipSpotFlag = kPegasusBiochipSpotFlag << 1;
    506515static const HotSpotFlags kAirMaskSpotFlag = kOpticalBiochipSpotFlag << 1;
    507516
    static const HotSpotFlags kJMPClickingSpotFlags = kClickSpotFlag |  
    510519                                                                                        kOpenDoorSpotFlag |
    511520                                                                                        kInfoReturnSpotFlag |
    512521                                                                                        kAIBiochipSpotFlag |
     522                                                                                        kArthurBiochipSpotFlag |
    513523                                                                                        kPegasusBiochipSpotFlag |
    514524                                                                                        kOpticalBiochipSpotFlag |
    515525                                                                                        kAirMaskSpotFlag;
    enum {  
    655665        // Mars
    656666        kDeathWrongShuttleLock,
    657667        kDeathArrestedInMars,
     668        kDeathCollidedWithPod,
    658669        kDeathRunOverByPod,
    659670        kDeathDidntGetOutOfWay,
    660671        kDeathReactorBurn,
  • engines/pegasus/cursor.cpp

    diff --git a/engines/pegasus/cursor.cpp b/engines/pegasus/cursor.cpp
    index ad0d2c2..f0976e2 100644
    a b void Cursor::loadCursorImage(CursorInfo &cursorInfo) {  
    160160
    161161        cursorInfo.surface = new Graphics::Surface();
    162162
     163        // The CD version uses (only) lower color cicn images for its cursors
    163164        Common::SeekableReadStream *cicnStream = vm->_resFork->getResource(MKTAG('c', 'i', 'c', 'n'), cursorInfo.tag);
    164165
    165166        if (!cicnStream)
  • engines/pegasus/detection.cpp

    diff --git a/engines/pegasus/detection.cpp b/engines/pegasus/detection.cpp
    old mode 100644
    new mode 100755
    index 721c382..ac234c2
    a b enum {  
    4141
    4242bool PegasusEngine::hasFeature(EngineFeature f) const {
    4343        return
    44                 (f == kSupportsRTL)
    45                 || (f == kSupportsLoadingDuringRuntime)
     44                /* (f == kSupportsRTL)
     45                || */ (f == kSupportsLoadingDuringRuntime)
    4646                || (f == kSupportsSavingDuringRuntime);
    4747}
    4848
    bool PegasusEngine::isWindows() const {  
    6666        return _gameDescription->desc.platform == Common::kPlatformWindows;
    6767}
    6868
     69bool PegasusEngine::isLinux() const {
     70        return _gameDescription->desc.platform == Common::kPlatformLinux;
     71}
     72
    6973} // End of namespace Pegasus
    7074
    7175static const PlainGameDescriptor pegasusGames[] = {
    static const PegasusGameDescription gameDescriptions[] = {  
    9296        {
    9397                {
    9498                        "pegasus",
     99                        "DVD",
     100                        AD_ENTRY1s("JMP PP Resources", "d13a602d2498010d720a6534f097f88b", 2075337),
     101                        Common::EN_ANY,
     102                        Common::kPlatformMacintosh,
     103                        ADGF_MACRESFORK|GF_DVD,
     104                        GUIO0()
     105                },
     106        },
     107       
     108        {
     109                {       "pegasus",
     110                        "DVD",
     111                        AD_ENTRY1s("JMP PP Resources", "d13a602d2498010d720a6534f097f88b", 2075337),
     112                        Common::EN_ANY,
     113                        Common::kPlatformWindows,
     114                        ADGF_MACRESFORK|GF_DVD,
     115                        GUIO0()
     116                },
     117        },
     118
     119        {
     120                {
     121                        "pegasus",
     122                        "DVD",
     123                        AD_ENTRY1s("JMP PP Resources", "d13a602d2498010d720a6534f097f88b", 2075337),
     124                        Common::EN_ANY,
     125                        Common::kPlatformWindows,
     126                        ADGF_MACRESFORK|GF_DVD,
     127                        GUIO0()
     128                },
     129        },
     130
     131        {
     132                {
     133                        "pegasus",
     134                        "DVD",
     135                        AD_ENTRY1s("JMP PP Resources", "d13a602d2498010d720a6534f097f88b", 2075337),
     136                        Common::EN_ANY,
     137                        Common::kPlatformLinux,
     138                        ADGF_MACRESFORK|GF_DVD,
     139                        GUIO0()
     140                },
     141        },
     142
     143        {
     144                {
     145                        "pegasus",
    95146                        "Demo",
    96147                        AD_ENTRY1s("JMP PP Resources", "d13a602d2498010d720a6534f097f88b", 360129),
    97148                        Common::EN_ANY,
    static const PegasusGameDescription gameDescriptions[] = {  
    113164                },
    114165        },
    115166
    116                 {
     167        {
    117168                {
    118169                        "pegasus",
    119170                        "DVD Demo",
  • engines/pegasus/graphics.cpp

    diff --git a/engines/pegasus/graphics.cpp b/engines/pegasus/graphics.cpp
    index 5475108..fc22bb5 100644
    a b  
    2323 *
    2424 */
    2525
     26#include "common/config-manager.h"
    2627#include "common/events.h"
    2728#include "common/file.h"
    2829#include "common/textconsole.h"
  • engines/pegasus/input.cpp

    diff --git a/engines/pegasus/input.cpp b/engines/pegasus/input.cpp
    index b74e4a4..6ad9905 100644
    a b InputDeviceManager::InputDeviceManager() {  
    6464        _keyMap[Common::KEYCODE_RALT] = false;
    6565        _keyMap[Common::KEYCODE_e] = false;
    6666        _keyMap[Common::KEYCODE_KP_ENTER] = false;
     67        _keyMap[Common::KEYCODE_a] = false;
    6768
    6869        g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 2, false);
    6970        _lastRawBits = kAllUpBits;
    7071        _consoleRequested = false;
     72        _AKeyWasDown = false;
    7173}
    7274
    7375InputDeviceManager::~InputDeviceManager() {
    InputDeviceManager::~InputDeviceManager() {  
    7577}
    7678
    7779void InputDeviceManager::getInput(Input &input, const InputBits filter) {
    78         // Poll for events, but ignore them!
    79         // We'll pick them up in notifyEvent()
     80        // Poll for events, but ignore most of them!
     81        // We'll pick the rest up in notifyEvent()
    8082        // We do that so that any pollEvent() call can update the variables
    8183        // (ie. if one uses enter to access the restore menu, we never receive
    8284        // the key up event, which leads to bad things)
    8385        // This is to closely emulate what the GetKeys() function did on Mac OS
    84         Common::Event event;
    85         while (g_system->getEventManager()->pollEvent(event))
    86                 ;
    8786
    88         // Now create the bitfield
    8987        InputBits currentBits = 0;
    9088
     89        Common::Event event;
     90        while (g_system->getEventManager()->pollEvent(event)) {
     91                switch (event.type) {
     92                case Common::EVENT_WHEELUP:
     93                        currentBits |= (kRawButtonDown << kUpButtonShift);
     94                        break;
     95                case Common::EVENT_WHEELDOWN:
     96                        currentBits |= (kRawButtonDown << kDownButtonShift);
     97                        break;
     98                default:
     99                        break;
     100                }
     101        }
     102
     103        // Now fill in the rest of the bitfield
     104
    91105        if (_keyMap[Common::KEYCODE_UP] || _keyMap[Common::KEYCODE_KP8])
    92106                currentBits |= (kRawButtonDown << kUpButtonShift);
    93107
    void InputDeviceManager::getInput(Input &input, const InputBits filter) {  
    121135        if (_keyMap[Common::KEYCODE_BACKSPACE] || _keyMap[Common::KEYCODE_KP_MULTIPLY])
    122136                currentBits |= (kRawButtonDown << kRightFireButtonShift);
    123137
     138        if (((PegasusEngine *)g_engine)->isDVD()) {
     139                if (_keyMap[Common::KEYCODE_a] && (_keyMap[Common::KEYCODE_LALT] || _keyMap[Common::KEYCODE_RALT]) && !_AKeyWasDown) {
     140                        ((PegasusEngine *)g_engine)->requestToggle();
     141                        _AKeyWasDown = true;
     142                } else if (!_keyMap[Common::KEYCODE_a])
     143                        _AKeyWasDown = false;
     144        }
     145
    124146        // Update mouse button state
    125147        // Note that we don't use EVENT_LBUTTONUP/EVENT_LBUTTONDOWN because
    126148        // they do not show if the button is being held down. We're treating
  • engines/pegasus/input.h

    diff --git a/engines/pegasus/input.h b/engines/pegasus/input.h
    index 3e938fa..e2c814a 100644
    a b protected:  
    5757        Common::HashMap<uint, bool> _keyMap;
    5858        InputBits _lastRawBits;
    5959        bool _consoleRequested;
     60        bool _AKeyWasDown;
    6061};
    6162
    6263enum {
    enum {  
    278279};
    279280
    280281static const InputBits kHintInterruption = kFilterAllInputNoAuto;
    281 static const InputBits kWarningInterruption = kFilterNoInput;
     282static const InputBits kWarningInterruption = kFilterAllInputNoAuto;
    282283static const InputBits kOpticalInterruption = kFilterAllInputNoAuto;
    283284
    284285/*
    public:  
    481482
    482483        static bool isRaiseInventoryInput(const Input &input) { return input.leftFireButtonDown(); }
    483484        static bool isRaiseBiochipsInput(const Input &input) { return input.rightFireButtonDown(); }
    484         static InputBits getItemPanelsInputFilter() { return kFilterLeftFireButton | kFilterRightFireButton; }
     485        static InputBits getItemPanelsInputFilter() { return kFilterFourButton | kFilterLeftFireButton | kFilterRightFireButton; }
    485486
    486487        static bool isToggleAIMiddleInput(const Input &input) { return input.threeButtonDown(); }
    487488
  • engines/pegasus/interface.cpp

    diff --git a/engines/pegasus/interface.cpp b/engines/pegasus/interface.cpp
    index f2429bf..5543672 100644
    a b void Interface::raiseInventoryDrawer(const bool doCallBacks) {  
    398398
    399399        if (((PegasusEngine *)g_engine)->isDVD()) {
    400400                _inventoryCloseSound.stopSound();
     401                _inventoryOpenSound.setVolume(((PegasusEngine *)g_engine)->getSoundFXLevel());
    401402                _inventoryOpenSound.playSound();
    402403        }
    403404}
    void Interface::playEndMessage() {  
    412413
    413414void Interface::raiseInventoryDrawerForMessage() {
    414415        _inventoryPanel.disableLooping();
     416
     417        // The DVD version has a different image for the inventory
     418        // for the end message.
     419        if (((PegasusEngine *)g_engine)->isDVD()) {
     420                _inventoryPanel.setCommPicture();
     421                _inventoryPanel.throwAwayInventoryImage();
     422                _inventoryPanel.initInventoryImage(&_inventoryPush);
     423        }
     424
    415425        raiseInventoryDrawerSync();
    416426}
    417427
    void Interface::lowerInventoryDrawer(const bool doCallBacks) {  
    464474
    465475                if (((PegasusEngine *)g_engine)->isDVD()) {
    466476                        _inventoryOpenSound.stopSound();
     477                        _inventoryCloseSound.setVolume(((PegasusEngine *)g_engine)->getSoundFXLevel());
    467478                        _inventoryCloseSound.playSound();
    468479                }
    469480        }
    void Interface::raiseBiochipDrawer(const bool doCallBacks) {  
    510521
    511522        if (((PegasusEngine *)g_engine)->isDVD()) {
    512523                _biochipCloseSound.stopSound();
     524                _biochipOpenSound.setVolume(((PegasusEngine *)g_engine)->getSoundFXLevel());
    513525                _biochipOpenSound.playSound();
    514526        }
    515527}
  • new file engines/pegasus/items/biochips/arthurchip.cpp

    diff --git a/engines/pegasus/items/biochips/arthurchip.cpp b/engines/pegasus/items/biochips/arthurchip.cpp
    new file mode 100644
    index 0000000..931f1de
    - +  
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * Additional copyright for this file:
     8 * Copyright (C) 1995-1997 Presto Studios, Inc.
     9 *
     10 * This program is free software; you can redistribute it and/or
     11 * modify it under the terms of the GNU General Public License
     12 * as published by the Free Software Foundation; either version 2
     13 * of the License, or (at your option) any later version.
     14
     15 * This program is distributed in the hope that it will be useful,
     16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     18 * GNU General Public License for more details.
     19
     20 * You should have received a copy of the GNU General Public License
     21 * along with this program; if not, write to the Free Software
     22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     23 *
     24 */
     25
     26#include "pegasus/pegasus.h"
     27#include "pegasus/ai/ai_area.h"
     28#include "pegasus/items/biochips/arthurchip.h"
     29
     30namespace Common {
     31DECLARE_SINGLETON(Pegasus::ArthurManager);
     32}
     33
     34namespace Pegasus {
     35
     36static const char *kArthurWisdomMovies[] = {
     37        "Images/AI/Globals/XGLOBA01",
     38        "Images/AI/Globals/XGLOBA03",
     39        "Images/AI/Globals/XGLOBA06",
     40        "Images/AI/Globals/XGLOBA07",
     41        "Images/AI/Globals/XGLOBA09",
     42        "Images/AI/Globals/XGLOBA17",
     43        "Images/AI/Globals/XGLOBA18",
     44        "Images/AI/Globals/XGLOBA25",
     45        "Images/AI/Globals/XGLOBA26",
     46        "Images/AI/Globals/XGLOBA27",
     47        "Images/AI/Globals/XGLOBA28",
     48        "Images/AI/Globals/XGLOBA30",
     49        "Images/AI/Globals/XGLOBA34",
     50        "Images/AI/Globals/XGLOBA35",
     51        "Images/AI/Globals/XGLOBA43",
     52        "Images/AI/Globals/XGLOBA50",
     53        "Images/AI/Globals/XGLOBA56",
     54        "Images/AI/Globals/XGLOBA59",
     55        "Images/AI/Globals/XGLOBA63",
     56        "Images/AI/Globals/XGLOBB10",
     57        "Images/AI/Globals/XGLOBB11",
     58        "Images/AI/Globals/XGLOBB12",
     59        "Images/AI/Globals/XGLOBB13",
     60        "Images/AI/Globals/XGLOBB14",
     61        "Images/AI/Globals/XGLOBB15",
     62        "Images/AI/Globals/XGLOBB16",
     63        "Images/AI/Globals/XGLOBB17",
     64        "Images/AI/Globals/XGLOBB18",
     65        "Images/AI/Globals/XGLOBB19",
     66        "Images/AI/Globals/XGLOBB20",
     67        "Images/AI/Globals/XGLOBB21",
     68        "Images/AI/Globals/XGLOBB22",
     69        "Images/AI/Globals/XGLOBB23",
     70        "Images/AI/Globals/XGLOBB24",
     71        "Images/AI/Globals/XGLOBB25",
     72        "Images/AI/Globals/XGLOBB26",
     73        "Images/AI/Globals/XGLOBB27",
     74        "Images/AI/Globals/XGLOBB28",
     75        "Images/AI/Globals/XGLOBB29",
     76        "Images/AI/Globals/XGLOBB30",
     77        "Images/AI/Globals/XGLOBB31",
     78        "Images/AI/Globals/XGLOBB32",
     79        "Images/AI/Globals/XGLOBB33",
     80        "Images/AI/Globals/XGLOBB34",
     81        "Images/AI/Globals/XGLOBB35",
     82        "Images/AI/Globals/XGLOBB36",
     83        "Images/AI/Globals/XGLOBB37",
     84        "Images/AI/Globals/XGLOBB38",
     85        "Images/AI/Globals/XGLOBB39",
     86        "Images/AI/Globals/XGLOBB43",
     87        "Images/AI/Globals/XGLOBB44",
     88        "Images/AI/Globals/XGLOBA62"
     89};
     90
     91ArthurChip *g_arthurChip = 0;
     92
     93ArthurChip::ArthurChip(const ItemID id, const NeighborhoodID neighborhood, const RoomID room, const DirectionConstant direction) :
     94                BiochipItem(id, neighborhood, room, direction), _arthurWisdomHotspot(kArthurWisdomSpotID),
     95                _chattyArthurHotspot(kChattyArthurSpotID), _chattyAIHotspot(kChattyAISpotID),
     96                _arthurHeadHotspot(kArthurHeadSpotID) {
     97        _chattyArthur = true;
     98        _lastArthurMovie = "";
     99
     100        _arthurWisdomHotspot.setArea(Common::Rect(kAIMiddleAreaLeft + 20, kAIMiddleAreaTop + 27, kAIMiddleAreaLeft + 20 + 161, kAIMiddleAreaTop + 27 + 30));
     101        _arthurWisdomHotspot.setHotspotFlags(kArthurBiochipSpotFlag);
     102        g_allHotspots.push_back(&_arthurWisdomHotspot);
     103
     104        _chattyArthurHotspot.setArea(Common::Rect(kAIMiddleAreaLeft + 100, kAIMiddleAreaTop + 67, kAIMiddleAreaLeft + 100 + 20, kAIMiddleAreaTop + 67 + 20));
     105        _chattyArthurHotspot.setHotspotFlags(kArthurBiochipSpotFlag);
     106        g_allHotspots.push_back(&_chattyArthurHotspot);
     107
     108        _chattyAIHotspot.setArea(Common::Rect(kAIMiddleAreaLeft + 130, kAIMiddleAreaTop + 67, kAIMiddleAreaLeft + 130 + 20, kAIMiddleAreaTop + 67 + 20));
     109        _chattyAIHotspot.setHotspotFlags(kArthurBiochipSpotFlag);
     110        g_allHotspots.push_back(&_chattyAIHotspot);
     111
     112        _arthurHeadHotspot.setArea(Common::Rect(kAIRightAreaLeft, kAIRightAreaTop, kAIRightAreaLeft + kAIRightAreaWidth, kAIRightAreaTop + kAIRightAreaHeight));
     113        _arthurHeadHotspot.setHotspotFlags(kArthurBiochipSpotFlag);
     114        g_allHotspots.push_back(&_arthurHeadHotspot);
     115
     116        setItemState(kArthur000);
     117
     118        g_arthurChip = this;
     119}
     120
     121ArthurChip::~ArthurChip() {
     122        g_arthurChip = NULL;
     123
     124        g_allHotspots.removeOneHotspot(kArthurWisdomSpotID);
     125        g_allHotspots.removeOneHotspot(kChattyArthurSpotID);
     126        g_allHotspots.removeOneHotspot(kChattyAISpotID);
     127        g_allHotspots.removeOneHotspot(kArthurHeadSpotID);
     128}
     129
     130void ArthurChip::setChattyArthur(bool flag) {
     131        _chattyArthur = flag;
     132
     133        setUpArthurChip();
     134
     135        if (flag) {
     136                if (((PegasusEngine *)g_engine)->getRandomBit())
     137                        playArthurMovie("Images/AI/Globals/XGLOBAA1");
     138                else
     139                        playArthurMovie("Images/AI/Globals/XGLOBAA2");
     140        } else {
     141                playArthurMovie("Images/AI/Globals/XGLOBAA0");
     142        }
     143}
     144
     145void ArthurChip::select() {
     146        BiochipItem::select();
     147        setUpArthurChip();
     148}
     149
     150void ArthurChip::setUpArthurChip() {
     151        ItemState state = getItemState();
     152
     153        if (_chattyArthur) {
     154                if (g_AIArea && g_AIArea->isChattyAI()) {
     155                        if (state != kArthur002)
     156                                setItemState(kArthur000);
     157                } else if (state != kArthur102) {
     158                        setItemState(kArthur100);
     159                }
     160        } else {
     161                if (g_AIArea && g_AIArea->isChattyAI()) {
     162                        if (state != kArthur012)
     163                                setItemState(kArthur010);
     164                } else if (state != kArthur112) {
     165                        setItemState(kArthur110);
     166                }
     167        }
     168}
     169
     170void ArthurChip::activateArthurHotspots() {
     171        _arthurWisdomHotspot.setActive();
     172        _chattyArthurHotspot.setActive();
     173        _chattyAIHotspot.setActive();
     174        _arthurHeadHotspot.setActive();
     175}
     176
     177void ArthurChip::clickInArthurHotspot(HotSpotID id) {
     178        ItemState state, newState;
     179
     180        if (id == kArthurHeadSpotID) {
     181                if (_lastArthurMovie != "")
     182                        playArthurMovie(_lastArthurMovie);
     183                return;
     184        }
     185       
     186        newState = state = getItemState();
     187        switch (state) {
     188        case kArthur000:
     189                switch (id) {
     190                case kArthurWisdomSpotID:
     191                        newState = kArthur002;
     192                        break;
     193                case kChattyArthurSpotID:
     194                        newState = kArthur010;
     195                        break;
     196                case kChattyAISpotID:
     197                        newState = kArthur100;
     198                        break;
     199                }
     200                break;
     201        case kArthur010:
     202                switch (id) {
     203                case kArthurWisdomSpotID:
     204                        newState = kArthur012;
     205                        break;
     206                case kChattyArthurSpotID:
     207                        newState = kArthur000;
     208                        break;
     209                case kChattyAISpotID:
     210                        newState = kArthur110;
     211                        break;
     212                }
     213                break;
     214        case kArthur100:
     215                switch (id) {
     216                case kArthurWisdomSpotID:
     217                        newState = kArthur102;
     218                        break;
     219                case kChattyArthurSpotID:
     220                        newState = kArthur110;
     221                        break;
     222                case kChattyAISpotID:
     223                        newState = kArthur010;
     224                        break;
     225                }
     226                break;
     227        case kArthur110:
     228                switch (id) {
     229                case kArthurWisdomSpotID:
     230                        newState = kArthur112;
     231                        break;
     232                case kChattyArthurSpotID:
     233                        newState = kArthur100;
     234                        break;
     235                case kChattyAISpotID:
     236                        newState = kArthur010;
     237                        break;
     238                }
     239                break;
     240        }
     241        setItemState(newState);
     242        switch (id) {
     243        case kArthurWisdomSpotID:
     244                playArthurMovie(kArthurWisdomMovies[((PegasusEngine *)g_engine)->getRandomNumber((
     245                                                sizeof(kArthurWisdomMovies) / sizeof(const char *)) - 1)]);
     246                break;
     247        case kChattyArthurSpotID:
     248                setChattyArthur(!_chattyArthur);
     249                break;
     250        case kChattyAISpotID:
     251                if (g_AIArea)
     252                        g_AIArea->setChattyAI(!g_AIArea->isChattyAI());
     253                break;
     254        }
     255       
     256        setItemState(state);
     257}
     258
     259void ArthurChip::playArthurMovie(const Common::String &movieName) {
     260        if (g_AIArea) {
     261                g_AIArea->playAIMovie(kRightAreaSignature, movieName, false, kHintInterruption);
     262                if (movieName != "Images/AI/Globals/XGLOB00" &&
     263                        movieName != "Images/AI/Globals/XGLOB01" &&
     264                        movieName != "Images/AI/Globals/XGLOBAA0" &&
     265                        movieName != "Images/AI/Globals/XGLOBAA1" &&
     266                        movieName != "Images/AI/Globals/XGLOBAA2")
     267                        _lastArthurMovie = movieName;
     268        }
     269}
     270
     271bool ArthurChip::playArthurMovieForEvent(const Common::String &movieName, ArthurEvent event) {
     272        if (((PegasusEngine *)g_engine)->isDVD() && ((PegasusEngine *)g_engine)->playerHasItemID(kArthurBiochip) &&
     273                isChattyArthur() && !Arthur._arthurFlags.getFlag(event)) {
     274                Arthur._arthurFlags.setFlag(event, true);
     275                playArthurMovie(movieName);
     276                return true;
     277        } else {
     278                return false;
     279        }
     280}
     281
     282void ArthurManager::resetArthurState() {
     283        bool savedGameFlag = _arthurFlags.getFlag(kArthurLoadedSavedGame);
     284        _arthurFlags.clearAllFlags();
     285        _arthurFlags.setFlag(kArthurLoadedSavedGame, savedGameFlag);
     286}
     287
     288} // End of namespace Pegasus
  • new file engines/pegasus/items/biochips/arthurchip.h

    diff --git a/engines/pegasus/items/biochips/arthurchip.h b/engines/pegasus/items/biochips/arthurchip.h
    new file mode 100644
    index 0000000..4c4a580
    - +  
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * Additional copyright for this file:
     8 * Copyright (C) 1995-1997 Presto Studios, Inc.
     9 *
     10 * This program is free software; you can redistribute it and/or
     11 * modify it under the terms of the GNU General Public License
     12 * as published by the Free Software Foundation; either version 2
     13 * of the License, or (at your option) any later version.
     14
     15 * This program is distributed in the hope that it will be useful,
     16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     18 * GNU General Public License for more details.
     19
     20 * You should have received a copy of the GNU General Public License
     21 * along with this program; if not, write to the Free Software
     22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     23 *
     24 */
     25
     26#ifndef PEGASUS_ITEMS_BIOCHIPS_ARTHURCHIP_H
     27#define PEGASUS_ITEMS_BIOCHIPS_ARTHURCHIP_H
     28
     29#include "pegasus/hotspot.h"
     30#include "pegasus/util.h"
     31#include "pegasus/items/biochips/biochipitem.h"
     32
     33namespace Pegasus {
     34
     35enum ArthurEvent {
     36        kArthurLoadedSavedGame,
     37        kArthurAttemptedLockedDoor,
     38        kArthurAttemptedLockedDoorAgain,
     39        kArthurDestroyedInventoryItem,
     40        kArthurDisabledAI,
     41
     42        kArthurCaldoriaFinishedJoyride,
     43        kArthurCaldoriaSelectedStickyBuns,
     44        kArthurCaldoriaCreatedCornbread,
     45        kArthurCaldoriaDrankOJ,
     46        kArthurCaldoriaZoomedToLaundry,
     47        kArthurCaldoriaReachedToilet,
     48        kArthurCaldoriaReadPaper,
     49        kArthurCaldoriaChoseAgencyHairStyle,
     50        kArthurCaldoriaSawVacantApartment,
     51        kArthurCaldoriaLookThroughTelescope,
     52        kArthurCaldoriaRoofDoor,
     53        kArthurCaldoriaUsedCardBomb,
     54        kArthurCaldoriaBlownDoor,
     55        kArthurCaldoriaSawVoiceAnalysis,
     56        kArthurCaldoriaStunningSinclair,
     57        kArthurCaldoriaSeeRoofBomb,
     58        kArthurCaldoriaDisarmedNuke,
     59
     60        kArthurTSAEnteredCave,
     61        kArthurTSASawAgent3,
     62        kArthurTSASawBust,
     63        kArthurTSAReachedJunction,
     64        kArthurTSAClickedRobot1,
     65        kArthurTSAClickedRobot2,
     66        kArthurTSAOpenTBPMonitor,
     67        kArthurTSASawJourneymanKey,
     68        kArthurTSASawBiochips,
     69        kArthurTSAUsedPegasus,
     70        kArthurTSAConfinedByBaldwin,
     71        kArthurTSARedirectedRobots,
     72        kArthurTSAUsedTurbolift,
     73        kArthurTSASawFirstOpMemMovie,
     74        kArthurTSAInPegasusNoVideo,
     75        kArthurTSASawBaldwinSayGo,
     76        kArthurTSALeaving,
     77
     78        kArthurGoToPrehistoric,
     79       
     80        kArthurPrehistoricReachedJunction,
     81        kArthurPrehistoricSawBreaker,
     82        kArthurPrehistoricBreakerThrown,
     83        kArthurPrehistoricAtCliffEdge,
     84        kArthurPrehistoricSawEggs,
     85        kArthurPrehistoricZoomedToVault,
     86        kArthurPrehistoricAttemptedBridge,
     87        kArthurPrehistoricExtendedBridge,
     88        kArthurPrehistoricCrossedBridge,
     89        kArthurPrehistoricUnlockedVault,
     90
     91        kArthurMarsReadyForKiosk,
     92        kArthurMarsLookedAtGuards,
     93        kArthurMarsZoomedToKeyCard,
     94        kArthurMarsTurnedOnTransport,
     95        kArthurMarsCantFillMask,
     96        kArthurMarsSawWelcomeVideos,
     97        kArthurMarsRobotThrownPlayerWithMask,
     98        kArthurMarsLeftPodNoCrowBar,
     99        kArthurMarsLookAtEmptyTracks,
     100        kArthurMarsEnteredReactor,
     101        kArthurMarsSawLockedPanel,
     102        kArthurMarsSawLockedPanelNoNitrogen,
     103        kArthurMarsUsedLiquidNitrogen,
     104        kArthurMarsFoundCardBomb,
     105        kArthurMarsSolvedReactorGame,
     106        kArthurMarsDeactivatedCardBomb,
     107        kArthurMarsExitedReactorWithCardBomb,
     108        kArthurMarsInAirlockNoOxygen,
     109        kArthurMarsMazeReachedJunction,
     110        kArthurMarsOxygen50Warning,
     111        kArthurMarsOxygen25Warning,
     112        kArthurMarsOxygen5Warning,
     113        kArthurMarsFoundBuckets,
     114        kArthurMarsApproachedBuckets,
     115        kArthurMarsEnteredGearRoom,
     116        kArthurMarsLookAtGears,
     117        kArthurMarsExitedGearRoom,
     118        kArthurMarsFoundNoShuttlePresent,
     119        kArthurMarsEnteredShuttle,
     120        kArthurMarsFoundDeadRobot,
     121        kArthurMarsRobotHeadOpen,
     122
     123        kArthurWSCRemovedDart,
     124        kArthurWSCPoisonedDuringGame,
     125        kArthurWSCFailedMolecule,
     126        kArthurWSCDesignedAntidote,
     127        kArthurWSCSawAresHologram,
     128        kArthurWSCLookAtMorphExperiment,
     129        kArthurWSCStartMorphExperiment,
     130        kArthurWSCSawMorphExperiment,
     131        kArthurWSCLeftLabNoKeyOrCanisters,
     132        kArthurWSCAtOppositeDoor,
     133        kArthurWSCReadyForMap,
     134        kArthurWSCAttemptedLockedDoor,
     135        kArthurWSCSawSinclairDoor,
     136        kArthurWSCSawSinclairDoorNoKey,
     137        kArthurWSCAttemptedSinclairDoorNoKey,
     138        kArthurWSCZoomedToSnake,
     139        kArthurWSCActivatedComputer,
     140        kArthurWSCZoomedToSinclairMessages,
     141        kArthurWSCPlayedEasterEggMessage,
     142        kArthurWSCGotMachineGun,
     143        kArthurWSCSeenNerd,
     144        kArthurWSCSawBrokenDoor,
     145        kArthurWSCSawBrokenDoorNoCrowBar,
     146        kArthurWSCUsedCrowBar,
     147        kArthurWSCDidPlasmaDodge,
     148        kArthurWSCEnteredAuditorium,
     149        kArthurWSCSawSinclairLecture,
     150        kArthurWSCEnteredPassage,
     151        kArthurWSCInPassage,
     152        kArthurWSCExitedPassage,
     153        kArthurWSCSawCatwalkDoor,
     154        kArthurWSCRobotHeadOpen,
     155
     156        kArthurNoradAtSecurityMonitor,
     157        kArthurNoradSawFillingStation,
     158        kArthurNoradSawIntakeWarning,
     159        kArthurNoradDidntFillCanisters,
     160        kArthurNoradSawUnconsciousOperator,
     161        kArthurNoradAttemptedLockedDoor,
     162        kArthurNoradAttemptedLockedDoorAgain,
     163        kArthurNoradReachedPressureDoor,
     164        kArthurNoradSawSubMessage,
     165        kArthurNoradSawClawMonitor,
     166        kArthurNoradPlayedWithClaw,
     167        kArthurNoradEnteredSub,
     168        kArthurNoradExitedSub,
     169        kArthurNoradApproachedDamagedDoor,
     170        kArthurNoradAtRetScanNoBiochip,
     171        kArthurNoradStartGlobeGame,
     172        kArthurNoradSelectedIncorrectSilo,
     173        kArthurNoradFinishedGlobeGame,
     174        kArthurNoradThreatenedByRobot,
     175        kArthurNoradBeatRobotWithClaw,
     176        kArthurNoradRobotHeadOpen,
     177       
     178        kNumArthurFlags
     179};
     180
     181class ArthurChip : public BiochipItem {
     182public:
     183        ArthurChip(const ItemID, const NeighborhoodID, const RoomID, const DirectionConstant);
     184        virtual ~ArthurChip();
     185
     186        bool isChattyArthur() { return _chattyArthur; }
     187        void setChattyArthur(bool);
     188
     189        void select();
     190
     191        void setUpArthurChip();
     192        void activateArthurHotspots();
     193        void clickInArthurHotspot(HotSpotID);
     194        void playArthurMovie(const Common::String &);
     195        bool playArthurMovieForEvent(const Common::String &, ArthurEvent event);
     196
     197protected:
     198        Hotspot _arthurWisdomHotspot;
     199        Hotspot _chattyArthurHotspot;
     200        Hotspot _chattyAIHotspot;
     201        Hotspot _arthurHeadHotspot;
     202        bool _chattyArthur;
     203        Common::String _lastArthurMovie;
     204};
     205
     206class ArthurManager : public Common::Singleton<ArthurManager> {
     207public:
     208        ArthurManager() { resetArthurState(); }
     209
     210        void resetArthurState();
     211
     212protected:
     213        friend class Common::Singleton<SingletonBaseType>;
     214        friend class ArthurChip;
     215
     216private:
     217        FlagsArray<byte, kNumArthurFlags> _arthurFlags;
     218};
     219
     220extern ArthurChip *g_arthurChip;
     221
     222} // End of namespace Pegasus
     223
     224#define Arthur (::Pegasus::ArthurManager::instance())
     225
     226#endif
  • engines/pegasus/items/biochips/opticalchip.cpp

    diff --git a/engines/pegasus/items/biochips/opticalchip.cpp b/engines/pegasus/items/biochips/opticalchip.cpp
    index 7b8858e..05121ac 100644
    a b void OpticalChip::playOpMemMovie(HotSpotID id) {  
    127127        Common::String movieName;
    128128        switch (id) {
    129129        case kAriesSpotID:
    130                 movieName = "Images/AI/Globals/OMAI";
     130                // WORKAROUND: The original CD release played the ares video even
     131                // when you destroyed the shuttle. For the DVD release, we have
     132                // some new videos that can be played instead to workaround a plot
     133                // loophole.
     134                if (!((PegasusEngine *)g_engine)->isDVD() || _opticalFlags.getFlag(kOpticalAriesExposed))
     135                        movieName = "Images/AI/Globals/OMAI";
     136                else if (_itemOwnerID == kPlayerID)
     137                        movieName = "Images/AI/Globals/OMN1";
     138                else
     139                        movieName = "Images/AI/Globals/OMN0";
    131140                break;
    132141        case kMercurySpotID:
    133142                movieName = "Images/AI/Globals/OMMI";
  • engines/pegasus/items/inventory/airmask.cpp

    diff --git a/engines/pegasus/items/inventory/airmask.cpp b/engines/pegasus/items/inventory/airmask.cpp
    index c65dd36..26912bb 100644
    a b void AirMask::useIdleTime() {  
    164164
    165165void AirMask::refillAirMask() {
    166166        switch (getItemState()) {
    167                 case kAirMaskEmptyOff:
    168                 case kAirMaskLowOff:
    169                         setItemState(kAirMaskFullOff);
    170                         break;
    171                 case kAirMaskEmptyFilter:
    172                 case kAirMaskLowFilter:
    173                         setItemState(kAirMaskFullFilter);
    174                         break;
    175                 case kAirMaskLowOn:
    176                         setItemState(kAirMaskFullOn);
    177                         break;
     167        case kAirMaskEmptyOff:
     168        case kAirMaskLowOff:
     169                setItemState(kAirMaskFullOff);
     170                break;
     171        case kAirMaskEmptyFilter:
     172        case kAirMaskLowFilter:
     173                setItemState(kAirMaskFullFilter);
     174                break;
     175        case kAirMaskLowOn:
     176                setItemState(kAirMaskFullOn);
     177                break;
    178178        }
    179179
    180180        if (_oxygenTimer.isFuseLit()) {
  • engines/pegasus/items/inventorypicture.cpp

    diff --git a/engines/pegasus/items/inventorypicture.cpp b/engines/pegasus/items/inventorypicture.cpp
    index fc812fa..99b9ad8 100644
    a b void InventoryItemsPicture::deactivateInventoryPicture() {  
    318318        }
    319319}
    320320
     321void InventoryItemsPicture::setCommPicture() {
     322        _pictName = "Images/Items/Inventory/Comm Panel";
     323}
     324
    321325void InventoryItemsPicture::playEndMessage(DisplayElement *pushElement) {
    322326        PegasusEngine *vm = (PegasusEngine *)g_engine;
    323327
    void InventoryItemsPicture::playEndMessage(DisplayElement *pushElement) {  
    326330        _shouldDrawHighlight = false;
    327331        endMessage.shareSurface(this);
    328332        endMessage.initFromMovieFile("Images/Caldoria/A56 Congrats");
     333        endMessage.setVolume(((PegasusEngine *)g_engine)->getSoundFXLevel());
    329334        endMessage.moveMovieBoxTo(kFinalMessageLeft - kInventoryPushLeft, kFinalMessageTop - kInventoryPushTop);
    330335        endMessage.setTriggeredElement(pushElement);
    331336        endMessage.start();
  • engines/pegasus/items/inventorypicture.h

    diff --git a/engines/pegasus/items/inventorypicture.h b/engines/pegasus/items/inventorypicture.h
    index 9eba25b..1c89f50 100644
    a b public:  
    9898
    9999        void disableLooping() { _isLooping = false; }
    100100
     101        void setCommPicture();
    101102        void playEndMessage(DisplayElement *);
    102103
    103104protected:
  • engines/pegasus/items/item.h

    diff --git a/engines/pegasus/items/item.h b/engines/pegasus/items/item.h
    index a1451b2..1b0e7c0 100644
    a b static const ItemID kArgonPickup = 24;  
    118118// Biochips.
    119119
    120120static const ItemID kAIBiochip = 0;
     121static const ItemID kArthurBiochip = 1;
    121122static const ItemID kInterfaceBiochip = 1;
    122123static const ItemID kMapBiochip = 2;
    123124static const ItemID kOpticalBiochip = 3;
    static const ItemState kFlashlightOn = 115;  
    248249static const ItemState kNitrogenEmpty = 116;
    249250static const ItemState kNitrogenFull = 117;
    250251static const ItemState kFullGlass = 118;
     252static const ItemState kArthur000 = 119;
     253static const ItemState kArthur002 = 120;
     254static const ItemState kArthur010 = 121;
     255static const ItemState kArthur012 = 122;
     256static const ItemState kArthur100 = 123;
     257static const ItemState kArthur102 = 124;
     258static const ItemState kArthur110 = 125;
     259static const ItemState kArthur112 = 126;
    251260
    252261// Extra IDs.
    253262
  • engines/pegasus/menu.cpp

    diff --git a/engines/pegasus/menu.cpp b/engines/pegasus/menu.cpp
    index e55c006..0897f2a 100644
    a b  
    2323 *
    2424 */
    2525
     26#include "common/file.h"
     27
    2628#include "pegasus/gamestate.h"
    2729#include "pegasus/menu.h"
    2830#include "pegasus/pegasus.h"
    MainMenu::MainMenu() : GameMenu(kMainMenuID), _menuBackground(0), _overviewButto  
    155157                else
    156158                        _menuBackground.initFromPICTFile("Images/Demo/DemoMenu.pict");
    157159        } else {
    158                 _menuBackground.initFromPICTFile("Images/Main Menu/MainMenu.mac");
     160                if (((PegasusEngine *)g_engine)->isDVD())
     161                        _menuBackground.initFromPICTFile("Images/Main Menu/MainMenu_hq.mac");
     162                else
     163                        _menuBackground.initFromPICTFile("Images/Main Menu/MainMenu.mac");
    159164        }
    160165        _menuBackground.setDisplayOrder(0);
    161166        _menuBackground.startDisplaying();
    static const CoordType kCreditsMainMenuSelectTop = 408;  
    444449
    445450static const TimeValue kCoreTeamTime = 0;
    446451static const TimeValue kSupportTeamTime = 1920;
    447 static const TimeValue kOriginalTeamTime = 3000;
    448 static const TimeValue kTalentTime = 4440;
    449 static const TimeValue kOtherTitlesTime = 4680;
     452static const TimeValue kOriginalTeamCDTime = 3000;
     453static const TimeValue kOriginalTeamDVDTime = 3240;
     454static const TimeValue kTalentCDTime = 4440;
     455static const TimeValue kTalentDVDTime = 4680;
     456static const TimeValue kOtherTitlesCDTime = 4680;
     457static const TimeValue kOtherTitlesDVDTime = 4920;
    450458
    451459static const TimeValue kFrameIncrement = 120; // Three frames...
    452460
    static const TimeValue kFrameIncrement = 120; // Three frames...  
    454462CreditsMenu::CreditsMenu() : GameMenu(kCreditsMenuID), _menuBackground(0), _creditsMovie(0),
    455463                _mainMenuButton(0), _largeSelect(0), _smallSelect(0) {
    456464
    457         _menuBackground.initFromPICTFile("Images/Credits/CredScrn.pict");
     465        if (((PegasusEngine *)g_engine)->isDVD())
     466                _menuBackground.initFromPICTFile("Images/Credits/CredScrnScummVM.pict");
     467        else
     468                _menuBackground.initFromPICTFile("Images/Credits/CredScrn.pict");
    458469        _menuBackground.setDisplayOrder(0);
    459470        _menuBackground.startDisplaying();
    460471        _menuBackground.show();
    461472
    462         _creditsMovie.initFromMovieFile("Images/Credits/Credits.movie");
     473        if (((PegasusEngine *)g_engine)->isDVD())
     474                _creditsMovie.initFromMovieFile("Images/Credits/Credits_scummVM.movie");
     475        else
     476                _creditsMovie.initFromMovieFile("Images/Credits/Credits.movie");
    463477        _creditsMovie.setDisplayOrder(1);
    464478        _creditsMovie.moveElementTo(kCreditsMovieLeft, kCreditsMovieTop);
    465479        _creditsMovie.startDisplaying();
    CreditsMenu::CreditsMenu() : GameMenu(kCreditsMenuID), _menuBackground(0), _cred  
    484498        _menuSelection = -1;
    485499
    486500        newMenuSelection(kCreditsMenuCoreTeam);
     501
     502        if (((PegasusEngine *)g_engine)->isDVD()) {
     503                _menuLoop.attachFader(&_menuFader);
     504                _menuLoop.initFromAIFFFile("Sounds/Credits.aiff");
     505        }
     506}
     507
     508CreditsMenu::~CreditsMenu() {
     509        if (_menuLoop.isPlaying())
     510                stopCreditsMenuLoop();
     511}
     512
     513void CreditsMenu::startCreditsMenuLoop() {
     514        if (((PegasusEngine *)g_engine)->isDVD()) {
     515                FaderMoveSpec spec;
     516
     517                _menuLoop.loopSound();
     518                spec.makeTwoKnotFaderSpec(30, 0, 0, 30, 255);
     519
     520                _menuFader.startFader(spec);
     521        }
     522}
     523
     524void CreditsMenu::stopCreditsMenuLoop() {
     525        if (((PegasusEngine *)g_engine)->isDVD()) {
     526                FaderMoveSpec spec;
     527       
     528                spec.makeTwoKnotFaderSpec(30, 0, 255, 30, 0);
     529                _menuFader.startFaderSync(spec);
     530                _menuLoop.stopSound();
     531        }
    487532}
    488533
    489534// Assumes the new selection is never more than one away from the old...
    void CreditsMenu::newMenuSelection(const int newSelection) {  
    493538                case kCreditsMenuCoreTeam:
    494539                        _smallSelect.moveElementTo(kCoreTeamSelectLeft, kCoreTeamSelectTop);
    495540                        _creditsMovie.setTime(kCoreTeamTime);
    496                         _creditsMovie.redrawMovieWorld();
    497541                        break;
    498542                case kCreditsMenuSupportTeam:
    499543                        _smallSelect.moveElementTo(kSupportTeamSelectLeft, kSupportTeamSelectTop);
    500544                        _creditsMovie.setTime(kSupportTeamTime);
    501                         _creditsMovie.redrawMovieWorld();
    502545                        break;
    503546                case kCreditsMenuOriginalTeam:
    504547                        _smallSelect.moveElementTo(kOriginalTeamSelectLeft, kOriginalTeamSelectTop);
    505                         _creditsMovie.setTime(kOriginalTeamTime);
    506                         _creditsMovie.redrawMovieWorld();
     548                        if (((PegasusEngine *)g_engine)->isDVD())
     549                                _creditsMovie.setTime(kOriginalTeamDVDTime);
     550                        else
     551                                _creditsMovie.setTime(kOriginalTeamCDTime);
    507552                        break;
    508553                case kCreditsMenuTalent:
    509554                        _smallSelect.moveElementTo(kTalentSelectLeft, kTalentSelectTop);
    510                         _creditsMovie.setTime(kTalentTime);
    511                         _creditsMovie.redrawMovieWorld();
     555                        if (((PegasusEngine *)g_engine)->isDVD())
     556                                _creditsMovie.setTime(kTalentDVDTime);
     557                        else
     558                                _creditsMovie.setTime(kTalentCDTime);
    512559                        break;
    513560                case kCreditsMenuOtherTitles:
    514561                        _smallSelect.moveElementTo(kOtherTitlesSelectLeft, kOtherTitlesSelectTop);
    515562                        _smallSelect.show();
    516563                        _largeSelect.hide();
    517                         _creditsMovie.setTime(kOtherTitlesTime);
    518                         _creditsMovie.redrawMovieWorld();
     564                        if (((PegasusEngine *)g_engine)->isDVD())
     565                                _creditsMovie.setTime(kOtherTitlesDVDTime);
     566                        else
     567                                _creditsMovie.setTime(kOtherTitlesCDTime);
    519568                        break;
    520569                case kCreditsMenuMainMenu:
    521570                        _smallSelect.hide();
    522571                        _largeSelect.show();
    523572                        break;
    524573                }
     574                _creditsMovie.redrawMovieWorld();
    525575
    526576                _menuSelection = newSelection;
    527577        }
    528578}
    529579
    530580void CreditsMenu::newMovieTime(const TimeValue newTime) {
     581        // The DVD credits have an extra frame in the support team section
     582        bool isDVD = ((PegasusEngine *)g_engine)->isDVD();
     583
    531584        if (newTime < kSupportTeamTime) {
    532585                _smallSelect.moveElementTo(kCoreTeamSelectLeft, kCoreTeamSelectTop);
    533586                _menuSelection = kCreditsMenuCoreTeam;
    534         } else if (newTime < kOriginalTeamTime) {
     587        } else if ((isDVD && newTime < kOriginalTeamDVDTime) || (!isDVD && newTime < kOriginalTeamCDTime)) {
    535588                _smallSelect.moveElementTo(kSupportTeamSelectLeft, kSupportTeamSelectTop);
    536589                _menuSelection = kCreditsMenuSupportTeam;
    537         } else if (newTime < kTalentTime) {
     590        } else if ((isDVD && newTime < kTalentDVDTime) || (!isDVD && newTime < kTalentCDTime)) {
    538591                _smallSelect.moveElementTo(kOriginalTeamSelectLeft, kOriginalTeamSelectTop);
    539592                _menuSelection = kCreditsMenuOriginalTeam;
    540         } else if (newTime < kOtherTitlesTime) {
     593        } else if ((isDVD && newTime < kOtherTitlesDVDTime) || (!isDVD && newTime < kOtherTitlesCDTime)) {
    541594                _smallSelect.moveElementTo(kTalentSelectLeft, kTalentSelectTop);
    542595                _smallSelect.show();
    543596                _largeSelect.hide();
    DeathMenu::DeathMenu(const DeathReason deathReason) : GameMenu(kDeathMenuID), _d  
    664717                        "dAunmade", "dAbombed", "dAshot", "dAassass", "dAnuked",
    665718                        "dTunmade", "dTshot", "dPfall", "dPdino", "dPstuck",
    666719                        "dNchoke", "dNcaught", "dNcaught", "dNsub", "dNrobot1",
    667                         "dNrobot2", "dMfall", "dMcaught", "dMtracks", "dMrobot",
    668                         "dMtoast", "dMexplo1", "dMexplo2", "dMchoke1", "dMchoke2",
    669                         "dMdroid", "dMfall", "dMgears", "dMshutt1", "dMshutt2",
    670                         "dWpoison", "dWcaught", "dWplasma", "dWshot", "dAfinale"
     720                        "dNrobot2", "dMfall", "dMcaught", "dMcollision", "dMtracks",
     721                        "dMrobot", "dMtoast", "dMexplo1", "dMexplo2", "dMchoke1",
     722                        "dMchoke2", "dMdroid", "dMshaft", "dMgears", "dMshutt1",
     723                        "dMshutt2", "dWpoison", "dWcaught", "dWplasma", "dWshot",
     724                        "dAfinale"
    671725                };
    672726
    673727                imageName += fileNames[deathReason - 1];
    DeathMenu::DeathMenu(const DeathReason deathReason) : GameMenu(kDeathMenuID), _d  
    735789                _largeSelect.setDisplayOrder(2);
    736790                _largeSelect.startDisplaying();
    737791        } else {
    738                 _triumphSound.initFromQuickTime("Sounds/Caldoria/Galactic Triumph");
     792                if (vm->isDVD()) // Updated file for the DVD version
     793                        _triumphSound.initFromAIFFFile("Sounds/Caldoria/Galactic Triumph.44K.aiff");
     794                else
     795                        _triumphSound.initFromQuickTime("Sounds/Caldoria/Galactic Triumph");
    739796                _triumphSound.playSound();
    740797        }
    741798
    void DeathMenu::drawAllScores() {  
    864921        case kDeathRobotSubControlRoom:
    865922        case kDeathWrongShuttleLock:
    866923        case kDeathArrestedInMars:
     924        case kDeathCollidedWithPod:
    867925        case kDeathRunOverByPod:
    868926        case kDeathDidntGetOutOfWay:
    869927        case kDeathReactorBurn:
  • engines/pegasus/menu.h

    diff --git a/engines/pegasus/menu.h b/engines/pegasus/menu.h
    index 288b846..c0a27ef 100644
    a b protected:  
    9797class CreditsMenu : public GameMenu {
    9898public:
    9999        CreditsMenu();
    100         virtual ~CreditsMenu() {}
     100        virtual ~CreditsMenu();
    101101
    102102        virtual void handleInput(const Input &input, const Hotspot *);
     103        void startCreditsMenuLoop();
     104        void stopCreditsMenuLoop();
    103105
    104106protected:
    105107        void newMenuSelection(const int);
    protected:  
    111113        Picture _mainMenuButton;
    112114        Picture _largeSelect;
    113115        Picture _smallSelect;
     116
     117        Sound _menuLoop;
     118        SoundFader _menuFader;
    114119};
    115120
    116121class DeathMenu : public GameMenu {
  • engines/pegasus/module.mk

    diff --git a/engines/pegasus/module.mk b/engines/pegasus/module.mk
    index cb44a04..2dd5b87 100644
    a b  
    11MODULE := engines/pegasus
    22
    33MODULE_OBJS = \
     4        chase.o \
    45        compass.o \
    56        console.o \
    67        cursor.o \
    MODULE_OBJS = \  
    3334        items/itemdragger.o \
    3435        items/itemlist.o \
    3536        items/biochips/aichip.o \
     37        items/biochips/arthurchip.o \
    3638        items/biochips/biochipitem.o \
    3739        items/biochips/mapchip.o \
    3840        items/biochips/mapimage.o \
    MODULE_OBJS = \  
    5860        neighborhood/caldoria/caldoriabomb.o \
    5961        neighborhood/caldoria/caldoriamessages.o \
    6062        neighborhood/caldoria/caldoriamirror.o \
     63        neighborhood/mars/canyonchase.o \
    6164        neighborhood/mars/energybeam.o \
    6265        neighborhood/mars/gravitoncannon.o \
    6366        neighborhood/mars/hermite.o \
    MODULE_OBJS = \  
    7174        neighborhood/mars/spacechase3d.o \
    7275        neighborhood/mars/spacejunk.o \
    7376        neighborhood/mars/tractorbeam.o \
     77        neighborhood/mars/tunnelpod.o \
    7478        neighborhood/norad/norad.o \
    7579        neighborhood/norad/noradelevator.o \
    7680        neighborhood/norad/pressuredoor.o \
    MODULE_OBJS = \  
    8286        neighborhood/norad/alpha/noradalpha.o \
    8387        neighborhood/norad/alpha/panorama.o \
    8488        neighborhood/norad/alpha/panoramascroll.o \
     89        neighborhood/norad/alpha/subchase.o \
    8590        neighborhood/norad/delta/globegame.o \
    8691        neighborhood/norad/delta/noraddelta.o \
    8792        neighborhood/prehistoric/prehistoric.o \
  • engines/pegasus/neighborhood/caldoria/caldoria.cpp

    diff --git a/engines/pegasus/neighborhood/caldoria/caldoria.cpp b/engines/pegasus/neighborhood/caldoria/caldoria.cpp
    index 0707a83..0cb7f22 100644
    a b  
    2525
    2626#include "common/system.h"
    2727#include "video/qt_decoder.h"
     28#include "video/theora_decoder.h"
    2829
    2930#include "pegasus/cursor.h"
    3031#include "pegasus/energymonitor.h"
     
    3233#include "pegasus/interface.h"
    3334#include "pegasus/pegasus.h"
    3435#include "pegasus/ai/ai_area.h"
     36#include "pegasus/items/biochips/arthurchip.h"
    3537#include "pegasus/items/biochips/biochipitem.h"
    3638#include "pegasus/neighborhood/caldoria/caldoria.h"
    3739#include "pegasus/neighborhood/caldoria/caldoria4dsystem.h"
    static const int16 kDrawersAngle = -30;  
    4850static const int16 kCaldoria53Angle = 45;
    4951static const int16 kCaldoria55Angle = -45;
    5052
     53static const ExtraID kCreateCornbread = 1000;
     54static const ExtraID kWashingMachineZoomIn = 1001;
     55static const ExtraID kWashingMachineLoop = 1002;
     56static const ExtraID kWashingMachineZoomOut = 1003;
     57
     58static const HotSpotID kCaldoriaLaundryZoomInHotSpotID = 10000;
     59static const HotSpotID kCaldoriaLaundryZoomOutHotSpotID = 10001;
     60static const HotSpotID kCaldoriaCornbreadHotSpotID = 10002;
     61
    5162static const TimeValue kSinclairInterruptionTime1 = 2955;
    5263static const TimeValue kSinclairInterruptionTime2 = 6835;
    5364static const TimeValue kSinclairInterruptionTime3 = 9835;
    static const TimeValue kSinclairInterruptionTime4 = 12555;  
    5667static const InputBits kPullbackInterruptFilter = kFilterAllInput;
    5768static const InputBits kRecalibrationInterruptFilter = kFilterAllInput;
    5869
     70static const TimeValue kCaldoriaLaundryIntro1In = 0;
     71static const TimeValue kCaldoriaLaundryIntro1Out = 2645;
     72
     73static const TimeValue kCaldoriaLaundryIntro2In = 2645;
     74static const TimeValue kCaldoriaLaundryIntro2Out = 4933;
     75
    5976static const TimeValue kCaldoriaReplicatorIntroIn = 4933;
    6077static const TimeValue kCaldoriaReplicatorIntroOut = 6557;
    6178
    static const TimeValue kCaldoriaNobodyHomeOut = 21469;  
    92109static const TimeValue kCaldoriaNoOtherFloorIn = 21469;
    93110static const TimeValue kCaldoriaNoOtherFloorOut = 28013;
    94111
    95 static const TimeValue kCaldoria4DInstructionsIn = 28013;
    96 static const TimeValue kCaldoria4DInstructionsOut = 29730;
    97 
    98112static const TimeValue kCaldoriaDrinkOJIn = 33910;
    99113static const TimeValue kCaldoriaDrinkOJOut = 35846;
    100114
    void SinclairCallBack::callBack() {  
    159173}
    160174
    161175Caldoria::Caldoria(InputHandler* nextHandler, PegasusEngine *owner)
    162                 : Neighborhood(nextHandler, owner, "Caldoria", kCaldoriaID), _sinclairInterrupt(this) {
     176                : Neighborhood(nextHandler, owner, "Caldoria", kCaldoriaID), _extraMovie(kNoDisplayElement),
     177                _laundryZoomInSpot(kCaldoriaLaundryZoomInHotSpotID), _laundryZoomOutSpot(kCaldoriaLaundryZoomOutHotSpotID),
     178                _cornbreadSpot(kCaldoriaCornbreadHotSpotID), _sinclairInterrupt(this), _lookingAtLaundry(false) {
    163179        setIsItemTaken(kKeyCard);
    164180        setIsItemTaken(kOrangeJuiceGlassEmpty);
    165181        GameState.setTakenItemID(kOrangeJuiceGlassFull, GameState.isTakenItemID(kOrangeJuiceGlassEmpty));
    Caldoria::Caldoria(InputHandler* nextHandler, PegasusEngine *owner)  
    169185
    170186Caldoria::~Caldoria() {
    171187        _sinclairInterrupt.releaseCallBack();
     188        if (_vm->isDVD()) {
     189                _vm->getAllHotspots().remove(&_laundryZoomInSpot);
     190                _vm->getAllHotspots().remove(&_laundryZoomOutSpot);
     191                _vm->getAllHotspots().remove(&_cornbreadSpot);
     192        }
    172193}
    173194
    174195void Caldoria::init() {
    175196        Neighborhood::init();
    176197
     198        if (_vm->isDVD()) {
     199                _laundryZoomInSpot.setArea(Common::Rect(384, 120, 576, 320));
     200                _laundryZoomInSpot.setHotspotFlags(kNeighborhoodSpotFlag | kZoomInSpotFlag);
     201                _vm->getAllHotspots().push_back(&_laundryZoomInSpot);
     202
     203                _laundryZoomOutSpot.setArea(Common::Rect(64, 64, 576, 320));
     204                _laundryZoomOutSpot.setHotspotFlags(kNeighborhoodSpotFlag | kZoomOutSpotFlag);
     205                _vm->getAllHotspots().push_back(&_laundryZoomOutSpot);
     206
     207                _cornbreadSpot.setArea(Common::Rect(270, 233, 381, 298));
     208                _cornbreadSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag);
     209                _vm->getAllHotspots().push_back(&_cornbreadSpot);
     210        }
     211
    177212        // We need this notification flag as well.
    178213        _neighborhoodNotification.notifyMe(this, kSinclairLoopDoneFlag, kSinclairLoopDoneFlag);
    179214
     215        _extraMovieCallBack.setNotification(&_neighborhoodNotification);
     216
    180217        _sinclairInterrupt.initCallBack(&_navMovie, kCallBackAtTime);
    181218
    182219        forceStridingStop(kCaldoria55, kSouth, kAltCaldoriaSinclairDown);
    void Caldoria::start() {  
    187224        g_energyMonitor->stopEnergyDraining();
    188225
    189226        if (!GameState.getCaldoriaSeenPullback()) {
     227                Input input;
     228                Common::String wakeModeMoviePath;
     229                InputDevice.getInput(input, kPullbackInterruptFilter);
     230                if (_vm->isDVD() && JMPPPInput::isEasterEggModifierInput(input)) {
     231                        wakeModeMoviePath = "Images/Caldoria/A00WM";
     232                } else {
     233                        wakeModeMoviePath = "Images/Caldoria/A00WN";
     234                }
     235
    190236                _vm->_gfx->doFadeOutSync(kOneSecond * kFifteenTicksPerSecond, kFifteenTicksPerSecond);
    191237
    192                 g_system->delayMillis(2 * 1000);
     238                Video::VideoDecoder *pullbackMovie = 0;
     239                uint16 pullbackX, pullbackY;
    193240
    194                 Video::VideoDecoder *pullbackMovie = new Video::QuickTimeDecoder();
     241#ifdef USE_THEORADEC
     242                if (_vm->isDVD()) {
     243                        // Updated larger version
     244                        pullbackMovie = new Video::TheoraDecoder();
     245
     246                        if (!pullbackMovie->loadFile("Images/Caldoria/Pullback.ogg")) {
     247                                delete pullbackMovie;
     248                                pullbackMovie = 0;
     249                        }
     250                }
     251#endif
     252               
     253                if (!pullbackMovie) {
     254                        pullbackMovie = new Video::QuickTimeDecoder();
    195255
    196                 if (!pullbackMovie->loadFile("Images/Caldoria/Pullback.movie"))
    197                         error("Could not load pullback movie");
     256                        if (!pullbackMovie->loadFile("Images/Caldoria/Pullback.movie"))
     257                                error("Could not load Pullback.movie");
     258                }
     259               
     260                if (_vm->isDVD()) {
     261                        uint16 newHeight = (uint16)((640.0f / (float)pullbackMovie->getWidth()) * (float)pullbackMovie->getHeight());
     262                        pullbackX = 0;
     263                        pullbackY = (480 - newHeight) / 2;
     264                } else {
     265                        pullbackX = 80;
     266                        pullbackY = 112;
     267                }
    198268
    199269                // Draw the first frame so we can fade to it
    200270                const Graphics::Surface *frame = pullbackMovie->decodeNextFrame();
    201271                assert(frame);
    202272                assert(frame->format == g_system->getScreenFormat());
    203                 g_system->copyRectToScreen((const byte *)frame->getPixels(), frame->pitch, 64, 112, frame->w, frame->h);
     273                g_system->copyRectToScreen((const byte *)frame->getPixels(), frame->pitch, pullbackX, pullbackY, frame->w, frame->h);
    204274                _vm->_gfx->doFadeInSync(kTwoSeconds * kFifteenTicksPerSecond, kFifteenTicksPerSecond);
    205275
    206276                bool saveAllowed = _vm->swapSaveAllowed(false);
    207277                bool openAllowed = _vm->swapLoadAllowed(false);
    208278
    209279                bool skipped = false;
    210                 Input input;
    211280
    212281                pullbackMovie->start();
    213282
    void Caldoria::start() {  
    216285                                frame = pullbackMovie->decodeNextFrame();
    217286
    218287                                if (frame) {
    219                                         g_system->copyRectToScreen((const byte *)frame->getPixels(), frame->pitch, 64, 112, frame->w, frame->h);
     288                                        g_system->copyRectToScreen((const byte *)frame->getPixels(), frame->pitch, pullbackX, pullbackY, frame->w, frame->h);
    220289                                        g_system->updateScreen();
    221290                                }
    222291                        }
    223292
    224293                        InputDevice.getInput(input, kPullbackInterruptFilter);
    225                         if (input.anyInput() || _vm->saveRequested() || _vm->loadRequested()) {
     294                        if ((input.anyInput() || _vm->saveRequested() || _vm->loadRequested()) && !GameState.getEasterEgg()) {
    226295                                skipped = true;
    227296                                break;
    228297                        }
    void Caldoria::start() {  
    241310                ExtraTable::Entry entry;
    242311
    243312                if (!skipped) {
    244                         _vm->_gfx->doFadeOutSync(kThreeSeconds * kFifteenTicksPerSecond, kFifteenTicksPerSecond, false);
    245                         g_system->delayMillis(3 * 1000 / 2);
    246                         getExtraEntry(kCaldoria00WakeUp1, entry);
    247                         _navMovie.setTime(entry.movieStart);
    248                         _navMovie.redrawMovieWorld();
    249                         _navMovie.show();
    250                         _vm->refreshDisplay();
    251                         _vm->_gfx->doFadeInSync(kOneSecond * kFifteenTicksPerSecond, kFifteenTicksPerSecond, false);
     313                        if (_vm->isDVD()) {
     314                                Video::VideoDecoder* wakeModeMovie = 0;
     315#ifdef USE_THEORADEC
     316                                wakeModeMovie = new Video::TheoraDecoder();
     317                                if (!wakeModeMovie->loadFile(wakeModeMoviePath + ".ogg")) {
     318                                        delete wakeModeMovie;
     319                                        wakeModeMovie = 0;
     320                                }
     321#endif
     322                                if (!wakeModeMovie) {
     323                                        wakeModeMovie = new Video::QuickTimeDecoder();
     324                                        if (!wakeModeMovie->loadFile(wakeModeMoviePath + ".movie"))
     325                                                error("Could not load Jonny Ego movie");
     326                                }
     327
     328                                wakeModeMovie->start();
     329
     330                                while (!_vm->shouldQuit() && !wakeModeMovie->endOfVideo()) {
     331                                        if (wakeModeMovie->needsUpdate()) {
     332                                                frame = wakeModeMovie->decodeNextFrame();
     333
     334                                                if (frame) {
     335                                                        g_system->copyRectToScreen((const byte *)frame->getPixels(), frame->pitch, 0, 0, frame->w, frame->h);
     336                                                        g_system->updateScreen();
     337                                                }
     338                                        }
     339
     340                                        InputDevice.getInput(input, kPullbackInterruptFilter);
     341                                        if ((input.anyInput() || _vm->saveRequested() || _vm->loadRequested()) && !GameState.getEasterEgg()) {
     342                                                skipped = true;
     343                                                break;
     344                                        }
     345
     346                                        g_system->delayMillis(10);
     347                                }
     348
     349                                delete wakeModeMovie;
     350
     351                                if (_vm->shouldQuit())
     352                                        return;
     353                        } else {
     354                                _vm->_gfx->doFadeOutSync(kThreeSeconds * kFifteenTicksPerSecond, kFifteenTicksPerSecond, false);
     355                                g_system->delayMillis(3 * 1000 / 2);
     356                                getExtraEntry(kCaldoria00WakeUp1, entry);
     357                                _navMovie.setTime(entry.movieStart);
     358                                _navMovie.redrawMovieWorld();
     359                                _navMovie.show();
     360                                _vm->refreshDisplay();
     361                                _vm->_gfx->doFadeInSync(kOneSecond * kFifteenTicksPerSecond, kFifteenTicksPerSecond, false);
     362                        }
    252363                } else {
    253364                        getExtraEntry(kCaldoria00WakeUp1, entry);
    254365                        _navMovie.setTime(entry.movieStart);
    void Caldoria::start() {  
    262373        Neighborhood::start();
    263374}
    264375
     376void Caldoria::throwAwayInterface() {
     377        Neighborhood::throwAwayInterface();
     378        if (_vm->isDVD()) {
     379                _vm->getAllHotspots().remove(&_laundryZoomInSpot);
     380                _vm->getAllHotspots().remove(&_laundryZoomOutSpot);
     381                _vm->getAllHotspots().remove(&_cornbreadSpot);
     382        }
     383}
     384
    265385void Caldoria::flushGameState() {
    266386        GameState.setCaldoriaFuseTimeLimit(_utilityFuse.getTimeRemaining());
    267387}
    void Caldoria::getExtraCompassMove(const ExtraTable::Entry &entry, FaderMoveSpec  
    686806void Caldoria::loadAmbientLoops() {
    687807        RoomID room = GameState.getCurrentRoom();
    688808
    689         if (room == kCaldoria00 && GameState.getCaldoriaWokenUp())
    690                 loadLoopSound1("Sounds/Caldoria/Apartment Music.AIFF", 0x100 / 4);
    691         else if (room >= kCaldoria01 && room <= kCaldoria14)
    692                 loadLoopSound1("Sounds/Caldoria/Apartment Music.AIFF", 0x100 / 4);
    693         else if (room == kCaldoria27 || room == kCaldoria28 || room == kCaldoria45)
    694                 loadLoopSound1("Sounds/Caldoria/Elevator Loop.AIFF", 0x100 / 5);
    695         else if (room == kCaldoria44)
    696                 loadLoopSound1("Sounds/Caldoria/TSA Hum Loop.AIFF");
    697         else if (room >= kCaldoria15 && room <= kCaldoria48)
    698                 loadLoopSound1("Sounds/Caldoria/Industrial Nuage.aiff", 2 * 0x100 / 3);
    699         else if (room >= kCaldoria49 && room <= kCaldoria56)
    700                 loadLoopSound1("Sounds/Caldoria/A50NLB00.22K.AIFF", 0x100 / 4);
     809        if (_vm->isDVD()) {
     810                // Updated sounds in the DVD version
     811                if (room == kCaldoria00 && GameState.getCaldoriaWokenUp())
     812                        loadLoopSound1("Sounds/Caldoria/Apartment Music.32K.aiff", 0x100 / 4);
     813                else if (room >= kCaldoria01 && room <= kCaldoria14)
     814                        loadLoopSound1("Sounds/Caldoria/Apartment Music.32K.aiff", 0x100 / 4);
     815                else if (room == kCaldoria27 || room == kCaldoria28 || room == kCaldoria45)
     816                        loadLoopSound1("Sounds/Caldoria/Elevator Loop.32K.aiff", 0x100 / 5);
     817                else if (room == kCaldoria44)
     818                        loadLoopSound1("Sounds/Caldoria/TSA Hum Loop.44K.aiff");
     819                else if (room >= kCaldoria15 && room <= kCaldoria48)
     820                        loadLoopSound1("Sounds/Caldoria/Industrial Nuage.44K.aiff", 2 * 0x100 / 3);
     821                else if (room >= kCaldoria49 && room <= kCaldoria56)
     822                        loadLoopSound1("Sounds/Caldoria/A50NLB00.32K.AIFF", 0x100 / 4);
     823        } else {
     824                if (room == kCaldoria00 && GameState.getCaldoriaWokenUp())
     825                        loadLoopSound1("Sounds/Caldoria/Apartment Music.AIFF", 0x100 / 4);
     826                else if (room >= kCaldoria01 && room <= kCaldoria14)
     827                        loadLoopSound1("Sounds/Caldoria/Apartment Music.AIFF", 0x100 / 4);
     828                else if (room == kCaldoria27 || room == kCaldoria28 || room == kCaldoria45)
     829                        loadLoopSound1("Sounds/Caldoria/Elevator Loop.AIFF", 0x100 / 5);
     830                else if (room == kCaldoria44)
     831                        loadLoopSound1("Sounds/Caldoria/TSA Hum Loop.AIFF");
     832                else if (room >= kCaldoria15 && room <= kCaldoria48)
     833                        loadLoopSound1("Sounds/Caldoria/Industrial Nuage.aiff", 2 * 0x100 / 3);
     834                else if (room >= kCaldoria49 && room <= kCaldoria56)
     835                        loadLoopSound1("Sounds/Caldoria/A50NLB00.22K.AIFF", 0x100 / 4);
     836        }
    701837}
    702838
    703839void Caldoria::checkContinuePoint(const RoomID room, const DirectionConstant direction) {
    void Caldoria::checkContinuePoint(const RoomID room, const DirectionConstant dir  
    718854
    719855void Caldoria::spotCompleted() {
    720856        Neighborhood::spotCompleted();
    721         if (GameState.getCurrentRoom() == kCaldoriaBinoculars)
     857        switch (GameState.getCurrentRoom()) {
     858        case kCaldoriaBinoculars:
    722859                startExtraSequence(kBinocularsZoomInOnShip, kExtraCompletedFlag, kFilterNoInput);
     860                break;
     861        case kCaldoriaToilet:
     862                if (g_arthurChip)
     863                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA47", kArthurCaldoriaReadPaper);
     864                break;
     865        }
    723866}
    724867
    725868void Caldoria::arriveAt(const RoomID room, const DirectionConstant direction) {
    void Caldoria::arriveAt(const RoomID room, const DirectionConstant direction) {  
    741884
    742885        Neighborhood::arriveAt(room, direction);
    743886        Input dummy;
     887        Sound flushSound;
    744888
    745889        switch (room) {
    746890        case kCaldoria00:
    void Caldoria::arriveAt(const RoomID room, const DirectionConstant direction) {  
    757901        case kCaldoria09:
    758902                _lastExtra = 0xffffffff;
    759903                break;
     904        case kCaldoria10:
     905                if (_vm->isDVD() && direction == kWest) {
     906                        _vm->_cursor->hide();
     907                        flushSound.initFromAIFFFile("Sounds/Caldoria/Apartment Toilet.32K.aiff");
     908                        flushSound.setVolume(_vm->getSoundFXLevel());
     909                        flushSound.playSound();
     910                        while (flushSound.isPlaying() && !_vm->shouldQuit()) {
     911                                InputDevice.getInput(dummy, kFilterNoInput);
     912
     913                                _vm->checkCallBacks();
     914                                _vm->refreshDisplay();
     915                                _vm->_system->delayMillis(10);
     916                        }
     917                        if (_vm->shouldQuit())
     918                                return;
     919                        _vm->_cursor->hideUntilMoved();
     920                } else if (direction == kEast) {
     921                        if (g_arthurChip)
     922                                g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA42", kArthurCaldoriaReachedToilet);
     923                }
     924                break;
    760925        case kCaldoriaToilet:
    761926                GameState.setScoringReadPaper(true);
    762927                break;
    void Caldoria::arriveAt(const RoomID room, const DirectionConstant direction) {  
    812977        case kCaldoria49:
    813978                arriveAtCaldoria49();
    814979                break;
     980        case kCaldoria48:
     981                if (direction == kNorth && !GameState.getCaldoriaDoorBombed() && GameState.isTakenItemID(kCardBomb) && g_arthurChip)
     982                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA12", kArthurCaldoriaRoofDoor);           
     983                break;
    815984        case kCaldoria53:
    816985                if (direction == kEast && !GameState.getCaldoriaSinclairShot())
    817986                        zoomToSinclair();
    void Caldoria::arriveAt(const RoomID room, const DirectionConstant direction) {  
    8391008void Caldoria::doAIRecalibration() {
    8401009        GameState.setCaldoriaDidRecalibration(true);
    8411010
    842         if (!g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Caldoria/XA01EB1", true, kRecalibrationInterruptFilter))
    843                 return;
     1011        Input input;
     1012        InputDevice.getInput(input, kPullbackInterruptFilter);
     1013        if (_vm->isDVD() && JMPPPInput::isEasterEggModifierInput(input)) {
     1014                Video::VideoDecoder *video = 0;
    8441015
    845         g_interface->calibrateEnergyBar();
    846         if (!g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Caldoria/XA01EB4", true, kRecalibrationInterruptFilter))
    847                 return;
     1016                _vm->_cursor->hide();
     1017
     1018#ifdef USE_THEORADEC
     1019                video = new Video::TheoraDecoder();
     1020                if (!video->loadFile("Images/Caldoria/A00EA.ogg")) {
     1021                        delete video;
     1022                        video = 0;
     1023                }
     1024#endif
     1025
     1026                if (!video) {
     1027                        video = new Video::QuickTimeDecoder();
     1028                        if (!video->loadFile("Images/Caldoria/A00EA.movie"))
     1029                                error("Could not load Month-O-Matic video");
     1030                }
     1031
     1032                video->setVolume(MIN<uint>(_vm->getSoundFXLevel(), 0xFF));
     1033                video->start();
     1034
     1035                while (!_vm->shouldQuit() && !video->endOfVideo()) {
     1036                        if (video->needsUpdate()) {
     1037                                const Graphics::Surface *frame = video->decodeNextFrame();
     1038
     1039                                if (frame) {
     1040                                        g_system->copyRectToScreen((const byte *)frame->getPixels(), frame->pitch, kNavAreaLeft, kNavAreaTop, frame->w, frame->h);
     1041                                        g_system->updateScreen();
     1042                                }
     1043                        }
     1044
     1045                        Common::Event event;
     1046                        while (g_system->getEventManager()->pollEvent(event))
     1047                                ;
     1048
     1049                        g_system->delayMillis(10);
     1050                }
     1051
     1052                delete video;
     1053
     1054                if (_vm->shouldQuit())
     1055                        return;
     1056               
     1057                arriveAt(kCaldoria01, kEast);
     1058        } else if (g_AIArea->isChattyAI()) {
     1059                if (!g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Caldoria/XA01EB1", true, kRecalibrationInterruptFilter))
     1060                        return;
     1061
     1062                g_interface->calibrateEnergyBar();
     1063                if (!g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Caldoria/XA01EB4", true, kRecalibrationInterruptFilter))
     1064                        return;
     1065
     1066                g_interface->raiseInventoryDrawerSync();
     1067                if (!g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Caldoria/XA01EB6", true, kRecalibrationInterruptFilter)) {
     1068                        g_interface->lowerInventoryDrawerSync();
     1069                        return;
     1070                }
    8481071
    849         g_interface->raiseInventoryDrawerSync();
    850         if (!g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Caldoria/XA01EB6", true, kRecalibrationInterruptFilter)) {
    8511072                g_interface->lowerInventoryDrawerSync();
    852                 return;
    853         }
     1073                g_interface->raiseBiochipDrawerSync();
    8541074
    855         g_interface->lowerInventoryDrawerSync();
    856         g_interface->raiseBiochipDrawerSync();
     1075                if (!g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Caldoria/XA01EB5", true, kRecalibrationInterruptFilter)) {
     1076                        g_interface->lowerBiochipDrawerSync();
     1077                        return;
     1078                }
    8571079
    858         if (!g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Caldoria/XA01EB5", true, kRecalibrationInterruptFilter)) {
    8591080                g_interface->lowerBiochipDrawerSync();
    860                 return;
    861         }
    862 
    863         g_interface->lowerBiochipDrawerSync();
    8641081
    865         g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Caldoria/XA01EB8", false, kRecalibrationInterruptFilter);
     1082                g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Caldoria/XA01EB8", false, kRecalibrationInterruptFilter);
     1083        }
    8661084}
    8671085
    8681086void Caldoria::arriveAtCaldoria00() {
    void Caldoria::setUpRoofTop() {  
    9851203        }
    9861204}
    9871205
     1206void Caldoria::leftButton(const Input &input) {
     1207        if (!(GameState.getCurrentRoomAndView() == MakeRoomView(kCaldoria11, kWest) && _lookingAtLaundry))
     1208                Neighborhood::leftButton(input);
     1209}
     1210
     1211void Caldoria::rightButton(const Input &input) {
     1212        if (!(GameState.getCurrentRoomAndView() == MakeRoomView(kCaldoria11, kWest) && _lookingAtLaundry))
     1213                Neighborhood::rightButton(input);
     1214}
     1215
    9881216void Caldoria::downButton(const Input &input) {
    9891217        switch (GameState.getCurrentRoomAndView()) {
    9901218        case MakeRoomView(kCaldoria01, kEast):
    9911219                GameState.setCaldoriaWokenUp(true);
    9921220                startExtraSequence(kCaldoria00SitDown, kExtraCompletedFlag, kFilterNoInput);
    9931221                break;
     1222        case MakeRoomView(kCaldoria11, kWest):
     1223                if (_lookingAtLaundry)
     1224                        startExtraSequence(kWashingMachineZoomOut, kExtraCompletedFlag, kFilterNoInput);
     1225                break;
    9941226        default:
    9951227                Neighborhood::downButton(input);
    9961228                break;
    void Caldoria::turnTo(const DirectionConstant direction) {  
    10261258        case kCaldoria09:
    10271259                _lastExtra = 0xffffffff;
    10281260                break;
     1261        case kCaldoria10:
     1262                if (direction == kEast && g_arthurChip)
     1263                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA42", kArthurCaldoriaReachedToilet);
     1264                break;
    10291265        case kCaldoria11:
    10301266                if (direction == kEast && !GameState.getCaldoriaSeenMessages())
    10311267                        loopCroppedMovie("Images/Caldoria/A11 Message Machine Loop", kCaldoria11MessageLoopLeft, kCaldoria11MessageLoopTop);
    void Caldoria::turnTo(const DirectionConstant direction) {  
    10511287                        closeCroppedMovie();
    10521288                break;
    10531289        case kCaldoria48:
    1054                 if (direction == kNorth && !GameState.getCaldoriaDoorBombed())
     1290                if (direction == kNorth && !GameState.getCaldoriaDoorBombed()) {
    10551291                        setCurrentActivation(kActivateRoofSlotEmpty);
     1292                        if (GameState.isTakenItemID(kCardBomb) && g_arthurChip)
     1293                                g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA12", kArthurCaldoriaRoofDoor);
     1294                }
    10561295                break;
    10571296        case kCaldoria53:
    10581297                if (GameState.getCurrentDirection() == kEast && !GameState.getCaldoriaSinclairShot())
    void Caldoria::zoomTo(const Hotspot *zoomOutSpot) {  
    10851324        // that doesn't involve the ClickInHotSpot function.
    10861325        _zoomOutSpot = zoomOutSpot;
    10871326
    1088         if (zoomOutSpot->getObjectID() == kCaldoriaDrawersOutSpotID) {
     1327        if (_vm->isDVD() && zoomOutSpot->getObjectID() == kCaldoriaReplicatorOutSpotID) {
     1328                GameState.setEasterEgg(false);
     1329                Neighborhood::zoomTo(zoomOutSpot);
     1330        } else if (zoomOutSpot->getObjectID() == kCaldoriaDrawersOutSpotID) {
    10891331                if (_privateFlags.getFlag(kCaloriaPrivateLeftDrawerOpenFlag)) {
    10901332                        _privateFlags.setFlag(kCaloriaPrivateLeftDrawerOpenFlag, false);
    10911333                        startExtraSequence(kLeftDrawerClose, kExtraCompletedFlag, kFilterNoInput);
    void Caldoria::zoomToSinclair() {  
    11221364        startExtraSequence(kCa53EastZoomToSinclair, kExtraCompletedFlag, kFilterAllInput);
    11231365}
    11241366
     1367void Caldoria::startExtraSequence(const ExtraID extraID, const NotificationFlags flags, const InputBits interruptionFilter) {
     1368        short left = kNavAreaLeft, top = kNavAreaTop;
     1369        DisplayOrder displayOrder = kNavMovieOrder + 1;
     1370        TimeValue segmentStart = 0, segmentStop = 0;
     1371        bool loopSequence = false;
     1372        Common::Rect pushBounds;
     1373        NotificationFlags extraFlags;
     1374
     1375        switch (extraID) {
     1376        case kCreateCornbread:
     1377        case kWashingMachineZoomIn:
     1378        case kWashingMachineLoop:
     1379        case kWashingMachineZoomOut:
     1380                _turnPush.getBounds(pushBounds);
     1381               
     1382                switch (extraID) {
     1383                case kCreateCornbread:
     1384                        _extraMovie.initFromMovieFile("Images/Caldoria/A12RC.movie");
     1385                        left = pushBounds.left;
     1386                        top = pushBounds.top;
     1387                        displayOrder = kNavMovieOrder + 1;
     1388                        segmentStart = 0;
     1389                        segmentStop = _extraMovie.getDuration();
     1390                        loopSequence = false;
     1391                        break;
     1392                case kWashingMachineZoomIn:
     1393                        _extraMovie.initFromMovieFile("Images/Caldoria/A11WAS.movie");
     1394                        left = pushBounds.left;
     1395                        top = pushBounds.top;
     1396                        displayOrder = kNavMovieOrder + 1;
     1397                        segmentStart = 0;
     1398                        segmentStop = 5480;
     1399                        loopSequence = false;
     1400                        break;
     1401                case kWashingMachineLoop:
     1402                        // The washing machine movie will already be loaded after zooming in
     1403                        left = pushBounds.left;
     1404                        top = pushBounds.top;
     1405                        displayOrder = kNavMovieOrder + 1;
     1406                        segmentStart = 5480;
     1407                        segmentStop = 9880;
     1408                        loopSequence = true;
     1409                        break;
     1410                case kWashingMachineZoomOut:
     1411                        // The washing machine movie will still be loaded after looping
     1412                        left = pushBounds.left;
     1413                        top = pushBounds.top;
     1414                        displayOrder = kNavMovieOrder + 1;
     1415                        segmentStart = 9880;
     1416                        segmentStop = 11200;
     1417                        loopSequence = false;
     1418                        break;
     1419                default:
     1420                        break;
     1421                }
     1422               
     1423                _lastExtra = extraID;
     1424                _turnPush.hide();
     1425               
     1426                if (!loopSequence && g_AIArea)
     1427                        g_AIArea->lockAIOut();
     1428               
     1429                extraFlags = flags;
     1430                _interruptionFilter = interruptionFilter;
     1431                // Stop the nav movie before doing anything else
     1432                _navMovie.stop();
     1433                _navMovie.stopDisplaying();
     1434               
     1435                _extraMovie.setVolume(_vm->getSoundFXLevel());
     1436                _extraMovie.moveElementTo(left, top);
     1437                _extraMovie.setDisplayOrder(displayOrder);
     1438                _extraMovie.startDisplaying();
     1439                _extraMovie.show();
     1440                _extraMovie.setFlags(0);
     1441                _extraMovie.setSegment(segmentStart, segmentStop);
     1442                _extraMovie.setTime(segmentStart);
     1443                if (loopSequence)
     1444                        _extraMovie.setFlags(kLoopTimeBase);
     1445                else
     1446                        extraFlags |= kNeighborhoodMovieCompletedFlag;
     1447                _extraMovieCallBack.cancelCallBack();
     1448                _extraMovieCallBack.initCallBack(&_extraMovie, kCallBackAtExtremes);
     1449                if (extraFlags != 0) {
     1450                        _extraMovieCallBack.setCallBackFlag(extraFlags);
     1451                        _extraMovieCallBack.scheduleCallBack(kTriggerAtStop, 0, 0);
     1452                }
     1453                _extraMovie.start();
     1454                break;
     1455        default:
     1456                Neighborhood::startExtraSequence(extraID, flags, interruptionFilter);
     1457                break;
     1458        }
     1459}
     1460
    11251461void Caldoria::receiveNotification(Notification *notification, const NotificationFlags flags) {
    11261462        Neighborhood::receiveNotification(notification, flags);
    11271463
    void Caldoria::receiveNotification(Notification *notification, const Notificatio  
    11581494                        }
    11591495                        break;
    11601496                case kCreateOrangeJuice:
     1497                        GameState.setCaldoriaMadeOJ(true);
    11611498                        setCurrentActivation(kActivateOJOnThePad);
    1162                         requestSpotSound(kCaldoriaReplicatorOJChoiceIn, kCaldoriaReplicatorOJChoiceOut, kFilterNoInput, 0);
     1499                        GameState.setEasterEgg(false);
     1500                        break;
     1501                case kCreateCornbread:
     1502                        _extraMovie.moveElementTo(0, 0);
     1503                        _vm->_gfx->setCurSurface(_navMovie.getSurface());
     1504                        _extraMovie.copyToCurrentPort();
     1505                        _vm->_gfx->setCurSurface(_vm->_gfx->getWorkArea());
     1506                        _extraMovie.stopDisplaying();
     1507                        _extraMovie.releaseMovie();
     1508                        _navMovie.startDisplaying();
     1509                        GameState.setEasterEgg(true);
     1510                        if (g_arthurChip)
     1511                                g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBB39", kArthurCaldoriaCreatedCornbread);
     1512                        break;
     1513                case kWashingMachineZoomIn:
     1514                        _lookingAtLaundry = true;
     1515                        startExtraSequence(kWashingMachineLoop, kExtraCompletedFlag, kFilterAllInput);
     1516                        break;
     1517                case kWashingMachineZoomOut:
     1518                        _extraMovie.stopDisplaying();
     1519                        _extraMovie.releaseMovie();
     1520                        _navMovie.startDisplaying();
     1521                        _lookingAtLaundry = false;
    11631522                        break;
    11641523                case kCaldoria00SitDown:
    11651524                        arriveAt(kCaldoria00, kEast);
    void Caldoria::receiveNotification(Notification *notification, const Notificatio  
    12021561                case kCa48NorthExplosion:
    12031562                        // Current biochip must be the shield if we got here.
    12041563                        _vm->getCurrentBiochip()->setItemState(kShieldNormal);
     1564                        if (g_arthurChip) {
     1565                                if (_vm->getRandomBit())
     1566                                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA41", kArthurCaldoriaBlownDoor);
     1567                                else
     1568                                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBB42", kArthurCaldoriaBlownDoor);
     1569                        }                                                               
    12051570                        break;
    12061571                case kBinocularsZoomInOnShip:
    12071572                        setCurrentActivation(kActivateFocusedOnShip);
     1573                        if (g_arthurChip)
     1574                                g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA03", kArthurCaldoriaLookThroughTelescope);
    12081575                        break;
    12091576                case kCa49NorthVoiceAnalysis:
    12101577                        _utilityFuse.primeFuse(kSinclairShootsTimeLimit);
    12111578                        _utilityFuse.setFunctor(new Common::Functor0Mem<void, Caldoria>(this, &Caldoria::sinclairTimerExpired));
    12121579                        _utilityFuse.lightFuse();
    12131580                        GameState.setCaldoriaSawVoiceAnalysis(true);
     1581                        if (_vm->isDVD() && g_AIArea)
     1582                                g_AIArea->checkRules();
     1583                        if (g_arthurChip)
     1584                                g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA20", kArthurCaldoriaSawVoiceAnalysis);
    12141585                        break;
    12151586                case kCa53EastZoomToSinclair:
    12161587                        if (GameState.getCaldoriaSinclairShot()) {
    void Caldoria::receiveNotification(Notification *notification, const Notificatio  
    12341605                }
    12351606        } else if ((flags & kSpotSoundCompletedFlag) != 0) {
    12361607                switch (GameState.getCurrentRoom()) {
     1608                case kCaldoria11:
     1609                        if (g_arthurChip)
     1610                                g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA46", kArthurCaldoriaZoomedToLaundry);
     1611                        break;
    12371612                case kCaldoria20:
    12381613                case kCaldoria21:
    12391614                case kCaldoria26:
    void Caldoria::receiveNotification(Notification *notification, const Notificatio  
    12411616                case kCaldoria34:
    12421617                case kCaldoria35:
    12431618                        updateViewFrame();
     1619                        if ((GameState.getCurrentRoom() == kCaldoria34 || GameState.getCurrentRoom() == kCaldoria35) && g_arthurChip)
     1620                                g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA44", kArthurCaldoriaSawVacantApartment);
    12441621                        break;
    12451622                case kCaldoria27:
    12461623                case kCaldoria28:
    void Caldoria::receiveNotification(Notification *notification, const Notificatio  
    12481625                        updateElevatorMovie();
    12491626                        break;
    12501627                case kCaldoriaReplicator:
    1251                         emptyOJGlass();
     1628                        if (_spotSounds.getStart() == kCaldoriaReplicatorWrongChoiceIn) {
     1629                                if (g_arthurChip)
     1630                                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA16", kArthurCaldoriaSelectedStickyBuns);
     1631                        } else {
     1632                                emptyOJGlass();
     1633                                if (g_arthurChip)
     1634                                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA45", kArthurCaldoriaDrankOJ);
     1635                        }
    12521636                        break;
    12531637                }
    12541638        } else if ((flags & kSinclairLoopDoneFlag) != 0) {
    void Caldoria::activateHotspots() {  
    13131697        case kCaldoriaReplicator:
    13141698                if (GameState.getCaldoriaMadeOJ())
    13151699                        _vm->getAllHotspots().deactivateOneHotspot(kCaldoriaMakeOJSpotID);
     1700                if (GameState.getEasterEgg())
     1701                        _vm->getAllHotspots().activateOneHotspot(kCaldoriaCornbreadHotSpotID);
     1702                break;
     1703        case kCaldoria11:
     1704                if (_vm->isDVD() && GameState.getCurrentDirection() == kWest) {
     1705                        if (_lookingAtLaundry)
     1706                                _vm->getAllHotspots().activateOneHotspot(kCaldoriaLaundryZoomOutHotSpotID);
     1707                        else
     1708                                _vm->getAllHotspots().activateOneHotspot(kCaldoriaLaundryZoomInHotSpotID);
     1709                }
    13161710                break;
    13171711        case kCaldoria27:
    13181712                if (GameState.isCurrentDoorOpen()) {
    void Caldoria::clickInHotspot(const Input &input, const Hotspot *spot) {  
    14051799                startExtraSequence(kRightDrawerCloseNoKeys, kExtraCompletedFlag, kFilterNoInput);
    14061800                break;
    14071801        case kCaldoriaMakeStickyBunsSpotID:
    1408                 requestSpotSound(kCaldoriaReplicatorWrongChoiceIn, kCaldoriaReplicatorWrongChoiceOut, kFilterNoInput, 0);
     1802                requestSpotSound(kCaldoriaReplicatorWrongChoiceIn, kCaldoriaReplicatorWrongChoiceOut, kFilterNoInput, kSpotSoundCompletedFlag);
    14091803                break;
    14101804        case kCaldoriaMakeOJSpotID:
    1411                 GameState.setCaldoriaMadeOJ(true);
    1412                 startExtraSequence(kCreateOrangeJuice, kExtraCompletedFlag, kFilterNoInput);
     1805                if (_vm->isDVD() && JMPPPInput::isEasterEggModifierInput(input)) {
     1806                        startExtraSequence(kCreateCornbread, kExtraCompletedFlag, kFilterNoInput);
     1807                } else {
     1808                        requestSpotSound(kCaldoriaReplicatorOJChoiceIn, kCaldoriaReplicatorOJChoiceOut, kFilterNoInput, 0);
     1809                        requestExtraSequence(kCreateOrangeJuice, kExtraCompletedFlag, kFilterNoInput);
     1810                }
     1811                break;
     1812        case kCaldoriaCornbreadHotSpotID:
     1813                doArthurJoyride();
     1814                break;
     1815        case kCaldoriaLaundryZoomInHotSpotID:
     1816                if (_vm->isDVD()) {
     1817                        startExtraSequence(kWashingMachineZoomIn, kExtraCompletedFlag, kFilterNoInput);
     1818                        requestDelay(30, 10, kFilterNoInput, kDelayCompletedFlag);
     1819                        requestSpotSound(kCaldoriaLaundryIntro1In, kCaldoriaLaundryIntro2Out, kFilterNoInput, kSpotSoundCompletedFlag);
     1820                }
     1821                break;
     1822        case kCaldoriaLaundryZoomOutHotSpotID:
     1823                startExtraSequence(kWashingMachineZoomOut, kExtraCompletedFlag, kFilterNoInput);
    14131824                break;
    14141825        case kCaBedroomVidPhoneActivationSpotID:
    14151826                newInteraction(kCaldoriaMessagesInteractionID);
    void Caldoria::clickInHotspot(const Input &input, const Hotspot *spot) {  
    14911902
    14921903void Caldoria::clickOnDoorbell(const HotSpotID doorBellSpotID) {
    14931904        uint32 extra;
     1905        Sound doorbellSound;
    14941906        ExtraTable::Entry entry;
     1907        Input input;
    14951908
    14961909        switch (doorBellSpotID) {
    14971910        case kCaldoria20DoorbellSpotID:
     1911                if (_vm->isDVD())
     1912                        doorbellSound.initFromAIFFFile("Sounds/Caldoria/AH5.AIFF");
    14981913                extra = kCaldoria20Doorbell;
    14991914                break;
    15001915        case kCaldoria21DoorbellSpotID:
     1916                if (_vm->isDVD())
     1917                        doorbellSound.initFromAIFFFile("Sounds/Caldoria/AH4.AIFF");
    15011918                extra = kCaldoria21Doorbell;
    15021919                break;
    15031920        case kCaldoria26DoorbellSpotID:
     1921                if (_vm->isDVD())
     1922                        doorbellSound.initFromAIFFFile("Sounds/Caldoria/AH3.AIFF");
    15041923                extra = kCaldoria26Doorbell;
    15051924                break;
    15061925        case kCaldoria29DoorbellSpotID:
     1926                if (_vm->isDVD())
     1927                        doorbellSound.initFromAIFFFile("Sounds/Caldoria/AH1.AIFF");
    15071928                extra = kCaldoria29Doorbell;
    15081929                break;
    15091930        case kCaldoria34DoorbellSpotID:
    void Caldoria::clickOnDoorbell(const HotSpotID doorBellSpotID) {  
    15181939
    15191940        getExtraEntry(extra, entry);
    15201941        showViewFrame(entry.movieStart);
    1521         requestSpotSound(kCaldoriaNobodyHomeIn, kCaldoriaNobodyHomeOut, kFilterNoInput, kSpotSoundCompletedFlag);
     1942        if (_vm->isDVD() && doorBellSpotID != kCaldoria34DoorbellSpotID && doorBellSpotID != kCaldoria35DoorbellSpotID) {
     1943                _vm->_cursor->hide();
     1944                doorbellSound.setVolume(_vm->getSoundFXLevel());
     1945                doorbellSound.playSound();
     1946                while (doorbellSound.isPlaying() && !_vm->shouldQuit()) {
     1947                        InputDevice.getInput(input, kFilterNoInput);
     1948
     1949                        _vm->checkCallBacks();
     1950                        _vm->refreshDisplay();
     1951                        _vm->_system->delayMillis(10);
     1952                }
     1953                if (_vm->shouldQuit())
     1954                        return;
     1955                _vm->_cursor->hideUntilMoved();
     1956                updateViewFrame();
     1957        } else {
     1958                requestSpotSound(kCaldoriaNobodyHomeIn, kCaldoriaNobodyHomeOut, kFilterNoInput, kSpotSoundCompletedFlag);
     1959        }
     1960}
     1961
     1962void Caldoria::cantMoveThatWay(CanOpenDoorReason reason) {
     1963        switch (reason) {
     1964        case kCantMoveDoorClosed:
     1965        case kCantMoveDoorLocked:
     1966                openDoor();
     1967                break;
     1968        case kCantMoveBlocked:
     1969                switch (GameState.getCurrentRoomAndView()) {
     1970                case MakeRoomView(kCaldoria20, kWest):
     1971                case MakeRoomView(kCaldoria21, kEast):
     1972                case MakeRoomView(kCaldoria26, kSouth):
     1973                case MakeRoomView(kCaldoria29, kSouth):
     1974                case MakeRoomView(kCaldoria34, kWest):
     1975                case MakeRoomView(kCaldoria35, kEast):
     1976                        cantOpenDoor(kCantOpenLocked);
     1977                        break;
     1978                default:
     1979                        zoomUpOrBump();
     1980                        break;
     1981                }
     1982                break;
     1983        default:
     1984                bumpIntoWall();
     1985                break;
     1986        }
    15221987}
    15231988
    15241989CanOpenDoorReason Caldoria::canOpenDoor(DoorTable::Entry &entry) {
    void Caldoria::pickedUpItem(Item *item) {  
    16062071}
    16072072
    16082073void Caldoria::dropItemIntoRoom(Item *item, Hotspot *dropSpot) {
     2074        Input input;
     2075        Sound cardBombVoice;
     2076
    16092077        switch (item->getObjectID()) {
    16102078        case kKeyCard:
    16112079                Neighborhood::dropItemIntoRoom(item, dropSpot);
    void Caldoria::dropItemIntoRoom(Item *item, Hotspot *dropSpot) {  
    16292097                _utilityFuse.lightFuse();
    16302098                GameState.setCaldoriaFuseTimeLimit(kCardBombCountDownTime);
    16312099                loopCroppedMovie("Images/Caldoria/A48 Bomb Loop", kCaldoria48CardBombLoopLeft, kCaldoria48CardBombLoopTop);
     2100                if (_vm->isDVD()) {
     2101                        InputDevice.getInput(input, kFilterAllInput);
     2102                        if (JMPPPInput::isEasterEggModifierInput(input))
     2103                                cardBombVoice.initFromAIFFFile("Sounds/Caldoria/Card Bomb.Geno.aiff");
     2104                        else
     2105                                cardBombVoice.initFromAIFFFile("Sounds/Caldoria/Card Bomb.44K.aiff");
     2106                        cardBombVoice.playSound();
     2107                        while (cardBombVoice.isPlaying() && !_vm->shouldQuit()) {
     2108                                InputDevice.getInput(input, kFilterNoInput);
     2109
     2110                                _vm->checkCallBacks();
     2111                                _vm->refreshDisplay();
     2112                                _vm->_system->delayMillis(10);
     2113                        }
     2114                        if (_vm->shouldQuit())
     2115                                return;
     2116                }
    16322117                GameState.setScoringUsedCardBomb(true);
     2118                if (g_arthurChip)
     2119                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA19", kArthurCaldoriaUsedCardBomb);
    16332120                break;
    16342121        case kStunGun:
    16352122                GameState.setCaldoriaGunAimed(true);
    void Caldoria::dropItemIntoRoom(Item *item, Hotspot *dropSpot) {  
    16402127                _gunSprite->moveElementTo(kCaldoriaGunSpriteLeft, kCaldoriaGunSpriteTop);
    16412128                _gunSprite->startDisplaying();
    16422129                _gunSprite->show();
     2130                if (g_arthurChip)
     2131                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA17", kArthurCaldoriaStunningSinclair);
    16432132                break;
    16442133        default:
    16452134                Neighborhood::dropItemIntoRoom(item, dropSpot);
    void Caldoria::dropItemIntoRoom(Item *item, Hotspot *dropSpot) {  
    16472136        }
    16482137}
    16492138
     2139void Caldoria::playMissingFloorSound() {
     2140        Input input;
     2141        Sound elevatorVoice;
     2142
     2143        InputDevice.getInput(input, kFilterAllInput);
     2144        if (_vm->isDVD() && JMPPPInput::isEasterEggModifierInput(input)) {
     2145                _vm->_cursor->hide();
     2146                elevatorVoice.initFromAIFFFile("Sounds/Caldoria/Elevator Denied.32K.aiff");
     2147                elevatorVoice.setVolume(_vm->getSoundFXLevel());
     2148                elevatorVoice.playSound();
     2149                while (elevatorVoice.isPlaying() && !_vm->shouldQuit()) {
     2150                        InputDevice.getInput(input, kFilterNoInput);
     2151
     2152                        _vm->checkCallBacks();
     2153                        _vm->refreshDisplay();
     2154                        _vm->_system->delayMillis(10);
     2155                }
     2156                if (_vm->shouldQuit())
     2157                        return;
     2158                _vm->_cursor->hideUntilMoved();
     2159                updateElevatorMovie();
     2160        } else {
     2161                requestSpotSound(kCaldoriaNoOtherFloorIn,
     2162                                                        kCaldoriaNoOtherFloorOut,
     2163                                                        kFilterNoInput,
     2164                                                        kSpotSoundCompletedFlag);
     2165        }
     2166}
     2167
    16502168void Caldoria::takeElevator(uint startFloor, uint endFloor) {
    16512169        _croppedMovie.stop();
    16522170        _croppedMovie.setSegment(0, _croppedMovie.getDuration());
    void Caldoria::takeElevator(uint startFloor, uint endFloor) {  
    16602178                case 2:
    16612179                        _croppedMovie.setTime(k1To2Time);
    16622180                        _croppedMovie.redrawMovieWorld();
    1663                         requestSpotSound(kCaldoriaNoOtherDestinationIn, kCaldoriaNoOtherDestinationOut, kFilterNoInput, kSpotSoundCompletedFlag);
     2181                        playMissingFloorSound();
    16642182                        break;
    16652183                case 3:
    16662184                        _croppedMovie.setTime(k1To3Time);
    16672185                        _croppedMovie.redrawMovieWorld();
    1668                         requestSpotSound(kCaldoriaNoOtherDestinationIn, kCaldoriaNoOtherDestinationOut, kFilterNoInput, kSpotSoundCompletedFlag);
     2186                        playMissingFloorSound();
    16692187                        break;
    16702188                case 4:
    16712189                        _croppedMovie.setSegment(k1To4Start, k1To4Stop);
    void Caldoria::takeElevator(uint startFloor, uint endFloor) {  
    16922210                case 2:
    16932211                        _croppedMovie.setTime(k4To2Time);
    16942212                        _croppedMovie.redrawMovieWorld();
    1695                         requestSpotSound(kCaldoriaNoOtherDestinationIn, kCaldoriaNoOtherDestinationOut, kFilterNoInput, kSpotSoundCompletedFlag);
     2213                        playMissingFloorSound();
    16962214                        break;
    16972215                case 3:
    16982216                        _croppedMovie.setTime(k4To3Time);
    16992217                        _croppedMovie.redrawMovieWorld();
    1700                         requestSpotSound(kCaldoriaNoOtherDestinationIn, kCaldoriaNoOtherDestinationOut, kFilterNoInput, kSpotSoundCompletedFlag);
     2218                        playMissingFloorSound();
    17012219                        break;
    17022220                case 4:
    17032221                        // Do nothing.
    void Caldoria::takeElevator(uint startFloor, uint endFloor) {  
    17212239                case 2:
    17222240                        _croppedMovie.setTime(k5To2Time);
    17232241                        _croppedMovie.redrawMovieWorld();
    1724                         requestSpotSound(kCaldoriaNoOtherDestinationIn, kCaldoriaNoOtherDestinationOut, kFilterNoInput, kSpotSoundCompletedFlag);
     2242                        playMissingFloorSound();
    17252243                        break;
    17262244                case 3:
    17272245                        _croppedMovie.setTime(k5To3Time);
    17282246                        _croppedMovie.redrawMovieWorld();
    1729                         requestSpotSound(kCaldoriaNoOtherDestinationIn, kCaldoriaNoOtherDestinationOut, kFilterNoInput, kSpotSoundCompletedFlag);
     2247                        playMissingFloorSound();
    17302248                        break;
    17312249                case 4:
    17322250                        _croppedMovie.setSegment(k5To4Start, k5To4Stop);
    Common::String Caldoria::getSoundSpotsName() {  
    19842502        return "Sounds/Caldoria/Caldoria Spots";
    19852503}
    19862504
     2505void Caldoria::doArthurJoyride() {
     2506        Video::VideoDecoder *video = 0;
     2507        BiochipItem *item;
     2508
     2509        setNextHandler(_vm);
     2510        throwAwayInterface();
     2511        loadLoopSound1("");
     2512
     2513        _vm->_cursor->hide();
     2514
     2515#ifdef USE_THEORADEC
     2516        video = new Video::TheoraDecoder();
     2517        if (!video->loadFile("Images/Caldoria/A12RD.ogg")) {
     2518                delete video;
     2519                video = 0;
     2520        }
     2521#endif
     2522
     2523        if (!video) {
     2524                video = new Video::QuickTimeDecoder();
     2525                if (!video->loadFile("Images/Caldoria/A12RD.movie"))
     2526                        error("Could not load joyride video");
     2527        }
     2528
     2529        video->setVolume(MIN<uint>(_vm->getSoundFXLevel(), 0xFF));
     2530        video->start();
     2531
     2532        while (!_vm->shouldQuit() && !video->endOfVideo()) {
     2533                if (video->needsUpdate()) {
     2534                        const Graphics::Surface *frame = video->decodeNextFrame();
     2535
     2536                        if (frame) {
     2537                                g_system->copyRectToScreen((const byte *)frame->getPixels(), frame->pitch, 0, 0, frame->w, frame->h);
     2538                                g_system->updateScreen();
     2539                        }
     2540                }
     2541
     2542                Common::Event event;
     2543                while (g_system->getEventManager()->pollEvent(event))
     2544                        ;
     2545
     2546                g_system->delayMillis(10);
     2547        }
     2548
     2549        delete video;
     2550
     2551        if (_vm->shouldQuit())
     2552                return;
     2553
     2554        reinstateMonocleInterface();
     2555        loadAmbientLoops();
     2556        updateViewFrame();
     2557        if (!_vm->playerHasItemID(kArthurBiochip)) {
     2558                item = (BiochipItem *)_vm->getAllItems().findItemByID(kArthurBiochip);
     2559                _vm->addItemToBiochips(item);
     2560                if (g_arthurChip)
     2561                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA06", kArthurCaldoriaFinishedJoyride);
     2562        }
     2563        g_interface->setCurrentBiochipID(kArthurBiochip);
     2564        GameState.setEasterEgg(false);
     2565}
     2566
    19872567} // End of namespace Pegasus
  • engines/pegasus/neighborhood/caldoria/caldoria.h

    diff --git a/engines/pegasus/neighborhood/caldoria/caldoria.h b/engines/pegasus/neighborhood/caldoria/caldoria.h
    index 3d6a155..982789f 100644
    a b static const HotSpotID kCaldoriaRoofElevatorSpotID = 5065;  
    195195static const HotSpotID kCaldoriaRoofDoorSpotID = 5066;
    196196static const HotSpotID kCaldoriaRoofCardDropSpotID = 5067;
    197197static const HotSpotID kCaldoria53EastSinclairTargetSpotID = 5068;
     198static const HotSpotID kCaldoriaCornbread = 5069;
    198199
    199200// Extra sequence IDs.
    200201
    static const DisplayElementID kCaldoriaUtilityID = kCaldoriaMessagesID + 1;  
    383384static const DisplayElementID kCaldoriaBombGridID = kCaldoriaUtilityID + 1;
    384385static const DisplayElementID kCaldoriaBombTimerID = kCaldoriaBombGridID + 1;
    385386
     387static const TimeValue kCaldoria4DInstructionsIn = 28013;
     388static const TimeValue kCaldoria4DInstructionsOut = 29730;
     389
    386390static const TimeValue kCaldoria4DBlankChoiceIn = 29730;
    387391static const TimeValue kCaldoria4DBlankChoiceOut = 33910;
    388392
    protected:  
    445449
    446450        void init();
    447451        void start();
     452        void throwAwayInterface();
    448453
    449454        void setUpRoofTop();
    450455
    protected:  
    472477        void arriveAtCaldoriaDeath();
    473478        void turnTo(const DirectionConstant);
    474479        void zoomTo(const Hotspot *);
     480        void leftButton(const Input &);
     481        void rightButton(const Input &);
    475482        void downButton(const Input &);
     483        void startExtraSequence(const ExtraID, const NotificationFlags, const InputBits);
    476484        void receiveNotification(Notification *, const NotificationFlags);
    477485        InputBits getInputFilter();
    478486        void activateHotspots();
    protected:  
    483491
    484492        Hotspot *getItemScreenSpot(Item *, DisplayElement *);
    485493        void dropItemIntoRoom(Item *, Hotspot *);
     494        void playMissingFloorSound();
    486495        void takeElevator(uint, uint);
    487496        void updateElevatorMovie();
    488497        void openElevatorMovie();
    protected:  
    495504        void zoomToSinclair();
    496505        void playEndMessage();
    497506        void checkInterruptSinclair();
     507        void doArthurJoyride();
    498508
     509        void cantMoveThatWay(CanMoveForwardReason);
    499510        CanOpenDoorReason canOpenDoor(DoorTable::Entry &);
    500511        void doorOpened();
    501512
    protected:  
    505516
    506517        const Hotspot *_zoomOutSpot;
    507518
     519        Hotspot _laundryZoomInSpot;
     520        Hotspot _laundryZoomOutSpot;
     521        Hotspot _cornbreadSpot;
     522
     523        Movie _extraMovie;
     524        NotificationCallBack _extraMovieCallBack;
     525
     526        bool _lookingAtLaundry;
     527
    508528        FuseFunction _utilityFuse;
    509529
    510530        long _sinclairLoopCount;
  • engines/pegasus/neighborhood/caldoria/caldoria4dsystem.cpp

    diff --git a/engines/pegasus/neighborhood/caldoria/caldoria4dsystem.cpp b/engines/pegasus/neighborhood/caldoria/caldoria4dsystem.cpp
    index 0494753..a4b0276 100644
    a b void Caldoria4DSystem::useIdleTime() {  
    210210void Caldoria4DSystem::initInteraction() {
    211211        setSpritesMovie();
    212212
    213         _owner->loadLoopSound1("Sounds/Caldoria/Rock.aiff");
     213        playSound("Rock");
     214        _owner->playSpotSoundSync(kCaldoria4DInstructionsIn, kCaldoria4DInstructionsOut);
    214215        loopExtra(k4DIslandLoop);
    215216}
    216217
    void Caldoria4DSystem::handleInput(const Input &input, const Hotspot *cursorSpot  
    243244
    244245void Caldoria4DSystem::activateHotspots() {
    245246        GameInteraction::activateHotspots();
    246         if (_whichMenu == k4DAudioMenu)
    247                 g_allHotspots.activateOneHotspot(kCa4DChoice4SpotID);
     247        g_allHotspots.activateOneHotspot(kCa4DChoice4SpotID);
    248248}
    249249
    250250void Caldoria4DSystem::clickInHotspot(const Input &input, const Hotspot *spot) {
    void Caldoria4DSystem::makeRockChoice() {  
    335335        if (_audioChoice != k4DRockChoice) {
    336336                _audioChoice = k4DRockChoice;
    337337                setSpritesMovie();
    338                 _owner->loadLoopSound1("Sounds/Caldoria/Rock.aiff");
     338                playSound("Rock");
    339339        }
    340340}
    341341
    void Caldoria4DSystem::makeOrchestralChoice() {  
    343343        if (_audioChoice != k4DOrchestralChoice) {
    344344                _audioChoice = k4DOrchestralChoice;
    345345                setSpritesMovie();
    346                 _owner->loadLoopSound1("Sounds/Caldoria/Orchestral.aiff");
     346                playSound("Orchestral");
    347347        }
    348348}
    349349
    void Caldoria4DSystem::makeRhythmsChoice() {  
    351351        if (_audioChoice != k4DRhythmsChoice) {
    352352                _audioChoice = k4DRhythmsChoice;
    353353                setSpritesMovie();
    354                 _owner->loadLoopSound1("Sounds/Caldoria/Rhythms.aiff");
     354                playSound("Rhythms");
    355355        }
    356356}
    357357
    void Caldoria4DSystem::makeAcousticChoice() {  
    359359        if (_audioChoice != k4DAcousticChoice) {
    360360                _audioChoice = k4DAcousticChoice;
    361361                setSpritesMovie();
    362                 _owner->loadLoopSound1("Sounds/Caldoria/Acoustic.aiff");
     362                playSound("Acoustic");
    363363        }
    364364}
    365365
    void Caldoria4DSystem::shutDown4DSystem() {  
    367367        _whichMenu = k4DShuttingDown;
    368368}
    369369
     370void Caldoria4DSystem::playSound(const Common::String &baseFileName) {
     371        Common::String fileName = "Sounds/Caldoria/" + baseFileName;
     372
     373        // Updated DVD files
     374        if (((PegasusEngine *)g_engine)->isDVD())
     375                fileName += ".44K";
     376
     377        _owner->loadLoopSound1(fileName + ".aiff");
     378}
     379
    370380} // End of namespace Pegasus
  • engines/pegasus/neighborhood/caldoria/caldoria4dsystem.h

    diff --git a/engines/pegasus/neighborhood/caldoria/caldoria4dsystem.h b/engines/pegasus/neighborhood/caldoria/caldoria4dsystem.h
    index 1c5fa44..0d57d7c 100644
    a b protected:  
    6363        void useIdleTime();
    6464        void loopExtra(const ExtraID);
    6565
     66        void playSound(const Common::String &baseFileName);
     67
    6668        Movie _4DSpritesMovie;
    6769        TimeScale _4DSpritesScale;
    6870        uint _whichMenu;
  • engines/pegasus/neighborhood/caldoria/caldoriabomb.cpp

    diff --git a/engines/pegasus/neighborhood/caldoria/caldoriabomb.cpp b/engines/pegasus/neighborhood/caldoria/caldoriabomb.cpp
    index abf34d3..adfd77d 100644
    a b  
    2525
    2626#include "pegasus/gamestate.h"
    2727#include "pegasus/pegasus.h"
     28#include "pegasus/items/biochips/arthurchip.h"
    2829#include "pegasus/neighborhood/caldoria/caldoria.h"
    2930#include "pegasus/neighborhood/caldoria/caldoriabomb.h"
    3031
    static const uint32 kOnTime3 = kOffTime2 + kFlashOnTime;  
    4849static const uint32 kOffTime3 = kOnTime3 + kFlashOffTime;
    4950static const uint32 kOnTime4 = kOffTime3 + kFlashOnTime;
    5051
    51 static const HotSpotID kVertextHotSpotBaseID = 10000;
     52// Bomb hotspots start at 20000 since the extra Caldoria hotspots start at 10000.
     53// Assigning these vice versa causes a hotspot in level 4 to never activate for some reason.
     54static const HotSpotID kVertextHotSpotBaseID = 20000;
    5255
    5356static const CoordType kVertextHotSpotWidth = 24;
    5457static const CoordType kVertextHotSpotHeight = 24;
    void CaldoriaBomb::receiveNotification(Notification *notification, const Notific  
    12351238                        _currentLevel = 0;
    12361239                        _lastVertex = -1;
    12371240                        startBombAmbient("Sounds/Caldoria/BmbLoop1.22K.AIFF");
     1241                        if (g_arthurChip) {
     1242                                if (((PegasusEngine *)g_engine)->getRandomBit())
     1243                                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA14", kArthurCaldoriaSeeRoofBomb);
     1244                                else
     1245                                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBB28", kArthurCaldoriaSeeRoofBomb);
     1246                        }
    12381247                        break;
    12391248                case kCaldoria56BombStage2:
    12401249                case kCaldoria56BombStage3:
    void CaldoriaBomb::handleInput(const Input &input, const Hotspot *hotspot) {  
    14121421                                _grid.hide();
    14131422                                _timer.hide();
    14141423                                _owner->startExtraSequence(kCaldoria56BombStage7, kExtraCompletedFlag, kFilterNoInput);
     1424                                if (g_arthurChip)
     1425                                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA02", kArthurCaldoriaDisarmedNuke);
    14151426                                break;
    14161427                        }
    14171428                }
  • engines/pegasus/neighborhood/caldoria/caldoriamirror.cpp

    diff --git a/engines/pegasus/neighborhood/caldoria/caldoriamirror.cpp b/engines/pegasus/neighborhood/caldoria/caldoriamirror.cpp
    index ff4d181..9f487cb 100644
    a b  
    2525
    2626#include "pegasus/gamestate.h"
    2727#include "pegasus/pegasus.h"
     28#include "pegasus/items/biochips/arthurchip.h"
    2829#include "pegasus/neighborhood/neighborhood.h"
    2930#include "pegasus/neighborhood/caldoria/caldoria.h"
    3031#include "pegasus/neighborhood/caldoria/caldoriamirror.h"
    void CaldoriaMirror::openInteraction() {  
    4243void CaldoriaMirror::initInteraction() {
    4344        _owner->setCurrentActivation(kActivateMirrorReady);
    4445        _owner->startExtraSequence(kCaBathroomGreeting, kExtraCompletedFlag, kFilterNoInput);
     46        // The original made the player click to start each of the following sequences,
     47        // which was unnecessary, so it is automated here.
     48        _owner->startExtraSequenceSync(kCaBathroomGreeting, kFilterNoInput);
     49        _owner->startExtraSequenceSync(kCaBathroomBodyFat, kFilterNoInput);
     50        _owner->startExtraSequence(kCaBathroomStylistIntro, kExtraCompletedFlag, kFilterNoInput);
    4551}
    4652
    4753void CaldoriaMirror::closeInteraction() {
    void CaldoriaMirror::activateHotspots() {  
    7985
    8086void CaldoriaMirror::clickInHotspot(const Input &input, const Hotspot *spot) {
    8187        switch (spot->getObjectID()) {
    82         case kCaBathroomMirrorSpotID:
    83                 switch (_owner->getLastExtra()) {
    84                 case kCaBathroomGreeting:
    85                         _owner->startExtraSequence(kCaBathroomBodyFat, kExtraCompletedFlag, kFilterNoInput);
    86                         break;
    87                 case kCaBathroomBodyFat:
    88                         _owner->startExtraSequence(kCaBathroomStylistIntro, kExtraCompletedFlag, kFilterNoInput);
    89                         break;
    90                 case kCaBathroomRetrothrash:
    91                         _owner->startExtraSequence(kCaBathroomRetrothrashReturn, kExtraCompletedFlag, kFilterNoInput);
    92                         break;
    93                 case kCaBathroomGeoWave:
    94                         _owner->startExtraSequence(kCaBathroomGeoWaveReturn, kExtraCompletedFlag, kFilterNoInput);
    95                         break;
    96                 }
    97                 break;
     88        // The original made the player click through several interstitial screens before
     89        // reaching the hairstyle menu, which was unnecessary, so it's skipped here.
    9890        case kCaHairStyle1SpotID:
    99                 _owner->startExtraSequence(kCaBathroomRetrothrash, kExtraCompletedFlag, kFilterNoInput);
     91                _owner->startExtraSequenceSync(kCaBathroomRetrothrash, kFilterNoInput);
     92                _owner->startExtraSequence(kCaBathroomRetrothrashReturn, kExtraCompletedFlag, kFilterNoInput);
    10093                break;
    10194        case kCaHairStyle2SpotID:
    10295                _owner->startExtraSequence(kCaBathroomAgencyStandard, kExtraCompletedFlag, kFilterNoInput);
    10396                break;
    10497        case kCaHairStyle3SpotID:
    105                 _owner->startExtraSequence(kCaBathroomGeoWave, kExtraCompletedFlag, kFilterNoInput);
     98                _owner->startExtraSequenceSync(kCaBathroomGeoWave, kFilterNoInput);
     99                _owner->startExtraSequence(kCaBathroomGeoWaveReturn, kExtraCompletedFlag, kFilterNoInput);
    106100                break;
    107101        default:
    108102                GameInteraction::clickInHotspot(input, spot);
    void CaldoriaMirror::receiveNotification(Notification *, const NotificationFlags  
    126120                _owner->requestDeleteCurrentInteraction();
    127121                GameState.setScoringFixedHair(true);
    128122                GameState.setCaldoriaDoneHygiene(true);
     123                if (g_arthurChip)
     124                        g_arthurChip->playArthurMovieForEvent("Images/AI/Globals/XGLOBA43", kArthurCaldoriaChoseAgencyHairStyle);
    129125                break;
    130126        }
    131 
    132         allowInput(true);
    133127}
    134128
    135129} // End of namespace Pegasus
  • new file engines/pegasus/neighborhood/mars/canyonchase.cpp

    diff --git a/engines/pegasus/neighborhood/mars/canyonchase.cpp b/engines/pegasus/neighborhood/mars/canyonchase.cpp
    new file mode 100644
    index 0000000..4435998
    - +  
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * Additional copyright for this file:
     8 * Copyright (C) 1995-2013 Presto Studios, Inc.
     9 *
     10 * This program is free software; you can redistribute it and/or
     11 * modify it under the terms of the GNU General Public License
     12 * as published by the Free Software Foundation; either version 2
     13 * of the License, or (at your option) any later version.
     14
     15 * This program is distributed in the hope that it will be useful,
     16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     18 * GNU General Public License for more details.
     19
     20 * You should have received a copy of the GNU General Public License
     21 * along with this program; if not, write to the Free Software
     22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     23 *
     24 */
     25
     26#include "pegasus/pegasus.h"
     27#include "pegasus/neighborhood/mars/canyonchase.h"
     28#include "pegasus/neighborhood/mars/mars.h"
     29
     30namespace Pegasus {
     31
     32// Segment start and end points.
     33
     34static const TimeValue kPrepStart = 0;
     35static const TimeValue kPrepEnd = 3000;
     36static const TimeValue kLaunchStart = kPrepEnd;
     37static const TimeValue kLaunchEnd = 6640;
     38static const TimeValue kBranch1Start = kLaunchEnd;
     39static const TimeValue kBranch1End = 22240;
     40static const TimeValue kBranch2Start = kBranch1End;
     41static const TimeValue kBranch2End = 28440;
     42static const TimeValue kBranch3Start = kBranch2End;
     43static const TimeValue kBranch3End = 38640;
     44static const TimeValue kBranch4Start = kBranch3End;
     45static const TimeValue kBranch4End = 43880;
     46static const TimeValue kBranch5Start = kBranch4End;
     47static const TimeValue kBranch5End = 58680;
     48static const TimeValue kExitStart = kBranch5End;
     49static const TimeValue kExitEnd = 66480;
     50static const TimeValue kExitLoopPoint = 66200;
     51static const TimeValue kExitGenoPoint = 62560;
     52
     53// Death start and end points.
     54
     55static const TimeValue kDeath1Start = 0;
     56static const TimeValue kDeath1End = 2400;
     57static const TimeValue kDeath2Start = kDeath1End;
     58static const TimeValue kDeath2End = 4720;
     59static const TimeValue kDeath3Start = kDeath2End;
     60static const TimeValue kDeath3End = 7120;
     61static const TimeValue kDeath4Start = kDeath3End;
     62static const TimeValue kDeath4End = 9280;
     63static const TimeValue kDeath5Start = kDeath4End;
     64static const TimeValue kDeath5End = 12000;
     65
     66// Chase state.
     67
     68enum {
     69        kCanyonLaunch,
     70        kCanyonBranch1Left,
     71        kCanyonBranch1Right,
     72        kCanyonBranch2Left,
     73        kCanyonBranch2Right,
     74        kCanyonBranch3Left,
     75        kCanyonBranch4Left,
     76        kCanyonBranch4Right,
     77        kCanyonBranch5Left,
     78        kCanyonBranch5Right,
     79        kCanyonExit,
     80        kCanyonLoop
     81};
     82
     83void MusicTimerEvent::fire() {
     84        canyonChase->musicTimerExpired(*this);
     85}
     86
     87CanyonChase::CanyonChase(Neighborhood *handler) : ChaseInteraction(kMarsCanyonChaseInteractionID, handler,
     88                                                        kMarsCanyonChaseNotificationID, (PegasusEngine *)g_engine), _canyonMovie1(kNoDisplayElement),
     89                                                        _canyonMovie2(kNoDisplayElement), _deathMovie(kNoDisplayElement), _genoMovie(kNoDisplayElement) {
     90        _currentMovie = NULL;
     91        _currentCallBack = NULL;
     92}
     93
     94void CanyonChase::startCanyonMusicLoop(void) {
     95        FaderMoveSpec spec;
     96
     97        _musicLoop.loopSound();
     98        spec.makeTwoKnotFaderSpec(10, 0, 0, 1, 255);
     99        _musicFader.startFader(spec);
     100}
     101
     102void CanyonChase::stopCanyonMusicLoop(const long ticks) {
     103        FaderMoveSpec spec;
     104
     105        spec.makeTwoKnotFaderSpec(10, 0, 255, ticks, 0);
     106        _musicFader.startFader(spec);
     107}
     108
     109void CanyonChase::openInteraction() {   
     110        _canyonMovie1.initFromMovieFile("Images/Mars/Canyon_hq1.mov");
     111        _canyonMovie1.setVolume(((PegasusEngine *)g_engine)->getSoundFXLevel());
     112        _canyonMovie1.moveElementTo(kShuttleWindowLeft, kShuttleWindowTop);
     113        _canyonMovie1.setDisplayOrder(kShuttleMonitorOrder);
     114
     115        _canyon1CallBack.setNotification(&_chaseNotification);
     116        _canyon1CallBack.initCallBack(&_canyonMovie1, kCallBackAtExtremes);
     117        _canyon1CallBack.setCallBackFlag(kChaseEnteredBranchZone);
     118        _canyon1CallBack.scheduleCallBack(kTriggerAtStop, 0, 0);
     119
     120        _canyonMovie2.initFromMovieFile("Images/Mars/Canyon_hq2.mov");
     121        _canyonMovie2.setVolume(((PegasusEngine *)g_engine)->getSoundFXLevel());
     122        _canyonMovie2.moveElementTo(kShuttleWindowLeft, kShuttleWindowTop);
     123        _canyonMovie2.setDisplayOrder(kShuttleMonitorOrder);
     124
     125        _canyon2CallBack.setNotification(&_chaseNotification);
     126        _canyon2CallBack.initCallBack(&_canyonMovie2, kCallBackAtExtremes);
     127        _canyon2CallBack.setCallBackFlag(kChaseEnteredBranchZone);
     128        _canyon2CallBack.scheduleCallBack(kTriggerAtStop, 0, 0);
     129
     130        _deathMovie.initFromMovieFile("Images/Mars/Canyon_hqD.mov");
     131        _deathMovie.setVolume(((PegasusEngine *)g_engine)->getSoundFXLevel());
     132        _deathMovie.moveElementTo(kShuttleWindowLeft, kShuttleWindowTop);
     133        _deathMovie.setDisplayOrder(kShuttleMonitorOrder);
     134
     135        _deathCallBack.setNotification(&_chaseNotification);
     136        _deathCallBack.initCallBack(&_deathMovie, kCallBackAtExtremes);
     137        _deathCallBack.setCallBackFlag(kChaseFinished);
     138        _deathCallBack.scheduleCallBack(kTriggerAtStop, 0, 0);
     139
     140        _musicLoop.attachFader(&_musicFader);
     141        _musicLoop.initFromAIFFFile("Sounds/Mars/Canyon Loop.44K.16.AIFF");
     142        _musicFader.setMasterVolume(((PegasusEngine *)g_engine)->getSoundFXLevel());
     143
     144        ChaseInteraction::openInteraction();
     145
     146        _steerPict.setDisplayOrder(kShuttleMonitorOrder + 1);
     147        _steerPict.moveElementTo(kShuttleSteerLeft, kShuttleSteerTop);
     148}
     149
     150void CanyonChase::initInteraction() {
     151        _steerPict.startDisplaying();
     152
     153        // Launch branch is identical in both movies
     154        _canyonState = kCanyonLaunch;
     155        _canyonMovie1.setSegment(kLaunchStart, kLaunchEnd - kDecisionTime);
     156        _canyonMovie1.setTime(kLaunchStart);
     157        switchTo(_canyonMovie1, _canyon1CallBack);
     158        startCanyonMusicLoop();
     159        ChaseInteraction::initInteraction();
     160}
     161
     162void CanyonChase::closeInteraction() {
     163        _canyonMovie1.stop();
     164        _canyonMovie1.stopDisplaying();
     165        _canyonMovie1.releaseMovie();
     166        _canyon1CallBack.releaseCallBack();
     167
     168        _canyonMovie2.stop();
     169        _canyonMovie2.stopDisplaying();
     170        _canyonMovie2.releaseMovie();
     171        _canyon2CallBack.releaseCallBack();
     172
     173        _deathMovie.stop();
     174        _deathMovie.stopDisplaying();
     175        _deathMovie.releaseMovie();
     176        _deathCallBack.releaseCallBack();
     177
     178        _genoMovie.stop();
     179        _genoMovie.stopDisplaying();
     180        _genoMovie.releaseMovie();
     181        _genoCallBack.releaseCallBack();
     182
     183        ChaseInteraction::closeInteraction();
     184}
     185
     186void CanyonChase::receiveNotification(Notification *notification, const NotificationFlags flags) {
     187        Input input;
     188
     189        if (notification == &_chaseNotification && flags == kChaseFinished) {
     190                if (_canyonState == kCanyonLoop) {
     191                        // Swallow the notification if we loop back to the beginning
     192                        InputDevice.getInput(input, kFilterAllInput);
     193                        if (JMPPPInput::isEasterEggModifierInput(input)) {
     194                                stopCanyonMusicLoop(15);
     195                                doGenoChase();
     196                        } else {
     197                                _canyonMovie2.setSegment(kExitGenoPoint, kExitLoopPoint - kDecisionTime);
     198                                _canyonMovie2.setTime(kExitGenoPoint);
     199                                switchTo(_canyonMovie2, _canyon2CallBack);
     200                                _canyon2CallBack.setCallBackFlag(kChaseEnteredBranchZone);
     201                                _canyon2CallBack.scheduleCallBack(kTriggerAtStop, 0, 0);
     202                                _canyonState = kCanyonLaunch;
     203                        }
     204                        return;
     205                } else if (_canyonState != kCanyonExit) {
     206                        // We died
     207                        ((Mars *)_owner)->die(kDeathRanIntoCanyonWall);
     208                }
     209        }
     210        ChaseInteraction::receiveNotification(notification, flags);
     211}
     212
     213void CanyonChase::setUpBranch() {
     214        TimeValue branchStart, branchEnd;
     215
     216        branchStart = 0;
     217        branchEnd = 0;
     218        switch (_canyonState) {
     219        case kCanyonLaunch:
     220        case kCanyonExit:
     221                branchStart = kLaunchEnd - kDecisionTime;
     222                branchEnd = kLaunchEnd;
     223                break;
     224        case kCanyonBranch1Left:
     225        case kCanyonBranch1Right:
     226                branchStart = kBranch1End - kDecisionTime;
     227                branchEnd = kBranch1End;
     228                break;
     229        case kCanyonBranch2Left:
     230        case kCanyonBranch2Right:
     231                branchStart = kBranch2End - kDecisionTime;
     232                branchEnd = kBranch2End;
     233                break;
     234        case kCanyonBranch3Left:
     235                branchStart = kBranch3End - kDecisionTime;
     236                branchEnd = kBranch3End;
     237                break;
     238        case kCanyonBranch4Left:
     239        case kCanyonBranch4Right:
     240                branchStart = kBranch4End - kDecisionTime;
     241                branchEnd = kBranch4End;
     242                break;
     243        case kCanyonBranch5Left:
     244        case kCanyonBranch5Right:
     245                branchStart = kBranch5End - kDecisionTime;
     246                branchEnd = kBranch5End;
     247                break;
     248        default:
     249                break;
     250        }
     251
     252        _currentMovie->setSegment(branchStart, branchEnd);
     253        // Need to call SetTime here in case we loop
     254        _currentMovie->setTime(branchStart);
     255
     256        _currentCallBack->setCallBackFlag(kChaseExitedBranchZone);
     257        _currentCallBack->scheduleCallBack(kTriggerAtStop, 0, 0);
     258}
     259
     260void CanyonChase::branchLeft() {
     261        TimeValue branchStart, branchEnd;
     262        Movie *movie;
     263        NotificationCallBack *callBack;
     264
     265        branchStart = 0;
     266        branchEnd = 0;
     267        switch (_canyonState) {
     268        case kCanyonLaunch:
     269                branchStart = kBranch1Start;
     270                branchEnd = kBranch1End - kDecisionTime;
     271                _canyonState = kCanyonBranch1Left;
     272                break;
     273        case kCanyonBranch1Left:
     274        case kCanyonBranch1Right:
     275                branchStart = kBranch2Start;
     276                branchEnd = kBranch2End - kDecisionTime;
     277                _canyonState = kCanyonBranch2Left;
     278                break;
     279        case kCanyonBranch2Left:
     280        case kCanyonBranch2Right:
     281                branchStart = kBranch3Start;
     282                branchEnd = kBranch3End - kDecisionTime;
     283                _canyonState = kCanyonBranch3Left;
     284                break;
     285        case kCanyonBranch3Left:
     286                branchStart = kBranch4Start;
     287                branchEnd = kBranch4End - kDecisionTime;
     288                _canyonState = kCanyonBranch4Left;
     289                break;
     290        case kCanyonBranch4Left:
     291        case kCanyonBranch4Right:
     292                branchStart = kBranch5Start;
     293                branchEnd = kBranch5End - kDecisionTime;
     294                _canyonState = kCanyonBranch5Left;
     295                break;
     296        case kCanyonBranch5Left:
     297        case kCanyonBranch5Right:
     298                dontBranch();
     299                return;
     300        default:
     301                break;
     302        }
     303
     304        // Left branches are in hq2 (except exit)
     305        // Segment 5 branches are switched
     306        if (_canyonState == kCanyonBranch5Left || _canyonState == kCanyonBranch5Right) {
     307                movie = &_canyonMovie1;
     308                callBack = &_canyon1CallBack;
     309        } else {
     310                movie = &_canyonMovie2;
     311                callBack = &_canyon2CallBack;
     312        }
     313
     314        movie->setSegment(branchStart, branchEnd);
     315        movie->setTime(branchStart);
     316
     317        switchTo(*movie, *callBack);
     318
     319        callBack->setCallBackFlag(kChaseEnteredBranchZone);
     320        callBack->scheduleCallBack(kTriggerAtStop, 0, 0);
     321}
     322
     323void CanyonChase::branchRight() {
     324        TimeValue branchStart, branchEnd;
     325        NotificationFlags flag;
     326        Movie *movie;
     327        NotificationCallBack *callBack;
     328
     329        branchStart = 0;
     330        branchEnd = 0;
     331        flag = 0;
     332        switch (_canyonState) {
     333        case kCanyonLaunch:
     334                branchStart = kBranch1Start;
     335                branchEnd = kBranch1End - kDecisionTime;
     336                _canyonState = kCanyonBranch1Right;
     337                flag = kChaseEnteredBranchZone;
     338                break;
     339        case kCanyonBranch1Left:
     340        case kCanyonBranch1Right:
     341                branchStart = kBranch2Start;
     342                branchEnd = kBranch2End - kDecisionTime;
     343                _canyonState = kCanyonBranch2Right;
     344                flag = kChaseEnteredBranchZone;
     345                break;
     346        case kCanyonBranch2Left:
     347        case kCanyonBranch2Right:
     348                dontBranch();
     349                return;
     350        case kCanyonBranch3Left:
     351                branchStart = kBranch4Start;
     352                branchEnd = kBranch4End - kDecisionTime;
     353                _canyonState = kCanyonBranch4Right;
     354                flag = kChaseEnteredBranchZone;
     355                break;
     356        case kCanyonBranch4Left:
     357        case kCanyonBranch4Right:
     358                branchStart = kBranch5Start;
     359                branchEnd = kBranch5End - kDecisionTime;
     360                _canyonState = kCanyonBranch5Right;
     361                flag = kChaseEnteredBranchZone;
     362                break;
     363        case kCanyonBranch5Left:
     364        case kCanyonBranch5Right:
     365                // Exit loop branch is in hq2
     366                branchStart = kExitStart;
     367                branchEnd = kExitEnd;
     368                _canyonState = kCanyonExit;
     369                flag = kChaseFinished;
     370                startMusicTimer(kCanyonChaseStart + kCanyonChaseExitedTime - kExitStart, kMovieTicksPerSecond,
     371                                                kCanyonExited);
     372                break;
     373        default:
     374                break;
     375        }
     376
     377        // Right branches are in hq1 (except exit)
     378        // Segment 5 branches are switched
     379        if (_canyonState == kCanyonBranch5Left || _canyonState == kCanyonBranch5Right) {
     380                movie = &_canyonMovie2;
     381                callBack = &_canyon2CallBack;
     382        } else {
     383                movie = &_canyonMovie1;
     384                callBack = &_canyon1CallBack;
     385        }
     386
     387        movie->setSegment(branchStart, branchEnd);
     388        movie->setTime(branchStart);
     389
     390        switchTo(*movie, *callBack);
     391
     392        callBack->setCallBackFlag(flag);
     393        callBack->scheduleCallBack(kTriggerAtStop, 0, 0);
     394}
     395
     396void CanyonChase::dontBranch() {
     397        TimeValue branchStart, branchEnd;
     398
     399        branchStart = 0;
     400        branchEnd = 0;
     401        switch (_canyonState) {
     402        case kCanyonLaunch:
     403                branchStart = kDeath1Start;
     404                branchEnd = kDeath1End;
     405                break;
     406        case kCanyonBranch1Left:
     407        case kCanyonBranch1Right:
     408                branchStart = kDeath2Start;
     409                branchEnd = kDeath2End;
     410                break;
     411        case kCanyonBranch2Left:
     412        case kCanyonBranch2Right:
     413                branchStart = kDeath3Start;
     414                branchEnd = kDeath3End;
     415                break;
     416        case kCanyonBranch3Left:
     417                branchStart = kDeath4Start;
     418                branchEnd = kDeath4End;
     419                break;
     420        case kCanyonBranch4Left:
     421        case kCanyonBranch4Right:
     422                branchStart = kDeath5Start;
     423                branchEnd = kDeath5End;
     424                break;
     425        case kCanyonBranch5Left:
     426        case kCanyonBranch5Right:
     427                _canyonMovie2.setSegment(kExitStart, kExitGenoPoint);
     428                _canyonMovie2.setTime(kExitStart);
     429                switchTo(_canyonMovie2, _canyon2CallBack);
     430                _canyon2CallBack.setCallBackFlag(kChaseFinished);
     431                _canyon2CallBack.scheduleCallBack(kTriggerAtStop, 0, 0);
     432                _canyonState = kCanyonLoop;
     433                return;
     434        default:
     435                break;
     436        }
     437
     438        _deathMovie.setSegment(branchStart, branchEnd);
     439        _deathMovie.setTime(branchStart);
     440
     441        switchTo(_deathMovie, _deathCallBack);
     442
     443        startMusicTimer(10, 10, kCanyonRanIntoWall);
     444}
     445
     446void CanyonChase::showControlsHint() {
     447        ((Mars *)_owner)->_lowerLeftShuttleMovie.setTime(kShuttleLowerLeftKeypadHintTime);
     448        ((Mars *)_owner)->_lowerLeftShuttleMovie.redrawMovieWorld();
     449        ChaseInteraction::showControlsHint();
     450}
     451
     452void CanyonChase::hideControlsHint() {
     453        ((Mars *)_owner)->_lowerLeftShuttleMovie.setTime(kShuttleLowerLeftCollisionTime);
     454        ((Mars *)_owner)->_lowerLeftShuttleMovie.redrawMovieWorld();
     455        ChaseInteraction::hideControlsHint();
     456}
     457
     458void CanyonChase::switchTo(Movie &movie, NotificationCallBack &callBack) {
     459        if (_currentMovie != &movie) {
     460                if (_currentMovie != NULL) {
     461                        _currentMovie->stop();
     462                        _currentMovie->hide();
     463                        _currentMovie->stopDisplaying();
     464                }
     465
     466                _currentMovie = &movie;
     467
     468                _currentMovie->startDisplaying();
     469                _currentMovie->show();
     470                _currentMovie->start();
     471        }
     472
     473        if (_currentCallBack != &callBack) {
     474                _currentCallBack = &callBack;
     475        }
     476}
     477
     478void CanyonChase::startMusicTimer(TimeValue time, TimeScale scale, MusicTimerCode code) {
     479        _musicFuse.primeFuse(time, scale);
     480        _musicEvent.canyonChase = this;
     481        _musicEvent.theEvent = code;
     482        _musicFuse.setFunctor(new Common::Functor0Mem<void, MusicTimerEvent>(&_musicEvent, &MusicTimerEvent::fire));
     483        _musicFuse.lightFuse();
     484}
     485
     486void CanyonChase::musicTimerExpired(MusicTimerEvent &event) {
     487        FaderMoveSpec spec;
     488
     489        switch (event.theEvent) {
     490        case kCanyonRanIntoWall:
     491                stopCanyonMusicLoop(5);
     492                break;
     493        case kCanyonExited:
     494                spec.makeTwoKnotFaderSpec(20, 0, 255, 5, 160);
     495                _musicFader.startFader(spec);
     496                startMusicTimer(kCanyonChaseFadedTime, kMovieTicksPerSecond, kCanyonFaded);
     497                break;
     498        case kCanyonFaded:
     499                spec.makeTwoKnotFaderSpec(10, 0, 160, 30, 0);
     500                _musicFader.startFader(spec);
     501                ((Mars *)_owner)->startMarsTimer(kLaunchTubeDVDReachedTime, kMovieTicksPerSecond,
     502                                                                                        kMarsLaunchTubeReached);
     503                break;
     504        default:
     505                break;
     506        }
     507}
     508
     509void CanyonChase::doGenoChase() {
     510        _genoMovie.initFromMovieFile("Images/Mars/Canyon_hqG.mov");
     511        _genoMovie.setVolume(((PegasusEngine *)g_engine)->getSoundFXLevel());
     512        _genoMovie.moveElementTo(kShuttleWindowLeft, kShuttleWindowTop);
     513        _genoMovie.setDisplayOrder(kShuttleMonitorOrder);
     514        _genoMovie.startDisplaying();
     515        _genoMovie.show();
     516        _genoMovie.start();
     517
     518        _genoCallBack.setNotification(&_chaseNotification);
     519        _genoCallBack.initCallBack(&_genoMovie, kCallBackAtExtremes);
     520        _genoCallBack.setCallBackFlag(kChaseFinished);
     521        _genoCallBack.scheduleCallBack(kTriggerAtStop, 0, 0);
     522
     523        _canyonState = kCanyonExit;
     524
     525        ((Mars *)_owner)->startMarsTimer(_genoMovie.getDuration() - 5 * kMovieTicksPerSecond,
     526                                                                                kMovieTicksPerSecond, kMarsLaunchTubeReached);
     527}
     528
     529} // End of namespace Pegasus
  • new file engines/pegasus/neighborhood/mars/canyonchase.h

    diff --git a/engines/pegasus/neighborhood/mars/canyonchase.h b/engines/pegasus/neighborhood/mars/canyonchase.h
    new file mode 100644
    index 0000000..5b40c64
    - +  
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * Additional copyright for this file:
     8 * Copyright (C) 1995-2013 Presto Studios, Inc.
     9 *
     10 * This program is free software; you can redistribute it and/or
     11 * modify it under the terms of the GNU General Public License
     12 * as published by the Free Software Foundation; either version 2
     13 * of the License, or (at your option) any later version.
     14
     15 * This program is distributed in the hope that it will be useful,
     16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     18 * GNU General Public License for more details.
     19
     20 * You should have received a copy of the GNU General Public License
     21 * along with this program; if not, write to the Free Software
     22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     23 *
     24 */
     25
     26#ifndef PEGASUS_NEIGHBORHOOD_MARS_CANYONCHASE_H
     27#define PEGASUS_NEIGHBORHOOD_MARS_CANYONCHASE_H
     28
     29#include "pegasus/chase.h"
     30#include "pegasus/fader.h"
     31#include "pegasus/movie.h"
     32#include "pegasus/sound.h"
     33
     34namespace Pegasus {
     35
     36class CanyonChase;
     37class Mars;
     38
     39enum MusicTimerCode {
     40        kCanyonRanIntoWall,
     41        kCanyonExited,
     42        kCanyonFaded
     43};
     44
     45struct MusicTimerEvent {
     46        CanyonChase *canyonChase;
     47        MusicTimerCode theEvent;
     48
     49        void fire();
     50};
     51
     52class CanyonChase : public ChaseInteraction {
     53friend class Mars;
     54friend struct MusicTimerEvent;
     55public:
     56
     57        CanyonChase(Neighborhood *);
     58        virtual ~CanyonChase() {}
     59
     60protected:
     61
     62        void startCanyonMusicLoop();
     63        void stopCanyonMusicLoop(const long);
     64
     65        void openInteraction();
     66        void initInteraction();
     67        void closeInteraction();
     68
     69        void receiveNotification(Notification *, const NotificationFlags);
     70
     71        void setUpBranch();
     72        void branchLeft();
     73        void branchRight();
     74        void dontBranch();
     75
     76        void showControlsHint();
     77        void hideControlsHint();
     78
     79        void switchTo(Movie &, NotificationCallBack &);
     80        void startMusicTimer(TimeValue, TimeScale, MusicTimerCode);
     81        void musicTimerExpired(MusicTimerEvent &);
     82        void doGenoChase();
     83
     84        Movie _canyonMovie1;
     85        Movie _canyonMovie2;
     86        Movie _deathMovie;
     87        Movie _genoMovie;
     88        NotificationCallBack _canyon1CallBack; 
     89        NotificationCallBack _canyon2CallBack;
     90        NotificationCallBack _deathCallBack;
     91        NotificationCallBack _genoCallBack;
     92        Sound _musicLoop;
     93        SoundFader _musicFader;
     94        FuseFunction _musicFuse;
     95
     96        MusicTimerEvent _musicEvent;
     97
     98        Movie *_currentMovie;
     99        NotificationCallBack *_currentCallBack;
     100        short _canyonState;
     101};
     102
     103} // End of namespace Pegasus
     104
     105#endif
  • engines/pegasus/neighborhood/mars/constants.h

    diff --git a/engines/pegasus/neighborhood/mars/constants.h b/engines/pegasus/neighborhood/mars/constants.h
    index 82a7f03..f6c1724 100644
    a b namespace Pegasus {  
    3232
    3333// Element Coordinates
    3434
     35static const CoordType kPodScreenLeft = kNavAreaLeft + 88;
     36static const CoordType kPodScreenTop = kNavAreaTop + 204;
     37
     38static const CoordType kPodSteerLeft = kNavAreaLeft + 212;
     39static const CoordType kPodSteerTop = kNavAreaTop + 232;
     40
    3541static const CoordType kUndoHiliteLeft = kNavAreaLeft + 140;
    3642static const CoordType kUndoHiliteTop = kNavAreaTop + 36;
    3743
    static const CoordType kShuttleEnergyTop = 60;  
    99105static const CoordType kShuttleEnergyWidth = 252;
    100106static const CoordType kShuttleEnergyHeight = 22;
    101107
     108static const CoordType kShuttleSteerLeft = kShuttleWindowLeft + 136;
     109static const CoordType kShuttleSteerTop = kShuttleWindowTop + 196;
     110
    102111static const CoordType kPlanetStartLeft = kShuttleWindowLeft;
    103112static const CoordType kPlanetStartTop = kShuttleWindowTop + kShuttleWindowHeight;
    104113
    static const TimeValue kShuttleSwingStart = 0;  
    130139static const TimeValue kShuttleSwingStop = 5 * 600;
    131140
    132141static const TimeValue kCanyonChaseStart = kShuttleSwingStop;
    133 static const TimeValue kCanyonChaseStop = 60 * 600 + 43 * 600 + 14 * 40;
    134 
    135 static const TimeValue kLaunchTubeReachedTime = 60 * 600 + 38 * 600 - kCanyonChaseStart;
    136 static const TimeValue kCanyonChaseFinishedTime = kCanyonChaseStop - kCanyonChaseStart -
    137                                                                                         kLaunchTubeReachedTime;
     142static const TimeValue kCanyonChaseCDStop = 60 * 600 + 43 * 600 + 14 * 40;
     143static const TimeValue kCanyonChaseDVDStop = 60 * 600 + 50 * 600 + 12 * 40;
     144
     145static const TimeValue kCanyonChaseExitedTime = 60 * 600 + 40 * 600 + 13 * 40 - kCanyonChaseStart;
     146static const TimeValue kCanyonChaseFadedTime = 60 * 600 + 43 * 600 + 6 * 40 - kCanyonChaseStart -
     147                                                                                        kCanyonChaseExitedTime;
     148
     149static const TimeValue kLaunchTubeCDReachedTime = 60 * 600 + 38 * 600 - kCanyonChaseStart;
     150static const TimeValue kLaunchTubeDVDReachedTime = 60 * 600 + 45 * 600 - kCanyonChaseStart -
     151                                                                                        kCanyonChaseExitedTime - kCanyonChaseFadedTime;
     152static const TimeValue kCanyonChaseCDFinishedTime = kCanyonChaseCDStop - kCanyonChaseStart -
     153                                                                                        kLaunchTubeCDReachedTime;
     154static const TimeValue kCanyonChaseDVDFinishedTime = kCanyonChaseDVDStop - kCanyonChaseStart -
     155                                                                                        kCanyonChaseExitedTime - kCanyonChaseFadedTime -
     156                                                                                        kLaunchTubeDVDReachedTime;
    138157
    139158// Left shuttle.
    140159
    static const TimeValue kShuttleLowerLeftTubeTime = 40;  
    183202
    184203static const TimeValue kShuttleLowerLeftAutopilotTime = 80;
    185204
     205static const TimeValue kShuttleLowerLeftKeypadHintTime = 120;
     206
    186207// Lower Right shuttle.
    187208
    188209static const TimeValue kShuttleLowerRightOffTime = 0;
    static const ExtraID kMarsMaze184WestLoop = 109;  
    929950static const ExtraID kMarsMaze184WestDeath = 110;
    930951static const ExtraID kMars200DeathInBucket = 111;
    931952
     953// Mars interactions.
     954
     955static const InteractionID kMarsTunnelPodInteractionID = 0;
     956static const InteractionID kMarsCanyonChaseInteractionID = 1;
     957
    932958static const ResIDType kReactorUndoHilitePICTID = 900;
    933959
    934960static const int16 kMars52Compass = 90;
  • engines/pegasus/neighborhood/mars/mars.cpp

    diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp
    index 435bcd4..55e0ddc 100644
    a b  
    2525
    2626#include "common/events.h"
    2727#include "video/qt_decoder.h"
     28#include "video/theora_decoder.h"
    2829
    2930#include "pegasus/cursor.h"
    3031#include "pegasus/energymonitor.h"
    3132#include "pegasus/gamestate.h"
    3233#include "pegasus/pegasus.h"
    3334#include "pegasus/ai/ai_area.h"
     35#include "pegasus/items/biochips/arthurchip.h"
    3436#include "pegasus/items/biochips/opticalchip.h"
    3537#include "pegasus/items/biochips/shieldchip.h"
    3638#include "pegasus/items/inventory/airmask.h"
     39#include "pegasus/neighborhood/mars/canyonchase.h"
    3740#include "pegasus/neighborhood/mars/mars.h"
     41#include "pegasus/neighborhood/mars/tunnelpod.h"
    3842
    3943namespace Pegasus {
    4044
    static const int16 kMarsShieldPanelOffsetAngle = 22;  
    4448
    4549static const CanMoveForwardReason kCantMoveRobotBlocking = kCantMoveLastReason + 1;
    4650
     51static const ExtraID kMarsRobotBobSlow = 1000;
     52static const ExtraID kMarsRobotGenoSlow = 1001;
     53
    4754static const NotificationFlags kTimeForCanyonChaseFlag = kLastNeighborhoodNotificationFlag << 1;
    4855static const NotificationFlags kExplosionFinishedFlag = kTimeForCanyonChaseFlag << 1;
    4956static const NotificationFlags kTimeToTransportFlag = kExplosionFinishedFlag << 1;
    static const NotificationFlags kMarsNotificationFlags = kTimeForCanyonChaseFlag  
    5259                                                                                                        kExplosionFinishedFlag |
    5360                                                                                                        kTimeToTransportFlag;
    5461
     62static const TimeValue