numptyphysics-0.2+svn157/0000755000175000017500000000000012264274616014371 5ustar warp10warp10numptyphysics-0.2+svn157/Os.cpp0000644000175000017500000001074312264274577015471 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "Os.h" #include #include #include OsObj OS; static const BasicEventMap::KeyPair game_keymap[] = { { SDLK_SPACE, Event::PAUSE }, { SDLK_KP_ENTER, Event::PAUSE }, { SDLK_RETURN, Event::PAUSE }, { SDLK_ESCAPE, Event::UNDO }, { SDLK_BACKSPACE,Event::UNDO }, { SDLK_u, Event::UNDO }, { SDLK_DOWN, Event::UNDO }, { SDLK_F7, Event::UNDO }, { SDLK_s, Event::SAVE }, { SDLK_F4, Event::OPTION}, { SDLK_m, Event::MENU}, { SDLK_e, Event::EDIT }, { SDLK_F6, Event::EDIT }, { SDLK_r, Event::RESET }, { SDLK_UP, Event::RESET }, { SDLK_n, Event::NEXT }, { SDLK_RIGHT, Event::NEXT }, { SDLK_p, Event::PREVIOUS }, { SDLK_LEFT, Event::PREVIOUS }, { SDLK_v, Event::REPLAY}, {} }; static const BasicEventMap::ButtonPair game_mousemap[] = { { SDL_BUTTON_LEFT, Event::DRAWBEGIN, Event::DRAWMORE, Event::DRAWEND }, {} }; static const BasicEventMap::ButtonPair game_move_mousemap[] = { { SDL_BUTTON_LEFT, Event::MOVEBEGIN, Event::MOVEMORE, Event::MOVEEND }, {} }; static const BasicEventMap::ButtonPair game_erase_mousemap[] = { { SDL_BUTTON_LEFT, Event::NOP, Event::NOP, Event::DELETE }, {} }; static const BasicEventMap::KeyPair app_keymap[] = { { SDLK_q, Event::QUIT }, {} }; static const BasicEventMap::ButtonPair edit_mousemap[] = { { SDL_BUTTON_LEFT, Event::DRAWBEGIN, Event::DRAWMORE, Event::DRAWEND }, { SDL_BUTTON_RIGHT, Event::MOVEBEGIN, Event::MOVEMORE, Event::MOVEEND }, { SDL_BUTTON_MIDDLE, Event::DELETE }, {} }; static const BasicEventMap::ButtonPair ui_button_mousemap[] = { { SDL_BUTTON_LEFT, Event::FOCUS, Event::FOCUS, Event::SELECT }, {} }; static const BasicEventMap::ButtonPair ui_draggable_mousemap[] = { { SDL_BUTTON_LEFT, Event::MOVEBEGIN, Event::MOVEMORE, Event::MOVEEND }, {} }; static const BasicEventMap::KeyPair ui_draggable_keymap[] = { { SDLK_UP, Event::UP }, { SDLK_DOWN, Event::DOWN }, { SDLK_RIGHT, Event::RIGHT }, { SDLK_LEFT, Event::LEFT }, {} }; static const BasicEventMap::KeyPair ui_dialog_keymap[] = { { SDLK_ESCAPE, Event::CLOSE }, {} }; class AppMap : public BasicEventMap { public: AppMap() : BasicEventMap( app_keymap, NULL ) {} Event process(const SDL_Event& ev) { if (ev.type==SDL_QUIT) { return Event(Event::QUIT); } return BasicEventMap::process(ev); } }; EventMap* Os::getEventMap( EventMapType type ) { static BasicEventMap gameMap(game_keymap,game_mousemap); static BasicEventMap gameMoveMap(game_keymap,game_move_mousemap); static BasicEventMap gameEraseMap(game_keymap,game_erase_mousemap); static BasicEventMap editMap(NULL,edit_mousemap); static BasicEventMap uiButtonMap(NULL,ui_button_mousemap); static BasicEventMap uiDraggableMap(ui_draggable_keymap,ui_draggable_mousemap); static BasicEventMap uiDialogMap(ui_dialog_keymap,NULL); static AppMap appMap; switch (type) { case GAME_MAP: return &gameMap; case GAME_MOVE_MAP: return &gameMoveMap; case GAME_ERASE_MAP: return &gameEraseMap; case APP_MAP: return &appMap; case EDIT_MAP: return &editMap; case UI_BUTTON_MAP: return &uiButtonMap; case UI_DRAGGABLE_MAP: return &uiDraggableMap; case UI_DIALOG_MAP: return &uiDialogMap; } return NULL; } bool Os::ensurePath(const std::string& path) { struct stat st; if ( stat(path.c_str(),&st)!=0 ) { size_t sep = path.rfind(Os::pathSep); if ( sep != std::string::npos && sep > 0 ) { ensurePath(path.substr(0,sep)); } if ( mkdir( path.c_str(), 0755)!=0 ) { fprintf(stderr,"failed to create dir %s\n", path.c_str()); return false; } else { fprintf(stderr,"created dir %s\n", path.c_str()); return true; } } return true; } bool Os::exists(const std::string& file) { struct stat st; return stat(file.c_str(),&st)==0; } numptyphysics-0.2+svn157/OsHildon.cpp0000644000175000017500000002111612264274577016623 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifdef USE_HILDON #include #include #include #include #include #include #include #include #include #include "Os.h" #include "Http.h" #include "Ui.h" #include "Accelerometer.h" #define Font __FONT_REDEF #include "Config.h" #define NP_NAME "NumptyPhysics" #define NP_SERVICE "org.maemo.garage.numptyphysics" #define NP_OBJECT "org/maemo/garage/numptyphysics" /* / ?? */ #define NP_INTERFACE "org.maemo.garage.numptyphysics" #define NP_VERSION "1.0" #define MAX_FILES 32 static gint mime_handler(const gchar *interface, const gchar *method, GArray *arguments, gpointer data, osso_rpc_t *retval); class HildonModEventMap : public EventMap { EventMap* m_map; int m_mod; public: HildonModEventMap(EventMap *m) : m_map(m), m_mod(0) {} virtual Event process(const SDL_Event& ev1) { SDL_Event ev = ev1; // \todo we should do a real event map instead of just modding // button clicks... switch( ev.type ) { case SDL_KEYDOWN: if ( ev.key.keysym.sym == SDLK_F8 ) { m_mod = 1; //zoom- == middle (delete) return Event(); } else if ( ev.key.keysym.sym == SDLK_F7 ) { m_mod = 2; //zoom+ == right (move) return Event(); } break; case SDL_KEYUP: if ( ev.key.keysym.sym == SDLK_F7 || ev.key.keysym.sym == SDLK_F8 ) { m_mod = 0; return Event(); } break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: if ( ev.button.button == SDL_BUTTON_LEFT ) { if ( m_mod == 1 ) { ev.button.button = SDL_BUTTON_MIDDLE; } else if ( m_mod == 2 ) { ev.button.button = SDL_BUTTON_RIGHT; } } break; default: break; } return m_map->process(ev); } }; class OsHildon : public Os, private Accelerometer { GMainContext *m_gcontext; osso_context_t *m_osso; bool m_useProximity; bool m_proximityClosed; public: int m_numFiles; char* m_files[MAX_FILES]; OsHildon() : m_useProximity(false), m_proximityClosed(false) { g_type_init(); m_gcontext = g_main_context_new(); m_osso = osso_initialize(NP_NAME, NP_VERSION, FALSE, m_gcontext); if (m_osso == NULL) { fprintf(stderr, "Failed to initialize libosso\n"); return; } /* Set dbus handler to get mime open callbacks */ if ( osso_rpc_set_cb_f(m_osso, NP_SERVICE, NP_OBJECT, NP_INTERFACE, mime_handler, NULL) != OSSO_OK) { fprintf(stderr, "Failed to set mime callback\n"); } #if MAEMO_VERSION >= 5 m_useProximity = true; #endif } ~OsHildon() { if ( m_osso ) { osso_deinitialize( m_osso ); } if ( m_gcontext ) { g_main_context_unref( m_gcontext ); } } virtual Accelerometer* getAccelerometer() { return this; } virtual bool poll( float32& gx, float32& gy, float32& gz ) { bool ok = false; int x,y,z; FILE *f = fopen("/sys/class/i2c-adapter/i2c-3/3-001d/coord", "rt"); //FILE *f = fopen("coord", "rt"); if ( f ) { if ( fscanf(f,"%d %d %d",&x,&y,&z)==3 ) { gx = -(float32)x / 1000.0f; gy = -(float32)y / 1000.0f; gz = (float32)z / 1000.0f; ok = true; } fclose(f); } return ok; } virtual void poll() { // run the gobject main loop for dbus ops if ( g_main_context_iteration( m_gcontext, FALSE ) ) { fprintf(stderr, "Hildon::poll event!\n"); } #if MAEMO_VERSION >= 5 // poll the proximity sensor to emulate esc key (undo) if ( m_useProximity ) { int fd = open("/sys/devices/platform/gpio-switch/proximity/state", 0); if ( fd >= 0 ) { char c; if ( read(fd,&c,1)==1 ) { bool proxState = (c=='c'); if (proxState != m_proximityClosed) { SDL_Event event; event.key.type = proxState ? SDL_KEYDOWN : SDL_KEYUP; event.key.state = proxState ? SDL_PRESSED : SDL_RELEASED; event.key.keysym.sym = SDLK_ESCAPE; event.key.keysym.unicode = 27; SDL_PushEvent(&event); m_proximityClosed = proxState; } } close(fd); } else { m_useProximity = false; } #endif } } EventMap* getEventMap( EventMapType type ) { static HildonModEventMap gameMap(Os::getEventMap(GAME_MAP)); static HildonModEventMap editMap(Os::getEventMap(EDIT_MAP)); switch (type) { case GAME_MAP: return &gameMap; case EDIT_MAP: return &editMap; default: return Os::getEventMap(type); } } virtual void decorateGame( WidgetParent* game ) { Button *b; // play options on the right b = new Button("",Event(Event::OPTION,1)); b->setBg(0x408040); game->add( b, Rect(SCREEN_WIDTH-10,0, SCREEN_WIDTH,SCREEN_HEIGHT) ); // palette/edit options on the left b = new Button("",Event(Event::OPTION,2)); b->setBg(0x408040); game->add( b, Rect(0,0,10,SCREEN_HEIGHT)); } virtual char *getLaunchFile() { if ( m_numFiles > 0 ) { return m_files[--m_numFiles]; } return NULL; } virtual bool openBrowser( const char* url ) { if ( url && strlen(url) < 200 ) { char buf[256]; snprintf(buf,256,"xdg-open %s",url); if ( system( buf ) == 0 ) { return true; } } return false; } virtual char* saveDialog( const char* path ) { #if 0 static char buf[256]; GtkWidget *dialog = hildon_file_chooser_dialog_new(NULL,GTK_FILE_CHOOSER_ACTION_SAVE); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), path); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { gchar *name; name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); strncpy( buf, name, 256 ); g_print("Saving as %s\n", name); g_free(name); } return buf; #else return NULL; #endif } }; static gint mime_handler(const gchar *interface, const gchar *method, GArray *arguments, gpointer data, osso_rpc_t *retval) { OsHildon* os = (OsHildon*)data; if (arguments == NULL) { return OSSO_OK; } if (g_ascii_strcasecmp(method, "mime_open") == 0) { for(unsigned i = 0; i < arguments->len; ++i) { osso_rpc_t val = g_array_index(arguments, osso_rpc_t, i); if (val.type == DBUS_TYPE_STRING && val.value.s != NULL) { char *f = NULL; fprintf(stderr,"hildon mime open \"%s\"\n",val.value.s); if ( strncmp(val.value.s,"file://",7)==0 && os->m_numFiles < MAX_FILES ) { f = val.value.s+7; } else if ( ( strncmp(val.value.s,"http://",7)==0 || strncmp(val.value.s,"nptp://",7)==0 ) ) { Http h; std::string filename(val.value.s+7); if ( filename.rfind('/') >= 0 ) { filename = filename.substr( filename.rfind('/')+1 ); } std::string filepath = Config::userDataDir() + Os::pathSep; if ( h.get( val.value.s+7, HTTP_TEMP_FILE ) ) { f = HTTP_TEMP_FILE; } } if ( f ) { if ( os->m_files[os->m_numFiles] ) { g_free(os->m_files[os->m_numFiles]); } os->m_files[os->m_numFiles++] = g_strdup( f ); } } } } return OSSO_OK; } /* cortex-a8 runfast mode to shovel vfp isntructions into the neon unit. runfast implies: * Subnormal numbers are being flushed to zero * Default NaN mode is active * No floating point exceptions are enabled */ void enable_runfast() { #ifdef __arm__ static const unsigned int x = 0x04086060; static const unsigned int y = 0x03000000; int r; asm volatile ("fmrx %0, fpscr \n\t" //r0 = FPSCR "and %0, %0, %1 \n\t" //r0 = r0 & x "orr %0, %0, %2 \n\t" //r0 = r0 | y "fmxr fpscr, %0 \n\t" //FPSCR = r0 : "=r"(r) : "r"(x), "r"(y)); #endif } Os* Os::get() { static OsHildon os; return &os; } const char Os::pathSep = '/'; int main(int argc, char** argv) { #if 0 gtk_init(&argc, &argv); #endif enable_runfast(); npmain(argc,argv); } #endif numptyphysics-0.2+svn157/Http.h0000644000175000017500000000200212264274560015451 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include #include #include class Http { public: // start bool get( const char* uri, const char* file ); bool post( const char* uri, const char*putname, const char* putfile, const char* otherargs=NULL ); // response std::string errorMessage(); std::string getHeader( const char* name ); // internals... FILE *m_file; int m_size; std::string m_err; std::string m_npid; }; numptyphysics-0.2+svn157/Hildon.h0000644000175000017500000000141112264274577015762 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifdef USE_HILDON struct HildonState; class Hildon { public: Hildon(); ~Hildon(); void poll(); char *getFile(); bool sendFile( char* to, char *file ); }; #endif //USE_HILDON numptyphysics-0.2+svn157/Script.cpp0000644000175000017500000001125712264274577016355 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2009 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "Script.h" #include "Path.h" #include "Scene.h" #include #include ScriptEntry::ScriptEntry( const std::string& str ) { char opc; printf("log: %s\n",str.c_str()); if ( sscanf(str.c_str(), "%d,%c,%d,%d,%d,%d,%d", &t, &opc, &stroke, &arg1, &arg2, &pt.x, &pt.y)==7 ) { switch (opc) { case 'n': op = OP_NEW; break; case 'd': op = OP_DELETE; break; case 'e': op = OP_EXTEND; break; case 'm': op = OP_MOVE; break; case 'a': op = OP_ACTIVATE; break; case 'p': op = OP_PAUSE; break; case 'g': op = OP_GOAL; break; default: fprintf(stderr,"bad script op\n"); } } else { fprintf(stderr,"badly formed script entry\n"); } } std::string ScriptEntry::asString() { static const char opcodes[] = "ndemapg"; std::stringstream s; s << t << "," << opcodes[op] << "," << stroke << "," << arg1 << "," << arg2 << "," << pt.x << "," << pt.y; return s.str(); } std::string ScriptLog::asString( int i ) { if ( i < size() ) { return at(i).asString(); } return std::string(); } void ScriptLog::append( int tick, ScriptEntry::Op op, int stroke, int arg1, int arg2, const Vec2& pt ) { append( ScriptEntry( tick, op, stroke, arg1, arg2, pt ) ); } void ScriptLog::append( const std::string& str ) { append( ScriptEntry(str) ); } ScriptRecorder::ScriptRecorder() : m_log(NULL), m_running(false), m_isPaused(false) { } void ScriptRecorder::start( ScriptLog* log ) { m_running = true; m_isPaused = false; m_log = log; m_log->empty(); m_log->capacity(128); m_lastTick = 0; } void ScriptRecorder::stop() { if ( m_running ) { for ( int i=0; isize(); i++ ) { std::string e = m_log->asString(i); } m_running = false; } } void ScriptRecorder::tick(bool isPaused) { if ( m_running ) { m_lastTick++; if (isPaused != m_isPaused) { m_isPaused = isPaused; m_log->append( m_lastTick, ScriptEntry::OP_PAUSE, isPaused?1:0 ); } } } void ScriptRecorder::newStroke( const Path& p, int colour, int attribs ) { if ( m_running ) m_log->append( m_lastTick, ScriptEntry::OP_NEW, 0, colour, attribs, p[0] ); } void ScriptRecorder::deleteStroke( int index ) { if ( m_running ) m_log->append( m_lastTick, ScriptEntry::OP_DELETE, index ); } void ScriptRecorder::extendStroke( int index, const Vec2& pt ) { if ( m_running ) m_log->append( m_lastTick, ScriptEntry::OP_EXTEND, index, 0, 0, pt ); } void ScriptRecorder::moveStroke( int index, const Vec2& pt ) { if ( m_running ) m_log->append( m_lastTick, ScriptEntry::OP_MOVE, index, 0, 0, pt ); } void ScriptRecorder::activateStroke( int index ) { if ( m_running ) m_log->append( m_lastTick, ScriptEntry::OP_ACTIVATE, index ); } void ScriptRecorder::goal( int goalNum ) { if ( m_running ) m_log->append( m_lastTick, ScriptEntry::OP_GOAL, goalNum ); } void ScriptPlayer::start( const ScriptLog* log, Scene* scene ) { m_playing = true; m_isPaused = false; m_log = log; m_index = 0; m_lastTick = 0; m_scene = scene; printf("start playback: %d events\n",m_log->size()); } void ScriptPlayer::stop() { m_playing = false; m_log = NULL; } bool ScriptPlayer::isRunning() const { return m_log && m_log->size() > 0 && m_playing; } bool ScriptPlayer::tick() { if ( m_playing ) { m_lastTick++; while ( m_index < m_log->size() && m_log->at(m_index).t <= m_lastTick ) { const ScriptEntry& e = m_log->at(m_index); switch (e.op) { case ScriptEntry::OP_NEW: m_scene->newStroke( Path(Path()&e.pt), e.arg1, e.arg2 ); break; case ScriptEntry::OP_DELETE: m_scene->deleteStroke( m_scene->strokes()[e.stroke] ); break; case ScriptEntry::OP_EXTEND: m_scene->extendStroke( m_scene->strokes()[e.stroke], e.pt ); break; case ScriptEntry::OP_MOVE: m_scene->moveStroke( m_scene->strokes()[e.stroke], e.pt ); break; case ScriptEntry::OP_ACTIVATE: m_scene->activateStroke( m_scene->strokes()[e.stroke] ); break; case ScriptEntry::OP_PAUSE: m_isPaused = (e.stroke != 0); break; } m_index++; } return m_isPaused; } return false; } numptyphysics-0.2+svn157/INSTALL0000644000175000017500000002203012264274560015415 0ustar warp10warp10Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. numptyphysics-0.2+svn157/Event.cpp0000644000175000017500000000373412264274577016173 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "Event.h" char Event::g_mods = 0; BasicEventMap::BasicEventMap( const KeyPair* keys, const ButtonPair* buttons ) : m_keys(keys), m_buttons(buttons) {} Event BasicEventMap::process(const SDL_Event& ev) { Event ret; switch (ev.type) { case SDL_MOUSEBUTTONDOWN: { Event::g_mods |= SDL_BUTTON(ev.button.button); const ButtonPair* inf = lookupButton(ev.button.button); if (inf) ret = Event(inf->down, ev.button.x, ev.button.y);; break; } case SDL_MOUSEBUTTONUP: { Event::g_mods &= ~SDL_BUTTON(ev.button.button); const ButtonPair* inf = lookupButton(ev.button.button); if (inf) ret = Event(inf->up, ev.button.x, ev.button.y); break; } case SDL_MOUSEMOTION: { const ButtonPair* inf = lookupButton(ev.button.button); if (inf) ret = Event(inf->move, ev.button.x, ev.button.y); break; } case SDL_KEYDOWN: { const KeyPair* inf = lookupKey(ev.key.keysym.sym); if (inf) ret = Event(inf->ev, (char)ev.key.keysym.unicode); break; } } return ret; } const BasicEventMap::KeyPair* BasicEventMap::lookupKey(SDLKey sym) { const KeyPair* p = m_keys; while (p && p->sym) { if (p->sym == sym) return p; p++; } return NULL; } const BasicEventMap::ButtonPair* BasicEventMap::lookupButton(unsigned char button) { const ButtonPair* p = m_buttons; while (p && p->button) { if (p->button == button) return p; p++; } return NULL; } numptyphysics-0.2+svn157/Overlay.cpp0000644000175000017500000005257012264274577016535 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "Overlay.h" #include "Canvas.h" #include "Game.h" #include "Config.h" #include "Path.h" #include "Font.h" #include "Worker.h" #include "Scene.h" #include #include #include extern Rect FULLSCREEN_RECT; class OverlayBase : public Overlay { public: OverlayBase( GameControl& game, int x=10, int y=10, bool dragging_allowed=true ) : m_game(game), m_x(x), m_y(y), m_canvas(NULL), m_dragging(false), m_dragging_allowed(dragging_allowed), m_buttonDown(false) { moveTo(Vec2(x,y)); } virtual ~OverlayBase() { delete m_canvas; } Rect dirtyArea() { if ( isDirty() ) { return Rect(m_x,m_y,m_x+m_canvas->width()-1,m_y+m_canvas->height()-1); } else { return Rect(0,0,0,0); } } virtual void onShow() { dirty(); } virtual void onHide() {} virtual void onTick( int tick ) {} virtual void draw( Canvas& screen, const Rect& area ) { if ( m_canvas ) { screen.drawImage( m_canvas, m_x, m_y ); } Overlay::draw(screen,area); dirty(false); } virtual bool processEvent( SDL_Event& ev ) { if (Overlay::processEvent(ev)) { return true; } switch( ev.type ) { case SDL_MOUSEBUTTONDOWN: //printf("overlay click\n"); if ( ev.button.button == SDL_BUTTON_LEFT && ev.button.x >= m_x && ev.button.x <= m_x + m_canvas->width() && ev.button.y >= m_y && ev.button.y <= m_y + m_canvas->height() ) { m_orgx = ev.button.x; m_orgy = ev.button.y; m_prevx = ev.button.x; m_prevy = ev.button.y; m_buttonDown = true; return true; } break; case SDL_MOUSEBUTTONUP: if ( ev.button.button == SDL_BUTTON_LEFT ) { if ( m_dragging ) { m_dragging = false; onDragStop( ev.button.x-m_x, ev.button.y-m_y ); } else if ( Abs(ev.button.x-m_orgx) < CLICK_TOLERANCE && Abs(ev.button.y-m_orgy) < CLICK_TOLERANCE ){ onClick( m_orgx-m_x, m_orgy-m_y ); } m_buttonDown = false; } break; case SDL_MOUSEMOTION: if ( !m_dragging && m_buttonDown && m_dragging_allowed && ( Abs(ev.button.x-m_orgx) >= CLICK_TOLERANCE || Abs(ev.button.y-m_orgy) >= CLICK_TOLERANCE ) ) { m_dragging = true; onDragStart( ev.button.x-m_x, ev.button.y-m_y ); } else if ( m_dragging ) { onDrag( ev.button.x - m_prevx, ev.button.y - m_prevy ); m_prevx = ev.button.x; m_prevy = ev.button.y; } break; case SDL_KEYDOWN: return onKey( ev.key.keysym.sym ); default: break; } return false; } protected: virtual bool onKey( int k ) { return false; } virtual bool onDragStart( int x, int y ) { return false; } virtual bool onDragStop( int x, int y ) { return false; } virtual bool onDrag( int dx, int dy ) { move(Vec2(dx,dy)); m_x += dx; m_y += dy; m_game.m_refresh = true; return false; } virtual bool onClick( int x, int y ) { for ( int i=m_hotSpots.size()-1; i>=0; i-- ) { if ( m_hotSpots[i].rect.contains( Vec2(x,y) ) ) { if ( m_hotSpots[i].c ) { m_hotSpots[i].c(m_hotSpots[i].o,m_hotSpots[i].f); return true; } else if ( onHotSpot( m_hotSpots[i].id ) ) { return true; } } } return false; } virtual bool onHotSpot( int id ) { return false; } void addHotSpot( const Rect& r, int id ) { HotSpot hs = { r, id, NULL, NULL, NULL }; m_hotSpots.append( hs ); } template void addHotSpot( const Rect& r, void (C::*func)() ) { struct Caller { static void call( void* o, void (Overlay::*f)() ) { return (((C*)o)->*(void (C::*)())f)(); } }; HotSpot hs = { r, -1, this, (void (Overlay::*)())func, Caller::call }; m_hotSpots.append( hs ); } struct HotSpot { Rect rect; int id; void *o; void (Overlay::*f)(); void (*c)(void*,void (Overlay::*)()); }; GameControl& m_game; int m_x, m_y; Canvas *m_canvas; private: int m_orgx, m_orgy; int m_prevx, m_prevy; bool m_dragging; bool m_dragging_allowed; bool m_buttonDown; Array m_hotSpots; }; class IconOverlay: public OverlayBase { std::string m_filename; public: IconOverlay(GameControl& game, const char* file, int x=100,int y=20, bool dragging_allowed=true) : OverlayBase(game,x,y,dragging_allowed), m_filename( file ) { m_canvas = new Image( m_filename.c_str() ); } }; class UiOverlay : public OverlayBase { public: UiOverlay(GameControl& game, const Rect& pos) : OverlayBase( game, pos.tl.x, pos.tl.y, true ) , m_bgColour(0xdfdfaf) , m_fgColour(0) , m_motion(0) { m_canvas = new Canvas( pos.width(), pos.height() ); m_canvas->setBackground( m_bgColour ); m_canvas->drawRect( 0, 0, pos.width(), pos.height(), m_canvas->makeColour(0xffffff) ); m_canvas->drawRect( 3, 3, pos.width()-6, pos.height()-6, m_canvas->makeColour(m_bgColour) ); } void moveTo( const Vec2& dest ) { if ( dest != Vec2(m_x,m_y) ) { m_motion = 10; m_dest = dest; } } void onTick( int tick ) { if ( m_motion > 0 ) { Vec2 pos(m_x,m_y); pos *= m_motion-1; pos += m_dest; pos = pos /m_motion; m_x = pos.x; m_y = pos.y; m_motion--; m_game.m_refresh = 1; } } template void addButton( const char* icon, const Rect& r, void (C::*func)() ) { if ( Config::findFile(icon) != icon ) { Image *i = new Image(icon); m_canvas->drawImage( i, r.tl.x, r.tl.y ); delete i; } else { Path p(icon); if ( p.size() > 1 ) { p.translate( r.tl - p.bbox().tl ); m_canvas->drawPath( p, m_fgColour, false ); } else { Font::headingFont()->drawCenter( m_canvas, r.centroid(), icon, m_fgColour ); } } addHotSpot( r, func ); } int m_bgColour; int m_fgColour; private: int m_motion; Vec2 m_dest; }; #if 0 class GridOverlay : public UiOverlay { public: GridOverlay( GameControl& game, GridProvider* provider, int x, int y, int w, int h, int columns ) : UiOverlay(game,Rect(x,y,x+w,y+h)), m_columns( columns ), m_provider( provider ), m_first( 0 ), m_current( 0 ), m_vgap( 2 ), m_hgap( 2 ), m_offset(0,0), m_velocity(0,0), m_listarea( m_hgap, m_vgap, w-m_hgap, h-m_vgap ) { Canvas *first = m_provider->provideItem( m_first, NULL ); m_itemh = first->height(); m_itemw = first->width(); m_rows = m_provider->countItems()+m_columns-1)/m_columns; m_horizvis = m_listarea.height() / (m_itemh + m_vgap); m_vertvis = m_listarea.width() / (m_itemw + m_hgap); m_numvis = m_horizvis * m_vertvis; if ( m_numvis <= m_provider->countItems() ) { m_allowscroll = false; } else { m_allowscroll = true; if ( m_horizvis < m_columns ) { m_listarea.tl.x += 20; m_listarea.br.x -= 20; addButton( "<<", Rect(0,0,h,20), &GridOverlay::doColLeft ); addButton( ">>", Rect(x-20,0,h,20), &GridOverlay::doColRight ); } if ( m_vertvis < m_rows ) { m_listarea.tl.y += 20; m_listarea.br.y -= 20; addButton( "^^^^", Rect(0,0,w,20), &GridOverlay::doRowUp ); addButton( "vvvv", Rect(0,y-20,w,20), &GridOverlay::doRowDown ); } m_horizvis = m_listarea.height() / (m_itemh + m_vgap); m_vertvis = m_listarea.wdith() / (m_itemw + m_hgap); m_numvis = m_horizvis * m_vertvis; } m_items = (Canvas**)calloc( sizeof(Canvas*), m_numvis); m_items[0] = first; for ( int i=1; iprovideItem( i, NULL ); } renderItems(); } ~GridOverlay() { for ( int i=0; ireleaseItem( m_items[0] ); } } } void renderItems() { m_canvas->clear( m_listarea ); for ( int r=0; r < m_vertvis; r++ ) { for ( int c=0; c < m_horizvis; c++ ) { int imgindex = r*m_horizvis + c; int item = m_first + r*m_columns + c; if ( m_items[imgindex] ) { m_canvas->drawImage( m_items[imgindex], m_listarea.tl.x + m_offset.x, m_listarea.tl.y + m_offset.y + (m_itemh+m_vgap)*i ); } if ( item == m_current ) { m_canvas->drawRect( m_listarea.tl.x-1 + m_offset.x, m_listarea.tl.y + (m_itemh+m_vgap)*i - 1 + m_offset.y, m_items[imgindex]->width()+2, m_items[imgindex]->height()+2, m_fgColour, false ); } } } dirty(); } #if 0 void onTick( int tick ) { UiOverlay::onTick( tick ); if ( m_velocity.y ) { m_offset += m_velocity; while ( m_offset.y < -m_itemh-m_vgap ) { m_offset.y += m_itemh+m_vgap; doForward(); } while ( m_offset.y >= m_itemh+m_vgap ) { m_offset.y -= m_itemh+m_vgap; doBack(); } if ( m_velocity.y > 0 ) m_velocity.y--; if ( m_velocity.y < 0 ) m_velocity.y++; m_offset.x = 0; renderItems(); } } #endif virtual bool onClick( int x, int y ) { int i = m_first + (y - m_vgap) / (m_itemh + m_vgap); if ( i >= 0 && i < m_provider->countItems() ) { m_current = i; m_provider->onSelection( m_current, x - m_listarea.tl.x, y - m_listarea.tl.y - (m_itemh+m_vgap)*i ); renderItems(); } } bool onDrag( int dx, int dy ) { m_velocity.x = dx; m_velocity.y = dy; } void doRowUp() { pan(0,-5); } void doRowDown() { pan(0,5); } void doColLeft() { pan(-5,0); } void doColRight() { pan(5,0); } void pan( int dx, int dy ) { Vec2 motion(0,0); m_offset += Vec2(dx,dy); while ( m_offset.x < 0 ) { if (m_first%m_columns == 0) { m_offset.x = 0; } else { motion.x--; m_first--; m_offset.x += m_itemw; } } while ( m_offset.x > m_itemw ) { if (m_first%m_columns == m_columns-m_horizvis) { m_offset.x = 0; } else { motion.x++; m_first++; m_offset.x -= m_itemw; } } while ( m_offset.y < 0 ) { if (m_first/m_columns == 0) { m_offset.y = 0; } else { motion.y--; m_first-=m_columns; m_offset.y += m_itemh; } } while ( m_offset.x > m_itemh ) { if (m_first/m_columns == m_rows-m_vertvis) { m_offset.y = 0; } else { motion.y++; m_first+=m_columns; m_offset.y -= m_itemh; } } if ( motion.x < 0 ) { // shuffle columsn right. } else if ( motion.x > 0 ) { // shuffle columns left. } if ( motion.y < 0 ) { // shuffle rows down. } else if ( motion.y > 0 ) { // shuffle rows up. } if ( m_first > 0 ) { m_first--; m_items[m_first%m_numvis] = m_provider->provideItem( m_first, m_items[m_first%m_numvis] ); } } private: int m_columns; int m_rows; ListProvider *m_provider; int m_first; int m_current; int m_horizvis int m_vertvis; int m_numvis; int m_itemh; int m_itemw; int m_hgap, m_vgap; bool m_allowscroll; Rect m_listarea; Vec2 m_offset; Vec2 m_velocity; Canvas** m_items; }; #endif class MenuOverlay : public UiOverlay { public: MenuOverlay(GameControl& game) : UiOverlay(game,Rect(100,100,400,200)) { addButton( "48,18 47,25 48,25 47,27 48,27 47,29 48,29 47,31 48,33 47,34 48,35 47,40 48,45 49,43 48,43 49,41 48,39 49,38 48,37 47,36 50,34 49,31 44,31 42,30 40,30 36,32 37,33 36,38 35,45 34,47 35,53 34,54 36,56 37,58 38,59 41,59 42,61 43,62 45,62 47,63 49,63 51,64 59,64 61,62 63,62 64,60 66,60 68,58 69,54 70,52 69,52 68,46 67,46 66,42 63,36 62,36 61,34 60,33 59,33 58,32 54,32 53,31 50,31 54,31 53,33", Rect(10,10,90,90), &MenuOverlay::doPause ); } void doPause() { m_game.gotoLevel( m_game.m_level + 1 ); } void onShow() { moveTo(Vec2(200,200)); } }; class LevelThumbnailer : public Worker { public: LevelThumbnailer( Levels& levels, int sel ) : m_levels(levels), m_selected(sel), m_thumb(0) {} virtual void main() { fprintf(stderr,"creating thumb\n"); Canvas temp( SCREEN_WIDTH, SCREEN_HEIGHT ); Scene scene( true ); int size = m_levels.load( m_selected, m_buf, sizeof(m_buf) ); if ( size && scene.load( m_buf, size ) ) { scene.draw( temp, FULLSCREEN_RECT ); m_thumb = temp.scale( ICON_SCALE_FACTOR ); fprintf(stderr,"thumb done\n"); } } int level() { return m_selected; } Canvas* thumb() { return m_thumb; } private: unsigned char m_buf[64*1024]; Levels& m_levels; int m_selected; Canvas* m_thumb; }; class NextLevelOverlay : public UiOverlay { public: NextLevelOverlay( GameControl& game ) : UiOverlay(game,Rect(FULLSCREEN_RECT.centroid().x-200, FULLSCREEN_RECT.centroid().y-120, FULLSCREEN_RECT.centroid().x+200, FULLSCREEN_RECT.centroid().y+80 ) ), m_levelIcon(-2), m_worker(NULL) { sizeTo(Vec2(400,240)); TabBook *tabs = new TabBook(); struct PrevButton : public Button { NextLevelOverlay *m_d; PrevButton(NextLevelOverlay *d) : Button("<< Prev"), m_d(d) {} void onSelect() { m_d->doPrevLevel(); } }; struct NextButton : public Button { NextLevelOverlay *m_d; NextButton(NextLevelOverlay *d) : Button(">> Next"), m_d(d) {} void onSelect() { m_d->doNextLevel(); } }; Panel* panel = new Panel(); m_preview = new Icon(); panel->add(m_preview,50,10); m_previewCaption = new Label("--"); panel->add(m_previewCaption,50,125); panel->add(new PrevButton(this),Rect(300,10,380,35)); panel->add(new NextButton(this),Rect(300,40,380,65)); tabs->addTab("Choose",panel); tabs->addTab("Play",new Label("statsstuff")); panel = new Panel(); panel->add(new Label("BRAVO!!",Font::titleFont()),Rect(100,10,200,32)); panel->add(new Label("Stats:"),Rect(20,50,100,82)); panel->add(new Label("time"),Vec2(40,90)); //sprintf(buf,"%.02f", (float)(stats.endTime - stats.startTime)/1000.0f ); //f->drawRight( m_canvas, Vec2(160,90), buf, 0 ); panel->add(new Label("strokes"),Vec2(40,110)); //sprintf(buf,"%d", stats.strokeCount ); //f->drawRight( m_canvas, Vec2(160,110), buf, 0 ); panel->add(new Label("undone"),Vec2(50,130)); //sprintf(buf,"%d", stats.undoCount ); //f->drawRight( m_canvas, Vec2(160,130), buf, 0 ); panel->add(new Label("paused"),Vec2(50,150)); //sprintf(buf,"%d", stats.pausedStrokes ); //f->drawRight( m_canvas, Vec2(160,150), buf, 0 ); panel->add(new Button("Replay"), Rect(300,10,380,35)); panel->add(new Button("Share"), Rect(300,40,380,65)); panel->add(new Button("Continue"),Rect(300,70,380,95)); tabs->addTab("Review",panel); tabs->addTab("Help",new Label("helpstuff")); add(tabs,Rect(5,5,395,195)); const Font *f = Font::titleFont(); //f->drawCenter( m_canvas, Vec2(220,30), "BRAVO!", 0 ); f = Font::headingFont(); f->drawLeft( m_canvas, Vec2(240,50), "Next:", 0 ); addButton( "<<", Rect(230,210,280,230), &NextLevelOverlay::doPrevLevel ); addButton( ">>", Rect(390,210,420,230), &NextLevelOverlay::doNextLevel ); addButton( "Review", Rect(0,240,200,280), &NextLevelOverlay::doActionReplay ); addButton( "Continue", Rect(200,240,400,280), &NextLevelOverlay::doContinue ); } ~NextLevelOverlay() { delete m_worker; } virtual bool processEvent( SDL_Event& ev ) { switch( ev.type ) { case SDL_USEREVENT: if (ev.user.code==WORKER_DONE && m_worker && m_worker->done()) { genIcon(); } return false; default: return UiOverlay::processEvent(ev); } } virtual void onShow() { UiOverlay::onShow(); m_game.m_refresh = true; //for fullscreen fade m_game.m_fade = true; m_selectedLevel = m_game.m_level+1; m_canvas->clear(Rect(20,80,220,210)); char buf[80]; const GameStats& stats = m_game.stats(); const Font *f = Font::blurbFont(); f->drawLeft( m_canvas, Vec2(40,90), "time", 0 ); sprintf(buf,"%.02f", (float)(stats.endTime - stats.startTime)/1000.0f ); f->drawRight( m_canvas, Vec2(160,90), buf, 0 ); f->drawLeft( m_canvas, Vec2(40,110), "strokes", 0 ); sprintf(buf,"%d", stats.strokeCount ); f->drawRight( m_canvas, Vec2(160,110), buf, 0 ); f->drawLeft( m_canvas, Vec2(50,130), "undone", 0 ); sprintf(buf,"%d", stats.undoCount ); f->drawRight( m_canvas, Vec2(160,130), buf, 0 ); f->drawLeft( m_canvas, Vec2(50,150), "paused", 0 ); sprintf(buf,"%d", stats.pausedStrokes ); f->drawRight( m_canvas, Vec2(160,150), buf, 0 ); genIcon(); } virtual void onHide() { UiOverlay::onHide(); m_game.m_refresh = true; //for fullscreen fade m_game.m_fade = false; } void setCaption() { std::string caption = m_game.levels().levelName(m_selectedLevel); if (caption[0]=='L') { int s = caption.find("_"); if (s>1 && s<5) { caption = caption.substr(s+1); } } std::replace(caption.begin(),caption.end(),'_',' '); m_previewCaption->text(caption); } void doPrevLevel() { if (m_selectedLevel>0) { m_selectedLevel--; genIcon(); dirty(); fprintf(stderr,"prevlevel %d\n",m_selectedLevel); } } void doNextLevel() { m_selectedLevel++; genIcon(); dirty(); fprintf(stderr,"nextlevel %d\n",m_selectedLevel); } void doActionReplay() { m_game.gotoLevel( m_game.m_level,true ); } void doContinue() { m_game.gotoLevel( m_selectedLevel ); } private: bool genIcon() { if ( m_levelIcon != m_selectedLevel ) { fprintf(stderr,"icon %d deleted for %d\n",m_levelIcon,m_selectedLevel); m_preview->canvas(NULL); m_levelIcon = -1; if ( m_selectedLevel >= m_game.levels().numLevels() ) { m_icon = new Image("theend.png"); m_preview->canvas(m_icon); m_previewCaption->text("no more levels!"); m_levelIcon = m_selectedLevel = m_game.levels().numLevels(); } else if (m_worker==NULL) { fprintf(stderr,"starting new thumb for %d\n",m_selectedLevel); m_worker = new LevelThumbnailer(m_game.levels(),m_selectedLevel); m_worker->start(); } else if (m_worker->done()) { m_levelIcon = m_worker->level(); m_icon = m_worker->thumb(); delete m_worker; m_worker = NULL; m_preview->canvas(m_icon); setCaption(); fprintf(stderr,"thumb complete for %d\n",m_levelIcon); } } return m_levelIcon==m_selectedLevel; } int m_selectedLevel; int m_levelIcon; Canvas* m_icon; Icon* m_preview; LevelThumbnailer *m_worker; Label* m_previewCaption; }; class EditOverlay : public IconOverlay { int m_saving, m_sending; public: EditOverlay( GameControl& game ) : IconOverlay(game,"edit.png"), m_saving(0), m_sending(0) { for ( int i=0; i<18; i++ ) { addHotSpot( pos(i), i ); } for ( int i=0; idrawRect( pos(i), m_canvas->makeColour(brushColours[i]), true ); } } Rect pos( int i ) { int c = i%3, r = i/3; return Rect( c*28+13, r*28+33, c*28+33, r*28+53 ); } int index( int x, int y ) { int r = (y-33)/28; int c = (x-13)/28; if ( r<0 || c<0 || c>2 ) return -1; return r*3+c; } void outline( Canvas& screen, int i, int c ) { Rect r = pos(i) + Vec2(m_x,m_y); r.tl.x-=2; r.tl.y-=2; r.br.x+=2; r.br.y+=2; screen.drawRect( r, c, false ); } virtual void draw( Canvas& screen, const Rect& area ) { IconOverlay::draw( screen, area ); outline( screen, m_game.m_colour, 0 ); if ( m_game.m_strokeFixed ) outline( screen, 12, 0 ); if ( m_game.m_strokeSleep ) outline( screen, 13, 0 ); if ( m_game.m_strokeDecor ) outline( screen, 14, 0 ); if ( m_sending ) outline( screen, 16, screen.makeColour((m_sending--)<<9) ); if ( m_saving ) outline( screen, 17, screen.makeColour((m_saving--)<<9) ); if ( m_saving || m_sending ) dirty(); } virtual bool onHotSpot( int i ) { switch (i) { case 12: m_game.m_strokeFixed = ! m_game.m_strokeFixed; break; case 13: m_game.m_strokeSleep = ! m_game.m_strokeSleep; break; case 14: m_game.m_strokeDecor = ! m_game.m_strokeDecor; break; case 16: if ( m_game.send() ) m_sending=10; break; case 17: if ( m_game.save() ) m_saving=10; break; default: if (idirty(); } void Widget::sizeTo( const Vec2& size ) { m_pos.br=m_pos.tl+size; onResize(); if (m_parent) m_parent->dirty(); } bool Widget::processEvent( SDL_Event& ev ) { if (m_eventMap) { Event e = m_eventMap->process(ev); if (e.code != Event::NOP) { return dispatchEvent(e); } } return false; } bool Widget::dispatchEvent( Event& ev ) { if (onEvent(ev)) { //fprintf(stderr,"event %d consumed by %s\n", ev.code, name()); return true; } else if (m_parent) { //fprintf(stderr,"toparent %s event %d\n", m_parent->name(), ev.code); return m_parent->dispatchEvent(ev); } return false; } void Widget::setEventMap(EventMapType map) { setEventMap( OS->getEventMap(map) ); } void Widget::draw( Canvas& screen, const Rect& area ) { if ( m_alpha > 0 ) { Rect r = m_pos; r.clipTo(area); if (!r.isEmpty()) { if ( m_focussed ) { screen.drawRect(r,screen.makeColour(SELECTED_BG)); } else if (m_alpha==255) { screen.drawRect(m_pos,screen.makeColour(m_bg)); } else { screen.fade(r); } } } if (m_border) { screen.drawRect(m_pos,screen.makeColour(TL_BORDER),false); } dirty(false); } WidgetParent* Widget::topLevel() { WidgetParent* p = parent(); while (p && p->parent()) { p = p->parent(); } return p; } //////////////////////////////////////////////////////////////// Label::Label() { } Label::Label(const std::string& s, const Font* f) : m_text(s), m_font(f?f:Font::blurbFont()) {} void Label::text( const std::string& s ) { m_text = s; dirty(); } void Label::draw( Canvas& screen, const Rect& area ) { Widget::draw(screen,area); screen.setClip(area.tl.x,area.tl.y,area.width(),area.height()); m_font->drawCenter( &screen, m_pos.centroid(), m_text, m_fg); screen.resetClip(); } void Label::align( int a ) {} //////////////////////////////////////////////////////////////// Button::Button(const std::string& s, Event selEvent) : Label(s), m_selEvent(selEvent) { border(true); alpha(100); font(Font::headingFont()); setEventMap(UI_BUTTON_MAP); } void Button::draw( Canvas& screen, const Rect& area ) { Label::draw(screen,area); if (m_focussed) { screen.drawRect(m_pos,screen.makeColour(TL_BORDER),false); } } bool Button::onEvent( Event& ev ) { //fprintf(stderr,"Button::onEvent %d\n",ev.code); switch (ev.code) { case Event::SELECT: if (m_focussed) { // fprintf(stderr,"button press translate %d -> %d/%d,%d\n", // ev.code,m_selEvent.code,m_selEvent.x,m_selEvent.y); m_focussed = false; dirty(); onSelect(); if (m_parent && m_selEvent.code != Event::NOP) { //fprintf(stderr,"button press event dispatch %d\n",m_selEvent.code); m_parent->dispatchEvent(m_selEvent); } return true; } break; case Event::FOCUS: if (m_pos.contains(Vec2(ev.x,ev.y))) { if (!m_focussed) { m_focussed = true; dirty(); return true; } } else if (m_focussed) { m_focussed = false; dirty(); } default: break; } return false; } //////////////////////////////////////////////////////////////// Icon::Icon( Canvas* c ) : m_canvas(c) { if (c) { sizeTo(Vec2(c->width(),c->height())); } } Icon::~Icon() { delete m_canvas; } void Icon::canvas( Canvas *c ) { delete m_canvas; m_canvas = c; dirty(); } void Icon::draw( Canvas& screen, const Rect& area ) { Widget::draw(screen,area); if (m_canvas) { screen.drawImage(m_canvas,m_pos.tl.x,m_pos.tl.y); } } //////////////////////////////////////////////////////////////// IconButton::IconButton(const std::string& s, const std::string& icon, const Event& ev) : Button(s,ev), m_icon(icon.size()==0?NULL:new Image(icon.c_str(),true)), m_ownIcon(true), m_vertical(true) { } IconButton::~IconButton() { if (m_ownIcon) delete m_icon; } void IconButton::canvas(Canvas *c, bool takeOwnership) { if (m_ownIcon) delete m_icon; m_icon = c; m_ownIcon = takeOwnership; dirty(); } Canvas* IconButton::canvas() { return m_icon; } void IconButton::icon(const std::string& icon) { if (m_ownIcon) delete m_icon; m_icon = new Image(icon.c_str(),true); m_ownIcon = true; dirty(); } void IconButton::draw( Canvas& screen, const Rect& area ) { screen.setClip(area.tl.x,area.tl.y,area.width(),area.height()); if (m_icon) { Widget::draw(screen,area); if (m_focussed) { screen.drawRect(m_pos,screen.makeColour(SELECTED_BG),true); } Vec2 textsize = m_font->metrics(m_text); int gap = (m_vertical ? : m_pos.width()) / 10; if (m_vertical) { int x = m_pos.centroid().x - m_icon->width()/2; int y = m_pos.centroid().y - m_icon->height()/2 - textsize.y/2; if (yheight() + m_pos.height()/10; m_font->drawCenter( &screen, Vec2(x,y), m_text, m_fg); } else { int x = m_pos.tl.x + 10; int y = m_pos.centroid().y - m_icon->height()/2; screen.drawImage(m_icon,x,y); x += m_icon->width() + 10; y = m_pos.centroid().y - textsize.y/2; m_font->drawLeft( &screen, Vec2(x,y), m_text, m_fg); } } else { Button::draw(screen,area); } screen.resetClip(); } //////////////////////////////////////////////////////////////// RichText::RichText(const std::string& s, const Font* f) : Label(s,f), m_layoutRequired(true) {} void RichText::text( const std::string& s ) { Label::text(s); m_layoutRequired = true; } void RichText::draw( Canvas& screen, const Rect& area ) { Widget::draw(screen,area); if (m_layoutRequired) { layout(m_pos.width()-20); m_layoutRequired = false; } screen.setClip(area.tl.x,area.tl.y,area.width(),area.height()); for (int l=0; l 0) { Vec2 pos = m_pos.tl + m_snippets[l].pos; Vec2 posnext = l==m_snippets.size()-1 ? pos:m_pos.tl+m_snippets[l+1].pos; if (pos.y < area.br.y && posnext.y >= area.tl.y ) { std::string sniptext = m_text.substr(m_snippets[l].textoff, m_snippets[l].textlen); switch (m_snippets[l].align) { case 1: pos.x += (m_pos.width()-20-m_snippets[l].font->metrics(sniptext).x)/2; break; case 2: pos.x += m_pos.width()-20-m_snippets[l].font->metrics(sniptext).x; break; } m_snippets[l].font->drawLeft( &screen, pos, sniptext, m_fg); } } } screen.resetClip(); } int RichText::layout(int w) { struct Tag { Tag(const std::string& str, size_t begin, size_t end) : m_str(str), m_closed(false), m_begin(begin), m_end(end) { if (str[m_begin]=='<') {m_begin++;} if (str[m_begin]=='/') {m_closed=true; m_begin++;} if (str[m_end]=='/') {m_closed=true; m_end--;} m_tag = m_str.substr(m_begin,m_str.find_first_of(" \t/>",m_begin)-m_begin); fprintf(stderr,"tag = [%s]\n", m_tag.c_str()); } const std::string& tag() { return m_tag; } std::string prop(const std::string& name) { std::string mark(" "); std::string value; mark += name + '='; if (m_str.find(mark) != std::string::npos) { char term = ' '; const char *p = m_str.c_str() + m_str.find(mark) + mark.length(); if (term==' ' && (*p=='\'' || *p=='"')) { term = *p++; } while (term!=' ' ? (*p != term) : (*p!='/' && *p!='>')) { value += *p++; } } return value; } bool closed() { return m_closed; } const std::string& m_str; bool m_closed; size_t m_begin, m_end; std::string m_tag; }; const int margin = 10; w -= margin*2; int x = margin, y = 0, l = 0, h = 0; size_t p=0; int spacewidth = m_font->metrics(" ").x; Snippet snippet = {Vec2(x,y),0,0,0,m_font}; Vec2 wordmetrics; m_snippets.empty(); m_snippets.append(snippet); //fprintf(stderr,"layout w=%d \"%s\"\n",w,m_text.c_str()); while (p != std::string::npos) { int wordwidth; bool newline = false; size_t e = m_text.find_first_of(" \t\n\r<>", p); if (e==std::string::npos) { wordmetrics = snippet.font->metrics(m_text.substr(p,e)); } else { wordmetrics = snippet.font->metrics(m_text.substr(p,e-p)); } //fprintf(stderr,"word \"%s\" w=%d\n",m_text.substr(p,e-p).c_str(),wordmetrics.x); if (x!=margin) { // space wordmetrics.x += spacewidth; } if (x==margin || x+wordmetrics.x < w) { // add to snippet p = e; x += wordmetrics.x; } else { e = p; newline = true; } if (e!=std::string::npos && m_text[e]=='<') { size_t f = m_text.find('>',e); Tag tag(m_text,e,f); //fprintf(stderr,"got tag \"%s\"\n",tag.tag().c_str()); if (tag.tag() == "H1") { newline = true; if (tag.closed()) { snippet.font = m_font; y += snippet.font->height()/2; } else { snippet.font = Font::titleFont(); h += snippet.font->height(); } } else if (tag.tag() == "H2") { newline = true; if (tag.closed()) { snippet.font = m_font; y += snippet.font->height()/2; } else { snippet.font = Font::headingFont(); h += snippet.font->height(); } } else if (tag.tag() == "BR") { newline = true; } else if (tag.tag() == "P") { newline = true; std::string align = tag.prop("align"); if (align=="center") snippet.align=1; else if (align=="right") snippet.align=2; else snippet.align=0; } else if (tag.tag() == "LI") { newline = true; x += margin; } else if (tag.tag() == "IMG") { } //fprintf(stderr,"skip %d chars \n",f+1-e); e = f + 1; } if (newline) { //line break; int len = p - m_snippets[l].textoff; if (len > 0) { m_snippets[l].textlen = len > 0 ? len : 0; m_snippets[l].pos.y = y; snippet.textoff = e; m_snippets.append(snippet); //fprintf(stderr,"new line %d w=%d, \"%s\"\n", y, x+wordmetrics.x, // m_text.substr(m_snippets[l].textoff,m_snippets[l].textlen).c_str()); y += m_snippets[l].font->height(); l++; x = margin + indent; h = 0; } else { m_snippets[l] = snippet; m_snippets[l].textoff = e; m_snippets[l].pos.x = x; } } p=e; if (p==std::string::npos) { m_snippets[l].textlen = m_text.length() - m_snippets[l].textoff; m_snippets[l].pos = Vec2(0,y); y += m_snippets[l].font->height(); //fprintf(stderr,"last line %d \"%s\"\n", y, // m_text.substr(m_snippets[l].textoff,m_snippets[l].textlen).c_str()); } else { while (m_text[p] == ' ' || m_text[p] == '\n' || m_text[p] == '\r' || m_text[p] == '\t') { //eat whitespace if (p==m_snippets[l].textoff) { m_snippets[l].textoff++; } p++; } } } return y; } //////////////////////////////////////////////////////////////// Draggable::Draggable() : m_dragMaybe(false), m_dragging(false), m_step(2,2), m_delta(0,0), m_internalEvent(false) { setEventMap(UI_DRAGGABLE_MAP); } bool Draggable::processEvent( SDL_Event& ev ) { // get in before our children if (!m_internalEvent && m_eventMap) { Event e = m_eventMap->process(ev); if (e.code != Event::NOP) { return onPreEvent(e); } } // normal processing return Container::processEvent(ev); } bool Draggable::onPreEvent( Event& ev ) { //fprintf(stderr,"draggable event %d %d,%d\n",ev.code,ev.x,ev.y); switch (ev.code) { case Event::MOVEBEGIN: m_dragMaybe = true; m_dragOrg = Vec2(ev.x,ev.y); return true; case Event::MOVEMORE: if (m_dragMaybe && !m_dragging && ( Abs(ev.x-m_dragOrg.x) >= CLICK_TOLERANCE || Abs(ev.y-m_dragOrg.y) >= CLICK_TOLERANCE ) ) { m_dragging = true; } if (m_dragging) { m_delta = Vec2(ev.x,ev.y)-m_dragOrg; m_delta.x = m_step.x ? m_delta.x : 0; m_delta.y = m_step.y ? m_delta.y : 0; move( m_delta ); m_dragOrg = Vec2(ev.x,ev.y); return true; } break; case Event::MOVEEND: if (m_dragging) { m_dragMaybe = false; m_dragging = false; return true; } else { //translate into a raw click SDL_Event sdlEv; sdlEv.type = SDL_MOUSEBUTTONDOWN; sdlEv.button.button = SDL_BUTTON_LEFT; sdlEv.button.x = ev.x; sdlEv.button.y = ev.y; m_internalEvent = true; processEvent(sdlEv); sdlEv.type = SDL_MOUSEBUTTONUP; bool result = processEvent(sdlEv); m_internalEvent = false; return result; } break; } return false; } bool Draggable::onEvent( Event& ev ) { //fprintf(stderr,"draggable event %d %d,%d\n",ev.code,ev.x,ev.y); switch (ev.code) { case Event::UP: m_dragging = m_dragMaybe = false; move(Vec2(0,m_step.y)); return true; case Event::DOWN: m_dragging = m_dragMaybe = false; move(Vec2(0,-m_step.y)); return true; case Event::LEFT: m_dragging = m_dragMaybe = false; move(Vec2(-m_step.y,0)); return true; case Event::RIGHT: m_dragging = m_dragMaybe = false; move(Vec2(m_step.x,0)); return true; default: break; } return Panel::onEvent(ev); } void Draggable::onTick( int tick ) { if (!m_dragging && (m_delta.x != 0 || m_delta.y != 0)) { //fprintf(stderr, "Draggable::onTick glide %d, %d\n",m_delta.x,m_delta.y); move(m_delta); m_delta = m_delta * 7 / 8; } } //////////////////////////////////////////////////////////////// class ScrollContents : public Draggable { public: ScrollContents() { } }; ScrollArea::ScrollArea() : m_canvas(NULL) { m_contents = new ScrollContents(); m_contents->step(Vec2(0,5)); Container::add(m_contents,0,0); } bool ScrollArea::onEvent( Event& ev ) { return Panel::onEvent(ev); } void ScrollArea::onResize() { delete m_canvas; m_canvas = new Canvas(m_pos.size().x, m_pos.size().y); } void ScrollArea::virtualSize( const Vec2& size ) { dirty(); m_contents->sizeTo(size); } void ScrollArea::draw( Canvas& screen, const Rect& area ) { Rect cpos = m_contents->position(); if (cpos.tl.y > m_pos.tl.y) { m_contents->moveTo(Vec2(cpos.tl.x,m_pos.tl.y)); } if (cpos.br.y < m_pos.br.y && cpos.height() > m_pos.height()) { m_contents->moveTo(Vec2(cpos.tl.x,m_pos.br.y - cpos.size().y)); } #if 1 Container::draw(screen,area); #else screen.drawRect(m_pos, screen.makeColour(0xff,0,0), true); if (m_canvas) { if (m_contents->isDirty()) { Rect relArea = area - m_pos.tl; m_contents->draw(*m_canvas, relArea); } screen.drawImage(m_canvas, m_pos.tl.x, m_pos.tl.y); } #endif } void ScrollArea::add( Widget* w, int x, int y ) { m_contents->add(w,x,y); } void ScrollArea::remove( Widget* w ) { m_contents->remove(w); } void ScrollArea::empty() { m_contents->empty(); } //////////////////////////////////////////////////////////////// Container::Container() {} Container::~Container() { for (int i=0; itoString(); } indent--; return s; } void Container::move( const Vec2& by ) { WidgetParent::move(by); for (int i=0; imove(by); } } bool Container::isDirty() { if (m_dirty) { return true; } for (int i=0; iisDirty()) { return true; } } return false; } Rect Container::dirtyArea() { if (m_dirty) { return m_pos; } Rect r(false); for (int i=0; idirtyArea()); } return r; } void Container::onTick( int tick ) { for (int i=0; ionTick(tick); } } void Container::draw( Canvas& screen, const Rect& area ) { WidgetParent::draw(screen,area); for (int i=0; iposition().intersects(area)) { Rect relArea = area; relArea.clipTo(m_children[i]->position()); m_children[i]->draw(screen, relArea); m_children[i]->dirty(false); } } dirty(false); } bool Container::processEvent( SDL_Event& ev ) { switch( ev.type ) { case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: for (int i=m_children.size()-1; i>=0; --i) { Widget *c = m_children[i]; if (c->greedyMouse() || c->position().contains(Vec2(ev.button.x,ev.button.y))) { if ( c->processEvent(ev) ) { return true; } } } break; default: for (int i=m_children.size()-1; i>=0; --i) { //fprintf(stderr," ev to: %s\n",m_children[i]->toString().c_str()); if (m_children[i]->processEvent(ev)) { return true; } } break; } return Widget::processEvent(ev); } void Container::onResize() { for (int i=0; ifitToParent()) { m_children[i]->moveTo(m_pos.tl); m_children[i]->sizeTo(m_pos.size()); } } } void Container::add( Widget* w, int x, int y ) { if (x!=-9999 && y!=-9999) { Vec2 pos = m_pos.tl+Vec2(x,y); w->moveTo(pos); } w->setParent(this); m_children.append(w); onResize(); dirty(); } void Container::remove( Widget* w ) { if (w) { if (m_children.indexOf(w) >= 0) { w->setParent(NULL); m_children.erase(m_children.indexOf(w)); dirty(); delete w; } } } void Container::empty() { while (m_children.size() > 0) { remove(m_children[m_children.size()-1]); } } //////////////////////////////////////////////////////////////// Box::Box(int spacing, bool vertical) : m_spacing(spacing), m_vertical(vertical) { fitToParent(true); } void Box::onResize() { int totalw=-m_spacing, totalg=0; for (int i=0; i 0 ? extra : 0; Vec2 org(m_pos.tl); for (int i=0; imoveTo(org); int incr = totalg>0 ? m_growths[i] * extra / totalg : 0; if (m_vertical) { m_children[i]->sizeTo(Vec2(m_pos.width(),m_sizes[i]+incr)); org.y += m_sizes[i] + incr + m_spacing; } else { m_children[i]->sizeTo(Vec2(m_sizes[i]+incr,m_pos.height())); org.x += m_sizes[i] + incr + m_spacing; } } } void Box::add( Widget* w, int dim, int grow ) { Panel::add(w,0,0); m_sizes.append(dim); m_growths.append(grow); onResize(); } void Box::remove( Widget* w ) { m_sizes.erase(m_children.indexOf(w)); m_growths.erase(m_children.indexOf(w)); Panel::remove(w); onResize(); } //////////////////////////////////////////////////////////////// void Menu::addItems(const MenuItem* item) { while (item && item->event.code != Event::NOP) { m_items.append(new MenuItem(item->text,item->event)); item++; } layout(); } void Menu::addItem(const MenuItem& item) { m_items.append(new MenuItem(item.text,item.event)); layout(); } void Menu::addItem(const std::string& s, Event event) { addItem(MenuItem(s,event)); } //////////////////////////////////////////////////////////////// TabBook::TabBook() : m_count(0), m_selected(-1), m_contents(NULL) {} TabBook::~TabBook() { selectTab(-1); for (int i=0; imoveTo(Vec2((2*i-m_count)*TAB_WIDTH/2+m_pos.centroid().x,m_pos.tl.y)); } } bool TabBook::onEvent( Event& ev ) { if (ev.code == Event::SELECT && ev.y==-1) { selectTab(ev.x); return true; } return Panel::onEvent(ev); } void TabBook::draw( Canvas& screen, const Rect& area ) { Panel::draw(screen,area); Rect border = m_pos; border.tl.y += TAB_HEIGHT; screen.drawRect(border,screen.makeColour(TL_BORDER),false); } void TabBook::addTab( const std::string &s, Widget* w ) { Widget* tab = new Button(s,Event(Event::SELECT,m_count,-1)); add( tab, Rect(m_count*TAB_WIDTH,0, (m_count+1)*TAB_WIDTH,TAB_HEIGHT) ); m_tabs.append(tab); m_panels.append(w); m_count++; if ( m_selected < 0 ) { selectTab(m_count-1); } } void TabBook::selectTab( int t ) { if (m_contents) { m_tabs[m_selected]->setBg(DEFAULT_BG); m_children.erase(m_children.indexOf(m_contents)); m_contents = NULL; dirty(); } if ( t>=0 && tsetBg(SELECTED_BG); m_contents = m_panels[t]; Rect area(Vec2(1,TAB_HEIGHT+1),m_pos.size()-Vec2(1,1)); add(m_contents,area); dirty(); } } //////////////////////////////////////////////////////////////// Dialog::Dialog( const std::string &title, Event left, Event right ) { setEventMap(UI_DIALOG_MAP); alpha(100); m_greedyMouse = true; m_title = new Label(title,Font::titleFont()); m_title->alpha(100); m_content = new Panel(); m_left = m_right = NULL; m_closeRequested = false; VBox *all = new VBox(); if (title.length() > 0) { HBox *bar = new HBox(); if (left.code!=Event::NOP) { m_left = new Button("<>",left); bar->add(m_left, 100, 0); } bar->add(m_title, 64, 1); if (right.code!=Event::NOP) { if (right.code==Event::CANCEL) { m_right = new Button("<--",right); } else { m_right = new Button("X",right); } bar->add(m_right, 100, 0); } all->add(bar, DIALOG_TITLE_HEIGHT, 0); } all->add(m_content, 40, 1); add(all,0,0); } void Dialog::onTick( int tick ) { if (m_closeRequested) { m_parent->remove(this); return; } if (m_pos.tl != m_targetPos) { const int RATE = 3; //fprintf(stderr,"Dialog::onTick target %d,%d\n",m_targetPos.x,m_targetPos.y); Vec2 diff = m_targetPos - m_pos.tl; //fprintf(stderr,"Dialog::onTick diff %d,%d\n",diff.x,diff.y); if (Abs(diff.x) <= RATE && Abs(diff.y) <= RATE) { moveTo(m_targetPos); } else { moveTo((m_pos.tl*RATE+m_targetPos)/(RATE+1)); } //fprintf(stderr,"Dialog::onTick moveTo %d,%d\n",m_pos.tl.x,m_pos.tl.y); } Panel::onTick(tick); } bool Dialog::processEvent( SDL_Event& ev ) { if (ev.type == SDL_MOUSEBUTTONUP && !m_pos.contains(Vec2(ev.button.x,ev.button.y))) { // click outside the dialog to close Event closeEvent(Event::CLOSE); return onEvent(closeEvent); } // dialogs eat all raw events... Panel::processEvent(ev); return true; } bool Dialog::onEvent( Event& ev ) { //fprintf(stderr,"dialog event %d\n",ev.code); if ( ev.code == Event::CLOSE ) { close(); return true; } return Panel::onEvent(ev); } bool Dialog::close() { if (m_parent) { //fprintf(stderr,"close dialog\n"); m_closeRequested = true; } } //////////////////////////////////////////////////////////////// MenuDialog::MenuDialog( Widget* evtarget, const std::string &title, const MenuItem* items ) : Dialog(title), m_target(evtarget), m_columns(MENU_COLUMNS), m_buttonDim(BUTTON_WIDTH,BUTTON_HEIGHT) { m_box = new VBox(BUTTON_SPACING); m_box->fitToParent(true); content()->add( m_box, 0, 0 ); moveTo(Vec2(SCREEN_WIDTH-24, 0)); sizeTo(Vec2(m_buttonDim.x*MENU_COLUMNS+24,200)); m_targetPos = Vec2(SCREEN_WIDTH-m_buttonDim.x*MENU_COLUMNS-24, 0); if (items) { addItems(items); } } bool MenuDialog::onEvent( Event& ev ) { if (ev.code == Event::SELECT && ev.x >= 0 && ev.x < m_items.size() && ev.y == -777 && m_target && m_target->dispatchEvent(m_items[ev.x]->event)) { //fprintf(stderr,"MenuDialog event translate[%d] -> %d\n",ev.x,m_items[ev.x]->event.code); close(); return true; } return Dialog::onEvent(ev); } Widget* MenuDialog::makeButton( MenuItem* item, const Event& ev ) { //fprintf(stderr,"MenuDialog::makeButton %s\n",item->text.c_str()); return new Button(item->text,ev); } void MenuDialog::layout() { m_box->empty(); m_box->add( new Spacer(), 1, 4 ); Box *row = NULL; for (int i=0; iadd( new Spacer(), 1, 1 ); row = new HBox(BUTTON_SPACING); row->add( new Spacer(), 1, 1 ); m_box->add(row,m_buttonDim.y,0); } row->add( makeButton(m_items[i], Event(Event::SELECT,i,-777)), m_buttonDim.x,0); } if (row) { if (m_items.size()%m_columns > 0) { for (int i=0; iadd( new Spacer(), m_buttonDim.x, 0 ); } } row->add( new Spacer(), 1, 1 ); } m_box->add( new Spacer(), 1, 1 ); int h = (m_items.size()+m_columns-1)/m_columns * (m_buttonDim.y+BUTTON_SPACING) + DIALOG_TITLE_HEIGHT + 20; sizeTo( Vec2(m_pos.width(), h) ); } //////////////////////////////////////////////////////////////// MessageBox::MessageBox( const std::string& text ) { Box * vbox = new VBox(); RichText *rt = new RichText(text); vbox->add( rt, 100, 100 ); content()->add( vbox, 0, 0 ); sizeTo(Vec2(300,150)); m_targetPos = Vec2(250,100); } numptyphysics-0.2+svn157/Dialogs.cpp0000644000175000017500000005060012264274577016466 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "Dialogs.h" #include "Ui.h" #include "Canvas.h" #include "Font.h" #include "Config.h" #include "Game.h" #include "Scene.h" const char * const HELP_TEXT = "

What To Do?

" "Harness gravity with your crayon and set about creating blocks, ramps, levers, pulleys and whatever else you fancy to get the little red thing to the little yellow thing.

" "

Drawing Stuff

" "

Strokes

" "When you draw on the screen you create strokes. Each stroke is like a rigid piece of wire with a mass proportional to its length. A closed stroke is just a wire bent into a shape, it has no substance apart from its perimeter." "

Joints

" "The ends of a stroke can (and will) join onto other strokes when drawn near enough to another stroke. These joints are pivots so you can use this to build levers, pendulums, bicycles and other mechanical wonders. Jointed strokes can swing past each other without colliding. Join both ends to make a rigid structure." "

Different Strokes

" "The Tool Menu allows you to create some special types of strokes:

" "

  • Ground -- a fixed stroke that does not move.

    " "

  • Sleepy -- a stroke that does not move until hit by another stroke.

    " "

  • Decor -- a decorative stroke that does not have a physical presence.

    " "

    Cheating

    " "There's no such thing as cheating - it's all in your head. Sometimes it's handy to pause the physics when making something complicated. This is by no means necessary but try making a bicycle with live physics. However it is commonly held that changing the pen colour and drawing a red thing right on top of the yellow thing is almost certainly a cheat's solution.

    " "

    Controls

    " "Basic drawing is with finger or stylus.

    " "Undo by tapping the proximity sensor or one of the undo Shortcut keys.

    " "Swipe from the right for the Play Options.

    " "Swipe from the left for the Game Options.

    " "

    Shortcuts

    " "
  • space or enter == Pause.

    " "

  • U, backspace, or down arrow -- Undo.

    " "

  • R or up arrow -- Reset.

    " "

  • N or right arrow -- Skip to next level.

    " "

  • P or left arrow -- Go back to previous level.

    " "

    Play Options

    " "
  • Pen -- change the colour of your pen.

    " "

  • Tool -- modify the how your strokes work.

    " "

  • Pause -- freeze time in the physics simulation.

    " "

  • Resume -- unfreeze time in the physics simulation.

    " "

  • Undo -- remove the last stroke.

    " "

    Game Options

    " "
  • Menu -- access the Main Menu.

    " "

  • Reset -- reset the level to its original state.

    " "

  • Skip -- skip to the next level.

    " "

  • Edit -- edit this level or create a new level.

    " ; //////////////////////////////////////////////////////////////// struct MenuPage : public Panel { MenuPage(bool closeable=false) { alpha(100); Box *vbox = new VBox(); m_content = new Panel(); vbox->add( m_content, 100, 1 ); add(vbox); fitToParent(true); } const char* name() {return "MenuPage";} Panel *m_content; }; class LevelLauncher : public Dialog { public: LevelLauncher(int l, Canvas* c) { Box *vbox1 = new VBox(); vbox1->add( new Spacer(), 100, 1 ); Box *hbox = new HBox(); hbox->add( new Spacer(), 10, 2 ); IconButton *icon = new IconButton("level", "", Event::NOP); icon->canvas(c, false); hbox->add( icon, 300, 0 ); hbox->add( new Spacer(), 10, 1 ); Box *vbox = new VBox(); vbox->add( new Spacer(), 10, 1 ); vbox->add( new IconButton("Review","", Event(Event::REPLAY,l)), BUTTON_HEIGHT, 1 ); vbox->add( new Spacer(), 10, 0 ); vbox->add( new IconButton("Play","", Event(Event::PLAY,l)), BUTTON_HEIGHT, 1 ); vbox->add( new Spacer(), 10, 1 ); hbox->add( vbox, BUTTON_WIDTH, 0 ); hbox->add( new Spacer(), 10, 2 ); vbox1->add(hbox, 200, 0); vbox1->add( new Spacer(), 100, 1 ); content()->add(vbox1); sizeTo(Vec2(SCREEN_WIDTH,SCREEN_HEIGHT)); moveTo(Vec2(0,0)); m_targetPos = Vec2( 0,0 ); } }; class LevelSelector : public MenuPage { static const int THUMB_COUNT = 32; GameControl* m_game; Levels* m_levels; int m_collection; int m_dispbase; int m_dispcount; IconButton* m_thumbs[THUMB_COUNT]; ScrollArea* m_scroll; public: LevelSelector(GameControl* game, int initialLevel) : m_game(game), m_levels(game->m_levels), m_dispbase(0), m_dispcount(0), m_collection(0) { m_scroll = new ScrollArea(); m_scroll->fitToParent(true); m_scroll->virtualSize(Vec2(SCREEN_WIDTH,SCREEN_HEIGHT)); m_content->add(m_scroll,0,0); fitToParent(true); int levelInC; m_collection = m_levels->collectionFromLevel(initialLevel,&levelInC); setCollection(m_collection, levelInC); } void setCollection(int c, int levelInC) { if (c < 0 || c >=m_levels->numCollections()) { return; } m_collection = c; m_dispbase = 0; m_dispcount = m_levels->collectionSize(c); m_scroll->virtualSize(Vec2(SCREEN_WIDTH,150+(SCREEN_HEIGHT/ICON_SCALE_FACTOR+40)*((m_dispcount+2)/3))); m_scroll->empty(); Box *vbox = new VBox(); vbox->add( new Spacer(), 10, 0 ); Box *hbox = new HBox(); Widget *w = new Button("<<",Event::PREVIOUS); w->border(false); hbox->add( w, BUTTON_WIDTH, 0 ); hbox->add( new Spacer(), 10, 0 ); Label *title = new Label(m_levels->collectionName(c)); title->font(Font::headingFont()); title->alpha(100); hbox->add( title, BUTTON_WIDTH, 4 ); w= new Button(">>",Event::NEXT); w->border(false); hbox->add( new Spacer(), 10, 0 ); hbox->add( w, BUTTON_WIDTH, 0 ); vbox->add( hbox, 64, 0 ); vbox->add( new Spacer(), 10, 0 ); hbox = new HBox(); hbox->add( new Spacer(), 0, 1 ); int accumw = 0; for (int i=0; i= SCREEN_WIDTH) { vbox->add(hbox, SCREEN_HEIGHT/ICON_SCALE_FACTOR+30, 4); vbox->add( new Spacer(), 10, 0 ); hbox = new HBox(); hbox->add( new Spacer(), 0, 1 ); accumw = SCREEN_WIDTH / ICON_SCALE_FACTOR; } m_thumbs[i] = new IconButton("--","",Event(Event::PLAY, //SELECT, m_levels->collectionLevel(c,i))); m_thumbs[i]->font(Font::blurbFont()); m_thumbs[i]->setBg(SELECTED_BG); m_thumbs[i]->border(false); hbox->add( m_thumbs[i], SCREEN_WIDTH / ICON_SCALE_FACTOR, 0 ); hbox->add( new Spacer(), 0, 1 ); } vbox->add(hbox, SCREEN_HEIGHT/ICON_SCALE_FACTOR+30, 4); vbox->add( new Spacer(), 110, 10 ); m_scroll->add(vbox,0,0); for (int i=0; icollectionLevel(c,i); int size = m_levels->load( level, buf, sizeof(buf) ); if ( size && scene.load( buf, size ) ) { scene.draw( temp, FULLSCREEN_RECT ); m_thumbs[i]->text( m_levels->levelName(level) ); m_thumbs[i]->canvas( temp.scale( ICON_SCALE_FACTOR ) ); m_thumbs[i]->transparent(m_dispbase+i!=levelInC); } } } bool onEvent(Event& ev) { switch (ev.code) { case Event::PREVIOUS: setCollection(m_collection-1,0); return true; case Event::NEXT: setCollection(m_collection+1,0); return true; // case Event::SELECT: // for (int i=0; itransparent(true); // } // m_thumbs[m_dispbase+ev.x]->transparent(false); // m_game->gotoLevel(m_levels->collectionLevel(m_collection,m_dispbase+ev.x)); // add( new LevelLauncher(m_levels->collectionLevel(m_collection,m_dispbase+ev.x), m_thumbs[m_dispbase+ev.x]->canvas()) ); // //Event closeEvent(Event::CLOSE); // //m_parent->dispatchEvent(closeEvent); // return true; } return MenuPage::onEvent(ev); } }; class HelpPage : public MenuPage { public: HelpPage() { Box *vbox = new VBox(); ScrollArea* scroll = new ScrollArea(); scroll->fitToParent(true); RichText *text = new RichText(HELP_TEXT); scroll->virtualSize(Vec2(SCREEN_WIDTH,text->layout(SCREEN_WIDTH))); text->fitToParent(true); text->alpha(100); scroll->add(text,0,0); vbox->add( scroll, 0, 1 ); vbox->add( new Button("http://numptyphysics.garage.maemo.org",Event::SELECT), 36, 0 ); m_content->add(vbox,0,0); } bool onEvent(Event& ev) { if (ev.code == Event::SELECT) { OS->openBrowser("http://numptyphysics.garage.maemo.org"); return true; } return Panel::onEvent(ev); } }; struct FrontPage : public MenuPage { FrontPage() : MenuPage(true) { m_content->add( new IconButton("CHOOSE","choose.png", Event(Event::MENU,1)), Rect(125,100,275,300) ); m_content->add( new IconButton("PLAY","play.png", Event(Event::MENU,2)), Rect(325,100,475,300) ); m_content->add( new IconButton("HELP","help.png", Event(Event::MENU,3)), Rect(525,100,675,300) ); fitToParent(true); } }; class MainMenu : public Dialog { GameControl* m_game; int m_chosenLevel; public: MainMenu(GameControl* game) : Dialog("NUMPTY PHYSICS",Event::UNDO,Event::QUIT), m_game(game), m_chosenLevel(game->m_level) { content()->add(new FrontPage()); m_targetPos = Vec2( 0, 0 ); sizeTo(Vec2(SCREEN_WIDTH,SCREEN_HEIGHT)); } bool onEvent( Event& ev ) { switch (ev.code) { case Event::MENU: switch(ev.x) { case 1: content()->empty(); content()->add(new LevelSelector(m_game, m_chosenLevel)); rightControl()->text("<--"); rightControl()->event(Event::CANCEL); break; case 2: close(); break; case 3: content()->empty(); content()->add(new HelpPage()); rightControl()->text("<--"); rightControl()->event(Event::CANCEL); break; } return true; case Event::SELECT: fprintf(stderr,"select level %d\n",ev.x); m_chosenLevel = ev.x; content()->empty(); content()->add(new LevelLauncher(m_chosenLevel,NULL)); rightControl()->text("<--"); rightControl()->event(Event(Event::MENU,1)); return true; case Event::CANCEL: content()->empty(); content()->add(new FrontPage()); rightControl()->text("X"); rightControl()->event(Event::QUIT); return true; case Event::PLAY: case Event::REPLAY: close(); break; default: break; } return Dialog::onEvent(ev); } }; Widget* createMainMenu(GameControl* game) { return new MainMenu(game); } //////////////////////////////////////////////////////////////// static const MenuItem playNormalOpts[] = { MenuItem("pen:pen.png",Event(Event::SELECT,1,-1)), MenuItem("tools:choose.png",Event(Event::SELECT,2,-1)), MenuItem("pause:pause.png",Event::PAUSE), MenuItem("undo:undo.png",Event::UNDO), MenuItem("",Event::NOP) }; static const MenuItem playPausedOpts[] = { MenuItem("pen:pen.png",Event(Event::SELECT,1,-1)), MenuItem("tools:choose.png",Event(Event::SELECT,2,-1)), MenuItem("resume:play.png",Event::PAUSE), MenuItem("undo:undo.png",Event::UNDO), MenuItem("",Event::NOP) }; class OptsPopup : public MenuDialog { public: OptsPopup() : MenuDialog(this, "", NULL) { m_buttonDim = Vec2(90,90); } virtual Widget* makeButton( MenuItem* item, const Event& ev ) { std::string file = item->text.substr(item->text.find(':')+1); std::string label = item->text.substr(0,item->text.find(':')); return new IconButton(label,file,ev); } }; class PlayOpts : public OptsPopup { public: PlayOpts(GameControl* game ) { addItems(game->m_paused ? playPausedOpts : playNormalOpts); sizeTo(Vec2(140,480)); moveTo(Vec2(SCREEN_WIDTH,0)); m_targetPos = Vec2(SCREEN_WIDTH-140,0); } }; Widget* createPlayOpts(GameControl* game ) { return new PlayOpts(game); } //////////////////////////////////////////////////////////////// static const MenuItem editNormalOpts[] = { MenuItem("menu:close.png",Event::MENU), MenuItem("reset:reset.png",Event::RESET), MenuItem("skip:forward.png",Event::NEXT), MenuItem("edit:share.png",Event::EDIT), MenuItem("",Event::NOP) }; static const MenuItem editDoneOpts[] = { MenuItem("menu:close.png",Event::MENU), MenuItem("reset:reset.png",Event::RESET), MenuItem("done:share.png",Event::DONE), MenuItem("",Event::NOP) }; class EditOpts : public OptsPopup { public: EditOpts(GameControl* game ) { addItems(game->m_edit ? editDoneOpts : editNormalOpts); sizeTo(Vec2(140,480)); moveTo(Vec2(-140,0)); m_targetPos = Vec2(0,0); } }; Widget* createEditOpts(GameControl* game ) { return new EditOpts(game); } //////////////////////////////////////////////////////////////// class ColourButton : public Button { public: ColourButton(const std::string& s, int c, const Event& ev) : Button(s,ev) { m_bg = c; transparent(false); } }; class ColourDialog : public MenuDialog { public: ColourDialog( int num, const int* cols ) : MenuDialog(this,"pen"), m_colours(cols) { m_columns = 4; m_buttonDim = Vec2(BUTTON_HEIGHT, BUTTON_HEIGHT); for (int i=0; itext,m_colours[item->event.y],ev); w->font(Font::titleFont()); return w; } const int* m_colours; }; Widget* createColourDialog(GameControl* game, int n, const int* cols) { return new ColourDialog(n,cols); } //////////////////////////////////////////////////////////////// static const MenuItem toolOpts[] = { MenuItem("ground:tick.png",Event(Event::SELECT,0)), MenuItem("sleepy:tick.png",Event(Event::SELECT,1)), MenuItem("decor:tick.png",Event(Event::SELECT,2)), MenuItem("move:tick.png",Event(Event::SELECT,3)), MenuItem("erase:tick.png",Event(Event::SELECT,4)), MenuItem("",Event::NOP) }; class ToolDialog : public MenuDialog { public: ToolDialog(GameControl* game) : MenuDialog(this, "tools",NULL), m_game(game) { addItems( toolOpts ); updateTicks(); } Widget* makeButton( MenuItem* item, const Event& ev ) { std::string file = item->text.substr(item->text.find(':')+1); std::string label = item->text.substr(0,item->text.find(':')); IconButton *w = new IconButton(label,file,ev); w->align(1); m_opts.append(w); return w; } void empty() { m_opts.empty(); } void remove( Widget* w ) { if (w && m_opts.indexOf((IconButton*)w) >= 0) { m_opts.erase(m_opts.indexOf((IconButton*)w)); } } void updateTicks() { for (int i=0; itext() == "ground") { tick = m_game->m_strokeFixed; } else if (m_opts[i]->text() == "sleepy") { tick = m_game->m_strokeSleep; } else if (m_opts[i]->text() == "decor") { tick = m_game->m_strokeDecor; } else if (m_opts[i]->text() == "move") { tick = m_game->m_clickMode==1; } else if (m_opts[i]->text() == "erase") { tick = m_game->m_clickMode==2; } m_opts[i]->icon(tick ? "tick.png" : "blank.png"); } } bool onEvent( Event& ev ) { switch (ev.code) { case Event::SELECT: switch(ev.x) { case 0: m_game->m_strokeFixed = !m_game->m_strokeFixed; m_game->m_strokeSleep = false; m_game->m_strokeDecor = false; break; case 1: m_game->m_strokeFixed = false; m_game->m_strokeSleep = !m_game->m_strokeSleep; m_game->m_strokeDecor = false; break; case 2: m_game->m_strokeFixed = false; m_game->m_strokeSleep = false; m_game->m_strokeDecor = !m_game->m_strokeDecor; break; case 3: m_game->clickMode((m_game->m_clickMode==1)?0:1); break; case 4: m_game->clickMode((m_game->m_clickMode==2)?0:2); break; default: return MenuDialog::onEvent(ev); } updateTicks(); return true; } return MenuDialog::onEvent(ev); } private: GameControl *m_game; Array m_opts; }; Widget* createToolDialog(GameControl* game) { return new ToolDialog(game); } //////////////////////////////////////////////////////////////// class IconDialog : public MenuDialog { public: IconDialog( const std::string &title, const MenuItem* items=NULL ) : MenuDialog(this,title) { // add items here to use correct buttons addItems(items); } Widget* makeButton( MenuItem* item, const Event& ev ) { fprintf(stderr,"IconDialog::makeButton %s\n",item->text.c_str()); try { return new IconButton(item->text,item->text+".png",ev); } catch (...) { return new Button(item->text,ev); } } }; Widget *createIconDialog( const std::string &title, const MenuItem* items ) { return new IconDialog( title, items ); } //////////////////////////////////////////////////////////////// class NextLevelDialog : public Dialog { GameControl* m_game; public: NextLevelDialog(GameControl* game) : Dialog("BRAVO!!!",Event::NOP,Event::MENU), m_game(game) { rightControl()->text("<--"); char buf[32]; const GameStats& stats = m_game->stats(); int time = (stats.endTime - stats.startTime)/1000; int h = time/60/60; int m = time/60 - h*60; int s = time - m*60; Box *vbox = new VBox(); vbox->add(new Spacer(),10,1); if (h > 0) { sprintf(buf,"time: %dh %dm %ds",m,h,s); } else if (m > 0) { int m = time/60/1000; sprintf(buf,"time: %dm %ds",m,s); } else { sprintf(buf,"time: %ds",s); } vbox->add(new Label(buf),20,0); sprintf(buf,"%d stroke%s",stats.strokeCount,stats.strokeCount==1?"":"s"); vbox->add(new Label(buf),20,0); if (stats.pausedStrokes) { sprintf(buf," (%d while paused)",stats.pausedStrokes); vbox->add(new Label(buf),20,0); } sprintf(buf,"%d undo%s",stats.undoCount,stats.undoCount==1?"":"s"); vbox->add(new Label(buf),20,0); vbox->add(new Spacer(),10,1); Box *hbox2 = new HBox(); hbox2->add(new Spacer(),20,0); hbox2->add(new Button("review",Event(Event::REPLAY,game->m_level)),BUTTON_WIDTH,0); hbox2->add(new Spacer(),1,1); hbox2->add(new Button("again",Event::RESET),BUTTON_WIDTH,0); hbox2->add(new Spacer(),1,1); hbox2->add(new Button("next",Event::NEXT),BUTTON_WIDTH,0); hbox2->add(new Spacer(),20,0); vbox->add(hbox2,BUTTON_HEIGHT,0); vbox->add(new Spacer(),10,0); content()->add(vbox,0,0); m_targetPos = Vec2( 150, 70); sizeTo(Vec2(500,240)); } }; Widget *createNextLevelDialog( GameControl* game ) { return new NextLevelDialog(game); } //////////////////////////////////////////////////////////////// class EditDoneDialog : public Dialog { GameControl* m_game; public: EditDoneDialog(GameControl* game) : Dialog("Exit Editor",Event::NOP,Event::CLOSE), m_game(game) { Box *vbox = new VBox(); vbox->add(new Spacer(),10,1); vbox->add(new Label("Save level?"),20,0); vbox->add(new Spacer(),10,1); Box *hbox2 = new HBox(); hbox2->add(new Spacer(),20,0); hbox2->add(new Button("cancel",Event::CLOSE),BUTTON_WIDTH,0); hbox2->add(new Spacer(),1,1); hbox2->add(new Button("exit",Event::EDIT),BUTTON_WIDTH,0); hbox2->add(new Spacer(),1,1); hbox2->add(new Button("save",Event::SAVE),BUTTON_WIDTH,0); hbox2->add(new Spacer(),20,0); vbox->add(hbox2,BUTTON_HEIGHT,0); vbox->add(new Spacer(),10,0); content()->add(vbox,0,0); m_targetPos = Vec2( 150, 70); sizeTo(Vec2(500,240)); } bool onEvent( Event& ev ) { close(); return false; } }; Widget *createEditDoneDialog( GameControl* game ) { return new EditDoneDialog(game); } numptyphysics-0.2+svn157/Script.h0000644000175000017500000000442412264274560016010 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2009 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef SCRIPT_H #define SCRIPT_H #include "Array.h" #include "Path.h" #include class Scene; struct ScriptEntry { enum Op { OP_NEW, OP_DELETE, OP_EXTEND, OP_MOVE, OP_ACTIVATE, OP_PAUSE, OP_GOAL }; int t; Op op; int stroke; int arg1; int arg2; Vec2 pt; ScriptEntry( int _t, Op _op, int _stroke, int _arg1, int _arg2, const Vec2& _pt ) : t(_t), op(_op), stroke(_stroke), arg1(_arg1), arg2(arg2), pt(_pt) {} ScriptEntry() {}; ScriptEntry( const std::string& str ); std::string asString(); }; class ScriptLog : public Array { public: std::string asString( int i ); void append( int tick, ScriptEntry::Op op, int stroke=-1, int arg1=-1, int arg2=-1, const Vec2& pt=Vec2(-1,-1) ); void append( const std::string& str ); using Array::append; }; class ScriptRecorder { public: ScriptRecorder(); void start(ScriptLog* log); void stop(); void tick(bool isPaused); void newStroke( const Path& p, int colour, int attribs ); void deleteStroke( int index ); void extendStroke( int index, const Vec2& pt ); void moveStroke( int index, const Vec2& pt ); void activateStroke( int index ); void goal( int goalNum ); ScriptLog* getLog() { return m_log; } private: bool m_running; bool m_isPaused; ScriptLog *m_log; int m_lastTick; }; class ScriptPlayer { public: void start( const ScriptLog* log, Scene* scene ); bool isRunning() const; void stop(); bool tick(); private: bool m_playing; bool m_isPaused; const ScriptLog* m_log; Scene *m_scene; int m_index; int m_lastTick; }; #endif //SCRIPT_H numptyphysics-0.2+svn157/Http.cpp0000644000175000017500000001047712264274577016033 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include #include #include #include "Http.h" #include "happyhttp.h" using namespace happyhttp; static void http_begin_cb( const Response* r, void* userdata ) { switch ( r->getstatus() ) { case OK: ((Http*)userdata)->m_size = 0; break; default: //fprintf(stderr,"http status=%d %s\n",r->getstatus(),r->getreason()); ((Http*)userdata)->m_err = r->getreason(); ((Http*)userdata)->m_size = -1; break; } } static void http_get_cb( const Response* r, void* userdata, const unsigned char* data, int numbytes ) { fwrite( data, 1, numbytes, ((Http*)userdata)->m_file ); ((Http*)userdata)->m_size += numbytes; } static void http_post_cb( const Response* r, void* userdata, const unsigned char* data, int numbytes ) { //printf("received %d bytes [%s]\n",numbytes,data); } static void http_complete_cb( const Response* r, void* userdata ) { if ( r->getreason() ) { ((Http*)userdata)->m_err = r->getreason(); } if ( r->getheader("NP-Upload-Id") ) { ((Http*)userdata)->m_npid = r->getheader("NP-Upload-Id"); } } static bool parseUri( const char * uri, char* outHost, int * outPort, char* outPath ) { if ( strncmp(uri,"http://",strlen("http://"))==0 ) { uri += strlen("http://"); } strcpy(outHost,uri); char* e = strchr(outHost,'/'); *outPort = 80; if ( e ) { *e = '\0'; } e = strchr(outHost,':'); if ( e ) { *e = '\0'; *outPort=atoi(e+1); } strcpy( outPath, strchr(uri,'/') ); //fprintf(stderr,"Http::get host=%s port=%d file=%s\n", // outHost,*outPort,outPath); return true; } bool Http::get( const char* uri, const char* file ) { char host[256]; char path[256]; int port; m_file = fopen( file, "wt" ); m_size = -1; if ( parseUri( uri, &host[0], &port, &path[0] ) && path[0] && host[0] ) { try { Connection con( host, port ); con.setcallbacks( http_begin_cb, http_get_cb, http_complete_cb, this ); con.request("GET",path,NULL,NULL,0); while ( con.outstanding() ) { //fprintf(stderr,"http_get pump\n"); con.pump(); } } catch ( Wobbly w ) { fprintf(stderr,"http_get wobbly: %s\n",w.what()); } } fclose ( m_file ); free( host ); return m_size > 0; } bool Http::post( const char* uri, const char*putname, const char* putfile, const char* otherargs ) { char host[256]; char path[256]; char data[64*1024]; int port; static char hex[16+1] = "0123456789ABCDEF"; if ( otherargs ) { sprintf(data,"%s&%s=",otherargs,putname); } else { sprintf(data,"%s=",putname); } char *buf = &data[strlen(data)]; m_file = fopen( putfile, "rt" ); while ( !feof(m_file) ) { unsigned char c = fgetc( m_file ); switch ( c ) { case 'a'...'z': case 'A'...'Z': case '0'...'9': *buf++ = c; break; default: *buf++ = '%'; *buf++ = hex[c>>4]; *buf++ = hex[c&0xf]; break; } //m_size = fread(data,1,sizeof(data),m_file); } fclose ( m_file ); m_size = buf - &data[0]; const char* headers[] = { "Connection", "close", "Content-type", "application/x-www-form-urlencoded", "Accept", "text/plain", 0 }; if ( parseUri( uri, &host[0], &port, &path[0] ) ) { try { Connection con( host, port ); con.setcallbacks( http_begin_cb, http_post_cb, http_complete_cb, this ); con.request("POST",path,headers,(unsigned char*)data,m_size); while ( con.outstanding() ) { //fprintf(stderr,"http::post pump\n"); con.pump(); } } catch ( Wobbly w ) { fprintf(stderr,"http_get wobbly: %s\n",w.what()); } } } // response std::string Http::errorMessage() { return m_err; } std::string Http::getHeader( const char* name ) { return m_npid; } numptyphysics-0.2+svn157/install-sh0000644000175000017500000002244112264274560016373 0ustar warp10warp10#!/bin/sh # install - install a program, script, or datafile scriptversion=2004-04-01.17 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename= transform_arg= instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= usage="Usage: $0 [OPTION]... SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 -d DIRECTORIES... In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default. In the second, create the directory path DIR. Options: -b=TRANSFORMBASENAME -c copy source (using $cpprog) instead of moving (using $mvprog). -d create directories instead of installing files. -g GROUP $chgrp installed files to GROUP. -m MODE $chmod installed files to MODE. -o USER $chown installed files to USER. -s strip installed files (using $stripprog). -t=TRANSFORM --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. test -n "$dir_arg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then instcmd=: chmodcmd= else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" || lasterr=$? # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test ! -d "$pathcomp" && { (exit ${lasterr-1}); exit; } fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $instcmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else # If we're going to rename the final executable, determine the name now. if test -z "$transformarg"; then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename \ | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename. test -z "$dstfile" && dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: numptyphysics-0.2+svn157/AUTHORS0000644000175000017500000000010512264274560015433 0ustar warp10warp10Tim Edmonds Thomas Perl numptyphysics-0.2+svn157/Dialogs.h0000644000175000017500000000216212264274560016123 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef DIALOG_H #define DIALOG_H #include class Widget; class MenuItem; class GameControl; Widget* createMainMenu(GameControl* game); Widget* createPlayOpts(GameControl* game); Widget* createEditOpts(GameControl* game); Widget* createColourDialog(GameControl* game, int n, const int* cols); Widget* createToolDialog(GameControl* game); Widget *createIconDialog( const std::string &title, const MenuItem* items ); Widget *createNextLevelDialog( GameControl* game ); Widget *createEditDoneDialog( GameControl* game ); #endif //DIALOG_H numptyphysics-0.2+svn157/Config.h0000644000175000017500000000705512264274560015754 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef CONFIG_H #define CONFIG_H #include #include "Common.h" #include "Os.h" #define WORLD_WIDTH 800 #define WORLD_HEIGHT 480 #define PIXELS_PER_METREf 10.0f #define GRAVITY_ACCELf 9.8f // m/s/s #define GRAVITY_FUDGEf 5.0f #define CLOSED_SHAPE_THREHOLDf 0.4f #define SIMPLIFY_THRESHOLDf 1.0f //PIXELs //(1.0/PIXELS_PER_METREf) #define MULTI_VERTEX_LIMIT 64 #define ITERATION_RATE 60 //fps #define SOLVER_ITERATIONS 8 #ifdef USE_HILDON //maemo # define MIN_RENDER_RATE 10 //fps # define MAX_RENDER_RATE 60 //fps # define AVG_RENDER_RATE 20 //fps # define JOINT_TOLERANCE 4.0f //PIXELs # define SELECT_TOLERANCE 8.0f //PIXELS_PER_METREf) # define CLICK_TOLERANCE 16 //PIXELs # define MAEMO_VERSION 5 //4 #else # define MIN_RENDER_RATE 10 //fps # define MAX_RENDER_RATE ITERATION_RATE //fps # define AVG_RENDER_RATE ((MIN_RENDER_RATE+MAX_RENDER_RATE)/2) # define JOINT_TOLERANCE 4.0f //PIXELs # define SELECT_TOLERANCE 5.0f //PIXELS_PER_METREf) # define CLICK_TOLERANCE 4 //PIXELs #endif #define ITERATION_TIMESTEPf (1.0f / (float)ITERATION_RATE) #define HIDE_STEPS (AVG_RENDER_RATE*4) #ifndef INSTALL_BASE_PATH # if MAEMO_VERSION >= 5 # define INSTALL_BASE_PATH "/opt/numptyphysics" # else # define INSTALL_BASE_PATH "/usr/share/numptyphysics" # endif #endif #define DEFAULT_LEVEL_PATH INSTALL_BASE_PATH #define DEFAULT_RESOURCE_PATH DEFAULT_LEVEL_PATH #ifndef USER_BASE_PATH # ifdef USE_HILDON //maemo # if MAEMO_VERSION >= 5 # define USER_BASE_PATH "MyDocs/Games/NumptyPhysics" # else # define USER_BASE_PATH "MyDocs/.games/NumptyPhysics" # endif # else # ifdef WIN32 # define USER_BASE_PATH ".\\data" # else # define USER_BASE_PATH ".numptyphysics" # endif # endif #endif #define USER_LEVEL_PATH USER_BASE_PATH #define DEMO_TEMP_FILE "/tmp/demo.nph" #define HTTP_TEMP_FILE "/tmp/http.nph" #define SEND_TEMP_FILE "/tmp/mailto:numptyphysics@gmail.com.nph" #define ICON_SCALE_FACTOR 6 #define VIDEO_FPS 20 #define VIDEO_MAX_LEN 20 //seconds extern Rect FULLSCREEN_RECT; extern const Rect BOUNDS_RECT; extern int SCREEN_WIDTH; extern int SCREEN_HEIGHT; extern const int brushColours[]; extern const int NUM_BRUSHES; #define RED_BRUSH 0 #define YELLOW_BRUSH 1 #define DEFAULT_BRUSH 2 #define DEFAULT_BG 0x303030 #define DEFAULT_FG 0xf8fcf8 #define BUTTON_BG 0x383c38 #define SELECTED_BG 0x704040 #define TL_BORDER 0x909490 #define BR_BORDER 0x182018 #define BUTTON_WIDTH 140 #define BUTTON_HEIGHT 60 #define BUTTON_SPACING 8 #define TAB_WIDTH 160 #define TAB_HEIGHT 40 #define DIALOG_TITLE_HEIGHT 48 #define MENU_COLUMNS 1 class Font; class Config { public: static const std::string& userDataDir() { static const std::string d = std::string(getenv("HOME")) + Os::pathSep + USER_BASE_PATH; return d; } static const std::string& planetRoot() { static const std::string d("http://10.10.10.10:8080"); return d; } static std::string findFile( const std::string& name ); static Font* font(); }; #endif //CONFIG_H numptyphysics-0.2+svn157/create-win32-dist.sh0000644000175000017500000000115412264274560020070 0ustar warp10warp10#!/bin/sh -x # simple script to prepare numptywin32 for release # folder in which we create the binary distro DIST=NumptyPhysicsWin32 # shared libraries to be put into the dist DLLS="SDL.dll SDL_image.dll jpeg.dll libpng12-0.dll zlib1.dll" # level files and data files DATA="*.jpg *.png *.nph" # misc files to be placed into the distro MISC="README.win32" # binary executable, when compiled BINARY=Game.exe # target name in distro folder (without .exe) NAME=NumptyPhysics make rm -rf $DIST mkdir $DIST mkdir $DIST/data cp i686/$BINARY $DIST/$NAME.exe cp $DATA $DIST/data cp $DLLS $DIST cp $MISC $DIST find $DIST numptyphysics-0.2+svn157/Worker.cpp0000644000175000017500000000265612264274560016355 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "Worker.h" #include "Event.h" #include WorkerBase::WorkerBase( int (*func)(void*) ) : m_func(func), m_thread(NULL) { } WorkerBase::~WorkerBase() { if (m_thread) { //TODO need cleaner termination/forget - worker may leak resources SDL_KillThread(m_thread); } } void WorkerBase::start() { if (m_func) { m_thread = SDL_CreateThread(m_func, this); } } void WorkerBase::wait() { if (m_thread) { SDL_WaitThread(m_thread,NULL); } } bool WorkerBase::done() { return m_thread == NULL; } int WorkerBase::startThread(void* wbase) { ((WorkerBase*)wbase)->main(); ((WorkerBase*)wbase)->m_thread = NULL; // Create a user event to signal completion SDL_Event event; event.type = SDL_USEREVENT; event.user.code = WORKER_DONE; event.user.data1 = wbase; event.user.data2 = 0; SDL_PushEvent(&event); } numptyphysics-0.2+svn157/configure.in0000644000175000017500000000467112264274560016710 0ustar warp10warp10AC_INIT AC_CONFIG_SRCDIR([README]) AM_INIT_AUTOMAKE(numptyphysics,0.3) #AM_CONFIG_HEADER(amconfig.h) AC_PROG_CC AC_PROG_CXX AC_PROG_MAKE_SET AC_PROG_INSTALL AC_PROG_RANLIB # Check for SDL AC_CHECK_HEADER( SDL/SDL.h, AC_DEFINE( [HAVE_LIBSDL], [], Define to 1 if you have the header file. ) SDL_LIBS="-lSDL" sdl=yes, AC_MSG_ERROR([*** no SDL/SDL.h - SDL not found]) ) AC_SUBST(SDL_CFLAGS) AC_SUBST(SDL_LIBS) # Check for SDL_image library AC_CHECK_LIB(SDL_image, IMG_LoadPNG_RW, , AC_MSG_ERROR([ *** Unable to find SDL_image libary with PNG support ])) AC_CHECK_LIB(SDL_ttf, TTF_OpenFont, , AC_MSG_ERROR([ *** Unable to find SDL_ttf libary ])) AC_ARG_ENABLE(hildon, [ --disable-hildon build without maemo/hildon support], enable_hildon=$enableval, enable_hildon=yes) if test "x${enable_hildon}" = "xyes" ; then # PKG_CHECK_MODULES(HILDON, [hildon-1 hildon-fm-2 libossoemailinterface], PKG_CHECK_MODULES(HILDON, [hildon-1 dbus-1 libosso], [enable_hildon=yes], [enable_hildon=no]) fi if test "x${enable_hildon}" = "xyes" ; then AC_DEFINE( [USE_HILDON],[], using hildon ) desktopentrydir=`$PKG_CONFIG osso-af-settings --variable=desktopentrydir` serviceentrydir=`$PKG_CONFIG osso-af-settings --variable=dbusservicedir` numptyphysicsdir=/opt/numptyphysics icon_26x26dir=$datadir/icons/hicolor/26x26/hildon icon_34x34dir=$datadir/icons/hicolor/34x34/hildon icon_40x40dir=$datadir/icons/hicolor/40x40/hildon icon_50x50dir=$datadir/icons/hicolor/50x50/hildon icon_64x64dir=$datadir/icons/hicolor/64x64/hildon icon_scalabledir=$datadir/icons/hicolor/scalable/hildon AC_SUBST(HILDON_CFLAGS) AC_SUBST(HILDON_LIBS) else desktopentrydir=/usr/share/applications serviceentrydir=$datadir/numptyphysics numptyphysicsdir=$datadir/numptyphysics icon_26x26dir=$datadir/icons/hicolor/26x26/apps icon_34x34dir=$datadir/icons/hicolor/34x34/apps icon_40x40dir=$datadir/icons/hicolor/40x40/apps icon_50x50dir=$datadir/icons/hicolor/50x50/apps icon_64x64dir=$datadir/icons/hicolor/64x64/apps icon_scalabledir=$datadir/icons/hicolor/scalable/apps fi AC_SUBST(desktopentrydir) AC_SUBST(serviceentrydir) AC_SUBST(numptyphysicsdir) AC_SUBST(icon_26x26dir) AC_SUBST(icon_34x34dir) AC_SUBST(icon_40x40dir) AC_SUBST(icon_50x50dir) AC_SUBST(icon_64x64dir) AC_SUBST(icon_scalabledir) AC_CHECK_LIB(stdc++, main) AC_CHECK_LIB(X11, main) AC_CHECK_LIB(z, main) AC_CONFIG_FILES([Makefile]) AC_OUTPUT numptyphysics-0.2+svn157/NEWS0000644000175000017500000000000112264274602015052 0ustar warp10warp10 numptyphysics-0.2+svn157/Hildon.cpp0000644000175000017500000001200012264274560016301 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifdef USE_HILDON #include #include #include #include #include #include #include #include "Hildon.h" #include "Config.h" #include "happyhttp.h" using namespace happyhttp; #define NP_NAME "NumptyPhysics" #define NP_SERVICE "org.maemo.garage.numptyphysics" #define NP_OBJECT "org/maemo/garage/numptyphysics" /* / ?? */ #define NP_INTERFACE "org.maemo.garage.numptyphysics" #define NP_VERSION "1.0" #define MAX_FILES 32 static struct HildonState { GMainContext *gcontext; osso_context_t *osso; int numFiles; char* files[MAX_FILES]; FILE *httpFile; int httpSize; } g_state = {NULL,0}; static void http_begin_cb( const Response* r, void* userdata ) { switch ( r->getstatus() ) { case OK: g_state.httpSize = 0; break; default: fprintf(stderr,"http status=%d %s\n",r->getstatus(),r->getreason()); g_state.httpSize = -1; break; } } static void http_data_cb( const Response* r, void* userdata, const unsigned char* data, int numbytes ) { fwrite( data, 1, numbytes, g_state.httpFile ); g_state.httpSize += numbytes; } static bool http_get( const char* uri, const char* file ) { char* host = strdup(uri); char* e = strchr(host,'/'); int port = 80; g_state.httpFile = fopen( HTTP_TEMP_FILE, "wt" ); g_state.httpSize = -1; if ( e ) { *e = '\0'; } e = strchr(host,':'); if ( e ) { *e = '\0'; port=atoi(e+1); } e = strchr(uri,'/'); if ( e ) { try { fprintf(stderr,"http_get host=%s port=%d file=%s\n",host,port,e); Connection con( host, port ); con.setcallbacks( http_begin_cb, http_data_cb, NULL, NULL ); con.request("GET",e,NULL,NULL,0); while ( con.outstanding() ) { fprintf(stderr,"http_get pump\n"); con.pump(); } } catch ( Wobbly w ) { fprintf(stderr,"http_get wobbly: %s\n",w.what()); } } fclose ( g_state.httpFile ); free( host ); return g_state.httpSize > 0; } static gint dbus_handler(const gchar *interface, const gchar *method, GArray *arguments, gpointer data, osso_rpc_t *retval) { if (arguments == NULL) { return OSSO_OK; } if (g_ascii_strcasecmp(method, "mime_open") == 0) { for(unsigned i = 0; i < arguments->len; ++i) { osso_rpc_t val = g_array_index(arguments, osso_rpc_t, i); if (val.type == DBUS_TYPE_STRING && val.value.s != NULL) { char *f = NULL; fprintf(stderr,"hildon mime open \"%s\"\n",val.value.s); if ( strncmp(val.value.s,"file://",7)==0 && g_state.numFiles < MAX_FILES ) { f = val.value.s+7; } else if ( ( strncmp(val.value.s,"http://",7)==0 || strncmp(val.value.s,"nptp://",7)==0 ) && http_get( val.value.s+7, HTTP_TEMP_FILE ) ) { f = HTTP_TEMP_FILE; } if ( f ) { if ( g_state.files[g_state.numFiles] ) { g_free(g_state.files[g_state.numFiles]); } g_state.files[g_state.numFiles++] = g_strdup( f ); } } } } return OSSO_OK; } Hildon::Hildon() { if ( g_state.gcontext ) { throw "gmainloop already initialised"; } else { g_type_init(); g_state.gcontext = g_main_context_new(); } if ( g_state.osso ) { throw "hildon already initialised"; } else { g_state.osso = osso_initialize(NP_NAME, NP_VERSION, FALSE, g_state.gcontext); if (g_state.osso == NULL) { fprintf(stderr, "Failed to initialize libosso\n"); return; } /* Set dbus handler to get mime open callbacks */ if ( osso_rpc_set_cb_f(g_state.osso, NP_SERVICE, NP_OBJECT, NP_INTERFACE, dbus_handler, NULL) != OSSO_OK) { fprintf(stderr, "Failed to set mime callback\n"); return; } } } Hildon::~Hildon() { if ( g_state.osso ) { osso_deinitialize( g_state.osso ); } if ( g_state.gcontext ) { g_main_context_unref( g_state.gcontext ); } } void Hildon::poll() { if ( g_main_context_iteration( g_state.gcontext, FALSE ) ) { //fprintf(stderr, "Hildon::poll event!\n"); } } char *Hildon::getFile() { if ( g_state.numFiles > 0 ) { return g_state.files[--g_state.numFiles]; } return NULL; } bool Hildon::sendFile( char* to, char *file ) { GSList *l = g_slist_append( NULL, (gpointer)file ); if ( l ) { if ( osso_email_files_email( g_state.osso, l ) == OSSO_OK ) { return true; } } return false; } #endif //USE_HILDON numptyphysics-0.2+svn157/OsFreeDesktop.cpp0000644000175000017500000000537112264274577017626 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #if !defined(USE_HILDON) && !defined(WIN32) #include "Os.h" #include "Config.h" #include #include #include #include #include #include #include #include /** * Include SDL, so that under Mac OS X it can rename my main() * function to SDL_main (else NP *will* crash on OS X). * * http://www.libsdl.org/faq.php?action=listentries&category=7#55 **/ #include "SDL/SDL.h" class OsFreeDesktop : public Os { public: OsFreeDesktop() : m_fifo(NULL), m_cmdReady(false), m_cmdPos(0) { } virtual bool openBrowser( const char* url ) { if ( url && strlen(url) < 200 ) { char buf[256]; snprintf(buf,256,"xdg-open '%s'",url); if ( system( buf ) == 0 ) { return true; } } return false; } virtual char* saveDialog( const char* path ) { //TODO - gtk? return NULL; } virtual void poll() { if ( m_fifo && !m_cmdReady ) { int c = 0; while ( c != EOF ) { c = fgetc( m_fifo ); m_cmdBuffer[m_cmdPos++] = c; if ( c == 0 ) { m_cmdReady = false; break; } } } } virtual char *getLaunchFile() { poll(); if ( m_cmdReady ) { m_cmdPos = 0; m_cmdReady = false; return m_cmdBuffer; } return NULL; } bool setupPipe( int argc, char** argv ) { return true; std::string fifoFile = Config::userDataDir()+Os::pathSep+".pipe"; FILE *fifo = fopen( fifoFile.c_str(), "w" ); if ( fifo ) { for ( int i=1; isetupPipe(argc,argv) ) { npmain(argc,argv); } } #endif numptyphysics-0.2+svn157/data/0000755000175000017500000000000012264274602015275 5ustar warp10warp10numptyphysics-0.2+svn157/data/paper.png0000644000175000017500000211077112264274577017136 0ustar warp10warp10‰PNG  IHDR àÒež¢ pHYsaa¨?§i IDATxLÝY¯l[v'ôèÛÝîæÍ{ÓÎtb»ÈJä.Jx@V‰B !Ä„T%p©: xà ø ÀG@âGK”TÂ:}ÿþ= jª5“‹ÍùÄ”Kÿ¤÷¸ÛlïïvðœÀh6- Ã:yxxhx8nïÎÎ.`~¸»çk€!ŽbuÓÉyƒÑP%õ˜[ǃÎîv»mk$•“éa\Íúº½½žC=›…Çáh=ŸÝ¾}û¿ý¯ÿË¿ó·ÿà£O>yÜ·‡‹ó™î4Y¯WÍøûÍãb2FÞz º 9™ød$ˆDüÇÉáx·ßŠ ïß¿uk»Ýœ¯×¸ º\Ò‚‡h†41™ÎgËÑt88¿ýöëå|6ŸE°Ë³s&1î6[È‘1ñšÑ'ßýôüŸÿ§ßþí_ÿƒ?øÛïÞÞžák<±:žîŸ"Cýºš‘Õj…¼vóÙt¾X¬ góùô›o¾™Î’_^^‚/ÿ:²«ñèÀp°<Žff¡yðäëà8š-檠‹ÅìøtØ>>l·÷m6ËåŠXÈŠã#Û 19Mag< m‡Ý#K04AÌúì|» Ç‹Õz÷ð@¼ê/®¸Ï/^¼øúë¯ÝRï+^œõÕWîÞÜÜàð|:cXÈÿüò‚*]`X ¦°©ùb>~÷îréb©ž‹QëíMš¿yóæóÏ?‡@Ó†Y_ãÂØáa‘V4Cfü2½IbêTðÜÄð1ÉýÕ·‹³0¦Èpÿ´{ÿöÝOògë÷ÿæìl­ß»»”¬Î.6Q"*ÿ: Æ üÆèAžG¡HÐft€ß…˜Û‡ûÉxAAZ¡dµ^²R]£–Q©A9x±Ne*Œ¦ÛûÍQ«k½sÚT Q¢4£I‰2Fj}1¦1 º@< —‰# *€ThT¾Ž§#’ï` ¸{‰¨EJƒ¯@j”<œFUõOF‰G´v‹ ÈAÍ`øtÄ+àjˆ¦Î7Ûo÷;v¾ÙÜóªýã–”( €æº† /š G¥‚¯q‡ÃAÊì™-Eàü\\®Ø¢U×;2&RJá#­@2.ø`Žiüñ!ÃŽOG¢&X(œŽâSð&—‡\ÙÝñl"rëÈ¥Y!I¹… /Áhæ,à··Úb6ªKڀ͇´lÛGÍYæÍÝx+Ÿ_~öùŸÿô§ï¾ýê7¾ÿ½?þþÙ_ýüÏ'/~ÿïþø¯ÿþÙÙëád=ž Ôëãh1L®..t# Gs—²î´*´‡©ñd*±H&\¸‹wŸ÷O>Œ®%.˜á”^nŽÇ½&ÚŒ9žP¢_NÎaÔ.ÐǮ畸¬._¢™ÕF;¢Õ1*8ƺ"Û$! Â9>¿,⋟áh™”*q™X$Å u½^Rc¬"äU)ãTN&4ž$ØéÐrFóõr®R¿¾®õ®´š¡7Î_Ž a”èlP)èE¯<3-[Ùj§°21dØíNAP/$ÖtA†RæFòꉤ2k3¡Íd$÷w7„ƒ5)¢`̘³ØÚ›V“ósb¦)eAGs3iDÙ?<Ýx42‡¤ò ˆœÉ‡ £>Áq”ìa<ˆ½zùIåCÉÊÃýÃýÑ}ôñw~ðƒÄ(·ûÉðÉcµ ö-ÕÊt¢Ðíc{Ú˜Í>á•À!íé…J¸ñ˜Áu2Avõ~{gÌ[­çç—r¾ñtþ½O_€ä×û¯L6OH•Ž—v4gö.ò G;¹Ë!QÍp¢ÑÌÅ`üêÕÓ’‚¼À,Á:»Xìit´äG‡ù43Ÿ#zŸ¸V´ ¹„µM²R)Û†YÍöaÃÒø9Þ£2¦±”´QøS¾œóeRL©xÿtõâ ¶áx ,Rº®v⢃Õ* ”W CÔx¶XJ—a&ÏÍ]Bó~—i¾Ú#FÚ 2‚ò¬f_sd å*á$m}ûN¶G>$ì+úo7Û›ÍÖ¬AsÁ–¢‘ᢓU]Àà«òVf9[‚9É1Y…ظ\¬§“%ùÜÞÞ›áhîÓ uvv>H¬#øáj™) ˜˜ú^Ò–¬Ë(<ŒyJbÉx>”ÜÅÓûŠõ^H WO5©Æš®‹DýãÿøüêÒ$N¡6ä!FA+IuÜýºžO¦{è+'Sb1¡úôÓO¿}ÿŽÕgfYY1—½k"YÌ–O³øù=¿N ªéIÍ·)ê[Œ}J‹H4Èyïn®õnâ f˨šJ v‰µ”e¼8Þ\_»kR ûíaCSH¹{ؽ|ùòi?ž/ÎVËõ& Gòld„/J‰ƒši,Ç™æ'ˆ¹ô‹ ·âMø3+tÏC÷(- 9ìcÒããx’<>n•9ztMY5Ç£­ZGªòD³ù‚Læ 9 g§\ÍõøôhY!sf¸‰kbĬɡ†t¡¬=æK³U#þÂ&Õ‡ÚÑp}F2 ¤ÇÁ¦LŒX˜[»G¡•iÑ3ô¸N®O »Û†°2*ÈpAGAC b´_ùk˜–/=˜„<ÁWx_ Ò6NÁõÀ‹ó²g¶Úd7Âæ´# “‹ jÄT/äP8`W†k4·åóU/¾úÔÃkÈÀÂå3iO2”¬ ª"âƒNoïïEŒ×¯_üïܼ{÷öÝW¿þƒßxÜo'?ú›g2]ŽVgg«µù÷x,í¡î2… wO—ˆ¦ßwïo80º¯®®Ô4Aº'ÃI“Në ˆÃr-ÿD"‡ä†¾V]2T’u)Fº“IF³ºX¬…-8qáÓ‚³ÛÙbò¸Ù¶'ú'ŒkI°*<”î X¼cfš" ÛÜèK6… 1~c‡™&§å(у³Øl¡£­š»”Qe~IÌ>ôe¾«ž‰…ž©8.ìî3lLÒ•_^^ùÄ ñ˜¬`~qõ VáxŒ…Õð#§‰¬ÜJö•`”1[ ×aLX _af~ÀÔèÝèÊ¡ ؤ8!Œßƅƒ 3|²` 73•*ø)CyØ<ÌâƸ#£æHüÜ2™|ëñö#_ KÆ}˜Á°ó>6šî82w¼d*@dV÷hf5YL3! À/yÆš—«sb¡eüÊý.Î_hˆæäƒb_g,gItbfCYÆ?ãµKšO`ønŸÁ&vKˆÒï!5RXr 1 Fïr ’D§JVaÒ+9ÑÐW“ϲ”3}4úUß*s Úà|¾t ¡B2a›M—Û‡D‡Éìâ2Ì>øŸ{)ÄÁdº¸Îb'Z3__.ˆ=ôV¼³~t÷µÆ¦_mg㬬ì’Ñd zä(ì à²FVض‡ýlœYfFßuVŒóo b/^¼ú½üÞÙúÜœ1WKtGƒ :¬E¦bçp,ó=N3ñÀcKC*e¢CÉr¾Ræ>Ô™©|Èbåã¨òÑô0˜<>‘ðr¾ÌšâöáÎ,™ýQ¾!“+îÉ$ß( ‚øtiƒ„pb<™'iGç«‹ûóíÃ6žÓeUȤh4YÌ ™43½£|<0À§aB¸ŒZNÆ ¸¬€.¥ÂˆJð\´u*MÙm-HÌvÇX8óaóQ4 a £á£Lhp¤Pz¡,³¡™U.>8‰³;CE•d”©Ml½}]TI¬·ø€MB….ždnLÔ3)íd8x0? .º‡¿­ºžÏ ‡±jtŠáÔjø|Üà–và‘³RAè©—åÔÄŸ˜@2cλ›¤Ë¨². r®Ï.ÅRmYÙúìSå—k)Ôx¼>¿2VÊGúªìVôåƒæ¢á–ÃY‚«whÛ6ˆÜ°€ cĶüžZ9ƒ¯Á¢}ꢗ¶hv)¨l®“[8­ •–‹JwIt\žVUN^‡$ð0#ïWä–(g%i|6žï’,î¤f[ËÆ16½Ðïú|-»º™“óž;™gêZp*6Ó< £Iò @]EŽër‹’ÄpõIµ¥o«Ë¼EŒW²~Íë1a‚-ï2ze/`ß5ô©²;E‰[]vKAMµÊz@‚×ñ_CIæTYŸuâǡ٤b4Ðd¶?l²–±& –& gkÁŒqŽgÓ˯~tui5gòbº¼¸|9ÎïML ¾»ë'÷×Ô#‹ZÌ«PPºLÿü“›ü¾ˆC2DÒ1@Ïü 9Y 2*¶kUÖÝDµbÅQQV=žºQÃ]Ƽ¥ˆÆtêÑj ‘‰siDšƒd``µSa|@¸:Ën éäC’Ùl3}@®ëh¢†U½ÃàjÝðj9•óLúÒƒìÄt$Þ¡¢WYIROjÅØïj,/.£<À>UªÁÙ¥Q0ªE¹ñ@§É&¶ EIéÒ]M”¡Å£VF„,•kUy†)`.]ˆ5îf8Üíæ«$R Æ\øqr†pMãà…*3í~d[é£u° _dKß–«Ì'ж£!swgÎ÷úÍKxÂ-âí”n7Ù3Õ×Ó²Ö*…Šù ׯòYf`—/³ÚÁrFóÑÝõ¸fƒs# R+ 2%%gg¤JØDâ‚^VA³á´4e%ñÈEò––§ÇcÆ9qt¿{bc&1éñ™5ƒ±‘BKZvB-UHX J 8+‹É¨ë 1Õu: Sd•V¢De(¥HÞƸ˜ú}Rý¢V%›ô•Ÿµy”¾brÑE ?¨" À‰õÏ>uq™Ý dT ƒÀ}æÀ²¤§­JƒŠrŠ,¸==½þè;ß~ûî7û_n¶ÖÓ$³:ÞQÖžH–ëÐW*Ÿ`ohƒœ‹¤Ñåù< *)ÒEs½õÒË«—¯ô~w{v‘Ĉ~‘º:›îÍû£–ñ|i«bp¼O®Fq0³Æ‹‹õt¾µÛXê 3ÖIÈr …\]½dG–ŠÂ”¤kK©¤'á†ÑWD~¸d+µ…(aj|­úx:vôò¡2 YH©[Ò–ééÌÀr€IÃÞb°qÎ^Ãqo8×YrnakDvIè”$-íf5W¿"’ ,Ì26JE'j³îR\+·+à¥mÆÔ”[r{â=»ýúêù˜ë¯Â2³‰ƒÄËyȳÓãÙ*fY3‡ÙÃý¦×ÌQ¥Ìº°È„0îRÖÜ-8UÒfK G9Ç›År¤ª¨b Ø$IŸè÷Ý ƒ†è.vgy&¦ú“ƒ¸¥ßÖAA®wDÊ-`É,¡­ÅÙ˜:JÔ"À–°èãåd–µ ׳‹+å¿õo|zͨÖ$¹°æik>k¨`â_Ö>+=$X"Í0‘´²édȲˆ¤a9$0^ÃÀ1¤"€éBs~–I f§sS>‘>¡ZŒXÐyš=mno|]­)—´-òøZɱE«H‹‡½*”f2F»•?ù„_'ÈZ†T×ui‹Šc ¬è¸È¡ ÁcðérêÁþ7s?ìÊÑÐ U\€Ñ,æ»Ú0<·ÐàÂ…qœhªœ°¦Q²©ú@¡Q@H¬ókŒƒlR¥¿öKÖ+s~ÓΜ‘ÀÞéV­AcÅ–V0±Í1ÛæJ ݪ‰àÒ€K¹ÁèLÔ£’ãÆÛo¾yùò5Ö¢ãSжF~–N‹N‡ãàüòÊŽìoýîÆïïýç9úa¿`±4‹ÜÛãdzf†ød‹××7V>_¿~óêÕëñ`¿)#7tü³U«?¼šøaÆdä®<e:v“ñ=î2Ìhñ Gà°þ†µt7VÌY¹$­áIbœrõ¢ÉÃÆüü¹Ít ݤb5³ŠkÚ6X­/„ìØ¼ÔÍZNb_v…\é·Ö‡Ê,O™/jé–Oäjp÷+5É„8´‡ú,Þù”é¾V^M8j¢si<ãÖ-3ÒUà æBZ$v_MŒøF‘0bxXɪxV3x¸t.—BæJò h BÕšÌ'0Š&ÞI`­I²ÎÙ<‘) EÉÜ…BÆà›ÍåúŒXýYç»zñr¾Zo,UΦŒáòê­ŽLUŸJPHÙnîSÓ3\Ú\s„e/Ø¡‘ƒÍeíï•¥\>ÏÖ°Qœ½ÎÚæc]‘§q.Ë ùÏ åhHÔ1[2¥ẻÝ÷§-˜[oî rƒ²˜«)­‚ûáq¦÷ˆE«V“rÛ!©ò/J—{‘!z\ >ÕPvEÎuº«ËwHX€£¼ÉtdŠCƒ IQm ‹ÈǃÅèÆ„*£/˜q­…*ÛÊm$dkMïœN1åLS¢w_©O ÉßÞÞØÆŠåäJ2 }ºkfw¾Z=n7Ÿñ™“kûø™äçÃma‹Qmxq%7··š†æHl’dä<¦©û{êj[½ƒp'«W_›³·ïßií\;ÍÁ·:Gb¬HĈ;_\^Ñ)ÅM– ¥}¹kÆS–úvOÒŸüäÏ^¿º|ùòÕÃfk0#i(-\ñÅǘÃø3z˜Sâ5$ 0à DJ›.­SÉ–2Æ"…5 ^¿{»Ë®ÌRÄýÝݵB{F´±nJy{{7wtƑϤAÒÄD¤`—§ZùÉIŠ˜[0¹¼º¢ÝÑ#;´/?“%s·CKr¶óó 2i— y¥¬4©ã 4Kþt¾^Ѿ5ã(œ Û®IȨ†ÙÌg¨B¿ÌXCÍáôéÊV‹Ü‚êRDJ¤•±g"»£#V¤8§µõÙ:‹8æ«$)ÔXsɾVò%b-›dêvÒí'Zì{ÌbÁtœû•ès Ä“ûE3S‘–ù¾\­¾}ûVÙ¼?«­ó™`jòID¦õì¹MÕÐ9°„‚YE– ÈT(0º?9Fgw›kˆð!&Q.ù_ÊN|æDÁ‚’¼½Y¨²1Wç9Àöâ´å|0‘DŠ…ôB"Ù YwÓÊj.ƒŽ‡ŽôH»pjK­ð0æ™Çnÿ)•-À;»"‹ÂïJ­VëµxÅ¿ˆRC‹0똩'P®º,®tž¤EìS†8€eÔSÍÖJ)„CÐÐ2«k¯= b`XД# ™c.ŽÌÀ:œÂ*fm´ÀõS1´ð0'$Ñ r¡Æ×/N:‘Ó"”cà0X/…€$Å L¤Ÿ!CÞo‘=cS(±¬‹rÀ¦G6ù†y™-ö‘qÒ%/lÁ9 ÊʸÌý!O”cŸYH> n¥_Þ`ɪÁ|¦¦HŒ QînœÁ*†¥ÐÚæÓ婞6ëRïR„‰éF‰ ™CÒ·Ü%x·0™20ÔëÅÐu¼½¹~ÿîÈFM`¦¼CC¨ºUÒ¶Œ, Ó²f^<þ/þ«ÿ ×p'ÇÝöÖ˜¸˜ŽöÛ;:% ™Ó›ï|,»¢¡Ì&³°Ÿc†:ø|‹¸r6EéHrñþÔ¤45¢¬8ª"Šá#¬PŠú`m%Íò%ÑÄ PR™ 9ÖÀjXð“`L'WÖ·Ü‚ÊåîönÃ=dó|ËB’J¢ås÷› ¿RŠ;1‚ºËÔµBKò9¼ÝèVźÀd›²³h„F"à±>¹÷3;,¡DV¨…¤Cd$ù˜-ä2ô¬ á¢úMJ·Ùf0 ñ³»4-Pá!>BK¨Ê¨˜)@i0 Úfºù|X•ŒÜ¥‘º.©ØˆšÓ,"ˆŒ'\Ä ‡B%²K ÑâýæáâòR®°y°›ëí1ÐçÜã$®ûÙbƇîmeùG1NÜܾ§îñùö©óœÌ@% ½~ælrÔ’þãŽôLâ—Æ©-!>Šb XœW Å'Á„h¶ë#´Ç¦J2¼ÒDv!Q¥ âMe"‚ùbÖ²4žØïD|ᥥË#6öͲ°—¡ã$ЉÈem!›ˆË•Y޲~Yw{%‹ñ©àH•î¬TÌüC¡T®,èé’ ÔàO/ÁoŸW³Ápó¸¶@Ú:Þl¼ ãí†Me†Í0Oý3¸Ö©Û¾"«­B2õòòò|}öýÓú×þ•]½xáÉ ¾¶uW|ìCôëó3ËpͦÏè+‰áI¸áqµÊ)DR=ßA6©­ÏÏÉáìüÜY®:)%5D¹ %c¼ôVh…aÔ:îc§ Ø¡ä8›ÔFSÏclwWW/\[Á#2˜N~þó_H’÷wt}}{çTä™<†#÷Ó-$ŒkfEÌu¤9]Ávë ”Ù7t"yvVÙ±IÏ…”õ(`WÁ°qÄŒ&“´T à¶æwÉÞ¨"°ú£Ö"u° Ö±Å(n­ßŽAQ•ŠÄâLÁú$Hk˜DwÆhqVæ/£•åÜ\ß„òZxÀ»V‹"Æ­½Xin6; ŠîjxË`‰ßó‹ó¶œÕúÌFþp"ž s´UÒ\N|T»8IsóUÀ ;¯at!£DsÈ#-3$CÊ”=8u—Ediª<;ŒÁ&‹âM–(öw2þ-È‹™‘¶ÎuWBÎiZ£`†]ÙÝ”æâH bG±Šú|£/Û f›55rbK„š…Þá‘D,¤b 9¸ëDS<¡¥ûº#/Fƒ;dPG2ÝŒÙPÊêˆ+¬d ÖÈ• t>(:ÄøÉ@¾"ϸ8?Ó«È&súbu!Øê8Ÿÿ&"½èNKÔ¨c]lL—2+Å—z— ‡j6YÙ©,#£9“?#C[‰â57P¯st‹¢"bÖ}•™‡xáñ‘y.|+™="@¿4KøZdþùh*ÒÓ’º“ŒF<îY‡´ k†€Muîp(BV¹ƒ#¿`÷i™t"‹g._]j1ŽL:µjꈄ”¨ôÛìÐQfæ40¸ævþ³¬ž0'x’9ÞQØãoÃhI¿"Α’²š¯Øb…>,C¢>"ʨm@‰•Š´H5Ô¼i†ß0Q´çÃ-æW©jòQù_b|B¸G÷;áN0Ô¼¬,£¶EÑr\õCe È ˜Éááèhûîn7—ü&o¿xË^½ühõê’}ëÛ Ý\«£6JšˆPïk‘›é ›cc¥þ°’ÎÀ§ïJ€èTÔç«HQDdá·¼"VˆDiu25.n‰@¢PwÑfê{¸áA›•Åcæë [DŒÍXœ³wÙ^Ù#]ÛV˜x›³Ìs†œ‰FQÎâÝ…'ù^ ŸEFhk"ÍqÕ˜»„¤éôãï~×-*aþ&ÊÕ<+R5‚CÌÐëŠvs'F™g6F™HƒMþs-ÀesÁ IR¤:·4ÉÝ*û„Då £Rv8b‘@ù­Ðá«À§FŽkè«®y´6̧Ÿ¾à IDATC’JÙÒ—žäkÙsàk ç–•+$/3š$øÊ YŸ]úÊ'bÚºð)îžý9¿ñº?Mì¦ë_¬ÈÌ~ºp>TžS'db?V¤#í²Š<Æ•ùËØ°'J”±dî#›º WHme%AJÜñ©y"Ò(K0[Çêó,XÉMàâ-ÔÒ6๔¹”5÷éBvBÎë4ஸ<ÈÂx÷ ¬Ä®Œp†®Ã–s¨:Ê„R½ÇKöñv±¬âãøÑ¦â Y,TŒ.Oï`c?19:_™×f`ðÌÞsJÚœždýœS°!ùSI¿É³sz ø`þ›ÝÃýë—¯~ó7¨9¹Ñ™g¸Lª*^d<Ûå¤_?À•ƒ2Xs…—çõ ¨œ ¸³¦ ­è”Eˆ©5&`ãÙÚ^‘%amÓ‰õ’'ä9×L¼µ˜-r¨–³3¯Å—,c$Æ Ï¬òÙx©{{±‡dëžPš˜Ogkû›·ß&_®}K0ëµgú²SŒ0É$шÑ.ƃ8ý’\âs%øð|4›3V²Êµ33„á¢vâ„bDbêâÒ44<¡!›AÂýñðâåbn2>“æäY&;öÍÙ|4ŸÇŸy…®eC¦¾N6:z6™¨OûÊ <£‹wï¯Å ³%…ZS§2ù}&‡zB#7·w²6;:es«Õ»oßjˆÈÛë›Õežû±6 ÀˆnæšÉkÒËéÝ­mK;ûã‡Z…yîëàY)ã­Oá=ÈDc1ÇzXȱgKÃÿæ9ôe¤ðàέœÉuÌ`6[yä".`[λû̺åþî»§Œ—H›‡i&¼ 6’Qœ(5Ó»'¾v™b¦Ò/g¶Ø€hìáÇ÷ï"ò™»<\’G` þÈÊSMAÜ×9¶)ê"©³¯”)G%-\I× *¼ˆ7:z<æ©î0ådüN¦žå ºFª *æ§MÒ¨röhÎÂO%p‚ÎQôØK5:2C;&ËJ¤%8Ÿ%„“WV§ÆæI3Þ+ûf;‰MI@<®AàšË#X${6H)$Ñ( 3gxN"5²ª •xñI§"ƒJúÉ(¡!#™bÍf}º¥›Êð¸ë “My/š$aâìP™Î mèr.ðîúÛpøÄÑL÷õèy„ð4IºP f î²ÔÄUv¶ „:EñÜ$*a¾[j"D*,kA¯C›t™˜/½Û¤E¤4K0j(Dƒ‹5ë½Eä$2@¦hPùF„F¥óh˜nÞ!W¤dè©Ãx€)NW·èÄwMšG¨{ 5™BFFý¿ûŸüÇǃ¨É#a—o^÷û?p^Ë8¸¹½‘Ñ¡U—,5ðj¬ ³–NÑÚF:€Õ4ç´šk.„J/vKˆˆÈµ™`Õzƒ‘•˜M&D S^gKˆ…V±d *½ƒW#>h[Œ-ËNÈN¨Z[žÚw·ð«ºRÍŸ²hd-Ã37IBaCAË+ ¿O5) 3øÕ׸üÀð®[YL<ävÉåfÉJ kô ¸?ÝD(ç@¹×P§áQæêèD³p—;h«eÍölš™>ªQº*G„y ¸zy^Ñ …Y@nîvx”§–‰éÄŸÑÍ®‚©L9öÎŒ9ái8X.œª$ˆ!æ±#…p45ÈÁz”ɧÁ®¦‘1;"±é|á)‰«+ÓÊGKRâZÙÆ¤dkO,Ÿ§%rú*›P¯?Ò(Ú‹‡’3U.=p¤>|Œ‘O `ùÈ^¢ËZÎÔãdÙrÔB0úÎVh¿vß9vʺ’ý»«UHM.+:¢'fÏ“ªÍ@Q *ò€Ã1§‰H2Oe6ÉóÊFwö»L‰P•ÉPDšMgO zÞÎ̼á°Ixb?Î9ÃÍèØ‰µ L4«/dÛ;Ba‡ûRÛ/xüµ_ÿ5¿3ò9Ã"ZBã¶üÑ;<„a˜ Q5ÑÇf›G%„ cÆI ä¤2ý©\D•µ¼¿¾FõŠ£!É Ððà¸fðYBBÍËY—u¦lîÐã̃¹ ‰›eÚ²½hL[YùŸüé?'àþð·p FùãWV2ùÎB#¥X6˜Ø’## b–öЈóì⌔{ÍCÒ²ÔÇ|j…2+ ¦arï‹q<€ HpM6<Dq!a§\.s2rV— pôKà’`>«¾œËšœ'çcØ\ C–KM]êþaË~pŠGDbX3Îʤ,B€º³Ò& {Œ‘š-° sŠ·²^4t´µ+•¢Ö~‘2yÒ)‹py3 |Z ý±Ž,ˆ¾¾R=æñZ˜3É'j>E2Ä¥±æ9S—g¾³€§ÊšPeŒò Ù^¶&X¦;I–bq+Ë`9]#‘œJÜùŠ#0Y›ÔqåFß2-Ä­îHÙ¬•jtÌ`Ø^ Ÿ—äe:–±ÞLXC+¿!œ<í±·ï¼2t‰]œ¨æêÔjÄר«dîA8ÌŒÁ VÁX¶››áºÊäÄk<Ø?2q  úÂKEW™"‘[N†F0ppw­wf!B:O1g5Se„Ñ]=ÃÛV„:q/.2Á/WM\:w¯¬‹pe1b³– €"l6%1‚NæDZZ¡¼¾4ÉX¨“Ѝõª5Œÿ£ÿðß%——¯Þ|÷»¿¶Z]r¶ÍýÝæñÞ‚ʈc(cv\Pl‚/ÛÁ˜þD:fļ٬‘„ËS…<\0@â,‡%¡‹š|–ÅWÙ¬±E•‡Ø“D Ñá­DÒŒH3äbF¸šç„aC ù“bxd\3*aŠ/y„s:¿ÛÜ'9ÉT +â™[q¶ÓÊ KÈ=yìˆè”îžp– ”¼æ/q KPY Áù7ië”M ³nz\-N„ä@‰¦üÙÈRŠðÀ`É¢9dõÒðÀhŒi2ñͲªm;}ø×&5¢Ï‚b¤Ô¹%²B³Oi´ÞÝÊS½‡½á+Ï¡oîP ¡»É±bU5A»~ ÄÛÐËš!ì°øµ 7/B”+ñTÚánˆ·½Ó¸­ðD4˜q˜Þⶉìõ'7er2œS¥ãGyb1›¤{ù¨õ¼ú‡Ɩ„c¼HIÞBŠQ4VrŒÔI6Ã@|/´Å~b äK„9b)­Œ.¦E€©¦G똠bAÇÕÄcS„hÛU¸G°y#ì­¼ÿ)ö†T‘ G^TÅ/‰Åæ9pÞ%›"l@”J7$«]Þb…#ëLb\d˜ADpñ…û<»†‡hÐq~uáˆD:ãg™ØÑÔµ­Ð9€gÐF^0ãýÔ˜ F‹Ý&æ(Œƒþ4Bæ.Qýçõ`g›[ à¶²òà$È©µœ´ˆ_ØÜ,Kï(̨o^hO¬.ˆÃ:‘Ó,¼ßçWD{¿×óæ)É ú/†Až„#12l$«pâÊžT³(Žx¿eNIoLé8\®—&¨F“(½Ö©¬—ˆ2øᬨ'œ9èüËϾôRªþð_ÊÙ´ÓÕrñÍW_9kœ……hf¬_–¯ÐH°˜ØÆ€IDLŸx@ÎÄ$x/[忢/Üaͬ뽤‘‡†DW fX“Èz½Ä%g£^í½ko—Ê>¦ùº€îmFŽ©xƒÉ0Ͻً ‰ÂÁ,#t²äÙÜÊÓçŸýòþöæü,‡AIÞëÌ«hÇ»t+O¢9Âh=2G…°"¨ðWEŽi&c@B*¬ä9OÓ Ïó’–Ïœuäñ%Iêר“Ofë2÷`)˳lµc3YlNºX&M–’籓åX €`œ-–Ê;È‘Ÿf×Tã!󙆃­WrDÇqδcáFz˱#¬¾4J£Vdеñ‚}ÎÆsÓcbä¬Ðh*ãË”¼DfCñR/Jô SÐ5Åßkì4šêŽõù4=°î/ð"+¶QÃS4»°x73x"mqQFëmFÄj&aÍ<ÕhiT“82"a˜æ3óN0¡¢ Q5cXº¿d‚"MŽ\6 FwMy³BhŸÎàdˆÄ1̲*f9H;‘z®¦p±‰CL¶x'ô$ Ï§ž5ƒ6ÃgøË’†¯m‘PÂE|>ôÀXާ/CŽX’̹qŒœX:íñ1/­„õæÝgwátÂT:HðöüƒKæD’àëkv—È 7øµX‚¡f{F$F(¹-.Á0²ŒXÏ\çˆ61㓜¦°¥ªoÔÆ+¼ö'1ƒXE%I±WmÉf·bT¥Ç<¼`ƒ€‚\R1Ÿ²8Fòéì4AÕŸZ±û”‰Ê(‚6&¤cCù„_Ê€)C;…¢'¢'‹Î˜¡ä FK„Ô»Òa!yÑ®<.Á.8#ñŒ–¾¬E--€¥¸Ë‹«»Û;GX²Éeú%+õ0ÔzåÀSŠy›X¤h’à”rãÝæI;œnrëÑ݉7‘Þ›ÍÚÉÄ“›Î$ñD±ýòð I gäÕcYQž¼Ï90sq$Z&ƒ/n¥§Ë˜e®Ìƒ $P)´ÙvVé|õÃf“YZ>1BF-@Ä`²¬CkÕI Ê]VWþÁ*›áåÕLSMMi¼˜Ô™¤½>éÈz»÷ÞÝÛýèÇß|ó&=04F¯µPŠ-¯”Ä<ƒmgW'¨J¥HrŸ5mî ’bæ4g&„ˆËT!RROzÊÑ̀Ħ˜Ll¯fqhO.ÂD#VÁiôHŒ°é%RòœÁý븒e`ÍŒMh3k·0øÅ_‚äPoÞ|”-ϳ›™…ÊI=ñGéN͹ÑVǘ²Z‰ ·Š°Ø_ÑfÖQ’ ·ßi¢R¶]²r €6=‘­Ì[ÂW!?‡,I5‰u=©Ó> dFq€±žÇÆSð%4Ʀv2¦f.DŒ^úà™ÇŒÆ,”Б2%ë¨9US]Ä•H˜àI[Bd$iNà[éÐÁ¾Êž3Êĺ²–f˜Ù•Hµš´ãkd¥Õ‡ õ†OÃvð׃фY„É3Æ¡¸‚'ë"@åZPôî–Úå@¿\pxi‡ô+31J¯ÔÁT¦—¬gBˆºè¥·2Hó•8Bƒ¯cˆi…F¯ Úð¯WÞθòµTYi‰yoR&dà¶\ÃMet†6hN>¡×°)T@¡»ðè jXEËŠvÀëñ¦¯•O%Äæu «Í«ŽËB ²u gæ’|€Ã11ÒT#“I«â·÷âZ(‰Ê¹hŸ”y]y¹P€Ð.THÛ!·Ž n«-ÎcËîf8(Þ+ßÖ»h¥V%yøä‹ækê¡Eƒ[ß`¬åÞ=P€“ XwWã“Ì ÖM‘v ƒšÖ>zøìKGî“<‚CRvLÒ»÷}`½==¶·€É‡•Qea³XAdš 5X¶ÝçÍ9ÐV‡¢üɦ P³$Zd;`ÚÚ ±òí._ ú$¶9Õa-$»×\”€‘m™PUŒ-'juëDŠ”;-e‰ô|máE²BV00V2Á¦þud|å=q€·ÑV8³…ä®M‰Êó²¢e!"”?î—‹œ0‹´ëÐC½`ÍÜ#‡Óµ3UsB5>pŽ&@÷%®q6éà¨÷ÈL5eò–‘DÊLÃzzMÔÄXMošH·4A­Èna€– Ü»`bh¤ÑœUhë/Æí¡Ò#à†Ç=Q(£,;’xÇ]1®Û÷ï¼K}aÕ…[ÝÜ?xo!ý´c/¯š {ŒçîáþÊ1Ao(ˆ¶Ò‘3ÏÞþå®îdT6/Þ}óµO¹ `¡³rrSN}Ö#§ËÍn3­×ýÛÍ!%ä¹0h‘Zï Ý &¦äš²?µÈ‹N¼@H±ÊW“ 9ÅG2Ño©Ë­JÓãò€Û¹IQÖ`VH7Mûœ¥}œeÞ™7±À/"Þ *‰5s+ZiK\F*Îei‚Å1ûÖ*˜+œDêUÔ­Ÿ‚È3ó„é"yÒÐñÙC ÕI8s²ò‰7xÉ-'ÃUóä0äm•5ÙU5%¨±ÜPV“0⫋̼˜¥Ë°úf!‰\à°ÁTÃbÒÖJm-e”üe›Xð"Öëû¯_¿ú’ÅüLÒh±ÊL¨ÔuE»$C0’ƒ×ª#wzl˜pTa6:íÙl­ ªëzŸðô-ú‚›Ìu‘W!Ô¿Q_2Òo´œBæàñ¦¾6hÚejÖ‘ g ¶¼C:"NÖ³Aé½hÐSPÖL¥ø¡BÉß󨹥쓟åó9áHÞ&O­Ø ¾ˆMd>^wÎNta ; •wFAKp×õÜ<ƒ”¯ìŒ²ù§Ãj-˜ö‰þø^1'ô’Iž“0)–‰ˆVæ`#7ÍÝ¥ÀÄÒi™2‚ÊgP™K8 X¯Ußdøæ.JT†ÒÖWª®+‚)˜¦5Lب$²6kÕWìÃX +Eí:.‰ZÁ]Mô…A LFâòn«Â”®3” A$x2kò|‚ÔQ_AÞ‘¶Ø÷U=$.åê"¿¯ ŒA]¯Ü4&h_´4 ›Óµ(`°P[ÖˆUbA†¶ /Á‘á¦qv¥ %0ñ޹²:¨È\§]N?÷ë.ç‹qý2’­œdùä µrx4—Þ ŠÏø™.ç5]y µì'y[RÊö›ò‚3ð²^ 9÷±“¬ó›.Ä}d-õ®QbÑI2•ÊPµÅ><`ÉÕž"ñ•mº:š†’Ë/Ñ òB#™vÉå`æ˜×72fwÉSòù×/Xõ`MÚ&àÔ³uÒÇ–s¸h˲n]÷¯OÜ¡˜2œ4Ëï:´ñ5J¡w{)13Ÿ<¢åuM»%d–ÅHs½{Ë!éf0/ªy’÷Q‚6vD;ã„ù·by!œ>3犿œB_²Ä õĨÞ ´<wÞ—¢¡UÔ‚°‹]!’új ÀgÒ;­p¡ $´Ô—×Ìvv[ù œhÀ®£²Œseü6kZŽ§è«Œª: µ5¢CÙÄUs4nñB•¥ÙŒèî8~G«y˨;ÀÖã¨Ì#ŒÆ§‹3xwõhËZ züÈøû©Á^ÙÕLéÅ¥IßXv *}j´uiª|ºªÚTÖù*#HzH_#~”:N×HªwX¨éY¡…O½Ox¸6áAŽqò«îNÒ†44÷^M$Üq/>ÒTPv5…EWÒ5 zq¯“?xBªc·Ô(BÒ͵"ðÄÓìíÆ—í»d’à yŽ*ÄÍCeS ¬ HC#¨˜@Føëõå΃Å6âêEߺ9ˆ^B¶–ES«“6€&êúì»Êj­Qœ‘g^çÍ'Å܈‘”zvyÔF_õK‘žVqÌòše,¢ mYFÒ)¤÷„O³FÁˆ•€Tƒ åÜ­Ð*K‹?“‹/Š%s¡¤ L¢‰Ó×6)thâ‚P™Ý ¼¯zQ“ÄöYj\n56Ÿ‰¿ÜµÖˆ1Ûζ;pPKÜÆo0eù½~îyœDÌÐüŒäÔ×`°^å‡ÿtG6L)Ée¥üe`â¯#DްÄîSop(Jp‘.ÊK•¹JÇtÐMöhG¢b¦uWAÑ6“‰ìIG¯z fV‚W^i‹*¦?‰°ÉÁlܵ&‘U]×´»Ò1Èøž3QŸt!;xËB³Œ€£„]d0DÖÈD!h€?R<¡5&Zu1Ãáäß‹Yë˜5Û&^¶ú+™Èt ÃZu¤/³ ~ªóÛ_‹÷x¨Ž–|UÏ’ø’bÞ;zò50(àR¾­ŸRp±á:Ää-7¤$ö…kì¨#g¢¸¹Û¬›rê|·÷¼âݵî‹ÊV/¡eÁi8v²ž~ý`Η_~}qþr/´¦Ïà4ZXÒ×pbV ³ އ¬ ÓˆUÔ3!Ñ*N¢’–-b± =Ö˜´A¶ZDVj (5|ˆxŽ›?TžÎ3+¹lçõ?å¼=›“¶ÍQvLªá‡“>ûò3i–ÃàY­ÍÓ‘‰@6]³]F–£†ù³WG¬”IÏÐKnõSЧA±uj*LE€5qRÓ†J†ìQð™K:Œ<ŽWõ °“3Eµ¬¯—,m%ýÉjà ye:u'%±«0+à ¿¶ÈÖ¯†!>®ŸÍ„dkŒ×BµGŒ²JLA`¡—$/.òäxÒÍÄþœƒ!,¤%»ÊîJíŒ6‘šÐÈX¬ƒ¢ÝõÕ4¶~Šr´8¸[YÛËði‡wP„®ÁCKo$åk+<Û`:Ÿä’øŒñßÅiA¬M _ôZ'Ì‘0جAÕØš€";”CíËÅÅäì³¼àYø™~œ,ðCÛn.DêÅå+<8 Q¿2&ªÔ…š&¬?Ëh; ´u¡Ms·š—:¼ê½\¿Œ—èqÇYJÌÀC¥’NµG×À¦».ðL×(4›ÏrÎvÛj F¤«;’BôdÆÝ¨¯Xoñ¹žÀKÔU¡.ìk ¹›÷gؘêô{ty:ÁÖ†uÍì"«+ “‰,?:m„Á%ØÂ¬„^b·Õ:{æàÊU¢DA[¢ˆ IDATe ý!(hâðJÜJÿøý}w#N#ŽôˆWǰȳ­—ŒÉ¥ã5’I¾$[iAK!µÖŸ»né q¾úd:ÅTâ¬z—®ë @¬D¸Ôƒ/ñ%ѨÐ<(GÜ%߆Dz-SûlH…lÔ‡ÐÖŒøòëx‚00ÇÝÐáD9ü˜'È€¹òŒ,—¨aÒ¦[­´ëu˜u5NÈ5÷é²÷_“sP@­¸•»s?[sÚRÅd¶H eÎ$¹ž Ñ"â‘sI_é!x•>U¤/ÐúÍÆ#Rû>,F§®ò‚ŒQ+¾óÎâHX_"Z3›°eFã®ãñ\2qÙY^uæLÿèÍ© ­ló@O„y´:–Åë ;.à+Ku?K$ò÷JwtÁw`#\Ž~ʤ”XmO‡”ç¨òÚE²0’Ý _Ó‘”´3ý‚„G©Å¨w¬*«DCÈ~žËf•¦ä U !`$›yb*PéB¥KMñž2<.·\2‰d“u ׎ϖ7_]£áç?ûË_üÕÏ1’½- /|ÕamÏ"a3kò9«>’á•·g`ŒÞ½»öl¾#àtÌÐæ`•zä1 ÞxÄvÚA›4Þƒ¸bq˜F?Îý‚u_šl,’3ÆY5Éa…H ƒ¨ÒSšø„ÁEbcÅm;oƒ·­žôÜ•æ±2NSýãM¬6Ï-æ°­œˆ«KÚçw~æ o’C¼·DþõèŸýÅ_üüg?óÆd«YºìÍæùÅèÓƒfãÄn½$¤:o©fFI˜ê³¨=eÉøs@R5z ôé£+ÁÈ™|“òᇢsfÏëÊ ‚RsÖÀC-ø£ÄP[¦”ø® §²=ØïöÃwøïînñeýó/?3 #«bðÎ yç°rð“à¶zž¬èP^YB¡X3Ïp`¨Ö†D#±Rˆ '4#MN]@ë/‚Z…²Äºæ×W\øšè£ëù0«ö² •1ýÚja®<‚QÉ ™ i38r”S›"j)7s-9Tô$Þ×óó,Öæ#.°PÜqœD'`m*|.ꦀLOâ´>S(C 55^Ô2·ä2d¥QÖæ÷„„»/€ÉL·–^²XxŠ9n¥Ó,n1ctÆú"œª!)g~Û 2tάžÊD…î$Ì/@áJ¡è7rÀ¬’¡GN^LSŽ·ô¢I ^¡/w]Ê>¢Å²_»Š¶ämJ×àEv÷‡éšA ãã>˜D×ÀZb!Ú UzQ@R‰+¯zvÚ–ƒ-uƒ ´Û*ÊuÔ0ìB¡"F%u·©jÝRÐÝI¥3ŽëÕÔ®˜D´».ß"·-OÞ¨’ó‘ˆç2©·!àÁóZÝ×fh }ûU ô³ ŸÎªSAÔ·N2¼Âß× ‡JtÕI]j>PËTÔkârþHÓ¦J==YKó®f-ÃxÀk¶ úJÿb²$Œçñ.t@¿ôŽÚ1À|뇜|×"´æ+³RWäøÁ€Êaà Þ]ŸE«:vÙÊ‹ŽÝjáú‰&S(£ou Ù9c¶±6µE0—ƒ9û_¨iïu®×±Ù ¦úö¤5Š*J"GzÍ@ÛXÑ O­¦ç½ %8Š1 8ŒÔ.A ¡­$´(#˜-%S‹T2Ú׈¸-3{7`ˆÚP=®¹ÐÆ”š yªñ¾¢"¥—z©áÛ°s·44AD·*¿ô™Ÿ|8ëß™2ž$3S-AÍ|PìKŠnãiDá•­!mè Þ(¿Ž3…Á¦R†^yÖdŒ’m„‡ÇÂéÇç—%·rÈÒ»”Ô³H~Ä-‰)±® ŸT ÞÊN“¡Ò2nSWÓ\BKΗ®Œk dˆŒÀd4 Bmi_Sew]ä© 9rÓÔª)aÆ‘R ËKB‘KóüE ùa0³þd„a´©»U7ÔÖEÝØÒÔ»›o.´JVíõHûW/_ýò—ùg?ýËïÿû¿õ½OµByÂÍp¥šz9H¯14ñ°¹‹ÓˆûüXµ_/òú¥š]¬/ïà‹IœÂËÇ™v^›UÙ¿!œ:P/î×H °9”·åkP‹’CaÄ-l;`.eŠTÑ$­êB0€GBø /Ã@0“(s"¯¨ äÖOœo +“£¬ìsö=Wx|²…$!âÅœÉWøX5ðÓ#éÚª§Z—ú𾙞H+ƒGIó©§Ó5ü>[qMaK¶–€…b:+ÓkŒ@ Ħ†´g!jN•Êãô÷ÿk]'Eˆü <9%DâTžIÎX~ O¦,Æe±Ç¥´*d––ñ;?‹K½Pf~Ì5€EU¾F¸Ù”JŒÂZ:‹GæcÃFݰ¦$¶!„Ÿ·44¢8Ý¢|êËc¥‘Rï)œü ž¤u¡G¬Þº Yõ—ÓšNÑú!?œžw Dl#¶˜œC‹dÍåòþ Cÿ?Âiš ü™Žd„fŽ j.,äY‚úµ3¢F#9+àTЪü0\6ôXq$;tñÛwß²-÷=à ˆxM‰=-Jm…A*°¬AŃN5Ý;Bwj¸¥‡ô¾L›¸ñÙ8±Œ Ø´ïBPMÍc$®Zȼ„•Ò#Õ¹ÍÎ`À—!ú ˜A«ˆô•ôº˜±? '&¹tË a’Hª9.RUbZÈxKì+~5!ã™ÈÎ8cr mpp+8k¨®(C€±ƒBr†A§È×:| m6ubá‡*ðÑq*OeÙïSÏe0‚6ð(QSÄ×Q×3ðïÞ½—ƒY8ôR€Ÿüé?ÿöÛ¿þ{ÿÚÇŸ|’—"Ë,k{OrD{/èZjlwÈü>G‡Xøq½\½{ûöò₎ööy÷;ÄK-~)ñxá3å,O¶Ãƒ`$½âKGÓ£ìtÓ#º#ªZñ.?¢ñƒùYŸ+פě±EE¯ FÌ ­Œ–/Ô>LdUÈ “‘sõžŒÙƒ…„´K«y+D^BA‰I¢¦B!sÂF=ÖgöÒÄš|~öçþË¿úÅÇŸ~*7éY’v=mJucv„lëø# Ò¡åP[4e—Sz"U^àž¬PU#½PÈ~ÐŒND¯›?2Ù#ú%¯òÑ$ù•/ӲФ @òô—`š¤÷8«Îàøáε§JÙÛj<èDpï¯ï¼'É£GzÔè‚õr+dœéQO!*ã«í™RºG¤º¥•½E&_zŠ}UÝY;×DF6ä’^äp¦7Îè/óf„¥åh¯n‡äÈ€I׋ÁPfñ0t*#½L€õ+·ªÖÙÜ<žçX«óûÞ€A°½?êÉ›;öyÿb4ŒH¢*Óò©’äôˆ 4D UÆ£».ð.ZUSÂúámfõV[5FST¦µr·%ö$I`ÖµHKûúÂB}¦’ÔHYï®nëT¨Å×êkì×bàr9³ksÃ*‰D#9S¨.#Ír.O«î ïˆ)UZÕÈh¥¬wÚSPƒ6e5¾ºëÚ&àdµÍÍÒà.êNR‚¨¿zKÓŒ—R¢® B@¶ÏvX{BV’*­4a`>5á™Zu¶Œ[6ÀNüî3Œ=ðl .ü¬™¨ÍJ/¾¦Ç¢¤¹pKs•‚FcWzðáÎðy{âÒ#xÙ·E¹Þ59dÄïq½èî4´ù±ãÌIƒ”T¬~N‡r3E»zß^6òÈ*CH‡xÚw|µ–LnØ®a:ƒoÄ’‰–±XÓ„V½ Fr_ÑÙ…ZEŽÐìÚ³3@àœ” ¹2àˆÞ%~d51¶F“ñþáéÜC}Êb ç¦$Ì‘ÌlâwXAuë°D½¹N² wŸeÊtc§#Ï9 4ºÐ1Ì #x;†‚Õn~+ñì|¥Lè°Ù¨dçõØ3Š+¸äA¤ÌäÐaE½b™¡v?rDÇÛ›r>:ï‚- y^׫G_|ñE˜9ðY{.H†ÉÃÞ†A 0 s„Œq›çäm¨`…ÊE½å,Ñ „à‚JOy± M¦’ÕÈœŽ2†%×v’.vWËf†.$7d~«ÒxÃÎ:5.+¢~ЉôeËM\B8ɲuÔ ¼*‹áD4ñó’0¦ƒ¤¿-RBƒBâåOºÏéaÇ|c†X-¥IäIìI†ê²eƒ ›9šž ð‚*eöŒäÊ…²ÊX^­œ=lxŸ¾hNè@¢±‚.aŽmÑSd—7Ç$i Wyµ=Ì&J8‹c:R*±ËIˆç³MÖüŠf‘Ûê‹oík’œ¥^{­K°†P§åÿì+ŠYìÝxVñ¨’D;)Hƒy-žñÍÃm"¼#3â¨wºXŸè¯Þóóp/ÛæÌ€ÕyÚëÂqEoؤÈ~™&lÅ©òòaÙ+Ä„uìºË"üÒ¯gkAÛ‡›ùØÛü ö×ï¯o—ëËÿÝ›²îonü" ÅžQ„-4ðl¸²¨À*Œ1‰·HÇæô‹/¿ôÓ.o>zm¶À8%$촲ݕ*Q®!_[z-{ŒáD‘'V–gg^íí}ª¿£ /\†_/Yeäõô2fˆdØY• O úC׈ â yC—EGVˇ’~fˆ`•™}EÚIAøÛËÍ0½›»l)ÁÎ:Fpä¼­“ÅyÓ‚/®^ÖÏ1å]œJ¿›D¿’ÎÙ|õ‹_~ö“?ùãßùßùÎ'ŸÞå‡uØO– ž)XëQ >S¨u¼ü†ޤu˜)^TçëéŽ1UˆLCw¦@|JP¢Dy÷0Ut\‚0V‘/þÅ÷ü$¢5\æóYÐåYN“`8ÆùZ¬:ÄÚ Ðòí>&æõƒ–d”Žíì½¹m9óºˆ ËYžÄn²œ:Ì ЈÈO”0Ññ_á.{ ¬,£’°Æz9BFÇd°FÁ*[R‚«?JgHQvôžË­x{ί1Z"5ßÁ´“:‚‰þ¹|~(‰»yE…µ+F® E`3(1P»/:—MÊ’€Ù°Bmƒæ’¼Œ-V¼Ñ¹woЧkö v!ÄÔ0‰€¥a³yGR"j†¡ÇžéNU“#zÔP¨«IõÀê×µ ~uW`@}õêTŸ‰ÕõHT©E`|:ñoû`4$_¶wùâŠHÉQ`g<à]X"+ðÖÛŒ(a'óŒq0wwÊ(ô ¹JDã¹¢=GÌ/?f±/yà©hk®kB ¿jhhã©EÓ´+AÀ³å$k%'ÌÉÎ:qáíÓ“8”Oj(€ˆTx ÙÔ™¬Ï.5$|ÍWì°O/ 1:+щŽÐÂZŽ^ Œ9zd¯@t-vBçe’Ç6ÓN©56&>3&ØëRÖ«G*ÿãøX6_çI(X™k~І[ão¥y•)· ŠJ}4ÅJl¬>4c„e˜3›WR…2ŽÌ LÚµ•Øá—…¨éÕòaƒ+ÃÒJ¡ÚõY“”™@. Ùµáè=’X4ŸÕ<Ù1bÂE¥“Ö£‘]к¬­!=æAŒÛR×·zR¢}ÐV¶^DņdQ'ÕÉ|õG1d‡¶3hÌ¢ìI”u»gQVÁìG_\H‚9m++Ú³Xâ«îÈGߦ˚‹ø ^½í?à[ξ*ÇÀ «/$àk´Xj. ¹Gó«ñD#¬S£Ä)jõwóë ÊZ„Ñ4±Y^¨HÑU«|t jI‹¯n8ƒ—,Š/úr8xlL)/J0hÈâ9Fæ’§Rh¨€¥8C;¾³Ez0/7?7ÍT£jÀ§I%èW¶u…5Á–ⲓÉ:=¾ñcZ)²ƒÕyQ‚wR7ËÞ~î*ig:’€â]qùÝÝh¹]ÀVï<è÷ïýŠÉµæ}ç»~Õ˜7yn0Gñ*G+EEHɲöžé €’OÖœ—ÔÇ­ÁžÍº2ѯw i#jôš+¾³>d•(G¸bxuLÄihÊÏ›ôýˆ—äkí3¤‹Î,€*­sx!„3ä˺n™ žä@6JÈšý”pc$„8bœÃx¾ò‚."™—z±„-ÖSx¢§h½PYÍ&* ‘Êæ-pcÁöå—_üŸÿÇÿþïýûÿi†…ïçD$CõªRá ®È±G¤újœð/Ö#»Üô´×@I;&—Ézü† ÄIÓcjD^O =xK+¡z[YwAÃèÏH8m0) ¸ÃEáÓyàcåR.Où1Á<åš!ŽbüIÓBIvmò[ ‘õâ_e){Kp’Dg˜Œy;B~f§.w¡wò{¬hÀbHÖPÉ…Õ÷£$úÍÝŒ…èÄÕ„âJò2XƒzžqI/—b*íwÜÇàaÅaö (#²Ê„­Ip?=ª$·;oÜßnd˜º½~/sViyyC|R“¼a³ŒM5Ê„xo¥r7«ƒLL'’7ÆT?ØiÏ.óÌIhà8pèk®Ä20‡{–~ÐÉz9•ù±Wµ1‰Ýàg¿ø…Õ˜O>ùÁfëý$¿—>|ýõ׳ҿÃk H•43ÀLÌ*˜îp‡¼3¿!蘆L=q`˜îe‡ù ãéã}~ѯAV ‘X~–Ô{P§ÞŒÚÊ kY N|£/:×P|+ZPÆ‚+îûÍ›7~þùç¿uõX=*ŸeT•÷O&­Uw 3gWŽÖ«¹èÈ]_#äÏžgnÄ«Ò-·4lÂtM‰ZStO9°5¹µ[ ¯C‰Õ³ô¢¡ÑL¼7Y]{E¡©*lÆ<é7yp™=‘&£%€w±ÐSè= –QŸý@ÒѲO»-2˜ÙôÒ‰ÛÛäâ~ÇO°Â=´Ý|…r|3ÛšõS¨O§,]èš*ä¦Ce^TV?À—5[ë6Æþ{qyŒ¦Ä0Z Üb‰ NÇNÂÏžò¨)fU¹ÓgXV|~¸~Ý…Zö"¦E~h¥m°«o‰;Êð‹°…‚!]—ÉÖ$- º^ÆY×É1»­Õ\Cða*£Ob‘‹4ÂvÙ’0Ωq—` ‰NóóDʲè‹6$8—­%Šýf¢G²3Ø ZgF÷<;Vs¯ ²gxŠáU[Å:ânIFk—&¹Zq§IEpØOr—%ØÐ¦ ”hl]Ó’Q¯•K¥¶\AU± ^|ÅnÉ&d$€“Y”ñw§¬›Ý ÓUà50@¨yD—¡$\ðYdWëD!ôÃé4%$_}Q@Hân”¡OWu_oÊé‰ÕSLN£ßJ:N$µ^¤2`z4¤±dÚ–$ hÊ]_•|ìòJæ™r˶O¸s}&MÌl„4T‰°n®ìÒ–0ð—Êj¨8ªQªŽ4A'`º…*‡ƒ¸6£ñûßü“N¬$DQ^öÅUŒ8¤'?6°&=jäÖ<¤?å3ðùÊjuYTEål@¯.š'E„*ûÄv ¤áF#ð*5Q Dx…Ýõ5ÂmVÀÅp†:>@…bèQ‘¶„Ä`Ïë[â8Bž†¤‚ -5¨áü‘oËsG6DÖú.C …R0à›*&±@Rioº—$7Ï|”³,t˜ˆÂÐF%v¡®ºV΄fü«×]ªJšø´z^5 U†pÄŽ xï,ždZ\4IÛO„¹2 Öª‰¯–1B@Ǫ•m"Pec&& €‚O±fžåç2\¥D¼Ú L–¸ä»Œ’@Ëbz䘯k Ø[mT»‡{bN‚PŒ4n[&¡É©ëêð$%ôX°¢‹5—óžïÀ(©q›b«Ò9Ù#ÅóÒ¸t3åø¬"7»Ð…Z3e¶Ége9êI M…3‡ÓÑ,3`c›þd–™9ÅÚýzƹÅçó³K©“W§Æ5X>³äPBN†db‹™ÑbÖº#Úñvs:]‹KY\øÕ«×„€#Jìô×,9­Ah1Õ4˜»™Î{¶ß µõ¹½¿ùéOþÅç?ÿ™×¶˜ÐúÁGÛâ"ImLDòÙ˹Ÿ¤#Û,9™ Þ èÑVÛyea:ÁHØu¾F}Û’N‘Ûú¥ð.ûŒjË­NæZgרƒ¯8•ÿþ Ùv©ñ0ÖÜr!7RÖÂíTY÷ùòÿþ«¿÷7®^¼Ž]yST*ŠÍ»´í¯…$§sky:[ã~}ò˜=µ™Y!å·\à‰ÇWT•з#7ý"–›è1 éÍêu„ñ²G¯¿HìÖ]­‚¯a Ñ/öÃN2 „å,ÅlÉ9‹<Ô‚U@È(™%h0ñìùŠùùýoqγ–våTwœ1ϵq¢„¯ôqëW oï|eœÒe?,ƒ¬@—37·ï}V_9вòµ<‹U"!|•vßzpÄNÄ⎕)ÔÐv4Ú˜¥dÅÈS- áÅ‚JTò— yO–fëèMt“=‹ e}vV‚_Îa«È!E百Â>0ØÔSMmK Ðž|6Ëý¸ËÊnX¨ñÏ]Ô„¶3`•xÑïJ$Nl>ÅX5Ùý¬p¤95¹e‰°ÔhP/áO ÂfãÉãlûßì(rH¦ÚVw¦êÈ•5oÂj=÷‘ÌTóæ€Bø+–ô¢ ÆÑ‰ÎNƒaü.”C’Á¯LÕ‰§öšH4u‘YÄ–÷ŽT%DdWÿÑt¢>Hª‹$_¨Z¨‚ž,ÁX‘D¤d^ÒY£xnËA’®?è^¹­-@óNþ 3´¡%ðIÎòF;¼9²`ҤЪ‡ª÷òJMQš¶ÄÍ¥=e%  úÂľÉó¡+šÉQ·\¿ÐÉ Ùå°òךä•`ug´«`ëwîdÿ~_2‘!޶­5€Õ3³zr°ænaßÓÀüÜNS}eÂQ"®4‰ó¨iÞ)JŒðû‰.ùýíÝõ_}FVö§úÇÿ÷?{qu鬀_3”r•ùíîüŒÃƒ;ƒ§_üâ—Àˆå^‘`Ä—CØo'L'jJ‡'oèÉ ýe0•¼/(á»êÉ6´=û¾ùÈŸd w·Ò¶[ ¢C/`¨ONö¤njNmcÉQA™zÌý—Ÿöíg¿ø7ÿ­û:Êñt Ö†>,-Ôz'Á&ÈøÄ]—[/èäû> ejí¡ƒ­MXÑRâňÙA‹åR¨8ºˆxÓVÈ1Ü€S%úÁ?ëB⛋~5!óa)5«—Yö"õ’„apiîb¢š¢fª![T2l4èÌ £>ÌzÄ‹NuÁ`|uIà@ŸŸ³2<¢Wú扇¬:NÔÆM ‹»8@Eì°m¢‡cR%C‹šÐC0”—€¤I~5üåÞÅ*o6¬¿•5³E¯t4w%4¤¶Äâ¢Í ¬__¦ Œ»îý†·Ø©Hð'€fbñÈ)ÓÊ¢K³x­…¦åJÞ—3Cˆ$µTÆ|‰gD¸ ‹® ðÊMÚ@¶²4L…`@ô>ÝÅ‘ú"Õ© žœ€Z²‹ZÊa$_MÄf˜MTœw”…ä1B0Ÿe™YˆÒQckâ©’S€tõ@X™fȹ)Ô 6WõUªI¬ ˜`Ë¥Æg5Œˆuên‡ex|  Ò'6ÙR¸ˆ%'POÊ j@ê ÑP)è¥ës+•9”³¯$z.äÝ\HÉg Ö4x7+äz;ǦNc–Å‘@Öy;?F8Z5©èôML—Öznÿ•ŠPº”]†jú9Êõa£¹`5aÎ mæÆè ¥I銌¹„,.HäÄP`;ÝNª«ö®ÚûÝç¿ÿëyÚ³ÞZ{®¹Æç9æaÍ5ŸTÅì@m­pRÊqKE Žsó÷~ﯙÎ#T ²L²ìÎä’5¾å,æH*%J™®(0];$+Ys$÷î&^ÆÆ.Å»‰ 5*0*Q娏ÎךNZ~5žá¸ä¼áÅV5²4 <°á<ÒòC‹±ÂCÌíc¨h;E]Ú*lŠ}÷”«iðªèWp9h!Æ ÜPMâyÕ|ÑÃ…p™¿Œ¹µ× Ç,…ôü¤>?Àjþ³—–Tzkó¢äŽií+i-ZLÜÇá"ǹ 2,óæˆà‡Í·Ÿz .ªÒ,•tžfÁ0stŸ™£ö:79 ï€!Aj6¹Ÿ[¡•EîVRc´$ 7½“o_ûeë<¦­šÃX¯jì5Æó™sÎ" ¡5a¡ŽTÊ#/d›'¬l!a®KóµHÉ3`Ž; è”ÿ?yòX²s÷‡?úÁoþ{¿yÿáåw¾ø.„ýjï(ÙVÈgO¿ÆþKÎ ahLÒOÛwüôé×Ô.˜ÍX43ôȧÏI>ØwÏ †;ˆ¡Þ6ºáúàŸ–p«‡çK±=NE»Ä°ª–=®¤Ã, ÕÕä‹D†J!×>yòþÑÿþæÅ׿ö—~ìçï”P/Ó‡iß2g7[º¨Œ?4» “«¨Pa,»˜Äö¡Ž`އg!‚ ª·ü:[nåU„=Ó‰ê€yŒx•3Ä„ À/]1Π”Ðs;¦ê´R­¥ã* Ž·6*Ɔå±Ó܃¿qæ©RÄÞ¯ýü³Ïñôâ›çp>|xiMŒå¬ÑUmy”ú¬—OÄYœb(Ö2ÐÑy>K n)‡Ëcf\1ýÑ%-l »f¶0M¸È6g[ÌwÐ}pN3>ăɒ[žKJ3~l` f¾Tì%Q[æ=J×5™VËgVó,ËTZ$¼Áϲ6©Ë}<~Ïô™÷§µR,SµBFô¥6f¢š±×¼çÌp.TPNAà… äæßøíÑôÈÉÓ†´ðëŠn9ŒÐm/ag ®„[µzTsæ4b ŠZze1šçø·ŸÚL#ãKÚB“8bÎTœö–è~!D¥qˆÛãí ä1'lì¼l«²z$q†-Gk‚§’Û–V¥ ¼ë>•¬]{UÚàO…ÓºEf˜"©vNlIÛ­å7\äD47h}殮îÜÉŸ §`²"mLÇ[”C‚›!½ÕǦӎèv‡ËE€úbn©–·Þi8m·¦‹–[•ÈXE³U`UŒ×Ïy#0„4Ø´ cX ÞþF9+)XDG†[\áœ,%êƶ¡š×ð|œ \4’x;Ršß»nϨ–—ìä¾ùwþößXÖc6hg_ 'ù½úã¸Ó¶³AJHOÉ ~õEGnñ‡³lV««aëÃ8ÙV1žËƒÇE\©n8¶Ç¹#„êæmšaS Àš¤ŒÍC]æµ®RúF„h°¡¼TÀó{®öQO ŒCÌ0N®Ù ¯©¯­#½|"C’h5°l ã'yöìM1æ3¶²åST+7êŠmodQ¡Ña!;Qêè ³™Ê3˜Å‹~¦¨÷Eü¦7eÁ,BÚxÀ«ä©»±²®+fd³0®nSÉÞ­„`^Š,+êŒëgåú‰åf Oj¡Œr&®eMåveÀÚÞçö˜éy_BÚBÇøâ*í“ ëãÖ£ºªT)Û´žCÒ>…ß#ÊG|"kA¿ˆ1Ák@£Ûft`èVüċ䀯PwŽŠZì¤Sœø\Û™xxôgÄQB‹Ž:fÊ0#7Rï¹H·’Û ƒÛ×í×LÕù°ý=â0kEÞ6i¼qÝgó†& û°ÙJIs‹—mÿîÞø¢bz§é-ùxuÐL}Æ'Z44@¹‡lìñ{«ŒBmã¥uKžÒµ]^<÷è]0ÒËbF]!ýT$éꊗ±‰ú*»»;5Êà:FVåf0áV±êûh•<øÐ~ì6RôÍüà=Ò™)œfÐJ²ŒÀþác?OÞ圗ÈGf!À¨bĆ ä:=Í(Éss=F›Ô |5ÓªìÇ"@î›ß ¶¸]Í«…ºnøèºÚ"š–°Ÿ×^§äÖ-Cˆµ7ü”áKáT‹2Ú€¿˜è§.úmÞ’(YÞVRäÐj¼ÞT˜A#Ç#ÈÂÉÅ,Ô„%Ê4§eñiêÝÉŒ"NÑÐèЄÉ{Þzè‘ôê·²£÷ƒùIßc÷›}'š{Ü´œ Š]k–ÍLñüzR°ËåÃ-»yiVʱäiºoԫа|Ͳŀ†€é„éDìð’¡ ’ÅŽ‚&Y23)Rªeèc{–1 ·á…Ž_¼ÑçâÆ ^9XйLµ¯4Tv¢Fiºü9TÈ=x8‡òuæä…6BFÌó¤Î‡œÙ‚Ð*œ3ê5°é?PWÐ8ÏR3 W‚ytHµ©ñ%r]^>€Š ­·±‹\q+iaƒm0`º…_Y›|ÿò™_HüúÙóÇOž`J¡¾–yQU]‚|‹îYÏÊÉåò¬®3§jÉ1XgÈ)ÿ†—nUÔ,½,Û=ÇÇj6 Á(© ·›F·Vƒ_!é€qÞë‘H:–¡ÿ‹ùH{Ï ÒgzÎÞ«‚TbxÍU©‡D^öáÄLjüJuNBü´;">¯_·%ëÑgOSÆÆ;gˆèöåæh-…Ï ,s 'Ÿã–sج©UœÌÛ²hèh(´H´ÕvöN; ŒðÓÞŠq`ë0 ÇY*Žä#œÃ–W\·&÷°[DÌŽ:I²Ýœà=ºw¿Ùˆþ ZÊlÞ4ñsZ®6R<@:,WHl›vDñ¯Dš€ZëfqWÔYÄŸ•LΠ­&‰É­å*“qË&Zc²&ÀZ=t $ Ú£—+…³ˆÂÇpÅpŒ„"ä|'T7C4=ÄÑV^›„×q!UÓòzÑð_ÈY#bݵ»bRæ`©§–å:¡,ÙIê¨Èй˜ÍfýÂ@–+R¾ •a0µ—ðÔ—1e$ÕåÁ{J£+òöÈAQã]ånÕ’”àß0B]Iù°¤ÊFŒfª0zŸz}lE­Ý_Ÿ‹…DLP‘öðgöÒ:D†&|ÒÃG•‹K^ú€$‰EÙDƒãØzäo°!aÄÉ‹”>%ž°@{g8‘ä­V(Þ7fÖÃ8rIõVXˆl±}L–ì9W¿0«üæþŸþ'ér:<–ó½d7‘Áú¨µq™Óã¹)ö±6V”<-ª+Ï÷ô)ú€4Òê1†ŽO3`f±c³äéj°EïÆ"ïRMmäÓCðc03$aT™ЈVOÅ:ÆÒûRí˜@ÃrG×uï>Y”gŒؼ¼îµn•y¶_o÷eV›m&zy=óö¸äRqTRp¢8C­&xOÖN uWÕûõjRÚ¶„O=’Þˆ8 d}‚gÄe‘fºC£t=…v†zQñ–‡Pi™YÁ2~spS.¬õ/²{“]} ÊØÂ³ÐO'ÚœðhL”Ñ*–˜9ûÍ\ð>‚‘ÅÈFZ0”iœa•bš.wÒ¯š€"\\n¹‹j..ÞõýMví‰,`„ƒÒ'>ªŸŸ×(îš¼á;…6ò˦ӓÑVcC0:7 ñ–Wu03C"lc²Ô¢k¬²cÐ"&ãÈd8#b¢vbJWó}tkõÁXŠHø-À™p[_Q’wÅQž„®¸½&!JHà†cµö_Rc]µ“æ*´ZÌkž“MÌùáüC6lÀÜ’¤4!GÒªùY;$F¯K¨F‘¶9>ÓV•×:!†V"1 \ÎU¢¾þí³§O\xßÌÆºs“cÇ´u€SÛR®õtZF¨ßô¦Õoàô»MUÖ§Ös¦[x|)ĹóV_,û™'˜\ZIJz H‹ûºã¼˜²;ÿŸ¿sãŽúÜöᥠÔÛãÛOÿå¿xþÕÏ..?ùì{wî8ëÕ9eN{å‘§ôç¸/j«sŽ~Ž ggÃ¥<ÁOlOÏ~Šuã Å:0Õ vÅÇAî?¹VÎ?æ+ʬÕâW7Ò…KÜg´Aü<7T$‰J{Ú ¹¸Þ|ÝBb<_]½4mÂê¾³@U-Ë{JrÔÙ?‹º¼–à¯ÁL÷é¿!Káר×mt˲ê‚ET“='˜ñtÿÖH¹¬D¶½Ý/Bz6]uƒ¶âAa„õ1©–bRËÄ¢¥ G+ñ†¼ãþ¦ Øš/©0ÃFKü -†éU!;ý¥W 0]L¿HLR„¸ÏëúÍ8]I–iÕÂgD[hJÖm᎒›âz±N0…Ånɹäp x•#¼(!5V}‚ž’3S¢ µ& ;ž~í0ŒÙžyåÕÚý“4…@l§3þ °¤Ì ‚ô6üˆ$Åp`I/UÄ0‹*-)jY5–ÀO¢ ªnU;®ã C{äZæ×dò¸•ðbÈ&åeNu…m^,Ë#¢±³Bñ7]Œ °•—ärÅjæQ´,äcÀAÁDžr9úœ¶Ð¦1%b¦ÛÔ¾ôƒ¬û™!×]¨Ù¶ )¤Í,ÑS"ÎcXR‚÷ÊÅe6¯ê*ÁÓÙÔE.î 1R6GÂ<Ök>l0§„i(£áVYt&L[`êúwùÔMðI%n%¬¿Ž¼ÊP¨tc)?ˆA)û.©cs¡e/r¼ÜÈ/1W…n!é=Kov±)KùôqæLdˆw|³ )ç<¤·ê Ç‚$†dp.c¸$] 5S¶z¼ 8FŠ2nÙ@=Mlàa ˆ‘?ŽØ<)k¯ùžÆ=9zå uÕ!‘‘ w¥xü©èv¯–«Õ ”'V“¼¡c¸çíä:à©ÌÁ#”ñŠN± ‘ÇScXr›Õ›.`R#/ÈŽN¦¹Ž¿P)œ¨bfÙ$¸·žWÝ0Wm»$éFŪ~ NDwjê·²«ÎpÊ7Ю€ËüZðÀ§ÉægµÍ°ùrn `dj`Ñn~ˆÊº–H$¡¾ídŸ®ªOT â$z4™ìHõCbÜ)®`` Ø06lxéMw¡|6ÀlÅa¸¥2¡@×;#ÚzÊÕpUZlkx·mH­)Lí2L·òËc`Ü`Ë îì‹MŸíƒŽìTC¡E_²è«–“ñ´g¯ÿñ?ù'ĵL¥ä·û·Ÿ>{ÚH¯ÐoYuinj+Ø»6è „Ú&`T@ ŽÕǯ¾üò«§_Ï›Ý$Ö©Ñ!ædwpnU-W–²fKŸæâ«…˜YaS/-èζÊW!¥Ü<¸| ¸RMÆ~Øš“wC"PcÖXZ¡¹wÏŽ{j³ÒóòÅK[ÅÄTãÖñýÓïÿWâüü…ï)WaüÃÃ'Íî5‚Ã[ÓÉÞãðÌgÊYø¡›á®]³põüå¦ê]ÙLŽš´4›åXxèl1`[H¢U85*Ýr Ø`"”C ?tÂh˜ ×ô.iIFÍ+|ß¼„{W´¼o–1…ªmgó~äõ«·–ÿÍ—_¾¸ºúá~TCïSÄÛO?öÊjàûÚ^ulp®çôWT\ã|’6EvÅþrÔ‚›0 £ >t—Fµwæ™ ö ~ÓF׿Ãp3+,âîP´øJ2ú‚(8CLøì)!ã[¯žER+eˆ§\BÔŸæB‹iS}Mñü8TvC7ã9¸Ð°Prq ´ ˜Sv4÷0p›ÛLÂ̪ȕ– e»íãÜ"Á[Tqp€Ëš x(´óÎ!Å,þñV‡¤†VõiUÉ£•b åƒçàA ¹ðÕ f9ó£pQ©"ï `(f)ˆ=…JùñHoi¹~>PUNRåFÔÓy… %[eP½e¨E!·àÝboŒSÄC*PÏ4U˜S9„5=È'= yJŽÑ£÷DÑÀZJ^=@±¢ ‰DX1§Ñk­½gà»såfg IDATflˆs«4&ƒçËÕ˜¸Æ»)Eù\zŽã†ÝÅÏ«EEOݺBË  Œip-xz')ìLµ`EÐ&ÝT$xûý¿þ{jJÞex¬È{`øR{˜± 뇴äÖæã æ ëUÈc·¬¬pÂÝ R}N`Ôê’ïJ†úfì MbÔ@T,9™B0Å þ6íÓTÉSô“3`¼Ì 1¹Ày/cçßë»w•ð®¨Cà*? 7p¡Dµü¯pjù7/6ךåQ>Öuãfô^`rÿÚ?ɡǷ݋Û׫+ÝÚØ&Þ„¹š"xTÈ£[ZBÊ(ÏÛȽ]ýÃŒC ,oЄkžæédÜÔÀîhr¡-üñVª ¨=P‹¹ÁçQŸ½hDó”EØzÄ ç <ÓÇ¿OkWwu'$à !ûÏ´ÆUøaºÕù$%Q£–Ñá²D.Ejs-h©hŸÒ’Blô”-&ÍË)úâšm5Zab£él@«»z,¿¶¿“f#¬p,Ó¨[ŽÏV[GJÏpkŸª¿1IKâžsÄÖ±Ûñ:¡ïv¿Df)ËyÍkuðIàûǘqþH$ææs™Ü;z($?–honCCÛUœG€ÕÊIÛrPœíÓ-cdß,ÜÉÉwŽ[06†»n¯¶ø±ª:̘‘Ç)dàayxÜz¤–BU6É'žÄÆCx¤Ð#Ý5Q%°M¬¦F*Â?Û ÌY@é%a§“°!þ©ùåêο|žcè‹1°Å©·R§èýÃ7fâŸC“ã6n”l•ðŒrÚPá8ꓘ«%F †cdz¹fºïnÌh_EÕUq•öå£÷zÎ7ÿîw¿øƒÿáj³¿ó;¿s·E{?qó…KOŸ~þäÑ/þõÏÔÅÆÏ~ö³ï}ÿ‡Ö3M¢AHä'O>ðà‘“°7öÙÆ!09–úÚø’ùÏi}š˜F'c%V&Ñ&¦h;ve$j¦¡y‰Òîx¿fJc×Tk*q.­ÑUÕhï ˜!ð‰Ÿ'?çÏÀ÷¿ÿ}¼5j|ùÆ AþU~çþOÚŽQ´NÚNÎ×PÁ!.ZM1Ú3&-VëÞ÷õ>ìp0X ‡™t9ÃÃ4@½ûGð·ù¡hbñؾ–Ât^-D3`ÅîXY–íè„DÜ@6SÁàו"œÝsHšì1]CsM·Ýœp•†EüyºMF úâ»ß¹zn-¿Öê ƒ`¯íts<|qýåÇ5¢m&Y*£Aq†øì{‚K^„2 »®zíär>|F}Æü‡?Ò¥²ž‚Á0c~ø—톄C®ŽÂèähÅJ@z$…*Ák¦ðóÈV]0ûuÂ;“^öàZP “«ëJàOØ0P³ŠyñÐ@,Ýi.žM[’kV…麶À*aù iE[´èº¿.*c vXb°ÖE!HäæµlqïÌ•ŒZ®ø_HO‡ŸFZ GKW^*=¥¬ªN>y¢«` žèª¿ÛÅ£Åñ©•®TQ¾]O ç;uUÔ )Þi§àB](ÐJc3)xûi ªõ14ÆFÃ!‡d]*­õâžC•›Û(¿ 2 W+åá§S?:Îi!sÀ°ÍXõCÿ‘nó¢x)†L£#ÈáEÀ G}u¨ 5AH4^(ÙÆpƒ3 é–€ò®›WÞǘàžs묕eÛ„ÓQÏ>4±åч\0~\tqÕÛWÇš  Þúš!Û›íwÿ*ÍühÆÌªÕ‘”ŒTZi8¼n4 £û3¯ æš´†E;’¸c Úûd&jì $ãi`”@–ÎØáS i/pÁxµ'#æ,Ǫ¬ 8‘7ï*­¦–fú«Ä»Ck°ë i¯5†*žæ4Ú‡?bÎ{1 Ÿø2½ ãD/Zøa>ç¹™¼D0²æË×ð”ð' Ù*jÅ„Œ?/UR̸[0yl` iûÝìÒxfn†rŠ˜=ûZ©Ú-ލ^ ßEb”¹Š÷Ð4=€™X¤oÄñ¾†/Zr}·ü›ëÑÎOþò_þõßø 4ž|ö™U,%iäæ­§Ï¾þ_þ§ÿùÿøã?þ³?ý“‹ËûŸñ=Œ-áZ°’2 ê„özæÇ,«X’°ªxâAÎG©Ü¨öG*ÓUôU–=Þ*«üx*¿–­©hûë)1exžG‘Ùk0xÔ0ÈSœlàòª-v:êÕæ”4éÑD¼Þ¿¢'rÕ™ü2¡ Þ”Ë`fo=(ÚÇ*q€y,¿Æ ¤Ã DZTðÈÀ˜}Ÿ®¤˜ÄšGúAa#ž€…[Äç)§*!Ïh2ª`H™xó:b€Û`—÷ô²(%~ˆÀdÔ.ž =Ìjaº†6ð`v-«fÅÀi;«Ÿ‰~ª´%®gf TŠV–«B\åe\·º qÔEKà ç–úò3ªjµÊõE;šÉLj­Ó‚'5ŽpeDåÌåK.Þf¢9ÙUAéˆ0È›À{&žk›.BÄ¡™§‡žå- dGÔSŽ1Áo-r¾™ÝÎ¼ÍÆ±y¥­|:J~ÐÐ&[«šmo} 4å‡DÆQ²§‹#¾FÁ$ñ£ñiÓ;AÂç-ø\ÉlžµmW?Ê Du0#fÚÄêpžp>¼åñ#72±%òÌʨ.ÂCÕtk5üP½gÜ2Á.$–”œ¯›QÂX$’YT:>TT²iƒ˜öÛ¤ žÁ+_æKžªBò` « ]ÝÒ¡*ÜÞHÒ^ùÊ'Æ‚4ðÒ’”@3š9ˆ`F‚A’¼lhÈÑŠá)cÃLUœ©~°õŽF6ƒyl$o@Z¹–M&áÜ^ ªeX MŽzG§ÓQ×'ÌZì´H½À¶U]•ª7¾H™oÓ2F±F•¤GW9TŸ‘@«µ;})rÒpAÂS‰Úýô­[ÃHŸ@*IcDy¼rã›ç¿ù›æ+Ôšx84P̽81›ëM›WÞPB{qQ®<Îð!C³9òb¤¥™0ø›we–z?xç^{á}|K,éâ²h’ÇHP©ÈóåñêE6aNWÔân^´ë¯µ{%S8ðí¯= ,£\˜6}¿0Pë%=üsÖŠ+—2$&Ò§yT¡M‘íÇ¡ëR†P*žªjà¯Ê êJ"Ai3ÎBKÉân&s|”÷0=Áó¥öÉߢ)­ þ–Šìl¸Ó/ SKKfÛ<–¨h´çÄÛÞÍé´”Ë(g©‘Ï .ÕâåS&¾X{CK´ÚÓñ{q‡2½Â1íi0¡sž_«fÄÏ¥˜ ½õ2'%À P’‡ªÓÐTã72Ö%[rè·qÀ#)¬ªˆ¾yi62KÇÒ̲©„£û4V›<”d6È—øÅÖCeBP Ìö*ÞÄ•2ê%£ ï$´¶2ÕM|½nÕ¢:úÄ‚Öj¬íèpƒ ΫÁü-¾@8Wëq%Â$®Zê•^^õ›€^jÒ°!AjÉȃhă…-kCõš:Íöï÷c;?øá~õ×þ-o}p§ÛŠ®pBÉŒË/ dœµ1‘sµ þZŠ¢+,GÒ_–hR•!M¨<–¾ñyÝsÔ‚ñ¨QÖ±«¯ý˜4ɾjpS¹Xä«ÁÏà†8zVÕá^íq1¢fäùHÐzÞ GüÑÿöG¿ñWþÝïýÊ´h®ìwõXfÏ}ØoE4ý¥9’³È§ÝÙ†ŒÃá¶wî¢ÛpX¡®Xá'}±HédmdÀö&m–Nä%äÈb˜l#zû[§kb. ráyЦ$öS²·®£ù:WÂMBÚ9¶{C(&=E˜eÙñÆ´Ê”J ×l·œ~üôµµ+£+ïÔ„> S#ï…„G ¡Öƒñà@ÂÌ(SÇ ’bXó(®Š¬3ÔVÚ(’að¿>˽ 6gO4‡s”XCQ­Õ0*êÚ©„.Ák …=Iq‡ `P*<ò÷y§A_ý<ùi/Ù XóáÖ‰øÌm(ÁûðIL™KÏ0wOÊAÓßQ·Ú œ)~”¡ÐŸÆs1x Gxˆ<]Qކ !¦o s¼î«7Qá@›9Æ yÕÒ×X‚í„£&lÅL…ô ‰¤0*šm-E³)/ –ò‚h%'3r¬ u£¢œž­ë^ÏCÀÓ¥Å"›AçÀ`éê#ÜåÁ£áªÁ î4pU°ÃJ¦ >9dð¬D‚mà[áFE‰Œ´¦÷Hðr{hº!…HC;¬ökÀÉý³ËµÂ²•°6¶ T“!‘+l[¸<ËÃ9Î ¢„?»¤­n!—–ŠêÂSÀüM9çÆ†ûè1k¶†LEéŸV”#1be»uCøĬÛ5ÒõHuüû"‡Íìz|ýò•Í„Ö/L‡–yœð—á$ºùßýÝÿ6"Âe\Úk¬;™ NÞÜê"NÉ+öm»Âù´5_y Ùv OyÇÊlæEͼ/åM:™a;C;ýü¨à|CºF©Ó ›.˜Õê®(bký).ýÔOV8â§]!_6h NÌ–?ö£t?Íc”V’4²zŠ?­Î±:¶jyÏëýè|ß«®(AôsbÇÌaÍÞŒ \›pÕ…™–â§c6ŠütN.¹võò¹PerœgÃ0ì„Cºæ;h³²:­—¿jÁ=–•ëbëÔ1¿„m“ SA1¹^gÖØ‚ÑôJ˜÷Ô‚"åôAï­ˆÈ.è*’hãÓß÷2¸šàÂEFØ®>žÇÁ˜J,Oko\¢ÛÈî³îBWQL#Ú›fc’ö¡œu’Z#ÝÖ;̲7Ds¢ Nb˜Ï`l¸¡^®A¥áÛ÷­áùf»oÚ†‰yóQ“!Gôšˆ³ïŸýJÈŸx—#)(‡RÚœá¼ê« WmÆ‚…]Ã*²$rM;i±—hõ0µm^­mØ—{Ø€9Ø1›·uì>ñ‹ºT¡Š í¿“g«gã’:"ˆn·Í«…ÄT·'JG·û– Æ °d¸êrÝ-/j5^ÀZ3™ŸL/«Ô(CõÙü Ï4òñóöÔÙ ¢¤ovÚYD÷ ‘Þ=MCã–³öfyRÿQjôÖ—GIÕ‰HúÈ|³3Z‹u¶5¢Õ‚ð1Õ±èAå¦;dÍtb“ßüÚ‰µ4ctš°8ßuKØz÷êå«‹‡LËü^öý¯ÿø³/ÞýàW~C¼yóÊÙ/ï]ZŠ{iS½ñAøº)Nã)¼¢ÍÔŽ_ùbÀÛ?<8!ÂhñÖ{=Îê~3˜ågé°ÓNuVðMý¢Ù£6BˆáùæK?Tpû–Ðé¬BaäåÕ·bÛË+ßÞöU”#¶ß¼¾2o©=¾~ùΉÅ@q™ÄÜÈž:ý gÓE*4ùã¶Äì‹-+ ÷è¥L,‘ÿ6Êô“—võR5Kµ±±¦!”ã†àp²¾eGÍöÁÍÏ*¼ûèô©¤à$®´ÌHZS•w¥æc2FÉZõ ²ð‡ ޽BðÇÃé#áj'ŠðL(f<ÛÀê¸Z›I A𸣄†ÛZ­±t$HÁ¦¥Õ¡[At°ßkÃ/F㧦 î4Oê#Åm|ò«Q ®šsp¶&H!Ìc¹æ}ÍPvE ˜¤áŠXöbbj3fìE™B±öX[ šÉl}U‹ÍÎ8½²›ª$ÀœøeV£é¥¨Y¿^°ÐXçãµ{÷ ˜0NˆpjƒM ò’dFóÆœ°WW2Ú™1ÆÍv¬9˜Í‰N6åúdA:'y57QâêÅ·xüš•8¸;žÞ8cñVË­r 8¿ §›÷ˆïÈw|ù,Ï€””óº9Õ“E­Î>œE,^U4Y(õßÄÛæÛTWÃöGy®n3 ­q÷÷&ºaE"%õz*ÍÓJ@óü£'ªÎrÉë·¯9RçYÄl‰ŠðÖv-!”E[É; ›>Á2oñ–9&W`CUøyò„)”ÔlïëÞûí³ùÁ ?ŒE¤ ÿœÂ…‘ÑÅ6³ T½%gP sbüb”€€¨³g'¥‚ør^?ªkäà¸>çšÑ%•Šn¶ô`˜Ã嬌ϫŠMóœÀè‰{| h…,6³ü¬MtÈ{$uQʃ&À·rwrPp ù´¢ãÕ8B«P?¥úJ¸ø]·nØÛ R:>®™9ßYшêG‡¢Ž¤qZê X;6È›íwyŒ çð›ó+·–¶·f*àYÈ6ͶNUg·‰’9€Õ%,¨W2[X÷V‹PPa@?+,ÈÃF^\©ÂÞÈ’cÕ+Jlå^^Áànçù±Eo «ç=È„Q$V!Zàåøg¢ÚÙ†À¤QÉ‘(ÙÒµJáB:¯Ë5I·ŽóñTƒ„*)g~—P<&ÉBãT0“;ïr‹„ ƒ~‘Úc|ûm¿_»t ž|H•¸ÈèÓt üªÞÔë²0âKg]℞¿øâ‹vBº¶±;ÉÌðÉë~£Kòêàð’öYva°Ýz¼00ZrÕŽ«xŒKV®8ÿÄùŠ&C…n™|’ìnIAxÀ³GJTÇT‹gn?Y³ €ëQSÈmµÙ¥è˜ºnëž½†Û‘˜ûÙGµ`Ý HxŽ4¬*Á„ «s„jàÓ­Ìzâõwí’ö«èA $…@„m€Ã’ê$j=uNS_­»M“\ŠÐçsv¼iZúoiO@È 5 ©‰+X¦g_H¶†U—ºËù¶ë¸êðõ 'BoRÌ[o ‡‡QÏ¢!wæ˜KE‰|T®·¸%o¨0šH'fw6@¢.¯Æžþ ÿyöÍ× céäÀÉ™Ïz4%Ø@fùÅ­üƈCÃH@¥VM ĭ쮫0JåÂÆfä!¬îŒ¹”¯zÊdžnZ䮀·6iy;ãô¨æÓÏjÕ`­ò|º“ɬ/æ•­tDŽûåmcï#?ð@r1l¦ß›º®55nàÑ;oZ¸´da£#<{AN­û{uGëüñ¶ˆê”ÝWoŠ˜j‹V}èa}”+âÕB”x´J¡M½vË'0Íñ‰éb¼_ß§/+üä©MÉŠ¹(@>£aSh¡RKfa T¢–Œ5ší,N·GG{" e†t+A"¿Þ Cá¦s äÆÕ4EåÕE«‚yt×Kdë`Ð&[kζd|)ÙéMÿ¨®rDy¶Búl-ÁUïèªyû³ú=&ÜÜÇìƒ ´õðŽý…ĤàP¤j·ì %ÿ7!…Ó"pÖÚåL,ŒÕˆnÕ‹«…º¤îÈ^žƒØæ‰ e\צÊAºžé0ï„v¥XµR9ü0 {%÷ œ IDATaS|«œ9-⊊gËAnF]Ø– AÅ­¤Ü-¿´GôŒãqO %¹æºühk%¸…‡…b>Ҧף¢Ü[m™¶ÁJ?ÿÀÖ¿êB"·È]¢#%r®Pí•ášâ¹Ï¯â\Ìö(›ž)Ç „õ„Ö’ÂS¬ä:®¥/B¹*_${«:]é¶]át×#"­åWƒ†9AmÀ>ájâ–Ü!\/²wq.~Øš´+ …´ 3bbªU8Õ0 ªò­d9‚fƒ8¥ux¶–`ˆ¹³ØVK`Ò+Óˆ6²úÔt?ÖÈü@‘3Hí™®¿Ö€Ì*.W e$%[¾mŸl!þ•c` ²—[ž6ÁxŸÄA·XDµTÿ ScœSó™£e¶K?ð2®žæ;˜ é:T­LÇÜ«ÞñXcµY iñ·Nm—Ò½_ ¸å›­T ³ÞNm·ºenÑù«¯¾²3̰L!)þôOÿT¬ð åW_ýÂf;c_hø}ÀW¯_:“ùî§{é6JâoúqyðŽ/ƒ H‘¾b9-ã|¥áA!`%Œ­‘,Àv´0l´Øð98“}«È¨ó `àK#– ëæŽz¿iñ©kj©¾Þ{ÎË´¶r²ïb׬j,-¤±½¤{Ò±™æéab<) ÿí¶Þ¼¶oÜŒ}›ð«•]NÚ œBKöÄÿ”Kë~uÖ1½¶ZÙ´æÍ³g_ke>ÿÂH\ðÂé1Žô# ejªðãBTä•Ȱ©Ìê-¦Q›@©ä4r©(5"œ%µôaà£4ß´˜çQA#…{ʸš±`ÊÓ89¤s˦\éÙQÿ¨ ´<0KäDSÏK==ÚxmP~ Qv+-ÀøÔöY5RåJÊm3¶±Ý>r]$2`¤ÅƒI)¤'´ûÔu+Ê`r«ƒ!9}JÇF#Š…Œ$øHì¥N@û6u=…â¼/¬ÖìÛo:§ÏYfÿ-›wÚ;cØ’<ü†’TX`Q_5%žFi2žJp?GÚ³…[O9Ì*)òãÁ y'ò3ÓRVZ$®‹Üî!QqB%¨0¨Lá\sšáóõàƒ³4:NãØ¢’©ïì[¿Ãê3®ÔŸqYE)°I2¤êÊ ª–Wy0çòiÙÕž ƒ@¶ôH« Êá.’Z´oåÃ!g¦9)Ûø@æ<Ö¬Êü)ìa¼.ñ’b-GϬ9¾Þ˜ã_D™=Ña2Þüä £÷oõp8aÒl=n‡‘.û”ß@»úñtlô‡µ©AuضºŒ[À˘ëX0‡°WhWWàeÜŽ‹)Kq4vŸG*jõÿÊᜧ¨äÁ“c£æˆ0è—”'ËH ¨(CWË›æ›òÐzuúÞZcž³\)4NÛZBM0Ä÷¨•lZå)½î\U¨”~\SÌäq¶Z↗äóÁÆa>¾="äØ<làN®¸îÝÆY´(3Ón„i•½v×ÿ#6 èz&ã*y机-l72 Ššá¼_ƶÛ@gcè?‡w(¤F10åË3kLõؓ׆šL¢ö¥èÚ+:;y\Ï[-Î(¨lsc(6ñiŒ@gªQV=š1®G! ^åÓÇo_<ôøÁÃG—Ž}÷k2ÚÖ»Ž$¸ì}›mL€‡¢ÛÁïèc_ƒnÉ‚PÄYËži–03Ú0Yo›f2‚Þ°òæøßP¶–FK]ü í©ü0Ò@ª>,E$éÀìaò"§§f~ß x ’yÏ™ZpåöÖìOpê­Z胦]Çaô;S7}^rJ$yðprrw»±ŠÂ)iH´À®›™J¿Œ0‹Í#¤]¥½ IÕf4B]Ë90lϤ%6g7B⺞*g_ð«(d¶º§x|ë*—q…ÇÀÔ¢/=#« UN½Zqjœ¯¸C¨–§~{g>zóêª-wÛ¤k9ÿè ±¥¹ÂÈhp± äу±¥¶éÕ\‘Q¦%áv^çˆéÀƒI|n£-#¬ -ü§P¬wâàµB³X¡¤ÝlÓ´"Ô ^oê—ÃÛÞ…õÜ lùé-îÒE…Xžú™°w׎‚)ì¦~~ô@#ûh®r²Ñ;¿‡Ó»BI3§^¼}ñòùŃ/ $·ã¹…øQ)Z’¼êR¯›Æù!q«|ŸÚ~Äm䱨 °©¢Œ’•N³B×u:’¸ec*’—¢*’|CùYWk Uÿ³•i‰Ÿ"7Š5?jŽòör½Ý….] +€‘ž­Æ€´Í[³o=Ûy*‹zPQ—ƈ¢ c“‡@ÝåÊó‹³,¨À ¯ éV‚ðšqC$ìûHÒ3( u…+ì.ïÁ³HxØÊâ– ‹vœJ¤ã4¦ÛÆÄäôUž´€œAŒª=’‘âanfÕKÁhÁ©P‰ü”ëlp˜Cë(Jðx¤)É#Ì8`f ˜A§Å’­à—œL‹TÓ+àgI¸J{KÒÞ]ÍP'Óeö¤LD€!²òð ݸ˜–›F×ÍÆÖ£d5Ç ®Ëðt2üÄÒhÆÉÔ`¶ÿ<2ø)i,“°S~¸ô4‘#Öã¤G…x›ÿ[¨¨ yÃ&ÿ/'ð ¸OUŒåÙ›²îgtÒÙý©`h8.N{ ´ƒ;ýCN9£5B{–Î#ž~¤=š|Ý[Ô)¼…¤^dP,ÅA6ZŸ_Ñcô‰LÉTlj4c!×K$O*Ä*g#¼IŠÖa?–Í1>køêË_Ü»üøãÿ¦Gf’3,óê3RL'zæ_â_Äöµ–oA«N0¶‘“¡4y0XG‘–èJ‰ŒÁC‡3ëÕ%g–<5bÈw#Y\¢ò¹0¹º{î­”æo3¦Q¹åŸe%c#Tg1ûÃíöÿ²ÎM³p|>züD¿ â€í}ò«Àœ„ðrû¥–ð¨Akj..måÅÐ"„°âD€j1ÀCÎ'•ŒzB„ÜËS»®ßè ¹ôËš* Ó+-¤€Á¢vh#¿CWCWev Wq¾35Qo[K È$JÝ•y4E†fË=PÜ¡ŒA]æžÒ»+9€ ì•7ð"(¿jh:qÝÓ’†\fÓ*dü7G]„FLïìõ®ð¸ü»`A½°?“_'‡Ý¹—¨+1wDzM½£üì;_ˆ3¯ÞÚí6à{bùûîýF½xçg×Úºl˜[± ˜G3 -¹ê¢^«õH¼äò`\)P¡‡†xJ?´·.ó U—W¸eR7“Â3+I'´Çðe>·=e¯hééj 3åô¤‹vM f•äV ý´JÖÆ›äŠòtVCUIïFÔP‹5]Óy tp•˜nšûM­V}0àU¯§ž—fÜsÛ^K’ mj_nÔ•‘À[¬w õ 7ØŽ–¼Q†¦¼£}DÁC¥PÚŠ®dN¸ñÅ3!8=’‚v5²``¤} Ï™ 0ö<‰µ Á1Í& •H2€—„¼´U@ÚíèW/œ2ýÊ‚ŸMÿ¦%Ì Ìð™§âA­‹ Ç@¶¹•p ¡B*ñ“ ð?zœ+œYR¥×, ˘éc 3ja•¶XT€Ç8ÞSßÃ, LcPiõ°" L»V@WÀ𯺖Ud Ìcšu»5„*2«ÿ3œJ–œº$™“† ¬)º*64ܾÀ²:åYÙ-­ À&æRÝü+>0<¸ªµ|zD„%ºŒ ž|äªÚS0x8ƒixn~ðhÕåVj°2Á•%„èæ•Cë 'H™å‡2Ø×l.¨| 7ó‚)ÜŒ«„jáÙuß§gä³$šÑÛ5íÌ3¿%`k ö‡O†V³aæˆJK†M8¤yUÉ»"(”¡aäx2´ÄYÅsý\K/ò,+¸»]&e R+1Gp'^úkøB õŠVVß½4T‡çKꪨpeT}3`ÄŽquõÜ/¸ßÛa§ã%_¼|óàÑçž|!($Ð{ù ÜùÇŸŒýŽ}‘qêî-ªÕ©OÆÕücÞö(0¿l¸.{¨s’4(!õÚ"Ág#”[0¸¥4…Ú,$P)QŽ)µt¨À¤}”´¥"õlHÓ@¶‰¾ÝôNølý^oݽcJK®vâ>ÑÅÕÛ7NÆ¿oˆ3q7Ó W ,‘{{Øñ`oÞ¿÷д™ŽïÞ±y¹7;~Zgz¸ùL¶˜æ]á‘HJ ®žºbç8 Ï«å`CÞ#U¶ey*yºðòfÕœ…8«áY»²±M;º[ŽŠ¼+Tj¹ölžŽ†ò1…Òâ?SQâ$(âao•hÊ~‰Nº8ék$}i ÜíÔ~çå('n¨.`_xa6Hf÷ÕÜÎ\ÁÉ=´è¾óÚFÊ:O$-á™Nà±ÌâN:\nÿæ{>ÒíçÊWƕ MU9=ƒ7ó£#Îaøƒ§ÈÍÒv# u·­EhG†aÞîIE®çº]lÄQ¾„Ê£¸À õÞðdÅ%¼Iž¢¹’•n3»Ì2«Ÿåc ,£Š¤Ê&`躺õT’q ÞÕ-&—%yØ{ê7m\ñ&ö÷âýƒïé>:ôEûâÞô§7ûðÉâS?ú„ø»N@¶Å¡w¶*Q%Êé‹Å¬²%Ô¹úÍœ"Ü,¦ê¥ôpšsV°¯Iôƒ·g5>U:ÒHúìûöÛ aù"é´ÓÎúzïJ#'üðó}3gL@±¼Š¦hÛ’¿]§ók,Ôk©JÒålÉ¢–YÏ(ú",¼¨i cl$ èŸÏ 'hÞs:†ºëìóÏFŽŸ>Þg‰Û·ÌÙÒpë-± á6Îz9å×ÐCaóå/¾tBûu*|ûöñÃGÆXÀˆ{h„Þ¾s{Û"ŸF„1Ç_®9 5£gÇq™êiÚë«lX_æør?œCdÇ¥˜8 ¥~žÒe~Å–~^\½¶HÖŸ}ë8Lã†ÔÞë£dÇ’ÕVE`©µÞ寗-²¾´°¢0ô4@±‹TWrçnŸÍ+ß!œÂ©—êïßÙ—=‹„ ÖŒŸî˜ÒRÒ9×þ„òk¿J<À /p­Ï™‚ا=Sa1Ú'i &ŸøY™>¾‡p: ÀûyKÚ¬À²cqª?¿š£4¼y §·{9!¦›ñ}žyK_ˈ«\€ÇO¿ú…åÆK'}yԲķì¢6;„sß©:h£i Áo[a“Ñ­Øâu–Í¢– 4‘ûÎc;¾âß“'*+ÃNí\οˀ—0I$†—jnÓPÒA­½ãû¸•­Ásò×o® &‘c¾¡:H`váSÔá-A¹„mYMȼ>K„é˜Xœ· Ú`G´ZÜ›þKá³§ßP—W\W±ÖÊÌ£ð´ÄòäéYøÒ ?¼àC×+Tñ>W²K„ƒe]a– ]uïÓ n˜`…ÆŒwp[4ãyóæ V8ü[t?Öe £4 ¸§½- Š!ïú¸á•6ç¤ü@LÍsޱur)VWÓsVö«+ÊÕ¯9ç‚ÞßøýßôizB K`«Ù‘H¶¯µg𡍩ÆôÜwØCtw•²Ø €2þ4€1@“¨«@\ µæ\8}9c½(R*%žM  UY´–7åC·Aün‘£ð…—m¤eî?åƒGhàÇ;`½’cZ¥Ÿ>Q$À! v3vŒéAص´„°„ · "íí2¿°îÙ›ˆ†ht}ûøò!ç¼€YéÜBë ‘©H×Åå^\½r‚¶fâè‡5 'Ð!Åp¦~GãÞÒ`ÂÇ?_jBùÖ-¯K/3×'YÓÙÍb¬=&ÑŒo–m}–ŒHgpŒ„ŽÄ- Lc”~¼ª6oÿ¯1ñ<Þ£ªœÔ«C1pfãG g)Ófádül„˜ÀkKt¥liõô†Ó}‚_‘Wù Xê¥~(í/¶‚>\f̌ͫ⑺’Š‹ÐSx¸ƒÛÉgeêùƒ\-H”ÐMк “àÎ"?«n­vÒøAH—-¢´ºS! r&5ª0Á–.3‘E-ä·ú`Ø'58ø¿?s#ÌÐŽnj±cúþáà/û{%P‘@áäƒDí ¿ÂºRÈ‚v»ðhWA/Î ó”î"ÐL%Äj ØPIŠEŒªv 4CMQuah`i‘7<í¹îšϣú&®é²¤n×Ö¢Œûeã ÿHùˆƒÉú”˜M“h9¤Så|ÅUüU(ŒhJ`š5Îdu‡­;¯üé¿þ7Úëý‡Ÿ½~á$À;æâÖ›ö·/1!§.WxP„V~…ÑaNü$Åèð @Uª[ç]ô)Uw¤ÜHÄ#I!%„è$5B›'H·2 ²œ€W¢®BÈ20 FíN¤™Œ î8°µž®cÐØ_¼´ F½ó-ÒÝ;VßòŠO4ÊÙðIMôß{¡ó 9í_ë… €±Ž&ŒÜp)QQi'[3±¼v¨Moë,J% ‹yµà¤·êŽK v2Èe¬Ç}«X ÆP ]D Ësp‚+²3†ZÞ[@dïNß^Z¥ò‰•ÔdF¢'˘Ú•Á½ÄL<‡¥­*2Œ)³øL®Z³I‚ÉÂo´¼æUÍ Y8.TÊцBWV%ÒPÎÊ’<{zJç¼IÒµæ^\PÒÌj”aÈNa$2>Íx “U~ŽIW¶Ç¼T$í*A”øÙe¼…{B¾a#JUO!±Å1p‰«ŠÊ]×Å]Ï"Çh^FËll<L£«“ÇZ5eU·&3†z«G6ÜÏ`}ub»^>}B¥Êš3n×Çh ¼„AÞ›NŠòã0 «L©–´²Àæ)}rHT$`£HO‚‘ÊMÿ.³Œ-ëVL ñ8÷ lM]zÃëV…mV³T‚Í„ýÀ?}q³5Ë´ bˆ÷ŠŒ™í0ÿþƒµa¯eˆ–cTnuÛµ‚pHZ‚º7ÿ¿ú]P4cÎ÷^¹Äß^ 7R°3öY Ê¹jWú¼¤µöd@€Wn±zœ»GÇ)ðš ¡G#žs%§[ThÝ- #R”<¬ñd°+Ÿ$³—\‰ KøV5n'âGaÌÌ£ÍUFŠx„v½™ñ;ÞÌ™,êt*’!_·Ú'Fc˜CàÓ<<ÕŽc!=ÂòÏÚ¡*†/Ô¢Û6(ìH ³uk)1&êNfŒbÔß6V«z%a‡cq9"ìËz¢Ûu¯áP;'c΄ȃL¥åËX,oø[¢(¤I‘ |‡¤Ò½50ä. Ú*.ü€‘p®Q4|}yßË>Ìç”ûT¨<Ó†§ØZ+&¯ÎéÁ–)kÑ3³Y¹Ôr{N0H¤à!F`ˆ£D9}, JÔ¥3שÓëÔé™’T^®w㟿lÒ˜U»éH„y&o3(¤Ê{¤ÜÿK¥|µ¨ÇýÉ˵tã8êÇÛ¨(É‚9ØÁímÔ»‡Âp‰s×5œ qȸB&~bNÚ wÜ”±޳«^•~¬i´ºZZøÍÃ#£âzËôÁ½%x±Ídq³'·Màãc€ù¡¶?&h_…’UÌ8|ñK]²L Á$ALj4ðÇ|S·háÈ[§¥Ï('ï®Ë”ÀLhöR5_…_'Ýä¾Í‹wü2ù?ÿgÿçƒËk—O¾ûíÓç0ëõ*öPpTHE´q2†+íöÐÌ„îhÉÏÁ€D$TÿŒuäªn3Ù¬HÎFÌuÂöøŽ¤ Û*'n¡r+¿‘jyÓ"4ÜæÛKwY­Ù§³¯özºñ2èþÝ~›Ù­<&ºV=ð<òyaéEŠå'í\xýW0”pKÓðó·®à$øÑ5oâ V wXlj} ¤(6Jãºò2þHÄØ4&³ÉhFPLØÛjì‰9;G!èÄ‹lÂÓþ$_“Ü»sqÿ‚¹j½ÿpùÐoaÕn©ž:ÇÁ<éwìwÁ¿ÚlcG˜›_NÊ G}ª40¸V“Õí­HJ8½ò§Í$ž†zÚ*êxÞ¥y®êåWÖ9ùX:9½±éZVóÊÕŠ{õ±Ø„Ù“ÞEêþÈHá ¦-i°`(Òà øAšMaq8¨Jc;ãQ0Vß½sô˜„%¤§b·X’_1=Z'D"å·þ$8+®»Á˜+ÍùÓ*‡œRøøW‹0‡\¬;‡7À¢gr2Së{G|œ „kÎ6’5âcP=Œë*¤$cãö=)©'JÌ„a®¤s ìœáÏʉ¬pt˜ÿcØ7ÏžãûT FŽ&ÑUE9ÞTWÑ­ü_DËâK®Q»Iô âávõF9¸‡_RIÃ,a`Ï·£A¬›¹¢kã›ë]„P)¶Ì[a-Q%ô¤sF Œ TÑ£,ÝÙšù}͸î;{JJ.ïÚaÀ¥ë2µSk®¯·¿Š´ƒ™íÙ›5$â†õZÕº.é59x·çGV; 1¶ÌÈ+Dn6_wÏY5= óm“V™¡äÏêÆ¼ß;ý4têÁ!±®âƒN©¥õá33‹7D—+…0«â B2{ùÁ+Š)ÞkØ”3Kè‚¿5»v;ŒCh%ó3& » N§v Óëƒák]h‰à5¼«ç¦ ¨·¤9qðfÖFÂÑà'„Dn›Ù`X9T—ç+7 ¼OjZ­Ì…Gy2ŽºRÂâ$lâÏ8ÆS…†5†%‡5ÁxJå¨H€äaBÚ£­>05”€wm@ü~–$ï^jêâB.N^UX¼rÀ®Ü5HV Ó×ÌØôzKƒNÞ5&'Nd¤¡yx §É1XlÔBoIGFDñÈ‹Ü-“øY„ =ÝŠc–¦Éy*Œð$%”|®8 LpÏ£8§×*a¥Q)JÿtbìèkÁœ•˜Û<û0>WÛGKYËB„æàˉÕv§^j6W…XÛeêžEÙòÁ&¨Ø"¿t‘´af=*yT‚„‡àðib¿BÖ1píT»exør¢îš›À¡Úõ²"Ë÷]/EØò³Ö%³y×øŸSc`@W+#A ~`3Dí4±Oeô ÀÆ$ðÎ7©›ÕÏ>Z°-¤F…ȹßàãCã?ííäÒäõ1$ß>¿ÒÌ•À=/¤êÃl¯2+^[,*X‚ MH&Sc<“æ=ûêk&€Á¨åÖuÁ #/#F4É£P„r@"°½A•VEïúÇ7óåmëÿÿ?Y÷Ú£W–ödñZÅ"»§ÛÒŒ#Y²<ŠÁ/‚À€¿’Y3ºXròÁòÆðÀ0 F`8¥Xˆl]¢ÑLwOw³ÉbY¼å÷_ëyjdwõá>{¯½î{íËÙçÜ£%›²ÄT‚“Å9yÞkìb’fJð_3šžâÅáJUZIÀ¬êŒ _õ•_Üó B€\KƇH…/n¿ùòÙÅÅOOŸ~úîõ‡ÇçgÞO1QòP–>Øh»3BäëTÙ’a©,6¸šn²+‚+ȪÌr°Ô› 3š?Üš‹‚Y„®vnöv"±TVßò<ÓXÎYÇ+Aðv J‚LI¾Ôñnô7x ~ 5ç®Zñ>ãö/_9Þ´b€Õk6zþæ›gLã…©9,ÜVü/ÜlôžÈÉôk}$:cÔòկݳ{Æ´»Ô«J¨Å-ݺ.¡_ÿˆÆlêìr®é½ù‘‰Ž-wl+çµÚîu­zôÆUN[ïšy’K« óêÉ+-:ñ @¬ß†ÍùÙc¤ Sü<×ãºêþžæoïv¤¬ƒð"hqŽî´¢”I 娫-$=È΀!!ï L?šúFB ¹¼ó I×&Þâ6ååEþÑ‹Çm gøÏH3>@V¥ÚrÀºã<Þ6p’R¸ÒeŒÈ‹¼“È>„t׺%0 ( Ë´ j%›ŽêÊ…dúu‘TÒÎW:p ÁÀÔb- ñ©'ÏH¦“i•˜NG ™ýV‰X9~• xåÞgõCÚYþj8Ú‘Á¼ V{òþ($' sNÖM€ju˜RN0Œ·$™„è*Íômô–%·âSÑ(á ÊQëºHp%Ê:Ѭd•)ƒ®ß¤Û=öa8¥WµJHÒÙSìÖMÏ:±ZHve”*§9ÙC‡JêGó0‘Dd$`¬j›WD`4Å 7£Ä ü+ò:0«-Ã4ì`¬ï~ç—¬/aÓ»?¶ ùjW0§u=ñ‘-–³ÿíßýõßüßßûµßôLIX~éëÞlzØï*ènC´ßÿyWÔWu«äo†ÄöÊlž~­ d²oqÈ{UÝ®0l‚– ò[µ-Å\⸠TKuì(É,<°¥k ˜Š°¨jõ9ÔÄ×¶>éÖQçHØÐË×+<<½xqÁ(¦g§NѦpLâW8;}d4Ç¿†Ôg`@yxj޵ûaó’C3Ýãj¹±SÛ[ÌËnp"„ØÐ•ÜâdÂòG§g&œúõ°Üœ ?a}™€8Ú‰û`°Sâ«i‡¤ ûC¸"oœ_Y«¥·Þ²l÷ ØSntתÆã<Ë$ •°ËªåÆÊhâð µò9‹…‰ ÎíÌþ+oP˜Ük¸MЫo4Âa‰F\M1¯7¡¨VBÝÀÏJ`Ðçäep2.t˜g«EÚ)?> |æÁbšïšPl'²Cb%âŠz®Z·ÁÌ~Û¨1¨•ù‡1wÁÂZ0¸]&éʦ®Áß3<3h¶ p;À;B府¡ÖvÃô©HóV…°áLšiô4’6ãQ}£|Ø~f± €ón!lܘ\bóZÅá,2¨•Væaº)²Å„f˜UNoÒmÖ6¥qåyz³DïãÓ2{fï«W‚ÔÄkòQOOûä/ÕY\΋ƒ'¿ÿƒ! ‹ËË«>ŸŸH½¨á?ÈÓ0„?-UÕz§ ¥s\é5)@`e>7ìgáûV²ä–‹)¦»»Î¸ôáÅÅ ëwgÊf™×Ìf ©‰°,¹ÊïTtzE‘3Ê‚‡-Ÿ˜¤!ŨâT2€^nö³i€•C Nê_ýà”Yíâ°daMã v­ü¢ˆí“¾@'x¬"¡&ËMÀ añnf«À"4_ÆZö”?x•šX?ï8à0’ƒ0þñ鼺æ€÷:NÏÑÛ¾*´%Eþ-„ÕvzKr‡’ÍÑE\‰øáŒ·»?÷œ~Mý%›ažØ"Ôˆ31Ú|<*ÄË€æCç@ùnýMo©Pê tðõ^+)ܾº£Òªäñ-"†xt…–F|®¬þ†yåR,ãÞ?a,®eW™¾ûíôÙhÔ!‹Hûß`ä4š÷>­Ç =FUaXm%ê5ò–ƒû¨7t¥ÎsŒ·ËÍšøÔåà h? ÎvIúàW,!§–o`Z¡Û)©·ât¾WÏ-ñÉÕ<0ŒSªli°b-cµ~h¹¹¡Å|9“aÀÁá^ªd»*ïœ=?ÓGœbëð3²öôIˆ¸a,N8X1­²x)ð¬Éƒ{>‹oGü¨8ŸaéØ7©¼ásÔÓ°'*ØÕ}$^ŽXm[šÇõ%WnÓ6Õó¾`Iœy»› 6´>ÿÉ—ñçÿù7ÿÉÿ|ÇÂ;®¤Û$¤@aÆ$BãiÛ­D"yWå®0“,òÛÓW'ò#ĉ{ðp+!Y µºJ$U‹þå÷–t 3V&‹Ö²4·ÄR%èÂÌ¥·p:©¥ÝƒSêt¾þŸ¿¡û&ikSÍ”,~õÙqi#p¿ hÛÕ4~ùõWÔ°n["¿ÐC1àI¯ˆqeÂk‹Ÿei­&O<ÌàŸêìQ¸Û•¥žy™*½ƒ§áêXK‚•Û×–qÔAÀ/¾L$q€*DSÑ›£¦ÆÖ3Óâ©Ôèð¾m½´C®-itAÊô#Ò&ûŠ^ÄÀ¾ß¹ºã9§A ‡z™­æ"öô¦í/Iª¹/ûÏIŒÕ-†À‡-”€qktû %+)¿±ež–¸¿2HÌTOC \½…|IF /uÕzé"°``&Š2:hKKf4õ–yÓH_0[ôi$ƒ¯ÿ¸µ ¢i/<1Em³ÑÕ«8¡U´úÊÃãs´dÀ,$†ãg^ò@9t²×t`j×É}jÇ­Ä™™‚T¢ ¤©ç*éStžoÈ‹1·Æ8h¹½ Îô¹Ž±Ô¹ x"‰¶»åê§Ë­©rTªœ ÑÌ?yN¼áˉ¢KË ¢qKÒ5ñаœSÎ&UL [ íê‘8Ü78WjS)†] Ã^ó<.»v×I\éõ9r§%õì‹'úÉ'v.ü3‹®q¼9²Ñ:Ÿ˜/_’‘\ç6hÿà_ý¾à8ÃùjÐF°@è °“³¡-2;Ÿ†cÒ¦Z¶+ÌÉô[bYê€XùüC*ž¡*ræg¯®ÄÑ«íö3Y½~~ùìÙOyqñþ#ï—¬¦x3ŽEK›ó´oÌfé5s33}mH/OÑ ¡EB«¹fq­/·FÑw©Y¯W‚j"œ©j—¥!PÌ¡£'çOfê•£«Â!©©TG›_¿¼ðP¼G¿âØõõÑ0É¢ä%Ä %#Ÿ¶8\6ÂyÊþð¶öñßúE…v×b’ú<¼rÆ¿AÁ°Ú¢¼V‰k3lý„ÓªñÕ¾f·ô‡VœY1j¾Rä2Í[¹P÷ÍÑÐ1ªŸ8õ"70« Ù@Ö‹xaŽ8~©­¸9KŸÆ­ébÛ"g¥g;bUê  æN½gÚœ-Ì>Û&\lhA ÿv*.A6(Õjhôç—äV -;Š çLlû’Å,°Á3–3‚Íã!LøÐdµÆDN*^‹¹4¤· €nÛËž}I€ˆmiƒC0¶³WöNð5“ÎT_Ón4·ï²O|BÕy•ì•Ù):×ç¾Z‡ÌC4-½Ë. 6;eTw‹kÉΟÑÂmãÚW’ÍÍÉîMZã–~K¿”rß÷ z&ë;Od®^_é‡ï>Œ6Œ€ÜA7B´'ì3ÊTHéMoÁÅW]cuaÞBYü& GùZÍÌ’´y…D´У@ÂÙú¶†£–æîÚ²Š2H„N­°¡Ò6øb8齿Õ×< <1)OžÈah³¹~Z ­;~¸xy‘?7ˆšÓ'šó×>ÊÀžœôúÅ‹g_þݯ~ÿŸ¼~éçû/¯^9²pûä‘O¯‹tþ<.7•é`³ ·¥î=hŸ‰ò{Rï|õ€\:×¹‘G¯º>+uâÛî™ÍÔa鄨†v]›0ŒŸÀ@¢‘Ó׉z·ºé5ÅŠ#ûh(hÏæ{súI@J„Ð<‚R0ÜöŒ‰!{IYg °«š·_Ä“ùž\o¿²Ì»g^âä£'O¾øâs”pòìÙ×çOÛº~õòêåå‹§ûð{™á…­=xÂNv<¦­äë (&ãakç°‚‘ß>l°TMfbëKbi±Ç:{DãdÍŠLSœì¤;U ˽”ͲÖô c`Í ¢y2¤«HzeŸœòΠᆠù¨º&ŽˆulßÎèô2.ÄÈråÄ’ƒ¬M­êDV(½0Ž„æpŽ4 p¯ØZÕ¾›Ö[ G6&Á{· ÷Φ¥Í…Ùb„2ŸÉ3©Žo™àÚ&Œgo {pÑFíóH;³‘×ìôµ¹÷ðL§ÆÏ¥³%½^üÌ'a¶ikÄœËÆ 7˜h˜ ›Ô˜ ª:Zße¤Ì±àª´) Ø“ô®šð„žo¢Ò$=í‡ “´]~êéµëºáQcèèã§uü8ïÓSËeJ!Ý0Ý Ÿö?^ì³U }ã­‘‘†«¾åa&©ÀwÏQcIÆÐÉú–'Wñà©qÚ¬£3$¶â#L7iUCÃ7µiQw%—ƒËŸ¾‰aÔ[ÈM •‘Ÿa­è½MÄ23ù"10a̱]c_’(íÙ×_¡ûô©/ñ ô1‰–'6ÓM.zP®‰‰>ûøÌíT=˜¯WY=sF9ïjªõß}ñüJÆ«o§Íò8)2Ìÿö¯ÿˆ]‘@x9Cx'¥[Œ™oÿëcøŬ ÙOò¸‡„#r2`¨Ëš$М°ÎÞþœ4Íôßt¨\ðí½YVaØû÷ÎîžáÝZr IDAT>;õþŒlÁÁ …\+©oføm™‰pæW3­Ç˜]„F×b øí¼`àY—U%’©èã H‡(šâ0q‡—³{aÁh¸š¼ÑÃÊný ÌšCŽ–r™žªšŽÈBÊíÕšox~Åy–Ô{²Þ‰aÇ₤"·W—WÖOÎÀ0½¯w'‘(žNìî†1î)T•¼Ù¤ðê–ÉH tÄo²¨ ´ry“ÔÁÓÔYZø1L'³‰ÿz¸Ëé‚9D¡H"†‰«&lé\—B<i/v~6.ß)ÒŠš¢ßtmÍudö]êèje¢£äᣖYÜ ý.8Ƈ•0ê\#ùŠãZ¹@ÜžÖ¼Š?ìá[ —¬Å®Y²Ç)>y×lÅ9T”|ìHàÙþìSafN<Ú>Ñ>CgA ½üú)l”ÄÏ5ÄaD-ç`j•`•Œú¾ ²XSBÍ˧»®t Ñ d4Ó,VWØŽ_™ýƒh-Ýœ·?²x›{¾<Ê«rUóÃøIîr_UÖ:&¬H‚KJ$ìÙáí¥axÈÎJp\Bž'l®¾öSÏS2„Ò°)+'Òu;ýd«ÈE áS"Éàö”ËãP/–_*nÀJ‡êMÒKvµn!q¶s·ÖŠZ”Sj_›!…}›ž¹Ä†-oå‚7Ò[Usžl‚GT_‚›z Ì€§$>QKÛs˜Ýº„¿êIÇ*1ÆpPÀàšÉv­/ Ï‚à ÔºOéÐÙ蘰‰7Ï0;üýZùЊyÌùé“/6°,",Ï„EECt=CQ+Ï7H¹¨äóÌÐÂàíNìÜôZÆÌã)êâų_þî·’Þ9/Ñüûââù{Ž8À"!Á‰G0»÷4˜¹ZQK->s’q¹Ëåv¹¢ ÷:ûÒÌxÊÉ‘tLŒy ÷·‘+¿’Ì—À¼z}©_0Jæ‹qRå.¨+ʃ'¸õ`䨮¡ã› Úœ0;@9êz#Zà-UÚ: ¡†åa60ÛIºsçéGç ›%M·RÛéþ¦v‘/–”¡åø‡sœ`®0ȘbX:Lm·ÇÌ|ómb…‘ǦŸ±Ò#ˆŽðOùäö‹ç¯0)@Þ÷µF¡®”‚MBC@Œ£ˆ{·MTç Õ΃c}#;ú­§““‹çßð"$H'Qì |®5;®E6yŽD›_ñÙuÉþ°šn³j€÷ª-c¹Ebá™çü´ß0r ¯œ3}{}.ƒ-ÀR„AC‚1.Á\!„W+̘åÐîâÄ9ü¨À&û|† ˉH(¶pÍI[Ȩ_¨aÕå0MΣØS¹y[Pø$ ÿÒ6}5ç–L¦œwA¢3XåóèÊoÏ¥AŸ¡'•×¼_\¾L)Éø[sIÞZÃüm=?üô’˜èaÅi¿ÏÓwþG'2÷ÞÊk%¿Ã넾0¯dpxÓ r1¨’F9šK2ÒÖ’QžbY“[«P«½ÃÏö¦exä3š § ºµšïSÜ*±Õçv¸õëùØ(e÷&é°ºïÒÁÓ³þ?ø½ß5©æŸ&žÓ)R·wv¯©Yd!Å6ã{”_•Våjå ÉvàM„¹|ÏÂÞµþV@³jO“vA‰`SY¼æ¡~:ÃW—G!0ÜZ‰S!K7Ù Ûa#‡@î†M$&” €é)=¯­Û;³’ BUØzT°A'„de¬ÆtÍõN|ÐÙ¥/^€aNIÀÜZ6ÖéÃñrb]…ŸK¢ *™„â£áûÃ?ÔÕæ6";ø©nvÚÈ»`£·ÙùYž&X Úrd„3qÆç•¨Á5ŽuSd#À4ĆrRÊÍ(„ÿá›ÏÀ€N(Ðò0÷ÄÞ=iKLÁñþ½o}ë“Ï~ü·¾”ôä[ßþéßþÔ6íð°³'õ˜µ}Ì ð`Ú§Íó%‘Å,’ þÖ?¸W(æ`‹°oÀÚt,à÷•WJXÜò·#Ûœ¤K¤ÜR5$P­–\13óÝ"<ÍCÿ­…ÝÿPÙ¥8wâ$7²@%¿"@µq*® æ L+i%Eb€ûH€‘4Y\sFxò8ú˜~»3ÜÔ)[“¤„±ZÀœžq"L½ëdU¾¬‹Í`Ê@x5Ä8^0ü|6)Ù_J¦yÛ]†VùÉ~ø;”Hñ €Gý™‘8TTääââþô ÍH;.­ ó»@gþÚÔM¼Ya³á6“Wëh§"è,ˆ½ëŠ>ƒ¤çï‹Ó|@ mB²'îFp%$AK"+} ÝÃ(¾ÍÁàÁUGšS™ž´ÇžZ[|ú]Ûðí'§ªlªoºG3 i¤Ó¢Ï=0Ÿ?‚{¾+3ždæ.à;ìwûmÌÙËÏF_!ƒÛiE¹>I ÏhßÎÇápxÀÌÀP×1—†âoæ^®”ªíð²üø€&Œ%v`¦ÆBŽõ#f„|Μ¹ÁàpëX›R”B´´«ÛPËÈ Ì£Mð°·ôOZV8t`n×®0ަsòjèÖ`´£%¨ô ñÖkÏZÅ#KáÙÌ(¾r¤}fâ0L˜†M2_qå(þ=‡H”×%T]0©7&]‘ªÉh{áÁæ9ðwa·Dó©s¸äu“þ¦Í}„qð rÝ f“Vôꯕ ñžPúÂèa5€Æ6/X©•àÐP/"L&ÝÀ†<ûhrkQw»À„]Ò+Eþ9?E F0kv[ w$†Jx‚¸>J_7ÒeàTPLÀ=’•435f*N,‚šð•Õ˜‹²þB"ʺéΠ8® xdk¬¿ ÀzŸy”éì¦On>yúä/þôÏ~ù¥_þþO~üÙ£Ó‡ïnŸ?¨ŽMâŠJDÓ8·Õ´At¬x8éV¤»áD[–CE"²*W -,¬®,NÀ©EÔ•^_]Þpµx4aÆr« ÍpǪLÕ V†(åöq9©]ÊËË~Z¸¥ä¦\VÄzU¦xÍQå‡n¼áÖúI·ûôDQ˜íÆ.Ñ;ö[`òd!oª›¤päãÓ (Hj«ÄuÍ -ä[¸­4GÂ,*·V¯w%XcK#£5’ŸßŽ.|P5Ǻ?.çÌÆláäB [vOä íÍUU"L È,£DÕò¬ŠtÅ1ÈØ;… # ©Ë’xk8xàŠöäW´u¤k€td¤‡¡C‘?¼“§ˆÎiVÿf‹Y;¦%Qm•)ÏÊÈ©•’¥^åüMûÿõ~&Ù—»1kW}›EóðÔ‡…45GE!$Ø6άOî­Ú éç}¼éIÜ»×›\Œ¹;µéaâ ÂÆÞòšËKjQQ¢B0ìØ²›êfÜQnûË >5‡­˜:y’SœZsLJ³¤*á³h Ú8Ûïû~øè£4òMskŸOðé^/‚^}è“¿i²ð7}6r÷ƒû©cËÌ"’-zg}·[Á ¶=’LlðXýb,/oæá¯Þ_묀Á¸Nz×HBKsÏ‚çMÿuký ?x!{¼&£^$Ö.j×CY°ÇTéÕ(KƒÙ0§ÅFý}Öcšàmhݶ ¯êÅó—:8ÒX¿('l”9»föƒ Ί'Ái/Œ=µr§ÛòÞ2S X9pú!2š_$ñ[jk³ËÂåV¹VšV•VÚz啎a6-vëGøð¦J?¤Ã¬Û;Ò®ŒÛEbª˜"ýÖ—7u˜X1½Be§àƒªY‹†øÑ'Ž›»­!)xω!PpðíúÆC^>{ì5mvÍÌ»¶GÍ{G-®T¿z BË#·Ê‘q«áZVQÑ$)èöøñ BM¨Ûíía£a'|N|Š „Ô?'ÔõÝXH…’†F %6¥»xnÆóÆe•%m{mãþ½W—E§`[P;‹ÞŒ„VóXˬ„rœ€gq0<“½À<ßЀëbÆÕ2-ShƒJÊ¡°ú…[UÀ#4ºžƒ[ÒªÀl­v€ãs,åzCâÆµþ}Õm[8—+·Ò(]ã`RC‚œÔ;Oi½ÌÊs å†Y\­Bå”/o ݪZä–Šˆ7ä‡Ç;ðϽÕ5èŠ&Áwû‡ør oŒ’ WcˆQ€f¾óðA?Y°òË u’ͬväI¦V£ªÂÔ¨rÊ& xŒßv·…ðñL®SÔ›©b!$$Ñ–›¸Š_°©’¿Š_0«yb˜U\’÷Þм¶Ö⇳äêaý¤8RÏ\aUé 3e4%…ÇŽùI©±’}¬¼ŠK9é<¯uhÑ?š£ìƒßßèÏòÒtì0Å^ “dcChÀ5¶ šÐ*n¿N[S=( À¬ž>ShõÆï®÷âLÊ÷+§¾;ІRËú”W3㪿v»C­eÌ5g ÛN+`€Y`$ðŠIxHK3LªJ†¤Ð&Ÿ Ä}mñ_í"™²ŸGR¼Ñ!X=ªh'J Ï2±U”Â1VA3uD)‡ïhK³EÁxæˆþ²Ùq1„"!Z+™aœ¼½¥aOT¨ <7µË*¢€•ß°-#)„McS€`ÑÍ{Fnmµj€1’k ºñÙlÀ-SÈV­*Ù-e)ÍFJ§sñï4“ê¶k‡ dä\f›O“qܤ‘ׄs²~`#­V ¡—a+åSå,‘ïÚ#{ñîä¡#îÆÇ»¼ñUŽÓSšI¯=b±™´¹¬öwžøC(ìgv‹(S¾,øAÇ)hÍð)ÏÑ_pGcªJcJx4W>îÍv^ûMi»8ÖÐ5ŠÕ‰BâqÝã³Öý;ÐCKsã‰×Rå(iNEHyË’æb‰6¢¥îˆè§AJNW$ Á§a¸á¥ïz…³0òb5üœm;ŒL—:vUØXD+’Éß\ƒ˜’CoLÏÎÌ£H½‚B/S§7ô–MpuCKè¾è]sÌÈÀ©•Œßœ&Ôj…Un‡(wòž°ÈË׌{)ì«6´ G 9åëW9ËŸûQº\p½ì–Öã?ï9Ì]|Ϊa}y { ÛØwo‘Ç[ÄìåA±ëX©jÀãz3¤-‡r‹hcðûóPØKÏÙ ´^ÉàVR̬½†1‡IC= 3&XI²U¨S=þ ióÕ6$,½«mìÙ<cJ¨®V3²¯w!AÏÅæœ9Gögœ°1 ˜-Õ—¬Õt«Ñ³wô®‡p(j7îЛF¼™–Mµ°S@?iCTmdEÚ®±”c[¢ê`Žû JÈâvÜ«üˆ'Ó× “Z$èßæý’ä¹ "KËŒÓϱ{GD9š¾ò¸­(ä²W‰ÃíµL+l@ ' ŒRzÝ.©Ã0/“㓲x0@tRh$Ê”éæáMÌÀ¯ +òr rñÀ)Ó–OoüèWæãéÑ¡úzFÚ`,á´ý<­†€eȱt2:”áU8“@ÔvòüœÕ(ÇÂ"Ýn1æ³õ,HÄ®‡2ÒN-¹6)1˜¡‹ayädFBC[ŒH('¯&?Gb×U5B#—4pæÏ1ÑlaŽ~+–Á#!µ¦,œlÆ…XïÒÈÕe_‚QÐ2¼Rh»])=k0]•_,:p®|¦Ô·¼FwzúèòâÅøãó½_ý +Ûm—fW(~¸eÛƒ pI‰ k…Ó’çîÐÜ}ÃZ!nw¤‘ABç"~\'­ŠŠ•q;G茳Ð-‹ƒèFØ&µ¹RÝU-$9θn®•‹¤)uµ3a>ú@) øÚHs/ªô¯×—´h0¥á¯á8Îq5n×±—60”Zìî3‹æ¹Ø8ªE´BZJˆôŽi¯ð£E4qmã­½œöÕÔQÊ9øi¥Æ>Ð êÄ4?îwëúêÂk¬Dòµº™Áìy îË "6/ùøÉ«9Ë$ÕGï²AË*“33u¿¯ç }臰D•¨ŸzÓÉí[Ž-R.ŒƒèŒwž>ýÈHõgÿáßýʯýæ“O>½|éÉÑCzÞOPõÍ*ÓŒ4[wOT½CÒÙiÃÔ­ß «\ÌÑÉ´´DgÍv˜gTÚIS×l<Ÿäam%ê˜ÞŒ%̃ „ïªÆ0ãí¥Y³ÕÉzÏÿ¾ÞDÝ×ï®×y†M£¶ŠÄOòäšsø—Ï~NrÄ^|+4  ‘; IDATDG+ c>Ë”·¬å&¦¥³@)þ[2p˜SªñÉNÌìëŒ8´S¬ˆ Dч>ÛÌè¾¥ÕÇ!ú}X­i4"FKG.§‡r(y Å©îÑË4ܦp‘DE.í‹7Þpɦƒ^øò@N‡èh¥ìÑ=Z‚–zW'8Gl…(؉4d™)—&ãÍÉ(„Ž£»Ï× ´ë•O}Å Ïüi€s´šð¥¨Ùñr­O o.ÐȤ¡+¢81s"/’”V°x'jµ„ ô>J/upñùªÙOóMçÆ³ ðÊt(ðÎ~µ¯Áµ!çJàÕR½Îb@%3¹ô÷™‡µéEyòø™\º5îûúÞmYŽ%6•N>ÜñÉ| ÄÚRêÄpçÊ™×µ+„•û4ƒÍ„M§g pÒŠ³qâÛú±¡µmsgÛQºÐ5 Fy|á,céÜùf‘ lË„;BŸp~ìëìØq ’ó¨ ‡ ¸e!Ô”…L/^\˜î$²/Ìú~>>^ÅO a¦`ÆL¨Òbh_ëô6šá™÷ßòu8çf§°ð,®tÔiX+¬zÖÙ[2™uç“ËW/õÚã‘ü|@†ó`ÍQ\ºÖ‡h§ßZí'4:gËó}P –Û'¾4d÷Ñ7ÑŒ¨ë±b»æ'ÿëý¡îÁ}¥ƒ:|{×ã­PCËõóVŠ[½¼xyþø¬_¿ð€ùåÇ îoëyM±V;ˆ¾}óšÛÓv~|ñœõÚ‚xJ’v­:O¡¡d`¢¯>;Âi›KUSxP9‰€µ3ܯy½ßçÙ͌Ӥ‘¯0oÈ÷¾áÈÓNÕ<é‹´]9Á§îԇ¨¶Í¢¥9è¤>3`ÁÄCXGR ;¬M¶îßoŠ+ØZè«ÉÕ4©vTÂiÞŸñ›ÿؤl¼h||f£4ÀÚ.‡ ÈK X=í+ýN@˜Âžñ×GºÌ¤I†÷¹|.1D19.Áƒ³:§q÷VCi1@ÈÅ&n€ôu{\iF×–@úú¥°bÒÎ<ãk­mÖgšLt6.D›áÀéöcZíMŽºkÂüɬ›±€I¤RxLŒÍˆ¼ù±E,±ÕÀ4³·»Y›qzÀ¡*,Ím[!"ä¶ùúô#qÝ ƒh,pxRÍRB\i‚@[¡ãç‹.¦Áp¾×/ ´že{"×Êü¤É%ýS $á\Gúýßý!wTB#1(E€Ãúô”¹÷ùÔÉm§¯L°Ì|Ô{ŽîųeŒÍÚ±óNܧ äUA#\LÏÖ² #ë¯èR¯  …¨3ߢ|U4@7šd)¸,i%>fÜÔ)`€hhuÓ²Õ*6q›Oéà´ù }j“n',¬Y•kFZâY*nÁKƒWYŒá ó/›¶É~#¾òº^ÿs0”Å¥´‚Ä„¤’\ºän's‹Q`’_À†t£ÿdø Û¼Qw¿¿ ŠOÏ~üñÇ"—‡ƒ}ëã·o®>ô¸Ô{16}P–m/OvèóŠbÌÉ4é=w”½Cï0ìóÝ>5Ñàcòh50[Ä>)çðN? CÀctøã®DÝéõ1¥=é×ëðêáKëTïã—3ikVb¦b¶ï(*ŸËÞYºp†òšÎU¿WêSåj ‚Jh?¹@y`ƒdì4ÝIùF.åH¬o-d¨Ò¸úæ¤P^¡™¯|:ÒëgjÜ*Çà äà8à™&Å ±WÒj=`›h5W±¡ 'v¤0Ã.Ö9¨ÊÁ۱м he†OívÞö³3Ñè"´¹j«\˜ëMCyt¥- ²ýÎ+Òm[Ç¿jÿ ãÛ–³B%¿"?ìÇ5g/Fó}ØVL—=¨v–"Bíì 1Z×EB†+VÌêæÌ×ô«z Z %t9†oná—ÀHx›c ú'ëH°µ*ùá?%àmDÞ`QW‚aéV  ý3ñWMÚÃ8óiöÂõÀÅÄãÀ¿Ø A:ž›‡êpa~üP‰´(nÄÁð—ÑÈB/î´ÅxUJ†Ó“ë·½YB?o¼ùÚZ_@¼E>£ òÍ/5/Ð}xÇÈÒo’óp6‹ê!EË8M°*TÃ?¾]œÅAt|³Jp«Èo¾þŠ»žŸ=¾|Õ'œ V‹cÁ÷¿ÿýÿô_þ+õ‰ôpχˆf Ûa Ô žñ3íEôâŒ&:òÈØü ̲¡|kUé ØÔ6»Œ½Tt«V¹B­èsñ¨•nm£mcRÛ‡S¢wÇä`«Ã¾™Óî2hºY­Hƒ–n}@$?;.–‰û|C-A–7ªL{ó“ KÑÌæ`…˜—wE%™i´óÅ_èæX6±¾þúk¶xt«²0Û)©].'N½´\kÏFâõ#×Êz̪p3šgÇYá5Óæ#Ì^³QN@.3z®o0,ŒÛMnq²ÌkåW®ÐÉm÷…°ÇÇà~ueIŸ7"Gxnãjè’ ÌFÂUÑ6Ak¹ÒŠ0Ã#O>㯶©…0'9€Õ€cþò×0 é_y\¹Š+¥Ã6š\qÜLqnFëC…ìbbâ˜G„FX`Z™5ftÕ9ða‹Ž…F&A”íN¡q^B€(À´ÅZ,麣´dTµ;šh(¶qw¡uÜÎD‘_ÃÉ".6üåÌj!—dÔNèÈëÀàV"ã$˜†Ÿ\$®xp58?º6rKè©òMŸ¯¡˜`¥pén+,(€y(]G =&Ʋñ–€ïüV²gÎmãùžµ‚),T÷ïz=¹¯<>yúq~Õ׈:{Œõi^¶Ýß‚€ë6Úîdw5€1tÁÓts¦ì­O·_‘’'/t, Ķù .õMö««—w^}xã”Ô½‡—_ùÅτŻ神k_uðÈœñ®m›×W—ÆÊÏŸ?>ý´^óÖo¯_‹¤¶NŸ?8=¿¾íí릮ÜÃsÛ¯U]s0¼Šœ½wz‡”·üĺm)_æÕBêÄÁ«ož}•ƒ>ûìäì#¯½òäÑ!¾9yet7ë$…}ô%C)BlRÄB3TÍX5ý äzÉ*k,‘ë§ñcø^t«ðhã ŒDlGëðk¬Cº…çíÆ{ °MZ ÔÊù˜'™gûª[fWùikþáyLÌH k<)'žõ»Öõó”PtVu˱Ñ*É€”Q(ãvK\•,0Ul$×Y¢T¹’ε™¡ùK+ i% ÆÃ&ÈÁÉó™:|Þ]+DU©NÉ 98¬ÃÜÚtù¨êiÛûðz ›DΣÕ‡ý…j•æÓÅŠ2ßÖùfÉÙ|»„"ोŠD"œÀ¦ùf’Ú­ŒiëÛ‹Ù`nå¡Ú·0@(áP¡VÚ¸I3ÃÓ4brÆK6×E·[®ÑóŽš©h«dhä&ùm{Ó|¹BZ9~VÄåÓŸ¼ÁÀ °×ýôSð?ùéç0C¢y™Güê–_6ó2(A}š½g•ý4 Ï´áâå›|ßéz4FŸšCŽè20W&èÅ|‹/ðz'ûsdêa#æuØE¢É6‡JF¡&«aWi%BTR¥­"ôý‡Žs½Ù¼ª€Ÿ° œÛ&¢YîØ4j‘>–ÀÉ’`(¯=O4+n!–„ê/uäÀ»…WSº^†„hú¸«5¯u¶ˆ „„¹ÿååë !ÑŒ–a[)”ȯS1±@éÑs´Î£÷A·êkÞü›ŒÚŸOV:Žgf`;aØfâT4ã9$7*ÕÃ+šk4†ÉÍË£æé… Ÿ£ºa­¡qÍÕm2±=&iBÍ7ÒòEîFQ2VÖ3 Õ%!ô¿B®%.&9p]  %US¾~M¥Èµ}Þú¹gƒ°Ð7&Û)u=“Ò •k¸5d®&p¢-V ¤ÆQ¸òQ’ý§õ¬ ¨À§–‰â–zÚSêñþÄb”UA¾€n#Jþ Ê-vÜ\´ à *Wl€”Ù*Ë6B*Ò*oi‘¿6—!0öR%!Í©hL¹ÛÆîÖÿ~¢×—™ó…ªÖ·—„ÛvRbœË «ró´}ò4‰™Ú.Ÿ®«+ä¤ås3ú匎õ¶,´Á?ÇêÍ É†ÅP¸u¢@º½c:K%"ü˳ÉZ G3á ¡þÞ›2˜ž õ˜`^ ¿¥4Ä4VÚHÓèaszö‘â£Mø—ôúäìÌÏ„é|ŽM0«T=ˆúêg_øÜ['=#·nñããø’gFæ[θôLò]›3ÙÆÂ7í¥Ê[U.D]{ù³o®žùw·®/ÞÙ¶sHI4j_Í`ç›ïßþäOÿØ6ÉýÓ'¸²²¶‹¼¶!!iás¥Vö3@c»ÍŒ¦,•H<ž‘å]–ÁÓš2;"Nó%P­hÿºrnÕ’Z^´oÀš7–›jxl—y¿e Ô QMœ,7üC…ØëùñŠ~¡¤n Ÿ¶íÆ”x(B²xX ‡(ÑÕÔ²YV¢H`’.  ¹j˼þ&4+¿ÁâöÌØ4qÕ!6ÑVrëºzˆqzDa rFth5³…ÈEc•£s¶‹™›‚ç….rŒ˜±þNݸ¡LN8›%H¤Œ}rÈ`å zØ-q  Nœé$ÑB°æ2{•Ñ O1ƤÉU·Ÿo k=T´]ãJ2º0ãG¿ÅZÆÎäIja6î6v΄[Iº*2¦Lµcꕇv+8Àc¤Â#Ÿ1¿0ÈBuÝ!*˜öÌ{¦©0Ôà*0®7ÈÍ/./® ,P—>© kÙð?›öaš?Æ7WƒÓl.^ª„+H,é×Ä…_'B+fS]là }xûÚü zùø£üĽG+”óçþß^}õãóO¾}uýæ£óÇžÙXtû¹_u ºIoÏê ixÐi×ùáÜã–ŠìÔ2¸¨È+Ä©!'^:\ÈK *-“Ñ}[sð@”éü¤A*[þ݂ю*üëVy]4žz<9q‰€-qÜzSc-xlÞ² ùµ`åã]2,²·ÞþQ¸]oÄÉ-£Þ‘‰ƒAcì8À®ùŒ[aècËܾ7ðÙW‡b»„í`–7 Ø êõ.Ϲ¼Õ‹™¡ì’Àä÷í ‰‹ˆÅÓõ2Õ3ä ¾ìUwõG%`4d#|/puã ® ÝB®¹äv]û5´ ȹÕ%øòª“ÔÀ›®7.gP·qÒïèA%Éï9`x Åƒ* ü ù+Ǩƒ˜êÎhØWæáÜ& •æåÇO°‡GÒãbªŸOgúƨƒò…wjl¡™]p K_ZAEMKNž8(ÔsEKª¾åœL³R%EÂ3+¬Ñ¬¶¸ºãc8­#gǤ*¿Ï­° SÿQ†¦m¨œ–FøÄÉr‹º¼ë~ÈÇç$åР݃nwn RsI•<3íð~µ-*G‹iVÆLìó1C?06åx¸ö ²nG9ÛÇå‹3窫NZ%Œß-“!ÓðçFÇäSB±ŒÇ^Ø0)÷(NàW&Xné?ø4é.RZém8ܘ?cAŠ®³LÇWßRœ¨xâO:— Jƒ^’'?Ú¶îIkFÊ`„]­ÆS•_^zX¹ûÉ'ŸÔðêò‹Ï?s9Ë×ÕWÛbçA,2bïNú^õ«KŸ«Æž€+W—›oü"éêí›Ëo¾|wñåWóŸýµßZõÑå‹go®^^>&.ûXýßü÷ÿç¿þÇ]|öWgwß?v¬¾Áï¦QoÂ3FóhÛܼ©Á¹uf0Éê£Ê4„ÌïÌ]íh¦`Ši¤njÆU ¶)ÄJ=:µNå&ˆa07€>³¾¹„¢’½ÂƒÕ­]ZÃo #HVÕ34òÅUï¼÷§$–U*ÑP+…—/_]]ök-™•/·HHJ\A"M>Á*qýƒ>–¡á&&ŒÏe’‡È §Pfó"!°ÕNÀHö?¼éV`òÍÙæ/ýK`nCâ§âì%øVµÁÖ¡f?¤k€2Ÿ^–j[Éc’hn™~”¸•–ŸÍã–ÆhfeÁ-` Ãû¦(& ·o¥2‚Æùb ÿ¼ÇŠ.Ç  T¾óÑMcÍéýƒ“û?C³Ÿê¼|åAqJÏ´œ?ÕÕ^¿ýðàìÌó.³ÃG0LΟے»45{÷ÚÇ6eþ¶Y IDATLj–|óîõùãÇ/žÙò9?â-ÓGÞt¸¾º~þ“³g—_Ù:¿wû±ÙÑ“ï}÷ÖÇ¿üàÃío.žž×YÇ«Ÿý÷[¯ß¾xuõãÿø¿ïú§ßûÇ¿uûþùkÏ1ïrIî啬–uô®!ëÙ?óe‹Ÿ»ð®¾Æ{XMЍ”BÛúÌÛkß国úÎ$š¦H7ýÐÇýL[}ö“/:‡;ÚcQdVMÍý0‰—ö½bå[8ÌÜ’ÕwMê":ÕìT±0ü :ä6F2»uRÐÛ—º(Gìô£ö7×JNîsâ÷~üA™~À˘0 cZÔ‹ãN'¼ºLvC1êl/‘qºV †¶x¶`Õ­SÕâ%«)Õ_½¾Ô5”õH ÷(›ŸÎ+ÀjIÊoNž?žÄ ¬®wÖˆÉÞ¤õŽÁ-oºª" x”ËÖÐ{©®õ“Œh0!¯y“9‚ö)G÷=‹ýò¦~P4¥…Ð z/ÈÜ×DMô9ˆ ²Ë&§×Ì ØgÉÌ)Þ0ÊAmv5±l禇 ¯DWLó’<²ol ’†œùCÓz‡þtážCŽ®Ì:Q§è®å×¼ƒgÀ·ß3]ŽàÒU¿‘‡„“O\Â2ÆLÜ{ò-jAÑŽ·N:P›y" ‘™k+Çôv³Uý\Ÿ>F-}W–PQ+eyÄ,äƒh|ʯi25÷ÅÅùU;«nBY+Srjy××h´ÅÓs{W˜Åî'#¬AŬ`2bßiÂêÒß:äã÷Y2nàäåïí´‰"$µùz§‡ýZèéãÿòþç_ÿ­ß8{pþÆþ‘1èêõ[‡-} ¦m3‹u/Ìræø#¯¡ ñX] åXï¥Zslí¿SØìç¹€G:®ÅÁ‰C NçÊ8…iˆ-GtmnQ/ÍsHcÞ£yC×þI?|¼Á¦ô÷˜Q9í®­ž«:u_Ϲýá¯þò¯.¾ùìÉ'¿¤w¼vŽþé£|ýì›}†ûý÷ïØá¾}}÷äìâêËÏ~üg¿ð+¿öðì#ç OîŸz™ÙôÝflÎ³Éæ’EPaU¾`LsXžFeÖÜ|Ý˜Š“Án¢A{éóâvq”–âàf`VçúE«ÍÆ›¸Ð´—sdÒf,ÌÖîh…37!¬ zÓ+\@äÙÓ½wjol¨2¼­ip2ó¼¦-M•ë¥þ©ý@ÂŒ«%ñâ›çÜB·ØT•<å®N[åðµ>>¨r™Ö÷ÛÑ—SÆC6ÓÁ'øörœU²¥ä!rñ¿ÂÇ|ä-$8®d¥|Š…ŒV”£' Ž]‘˜TÄGù·!¬fGq0†Ó6l0¤ýqÉÞls¥ž¾Õ%ð]Oš0DxºÆ˜dP\ñѯ¹÷ƽ呈ÉxH]$}XdBa–Õi©Q{Ò(ª…>?á«HÈ3‚ „Ð’®˜¦¿ÌnжÊíÔ [íqïSF9l‹A¿# `‰.Ã@¦©Â#†³cÈçRÀ¹Õ„‰æ1Òc‚´ä ·f½20II©Ñ»= WÌ€S0zç¡ÅVú·õ•µpˆôòß s¤‰}ƒ'1W:È%¼«…Sí–+Ézþ[»b™ÿFØhiÄ+ôJJú?~ôoþÑÿðëßþö/]\ !WO>ºèC¸¾4ÝÛ+áoî ¶=dV¨„õ«ó:a¹ñ·ecyPÞ”ÅUR˜ æI œŒÑ¼ò0‘s’Bµ¥D~GArÕ‰úˆqãý⪓+Ôd.ÔB#oöí`é3I{!Î@k˜œ‡ce–ºã 4$2xnŸ]xs Ÿ§-ž€w…-JÃ)¨dYÝ|s¯{Áí'tê&UÍT&¦¥¼eºOÖh­}×ÿáYê{¨]ž€úꟖâ8sK·’ØF!ZÜII^•«òmèºåŒ‚.IHÐÅM„Äù:¡÷ Ãvüª»Ž€‡Ù, G-°æŠcµV×ÒÞ«Îù¶vuˆ%$–1øÁh(sÄÐÓIµhIÚ¡« €Â•Ñíæ·pÛ’Q¹”¡&Dx΀^\ÅXH­\ÆyV-+Ô IK„c3¢Ö1§MÈçk>ò"•Ã3¶öTþéŸþé¿ûѾýÝïôI4³{""Î9Dz6¥ÐNËéïwl6ኌB¢Ó6cYÏÅÚÚ-*˜! X׸?k]jW’ÕæU³Çgç:þI£|$ug•Ò„&°­ZxA“¤ãÇ`Wd¢i%o†Qóyn Ÿé›i% ÷ Hj\ÏLCÂí̫؋êrN8èÐðM.máq»I~¹¢ ÆJðÍb[9;¥Úys}d|˜\ƒvêƒyäêy.lna+ú»±Ð¢2›úˆÒh]¿“£Ëä@¹³/ù´Ï¹ ·÷è»×—·_]>×êÕ‹o¨ØjîÝ«‹'ÿà/®®ž=½|wçôþ£ûu™}-”·O¾y~²=xLg¿õÉÝgÏžÛÛú‡¿úk—ÏÏ=ãzpÏ¿[_üìÿ}w÷ìâ닇§Ï/Ÿ~÷é½7W—¯˜s>Uÿ>ù…÷¿ðí³su­»c?¼kÁz}ëúe[ëbÊ›wj7wÖ9-ᬳ\óYÇÑuy yÉf’Fä^…¸æè3æÑ4ü³²)†j¢/ø@ÙëW-Ñèåél¶]hV^[…öäÝ®ñ\CuÝ€Ê>Èqb¶%×Ì®`ÔãüÖº÷1ÕÏî²ô`¸‰iÓ :9… K™PD8|·QB¹fµJQVøÍsÜ(^ÎãÖÜ µc½Tså|H+„0æV!a•¸b^ „ú»Ù O)ÌÌ0£©5kejha³ò„ —2>Íù m%o<,3®PA»â»*1Ç¿Æn1÷sÞŸ¶e1C|`,»’*\>Ýʛܦá¼)²BØu ÂC¢m²l¬Ò kgìÃmßé·G ¡–in쎷Í+ŸÙÈAÏã¢sp‡jZL·Cli2@ Št]àEÝ̬Y@®aˆÒû"Õ¶™· Â葘żc¼áe(*×jí:s)ÜíjÚái)?î3‰ …S¹d CƒÜí»¾1¾‡Ì”SEî³a(?Á—[¼ä3//„„¯¿ûoÿìg_Ø|tê#X¯µçã-ûil¥ÀÞùÓ'ÔõúµOe6¨ë$-9~»N»ŒéHé2éíø¾ !é³3@Žòסݮ  ºm¯8ÜLúšÅÏñÖÆLó?[!JP—÷DŒ”zìÏsŒ:u=˳áÿpÜ›NL¤Í┘‹B—ˆ‚t ÁʃÖh;cÍÓ€uùÏ>ûìóÏ?÷Þ¨3Ž8<ó›¹bvÆ3óåÖ&RÆGk×§Ÿ<ÕV“ÑžImH‰ˆ€B¤-^ ß«M3~%²ªD„¼úÇäð¹ÜúM{<3Äaë¸Ü€Í.4…QL*¢1ü+áe[®~åc…|FÉ\ùps#Àܦs1‡jµ =\ReNX „+ïÀwYd YŠJlëâPT|ýγ¾Nõ¬ô­£«0 •BÇ®ÛrõS9ÿ"÷žp™„V4´É'fKœ#W¦ÿÎlÌš‡A´"“1ÃŒù‡OýRØ/|ò1ëÛ<}õòÂ! ó'ç,O†‡½>F[¦"õ1’inr}uÙ÷‚¼Ð¾~óÖ)b<8yrùáêέë÷—ßp´³þ¡a¯þòÃÙG÷Ÿ>ò}¼7/^ØOùì¯ÿòÖÅõÓ_üîû;~ÿÕ³M_Ô´h6ã{9Œ'xß%I¿•Ê­ç‡B¸4!v÷;ÏÏ6¶ M4õ#;Tí]´õÚt¸Z¥gŒyz’âL‡ç$ ÀpHóܮݮ™[N Aާ#ž“±Ÿ!ÃLßlz4='—E1Óvš§ò§¦9MjŒd/‚Ñ9Z‰>-!Øad $É„sÐbÏ-Í{z«o“Õ7°srÍ«ëXÉùÜÂßÅ Æÿlj…wb¯R,Á )“Gãu‰©°'{í7ÑÑV•2nvU±gø6,Ú¾âKL Iû©íšòÉ"Û¼—ÒC[X>;).ÏyÑ|àM—ħò¹ò´G£ÞT¡Dç“1ÕaWijq%¯óì"ƒŸÅÜu–UÓvž%Uº,-PáaØ8lAA¹ˆùY0Iv`ÜÕQx•±ìéInó_“¦´1JÀ§î®Oœˆ«¼ÔôZCê€x&µÀƒדüö?‡[HCíc+i‚Õö̈î€2š6Ø_&ÎÔÃûöQ¾úêKÓª¯¯.Þxcðâùù£ÓÞ˜§¸[¾·ËB=úºÿ«;íÑ,Éû^{efeUuu÷ g8$E‘K½ô [?a‰G"m~áïdÀ°_Ú/ ¶ Ñ‚ée’"gØžé¥ö̬½üûŸódÎÀÑÙ·â‰qö8q"nܸ€ÐŠÑ–Ï›õ4ë´gTö¯·O-ÝyÿÚG”n|öëïüùóù?ý·~ç<ÿùOÞ~|}óóÅ'ßûüý»{×m+ëÃ>‹îR 2DU"GŠÅ”(øÔûDÅ+Æ=Ùx!JéÍ¡Ñ(ánZêH~Æ2Å¡¥~Wõ§w×mÀ×V²ÔÙÕ&Ü”¤•4R54#‘w6Ñ©L©ê˜Ë"€ÖU7ÖÚÚŠ:~Z’5írkZöÒœÍ4³?ÀÕ´c´íΙÇšC´ÍimÙqK9Ô®c­C46OVȃL"jxFé ¤¸¦YïeÛ3GûÙ¢Ÿ ³ªq» sú’F,j½Ã;ˆÁ˜ƒ^2ü„Qœ5t5®›“W[ d”¨&Ãì•Ô|Ê'Ü™Ç1Ì ïªiÂ*paÊæ į•Òq %nM+ºëÅí0*ÜjïKÛûZã±FbñX¨@rV&`á@SÞ¬ér6ŒÔÚοH9 bCãþôýhŒ¨¡¤nÌ£2AècFOñVòK›÷¿T í`ü.¢q+ý\š+œµj¯JÐ õÜSf@`ôXEã÷в„Ù~ËV¥éêK[W¨‚kEͱ¬ðéNý¡Çð“y“Šu4ùé–æ°7jCK(à <Ð<Ÿúêç?ûÖ£ûñ£=úöwíÐjüw6·—- _¿æÙ…AÆÓz]‘Ðt]@c9(ARÄÍJX9zgÄ”Ê<ÐáÏ]Ä/…ðJšKØ\{’Ðk€`Ä]WI[…n)ÁÎæýüÕ&pº«¦BÀX{×·ÌRcý‹p Ÿ‰Ýû¢E<ðÝèJÛR Ôš,„%ƒ×TîX Y ñSФÍkˆý­é>\S åóþ„ùžÌë}½€x<]ÒÅhÀ‚<É(]?F!ƒ%w÷áÔ7`e@2vX¶óA‚]džFÆAMqRpÂç'U¯DFµ†}¶¦~…þØóÎ9Fró GÛ(4ç7)šY’xN¨c,¢ê‚,i»ÌMàSGž*W·jæÿº6ãÝùU èJ6EŒZ5_¼Cê¡ýICÉR.#¡ Çê/^Ê»ªí Ž«„A GéùÉ’%5ApcÊ5ÜjG*;°F/â*ɆStÂGÆ +¬††gÏŸÍ.ˆTOþæˆo.|ïÅão¾~úøk/í íÔkD¸Q j™HË´&¬Úzˆ4…ègán­G¶ž4ô@§²$_§0 bc£+m¾7m×o/¨†_e4l(œ=Uf\xQTAÂ’t+ŸÍ'F/Ãõ–’DªXêXÅ(¨%ˆÑ‚j3”äᑤ­Ú Q˜¸wÆÒwK â–Ìè4Âü*Ð=¬«%Rkx$L8»èƒŽVÅ’úµëgŒàòÀ¸ý賦ErsdÙFšºâråtæÑl[‹J«fÜÅiÌòiSd`•“t9Qn+–ïÔipR¾ZaLÛmÜÝeûCÚŸEÕ xµËdS?©2ë2©' ÉÚ"¢~òÙ™+­Ôeýd…ò™~‘Øáª2øRÆpa„ByºkªÑÃAÖ…žzÐÔW@Ýfäã¹rGïá­¶ã_€C€~‚»~]”žÝ;@bdœ ëZV,Ñ1M "¨q„BRW(#áböí6ØO ¨ã Fñ\m'EÿÒíÀºÙÊæNÖ&dn «>W‚_B4)¨¦ÖdÓ¶³rŽwL!•/b³èí•À¶´·í)½Ì`£'¯‘Jºþ4yS±:ò`NÀp˜ÁŽÓe\ 0›“ÕÝDðÀb‰‚aÞo2ZgÔÔA—žúïTs%㮣zªÐTM,©ô¥*޳ž ¼aŠ"„UÐÊ IKÆÆë Dzá÷NpýšÑY© G¨¹B ¸ÕÇ(ÒþtM"9µJ$3UI0RÁXiÓžI£î9tÀ.Ïko_yïöoÿêß~û7ËË9÷ïÙ¾G§§÷KàRG†Ds|8¡~Cìˆ1‰1¢ð€©2ÿ³glfC9ã™çl/vÓE6÷sÝ:èsñuO³쮂«úq=ye¸M ‰íUkÒª¬D*“HLEG3cç±6ÄdDÊG\ *_}ÉØ µ OÉ:í j†Ú’š®îÒ(‹6 B9cV®‰Âñ?ô€ËX—iA¹ª4õ„&^l#vUt×üxêd8à{dø­'º4 X)‘­¸rLjú=2\²·Nç¡j Ùǹ幾ï]™œÆg*ãÂu¬+XÍi8N…éhh*¨ÛÂáÈ|µ¯|+XµT‡Ü˜æã[Vïä¬ê a(?Wpº5£•Ÿm‹Â½±¥@ÀxY¹5zg< Èn5Y-²š—´ˆEÂ!1¶¬tó¦íÑó ë½7ô½ç…f}ÍŽxGjÚ!;F&#–w„ÅI‰>¡‚‹gOŸ\´sü®S*½1@j<ÌÖ°@P¤Çc{)#`Vï7>Ú뢦„w~Ù{ ¨&¹qݤ?a(3m€SB_¿ €&ˆ†Ü@ì±ãްõkÿÛÒÕȳÎH™ªMÈbGt­nŒj´Iõò*¯éê{KÞØÆÂn$ä³ ?ß{˜ &@¹%Ã;òód#&@¬p®„&Þ»þú“ë~¾¨]¨³ï^•òƒ ‰Z¦‡ÛQêTÅÅ2¤C²b#ºa÷~r|úàÎÑ=ß¾`ÝX¼8vqö¼Q¸§ÈmÅàÜ,Z—ôµfkWççÌú¤¥…Þ$?»}ç Ò‡©=xÄño}ÿ÷|òíóWOŽ~Ëûþ/þúwçï=øõ[G7½ô†yM}˜»ã˜Yôk«2ŠÞšLK²ÓfrsxïÚ8š_Æ'Y€@Ÿ¬›¬6gD Ý’Åê[­‡±l$!yµ- ùÊgc‚ìÆ£€—GÎßÉðocpírSÙ«ÐÉ,s+­ˆÓ§ù~i©uõqË\CJêggŒ†ÈûWFð,ƒÉ sÅ3T ̧ $- >5ŽfØÖP ¸¤µ A¦YôåÞçù [î#r耗Wœñø0qõ ꨠ¿©pé~ ÚüTn¨&Iôìè´[€sGä`É›¨ìº{®Û–ö €1ù'R‹4€¤©†Hƒ„‹´^8,ÇAî»éÀ–œóÜš¯…·Ü2dçå4ŒÁ–ùן¤bM/Ö5}ÓºŽÜ@Ž öÂF0ˆ+F+oñ)O]ØU« Mïéå;+¨)x:ìh¥1©~xgk#DhãcïyyíÞ½O}rt|xÍQ¸±JÕO¦M{p½º8ós¬²…¥&’³¿s7<$6Q¯)Ú¸e5×fæ9ŒüÁ¨øø#[VÄ¢¢wöž¥ ¾´–g7þDu IÆh¤Î IDAT•XUVA+õ+™Ädùº«ñhÊr«z%]{¥wêͦܖoUŽ—1o„…¨m‚fY:Õ‘QîIE\áB·b“’¥–ÐJcê@wó_üàÏE°sžïPóFñ¥„ˆý4ŠìDíõù™À ¬j†Ä"žÓÞÐ*X|Õiç½¢ û½ÇxïÔá ^[²%œW,Êìa 9øÒ–-´f&olÉ/V¯„Ü}yöúýG1ÇN!½v˹g7nßýµoÝ}ý©ƒHn\{ûÍãÿõù}†þÑ·~“3cn–!ÆAõÞ)­z:JµLFPÿú¡¦…  ç?¼×*¾ÓgæÜ¼ EEÞ›¨3°­ºÄü!Ç`9î8ç‚â½NÊ„a*‹? FY95dâÔˆ»YÓä½Éð ê,P35l7 ‚dgÉF×ÔôjÒVm…/®©/ŽW•±Á:·H¯~µ'ªÏNX\C ‘$ƒ­¤ hb…ÑÌ­í±… ó¥^TÉ À:ŒÁ⪕ÇR uË!ø.#m%aÈe~·oÛßS4`u^ýlvàAèuÆÝÃpÇÒ"XÔúéÕz±ð+€sôf¯Øù„x—&[½+mm ^hv¼06a‘ÔrûæÒ¤•ÔùÊÐq£¹-†á…[ëòÜ)úÕ‘„×Д}»ú© 2.‹E‰Mš¸1Ί陲šîReNq^À¦&„ŒžÐãÆx}›Ìã–“‘ç1ìÄÂ᫯“ë/±Â‰÷¸ÌuÚJƒieC2›dZ›!ý‘m&:=—º–òƒÇ‡K+¸úlUë­¡£Xdæ"g\G¶‘Ç÷È1£†#Crka }2õj´ˆ¨ ÔÕiùA•¬”^–r¾Õ0¿Ä+ٚˈºõÒy¥Fˆ×zÀHl€äOå‘ôt|A¡ Ifaº²ÔD•jhø )öÐ3F8Åa5ÝÊ›ÊÅE&³;ðJhš`M¹×Í&£‰ÁO€uïôÞ0̾@5±x/2zg¹KžŸ3 ×O‘­ øjÊ ÅÀ:±4L [ñ&Ò*B+¯¸§p³)¢þ´óÌU¯ŽæZñršû Ýb\±Œ…¸küJR–:FI¸+2Ù:âBsæ »‡9½{i+âŒî9´I~Ù½Îùã†a®uOß­=Ûß|ÏåèÄ‘ÏÏ?yò kä7 EÌéz%[-%Lý ÙF¨d1 äz¸ÜAÛ‡ûÜ¢$‡¤\£B¼[Ü:>ºÇBTÞ™¶d‹;m±FBþ° £Öev‹\Ë 2ášåëˆJ¤úûtžžpÀ¨¯vµ.²'>µEêƒÍ*˜ ý€À¯Ÿ2LRØÎã'ߨß>›@fž˜hÕIÖÓO@t~Ç‹|ŠÓ_&rhveÓÂ0˜·÷ÿÖ‡ëæŸüà&®^Ìå×™LÑf:žÕû IÊYƒ¾Þ@¥Fç1fŽímyçœãB¹è~ïû&½‡Ü[ GN‚&ÆfäÆ+×Ç">¼{}n4sž–Ùf"¸)€ó9亟eX¸tB^q¦wnÜ{è|¬ë¾y—óµÿFìöêʇŸþÆ÷}¡Ç[ŸðX$ó½ò££{D×ñþìåó§^øöª£ÎŸšo\ëŒ3ëQ¾K­?Ïf,\дBb¡*õ³ÚÆiŒ“ƒ?¦& ¥ZÖ!´èÁWÐ$Ð*Æ*’†Èªyáô¬¥ö£ :¸—þæÍëÛ|:{ÕjÜMú¦lá¦!²•ŸùÔ;ï›»{%cd"qÐXßG@G³nQ ñäÉSîšéb/›*NêŽÄ B‡©®î3–-ØuF†>í@d¤›ÅS½6h\ªK¡Ã£?Œo…`&¯ÍoˆõÄM1³†ÿËÛÀ×ö@øŽ™ ¿½c¹ñƒ³›[" ìh ïúâÅóMB£¿ñ±Mîeb¿ˆ¢y$øš´ÞØÃ;#º&ºÊ{ñÌ8ìdQ£¸iÕ4‚ï~{zÏ ‡ïRñõ Šþt*ÕjÃ&ó<U×`c­³⨎‚fËRxÏÕÔ¿„ßÒ#8ºëè”7ïß¼rpÓAHÍcðpNLߨuxw¯É´VÛŸ‘?³Ra߬5‘›Cq¯Ÿ8=®…ÎÅFЦ°j6/.\i[$1ÜaAä”èêøÀ—Ÿ(a6ì,ãéÓU¢ŸŒCmÙå3Š]±Ó)éa¶%!RÕ›¢ÕÇÔÌ£NNM×LNHÀtÅ ¯ýÉ1U½Uúq—³ì=qõt.¡sÃ…u‘Ö9oÝ}ùò̉WóêÀGžÝ¹$d5€£‚ŠÈÕÎ鏿ÈÎÌ»ñþíW/žýÆoÿ;§Ç^ž½`rn“ñ›„_ˆÕn<]ûÏ!‚ä™éâÛ§rs·œøê8ÓÃÃY­ÌÀ²Gw:Œj> ôƧUs¦ ^hú཭O¿mÊeÞÏ´éçý»^¢Áébƒ¤o¼±tΊ™+á}§Î _¶ Q䤦 ;깆mQÚGñV/5g£#âœFÆmx6¶eÞÊ9nå|’ù䌧^bíýاžØsFÕ$ýzý¶êº,.Ö\ãì锯 4bÿF&ƒçsœNÔ›ü 6Hj|š8¬†cºO¸«ÙG'bzÝAPŹvVœ––ø#%ZuˆXöõ¦¢\g˜9ƒ’‘ú´@æKçh¥¸Æ»†!ØÚ¯æ`õe=Q™ ô\·8Qg¯& Àþ°øÆò‹E‰¬ ›T€ÑÖ”fP½cYj¡f™4kgc\Ý7>lн—´&x¸Vw9C°èa† ùÓw 5'“"©û×_y!`=ù.˜ëúÍÛ³‹3ƇŚ­¥FÌNG³¡e¦.¬£‰_‰ÿtØé ï7 ð[ZáÅôÇ[¿ý•OÍÙsþòâ)¡„} ÎšñÅë³92a«ÙÙ -êBÏÉÁ!b%:ÓY Šyì˜,Õ¶Hì;ßN•ëY^ŸVªßñ%Ö×Ìx†šE?³#™…{äŠrWD¦è1§ÂîÊÁKtW K½!ul": P‚Ó 9ÆAb^i8ÇĹUÏÂîˆîÐCÅB@ëóˤ,}®ç×çyc+¤(nN$« A«¼Ø3rнƒà0JœÇ÷ì›—O~ñýßû÷>Ý/öˆõôøÀ‘9¯ÏmzׯõI¬‘,)“5>•±‰<œ¦Õ1zòRˆ~õT6ƒ^t€‹|æxòÁ‚ ê \3…™ò"x&OÖïâ”FÙ4Ï‚µÜ§d¦­|¼góI ê£caC‘gäm¾!^Æ_@;á"Bª¤Ú®“¹•Ë™çú£.ë¿à@µªŽwvÅå˜/‰ùÑ8 ÚèH¿qOßCvõóú†üØIn#m?—_”lÿÇ‘s—´=«å ‡Š¦fü)T …ieò & ‹[Õlp¾~(G4:â,Ý£®Yø[OúvÖÁ²d3z1Êß+h*¢AŸ'=…LK‰âNA‰^Ä`z=X¾¾Q¶7´"•Q¨ üÑV¢ ýŠ+¢^Ô£&/†…5¨cí’)÷4Ù¾£ŽrbQGBØÚ•ry„Á¥­BwWÅø¢8@¶Ïê§n­ãÊ„{UGLd5{Å¼ê¸ Á ’:J¶pﲂͱ̵Œ­^Ã÷™)OG@øÌ÷ÎEŸ†À'Uê5dób:<ó1š²-"MÎå™Ô¡<Ô—dó}khñÛbз¾ó[G÷N/^zwX¬ä°ÄºmáöÇ''§>÷{úàÓ[øO%à¸ò•®¸å õAZS‚*ÞÅ:gÏ%©gšÁQàôj®LÑĈ6„qW²óã!]Q0TëXkò£¼¬}ð&Û%ÃÕÝn‰ ÛÑé†Ä† mý@• 8“Wˆ·² &”µ íëNªÁ Å6ôS~Q+áà•ÔJÆ]u(–$ÈA|~…łÔ¥­/‚¤¡Vh^ãQ" †ˆÑ3 Ô¤Àã1B4Ôõš@¹ë_+:@£å›ÑVž.¸ÕWNà9„iÈN×dz8ÞQ5Îéíœóc’XV§9 $§%GšXòÑj†U? j§aóôdB1­ÔG92& ;¹fŒÔœ0-N˜ˆy²ƒwÇ}(Q»Àjý”_ù Ìò'kOÓéB³"¤‚ƒB«ŒJ"EB@yŒo©ï—ëÖý=H¶úÐÆ#­W“š¬÷¿Q?žŒØÖž=ûæüìé˳g° I/Fsž¶›êžsµõ™¬²@ckk~£0[ƒ¡)f&Š:âIÒþöAêF2Á é7Á1¼{„×i·¬S®%Ô‹åi4–Éü²‡­úª¡P‚HfPfÆ/57Á¸¢ÐwÕH5¡}h~*ø¥õ‚£Ý¬™(l]\‰jW?%:Bf?oݤ/õÉ‚9mô‘6D.4%ˆÀdÀWN°rZIjº¦Gb0`1ªMk7ÿÙý¤œ‰OË%h~9˜éN ¡h±ªânuøˆõ3çÕ\…·Ýë‘giÆùüùs[uD:žWî˜ÐSa¡E7cYë:­ˆ)JëŒ5MîiÂ5¿xöìÎõw?ûëõõ“O¿û[,M÷"à±ÍÁh—/+j¸€ž!#é-|W”º—¼š“)<•†×\\:¾ˆ¶4'ÝÍp6^hå³^½åü æÿ‡q±Ã&•B½tâ‚ô<Ì-äc¥v‹"ï–C€Z\Xj§iý +a„-?ÖÁSGÚd$‹t Ã2Ä s/6IÒ—ù´äÀ Eÿ20N™1óüËV»½©ÿìÙc²#âtº£ãÓûâ…#à=pœ'Øë3g•1Fv*d¬£“§g,ň(má`xÑø7{t ³T¡_ïÇ¢8gžâåîPˆWwœ„œGg³Ë-!'±9¸¼/ÃÁ8:Mȳ#YMÖ­Z<Žy_‰:4o[…ã¢ZÐ:q­NÃÑ„€1*¶ >Ù¸ÿ&C «‚¸€ =’E”F•Kw9Ð:YXâkUTâöØc…™ìtà)ëÏê/_Ì‘zø±3×Ux#D†¬—+ E +gv)•ûl×jÔ¶½­—sk;Èûâyà<¬{÷`>‚¬Ö—çt‡¿‘úXDaÃ"ìˆ2âµî5–À9 ,bÒ›í_Cž¸à–÷Éë4APºf‘±#ôö5WòVæÖ°“ß]³ó±Š™ïj)™u¬ÀÑDåµ,·‘¼†üjýt«¹âišçr±‹ûÚr’®ÒtÁ,mêïJØ’@ÖŸnèO vtžèŸ$SîW:øÙ-Gií¡ù`õP˜³Œc©] Ù»èqWšÇ¯úÝžAò9‰!×Wi0ÓEœ.®›@cÌàÓNºžŽšhEž+@Ã5Ñ °ÁMe8Û…gÛpÆà}úä1½'‡K!,ü+jkÛl'-ƒ¶ÕäØLŠ.%BÄ€¼wUªÉ¸"‚=íg]w:CQ‰?%oìURyg“B4°&Ò‚U™e T{€ÎÀAÊ¡“æq‡.Kî.LõWìøbcf­>°vwŽÈ[Öåe Ûj Á©¯.Ó­Ü?{öäë_|ùâùó¯¿úêÓÏ?;¿8[?‡*m¥w©m•#F·äYȘZ å‡ëµ^Q“€Íåîx«OåšþüÛG`ê`®„"qß·Ÿ”A᳂}³¨¾ŒÍT…± ¢E5y Éf­vÅÊ+Ôðj6`éD'7U e£?ÌÐAÛÉIÜÁï«s³ëço|çµ%Ö³×F ›÷Nîñô×ïžh`Ô\@Š·|Ñbè]‘uëu}üižÍcGÂþò2Ô5â^e°¼i‘&š±ÊÚ†î®Âh—YQ“Úhºož#©’™[ÃF¢°A“IÒMëIñ­@çR{ZÆBÔÌ”a\ýD̼}Ct¼Ÿ-0HxD°®Žk®Pfå—»Ú: ãþ}/ŽøŽÒËóó³>zô)ŠÜºK …1ôó¢ÊJ`…02ɘÔw•Ô‘TÞ¼¥ 9rö Õh¾u\¥„pX(Zt,8q¹ªé.ü S1²Vª‰ÀX5·s¨¬ŽÕPµ·êëA›ñii†TI…ƒh0€êŒ§k5ža#XšÊ¹ Îé@çô\„¹E; ÓO'庪 ÉCëØqÉB B À¡ûÁÎk‘ìI5ìA“`ù~NZ:cÄÞŽyk•?å á?ñÔž*XfŒi<Övw¦µØ@‰#Ð3ÉO(Ñ6<Æ›vDt•‘7À±èw‹Í1¶/Ï!ÕéÛ¸Íù^ó-3“ÊŽÏ…€ÐÍ£gí:ƒ%+çÎ7ÊY2ÖðŒ º-\ذu÷ÖW_}üðѧŸ}ëýë _ðÀ¡‡80ÖöM_ ‹;\7ÂëpD¨Eã T W3 gÊ‘áŸf ýl¢¢*ß3s÷~;޲0®*Ü~dŠD{+LwSñý2³)“”µ´ÞÅŽžAwè­‘QoÓësÛ„dÆ8 m7Àv>›~ °¢c¡&’ü쀮L{]. UKÞ¾È;ÉÈKplzɬ瘫äµXç,Û‹†æÙ´hÙ‚…=õ6£Ùbé-MqFÛ„[iœ-®¤]²¬ŠŒQ2 ©)ô£D}øäTäLz‚§;'÷mxkÿ`=\ß3"šºÆïôéóéÕÈÆøˆ+¿0|­èýÄi‹ZæÍó›åe…+¯¦ûÕ™ÈC[ãÅ`œt#siU‹- ðÌÆl]çSë-#ºõ€êðéëÛÌ^†¿ÖZc­^2k=U5$¥pgÒ°f6BˆÔUÇdŠ2‡¼ÌH&X‡¶1¡ÇBøÙj*W誠ŒàP “>RªÂz|¢kú ’ü; V~ªio!F+—®ÒU!2ø¦‘±äÄè$ƒÎ>*º‘¶Ë…Œ»š¬‚TK"Xȳ_$?*é)†jâIöëh(²]âÊr†¤šh©ÂÖžVx®j•Ô¤‡j_~ù‹Ý‰k·t` Ù?G¹5犆–r[õÀ&Œ[ß³ YÛéÒÑŠ‘©2¹…³” @†w$Xš]j«|9."QŽ;ü«,)ÙK!,šl@OËp ÀE×­’=ÏIzò]Ž«Y/ñ¢V}xÕAJR [pÓn}}Ï‹ÏJUÆ®jðÀJ8ø6*©)!\x&ˆÈ­§™©ß¼ñ¿ÿÙÿö𓇿ýý঩ˆ])9ì.£+ʱILŸäª3q\#È Ržöf± ÂÔÑøÀn%¥±«é’uÜi½rЋ™+ª$•½©ŽMR“WÿÀˬhcaQËlå­œŸ ¹»0 YïD Aé)~‚F úmÙzÏ3˜7¨L‰P@V¤Ñ>+‘z.btmäðøïô—„€8½yàÄ -#ɘìíÓ$ÜÉË Ä/ù‚9­ }< ìY­Ëf01&R l³‰ø¨{ìî]ê>^cóŒN…Û·OòVá͵Êä·'Èciªûñ3’ºùh_ç¥Òy„ªž6(ß9?÷±¤c 왢ˆ­‡¢ƒø IDATØ>{nšP ìl†N§½ù¦—|>Çpl:½ñÞ¾ýó;7%PÙ.¨Âf"T£Î„SPg¬ã|—gw%”¨¢ßÝ(XÄ‹BRÿê§ü˜ ÁÒ))Í’ÀØ18{OºÇ©³HŒAÊG=„ ~scÒ½{Ž {wqþÒÁ\²‘mòX™p >ÐUцÂzi´‘¡šè0rtîwLĘDŽ€ù gµ•K†¡ùÙtås¬íºïÁ¡ô­r\à—¾ÄP~jrGªÝºæSUJlda0°ÈKƒ!jå™& \¿+JÈi¨ £rìT>ˆÔòhaKùšÐ‚U¸¼‡ŠÃÔÁíj¢P÷`ÔEhÌÌ}Ê6fœõ½ªm¤ÿ—”Žä'h2JHVTB@Û_ü¬ÂjÖDMäE3Î÷A—ÞØ©#ПN+ú9õ'oÛõ¨è¦·\Y“ ¦&ºZüw ë°6Ä, Š%ĸ"{¯K­Bõ_Ÿ7mE ¤¢ %ôxÇ7ν 2 ¹l·DÌhÖ„p–lyá­É;ošÿLŸ}„¦{Æò)8¸ryÅØáñÉ@…Ü+çt©òäÖÑ ó‡OÊ«¬Øü‡,Ñ8ÇÖ8ËÙÝ0×Uâm9ǦH€sð²Ô`zvq!Ž3Ѽöêü/ÿò'¿÷ïÿÞ÷¾÷½//¬wß½ýìB„—ßtÐqÚŸŽcÕOÃ$?j’ Ëx¤   Å2žïПºä5¤-óMŒäãtÁ­”fÛÍPŽ @Ö‚¯-²LPè@B¨‚ŸrŠãá´Žm¨„^\õ 5•o\Q»*ËŠr뜺ú8•—dÙÀÂÌÈÞ’—á†\åµÚ ˜’7½t}å@ÕŠÄ>ÌÊDA[ˆÆÆ¯Èpx90Iã]É„< @“K–›žI«Ï…K yoí]·¯-´Ëë,a× þIFÀ@fª ŸsÐP‚ ºU~× ¤ã‘J‚õN„ò†ÄÉ}¸V}Ë]ô §ZÉ—ŠC}MäÛ‚Š×ÑÇ3¢§…o_b{(‹©³4ÀÛ,/ƒ/I^Ú¼+íc y¶ÁŠô Jk‚ñnAŽHzÀþBÒwu|ôè‘ã“p¤²#vÃe/DŸ: ~ß>ÕnÅ9à£×À“õa¸i8vªÅñIo8¡RsáÂÈ@l”ÃÓ‘AùüQV–ùÁ± ’†®ã4…5"ï6¢_À窹 ‰‘ÑÚkE 8Ö혖®^ß#RsKý¢sƒR–2 ä%–:ÏåœÛÏ%•ú؈Íúø|° ¸QS- Rsé\Åi2¢_}ð]— wL{ÌÚHÌDç‘èìFXìhSFèXàP¸“Ö|y(_:y3%ž€£dëRª]ŠWX`ô)Bå-ùk¥òé½co£³g«_0²|F%À:µ¹ÇDZTäoF+Sx.±ES`5ÇS—Äšž&â]/ézÝúX½bY¨Í<À¥7wq„ø¤‚ÚÔ˜LütUw]ùù­9 q:~è#cÞ4b9”w*xßK5–ª·¦Êgçg^ˆÚ÷ïOï;—N×.~Üx £:¤§9РàÅG€½BÈ~¼³nóûñÑ©Þ×ð{óæË/t„{'q=hך)wIM …†M¼m'ä5ª2@*C—Ë`)h³ë qT£Æ>fH* qƲ±œl[R¶ªç—üˆÖ´¢l4ïkΖŒ2{lªi€Ù³GI&=Z\ãt `¶îÞ©?,Œo,}¿~c±u‚y†ãxs¨‡¤ÆJ4H ÇuÁ¦Ÿ«N>OqQ§p˵gµ7oÚðMŒœš@ÓÜÈÔû:ÿüȦ{)tôJéÞŠ4´ˆNí¢kù1Š8/ü®µîp¦o­ý´ž%Fá%ÏÍ2gWÙëJ„±˜Z ²ý‘3’y¹ôˆ5dö~³¼1Æ œ}ŒVKXAsfbu”­°ÿÕùë—OŽn}|röúúÕ9qNÅû7ïlµòžFáׯ‰ ÆŽ€jª@ 3<!È‹E×o1O.„â®ñO%Q‚|’Kù~©É'örI¡u§øSA¿Â¹§Îå4-ðY¡0ªog@”þ›%‹3˜»•$†·?.œNO üªÅD¦¸Îf{™ˆv\°Ã‡Øœ@Ò„ŒáÆxÒ´%oi¯)Å{fÙ\÷Ó–ÊR£‘2r2"žÍÔ0Ž noß9¶„n¤"Uºò~´G+ÂK£¶Î»V Ä–À‘‰<™+D¤ ¤ý:ð>j#sR®Ï¾xæôšNj©Ëµ`vݲ=UêMH¤\WX@P_FÀ¹02E•Ájzt[¦ÔáÿFø=Ä.ITqнóNœc;Þê–º¢þ~ øDz/ʾvrzožË7ò1ÑÜïõëÄæ&ø¤Sr¶ÞsÿáýWoX½€À)>>Ÿe¢ŒK§9Fèa5ig9–ý¸ª×o¿<ûâGùû¿ÿÔÍ9ãWÏŸ¾|~ãCÇ'Lø8\”¯í&•æI©†H­¨Ê,Сcpe{™P.-0äa±ÜÁBF ;Ò-ûÁlˆüÍëÖ6+Á-(ØëìXW-VÕ„T9±ûÓ#Ãzñ치ËqJî‚31w†I ¸Q¹Í:ó܈ñøDÏíµy0_8Ó³½»Êçõ!EÞΫpâ6¿Ñšºe_F$ö“=Üî;n¼=K úá£`ö?ýmv>ab™"[i@W w Zµ fvät”F£9g¢ŽE¨Ér„!ÿÕkÜ© ‰j$ïJ¼èÕ„ßúX—Ÿj­Ž¬è&tö¨ZLObíû†žéžÞ{À÷ uv$eP`¶óЈ"Ñé,H FÝ×ÁKï“u=‹ÿðvâ;Ë[,d0UC ¤Òf¨TáÙ¢ ƒîÔ§ámneM%>ÙÕ €e<|oiHjJâ:õÈ|Üé8žÎK‚ä|u_@èm@2¡1ÒI5®ßqôM'³?àÖ,™ëg˜4Ò±kTеSÝ…žt s!yÏÿòÙ|Wy,#Cwð“Wd ÍÆ™“SQ‡ »Œ—GA娛92Ûy‡98ÄÙ<³8ƹbmž6&b±o#Zz§8«†9½ÂföNÉÔÅù‹€¾. ¨cÏ蘫#8¹[H:«!_[Ó^;©àôÇ^¯½q|¬ ïÜRÄ;±«ÌŽŒ¶Aúã<¦ò„ÜëA3+CÛsœ Êõ&øéŽ1ë>;>²Þuþ”ó1Nv¼ï3Ý9K4Ⱦ?ñâ›/¿¼ù_þé?O ×o üuhÈqÒ4¢Ï íó@!8V*cbQáïSœW±MMØ¢,%çÚ`áÄç§û³9&¨ë-h;±²—aÀv|#EêO'“ü¯sÛGx܃œý1²&8u&ÃI‰úÒº£³”"_ìižÌùÄt–iº+ûC?.XôÃicaüÎ:g…~/W ¶¤!ðºÃí2\Í‘ŠòÂ$§ÑvEO*šˆM·È;O<Ž5âëá ~Ý™Únem@."¶gJÿ[F`Üú@¬wTc¸êc‡MƒQ¼ÓRQs#dH‚žÍ“›r%~Â(¯>úuHNPFjb¦dÁ}q¹ÞwQY‚шHŽ\‰ÀFÃÆ  z]¡ A¨©hZ„k„§¤w”•‰h #]wu€‚w"ÉSd¹¾¡žƒľhoÌÎi‚)©ó21T¨´Z±âºœ‚:BÇ¢He{i3ék×|óNuÄ+(ùp'd' {t1ô_çsý;¶“±¤«©ÇbÜÂÒ\xf£1~×p =s7‹ºÒBëv4Õa3Þ»Öow€Ü¤™L¦ˆ2-„XÀ pçú8³ê``õù$©bšÂ 2¸Kv2*1³À’ç‘îaáÁcËËtºß€Áj_3À´ C}ßW[dÐ\_MI€õå—_þÚw¿÷7?ùñßýÝïß{ô™¥1ÉÞt6–ï¶U¦cX° ƒBÿÍ?±#á‚[0P«‰6]rkÎNüiV²쮴j­í¨@uægs?·TÃZ©ZÖ*£æ#O’Å”÷ïãåñãÇ pc~j(„\ùø©É6Ta“[ ËoùÂ4(¡á¡±VL 3k÷jà6©|66m+Wè¤\߈kHÿþOÔ‹~ÞwŒÁ›7:×÷ÍkÃEŒN OAšèb”,£ZøF;2Ãx;G—‡ÍU¹ Ç9dä ?› †•#·Þ0šÒgõë‘d5·9Óv'‡Ù5 îš3¨FÂx+êOŒ™&Ú#Ãâ„ (”*œ„žmNœõˆvªYN® RGZä¢IÖ¾dƒÐ‡÷­¬¹šq1}–wU•ÉÃ-LYí•A€]ð$ ·E Dtš™MLLø&á¡Ê: îìÝDÈ1{ÙeøEs0Ü G•^‘>!vцÉ-ú¢MžTÅ©[ý<|ºã1\¦d¦.ÌênNdñˆ;Ó ï/_¾ ò„w`ׯå{ÏñÌ~D e{eµ¤& -8ÿ\éð+Ž»eã¼u¢™ç«†ËF!ʦ׬f•€Þ©4 )JÿVsݤBTMòQQRÁ@$ÉZ)S±ðL×FÊ>%¡o$ÆúÛßþ¶¸Š}êx»}³'¸Øõ$v÷@é#è “2kë™48a;8ôlÒΉW3׿uë¤ÙSM[Ie]a¡Å€[ïž_01ž:n¡óαåÍ£³‹óö¿˜ùv!/£{Üö?©³+5©¢«5”pŒ2vÓ{((ÿÎw¾³£)¸…qÜ¡_Jˆ5›Þu]rEªæ*$0™KÓ¿¦›‰Ð úØž—,2´Y )4gX³û’7i23¯÷§ ã#n bnXˆA3Èæå&SFzÕ¡êsÑÌ(Ì›¤(š TFj߸m¥1æ* nQ«5Ug5 Ú4i=ÞZÙ_°';ûÎ×ìÁ°jÈÄ=à~.×J’®ãpòJt0,Ð+ÎüyòÙ“ç.®®ÛV+&¦Œú[a¢IÊvo2.é}=ïfPãš«}¯Øм|ÉN(Î$ Ïh> T_ûÄrüŽÌi_¡x'å[ÔG ’ ¤Ü9H¤×þå¯nñƒ1+ÚÈl‰Th¤¡Æ›·+Ý€1ýzî¼·…Â>»NµjåJ¤VvQ…ŸîÊï]dh!¯D9Â¦Ü / ÿΟW†[Ü©ü¬5æñ1…5öa1Â×ò„‘¸ÑŸˆ²’KªÒ&cÓ VSd®çÊu|Ü‹ñç6Ì6±³äüü“O>¹NÂI­=j*§›·"s9Ì d?ØÃû¼&jë¨ùå[·|ÜÙ’Æž5È@tWxuÏÂØí“}²Q™^ëAï^½eÁ:’**¬¾4ßuJbïþaþ18–²:Ê5×U}ÔU¡[[‚*c!šKÛDÉOuêíãÜš*ùyVå J6áZ9îÈI‰Ÿ®æ.hØúà m1ns T^QȨÆË…®‹µX‰_ä`ê$¿Þ ^X°7„¥*™ÕSbʆ4lÔ–›´V·¡×¹MzjdB ,m0vˆ(t à‚LÜvnÍúzãå/åã–:Mþ{½©D ‚Dõ C®ØèÇÔwƒ‘ôR<É€¯²]9œ'òž®^Ü)¥ÍìÁ®^<ƳÚїРšúRp/G?åq=ïì7iQmD­W–G²ÌcûéOÿVøôÓÏI@9˜ÈÖÜ•4Œ#x9¹wßokóš¨ 5 ¹u›|r±íÇ=.ëðM[ßu89>Õ=ŠGtZUsìs% щ`à¼J7ºkìØNÃÒ A­±ëCÇ¡„IÃEqáÐ#Né9/»ŸÜ†I6kS4è¯eÅÒ<ž-mÛšB)‹œEͺ?€Ê‘!¶ˆbtmhñ߀»+²½° “›¹¹i‘®3HŠ aÆ ?EžQ`½vàk®Ðu.åJütÕP‰D>‹KMŒ»»Äm5ÜU‡£KIµáX÷¤KiÆS«pÍaÜCŠã&lÑÖOF7²N±ÿâ½.`©ô{·]?ÐÕÍþ= Étœ$Xá%éz:¶þÅ:1ÙgšÀ4,(ߤ:Œ®~.czÄô|/…¾6Ž(ް¾³W¯OúòÈÆ®t;…¬ïf<ž!TÎøÿò0tÁ\i‰D” â*tŠ"#‚7ç31ºu@“¦S÷sisU %éi¢oÕdp4­Œh·Íu@V¨¾ë¦m ÌòkävÝóÄN£PCãUÉx^If§‰1@©à':Wu÷…¤I®dF/‡Ö{Þjãç|ÒDe jÞ†¡ÛEåª/_ ˆ™];ò½À—l­¶Ž—”Í(‘7CÀ!h+7'œ‰Â“·56ñ°BÏ·.}}ƒ fG q.À85­—W ]µb'S39mõå¥E ï¶Z"g»}ãŠU§fÚ>V8r/½_Ìi¯lqÚSÖÛ S«9 «¯|xë/ pi.£k{þë @cp¨›Ræ5u]È‚+ë  WЃfZöZÐöŽ_w]Ï{¦$?–)Vïo5¯D9&®†QƒöÀÖ‡š$ôl\È †–äq¨Ùዞú£E¾¦h_ŸòFE'´©Òü¡ç2NIe& ê´ne¦ƒ:3Âx|&&Õ•¡†-¹D Çà-ƒöÙ£Gî!Eâ½Ü@¡ñ8n=}úÜ-‰e>ö””HŸ¢• "ú²#U¬ýJØqË.t”}öù·__¼zúøkëh/_<=>ºóøüS¤ôm»¼“¼Ñ Ê·ë…öGJ íÉ0Á"@‰š“Ô¢¢Yf VÞ-D[YŸ9ƒBwÃ2ŠS…¸²•›ë ªmMMÐÌ:Oõy·X‘¤|JòÚ €¬þráŠÈ¢æâR‚ðhï9vñÖü̳é¡~Jªÿ0t Ø-tb…J¶&8"žý µ´ãý4]sÌÒ·#+íUœÛaÀÛ̘Ä}Öõ$<ËÀ¬K2CÚÇV9IÛ¹—V>?^¼ûpqþ‚[Ÿ/…<Ãß6aÝÂþÔVZ7‹ryå* BMÝøH}ŒíÕYà’ш©*ë ¨­Ð ƒ•ô8´'¡TN#I?³ IˆÜݼšÚ%Þ¼a…R^Òd+,ãòÉ—æ ›Å©F†Î¤}·HæwçûŸ:, ýé_°¬•è¼PãZÍã“SouxĬW¢M ¾T†Z¼.“¢Û/kX?w÷õÅkð#uÏ;">–2dJ ƒÙ$iIUh3*ÁÞrÔ‰‘]Cô‘ÈÅKÛO½ºxO 4å3¬ÓpýÂ#Á\‹"’›oå…ÖyÑ×áE'^°F~æõ¾hpG'/ánë· A–@^…ŒóçÃJßQÅICo•QÈv¢><ªj…Ì©C>˜{`gø…K5¸,‘Õà9àظ…ÀABØ^Ÿ®Q½ÉD"“;ÈMS÷ úlU$ü)4ë PTõtíOÿŶ¾ß6Ux‘Ѳ6#¨ ÄþÞige'úttÅ,)ÁªÈÈ•Z =¼ÌÖ»nÉ2êVnÚ¹ÙY - çé¨ßÞã@cQwoñj¨s]Mh¨› ­h·ú¼ÂÇë÷cÀ‚`ʲ¸üŒ£Ù³=½ni¹‹gg ©R‘ŒAmýd>ãÈJWtò®~,_ÃÑž—Úû‰=`Ý:ç…M$óHŠmNO&¬·„G€WöšN?Ÿ0Ks¥ k ±¥YboŠ—MZN“ƒYªŒÚ¥S5¶±®©iyX~Á]66,·”¡ÍÔo<Øacû Ÿ,ØÉ×ö7ÀKíºLß |óÚÁåTƒ=Ÿô£&ìãÝ3eÏb|ÓÕ²× Ye½Á‚´Õi߆2ÒÐhömpÍuüÆiß3ð!”Ûfíùæ«/ÿæÿùóÿäýGçÆ ß²¿õæ“cG*Úê‘™áDbÙó³äx¿¯Ø\±`ŠÒ”Öe©+€ˆ—a¶ Ô0ãÎ8å!êšQœ€r jB°*H %ˆˆad¢g™ÈÓ®u(jëçÓ´vA!RFM`AJ<á?—MWýÝ­0s¸ÒôG™@¦-QíN4k>ëX»\Ç q‘Ê®›¨`‰µ-×d»†æ -‡ãÕ³FÑ“¸¤d­¨µTá]eMÀWA'å—>¡’°o`;ßÁ÷gV­ø.Úy£ñˆÞØ›´48O‚{ß²<0ߣ(0"M $™©¶Á¶JÂxÑû¢(ŒVÌPb:fè!Í&º¾â„Æ:‹¾t æX°5­N8+ë“iÿ6ìR ò‡ÚO Ád¾nj%:¥»@¡[íR%‚ÛX±Ë(G‰Þ·Ä»›ì¨¶ø5N•ˆ)´kû@ì…·S™Ÿtމ­¨·ì;ÓSõÁ€QÂR …€Š2.©ÊêÎ&-µL¥Â-ôj;Lã’rc³ ‚©TÖŽ¢W-îr–«±`9ñ¨Êõ0åö]X/ó€˜C Äá…%ØWæk¤ðÔÑ€*7Ì’$)銶5³êV§òyT*CÕn®›3aê_HÒš¨,*Èòû S:ž‰b…{-³ÀŽU€‘-%ný‡s'o zÑ%Íâ&îWŸ+MZ®zÄ‚RÚêt¶ˆ¬%'·QlœUþÄxãXCòåК¼Ø‹>gÚ9 GòÙ-‚À_öÇÍäŽÌ©TWÙ¶¾!À˜a€èµpmÑìʵé¶zÛl¸¬@r+3;ð‚Ú6ÃèKä$@Ê#2㻼g ¤³­ÖWÒíŽ+"‡ëC¸ƒ/zd`aÓ­D7ËŠ‹üMïÁô½íñiíþÇ";ey&Iž#½ÆZf³wAád- gJâT´3dÄÑ!µW¸ÁYå¥P5I^P¿2D1ðÓŽ`Žp;:¡O‡Ýpß¶]p–GÔ°×¼ÏÌ«WŒ®8âgE*t+s6™kµЍ‰60B,”ÑZ=:¹wbzãJ¼F]v´Ry ø9„WŽ$©8B”³œÙkͯÒB¯ÕOaN‰[ARy¥¢ kÛè‡÷TŽ-¯ìibÄ2Ô­4ÏÛå“·¯ã:a‡Ó b•'$â.ª”¡vc† zuO‚$Ry†~wH2ùòK+¯T“Y Ï¥MZ¾b3óMk`Œÿ¼f”?¬½ºU8V “Q¿Ú)ªfƒK¡Œ•?º¨°/Ñœõß›?øãª+±Zˆ=\¥Hú Ã6cZo÷¤éâ\ð`afÖªù‚™ã\ÿr0Êg/ì""nRvk?¡Š÷o!âið«…È‹!ƒ¶EÀ¶.tå¯{#øZEV$}d®úoŒîäµ[Ê„FnT"L"=] „±È»«¦ ŒjDƒ¶ØvB%þ߸g×ù-+Uõ“¿xúøI{Gš4å Äžºçç1ÝmÝËœŠã{'ÄŽpÁ¾0ñþJÒ{vD•šiÐíIëp–’äS¿nëñS.6QÈ€•/õ=ïË£ÌáTÂõgp#½mÂÅ]ZÕL@!–±õSÉK”ïº Dé_M¥(¹:ƽ]ü=%u(S;,P ë½dß } ü×çç<:È;$ -)WRÂòaxUŽ…›QÓ­E:õ30·¤ ç.r•z¹žr½&è½ùOÿÉÆQÉË—gWqÖ5›^—,Њ ¦¹Q<|ºai Ÿ åi(¸!¸‰2uÌsÊ&ìããûc¡Œê °‹ñF°x„H´²šÎj~÷èÄ—iµöH¨uËk-€7¼ÏlGÖ(ì™ÙìüÍæ¢'¿ÆVHl(€ê÷G_¡v2S¶+\+k·&S¹šòJ€’Ù«Ÿ˜MYs4ÈÚW9=ËÛ[AóDoê¬æâËÒ !\¡pW2:â,éÍÄ drê¼(îð’>iIsdCP«HèàÈ §·ùfÝ…ëd¨#¡kšŒjr÷ ãE¿Õ¤wuøC »¤Î¨î¶Ç=|K×­H‚ ‘œçÙ¿™šEáC’vZL{®h&4Ó+Èg´IxˆÔMFV‡Uy… ‘ÔÛÕ/3b/zaª©3â-²÷ûÛE­ˆ ‚”Q2ïå:šE«Ã”qEÑ­b£…$Ã<¬Ã)áדY9°(P5.b4>èVõ€Hj"X 4·z_¦ý Q‡¿4ëõŽWö‚ì“ܱ1µIa–3 @i"Ch{4W®›Ó‹þ×g¨¼œ¢SgÕʉË?ü?þìöÑÍwOn^¿{ÿþ'·ïÝoV¾¢œJ2¨÷³ä™#YѲ×ÒŠ—ŸIiôHE%í‘í÷éþòIìò|»ƒlT´ÕIS=tnÁK<ŠN· Iî.ÀU(® ?BGÅtïê"•— …ZÉKÊÃu™üd * {¥¦÷ÿ³=%È` °Ð‡¶}Æ.#ò3±›>ÇŠ`ö2²¥…iD$GáAàW{á²1r}j^O*#R[þÄ!g»2{¤køÆó,3ä|4„Œ'h7@Dó} #í%ùmgLë-“[õçÆ8Q‚×ÞæI„' ÁXð˜ofÝÁê.ÉUxÄú5Açš…Ø“-²+NÏ]mFGë¡ôüé‡ñ„åõÅÙ ³/;D˨6bäkY ¸§ãʼééOLŽ„B^ß»y÷=9;ÌÆkÄm˜3¢°;3¢ñt„f~LÄ´á ¨1SSI:f¡Þ»i‹†@ˆ(­PëŠQ@Ó½‹á£Â7L&2/'Ι¨Ð€¬Ã5<ãVŸA•â'6É•qWs•çéR>ZžÔˆ•>è:½ÜS SXÇr÷ª}TÁ¾Åï ›]æãZ%%°÷œN'cLKóý@ö´UGÕÕùYŽc|\¼4ÿîìÕ bâAôhQu:k`¬TC©¼Ï˜EËM('ôæØ.Üe(è$fä#ÌpØø›Å®$“I5Å!Ÿ† K CoÔ5µa3ÔÖyµ½zÝ·róзv—äi5¨íøÃ~³‰ôb&Ñ+¸EÁÄB¯C•%7Ý©‡å|„6䆸TÐGâf¿ÿ¢óË™RÔÄЕfä~×ã$xf› 8è/ÖKç 8­e^.‘Â<\àŠ/1NtøÒÊÚ`.²u>uPÛÑ>''÷ï8e·'ιòWŸÐäÁA'»t¾)¦¼va|plf1–ITna¶“cŸe¨ß›í3e7 ÏÖŸ±1zs\dS@cÿ|©É{º ?°XôpÀËéX<(ô«ùiÑÀÿæú‚­¨ZÚ¨m&‚Kç{þ⛯¿þôáÃj¿{|ÿ‘öo}ˆÝWÆ‘äÁýµg¯ÞR@±Ô óÑŽËzñìÉ'Ÿ~þöÚ­Ç_ÿâ“GÙeÙ*G¯a$CE*áeœB·0ê“?ÿ⯾þÅ'÷þÆoÿ.¹Ÿ˜Bp7ó~;êLbñc>)È`ÒŽÚ„7[ImLŹM;TŒ Ê¡Ñ5‘Ú oÖöúÖu3(ö£›hßJNƒ\Áº?R èÙz²2ehð™§®ì MyQÌ©#Á$(AF«³áLMÔâTÍ1B^¾,Y‹x©ê?ð²=š{Ò}:aÕZ!K¯9;oI†Ûâæ Ugž²Nõ½,éÔB³w{ʧû40äÌf°±Ê–8ù‰»Ö Ç]üÞp8"S¿Íˆw¼P²òNƒý0ÞYzûñÅ_ ªÙÖ|Ž—ì‘JˆÔ"oC“–ØÃD»·­õ»|Zo1+'Q]ÊŸŸô˜!>å§âÝU…ê×L-÷ÇM¡Âÿš}ré¼"×0J«×{sâãcÞ½7lÍAšN3?ïñJ\ XàèÚ¸æ\,jуx1âN‘@•†±3/Ñ>7ÅSÛÀoÈ£T f*„†&E—­]¡'O;¡§Öœ§½\|g$éϯÏ_q·ì§W‘˜èGGŽûÚwQÛz©s2m,)j¤2ßã<¹÷àÜs’¿OO\¼ÂÔ1}¼~ëÕRÍØ¤û÷NÁôIcò4Á`ÄÂ9 ÓVæ¾´úöƒmì°á{h¶j{r١Έl[©ŽŒ_­•ਅƬ‹DËïß½öLÐaLú£ƒû Žž¥Œê’èâùs{°¸&ß#γ±-ðï?ð1ñäNg ³ø-ß ˜®èq…äiŠñBIt¼8ŸÉ¶ Èt>»&Ć¿*·‘ëÃ÷Ÿ~óøÕ‹—?ùáÿöoþÆpüé£Oô1Ã1’4›¼žÕ_Ã’®ª§[ €†+`Ô »“©g\Žç»÷GvÔiÐ_æn¸# mùôâÅË›?ø£?K¢ }#N®]?¾{,ú±Àe-¦{ß¡gh±­*›æ5D'úYdë AzgáDs#E18¢¡Ô1¶W=]òZ{’Lˆ˜æZg5àí¡o$4W>ôÊ|Ña¸¹fêÁ®P9OG-ÒH±>§PÒ–:òˆ!|dïƒçصQÀfÜÅïjH´Á«¶ƒkûu²Sâ–Þ«w%Ä9ØÚ¦fÐ]€éê³^–Õ”oŽ­rl¥¥uå m›ëtðÊ,Ĭó­þ ~J$w7ÉkînÊÉšümoJ4³­aYá>À@w øŒbìj à'P°/ïòRÕ¡žQpq1!Í\Ä#¾5! ì9USs4ë Ë×P˜²SG†ÐÛ1ðù‰T'Ì98tð¦¦m«¦lò?ÌMYª%.ó•žiè™Ð¼yÖhÄûp&¯3O%b…q:[€Jd–ÎíÃÛûÈxýìøDµ wf¥ÄýCRˆ²¢ {B›¥ì"GŸUT%%:T†…\ƒªé[ɪ€›€Ñ¨P@NÄÛ“²1ˤ´ô«3ƒ\ ¸ºÉÄFPhè.°jîOùÉd0öÐHSw˜Îåf¶½ª' …Ú"saéàdž[ÝÀ³/?ûì3åÞ4T×y¿ôÂ;Ym‚éÙ‹ç<ûKŽïú&ƇçÏ_üÿý÷á­ãC}z2Ù øîBI´—0fESŸBF‘þôlè±D ~üþkÛ²ã·ÿÞѽ‡{œ h|"½Öß-œ·Ù#­É€`Ç9JúÄ/¹›Q*%M"x0EBõÓ1~pZä N¶­Î¦$2³ð`¶l<[XòΓ¦3RuŽ åûv¨ÀÝ[³‡¬nžz¿œ·˜Á4 Zç^z(—èÉÔí/ú±FõUBĦ( Q2WëMªù N£Qæ‘[Ðd–_z$ã!jÕˆŽ­šRe™æÜ‡Y„»Ì>²–ÑhP(qÕÏýéÓ0e ͂ÊLÒ2B Ši›UÏ ¶4¯ùØiÕI5)éç)CZµ†m¿›,‹ "e³à$“Qk Œ|òŸÀÕ7*·7ôÖ ö#´á(ìÖuж²¢ÊŒOö/9 X ð¼ —šd£D¥á¥eKB”_ýn}…RxÇÉh¡¹ P~¨Ž“gX°u¼vK– 7@J„©aÕÆÏBÙEî÷z‡Ý *èܺZžØ4i‰ÁÏÏ^Z¹ñðá;ßý5{A-¥˜ãMr"¬.Âv&6®õ)fiëóA ~J+áµ9Ô[DâºËé!“JøBv5dëS ©CsSY|«æÛ@ýüç?wM²Bw±À«²šxA Q¥‰¤D+å1¨@+’„Ë-w{ÚFóšËüëõ¯~ò£ýÍW'ÇÇ¿ý»¿ãñÅý‡Å7ˆ(£Æ„³”$F[8dEc­I@b¸J Žf-\ŽjYêГíÕ ²pC&ªÁ±…æÕŹünþÑþçŒ{Ùr>¢LC³dîí½wrjÈñpˆÔɘšþf=f®êPÒ QFµì>Â’ÔôÎ¦Õ ÈÝ‘ˆ WŒ¢H—P¶=„‹Žíúúè$kNG/³3ß8„Õ'–Ê é%¦†,;!E£Bïs=i¦‰Õ/…2bâz²)t3ÈÝ=²V±®,±RájQÞ,€ìêð34j‚b©*liºÂtC\™”ž¢`H^+¾m`¶ð(C$Ct$å®ÿüÛªÁ•<;+ØûYÉ>$¢4{n æó/ÿçßüõ_ó±Îw|"+§ï¹y¶ðUÌ ëì&·­%·ÕÖDn\\`ÆYNœµd#ØY¡_ äªÿ"iá(wE æ’GV+(ºžÂL}ˆ#MVMÊHžLHÔnVj{8µêÝd­¹¶à»Êâ–NM,AV6v¼L.Ln±/µ.ïÛV¾ž_WÉ\Ç6{ŒN2ê«Ã—uö ¨cxc,œ7gÕ]O9ßxV› ¢¡„þTB“”»Kn®ü«¨;É!X§¶êÐ-­ÀÇ P§è¤›’[ X÷Wã.düÔ,—õe\J>¬jd¥ÚJ#àÓjKŸÞq „JtHÐ<¼²Á#ŠT ™¼ÑGì‹p·çÂEÔQ5GŸŒP•”$å›`iDžò+ú÷§Ï°ñzÝ›>¨*àXp%…Õ ÿ°{é®ç•ýÀÂ]Pïø–IuGÈ8kû Jø@î…59¡”È+#Š…§O_xOŸDŒÈ¢¡GŸ}ê)$ïì„U³Û.åÞ0P_po%ØÙÕx¤& È™³)Ø+éu޶’—8¡£èdVz•úã§ 4Òï¯÷»þ©ÇC¶b=1kÐp~yÈ…VhÃëÿÇÔ6k’\‡}¿=·×Û{Ï &)Ya+¼|&GÈ‚¹@ )ÛúJ~áð§`ð _Ør˜²C$%bÌ3½Ü¥—éžöïÎóô æÎÓYY'Ïž'OfeUm;‹;m‡åê¦RsßéH9xD ¨-ó©¼ qW Î÷} L¾{úç?ÿù̆{ °¦Öøt¯?ÑíE/_12þé¬ëM€‡ŒI…ŒKMʦ,Ùh·T»wîŽa#¿%w‹‡Íãi?-Áãœñ•eq~ËdÅ ¬•ߣ¡Ø=9oí²ÄÍsXØ·/4”–j2‰V•Ö ¬ ¸‚‡‡‚Š<ñG'ÛmbCÀŒaQæ˜d¨¤G•¨yºÙd]‹dl<>”®9£s×üK2§Ùt=ÔÇU#ý¬©biT %¸3+wÌ  ¦–Û€Ú£$ðfémN¥ƒ°—¹Q¶k2!’°ªCÓ‡úÕ9m‚µQFóƒ» i ™µÌ;»‘ô| Ã!0„ÌÁp(«qŠG¢Hpxš*sPÇút„™”ÄÐܺ¶É¸17)€à[F1‰æ”(8`ϸ³Û_B¡&«AÞ2™#ÓóA¸*ñOvÆ)f”Õpæa0±ãÒ[©& ¦=”Q’>ÂsÈêêKj0³=|¸Ûa²™†à£ÆUʱBÈXµ3ŒÚÒ!^&!ì1r/s£eΣ§¡¡,ïÑ×LH,ªá›aI­‘SŽÛÆÿÇcgã« ÀšC+}Nç÷»^F@nS™„Fõ÷^wg48— }Ö\P+ǨåýïÐöüy»Ôe2c‘¸òüù³ÿä÷ÔCáa@ºó Gv ©â™›zÙwÕY“tA¡Þº'}Ðäj‰2©QÊûÍ—ÿøâÙož|öãk×½ÇoœI+é€~Ö¬¢£h8á%Ïqq:EŽä’3JÈî`¶øQ]Fª]£^V#r ÷ð1àÞ¬Ù“ªŽÆ3æÞCÔò¯pä$ðŠ ±Å0n“o4‰ï .­ÕÔwi&£ï¨·‚&“àœ–Õô›«Ï]ce¾ÙƒÛÜÆ•×}öË¡Ês6w“H¡~€§Q¬À6ÅF#Çê¾ñ¹¶î.y¬Öh'»t¦‘9‰¤ÔM Ôj¨° Ãð 8֮Л¾è Æ)˜ýUp™¶ˆIt¹¡#¸%´Ú^` QIW4¶L}f¡¨ñÛP×°7&-:E¥0Ø~Útª¬UW[å/"…¤h¶ž‚íÊ8ñ§|´‘«£‘ao7 Üæ0ÃQ,3†¶Î$Y|Ó}‰Å®†ÎøÁ3ä^A„AJaSM©÷îù*@{?ì s+ÆZ ÄÎÉ·$/–“‡ë?¾“fÕïÅ‹K¨´2T €nnR‚&u…kÝnöÑÕyfšèn½½±äC]bœØ ,€o[È&YËÑÆ*ŽìiÉ)cüôftVÙ~½¾>\Îôðá#‹‚Ôb;ç™… R?Ï:ý$vlü¹ƒÖD!=NœÌµFó׊YèÕñ)Wû·îÀhv/øœ³¤ÄMIIhwW% f½€5‡ ëE çõ”Üï(HW\Òøhâ­!EHZ¹HšW3³Gòªá·HY’4øžþñŸüO0Ò/X ÚøÕ±Ðw†-»aR“J†‡M×g05ìŽy¼Rq$…Ì–g{9Ž¨á¦¥€1mgR8 8!£|e}Q¡A²™J‡a >#ˆÛ§×lÓ‘‡2ô$ì´½îÕ§úæÐŠûŽÊR“¾9&ÉE2Zvòo9Ê„Âú9€ˆ}4¯w› +~êU8œ†F²› spŽ™dÓM×¾1™ë´ ±5¯\‡Ôjì WËçQ© IDAT0²Â¦>õîF $ÅpRÌR¯†G“QDéá%Ã)Œ(¼?ÓŽÜŤMG¦ç8ë# eïFªÙéOŸ*Óø(pe¹…åÁ¯GÙ®Cj‘G#àÙkT*·†»—áJCˆÆw‘p`läAÛ=£0¸`昻×| vÿ¸Wh–Æ×%R¨þà³€¼qýÎÅóœ’;x£Þù¹o?_ó@‰ƒnN‚L]¦§ÖåÓÕbu5¬ŸäV-ùÜzsþõÕÅs_C½ûà±é5+0Ë£ÿ:ÑHZWÂdÕ3ß… Z×G± €¡áU‘zÎÈfœÚC†ÿ•™ø.„ù{Óñã“‚,ºÀHrn!Ú32I{^Îʨlÿ¸*5©×c7 M'½é zâ <Û|ñÑ÷¦àüÇÁÄë`p®qµ¢t‰2õz¹#Á°oÕ$u™×DNõ¤PpJñX…Gyê[NÆ'`T 2L*!á*Ei¸²h²H\b MÔ,d\ÕÙ‡âõ.¨P¬í¬ßší€½zÞ>C«É¶©~ -'D«F¨ g DÀ[¦;z@Ëñ¡[(k«•·IA»:¡mÕk '.­rT*\uFðŽAxr~!§)Œ8pH—V ÃbwkH:BI [l-x±£!)÷%_ï¸ùââ\óVáæ¡rogè:ÝÒgƒw×A”ÉÆš Œ¤ú…ÿà<ã9Ò^«Èú±ùÊ[C½]‚d·y|£÷¸áޝ]o¯"tûÔ4W#‘Ói±o(ÙvOEh>ŒÚÆSÒeóÆ[ÚZl0¹ƒ ( Íñß-Î"m¦G™‰™üKÉíj Ì£ß.iذwíäödÖóò ^ã6³­‚>ÏùN#´ö˜þþÝÐUdiÿÆIÏBÞ¸U Q„ßäM™ä¨»vW¥™bܪÇÿ›W½9¤V0åb¦õ‚‹Ï¥Í.1®ÅE«áÂû…y[¦–I+)ã§ÑNä»´„¶áXŸ,…Âõ+Ot¢ <š/-e¬jȰ…7…å_Yýâ_‘I@t+y¶<Ä3ÖܰëÑHÈZRžgz-@.®’Š&œ:,âdfÓ¬²óv Ã¶뫇Ωbýä v6Á~’½×CÛKž6t çþ¬šmCe3 e#½3.s¨ÛÄœºòAðêÕ "vÓ×PC'~W¥~]­D9ÍíYtžKø!4 äÓ½g5…Ó‚‰ úØ„þºzq¸Äp©'@R”¾úî;¹ˆÍ×ÃfI3Ó —C5p®¤. ÅEÀ‚ì¥1KÀDšê§¹{äDR×w5Gu½Æé““ ë@^_]ªœÜ,ùòòüÑÇ/ž[¢¿þðþÝWæÓo¿»÷èñ]ëo·oú4ÄÅ›d€[ŠØÁp,Höº-ýWõWÿâ~ʾ/žŸ¿={‡çÆV^¿V7D!ýN7žCK^–÷KΟKS™æÑÖaòá7œÝðjxIigÍtŸà6@g/tçÄO‡ ø]BfuijNM ]rð ­–Ô¡‚Mî:K³”ÕFoD·æB‚‰9KeÎ5Ýæ5.=âÿÈBÓÓ¸ûH¢ß6Ù•[A”!V`XÁé›]e>˜WåC´_Œ{z5†ÊËÁ Ý–1ÎlÉ=øLC”¶ZiëÀáÖ(Ƕõ¶™€m󨌢>´B}Ú…§æÎ§f‚‡P=V¡vI_WCµÝ󘫩OAók¦CuøÏce^¥‰ºJ3Ý*)ñRf2ÝLОøÖw> QOÉv~,«N—ôò¹<,jVÉzqí釔Ô#-vvãòêÜ›ëaN+wúº0r}JZç’oM PÀ¾n«bmÁf)ŠÞÄu!áÐO?:¹²_Šá®ß´þ„®²KòóÏ~ø¨0ìqž$Íz\¿&Ó%‰\¼Ù¸UmEyxèã(OŸ~bON~üã{Q)AØXÈR€ ZZRÀ6yi¤C¶F½ô¬,L¹Ue'“«Rj,+`q€d|qåóÞ1q­÷B¯Îq®ùݳֺ8Û¼·µˆ19 •ٙ˗odÚt6Nà<-Ëñg—´jäZ÷T‡Þt.Tø³×¾ˆ_­iÍš¢Ž·3$i8T´9 ‘ÑlŽÊCÔ™ÂÀLt§R=M<(’cƒÅþÚé¿û_ÿrö¯9mwÛ¶Ä_Œj\Va?ÁŽ_~Ó-€y§´Ñ#}:g , =ërXØ…µÝô5ÿvóˆÙ¦'¬"3:d/ämãÓQ¼%åë©üŽK¬‡I#f€Asͺ´ï›)Aá­*Nn™M|d‘l•Fvy _Çlv«s(fŠ9b`û ,уõ¹Y¸Ù~^쨳û•a#wꎫ`ò°sV™ÝèEï›êÜ¢òÆ„À«t ç·ŽqØÑ%•|Hå±ü=cd-”WÝè¦ÃuYTp¾‚Àc@ˆ€óØÕÛÕÖx<¯«Tµ K†ïì p·s†çStÕå°ÏÜXZ¹Ã!ŸÑpð£6öô­µ ž>¤UZÔ ©«…³îƒ^LŠš('ÜFv5$ý[ÅY“÷$–„Ôs®7·šaªgº”{°÷ß]P ¹"P2¿Ë$Em¥Ó¡ª {Ÿ4ª¿spl¥_8þ…a4ßÍa¦dä—¢§>2ë§ž½Jwi(t!f‘-§«—Ð&²°«rhÝ@!v Ü§ ÜìB,§!0—À ®áž¢X=€-øö²`èi¨% •lB–ÅL²ZÏÖjÿÀ‰w¿ÀlÁßEýΫˆá‡}gÂÚåO?~ô«_þÃ/ùŸ~úGÿŒœvBÀ+es ÉÒö‹òwáÛݫٱmÙFÞ×/¾ùÉç?|í5,5„xªÆÐ!$á_Çô -uN.º<¸4øÙÚοº6žñOg„òWý¬³ê€]ØÞ.ª}°9ÕA®U ON¬m€‡_ôÓv³õ‹Œ‚ÃTTÙáR#ÁäµÑ\å:Þ ®,UºÕC¾å¶ºØàoo^½ºÚ°Œí†½_ÖbÇ8Î'LXÕ©‰¤hP]1íêrB|ûDí}ÖVÍ´Ê•†ßÿ*GXòæZPN-µ¢à…ÂRªN‡tZ¼NC1ŠhwÀ\g„Bd_¢®­6@ªqêwt–i\b§ËŒ«‹a…Ú^:¢·&ì¼¹ì6ÔÄ®cˆ Ût =.˜‘,±ÊÒ³o%–: Z±Çå˜Xólc&¹fAÈò¤ñaõ–M)\ÿŠD7øZ³!ÔË×^‘#™‹*‹‰ è” †.ŠåáœuULw(´:‚—þÃßÿ½Lx¾¼8·wK3¶BUAV»‘¨Âx–NµÅ¦ñAMꇇõÙÖ¦ø¿ù›¿±èõÓŸþÔt)ˆ»Š2¶}ðbc,®’Ë \øp7à Ì3¹C¤U˜‡ìL’¼(—?4;ÈcU Å ¿ŒN``f=¢÷Ñ»´·D×÷®0¨ÐƒvSO4¤à 68™qQã ÈßZÂNzÆtÞ’ FjÑ»x¾{çTdANÆÚÏg¾‹ÇCîB yjÿ¬´[šßíã™ß×ÖÆ`tˆçFšƒÐw´Mîv¾M¨y€gäβ0XñÕgÙ’]Vpðá]÷™Ø‚,¦¥V\šc©áÚj(Ñ@PðžGÄë6ÄÝȨ»xå3E.-Ð s:"-/=‚Àô¢K7c¥,ܽÁ¬õÆyÂE(L¨nÓÖ3Ñf¼¶ðG`iVëh£Ö"‹‘Þ¼RÖ¢‰ˆAû™9§Ñê¨Ð1- a$q甓‰ª€‘Àט+¯Œå^ÃÏ2žL¶-ß8M!ä°T†HÈñ³ )ÜÕ=Ø?À†\¥¾22Û†Œ½ ÞaãêôFI6ÝTSB™Îªl_`üÛõĘ!—_6ƒz “;þUkÒ·`ôÞec™Ô¼ú=œºªÊÐ+&FKÙ%Žq8Ôj¸5ž µ;¢ uNØX],Ò]L:𦗊êum}‹p¯=‰=›Êª_›îØ22_ïÆË#½ìCLóäU?ta;žWñIXÀ`\òË…QQ­8ÂDÔN„%¡R˜G~ó›ß˜X¥—¤aV,BÈwá§|ñU¯£ i7ž©_½#†[²PÑWº°AÏêYVäUS–%Rˆå1)ìx2ŠË005âÊ„ß=Ô/€«¼'ÐËÜéŠD$%=T8ýý­·­hò;özöüéÿñ¿ÿo¿üÇ¿ÿÃ?úC«Ïz¬Î[›þEZ˜Í¡‰ ŒÓÂ|&ãà Líjy³táÚÿ÷ÿŸÿå?ûƒoίž_¼*˜Ú°B5³¡8etõ:#½yÝ‹ŒJ3:æÍcûEK*I©@d½2÷ë?j’ªžirÑ “y€ŽBô’ÁÝÕz$à3cƒf¾ Îñì„ ¸R6,s†¥3Å2®ØEù& Læª*eÈGwõÉnî>Y 3F‹R=ÉÑÚ¿¸1S»t8â0ŠÅAÖŽº [B 9Ka[ j;l{€Ê/¹‡¾`¤¤K°†`…°ð(ø%¯‚úƒrr§ ]j±Ð9ªÕyâ½õ­êgË&_EúÃ`¦œßúOÿÐ^ö‚`Ê%X£œC0qº´Hks(„Ùæ¸Lªgûø0rù Úž—ãÏ…¬ÒŽ8x‹ͪŒõ™];å<Ù)…ð¹øÙ5±xЯ­´Ížåd=ŽæÙ:8v0s°ee<;`Øz0€Î=,¦QЭ‰y£ñ˜•Ê,¤áºB•É@"6‰_Å$šƒ«ØñáªýŽTÍ:‚9÷à‘%aUo%¶Ôf#‰ÆÒ<. EÁ >äÒž÷ÇßÚpãÉãÇøD6ñÓ¾%L⟦ɮ@3¦ø÷]¬´sHL‹fFœ ë}byÏU²ˆn*ÿhh_ž'…Å0XWɜԌªúÁÃÚ‹i(?ãÒg/mæšõ\­â×&WzäfÊ4X63›‰Á˜ŒÙÉ _y,ƺš!Û¾qȦ[øõX…¨æõeÛy ªåîñϾ‰+±ï hzG$fY‡^†±*Ýà¬ÚR̬´œNÿø_ÿkŸ“'ÊÐû¬¢y«ÁGo¾³¼vËÛÀš×™£PçÜq?ýÎÔüíùåK]½~ö«k¯Ÿ›Z¿ñ.Ž›R1o•74+Š0onÃZÙ½)ZcçÉü‰D>:&ýºÑ‹0$>|‘²oO'ôÎVnKBÞ6JœDáL%a-¹%ïLøkÖ ‹ 6‘tOÀë™gú¢Zà+@­èfSé*÷BN<rhk­z{qY(¡yf&ˆz¨F]ð-…o G¨9…Jð-×}tBSÖz±…k,ñŒÅõË>ÇËuTÓŒN´=a¦ã=¥³hSÍ­[w$õ:ë¾W¥'š-‡k`sd) NÕsD{u*#w‘/X i¹K¡–Xy£5R”½´?¬ÐTÈjÍ‘}©!Ez·‘gf*%Æ'–wÅú¶‚SÍ!Ä{&Nº÷¥F2B º€Î•Ý[×…š>;&q¿ƒø¨DŒ=z¾9t~ÂïíÜ6y}w‘¨´ï¤2„a&=[‹ÔzvÊØÐ=Ð\zRhÌ;¨D“ø°q¤Lj.õ¶7£b5+6ëþr&c[%Ô-xË î\×=Êø“bêø´¯®.N½ª-¢¶'×ý,j?1?SíQ;ÏÍzu£i87>ª C‰}99!BK@4r‰h^­bü¦@ßT†ó}C42YX²Ê&²{¡Î+˽]‚5¡lb$?3ˆ˜e1ø cIfÍ_4ÓJg­£ ¾TÁ¾àñìÙsäLŽøêŸÿWÿÍ“O?'¦«œ1%gˆ¶Rµ½Îé ÚöKxLymHÓûÑì§»yóîo¾úÿüÿë_?ýêëÏ=øL:qí;Ûu3+7p'B^ 5Ú1Ì¡§Ë¹zãb¡ß'ÉKßùÒ¼÷Ãr¼($“÷¡°ãˆFµ¶w£fßš{¶]óKõ{MÍ#`xìÒhX-ÙðÐÖM.H}¦U=\ﶈç-Zi Ƨ¾ùòÕ•[::}H øœn¢óØS aĘU‹ÐÞJիĽF8È©B_&ä>¨ï’2ÐSÐ&}âŒwmô @l2.rH£3ÆðoO«Þ ¤|óͳMwí¬¸÷¾þ™&úk+ [ð¹-ÃJ­AL¢3îêÎâywN[ÅFnrò8îšVŠcÅ^Þ8|²Ò!òš†êGTIç§y/šºÏÄ"fiWœù<¥{´€e…k— ð4X1l\zäe }¥ƒ¢!õw|7XcL÷Ññ;Ò$Äqâ…XIp€JÅŒý-ååí¸0Ñqˤˆq¿öà¡·ÚA8³;ÈG:©LHLÞGÈÙK_ÀžØDûÚlá Œ'pÛlÄ—J—™NóÐ Z°aŒZ¨äxË)EaÕ à$+úøÅÕ…vÆÀ=ñ­?>ȸć$ë‹gØÊ]= ×·wõw·jÝÿyí­`TnÚõÒË 8GèoÝÖ“g}»T‹C}BM òñÇu±S±¥ ›®#Nx\ñÜÆ&]¢ÜqÞG?~’J錘Z㫟«« …ûîʸ]v"&§[g ¨Cš± \Ÿ´•†®K†ö²¶—.Ét- ¼¯®.aèîWû®^Œ¹"{=zx_izÒ‚ŠyŠX:ž¡Ëpf_øâ\QýT ÓCâ×øW®–æÜÓ7Ǩ?ˆ¥Á­ahz1:F.9²éãŒ#3”ÌÒ@lpÝœ‡¹ªòôÏÿÍÏ»1Yì.P*hÌtøücú‰Q¡.G¡%¯å>n¢øüª^ðÛ¯½oÃêÖaÓ $TƒAR1¶SÚ ×oˆ_•Ò;†'B1SGO¦Â}%CYóýA.’ïZ$ƒ=Ô0ÏK¬¬ nARŠrt>U?ÔÄ©_À®âaECWÁ)ßU¯<äO¡®' #BŽ…»03„f·Ò)ïož½e3˜„Û8ë!ç·{×€§É„êŸÃ›x\D¦m½o¸Ô¸[<*™À½„ê…¥;£ä® n  í „P…s6Ÿ Z¹äè߃RØUÀ2Ô²KqߊÚÌ–©«!Ór"L*Å&¾Ôh²Óp•°LîUõFPσ±GXÕ ÝÁ\dÜ«¤]®$1°Ê-¸Pñš 4…’?ðÈ3qã^âG%øzæ¬ÎÅýIä7ª“‹ãâBß NJ=α0)v Øf ^Ø=ËÙ‡äPËìüºK«v¦²4Bùê’—À ,Fc)%f…ÐÎbpRÛUFÁ0»ê´í üV:œ²Âù°£¢b(:Tn€¨CˆM™2-1‡³@"JK–_JЬŒP ÀuK³ÀbPnbˆ÷6µlŒâz©2î!n0£’óê¶;UÃg ~ØàØýŽ?¯ÞGëõ/õÈ›|æÒk ¯½vùü‹ßû½Ÿþ?ÿïßÞ¾{ÿî^Tè&®†Gi Kí¼6‘éC C1UrâŠo¬ûöh ]OpÎió° …§ŽéS1†n†ÎV¹äqj¼”'D;Tnssêö SÃÑr>½;À*–È®@'im•Õ(3„Kµd;ÊQIÙšo‡òñW‹¯íP‘‚`¹úp)ìw¶É»ÃÀÊÜ–näX¨¼)Ö¯2»éátb؉L¯ÈõçR|ý¢¥´ÁÒ\sÌßKvQ¼VÔ+M+÷2 ,Ï8£"OÌeÉ@€±èÎCxËM¦ã/·*h‚èBj¸|žåW®bƒ§ú¸çÜÃjžI…"`¼àv²·¦RÞêÀëØÈ%fÒôúñ·V‰fıf´”^Ár†­è ¢ô†É1ȦãuoÒÂþIÎ8›Â¥ÑJöOú„ Ëb›Ó:f”kv Ï/BÑlà žµºƒOûµ”În›<4àæ×±¦—{Ÿp_AéÊÔ´9âû;·[Å4%%²§.-°½¼òªÕ`̉®¶5_%PŸWC 3‡]Å_ÞLg,nà6ÂÃúSê¢tªSÃâ!•€W–ù³ÿñ_Ytq¿kÀKà¢h$¼æuä–¦í @AÁ×v<Šíf†;ëWÜIêž)©>~Y0«ÛŒ ‚{ýʨƭcV;bq²zÄ ÒÁÃ$ÉqÈWŸšè~”…ô´šàؘTœ¥Dó­hLy:EBYrJv§`aSæš´‚«ÒBÂÛ~U†Ï®³PC®³Ô™ÇÎ:`E¢ˆC‰Äà|g r^·ÜXa…ëÅŠéQ[9C`ËdâcI´tïeÒ€»0N,fÑŠ¦%~K­†ó¼++òè¶{^p–¸3ðH!ÑV§¬ ˜í6Àô+vÓy&Ð¥4Ñ œŠàÁøU9D*xèâ_I†Ç й)Vw»:B¸f.ðØ£—p¸â(ТZò%΃¦p‚Šc€ì§&†ktÌBFÖ‰2 „Ã'µ$¼ca[ñÐlÀK7`rh$Ú®.wp3cVÖ@Ô©ùxe’$²L“þñÒLÆÔÊ9l[¬.¦Lwð£i‹¯‰Hó†òÆ$ì é‰Lp¢åFô¶QLwöÎ:¬èê{Î*‹UC¡t„wÚp/€@fŸŒ° 1UÏ3õÓ_šüÍÊ^Îï]ätÉÜÍùÆ4ì…‡gšk‡Eë¿þõ—q7L‚WF×ïšRß®Ž±Ò†ŠÛÖhg< $‘Abi«™~{.cý¿þý¿¿ÿøSû…Øäìîc·h`€¶`vNŒY)/ï í CF~+Ã@“Ù³ñÐZkžS•x9¶KÓLyZïçê-°5^?5k2“&/³ZöïƒÙ38eÕ¶ÙçB¢˜&ü“¦tTÔ2Òlà³6£"àò¶>ã*?ÕÊ©Ðà4Vf¶9yìÜ 1cdÒV‰Me®žÏº“åTû *-gŠ?˜›%ð÷†ŸËÏ^¼xæMÆúÿúÙSbúp^Q5Zõ eV¶><»ê†MÝb Ú1M^B€Cô@“މè.‘blR ÊsŒ°€S݇_¨ q¼òøÕÌCü’:r3‰ªÿŒ½ê£(¿‹{ëfÛP=r;Þ´ñ»õ†ðíÚ*1æîœržzñô¾„]ž©ÚÕÓÔ‡ªïô΋T6WšÎBp¼qhA¡…¢Bž† *—ðù–0i|úô)ꔩ­‚z“(Aâ”+®þÛ,5¯Ê«k|LúШšs*¡[ vu\h_¼x®F¶;·-6?{q¾7Q(mB~ª†ß¯Óˆ¶g.§§è ÔòÛ¯¿Z”éa²‚åêmù„§W‘E ¬©amäf-i· •.˜Kì·äø9öHç’¤Í)é(ž®ƒzLÌaij |^i6Û! ïf:­yseKD¯. hs¯fºL:]ÍM ¨fÜÿ°@_Ê€”ö0¢‚S•Ì{ k¼áVL lé·6Z>”ùÕ£-eþù/þÔ„aÉI¹ñÕLãÔ¯óšÉlt#4Qì,!ôu ŒðN@ÄÒ£, HŠ$´…¢-\î˜ÌGQxíÇ_!5G)ž~t~ÙS˜¡«¥¸2Du€t¤‚9§{I«5ƒ+#P /Üäï°*¦Y0j– Š0lÍ`= Þ£“™ƒ–nrAJs€ŒsWáp¦é-6ÔæûÛÿ9.ª9‡Ù²ª¦óú`| Åe-4W „åÄ}ŠÁVv«c,‡j8(HL`e 6˜ýÆÜt¸úðjÌ/€q¡:eî_è)C²°hÁ8Sf»ÐNß ÀYº•T" *¹à[»÷ 'S<¢ärýP©y¶«‰eä‡Ij‘B±–Ž^º¼Q%ñwßEÝ*r¤Ôs´éK5’ äQ;9}±³žÃ˜þf¹ÛĦ?µ3ÄÎ{ŠÓ¨Ì¹™ IDAT6ó¥0æmãÑG>6þI€y3& óÖ†H–j4®Y38L1 Qwn{)Ÿ©”±Ó‚GsPwý&)ž2!BîÕÅOFHðÇ—ˆ [G­aF¬Ñ0G&nòÀÃËGêCb ‡ÜVdW@Î+q(07”‡Á^‡«¹ :„àÿ„öÆaÛ(rîîñÝ‘ÀÉ)#„ÇZœOÖÙÑ?,}dCÈvÓÖ2ÓǨdg¬L,ÛLâíÅ (îÏ.P‘+5²²±gXÐtéÞý;_üݸmßÕ;W so?ÿüÇ—îrzFt§–vãåÀh€7È!S3…á@‚ådi>™æ;Të4ƒ<©Á~/ 1¿?4­ý0±dk <Úíj%ÆÑƒÑ—ÑoPzôᑈ`V™ìhÕ³&Ðus{Rx>…ŒõRS…VË­`ÙÒ+ =*Í)!\” æð‹Hñ {P :7ÍÔ[¿}ãmÝæñŸ~ö¢}üɧ>>ë’?­—+Œ)à*W¤[ƸOI{ I¯®âD+0HÔä±ò½Y]S©Éʵ­übj›€wlk\ãíSj°ºœð\§-üÖSûYÌÔ«¡F‡BK œ¬æ]@ÚÎ5mh¾¾XZ~C{V³¨nŒÐ7ˆÌ©Ð•J ˆÍ™ûZZZ=ÄÐe~ÖM€`Þ¥îû’r2ªœ µîVèÐÑdódä'^ÐºanôÐépuÇhÝD+¹%®!wI—TI <:»óór}–3éÓä¿þ'”†šÀ¼††+ª@´LË|K·jjßäV.H:ìC”µµ¬-ZÊv#óæœ‚) :¾ >1)Ij¶¶Î fí’Xr‰BHM—û 5$­:»["ȵ¹¡5êÐMNd!÷Û7—/<ÐÙÛ·^à‡–½¼8„JYÎ0üGå8‚m=‡çr["sòö Ì ü «iUÁÕQo4ᨥœ õnYÚýc¯2Dª÷u¯tãu­lßÞ×À2Ž5¡pä4|ÔÁÍoÜyõúÊ"·}˜˜$J‡‰¢.d7À%D~Ã"š…3×Õ¸VØB›C$Úôd`|BCÂc²_þÜ[·Ô5‹~ºx¨Ø·+9B[©íjGOr) áÂÚx *ÆE5Úzш1­Õ05U˜°–N`ov«¹Cͽ[·ßÌîc$¸í#\æ"fÿmpã¶G< Â³@©’δ·à|—¦ 6+†Õ¼V`ÉöUS«ÁétðÎÐ0mb`0ð* ¤i˜b¨W=„#˜?p²†# je=VxâÝ“…ZQóPжEP¥š!Û%ØÀ+¨†vË¡ÑqB§4Ïë8 B<”s¢?¡Rpƒ±cäNðÅ¡Z0„­0–9æ½Ri»á žíy“85’vÞvÓ˜i®·J˜ôå½±Ü))&ÊðãIµ‹Ë—º%nßjÍöaŸTÓ DÚä÷æª/õ5›6 N¯¡ÏK+;0YüêµÒqªfK8,mË•rÔâ‘íåø¡³Y}J à•Z ˜‡¹¥%[ÂÆó'5®jcGø'­¯WžÞ2ŒK6Ü(º–0–sR|Þmm‡¥éÊu]€…  Q[ã’œ¹‚®‡áWI+R §ÞO• .úÜ«¨)éÒVìW¯Þ<}öõ§Ÿ|þ⋯Þ£äÒšmÿb‚:#ŸA1oÄÊâ ^çŸ^?½`Ùˆ'ûµËfS/N°ÁY\Å!óð½$jâ&–‘Í)!±jጼâ~¬•ÎaMì™tBJ§À&JÑ’Sø¨Þ,~"ûË!§Ë‹‘ø¡ëáîäüyN i$Êcu|R|+3Íÿð¢ëY?pïª[x`Û4ñ4Æ>wU—×|vA´ŽË«Ó°_<“þÕS'ü€·¹ûoÓ°I2B|?tëTC­h»–rM¦wH˜—2 €Õ€&fâÏÕåó´wjo’­lßÚðtqyN®s¯;>ùîG?üìέþÜ™½xñÜŒÀî^ŠÂ˜÷oâNÔuqe¨ vÐ$mäTÖˆ6c·¸§èFŸ&½KåØ#ð£‰_‡ù{{v'9†®¬Š(œþéŸü "Hí0A ÖÒÈdá'¬Þr4n]ö€¦ñÊ`€ŒT£þá·E6=Ç<’µ$ŸýT6!è¡°¶ûÉo]C~–à"n©!9Q‘Eȯ#ÓͱAô”86GMª™ ̪•kHL˜›)šV0€'±K1>G©ètW±¤$–@JÉ1fAE> Q§`ÐÃ%ˆL­šàs:bÓ_Œ[ŠkWk'2$xT‚AY=‹CëŸò€£ñÔˆ&ü ~L)fÂÅ`m_=´B6!Yƒ“Á©…àM{m±7åb–XLÄl=#)hR~ ŠiŽ%|ÌO¿ÚŠ+ W«[a|c[ÝB%º8Ü›âp| Êœgº,ÓÔ(ÌD®Eä)—r*Ô 6¿™…"›.qH#‹'k—±ÅaOÞ˜.-\"WÄZy_~(¥*ɲ‚"(ÐO®XÍp­Ïz8Ò¬‘6Z‘š&PÉ{;‘Å£^ØA4Ô 2n®±§ãBÌ ÒðrýÙ…0·J¹/öP!ðXec:ˆ6«Si,–°­õ´ ?"Œò[0ÃXk]G=+Ôx\Œ2ýöß̼]šõ§Þ¹Ï¸=b|ÎF‡6ðŠó5ìî˜5›*Û­Ç1V_4ñWK‰Û¹†×™*ŒbMjqË9Òk-´H’ðœ\Kæ1sú’ÄI°t¸¬[g§“¸d/:嫨±wÿÑýÿüÿÎÖðn=øê·ç¿ÿ_üøÆõÛ'6‚p¸éדŸ§>9¿!›ÑsO•Óð8ë"§^[ÎJvd6aóü6ÝN‚%ä;u0õxl‘×)Ö¡7ÿ‡ )é1à@Ó$yžQèö4Å_ÿõ_+”úG_mŠ(câ–žM”´Ä¸óžš"‰'B¬ýÛÞÙί·°&Z:ÒYb5/Ÿ~wçì6¢fž¬¹OíjûäñÇò9n` ÛCâ®Àe‰‹˜n_x¾˜ÒàñÇYì/oùÆpˆ+Ú›Ï6UæËc,1¶ˆDU)cÔ8aô0c$ŠFP!šr^qÈxVçiŠš™d`TV67’—,3xà$]Uª/ôp± Á'ÂÞACAϸ•àýª„ÄätLÀë1$r.‘ ˆÏ5œ\™ðîaè¤Àç÷¨flÂz89ña(Þ¾T6yý0Ýæ”=.Š Z9®=mm*ms$ö ÙmüSòuDõ9ÀH;è_%Sª§‡á¹dE=ë#ÆŽsöÕIøÃÏÕó ÌÏ{ƒËà˜#éÙ±÷æW¿úÕóçÏÒâ!µYyÂR]>±¹Ÿ› @‚IÖ…ÐA '°¦Ãoƒ*Gr…˜Á¨˜‚óñ»e¶óá1´{7%¹1³¦=6No{€¥§h_=öìË/-ìeâ–^xìµõs¡ž•gìåhå²9d«jã3ˆRybfÆü&3ÎÆŸ†S=¢Å¼­  û¥DŽ|ñŒÈ.~wú¿øSÒl/àóz:Æf£Õ.éæÑôÇ¿ÔÏHúþŽOdÇOÀ¡¸ˆahL≭žkã ÄÚK7æÄ)l²rÜ4xŠ#†¾§‚Óð¢k±K%Nšl’MiòýÆœ9Tο)E«Ñ]X×0瘉>k€ë§âgyVVCš ¸ñfEÕXÀá"Ge^•.'< º¤™Ÿ1V6c5ÛaX²¶:Ã1ÁøÒ{<8&ÍÞ\Atچј '³¤älYeYããÔvn”3XÀÌòFœ‘´¾ÚòJRöXuWõœõã…ßE»:YáHœ³> ðCdá GЦ¯Ž¼-fP+Aâê(m™ÌY‘CW—!è*G%©ü¹@Ø%‡4pJSŸê¦ÖBšPxcPÒ‰ž¸ ~Ù¶,›â’û$V¡ ·¹¿7|¬Uà†\ÕQwX\R$¼JÍÆÖþËšñ`KKÑ}RÏã6™•WÇ\½ÚŒB4çɽ+ն娋Ðjb€Ç+dZ90á/ÃO7t%/ÊQ5‘‹ 0..Ÿê!ܲ_†s†C¼)`/»kŽ{½i@âÐ “x¹õ|6‡í­ù4$Lp ïeñkÓ§¡³Ø6_€‡Úz±W0’¶æß˜e%J`Ma~—WH;=ˆ<+‹ÊÛG—Û†¼¼Áâ Å\¢]Ãä™UŸ—/^ø^êÅÕµ{>ýÁž¼|é•<©ÂAFŽÊÍ†Êæ:}nà'_dЩñØ7UŽ‚gº˜ ¢TŸî³Åô:•HøÕƒZI’uéõ»úÞ–;š8ÌL¢N ®º@N_ãë|YÕ©C>dc²-¦‘zKóf5¯ÎnÃ9ÕäÞ¦rÆ`øáêFM•¬œ†g+•'!ô07ÎÆz9Z1b㡯¬<~üDRÅç<{@$ÍÝ@øøÉcëî*Mî©_CʇđŠôSæŸÞê´£ˆ4¯Éö4ÙÉ~ˆ©Óóšq{ºÈÁ…T2 BäÒNÌ(S…J´üB‰(Z5CF>ÔÊЂÁ#p»´¬KÀjà0IçTus—dß®(ÔÅ­ácÉÁ¦°WÉêt¸ªw‡lžö^lТ˰%Χ—ÍraŸ¦,Ǥ;I:ßoùíoƒù|ö™ÍÄ:ÁR$æ˜uƒóAŠäO¯é9<8àñë’†§ÚN±Xç”jY_ 0öUéop’[xƒV˜‚Ê#øö“O>•¼äl8 ï0ÀFA•Ðâé‹/¾pêÇ+hØ䎗û½Å óëôÓ÷õ5qØÛWŠÀ±É+¯PŸ,»s1̳ 6ç C}³®ì_óËm>K_˜G°«~MH(‹½E{ÐPå(ŠZé‹"§iÓ'§nÜüôó=ùø Çyp¯(g¶6?¼³À…™õ+÷ÊexEN¥ÿÉ8½ Êèlû“.Öm=ÊÆrè@é6Z©“bæc.9”1FŸ÷¸dcNi;rÿó¿ý…HÅà–+ÌWf bœ.X:‰ÞÙ*Ç}ñ2ŽÓU··Ê„àõëˆêG±ƒÑÃ}þë¿/zϘA{€C6v`”±¬îäÔ Hx5ÜB¿%¡KÆ—6 †ä¸F²ìágéRP†¬%×øJA¿Dýª_žQ„<6Ɖ¸º`ŒGVréoô´N©¹ ó&Öh…%5¶FY[å#'‡:ÎhÁN¢Öu› ãwÖ!™™U’’Këe’!LÅq¨^Ÿ=ÜnÔÈ̤FÊëØÞÃNuðÕjlÛزü>*EȵU¨­mLöHÊ*z)ps¦ÕŒlÁéQùö>Øä-r” 8bx+†¢S„†Åë%Íû³øâ\ñ~üðu§RØžiyé\a‘ÖÆ^>cGy«>.´1"íCâªPtÄql´Ô/ £…¹.wÓmr8Ÿ‚3µâÛg§"£LðR ¿¨ŸC;Ül §·oµõ`¡¨€í.ºŽ*Ô— dmme[éÊ ER„ú'Ew2¯cpa#’æaÃ?s·õ‚£nש F+cÆŒB›¹/I½ÓôG=šÍyëÒâ 'E»Œ$V¾–dy7¾ÝˆÁŸ¨¾%õQ·ðp«½ÄÏótV=Ç.ë† Vs J„U׺" „ÃåÓ/uÁ«†.¨ Ñ&Zõ/)ÂÅÓ_ÿæ—/¿½ùÃý¾þtëæÙÕ«s¯†“2M%ÙF‹$Bš¥F6äöº)V 26&†ÏtÈ”:B}!êXʲyB>™[CíÓÑàÔªDlº[F¥Ur3Ï+xþc0Üy¬úY€în#Q¬`‰`&åP!¤£…µ¸J|üï7Lºç.[~æì³Ù6a†#AÚíMÏ1è}µ)v¶ fÇk­œ‘Âá…I6ÛŒ^ò1w¬:PËååÅnC¦˜±Á£%ÊèàØüS'ÖŰ2ƪO¶ûê-õ¨,H.ƒã¸º£ K«ðCÜF°&À𣬯ªTCŠÁ0î9q¹M ©¬ÿО‘vl%ß“" Þ/yãpWÜgrõ…‹ÉZйJ¤áD¹ ÈãŽx§n"Scyê|‹$AJ›„4ìÒòæÂóY—tb,¡õøÉãü 7ªiwúŠ("L†"Có"^®‰úè²ËgPıÜÒÒ¦¾-Pš/9eÍY€CÛ»÷ï™òX›!ÍDˆæ-ñicŸv¾‹yýŒz$ñs«.B¸§¿Ê´´VÐÇëÚ‡iIÌèÚ=îcDÐ>¿í-µ†q@ÇVéjù\ÑðI^SPG¦÷:{ýWaÇ3ððmùå•»–g®Pˆ®í½»´wþÂZìx¸ôhôá'ÿAT>$`ß&¥í›·î=xdòÁO¼–¥ï©ø,U9z,ÏǾîã„°‡!é#é0'„~Q§d0z?î¡Ââ¨%%³¹Sxbüx¨f`®Š.éÇïºëéÏÿøgæìßD†¿Š‹ÅUØnŠ’^[Ò—–À½ÖÜw[©¾fíΗÈ<¾B)¥ïÜÑ*¢L²]±3“A±ÅmZÀÖxPnmpì­0F¬ìÔ¯eðÞuá»ÝúB/,Ž¥\Œ’Á²­ð‡7T\`òÄá A$„ŸF¸A”í¦ÇÒh)åéJüÌUæö§¼àt:ªÁa=­ÑNÞ‹“F–EšdÀ:fÒr´ f»?Ò9Qé‘{þZdšWGt‡bȉSÏ1@1ÞÜý­ ÛÇŒw_€Uhá„`„b×VÈýóêåkm(´^:› %¯z‹_0¸û; "醺lƒæ-ûað©§1MÁwç—sÑB2ž±DŸx¡"ö6X÷½U‡W)ö(¨ÒàóSÏsÝÛa–.™»‰!ðj±×Z”ãs‡¥)ÌÌ’û¦¡R~çõ{|ˆ”¦¾ô2žæu>ÙìúM÷ŸL0X.ÞëÁÜHmQ.ý1*.2Jë XE}Ân¦ K FÌfÒ&dÈAåù>¶×H$šGl´BiïOñÍo¼¯¼íÛ¤Ã?y4F·ãiM'BÖ®Æ^¸"gp£¨U ‘Ç7žìñp) ºán©&uBçÜ©¬.=“šÈéÛÝÂM7VßPjžc©Ã¢²ŒdBd.3ås:Á Mĵ]k5Üô)ƒØíB_œxo—Xï¥ËI8MÁö[x—âÝ3ïA(vP/a±AHàQÉŽozÛøM©ÄÝÛgÛh¼xúÍ‹çÏ8Þܶl¹Ç‹iëÛ2òÞ?R Lœ D§²n+xÃÓ¼ª€†°P‘Z*Ð0Üæn墳ñåo¾øÛ¿ýÿò_þ‹‡¼;¹ùæ×#åëévœOBügIS½{ß–ÙtÏá´Ä0]·1Ÿ:zsÜìXa·±±nlº“³Eè V„½ïÌýVÑ i¦çzÔA·ÔůùÄ(ÊÎY«€Xð·H–b¯o* 9†™P¼^ªÌ ¯^^qƒyƒ£¾»ºpÿÝÉéMö˜µE™aËŠÆ6Ÿ!2 NJ|êv"Z’id¥LCš7eôdÃm›m$vÖ|WÛ2 A,œÖÒêÈsØ"ýØ.à> iÂ}³ô¬†åñ.-nÊZسdf8¨ןEPåt2ªù…²Žo‘L˜ârÜÒ0FÕê9BJó.@ákÞÜÆ@´ä”ÊcеU©‰‘ˆêè±A¬·LùÌ\¦H=·ŽÀo„„‹7Ìiˆ ~s6ž@dUè3 cDÀØpLΧ*¨f¿¹P/4χe¢:¥±”þªžhÄ7ºxK‹·–ˆ™F¿ÅVe9=5ÏÃ|aPð™°ˆ.‡÷‚&R{6v‚pÉGÒ5Ú¦I¿:™ßâËèd1¶A{ÞI‰õ.…Ý×Ã3>LO{ .çu4vGJQûhÌÙ‹Ë ²fµYvZ;úåÚÌç_w[¦$­7c‰­ó "ǬäÏHÔtJ®õæÁ½ûEƒy¶‡ˆ²D^•ð`vÂsìiÓœó¸J^Ë?âjáNZÅ^IÝ·^üÇ»À'½˜ÏV­SÛ[½«¯®Kd¥×¼Ãëm÷Éxvg¶í߸Ñg¤÷ÒwÅRï7é 4zc½¦0[o*N5Õ¼Ó¾·œ¿›óo§åV×<¼bá³þJ]UŽÏ§Ûî åá¤V 3ü‡Œ½ˆÏîÌi‚Œ°B§ÿîùK’§£Q§†J((¨* ´JÔ¦œ$ï-o%*ÝÒºˆCï44´…ñlÜa‘®[kàp¦ï Ájô@Œ 8-äO6Ô§å0ðŒ»M0U3×€­’RGCjtø²7EìMo°íp FaQÑB»éÓÅDR¶‡rñ À˜+*,ÃêQ$Â0¾ñ§K4ôË]ý’«BŽKãƒQ£°$¶†kƒ_*0«Ô^]]MCÔšn%ãˆPÚ1·Œ7‡ÃÇ JsÏtaøÀRÙ®m²ôœŠÔˆBz(–¢uŽ}qî•W ”º¦.k—€-ut %¨µCoä'*qM­Ô$ Ê,´.Ú+…MZNÿÍŸý1=¦¬±qSÈYËÕ—0žüâuÍ{V8ܬܪœK¹¤ÞѾiß·áÙVMDmÓ>[+æÑwÄ„páÕ¿äf"Úgq…„x—JÝ 8qK,…$RÍUÈóVш‚Þ(ø`¿ñ†1›¬g)ÆÒƒ"ÑrõÕT¦#å(ÎÁÎFÀ¼„Ó€AÑ¡€ ‡½û]4'…JW­+Ô]G%¥\p°„èÕ3Ô›Âg7è,¤kÃjc3 ¨–Z«´ïÙ.hì8@ ´“ðC08Ñèns”9̈òGèe¤€ÃЭ§¹Èè­vÄÏŒÃèÒ¶ÄÔ0‹‡C,Ö“5Lcð´ )$Û|¢â Dx÷ÒFQ">]WoùJ!ÿé!Ù¾ŽýhaÒ©í£Þ`@¥6C¡Gµõ´%me¸bovÄ$ÅõY«* fщÂt²·Âa•±AMÈÛ>¥ïm Z `&Õ8&|/·úéÄ,÷2^Ç/·1™ ÅøT¹ØÏ-kB®è§X>ç"§/|Q‹¿œÇo³·™1cÒËŽ‡²çš-·fUg*ó:ÿjFäþæ”úΓH¯ÐЩ'èRŽïO6ß—s°ÀÍè æôÙ°þJ‡Å` çA®Ñï˜sIWÍ)ß¾~é>Á7ß<}øøRijiŠÙWoPâ䃼þ…ª IDATë*©ZìZ÷‹,zCXyj™¿”¯3e¨ê;…ìżðx^‡p­šÑò'Úïp©«ãöF £D”¹”ÙžSLâpU -=(;¤/÷ïÝ3þ™ úX(ÙÔ¼lu¶"ñ0máäœÂÿŒq{ÿþƒWn ¾¸8»w©å¸VïÝ¿'EkZˆÜé©ìŠŽñA?öVû¬“Ù—¤mu8Õ‹¼Þ.{yÕMÆ•h]{LÉ^èb?þr¶áž6¡5ŒðkÃrDÍ¿üòË~þ£¯¾újWEïØ®Ô×Q'kÊUš²&äYÉ´suºHû˜3°¥Vˆ:rž ª 4wÉ¡~þµŒV„Ð Øm¨‰J0äÚæ[ÃÿÀþ­!̯2=ä*s‡W¥ï `[¿©EÏÒtc¿ý9i~縵¡ „hÔ+˜‘²·±wU<7°*8ô¦,”%Çf_ ©ªâÕd94¼âÀSÁ-àñ®åN~ý«/ž={êÁºç/|wné°!ϯ…Ïá¢É"A—ãü}£‚\b xŽ$»ZHÔáˆÛ±…‚Vš+H¡„M˜œ:V¨®Î«Ajâ˜zek~)6„ÃíÂÏX–œ:†a8:ì5ÔGð¢;ÄnÈX¼4ÇóQp7xE°ÖË­#¶ˬCï›§æ9E:š!޶‚JÖœµ¨ƒ+GjBË.[³Â"ŠÃ{Ë™Fý¶û:5Œñ>ÌlåE–€FA³È«:º×f)¹dyýöµHÁLƒ$6€¹—˜oûîåwç‹gP‰w^Í×äÃÒVû fNåË Æe'ã‹]Ñ\k³fáÒ „ti˜>L¹ßš M”7_AT%n¥€­ u4Æ‹Ô*AZá#å ‚|^ÁøêŠKÝæ„r(;èAÙ"¤fT´[•Ëpkœ2.üpuð-akonå¼rOrö rl#”˜×ê4 NÅLm®Lº0®ß]'ï’3YT@š8RÏÀ|Oáåå9*¾†€+‡ ØZ)t]äv(Ú˜Ò({£»ïÔIôô>e ÏS³„­j…þ& <À£N´x¶¶ I•»_YRYМ©Ò”†ï`IH´…võìTÅše3}Í+í{1¦û"Êo&ÅAï –ïÌ`Ò˜&ÛjµÚÖmº‘šàÃZ|ܪÀ@Ô/“\}ñ4r¿¹†&V̧¡üô•Ií€Úè@ÂO:§éhÈù…|E^)RÅ-7ðÝÛ*ƒ|}ÒÊe³Óõ͹‡úÁ–Š*­õ /,²wÓ\àW¸‹-Ã+Ç6 aÓZÉfV_˜aQ ày-áZÖ &°9V"EÚà0”ƒ‰”æîÍû4¶r¿Õ’NúÛ†bSGÍg[ H§–;<ÙH`ùµž5)æ¤Þ—„Ó%üÂ:±" pvÄ©[E\Þƒ-êÝí§ñG(PP£gß»c'_á“]YŸÐÍõYnÖZ¦…NU×N>¿&Çm@´õäì̯&t·®ß¶¯åž êÁ=È¿øÇÿ¬OA+éùÉO~ß›-<|tçLV¢Œ‡ó«^íH>´ ]ñ¹ßòƒy˜EáSÍʘ¡'¨:µKçî½;Ôüúê¥øÚëÁ®}÷“ßûÑÕË = Z­GyõÓ´7ÒÖ%ÞP±#EKjT‹ÞÏÓ…}¦c‚´:þCÆ­×Ûl‚ ¨Àð¿š3…P©ùå]Ó°ÜNÈO§ÚBhíÕj^S%w`&±ÐQta˜·Ü›çöîÈegL)«ˆ˜­ÉÝÔžH>fëár¸Ž«Õ! j†b˜I´W±äÀ å»jã[®®]øÃømœˆi±B*,6ø¯^—œArv·©Ž&¾hèmd}èËsi½õ†L3p»2¦:¿Dýj«óʨ·§ÅmÍý¢òàÁ=89p¥R!¦§ y5†´KP¥Ò£É@.o~M¸±u/)6xÀ8yÃ@ „¸õ­d8ú¶¼êO££ q’¦ë·>ºãÔ»^^Þ?ó`ŽøÑ¨'ýÒ'ÌØ~ãv_ï¡~§¸Ë¡gá*´ÓCéVº˜Ä°¶Š@Ãþº$lÛT´tÍ¡[2üË?ÿùZ]¢§}½|v{(k¬e<×çsA,ꊰ[5IR ©þ‰&1½Ï~ìÙ¬C×o¼zy!}gø ¢$ñ‰ïRþ«˜§4†4ú¹‹b¦äÔý È稇XÉX~ÖÕª1oæv‡MŽÍkà‰“ ³ò¡K:Õ$éå×î¯KÊÛDc(¯*Èâ¢)%Ó½6_Ð $Õé¨láoîÇZH÷Bb¨ÄO÷xRˆV—Ú—¡ ®ýï‹’i€¸šÊÖ?N©+Ú¼jHqÜVG•ÝDǪ±8–©ïøAA¢¹C9UT´XZ 0«uª9…}Ïd5ØkÌëÚ˶&ÎèÍoP- Ž"QKh€ Éy|Öò>4il¦"iF<£‹=JCvúß°xTloY›‚ ÷jU^ €ür¾z6îн›9`ÛØ>»õœÚQ™Ë7®¾l³B@Æn°æQýÎÜKY[²ëC®¡¨cü'žÝ˜ü8lB±U«™céÂ&íá„àFçÌéêNå×0C‚‹Ð€´«ŒXªìPà'*G Ö4­#6 |«¥à:†Õ; %4¶Û¨×—@n !¾ÄDÚ$ cõ1G½“ƹã½ÚYù̆0Ã@Rë5 —ðì”9‰¼²@NO9¤UšÙg†*݇[K~̧ k‚ûººhýê£.Ÿ¢®2ZqÏZéPŤ«ã-éJ+ð0 X¤9ê—~Á£siX¶dðO÷ìîv×üþìCå³Ï>“õ‚´ܼÕʸ&bØÄ€TäÐROÙsgÛ³&4«ÝÛ57â€ÄʳZ]醙²CÍÂì/à-àœ 9Ή6û*èŒEËve׊¿øUIa¨ë–í(Ýæ¤Ù>†‘cMÊ] 7£is&橎ÿ¡‹0ˆ†Ê›WÙOUG^½¼)) ªœUÃ3k¸,Á¦žÖ]QØæ‹ÊÀV>4p ºEá2{@1ܨ þ$lÛù]ÎäøÆÝC²ÜãeÀݹæ}ß±!B¯.O¼¬‚o{òu{uµ1š$÷­å.éMÜ|›6;^y q`¬ÿÇNÔäÒŠ§‰Î^Í(ýàÝOOf3²2ëÃc–hÔ„tÔ 'Fa3¾–ëVžä6a´x9‰‘Ä÷«¹íZðØž`Ú O ­wJþµ2¹a~GwÌÌ8·ë6‡S·¾ Êp" ÃlÚ³¸”u¯]€4mkeuOCÌ‹@9«êŠrµÜb ÒŽ¹k4ŸŸÌ"Í´B äåL0©ämÄ­/¦î±*81â(ð1eõkíÌÈiHŸ0b<"\m£)yñy%Ww^Ùzè‡ @xÞ†,ê T#TPvÐ`}+§‘Û:I> ÉB®Ô`ªXØJ´XPxÒp9#i¦Ò3kÈ%ã2ïˆÏ™k2ª£¹‰YE𕨶ki™a ˜h¥f"‰Ô¹í¨š½ä"VÓ§ÒdÀîÝŒ oâQ£ ê6_i8 ‹<ÖVW– ÔkUáùò+l\^´uà†FNºÞ!Ü« ŒƒÇÛ<^]¿y& O(^‘H<ü³v˜Ã—©Øåee*×½Lß!tP£§¬0ƒá 1 BödÖ0Wò)žÌtÜdÀ}ƒæ¬,ç X*(Y¡“X¶‘hé8½D„T³‹̸gê…Žºú‹( §9D)-ÒI¤ÉÖ›|i„Ÿõ ‡û7PÅÌün¡Txcå¢,´`F‚% ÚGZxW÷Ø@¼„U=.c_ÊË×­s«€ÌŠ‘lüÒ^Éy”N^\¾Ða‘pOïââêÆ¹âÌ'Í-ñâÝÈ•äâô}›ÛØÃeÕ§éN‚\øùM›£µÌ ÐÇŽSþÚÍh½¿á™` `©‰¢þ›Sbº>3i'*icur`žÖr‰ø-', ¥ÞÙ¹œM %sW”i†—ºVlÏ"3f 9à4'3FÃÕù…Ãi1# )z.@»”'¦¬—//Ü Ð„‘ HÄA][òtsæû%]eîC€ë0^=à@º‚ë9Ö]æZŽCõábñq*s;°ã„‡¯Æ%¬‚eD"ïQ’3Íe&C'N)CTBMÙÄ««ÔkrU£fõpfáUQôg ¡uüyú=ËÙFd©ßàiÑD$Æf]V[ñÃÀâ/= *º#„ëqk}¿#XÃO+6ÅÛå?Œ–6+³Òã¬.gå’µàüxff‚eðœTbÓ yJמî·Þ Ãv)´àíõ«6HÕ7Ç 1£>óÊè$—h)p˜¶¡NbÓ&µ‚çÕËËzâÛÞ¡ á“¶@Ø’‰äo"jøV ¦QB;ZJäuÔ‘ˆP*ø›BÖ- LÆácīӥa™}‹ð¥SS([È8‡A…Nvv÷ö•¯çÝ»sï—¿üÕ?ÿ¼îgXÅh‹öùL,™¥M\ÞÓíxÈa°Ä'áêÓ÷¦UýK¯¼ŽNwô Íèí0’i;‘¼ðê€ÁÀV”Ç"NÃ3ÊÙò¸SáaïRKMHåAEKPÆ´é›pšp.p‘rö¥9e²‘îT¦=é×½S´ÿî=x€$V&Œdæ(a#Ö$F,^D/ö®×³³¯¿þ­Æ?ô©¯~ý+W¼$éÅùyIÏÛß<}f–KÏž?EÛ¢™žC Wm~ç›4ƒC5Ô‹%"„{RCz ÍêK´¦+SŸõ}Ÿ¹¤7 (¤,!ìIï³6G¨î=¸O imôæ—àŽ¥¨ãO”è)W€¤ù¹Ê‚Ó¨¨¸6piô‰£,W+5äë/ñ-ŠGÌHÌa¬­c„jàR¼¹W—–ß6Çë&ªÌàÿ…\JCêÜáÚ‰žëiP‘ miè|… 5pâVyxÆi´bØâuÛ¤?tmÖ5H¸¿UÓu‚[~˜&#ÎC‘ Ýë=g*ÓꋆØ0Å0FÛ)o[Ÿ¶DØèM“m)tè,ýäR#h?èÄ]3yOíˆèB®“²GOæ %Z ¥ðô0Ãñ„Á§icòQznºEÒtë¦yÏx2ÄŒh% FXõ™QµbýQ¾o8k½¤Fç[¯èE5D6^L Q–øø›ÌC`XV‡9!«ÔBꈴM9G~„$S߃â6^á©"á# ,7:-Úw­^ôþôçò³áûðë$˜”"FçðÐ$`]…ú(K”r÷^kÑgp²rãêâÒ*±z8ÄÛ^Ræ¼ÒIHêƒe,j˦¹ˆ'=i‚C‹šü²4®(×DNžÄ9ü&Û1yø8x'çÄHª“kzsÞä,xï©ßhMÇK­“™ûÕŠÒÕ¨2 ý„†'“N„%)W£2¢ð?e¿e§Ý›ÛæØŽÃ!Áºô‡JvÁmÓ’«duÅ ºœ¾”Ô “¼ÃHƒaÅ_‹mƒÁ0™àN‡±C¦åô¬oî¾½wßöÖ»Üú‹ú§füݧïÏn´q÷BA@@î,þ/óÆS²³,´4†…ÇêÁi—¦Ã¬~p¢r¸í>‚ÂU`i»Håü> #®dnÇFŽ‘ŠfmrBó[£‘p “èp˜ÚæëËjöyp !­@¦v„u7\øâÿ¸D'bx—£­ÔPVc`Ó‚† §|•E¤W^.Ÿÿ¤Ži‹®cÚ¶È4œ7ʨq Vgmäþ½û½àÔKê_Zˆð>†-¢ŽnÝt¦sÝš5Õ ¢ÁãQ>=]“‡÷ðg¤™ÀÌW pÝôŒgŠ¢ó9šÖLk¾ÜBë®ØvŒâì0œss•Æ—:åܾswúàÜ2:Œ½¼’5¶.Ž1r‘¸ûã™>°ïH­°¨Ú®‡êTºÌ,¾òºì2á«<'FðÕ}Ó%³öéÁ.ÑO±Õ|ìNF4¥¹®«…x>é™ÈgûpO2<¯}ú³õ?è¢àÚŽ0¡Šë뀲ÿÃ4ßã09¤ëÍ׳\O¯½î …æÇäðö›Ó{ݸîm¹¤ ÷¦$±íœ¦5œÎ„Ø6áÊãëYÑûE|'hnGv ×|龈i›¤oéØH•'ó¢³êÓ5ù™¾ªóÍf£BW¤w a*≽‚²Í=*hÀý…6Ba’ÙðïH–ìy÷Fd#•‘Ù{÷uâØ ì T"Jr +”‚ ™wqøzO½Z 0=°½“Ad–º{~të•´²ÙÅÓpmq-²ÛÂÕ8”1ƒ˜yš¬Ÿ—ùêò›ÉóæáYªÕÁd—&£Fììõ¬=‡ÌúÂÜ[£¯­Í2x«¹ÖÚ4CÝÚn¾ñíÝ3‹²L¯=ÔqŒ5F®®ts¿Háóo÷ §u×2A8º‘Iú@ ™ý‚lMŸÚÔS¸¸~„aþeÄâ-ô¦«œ_ŠÑ͘MyuÀ¼,ƒPZb]¥HНS’úúyïYþH@QV:mû4ûÕWÞ¿|õòÑ“OÜP¦ì³Û7uu )TM¹š½ô1o-³éöÎm¯DÇ,6¥ž×‚Ÿ4ÌçØŽÐrî¼T‹ÿ2Ñ\O·,æêÈ6î²¶P5]µZÐ Ýt°2xÚ@ E}Ì/-4û>¹vå[«½6ÇRRޤ,¯¥U]ÙòÖ“ÚSl‘Éý¦·ˆ8Ùd‰º$¼O>þÚÝXÉáïß½¯¹²U§§ÀÉ­Ó抴Jª¯f^W‹+R0_òW¯”0ùî¤>r²w¦Œ!=¸³Ý_szÓÍq%vqó 3Øà¤dÿŒióÉmÅâ~YÖŸÞ¤×Àƒ=a‡sŽ_q%Óìt£ƒ›ËÁ‰ywaèü*Œ­Ó¶®-gš7–ÙôY¹Í(öD¥Ibå"ÍC ªK’jf†9sG*…\CÁE²#7È\Ýë&6ä ísàëÏMYÊ 7Ü8n†ŒV þ±A\þ®û~;×d}ðÞ_vú‹Ÿÿl°”¬ÁžAyÄDC5°8Wÿ¡] xuãë ÝLñ¡û„#’±ÁUN²÷ª4N`¶o…ZjÅÀ@“ Öåmü†[¨J5èŒ7NÌÝYªyÿ²äÔÜ#<!†´0LÇK`ê#:ʰ¥û• 4má BúšÄ¥U%•$`W~&àR‘7”è¤MÄ3€Öò“:­;`|‚¬HkÖZZ/b S'Q`“t¸6+àOñþ¾÷TEðK)û£g Õ Ž"„#&<¯.^X=6‰ÿò×ÿd³E„n¸] Î‹¤[ƒäë1<†KÂZó$Ñ¡µhDgÑË0¡Íoæ>t0£Ã8\7(ÑiÔ\ñHmë>ê,æwêÀfG9É —L?šË¥)éÍ=ÔóÎ2Äßʉsc_ç`,ü8ÁÁß­4c§„ͦi† ý`PgÀùÞwÇ4”Ì0Z¸ýK•Çë3-´©º=ŒD‘[Ôx Ѐ𥑉d›Ëï°_QæßþQv’c0C'/ì6º°‡Ý8«Õ‡ß-è;˜ñÒÄ4˃܉5yÁÚ@GeäF×^€"8¹&©V«I €Ü/wªæ0.døcôäý½»÷¸ÒòQà1éŠ\*æå‘úÈdà–­”mŠRŸ‰·5_‡ ù韉bR$ÐÏÑhÁF+gñÍÿ‚´x ƒ©Œx‡“Æb&Úb™o_^þ§ø{LÜpÿáÇ}èC’¤?x_3 Ê<‡¹‹ÅÚ¹uîtÕˆVbÍ{™éx5‰•\rV›-$c¹iF&ÙXGßZ¶Ðo2Ó-¼„®}ƒ¬øwÆ@Z’º• U“å–ö›5U8˜t8Ó ˜‚_p5E¼ >† i IDAT>)/ïŠàLl ‡ª%ÿwK¤¸…]¡¯š9ZŽb…Yùö` ä´QúËUîxW¤íð=Ó ­W6œÝ¹GYifÖé½vR‚%UuŠ¢ó ¥Nxbcϯ3C0žÑäud‡p½z®¶PÁ (vÅÑ–Î ˜–zóp^i­x}¢6P`íT§t ‡½OÜîUï°!Gl^-ÒQ/‹ë'³Ž†Cñðb?úÄ?âó®;”‹6ŽnÞjf¨ó- *BtYæ,jÆ lÁü³)]-õ8)ÎÅ­³šwÊLs “e{Tù‹sužÙ•ØH3/ÿÔÑ9òh©ñN_µÌæñ&œÄâ“ÂÂŒ­Íd —AFo¾žYã}ûü$j­ Iʨ™á-ÌȤW/M€Ä¸]7H ^àùÈÂgêl¯®&ý“b9ßV jIçT§²4CO¥¡š«¬¦úÿ3uwMz$×ßiÝ@ã•3Ã!%JÔJÔzíØÐ†½ö…/þ2v8´’–ÒÚÞðçò½#|ç°uciiQ!JÁ7iHg €F7ÞýûŸótS5˜§³²2Ïû9y2+«ªCG"\I4’…Ùð8L2$i“˜ŽL¥íD{PXvl%¤¹²Û.2!©ð—ÜÊê¨ÀÞ—&€OœõKž„=c{¤ží5S a™à´Q9ý2²õ|½4GwtÅ¡fLvÿ-©£ÿq«A‡‰úÄZ†áÐq[.(8)4MñÔxÄKVÃåLÈ6Ê,ý¬£E’ó©±6¶p ö¨©äO@`¯b¢Žêa=ð>èÁ-hzýŬð—%ôv ¯À8ä|hæÚ„e¼M?³~ŽyÝáMJ¥•è·ïÎ_ù¬S’‘0Í¥°x±¯Ÿ>|ÃÈ.:kM/Å ão|øûøûGžxÖéØ÷yÐ%Ú`­Q›3ZªÁ “ï)%PoŠ?yR”ä¹Q+’äP…ˆ”<X±€;¡F¡c9/. SÌgü#*þËè((£ACH¯Ô1 =¨f_m‘3aÐËä ºËf‰‹ú«ÊPG¯‚C%’€>$õÏíõRÓ^ºëÎŽ€¿¤ ð’?#½õ^þQ ŒÝជ  §P™SB/·èÛÆ˜F&K—;àQTÈS µ6u\èÝ{ OHU©LŒÚ›I „bål\V‰`e×ѯÙÔ»ÁšÃî%ÃN#íïá{eû„Õ,mzñPRé¥ ^Óæ¼1`ÖbÈ愳~´Y£•Uè†òÃvsÓuš¢ØýèGó7û½ïý¾S››Pƒ‰E̘¤Þ…¹Ô»é‘íthm$-hýù¿ÿcW4¥[×Vy4¡Þ¨*râw Œ`Â’ IÓ[Qè ¹÷ïõÖY…ÆÜX=Ïoî7³s‘°õÌYl|ì3¢>ÀV RÐc +K^cñÉméôëf„Ê!m}õ0`W3ÉMÌ"ÊÁ͘i÷•f¬bð(Z^ ût¡ÓjQ|GÔ1>á8Æ9󵡶af¬A/²ÝÔ0oÞY¨@3qZ±"•päØr¼ÆF²,ý±_¢(â[²ênžÉ4H8¿ŠžC¾—Ê€ò«^Lþñþ–- <|ø ”ÉÌ×Xéàî`hJï¶>h …˜‚šù:5PnŸ\ÛኀxþøO ak6Zuá% |(]¾´‡É·†—Ìc9Êj+æÎnÎéïdWS(XTH­äAÝ-˜ù\ÀçüÁtÌ©ÞEf2ys_P‡Á½­×ïß”L‚¥‹e,‹à¤Ô>´ëæ‚™¨úi$p%/$ܱ«¢`l5k1ì†ÉÓ$EÖ<@pÃWj“µ‘aˆ.Ê_¦ÅÌÚš¾Ôïð>À´Œ’!Ãj%­%¶áÍ !×\m Îãê($ÔY²¶ã*0sî’ƒ †¯R‡è²<ØTà+^ªâ±"O,Þ4qOtC}ü¶Æ"¸G#¬{רt]p¤«*‡UcèÄCpÙ3ÀCTÔû^‹šä‘y‡È#,uyw)¾{yÇ,À{§Ç_}ùcøìÛ¿%DÛK |–V2§Ã@¾â*ð7ÆÍ¹BHJó’ØÌmŽx“ ‘b/Ê5D ÂÊ fîî4 7x4ˆ±и’¾ ‰Z–á!¼Ž3ÉÒñ”„Æ%Ѭ°šM&3 Ô§à(!uŸšQ Éf²Ö/š©$:Öü⥇ì‚C+)äOv2™y‚)\àìÝ4! 2…}ÑYL^ø1Åìës¬=W¶@Gް B…X VúG4"<ÚMfN]©¤!ÔÊuu”fC§Ày[ÙAÍbùä ƒj÷…Ñ´<Íð>x‰.é ìÞ0„l@ Õ¸nJÚ qV¥4eg‰iæß(‡Ñ)îЄذeYPö/‹•æòØŒízî>—@’xÚt˜“k1  QßzOÓG3ÑžûSИ”Uè*Ú@ï.õ&¾‰‡2¤…õq€6óí&m‡p³ªü=cšãKF:}æ×YÍó"ä¹C ¸*èœn \ì>LÍâÆáÒ‚ÒÒéþK \ú³O3á;v¾7AKÁF·A*SÐ+QO&N’É©÷@ošo?‘›ñÀø‘ €Nü‚ÞH_þàBSÖݱ…ÄÅô÷ýoú\*äc†¤š¤8µG¹gk·¯Jìûu:biú"”Õc[A‘%e÷t^30B ÈÝj½ªä7øEÌV´í±)CB[ŒH‡ÒvC6`ílÓÆ|»=ûmfÔ| 3céF½FMˆA$ÔŽ¡3¥ OâP84˜¾¥±8B̨µ!‰¯¬"4Fá<¸•ƒF\ÕÞ¡À±šè>½ÖÚGÑP@’Šà Û+Yr«w,+1Ì}=R ª3ÂþôZ“k>%;Q¨§YõµoÛM»³L©/ÐP.²p–˜¹ã"H˜„Bþ˜ñ#ÏÆNfB#jŽÜèC÷ƒÞédŸ;é$o†ðáÕÅ¿ú‚ºï÷ÿÐŽVF~ûNŸˆÉÅfD¡ÊÐp{%c(ÆY,AቜHÏoœŽLÌ5…8P¬㔵$µtšÊL°µ3RfF#ºÚ´ì›d¦±Ó‚C]Ò—ÂbP1¥Î‡šÁPc-·m :PÈŠdE¡=…cÕ*åFD4ÃyOö½<Í}z÷t–‘š7š¾ÛkÕc.oÞ}ýì@“WZÜ9¹MnÇÒXÎØl¦+š=yò•ÑFŠ;r»&»2#óy^”ˆ'n?c yxIj²ÕW.åw.˜"»M¯;í2áÃ×äëÚ8Ðæ’VK0È‹Z¥ò Ó ¥Ô\½ÛÁZJ üºÚæ«PôE¢±9¢ë¨1›1¾­ò*ª²#‹¬ >ÂDéwŽ_€÷)ïm‡cuDÕŒ# èMJ)hâ\•f–ëFAåfÕT?o InܽÿÓ”6Ùdào%Ôƒ¸Ú7\ôÎmÑà 8èèÑÞ%ôDKuvãØsÙÌOLTÿÅ¿2yøðþŠn8*ž Vw¸(6 Lú¥~Ä–Ø…ñ¹‘Ú¾{oK8ú‹ïÿiz›©2ç¨Å¦fÓ<NŸå6h±¢8*[ òdV7øóri"Òl )2»fòBɘ&V-3ŒÔJ†Hʓ؜ScŸÜr@Gxæ¥,ÊÌ1qש‡ÐÈ«*™Æ»0öãdîEÐ _ÌtOPhÕ}%+¡JÑš‘ébš¨à€NKÍ”AÅG?ÑÌÕ¶G42ÈDV2N¨ÐU xO¾Þ娦 ¿Öò#¾mq‘±äËŽªºµZi‹On'yˆZÓRÖæÍ„Ã`P9ÏÂÑã4maãôôöËsÛŠKçÅ%œŠËL ¶ôë…fÝÁ*t‘d$1úÚøS›Å¢½–f¨pgüá20å5 y¿:jy ¤aŒp\r¨' I ³ÓmsN@ZS-Ûû)^¸õ|íŒß¥Î Èž†4ÖêftàŠéq¿A4òL~–Ï?q„Â9Hêæ¦É³|eõ¿ ®’¡ñ»JOY»1OÉGê?üe-+—\D­<ŸàSÝi£¢/,{B@Œ­>I…žS´:ê¢Fð%Ug@–rqÖmA§Öï´¼‚¦OÌuLày΃´¡ ƒ/nÆiÿ½L÷õE÷Ðñ>97…&gŸgT Ð_0ò…I­ÖŒ2r\¤a¨cœ’ \*hë Q’Ê.ýP—½ÄùM»°…ƒyXuÏň¨yÈŃðrzz®IâQ+ßè¸mË'ê–NáUú¦îù¬iêÈ Ú,¥ï0ÊÁ>úhÇ´…wÓž^ö§-¥)pVíÅ ’Ÿ<#‡"Ô”ä·YŒÝ U°'ÖÐfï’Àö¬ª¶(ÄùW|§ŽB•ìA ‘‡@G;M©‰þ¯ÿê¯?ûæg¿ÿ½ï}õÕ/Å2Èî= M¥#ŸÌÒš4kaDáwÅH\%ÌÓm+êf<³÷$\ÄÑÜΰ„–ãÎÖ{´OÝWäòŽ¢ÛÿÙ$V0KnãÎF ÔÔ¬ãŠ-hî06?Ñ•|˜.v(¯=h ³whƒ)ŠFXÄòëÔ—m¬iiÆÝ$ú謽Âuß^V¶ÜQ]\ºx-A>æðsW÷0e{oC›Çï­(}þOÿˆo úÆ7>>õ€ú-ß.<»sÇ3¤ ØšÃJù¼ŽDv¹r`1Eæd¨cÙa-n¸! m9ð<4Š*Þ ¥•†a¼›´]ùZ¹àó´.ÎjJŒP˜HG> êa4`kk´€Ö‚«ãzàS/°K#€KNåpB‚Ó4k'Zv Ño ëÛ´y+uÖz§Á²Û§“I wúÈVmJ‚Ÿh^Ýi@:‰´CWÌàãqWY³ñ¬nŨߡÝ%\ë¢;è\Ô«±´©FGˆ¼cB3e60<ÆäBð»}WÛL˜Äè‹BëŒDœ+0Bí..Î Ú¼l¶À*×éä–6¤%6Hq€¥ÓAÎÇÛš97jÊr²™ü޲ÚÃà>ûÖïP£µ ×Ѓ÷±¨VWµ7ÔúÅ&P-9÷yYÔŒG/¤"[/®Mt1kê]2ô¶¸Ó–ž^Õa D£d;𗋍·Üíõª£žñT‰ø‰™oÜ‚W!ØSÞ¼«8—yØjBû#o5˜´Ûuº¯;Z¢Š–3¡¼î[„2R> âg™ÂØt÷›÷[Ðh œÅ–¶[æùA¾¨$ÁPôqb‡Ÿû‰„ö?bÆÆ1ÑÚâ„–·O½·£;†¯_¿ôlË›×=Â-ܱO÷ˆùm·ÞçÄÂqbc×2©ÁÓ²¶ñ‚¸ð˜¥_‚(—H„K“Ä#ž1¹.H95A:‰i6fDqw.8¼áßöÒ¹m4\0U6ˆ*0\k“QeZ››¼¶¶bÅÔƒPb÷ƒû÷äëœgÙ†³4oJ£­fî½¥{7l#LW¤© ’ w¸|¯þØF%ȇÎâEi(óš¡‘Ûkfܬ«6º`ûêŽØIï­ }À¤y0ƒFÆJö3aí>9í]Јž ÃuЩS«¦V"CŠÌN¢].GAmȰ£^K…?F‚£¥¸§ûŠ_ó‰"Î 'ê%ÖÃľkGòýÖÇ q.vŸûÝŹ{¦Ô¾—âE#II?ƒ§ÅKlÎ-®0rhjŒLC~Qgù³üÚML¬E7N5ãg©ŸXF‘@¢¦f`U×™©A™mûKz“Kǘ"]ðŸzf·¡³"BäžÈ¼_ ×@’.bÄ3¼­ÌŽÌî#IvçŸèÀêò†f ‡ÁÒî Í‘ƒHÙm;k.¼‘ãk‹öBI»W  ±Þ ‡XyÔÛ•œâÓðFU<(ùNì;elü`úˆïì÷²¥|›83iK¥0JÅÁÜYÇÒ«–_‘UøÃØ¿súb'Ô¥.®1Í¢«³N£†‘P"àÉ„6éÊÃŒ¸xOG¥­ûéßýåïþÁï}ú?ü‡¿ýO7Þ{§€¯úôá*š!|l‚oüœÍRG·šH¬G÷˜Zé!gP$LS:Æ—t®1š×[ÆfAŸ¡¦ê¾xËÎM…åyí>âºÝò m“yqÁ#þ›ñIJFÉ?ä±T|ê`–…}@˜‹>[ƒ©JAGiÅÅù9)Ëk]gH™4&⢚¹=K†¦s½Ìv»Oæ±ö|««·z{§õ³ ßËjïpñG°:{ñŒ>sà#0iéh¹ Ý[úM‘ÀÐT‚>Û¿ô;&AVÔJ¶N Ù¬ÒýDr +•ŽÀ™£6ËJÝÍúfù^[KrBŒKS)nîVœd¤Dë™y—ÊÖËa•™ IDATà,hãÈô)xuqû#mž3d‡ =—+çD%1-lÛ4kß*@d O+m*‡³×Û±¿~úµ±Ãáùyï(î`ƒgDíâ¥kfÆWѪÕ| u¡¦…·|gÍ`FŸÆêwQ{ŠaMYæÉm®M^ˆ™pѫΔ‰LÁs¸;¯!"•V¦ù£†ÄB…#×KõpÍø5Óݧ#¥g/Ü,6@LÞ6Š0cÊ÷/z´ÆŒ9ðÎÝU¸ŸûÆ; |iBzá»O¾úêýkñÜ.߀w·Ç Í´úPÀòÆÁ»w_žÙ—!.a( nß½›àfÆN9@‰i¦žµgý—«®[Öƒ‹VXBqùŸ©W{Ioú œwPõÖÆ±ÿÂÍŽ¹­ Ñ“Wãv³õ-Ù*ýa•2³JL ÃXÞ ™…Cdq¬´Òä­‰qæ§.ÆRTçÞšp^^i¥ÕwÊåri®#!‹¯ZÌ¥¹&$pMÜ™«á%‹+1jݾÿïÿ‚È,“³¦,ÄÙû wa ¬5šÌºÓ,0›`½3[­û…J{š(þβ°6|‹‡cN[%ÔÙe"‰"‘YSŠ‚ë(ªœ2s 1³ä`ïZÖ¶Aµ6à—µ”#OwÇ\*#VöëÐÀU(]b{[Ø–Ê m.5¨ ¢±mÖ8&â… SØ…æ—‚FllˆOrÒìhi(ŸõmäKð´'ÀhCæÆ¶Y"Ábû"¯_ŒoD»¤pyÉ,¨oßN´å%žGl áLrË™¨\ÙjæØS©‰`aüÖ}Úò¨ óž½±,î×[½«p Tã ÙZ!qnÔ^tbœÁ;SÞ;Re$‚œöĨåRkk‰—ãA*¢©ç ±–¢%Ïeõ¹ô8ÒHnÆLo ò]¶Ro©öÎ[ßÜ‚zÙgãhV g¥´ Ž<úú ‘çÝÛÓ}o–“xÑÖËc¬Rt£¹÷¾€ÀÂKPj8FKÜŽ!) U•[!ï/wÐË…†®+£'t&¸$°Dj 6%vW¢€.YDIK4TFLsß„¯Ü’FýŒs^ƒâWpDu¨”¿¡PAG5€8Y—È,‘‚˽Q®]É›ÀKŽ9bcŽPåqNÖøË>ƒßæ'q¼‡ÒW‡:_¼[ ‡–’,— D ãÉÍãýà/ÿàÿÕÑÉý_þü§Þ^¼|õæÎñé­;}«‘¥9ÌìŸ={¦K¦¹h/ÞÉ úÉÉúÈ7÷! 3ÆÞ.˜%ˆÙxÑäI¿ö#|3¨ž€ðEÛ=æ=&f5`&ßxý¯¡ý.iÓï(B jýne´Í“eÆ0.†~§ÊÊ“å¸DÛà€£Œ¥BF©âêxUzŒÿÏ}ƒR+¹W7qâ¡z]dHÖDGGò3³#,›ÐÛÊEk¾ÖF \© å™^Ï]¦¨ ¥cI‚e¹pºŒ(¸ À¶qšGÊ,ËÑ{u$³JɃ, ËÆbƒ²‘§îÊÂ]ÒE—¯çêL~P¸NæØÒÝ%ÝÕ(ô¢Ÿ¦[Y&Û0#º‰x‚µ6Ž0"dfŒöì½ûwD8™†ƒýõ³§¹Ã¤w¨êšÅíüPwbPˆ@X¨1)ëK8 "ŒÅuôh³¼è‚ªÐ+£Ôƒc°ÕqªŒ/WõÝfj”aq§hÑ8³Õ6cÌÛ]&4Wë"Ô5¦O˜…Èü†Å†:ö?·&@“Š‘-§i›°ðÖ£ü/^úË[™‘OâðÖ†ÚI0">ñÜbÕ£o|ŒÃ0,Þæ 4Â4ð é!É©w$ßÕ¬A]Ç6ÆØð謾aÍ5Ò@­7ºÙE°}›¼•õ_Nt –†ÜÃs:È®jö Æ'ë©"xD•.Áb¾f±J °rUF`|jäkE„Ìe-tÏ):Ùœùn³dò1£pƘ¤™JÐFÊ~ÕÌY?š9S£€æ-lƒ•x ÆÄ÷ ºã£—¾3âGÉhq 5¢Ý´ <­Dr]°,WÄ‹í«Ÿ£Rk×!L¤Åâ&Ý“uµ²E£ÒÎJß®ÔYÑ**Ç‚Æ&4ã‰JW, PbQ3á¨øØŒ"Z» à m»èîÊ DXQ B‡µ€o˜ï™Hуh!sTu]vå°Ô¤1ÑæÝÖ³ƒ.í…›nñÍ¢¬o5¾ƒLa‡*p嚃Z™Mï¿ÊÆ'²¹„*p`i`ÐEaâáNh%ÍÊhËÉœ"¬ö—þìÔáª!Áj±×ÌÔz–[įý‹ÿøÇO嫨r™³ó3ÍÒÒH»}°£´3ËV§.y0'•ʦq:f0,¦txr›aèÒ¥iB.©€6…[pWBÕ¦÷I!Þß9õd>¦®]&ð–¢uÔScÓÝ9Ä~[~ËìÈ-¬ù 3úô?%äiM¨:e„rãeç­º( ³Ø·|€/¿ÓUIj He¼M²'¿ÔÕýKA®9X<jŒŸÿäo}òéË×ξ~üúõ‹ãÛ^–ùÀãs±((<ž½~Œ¹P+̉‡­Ìµ Ê3Òp¼s:’IËñŸíòêìÌ‹3/¿’4cóÞX‘ T3·æÕÀTtU¹vj²œ9‡Eöo&K\Ù¢²»øî º¹É„»ƒ2+ ìØÔ0Ç‚Ò+Í °t:‡eÕÛ¼!ºZœ^K³vë5î=pŠ#Z¶Àlàñk€d[½’Ðràäú(ÙD˲eoÀ)\áBÑFŒ+ µDÀZ¦òðžHÙ`) ’ûøìJ/ ¦o–ÉÞÔ­GÎ{ðÕzá,Þ˜¸³evìM“ND6*¦j^²xØÕ„2]HÙ±xý’º^ê}vÝ»¥Y"¡î"ªF²ƒ¹F¢‹0¦ÆÁDqªÁª€rQä ™Óèäð¡mÞÆ*ìÏtW–«^ÃWDªI‡s7#jƒTýp™“ºt Fí1Ž*²xyæ¦^K•Zk–pF¶$~þü]2éòEËW€ ÖpÌN.¼æÊÛ zµÐß_ÁÞ¼ÕmšR|ëTM¹gS¯eƒ;Xˆ5-+jQ‹ÞQ‚SÓGÞ^Û§c– \sl³¤06¬fû:G¼9ûQ#2˜·wo´Ï9g“x\ù(¨±» ¬vü*ãExGuSo„9gP/êõ€NíAðK¤j÷»ºg4º]IX3W ‡zCƒß=èN¥N½ëOœð l-%!>Xéé2Þ“oëI7ô¬‹rHF¾.) 7çŸLB/À¬’ÙK˜½ÏþõÓÛ݆—,ã„­°uŒ{ ŽÛ“Opšå”"¬NXŽ2à0b›{të·•¶Þ{d\(BYWñ¹CAdnwBŠwRÐ%AŽNe.êš»¤R3s ªòȦ9Ê®ŸáŽ­ùjìo4þ?,7>5ÐÛà_'„&÷5RFï0È ºš<;²Èá…‡ Å­¶J ÂÁ-“À×7JÔP¬ õ€ Ñ@ëgÈ;0…ð1Ùƒç7•b3€@\Þ£‘”êãó  †}!#õˆZ, f}·»lL3½ñ øÒ‘GòibúˆVn“ù\2ä©Sô2Q÷ƒfFrëOãÏTT÷q}©†A£7Yée ¥oñOåV Tt4”Кé Éðhã1…l&†ÒÃ7oþú¯þ_ƒ÷¿ý·ÿÍý÷}IûáÃoH ZlÕ:"ã¤S·~[Ç:lï`äxDÄÖ %V–9jfSSíhœâÔè é6hbÓi”Œ¯‚@Á¤1ÖäÛRÐ÷°, 4 ôÂHóTƒÄ,ðXKgƒTæÒvÑ×¢~ÎÒÊŸeðl} ÊíñY?Ž£òEèÆUñk‘º¸€kCXÊÙ”‚‘¶Œ\‘³B”¨iüášG[(q!LóÉÄ Ïõ|ù^7b&ùèþéÙÙS_Åøä“Ï$qÚSÁˆ2¤8Å/ŽÀ Y,vJc3Nû©´–fçsc´ 2Ž©ñªc”êæƒ°h‘4 ï[¹¿øuàK› !øgGÐ@EyûžØ‚:Â5î‹È…Û¶¥3µdì=Ø éè Â縒³3½œ¶ìÔß gX‘uxךU*v—¼©o QSvå_ÊZ- ÊŒË)˜ZúUfZ:.ñ[PFª«4« »z¿{Z›Œ¿cÚGIˆ§™‡¾Ž-û»6]D‰cL{-Ä„$ÓØ."Èq«Ù÷6,U“t#¬äàb·Ll—䣶P ‚Vפ¼Dä‰cí9õ H¤ˆYÉPÓd¢««õœcÒ$Á|]\B˜«ê‹^Ú¸<ƒTÄœ÷¦1œL”«ëÀê‚xŸ¾qêTÙAMT¤%pê5Þ^€\8šk¿3iÑQÛuÐèÁšéX±Lw+–ZjCžZ°¼xãˬ¼ôqˆ<“óÎg/ÂtñÍ€èuÿîoú€Wþ ’ pÞò ”Ó oV²ø†© +ÞõlºJª0¢¨zKa…áιìJ¥uV-IP—q“¬„EâW% –`5Ëb ü‹â ýºS¡!­5éN™R…F¦Ç±v¡@ )©!az˜'1«e[p7f`ƔƄ°ŒÄT@cJw®Ê)x^6ØbU©\¤´©¢}!Í85ó7\°%ÍT‚‚«Ð49?¼Ÿiên Ѥó~ä·ƒ¤–#kƒt½»:1½ö.q;˜Žï“Kp¢ìøŒÑxWªà"!‹+ˆG³_æµBw‰ë;…wX(4¬}/ÿ~q°W¥I†‘=æ3D¦Ìwj8Ê„ŸÏ.‘a9®  ª}ÀQøãH{ˆBFÜB‹CktX¢N©ˆW¯@ü©ôäļÑH"CÄD¸ÀOz|¤a£š< LŒ;¨ÀU×.• j×<@ :]U¿d¬Éj<õ¿Y Scâ‚*Í–qúÐq£¨Båki|H.v(Ôè•mÌ“S~‚f䢬åâÕl(t§Bì«ñ4¼¿>{{z,¬Ãx°–ZÕ°@Áêða†‡xxa\jrî>ü®ˆüºD @¹ÁÏ©^Ž-Ð "ÿÛÿî¿wU|õÖ“‰we(펵01‰‹»[Fh~¾ñR †ì!U¢žý‡$“xôë¸<äDŒP±5€8”µQ E’$@d«VÁ¯´‘„æ…è÷B<ãèôÎ\ÓÇìä]FRôÀ\ÖÎ?œ—wŽaHúí X‚¡Ð †,:t n9Ú5‰8í¸¨ Jã% ‡S”„t‚)LœŽ’ì»BÁÙ˾k¹WÑ/›³Â‚ ЮØDë¼yãóÏ?ðégßùî'oÏžªç-Bµ\ƒ(¤¤¤ÇwÚü‹6 ÐÑuHŒ8±¥f2Ý4Åñ—RMÕŒ¥2׆‹³ÀåXðD$¹Ûe Œº»ê€Ëžž ƒl!»œ<ÍhSSÚO!åŽä ;bSh¿ ½tÊ¡¼ÇÂÙš¡ EÅW÷ÖCn 6´ˆÁì[¼H·íAÑ}›ùÈ €Ë´üðìé™/?ùŒŸT ZÊ8…¨W/,{>{Ú7—N¾ñ »\ô2ÁÝóçíÿ“¬[Ñ1a³ûty‰Î™¸h†Y£ÁB;q£8%4õb šÉ™Nôª¦dD:7úµôA‘ÖSgu¿Á´Ér²Z%2^œê>´u•Ø×F¿®FôtUK]üFêP¢°Wýnû+˜[ S¦E\ZÊ_6®ðõÿêØÓýÕþ Â±Ï^Ó€ •¹àaÔ§TÞH6Ór `ÓèËÄwÄ·É´æÃg&0®)¨ü é …¿I>ô²‹ôXO¡Ðð?³ÉäIª(Јç¡'§:">!'ÄA‘ÝË”žÞ™5ú-ò¤ãÜÏ~ëuI³I´kMs]lbÚwFp¯Ý{KêäWº5óœ] šî  È éÌÕ™úå}ÌŒ7y"Fm¡7ŽFh}¥‡ÒòeÚ 0fHÁ™dZô]N²Ð†võÊÔfƒ-†€O5ñEÑ@>@¹ö 䣠ž‰lÜÄ—P#·%ìíݺ Ap6_Q¯‹z¼€à”̆…ä™>š‡Åó×RÀáݲ6cÛY‘–;ꃦ›³f'»î}Æõ¡nßb¾Äý4kŵçÜèi˜­›‘Ðî›ÁÍÈäCFâàh‰ –/õ ³¢¬ôr)›l‘ê "„Q9yާ©qs6hJß,ë³.€ï¸ÅŸ:,\554C*{‹pmFJyõ°jeƒ(ÕàKõv€™ÐÓjÔkŒ~Ç‘q/ ´&_œB¹;;‘P{¼öiä^èWX‡‡KP½†×Ž4è1¨àÃ[øFŒÃU‹vº$mÒiiËKäÑ&ÍVL7Ÿ¨z°J›z™Ì yècK KŒ«¦+ (°Ë¨÷ì¬'·ïÝ=%ŽFL®îضİ4³Ø‹—_ÿú§Dÿé·¿{|ãú—¿þÅéƒ>ú”°5ûroý‰4Å`j¼ÏO¦iÕ™‚¹xêeÌhV†è·Ç ’ÇÄ ²ÃZ¯%ø®ÒŒS úÕuyY9(;ªŸŒT»™œÎD“-N/.ê)‡]3î¥8³s… ‘éý !: {¬0ÄçS¬Y¿‹«&½1Œ¥ÄïЀÈh0˳ÈÍkŒ¢.(GÊ+Ûâ×±×î5h9Ì&„”6]ÿŒÈl¯¾(Р˞jã@°K0ê%¦©aÛe ^Êm†ÍT¯ å(¨×‹Óñ‹ Sƒ6꣛ÉžC:Ì:,ÁƬG{¦Ø{þ™DFcZoö`%[|IDÔpƒ~ ±ä/pµ%¦™Ž¾î…y ®ç FKX\úÌkDãª`©²û*]¥²Ã°­  z AcÒñgT€0ÔhãP¹5&(¿W÷ªSÙiM';\éGÉ”ð¥#8HIóqf³¨„1V‚ãhj€²è«’MJ6Ôˆ@è5#äµgÏ_œÜ,öò’çg¾ã,w5>¹-ëõ@:³U¾‚‡xßΤ±ú#RJc‡(±ßÑó¾Ó +rE!B”¯¸tt¬ŒÜ€3þžõ‰înƒVºÄ`Ÿ|N¶ˆm¹P¿|ÙD¿6{uoõõ$° ÀT£¼¿ .e!c“[ yâq¨k2àØ˜/`€€éWƒí¨ÀÕŽOð&÷?ÓRm‘ %pÚuQ»I’œª4¦PêƒBqÍŸðÌ=äÔ¡û·Óëöˤ¹<†bËåm|±Ns{ßZ$Ñ æFfõ…çèAw£™Êjê€1· à–´#çj–4² /ÿÔDj Ê«ÆŸ#¼ªI:(^î=Üà(tBsݬäÿ&ʨ.‰g!@šèNâJVÖ×ü:Å‘ñ@å•má×¥Ð΃„`e|¨ö`«ê2ý³^Â+Êö2¬tAÍ(J×qpièì'h—sh¸VPÒNrRk?4ü&3åºcÍ!Eƒ×)Ø~WIŒvõ þì¡ÖCXópu:¦Ú¬d>?  {дÉ”i•WsõV±ÜPC«qÚÛ€îžfÆ ‡ª8’?õ꜕2*rÈásÜÖøa ^G•3ˆ*“Ø×‚3¾Vï yº“ÑPo³ä{» ±eÏLân·K­.l—F²ÓÜ™";8†zÈx¬¢—±yq²h’ÛH´K:æí |lÆù-Ñ‹‚«ûP #qdB cÊ‚Ê)^˜Â&ãNÔÒ ø0ΑÔ w¨ËWÓÔ²P"\’ްå´‹Ö‚fº©ý,(ƒÓŸ7‡oØCÛ*ñ„i¢·á0)4ô¸Ú¯— *ºÕÁÂH+‚a  %§íB­E]XtŸÔ§…‰%ûDpi$×àÖÍÓàÏ–rj—k¬u¬µÅöãaÈÍ%¶Þ…y‘šÈ@wp”UûUVÃF³yì6àE³Ͱ Äá6.ɘã<Äh' g®®9áY"§uïp&o0Hú¼ ^ÕN3´ðÕþ˦Ò/ÁFÀ|ÙÊW¼sˆvUsélÆ(bžÈ šG·y—ÄÜWÅ}nþ P]ÔŒw½A*RrìyÅ¿{ÚݶzvÓÊp©ÏŸ>õŠ>+o {Ì!yÍ /þè¦ ˆ€€¯²zj­fw/åÌÝÑ×#¼%1¿I°” ÐÁBtg DÍ4¶d}»z$x(¼)˜&ÚÉz2d˜­&1çZÚØlK"hŽG¸sÏŽNãÍö°BøT¾²(Â!*à R £“^ëâòh ÇÇ1ÃwöÃÄ€g6¸vÓò®lþgL‡BµŽØÌq‚Gé–M¬iÉ呪=Ù~ùOÿð³ü§oÿÎ÷Þ½:yñâáÇß:ºÕìE²²XHrÐM¸—¹ZNM¤£… ܽc!“¡¹×í=Úw8íwB²Uc_†ùެtå¯ñ³ŠÅee…®Nœ¡‹:\ÎQÊ€Jƒ€ Þ‘ °\¾UAÏ3N‡rRmÚWžñlJÐæ ¬ÂUÞšQS‚@Q‚Åk&†0p]\ó/Jã—pTÊèÀÙ`&±žãnàGç¼´ÏÛ^¬ã6K‘Åè8±(l{=Ø%*‚ƒHÚYÖ@@aBAŸ%Íöæþ ñ0sÕ„ª;ÿvÖ€I}ÐѸJÝÑŽf~zaß-~…b¤„bÈhü°òPdÐ/CÕ·ˆTê;?ɳ¨ãZÀµwI­z×O ¸I7ÂÞ˜.i Ôˆ7ÐX€öõV6‰H•½Ql>ÛEéúpÿ®Yô>áê(˜ƒ× Ðø¥ýȶµW®š #ƒwM+íWS4qqŽÍ±Š¢„‚KÄ ¶j€R•øùm‘{imŽ»&BÙ5H FSw·ßy1QæÁùÆ ALE­§Ýf:ôÁû>ÿâó#O#ÙÜùêÉã»}‡Ô²ôÆh/ f“ 8·µ‡—4»•O-ܺIØ$¥Ü­' ½ ]0NOqíöØTÛþ)Ww¬Gr™Á$+3u .\º.Ž»Dk«)]0È É¡”épen? ÂÄXü|ÿâé“_ýâs÷Xo!&ǺmÇyÊOàò}nóMölxðüùÙëW/ïßxþØËio‹˜lÏ7E3Øç»,‹!9G&Õ˜äžÆeØm-¸~Ó¬FÞ)ÓC¤—bú®›×P\ã=r€‹Þê™Ö3„·12s-m°Âµ¼ñÁkŠa0ls?""³#Iê&ýA»ÕZ2ÚÕ"üñÉ=ˆ @‰0ÙÀµkOç±÷\¯¡çi”&i ëí0Ç9óâ^NUb(á”j`+›k™œûP/WÿïŽþ—¿ø>€HД8¨cXË€øÑÓЇ넾u;äRt5’ Ólw0>ß»/Yìßõx0S†’¸!çVpc*L;dfHRìÙNêcкOð5ÎÌÒy\ºãP‡GŒ!JK•åš ˜mý`£¨Çxº3ælúÎi  [I¸{)¦&›Ñl(Ì3@Cì½>ŽÑ\ÿˆ¹pEþbð›E=¥|çîRö½Imº?Ù`Ü’ÀOÎÐJ€ãÂÿøA,;ã‰Ò‡J~·íÈ´ ;*ôPÌ)‰Û•Iè1b9pC¡_¦Àh5cÌv¶‚xƒ´UÂÄ£«êñ¥œi̾³vš ”¾™AtQ¶öÓ™÷•îý®âÜào'Ì cƒeÇÕè%ÂI ÌèwhÁ_€#†äaöŸ ÍQÀJóÓÒ/Ûs¸N‡Ñ\šR–¤7ú‚C³a§^N•‘ä7³¹¼‘¯ã #^²…º¦¦ŠqbÏ5Úñ&|Ý}–öC§¸AQkv€UºÒ%d»D€5›ÅÝ]^ÛÐpª=›G+ He-uQp`6jEëɱ.qµêd«„15-ñ5ô\k9J‹ì"ŽEé ä!UB6#f Me¤Î¬n@eÛÄ<¿KeèëaÔÅ/–­Û•]ä&ë,ežxåF^ƒkû,õmÿ,;âéÈjŒ;~™„¸=†7¿]ûè—¿ú»»·?ýÅ/~|tëý7¿ùÝÇVä·ñ³¼aØŒ÷†É óžÓœfg óK,cêä;vâË•‰šL´B˜Æ©f$Œý(œ=‡ú[nEJõV¢¿rS˜,R9,sð`Ã0Ñ=yüÕ㯾úôÓOOìÁo#ÔÕøªX_ÝIJøäÙ$—¯ÉV3'm˜ #U÷ÒH(M‡€Bâ5PwÈp IX×Û©téR;WhEX†ªÜÍš€P¥™²f:‚ ©6C³:G{aÕLD„)dØóKŤKà¥/í”u;ÈÊ!Ášh¦0„gÆaÁ ¿š ÆiÖÉhÝp,^H@é” @vØ0tzûɓǸ ÃbDàÈvÈLXAÖofËÕ kÅó!Cµq0þqIŽNþb«r;…&?d3»‘DÚÔåÒ V4ÑZt%F–FV’~у#2aÄã¡&ÒWsŸŸÿôgÖ<,' ’«¶‚Ø !ÍÛ°¬ ¼“ueãƒÎïa0–dmŒÍý¨Û|aüv÷ᘑ|̺Š ˆwâ[ƒ7øÐéqÉVêvÀ¾‡«’‚¶¡†|«ŸdX‡«PlßX9â’&·HÝêà/ýTTSäýÈQ2ÔCLÖ*Â@p@ˆ*T5«™™auû5›ujútÊ#{°@Mæ#Åçgöe`Ž„>ÅF -N B”ܸ8}ïÁÃFž¹1mìph¦×bGA¸oÞ•—ö²ö3S ”@êPÐÅ¥•’èÙ)2”ñH¤wùK,PLI>¦‘Dx8tq¸ DáÐÅåRXç’Áa¼hWÈ8‘fÖ®üžy7¨—‘6iŒ&gõGù믟‰'b›WH°I_¥,¸Ý¸e9Øž+ÖßøøãÏž‘ï)qê ûdM{@§CÔ/1è•&™zZ`÷3ád¢[5$¤2ØY£<Á=5»ú(ýÅÁð²¼\$µ_ý®x•¡ÃÚæsÛ dW 7¢ŠÙ :ÕqÚ÷ƒQMéô  £åD°ƒšâkîG`\câò ãdM¯i³y‚zùëûžúE˜ ~!U8úÓ?þ ˜3н]"£¦½é?iYÚÕeâþ¶º˜WI§0IË*ÜVŒEt·x©VË„N÷NaЈUC«& eýÝî„ ) 2›öšÈžQÏéíµ»K>È3—%º£sÙ‹­`aMØ‚_´è6Á¢d‚¸Žê=çÉÔ·FÜ4#ŽÃ\›qzyèêUÅ£œ¿g—r9 å«U?ADŽ͖©AÚð"æ°`p$[ .sÊ6l‚)ªÿn*¡ŠÀUêbÙzÇ •df¥Pa¨›þX#Xí›ÚÎ ó¼ÕÜWÝ›Ä ?ú&bÚ¦ºêì&Ô³1æsíR›ân!¯DSKl2-Ðô-‚LœõÛÛ˜ãô_Ó\#I˜š¢De Ct;²I¾ÒIÍàS¯ÙrZr3n–=  UL_wéCÈ$zié# =¾ú¦!ÈÔ³Þ%‰ƒKú(fNÆ„˜=`öƵ̡YÑ'Çî)Â4À¢^/fL{z {ˆqu`yò“{÷Ž×–r~-½³µÇ‘Þ`Ϻ/‘üV3,ë#åKLø»nZÉ5·WØç©+i@†$"‘Šk&@S8Kªe-FÂ{œØ^?SëÍ· •.!f µtUJ˜Ü–,R¡j¹o]¹=ûb‘†œEaê(Œy#ý{f®н¸nô²2”Ý3?ðŸ=ùêóŸÿ܇žÿ_þgúÛ!¿&f¥`7–ÈBX–`¿¸Ô,( ö€ˆ1QѰ –Q©Ý’¤É= JdhOÛP¥ 8Û"eÐþy‚""†1sÿhš¡Ô>6‘![ywÿá}±Ô+Ý fJ;¿G¼rÐÆÎk–¶^]› IóËEØg[‘H§ñƒh£¿hÐyIt½cô¸´1¡m¯±šíèס—Csé0.8lÉÿè)Dß2ý͇üÆ©–",z¸$© 3H—„‘=ÝzÍX)H¸DÈH„ˆbNÚéÀ\€t½}¯¡``„ßÃL ú:@´ô‹±Í×ÏÎzK$ŒëP¬ƒ2 À°FKÆû¢AyþG¾×nöE R¥ÁX&qC…𹛿w¤WDR½.ËöÚÆ±4Ú©ãÀ'H Ša™ñÖ*Ñèé‚. »°¿º;œ¦ÝÃL óNì­ÝTXBX Äf[6zˆòº'W¹¾Ähìý­"/ä·¯.¼€Ô@зFp»}:ð‚?|xn®~çÎý{¼Aš§ß{xŸ!0v(n±ptqïÒ™ü’ŒmnõÝìžøìvÐ ¨sKËe™¥øIŸo¢µY€ˆk5Žä2¡,ha‰U@dÆÂ••ê5{Oã ;ŠÌåÄ=ͰÂ×(ã'Pc ¥e™ïaBx˜Œi¦û"UñH’xÔ¦« àwu¡Fý*HpöÔÕ­¬×Ÿüñÿ¸pÍ yºÔTð¥7þì¬dd÷LgsôîÖ˺,cË~ÌÅ}e£±N>nd+93#[‹LjY<ÞÑãF©íV8^Ç‹Ñ5ˆk—½åúÙ#Ivö9aõ¥¶n@%bÇpØ’ÌÅQ‹½™WÌ7´´·Ã€ˆÚV@,§ËHAlL–„ÕNŽ…<ˆ2w§ÈÛÄe8U˜¸Ðȧ⧘R`T‡Zê—#uÿ©Áî£^¤á*úµ“œåÕS(d6ËúЖ©Q¨“ª.fë[QvÛÇQ×"s\‹ Àºòê9v#TÕ†•¨Úáõõ©Ucº&ž•Ì Bn¾J‹ó?ѹ|]½ÞVÁÂÆîQé&~©ä‘UCÅ$Raá“8Á‹1rqÙ¤Æ4ºÕ¨¶d2¼æÁsHš—‚F&¿Î‡Ñn b^ã%fq4ÕøƒA?¨gdí~ º2æ€]–ý½D7ìcÇ´4ˆMÔë²öø:oøf»HÅé¤ƒÊ Qaäs¯JÓD#."ñå¶}<¾}g)k›ÁÏ—_íÕ;ÒËÊ$@¿HÔ ¦+Díã.¦r“íK_« ¢Ús `´Ù}C‰×33¶1­É‘ ˜s2õCaÄh ›«9éjÖ ¾@9™o­"@„_0Î7àWéA@3’ÚÈÆ²ó|{àÇ™„Ä0øä‹çÿçÿñ¿ÿË?ü×ÿê¿ø¯¾zöØë{ªÕƒÉÁD¢.+")³(ÄÃÑ”Ÿw¯m¾q4Î¥Y®˜JšË\i~}ý ý~q†U«‚C3 ü‚7®}Äp,Hpi§j`Ðn ê=3÷>ÅZô"Ç¿¨q¾Š¨ñr ¸F””$ ¦¬Ä2ß×Ò)2ÖV]…‡0FåLµÚR媦YÚ¸!ò–µ=« ^Õ^[«FZlËÀòø«iäŒú²$§piŒÇvT¯¬—Ó«_Ý©£_erC¾Íä/óEøPëÁå­ONwÙEDj£4eé"ŸÐ[øQ'º¶G6“î U÷<0Ó.0ÇF¹; Æû6Y5:aS”¶òxeš:WYYâEƒŸ|iˆ+,»?X8™ y°å™ ¼§~]òK~]í•üEÉ¡^³ —f/€*1¨~áàݱêSoÐÔF_"š| ÀP¨†ôÀ ePx¿h4å‹Ní¾/Å™Øâ÷ìÙxìç± -úò*FEDÐYsrç–ãÛ'î!JN¥Eytˆ,M!³=I¼”3«A•1ÊPaô[¾Xlsª]èç-f„w?Ô(PÈ1¤ê8t&¢‚…Å’jw¸´Ít×@3Ǭ„%I5îÞÈgy¬ÜE€¯‹è(Dåæ#ÛœÁËeË´¦¬/Ý©Rzçm .¹ÇjÁh? §1ø*ñ»ƒ®. [&À'öfÎKfÁuàÜo ›OéíZ-ªì»õÕv”k÷®}×&|4êSˆvÕ\ó¬—m3wcþø–wZ r¦ÝºŽ¾ü°‘}Ñ$0Yw ;‹‰ÉF޵¹Ö%¤ª®¯Ì¸3o),Ò­tVœ¼›d“K»Íª½¬¶7U’°.­mã °¯†™±È•‹x1öœ¥j¶G¢˜AB­$Ìà2}—4¶°æ’‘Kc¡•òLÓ¹òåëíÚ±\m‹Ÿ#P19É€ïAÜ]®6ïEF )‰†ÖzÉ\û°W@o´ké*©Z 'sõ4ÈžÌÑ]u jha½õ,‰C1£ÑÜ::¾Þ·H‘¿eÉn¾ÍÓiÄÖèÙ ”½4…ìÈÇñlá ˆZ ±øK°OBö¦uÉäÜrÂð2|e¦›Ž ƒ¦–®îT[ëç­w"¡1]½Æ`jŽÐª š¡N„©£C3•{,(e…½º¿Î€Êe0Õ¦-/H²¬fnÙÝà–…¯{³Kӵߨ’möfE0‰ÑÂâß,Ö÷­ßú¶%0E:do ôZì\)öça~´x£5n÷sˆb*щr¶24°5E¼‰‡8@Ð]u{ªÁ„Ñi5C`…ÆaþI Ùö!Lp,"(-Ê@q("ø.HÕØÏÌð„aZwüª´Ùd”±‹Èë¼âÀU߸Sò°öÌÉøôãß}óêÅw~û·On?úèü©Û†GïÏÌÉp­^€Y # éL°[zª]—µth:t–P–6ŸlMÎ3í¾\þYë0êÔ¡ ˜JŒ€ïÄï”Õƒºª™‹µþÚk„>¼½}«ÍÆéëZÞÇMŒîV±ˆTŒNp4ИüÀrZ%MÌ`¬ é%–SH!äÔÊ £ëè² ç$7jÀãÜ(‡õ-(¿:º:ø3*\Ñ¥;éº[º%Kí5«vŽ<ÂÆ6¸a_O>¸…§€8Tú]A-FQ‘ê ï›}} ÎíE—²'mt0AX»|Œ°öëej@vDÞ<°25)B_pPߨf7Ù˜•ÓÙ»f_Ãí“{-U /<ža¼ñBðÂ(¢c…ɉ@°%X²¹ïaÛ±çe¹¨bË‹ypé¥ËÊ$9©kV5«ù‚Úÿ°r\Ö´@»²æLDÈ…å}dR¾µGàä ÅÉîæÏ–—â›ÙôÉ ýá;KÞ—~Á$FÛñ‹5wB>ûì3òD–ŒÜs r¬kÖqâµ;÷¼zûæW_|õÉ7?{öôë6ŸœÜ]:¬¸æ€ÞÉ#XßTÙÆÃˆÒ—V^f«8éjàF¤—ˆz\QƒMë—YL»š 5 P•jËUa9ò+ÓóŽ.½40ö13½@[ÕøÅ/Éo64è46.ÑW ‚ŽÔ¿A°`Êæ¶Ì˜v$}õë/ê£Gãn™(ÄhéÎÄ€¹ò1Üà ¿9,«>?ú³?ýŸVµÉþL†¥i)B4ªðšŒéÉ®PCŒ6D‰ó6 | 8{uþÂZŸ‡©ÉçXâòØ Ä@1ÛýÎÂ7cëå¹Rݹ“×÷hÕ›W ë€Çsa "™ Sm Œà7:d¡Ljì =E!¯wp Z“xÌ\@5¾ˆlí dGa­i»äX%± ˆS‡.¦ «ãyZÎv0kÄêÞ_/áèmÅ(Á¯îhÃÒkÏû°ÞìÎDˆgƒÿ¡É@µ–êu¤-év+g¾({Ú¨Íþnð>·¼n ÕËu€Ð©bg– tÅš{à-n£ _ry´ñœ}‰ŽÔcP¥èæ×¡FG°F˜d›L¶¦Æeî= ¥ÁÈ?íÔ¢ç¶X›¡‘¸Ü™YeÀQeÝžöjªÔø ¼pÉo’[Ž·’¦­YÅŒá‡Ù©'í‰T¿íÖ´™—À¢&ã3½f°™ÂAMÓ9u“aRꈇž®:÷;b …Jjp§fâ`§¬·;ƒKK4`£îz8 $3wT&ù”x4.Ì#– s¶D«3hŠq¹ú‘HçKê˜TŒ5©D˜îÀlYÑÏl¦åÒÖRz¯‹R‹¹îïìÊ_p$÷%%~š¯Mrršéc”t÷ŽÊ½`A¶¦œöóhe€5j¢ÒAÌÚ-¶lvœ#™á‰í@i£«C-jaλóBB¾Yã=é¼~ÿÃü_ôoþËw×=÷òìŃ»§2ôY©ÌæFäù5zHu´œ¿OMy‰²'Ÿ’–ýŸvýÊÞÇÆÆžéNtb·ziŸîÚáTÎwÊ%¬%”9âb( N†e® “‘ÁDM½XΉÚs%È»{z¿Ãf_IAk• ‰·Ä2gk¥åÙnÄgû ‹íù©íh©Ð­Dï’Ô%­Jšé>šcfÝêêÐ>ЃUN“bš W¦Í& š4bw¬Ï”îH§Ú/< ôZøé7³Ù4Š"†šÎQëT¥™Á]«Wò´JÓ©K~uœ.5iy?$d÷&Î{ÕÓa3¸Üvo"öïU&HÕ„d´œ%Æo„²I|ö&Añýöo}ëÁÃFž±¢T&dZnWp,aW$*× ‹ ËÎ^mn:Qͯ^DDnäŽ<’¿f0—ë•€N·ýŠ‚ØÉSÆkBxÑË<Å÷ Ù 9ëeùÊ}<­ttJYvb7úß9¹“õZ|8èüÂ; ¬f¨¹s÷ôé×Ï,ò “Äkq»Ðy^$D9A %w¹É{ JÂ{÷^Ü¡œ£®™­Í¸ª½–ã/±Ô5¿#¢¨õy˜èEl °Ï–¸ä?½,v4—C§ŽØr8‰%mìÍIL™¢Ñãpi‚§h˜JD\D­Î¨ÖzòtCkX°f…Q¾½–ZHÕ@Jõ8"7¼{“{ß" Û‡¾¥ê²®ˆ»fÁÀ*z 0wÝ,Ú¸iâÔK†zÁ«öFcC¢/D^œ—¸ékÄkhºäüMW4•Tbdé²à;I­-Þ·L³|Éc—ÉÚŽÚx'ØŒ³±Åfœ3´ o*qBÊàÛá;#Á$XR É [Ù¾ØÖ_ Ñ3/‚b$«HRÅÈè&·×†ø•¯¬ŸèF·ƒ}ž|ß-~Í‹*<û–ý­²ïCÇr¼7ÐÝÿ9º`ÎRŸ^J9ï¼Üx;0ÙS;·Ð`H¦M4ƒI R¾Øüàv‰ Mº P².ñ;c3`AŒ•áù»,ÈÔÀì´§µ3*G!/:Üu;²¸|X JŽ7 -Y¶Ã½2½šIÏŠôM÷|çóG¡‹HÃÜ;‹Mˆhl0:³Çš Ö^pL[êÄ IDATtMüF_sÄ’QŒ9Å2°CÑu)ô‹<’Ÿ7åFdø-w•±©ñËîݱks£=J‡MÜ!^GÇ\Œw‡̯WünKý+jð}㊃ï¹®.—v ©¯Î^žNÔÐBwÞ`W+÷…ïTgä༽jY —=˜—pl hiXøXR„˜R«ŽFÙ’éFw‚ ½CB¬9Â8Þzâ§ñU—VÐâußµMÔÚ`‘Ñé!v(,H·‘¶yÂTbÀKC`¿ÒŽKdîꌧµDÕIN»1y™*ì°á™»>ìsꩊeúº¦'þǚƿ£=:Õ÷žc?CÕí}ŸO¦'0Hjl¯' ÓžXd>¼ „ 8"˜‚ƒH±¶d+¬p¨-Dl(<Ú2”¶¤Âÿzn®5Î×G^lK†›Ò¬rr÷È¥YôE{@anrG/(Ð "5ˆ*5@øoE–±¼&EK¡x¢¯1þn»ãk©]²«dÆ…¶?¥Ÿ*ÙµS-Õ¬@œê®™ ¸©A«UN4ÓQaËœE={¶C|:f?jèVtñê ™µŠQ·'d1 #Å={ö”ôÈܯÀ&}uÑNbï«0ñ;¡ ÿ2ktÈÑÂwx޽?ˆs ddNc2d¾;½w×I#ÆÐìQ4‡Ô^²ãE Šõâž–(Âhr\P\šø òtǬöZ²I5ŽåbÄÐ>3Üá’–”bȳâèÔ$©2Ð=1“,[?:`OæäÑH.Ø©NݪpàŠ4ýg‡¨e7êÑØŸj¦S¹4 Þ­ò à>^ –ôãœVmGê ÊÍi‹IÖzh‚3Þ4 Þ…5=ØÜñK_'¸~ãôáÇïQñòüîé]7ÎîÞ>ùâ—?þøWwm”¿óÐÎú—g€Ê¢nÞxácsl“fÛÒoyt;ÜM,6Snµ³ÜÅ{—ÛÅC£î CÄt÷Þƒó‹î©>¹}ëË/¿`Ý'¼ÁH²þŒ+㙓d(>m5BAÍ t|qörÞûœ5À#e†‚ÖÍØ¦0fDâûç©ÆI{m %i/ÉV e1I‹yãœOÉžIOOò Ê‘„ÎÙâ†GJ¥&”`‰-˜‡a/\§EkŠÇ7|°Ÿl vüctl‚LàòSL@vÝ$µšðe Yó f'¶Já_3Þš)€‰¶ã¢ÅnÞ‹N¯$1{³Èîn±s¨|aì’¾ä¿ÇÞ2wÓ÷X^3Uɘ"Ž*p”/p);AÕ…W ÷â°ÄÆ›ã_ôçŒ-~PŸ1 ‘4T‹™³0 ƒN­–I¯Þx­ËMaàD4Gˆ'0)cMÙUJl™ûư7èÌM‹” Ðí?`ä˜"Ž E†6™‡±œÅé`v Ô½»¦b<…EçºÙH«ýÍ !±Wc…lA._ró"›ë«¨ <.Iœ¿œ« (W LQ[4+÷8ªͬŽ9ñG¾éÈNR6½O;ðì€Ú`“=ƒV€û(Ÿ7hž9k7®U ¿}Ó’‡4Œ Ø?ÃoFd#œqòÿ›!% M›®R–åóÁ˜^‰ /G$~GÔb ñÑ-r ;ŠþÂRƒK¨M“²H1ÖèJ5 Œ¯cÐÛìt{ò«ŸÜûÖßÿð/ï}òÉéõÛ/^µ—™`19d£JÛœº`-¥˜D\Àj<+jàô£›‰—1ü^¿1ÏMÏ¥¤Ñ„Ê}›è Ù³×Poä©SSf6,4ÝýVpû»û2‡ 73‘ AhÕçkãø¢?¥Òû¥,•YꬃëEÈÙ~Ĺ'âì„#Kc8þÉ?tÙ¹y¥/ðr Ât?A@y·S±«× S–­9·¼Æ€ðóÆkò¶¦\¯,«“ȰÒ‹Óè›W7nwä諯¾ÔÏž?±KS`¤ãèjzmD!Ë­ßÊ„`B¢Z´Ë­Þ¿÷¢]ŽÙëëF8â ® CMŽ[-£…¤D ¡(Ó>f÷IJ …*ˆHŸY‰µÎèpgX mgy¯ m·×ûö›^3ás¿§÷Xõ³çÖ¨,+X @ZŸÒ¸)`ñ,1n?~úüÑ'Ÿq¨³s;LN@VÄËB‰Åt ÜÔ[÷Ð:é)¬FXQïðD—ØÏÐöÎDzG_SHã#K&ܱ—.×òÍôÜÃÂ-\á¿Üpî–;mÏØŒ–ç2!‹mÉ¡Xã9°!cnÁ8^€¥//·GǨ™ÐÇÇ›Œ}w„.¯æxsqf±‰¼…z«Ìí‰3üE^`¹À}U»§„¡5Ä M™„j Ö¿CDøKLÊ8v•Q²;gV£º÷Ðä:D=3˜7¯^r[S:K½hÕæ­ ~ëö}œˆnù ´ ‰GÀIÌ餖æüG,$kÍü&¦ žÉãë§(¹sz· 7e ×d” H›dÚÍ×^RÀEÊ8û|ý#ÏuÌÌÏa!ªç3½€›JÁX º\'À:Õ …]šÏàè…6½Š#@jÍy2µ©ÖŒ™ùUãІ­êi¨Œf—ãÿM€€ ³?* ¾Ê¦à%sÝ»Ê æP—”xp¬ù5 ¸÷Ô†¥*ÈñrUƧÃhŒ›3  ©wyf~ß¼øQÞ/JëùIJ&„ ÷œ\Íܑʈ9v\EÃÕ¥ÔâFf7ˆ£‘¿^ɰ1Ò!Z!fô¶Ë]MÙ¦ |ÇCÖº»°õ}ñ•ç¬QAŽº[ø{*ÿÜ6Ú» /±¤M[{Ú`QˆD€øûá¿¢ín°K_FhƀءUÇ(ÎÖ²R¥z:›—¡p‚ <géçÀEÙ‡ŽµŸ«²Â„ã¦Huiûîï¶ŸÆ™@Ûp-"WºãkY&ŸÕ;³ tûl$áÃDíÃ`h© €œ‚<Ä+†3€ ÔG›#;kLÍgNDþ'’6vu,*vÆZ 0JK¤í¥-13zëÄÖâ?~þÃÿôÿçô__{÷Ñ»ùîŸ6°³|T-µºëÛ+gËzM ºÕ«¦r¢g"•޵‡al<¯ÛRhÛ¬7-d¿Q:IMóVù1 )8ÜR׀ϥ•ÕÒ£¯Óµ1åm€u ¯Bu¼o¹)J ƒE%Uh<”â’ÆjjàAéùFªqmÀ¦ËŽP°TêxXÊ“a”jòñÆ’®6øÿ©º³&Í’ä0ÏUY[nUÝ=ÝÓ=3­! ¢ÉŒf’nq£ß¢ Q `@\ú]â¥ÌÄI“D3‘Ø`¶îžZr©5õ¼î_æ§³OÅÇÃ÷ððXN󑇊°Dë[ 6 þèZNmtŠhõ;‘ƒÇÑB[ü—r×>F€11E¸»:¬ÀCQzÐæÍª¢P„;rØ]PŸk¥§oò”# wöYÔ𡎶Ï[ÁÀEŠž¹ä†‹›ÞZ<Å/‹8®F•••9N&Òjïæ-;©ÃšŒî ,2|ƒ%ÝT ÆNœÞœdZ(„Zõ.ahÈhº”K8›Yus'©„>Ò §pA°ŸŠ˜éSÒÏy"//ßNå"-ãùÎbE‘æIƒH]~Žr¤ @2k?¾÷¾EùÆ~­ØÇƒ*‰i[_EÑççÏŒBÅX“sŸ˜âjé¹ó†Utx-¹ª¨—gg‘gŒpÖæf–ü»‘`?éë •æ¢( ^t›Í1‹÷a!‰-G+:Åq´8õ8.?"±òß§ªâp†Ä4eVä…â‘ qä´ˆvmC@,¼6Å„·9’ =2Ü?2‹û¨!OZútŸ<|Ò«OWO£R`ÆE†"Ã&&âkˆ_O—qwi0{¤=ÂÙœàÇý$Þ¤=×¢ºƒ÷SãkX;lš«wn޵Yª–™  Š<ТíT WJ£dD—:üOlèn7ðÅÁºÒ™UEüDWhΰ”uÉl°h0™ëµà MOç›’W£©xâŠ"R½¶q—M Y݃{ìÏä€}::h©Z©Ê9˜w‚Kz€‚bzµêå1©ƒXƒÁNS¦•öf~ÌÔή2¸Þ8…„¼fµ¼§ ?÷̵²#Þ}*ǵêÞü#<ØDf*ê.ÓOí…·š†VûÝ|µxäç‘ ©"£é.gŽ…!‘NÈ5¡,çIˬUƒ )ÿkÓîMÎU«wTÒø§Kq9,iéT`f¾³gì õª Š»FI²Õ´ °6zzBC½®´Œ$L<ÝÑ<üa0øHÕFJ&§M×òÀß´¡ì'Ï$óؘ)²„7m‡÷¢:ƒ7Ã[I{Ö[ºì‚Y¾{(¿2ÑgŠºé«ÂÉ!žÇª­q¢þC‡~zCHrV‘çÃòOnZ«2.ÒÖèÑÊ‘§¦ÖÀ“pKl3o:¼JJ~†yZ.ªìÏÑ7"ž€& pcB~C¬.hÁ€ù­ £ÈÉD¼$Žýd6ºÂƒˆ< ˜ik¤- ÕT '°ŠM‘íÑC1×—צæ4‰¾üÐëØùɳós˜µ‹zVÖ")·ÂB™Ö‰rnQ&úY4ë}ò-p;L±Æ679,1î›à_\^’ªŸ¦¾ÎÏOͱŸŸ\ÏöM¨¦ì¼]ۈṢX¹­ppùŠ1w‰] 0B1ÕåƒNñ¾NE Âæç å „B¡‹]s`‚ÞÐ×Ò>è .m5ÅC±äW;3…6V ÏÎNüÞïþOˆP}â2P \ó ªic/æ=÷Ÿ6 'Œ”áùÐ{I›ÁÊ™Öîp<턞(m ·ÂÂíµVUü<è°àêõnˆéúœ“â2ämRibqh“óíO?…Ê 7<æÆ<€ðˆÐÓ›t«¡&ÏM?£SùQŒøžå¼j±îžÁRíŹ£'!e+Z ñíÌЩGÉG##ªFpŽÚvõml­RCLÞ |+#J)B’P(½KÃÏ(г$ €[—‡x÷?a‘ɸŪ¦*Õ¡VqdJBádZ—ã|b*e7«” 4>íyy¿K3¦Ld ÈÍu¾ƒ[H1 /ZföÒ‡Îyá`€aÞaC¼|-LŽz Ui"e-³`…Vh¥¿r#¿þ ™„Í™ª„…îj‹¡”Å“Eo¿êW&ÛfKnnØ·”zµáe“¨f‰©<‡yª[.<ï2Ä7€S7XˆL/ßû²F~Óhj*Ö³¿¾º°r:ã¶x‡Ó5.õë‹Í*B’Úáç¿S\­`²Iȸ!+šh>Ž# ¤¢GZ·vþôŒrZ^üçÿüûá_üÅûßý7—WµM¬k¤¤5êîí o5*µ¼Ü¡9†PìcJdË+J·ò6?V×øR»P »ìnQ-=Æ$ ­­ÚósbÚ;ŒßŸœâàäÌgãk+ DY8щ/ Q`9¿ÿ¿ü#%2«&`½…®Mò_¹ƒe€}‘˜ÃoûMcQàE×%Ú`aëLp™QœÏ@Þ;rh+Ñ#QPÎ1)4íÁØÔ Yd‘óé4AI’šH·¨drÔ%ÍEÛvçpä¼ê|Ú ïì©×noìñ@“—äÈ·K %ÂZ† ãšV£þÄt~J.7Æðæül&ÆJ˜È2(Ã_VrÛ¢Pä'£€ ˜‚ÑÆ` ÉñH‡ØŽËVé8ŸÅ˜Ô¢AkØŸP“`Cȶ^ª:Ð pš_Pk¤ "w Kšía–²EW¢%.ŒtuˆÞCÔ7Ãï¦E-ãHuA"ôÔ,K r” Ì€ y<æÜ¬‚–ïD„6B!ÛU&….¼âu9ã× $;ÚXÈ‘òIkåP œó·Ö“¥"‡%E–ºT…U¥Õ·+,Íš”nT™(úà¾MlwWÌÏ<$îÛëÈ«{wØ+öþ‹ñ¼xñüÓO?#†¤ )_’áNMz1–1¹xÀYOÓB'–ÑàÒzÑ£OWäã²6@ÚFQ&í%tJ8™F;ãòq1ûSy‡}²Ut®ŠíÒ„xêrwMXÞYŽ8"Rð0 k&`Ê”ÞOͰï@su-eưÿª‡Û —€g¥íŽàE«2„r€‴ab²ŸÑض#¦ÆlxŲíZY=‚™Tòƒâ6®í »í 6Çè5‡ïÓóó‡÷ßÿÍ_ÿäÿüWÿû§_|ùɳOO?þȤÌêþþêÖOâ]Ðî}é×r,¸€AÏÆzœŽmÛÒÝi4I×c¥š‘OS\$£ø[½@9¡â€Ø!q =‘á)$VìÄë§´im”U€Gç^ò%véMÚµ¨d»Ã¿LÁÀØ@˜¬¤G˺ð)ÈÓF4+ÔäëÁP£¿?í vЍ¤â·Ä€ÕùÍÏ€€É ¢iàíã”FdúeÍÍT"/ÊSJ¨<¤asùM®+–¨jÝ)eØ„—³–þn&°Ž~˜”(a›Ç¼_%6]1Ù€§tê7£…ež¢¹•/ÕMþ6 °]úÚÂH†)ÁÞ7ÍÓÛBÞÄÒ®ý¼fª]H½#žZÇË£ÈæTŒGàЗ,n™E ‰49Ç¥«Ô­»ÐrWÚ£¦|„§ËŽ)v˜ 0ËjŒ×¥jjè' ô§ )ŸÒ™Ê%C¨ís?=9›¯ÀY'©$ÈÈ98˜Å–»yÇ_ åA¬‡ù™ûž^Î1ÈCG© „6©×Å4I\X¼‘X± UY%LèØìKuà j>ûìÛ6 <={ªûÁxN¥Ä&<9^NYW2¼m_ûÙK3=•†¯+öéþ2 }U(áøtÍG‰&ƒt##´&˜ê™{ƒMè)ä‚¿=WÈv+>ƒýú°s<ýÁo`®£ïWaªG(æ^ƒâƒcE‡éQšgkƸ+1ñØ3ÍíŒ3Ù|~¬ ‘È¡£Ë`¨ÚºQžH¢9¶$~á»Hïx¡±S ÖMèþòÀ“ÔLƒe‰k ²o ¶i°(Œm‚5çn‘œÄí¼÷kÇÚ†¦Õ6uÉÈ‘'àrÇvèÀrûðÈÁ‹0jôªU§ŠV,ÜÑ#c 8}ƒYqM-UÍÄ»É`û÷w56_Ïòœä@0(/Ÿ™Q˜ ™.aÌ“(ƦdŸ%¯j;ñ„ÓSíÓgæ*Ól®-î§ BtÊ‘ 42AÔä}7j(j )­OEÑw.EäÊ Œ¹ý9nE€Ý ¬Z¦`L xñßl;Õˆ¨„>’]ŸDMKŠrh®R6òà2àŽõ^v§C^ €44IO;¦e^®æ‚=G<üTÊ›ËSi´oV'ìPü·û·ONŸÔ‰86âõLz7m~iÑYSfJo( §J‹ßëh·iåYˆ€'Çük– “£fH¸ÞR&ÂŽ†pL†`‰ÚÉܲYÀ)rù[ä€g:{i™ rY)“ÎÝÁ©|r¤-‘Ë…Á[ÖfÂßu |öl©Ù§ k &íö´É¤ÊÈÆsÄLt!Q2¬pP€Â†uÉ–Z½Õ‘éËâ©Þ´³î™_iƒoÿèG?ú™«În\…}Cöš÷¯‚iÃdˆpá+Á6á’gàÐNu•r!¸AÂlÿZ˜íï¥<™Wi¾âðbK‘qf‰m6Xì\éD­plëu'ÒŦҥsª®Â¹ Pl¢ž0¯HMC$$¶©f]`|ȇ„ñ¸C­ ØìM±ŒÕ~^­³£Y, l ©µq˜‰$¯hvïûÎSh— FÛw>aYÿù%½lm,t Æ&tá pDâ îQÄA»­PÍ¡- (IÜSFç®6ÀÛðƒ*}°óu³:Ѻ¥Þ[ˆeÉÂî¹…t aÂOéÍ>Î%N‡€!ZñhÅÇ å4,~¥o½ÙíèH]òËœâµÚ™ìßÈÀõ¸gš±½á‹›"ÄîÂúp¹akì+U«ÄAãJþ'K@$œÐq–§¦)N—Ár|m0ûÃH.”IÅo¥Ê.UžòÏÚä#€ƒÏTµœ%[Zy¢’ä°wŽ€ëC’Õ€pŠ—lT*†7`ñÝ5ðȳ²ò‚¡´ýœϹ٠&z!h”oQ%’&¨="Nù¦8Ü$Òîˆf“g¬—§µ ˆ øöçßÑ [G0s6r;„bŠ‹o|SQ¦  Hp! !™»ã€t“/ý¤Ï'€·É=ã™ Zê©¿JMðg‹›æ8‘ªIj//}îÏ4÷„TóbAÑCÀ² I,;zéøûÿ³‹CkkÝhên‘/r¬yÍBIJl̤±¼ç<UO÷NÏŸ¶Ã|6üsÔŒä²(îÂi=j³'ãõÛë³Ó3¤PîS]£],| Ýä9´t$:~âDåb;€˜MŽ µ¦¸ž ËS‘”¶® ý“3#VE¬GŠQ„jÜÙI§Õa˜À)[Ýš+²‰yåŒ9‹Wb©§Œd„À2ý¬®=¬Ú£ÇHëvƒ³Õ%4©w@ÛZÀ‡Ñ<ßüm-oˆ™1D=S!‘^m¢(º6‘Ò9¸š‡æ‚Ù†u¡”_GüÞM± ±®Nùæútsš†n÷Õ¾ë0üþÕµM03;8a1y {ù;ÒÁ²°[)—¨z· RetŽvhc8”v  ¡¯ên>V…xº†mã ̉ÐaH(Yp&àe~ s`v»1ûUG‘Ó´´&ª‘®Uä÷íSB‹Í[qåøHŒ&§¨”õSaÇ©4‡Aê×>WFMmV°åtÆi¦B IDATÊuxcézØQüYƒ»RÚ‘LÔhƒ¬;~ïîÄh àç^ˆ”@žkÁÐ&g•¾÷A›K §ÚÇ`ˆ ä4Û¼ íûY¢Më]„8aä¡9¦²òoÑN Z8-Á+¨H284B½™úÇlõm&³ëJiª†6_D–á™ùWOeÓOF6¨_Ú­Â R4ÈøXßx¶25ãÓGGׯ[ÏüåoüÖã§f½Ì?<™÷½ëR²3B8TMšg™oÄzZ„Â'HïÊT\6ŒÈ1é8sÛé³Ö̵—F+dÀ„ Ÿ—¾ßÖ‚æµ=Na e"u|$ªŽàz‚S~‘t×z óJƒ—ë’`ÄØQµÀ8«:x昪U1ÚdÌë 2ùá¨.†æ„c–Àa±3IËSp,Ú¾/Ž›ˆE—6«l'TSéÐÀÖ×tGïÀ—O#M¡®œ‰”w%ÛY–AŠ©9&Ê™q¾³ð”ÒGõxAOL †,* &–VG‚µ6G$HÊñ”N©ÏÒÅÖò= (ˆ6”gÒŒá.J–r癄**ØŠ9´CM膯RÓHµci³ÎúNs–§?mÒ·>T>´¸S| ‚#”ÀAvŽˆX–Ý -¾Þ£Ðˤàl"äÞ|Øw6º)ý#^CÓWMª„m…ãçæl&`dÀïCëgï{”Þ,@·à‰à½j £‡‚ò7¾ @žöãŠôN——¯L­y›I…èƒSÏÈÕÚtS3Ð*u; ’@ÃßùGÿƒŠ¹Ñ–ðf.Î-fÆ*@ÙÑgL÷Á© ´[É1!ÅPF’þwl2@>ZP6dQïšIµ¹!Îg¼·†%"‚Üô¦ÿÈx-C«ÐN(CBXMÒKñŠ#[¯È— /ÃaLêÕovñéùÃ@-ã{r|f¦.öšv™e.ÑŠ7-€¼Ô‚MwMjA x9¸3SAg.ém!ÀT5 Ë|e2ƒ\LÓÏdÊqd³{'ÃâlÔ:¼ÔÓÌžhÇ8 tárA‹±ÉÜ~òeÁ5šàB†BM(\‘›Gx4Cƒ0ä¶¼HìÞNãÿå®Õ-_Ú$‚s ã;‚ÈÃ(þ{ -ÅBo Á÷ðBs;³àH F)œ½ ¦fM»÷Ž;Jžú!$"Ó´Ìwz¦x™}¸<„Š Bž=MBºÁŒPá<£‚Z¢÷)E?FYð ‚V©Ë “´½ùtF•¿Tðè§ÌõGà=rÉÌGsŒ V‹Î(8îí%ëRNu Ÿvüú‘o|Q Ãh$J0B{ÀØ^VÚKÂÓÑrÉZÙlݦÈ< ŠÎæ’¹¼¸ËX ñ‚H9î2÷î'’Ü÷’©>ÒC!ÆIi²ýVúZ„PÑ¢’0ØCØÐ–FR‹¿ë›I/ÖMÃ{»ñø>ꛂN+Œ¼LqyÞ ¾ UÝÁ ‘5éá7ÆuTèÉ CÛÕ -o@a˜å|–©<™?b]6ˆÞ¼zyõÃ?ùã‡ÇO¿ûÅ÷ßžM‚a#xWÐL×3ËzÆẸ́΢d/½Ê£eÑ2–²éüæ ,¾“ü;J¶åbaøÊ 'Í‘mb3Ì0-0huDk¥Ò‰eîê¢4¬qr_S<œrÀxä®g:;I-‚!ê`K|«ü^ª¦D›Ô&ѯjdlP蕵Š5u*^Q¼!@ŠÍ+QNbÈî¥ë­˜ûŠjÝ2gû¢MuÔ» B+±\ƒ"š6ê–† À|Ý=¢u5jqùèqß 1¦õͳò@fêèñÍõ[‡¬(=}îOqšéki¨©SCѦ6™è¸s°Ô¾üä -âMT×M”»d'[JÇá<=ûæë¯MJhkì £žüé¿ÿwþÃ?ÿ/¾÷½?þüÑãÓǧ ±ƒÍxɶTK--J¨2CODm÷Ä+’MVé6:r:ˆB%ô(1d7ä˜2ͳ]Õ9Dú3¨€Ý#R]ph*߈5â(ÇM¬+|­Ì8PôÆá¢ Ï%'š}|©m¬mÔk@ÛqVãBç3V”ÏÍ(U2l¯w“¯Šk† H±k†eP:˜:€ÞìsdÉ~H£à@!w;ÁCb—l~›^ÌàµÁæòE¸ìR-rÒ,»®9æ64AŽw,“Ŷ*rÍ’-¸M< qóÖ3»ÜÜÎÑ£ç/_¨:íåµù9ÞL8²žA-ì“_IüBm.Ú(KÄ̈…e8¿Üš Ê`3ú9¼jœ•èJW'8¢D;Ì"Ù]Ú¶kGU‹<š™Ò94œ¦)Q—qùÌ0ÛôOƒRµë#1]´ï¼ÀZBæñzŸ‘€4«ñüJÆ„•&aýQs¦5¢É0rѵSJÜF%džüªYçcw>"˜FŽÓ ?‰aùé(#L&z_°ž#4Ñc!QóV¥E‰–\¿c}Çý²“¦LT1]” ›¨ t¥÷[;çÉs˜ÒÍ£Dé!CÓf'ø¢÷íq4)—ÏÓá]þèɉˆÇì1ì¬*VE  8Y‚â.é$YGŸCà™aráÉ w×ì#Säž)”+àsÈ1(NÝÚõ4ŸIsÕ¶q£¸oÞ^Y¹±Ç€#qîƒ&l ˆ{ùSz–¢Ñ‘žåE\ldZ®„¼Ú4̱C…3÷çQÍ©êÍËM™³Dixæ¦yòO—¯^™…Y0I |Ä+6ÒÓ`Dº &ˆç.xÇîâú•¸†7ogŒô‡ð{Ú1\GÅjK”M^¤èæ$7Òçô@R˜;‚×î4ظ°_ì¨ó?ò€4LjêÉë!)ªHß×Êzá“X]þ!ÉÑ›,øåPH\©&( ‡{aº¨¹tþɈP2±#Fó¼0)Ž0¥¼éPÓIyE6:;4þñɹÈi[3˜ðhŸrBi5ª¼¦L%-æ‚ Z«®† Ô©©7Ôsü¢9Ç™+:ªAVËæ(»lÂ$á.HdâÙà#ï–ÝË$)»0Ϧ=øiŽƒäåTCÇõáਠ…:šâ¡! DÓ%)2†Ë™fÐH½Ö8ê–‡qd£&‡5Ñ þÑIúˆE'ÁRJöoÌ·Ïìú=9 Ä ʳcp˜§csš(Ìh+¾9ŒtâX&mû#Â:ãzÞz)Lo}n“ÏE a®¶˜¦‡(°ï’ƒ—eaå,B¿NÁJhrþ8e¥Úºßf‘ÌÒqÌà LÚÄ¥=éSÅéšïy”?Àà“0Uƒɧ¥”EÞ¬Wx#ÐnŽ":q7-NæÈ'“»ãB”yÇÎf"¤ÙÖ­1 SªË5TìX6+õtšÌ:Ù±­±@ULu¢’ž€`Á GQpKmtEª®u0½ 2 Wï!qhb±@y ÉsœióElÃEkÄÂ*Š •UTõÔO-–>8==ÿ£󯜌úýïÿèበ®ÞÙÉSg~U]s+pÝ-2 æBph_2¨6Ëš¥§—UVNÀÓ6ýDŒ;Tpê Z½ÕvngàÊœ RÌCïâ‘9ûQ4îRÂWãfÄÒ¤¦"r`ð›à9³%äè• Jj¹‰k0¿¨~†ì\žGu±£qøóŽ32²¨±ó”¢chà‘ ‰KëSÄ¥ÈÞ=ï§ûð…d+r‰†’ Ïnì´¶7 08.›©Íaëòñ¢c/í\œ¹Oȳ¦ÚºÅp¬ÂứÍ*?S:ÂU*M’ ŠÀ䓘üzÁró.ÀªÖ€áë¤A8ü¯×M˜Kx`M-*"vú²¼ØD ŸFq ×vWöÏi }‚•ýçêý¸UM'8 É¥.±9Ñi÷~…ךz=PΧõu—G"ªÙ3Ð…[é‚ÞÑE6Öj!l5v‰—¯T'‚ÝΗ]Ù·À1[m È7B†“¬È‰µ(¤ÙPÓÌÈ;Ë ä 3¹Î°ÍOD’»6ù¬ "ø¼¢` x`ªÖ­ø¹¤Vã4"ÕÁ6¡m½ŒŸÓ]H›æ:rŒ˜îx¬=2$šÀ€aÖ"UA_ÉSä,ŽYÙ€=Ön£Ç1ã(¬MyÙÃ$rà Ù)³ªyÒ˜ˆ$àCƒGQk{´c´¯_é›T±4qrüúíÕË—Tj‚M§’ˆ‹ÿTV¹¬Ëèa¶$BÛ>ŠÉ€Úä4¡¨qÉ(7§\±ÊŽæõ¤dÔ‘ól,šfG9SÒÔdæûh¨gÂïÞÛ¢Ÿ¶,bšdX<4øúMŸ¶¨‡2èPð-V}ÕCßHj“ÇôÑЦ€Ø"t´´s¨ØEçÏ ÉdBÍ„ƒCL5gÖª 2WbÓF¤æi"·¾¹&z- c9)Žr>»ŒÛ=Ø]=Ešzñ8ä~!²ZfÞ1™µ£%f-\]«He%¶ºðߺö¦Èm·Ìfj <~#ØS9ötâ•ÉŒŒim¥XpoÓ!;&_í0aú ƒv„$åÃàzpÓiÂÑy„Ó‡ÆÔJ6 ¨u_${¥æ‚ F$à„éÚû¯Y¤„Æ5 :Ë G=åª&da†*A%Á ܲP¾Eø²B`É-ئv&¤F.­ààn¥þ™jzÈ7IË7o²U3 [ÅÅÅKK „FÔ|AÂHJ}ª]ÏÑ„¦Å ާFRM=ä’ZzãÚJÀ™ 8IRŽ*’ü›6ˆäí†ÂHm«·©­ºj}ÇÚ¼­†;–)÷-®ÈfîOi—Ì5ÈýÜGŠl)?]+"OeJS+üœ ‘'‡šd®Üî€Á¸ä«B0ŒD¨ €Œ ¶‘Sä8 í|OݿˬâPŒŸBk,¯ ÁË©”æ0‘&0l€O†ð]†ÎÎUxŸ.N<‰¥PAév!PS½uMxêE|­[Yaÿ䈂)¥¡Ù­à€‡Ó&92mEìh2$~ÎTTbq­¸asT MþpçWYŽo>¼»Ÿ=5´ê‡È*»½ªf.ùXvI˜`šóE~zlf…ˆ­Æ×šN¬1m/½Ü¨˜›HIÆlâ*:ÕCä3‰1šLt*l>ôCEFˆÐÑ`»ÂœLçALïQÚéƒÈYÚ£›¬ N}´ƒÓóT-< .µÃ%¨V¤ªvÜüŠ Ûr ²hÁ`RT·¨§0yrÞö| - W—¯õ,ÛM¼|ù¼¼™’^!޾ÕgMÞÙù3ï‚Øòÿ¸ïDØâÀíÞ{{s8—ÇÂ+ʰ€/TàHO‚×f¢UòǨZ§áÞ1hr©ƒ)M‰näì˜/Eí0~¦˜;$þ…ÓÒ9ÆË8x—ù®A[œ*1U{=Y¢xƒ;òÛœ„94kÏ^ÎñäQ!A¹R ¹`·pP½žÊôhŒ®Îkâ…‰¹då|j€K*$Ãë’Ck}‚¬´èÆ>’ÖÒŠó\ŸŸ7‡~ÿð¢áþ=kÏõµ ¦Ë¿Ð°t! œ¢fï‰ÀR0ňˆy÷."§0Í]HDýõ›yåÁ·Æ,Jõ©£AHÁ]Þ>Ò˜o›¹¬šñ¿œ—Šub™ú ¼f( }hi¦ÄM*bƒYH„iÈQ´'ïÍÑÒĬ ´æ¢n&8j ÇüÉv{ö8¢œÔ4X˜¡‚EÛÈËÎÅá®ôWÐ8žÃþkÞ(ô(Y¹¾éL³U䚤JafkÀX‘§‘˜öXFááA‘ÃWjv)„Z÷ào£t†0ož»aö)ÿ¶F9 n zâe îdÖÂÇÓ»—Aöµ,µì Нè( ¾˜£¨î³‚ej«ï÷J <ÖO!êÑt:LYÁå\5<»|Ž3;ð-×¶ª^V¦Z¢gf;üT6Ç4FŽôæo¥[—;Ñmq…bvö”Hl§C•Ü7¡ìòËü¦‡þUüŠ€•ÕaÓÞ¶ÚôEÔÂß¿xùʨ$ѾŒàá—cý¤iõ(ÄÚ"ìÑã/¿üÒüâ}òþ¨¶¬éBˆ[°`í_FxÔÉ!Uq.µû‰Zod+4“ qýI¯ö›É¡‘„š£ ù¨°¹²ƒ{|ÃÇ€ÐìÆý'6,~eEƒÛâËŽJÙèNq”²¨49iÌÒ>0†À#DB…#ùkï)08GæaÆÕÁ¡e0{­Þ•Šþ"ÀƒÝf}coˆVÕNPY`È=…«PDî0ì5EÖæ/FÈõ˜œlf. `Ì~gËÑ Æ.ë“=CzÀ²‡m_‰Ÿ ô"búž)­Aˆ’þ$CHYX˜JÕÓ%—'‡Ó²ø)Ø0FrÞÕÅå7Ëݼ¯“—@•ªìï–ž†ÓàPM&yn6xÍÏòãl&œ6 ©Ò&3Š¡"M¬*ƒ`à3íÚS“1œ.¿£[¹¼êg„)®jÔº¼Q´}Üþ¤ ã“'õ ç*eÛT=š‚N çOOfÇNlØzRà8½ª±Æo¾ùFÀüÙgŸ}òÉ'WËä” M>6‰®Ä)ªàÐûW5yèYLºÎMk´Þ!õ§ïzQ-ɯÜ$È\Y™P­ð"=Ës5øu†`6Ÿ]­ÑupZ b0޳F¥ F4é‰+:Q­àqN·Xi+SÓeƒ·"1J1 `©´®Ç#øE÷$]3œ&x˜()sIˆzÎO [Í[êé„9Ä«˜ŸŸok*øçöƒ™Ù¬í%—…é@î=øÁïýŽ@a ÓÔ#;$Lì2‘Ä´‚±B³í^ˆG &EVˬ^³q]Ûƒ"â{sýòâå/=úôÔfRß9î;ʘláªï5ÆrÞÆr®œiò /ú`ÞQBI „¿$iƒDÀí§¶†½>¥¾Y6aÑ–{Ó‹')ŒEÀ#;¥†˜iÌЫ‹I™ßFL¦! ¤x”ó}?uÃùG~ô{¦”KÚ¨Æý®ã\$î ÌST–9ªì&-'_3ãBÚýÖÔð>ìfÙ  ¡E@ß*Ž ­vâ–±ÉägµSEt.%T,­C¦åxº5z*¼ûÕåSF:¢²±þÌÔS×­©{ÄÔ–¯eÐÏ*ÒÄc­VÇ:•¨ŒF€ÙîCÎXƒj$½©9ÁŒE³Ñ伦Û×TQëo ÒVoÎÐ’\XðGŠx ¿k©WBE´ljL}¨c;‘Ò>Ã~Ÿ-»×& –Š‘ñÂ5„8šÎ’#Þvá'$êõHïÐ ® ²’±˜¡õƒLÚ£™ƒ©.®®´[íåMi{B¼0{B¶htÁ—¡ 5ñ’6…ô.[Mƒ„=u­Ü÷gíx¨¥g3±ÂFà&r²^OW ¿0ÒòA%‡F—òwÐLÂÀ–1 ð®-ùã…År6=ŠãhmI44:ñ'Í­Ý?;9ÿÓ?ù÷§g?ùÖ§>´úøØ2‚2·{àñ`2³uÞj¹V ­;—©X6Ytм_\ ËJi{Y§¯%BK àŽÎÄ4”!š ñJàg&ç'÷ž´g²Gíú§zê™ë…3fÇ>ל¶.ið[cô9tÊÕ»k]±hd^>@ü­¬Æ˜T´Û¶ ¨õ¤UÓ“[¯áÍ(’DÌRFëAÖ®q´ÄÔ²Fð/ XTÊ×u gE~ØÉ8©‚»N0‹ `q½êÐV0‚~Ó<*‚_gs32ˆ+ÍÄðêwÙiÃ郇§g§ÓçÛ³€q\£aæT âmÞ(qs¶±÷¥E63ëNá6­qrvvnºHEhƒMIQ&J¶jE±;¦Ÿ~’7{ÏE¯ó1‰h^¨R$ÚêÔôóMéq[5+fà¿twHgXÕ}Ä{×jkКöaF†­]ÒîxÙŽIûTt2Ÿìã ˆXšõö(#T—ÀoêpŸ¶–?8Â5Ë#ÚTýñûf$h<ÓHר&nÍÈE@®" *‡ösùêR‡NtÚA, BŽ\¼|iµ¾NÓ&föJ!iH/’;Í-⟰àU\àê¾úhbýïŬ±ÀbW§z¶'šm:•ô½>ÛL¤]^¾|ï@©7W¯.^¼ éˇ&%:£Ã‡Dâ·åIF†Ó˜Ù@Ij„E¤Ì;‡évæ5Ê«ÉååÊywcö¡n)5tÖ ÈGâòúÊòºªÒÝ\”D’d¹*õº¦:{›æÈ¢ïòX¿ Z/×*½#-€™4µr'ËÈ»iãneryá\ØO—f;¦ÓS™kOèíD¸ñHz’½Wñ·ÚÉÁ.Æ…ÉTg IDAT¦í¬„׿©zdn»ÞÔO$¡ÖIy+aŵù2¡‚¹M›.<³ø…Âóý > ŒÐà\Ž9Ì~¢aÅmñQh:³¤ˆ­qƒÜýܧò)L;“2$5ZÞ’žöR(Ó®øYnñDŸ¨%Úl8ƒ|ë•/¡F‰éJY/&ß…¹¬=IÞ¨ Ë”C›ÒÑYt•Ë"3C|t/=ẕKT9¶{Òîí¦É!X†ªà ŠaKƒ‡vs4…¶=ã³5ÊtÇ8 #NºÒ»ÉW<þ˜ŒsUEèN-s¬wþ€su¦3²?-¼‚ªË·ÁÍ‘WêÔh^J¦#KÔë²Pi/ã€m§S㥠^~µ09ÚW)äj ÔfýD¶KæˆîÐ`åxêÎÂ_-Ú– rJk§ï®¼‹÷+s]äJ™ÆÖ¼s’>_7n}«ƒdÁOHw —„|ë$Ù ÐÊ<º±Ê´IÏ$µ÷Õ&V“âèY¾ÜC:9‹y\¨¤µCú¥ê¬™ÂûAÍÏןB(«ev]:U ÷~Çgn뺩"»íû¢ZsÛ$þf_˜KŠ5(oæÃzX„ã°—øñy›”©QP¬“L9z$?‡…X£nu×lLEÑê¬Î®ß¿»vœ¨föò›_Ùë‹Çö’œoH>ºð}D3™¯¯ ¬ÆÚ7iÓî –Ý•8’xsÇ~F†=ËQ{ÁÚÇ‚FÝÒæ¤"¡µ Sïµ92Ïò„Ð(^fÑJ¡ÜûxXj °9F™êQWÕMãˆf¬¶þ¥*´Î5P®A/˜[±7§í´.Uk®ú šó*÷­n‰h®Ù™³ØêÀ dÚs‘Š‹`§mˆtçuxQFA}潟éÅ1!Ð ñ1€­Hq2Iz»{ˉ(!¯~õšÎÚ½4€ãÿ•õÌ¢•Vä® Þ‡6!ì‘*$Ônv©Q€ÿ§`™hðK‰|Êfdž¶Ùß–ä¼›†Jud_Ÿ:Q#`@ ³®±‚ÀTÌÀ°žÿÁ·´v•Wžõ—gOÏ 4!Þúµz¤w€ Eܦ¦e3#õ-…X“¸Ó&Ì.9pªQ1`ÌÃqmí r[¦ç§AîRdw 9OZ@™ñ딃˜½ÚþQr¼ãÂOwµ++G‚`²áñN³«ÝH†×©Åˆ5è¥|!•• ·-¥"ªl2î”Rª¥ 33öÔM·ÍM&™†Ä„O œØª›#@hæ¡^aÏ»wg'm2~ñò¥}~Æ™BS¡kTõ5½Y‡•†[uþÉþ±@´Hy²àç[²`¸s »†¯“ K]!dC€Þ¿½zõÂrBmê¬TŠX6ôb+9N¯cÌ+T5 ÁÎ+Ó±>{؉F¨î$/"À^8pn’iö°5Þ%ñðc6ú4½÷Žú ÷vij&NÁ„›š-ã†?âÕ¢Ô4“3ÑŽ’­Ï’³*¦pd˜Ï!ª•¾ŸCù= IH…D~ÆÈ¶ÎÈ;4$àg Øˆ|—ô$ÛéíPÈ_>çoDIÂÀˆÝÔªÚLjd[XÀ¯4އ1Ð(¬P—ŽJ«Õ¯ÑMVØd-E5…ŽH¿xL!Ú*P ?æ`¢^´Àð#“9ó_çwªÐ%XѼ‡Îdî"~Rk–M78ctC¹œÓ=L׳V>PµGÃàp}*ÌÍÂg®ô´wŽðÐÐvuL½»Úíh’U^àgMã^Å ÞgHDä! £ˆ.6“ÆBaMçƒl)ˆWìA¬¢åBaËì,Êl6FåªIØÓdTëeÏEKÛP›ÇÑ æ•<*1‚-¢5F8 a[È¥DZéT=´ÃÑ8µD_8å’‰Ђgqè<6si£ËÒªNîìæ?]21ë.M×±0‘ºŸjYæFÃЪtí ƒ.€,6ðkć*ÏÉòÎï®ì&s>ƒHÉ2œ6M5­«Þ¼ÿèüÙÿÛûô£³ßú­ßzñâêôü™ L‘Ú4É lwÍ|2=’?¼c­~JZq§¾°OäM¤r‚»ß™dÒ{ù ‰§A…Ó±Õ#Èô“4¾ùæë%†”¢/ *p×]nx ù +1æÑÂ?“a¶Øî‘.¨¢AðÁ1¨BÂdªpÑž<‰ådXêÅò].Ä{*/`:ósÝ—.›×&'0§)Y¹êmÙY-ïÐ×ãã3}¶ú#‚VÂú…ìîwþñÿH[RjšC„½É%ºaÍUÔ0ã¡‚Îht¶ïþêÅ/MV½y}qóè¤Óf¬¹\½º¾xþõ/~j±eá›÷ß:¾ÿöåÅë/Þ¾ýæáëkNéýÃO?¼{‘45d}Þ˜–zLNy+ƒe¤$k%Ây€°W_ý ŽsÑfšÕFXL“_C’c;¶4í¶m+‚— ¡ 8«W};Éo»„ ÀÔBm69»©¿Q@ZO€keE^P© äj´"|œnï#=½÷Ô¼œ†1£/7GSÿ´qݵ(sK”´ù bªöÆ€= T®__Rót·u&nf èÑût±øÞÿ®oñ­’yËÎ8ó­‰ °<~¼ }rb•‘µ|©2¾¦—«§™É$Ï¡Êé#¼|#‡ñœ&B©PDÜžÖfI’iQÅšj0à#D~Ê‚Œ6–c²Ö«5‚,äqix}²íÁ‹÷~Yy«›F­ÊܾL "vòöÚùj™¥n¢üdÞðƒflðÎfY „Ä(©Ë—/Y”ðŽ—¯DD¢P‘‹SP71{jÿ„zÇOÕÏáhå"‘ñïdË•¸Ã¯ êÞÌà’R3Ñûõ|8o 9ÿP\ŽB˜Oëmz!(Z YVT§^G²Žfñ{FCè`V 1RðÝiœ¯9«>_ïö”»ðIÎ(âÙˆÅæT6e²Ç³È¥þ…YvÖ†Öª÷³eó¾íd&WˆÃ¥Ó"^ÍJCüñgŸÿüïþÒ¶ùoÿ¿4®|üàÃë÷­ËVµ…ª9‡3¿|Dày-MS19#ÁKD{{¢8 >1XN†½pV{‘ùÆÔ‰(ßf€íï¬æc\eJz5‰à²"9©;I!TuÁ\^‡-uî?/\L£™j™‰wß} ›¿Mx¯×i”ȸjøYàÓn ä±Õ‚*uE†Ø~ýM}§w»¬šx—¬9¯üSGùœ\µÍq$P=‚gé(˜}©u ,kœý¦ú¡¦I jã‰L‰ /Te‰ B¸|²?'æ6§s«#Á”&æ²®b#ß'¶%´%KÇY1-J¢ê¨I•0ÉR°å";ºb*úQåÐÔ«Oé‡m9š²ÐÇ8ÃÖ2ÙFûŸà÷m3bêú&ò7¦Ÿ4\ÙD›¦2nÓœ^¿ï`L+nÚf‚`Ì#ÅÔãÜc f9Á0oƒRF© ”-‰¢ h²+Ü¢<=.Qc*뵯kBùq,9øÑàþúúwW¯mPÉårˆhÖ¾ôª5Î6¶R"¶¦Í•1Xf‚HÝôXHùûJÐ…Ì U¶s„ôzY}гyõnA'r ¹yÃlGÉ©€®…¤ÄÈxrY|E‡­{Osú»÷£õЗšihn~6dÏÌYÅL“N3:YØ0Èw‰®PBÍH’ùüù œ|ôÑ3îQÄÛ!Kú¼‡½{ËH‹œÐ¬%2c†—G˜ɋےšc“škUãÈ ÙZ&}1”¸«F@"»)ú'e™˜;]õÕÏÆ/Ö=iŸ*’O&½Ê}ê阰R¾Ð;ލu¼n¼ Ïo¯ßŬÊ|õøÄÛ ŽU{M¦Ù§©1k¶——¿$]‡1(©¥ öúÍ?éÓ^äöàŸüþïq4HTM¦3£4WBô›3’Ÿ†9?âŒÐi[ô0-Ê‹šáÇŸ~ÛÞ‹o~!V¸¼xŽ=bxõâ›ï}ë»?yùúúþ‹ÇoŽ.¿º>ùôÛW¯?{xqòÑ·bì}cYwRã`±Òب‹j#A M?¤ff[wØxL²;Þ5ç˜z‰wˆÉ·YÅ™xqÛ€Ú÷õ’hh&L]l!_kY!DmP»gcR‹B-‹G[mÏN†…ß«—ž‚tw)»WŒþ8’P/€_³/¿y ghµˆ`ùšÂ‚Þ„á¹¥™d7(Wo¦Wv1£J-ƒjçBòo¹Þù¿ ý©ü‹]t:þZF=4Â]zÊ]§LCYæ†$GÚ†äMÀt©~ÄîÎxüI«ý§´£p×0òôé3u"; *›ÜáVÝ£9,zxÔf3ui5â(½`›G9¯KÊ:Äp™¹§'=ŸÃã ç@Ú÷oOÏÎØPsó³s+EÚ‰„ÜÇ…æ¯ÔÈ-’PqÓ,8¾Ô§Œƒr'åó§OY©ªwßó,è7é®,Tò å§ã¥ "5:³À×76ÞÛŠ§^Í­³”ᣆø|Ž*²òAÉè*Àn¾‡§E¼üÍqä5È¡kÚ1H€Y[°)êœ6X6€¢ö#óíF€àÕ;ZH†Î ®Fžd>, ã&+„õSð„ xµÛ UfÄNþÆŠˆ!ËmV F¤¡¢ .rçÁW¬¹Ê×2†i+ã÷ê«zwîFkH¾Öe.Œòš×ÜÏGΫ6‘ýƒü®€­ž=WUøèUQÄq†",ˆÖ,’ÝÄÕf§ Pzçk »ã¿{ídôÇ_嬛wg–(?üúç?»ÿîúòÅ7_¿yþ½ÏÎî]}sþì³GÏ>zqõ³×¯¾zýÍ‹ËlË‹9gÏ>2ÂuB+jpK5‰d”DÖé~6c¢_>1Ý ‹tŒ·‘¿Ò‘f„9ÃåiÞF¬d:<7ÈÁ“iÊ  eáQ©òا!÷¸ü–€íÄ~Že0Ä{gíæÉ"eºï%íR½MUÑÔÚôaùÉæ‚É"'LQÒâ}cÐzE¿À0–Až÷Q—Ή:s&+Þvª/ÊB'ÌÃWNM&ú‰à1ÁÀAG˜9 ^3d ªXûˆ!ïyK›+åâôø2aãF1‰®šM«ËÏ ŸjŠ{‰ßÑç‰,†æ®aõ±gî‚ SÌLûð¢ÏЬ‹IÝØʧe`¶ð—2«ÝEäFöÍ<íKTj¼é¥V4,ëDü4µàŽwwYõ†¶‰(ia.4T€§˜ƒ¶ß½ÿ–Œƒ–Ù¬ÍÂÊL!G‚d/g|Q#~3«Ž.`ÌïG’|w–@²&´=…èyüÌ­tÝ '2R…ÝémôF,®­q3)qÉ€YïøÐƒ’M`PuÙöaÀ¦T<žÛ#ÓHÓy6Ô˜)®Õ—¾W¿Äp"x|‡„¿x¥.x#„À[ôêpwÛH=B0ÚX)€R÷©‡h“Vø`Í÷©”9^v¢ŽÇ'Oþê/þ”ù~ï×ÿ~ÂÓBOÎŒÉeå(àŒcÜ+øCÕŠŽá£)I.½ÀÔNrÑ1H:!" ŒF×î³³i»ð$ë¹²ŠœgWZœþž å+"³¼ÛHAµÙàhéœr aÔŸÉÍØÊçºlœˆ$‘âÈ[$B]~®=ÃÉ®¹ŸèðS¯Æ†F¹k’4ž 3›§O­zw$„Ùb+à &ŠbT@ÈÜAô Ͱ°ÐxGg Ð qÁ¸à„D])r–q˜êL.¾xù¢°¯‚T9_‚Ÿ“÷5_µ4‚Vë´ 9°•gÈ;ûh‹ñ‰ÓágòÆSU¸¦:•€ñ(ÎØ³Oy#¤ë°¹P¦'Ó#nÐþz ÀÜ o®¢ÒÄ¡à]ËZSi°ŠˆáŽYô(;¶@=þK‡yR7íçæÄc©rwº@îäÉCZùºöš™Ç惣‹‹W0/€eîÅ`ýy4ä¹÷~"< —ùXƒ‡päŒmV’EˆÂ8S` w&) ü‘YäK¢cT8ʽt”Ãkƒ¸ ÁdsQºî.@37‘¬æ¡êV&M,9±²_%u: Í@úé¸8¾µ…ËY;á åì q{Ýoú_[àA¹V‰„€§ÝI`ÜÅè÷/ áoþ€Xtĺ“æ}R?iuÁÙ—­//;Kêˆä0ÞSÎ*²>;HbÜÞp$³„œßpV ê â®þ]ê25…`H8IÔXë'z"·ûµ9tAîì}eâ3Ï¡‹™¿iwžQ¢Ew¹Ò` )(®'·ŽÀsŒ™%°Hß6`zxùÒ@JK¤<±ä÷¾üÎ_ÿù8í£4>d'ðüß|õóGç¯?ùü¿~r|tïêÕëGÇ\‹á+Í´÷":ÒÊ/_¾€“ ð¬^4l«0R3 õ¡$År:<³?R0& 9EÆ×ç2X ¦K:ŠÀCk£ËŽLHÔ"º“˜Æˆ)m•“ãPÛF3Y¿ŠÚ†°¶Zà ÏZÿb›.õÐ@zª¬G¦Wš0&£Œá¡“Ž?ô54Ž"-ÔäÎ’IvvÿÚIîÓ+L#5o€Õìñího«SD¥ªXçϵ÷]š(©×$I¡¡²ˆ«*fêx4xªìt”{†TŒÜñ¾QYÄÏ[c0ef#ÆœUžÚ7ÚÈS” CnÞ8û6„Í$¼%šØ±[•û ^½Â2†§”Ÿø` =páç-?«x=ĶöæR]À‡þ%ÿaAúÜA|o|Ù©®ËЏþ€Ð(ÚqÓÈó‚™=džž{wÕzüðsÀ?[%ѯàrQÅ·µìXPíc´Ù€´·':ÔÞotI2³A*S]ò‡òm£°¦n#RTŠ+”Á¯K›/½ÝÕ`JˆHÁC¾`ÒYÀкgÙ‡õÐvÕìÎŒìj>ÚSpR 1ò×Â!i£á‡fþ` H8 moH"b²Å,9úW $Š8Êv‹ãìÞ#í% !Q|.é~6¯—G0\¶Äs?ÛCµÙ „"Z´q˜¢1˜“Uá`Ÿ– C2y£wá”9¶Q(gTSoþ*Žf6NÎЖØ]¨ãÔE*ÒòÜÙÝO1“èF‰Ìe¾m/šÂ,¡-`¨À+è®^?‘¶9”|ªI¹©Õò÷I—Ѱ0€Is ‘Jðí©„» °æ«.+‰îjñÈÝåQ­l‚¯¿þÚ«ú”Ù”ÞÉž‚QKŒàqI»&iïÎ ú¤!‰ ÷M¨G>.=ÚK©ž%o½‚;º‰ ð]dëžãñHOñàsŒMíEº|³Ò·Ì!—³4ãØ„ø¼ÉËDüÍ|KžÑeqäR…»@‡H¹9¥èp[ôÚ>¦ÖoœËwröw?þ«ã“³_ûò{ù'ÿáæüõ§¿öù»Ï^_\]ø¶ÙÉÍçï³û¯;ôöÆË„ê¢ TòûÐBŽÿMžÑ’¨³¦D¦S»žo{r‘¼ê¬½xõRÓ™V÷ær¶Ž²x‡–I‹è’eäîò§Ó¥µO­µæ >L0Ôš© h`úv×ÉôÑÓ¡3‘J¸«}¯Ío$¬ÁÏËÆjA.º×Ù`\CªÝ5§øxCQÖ´œB¶®,´›Ht“³•¢*w2a4¡i¢²ÝÇ1ù68ç Àe!Ÿí.ˆ?àïÚŠJ¾Pª2Å?RËÁ+¾=´$ ÝaFs±Ócl]o ]ÑL[X€Ûw¥’HmkDwÔôAg¦GvHDÇfgs7J\°©‘²¨X¼¢,àêÒcÍ`Wz¨‚¡|ð_ýwŸ}û ê£[ðp¢*éÙd&ȯ½šõ(]cßÐx#‹úþÊ SPq4p «n02Uçg¢7 ëz$€PãàéÒS‰a…“ªócÊ&6F$¨¦€Ÿ™)](á¼T? Y›‘)Mºtú™"Ÿ©CšÐ‡¡šì=T‹*ÇÞ—6eÕ²M^üÄøJ•]&%ù©oZ©»1øëÎ@&º¥Qí¨D—§È›±é„/¾øâo~ôCµë½¾õìÙìqžfÓNÊn‡„ŠçÁÂѳÔÞe"…îhF‰»Ÿ`\ëX+‚IC‘Á ðŸ%ÊÎ/y(+xÂéç—¹ŸºU¨'T¹(K“+¯ã)ñƒ鎘[òZmq@RëÂø ä$#*¹¸²¥š7Ÿ=|3ˆÑuÙBä†~9•ÕÍ'ÜÚ>#ÛÓ‘ IDATRK*±Àïš;ù»TÍZGO£ÃoË/Ó‡£‡­’Ò`ÙÛÙÓsãwû%À ’œÄYìXË?2Í ð©qa¤ù¾È²]h†ÅCÞJoYxÿ¡Y+i™xT_ÊZÜtô‚LÍ&´öeö¶ûƒöµ$äÓÓfÇOÒIà[ûT”)*)Ýžw:ýDª0E¶Ì*(g„в†Lrc…>ùXã‚VÙ-EX~þüóÏÁ¬Ù(«—Ÿ0øG½,‹zÚ®"Bm©®™!‹zÒ\"J¹kŸ¦»¾òMzQu. 4O QC¨dúÊ8=òs®Z¢H!(7•æÊ°¼È‘³÷;î[¨6~0^—^Mz«A‡EhŒð/ÿ¾»o2©JUýŸb“»Í\~. #ðÓÂÕ¾ü^J`軓‡á ®s‰‰ñ覗ɯk#6öá"E ¨3b åíT ™=“Ì# ,ÁÅŒNÞNíBxÿØ”£3¡Dñ.\ðô³ï#MW;o4+uùò•y ¶‡8V[Dþƒ?øÁïyP³‚È„» 2el/kd§´Iªš)gNQ )šŸdÒëÔLôYŸ˜&}”I@»l68ùò7^ÿô/þæ/þõoþÃÿþèü‹ÿôß1š‹›ã{oDV>@Êï{ša»D=ÖÁÏÄõP²c©ìžËB³ª]~ªnöÁZŒ(cªÃœ w¬cÜEŒfú’ ö!4£ö-î.r ŠÙÆC:´³-û%lI­éP}†½J-vnJ*oBƒ¿úÓ”ÖÊÇeµè¿+“*R•¦0Bãl?_~ÕRÀ\ä'¾ÍmÕ¯¤xd¶ _ƒB˜BÑ6MËfâã'Z´ÿW­$¯DΑ*sZ:Û‹ì Àt€fc&ðæ{€©EÛ…–$Öñ&ÕâS±¶š*å²SµI‹ˆêQdb‡!ÉOó:úY:‚Ïäž`3ÁŽ“Czl¬5‘'gðg Z/JÆ`“¤JÙ‹èð)|¤NŸí§›éÖ \ü(N|wü¤q–Ù4!l¤'˜Éø±Ó ’fƒB: ¹ø§"òçsSgª¬†³$h8U_•®•B­)fI`Ð3zÌýU·«)ü,TE‚¡Ö_´YÆî;jJ s)"Í(qIÑ´wö‚° &JšÜ–cŒ¤ˆéa=G ŽjÑßõo¶iÚ:ÑpúmøÃ´çÒ3ÈêƒKŠx®ÓÓÕBµd@¢Fw5æ^ HŒáªjÄò¦É=ÒŠñT7ðáó"_¿z~ñòÅÓO¿ãû_6HÙìÌäóŒªÓCG3Îp:ŠH¼.m:V~‚ßV<ÒÎTP%_B¥ &£ö`7–õ‹zeîF†Öë³”ø™¨k‚|a[«?V³Z¾àÒ‘ ሣµòÁ¹`¨Ò^>Ó]‡†A¸í€|#ð\*ÔŽ?4ûHvö\œ§zU¢=.ºdÍŠüQ fÚÐ4X¤Do옹!ÉD—ÿ‹räËéñ-_jÇ‚G*#P joNkœaÒ±¡£UKN·W’(’8+ÀЍ£`{pNN¸0´µPÁ3XWv«ÔNÒ4øÔÚ3q„ˆq H¦ÝYw-ï!§\nÉZ9âKJLJÅH#';äC)‹\x„rC²?ph§%W‹¾ÌrLˆÙär!YóXŽülÁ+I"J»¯á'%ÁMë µP²äüª¢ÉTuBÀ”HÁà£HqâαP¥j:ÅÈ`x ýj¥Ô‚1¼­_iÇŽòêm ¬–4œ¢~'Æì¼Ž÷2를ª'¦TjëÚ|“‚®d2QÁ0S  Ð8AèÊ™$h#LDÒþðË·ŒQ³ç² ƔֱG­‹Ùã”RøI ö¦Â{®ÈN‡¨1Þh¥Oq l(¨ÏòÅ…^g¹Ïƒwý¥ñð—9ËŽt !La¸¶Df>%À³Š@¢ˆ8fSˆ»ëDžž©èëo¾Ê»±IS㌱K $ ÓlÀïÿþïŽDjÆSwãþ„jƨÑ?4Å{7£¢·–¸'é]ïâ-Wìܤӧ>ŸnPŽ!uÊ«ëןçK{&œ†ýÉ·ýÕóW¯~òóã³'OíïŸ=ýò¸ûúlÛ¸­u:&í6¸iÖ¢r\!&KÍDL®ÁѵLt‰j*Íò¶åÈTØOl'J ƒÉ7[ß’™ Rò1«JÁ•i3æ„)Qµî «èòS&œbÖm¼LÖ0³©^Œe@ð¸¿+²+KZƒaÕ†/ÏÕF<Æ]O5<Ýg­XÏ›PUÛ‘`Í{fÃ9qó#"Œ`Vù[5èiŠHÈFL}IVF?qY1²¤íšc’ÈÕt¦ «ï¶jC\#œzz~€‰Ó¤·lfˆ¢—a Û fÈıé'ê¥pÔ2]TgN­·^ `6Á$À­7Ì…’ñ¿r§6Y$ËÜ6jäzÚ\©vWRË’ëbq¬kÇI/“‰ž_ÇZjúödA`j\Ï×Zö$ØÝ 6Ó%Xî%’ÙÂÞºÇEÒ6ÜÊßN‰›w‚!¢Ã÷Áb~4¬W¾ðZSÆÁ曀usÓèÒ)§¾³dèç’êUh‚‚\3šfȤ¦âèœJþÖ[SšYpeÕ‚NoŽþñÿ•eÉž‚€Œõ“¢À_½6­ˆ!ó1‹vŒä6Ĥ5Õ0H»&ãçë+kÖ}b•nDòõ_,YäT†fƒDžáèÕ‹WLVóÆ$Q/ÏqLü'5àÕúTª·ƒíÁþáðƒnU£‰‰ T•¯¯½dØ+£^žÞPÑÆåï…ju>_úf³¹ñ—/4{?Ó9o'OÚê$¾;}úôÑã“‹«w÷_ýôý“£“O¾ûË‹^óWo¿±"þæÞ3‡ª±?Ví܇|Ûî--Ÿ[j©°±)³¿™£3ÆèÅË®z+Š ûÅ/~æpÛ41 uiqpÄWG¸ ÆO¶.J“#JçØÑP8%,&ÈÕ`iÜÁ©:µ.¼§àý”@ZÔ·ë­}i7 &µ¹ ÉPBžRè¯"†¯ø ç×ëF¼â”¨µšÁFÖ–âÝî ±;‡gg %x+€ÙÉD[UÆXó5E— ¢SJ3À ÝÓ"ˆƒG‹æ!ÏS\ßi¹"$À¹-xÐ9½NóÞžÇiŽØÊ· È£Ë^ÅòËÕ”€†antç8!‡9ÁêÒfŠ‹-æ#fAVÁ°E€WÂÓ»î¼t*E»vAH~Yÿn0ìgèü/œò4"î ¡zSú ¾Q|»`ÝþóŸe´óå0!r¬¨ð”kR_Ûq¦ÃX3cõaÓ.HYq9<º"8S£êl³õ“ 1k2Wš¸Ä FËFb*‡5«'ôÛ™o ·¢¼ùÈ?ÍŒÞÍÊ,8UÈOÓ--™®t:Õ©%åŒã6쾸¸ôN’OgÀ­Íãkæ 7ŠR5È[ƽ`#áÄOí¤ æùÎþáŒv,ÓªC6õyÈ€Y¼ áZ‘»Æ%Œâ~¢Ê®^ÈÌ#?ÍVxªÁâ­þi„‰‘Ó“Ç<çÙãÿÏÿõÇçŸ|N¼ÏÎÏ®ßò§Üô” 'ºi‘£.5Î0yIµÞ„*cße!_<ÓŠ«ÑQ“½.?— z\+ðeJ°Ð<ŸqZncqO]jwÁ‰¶-ÈÈ¥eþJ;sP-—¬Ï`Æh&bÂ1>%+îØD~ GòÒzǪiYyb‡J¬à®.€èd½xù œ#ĸh/½Úp¤(·¬FŠFªðH>¬—¾à‘C,X#&ùÕ!`Á/™E™ œ%*9ةҹtð0€÷k͸¥–K¿$ãŸó§Ï&T¸yúÑÇ D­èQ;p@P¶Ã¯¸"pÈA{”£œd£¢d(ÊÉþ SäG;£Ó!^ÚгüŽ£þúGù—?üáó/tÌßýîw5-¯Ë²âbMìÍ1žëÿ)ËôÅ–`LHS‹/ô:³:Ùªí uÐàÐ-qláѤ‹wã6¡BYâÙ¦“%$Ò[IâNÁ$Ð7VXþá ª·âMÏn–œÏ™æ†/¤*U¸<'E©Ã°:.âøñN€Gby$¢v'X˜'â#T¨¥Aó%Þœ•@à m½t_KŠ©îcçŠû Ò%at³m©P)+˜í€5²=@²…Á3¨20~R¶º m%0EàJ©EÀÒ–8ÔFǺ~X8ì—õhLnæ,õÛw?ûÙÏ4¬¡WLŒZþÊØ’Åj>Í&l-êc[ËciNО#C°¯æKÀöæÒÄU6|sßÛåßúôã×W—¨?;7€éó—Îò3ÂÒ¡ålÅQó:΃ÿõŸýSHmI6ŠÏ(êZr¯¦Ê8K  ¯a}_­÷ÏNšoi†© î?Ê8àC1Œ3C?ÿì;Ï¿x|òéÙ§ßyôô£Óg_>ýèÛ¾¹úp~úñýw—ùÇôöoÿã½*½]><;xznmÿôôÙ±/% –¼ô°7e˜Ó¯ýw¦xÔ’ÕÎ`ãá³gOéˆÃ¡z.eºìÄ>®žð¤!–ŸHYãzþ =™øýûIDý õY·ß,1á1ª¶^ܰ4kNÛž…tÉûw652VÝÛ‚ßPUü ËKOcÙк¢>7‘òkÀfSf ‘@q¡::H\LÑ^”Ûu1ç]N'd`{÷D¼»×£®¯¨–í™úR9?f†Ó&zækÞâq§_bJH S.dð)xtm“`Ù.R­®c°(q.säpûãnìOŸ6œãšQÒlœ©‚­ôåJX㦡BÉ–ÕˆPMÚšOO4#c=ÍT›PHè¬qIÕߌæ–w€‡Ê¼6‘ìÁ˜ÀjÔÃÁqça“ØÑã…)¬A¨Þ/ž¿|ù‚m`›¡ ùÿùŸý¤`ŒH´TŽIEÇ'PgÕà>_>«`|QìÎáaOçª"Z4s…‘¬t˜:h–Lð–{ÎÏŸÚx$‘1i“‰3/³žÌÅ.›½ Jt>14GyM”HÂÞ£3{×Yk^X‘oË u”?Š3\Füľ\Ií‘$›¿üR1kQ…ü……øÎÂÉøHUzA‰¤pYžÍ'Ú‚*˜¢‚#ŠLWÍrAªãå‹çÏžúL[ž£ÁþýQ1ërÃ5£€qÀ–zå¬%æYG)3Z›ÁíEÎyÙÒÍý“£÷×G§öGÿòË¿÷›GO½~zöäÁ,ÔÕ<±‰àáH#"ô®]ˇak×Z)N]–dj‚*B["Éé7f‹»FŒü+{ÜR”Žôû÷Ÿ<ûˆWüÉOJ¦9”‚?Np&p$ºç0ùÅÍ-@«ÞѾXÎ".‰TâC¿„8 §‡Êèk¤2ú½¾8‰ô|R€#šùbm;˜Q\>­{`ò²kÐVYÎx²pQ*ÌÒn{ 3îúèyÂSúøÊ£ÜÌÒ=;ÌðjÈ…ÞÙqó–f}n• †>²·f²øCêÝÎd–q HÉ:ÔN’åb®zÀ³ÝH/õí'¿4ç‘7ô­û>§£åFæ¡dª‰Ïwot@Vfk÷²©™‰ãOC%³M}Q{œóSlãùäÎã±M]Ú0Ðs ü!;ËÛ MH‘w\Õ[ÚoIˆnÙèîñ‘Nï®Hl™È`g m3±úæÑó§OÞ]<óF]øÎщÀl];ï72ޝn»E¨»›×w):÷‘ÖðEÑJ'X-4NHÞÛ‡Áä~@EÚ¦ÙEÍ+–†Hrrÿ>ÇzþìüÕ›wæÐîýÜ:}øæúíãû?þ‰?á­p·ïßyxïÕÍwwn()òö …·5Å¡QúÕÆR“Œ’ôÜ6súyzEG²×]±Ñ°\áCªDù~’3à;}ð °Ü‚`[ÏSµÕ9µÝ£5wÖ¨˜—Le#VutÏŽI0⨪ÛIW¾’À²+#_L®¡F¬ë¬<-kšf¥Yã_ŸÕ2Š¢eÖ…„šë«š3;„bÍéé)<ÈmFù£?úöãGîÏüé§OzÅmlÈõ C ‡†UÖoGcPU93u—àÖõ©Lš+Ëá xð‡Hôg­¬‹¢E¯D±Ì/fÈTºÊ\ò+—BÙr,/Õt8i háM}Ž1¾:–Ì€k÷Ò#òwCéhu!æç@.íÔ Ûvë­ŽÒÆ‹lJ TŽÁÃP †]“È?aq-¥ò˜ë0ÅŽ¹?âb™D«â-GÍŠHYÈR?œ‹› ^C±°¸òµÉn—`˜ñ¹jg ª>¾}ã廫ø»ÿË×~ò›G§‚¡EwÖmœ9ËS‘+É8Sêø7 ¾Ã(ÞA±ÜE`ðƒé•KómhPoµ;/š»Ûöç‘K%€9Ò! Q”VÌ­°âfÉ 0«\W_©f§: ¦yPåWž^ÜÜv²µ;Ì.ȸóÀ]õ”ô a¦•Œñ*ý«’†­ÝâgýVëxаèß<¬1‚¾è„99v!^j5VQoŒåÒsDôRÚÜغè qæk‰LAQ0»NÏÚÒ+ܼeÄšv½¿Ú–Ç?šu§oðH¡«Và 8ØPØ3l ´T®z›éýdÓ­$¾‘õÞ½ã>T0ÕSÂt K³PÎòS]Õ#'®24g¶³J處%7ÄGÓý ò"Añ?”]AX§+ZäÛr 镼݈M9š¤E|ûhØë^z¬±*繚¢ü„ ¦X÷FËU­€O5e1‡‰½á Z1Ô0…3£ðvÔ¥v*&Ãc2ð2¾bPeúÆDAìÐ#)5¡œ±Hˆ«ÕLYÕ \£aFÇxzhŽÒ}ž°›~ÌÒe ÿ8„ÓY%sðŽüà<Ó–}n0T š·›ödôQSjAÔ1Hê°«+DYÜù² øþéÿÒžî®f`£wJUj¥R5–ìN™Ûå•ÈžÜkÇ-©X‰M†:å7VÛÆÄÞÐQ)ž)òÞ‡Ýè…ÝlLmø˜­Ÿ¿ù¿6=D·êÃb€¦½QA´ñÒº^›ÑôΖӯZî‘Í£Ý/LÛîµëý&>fwýÍó·ç‡•³gço?þÆ7ß^»sÿ£oÜ>ýÈsÞ¼RÂ_–V›zXb&I -‘+×™ñ@~j¨AÔSpåu¦Ñ`ýS2•)¥_¥Ã²´ƒÙ.mFó`(‚ãnŸY˜0‘×6ƒõçÈx<Z±Ù¥ ÜVÌÛ¨Ø7d$â€Oé6â<€~á ½ˆrØ*—ÒŸÈ£é8l8‹&jð€g?‹Ü°ˆK•k›-üÛÚÓ-Õæ!rfZûÓ™\Έª …¹îâ±a€#‹OgƳVOJäV¦¦ï!]â¡•æ\ >ý°j•ãAwp‚×KW–½º|Bëçjð6Y>e/.‘ÚUõÚ ¬Kh›-iÌët§Õ-ˇOsu:­ãÙy©lß6äpýÇúé?õÍŸ6«;}pßAÂ0k‰ÔUqÚd0E½ð°Y\BÔ=eäœqë’J…~ÎÎô©l°8ý„Ùyš¾­B›Š!gîÙ‚P“ËP ˜ á$ ÒœNРu¨Tî9ÓæE"•¸uVvPé89m'…㲠Ⱥ+¶Ö šl=q€Ñ*} ³‹«P™©G-jpè Õ «•&Ó}zy­º¡Ü˜ºë’+ä3¬›§.à  ‡˜SvXëù¿ÿùwÎ>ûΟü3¿ø6ô7¼a¯»Mó)é «ïˆ7?W(eœØä¹—ŠPÎIõB€\†‡Z> Æ­Ä pö<ˆ¯zñÀU5¬(i ËsSf\h‰£+g!‡ÁÜR‚hFDKÑ¿<¹…3ׯ(º$1ƒ;€B€ 'øŒÅ¯˜šS¤m.H8ðFšèÙy>V‘¦Ë$-½Ò 9 þ©ZB`.±KùtüçB žq²ÌÓ‰&#—be?²\’’¥AYÔÐ;à7¥qVÞñrƦƒã¡ÔŠIá½@ dQ.ÉoüÄi¼Dee,vš9¼+HÀ³e?]ÉÖd.)cX+ Þ¼K€k>3QW“¹ù* 7Å̦gÛJsœ#ut±¡Œ»íuÀ‘èK;Ù»xa{µµáîÃX©K ‹à‡º¿,eƒ?Öd kð+¼ÝéGö³P"Z Væ öóÎÛº<Zm²øm—Õû`¥Õh(œ8ñ‹wÐߘ›@ˆ·:>¢ÉEy€VØCÝÓ|¦Í 4ƒ*…ž-‚Z Í.´\Nxè*sp•xphë'*Êø—‰KZA«F9Mfw ¬˜a±8xî­r ñY½—{QEL®¯f«oŒò×à›W‰Š:z£Q…eÔ<S®‚§ y‡JËUœó?ø‚¦>üðC«Y×nJÊîë«ÑBÎdçC£ë¿ý›¿N'^SÍþ˜µ–ëÌñSê•6SëæzÙƒûð ï»rµ]%é³\ØÎSx_„@Â_Ξ|i9⢗±6i–7Ýx{¡Þ§¼îbsn˜Ü¼vÇÓŽf¢7ïÙU˜_JýR‹BÜ„ ÈÕУþ?îc-‡Ë¢bÇç\¹zžáÛÕÞ¾3‹Oço[µ44ëºpxÊÕÌQzµ7ï1Ê^fK+‡zgNVHJ^uÒTé<˜Ÿ j\]“$Ðeøò6:À R‚…â½ü[%.<0î†ìâ,,ÒÎåÛ‰4ÍqÞç@3B ªÆŒ-¸š¦/‡[Ð)ª¤³ ‚7ñsösĉcºª¡ŸãÁˆHHl£ÈÅÁ@ÆÁ}“`Ò©inâHSV2<‰ïì)»òšÝ–aƒD+8aÿ¥Ó>Æ`vU]YnØ m•"ñqû%;À3–k—ú_|ÔÛt~— qÌDÙchíhÙ>‰äÊŸ~úé|ÔCU^WMŸoƒßUºen(Z ™mE 8RO‡ Hè¬Èi¤¬ ˆãvGw°$såè Ò´¦ ‡ú9è¼=ðÐ#´³NîxU ð(ªÆ£ùˆº€pÆëà «ÀÒÕûžúbÓÕ;àJê;< $®*`¹ÿ'Âykm! »"‡4 Òmn X‡­CÛă¢º[B;¸"€,®NœÕfƒ‘h–rÝ»&ïø<óë IDATÁéüÑ?}ýäû?óó¿ôòm·~Ο?³J' Ц®I§ŠæÑJÌÔ5QWÊ29¬f„è“×Úž@LŒ©ÕfÛIcéj^T½v§V8¨q³–É?Ò¶vcç5zÎ3T ¬ ³2…†Ü¡’ŠÒ³õ'[ïé¨)S_«4jÒ•l/ŽÓC/°b-6bh™5È*3˜±Ö ©Ö¨Ü“C+§—@ÏŒ¢/h9ªI9ig\¥'¶÷qƒéiÂ,!§*¸±‰²'ïù¡öR¬8–OÿVÛÑY«â ^g£ÞNYi ©FÜw¶• .R1MXÇ¡Éþ õ‡Åü†<ÀÖ” ¡ŸHqåßO‘„\æŠÅÓÙ Æè¶Ëbæ„ëK”¦SSå¸Ñ¯áön4VH:s >ú¹’jÛHï÷h¢æ³’ÌêV ûH4-l´îj8xcS]gê*wѵßúÍ_zåÑŒ=ÔÊÁn_¾:åîÑqJ»Ñ€DkÓîU|ÄSS!@ÿ÷ý¦×Ïž<”Ä[‰¬ôë÷žÛÊñîÍÙã/ÿøõ˧~¿zy~óø4gcC·3ÞºcOD?ÌÊaã Øu´IÜ™7`?®ô¨?‰ì%káttW«‘Ë.ÚfET“{ûövÔ\ éÙÔ2«å“ôDn6tB†‡ÄÙ[ÎØƒ÷SÎ:ÄX% w¥ô 9Ï©L]`Ôì™\ÊëX³– ‚C×Í¥°Lã„àZÅÕ0=6H–è’XÈÒ‹‰é+õòL$ˆÀH à Á¨oÃCó°mÃ,üMžÿCÿ?¦WL—pÿ¬µ@ؼâêxf²/˜K ¬€Ñ\ýVòGcóe|É9½: ¿|„ŸAÂ+ʺÀhkÏ)W "°kº¯mt³†ƒÙ¶Ð¢jo¼£ \Z¾º{|·1ü m¡cPžƒ"=›Õéÿ-ÔÊ¡~ÏË?Pø—~â!e~*ïO0š830¡KS㟠ª&%üÈdkuB+¸`Í¢6Г4Ÿ¯Un¼¶¨r4¹œ ~Õâ’C’ ¸±§aŽ0áihoœ®®D«â€þÓ’y -Îm¦ˆÐbXý¬ø‚BDs‚{IÀÍ›G¦VÓÊ1jq3Ÿ ˆÍ¸uÚµD‰ÔÓš\ŠÝõM_ÍÑcçòî¡Ü–¢}^-£?àB½2®ç`Å1YVú¡3Õ0¯~Öo˜ÈÕ­£C8“䤌}÷F¹ælÐò8WäUEÒ¹”\_Y®ëQàéW݆3Z0RÀpxB¢!lÍ?ÂÁCûåg]ÈOe`V#Á"¦¾ ©¸!t£M;håÒŒ«ä †„ÓsŸ‚ÑQœ¸¤Œ=­À¯®@.BgÃâ@¨^–“ Ü zùÂsIöCÒ·5ßfvcEHÒ#šäiB“M”^–¯´5R ¸b¥çL$Nn·›>q†ãZ‚#õ”Ý™3øÝâ¼9¥ÖRóÞµÙ®Ÿ#oø'Ž2ê.¡¾Òù9¡voŠMz5[ó2õ#yYâ_ŽU>:znNV½Ï†ÎXN£Ô¢†’\š™ëZ„^²æ\E—/ꄱMiðeÂ_8µjóò½W8/Ü[?}­öè¡@ 65MEüt+G Px¯|ͱ¤†£#Þ£‡ÏJxbË¢ÖhF¢Ò8Þ>2&‚Zi²ldÇq•çÏÏ„îò­ÿöïüäÏüìïý8IõÓÈ¡?Áƒ*¥%°µn•a®Vûü"oRgô$0Ž„ÓlÃétõ,>Á ði¹ÓÙoba0©0£•”ƒ@â 3„kÎì©ÁØö5ût0¼{ûnfÔõе[i³3¯žÑ*´rëy‰<‚Õq¾[Ü­½Ãƒ×¯ïÞc)€G #ŸÎ¾ Á8ÜöŠ‹å„8·K6sm¦zÈ:Ò ÿ˜~­¹ŸP9à¶#M—Pf‚õ̵÷*ébÀÐw8d®"`¨rçÉW€~Ó²iX®Iúg El@˜Š¦£­ziä2ì Ls—ƒ¡Oš(XzPØ¡3Z¡´þí}ëP©ÑÐø"ʃ܆¥`S6l²U‡ÑWŸa›×²wÏŸ=!Ë"±TÃz÷»«Ö§Œ­?ã·§á ²“džXÞ–ê”ì^8îa†lðe8Õ€TÁ Õ*°Ðÿìì’¶-ð”ù[ $•‚ÑP rTV;PŠ~þ€‰ŽÝ,òÇ>ÊΆ]£ôbYBJ+2ê}•”iú*DµZÓ±çú WÄ,1Aây ‚€l³>ÅC|’Ã% öZÜȆéY k°žÈ6yÞ`w"/€ýE6œ¡¥Æ#ê©Á•íLE^Ø@N¡!Raº6vVfPÊg8€26”¡bQ#Q’îü¤Îö5izw´äÕ<ëìÉ# i½F¦ñêÍ‘­®óŒÍCÅƤÝ/¯ÿÆoþ Á&¥ôêð‰P“3¥J:[òâŸ^]œÛ”…Ei¬J¡‚aéɳ§wn\û?ñ‰ûÏÏŸ6|Wp»xý…:äà·n¹í{ë¦ÅÙú»‹óGWÞz&‚¯Ï6!¯Ô­P…oc-êíNÈúWlŠï38èÆý,úI`eë·³ªrz¾:A#s%7¢Ühû, Ünñ8ó?Æà.„…ÊBÛŒŽY'½ %_i%©Mùå= ƒ–Öc¼{ç ©í¢õ”áÿÿq>™"ÕÛó‘uwÈœwqI¤äWˆ(cºÁZ¬Là&—¾×¼p⎟<ßÙA%(¾/stu¬IU %\Êšì-ÒãpÛÐÙ(¦†§² õâ™ R4f´cmgyÛt â&ïžÑ…I·¥1e2ºªLÙ d Ûpúp9 ~\L” ÀŠº&gÏÍøÝmtŸ9Ó¼|å™”yÿûdŸ$‘-}­![ÂSó3?v:Ë©&qQÐ]Å_Ü,KµZ,ÄiÌŠF7ÆGªSi*Ücžu!Œ­‰±º:ô»`z¹”e>g|&9<€é`ÙOHÿiaÆHåäÝ[*E)Û~ ÷‘Ó ©âæð–½VŸcº‚P5—Ë[ñdÿC4^14Çv£ç¤ ïÁ0¦ ðãY 1ÕŒ)´cûH‡±ÄÙe`H;"œ|iÒ8‹Òpï‡xTů &0¾~q~®míÄU b ã;·|ðù÷ÿ·oýôÏý­#Oþ~¥q%’ò‰òRD ]g?©ÚÜÛÅ ¦×¸”yg×ãÂäõˆšïaé£Â ‚"ŠBÕl_°õíœnÜI%´ÀàqöÓÿèAÊèb˜CN[}³aL(Ä':Àª{ü*æû¿õ¯üï¢+øÔŠ'ëEmHˆÔf²ÁÞ£KÇܺ‰[oy¸xew¾nbFŠÙËDb]ÈM–͸x6Õr|€v5ã¼Õh…ÿ– ÚiìÒ3‹9>áµb.ò®Â8³‘´1+¦ƒ¹”Q!•š(#1ÏåÑêØ¡ÔPšDž'q¸ ¹ßötØ@°˜[2€¢~x;H,áõÖ­Yð3l]ãiPþpFTÓÌWv0 D2†F·>ì!’`qzn^€Ô3(Nó¢ãâ“€P½7´«•ÄǰòÐ]Ï1¥nã'µ@¦~ AFŸ¥•ëL9 nYÿÖ¤ »ÍåÜoy æMÞRÌœsÉMçuÇùåmßrëUvŒÏ9zÈÜö€âÝÌëÊ` r ¿æÂÔ=|ðÅã§Ÿÿ‹?ú‰?ù§¯ß:²”Ϋ˜ofÙ ëëø]öê¿3¦â ˜ÃOÈGÍð“eß'X ¶ü+ƒÌçÎMi® ›rle&‡´´n†4àÕÒ8ÀC¢ “[ ê}ŸNá‚ç¡g úK´™gxÀ*MNTðÌ—ïÞ„Êͦ•ºQðfoBáªÞC°íŸœ`аÏû´"0ƒVfÑЫ‘Ö#DtÀw×uhú‰Ïî<Œÿh*•«CgPÄ󌡉Eó`PÙ+žg€!»QÂ%úÿj¢Boý.ªÕA¢BdØaÕ¸ÓË_&’’0}]h5OK‹°ž Îb…nÌZ~8£)y‹ÜÆQ—BõÊ5÷€üóUãk³V6a Ö f¥ÿ~B52Æš6B7¯ý†6Å€èäl emÈ:­ڷޠ͈YP BžÖ $Uì™2\JÏó® gkϤ 0üW)mP†ÒýáI.ñÖ˜j=¬§Únß :7Ç1!ÛÎÁL)ÒÑÈâ1êÙNÈb”}‡oß>}þ|\[f¨nÿo÷˜0‚:Ý@ñu&ñU˜Û¤½t4ÿ¡ö›ËûáÁd§-@$(n0¨»U2ýà•°ÐRá\"/rÎ(jHÒ¶&j3ôL6àÁ*€eÕÏîkÝÔËܦ¨­z#ûh,Îçg!J+æcF½~Lƒç*EFT {]XÁûé"¿zXã;ºsóã‡^}|U‚uïÁ‡Ož>Ó=%»´³R;梢k×ÿÖïüÖ³Ç_\yýâúoZº~öòÜ Ž€ Àp!ŸJÕüâeR7¸éknTxõ‡ÿø]ys&1»î­›¾“ã£Ë#?›¾ª7Y@º¸zåŵ«ójLR¼þæJï0$3›¥Ý¾{ÒKüïœÞ<¾wÕû º‰^Ï$—»˜nè%øÀ†JºK?“Qu¿¹Çû.={P G×c<Õ.Ž·Õ Ý֝޽ìD&¡¹s‹8Ø-UQÁ›Qù•Ѹ×ÌèÞàÑñ ¥7^!¦OÞ¾k(ÆžÁhBéc¼v“ ­øà®C‹á)Ì›orš× r½Œ[fd9Dêên¥R.É*à7M<’kùF\w/<Ê÷ƪ¾ûS/™Ýq¬xn¬š„W~Z`Ë/gb„<"êô5D9“èÊö\uÚ†düXA˜uÿüÙóY’j÷Úô’ŽkWå4®‹=ɳþj “§ZU­û:ï:öpX§š1)NÔ†ÖP«Ê-ÔodĆ^Ê¥‚€\Ý› {ÓŒXÒýzà 3¸ËÞÚ’÷;Ìç¢ðñòÜí?¸Ï¡û8§´ `Œô™Õ›·¿øü¢êôúng7Að<³;è½9¿¸öê¥÷ûéíˆI¤Ür`c¿ÂÓ(jZ,¹žç1E1‹º™ÙšdÅå?òÜ£¯:ÌsÈ«òšK "þÞØÛ+c3«H×Éûìqs akòO½>wÕcÒfëŽ\ Œ7áMøæ‹Xu·‚WšœÅY„Ÿ`=ŸÙµ7oXèжÞ3ù ŒbU²ž×/Æû ©Õ ‡’SÍ^&_KíÁL*‚gÑ*øË¬ìÓ’ % øÑ;Füôûúå ú¡™¾#Åq p£&‘f3¾V^¤a ëÍùÙõwþ‹¯|ïôôãóWϽ Ø ¿Î ?` E^«Y;iGph¾.WáZ»K%(m¶pÉ.'Ð×Ò§œ9›NŠãñšÞ»í¶‡ùuªöéÖ$ø‰÷zí…ô‰¯'¼ô\¤®šGxi Qmžå;táÆ×2EÃk½JxbéV¸ãU¤FDê‰É¯lŒˆM½`“Μ¹×Yõýï·¯^ô¿y2¢=‹²+ýT¯Bx'¿(NZ<´ŠÐ\i÷…e­sÏ!†ÜswtÞ€y73y;³ÑUƒ®‰D›ý ç\HrSD"ˆgFŸ:ÔNê¼±ëÕÅÙS^Ì_ëD.ûŠÑlEÕ 8E,M(À áùZ¦4˜§ŸñÏ„W÷õ7‰éÝç^mPÊc¿ ¡{~qÆ üLW… ~%ªc· “Ô52蘻P m?$…¹V=«wYÇÜýYE,Ðó`_ðÉÐ W¼¹‚°#2¡­G¸‹GA.Ç>Ä…M¾ÂG±4yïܲÑÂv +jf2¥‰Ø[xoé ±b_Ÿ×d¾ ¡« Á£¨LPÕ„:õP 1 ’o Ýõkú'ÒòEW•*¦ !“§pM»62–Üp 2…»Oø9:9ƒ‚¶ú µ_˜Ü™l|w²«-jQ‡CâŽxlù@Ïcqf5Q2€ÎòÁ_»3ï¾JY›GêwBAË„õb<)ÑÁRãö»Ñ°Ø:Ój~ÌGœÄ§Aœ¦¿à×;ºnß™ÌS)Ó%ë†4s~æå”¶C®6~Þ´Js@=¹Ä-P;W¢~`ÛSZ0Æ3TsçL–cÙUáÌkð* ¸íÆÄ+“„2¿ë>£¤s¹³Ç+ÌòwÛyŠÇ¿õÛÓ«¹ùø:¿o`#sk%“IŠÀœ/ÁZʲÄbëKsÖÄt"Kô¯óŸüX#séa}øÙ“gúmrà—g¯_ž?üèÕ 7.À6ðp ž2ƒé1õ"¦à%–õ$ä5<8ŠZtá Üô4ÏøYþ¹RÖj±½O5»J õ©ò÷á^pbnähÐ+.^œûl'Ý'”ÐFõžÓVpqÃâôÞ=$ÈÎ "—]pbC—–9qH¾Í+)P˜8D\aæ+M5À ’0\¼`–Ä ›hÑ¿³!ix>x8ÕㆂÐÁК®ÿ,N5+é0Ð"Í6]\Be°<…rãK©Ú¡ ç¶BK `çí‰Óò ÊÓ Y:÷6ñ½¶®Np#.¼Ñùâ¢á“K3åŒÂ߈™c æzéˆèô\3 Íð)´Ý?Ã…p¡bTº‰~«ž +ôõ"ê™|K¾^[ûéƒñìÛ³½Üi 6À˜Zêãm £@M&WÙCf¥~n5Q  žY'ènŽ#ôv8ÊÙÞø*äkõ{ ѼveWñàìÀ-ä žƒvÝÏ58¯¿âýòh]Aÿj\;ŠSÞ;ñJ©;ggO¯]·Hkue×N36wB—.Vkj¨É¡Æ(J]¹>¦Ç'Ò©°É¸Uˆtì¦Ë×j"—8#k2‚öìùs­`s¦÷/¿t³9çf'–6Ù²DO›ž±¨±fiüþÇZ5gªØÖM=ÒÕ‚Üv•KþsT¢Œ½›ÛÎÅé&ñå±F@€08°NÆ´ÕcO}üÌôzûºkÒÙÜ(%È û$KÑœÉtE—Ðçê ˆ·…d ‚C*¤4õ8BK}€eieÆ9z.ĬTç*jð0Æ5çõÎTʱe<(*kN·B†ˆÔwïÏhZdAZÒqÓQG¬Ío0À!ÁºœB=`MÀ”ZäÜþÅÀ4·½z^ßuõêùó³ý†Òö7¨VÚb ?k?±IyÙP¯†Uhf J‡bW9xsÁRzƒŠÂõ Î&TÖ*°A¢´- L²></HÄ ¯‹´t5¡YWÌÌ—£ £2°å9.ÇÛ]š_¨WLá- ±„ѽ„ ˜!ôs/a ÚhL'‚‡aÎŽèEmÖQëà w”…óQˆ)ÍNÇsNøÇS*ßÙÔwâmJvàß!RcI—ÁÛ°'†hã³€§@vÛªàWÿðüÏ_ÿÆ7n}tëî/¤ÿ¿Ô·Ì6Y·ð“Â=Î^½|¡Ó¨TˆÈ­V 'T¡°½¤Ã?û³Ü;‹ –—D`=Miå5‡Ù¶~ª7yãáØ†q]ó²$¨øÌ¤ ,Ì.ÁiEXx¡š±FT¶aKsž•ƒÛD§‹·2¸!×ÇÛ„‚Ò»-ÿ×åŃ u©\¨¼¤Õºä–9!=kî*9¯Ú%Â\Àºô{º?Hß›Rd²”À¥' GÆRà 8ðR$]­q¢90WnVìxDœl1“€c¢Y…‚)’nHÍj‡Q‡£qÏòCL{ÔÓwAÄO yUƒ ’­êL:² Oñ‡tv¨ê…)¼Ñ„þ!!Uç[¾~Ó`á´À Ì) €&]rQ±gqÙ\r Ëú­àœ§±‚«4ö!là ‘Ó$Æk’K=ý; ÷(ùéØ`b¯íJ×&‚¹û™ M±S))©lÇ£Ý „Oð ãM 5 þÆúºç†²bžéuÊ^gK·Ðܼ"Ç’>e_ yëM@âÂõßþõ¿æ[ˆOI•UÙ»GžD¹/’  e„C;¼õ#ÌÖm’)<ñîö¹›=gÏŸÝ9>qUBf(5؈n|Î&§&\lù•ûâǘ0–xУ€¾|<¶¹yÿþx=ÝÑÍ>ñ–ï–[o¶•’]‰žpݳIT°ä›«X®÷1V<̪Ò&X†4×À;4¡©„ÉpZZ ¡è¡Ÿãí̵ƒG¶ÿǸ‹\y5°„ößcÖ½Äm5S^`úUöÿÙE·;q<©-äÔmb†¦œ…½3ÅR$“¸2ÊR™×C0IuŽG8™‰¾( s;Yq™g¯»c80‰âó°¡ë˜Áþ†¸íÎüˆ°¯W‹Ã3Ý¢4–5!ð;¡¯ýºe~Òö²†«æ™}CÆXebžÍô‘·ðÀb€Èê¹oHŒ#åpÿšÇ¡D'Gœ”<"ç“8Q¹˜[ÒC=gæÃ[ºÝl ãÛ¦n»ÛdRÑÓa7X÷iAK½æz¢%.T I3Žô]ÎÅÿ#´R>½8Ö¸Ú*ã†î޲(àà`‡›ÅuI5B »o–† =ÄÏ`@Z™‹g[[þCc®j¼?NúÒ êÊŸ3² «¹„V±t€©×(ï1Ó´’ øÕƒ„ ì{%5ÇÞzƒišPÈj[a‡Aa•¯ÀzR;¿ÞKÓ¤þË©'ŒЖžQ1~QÀ°–ç‘ÝòG* À ‰ÎÉ;Çšc{“‡Œ›vô$™ÃGBù³ÐAõ*gà ³òŽÌÅ`8†0œ íѽþkÿÑ_qûPJñÁ‡ݸu·WÜ—2_?q!àÃ'ÍP#ÿF mZ1âôu$w®­éØõcPˆ–Á¾#>܃ª›Í¾³+÷ÒÇšøèZ·÷‘o$j·ÓèÈXò\8Jû‚ÛŽ§g²“î¨s£Ë{¨>A'd;_æ2ýÌËï.U¶rX|Éê)ðJï*l½írô¶X&ùM#óo°¤t!?f*ㆺØ+tl[-Ã!§û-'³Úzpw aC žÇIœ±›QUí½ç)ÎV-¶A‘;yóU×ÇxÓ‹PÄž! »ÕðVa³«ŒÿNbw[2¦ KÐ ‰ÅR£Ú(°ä Kº¨àï5 RÕãéº}-ÄÏRÌ^QÑöFÁ¥à)œ´Fe¤ôê¹$Ä3êêãl:ÉDûÏð c„Ù$‰Èà-ráAßÀ•†@V €[q8‰æ`W)ÖO jB.$"µK#H³À£ã£œÖg8ާØYT‘›D¢âjœŒì ”Ò¡ n…GaQSÀhíYTÕŽyR]Vi.¡ ÁÅÆ º0S#$j´‚ðÅ‹3bº­E“žB Æ]x"–yg.–¢²æ®:«qÀé -TÊ™Ÿ¤îdÁ¬R+‰Šór¢FÁ%5Ži§É A\ŽbŒB¥[$b`ìØh·  kkô&Ãv]´"+¼£äW?Îq;<3ÎÚÌ‘»§LQÌ78MKwݸ7Y(G¤Ûþ”ß;zöèñã/þ•‰Ç'?ù³LnýãaaV˜$cãðä…Ãv"ãgqVÈO´Ïc§ÒÕ†vǨ"Íì²g7C²&£qT½xáQÜVÎË0•Î[£¡Ÿ.©˜svçQsŽ7 Pxu›K¥¡Å69P¹‚Ÿþ« ?ÀÈgÃg½EÒÜЛ'¸¤§¸ŒÃÕÁ‘çhî`èì熅Í<0…÷,A¥j)ê‘,m¡6íäc²áyuܸS†@¸ò€¹ÉNtl@ ÿTF}’#¸¢ÌÒãìòߨ8|«ÚÄBÿ.%˜‘²F8Et…ų†+,U+üP3ø¹Ú@Ž ¨A²ðÔÄ¡’]]T~:Àã|ù÷ÓU¨tm•E¶ó33jNÅWóg„‚“ÑhoÄ/An¯B²mA&ì©kúKc%¶5çÕµ°¯ÀŽZM{`p&Ñ1‘ õK$TØY‡3…ÏRlhIðôp©P­—Ig5ˆ"¨‘rò-7j½Í¤,Afþ³ø§Ò#&øãBužd. jÄÃ8¶›cÞU*‰#êZgû®8Ê"÷Ss /àXÖ²*+i09Q °/ÂŒÛÖî–Ó:žåÈ…4 –{,»X­\[‹í®ªdåéÄ}ÙsM‰Ät5ݤM–"¤š,O®>}òä»ßûô–Ç!îÝ/k„ŸÑw¾¦Ä#FfÓ—\ƒK/}¾{Û ú´|ã†õÉ™¡®mì¾K}÷ØÀFvIYÜd´‘ïå‹nÌ{¦†@xûÈÇ{iòf"õ”Šd 9vY#C®àX S „'Ý%û¸5ÅÊœ8¹&3k½òøñ—”ŽëÕ»ˆ`>U~o}ûääÔlÃX•÷õóÊþ¬ÍD”7Î3ñ€5 „ÚPºz;>-öiÅ1’ž©ÕeÊr: »2 6ÇŠu… •ŠÜEŽ‘{ —V¯‘ÿÙUecbJôA3<öÐ7æQ:ÓR•à‡¶É±‚i·3©é žÊåš36ÀFÝÆT•ئBd–g•Ö#¡Rö€ó&[D_-A®¼qd;øTÏRøÙ”ȇTî|‚°šø‰Wg俥ð;4tÕ%VQZÃU¿ Ôg à°íדƒîº"GL7ðkÁ4ÆXT²†–;*“0Æ0ã¬c~¤ˆôj‰&ñàÖ«­‡†½™‰ô½µ•„€Zµíàœ38ÕWtŠ™8ss‡—ylÝÂ3Ç&8>ÅÄä»» |Ï$æÛPç2õˆT­°+£´‘¥îè$4|ÈtáÁÇU†/'­ž‰™¼eŠË‹”\ÕŽB<µÇS„5z˜¬^X’ R·×Óü)/ÃáHB‰í¤žC5¿¹ç¶ ¡L‡MYb¢¨ÃD1&ŽðéuzüÏ¿óùwÿï{¼rãøæ²m>‰Ð(*nŠx Ÿ˜™W rqî«£q6.•*sÒ ækëÃè¾Ü…ÛŒ:Ô>…X3`™Y(‚qÑà§J5ÎäÚŽã*£õà±WûIüTP³ÝAACçl“EP'HSˆÑìü3¡€8!jZ÷¶”‰âºm«€ý 'l ãª÷—®¢í5b^u®Iä¥Éúš)§ÁwšáØÞ Ý1a§pôVæ”1¬Ö–£÷Ì•xˆ Þ"9÷Ý(‡Tä\À~ÛœÐ%­Ôô0šqzÖÞ8³¯$ôïN8S޼3êÎq9‡2TŠ u›™´Œßà¨~nufU¹?4ǰCAÍê*0uÇËC¤TÃQÅ)ÿ2½&†öžî˃±°²…eu‘w ¢ .CéÇØ ÔüÕ‰g"ê \–\A¶q1mâùc i‚s#›,&Æ»›â›‰Ùiëbh/¥OµEÏ`ÿ:'œˆƒ•ÉÚ·ÐQ>бsp9^*á¦%¬Š·Lâ’²VP)+€0Œ«HkÛ#pâ7%HqT:ü¤dõ[ÎM0Tú¹lÃóv=½ ŒN”Vê§c¶QÒÏm¢­Ÿ1ã¬/4XÌŠÜ >›zë³!G¸¦qTŒøP.{b‘»ƒâøëÿÙïüÎ?øœLìã>z8w3ú2ÌãžXáThÁe,çô,c5þ<êßÖÄýµáüuÇ„¦¬«Xrxá¥{‰ÞÒÑÝ‹ÕI°ˆCjûè‘LZpýLGjÕ×WÖ[µº)UœÜߎMQÚ ­´Àk eR^²MIÚPÌcè‘U‘1dK¾ùH>Þz’ŽÊ˜ÖEžø(Ãëuv3œ=?{êá ½TéÒÙÙ =XÒ†=8uxlh8á㺄 ¹õ9¬¦ºYá©~Ì—ýTÒ'´‚‰ÖìŽgwvøäøóóªfl0³1„ÿ^Ñ̪&r­gÂä°u­·>4ú úöGã9Zë¯x€r0ð+WÁ€;SFè˜|&} ,3ÞÔ)9”z#¥Å }õËGÆàIÞêäU3hƒ+xh^}D%¨ó ¬zœ´ä¹y꼋A¬’‘e¬hîÆèðÎÊ<ÐýB$™!²91uyÔ.©'»’/ZÝè¹’bfQÖÏéJ%ë«jv)ÒF1ÒPæè¶ù J»M¿ØÍæ2}ÜŠ<“uáC×û&$°–>ÁÀ£ˆY˰áDÛ½GgØ8D­ðCÉÏXÝæ€§T£~7ƒ"hèæ gå{ÀM{×H„—h>€ËˆÉ•x‡M‡UKqiÅÂó¥fò7ÊY‚ÆúšÏè2ÔciÂxa.v þG6ü3ȇÉapy®WêÍû]ˉ†D ×®pà@«µˆzM¬˜³À÷¾óǯ_|ù½ï}ïô£O|¾Ñ&ƒÙ$þBj•›ÍèŽ[Jì¸h£ýL4õåq¹Cö¬Ç¡ÅK×R3V­>SþLúKn\‘1íD¬ìÍu%W‘N-³là⊼5\€ ç'0TÔ` X_I¹Ùó4|B¨ó•C±4k‰.—„©î=ŽÙ 9wGpfêLÁÀËM ]ÌàÕ›Iý‡™%G»û²Í身5ɇ¾ƒ.ÏWÇKI‰ce\ŠÐò´‚Ða ®£iÐm“Æ ¨‹Ç2¥§j­Kq$*¤’íeP9ôëšn³v @×Ðæ’n·•Ç'¬.Ü”Ð냷¯p~.Ͷ¼ú ƒldOÌh ‘›îO$ôIg—(`"<åÀŒŸ Юc¨A¶„í)h»ÑÒ૎]¸„‡ofºT?•K3¸H²ÚDW5â3$©É8=ir K{®¾g#f<þ7œEtkÍ—¾Mþž7rb,}ÌÜR+­¦,¿ð3t)5ß[®:èö«â-‚8À6Ò‰U%Èñ%zà13ïÂð3ÐqZÀð€œ€”ŠÖ¸jjE‰Æ‰âX£ÒÊs3Œòºõb×±±QsHèv•ÁZ™ (r+…³8#ãWphµ,Áóà16üЋ‚«`‚ÁN‚“-‡¢ÊåÑÅYÍÄ^¤ùÉ‘½Ú^êÙp£iß__üZ°±†Ã°a.*Ê®jwh®ÿÆßøë÷OO?ùÆ×l«²Ÿ¸õ¾¬#Yâêå÷epX´+J“Ýë>¶ A¬ 5ã™—zàœ!šγ9Ç'§DÊëIã©«‹Weäsõ§·oOO޼›àêc£ñ½Ó-'ˆ þÆËrî\¿ånT·£ô6qÕ³$föÛ Ác¸|õE‡½cΔHÚu†”¸ øÙÓ§)Ò£³ÇGGHKgØŠtüáÇ#zt|üôÙ3Yj“Q@¢¦‡Ï=,LÎ}n["ÞAE(ü¬µDO ¡Ö©¹ñàÁ¨ðé°šBfŒ‘I_=DR+¨ìÉ yåv[ùŸÎ1 ‡Ô–•ÍJ­‚nÌéŽCæ:„0IžÚ=}Ó@^+*R X UÃð£wãªCÇ*)Äm@•%1Ýð¥ñseaH.‰.D¼}ëx–nyXÁh½†Ç5M&é—,6À¬Z GéºÖ ®Ô«Î6@¸~i`fMî¶M˜ŽOm®f _g9ïÂèzë ˆò[)™†=%êiÐÁVʾ„VÎdw^ÿ!¬Ê£†ÔË7¤‰Ë¿J50à‡Zj»AÒ˜gͬ/|»¯{aáÈËa-âwVD£=¿åþ Ç ¡^Í£ú<¶Sà¬/!g„PQÜžý7óoõ˜w,d"äžR^z"Ʀ݇­a±Íø‘žý©!{/ó*+ÊF0¯Z†HæcnÁÚ5 C¨'ê2ÎvJÛ& Çt­ÁLÀï*¶Æ¿ìËÇÖ”€\…ÄÐo«å bËêM8…ZÓ5ð·/Ÿü³öOü›?wWze]ynS®80à6ž¬Œv Ùþ¸â«+Ó³7t˹Ï^œÙ<@(`€]ëèÅØ˜õ->  íþ$÷×;ø*+/ÿÎÜÝ•íUµö€A<…Ò÷Õ6MÖO´gÄ×Fj „ßYÍ ÆOÕP´€-÷˜pb>Öm¹ ·6.é}`Û§ù4AE+50o*?YPoÀ&®~”–A+èWX¾[(~Ï„À؆¼FüCäñÚ¬æß GEBt­s#ý^„¤HK8u.Lù Ì DÛY®æ’ÿÒH¦CÌX¾/¯êÉüC/ ›¨ðÍ–az4#é¡›/WÛ@A:âdni©AÝÕe@<ö<ÌO 5,°°ÊŒÕYL¤†Û, ¦hcïÄ–%Ší™j¦pWEEøx½BsqÕYOdžÊņ4 âÿhnšˆB㜰\¼îé6­yI;U:¸¢€Ì«•]…„-PìnÒÐEZ îøó}ZÖïù9îëzƒ· ¾³ÿA•Ø£1h™ à °9/e_ÒZa€sK…% =Ó˜è­àª2~· ©¡Rïì@ÚÙÕñÌ€jBhñ¥Üˆ>Þ=?{nÔ.[ˆÏPa˜Èš,®Ê`G¦ä«ò+y¤A0Ì€—+g (Q‘¨Ìí+ADÈÔEBvi¼ÞÐjNÛ‘ ô†ÕLŒéÒÞ\àúü—ÿÂ]ÕÛÁzÍ}™ÙßǡڥïeW=˜íVo’§Qª°j# ndW£ˆº±Vx8ú¥—½úz3-¹„oL›„øf·Þ¼sïöÑÉÙK_ün Z“9[&?yzíÖû¼ RþqëôäžmYn-JAÏž=~öøKÊ<}pêC†„X}¡ÈÆ´Æfj`kjsË‚S‹ÞK~wÉD˜™½ö^«™HÊ77ï“Þaò¯LéFïÑŽîžØ¢þÙ÷¾ûìÉS ¦Í"61‰$CÕŒÄc¶6c±„]ü¬Ï÷dlöécæ0x\¿ñ»¿ûÿÉïýcoý1çÄ™% öÀïÏr¯|éz|ëªgìk©o³ì Ÿ-Áµd•δ¼Íª9 `ÍiF|nÚÇ8"Yjx#呂Bž0'…FvÐ"ÎR¾pšDz–ÛöAã_ÿr—Ÿ®ÄžÖ{XÚ,ÙDЛºD1ö}~~Q70ƒ7¨‹Î-ŸöAϪ@sMÑŠ3š ¡@9‰·¦Q%W˜ÞX\›73±)E5 ç+ó~;o2³ªg˜âð;›|õæ_þáÿõO~ÿ÷ÿÜ¿ùçM½NO,MYøÉ­ ­¤À*»ÔG&ЭÒÈ>?Ås|ßÄŽ†=OAÑ•“P#ÖÚ³ƒÕ{U8’/uqL¼3;]ÉìrËðÜöP´‰@z¶xÿΤRÿù€ô –VШ‚ýù‡ŠÖÜï^å×%gÀË™f e1€iü¡…“‘¨e ËUÍ(ê˜DSmHLN×]£dò€š¼ÇOL:gPbn–¿Î¹ÏÊbAs?¥IzúgÆWγÎï?c«¤Õ÷C¥G)mäÊ2@꛸£V½Ï°§ƒ¨Ä´Ÿrú´ÆÛ`4pu”#k¼0Œ×é„ФÐ#Ø3˜Í¨ay£ý©¢¢èà‘ABñXóaqUžCxvÑ#|0ßNœ­ÙØŠr™!ñàu¶=Á5ö§ó«“Ú>ñF´+Àuzjʰ ¡®ªž6¯þœõ#£ƒ11Ç/И74AÊTÜ K:l$ á-™¢t¿†}Ť×éÉ9Ü«a5ñ¤]€ ‰ÖóJÎàô¡´Ñ Ý÷:‰…oÑÒ{ uwÛÅ1>EêÕ0¯{mD³›:Ta¡XÝzÚ”£q˜QJi¼ÎCK‚p#Å,j­õ[7õ¼—åÞ^:c}âE¦UD§mÍæ¨8!b6Ï|uö¬ÄŽ®à¡IÁ‰*`¦:®—np˜â£ÞŒ°Æ¾²7ù¬aY•3Ÿ¬¿´TO»d—[Wõú‹s t+Vs2w¨¼÷u¬™ñÄÛ}™*‚kÃL¡½{EZs Iê=•ŒkÔôI‚uä®…  •ݯ^½xví–­½on]¿ÓÓc67yêÉ×Í (€§°cx Uÿõ_ýK¨€³Ü”ꄊ–Uºƒ¶®f|ÒYÖ«’ÜÕ~#FòRß÷O]z>{2$è^ú¥·Ãê«V˜³— ··4¿„¿Ìãö]Sb“ðíîÉ=ïoñh=ÒÒ{&e÷PoïžÓ½æKF÷˜Ä« TG¼bKA»…6 èêL%ÑD‚Q­!Í0æv¡LâõÑÝcÀ^ A¿¤H³ë‚Ç÷»ÿ Q–ö¦†>úÈBg@«D=ä9Y”ùÙ ð6 <Îì·ŽkFòíoûoÿíÿü~þç嗙͎OŽíͲ4eBÆZ\•[ Ãÿ:jýªûµú9}hñOEI¥«—Ó0–‘Ìððª·ÐÍÂÈ„4=8 ïa+®6Ó ‰Âªˆ×kƒ“f¿-€5rs,lóe<¯NÎ;¼´éæÑìßïÝßœÛd×Z}Æ #prš²uÈ2Ï]Ú*(ôy¥¾®x÷ãqÞâ_µ#Êo ³ÃÙÈ íô"ª(qÁÃ$ôåÍž?Êõ‡yÕºpÚjPC#cš¨ì‰YdÒ¿óÛüa†Üc2Q‹cÔØ(ä`yòRæŒë¨ùã`t(Q¾²¡–ŸpZÀ°,\«™U÷šû†ÃAL@z ¯ÊUþÆ‹e¨ ®@q:B)—!ªÌI´@¬ì­>’Þf Ýj`Ï0HQ‡gö‡$J?åaª)ÏPqÎPœt¼ ·Y™®æÀO cH—ˆ´Æ‚ÆæÅéîåˆâeö-5% ¼m7+Çp•iÔ³¦&:å-¹‚Q™YùNTÚÄ:üpznªÖ0˜©{Kp –O-ô=*HÆ”†Ä«¾ÉýìÉgøûÿ«bþøOÝûàèÎw!KÃ!&S ª×{bwy .H¨sÌJ9 lÔ8º`Ù E,ÑÌõ¿öþ&Ä65„TakàžHòZJ:³A9cÑþ½:¨UFiؚ쵨5Ǩ~Ø?Ý›o¹•zŠU-D÷}Ä;GÇ7ï{k¯-72דÓ ØçÏÏK™lw½ùÚMnÛ`Kó Á ö §#Ǩ¯úæ¾ó ¡FMàÀ(Ñ´ÜBÁ{kèͰ~ȺÚxë[ßúÖ£G_|ó›?uÿž5+ÛGÖWZÛ05“`u·+þ¹š«†d „E‚Ý;U|Á>¾{üÿâ_ø•_þ%A!xoTzýúôôž@‰ÑÏ'Ò+`çmÞÒu6O­Ù%MŸö©@ÂÝ :ço:T&v‰ÓKŸeN»×<,©¹c”“uöX­®ãHÝS@VòŽª›úc¯UÈRÜæjÀ+«Äðä4=”á”Ý{?Öy_ÀùX˜n‰5ÀØ^ Ýzr‹"îµÕ 5>"½Äè$Äèoh(´edµä¬’øÄg!uqCx½Ëï«´$-«É"œˆinýæÉÓ§ÌçËW3é÷ÂsúrJ`š™JÖxÛâ5cQ›ɦ!9ã x·¡p6êå¢`¶àð`0¬’ÐÞ¾¥^ó…øoý½ÿúÇêë?ñÓ?{óÖÉw$}+ H`ð‰%é™AëÅ…®>Òî.½©ÉÉnG}×,\g”ƒ½,Æ­mîÉG0gIÛBÔ…wë7?n©›ž®xbÑV¢°²+¦Î Ô¨H|—þ(̰bx.@;jþeåÔcÖñéçŠ6úi¶æ’JNK–&³}J U¬{ÃÏœÂ²Âø§&ya*üB•#Œ‡¯ê„r;J§¾/j «lÈÑ``‚åJÔ‡t0Ìè_{É*W£qITúél¬pS·4µ„¸úô í‰ìRaXˆ£-H-*ƒ£pÁIV£mêš Ë«.QÜ3ýž±ÆÊ"ÄÆŒbZiBåôÈ“ŠDn÷ôPŽ tuÕySei• L·+&T©zõÚ‚Á³2  W+²Æ+ã0¤«Zõ’ÇÞÿn¯§.è’™FîtâhÃéaU¿$]Ë9P¡·†×ÿä¯þe}Ò2²¤”¯^!œŒ5¢å%—B 4fAB£ÍfV‚Èw¯·ÆˆlÐÊ“l&˜Åi¿ v™Gêtûøž/㔾kÓô‰û‚øFØ}"¼Š¸gÁ‹Ë”ÅAïópm£›³tÊ`9iAã=6ˆmájÍC¶gÏçã£óF> ¸{¥±y¿ Äd0¼3·ì©úú×?¡:òSàg"ž5X\Ö¯áGÅž|·aÄ# ÖáîŸ>€[lyrÜZâÓgOYÝdüÉÓ'º‚G:5Õ´Ô›7Ï$ƒÝF„x}«<òµ]Ff6¯×£'½;[ìÁü=kyËÒŸÈî©y‘©ÒäÉÎúnð0vY h¤-w§¢r2lóŠŽäN–Ÿâ€ù—ê8êu†a€öõÞˆSVAE A·Z“Ö œÌs‰ªµ1˜Ûa`kø0YdMCˆ¶ úI£ÚPiKŽóózEa{¨4âödê§6gt ¶e€¼uŽgDÎÅ—˜4ªÌMºÄlº;óššHÌUò‹8«:‹Ê%*ÚñIˆquºHÏl7mrTÖ>³Y4¶Pñ(b{¤kUŒS¹ªf–r£Z#²”È€Y‰%°3#ì¢P˜øêÙtCî0¢õ¾FYÛý -† «¶fÏÔO壗þ©wWot§L$´ô¨ëèD±ÒF \„6f˜g™Í·¬„¨h¤sAûé§Ÿ:»ÏŒJ XMìιA©ž^Ô0uÃ’úûÿãßý·þíçôÁ×oß9ï}§7¢RÉqõxœÃ'œ-®¼ýÊwH »ªGêIôÝèo8¸¦ÏŽ5ûpn¥ d‡ÍÈmÍÖ=ë§ðð8[toL•ûÐÐ) ¸ñ³ñpr_wçõÙ>{ÂŽþø28s÷IÊ2xØ3~Pt,cÄg—Qu#N¡oº:~bâÔÆãg“êÁO¨äL`’Žæü/‹@VRN@ 7š{‹2„uÒî ¶Ã9ëƒîžÅkùVíènA‰o£Ž¶ê‘Pv¸Š9ž"!òÄt‹Ù˜x³­žÛyþþ´*«ÀÐÚ6ä9.t-Ô'7Á˜v?ó*[ 4+`Þ5,ÁŒI×16>ƒY‹OuçY°eí¨Ìòë(qš‚TŽÝC]È&ã¥B`6â$`‹¥ñ|e"+¯ty¬F±9ɶ¥Ã¶´ŠÕL­H¡<]IŸÊÖx~Õ–ÍòW¯/ü:±ßÔƒZD§j£§P³ÌøI!4LØA§þ‚¨…˜å³Þ3áš~b{ü?*õÁ6Q˜C¶ðaX?úèk¢þóÇ?8üùm:³Bé•ÂG÷ÜYƒÐOjDÔHí š×ã×~U`#˜n,« ê«wÍDy–óã©[Ês¸—9Öù¡BBœNw4Ī€«…¬NêÐ:ˆøÛÂAÝ‘)}­´w®öÖuO-úhÎÑ­Ï}özf¢óàD÷±ƒaÚÈ1F§d(1œÁc”¢†H ȹfËDÁåúi°Ä$åsª´_˜«øwñáÇ'¶Þ»oj+Rù¦b%"ÆŠ6WöÀv3!Ñ™ƒŸžž XŸ ÿ}ÄI'³Ä€¡]Š>ãp$bsòË!W•&ìN¦žøàôij+6 ^T@1ÖV)‡+é|Íóçqæ:K÷ ?‰Œ¦ÂxlÜá]GÒαÜTpP޳&ØÀz7àF·}_§9¼=CP]T€qŽø&³j“SîÔCfæ1J“ÌÏofŠñ7í° ~Xß™OªAd¼ŸÔÚ…Í3áMý· #6†ß:š>¨­zžºH¢7f4¡†mî ~¥®°éÑ$©äUén~µRÖ ‘³3Z’4WaP´œ)žŒ€¤p¹Q5w„7ø,Z’Æá<²³}s¬‘‰Ê÷ÊÃv"W@ÚY—( ¡cÀ`ȵê0ùU¦IyEEúÔ"£©Êa¯JW„‚v±ùÉ|—ÓøåËÃa½~Ýb•Ž&Á’u ³00)&®Ÿ>õðûKãE±÷Æõû¼béÀUªó¤¤—YR?e]†¯úoËf†f=±‰®#îcŒ£Š iþýü‡+¦1Š7Ã1¶e?59`ÿY=yÄO' Q³+hµ*‚Y%lépöB ¹à1äl ¦Q¦¦ØQT“±¦öI[:ºsËSÿ¼Ó?g0”ê\p놦TA¯ìëɤ…9[tæ™ø^Ø©+aC¥¶™{¦÷¤ƒ«tR«f4Ž·/l±=:á~o_žŸ=yªÇY°µõ ÃÃ@ éu/1ó® /~y¨ùþ _Ê:^•ÒI9 ­ˆo|‹cŒÃ¼ªì¬Œj×E<&5±}U(ÛÐPäm´}â®7'ù&«÷„çÂȽ“ã/>ûþãG_˜ÌܽÿÁd¡˜¦FÍiG[âÁ£5)8ð3iw£²Ÿë |‘ü†ñ´ÿƽ8ël-²Ö{ØÝÀ¶¬J÷L-½JÂ,ZL†‡â‚éÃsv/^±ãiI=LLaÑ£“c7#X<6f9êºÉÇŸ`ÏVk;ß™üɓǭÉÉ‘GÉÎtzöWWNö(¸«xÑvò¶ºcÈ·( gÌü“ø F+î ­pÃ{жâÑ|Þ’²ÔÊW¦ÏëûP¹Ë>“<7ƒôÄÞ‡.ë£RÚ %x6î (,À`~0H¸MøõÅKoê§Y=Ìátÿ±Ã‹õ¸‰m7YYÚz»%‰õس¢ÁŠ,¢‘¡‚I1À!}êDƒ—¦;5ÖcX¾þö‡bˆÞ„ m— qh¸ÙÏ /Oš2d0ãׇž0£G´ô<Íäàל}qO.²;TR¾¨T„Ê[G‘€ò±fÕ7šUOWj‹=É-&ݬ92ÚY(öGeØã .¬WcƒnÜ'7a#& …ÖX ÁÜŒ:%dõ]Ot("¢ˆVCN-0TP¡$P1èžD~:û9žådröéyµ¡‘PÎSi$~Ø:Ó‘-¢Îð,(¨8ûÊ‚ú 1w3ñ ´&çäÉ™­D­Ï“ªë±¦[ã(¶Û|ãöÙ³³ÿéø{¿ô‹¿|òà!}Í­…埓RSH­ üìó/(–V|pª#S K¹ŠOõ­C»ÏDzÓ;`ÐÒ¸%[·œ¦S L.»ðrÞ> ×í½÷Û7{£2V4ÔI|‚š¢½S…59'6¸¢`èÏJ"k לU¶ˆ·ÜcØ»TÎ.Í–Üè€ô°¦YÁ‰@ã>E9<§a\be³·fÙˆd#]c‰Ÿš…ª8l``ß<›ôJ¶þò–lªà—n „7xt3çB¶[£³ºÆûÇK¶€¨ïp ’F3 ó½?ZThDä'yÂ<¤Ì.I!’6%¨Ç9¯BâÜÞ}ËÀ &L=Ƕeië¼ñùêeÓéhŒ?;B»ó=”æë+þ']6—˜x8Í5A}c%õc!tÐ]'b÷%XŒ¢*üdT­¬eJ­¸")5±°Ÿð LÂÅl'Ôù b£ÞÒMþ¹ü¨oÎß®p8ýT Þ/kÆ´Š5,=þ,‡oZÛ˃€½šõQøý¤­¨Åϸ2)¸¯ y’Ê¡áÙÔò ³LŸ.vž!ƒ@ãÍuÉ‚ û ÈVj¤á‡ý}æ“€á×jã6éÔøäЂֱ•£¥Ã%t!§[øk &qú §Ú€Æ%‡œ¼­û--N[5ŸÎXÖE·KQ ”ƒâR_YZ¯>54,²Ë å'È5™(‰n‚·š Ë aMìL~}ëîÉõ»ÞÌ×§݃òLN!b¨ du„3!í¸þWÿʿ咽8ttìÃ:Mc…Ã:a}ã”zŠ#žæô ¦P8ý0‡áà‰ï’Š1|{z|µŽ4 !ØÓ—8ž']Ë%ËÄmÚ—}÷»ßSþøã£.›7P.¿“ÌÕ®mqÚŠ_$÷“³^ &RÖd™VïAAGƃÎÎ` šè-ÛÇÀïÕ‰½ç/ʨ\ìܤåï|ç;–Ú,À2•'+½˜T¨¢ ­Nû°¹§ K!Êg »ÝSO$òî‰V°>ñ¢_ôÑCX¡ ¯n" eÈ£‘.pßìMÙðÓ)H‡"àõBâ©!¡èînÅŽë >þ: ³·$’8Z¹´W13ŒÞåÈXé(JÞ&ß œ(’ÂÁ©í,™ø§ÜßDóû„ö‡öê [ç0Ç»xq®K29¡%%:ZJ½E­åV~ïÁºx5ELóÜÏ0ßËÓûÕJI••pYP¿Âü´ò jóxÍ]bYML¼“€c*?USCÛÛaÔD=LM a0mH"ЍGµö ÉPüt`f;—gVXs¸Êœá¡F>),¦LøÒ!à¡ZWQéöùž—ú9K ˜‹±mÎà\ŽÝðLôµZàã~6š`™fšN ÈQTûQ†ý†I®Ó{/Õxy«ŸA™†‡–ðÚ8Aå{FI;æâC$Ùxm€§‰'ÏLÚôÜ‚2˜ÊÖ®ÐMÔ‚eìØÉªyãA"ša´ Ð`LN š¶ùs(T1+g¾zöâ¥û“ÿÝó_þÒ/þ‡_ûĬ, ÏhG]˜#xä 'Lùøã‡}øªy¸÷,”µß•Hè«Õ§áBj3²¢•e"²£?ø?ÿw//N~\`b¬y(Ï=ëàl§iˆ•`–N—²”GÎ0Àqí¨r=DˆØ.¼’™Ò°´²3NèM¥ŒE cT>zô¨è,²é¨‡K–__vÈ®R+> ‰F´´ªCA‹ô{}‰œ«põÊÓ¶õ'®‚±P×~¹0dµµÅ{Ó¨N snJúŽð®rË¢Õí¿‡Ï FáPuuìîLÔHµg òz1žÁZ˜«ñ¤ÚÅÕ¶«ä¼m,h}eŠéÖ2êäÅžu>ú‘ù™]qq“P«4Æ]¡´Š±é6¼‹-šÏ å!Áþe1^ƒ/¥3"ZÁЄ>ëíW®>{òRèántõN·3ù€<5^ »áŸ°®z«™z§UYÁÒ60³:À ¬&)DzÁÈäLRK:!Z{~öغK±,Èæ—P¡.ä9#ê€Y3ý˜­ZèN™þX¢jáŸ~’M ë»ã¥fázŸ€2~üA†EeùôežÌ+•Õ2Ž›ÕGË$4‚„õŒÛ9¦»Õ÷ã>'ÅypŒ ³‰ì¦YÝÐìq¯a›ÎÊF—蟚0&6,|8«ÿàƒDÓ›på*îÆ;2 1’·8 %~öýï|ûþwÛÌò§æZmIé–eÀ uIö>ùäëšã9³ÎmVÑvLٌ߱FÑVAÉ{ ØF"s*!ùé»ô‘Ÿ3S( ï\ꊉKŽIÀó0f.€‡é;þE´!õyf¥¡âÿcêÎ{ýL²Ã¾skî¼Üz™‘F£%–Ä@€6'’ @^H°li<’` Ñ« ÀF?D‘-!r‚H€$K£™žf“M6—Kò²¹åó=çw¯ôôíë©§êÔÙëÔòÔ£ÜhZL[Ò<¥ÒnG¬Ü0D`F¸ª0¬Í(,šÃd¼¤&MãõA%ÃO0A–¿ƒÕ:ö®Z.¡.PX§¤Ksrª0ƒ\Ú n‰|¬u™¦ ·ÊÇhÑaáD8™éŒÕ’£˜ºü“GK»†øOµñHغE8~Å´ôNNX] Óü«i!jtÖ:¹)ª¸Xàgú™ÿ2îíØ¡w?æcx5TÕÖ¼ i¿K×Òâ×…|j+EÍ)O±| la¨°þB1•–½  uÄ"JÐTW^s.· nÞ¸Â(ÏúhQŠ4®†{áyv€d¹ÐBX»M„¼Ô˜]™õèí[ šA” ·I¸³!.‹6» ÒîÆlŠô-œÑ³íZ‡íŠž?â²:a4ò½sšI"VqñdAî€6^µGêcѺ†´n—H³™d¶n+¯uÓá”åNGZ}H(3 R`E¸íº=SŒi® ݱò ‘*­+¦¼bP{û2³|ÈöV¸mùè)èaEûåè§bÒ =PuvŽ®ßq¡¦’…ªª{ª–k ׄ$ï;Ú§iâìs×îÂÓOž=yõì[}™žþÍG'L5O7âdòftøâïÿþï7»5o‰Û@'Â3PS £ ãò&¡h>³3Çüî J¯tô}’<…ÓÚÙ(ksK0«×̦2*úAöò‘ª< ¢f{ã¦þ^1.æ*¢R‘êLSÈ2e#Evc¼„·‹ÌÜjQAñ®^éq<µ2 %s0Aѵ+7-D4{ÚÊÝç÷ïÿñÿÛ¯þå÷¿ø<´Þ½uªÂóã:<ëž,U u¨Ì̦$cSÛ5Ê?z=û¼u"ffèÓ”Œhíò…«ÏOŽGZŽÔ,_À®´å¸|Ç@¿ºŠèÓ@¼bí…ÇíaC˜Ø‹G²±J­ñlÆÏ çséévs<ã}òC n×[å1dÆXíM¡ßäÞVbêl‡ræëiuŠ8æà¬ÝJŽtªî#«kCŸxSkö˜ßíP«W³‹&Wúöäé×?ÿk&nÝ!¡¹éOdÎLâœÕd‚Sµ>ÓŒ#¨;<ø ;?>X>>ö>s£vVÍ2Íä¢Këf­Öoú×Ü8ž!tâ)úÐ_t›ét°J£ (Š,…àA-Âz£Ä+î#ÛÅO½ØhÂÜ.XŠY…'Úõˆ‡ñ7K™í…z5_ÏÀ(Gúݼ —FtŒOÏ_ß»û~°|Š­õÊÓf† 2sc…ª©8Ë2Z Ô¾EPÂf3Ë@/r¬ÒçZA¢¨éÌv¢@†¤g½Bƒ#¿t¾wX”·.©©ù#y»­…&ú€p®]ÂT1ËÂ7?“Â+„øþzüK#ª°ï“Î0J7`.·ÈÞºÜÞìݧÞ$ÅçÝÙóÆ 5gÔY­h[ì nDNöZûI¡Q‡­„5©–ج)ûš»ANûEúì{m¨pe IDAT{ûžç¢Ï¶ !Ê×)“sš6‹öñ‹ÇòçÿΧ]oÞ¾û ¿ô«üÜ(<´‰{‚àŽ{Ö—X‘ÇCFíõKp˜¹66éÃÀÔ¯3j.•ïUkt2&uÀ²¯Ñß¼aùÚ°,§iúµm¥¸!Rì‹Ò$Žóhl:Û«§×Òqz¹½ÌÁM5ѵh¬ËÒC+0éæáh¬®qø,…HS” žª«U VO·]AÒ³ÞA:t§-#šKŠt%¿T8;Ða®‡t¯Q¥vI¸Ì…T¯-ŸÍ¦ ‰â`È1ë»ýñi 2 |âQæB­§cíïl>o¶‚ UÑCï߬(hªC*ßžjÔ?’Ž|ŽŽŠ•'W$ªgô¾6Aµí4½ç‘’°X¶­0À"‹Túúså5ÊÍ< }Ý4.¥ƒúï4´Gs¤f4À¦Þ”ðkæU߈>Æ,ԫׯDŠF­`hM¿ÀY5T“iÙ6´X A¦ÅAÁ:£hxÙçꩽ׹ÖkqÅJ"\HÄ/±êÌÝ©’Ø2êyCMÿip’m÷ÙSü¥‚îI&ú/Ë5>1ñe;m½öí9"ºæ†cc¼ ˜¯p&bâKW¯]燚jÏÆfí0-È‘oX2ŽN—$¾I‹p²×Îs†¶ZcéöŠ&émç[ÀJ4méØˆXúlvV£^œçÆ@À’Ù$Îf–Vð„gh›E›6›ìlš<íÉ›—èÏÓ $ZœM!¹Xøïª&.àd ØCK¯ÄPÊ-wÂÜ$²)óÐdQ÷—ÛÕ¾CÔêf᥼ñEÁO‡GÚ ‡: rÃ!ös<õŠÊxQÿÒ»ÞÒ5©Ka ª••éÅßùño èô£ÂÛ|bcñ—Òª4‚V?ÃFz†Tò€´DÉtæBÓ³YÎo–‡Ü´%c…ᚣTŽ€„Y~G€LÆÁ6G{á¥ÙûœÎPNÇøMöÙùubÔæ«Hi(Ùª¬ìm‘‡rÒ•’_|ñ½ožÛ—`{hôsz©œéÀ h"‘–z}šR^ô)÷d®‹îKÄ,S"¹C /°´‹G·oùnëÓ§}xG1¦ +›ê–:,ÉÈW@E×ΔéV±5þ×ps„°Ko½ƒ§Hó«î¤ÛœÈôŽš &ñŽóµª«”Âø#E°Ò&ЙðqmUìºkZ9ñ朥ýIÀRQƒ]]'¤ðûŽ-°HÛƒ»‘p‘ËœlY' ¢ºfI‡g—GÊ{h2À_ÿé7_ܲ…„jx…ÕN¹ón”wJQ©©¢™šm½Ö9p'"cƒVÁèôóoýä¯þ¿GüÇÿø?¿}÷ [²V-VI-fY.½øâ¨î¥˜Ì¥…ñmxÉý£¥j C k,s¿·½Âw–Æ4¨=ž`6ñÁ]1œ\UhæÛ=|#‰¹m©pŽK`„!+J,R ™r\\Í‘©¼|üºä¸´èJÆ5 ÂUñhKª5˜¿ì3§bNp†˜2Ûú`5½ £uS½1¤Z…\™¹¹Lìˆ(Ðü*ãéÔ­umy›gM’é >ë@ôVY´ÅB*fø–7F©ZT(ŒK:‰]¦•Ãí¢Š{r=´îrë—YjnuOÅžÎ,Pž+±·9“!©™Œ†x“`Ó¹8X@¦åD51Î6b‰LCg}Š’ø &Kܶ”w)ŸbÏu Hÿ¬d|úXOqÔB5ôÚŒÑ ø. *gšñtúD£x¨ë“S‹3%†yü$ïMùon6^Í4*9Û¤ulÿõ”/Nâ& Í ¼§ Íâ¸d–?—êP‚»$d†ˆ¦ð€,¶POUIÿöhOÇ@1\ûäÒòà9c»Âî¦Jj)º092* YNªŒYÕ(VÈWR,2³ ¢&ýHU0V ”­2”fH“¿U}X‘WÔ°º6#(zä×.Áßm@£³©)x+é„Éá[‚£{Ï›;z³~vaëux…„£›GèŠþK­HÞ<ºÅ!«î<Ò¤ÌÌ#?–ËTvÚA&X‘‰ƒª7hòÿ½Ù®Ð„ã¹ iøui1V×–ß±ÊIÍX­ÊÇ8U g\0v §Æ¹ÃßÄÉY7\œ†ÔÈ„ìÁœâÇô@ˆ”pÉA Ar»~›#ËÉ4mKb—¯~…x;z/\¼ÿâųû÷ï;øÒÖÏ?ÿ…)Bœêâ§á&%ë¨ßªÇ˜.üùˆyWš6c¡ãzí@Ô£†Èô„QÙ)dó–„Âß|óM–}Z¤`kæzüöÊu«`¹…¶‚¡ @ÒrYy'\š÷üÙñí;·ÓU1S¾ÀBìÆõö´‘9žå‘ä€$Ä@Ë(¹stçŽ~Ö·Ù·x¼*òðÑ#¡r'ß½»éEªóèá~ñ‡?ýéO`„½¬©0qדP6¢×.œ]šC©¦å(¦!À¥]–X7R¤•O-‡’ù‘ˆM¥©¿ c^iÜs¬GJÃÃs®µíJyO®¬¸¢FÑœ™)ÅêÉÏgàŸ‰‹4ªir¹xªµix Àh:PKDæ¼&,±×hrþÙEA4A/Ö‚f!,ô4²[ù<›L W¤åHûį0Èi¤¹ÅÇœáÕ®*Ò4M›`žª\Ý¥'€Ya·!P`šôÑR¯qJ©R Ö/^“º.Üó àŠÉ#…å S‰Ò —žÀw«Ë\ÒP¤ µ´úݹ6EXvP& Ç|$¦L½hHBq:;ù€,¨‘TGù D?×r² ÿq/~=Ý_„µ[¿Š™¶xUÀuŠ€¸­(gá8>~Nýf—T¢ÙuˆQê‘Á¯€½hE„…ÅÃêâ{pÚj½CSS¯¦¾<·@d˜  פ-U dþ{Üu¾Zà+sƒ_9Òã-#ÛàÉà¤×ÁâØÉÉK^½*fv*&w3U‘ƒ©x?Wg'Sù×#ÐÁü åЃ¬Ê³Ãv«@5LÔÈmê£Yzjѯ2ÚuI¨ûõƒ|ÂgŸ}&G+ú)š¯î¡úHJ1Êšé+]ž¨I£êº ™¢Œ—£nm>¿-ï¬(A’#µSbüHÁ ýнª¥ÅhiêôòÅÿΓ7‘ÂM,Öîå–ÎÉY÷ bMîÇD7v Ý 3X$s(:Z 󡜖LVÊ\Cû‡›4ƒëa4¬¨—,uëÀë ?~t ƒ å‚J-ßöá™x¿vÕn¾yò$_dh”0gFÃm¸€,S­˜Ñ†t&ÁN¾óþÑ[|¬úѤiÚ6XÑeÊ6’ Éõ}9Z¹ÁwͦìÛh›à`”å0Ú£º¶>|Ø*¢xÿYÖ x83«@´ñp!¿TàhC߯‰eö©|i7Ì]õ¥Ã C‰å$Üz Vô×a†Ì—ŽZæ<} màˆ®t]Jyš)€lv –D|WÉ:Ê;“Q£ýPm¢~vx¨Ë«ˆ{È_EjwÆi æ…—ñ˜M¹á¬€ïÕEš*Êû•†°Ò{A@B¦‘r”1-·ULÃÄÉòaKz„.h¨•Á°¾A±££›XÚ¾Ô¢¯;´¿§…`«É†ƈh—WÂY5é)ÝSŒÒ²´¦‡½SõZßРGE„Ks†œ–èúbŽ(kÆ47®ûƒ~¸épðfªLH´®ºŽ¬¾zÚ5Ú02M¬(ÙN»N±'ö”•¥\¹Öº•?æ.’f(èaëª.±iÎfAUK$”í^@UöÒt|n’4nKË?KÌíø‡‡É#,ÕÐþnáušSɽؚàÚŽW¸b‡(4Ž_Z)f,ÑÖðíÂ×_}ùöäùƒ¯ý§ÿÅmÖÙ„Â"(-°xNèÔ( áÝVÏôV.h(‰ i•ƒ™;O†³–a›¿Y¿÷ô;®·mZßcBQ¥0bHòäNšP”ÇÖE@ âTæÙÖ¢ÙhU•ÓnXyL‚^@'pñHÚÔOÛ]rèWy‚üÞ_Õ%0M¿_E&9«®ŽÔ@:HgæxÔ¢ Ó l9Újñ77ØéÕŽøƒ%ù½)\"±ñR£˜³TÌ›€Û”ßâEÿàC¸áv«ÁWEy߸¤ÙË«ð€*ÂÛ¥—Ž«.D+¤å0ÕÓðQæš*žæ!O9|Fµ%ýÌmLü\n¨µ¯X‹‰{7_s-#ú«£ÉÛ7Á œ™!Õ`Å!4¸û»Øª5ø´ÕmdåÓ³[ËÈ@~f»ZVÖ øÂ0å ;=Uin%ÀA´zÙ¢crͤwéªSLa:A —òÓŠG¨“¯i|M-9û<ÊüÁw¡ÎÅ0—?ªãSø„§X‚GÛ³´ð:ÖÐÒëV™¡.bÑŽ¿šÖ#èŽÏ¤ CLP+‚˜{¤-%õ \qB¦¡°LK{0Çd%Tò)dºçW]3#˜Àáo-Md4C9Ü€!G­p3šÅèIpJ"b|æ Ô3Éüs¯¯š€ç¬o—Î|fudôB¼•/8k@Óji9öwÚJ‘üîïþ8À£ë~ñH&/ QhxˆmaŠ`Ñ&¡˜ó;bGƒËY\C#®È—©ƒ¡'8h\>}ðNg:ïy5ðmѺTËËV TUbbüâU k\€€¨²W,*ª [Ý¿êX9,Bé c~[)þ;ðù‹×^ ²ŠÚÈý\‡ÀÎÄ8FÕ6ÂS i®(D&YæR§|0ç Øvàˆ]óò©‘„¶tøÉ'wî=|øÍ矞“b«3ü.¼‰Õs¬‡-}#•££;fªH“ì$«•± ÄÐ@¯Lè­hbHÛz­w•L&(×ê®Lø‹8åã¾ôò $?xðàÿøƒ?ø¿þð¿ýö‰HôÓ/¾¯<øØ;ÓB§Ï¾‹æÛ91¢FÍØ}<ÿòÅ3"U’ô9ª»¨ÍÀÿ`BsüÕ 8f¾Ýyô—/Û*çKO6yڜԎàÜÕª2!¯–[@@[Фeî-.`NMÌžÙšt’mGûÌVN»·S†ð,Š›8¥EM¤˜ùÒ5@|ºO†]Fóº¥J†öyòA£¨nñ@bÑb¢˜>ÞÇ+„G4rVØ©.Cá"zõ,[ -Ú¢°ŠB¬á•†€uÕ䤗FÜp‹û¨Pk¼m™s”<”Ò«¨²¦^Ï1†`îVgæ6ó\ÚUsÊÛ7¡Øôý•™Î&[îˆ5B‹‹ÃíMPfF:hôh;à“pÚ¹ÜЄ˜‡Ñ­ÃÚvµFåšSÁ ·Æ$s¡0cÈegÂY9UŒ.™¦ùÍÛWfrm øË?ûmªûGÿä¿|þJ0û‰Å C(ãKê6ÀäTô{] ,ÚAcÈI 8³XÙ1/ÞWÊ-‹Ñ?¾7$Å¢)¯b‹ª)1Ϊ9< Q´A†>¸=pÅ@2uLJgñ¶8xUÁ*ƒÜ4l=}›GÒ.Ü“ ʦÖÊ]y\ž.'¥Ò˜_™*b‹2€¨µŠç©Ʋ=ÂòáXÐhh\[&®2á"+w½÷>°Ó@´¨ëBbÛR§““®Eöú|@`rÄ—((asn dX'ÄÄ΃ `òB¬rfqPäp£®]sJ*Vz^XS2½˜V“ƒdùxâZ%©¯1½˜Ð fʶ½Òø§Öç1øªhú” aiÕJçy·Áv/óá£Åð4 ÑYhzåsô$hּѣ1|‹’Ô†°  -ŒWô/†Û¾²TkWÚŠLh"Ÿºh®†ÆïÉÔ"ý‡–e4A±è¿HB Û½3¦m bõMQú5f"bkù°È>‡ƒ& §0º ¿àCuû ШU"ÞÒLœ1"" 0 tnWU™™HîN΋ckIv {ê"dN+9[Š»BÁ€2@/CX6g®-ñ›V  m’S¯!nß`fÔÀ#|ƒXûn©Õ¬<ÀÎ_Y­„_ýŒ$ Û gÜÒ¿1À£¦¸rž( _¤QLÐŒ¢)ÇŸý蟫ä™úžÁujæž_ å)Kluæ‚€*6rÊ…\oM+9Di,C;oO à•¤c\ÙˆÂmLËŽšÐÂìrbEéì„ø”#+Zš!Y»ð0|™­×$£ãl ]ómáÔþ¢7óDn¿ ¯_½ûìÓÏž2o¬¿î¾C¤š·Ï+Æx†Ç \æ×-u¤ü&§þŽ-,@1ùË–õ{ËдèoÑð %mùvf‡ùѤæ˜Óۺ؋ó£3:¡ÌróÏÒܦ7!­¿ƒ‰Š ¸]ä+pä¢Ô­§„ófžF¸E'y„O.é,(X-|ñÂk"ïÞó¶Î#ýÉ¿ù?ÿ%oݳڃ€Õ1uyXFÍo,XÌ4R—Æ+­ÀyÚÊ{jN¦ŠÈ\dž&ÝȘûk”Â5å~6‘$Ö_öÆåq›€¦‰V{q˜RÉÅ@ùÈ\VÀ…™Ú…” íw––X?&M¾¥¼(‡bgl¤2÷R(üÊQ@E¸L#‡~±Ë|€RFIå!ã×U|> Sô>+RÌ$Þ9_¥Aˆ\DS©âxÒ°Ã/×WÍSr–Š­+YMÚMC ßï»"®ÌMëR~5Ç0‡CQ· äE…5›Kκè+ ÖöËÂòyÓ*mõmK%<Ç#~ÌL|0"P`.“Âð‰¤°W„ú¦‰E‚éOÞRoˆEæøY*— PªÒeÜ,),ó#–§šX°òÕ”Ò²hÎp&tÃDEž„–¦‰¾øæ À|™¢9DÑù€+Àù#ÛàYØÊ|dj@çOWxVþP¾“€xB-ó }bÄ<}GÞëÇk¨v÷µ¶˜Z;ìkYç-“}zJ ¡DÛyй<% |S¬Ö[¥»B:/®)¬"òaèZEÕ®Z¥V}èÒ©-¹ÅÍ‹áXáLJzÃé%›°WÞ¯¿ ޏ­1 d„hˆ¬ßæ–óB¸j¢’ ©êó w`öiÄa'&¡Ò ·úÍ-ö²ÂÐ ”õTÚh)ÂéåÖüv/þÞ$²aNb¨Büðˆôµg`©ˆX/xt9mÐå DðWfTô(Áë­¦GÊ/Nª/LÅ\ÑøP›eב±’‘7Þ{«Ãm<5•9<¢:†;çï}z¯ÓØ{ÍŽæOîݽƒ4›lùCØôÔ²Taÿ9-¬‰)»)íƒ5ïcøÐV…A†³£¥‰Ç¶õÛd;C;Õ·‰ÙéÌÆDÙóÅÙæÖÖÌéb“èØÙ—/ÅyüxÝ · +¨»"¾mÔG@½|ùúömÇ’i 7²äI³1Ïø@‹qÝZÄ1u=ÍÏ|Sb33ÎYS jJ"DæïU‘«(êÆ­[tM€(,dTk|……¬º!*!r%GB¹#6eÄ‚~qf«(¯·Äɱ Ÿ)¼IBd«ÙQ¿7ÆÒ7êfÜAÄ¢ZÄ¿Ð[*4¥Ó@lˆ…]šFiüê4¹'ÍA’=s1EÚ£'[Xxºú¸ÐÅÞ`M·nÞ+¼Ü`kš ¦ö}L3¢åÓÌïà°6õƒoèïÙz¡¾ÏÂ;J€faK#K ºäZî G¨|S[k[âàÈxF)¡4 )ŠÒ¤Z1tÐÖâ‰é‡²ô‰_Ù>º!§0¢\ò—~™,Î@¹]Öy$¡9åð‹ü1 ÄYwæ/„ÌhB\ŠsJŒ·‘Z·!0ä§šƒ³ ûWÇ@ƒHeN¯Ec*î1]y$‚ÏÜêÔPÑ„ÈXd•øŒ“7—.{ïòÃÏþú/ùW~ø“ñmÐ9  r”È4¾Oܵ”‚/ô|Ì·ÖuÍ¥%#}Î¥b©V#œÁ¢ ±j®%…? +SέÈs˜}Ǻ¦ñÆŠW©K¬¹^WÄIU·!Ø.>ğЮêûHœÈȺ-ØÌ$á%è\ÙÁ_äl§Õ`™na«ÆÀzÚò«-å]ß°”fáoöN‹PP¦JO£åJ²÷ˆ›>~!hhÛZ8›9z|îW_Žê YÓ <ߎ@¤5jÜ0XëÊ ðjNº1«.uĵ„”˜·&™à2ªZe>êºÜÊêŠHä4Á¥цº‡>˜Œ:h@o½ã¤é²þaÍ­¾XÕÔi«.°†fÛƒÄDJy$ªå×¥Ñ3KѲü8žª5¿*5n¡*rÄÛôJ>Hº”ÂxF³Ü ÖÐϦ@s%SžšS Etµ6x²´uü¢ƒ~¬Ñsꃼ¼¬%È– ˆtûØÛ ¶F7òʨ¡`dHÁÉ ‡PþöoòÍ7ø¯¿}õÕ—¿ô‹¿Huºvu^ùäº#Ê€½{÷žÈnf•|ù\‹†úZÛth#Ÿ>ŠuÎÙ댘s€†µ¼ÛGξJ>8!EѨºôWÈ£šu"/ž{ƒ,-.R&ePÍ¥RqØÂü g­;D#>k‡ê´+à£W9>áÉ7rŠÛsêãömyæUãç.:¬á%ò®éF§©ú#/V½ŠnFHjWðîµ¢µð‡Õ,pé#ÝÍŸÐIº ø7é-X4ß3T4d¹}ûd3Iè%<™¨Ã•QNC:}µÎËj3ðª¾PÒeƒXä}f\P4 Ð¢úð­kÓ½•dßw¾Ú½ÿå)FÚû„Ìk׎ÀP5«˜Ó¡x(SJ¾Ú2u"\»øPC¶…èÖUÑ ¡÷öj :*Ë×Ó©Ä„–o{ë°¢æê†y©âm=MNáÑ2Á“KÉó¥-¾T…‘ iâ¹Å‚3%–. hš_>k<ä)n°_hƒLúQÝZƒïˆ[8>Œ:”×Äþ¦üBoËË ?} ÏJe;KbºŠlzF¢¸\s˜ÅPRÈ.9Ç’»œÕ´©F'"Ô-'*fÛYÎuïn-­h¯#”Áe4WáI[+Q4“auÁšào„®‰ŒþýþªÏ[øäƒX–ªó˘?ô†Pbu.­º_J2r©öê4GF¸çJ¦Ð£#¡î{uؤÌìfâŠx0¬ lqñg`c»HˆFÙSãLN=©ZL4–\gÀ Ýd1—|„«âw§ˆu« XI,ÚÉYrÎ «+LÔQ³‘cÈÅ®zÊ\1[Ñê:-Ť=u ”’‹â‰‹>+cŽ~bHçù)læ·¨±Šõv‹¼_à³.Ò2#îc[,¨øðñ«A¹µ¢Ë) <—/g/ÀùJËô« 8.¼ü±5™¡>ŸîÌH̯ZWÀ”y*ì…-_•vÂþ»iÃ[~ ÂZZSª¼E³í)¬pcø6rAQ:?³8Š) H’™±7þŒc™M&³OXcxJ 8›¬OWgv£“ÞlbB ¼û-„}æàivKC•™ØÈ/hà;aóÉ·O¾üòçöw{ ¦bä´!)ʨ1Kc%<1•rÂ)É”c‘ùT&'‰Ó(@v#÷Ø…±þ&Q °è¹ë`M²P•‘ kk¿œØë!@U$Ô5ñ¬!-Žj5„ÿH¿­â”ßÂÊ Aצ¢æ"$›;X=œ"¤í'*Õ©Z|&®“BQú3òýmÓ#0߉"¨1±z´¬ Ñ'ÜxK³˜ƒ€œƒ 0i vFuýª}ñ7ÿÙ?Í0<#lÆ'±€W@¥šV¼¿®·¼zeü).w0ÀOQj…Û\òLTý²hTº·²K•=ÖÙÒBܧºüä)+›o ïÙþBw…"ó÷¾GvÅ·7Ìv>±âxO}‡d fæh[£Ïž<Æv6/Ñ[JÎ88òiæÛ^Ì¿}箞cxn+÷óG¿zû¶O>9ÇÅ1HÖåÌ12r}Η?û‰®çûßûÞÃo™ñtÊ"Jáé…Œ9ˆÈô‰±×^ÛÚÅ`/½6;Úã#94µnuùûºiz ˜®„>_´ñö»×Úeù®¦ýü×ÇjœÈå½×°Ò„`Ù¬Š×#Ù¦7À¼%I†´NDÊìyGø8Úw"nJé@ÛD°ECMna 묕gŽG›óV#Æ…&¥ñEš¬L¬ç(47î<ÿÞ©ŒçŽHF'à¸v­ƒÇnÞºæø"6©º‰}¤·'¯ß<"V4ê¼öE=2Ù²)@:D©Æ ,ÎæzLrŽÖ"ä/;ç²€²·.¨!Y2+‹-PôúÕ æ7˼¬w•‘b²½·òæÄÁ»LV8 góÂ2Õ£–¹‹ÑŠ™8ë4꡹±Sï·Ò´œãmXŒmôÊœœùu Ròé&#v&‡­ûX9Áy£Ãb,#¨™˜›p­ÈÛ Ÿynæ´}}Š?)l¢Æ8jΧ»u'õнDBXï¼ÕÜa¶ÆŠÆ (í5Ìs¤Yè ª,µ¡K‹ÆZDŽlýŸT!„å©èüýºÀñ¶ÚU’p‹‰¼Þ8=GÌÏ ëÝçéó4Ê÷ú‹'U_¹,^]?HñLg®ÚÛ¾A80'LNÑáÍ|Ntø`²\´nÃ"¨õÍ2 Öi)üé¼O…2£rCÕ¿üó?µCø‹ïÿà‹ÔÎ>-T¸ IôJöö0W`ñ— wË™>´mc5¹ŒíjWˤ‚3l!Ù+VÖSô / Íloc?øƒœì¥O|ækz;Æ­?뛸Tþ<%ÛЃ³üT2®*j©9ÿä.~SOEä5Ä)h:+ɤ/þg)˜š’T“OptscÎ¥Bζ°yà¼]m‹*L$DKÒ9• &:ásõ\ óÇ‚ŒÂKggL¿%f c™ðº°q™‹Â}rÑ(àȉâÛjcl¨É& šmY€*)ƒœa,2cÆ>•ièûüÙ šŒ¼4¢$¹ë¦¢¼bK©šJá!¨V~ñtúJ».ð`…D… gŒD (†'ŠÜ‚Što" öˆIß’{ÚgœÏq>¶ ΊÑ=€DæÊ8Ñíøåqæù®˜~2›ƒž’}¯¢íÛ½$NuÙ 7¯÷Rì:Ü|¡}f2D!Ó]Ž/ªG¨!6Úäj\¯.µ4wì¼gŽTˆ gð“˯gŠW7Lûñ7-}½ûîµþL×Rw÷žC¼ì<`ZLÕûW´Ã'>ë„9‚ 'œùùó·Žn¡ƒ"XÒAøƒèùO³  ]…?yÀÐëPp–¦N6‡ö|ê°E:Ä^uÇXГ×^EyõÒQ¾DAøÅ¦ã^“ÔŸÛLÐ}ã‹|uëY4ð㙸NQ†Wªk¶ÚuvàÁ¯íí)œ5±A©ñ äýŸ%а«-.â‡ö^Øê)>8~óZŽrô·6¬ø¢-ás4¤kÌJŠåÀœñR½Žên¡¡Ó– sež’àºàOŒ ñ­½Y7º”Uu ù.V­ÛL3A‚8UvšlÆéW¾ÙiùÂ|ßãtM\=ÁPÈŒ&ôÁšO è‡}b´“O‚ƒ|Lvz€¡·Ç ÎÐãé>°aÜs)Ù¡Ý…‹}ø¥µð¸]݆ t¿‚Qøãû¡Æ>ý^°8C‘LmEíŽ+©b¸ue&â¶¿ÊÈ¥TÌP1fæv\|5šæ«Õ+,…zAS†‘uá/íŠVøEé4W Uƒ çtÇv}¥B3=ƒ$%CtBiùpv¦˜ŸJZ>ĸlOÇÜ:«„£Šà©ë@c-OXSÂíp*és¼š«¥~¼Á0À€»UO›ìž-*‘%ök=ML?û´£T-e]dÁ…Äy\ÊS¼xþ\€î¬×çþâé“Û÷?›ÉnËÍm½‚ÛrO‡•d.þ|„iKœoç}p-*8ÜÞóêÕ÷¶,P‚¡* hšÔ8D,æÇý’¿„©JÔærIyµRÌh( ¹ ØÛ-î¡mEBÓ¨ËmìÙ¡ÚÒªl­mK~ãŠV½Y^¯ýºSRв~‚"j&ÿÒ.$ÊŸbYÐ&ÔåuýºÆÖÐQ¯™¢vNQötPb$8^¸~¾Dw´M$4ÆEê*¼À÷?±Ç“q;MßÒ£argqÕÞ„ ËUܺ4ºØÊßôè'ÛÑ"n⨵!äë€ZOÇ%bÕzœ?ôS¸QÔ 7m(0ø˜N6cT°ÊCÆßØoÞU¾Í åöHa _ A™BÌš?@·µÈ7NT×­–Tì&º@ Ó®8Ãíi“vûÅmÛN€õRTN/ 2œFQuM5?#>¢™y†¼ôñ͇™{TEŠ«E‚vf£êiι_?üúóÏ>Õ‹A̘Ž`ð‰OŠ£¢È¾Ñb .€à/®‚ÕϾüR[&à†!\âòVa­‡Þa"–L»`3n³Ð?¢Çk)£: Ü~DæYeçTW Úª—GA±U¾€ç›þO£Ù€äàÝ ­BAÏr16.B.1CeùJ†ß\ò©€_­‡[Ø™ú1"u®²<ûñ¨é“\(œ™ˆöYÁM•4úÛªIÁrpG.Øš–)[\ÙVG2Ó¹Ò=r*’¢ç‹îÀJïX— uÊ.fR{n¥ €\*€ÚØ+•)ݪ6"l ŠºÑ;&¬.ˆìø‰[ϧ$W9X/€›‰œ}Uãõ‰7Ô„½”‡ÒiZd‘NyA˜bC¥7o‰yÅúÆpB~ÌÂS ä0MyõÃÔÀà#qšÒd«Oå3!b7éþLêö%••TÅÑ )÷¹Ž‰ÃCƒTûCb‹ù .€Ãú7 G_g— Ã¥ü Ä@ Á7}ÝÓDôëWΉIÃ1(ÁG'4,U„†µÒŒd³­´8Y·°å[T£É`ÍŸ«ò“°dsm>¥¢}ÐNÉ©Þç±òb*< ¶ps¢‡Išó3AEY&ßKÚr"|Vxµ7ÖA æ°dO sŠIMŽ—eŠŒY«À@³E:(C/$ÅÓåç÷‡vMÐøðÔŠ`Úbh¤°b´T nI.mŸ¯œb’Ut«@um;›®@¾ÛrºZÛ"zexÂ`§`Õ‹ó‚SÛø¼—ƒ6¡HR  Ž7nsë¿+8¿X P§¢W©³“!<©]i±4f–¡¯LÕÖé5DÅ0¡4î©Q ç°Å=|–ÉTÒå_m Wµßþ‚Ü„†ÏÌB9 ¡@ÇV 7z:dV %C;”F÷¦Ñˆ­#Å\ùv¹ñUxaDkä¹Ï^ÿóϾùê'¯Ž_|úÙ÷Ö®ZŸ¥@OH»4½9@›©&(­Œi€e²t.¨Î¸Þt¨"ge1ØÒ={PŠ•wÑ“)K¸[µ} •DãTñëiÉŒ¥Gõ=*n>l•ͬ–§~AX|ü¢pò¦ºÅ‡f›@§¶›Ô/Zö “zù S#¥NC7Ð\©Ó öQ`O/!SO?%À¬1%l©À w–PVhgÅ0Ó-àÒº’Èœ†Ò ÀTʯjÑ[·Ê¸”Ÿž"†{$Gu—44ýªÕY*sÉß&TŸ§X=…O_o¬xKN ”?ŽW™úf-s¯’í¸´VðÀ¢Š9WÕ4eV>:~­·KïÀðµNÙšl_LXÂÃ1ÑØL`7¦:0ç|Röž²è}Iƒ¶ÈÙÊèP`ÈšðˆÌëô) C!óƒìB/¼àæÅó¥>Sqã&³aF†âh0Y;jó[3i-¾ãÌ¢Aªš~ðà+­X®‡÷n^3ÿ?ƒÃy‹ª.í¢b\w1TY1Á‰Å¨¸§.µpÕ…WôP10Õ³vW¨½†é_’¯N^À®0VÀô\›Ö"ËäÈi#¼v‡WiG*JñÞ4|h•5A”„¹&ìC!ð´FC"kQWp°!,n]kFåaŽ{û( n”aG„y\k6(ºVÂa%z=}’9³AªJsUøÝñÛ JÂŒ´j¾è8 C6<à„eÒK<}åÝÅŠ:Kö¡Q¬.%lVØ”›±nµ7F›æ–‚vÌZÞÇS¨, W½Ûö êÞjb™ ·3ú5„ n•¤Ð¼§K‘Ncîe´÷öHM/_Ý€QoÑχŸÞ½§º¥)èCèöl4ò±#³=ß|óÍ ¦#Ê.»´r÷Þ=S&ÚÒCúÐ51Ä¡cÓÓŽ…ä qÉòœWõ:Ò{~¦!1cE/!Èj d–ÏLÏò³\ ðÄ"™˜ã–Ù…;µ”a ZFlNòÙ·ßÝ9ÂŒ×PÎj ÏÛÝ…íéHº%r׸§ºpÆÂî5”ÆÏ8I1X‹$h'lcl“ÓBCF?Oh\ÐáÝåšðΠ±a’ˆS}0o¸ PcŸ¶'ÛwP¢M"ö‰k»Ô_™k6(×ÀAŠhϽ~¥î4›øÕ4TýîÔîvÛÚ&"“µPŠíAY´á <3 1ÔÄíÎã·OwŸ=ïKõhTŒÆï“£ÕÙoÌb®,T¤¬!—ªÃA üà YjKoìÂ÷¹ä+ ò¬èµî¹¨¥M˜›W—ß`ÈòêUßó:Ä"esCçÚñ=ñÖÒ;H Îøi¤‰‚|† ½ŒZæ€ÈaO<ÇÁµºA ðqpìŸh‰o0ajr´ r¡xÊï¥Eܨ*ušA°_3›z|]tSûMÑÒ (¼| âØ>‰å‰§…Ž3¡ëµÌ–'>iÕÉÚ®¹ÉÝ»sôgÿ÷ýÍ_ýå?þ'ÿÙ›w¬œr@gþJ+ë Lc0TÀ­‹eR*“m* 89n±%MÏëwqÞœQô,_ý²Èå êÇqaö˸&ÀšZ‡°ƒÞëÜá°¨jJ°u«u·›#S-™àK¸•öëv |ÈñÌ k0Œ±Åu³Ÿ]ûCl`QùÊ,´ ¦K3ËðY«Gn•¼ò‰ó2ê~¤™×ªPšVÒm¿µ8Äüëv1òèÙ:%ÜUå §‚’2µ²Eå†ÜúË…3œ\Æ4ÝÁ6±p4Á$A>ktù3l¬Hèò©ñAÏå û§ò‹–Pgºz*ê2[¨:ßİì¤`¾«6 5m“ÀØ6®Ì›¿{\ÖàXõ¥Žù"P1zžÔڭ̽g,zÆGåãp •M·Pþ™eH—¾ëE™°l[Ò r‚«à³cNUˆŒ7œ˜ÞÐdV„œ|÷àá×wïÝ‘°J£ ¼ÿ¨Èó·|8¶˜Á›)*ߢï–ðãœäàÅÝwÍ3 “÷®cê4] °Kw&á©_‚'(œŽ@”Q}{ÅÜbçSePó+ß[M…‚Ð|n¸©œ ²G© ¿§ Ð\5Tñ9Ü6ðîS~ºÔ4{hä7€íÕ“ap/ÊÀg¹ü}ˆEF)dŸŠ sMø]QjÂ#ÕYa1TãC9¼bFZd£…afæ0³ÃÔƒ‡fÉwþò*Ñòãý¸J·fÖăniÙ(‘¹ae]5´ñã9kœðl hVçÄ ‚¤™ ™5ÛBÀz®ÑàeF²{²€£6/ó÷¢¤Õ}bQÆtE2 kÌ&‘âwª&‹à&Ä)fO3d*f´;‹·D<~çœÏÎ^çjuù:–ƒ ¶‰Þ y[ßK1LȲ!³­ªw⥋<Ř#£ø›ëh¼¯èUhìª'Ó"KÆ+yª¢ ­O·`…:þéAñúBµZ€hZIðä¸UM a²|1ƒ–ÄRÏŸ=ýìÓû¨ÑZ º4êÝv:™ÖLuì 4¿ø†.´+³ šªÍLïâmÒʇÌü¶¿>y‰·ä Èx[Pàæƒ`䢤þÛ˜íÍ›ÎË€Øn$S6ìÂ@î£5Dg¸j¼Uï³kmbSÆ|Ãt™«Çƒb«œ$ØÎú^‘£PX¡º_]Xd© òÅ•2É4”ƒJ·ô$nt©ÚÿÉ·#y¬dÕá->§?.Ãòò•Á Ápo§ºJ©wSbãûp&/˜ Ó~N»Ñe=Å/”c© v¦-n¯ç»]㿊à‡ÛŠJ‡îy›V]:áFöÊÈL/Ž6íÒm_¼àÞüôßÿüËŸýWÿÍûâøÄ&÷‰JÃ( iqx j‰…| ¨‘1ƒ§ËÞ¡±kVÖrejQy¿gi—ÕJÒ£Ø=E¨6飊`Rެj¯ä”YÃtm8ðà,¶[x˜ õ gÿ´µn‡%9Iuõâ`â…ÀQ:IP~4££”_|Ø*•^´ÙÆ íJÛ´´K™tnúNeæéÆjqXPÊoIOeºdî£á2µ‹3Êl`yA¤À½"ª¶Yµóšq-(@@P}®c”ä,2ŠMN:©Œ[¢ÙÑNâv¦vÛÚê§Uq)ω«ž|û-#ªŸûôÓ Ùc¬ò®ÕyÇΑ9sö'„Ì(vœ¤L~“f=s}ò/ç"|À¢B6ƒe©=ƒãˆµ IU<|÷Þ*É3_Ò9>f$rõºÓPmuŠ ¹L#{@VC£AU×ôªL—r¸å ÿµ.í—UÓKÀMÅA²îæ-‡‘ªâB‹95&£©ÌÂÁµw?-ÑÁ¥†(7Zp€Gs«´îMgÃPœ).û(uöã•¶ÅìØ:oÃr>çÝë7ÃT¤vVÊUw ^NÄg}Ât¤àþõ×_³j'WnOl³ÏV¯Þµ’•Ë3º}ß6I²vK¥!Ï{° ûC¿zð%¤¼Õ{4vg&ÊÔ í‚ hÔu”Mç Rµ$;…Ë¿OÔ¢N˜6¢hŒ®bðk²Ý ªÌèlTD‘V%4¤hÞ`Ý0¤î{±·I&fÅÔÄF øÔ cÜä€Äš2ýÖ÷@Ð`M˜È#\¢Pj¬•𻽣ËùÊz>ólYl'µ) ¼^ϟѹ6Á;˜‚³¾|Àá†Rz¨•¡ðíÛâ€X8ÿBZ¾(R}QÂÆ{Òhja;°WóÞ¾ùóÿçm4ùÁ¯üšïû™Ü59Wáñ‰ AzëÁE"VCÊÔl,ÍúÆïëø1¡WÆ&(‰prôT1í*/íRWàêæÓf,ë©òá:$P œMš¸>iå¯'ƒ@B­[)/±÷Uƈé­ô’ ü·ªœ]ªÀa:¢Qײå鎭'½’iÈm0Ù)ÜÐ¥%8ûu«?VÛ§g ¨¾ü±ò>-vŽ`J6[f×´ò‹¶›X˜giø»<]Š$¶Šºòsêûqcz² ÃJþÏØòôõª,>íÅ¡9ƒ+­ò¯ß<çÛzÓÈŸRa̯T‘ùt á’É”­ÓÇU9ƒEÁœ\·c1‡ò@qSª(ÃA²¸Mëõq®Ýè3©xÉ…a¬2Z„yD9úgãЭ,Vš| Z0dÀ&QÊC• ÑÅWÇ¶Ž´¡ƒc_sçq»É{“»«oT>c§tjBÏñ¥ w x¸GÄ*[´Up -àëÌauÁǸ˜=;Wh–ÛŸÊmÒgßÌ5#µKÂ0Ñë _µž°q˜ÇY샒>N1$È!‹—µ>Àêq‡ÞÃâ º cv¯BÊq)¬ºG Ku ËïþÔõIã³’ò!àRÆ P …Ñš6þW@]‚¯ÛÅNÉ”„–{Ë[Ϩ:Ä\@ØÎ0@“éõ¨v¨Õ¡æ6ZÕ¨§0”¿­#T òõìji½8>› ·„ h“eù5`ÕÌȦޢºbìoÿ¶ƒF]µ5Mdð¸ÉÇ¥óì¯y^fËLe¼€V§pŽLbÝh¾È„Ÿêm7Ä3͉‘@ˆãn+¦Iå;®ðpÎçsaÅÀ¸ ¿§^U¦4ˆ»A¶ºˆ$]þ:>@zTG~NÇN ° àÝ¿°Æ&qå“Ü»fŒ/zÍð«¯údáøKo¼ ñÝ›#Ñ̳Bg²“Ö¡Q߇OðZ‘«÷Çô=Ïž?RŒ mK*&ÇPëÒg·8 Á[ôdÄ!«Ý²1„PkkgálŒZîIÙ` |0Tüô(“ ‡ôL{6,F@ÀñxDhÛŠòÒ3,ŽŸEÜ€¾ ‡Ä19Û BÇ\r.Ó7ÕŸÁ§VÆCEÕŒ(ÚðuÃ:%yö»æêüô³ IDAT¤!±%°lð_Týzª!$HLš4WoÇšÁŠÎÖºÎa:ÂÐ6’ã¤<Íúu»-J”Šsñ¾^e¿ãË—ÿû¿þ_ÿÃßøõ›·ï}öý_œ7 WW%\à€ìWZå@ ’Ò2Aõ;´‡$sÁ ¨ÓVQx+Ê–Ü0$x+ G1DTÌáLŒ¢$¨‹º&5$«r÷ŽîïCVw«R£ºãÓÜvѲ*[ Úò«ÂI:þb\½ ׿i6e›ö¨‘ñ[ç¨ý˜c$mfLhð—€gG²r¸À]ÒØ‚ø}DN-RŒ˜_´"^&ø]Üö@—ôÙm Æ!ËQwó'>¢:òºþãìiž|˜¬i×Ä…-¤(ïÖ/lyã#-º•Iv†Ê¬˜§š½qÅRàxê‘bìEm*/oÄcT àý¸bOVYÏœ_5–ƒ‘Ì8?ë¶"œ!,E˜fJþxòN}ÚUu=…LN gèU+õwàß$«&±¸áVWOBé ½^`©íbj@¹ÆIc(Jä4‘Ÿ„WD„w­ˆJ0güØ÷lüš Þk…T©"gÃq›^F*\%=!¢9ì>¾ÐZŽ$å»ÂyzT·aæj!Lpyõ¹0¦‹®ÃR…X%üÂpÐ^ñæ«áµÝ–§K\ò WqQEðAP`UH¾±ù„ESk#ú\rPf/%ᣤº+}Â5„^{rÓe ËÑ‹!‰Ônݼ‰Au¾XÜ4pv çe°0ó"¾i[ÏàÀ±n:©¬`†ýÀé7& SÛúÂÿðßÿwKáBј'qa¦ÈNÞµcšÆ°hèx¨Ï¼‘*š÷yb Ö 1ì9t|BVL•ÔA‰&HŽZ­||Q>Qe𘵧„å4i`«hÛƒ’  ËIÒyt¸ ÐfŸGKXuçÖÜèÇ­£Û1³áH¯%›{þâ™s¡þzE{áO^¥²ÄÀt}0YN%…X¯°Rôù˜±¥C2}`ìbîT-A› Ä»Fõd/ݾ‡'Îz(éȨ¬•ºv"ƒÿ*Á0¤×ÄÒð(rŒ&Ah˜.d› 3 ÜaÆb—•´$\ó}p\N2xeiۼɲHaô†Ð¾qÓÐäðÅ™GƒƒFý*ŒŸ*J(VÔÉÈN eº¶— þðAþ°ŽÑ;QÍœ^ |²oÀõ—óT!Iñë‹c/´Š±ýÂ1å®ÒÉñË¿ø‹¿ÀjÎÚåÆ-"½~ãêñ‹—Í¿ÎmG](3º~þùñ ô –àIÛª\8ç¬T; Šœš¿I˜Ü»&†‹KtÿЃד[›ÅJlìåí¶Eæ2‰nšÃ>j9“æxXÞIZ2¤€Ì°‘+¡™b}u !Q7ņ ß§ºPÜp|®"™²¸- `¶Dçà¨>¿@ôµA¬sö p+/$p"Ò¬ƒ»Q1E=íS¥]ªÀPóoµ;*2ü$±@6 õ…¯ú¶%á4^mĆŸÂG<ö^öjBRøYýXWX³:°¦ª 1†'ߥxBo]\àÙG`é *ó1m€f8ò݇ ¾úòñƒŸýð—~pt÷óËFå>0:S@)ã‚§F±+”FµV¶€Â,Ú;ãùÅqh|bnjf,@ü*¿›Uï·Í]ÁS£˜àÊ`#lgÎRB»4³îðây¶ Œ ~cæÌ‚«[¿.ð]0LÇ•B*ìX#ŠM»u©¢ð P[± 2"S㽕‰ŠÌ–W}õºÌ… ³™;tyK™À«"«7hþŽ€ ¨ˆCA ä†-ã¡AÓ`‚.Ï&±6S Kž‹`V2“ýiÊ— ¼¸ J( wýUó¤8ÄÈGInS|ÑH¶ ëw«G°aÓTñ:”ÄÀ/ú§Ý,MèV FÐÒ.dœ÷öËNS¦€“äcÓóçOõ˜LïW'‡Ÿí寢wÙnݼµjÁ²z[e>`D¼¸À)›N Cá<¬hû·=†á_h›XR8gÖLÁk3Ø6­ˆ¡­ñöC³r3Xà{+T·’b$E?ùÉOlÞZÍ0*2ó­$Jé Ç=¬–=˜¤KªC¾~9nø§Ì²:öÍðb³ ­¾Ñp@VM HnWXgÚ(Gueä`¸êàøÔÊ5l›GGØh5ÃÔºþE¯­WÂdTÛ ï4js‹„×!^‡Å¢züâ£ä‡wœÀ»]½Ò¢2ÐðXB)|¡Ëñá#ï¡‚ÚÁɈ=ÂÏëáÄÁñˆ ( ¥‹ÿò÷~ H禣;1dÒFß” µPÓRíÙžÙ í×LìØŠ‹Ë×ÊW;ÓÂ;E-OˆÕ00®–lÂOù…Ö 1޹jí<ÕdJ!ÌoîÏyÍMX}¸qùÊœíÔ{3Í6\']p¿(q —`Žegw}ðßÛu,q½'Æ"Ô ^ÄvåÊÑ­;3•FJ—„ñöµ“ÂO{é×û„ó‰TŸ˜*Š‹Ç/Ôº çŸýìož<ùúÆ ïZ*m2Æ¢‰tc**.K|æX”ÛwocHêyAˆnŒÔ“9:%¢µhìµoQ¿<ºyÝQ`´‰ßÁ#nÉ~‚)€(Ì]]•úöÙ·Þ¥v=4n…½)`ä¦oùôáu–Çq“I¦ß:ÉÌ ƒž·¹"å¹BÝ,¥Å²µ4 g3Á³5‡|áWº\3zûÐf ÖÎ*!¾ÔÀ—ƒM޶¼¬‡fêrßݺ~]›^úyîÌÃñ†Èô‡¯·éµþ!(Ž˜í3ê&“éþ'@[Ä/øc†^ä6Q˜Ô¼’ t›¯ @¿ø2¼pÁ'ú£Xòjù8¿ƒ„Æ´d)”>ï…_¼åIZ)£U„÷ùKïÏ}çt¡ûÿî?ùG¿þù~U‡páÃù×o”©[á \Î8Ç?™QhãþY¶N{0Ÿî‘ø•øùNœÄ#3½Al}9$Ïkä’žÃ^=’2%í͉Ýmf}¿ Õ.Ί•ˆwMtE&rS&3X–bœ\b¬•·ùœ7¯Ž¯^·àÒÄÆVÑ:d²‹FÍ £wÑu²š™Öl± 6NpS“Þá·±†U´×F ]†°‘k†×wâÔÒñà†#J»$ O›j¨Ã4”©—¼B⸙'îõŠ<„YF`а!A W«®!»i_pѹ‘hzŸcwyŠ12ü˦p S]t%>ÖÍø¤’P1ëS¦•(÷Ú¿ø¹©ˆKì:‰œNk‘‚L¤ú›ðˆ€‚ïB#8fŽE2‘Š|\`ày9Ÿ6ž¼²"Q÷•h ›tOµf¸‹9ôÁÖ\žáº³—tUâ½Ä©k/B½xøõ¯r³_®O䇳¤ŽŒA]‚¥À’ñºz]ˆõçëuØTÈFÛNèŸqÞ™ÂÆn#F~Þâ]ç6ž$¬‹N&ºmszÍyˆÛ½2‚~‚‘ây±Gjg`ðöÆ5“I ö¼&”òFTBï";µ(ªœ¾È…àÞ÷¿Ü»u}„ þ»ìˆÝ‹} \ 1¨AÊŒHfª+Ä÷ÐA µs¡ÑÈòœß [úÓz® Ê'GÚNˆ„2éÜ£˜¯~:/A?íC‡Yo©3ËÓcH©ŒnÚl€ÚiÀlãÀ’ž>ý¶ö J8nT‡®¿æà,¿VúÆW鉵Nn¡ïù¾>qn1AÉPo©.ÿYDŸ¹Q”3¨½!žËÜÚ! Ž<Ñk7:דˆÿú¯þJ…¶ù:ë·þù?¥¦¨BdÚgã‘!á’æ7“]ñHô@ÉàAx” ‡•Lu`AÜøüãLu´n5®6o ”«Úçç–™;!ú¸–ž­UP—)+5%]32 ,E áÔëÀ1"dÒÊ4ËÊç€cý>ÂdÁâ'à°U)8,_9\ˆæ®9xº¦vÈ &;%S™y…P-’N:½œÅùQ™fàa8Kcì 4·œ”Ø4…&J¤À- ¸:®½ÈõNûyÞ¿¿{ï¾bÏž>³µ¼·Þjˆ*Ø‹ý¦ÍiêÑÑ]ô" |üÁ=iÇTœæÚøo4pñ¼(L }Îë„/ ÇÁôäÖ;·¤ ùu.>w`*s)FL'ä†z¯D© [&.H¸X8ÆÐrVF=ÞçÙšÊI£ùE,. Üh”¨}êÖ©µÜ€‰Lª…]Ü7ш§ÐÃ4ʃo«Š¥º ¼}{óF¯>¸L›ÄEßù†¹29í¼¶À­h8£ ´¾òì’q $Hð‡¼G©´kΡ1e6(¾» 0Ô7Ldƒ¢å]Qf_õv JúU2¥êÉ:€|J3^4>"e²Åö*¹”œÌ±Ó2²Êm;‡fõgÄ—k« %][Ø­~‚$‘ì)˜9ˆÒ ‡jž÷èèOÿÍŸ~þ½›G÷¾N‰ÜDƒ¿,fXOœ˜?S‡ü«¤ "ÂíÝ /4§]ž”u@˜báž×P ”!‹¡p%=¬Ô3ti©}3—ØEæJKÇ ú¸ÃEêÿÓ«Ký‡°‚û™í£Þ*®ž®:È(ò áÒáu‰“™ ô4F"Ø_3‚Љ–PáKê2ï#ë¹B98sÖÖ¦ÔJ¹Ñ?M€{U””€kÏYÏÚß%|ùU ]@©Èçx:6’Êt«ÀÁÐ dÜu ­@ EJÆîM­ã•Ìn©Ê+Sq5$÷vê(«KÔæaÕš$Ûê¡+PILóŽžÒ ™ö¦¨tfz´zÁ§Cü<ü@1u3¼áó½ãœªþ]2¬B§êÜ.èY@ð˜&úÖê9\ ©ûæ=”\RU5Q¿îBs.åy™šÛŒp¦'FB³úÜ·í‹ Ã¦ñ(öx‰ø¯"ºœÒH]Ôu©ƒK¯¦ÍôkѦÕ/¾ø‚–}ܩьvͱ…¤x¶¢½t“˜"oVf.K[(nnU\2–Ž«L²qQö-{ŸË>›KÌyÃMÜãÒôBÓ.VÀSQªnïìUõÈ­P Ý„[­ûeÕš“ÐÄ–WÀ#i™d =¢Ñs³ÙUïi[®cLŽ ‘*Q13£ \PÊ;`,ÀŽX¬nô¢ý%f/f Ö¢°’gô˜BDnÑyo9Ô¯²]üÑoý3í(¶Òx¨ŸëV“Ø!áÙS¸†ÂºEèzä—ͪ5ž§~ê®r¸/hܰq¥5Çä+¿lò ˆÂࣀZ@TŽ*Bo¼`“NWz`«,…1Ž÷²}dêé«b Ö9k[“™Rjn.B7"™±¬‹[÷?û”y˜ku®)„¹S‡ùšQ¦W^7°p+°»Ë̲Ù^q1uYÌgO÷!º¢Áñ³IØ)(`Û{3wáùû†ÿº÷D(¾˜Õ4aÁi@þñŒ½|Çt¥)"ÉEP€m°U†cé¤FÝŒŠ-ÙÎÁ¡ «f–5o«G1µ´çMëlUÀ.V­bœÄ-07 Rv¤{srÆÑaìöΖ¾goÍ—Ù4LIŒf…MMÆÌâþ ™b7)uá‚nžôÁÔ8œ$é×ܪ«¤c´GQ³–‹“€á³…†.Hƒ•;ÃQ×òót‹Wv²êãZ*¡·FT·QÖLiCLÈ'ÓÓ¾ð=c3p  ’‹¯— PˆÆ[¿c¶EÊЮ} ¦ZéÁ¬HJ{„‡£tÒæ'Q¤˜Ì8^dR§@ÊÒÓb®g¸8@TTxËKËyíÝŒ>àáùÉÕyo,OgòH=sæØk&8ÿL½óó  ƒïpŸ×¯²iÇÅßû‰®P¨dþ¼ R& O—HNþnÃÛÕx¾Õ✩&I:ЦM ÕSf!)Žá)„z«:…ùØdøÎÃ+¿ŒC¯áu‘¨qÛ8t|_ö^‰âP·C3{S. šÐ˜ÁQw‹nª¸, [çB‘v}n0'¨jA­)}Ì#Kà†FB}!–oÀXþ¾ƒ‘Þ}gr˜ñíÀ‡ÑUÀ{ò†!œRÂ!dœö‘>KÔ+€‰Épî; ÄLà»Åâ(`¾‡=Ô8¶Ëjuü `‘¾¸Ó"2¬L-´ b¸ª—3¼°¯uf³p“Ñd…Ð𢪀CEzrÞ÷é:Þ†b-¦3³”«µŒ³_øVÌåËÔk½É(a•MqRvDQV¬ΠZt¢ÃöÉÐJè#Y–ê µa]¢uºfø -hÒ8,•“Ùk…Ã.$+yµÉdaܵ°½ô ã·¨jžL£x¹fÌD5mŸ~fõv‹ÌêÒîž!5±Ë%­Šk¡ƒ`H~ lW?|Õ^#Ä6“@9?µð«â"3øD‹LAö»i²ð¨2­VÄ O«“Q¿8‚M›5’–†+¶MH#°I'‰ï•Üs¤§ÝIâ(Þ?Jt†õ|ªKžZæX•œ%澫2€šæ*† Œ½™½ Ñ©iÛ¯÷~´h%qÕ”QØ­Zm¯x\!ÕA¾£3y'0MîC?Þãq€N†oqC5q/¬Àt‹4n žãrOŸÙy¢BO7iLãÓ¶¢[-ºëö4{ýßûmWèÌõèöôðÎ/ë·>ºÒõU3 'Í{w7ߥ0'ã):Ãrâƒj;EÁl^ LmMp*bU8—'‘ èò3¿‹FŽqƒX¡½n(p6GBsDCca"MÇ¢m¢C µô0#c¸púPâ«—/„ü€èrb©¢Ù ª%h‘¬—Ü8ïäå+Ý!µ€Ö­ë/xáÝ=-Ì®j¸ik!Ö{!& 1WE&ˆÝvhÈì«&Ì«hIK³.Æ%ð‡0ÆÂ¥Gc´|I¨h×d`hdW­E#V¨…™ø ZTÏ‘ÁÔÝ”¡ì5‚«›NÊ}^º ¿ŠÁÙE¹y 0}ÃMSªÆx‚ö±‡9 ÐÕu¡HZ™sð„EH3”=L|O– •H>9a½fp4‘#í;TÖø½Çà›/´Àá¾*slÖùO®šÔÕ'µN¿*ÄXÀä±NdjÅdÜ›ßôVs@|0vŸ«‚· Ì~|Ì:®#_-¨º4ªnÂL#Оn;_­¥úÖ´²®8ƒ¬MOÁÖI˜Ìr¾5ßfiŸ+ýú¥yé&ÆÑècÙü”iˆ ñ_¾4ê´F¯àÓnƒ&ÏSêjk&œÚ`¤é ÊdGs¬ÿòÓ½á¸]cŽ K> 2ùo¸Á}œ*jzêÖßèLó”€oaµŽK¸*Y5¦™Wy*gñTQ§O²¼"uƒeŽõ’i—º'oߨ—÷Õß~õêäñ~å7®ß¸å+Žm ldõÜz !µüÅPõáder…)E#òmŽ€$ˆžÝÐ×–†D=\—Öo^sþD!¬(oµ|Z–ÎÊâµóÛ n§Ÿf%á-¾ÁªÓ õø ¾ß…¯‰M¤CP¦ü}mMŸ@ÂòpEu!œõ»S­q³}Û*ÍÇæÙ2Ŷ…é1%Z¦«êá $¦Jlé5Õ,|ÌñtT&›Zl5𶻕¯Eå=·ñqŽ>(,cKœ”gËlB1W½7h³8å©2pÅ\žBrÓC ¦Sƒ@X.4&á—0‹Fy0;ê¬ ÷2K]ÛºËÓémXeMÍÇ„°¶4Š·2‚=æKƒ‰(¬†<žh&¦‘”—¯n¬Î`[u¼Q€9¨KŽ^b3*hƒ Iïú ­yòôNæP˜â’¥´._¼®ÑqÎ\:¹$/ß»›þ›ê¨¢®¹{¸Ù½„Iã}[‘ï‹&ÉÒs3¦ðÔéÀW9[¦Ø˜LÁ›h‡óaü_~ùÓVÒ,Ð3ƒÓ¡Nò­iÄ ÐÀAP^KBøh †p&ëůmåš”ñÔÐW﹄òH‡†¿ Ë^`±n¹A¸s›&£T-U^q+E.Í@JpèÝL­ÄU3)¾“}Òæ Ùˆ½˜×dÁ,ÔÈßV¶Š_O?zúõ—ÿÛ¿ú_œ©ïÌï}ÿôÎÌ-šà͵²®œq2ͺ‘63Ð °ª¿±é ãi›TðLÍm/žÏ#¯tò88²¼ÖGZ.cI ó)¤¥˜§ ƒ’¼i5œA*¶¡±yKnUÙ%ÚÍJ.ôçU,M»äb䣘ô²X-Æ8²‘ñ^/UÓ‘«|¤%­ªìx†öW9kàÛ§OQãÃã¾ê%ç"8“»ÂRðâY›®¯]±åp|EõÛ'Oà¯Ö:šbªƒ\ë».Ûî׫ε‰LbˆoŽÍöŸ%½}—ý¬´±É$Ö,ÈÊÄœaE´8+”øÛŒß],¼`²4g˜'ôiÍl݆ïo£ùx¨õ·­Çg†ê—å¥=:b`ß>~Òvêþñ¼ãî–{Ø‹4ÕRWÂ%>¢‰=9Ì ”äŒ t–ñãLG•ªóSEy×qß'¾æ³ˆv;„U—z}ä7Ö—ãÕ“¦¢7óÝ.™ÚÒ.Ý©ŸÃ1·bÃö‚Υ̊ ÛTš› IDAT—F9Ê{v«§º· oyúà´™nv©åU*G?È»Í|ø(§süëí9£›‹ùy¢¼t=·¢.þÓ.Ç)Û¤ »Ýí·–À„mÝ/ðÁ´mðmÂÌWÀ9§œ| `%S(HßôóÐõ´œÃ¨9Þ…¬¤†ö&“Ù²³ÂòÕ2+ºÜ³÷×S mE¿uõ§CI…ÏÒ4³½iã´òÞ#°›±SËìþ‚¶¬“P]/ôþ2¥M .—4Œ7nÝ8éLã0ìÓO=«œ`²G·ž bQ‘з°G®O¼§’eäjXF) 8C©| GÎ*©I+¶`ÕÚº&¶3´ËÌ %6*ã ÇF­€ âþz*G1YÒ(ZøºÒôs†×˜ì¡Ÿ®2 yù¶Ðäa.àôC„ùlé­Q\]äĪ‘|…AvMyEˆ@ùƒ ài³2Cë%òCîpJKTtÌŒ üuF¬Ñ˳A3•ô!kNáÁŠpcÅ÷P¦ËSx‚ã×ÕÍü³91¡Ž,ƒaAm¥V]=÷È1@<0àKi¿’T®lÎGH}gè2‚@HjkEÀ‚€LÀ#m$«˜ò68q)"KÀUY½rÆÈâª(q¤íJ†ði$„ûÑù G·ï’oåÈâFàÞkÞhd‚ªÂÉF×ïuâß½¶—£%šðáÆW^ ïCŸƒ£9tî‹ç" —ô²hä•u¨%ßÓ†êô*BÏ L…q9ËÍQ øE#ÐF¡½eW‹2 㿞 ´Á$ÅÛ|`>4°ñgó—?ÿé¿?÷þÍãGßܿ׌Œëý‰C éfsNŠ·*¤¼FmbkÖvžû”-ËqRÁÅßüÍÿÑ’)6 8ÜWS‚ÒeHÿýk†Ë$z0ø-Æñ¼]Í&1:ºIWÏy%ÀVÞEW9/nW½T§<Õ᜘Œsð–„8x°ª &)œe¤è ¯±ùl–¬·óÔ# ÌZ7[ÙÔ±‚ÊWEìéYšW„ Ô1¬‚¼}ë£îÀž ,bJ»Å&ïlüôþ½Ÿ?|`RÔærƒƒwîß§Ækà“$ña#ŸòP†ûCæiÚƒs“;B7sd+ÄìsW Ü¢;Ï6ÎÑîTøÈ»ÊkkW[èÓ÷B®Ãœ:;ªÓ˜©Yâ£ç)C»”Td#•ϱբmfxJz„„mQÚ…º ¼#JϾíÌÕ$ûÿSugKz%Éß Hì $€Zº MrDŽh2™.ô<ºÑ…Hv“ÝÃ-|«Ñ;HWzƒ6Ù g$’Õ]…Z°'@bÑïïþe’:•u_œßÃc9qúÝ·ß~;†sÍkˆQ %UÄÜ$e™Ò¨ÀÑ­$†… ´ US–éÂådâ­—î|sþ΄üÏO“AVüW¼e*гåKëq©y?Òà()a(†4—w˜ Ó—É…‘§’iËä(I¸ÒiðÌx-þ2ÑECÕ¤˜3#iIÏñµLBY˜¸§…ádaÔ#$ë°ø>„QRÏF‹M¶Ægã©´µng¨L”ÉXzÐ °ø©pˆ qk‹2§bj°cY…¥›ü-oœ„Pbze9{ÁÝlèA3ÚÁJsê|À§êENíòIá4²¯½Vá¥å»/[M+/g3÷®uOmàûkn®Ì }jƒÈÍkG¿ýáüÃóõ¯ÿ›W§gwm7žþúЈªJâPTˈ(ÈYܸ8-"JåórØ=ÜâÌj¨Hfs$´ñIy0Uß;;’ã§§à«âÚ§(k¹¶­uAž†~“HàSªxÅ×å,,(¬€û&”ÇÀW!÷D+º?TwIJ Ø«¢ØeT]Èõ›ÏY `UKEÔͽžÌÐaiˆ’´28ø S¢Q˜xx@Þo†‰oÉS€ÏLá”_%WÙȉQ㾪7Ö·™‹jhÏ%Óåç%{%üÔ¨k±: MÍÄDe8Ÿ5™È„ƒb«T‡b`Õ?$ žH+¬Tç1„4°Ö¯a"­¸0óèZáBgý‰V”äÅ1ÓS­Œ9`”j¦&Ó4GMB÷Õª ÏÆ Z74ð·„bÇ…ëá÷µ…óP„†“œ©¡CüÜ}IôÍŸi Ò¦³“Éè! «Þ©„ö²¾J2uj6u±\™* 8:xO]”er¢@Âz:éE{}ù¾xù —*¦¬÷Þ¼sâèŸÚíe© êíë9òÊAÙóâž©+ A˜;ÂW¼L^Å¢ggA ™êŸ|;ôˆL…ª Ÿœæð‡bsÑÎYð·ål>æHk]ª€v µX4¸Øî®0nhå½÷èdËšÓƒ?~ê<ø8%Áœ¶ê%UÁ½ÿëÿü?Žï8‡¯˜éèúí?þ¯þôöÝwŽO¬“ #°ÂÑðœ¢5#è_4c¤yÿº©Ÿ 9úío­Ú‘.‚zmk’CÆ6©UíuËC݃§~.«óXáå`6¬iÛÑŽ›£”講¿Õ«] ib\Q¤¶¼UÏjÒ¨ýÔ”…àc.ãâƒêÊ» Æ#ˆþ¨â‚›mbºyoErsîfPQdp‡­6³‹´ &Áðì@R>ÈŠ/æ·¾üB»6tóÕ/0ñw¿ûÝ?þã?þùŸÿ¹ÕôçŽQðžÂ¬c®]wªC- ,9kn¢“/ôè3¿}ÓAãà›¼èò†™œXûãB¨Awܨ®à½OÍ|,Õ ÿ9©œ§Í4–Ývãí="h©pìÒi¦sÎ4wŠütoJ¥‘ã SujEIãU‡I|¸8¿]òÏμØZ­XóÕk卵?zô i꘠$>A'š„Àñ4iªïî àC£´Ùø)xbšÜm³lG@J]‰ù&bÃc‡øÙrk"ª=^ìÁ¾Þìûï¾c=Ò(~ÆØÙõudx¨»®ajÃqtQ z°m …†lrg'qOäDe-(]Õ¢X),]*p]t^€Ž]ºIAUª@ͼ±| %ñk7í?P†`3&’½êÝä$óâÅKCÿaxñ"p[Eý—O `úI¡íÃ@ŽŸˆÓJ‰ÙIŠQšÃ1ÅIÛ%ÛU… H“‰o!Q< ®•ÍqOàÒZ1w)€ð0ßÄ äÀx˜Ðä TY?ÕF¬ê /&c"*„åÈ]§uáßÓïcÀ¦Ê»Ã'}Ÿ%*9Â9D™“êÎÎÖ\½òŸ~÷÷·î||øÕ1¢÷oÏmæ¬Ô£ì*b vAHïÿjú4lðW̪½F'ß—XüÖœ ¬Ç“„¤§RE.?YGeæÂØù7Z6OU*®­ ˆ;d¸³Ó(èŒsr0á௪52j ’£A¹xeüD”?”îQUÅÌTµ€C€ÜyNÓ/ÁžéRÓ„À éÈ{!¶±N3"~ª(ñyÅÊ›‘L^zXxIqBͨÎ^þ:SúåìÎK(°)Ó¢ÏDG’6ÞÒ8´Ù(M—j¿ÚÀ§ÞY‘v¾œãRÌG¿’æÙçU5ã*v•Ošw40SãÔŽb02E&:=âDPž—}«ÃŠ ¯¼÷7ц•ŠCŒ- ¤Ô4ªÈwtbÞÉ7ß<ò•É•¸C( 8sÞ:,nÓ@ºƒ@ó¦(SqÛVa5ýhÊ#¨JÐ=úâWƼ.§æMx1z¨YÞóUóà |‘VüoµºýéøfŽ[Ô†±qTÓåU{aÆÚÚk·,çç“Ó„öØ5$]sPBÅp[=¬§pv&xLÒwø¶Ì§ õ€ à&?Í/úÑITëš)¶é W%ZÌö¸× ±å5 ÕæoìçÍ{*L^4äàëq¦©Ðâ’àRï¶À7Lš‘ôNwÕƒÎUp` 7,{ò…¡ÑTüœ€<]&9Êq×£„íÄ*T“Rö %þÈlÙD”mÃ…??ÿáøäKÞ_È)Ô†º!ñMÒ6Ìt¤iÈÌO0 ý\ñ¢bVÖQª0ì‘á‘ÁÑØ á§êù£ŠË@ê„·h\Yà ]¦Ûb¶·ï΄ƒxÞ+u?µâãµæJgYavGøÝ9x{~ʪ¬Ë†s{ð?¼³‹úèŠ9þ>lÂã ‰kÉåênr§†3‚b¡ÌÀGßgf&9¶ÃžIi­òº*7"Ï *ͳ\ÐfÖ4ã–Yœ4}&¹TæVAþxÿ¢‹8$”•Êå4ç;Ç ³bå‘P¡sb•@yµæ!0Hß šTy΃ 1 þœùDL,gW-ÒOKiùõ¢a*Ó˜pü|±Z\Ÿ.B7«˜àŒëÁ¢‘o‘X‰Ç}F¦7ï 7¤ìUÁ½iŽÂÆñº†"Ö䀛~Ð5Åè‹I€]âì« (hL/nŠHqöôçŸÿãÿý;açÅ#àƒ¸AÄC†¸[êÎî~ú©OÓò -rÙñÖž°ÔZ¨nÇG2ÌÈÍ݉µgsþœmsíÅÕã¢Ø¢ ÓTY1·ß‘uGLJ£ÔÐ7“žx™ÒâW^TÐvn~÷¼·²:¶ ³FLGפOï{9̀ȶ1Ç‚(W©.nZõ„mƒìñmÍPB*wÙTÖ|Q–@9¹_u:¦p ¥Ö ˆ“ÕкLÔéeÖMa8z«3{"uŠin½›=$ft²¦ßÿá÷ÞR·|Ä ¤ê,{sô2Ûò½ôVo…{'ÇJʼ߀/]œ›Ýêt̶ ¦-’aªW5?ÿüÑŸüñý‡_|þÕWßüò—ì™á=?¾ƒF®©¡_nŸ,ødœé5l}b§Wš«/?}ãÀÈ[G¿ùÍ_‘ŽÓ$ÖÅ‚‰2aµ”7ù8ÛÕ£éaFõêH³ª&±…ñË£±ÿ@ÉÜ‹IÊ'ÛhX°£|U“129 !GÅŒŒÀñ¡3ã#t Îá‘w„ªä–'!ú9?Öéñù{Û‰ŒiXÝ•oMx=›ûdë©m¿í`tṉ̃¥ß/¾üêÕéK¾ÜàЫž˜)‰G/_9Q½õo©5ªŒå Êr2à.±rt$0äMx;<á)pf3⎇÷?ßpùô&m†r'²\ÃA,—퀨+\ÆLȯBªk6ý€ IŸ #8oØ?¸Íè]BnæEس³‘D(ú€iémËè·$ „Q®Œ­w¼š°áX¢hÞ‡‚¯³ìqR‹Îaªì„ðj2ÁÑi·yy( zÝÅF¶õõ iy'òb¤JC{Ñ3€P…ÕԾح¥Ä”iÕÔ"æUé*“Ë¥Ï)ö93I çÅ« §¦êÔfôÈÃB+ߺÕ' ¬ŒWÜ §æu¡ Œ9äøgŠŽ^A¡„T\syޱ 䢖wh;=¬°‹dE¨Œ\·-¶Ï$@’j¨Í€×=qÏÓZaôXžG‰[I¬^ìk´a™¯¥a1¥œcq õ÷Ê[±Ö_&4QgF´¬.hR]å±%EòÓšÅèöÒ(=Áo"G7É|Ðr¨ 21;¬êlÆ”ƒ¯„ŸXª¶1'äX<’ãÑBS½ÌNE?ŒõÔ'#sƒÓÇ+‰cŠ\Ògp‚9½¾V–î.%Aó¨nc#ä(ƒí^–ñupÓ&çX 1qvC‹0h)ÇEóÁ¤Š«Õ*}Î8ØSNhÃS?¥6ì ïF¢3³Và8쨆£H'®Š¥HzÊ'ˆ GðJ¯è>jN0_’ òðV7Ü=ÚÌ-7]µ`8ÈÆ$HËÜZ¤¦õÌÁ8eæü ÜÊEu……•¤(±l¤§³?I[®%±Ð^—4&hÏ¥=mFwÌëd.]Tv‘¶2sI»V»JTT46ñ%ŠfØ)jQv¹ÎÐ"=•ƒiþ\*©áÎ{à<£Ó›Ï”Fóá G%ÃÍYç‹*=ád¦.ä-uçÞùÕºÏZ˜‰Z>°eÈ@O#â! ˜ˆŸÑº|;öˆ¥ ³Š'þ ·ÒÚE#ê1›ƒŠÈÁ@c!ºŒHþ“¶·¤åÃ<­h‘u ÏÁ¬ÃjÌòJ.±…<»/r8Ã[ªëEQ£AÞ ÓBF3kþæ†U|(6” çR,=Dzi¬GÒ¢Š4Z”¡ö(…¾.¬Áú®´þ÷éÓgf¤ŒK•WXEê .¡\%*JíÍýÈ7 "}Í&€*c™Àù*šM½…Å7o´µßlŽ9‡^k³hCʾ·6|„<>›R"~8ﬧVh‹‘¤¦SƒÃÌJ*¦øH㘙<ø8KȰm&Ê|ú-ï yQzG‡Ç"Ráú/È㡦õ¿ÌòèßþÛ¿1 —¤åm’Èï™uxsøˆ–iÒ%ÿ’+u Ö\°^½½6¨TQK*‚éî§KÚ]1G·Ü*#W†—ÇY©( %wÁ}OÄË<ÌÎPbÑû'÷R´eDÑ„éÖ´>‚D£äosâ£>þ“¯¤tÞœpô^c>^0~ñå—h™ž£ÕŠÏï?ˆÅ3ñã¸vaýÐh…[É:ÓÛ‘„>'vCc^¯›^þ°±N»ftF_ XÛ!´»f¨°ðÙb–ÎàËþë˜oOUËG}÷Û7jšµJ„åLt‚oÐhâIòᎠ³û÷OBƒXçE:…æ 24ÇýÞ|Y=~2Ì]Ú‘£:1 Ø2gÞé!TãB!gi%õDìW˜k [Ò\žÓ+Ì$äŒ:y1…­½‘‡̨›ªÌî^½r:i” ÁI¸­ÆÍ°¥6øY¯©nUê Z7Qò“Úš‰zL³Å‹ƒ©iƒÎ4Ñ©è*“gx £´Lȃ 1‹3HPŠà1gðP[£mnˆiÓ®ÖE Œ&^ñÈ/QÇ“:É\àšNë %ÀnkkSÞ…oÞö*v-g<õ³Öf3…Ò¸j¬ûógr~8¾ë…v'¶¿³ˆ,Ÿà¾žT pø,2 ù)½ÌTXMo±ELs!4 Î2a¢Š2Òr$ögi#› FǨ¹‘G6;†”Y€$2§Šò̦ÓÇqµ†ÎÓò?ðòÀ…  U³ûkÂîDÞáÈG‹¨È/ªî°ÚLù——’.ÜP@b‘Aˆô®!×–—¸„£ŒÌXd'Ý'Îðˆ’z* ˆZÙïÎt ߪÕÒ{ýtØŠÕ&’PgxøLò"À‹T„Ûv Ò¼Îb1—Ðèâ)¡59.%±°¢œF(šŸ­x2ï]rzØ 0„! ¦q‹òt†ã0—e¦0bíU—ï½&v$§ ˆœ…,@£DIÚö0èþ}v櫯a¹®æøö±y7=·â'4½wrJèY³pǸ (8€(&ß G'do«ÖòõП5è ‹Ýé¾Â¢À×SÄôüÌé,ÍYÈÇUáéæÀß•Dsü"!ä#!H§ä¡z¥½ä> ç•}Tœ)1ìjã¼I»rF)3ž_Nš»Â Ô±)9QR"1tÂB›¨¸HŒ÷ÓEˆ”G¡¤9ÈP{ôJxäR&cJÍ:q4ùØÌÓHØÅ(¬‰5Æ6ºÌãVH¹L“!«'rÓ^_8=íb¸õ„Ó>ÐÒ^@¨¹C¤)¦:,`¥íÉ\=3ËJEvÄEíM“§•HòH/n³ÕX±ÉûÍqÐb.Í ÌA½QmP] H¹š Zî]9ž÷!qÇO¨Ä¿ø’ aÐæPz!ro¿ç®7eð¨€i©‘8ï<5i º|%‡†xq¡o‰PÀF'È’ælu¡!€ŒPmÜâºê•É—™Å¥!ä“™H§Åzj(­ü¬yV/Sx#]9ÏŸ?Õºü;wï9…òæµ; z!íÈ“kWE÷ßÿá;38j'õuò†ûHôëÓtKl´|€L³¾#4[¬&ôý¡b+g$nâôÔV^\ÈOõ…ãó×Nóþ€(9j±Rå©&°·ûj²e֗°%vY—žÈ1ѺAon ‡=@½f[•Çw”Ê B³ 9™;Å@¾ÚZw쑊Q’âjWŽÙÌÑ(ù¤¦W[ðv¨$—ဋ‡(eìuéMc£H@3!CZ°X' ˜ª‚½ H¢ZC:|v }ùÕW|öüùÝ{wNîúÚL¢çr¡†Èfά&äŒoßÚ£O °IlA¾ð ãêû¼‡!4àžf§V>fYŽ(²Ê¨#TÑú£!.V¨è‘€L?«uµ–7éù¼v¦ÑSˆùŒ¡·*…½ ZW—Ô`+†´˜a¯º‡i°z+|Ó>‰¡‘‰HÌÐÛ¾~Z`·…µh|q`¸‹Ï>RwŒ”±zÞt¶%êìl¢):¡¼Õ`:S Ûä4 8EbÉ4lT„£¿þõ_†®H°~ŽÔ²M»N˜˜2õ S’Ð éÂeŒ r«è£ˆ½î¤˜*Uœ}¸Š)ì'ÈmE™`«»µQ…zAdápv {:µ™Õî襎!j­¬Í FiCÈô’ö¦Ÿuöw‚4Y"j¶qßÝÀ/ aÅ 2z©Í6v,óƒñ¤™o΄Pùññ¸/~ñµpGôƒKšà⡨u±õƒÏÒèAÃ_»éV!°¼‹®¾î—ešºÐ"8HÐ2g‡‰µyî‘dF IDAT=.Dâ&ÎÆ %³ç6M7Òž|1Äå‘KXÍ,$»kÚðÉ#…ÑÎæµ9wH†‰æ´"g™¬°vÖ¢Zã¯ZPàbüÄ|Ó.%˜E`P—\Èé];ØŽM+9CXiW™¦ ÒTß/„v ®C¨ç«½Ш™ bŸ²úÅ£>á„m‚ †U $î)<à›n!æa”µnÝÔ‚2;A³;ôø)üÙbhÊK­™t: ²&äˬõñMëP´ˆqp>ýSRB€ª» dóùóáˆ9€óí ÷é–ñ5;£fl mŒQ ;¿¸ÊÄ.½ÒuŸVÌDúØe¤¹ZK‹¾Q½˜<ãKì%xo³ÝtfOÑÛ±õtÔûwð‡›± ¼&a…&4]Âr& 2ÇlYÕ?á'*üaòHðPS®;xC?A+Ëv^ØëjW¾ÓØ çømª`­|¡¬QùîÚýþûÅ×ß(ÞXÙ<‹éØyCÉÎ1õ­kKb¡È ”deºËt)¶²ö½[füýéŽd8H0P’ú—¨â5Ö¦ò±hº«)ÙCkúz˜í°T†\aݘvÔ…© êÀÄ7 9Z1üǨ‰œ(6‰¬Pä,-×¢»×Ò‚œÍY— rÔ]n,Qî[R¦DvZX£`þÇõUÊ™—”ùú—³¬e/ š^Pž&…™È¯è€ºD,çZ*A…Ë«ÃcÖ‹ }öÄ^Z†0È.õ¤Ý=š~ˆ>ä"ð¦Œþòµ%çÑÙUbâS 7þªï,r&˜Å±sÜ.Ôc¾Q‹~Z]ºqO¥9v¡ibÒÁ_B³›ìúMKLÀ^j½¶-ÎmìyõêKßx¾{§HÚ9޶éÍûnHpqþ¼éêÒæà!Fר"LB .àº&Æ]ìkï,®Ž 0‡o‘ÈC/¬ ³”Ñó´öÔjžÔ%ùúÎè—Ðñºhê¸Dã à€ŽÖ¨X“ßés^ºE·é•`ϰbfKöW5ß“Jºz%÷0ce7š/ O rVf—Ÿªü`ÅÍån â£<}¾ÙÊõöƒœŸû61µ¥¤w®A ¯¦.çºwrâ[ÃÖ¦˜‰ âLÆ õjuTˆçö~(t¼ª·@zwÛÁ—í6®Øàm<Ô¨§»2»ª+¿¨¾ vº»ÜµÎÖÒ­|køGòWlÄ9¥"lEE f[÷a•zj)¦étk4Mé ¾ýLÝw©Fr×4 ˆ2­Œ‹6Dc¥eCÒPÐS2™èõëF‘0b“€öR# Ô·Øf(ÐaB ¢w­oÁ;¨š‘“p4>ÕÿBMZhΙ|–)ŠP=%j*[[û Ù¤:MÇ:‡| €°¾9_ñ¼¦{ž}g°<¢²ôDÓr4­³C¸öY!wX‰2Óò9ãh©¨µ¬NQ:dÒµ)˜1»Eï3€ÏlŽ1¬— Ò¥z·=È'µx[w¯ÆÙ%Dú‰/mzp£$½æÃéÓqý¥G ÀdUTÚ%°Ã0&8ÑCFæÄL1–‹ñppÀdìBchÉ@"éDê.^×€D!|$%>§Þ#èØ£ZÔ•TÒUW”}Ág e›ÜͲ8ðÃéº(—òœ‰zÆ‹´ =h&²õõðcà‰^w”4f Lu™ÉÂ0 cõa‚Ô޷茕‘ŽÇ:!’õž„ t1ÁY±(œ­;ªw¸_@| Œˆ¯s 1A^¡EZVƒ}Ä”ÿí?ýâ_CâùóbýÃüܸ¹¨Ë{A{]OtdóSß$üßO òRŒC•bOuúO,Š øJ3µ©”_R`«ûÐ@V>8îgÒ…Ó݉M ê:䌬Ӷ“»@ƒ¶’Ò„©º x0ØòyT9ËÆeË6!­Ì¦•dáH»<ÚÂî{ ÓÕ. ùîS\òMûM b~þ0‡ÍªãWOgÚ‰¾ý×Ûm»ýœKbÌÿ¬Ñ‡¸hÀ–éâd•[Bx ¨Äª ÄüTÀ£Më®%6‡`¡ª/F È`ú—¦ñ‡úÔÎsš«7¦rgdšŠñÅÀ¹îµqô“ÿ¦ó?¾m?î,°\ñ%®Û¾CoÃIç,\3Úl_ö´¶W‘4áæ)·Oë?{OH_+J h‡-”4Ç¢o^»ÑyèÓÁÁNÝ$G¤9ʉ } Î/Æ…Xª´Žzw_(Ö(k¸Ê¿ÁŠŽih-PG6±K‡QAÚ`@|ÆOêÖé5äiE9󾄡$·Ït‰ÒS%·É³ÁpØÛÊó|#8­÷«ÿ{3ÿ#Ø#¬·_M-!&¡¢þÒ‘‚O€õTE(afñ-+^ÿ:?¾{,Œ{9§¤z]€ 1fŽöÌéayKuõöxÁ„MXãÆöµh db\¨VVe}uM]-²{­eŽkìÎlWÊ“æ`E3Áã7<)ü]½esV–­ ˆ(¢W:¸ÖÙš‚¥Àº˜»ùwû›•çS 3þÓ–ˆ;F}AÖi”ÒãH ¨ã¨ ¸äè>¢0¡{(Gá\˜ì§¤ÂªH€<pÀkÏG+0þ(§·£Ö,ËZ›"ˆ¶`¨Ž}LŒˆñ¦öNÖm ›_À*,@K`3Nþ˜Ï'ÝÚ¹ºú<ð­¡CGƒPÖ¾9³`-à”bºt]Õ÷6¬ã¬2äào>ÂnèsLžù^fßx¦”6µÉÑ7Ÿ[OJjgdüÙÕwïßܱÖ{o_Hä‹4*"&ëô5[w?Wà c \ò™b¶•ñÓs †1†(¶$ÒTôãÊ;´á#)`Ú¨Y, „n¯>˜“ÂóIô y2lŒé’òúcMÀPå\bÁ!…!@¾«”eZcáò=Ã:üøz+««Ñ9ÔÍç¥ÑG™%œ) œ6yg¯%A'ƒ½V°n-×pš´»èÌìh5s:°2oˆÍö#:òÃ?¨ëšÿðþwÁõý°–gÓ»ªÈïå¿<ý±3hËX§)îix³TÚgÞa·™ ;ŒæUA)$e(Ƽȇˆñ‘ZïõCçº%šÂß遲B5ã¾( 8T(íJhÀ ûVÞ˜†B"„ƒ|^äº 2kÂ)ø¦#ómŸ'OŸÂœmbiþ0–¯Öi‚ÓÆ˜0F¼É C Ù}ãÛ®u(¢ºÖ霧uûØKh £ÜÿÍ,¾oОèg„³"ÖîógÏÖи+6˜I¡‰./O_X€ÒºæÄ^fø`;)›‰w–„ónL(>yò” ¡ÚÿcéÝ;¾ëÐ|œ—  µ8`î)f E<Ô´ò£ SéZg˜–rÑí™ãéÛôŠ4Ç: Ôp dz6“ÍTÛUý«¿ÔðôàY./ãˆG8if £ K3C2ÔsÜ­‘åÝê`üLг6 Œp(œÕ*SpÓqy.ð[cS@Y•Ñ¡]âD2:êRe­ÅÚG“ËMð‚Ð]âQF[ÆÏnàT Ó௉’̯˜Ž2G"öÓwKIa[üp–?Ð>œ}®– (ç<Ò]Q¼x}FÒÞÅÅV#ð"f]ï‹ç>nب‚œD„Æ.š¥FŸ?|¨k1e‚.'¤çsœR^szó+øC0(ƒÂa_ogž†?Œ‚$¨å’ÎÒ.z>g ´lŸÞÐgÉU”RêÉÛŸ^eŠÕérÅ«{#\$ºø‚Ѫ-°ñÊ,štÁXö /׸k:OhãO˜Í'ö FE~) –!—©uöÆyÁq¸âžfb„‡þ>É2þ‘r^ÕàæÑç„ Ž] -2ÎÌ&h}/pÈÚÀEÓžzÿ€+ ¾ÞÌ-oE(N§¶NÿÑp¦åŒZ<èŒAÇA£ŒëAB€ó "xœ„€N"“mâ†ý LSü@É .yL™!fA ô8T`ĺ½/ô ‰w†J1x×Ýrk3;]Z‚çò.ðwö¹I$¸’¹P”].ŒQÖ-4˜Búì4_o‰»ÐÈKñIƒ³¾É«‘¨ÃÅ 7üñiíÕãú\^­„|H4ñœ/Vxåg J¨ ð “3ÄÞÛ:Så®3úæüCð —§97Û‡?.Õ¹`‚`àµÔLùŸ~úÑk¼†Ô#ŠižP×ÿ*nz^€+n¢Y¶Tã&¤Ó¨’.™îJö4{¥À†+©±¾+qó„³^¯ âä‚õ“V¨¥Ì?7½»ÖP8ƒ.Ÿ W@7sãÓÆ`óþ€´eqF”v¤6ÁÜ6§­å»ŸåÏrBu ÷Ïx< \Šdç)áFð=÷HŽk K€¹´HSM¨“ìçùª•#å5~Éj\ŠñWîÛú¡ÖľrðG-ÅðˆG$[MK4¸ŸÍÿñuÍÚeM)P™(ÙŽ'ô>üæ‹gOÄ^åíi°¯ƒc`òú#F'ÚXùÂŽóQÒ¸2üžy$á¡“Æ`:­x9Jäz|ï®ÈlH¸> ˆ›qîCÎ/žwî”­¨òsDÆK½ë]¿¢UÆ—·ýVGÕIæ‰:ESÓ˜ƒ@h þ½/?—ÓÓnYJó„µ:‡9¨ùÁk­Å£Ü‘ºøÀÃèæ˜‰óAtö€ Ùa…"¢bŽÔÉ0u=ã!ô’`±péVÀfÖ•±;Á™êH˜Ž«Wq”–Ò{Ž\"@P¥ $å(£³‚’AªÞ ™Ò€#þ<‚Îq š& åtçlQĹS¬Y´=öÎ^ÌQ'LpWÉ÷–q½ÑÏMå¢ À?ˆÞÌV GìýÔŠ^cû˜±k9¾l×4Gvˆ¨.|Bì  é’‡¿•á™[V׿ßñá;i³<u °Ü´–ÿœi›¤óë¿ø„4‚)kJ6èC…Ã-L6¿:Ç hŒkàæ˜Ûld³|&‚+XÆ2ÂUÍc‘Ù&tµM?Ž„ìB0Úð({€²5JÍ À$’YgIþV‡¥‹EÑ%áÊH4ñþƒ·öŠä0=¯ÜA ¶ãÙ‹¦é6ƒu¢ÓéHœ€Õ&U$Ø’d¡m\†h@íšM/±èìµs ¹1ç‡~´îÆöp0?n÷XÝÉ $Þ'x?õÎÍÒ“ &1“=àcjgû³W®×Azõ‰%Ý»÷À!œ—ÉÁ³çO„¸»õÔ‚Œ#ÛÀÏPª_ÁÖaÃ#t˜õz:¬ë\1 ŒØãÒh^±,ÙSF»‹ë/…•œÈ¼‘Çt°Œhî²îT`ƒsVðèÒHeÌI]*ê)¸éôÉ-ºÆ0Dí}%+¾Éä’y§9¡íæ%²¬ÖtN´§!vý†Q…@Ód/’©®3îáþäÉtÉw™)ÓƒÒ«—ÏÄ`E7-ØÏ÷sœy N›¯-tR ÁµN=‹$”¤_iúÛ×t÷ÞÝc„6‘c0D¦¢1…ÔA«5gÌœßaQ¾½3alF¼éóô Úy"dcN#ä;>‘ä»4õ ½¯KÁ±ÆJ–½sä$zcÓoßa™‚Xèšõk¨JÓj•vMŸé*CM1¸—‘]{ò¸ZÓ±ºí¼O}›ÈÊ¡y‹‚§–fäd¢T1|(ío„„Ñ Ï˜w“+¶02Åm¹>@¯ò #ß܇mj^­øÐ6Þtp6_KôÎígŽìºÑ‘3W”Ñ»7&Û€`÷&)¤Uù#\#™Ì–MQRÉüš×7ƺÏM÷ÓjÞƒþ˜®!6’ÑóáZMÇùÌd!rfБ—¨§ö£nx<Ú‡óçOöUPê$åuPë"–H±xô Éõ0“W] ÃpþXä ”+0‘¦ÛÙsJâÈœ ž,ÁAÃa›FG‚ïÂ’œ•nxç°õ yZs§ïd†(Ý>ãö­Û¼u«]*bù­Ù{¥ ¯DåÕ£¥ø© bià´† `£µr&‰WZuXFCáúWšðÚ{Xb‹¨)¶?‚@,žq5éD„³Aô5õ+G $pÈ:QMÛ,æ^ÓHÕIC—1ù:z'PÐl~¹×4H¤˜ÚÞ{㣶F±ñÌd6¹Â0§¬LÊ u¼ZÕy²ƒžë~é^ É„Hî˜0ƒUéx=ÎG2-çÀ ¦û‡iËœ,ñj/…8Þ æÃ¯ŸÝ=ÌYzÏAúìôõ‹ºšyçKTD™ëà•ðÍÇwZÔšÃmB‚¦õ©o}ý‹Gßܽw—æ` ¯ XJ1¤ås¼!¢Ï®8}Zgœ³3ÃoªÂ7’&­ŠÁðͼœ„f³h‚•L¹XÊY‰Ž‚útÖ`L—ô ÚmâÄ%h3éuë¸W¾Žì(¢eŸØùm¡†øsôêé:¼å§/£Qºúîø9ïìÃêTœåxV=ÊóçÎC0Ñ•I¿xúâžáÍÕ«g§m˜¡rªð³·oß7„X€Oâ0aç}ìñ³Oÿôÿ`û¼ÙÖ!èäaÌ÷¶õ0¯9ó&ùd’Їü+Ï©×fe4ª…)ÊÙé•YÄÑ«ÓW÷> f¥ºZ<ø¸Ø³ŸrF’+Þ‰sÑ¿¬êR’–&Ïf»}‹Wyh»À`/§SB‹£õ³W®ˆ;}¼ÚÒÉcMp@fÌL ³NîÝmÒ£ïáùâŸc9wMNÕŸ5¯>¼S9@tÖ{—ömŸÖµ%¦À«ýöסã•×un¨.À}s (ÔwúãJ\ðx¥•?õ^Ô–ÚÀJ™VY)–fæõãú ¶Ô!ŽÊÏϵ¥8¹¬,¨Á|üÒlù,ÍS†é!½s[gƒZgHúQR`6ž"ßÓé¦mßyGþ,”„ßVÜ™Så‰@À]EX ã>zB% ú ٤€0ž‹Ùe%#¸W/ôBRaƃ^ ñS1G?XJ—3/›Ä4G?=þÁqî %êH·Å, ¡Cß„uË4½ –_¤âB<ÁÇ•(É+Å4öL 9ú>àÚwÍtºÊÈäŽ>ôº wVG»c>ŒkFM°“U1&ÒªV¤QQ×5Ãýåƒð•³–^’1?E®¦j•abM†¤i…1MìHÈÅNsªSÂy„ýÌt [ጜ %›Ð T%'Ó\6ož¶Ž¹uzûŒš¬Âó†)bztÊPcç’KÓ€õˆRiÍÏXp³é+49²íw¼Ók´þ˵²F9\Ï4š÷ÄRÍ0ÉÚ±TkŽö((yè`‹o. í n®éá"?·úpFP›†ÓC(O·uk9áÖú*vNfW@FÏ51€GUêßM‡†^æ &Záé¸FÐöÒL—çÇzMkkžD²t}5‹«÷”¶·;¸Þuž‡0÷Æ[íÒ£‡%Ü•OLcÂS7-b Í~OÄàé²Ea9Œ:»iyÐà[ü‘~d…í¬«#ÎLé7¼i`OØ]Ÿs@¹^08I‘¯=(Œ©q 5Ä9‚ŠÊ@¸GM°5Y¥!ý„Pd¬ŠMñܦ‚«M7—oê«yœËThÚÝÁ÷ºs9…AöÈOi#"å;¸±ôC/Ư̂k˜èYIŽ Kc£Èû’? >†!43ì!:šrÅÍ-‘«»‚XĤ]HÆ®ØôLcQÆh?0‰b¦)ã©èGx·$ãTg˜O†‚-/œåÞUäB®7 Ð7':¦XêZŽWašˆÃ79øäZa3©ÆÏîSÜÒ–ÂÚ4B@Ž´S&»ÛËOùª žïâC¤qÀOÔ±,—ºldáB’ «å‹U$ðÇ0ñ"¹{Š4r¼qýŽq„qÉŸ÷½7wïÜthVœÛ <}ê„‚ûË1˜ðoˆ0¶ˆv¡ä> ˆA f%îän_wÕœ.ÆÝ”?Yï'`éjž[§ƒwk~VÀ…|Oá&1#Àcb…(pñû:‘^ÂÓ:A€DÌpB¸º)„!Ðì*sÖ¥Y¼1T&(ܸÓÎäÔ½ã‰!Bs¡Ýõ̤w]íu«Ëã%D¶„Ú½“ûÆZ¡ ÔWYǨ®ÖÝ”§õŸ· &²Ô#Ò‚Îu_*ø3ZfA2ÓÎY#’Çßÿ»î?øÜMÈd“8 -&JppO-íbïEE ÇWš…7íß°íÄ€‡O/§¿cVüFc{0›×0ܱ5;Ø s<€˜ýâ§ ]É`ÖIUÄpTÃ'U™Ù,ô¨.f8ú›_ÿjúýp,ú”YçæøT„ºÒð¦ŽhnŽr&$–<€¡za™€g@«8-¥L®\ îpMN…‰ÓKV“p §4 o“kçR×›—9R H8ÌÜ"€z ¸Q-à¹ð·‡óúä¸IŽ|Ø–YàÑ;é<›K`}ÁéÕŽùï¬ýù,‘†>[•7€x9uƒz±!©ç ¢nµš.D>œmdÔ”ê˜÷š‘è(‚¹¸Šº†t#!´`os1‡Nºðß[*>,õËó”Rÿ‚g«ÁLr†ÅÅÎ"Œq=9nþ‘Lé8WÃþ•þµëp‡L2ÇDÝbæ¨!ðIa»Š´;A ß"ÜfFÅÔ@² î3r9D`åQÂû·ßþôi(3ý|Þ™9¦ ‘B,µŠ§iu BQÌ€Ÿ2=šê±—?Dñ5Ô4I4ÏÞ¸Ö”&-gV®£  8Ït˜¥tq•Ùé¶Ç‘¢‹D¬}ŒuÇ+Ò>¢T¦Ž´ ‚•š­ª÷Ó#͹»”qIhË#ŽˆÁ+­ïžh1Ã))S—41¥…ƒ1 nÎæçXAX ™"[¦Ô¡laÁT>Ô9çCc37ÆCŽ·9ÑŒ®v;+¦'¡Þí]™u‹”Ähœ²U²Ã9±ªWã•WXs¦'&è» ¬cã1èâŽí²CS³&¨f Ô°VEÐÄmòNU,pSé9ø {áçηcgrï…ªhz3U@?8cÏÑ÷ß÷÷ÿ÷&;NîØÅÅXD¾~óðóÏ›³ Ò:Çü!A Š“i²9¿•ç_ÅX±ŽPÚià‚°ž÷ú”–×):yQÑS2 ÑÜ׊Á˜+=ÄÀ¶ùó“KQ†2–’ Ëæ5 ìUµTòèßÿû¿mô6½¾\Xb“¿*WéC¹ÈôC°‰ 4(¤9Mn2WãVrªÔ· |ô¨¾wå%ÆÄT:lõ(5W8Ôbe¶tŸ÷ IDATÊ.>jäñ‡ëtBÆU6fU 4‚䣯åÄ9š)Œ]ôÉÛX1nb9q´ÞúÓɽ{(åÜ"rH”~[äòè믿†-PÊ?zônÒÊ,bPZ5]Tu6ÖÓ%¼&jñ•¦J:V6úÆ‹b9‰94HÓ†G +\ÞD»X% ¾†0|¸mr•AòbùÖ‹òöÚ#Æâ7â@\ϹiW[ß–eöŸG€‹cDQUlv¤Év?5„+ ÅÔ— oi™~jÀæ'á”b¶§pžŽs¹'JR ’ùꢾüò 9CW“CdçÚâÄ ‹À¼=ïEËw©Ž:0cìôÊ~*ïè“K˜îîÄ·rh!PØ‹Í."s'Ã$÷‘Doêð¤#RA`'Éš³ (óˆa ô…ceoýa²¦F•_Åa°. Z3*€*33j X?Ý]P•ãŽp¸¤›aø‰ædH7‡+¦šèÎct¥{jõa¿ދW ǼÝ^ñOÂ…U­Ì²&¨ŸJOCµ »ü&8XPKE†!’ °’©h8X=l#¡4Ô¹€À|”ù—¸)E›¶óoSÆ‹^Æ€ C·[¼5¯ ΀ ©8ð8ðÉ m‰_½µPñê¥Ya' Þ¿ÿ`Dƒ²øãZVk]Nz1JË—\Êà2’eÒLÝÆéô¢”ƒTx7‹/#ïxj–“ù<$,px#XZ[~nCà+ÃýjEz;Ôm´üÈô#½`©-u)¡®½ÃÏðâ¸4>Mҹʺ˜„ó¨96ˆån!&áoÄÔ„îDBhÇŠ¼¥È%àÛ=!õ¼e|Z]€ÍÔœòDÎ"»f½Lb¨6UÆT}=×ÇI>Ø nw³IshŒrÍùBh”͘ÈXÉò=¡Ü¡ b¢8£=ú¤•‘Ú]P’“Í%Á…bŽˆh­ µÕý> ?<•‰^Å‘ß6'0|™œó̔ׄà>P˜CoSæénq …Ÿý'HöGIPG޲é#êѦؑe&…õßÜ™mãuí,lÉÏ”–|OµÆkœÜÇ|3EÝ0`uÁ|¨µ>š’”?³'×Q?àÀk2äg5ìÀ@€gÚÀ€C£n1ï*Ô# Ê#_+fšŽ®@iuÌŸñaUŽÎX-ušùèj–G–h„_ȱù˜ÄlùÇ@+øÉõêU¡´!ÆRý”5c†æM-&š °`Ks€Òœ2ÆCÕ¡ÄçP–èõó†%¹,"‡9òk£Ž5çþè¾=BãËO½×ÉÃCcd6*ý™Í$Ä¥:Úv%ÔOÁá0IÁX¤E­nÏšÏH$%™dÀõàäá݉à]­*ÉÖüD´Šá†aÇÝN,zã›Ù¦B‰ïåó¾3{ô7ýWÔ¢à=É­èa©Û°®L_i-ÈOóõœ5Ô‡þºF`9ß,$&Ž™y:š dh¹/ •ÕÌSä2³ ¹Îà uùîTÂS2Q™£Ï#{䮧Ѧ’Ê[ÉôT×.'IGfܨÁe]=ñÀRI·†f¸b7€"Wcƒ‰‡°ÂÆwpÜ™MßËè¹ä0 iÐ^+³`y!öîù(±á™avNñÀD¯" D”\ýe›s"—LV&>çŸ1!… q@Ïò£¨)«H˜%BˆGx9mfêÝx‰é3Üá[Qí9":öÏÓ²´%½¼Irš5_…ⳉª‡sÁ‚§´20—`™ö 1räóì:2ݾ$a„‡·œ:7 /æj뺵aÜ’ ¶y˜ !ù˜S|™tt[i‘l[™Ö؈Ùš‚í£nž ‹±Ô`÷²4êîw€Þ8;Ÿ+ñºJÊø&pGº) ]îÏÇeêUäsºµ;÷$áu¦òá¦ä!{ô|¡ &ÄÀ)£¡ŠNaÁ¯º–9†/ký‹tM*¼» ewè H¬ܵBñù»Ågk-u Q.iêyP¶zîh7¸¯Š±ÓγÁ“W²í*U»žÒgè™Ö€,w*Dx%¢B‚b€/¥Ê+ë ¯/äߦûW@?Aë+?•Yl_íóH6@¼gDŸìcÔσN4P¸¬ÀÖº¨HXæ5Sö.“ §À¸á§Â]Êhë"d‘Tr/ùèÔ-X† ŒŠ(gká¡iNRšz{äU”ßGj¹F¦Ù¦pƒ¶L]r¢qj¹kEö³cß»X®°E1tiÝ“)Ûx«ÉÞûsiqÊÇC䔦ê}›eµ%ê)§Äv=õ[sJºÁpsÀ¹|´ˆ§ë:‹ 4„ä¢î^E²sÔTŠh9ç/L@¡»Àuœ.‘ƒvkñÜWº‹9Áiþ ˆ0L¶9-•ß ‹d `VPŽÅü³xJoy9ðäî ‰K®\ÙJ|Þ¡[|žGDÐÏY¿V }ÔÃÜ Ú}ûæ´'o^£eÇ -ïÎKÖŠEÉX.8˜ õñ«ù=… F.Òø¹âs˜ŸF¡\¢–Ôʨ¨ Ú¦õ óá÷P,H“ocû9£N™§FUT i£˜…&OµfUG£ÕaY,NAV,Ñœ{뵈WUT€{@­Ù(fÉÊ4$ßÞWà8Õ\Z_‹EVKÙ/ªŽ]Û1Í$ÖgL“,y%7+e×í§lƒ£ê,~ù¶¦GFà+”˜§fìhº´?Ú²W}7É¡\D@­êí}\³´ n‹ÿ½c;k³‹qJšÖµTª2ñåêÉfº“£2©ÕÌ+‡G‹ÝSX]0zBÒ”³£øÖžS ZT Iï”7p’X½Ž«… ¢ –•;úͯþBèG§5¯ŽÇÊÁF20õsmè6y”ßHNDœŸÕdM*ã#3P7Á_xáu1á3—ê4sËø‚8=œ¹ŠôÀ]>àkÞƒw18¼¥å“‘êÛ:qb,Éy:ƒUö‰½¼’/¿ZêlSùrs-v>|ܶ›Ž6E¿=¦ç×vcmµù4}˜æL~˜niÅÍO8‰Ä ƒÏ»*_8çwSÓm”A ÖCr¸Çˆú /¶Ôr€’bÓƒ%_y‰Ä<#lšÎí2QIíQÒÕ^FFVäá^ýÀ´VZƒÈü¨…‹|ù;Õ¡ïŒsë”õa Ä#hjà ǥÅ%pƒ6ÖjÎ:„Dø¡ÃÜ(éâèêËÓQoö&ÞaŽ¡ Ä @ƒƒ¶°j¶ö #cëµ DP]¬öºáøµNAÎe«»¸Q(>ðÛÏt½MÒDðÁë¢Z˜©x'ø]±œ¿ òØ¢inÈ}—ÌÕ Ó€©×lïhž#Yu±å0Ñ¿)¢l&è2Ö½ÆÕ‘—»K•EÒÝ#¯ 0?ž¯‹èß‹ßw†nº — ÛoÎæ¤‘ÙDKÆœpU§ÆKµÞE1_@³ƒÌ€)V÷ Ô‘ƒEátåÇûÄ¥‰Ðñ±Œ eÅTÌ [½¸4~§Í›bapàÙ¦ŽÚÆÄᆺ˜°NCà£NÎ67˜d¡FÁOÎП>5X«iWü[ ýÔǘ hΧ½_&iO¯œûVÂÙãº}ÇòDn"(»j4¢³úð,5¯§ùFAÆÍäÙáFá4‘Ó"æTq6OнU ] ¨’Î¥Ì^LU­@Í´¡ù2u¨jI V€:*OhZ0cI¹VTÙ¦Ã|DÏ *¨EW!WQ~Ý¿»¶\Jú9ðs¶òùª€¦u«ÿÔL°kƒ£=Û”¿Â€`õ™­ò3›«ÛVk«/4?5±hÀÁOf‚@¶ýøñcÝtq‹Í0©ÓTb_d8.X׉zæ6f-2M&yñ¡„TBZ·¢ LTÔ¨KI?‘éZ&xļ=’ã¾h‹ÅpçpÂàᆞ)sU´Û·¹¥xâöúp~‘—òÛ"ßh°ΩMQÛ‰XÿØY†´Ñä6÷"–2Ù3AÂ5³ø~n£hb˜6îb8|¨Ðò(¶“Î<N¢}ØÒ ŽU1.JàƒXOéÍ  ðÂäÒw2¦E**2øo(æuø $LÛÈ8ž Õ*ÚJYhÜŒÞ4LÑžTxRa§G ¶34=t4,]¾«ƒ™âRàí!æ;<”\[½B䳿'w鞺ÐÖéHP³Kä¡jÅDf˜ç«¯“dPAg|VXçËxصüößÚ¢á0JclœƒjñGtþö¤¯´Íðo¦ix#ÌE¾o-Su ŸÎO Uü„˜´ÖYűŒ¨asª¥žÎ “SãùöÚî Pï‚-—ôüÌÛ¸¨ª†àO} ”g>d”ê#øŸ£¿ûŸ[¨Þ~áºR;´Yµ× ùIÓòŠÌâhöíÓUDÊoÔ¤ŸðuOÆc<þíòX¨+ǘŠiÜΚN,Àv¡“+hCÞ ›2?$qŒª pê²ÀŸ´N‹©3[Èó `Œ{WÚ¡{¸(º®‚‰Ð¶VÈš‰Ítˆ€ÒzE™‡XÚƒp}¯hæ±Oñ |ÒBl‡†ayúBÖ‚­ìjpDÅü¬7ê !Ͳ ŠIâIüÐß)sº=`92<éi=A=ñ†Qª¼È«¨ êJy¤½+¡s­wœa±vñX¾3§ôŒ iQ|UŸ]‘¤†zeæÚ6(!&§¢XÜK ˜ —ÖÝ•0fM¿òÎ…DH†m¢œw(É#Ze Ëx4̓#8ÐE+¶*Üq‚¿ÿý?}÷Ýï½Ã¨ ´fóÓþD~¬¢¢ÈA@!Î^ë¢$2)…i6\Kð³*?=J &ZN¥!ßÏ9lnHçQŠò­ö«ù-‚è°¾ôŒÁCVš*"*ퟅŒ£ÐŽþô©ò:⢓éZ®z§ŒyW«O²y<ë8ðÌ©MgìL\— ƒ7hƒF‘Ò¡ô¹Ø¤e †åCx{ù“ ±AŸ›Ra‹Ðè@MÉe"mChÐÍ!ÉO@3'Í€(1D±ШôæpšTJl¥ÇʈɰûÍ‹ŸžýøûÿòŸÿãù‡oÿÛÿî¿7®5sgÁ RÍQNÜuR -8•4ÀGïùÐpÐÖ´r¡aѸ,&_Ž*ú ÔmÉ!Jò ¬ŠÊÈ׺Ÿù«ù˜Ä¶¨€‘ÃÀŽó¥é¼V¾U/|ƒÄãO¾2ú;’òe(†ˆçåê~°· ^E90tÇ(m-‰½½Æ~®c„íí;ÛX7ãЙ Ü¡×}› Ä fב¯$hƬŠÈáXv¢‚t”ÑëSè&6X×Ú¨šý×&ßìˆrbŽº¨pq»CÔ§OŸ¶îd‘‹#œ%{eVîš_Å5"üdÓ~º³ÐV" «¢°;ƒ£¨þÌ@#§9~ÀqöÃ0ülZt^l¸2š;0몀Õ=µöœË f}O³ Z÷—|º24nPåY´½ï<°¸úvÛ1FŽèÝ/Ùˆ>;õT°5?B–¦®åP «Q ô”`]ÙÍ>0ìÂPøhB£tie¤ŒÍ£cñ©ký7[”×N—ÆêÊßI øÏø…‹(úÜQ1—"²ùá‡om²åý¬ýF½×=Y‹ÿöÝÖ?}öà!Yg)p–°œ% gÀ‘)‘ëÖ9R ¬3˜Îu“>ÓðÕàæ™¢köòz[p@‚lpï}OFk¥ý^Õ‡`§}èŽtÑÃÀÊf Ð.ï­> {îØ16¯“ƒWÁ}¯á‚æQ$mi{á·ot,¾D:ý²—UÓ›P1xz¤$“ÄpéDœë2aæWŒÕûP:²hÈÍ`¨«aÏsy¯³Ð"Ù¢·Â1kô5úë¿ü /¼RxþÖ¡œø€528qŠ8À~Æ€i©øwf†o6_ó®¾ÞZˆS¨<ŒÉ68Lá¦UhSR—"M/Ϥ=2ŒLÇDwJ?^xÄP!MîÄ:Á®GÁ³º¶´Â231P"òY1é`ÉÚ xAt¥‹]fn‰bõlÔ×»<ÀœiÆ©[åÇ\0V >/vðè¤ÅŠÇz^fßû3UH ø,cs*Ű˜bº‚ËBV‚¸'Q$4¯j³GøÈAÏŒ‹1\Þóणðð–Ú+CA·!''žo8ïMÌÒ&­(o¦Q,`9¬9åc÷ø¶"m—.Ï0H¨po%´øÙ~¬GcÜôË”ƒ‡Wi˜ ¿È¤ñJEÈ+)aþÙ½¯”ÇÀ¯‰y$´}sæcˆFœåC‡Ø¤ YÁCèfTç¬"Ô3´#z‹“ûÇî‰#×®Þ@Çý“¦Â_ª¥Éj&ˆ¯‹î,Uéà⦸-¥Õû2_š#W+LešÛ~± b.²óÍqb|-Êôh´·ýa¸í?—mlQ@žâ‘<±ÃÞ„¾aÓÄ¢¼þCauñNؑ֌&LáȰ=·xy­°´Hý„IØëò>l!ßѱÍï*‰>÷|!e¨Ÿo(ËeÁÞSÆÉÒ á +× Är#ípÊ·úiYX1M LŒ¶ÿp¢´Wý­ñÆñ¾ùÙù¼+ÿóâ§ÇïÏ^P¶ï|ò'úo¨–•‚vàÍÑJôòarÔŽ`–îòs-P¿ ÿás†ïÂuðá [Xá rÔZŸ7 »ù›À'À=Eˆ×rOžLU–'<,Yd¡^£×Œà‹ñ„¸Á™‚³%´Û Ð*› "iTª;Ñö¨5N“ ƒ¹¶´B­VîKˆb”§(`6Zèot$ TZCpÀ ]½|倂*ΜÑ1z[ÄÐN„»8ÄÙÓ¡Ó/¡†q”±`›GÔáÐÀÁœ³7§XŠvÊŽKtl<ªu±œ 8:SL– ÚhµùVTË-iƒFâ†0—,´9VwÜp%ëœuóÄÊhB 0_‚‹zë ˆR†ISD;Ê3~âQožYCk3Fútúúå³çOu@èJ7®^{÷æ¹ _~ù¹ Ê%ð%g\ù æFÝb ›à¦Âøé§Ÿ¤Eö„l1‰Š*\ës=ÕQ¯ðYy×&àO‚¼”Í”+VDa…°zý®½¿wï€ º2¾úêË/}·ÅÓÇßG7DB¶í°XE”œÙ¾.ƒýø©. DãÌ k0æQ¨Î«ëè1GEŸxA‚·˜¬xDu´sö9à›°Ë(@[åvek#ÈTÚî¨ +!¬–”i]X¾2êxîn“ûo_>¡¼ÌÙë×½ù9¾ŠVYY§Œ8øk øHùè [%v§CCÀcÞ×·àÎwF&ÒÛ]Ód¯*HÂDÒÑOh…*ã'¯9£Š†ãlà ¶’ȼÕõ>'nÑ·hÁöÃñ Vþ¨Á™õ=ô0Ýì"yzÀMÏ̇wD[:±…/ú{®ÿĦ¬ÅqXC6ÛQÁ”JÑNoµS_‰"­¾Ь £‡{0OÓBý»÷ÇwŽoÝð^‰(jv;£¿ñ>­ÿ82/Gu fRL±f ìÒîô§Ù Ë/Ð Ö¨÷5ÓI½¥sóD>ÿ-¤×õE¨Ö¼Åü+ÔŸipeäp›l¡CD®ÒÍ}iĺA'ÅıºÒ«Tù­•B¯Ôëc°åTí['D*ö£ý:˶¿EÇÚ¹›õ¯Xô4ÙÕa›™6)³=΋Όe99YKû}?Û馂ÄGÞ–c\[ŠÑ‹zfOçç§ûªtÖØŽÎêQqC¯ dUv(›æ#&°ÀˆÂ›c^›1ëi”²½«aæùøøäìùzyþL`pÓ:ÀGàõÛã¡EN¯_:|ÏKÇu# Æ_{¥uGêÁ‡ãb kï±MKYÚL‰£EX f‚ÀÙ´žLE6;ÇA³XÆöĘr?}þ,SÇÊkWÎ?3*¸ê´³L¼ Ë(f# 3iÜ\GÖ¡‹"qL(ƱJOµ‚ÉYµ³•{M+*M™É”$sבÅË7‡‹»Ùüß’ÐD•ãµ¼’݈MôPúæ,Î ~è†ïg;›tzwŽÂ8bƒ­ ×Ȧ3jfÂÄàÖȼÎÄ—˜ã 7„¥€-½°ØyYì±Ê Ý×>ñ—~uúòÉ“·¿ü£_Šõìʵ•vþÚ=ØI™â;ÝMìN´lÅ“OW Ú“ñ¾îˆlËUà Àà@Xi,¦àL3²E ÌyõŠCFóñJy\;’«’J;AþöˆäNM©¥nç}ÌûpÖcA&n6ÎèÁÕ¾=„lâ—>èk¹X· Ê,U6g>mÚÍéëOrà´Ñ^…†gœ J i”¼qÝŽxÁ*SÔ"¿°;àI̧´ˆ‹¨µÔíVËŽím/eÒg’:E¦ˆ¦ ÙÔV™Æ~û·\©öÕÖR ýß^œI~øh¸KÍ@ܸu£½ìaÚˆÂ'§“iD à¤ü†?jqó&y ÐÛ$Šœ0Ǿب+NÂm?IA]Àt :2BR ãˆ,Šçˆ,ÕÚÊs±ì8TÛ[|ûåK;Ì=¤6šæ¾²Nï3kzFìÒ¶ÛÑJ», 6i¤D†ï“kǼ8WpO|ðÙ»Çô>Ó|µ–¨[#›ÉW ŽÏ„kIy¬B qÓ) ¾×Çǽb2ï|úê%P=ÒWÇciuǘXíõêÜkŽeqt®zã–Ê ­…T7nH>}þÄ×)ìñ­»­úêè_WŒ@îÝè×Û>G5ë¶bCm`ç­½·ç§·ïÞ1ÃæŒ;ŽÛFyý…æíßwÞX!œÃqZqSÝ tFÒ{oÊSeô¶^ê´N†FAßM!Á¹öõ £Þ#‹³é £ ÔÜUGÄÎ,×J®ÇØñã; ¿‹z/jMË3³ÊÆfDÛ"œågB'žgWeÙ ”|š±3íþ‡ñ|ÌS”aC˜´lÔ®¾vTØ(0oÿ)ï´$WÁ%MÃò=²À1?]•Y\5çìµ?w†ÂPº¨žÍý,b‹’JPÑÈê•ò Zqoæ°‚Õ)4Gœøž×îW+ækþ²êNµÄF9 4|ê[ºá\^üä¨F£/4O–v‹8õ Fl¢v>Rõal2 (—ÀÅ ók,t¬hÜJ©t{ø¬„àä0fgªòqÊpc—¦·¬Mùh¯îìÕ›j£½é@¿¥UN@\ôCÔ¶˜ø BÁÀ+ú5ó.ª œ¸aé&µ Nš€)JxKK_qåÝã¾?=;ÿæOþøÞÉ=šN€Zô4¡œŸðÁ]ÎNއÖ¹tÊ’3ýÖoïs5ÿWL¿ µú9soêí#ø¯.IŒ5i®‹Zb£„btuÎFWªKÓ·-€aUlœ¸¡ƒ¿UQÊxê¾Wåj~L]:.}.ÆÄ´QÍSpGâXñ¡+9ÏgºÅ$ýª´k²ƒ™;ê{bbN,FMÔҢɈ† $=ÌLsb¼´Ù³bJ@§"M-™g%¦kmçp˜³‚¢"j¡—ss-ßX°¹£BdW^º¨bPd¨#AÝáIјk}¾&ä³}v·m…ÆÅR/£S%¨¹ú¶Ó áÛ§ž¯°Öf5$Áº•qœ¦¾OÔÖœ;øšÛ¡£û¤'t»ê\«>÷)z×[%”¼}†¬|£•ÑÌ%SÏ2¾EO]2¼¾â !‡àâëW¯±?%‡Àí›EE­À0mïWìè §7gŸñ%7"¦äž?ª°q?°æºDÉR×ÿtÜ”á’ÈÒ¨ü&!¤q>Wæ3ÌoÞ(‰:/÷pîWwRûé’Š·|†îM~&&t܃=ïiWëL`ôÌñ¡‡eÍ£ãÛÇ£lÎ) Vý Æžl8¾.)÷“1‡Ã@PH ¡Ó [š6_e—ý ÿï?ü?þèÏþÕŸþ™É‘çv–€hTC8³;‡¤G^aîÒub’Š]âÀíÔÖÄŽ0‡É²b ?] Óê-–hW2ÝF=Ñapž/üqA;ˆí’¦Z 'w¢-ž,Ey\[)@Q¦á2° üöKˆ`(‹æS£ÿš(ÜÝSž(Æ gÞ£-ãjŠÀZ›ëb#*â}Ø55ßdpù31*¶³¢€`ôbAmx‘2­nÁ6Ät§íঠƒpF¡âòSaÜP’)À…ŠIç –ÀtåÀ­y‹Ì¡£#§«Š“€¸« ‚"u4Ì”-îhÌû Òf—R†ItYùzøð!ÜŒdàe:DúÇdt°]àî`ânbuôn&êv@N.Ì 2„ú,ùËpî,PÄCJè2´KµÐ>ìÄ„1-gùƒK–ÔI¯äógO¹, ¦mfK$Eù¨s5³Ü7ëP4!_yð=f ºTïi¡ƒ—Lç[Uü‡±Á[ ˆ%‚¦ßv)6ç‰3øc†I0Þ$Sžåc }ª¯»Â*PIJj6]„Äß=$. YA·ýVÛî%ø¥ ²f Ùv#øÛbƒ9_¼:µ•ÏÖÅXŽº¢fïœÈbzÕÂtøoW(Bºîí(`Y¢ò)d¼ÌÛਢ!CÑ¢ “@ï03Ÿ†|Òa«Q “ÐHP çá_|àYE$\ÜëÊA @i×#lwgõ`*¶b­~/^mGÑÛÝüÃ?Ö™Àûwû[|l=YQRó$:ß4¬ XLý^åÖöæû b÷Âê¾ŽÄ å¼f±ï3ä¨3»*F‘ë’ÍìÉÄ&üZu“)6‚Ÿþ +¥Ù¸:úÍÓdÀò]`‚¶,9%• UøÐc™‹!¯™-SÔ1mfðt§vþXu!ã)¹JÀ¤9öYgÔ–’{§DöÀäÝ}cäfkUÿ×r•(³7é06PxëK>mJð¼ 24p¢Ò)lÎpCÓxUW1ñXç¯z¬QO;äz<ÂT'z¢ßW‡ ¡ne!ß…îšPÒ’s¯Ò´BÒ1‡1—œŠù§ Óì§D>øésÁþµ¹ 3YT‰¨)+RzÕ—Ô™a„Ï"f_[ uFI+gOfã0è`BL&~º Pþp¾&d)y¾º¥¼)yׯ¢œôô€›lcW Ê•èOµm"Ü,žÂÌD_ÅÙ1-—ELN!JMBÚÐËŒ?2þË–”„•ÖW4 µ‚9#vºs”‰§üK`ûô!ZRQùš^ÎÇá™Õ‘¯¯C”Ûœð¨·A‹$M¢¡háòè0S…±®ÅŸ(däÀP]@4 aíjÂ…uqo˜#s®òá©ÝÅ%\ì{YÇ{ú CQ'+Ï1e‹‚kJÂp!ÒfÑs³í#=†–·ulRPá°r-¯ }9“‘IÊZ ™Öjó0E‚„üõ–^+ã2¦ÀœTÔ'{´~ëú•Ç¿ôË?3ùÿJÿtÓKïuÕ* B;GuXIC&žjÕX K¦(° D/9Ð#ìD&²Ò©>GÁ«îzzÕù®ž¯Úë'€@±OôÊР ËË;¼ CÞJjNá8-”??wš”žLä6À °V»´‚±(’0DIítðfȇu O-téçBqZ´ø)¡ hÅUÃm¾~KVw¶¶A»óAÒyHÊ_ø ‹ne¹ù Wƒ i ‘aUbðѺ¾\E´‡ÿÈZ9îª&ýúÌRWªŒvã=ó8?Þä²@¦p£Î‰Ã/=’À7„ DTÁVÂæ’ö/äÍR(¼8 Az›na‘lÎ6̲á°Å¾(‚^ç³Óæ?†®+}ñ½?]H &;¤vY 7ìò“÷Ó(—"ŒsÇj`•¡?b`ÚH0{‡–g]Ã+kë¬#5ÃXÛ9 äfzt„€jÎg99uûl(󇩞¾z²†´îéóg/¦ g:pªzL_òyif †­P‹Ë[ËçjzÛO2-Œ~ï­º&bM¨":J_zµëϬ zçÎ ïO<5ñæ ¯e#–¤>`qjÔ«í…Š+áêíeõ²¡“WmÔð!hgkQ{ßä\Š1¼eÉez ÏéŸ]íÆÉßÿá;w~ÒZ¬)r´ÂàLï! cÌÚ¶¦á‰ß."ð4™M<Š?ùy,"w^:×<«%V~=úå„(;¤ÝÇQÕŽ~™·HîsƒÒÑØq$Ô»Xàå%¦0OXl£i‹¡?ÿô£¥RÎðèïþîµß8wÁ.~š $`}š®v0ËV僘P§ý\ÆÅösh(¤—†òŠC‹xÑÓô`˜cKN±3èXxîäÓNo¨Ò~¨Noi¡ßD— ÝfåÁ™m)Õj‹;|¬Þ?9!GŒG‹LÓ0’¦½Ç#ïRÙFRq†+ްýØ¥˜½Œ¦ þžxÕF-™Ì€Cƒ*+jÀ{½?ùù©a#Yhƒ!mü49úï{¡îŒLÓ øð‰óÚ5Ÿë¹ßK 9Þ5ý›ð +pIaø6ökáÒ†0<ä'q[(4Øætq -tؽ0°Oñôý’™Í•˜Q´5J/DU¶ÞÞñÅeG- èZkbYÍSú ÄZJ¢÷½1q~®:Ålª…ZµWÏÀ5ÕÁ’zâ¶úÂǤY+{ÇqBãÁ!ÒD—ÂtCEÛ²Y2>ü\`í‹5qX×Ðû7‚ÝæMi ôŒ‰a*.RòzŸÁáƒÂðÀÀÁÄõ©R‡4øƒžá&¾·Â8ú»ÿí‰Ãéob#‰¥d&ÂŒ—–IŒýðÖãˆI@ˆ FiÅlì§T@z^è”›íÿÿ©;[ò+Ëû 1%2‘™@…ººZZæ ;B¼‘|¿…#d)Ìî&Ù¢B/d_ùÂ;te“¡‡m1ä%K$Õ${¨ sΉ!¿µ<•upþûìaí5﵇£cjP¿NêíÖ]Ó® kŒA3—,Ú”_NwB*%Í$óкËÈ`3 Gã”WKÄ0Œ ñ±ÎL€iåÁg‰è ´•…$Z¬(A›–5; 4¢ãB¸&À4“†«Ýý!Š!CÛ»Œ×g^`ä:©]©H^]XªDë:.Iº²ªBnAiÿNÎÑ+—7 ê´w:Œ*[Û¢¡äB؇eÔ<I¦"ÁPý£êsIgdÇå%ĵø£ÉWa ð ѯ-ؘ â(ÒZÓZ}±cÝ^ÜÒ ¶H¯óWÍîç;ŠŸSœ½n1Ào ¡˜ÒŠ$††•sÜqHÁáΆõñTs—èÒ-[Ž’€¶ï‘F]Æ'ã°ØÊj¶®Ó®£°.Ä'Nšê†rÇy:î­ë&H@n=oN<€¾°Dmêìt-þ‘Ó]f¤ MMÓ4¾ç3ú—î§ õwöy´ìCY¯\2ÁZé¬f¢©&¤®Ú*ND]™Û‹×Ö”Õ·˳¢lçÀÌ|Ÿ”deüÒz>­¸y[s¸k¬*Î 'yÔ¨W‹&ª“ M„$žî¬ÔQŸœ"W„ÊPF#™]ø{º—Z9Õ§ Ëë5õD¾DaÃ~M¨ j £N Õ4G^ÌXhe €è-Ï@mÃÝŽ¶ã•R:¦ßkEÔË—§>,HÇ6†Œþs½Ö¥«‚`zwÅÄ/燿ñr’ow¹Ù3`@8+}ÃÌ€‡èu¸]Œ'À$òÃÚçљ᷄p4eÙ»x)à/"R¶0·Š0%¤=ÀdºOÊ܆ùOzǵ]ÍSɷɾÈå+›,øêë¯u_µ‡"@>bĺswI0 «CWBиÌ!Òí>†MÒ÷ö÷aFfÔ”O‰ðkàJ„=ƒ‹¬Z†>‚žL:óÿà‹P¯õЪ…UMP¡kª7]«£C!&Ï[ºK+´˜Ì<”={œV3˜!BØÇ_òS˜-I%¬¨‚RÔ¾,ò;³4ðõÆýø8»t*š âŽh˘Ùzw£R­®¨’¹/ó aˆöVF¢°œ½ïˆÂWb73ÙpGˆ- F•  ¡A݆€ÚâÚØ¥rz›9¨¹‰,tØÀmã’ŠÅÇ~2œØ.À•vA皆 ¶*9Lò2ûT ʱvxbŒ`–1/i¶$ˆ©Ldœ ß¿y´—j=§§èT£pà6Š5cÓÇžZY’z`¢2*{ä)Þµ4ØZ™ñvé!|ÛØTUÓ/77gy=Ü.‘[íj¢²t0ä³Vm×Tƒ¶iROÌ/à3ÀÏgf ÐY«jf¯ÇkZèNV©5§´¥ßÊ€/iÛâ^$“ú S@ JºÃëå4Ž#Âr7i–Õ¼EhÒ?‹pÌtð (&ÃÃ]ï/ZÅ3ÝÎ!UdÁ[754¿à ¥åͲ•FÆ)Ô¦@ü\ÃMC@ØI‹QG-ÂL[&½ó`DZλ‚`ÝÖ5¾ñàU Qà >ÕìR%ÊI1Èo(…oê>"™'Òzòp/‘ßæM)«¸ #ÕDA´ ]ÁhŒÿ†—BÑj]­“¢ij±:ü!”{{p#@Ì_ŒåÒž÷]ýU‰FU~# «‡ BžcË·¹Ô¬ž…4K. ãNÃ2Ûøš˜xdÊËKŵ¢6ÜA]ö бD¡§ócû*w¶,ÅxÑ¡ odã@×DUõO<]“ƒ$Œ”r›ö륮$5Óš@Šèõ¢e¥„„߸r©ûg\é~ö^/q[¶•î è‹z¥<Ù´îg¦Ñð8Ôáa ÕÜðRñ³…áE¬†m}èHÅÐP…8œ)‚¯Tæ^ öMLHJÛIµø+ä4NÎ'ÓfnžtP¹47yðwƒá^A ø‡|ðäœ,,:ªë»IQŸ»†<|Mµ¬mú~IÃUc#°—’_Âu1­×ôšô6þ2’–Ñ#`¨3̃o.£$ùáNM3.0Ë£œ²”˜gõ€­NÎ+Ì}kËÔ•oWt@Rìï?×¼[„§Z½ÖtÀõ V׌£€×rõ¼µ¨tBP@UØŸ£Ñu ¶}ðû/ÄÒqjàöÝ=ó à>E¡¥‚`M|¯Ÿp;¼ÑÂð?þäôüØš3ï…¥ñeLË?Ÿ›ÎA ¢|‘ÅžëÃãC‰ð¼÷¹™;wL×Y”ŵ::|© £Õߊ@—™8ƒ¦£ã#ZÝ™ ²ÚžÖáUZµ¯%‚âÐ¥¨%0/&¤—UBÄ@nùÓƒ‡¼Ü´›ñΗ‡Þ!ñ©îˆ~)ë«2\œ­í;âWÎK Õ9¾7™ùñdÓ¨T¨k¹£Oò´ øß¼9:9¦ùÔÜJш  Tã3Í.®)dkiƒ ¹…·Q‡Ç ˜·M"EeÿQ²xÉuè4¸VA…¾žAAɲAÅb8ÕÁ­ùŽÄŒx³¥ Üè f0è¸I²|& %'*`¹¿~}ÆIã&¢åªV¢¾,K ³ñ®%¥G¾ÞØØÔªU›í=X×¥-sË{–OñH™*iˆüÚÕ1؈kÍ„ž¿2èñ–DÀTÛ‚^g/*‹ÎNH]SÎA0 ÍõãèpE½Š9…+Þ¦a© Áfã-hór¶ˆPÀ `€ЏtB\Rû¼4õ²åÉ'ðdB\¯=r1˜œ\Ø M±)É™ñ‘uÈÉÔ⓳sA»F¦95këÒ²ê8ÕPëXG÷& ëYÍê€sôºÎ`ÐTŠ%—Ö òIf¬K; ›Ùùq¹Ns€5°Ëê¨_%à‘ÙÏèRôRAžöïÝìoŒâüò»Ë©Q®(èyeåƒOͱ`TÜüÇxÃ4Dh”m† ÉE5ðF_{ÿòùã/ùK“?〈íݻƦBNO66U);ý]DIØÃDˆòä€üæüí×_}}oo/€ õŽo^>,øÊ —ÒÌüÌRM ¡œÓ—Òp2‡„ypÖ+¥TcËTKŸæS¾£¾ÂÆ@b<p“GÕƦrü‘D¨jò iªO¿eð{e¶ÁªO2EÚ^á,2 è@¿hGÍ. kÍlpêGÀ´4m¦¢È%®°Å¥jÒ¢Z”R!hÕ}AåÄð \Õêøô1]¤]oty9ÊÓ’Ysô¸Î‡ŠNò ò4}ŽMÒxåD¦p1Í .§ÆÀ¶°'qµ¥ÙÈ ªt`¨p Q]P'`[ýRü”‡åƇ*ôJS¨©¬RkÞ£ 6?eò$4¤³Ú2b†JÀ¬g;5 Åóï—ÕycŠÈÀáÚ‚nÁÂ-Àïô|4Ž8¿wbÆ^,Ç]GÖ|Øc¶Â‰Jà%*‘M„‡A´T㵘Óè(‹vîn³Y@¶MUCT1aÑ1àé‹>NØû0üÑÁK*iÏ´5¦gÓ‡‡²÷îlÝu"£Ý&™æ›¯!Гޞë dºîîÜ#eÃfÑ *÷v{g÷ö˜29=ó‹Ü©{ûû&îl;°  ÆÝ¼Íýp-ëÇá9ðî`^ä´y\dR3ÒhBŠõHˆQOáÓ3ZÈöH¢šW ñÖ³"øo±^ììî 9Q¿I@2¶ø<Õ1QíÅüB£ÅZ7U¥ðeÖœt²\aš2E7yd0w™ƒ…}þàG?ÚÜÜ›aÞØx#!’£˜h¤‚ܽTRV½áŸ™ о˜%@kxÁ8zýæt{o»C“nÜqËÅ›³Wg‡7œª±¹cXEãÍ1ÍjUÈŒjÅšûôirq··¯Ï®^œ?ÿö›ý{»Ëlø¬GÒä8Ea²nžF£´Lf~;îÛàׂ„Ý¥Dñtß’p` 'æà¹ú”+2¬ð…ª2ímÜvŽ87…TìŠÖ™à‡ã̸ó#袎ۥގâá \Á)½Aøâ¼™aÝó(è™: y4•ûuþîöÍMk ïÞ»_$Š:x礌Ý*ÑzˆZǠцtüt®oN%Xaì–•Ë>¬›» KÞ¡±¹yú8H°\ý´™ºëWN:Ù¥7ª‚-j}ÔG wŽ/ÞO Š‹‰@ h"æåŒ–·mDA™•ÂfiaçYø:£¼8}O¿÷!¹÷ïœæ²³µmˆptâ”ü†eËE8,XuýšÏùöýŠ÷­m]2Ñ`áMqmãööÝ]>íRè9»Gð–u’’Q§v%Ú¾ÑÜYÈ3a ÜŽ„ –¸Sw6·Üë,{|æ#í˜ò-#Æ“Äv©´þDVä9œ({Ͱ9nØr6Ä¢“½¦8®0¤V4¾pþ'°:<)RÎ]*$™ñóMŸìð«ãÇ`ˆEÂ,æ€j9‘¤sœº~€ Æø"ñvÓ:H+ðœcD›,¶¼þæâ•a•&i ÌcЫ)ÖÒ„çRóM âd£eÀðDm. ›Yû¢kuæê5ö …ïîî:(Ë:h¶º§•ñKüë8 ô¢‡)1,¸r¤}“>hwâVaŒ[9.f9L‰Ðêzª-V ¨&p;ã-)LN1¶žðíÌÈ F*zt£A”`¦ïópƒD­Ó¢¦éb ù1a¤{A®ÆáC%Œ‹·Ýé–¶o7§AùÿXTïEªÄÞ0€¾ðKé$ó(DðÎÖåéÇ‹²2ë pþ²ç IDAT_ÊCM2Ož‚‹ÖhY׈rÀ ¾âh~0–Ó 6ÏŽé¦Xä7Š wØÑŒWr~B‡¯PÐÖö=NLµÍ ÿà ¼}EE×øsΕ° íÎf¡š gºö•à ÜóÐ U¼|ù<ávÖQ´e•ÕfÐuü‚4ô¹͈¨ÖÁQpëçáÑh0€‰sN*œ~eÙü5îëÏ÷͹„·sŠzÆÔw¾á²âÄØÃ„}!ØYPñBh ò$ONœ(qvr.Ð!O—ìýÙÙ§ßûÌÏ?a’>ØGuëŒß˜J´Íü©%k|î‹ ‘Ñ!üB@%¤SHúv|ôòÅó'öïŸóÒÒ]„€cÔqKõ7­q‚¸j¼rÖçªEç\ÏÃσ9TÓ™M¨³ã™GŒõîÂá½ fñï¼ó[7}Åè]ß°d×,#8Ö ã.QØQ(ÈÔ²›9â˜é'?ù18ÐލÔF)‰¯KZÏàó„xî$ åH¤‹ã<ùX¨—•4òGx%²Ö77o?~ö¼¯îthcƒEL«m@#LàÍ…d!]ü<|yˆ?þ¿–è }>ד9ÇdB¤K€Y€!ƒ»Œý^ê) g1¹¬TªqìS#3ôœwO•(îÒ}éºïòSµõ~¨<8Ø}1¨² Ê/…Þq§Ü*Îf&3gL‘z  yTÙžêD·©(‰¦òŸSh¯wÇníâ>MŒzºàÂËé'ì©ÄØWŹñpAý¡[. Fb ··ïàQ±=*0zÏÎçKÙN’bœ3¡²µ‚´ ¶V€^rB‰Á¤l~³eæPÌùÖeƒ$c2«ãÅØLÉݺñòÅŽcDgòé+6Àd°ºflc•8³]a&­•¢|£³šü€ªãa¯úÃ[ܨ[¦Þʦ†È/„àÚr±D\ZˆUh>$çX¾4Á9 fvŽ¿Y$9üÏiºQª`S9y<â&[‹â¬Nx.¢KLàÁ[‰ZQ¶ñ˜— [2­î¤)±‚°gK Çgª›#nÀ¨ª^å«ÔPÙ?¬Í “ͺ®  ›˜H>¼Á¡€1¨¼Îrwô.`, ¤ë>à¢ùøz“1fuÑ¿j6¡ •Ó(¨.ÌFåÒô®êÊD|׃WºœÄ¢CQ̼U6RøÇVoX$ëߎ†½ ZðQ>Åã»´è>u%ƒw6 mÞºöôq›†øÒ§G/^ÙùõâàÙ·\Îw¯ÿçÿñøöÉ—ÿÕù_c\ `­Òmíy>l|Í¿‰Ã CJÁ $°`§Íྡ6,—¡Ã«kÌô§1ü*§rÖ݈")ºà´Ø–¶uW§D $dú îváÒê5˜K \ ¬œ Zä† UVë[=*É)j£ëeXë- ˜GDïݱ†Gh#L5Eƒp×ü¡ôáÚ0Nדð£‘Ø¸`«*oá$¶XH&`”‘3ðôkºÙóê^MAÍhamô·Ó20ç©`Hݪ©A¤Á„eo;±sð6ìfä¦ïZQ-?Ò¥i¥È7^õœ»6À¨A6—RIßPÁ]/\+}ÞË@Ê ×ɫŷ J´¶ŠPѰ¬ZG 5&èØÛ“õhÏÄl¹"JÈ6í4ó™ÚÍ¢éö¬òº‹6âø O´W´©I<³Zä, (’ésœ‰Ž2ép¥ Qm*îoälräæ]Fúúë¯ÔL(§B¸X'‰3ïÞŽŽøBV š3þûû_}ù%.TеâEJ×ìÅfe°ÆÑñ:†¾;u§wÞôà!Q‚vcl›`D­o ßð›²v/ºÌÎJ³¼È·–¼¥´bɯ_›æbÑÔcý™Zú±¹K Çy5?˜eÛÐAð3C!¡o<$ÒUûâàÅ·óéý™å‘‡*Б£ãCwïîbvÈ¥Yüé¶ñªúxå ¤Ñ;Â'E^?ùæ[E ™*`¤kf27SÏ¢*ûŒ¡†a5Lx//”ƒŠ‰2R©<„T¹<†?ýãŸdÓ§ZÒ·)+”’;Eƒë¾Ä.Ðàe5ŽÿžâÆŠ4~ ìŒßYüèÄúw§ç·?¹»óp<ÈLŽJh/={ùòA!3¨ )È&!ç4sQ›žáÿMqlôØNK[ÖU<›…Yñ³øM1—ÊýÆ:Â¤à‹”ÿ\4æ[jW&tJŽ®ôêã*?¯½ç%è2õÈd‘œ¢¯ŒÆ%ç'Ãr¢˜Ì.­À[/'Sîx Á<Š–½jl âBiº˜(¤áÞjÙÑð¹kt‡³RNsŒæÂÜUr¹fVñt»)¦žÑS¯* ž¯íì:ØãBЈ@8ÆäøàÅé±u…'¾FnBóŠê+²MѲ±z¼E}^ ZŒåà“⇙H—á o@ÔYgÁ¥ÀÓ3¢`JOevy¥cþQbÖùx¡ΰYò?i!üÉà´ëqø¦r†” Šsj§¦ø˜0K‹ÃÄt°V¸—Æ&µÑåPkè‘ιCéÆ4`&XœÆ"F Ó òå·ùhÉ–£-íjjñÕä©€rà÷Ó¬ä*+7"& *ãe ˆ-H3RS_Ji‘¸·3Š jËà¾Æ ôD­FaŽÛ8žSMÌ%'.¥æ¢†s©û‰áø>J%­S°6Zò¢ÅêNwx’ôZ3™¹ˆ”9 QÓ :FA=hW ¯ï±©JZϘÇO¸ujó”;¦Ú(|ya&Ю‚,™"o 61Ýawîþëãƒ'€0¦öø¾ÇùñÁÉá³WV¼>;zþÍïýÃÿâç¿øëßúÝ´sÿÞ ñöÂîî¡uxŒ áŠ@&ÏÀ–¨¯‹[²}g¢EW2¤Í:›ŸÙÀˆ æÈ—6u¸a•JÅ—EƒÓ5)nÔ„éB;f™FIBíj׃D¢á¶…%Ï.Ù\ëYºŸ»ŸS}^ˆ!wêWÛJ©k¹bÑ AÕ:d9=Uƒ<.µ)¸H·èY>“âNÙ¸5\Y¨{): ­VäGV€­ŸŠõ&h}*_ÕªHJÉï¹Ú?=\TO¢gN j®l°®éñBÎ-: S‰Á„²³‘¦ë@Õ†= Â-” ½:hWpJk­‡)”DLÙ`“¸Ò×ÉÑ[y½Å@‚'xàsŒFž€u6µN1Ìš“sY˜Ñ®ÖÓ ïó_—ê#!­â¹yÕV´RʲÁ`ødZêôÔrI£:(xS„JƒS×”çaY¥T¢:—WñçÄ,FÕåÇ™3œ[ªæäèXo„UP6«!@\JÆp2 …Anå7¥ª ‰E‰j† ­“b@zØÛ»§]«Úõu^¼1Ñ51¼=a »XCPb=þ‹_0Væ[ùpöBÏ¢1:™¶ÄG¡ŽÊa`Jº_9SË ÐkŽ1?±÷prxŽá.(ÞØ›l¦R0Ì:è¢JÐ:ÌÏZgJus{‡ž%TM»p2øÀ–e€g¶Qî‘t][ŠZCZ$*p¤Ãƒ7þäO~š ÏxJ–JáÆP² CD|Pg¡­«Åh#nmf~ÐØh÷ÞÙÑÁó§_íï;†¿ùÛTD‰£*5B\Ñìr:¦/1ùŠBŒU ኱9hˆzÃèY¿9ã„×"é½aç!|ê’s¢# õ<"š.©Â©³¹:Rhްlï'†ƒŒTtnÖ4*^(ó,·î#“¡ ¾ÐŒ9‡ 2Ú½ÒVÈœ¥c#5ZHÆ##¥A: &©¿vÉy Óª›:“ÊFÔ} 8;43#p¥˜?ää¨VkÕ,´¹%šbº°DT¡®6è+žF×Þ¿yòø›ÿøÿý¿f ÙHìæLQÀê™Ñá1G’óKÔΩ0ÌÇ¥ÒØx ùЄš5D=ÉHÂÕ0ÓùÅoF«4¬çÚÃ!ƒ çñôátäkº:6‰¼±.3’Sé"”jŠ×AèÒס¬švàÍ\óõ†µNÎ…7T‹ÿ, ñÿ›©Ê6è Žï"331üà=†CÙGCîç|¼¶Uÿ.ËIGNOC…J©•*hs(êÔ˜\vêŒsdÿ¬L!ó€©tŸ8–ûÅÒeÜâîÏ”Gö(’fEÀáˆUQ¢T³¨ ƒÅ„ˆÒOÄ2²\òÓÃbK¥–Ò\ŒQEÀçŽ#ùå†êÿxj`wÁàAº—ž—rÏ÷0ø±MÚô‰5u¾q Ý 5¨G…ájpªR‚…øvÐ.ƒ…ªçoÎ;Ëž?yü-÷ç··‡‘ šaLmXNµ,» .‘-ÃÒcÊY0ag{Û:†½ý{>þíÍ;ß|ý-ì± Üƒ  ©Þ-®èʆÛØé9itá^zåäåìN|„RËÌR$šªt6æª!ˆE? cZf‹*B»¸g†7¶Ž[ Dó×H@†u-Ø@E¼Ü‹€˜œƒÊÌM@Ë,ihéIíΫºx(Vø×ΘH\Óå¸EC2˜›PƒÌë¤Ëlb ã"û©69ÃT:Y¨¯ˆÑ%œt0É›½®²Éã•lèµRI©óʳh÷Ô¬‰?ÔѾÉ‚|>lá»1T ÅUb}$G„êT‰âêÑ3x elÐê¬ûºd " dåù®”·^-È/áŸv<ànÕQ—“m•-ÈMRÏAw2Ìñ˜×7·Ú’¶²Qeú¾ƒ›ïjÖw‹rÈ%Šˆàé <˜_õè2oÃ` OH¯µÚm”òžm}-x3`¼»dhéºC\¯Bœ B§N(r×ìj‚nܹ»ÃBÊÆÃ‚ü+¾â‹“â˜é« ßÄÐH’÷îïbKuꚬÞzøôÓOÉ‘D’.Å3Æ[‘þÏããa8:S7J'Øc|¯]ùøÑ#¦AA(ºÿàÆ’gàñ·¾üòKž€¹\+Q+ºànÆãñÓ'>5ø7?ÿùŽèw­ÎÚ§[xx–˜`ÙâcùRŸÝ».Ò¨©LAëÏ>ûL§ž>}úùçŸ{žÊæŽo#R)>v¡6S)L êš~ñÕTµ.êƒfÆvšF3|»ceθép ñ˜×»B©Âö9µ¦æ½rhS¶Ì¥8dÊ^Pƒ(‡h”'öÃø0ÿüO~:„DÔ\¸V¦úT¿ÃóQ«Ø·ŸúêHªDs2ºàðFL&…| óåá7_þüW¿üëO?ûD8>ÿ6OQ¾rZp0Ô¥²íP¥/úT!³\.¹}µxСŒ-KtPÞI+.G Ç(2î—¡1¢2]¸H9 ªð›ØFÌ«w‡[m¨•TÈ×}õKëgÇûöJUPÐ î†Ý!˜Q ?y†Ç©ÙÜYÇ:¯Rît2ì8>üJÅÌgãtª!rV®™AˆÊ`¯‰žjF÷Â#qy’ɘ|vΡ/`ôñ™Ã×H÷£™ÇVËS§œŒÔð·ܵº©_Œ\ËðW¢Ö=¨ÇÛ©-%§TöÃA©Ì’͘Öè64ÒÕß(Þ:ÂN\Ø[81ð€G`é;œSÖ‹ôÀ€«%˜rz»˜Ð[˜Ác !SsóHñ÷Ø-wþZ÷sÒÓãx@©!‰X}Ät²i‚¨r-5íÕ"“;Àêû µ!~Jç.GÄk×¾üå¯ öá£G†¡œ†íÝ=zÛ±yç®q<„0·´ÓÎî=Ühª³Hêu#¬ÍÛŽó!\wöîY6»©äƒ‡ÿõßüíó£ƒßúÿè›§ßéN#I[ëc¶E½›ž6õøƒ!t a°¹+âªûã0©ƒbáK±@qv‰n;÷7»ŠÊêH?©Øƒj1!*¦d&À#…f‡Æ<ç\, ÐÐTrZ@Ê\)gÏDUÏ)Ò’)Û¾£:NÒ19’Øî`öS_\ÃzuD%ßU«f¥ DO½ðÓµ\+y\^™G)&‰~ÊïÁê[9¥kEŠçƒÉ£•Ek95­BðÀ˜ ¦‡F&VbáÌp«òÕ 31Ä3R\¯ÎÍ”­­ãHÑC3¤‘a:Ô“l¤ÒUþa¶¡”…g?é(?±—ŒºÞÊàa]žà¾.}ñ N ×\Ïé‹¶;¸Ÿ €Y¢Åav®õÊc%šÊ(8*ÑpH¯%Ÿ²ôË%’MwhE½°zB¨SóVÒ}¬Vî°šù—¦åùê«_Á3‡?i•`—“kAôj7¶dvuPi²‰}Hu}ú"³ymÚÏä¹L@Œ7·¨ôåqé\‚Xª¼±±É;spÓÎÐÒäš Ã>JóýÏ¿÷òÅKñ<ŠAFgš¾ê,ÖATÜ/ë=4NÉ™ì^òõ0›ïMòb§Tœ¶ø}ô裻h¸zMéĵ×6 –^ÚP9c~–ß»ÿÑC³^´Äá½ýýýCg__߸¿¿Ï- “X¨â…>¼cm†Õ´V¸_¡ÞL{Qõü]®’º ¶µ®ƒ)mÜô½Ò{ëvÀЮÍýõìáý¤@)ÊjL0§°oz’~¤”2æ+.…jä ‰DflÃË™ jMÛÆuÓ‘Àð~ã§?ý#ÿ@.<2pºäd¸"»>’ž¨?J¼ú Nš¡¡I¢çOŸxç•/ìÝÛÓ‘Û›Û “'äRT\†ÏŸS¬‹mظ<Ñ5¤«èóY§§GxUȬ!Ë–J÷5ÚU|.t€rà-m;¼˜8A›JA9U¥¤>„š=cYØñjH™Ô÷À*ò1žeð AõzΧ‘fÖ]Áê¿^NPYÍ>H(¢ÓŒþå„÷%òî8o+âïZŒ m¼^?½" îÔ“8$¿Ë–aÅ-‚Q6eÖPL3qZž„ö+’ f-„¿þìÙã¿ùëÿôÃþq²úäê ŸS°\ÐÒúªNßÁO(L¹Á˜J<[qEñ6Mxz†Î-yÙ݃ºV/ŽcÄ–s¯ùLšÕö“ÇÓ7oá`u"¥{”=ë+]" p 0pµˆý™TVVÍè‹XÒaUåóœ+;²æ£Ãa#r™C‚p=è­ü¬(D˳Ü,ä€#G‘Æ»aÍfwùu¦Fæ ³2B(Nu€gøFÅüÓ`EU;¤ãFq ÆÇäþàVrx ÚüÉ cœâfŸùÞÒGºdlâgõ#ÉÖ¦—gˆä§. ²D@ê×#ÿXÃö eÕ/^ºün&ÝèhMËHÂȰˆ”.þAèyq‘¥jUnN4“0ÖZ Ð)uÒ¨B0˜lÇ2{…XGÄ1E,îõùÙë>E2KŒ¹Sœ ã'áõàÏXùá6ÍŠ²}üé'Ÿ}#ȾjJåQR);”ôÙYcw(ˆ·h}+N÷>"¾ÊÊ»ÚÚµâª%¿æŠ¬ÁÛµÛçÞΣOøoÿÝÿsG¦?RÇ—j à]nŠ[Ætå”à«…7Ô– rä\ÔÇ2¥XÝ8^£"`!adbÆùú‹?Õ3—2uê„>úZ-5q¯I‡‘õå[ÔAÍ©ŸnT$šÔÐP)õ>ÈQE"鑯æÈLÊrPŸ+ Àï8ŸóŠPjI†zè_o´NÔ­ØFsÀªß./ÂR­Æ›KŸKïW>ÿ¥½_ULÈ?öX5Ht)®Ø+]·Sõ öô)b8>ñâ9•f)¸BDA¨Æ‚eÍ1Uö²x`¿uMýjNƉÔ)0@Q#®oæi9¹ãÿ­GqéßuSñõJâÔf¤ ŒÒ[”&eT…ŽyEÐÌåábeQЏÃÞx2í(jn Ð1C.xk7S“¦ª,¯„ÿyTœæÀã§PºÞ×UæõžxÎ̆&¼R &˜%@Z¹¸¥µ­ŸòÀ/˜=ÔP²Ñ^;›}> œ©RªE¸S2Œs‡äUô1c3»ÞÔ ²å' CÕÆ-®º£ù'ß|]¤íž}·÷¤Ï(´Ù wt¤H»{÷÷ÁF–ïܹ o ÊrÝW§Km!{vÉ0X³`7—`bK ‡#'(jK[ÂÆF5 Ñ„–‰ÂÒÉ-zϵR!hYœæ¾ÖTiN×°bž£u8W¯íí8ݪµñ”˜ž‹BM,êÖ¾%˜›Šm–²‚íò’äàäÝ=á+“ ¢¶ô5”'¬ÅBX7„êÏ6—FQ@ï\~ºËzðàÙ‹Çww¿gM'Ô¦1Z*­>Ì(‘«¦ à¡.¸/y‡ž¦šØvÅ:d¡Y0KôŠÌŠ:©>¨‚@HP¿â×¥S:¦ ‰:¾,T¤Ë—{=ë Ìä„«…¥&7B«î~VÍ8Ä2 ·ü ¡© ào¼²Àˆ­Ò]=cX´>J,pþ¡æpN´Ò[9|Ë…Ê-ä[ ÏQ¨H7µÕýc¦™f<šdh†~«˜ ´«;JÁ¤ŸZ¤!1hB!Üâ,‰5gIŽ|´{F uŒ5aI-ÄlO|r–IVÊê%hFf‰7f »:[Ó5j!PG¬ŸJ­<ò{ðÖà=‚Hp?øñ²à…yL¶ÐSà‘“²Õ;–Û³ü뢈Iá…SpÒÌô»ÿ®;ù¢ˆ# 5­&¼µÄÐ3ヱ,óÑk.®F`ÀÈ v{¼Ì’{ÿÁ½'O‹ l5º0Pž‰ýHW äx»°4øÏ¨ S¢º2 .´Ë€nd§ËÇò§¨^JñeD›„qÚ{óìä*øo¯NÏ;äÝ ÖJ±³LæÕ£¹o¾}l²Å²0tÔ+f½ ´x¥;Ž8°¤ïÖ-'׳ô׬¦ÊôzrãæÝÝm&¾Ø Ë»3"­>†ÈúÃæò§y:`FâF®6ÐÌù :l±®ñz±Ìktá*Þ³D{V@ª €Y)0£ˆ24#°>–ŠJwmüèGÿÝ"^÷b˜U§':¦¼ÄÒ[ØDÅä¦!ÔëüÆB‡W]Ýò¡›÷E¸] S·î!ÄÑñËWoN®¼ixGÇìlßUòîÎn–Ú²è̘€Ý-:xGd`& 9›T(t5aÓôD¶ù ‚;ž]¯žÛ·!HJeŸ,K²Ùίk…GƒÂeËýt5¤Ÿå#:_ê„;)ž1‰Òk)~z–‡¨{†A?¥»{†VXÒî°`q€¡ì-{äúkƒ«QÙú!JßngE””j]Ô‚zhÜ@e•G?ò€JDÂvâÌÖ›oŠHI´‹%&³h›m¤•a™¿‚cÍYòɧ¢}Vþˆ¬q`Y`ÄT‚m} a‚ú‚±s ÆF`¯,Q$á0 ªa×ñ]”ë¾}[Ü îlÞQmû—ˆÕ‹u‰ôúÉCs&œ×êd¤ږԭ!5"ZÖÊ;Ém&züÔwÍÉ 3*ñà-DÆ> IDAT"áêš…™Œl.&KwDä—ãDºN%-'Ôd‰M……84ù‘¤öÃP“µñÙšÔ¨õC걪G)(²;×.êhKâ\ÀP ,†s}`c@ÌÃK•[Î×çÇ\U™Š2¢M'~ûêôÄ0rrnˆÒ•§+› ½‹Ù ‹À3,gª»äœŽ6X­£´lö ÇÑ¡¯-1w–Œ0$©4Ô¡¶œ¹EJê M<ÚðÅX™ä¬Øíœ™b\Ád@œ¼ìý¨0fã´A¨U±D öveƒLì.LШ‰;•X mñálðF¬kŒVËŸóÿZG€Ž–Ñ8"ì¸9>9€€Á†òp¨-!´w¯ÏœØ"°öõïomî[Ibͼ1•>úú]ôU$â"àÁƒD•Àç@[,GOYdj˜qÅðËj£”ßZ–‚,A’9O3,‰…œ$zR`-¬¾åip»kÊ)U\:Eó´b¦òîç|:»©Î!? ?ekNö`5 `ëˆå†Ä ±§HÛÇ ²§íoÔFÊ` ný/E¨6bñä2c”ŸT$ò¦0ºS&ªŠ#õÖÚ3:à§p40™Á° *èÚ™FÙ,¯›" "Ž{òëŽN^ ¶ÓO3ˆO®^e}+8á õ|pÊãîDj?Ú`95zÕÕ´aF~z£w¥dX7BŽœ\‰~ÊPbõ*Qb¿\ ~`¶, 󻬯kF2¾zïƒÊÄmµ£G©ôGº"£?Á¼»·Ãï$>Ó–;‘fÐîÏ~ö3wjœgfpJßÞÚ|ñÒ±ìçE›®t¬ŽPhW_<zxpˆœÚíÛo¾ñ5?áU]pZ‚Ja£ü9ýð‚ÖPBšôšHÁ·àÚ߀Úi!¥}ß|õ•²¶(AÒ!§ „"X‡‡{»»ypïß›zkr™ÿ8Ÿ¸Á p$Ý Ü¶$ õ±:T`e¹G‹I@Âàà ƒÕ$CÊGMÞò‹4B„@‚<ˆ´ tVdº²±»wïãO>ÈSç©R›ûû¸tF†s(†7[jàÔ!ŠcC° ²8FÔ·î MÍ"0j?l]Û8><ÂöL8Q¶yjÞ½yƒ£•¹YŠò> ¥N„/ ".DÐ )Yoa}œŸ‡²Á’jQ¶±[{> tãþè'«¤¬ràÆÓ“cmnn/Ï—ÚQ—:g[õæÉé9õ¦¼å¨Ô"_ÏgùÌCݺá„û³šš9?;4 Å±è9%p7o½rÖþ„ÐM³Nqƒ¹¨\Zj Õõ[œIÃrãIXƒò$èâÂéMÖy½dN2.òŽj…¨Ñ½0V0âv~©Ux¯N‰Õƒ2íË)e#†Ì*t“È¢‘)¯W.<è¬Wî¼Ø \°œ'Hö î‰ a›¾Ã¨ÐœgÔƒª­F­æ)˜ ñ—˜¤‡Q+ÃúrsÛ¯_BÛpýxfÜ2vÄõŽi.«§QݧT.g÷QÚÕÌ2‹a¾÷‚Ló]tö“@Ÿ\»òæäè9¤a$}1W­Pïlß=8>àì_y}UîGä‰È•Õ!f··wv‹™„j\ ï ßë·Å¥#¢ÃÍÌÛ ,?qw-ðša™ˆ  “`±çÌ DuÜHÀØrËjJÎ Wì(òšPMƒ|\V¼ÃÁ€ƒ hªósZƒÊ¾.|òœÜåÇ­¶F¶fþü„¡æ½{ã¤9éGŒ½} ¯^´O¤aÜûÃ#›9+r;÷:R¥xÞÙÁ[_`QOýïâÓu”Ò«Co9³<-gjE¨–·çD[¡ÏN8¬Jù¶`•“§R´ù!Ê–³ ×7lƒ%&¼P|5Ò äæ@‰#Q"¸ia,uCYS¤ÇB˜‰Ö^܈UÖГ ”ÒÚ³o®­ü"vv‰óuWü™ØÒ8t !Ú~µZÓ’;Ç4؉ÊM¼ê13–03ÐÜ…TAãfVÄ©gO3øc¤ƒÚnåTò ½Q³" ¹ŠnÒ¤æjåLE§N§Ë„ßÛ[øÉ÷"ø† íÕ Ñ†€I¼î(ν&`þÊw7¯Ýöä/ÿ§ÿå¿ÿÁ~wïÁç¼D³Lf™ƒ4àr§ƒ$¬X°{3-í›{”"ÔJ òÓ…—س™°—j6îçæ—/¥Ì0m‡$]jRVvfa%çÃ,m§º´ìsšM;zf¦ GËë©Ù ß×sxSg“GUƒJÓÔw¦þ6,DA‰sÓ¬´™hh!¶ÓD®øPi´ñ™m£;Î0utëNcxÈeOéñó !{ 5g’púG åTÌ9ž"–bDŒû3o&h5^øK«ÎŽË-Éœ Hßð Uí³™nƒXuÄ žG.·/ýI êΩ§—“ƒ8‡ÓNí€Æ…B1]çPÚòˆÄ‘mÇkÊŒÉB.’¢ ªi}ø¶½r f£ŠABÆý/ãq¤ÂÁÕ‚Öy‡™ªÙŽ£ËfªóÄpÂì>¡“é,üXýkàçü l;²(x­2(?›²úZ$¡ ¨M¬|KÌ’Óäú8k•ŒlwÄ®LÁà9Õ]?‰<ÖR‰†Y¥ÍíMc¡æhnܤ@BÝÀpB½ð€ ÙÂsVT ´èU5ä¶—š#££¥G1c0…²wwvž=!GÌn˜U¯nÙ]{vvÛwoøµ°›¸¢Æ)„7gÎŒ:Xgïæ8=<`…¸®·6o9æ±.͜߃‡œ^½{g—/á?ƼFÿÔŸå¥Ô‚oi4£Úò»håЭ››7_¼|Adˆ'E­6\kÂUYí|SìtB³{êÕY_Ð"F1y‹•í.ô‰ë=Ì6-tR° Âu¿ÈÈÛ×¾÷ŠJ#t åˆ3¯(K¤æYŒÅøâ&’˜ÔÓHœoè4DÄ8£lášÝ¶¶zÔšÁm+›Ÿ>{º³·ç(”ó³ãƒƒ'‡/ŸlüÁüS½b±P¸#ia-ζ´Ö¤5³KJ=ðCkqAD ¦«ne.ø RݤèáøD²•ÔDOdÀäº'Û€ü)‘(;ûkTs€©ƒ@‘Ò°‰+ΰ¡·®ÁŽªª‡ ÊïY °½ë¹gÐþªà–žlÄíMlæûðÒy`òLå—®ñ±3ˆj­(pÉ6V»ê¯¿k9mñÆŠ—3„\^­7nœßkJ75æk Q¿ì e_åQœ€1éâÄh”Ú0< «m÷ÞžQ…kùú믧5Dä0‘;“ëF6óDuð¨@†­ŒF—Þð‰Ñ‡}Œ&"«¸õÒÍŒ°xç±Ù…€­“ñnŸŸ:lÖrGtf#ÏNáD•4¿"¬ g˜O`,Á˜éÅH ø—F&¦(ÏÏŽr~›×sÚç‘ ˆ¯ÏOlηÉ_¤íìôc“îå^³¼RÇÛ6Ó–Àù”¸ u¼oêóèð…c`9Jêa`ÅœaŸXˆÖÞ–F!t÷‹/iüÑéI«˜šÌ °:.‹ÓVø+Îoþz-i¢;±çÙ¥|5ˆ[\FÃ4—ú¡NEÛóõ ­ʴıCÙ8-\R4áa5dl‡ î*—“µX|£)VÍJ21ÌØ†žrŠ,î–³ðu3AÉ,¸«g••Áó±Õx…UR0#Ô) ¯¸Þ®KJ˜\ØÝ5öOX®ÑN„ÌöYוPﮚUD}µs\>„Ćo–t“ÕŸ¸ËOeç~Å€§Î4í-­ÃõÅš§¯žùðѽßüûÿðàÐfYÙ…³Ã“á­ŽÏ rÁ¼RÜý”‡£Íü =@=”hÉÚÜz¥ÈÊ’F‚2-ºhbaÎ]š@z)‹X´êjÎÏ…ç…®uë"=gѨ…ŒÙ¥1KÅUUK T™½"`P;Müâc¸ iõE[AõaTC8›»‡fÂäC©ÅÎM+N /çŽÈ&EqTƒ ) ìu×ÊÊ0?dž91ç|Öß'Ï'MÔ&¾‡0ø™€ñ4x»Dc±ö™aˆæcS0ÒpÔe8*@BÕÃópk†K× Òpš¦å‘ÓOÌ¿¨ƒd=«$´Nm6ó³h–ѨAf¯>TÕ¶hµÁOê½úó?ÿ×ÿúÿþ?øÃJQO˜yo;mê]‹Tж<ƒ¿Ìð†n¶ê€ ©s5÷/¯G´´ÿU²ð°:%…*æAÑçê3÷€”bÞ*^ž9l]=E¡Þ6<ãE©o +Éâ àFJl˜ò<ôLµÿœ<3 I›œñ5ùå*ר»©3Öä“”Ö³JG4Þ9”6ÉÕÆÔ“Àü[ë™ø@èÁÿÓ«Æs­÷¸iHow7¥"Ÿ|5jPÏ9@d ”Œ'Ç«á r}C=­¼16¶Þ|¶RêãX·ÄÒvv¶}?[×@‰zäL v{"Á,_‹ÄÌŽN P#}GR·¥‘à ‡Àg#ÕKÃ}%UáàܲN”P-Db³ÁKÂ}ê³9K¿yÕÊ=º@NS !¼É×›‚ê\$n 6£é"‚&šXáBÕŠ}"îÆO~ôOP¡˜ˆ¤³]̲Œßl»ºxýigPxKÓ58nñë*FÓñ–gy“ Lç©„aÜ‚Û5Ò)vóÉÂÙN2سg(7-ªÔ±’‰†d­%“Ò„øû@åÌǧ·ëŽÌ ˜||ͬÇüeà!Ìòôl.9ý _ø‰Ãë%R»šžW“!Wd“¾ê‘¢Ñ šÖÅ™”]ÏÔ ˜¾£1—…zÕo+¬&oã9Õ*® b.zX¿Ò{ÅÃ5ç-€ší#°ï}¯:wâäE"Nç²169·Ñ¼-me—„C±vvGî‡WA˜®×™I €Å'^­þŽÐŒbÃ4²n#åì1dtd–‚\RV+¤FCòp°VUƒäDØœ-•C$¥¯Ô ÕaBàì¬%Mt‹ËÊ]‹n·ïn›G!‚FrÅDB….!O¡E-ø±´ëãÓŠSï/fV‘jÿÕ¯~Å „7+Єí@ ÑÂIÔ'ô¬A»NeË…èèõ,å,¿[Š9l‰”´8D»f ‡ˆw·w N:šÁp”Õ»áKð»Ï_‰sT•^™ 5Àð€¾ä§Ôl†Ža)€W¯ŒSQA ½mž„óÛ¹~Jˆ®>†ð†ùn½È8Î-"ĺ¸Ê$²^©?)œgf]K‹É­=t¬æ|bQ,•hÅ6QÑK×XGˆªsƒä—æYMè:ò×Þ P’–Ï3DOЫ²ï®<ýæ—}JÓYð§-u0ÙÀÆÊ wÑÏ>ƒ‹}æéÔŸqÒ•‹WÖ¾|&*ÁÇ²Šˆgûâécƒ®Ìßþìg¤öAójÎê5g÷øÛo^>{vtp`vJTéÙ³'øÉÜ–Aq§pjCè·o|ʰkùDC¦$ÙUÈøæmßF°t$oÛ¾Ç^»½}ÿæÍ;–,õ¿«öX„‡ÜÐ6q3öܸuöú­…v¦"­ÞÚ½÷Ðb£Ý}g”Ú$ñÙç?ði]îGĨ{µ"î`“ûéù+E8ïph©#™1kj†ïp‰ˆZzÕ¦ Ë-o%b\VqˆÜ¤ÔRë¸Ñ8iá¼1äÇR9JY Â3GXŠ›ÿb>œD§&1?\f$ýˆ[0ÀŒh}<`Äæ>”w:>ºÖç]¡Ž¨ÃÛ,ÎkγO×ñ³Z ÏŽc*c²»Ô±ÐÂ(µ0þ”W­â˜<~Ï]D­©ýnPÅPÈ„‹ªsv°r¢X—¥GøKfÿF }œ ÏìÌ*i\ì0=³ô5ý0ö‹¯=_ÌäŸ5¿€VÏàO0PñKâøHcwb~~4dTÙÈ£@ê%„aÕ‚©WÞ2è?üû¿ã½Ã¯MÑ(n]ó°.¸"›jp-¥ñ!½XWƒy¹. )0Ê뜦Èo듬„, ¤ìw“sU¥çòàgÎý¤äÀæ•ÿ»Ì‹á½•â®]åàY‚²:»Z‘¢ìº¤€ÿ»J”ROØgš\ð£®DÚ·xÿÂU#¨" ôÌð€;¡JA¼7f..Dn<¦­€ÚtÊ`¦lsy¥À^ãÛ96i<ìåLœÛ¦Ò¹)a25)q£JôBêq_ø÷,ÝÝ+MyˆÇ[?Üõu³P¡”¤•Úh)èaÏäÂCm{ƒDÊj‚70ÒÑ…Ô©”–'®D—M[+þÅßÿÁ¾øýßÿ}S<ÍÀº×’ƒ¨NöÒ]eª‚qy'`¬sò+“WjÓ2IÍ*Ѻ)4°iGÚÌ+ÝÚa¼8ŒW›ŠMÈì­Vüœ>¥ÃéÕ"¹þMŒ ¯^î [³@×Z–>…騯-qÑtòßÄkŸóR¿_~Ó æ‚D€Ô‰Ÿ%5Gf9 ÖA¿µmQ|ãÏc[7÷îïsÈÞ½=ç… ê³§Oš(JtÅ\«¨ÿÆy{»{-‡¤ùgbÇ‚±äcôG͆A­¸#gëß·[‘éÄBà”Ëb36 <Ùë¡ÀLßmí8šuŽ~é‹<&2YÖ‹·ÏŸ<&¸QÕdÐM|cË›–b÷é(Iw!½ª V€Ç‰à‚+l†‰Q°Yy?ÉÁ;Š„³2Ž}©*ˆ%b*!\§Ò¢–¹Ÿ¼x¾ÙaDJ1B­¿ÝøÃŸüˆLªË/s)&&ˆcN œAL‰·)Ø®1*Îe`žÈ•]M´Ùe°ƒÌ.uêÕ Ùd„$þ ÁŒ/ž=nX4>˜œô,;'Ñ´ÕŽý!ëÓ°«3Ö§TžÅ›¬† ˜£d–äóBC1 ä óCùÈ•8$ýž€µÔêR—ô"3m *™µåµtMxvQ»d|yzlHeDž¢_àQjd¾Ž£™I%¨hÒP±­ž3c¥g¨ÂàA5’Y7M»P. £è'SíŒ}?œ>/]~¥ôVÓöƒø˜c³B¯^íßßûÓ?ý3r²·sï°ïx[•É·ñäÛ‡rrbgG“÷ŠÆa$†2Ïž=§Õ >À‰›QÐ*qf#É„mÁsú7çi™êÙܼkuÖÎ]«­ÍÜýì{_Ð¥ ýÝmÂõàÎæÞÖÛ·¬{ Ëwïîí>ü葞‚œOKòT8äí75²`þö–È“(…LoÝñ±*sŽ©dÞ’ìîà1Kmظɣj¹øu[Hv­%U!÷¦H¡óºl•°7¢o¶[vÊ s°­Uޤס…¾qËcËÝ·X—œC)Ý-XÕÛâdB‡G,Œ^¢`<¿Sµ5üPußäºá¤¾®a‹xnä|HB»÷ÈpGb„T9±³ÒP µY(- h/ÎYB«UyïAŠ÷@á±4Ä9ß0 ÇÉîr#€½cÏ’’¾.¬¿cˆLݧYp‰¡Ð» ,ÿÝ|"‡ðOF®YBJ4À €DC³€l)ZSüZŽ]åòŒMÌàÌŒyÔ=¥CHÒ1vt´§žuɉ'ö¢IÕT›Ž,¥0ÒTm.2¦+t5Ê©³8þú¯ýðÐò1«aھРY•+¢f]p×!ouhꯦvHLll@Ô4GBê x @Ñ*uïª`$l/8ëðQ¿g<â§Wq£Ji~¦ 8…‚W³-s·zŒA˜ñ§¡WƒØUCMÑÃÆ‡PÍjË]žÕzK`[A‡ÌÈØƒaÞ+P늾Œ^]þ¤¨ BˆúÃõ =¹ºàUÜVZp›PÁ’%+åò¬ ”¨|–·ë>Ï‚oØ5ÆjrßEi¡‰o™Òmbd©DYÀ¯•ù¹ œB¿ŸöelSÑ3SIa IDAT#¦©Y0, ,>ÔöÂŒ ,¿Ä©¼“ŸWsîJy;.Kºk•Z˜ôŠ<MÈf™¶Vhh¸xôèáïüÎo¿xy¸ÿàá8ˆí2…c²sˆefž$â|ÿ¯1çÃhE.0r¾g»¢ã ¢š£q^¾Ä%R„BùGοîS3ÀtE# `ó5dЄ3´Å¦påÔ,¢´;²É›N‘suÙÝôÎÐ+ÓFݙѳR ÷o!\=D_Ý!âúN§°2Ûïeœvsö *™tǨ'OžBœhƒxû NóÛ,)±-qÛâß{÷/‹Cìòç£?¡ªïXGA“XårÅv¢CÐÌyC1ö–3;:ŒZ€Ç•·‡è§gÇ/ž¿ð x ™ü§e¬âWê”â°\Ôo¿Îû‹/õ ШÅ0VïîîÌYëŇ&+æ*۸ûÒwÙ Bµµª|Ê9r¸–ŠðªñálhUviy WÁõ ³ŸëVx•ýÝ7OŸÛ“úêõ)„1zÈ.Â?¤ÉÈ »’´¦ÄH‰>P¹úe!¿&¬›öð¬jÎè¼Z½nyÆÌP5=¸Â 3hÅòåÞlÕÛij«i@+øš¡‹H°gÎìãïý`oÿÑgßÿ5GlþůmíìѲw}[áÞGdð“Ï>ÿø“ï‹yµÿðc3Ö5"ÎÖÎÝ­ÎÀÍër@§'k{ë†#I ¼6n:拪7ÏyËɘ‡9TÉŠ( tö:¶ÜÒŽ:Ó¦…§ ~Üæ`ve_3ˆµÿ8<¯0Ã|鈟¤×ÅfT1gÖ±¡OŸ™ÓÃÀ§]¶ÛØ“ ¬¹Æˆk ³Ð®Å%nXˆôSàp¥?®dÛ>˜ MèæÂÌê¬lÔ»ÿܺr³§76þê?ý ´\7ÖS\˜÷ ùž gÌà÷ ’ˆ•œX[ É% Ѓ»Ý„eʬuJ”«t¦gɉºÓ—¿ú‹ÿø¿þƒö}Þì£ì©…+¾s²ñÏþä™ãQY…:: Q \¬YOe™…œÕ÷ÇV¯½4—ÄSsSʦ}Pƒ^“ÏŸ>¥;Ìq’´Ô¼ 4ÔŠNMº¿\9SÅx]å4¤æiYà+Hçë:½¶é,‰—«U«ñ«ÞrŒZB1æØ˜^:^ŒáH†ÏÃc.U)H*åwÁ×¢YÏÖt¿x©~Èú}ZYò¹+›’Â h© ®•a½Ey°8:=ø¹‰¯™ŽÔÝ>ÏçJ%"š³j±ˆ:Q\žILb›Ø¹ÖIEÑÑ"|e <_Jukëþ½}úÎ]mbkkÌ‹ Ï!X¼hTáèQ!¨›·¶œu{s—®}wÕ¶7wï´a’n¦ÞLݼ½í°m‡pùÕcѤýGŸ‰aØiuåµÙc:ƒAi?ùû‹ã³“½»¾ÇlÊ0Ã6uSîE igÛ::æûì<$¹ë8‡; ò™ûw •5@)‰E)BMÒVÑG¢˜Äˆ`Q^¡2“}ã¸ìC~«Èí_#rZ€g‡Ð©Ü.,ÖП‘C#ˆ…L«29¯ËB[éÙØÈ3\¾+¾•¼Qˆãs (o2m±†#…o³Ž£¦¼Q{~@– 4 @5­¸„ªÀl»_%⚘`InÄèÐàŽuÄiš ±ê/¬B";VÍDY7lcǶ-DY:š¶m³ž%}c^U® 4ÐúI÷˜5׋p1‹^Á†?©TÙdvI‘yÁ&l‡Uý";éz?¯i~c°›ÜDÉÂÔž#¸Ô«¬dýÕ‘p8öÏÝ¥þõʳ “ætwu#œ¶xÝâU4¾ƒiž={ü½ÏþÞ±ÃhÝPíÖî'µ)¥ ¶ØØ¡È7éúÍ^Oð‰ua$V`6wRÔÒÚÆYÍ@ì þQ¡ BÔ¹.ó䨬é°Fü[:YˆÂÝ%§ËÃ*®h rªL”žŸŠ¯Å7šPš‡sâ(BÇÄ«E÷,‹ â^\¿EërRXm'kKCêQÛ"n@O k-õIÈãž‚šµž ÂU„ø$`û¹RÜWOmòLÊ¡±xÈiEqœ ÁÊÀÂÞs®&aòI\§Ôê }Ÿ¬èèg«“KP€Fý\«é÷‘ÛÔjì}½-ŇºÔ‘ž=ï˜þ½÷I5£Æ[š­£-ç¤ «œìv—®/F¼ô§t0+A#zÁwª=´*9ºK¹µŒL~è=:r×éÏ~öW=|`ó-ÎÍ"»—‹q‰™ôZßG õ{ËÏK1ª3}†Á´"ÅÂñ˜ñ®ÌV¶r^<"ÖÊ©fœ¯æ¿üË¿ÀûôÓÍ™dEˆE‚'ÏžmüãòO›Ž™O³‰𵓢n^ۻ㫦‡{ûvûÎíÏ›\<9rÆõíÝ]T$rŽkkÄI\{Çjæ6íÌø¢å…Áhšf¨1± î ‰xÄsxï¤÷÷ïÝ)ªvrû–0˵¥’ÿaç§H¸ÙÀi’“Ñ,Š^)vª“!…ñ§#ÌYkæp×µ«/ž|#ÞcèfY˜¾ÕóîÕ‹O¯]´ý ^_ŠHgÇÄËCž°9Ñô!žÃ2X`¶<ôUD¡2–FµN·ð“êÛvM`ˆÊÍÚˆ7[›×9¤ÖÔYØDKtÀÛé¡8—“Ç;Åùòœ7 íCóü^Ú'ƒ †bþëý†ÈŠþ¥Í:||vW\¡vÙ3#,ÅÅ5¾ßÄó¸È+¹ÆÔK§ÊÈ:žHÎ[…—#’ó‘”5Ü$•d[M¶’RÈf ‡¹RîQCs¨Ã£â“´¸ê†ÀY²¯­@ÿÉ÷2Á;'ê^8yÁ!=Á çôYx§ÁÈ2E}+”_¤6lËGåÅ-š,Ñ}ÚÂ»Ì •àh¸€Vl9Ä,ídŸtÞù"ŵ`‹òig*aš£SëT•÷ï8¾r€f¹€‰¿r¾·Âiú ùÄà§àÜYŠÖWbÎR4O—!ŸFÄÂ!f/’zËæš6ˆä&$ñc‡ö´RstG t×äd’XE ¨l?£Ñ J±Ì>‡I‹ {_Z_ªfçgÊOíÔ¥{®Õš’oŽÏVß0n’æ-1€OaT3œ…Ö´w­oPÂÖÔ껾Ägãð¨E©PÎw¥Ññ]BÆzP@f"Ræ|)¬„@:؉ÿ…yœŸfzgáB¥•Y¹<AhP2iÁ2Œª!ã 1P.¹BÞ¼ˆSvW:ð¶ [5GHgøØê}›¸ùу‡ÿê_ýŸ~þýÍí;za«»©˜f3™yÝÑØefè’B fì°_¥Äàðž‘ÓÞøTÐ:”D/“0Ý®kãº@2Šš6Ka¬5®Õ;S܈9-YÝsÝA½õÆÑ>Óíäô€1€<@]£IH ݳ+õþ0Ø|QêúœfÒ˜¡}Žh!ƒl0›Dg-–gRytfõ3(í à™6<«Gš—gù 5‰Ý°gç?‹_ŒÜ,Q9›§¥td«:õ}Óê Á ¥£š+ôU¸W¾@Ÿˆ]®Žè¾5öcf0*G´¦ÀâþÎ|§€©9 £þD=F‘ãE¿BW„ª$’)¢SòÖfSFJÆï¡ÆU…¾(.õÈﮃu‰9jZw#·°ëûåÑÁ­B1j16³<¨É®sº`x|¹àõ])=…é,’Ün¯\ZÀ]z¡Î¯Ÿ|m‚¾I„»{L–ÀŒ±ñÖÝ=,Dc 5| û\Cã'<3B’­l*Åæð-'ö¥OÄ)!R¤_ñ0a”¢É4kXžélÌyÓa'Ç(rðòÀÉŸˆpÄ}ñÍ¢¢q˜¢ñ‘ƒWï(gJ_LźW" ’}õõ/r7yöPä 2Î¥úÏ}R­o’Gº³?ç‰×ñqªL}ø¢ßÍo¿ýöÁþž£¥Îß²;I®µn”Âc6|Nd5øâÅÕ³¿ÿKX ’Ï`TÏ}ìh§[-䢹ŒßD:åáÎ'Ÿ}ïW_ûñgŸßÝÙ3Så€Áçë#oØ?b–[ÐÖ“VŒ1CC>¼‘ô ¹íîpû¬pŒÙçØ!}›ñÙ&Â*z.]ÀD bÕꎭ¬×Á¿÷ƒ/(C–B­AF7~üã?²Ü…œaÏ­Fþ+Ÿ.+E8¿ ˆ™# ¹ì›÷ï?À|o( VŸÉÁ[&ÁÜ1Ù?gT„|ö˜­ésÛÐÄ]i"p'MXïý†³1ÍO)ÇIeÄ-åñóúÖž>×nm¿·…ÈÚœ½ý[[Ç眼êqé³¾¡")äÏv pêYŸ 2)º†6m¥#îÝ¿ïðÛOL<=öܪ·G?ÆBs®kq¸”oKsú²#{¬.cuf@Gs6ˆ!9À[ «?zÀs㱦Æ9r‘„/¸ÉXÅ´±³woÛê<Áœ[>´www×QÎM•FÇq7oÍ„mçàÖcºˆ¶—Qhÿg®¶€Þò6œaj´Q@G2/C­1÷,E-ôׄrLt§…râ3´°Œ+Öá(£¯·†xqe¦2,6¢Ôl½ué8ÖøÁÀ‚t©AÈUR¼Tqo]ñé8ƒ²ã ±u±o^”L™ éý ´zN寧R"DÔ¯õGƤ,œ(ÏOÆ„S:ÑPŠzE‹ÍsrÐ÷Åúâõ!/§ÏY*@÷Ö~kÙvå—¨®x»¥Tg#›:2ÍL‹­ZÙ@¸À¦Ó ¶ghQ§~Afõ̸jªjðí sA”¥,Œ)«QEtëïì LuÅžE+ôÙ‡ظÅB`eÕxtƒ»vW‰•&d[¯ô1ÍÞæU@òøŽþ ÷ÁŸ ¶t$b´Î¬00(𨠨ÊJœ~d³áÞ¯AEu..ê{ëaa@Y5UNÚ¤Ól5¨Š|*èA7­˜ÔsÏYÞ<,{/Úi°kÿ©-F÷öv}òYä÷³Ï>ÏdÌ„¦âê0½‡Áž÷ô%úÂ2€eÐ" €~ÏÏËNút0 ! e\)¶Å¿©²Ù†tWä×­…4Ã,$2*žNÑü]Æü¯…æ !DX•¸ü\,V”¢B5q5¤tm-°¥{–²º óìc`ÝtÉ '<÷ÿ4¬þyÓ­Ê'd/¿gy<È~>xo~zåü³€L#k+<ÖzáGYBÅ‚¢yšŽáž(‘·8*ÊŽS¨mýbù]—ÝÑЇM.mÉPr¼qù§+i‚šezô¡§‘Qq )®ˆtH›¶Ö½-Qý "Rüleu üS Î#V‚¥& o ²†àïøS$b´íë+ÑM‹Eg ÷R’ª/ÜÝóÒp¢ïÓxòK1'Ù1V+¦—²ñÌ—c4Ó¸³ñÝæ-³}¼SkQƒF\¬0Ã*]§–†,ü>M­ÞBA…Ê|yú¨s8eøòË/},tÛiGéÌ‚—yY3€„¥¬Å¬öm§[—’ܸ\㌅ƒ©e ld³³³§à öÂ[M0+®Ã¢q2ÔŠùgöù0±ñ‹,Ê~¥@¨6À6¡ó°XE% “bxr .~zA¡œ5rz*’­ëNv4ç”ËLe§Õ›Ò"V—l.Þ$$Àîê”·D»‚ú¶BìS^ê¸isMÜñ±Š¸àPXZ5£¬¶ ¼eö`aØÆOÿÙŸh´‰CŸ¹íHó7:V½§Ýîho[#¼Р♹Šs ƒOZÊ[;ܲŽH¹.¤Ä5Áé Fc YæF±ñRq‰YHw?uT„`¥ZEL ³Å~ ÝÓ%¸` wê0= ? wr4 é§`¾tÑ­Aq„»¼ôHQZã®Üñчfo„™}*þ ¬ûû›ŸÿâûßÿA1¦X4…Oµ@µ¥ #M. gIG_â†|¥ºñÁ«ˆ"#RXA‘R%~êË2½à–¢x]×ÿÏÖ½üø•d~'™$“ÌL&_Åên©KòXÀ0lxeð_à×^ø10<’FjI3ch0+ûïóF+/$ÙÒ¨»Þ¬"™|“E¾çü2Õ|+ë2nÜ'Î+NœxÜøi/r¸ƒTõ‘€ßœ2’äú̇i‚pÐÞ;=ìéD°¦‹Z¡¶\ƒÌE¥ji×’á‘(6í¾ ðx厘pvâO“^îŒPH¹ý×Ûü{Hcsœ~M p’²4NÁÊY"'g~øk%'–/Í>gÏc'³ßƒ8!aöî˜ãYˆkÅ¡cÐÒòÝ3õ=­£ÉàC´‡ÊQK“î›@?Hw,»Ô3εù 94i—·ë=$TJzK9ð‘4E¿¨”•ÃË-ã0TÑø©húMè&0Ðf?>}ê\ÀÎä” ÉÛëC(]¾Ž@ TLÓÕQ)L±Rk+Ž9þ¼½%²>0Ò¨¦¨šÙ„*Œ¥/p±£.ùᾚsf2Ÿ-f}?×|G_Z¸äxV¯4ùpãé³ôøñÊY ~°>nÖ¬¹5XÕˆ‘2qo”1–دßÕYö‹®vs÷ËF­&lxôÙgrü™‹RP¥¤G’Òj7Çõ˜ÄÅ­™ zeEÉ1 :¢¯œt ³ÙÚŒËAço~ó™:5# µð i@«á“½P—Ñ>%‚'úõÊÌŸy¬}$ØÍ¤Ém¤ºN¾¶y ¨íšS %N/X½¤GÅ€¡%dó÷C^1ƒLâr7Øhš¤_’6Å?¿›ÇÇþô“³éþèþÐ÷Uý²Åó§~?C›Ð/êôŸ?ûÞ`Õ¬[ÓÔíBôæåçãÆ(g̨o´ã{NWb?­¹jdîã \ÓÈLÂzYžý+sL³Ї·V…qï¬È<áŒ|'å8Rû¹CÁß9ÅûÕ‹w¯_¾yùüå³§~ÏpÔíØŽç{Ï—/M® tDHæâ°a¼„;’Õß6ÑTs­E‰8È„Ý|ûíw ú믿qŸyè¦nÛÑsâ“},F^š °Š=àÌ'µ#ò¾jẹcl·|6â¾c¢öôìÜA'[4òICvüÖ2™)AކA%rÌ·+nÞUUWÒ¥Vi|¢¢êjö¡î¹Š“±|Quy„´‚:¤ëp”‚ý΋K©VNöu û6 |MT3P5¾ê›[Ìn±u^䪣wÏ?|4&i±]0rØ1Û…µðk´ê’/öbЪ&mÒ™YÀà ›ö!TaŒÑrM¦9у”pyþ<æ˜6¿°ÊS0IÂpĉü-ùлkíBäf,g·$Th—ÃêÌ·šWÄ\“ôªó=ÃÑ?ÿŸþ{k’ׄ@/,%ÎÝ2è~.ðèñÃO¿ÿŠÏ=R§c´“öíkÖ_å ƒœ¯¦-u& [Ÿô¦>Äx+ÒUãÏ~89ñ½×Ù¶ K¼¯^]Ø>¢ô§¶È‹ö^Y27¨Ú $céìÈ‘mx'c’¢L›gOOM-’ÔéIýýD7Û*4>×’˜‰¹Æ3b&Dê§„åþ\ׯ=zôHŽ›8Hn‡v3¬züZŸ²iNì¢ïÚ,¹j{5D²’ŸoLšÉì'îÌ#|(©^,Ì ._ÔØ IDATCh•«sǵ&*•¯¶k; Xõ“ä£×`Jñ½Êñ<‹G?9z$IЮQéÔrÇòh…È BÓüæ^—L~ÒÐjHÃ…k´ Ö¬4ÑsëÚýY ÑÚxX‘“ðKè 9îÌ}MÙ!‚œö.“aÁ `\a•¸Zõf¸ò@¢U,Q;wÀð£'–Uùðì[™öl+’^â%ô$¿4£º~²(ëÒ0.©@[kkEšB4Œ@‡.[g" 3–õpœ‡;òÜq¶<*˜ £ÖÜ„ê$("BwEˆUzyY¥UoJ‘u°GD¡‡‘XÂOD>ÐU*ÞÝ£K¥·j™(ôèŽP† 'äJËb)ÿ14õÚP…°äëßLd&e8%h IèD1¯ôîm¾™G ,*bã­]2oѳÌ"‰‚dÂÌ$d’¸ZkDÓrbP4¬± ƒƒ€.S·ñ¿‰@xÖd:P¤ùÔkŸüʹÃ>þöÿnËo¸ÚÒf<¯ÚÒ¦ÕØ^*Hx 6§R²­Z;t±ƒŸ ëæÑ¶¶$±H6“™ƒ$.dºð(ü†! ÕÔáTë6º)·pŠkK¶Eè>}ÉÁÈa–ã)@RM=’ÖÙ§Þ«%U4ha^ø)W#¢P)}ˆœ7D_ÚH`ìM°þ¤v2¶-G1ø°ºTºòÁÜî8Ñ x<=÷:L­CA¥gˆï–äFbK0Hà!%ìÿÓ½%™45$hrºrIm4H4WC)¬kpô²:ÆzÈÑ¿}c«£#ºï=zø¹¸üøøì³Ï~n üu¡Œƒ–Î9céH~òîä̯šQÍ»·vKú01\5²YÂÂ~d®&ô`¾ üú믘Œ½D²·$òâb~QËvú‘, JÄm™ÎĪÀ®¿™²f@².šƒÜ¥KÖö,f0SF/Ç[+TäÐlT.fÙ´ãìš뻘Ä1ŠûdQN®Ÿ´ëTf&fÉC!lÒØ!:%i©ÕOntO­`$è.sï ¦i¯F»èI „‡Ä‡þ$?´J­Ñ0n F ž²À{ËÙ §˜ÉdøÙ±â¤ x›“ÙrÈ€¡ýËŽV*ÂËqL»ÊÊD:{ mÑnë"0þxýiDšéí©Â*íô‹h@ $œNK&•A/&9ôC،üÈîÆÐ¼‰×‰ ‹°hötмdŠƒyV~Id#;…b>a¬›Ò±,ß´e¹ŽVtN.®.'”äÙ럔Ū¤Èœº>nŒµùµ@ºÁ#ˆqãú31SË.ê•éR£ûŒB¸]2¹d­É_z0³_8*·ìlU/…‰Ð¬Œ ËÄ; «M"]šÛ,œm`!×Ö«8óV\>ÚŒM5~!"¼2°q®ž+÷¨MP ¡ÌL ,·Ó~ÝÄ>Æ£¦âdÕ„S•XÝÇpTÑ”êЉ°•¹L¯à$´D1¯° ä’ ¹WØÞ|wøå€'GWÑŒ©œìÜ&TèÜW+ü÷ï_ÚÍi«ŒÂÛt„ŒYš€s¦ùëõWzŠÀ鮊¡Ð¾Fh&f.ž?÷Å6­J Wc¤ëE±jtqª(\§dèÅѦF9 ©š=”&Ì– ´qTê•y8]¸ó“žº[äÙ°ËfaYc!qqh“y9‘ fˆYA‘œ8yK¾xT$ÉÌºŠ ÐˆP»º¨È+EÕ@—ûææ8+¿uk›2Ìøân¿÷{ïÑã“{÷~þäçýŽ´1ÆON­È L~HìÕ+‡ÀÂnôæ'Lî[~õÅþ«·ŸÎΞ?|Ôü†3?,Ì5{ä'S̺ëMoÂã–•8m×19öÐhL?©’ynº$ÔÅíŒ%p‹¾[¿òêå ŸkB‚E‘™i6á†qvÞoÏsd§fñ ~áiÉM1qVÌe¥Íf§=rÚDLß97AƒÈ‰¶µ(·H``¾ƒC¥”wÁ€lþI3˜óÑ•â1”ÑXÒŽGÚ7%¦ÜÀ’H»i¦Iš‚’h]gBÁuÑ4=%´ð„ì/þ%@¾Gy–矛WhÄãàò)^ýìgŸƒ÷HS¯ý´|³AJÑ2“­õ¾j>ƒªÐ¢ÒÍ(ÅÝB(e_±PnÁ¸m–ö(³Ý?3AEÑI‡Xï= ÁBŠ6ý]óI„%“9)Ž trPÒê‘pg-ÁØ1QÔ Š[NÄK£Pý: 2Ôn‘•Æ‚/±ïò¨Ù@ëøJz1ë2ú,|™z½nHÏZ[UѲ ¬k5â^-Ó…û ÷â†ÔÝO‰KD¯ål‘J^^¤$ iŒfQ5Íî-™ëø02bi2NR+ègIUë§uü™«ï¥gŽÆN.»ðЊD±h^ŠOu¡MFõÓš €f¶¼º(Ȥ…Ë8F ÕEjJt+RD¾k¬¥•Oà6*ÝM0B ¿üýÿà7¿þõüGÿÔ™R©À.8W&Ãï¿´Ë[F‚m=ñnÈ+s[\kô ©ˆ$³Á…;J¼Œ@dÊAç&@’¡|RÅÊÕ[wšYŸê–E¨ÌqB2È‹­³Š˜½T ­»ÞÅ$ä"3)”™IÀ,ØR»Ò lòÙ9–É|ýfÈÄ ]JaGÂ[>~]´+Å86õs yþ°‰lÓTo’@9®rzë3 õýf«6-TMhnžC ²t)ìÒ) ˜[@*üÒ%f)Ç#bÆ Æ†çq33ÄF¤·Ÿ–ID mEˆ”ã®f¥á-.æŸ9äº'c냜儨ÜI° Jï=³¼8U§…4lÀxþìéLà5¾E¡‚ú‘<Þœ6ìúèGÍÁþUÏ¢JWtR·mØ+ÿdÆ#µ?„U´áÕ6¨è ÀÝŒ£”P’_¾º`u'§ uÛ2¥«ã»B83Ö„³Ñ T.”C‡†!x¾¾šÐô(tÛH¡“¦$@&Ñ­â/^xå×6ô0)-Öqqj_ï:]["õ “(ŒK›óž¶xÝ~984‚1%–§‹¥«N[„P¥&;/_ËÂH25Ix%Áhé.ßb ²]zÛÙ–]lÍ’qä’:¨8ž<“žãi Û„:H`¤ç|uiƒ^ OO}Þñ¦ÀÖ 3ÖÕ¬rr—¾‚dtBLÍîóœä¿ùË¿°…ÑxOìãœIpûÄÑšàƒÇŸ›iT=~òù“{B¢Æ,B’“6™j|6kOÛä~ç÷7­&E²g)9MõÓõ;6?žš9P¹¯ÏÂtÒ1cí·gIwl”½srì,oŽë˽:KIÙtÅx‡Y¶8Øeä»i3ÌÐ#bšÊAU´ERúgÆÁ ôXÈ”ã;ä™Ó_ Y8}D Ym¦p—i!òÙs[=ÊpŠB&ÒnYßÎI²MFIC+Ðñ$÷ùìyãbÃp‘@g„ËqéJLÉè²ÓØÍ›50ˆJ”z¦GQ<Ø• ”‹ÎÐ ¹4z4uøq4‘¯‡Z&’õ‘”°ƒt&†8Ô¬I“/im¸óÞxÓÞrÅk.Ul+rÞÝFT2™,.Ñ÷ß}¯1àU¿øâ ?G*º²RCf‰vuù*S)[ß4RѰ^÷' á²ÓòÅ6¥5˜®ë*rCÚ&›LÎòŽ`¾Üß¶nȘ‚:¤ÇÜñxh*•o? zÉØ±Ž¨’SXÊ~ì× Žñ¹ÅZa´}›uÒ`¼QP/²2wô«ö›Nr:sàÓl¦VY¥\D'6¥(ÀÊçö|†û×prºè| ®(øX*$GÒå¡L•’†W.Rè¥_l8ÌÆqjc…ÎÅ4øfͬk» i %)½´9tZ‹¶D1f¶jÒLv ´ü›YñXÃN•Ï%ß¿.©¦1êÈúHœeyÒåpߪ09;8ñ'êp>&ÅÕ¦ÏÍØñËß#Q§ÞK_IÙö—¼K Û/ÖÆf¤«Ã¯BSDîúFÌáŸáqEåHžÅéÔ±FÝëXÑÎoÔÂz€-/~>Œùµ@£…ÖIh¹š­>ŽIxÀ@1¬¡0j]°mÂ}Ép'ù уZ‰…Á‚ªª¢v2„™¤Õ¥ÈÆ#º¡£|!Ùâèäeµ3Ê×Ey›¾a!Wª £Çj”:ƒœ×oú¥ α°U¤õVÍíÌ£ P.ÕÕ|FðÈ–­çó(Í{H,IKöÕ]ÙÕŽNŒ§@¶—åÎÔ81:öò¡$Ýå*ÅU'“‚$fœ°1UŸ ­·^Ä‚ª%PBÎÚ 9ˆLr~÷úÂþdë4„ÌçP¦Y]Û—/<|„x°Oø¦Ho‡a‹=r Á²¥I4À3…¨B‘©¢É]ÔM\³2ðZ—‹H”, 1‚Öáˆða3RÃiÿvÌ,ÒšeP$9k—C`Z™¥€ ðˆ=Ö`–nz†[óäAÿÀ½£~`ðÈ,­j ò‘Þ@Ç:•ª>x Õ`*%Î%ÁŠ=‹6NOµz,+e•Ã[â¶¿Ê&´­pµ®¢•¿ÚÁàÚiG¤7¦ÞÉ…™°C­ÂfÀS'ž1ogÖt&:cì( ‹dñc…Ä‹`"U¯ÇÁSÇ ­RUêQ á톘ó™]m­î¦ß-à{ƒ_‚É]aŠa ^éXv>ƒ¶hLÑ¡ÏáÕØo×Ó?ý“?Ñ P­b&•Û¹h)_s”Žaµî‡(ÈcX7_Lã“õã;6­Øsî‘‹¡@ì ¬…V"rì òG´hIëþOÎÏ °¯H‘,îÍjpeƇ†¿ŽˆèÇâ³!×Ͷ2ðüÃ,µõ¡9à™¢ñgÇp­3´‡ÕhÚ­ íÁÔÆp»kFAj@iævºsÊ#YíÖA1-ßjÌÛ¥:±i9½¨”À/M“[¾ìò´'¡¿fáè‡v¶CËÈ{=~q¤ÙKÀŒ¯0¹¥ÏkÝ)BžKö‚pW³0ÍGÙFÓbY¡æX¢ Ï»¾¨GÏrÊRÙ€ùêcÊÒómÈ­¿ÿ»¿»~®©hâkÊϰ¨€´ívÂäÜ:{@ZÆ C6ÎÐ.„ÿÑ2Q7Å}ýˆN¬¦‰X6 íƒaoŽÏÈM´ÊÓw÷0ª%׳×}p†PÎ s–ŒI¾œŽÆ[¡Àx£ÒÚ!(‚%(wfÈUÇff#ˆŸG¶³Êþ1hUíe-m~ƒÌO¡*XDÜ`ÀðŽ¡¾ç8ìßCé}óõ7÷œ“*uªÅÄ?ýJ€äÃÙ4{¤A‡ ´j­ÛöCc¹9[[*uB½¿Ÿ?W]mÛ4R ôfCÅýœµÿq…õÍ\£F®gJ›0D*CJ­¶y“­Uw"B2ë¢ D6š¹}l†5˜P¡%È$aŒ™Á,Î7»:ùù#ÚWœXè’úª"ö>‚«§"Ù1Ýð3nAÉ̲4eiMAÙØFý®¢ì@ûFƒ¶ü¸9A 45ý"Üâüæ#[ùÔ2uÈü’¶tjAðèÉg?<ûôéóÇÏD´:‡˜“„¤†@@ bÒ®‰Rrà, ™e TjG­9`î’#hóD.(HÙ*®Õ(äiìñ<1Oc<“5È•`F5FRä„b½°wµÔO×tEНóŠÑ£{†ó,¡A‡†Á¬Íš\nn›mä¼á„PÜ…ƒ¡I^þðR"]ßÐmsàªDX³t.<ÛKxd…cÆ}ÇãiümK*5ÜøÞYI­‚f;@fUÆ‚~ˆþ8±ôRà<Ã'^§ÃàAgCÆ9¥™‚]‡ñ:Y2ç>+n[-gW¤P[‡ÇxÔKJ´'ò -¤Þp@Ô…(Ö[UC²všÒ¡Ø5aS“Ç+7ë†ù`À·v“@<üZš"èInÌ£ØTÃ!T·cl÷]~X¢ß˜š-t‹VÝ(­ê‰é‡Óê½L;jœ>¾¹Nuä•é‚§»he-}l³2¸)~¨ ƒïšÖ„frf4ÿL€MoXÓ¬?-"ž¦U¯ßâI¢ã–oíGÊM5Ìæt[ÆhÃh¦9kl:õQŒ6ÂDóšªI‚ð-PY©òµ3+Ùö;–ÜYKI5À9%›·³>?¬¥“3lÏ~|n1„Ã¥»´{ÄJ«áˆ¦›þ Т쨬aƒ„yvCz­ Lž^ÈAÇkÍ9û&2ÏV?ÏHRSù˜zã¬V˜Nkc›0û扽!4Ë—XÌÇÎ6 R­.ó£2í@2C§ú=|¤Ñ‘<°§ßÿþß¿ö‹ïocÅoÛûüìÕ ãýëõ§„®yš)dÌœ}2 b˜²Qä×N:"ϱæÞj~ŠØ¬^ÏÁ§¹Bu™ÔƒyÇ‘AEÊ0ÕMMN³Á< JgÙe·OçŠÒ´cnÅ™—1ªµàÄ$CC´ mÀ!Ÿ=âüðÃSOCz-²f.bj¡ˆ§zgißD%!=Jš¢Q»Ê Æyº E·‘ R&ýi¨Â/ú†Ê#³ Gx„ª„_|À% lk²„ä?ijÌjÙÂP»ò5K~žl±CÝ›¥oÕ¾Õ‡_;k}Ðá ÓÓó}ëOàcÇ äò§6· ‘ûfs$– AåÚŽ´÷ËFžÏ‚°™-î…7T¯3, ×ÈÇÔËxfª”·rbg\Í)»ÚDêÖÿì²èÖ4] /Ù?†H‰fC€:] \Öˆ ñõpÖ5lœ[×UÇFK¤šÀ§o“ƒm³À¼"%&S—½¥/Þg"­™ÃÈ×Õ jzÀ*€y”S›gy¾:@VÚjEW°qyFiDë§@!6U±.˜ZŠkŽ"RÅ•¢ÊGÞÐ.=~Ù±hMÈÃϼÕιzß$ûT¡>œ¬l;úÛq‰Nù@µâRd·‹Â€6®AU·‰È¸˜)CT®×•ŠzÉœ¶_ÌÇLQ¿ü §ß’˜î'W‚ÇEåŽqÂéJ0íÙïŸË©x„¹²æUKí3# =E¼•Pcªâ#ºJúGçjÖ‡/§÷ŽíKè³c{5/ÐJÝpZ¹ùXÁ£K¥°¹ïå­êá´ZŒ×^Às:Êñ{“Ú\‹j ºËc®y5f9[y°¾[.‚Ü©#ǺÎl½ºtçJÉ/¾l‰?aèÄjXC‰0lÚ£„âràÜå(è’@Œ·ljáe^’WL¶5ÊTУf É Qãá=ßµ*[”K*Cx8¤=+„ÒÕùiï5(“¡ÌglX½`\0¬*øF(©%ÍRšW;T[GºrÀ³%€Ù’W`< :ÓМJ«NK”¾jŠÀ{ôJ;Ú*õëCd+E¦§>úÕ¯þ8~úYbÍ¿ZÌC¸‹æP`Ñà.ÝÁP:Û§©Ù²ýæxBNQ^UNÇ;)ûãú8ßD²×¦%lÍizcv¾O;ÑÆ¹Q=:EÕÇ6¨J4uqó9¡£‡ºŒ &ºÏªˆC]îÓŠ£j«\„þCŸK ŒÛ|FKÖ¢i*äíW.^ùÉOÂc"bSƒ§ID¬bÄâ6¶…}g÷‹ÓµirÀ%©ˆÚjÒÈÛæUÿÄÝõü¼]6ŠuI$†qyxjý[o´¯ ryTå!Ã%gÓØQfØêt5˜&l‘3ÁòVë"RÑjÛñæÃ=0Š[ÊàK™/9èo›½3öÒ¹ÎÿN2×Á÷;¯ý¶¼ž²`²BÆŒúx=Óo =ÉGèA°œñ5ñÒºØ4fµOÑmf\èm‚6Üu–#œ3ÊùòñÀ4®BeeJ œ*Uâaý†ÒåLHãàr ¾&½M«âÓ-M{û8“Þõsª_-²Ín‹Ñ0ðT$²a{#.©v˜á‰Æ!D6sbff³EV Sö“-¥K§‚hÀ­ÈÙñ4œ#¢NÖæËTÃuNNÞ0ÈéÕÈ^IJ4V›–Gß–šöPÏ(j¢¢&R‰ §c¨ö”n4h”Bžõ ZèJµ`}ÎÁš"«G2 ²þ².¦lë¡ã¬ò8T)³·#SÕs!Rf›YǵqeCE}04LÔcáÆA íšòj¬ŠëæüòòÂÜ «í‡{ùÉ—Â\ ЍIYÞB‹RÑʸ6±w¼@UsIp‡É.^ÊñÊ%-sÓ‹d šf–©T'º ?¦™Ò— wu<…Å}Üî²&W/Ñ$J „"¼QJqô3¡à†~w\ò+4$“vI\Õ2A.Ùî ɦ·ºæ™÷ïYjOªGN½©'ÀZž#çïîÌÒ8iSaŒ¬•Ω(Ín-$°µëêä@1TPš ñP­¯`6 { 2 ~F¥+™KðÄoy°it‡a*lŽRŒ6³4RÕ® kêÍ´\`HCÎÊDŽ"2GY…Óo¡:üâÎ_ù1 Þÿª &OSR&…JhŒ)µ+½øQŸäQGë²å8w4'ïÈt­ZÕ%ajбSµèÇ+øG¤ÆhwºBV¨Aå×[i}‚öú5 ¯fÊŠ[OÈHJþ®u>+4e½v’öº54€Q#/íÕzH~%2½†YCÞ~$LuÂ>ÍŒ¡B˜†é ™L fwúR/áèv@Bö§,02lß3HîÖ#í®^ùLNE„U³O2Ž…»ùdˆ$"9ìäò%°‹T§\ô, B¯Å—£š- œZÄH‘±Š"¼KÈC3—ƒ¯”XÔd™èØvšw^뢸M5š#8ú7ÿú_±qŽÀÌ¥è¢t¾0rPkQ¶3Nï›C´Îkg5ˆ‡,8¢•-«e‚D‹‰Ü™ÂxÀNÆjQËNu¯†áªÉNy‰*EW}¦ã^~bìК[+BÔÉhk.3ó”!òk¼ª¡k=âTZãäÛÄ.H@³áD~¼‰kÓ0µC}° |ûí7ˆ4õmšE’ 4òÔ‚F 8²¹9¯(Iì‰0EØÄH¶Yb a!)Á:©Ù4™ã-niMF µóHjm®î‘^R6œîJItÏËü£O³WyYÇ¥û¦x¯hZ×vzDŸÖ{|×"}_.hòæ¶C³©¬” 9 IDATšúz1˜áT!¾¤UMPñ#(”£¹zÔæñÆó~k¨Íª– i ÕìÞ#~— q²e¯ø‚gÍN²²«*¢Ù¾ã÷¯PÌò'`ÎR >¯@"• '!C~„OƒGEÕUSœµ4 0*S’”¥åõb^­lq `Ë22¤ (µ¹(ÑGÚæ3mCE[$ªˆZ«¢|4S½Úo>倭‰8˜xUãѵä+Õ ¸Ñ›Iì–††4.¿àîë"Z_§Œ2Y“€VÂ%‡å_>"ƒÁ€A¥±øaƒ02LuGžíL—F¾ÌæÇ|ßvˆÉf0[œ©~Å _ kÜE™è'd2—*¤ÕℼŻªU•cäd$2&+ÏÔkŠõÕB†¤Þd2"=<ÌíÅ+ÆHÖ/^ü@Õpܼ}jý×ÏÔkâ *òX‹Ù½°¨–’y[[’aJm«LÑÜW8[ÐãŒ\m_NhžuiŒÍBAp6Áž"‰¥ñÞRR»V´îkTFöFLqÚ¬c¦’ƒFnëyVûKü® "ót3–2ãX|¼­ü¡r©îÈ e ô¡AÆ:@x€ªºóKÅ‚u]}caÚ©'3Dü푀˟ 8XÓ•£1~ÐE’L<®Ÿ”&„5w E!g©Ó-¢g˶ÄóÁŠ—RÚùê—yÌEŒ=oCaE¦ô蔊a*‰$¬¡_ƒ¾›[j­…Šq‡ ¼ØE2óÕ|~FÎ8¢ý%©”šM63B×eJø#nO•µgtczþ0§#.µ¨Ë[¼°gz3°ä1€“³^HjΘÔ%x÷̆fóí$ƒŠx¿äé÷îГoÙα&iÂq¾aÇkÆo?qÌy4îqq93MbA;ná›3€¢M&MDbäÚ¾•nÁ•¤“7P¥!ãÜZÓúyÝ’È|*mç»G¼Pl6‚ÞD*l';ŒbDñÝ -áUÄr¿¤—pgÒ`‡GÙ-gßG)ŽÁÈØöº¯ä¼ä©ÚµeA&ˆ193?cY³ƒŠêmlgÒ´úª®©»ó”­ù¯"Ã\gÃVÞ ÝI?·ŽO>8÷+*~¬O4Rcm÷ÎÙÑŸÿùŸ6ED:ïš~$Va ¥µ©¸™†"zCxŒi›ÔË»BÊ)ªõ`ËÃx#Š©JîcæªV5¾‘rZMÉuD_…ÜÂËûõM—SûøýS;Γlœ(8Î]Aµ(è•þS 㬠,æ• Èc*7äí"ýñ•&œÚÖ綬£ºÍïîÓ*êã©mú¤‚ iPÜ îA<Æ F‹TAªm¨Q$*Þb"¢—Ä3÷kŒm{Ò§åiü…SámÖ¥¯mð”ÅÔÆ&ö1A¸S‡Wô"_$P"__ŒƒX„­JÕû±Ø•ÓðÔ¨è²#¡¹0@ŽYŒ#@Ž´b,­ íjço bC„&ZàB À$0X=ƒS©½4Eàt÷J¥[cæ]?žÐ_ÿÕtÀÁ¯ì ³Z%ÌÐ(îõt-Nà\ɾ¾ŸãØŠÈU4jIFA÷•ؾ%h‰BË,p§F`w)^…ðC{Î"²Æ½%µ¡¸C(P -¯ÞUª”*Ü0+¾ÓZÌÆb«v¤ß‘¿b! Àiüº¹U¡ (/#ö⎰@.ÀÀ ›;xwŠX3Œ²îº+eÝ—÷­‚ö_­P ¿ Áœ!Žòòw³º‰ñ}oÚÚQjúöˆ’«ªåx ÏÞåóN¸Èò¼ÓÏܲÀD3Óe1DØ]¨ˆK½îõ[{ôN{­z ð–6¥U*í0÷z ‡n|èSAìÕQ–"rŒjàlÇ¢ÇeyÛ€·:-Í£²–ÿÀƒA©¾ç˜+Õ`A&' äz8ý¦D׬¡@>»ÓaÄþjÄfX9ØR)ÊÝaP—Š6­,Ìð«—7A*bX< ô;xÿåÓ§>h2háy’¶"0¸$ŠžË¨õÏ\KÕBVß4Ÿ+Q#IÀ½/˜".™$v•ðh7·²Ëû*à ¸[Ü=^áWdsT!ÓSóOìP«¡åÊÁ¸kSJ®š§ °=eU“˜™³Â{/g¥P•ÚJ[ÒRnzˆr5*ï¥gFQî.SŽê Ç›©o­[›ÉL«·fÔJxƒ„аàZ™È÷þ fÐ:³»¥¯º³´±¥PËAwy¾šØPU3—€VÎöåáq¿ÂC3TË‘R§¸æ_”ø’ӭɨÀX{øAºpÀi>ðE–#ºrÇ >PO¤`é§êÔ ÝÛ\EMÊ\ áÄAþÓê¿Á˜ê`À`&BqŒ« <îS5ynd°}v΀'¤84=Gêõúp3(&ÎÃ;šM£qú½„ k`V*°¡ß#ªÈA¥+XÎù`fW^i& ”<±Ý¡ˆÇ!#‹]%bm¨wËÌB™NìI Z^…Òšª³Ê}÷‹-ÂAÑE‡~ù®1ò¼¨þØûÖ k§ˆ‚djÌü–xˆÑÉÊñ8½0×Hþ0d³¥Å ´ ¡Ý2_ƒY"‘¯,œr¤YÌJÍU¦%7xHÕ[ðL€Æû›/¿ô-¡ÓêE´qnÒ½òéè/þâϨ]#l¨ýüøG½°‘ !éP \rÄ ŠõödÈ>ÓÓÓD±h°7Ó`~«¹ƒ&T1`ŸmÜ΢€(„×@eŒÐûа±~\¼kã0«3KÏ}É3•pGu%uwâªCV ÕBGÐÚðkÚ‰ÀщlúÕ÷6­U8·¼õäñg?<}ʃܿî1“¬/SšUŒòÜIR*6‰E¬À¦UŸ«Q¦t£DØ»j[°a^$§x\m‰¶SÊ¥o‚ò½ ” ¼}ôêê-ù¬X«Uù¯‰GXÇŽˆB84þçÈí£÷™ŽRŠfˆÆx†14òžÑù˜Kv£í[ŒëaÕ/^ø!Χ!CýÃ?ü&bÇäúágä‰Af%—¹h ©HÌÃ)!‡x—¯dÛ”d"À¦z‡ Ë‘MÈÉätÀCyím¬\;!aHU*S’ª9‰ÈklfÍÞ¡$Ál=Øå´ù8ñ‚!Uð&Fê€I†T¤Àü…V†B;GQU?âÃàþ#ÀÑ5_¥+®õV܈$ذ å 1êbó(4áLjtd“†˜ñÑ-dc§/Sk3>”† ³|H%À‘Înaõd¤Á‚Æu¦fF*¨ ðdDJÂÁÈÈìRSÝ ÎYÍœ‚úù­u(jË˸ rå/-ð•¦XHr€ ·ˆg F(®+Žl‘´»ÊÒTþ· 0S[6í‚m‘xòÊ· oß¾äaÎî=~öì…ýè F`0޾"—i˜©]Ž„K^Ìåµ+Ø)XŸêÍ‚¹/d5¶†Û”›(DD6S—šÜÌ£"-Z»³wØ Y<ûHÐøî“vÅ4Nˆ>_/f&;O«žCÙ®ù‰$í€&u®Cl£g"ߊÜáˆ~i¼\–Í dRMhf*t€‚eê[lÉ¿3Õæ\UiàcœX@Iv.*:²çRÂ@ˆIŽ\Wž(®áµT¬Â©+pÕl抗e²|µjÚ)².­°+wuÏõÄ{áBÁÀ?ŒÔ;IÙÅæ‘Ò¨—Ø€í+0„06–ö!qÉ©ýN;tÊËÕLƒS ÀZPíz.dy_í㲤¹qÈÕ¸lR›ãx]àÝ_¾ŒÂ¡¹J‡*À6ÂÔw*ŠWæ÷Ñ)ØŠŽy…ÿ™m¯~L™f¿)vÅAzœX\ÜØã¢BÏUBææ»ƒu?¤{ÐðùÑQ5$éËΘ(¤á¡ýJfãè°¬––_6E.1W³î‚9#ÇÆ >B×· \~ZÏRº²‚®¬wLw«:-ŶÃFÚ°KÑTyè‰Õ׫¬ü>xš3~¶˜‰*Þ¼6:êg9Ew\O ÇØkGaS{ñL¡cQ§›?š‘Á@ŒŠ¤¡íõІ§á‘õ©ˆôÊ}‰—†D;U_!ÆB/ +Y$X[Q€dºÐz„Ê£W¬X|¶ö'µ½µŸ}Ùš=dð“†O42,õÊY¾èzÅ% 5F‘egª5:ò¬uIËÇź3*-˜¹ýÚy†Ÿ~r釸ɉì(õÙ ¢fûqæLèoßm»O#’bÃ6•÷šŽBσí¬gº!2&“N±bSãŽÝ¬pË ì'¾A¢:KKªöfù_ €Ç³+î]»^rLŒ'Z!ITF(*',"@ÙHDàsE®ùÇgOm<ô•œ†D VEÕÇ7}F{džÎÏ'Õ?0™×èÁÞ¡(%õ«õÄmıfæX"rg±(×Grø 9CK#>³‹ëšsðûA1R`@¢, ÅD"73nQf/Ì6㫸Öqªó•¬Uý©°àf–ŠÖг•OæðÒÞaÂPõ6 øîÛï8±"ã]k×KLP¿ò·ÔFÇ·N|¢¤À¸‡Ä,dB•1å6û¸W´a˜Â ÿÍ׎ù<=ïÌ}™<#Æ­” äÑ&æÒœÖ.5] %mVhßç¢ö¶”ÃRð2C+¾µ˜‰÷Ó@N†š­Æ2 3ÆÜz;ó4“¹Ù€hèÇ›©Û?49LÎÆ<Ú‹‹gF4>\èÝØó90Ž`3ä6–¶eäÈ:¸ýòÅ"DM†°ÍªBÍØ€ŸœÁg´{¸(ÛÒWõqµ¹º#!|ÑJ®ÊÈÂì‚­¸~–Õ¨ÃLóŒ /”2žî0¶£ ôŒ©^mÕá1ÊN Þ’a¿ úî :C–Њ@!±:£{‰5ÆpüØXaS›ÐŽ´ýØyÞa7UðŽXgMª¾ú¬W+ef͈ ÏT’ý&§ óæmçˆæÂ'˜»í(èxúh®âµ:°O¹sr^ïcK©Ïˆc¶Fb¶i:0ô`™ÜÈD‚@H†Ï…qÈhqjV–âN‘nÇgŠ×Ïn)Åê\Ò›ðvtÄýæ±Q(ÿ(SÖU‡Ú|@£)þg¹ÓÚÉFw¥]ú{`hä›|Rìó æ«:ß¹Ó&É™­:²#nu=} H†¡™ø³T_ÖÎ@ç ;]ïí÷ßÚÙ5ñ%ëöcbßáûˆ½YLÓá«‹ï¯_3d¿xk…Å6ÙOHÆîw¢Ö"éÉwvQîmöò+Eur·³@œî@”@x•Xs°œ.–±‘-¹&‡¤Ð4X2!:H\Ò ’¡r ðV¨À1 ð2‹•Tõ‹Òî« 0¶>: ~Ø8„Ñ]‹ùé¹@BÂ¥ÃU7¶û0{ \šI`YG ó ÝÓ#Ÿ-Æ 2•ýñ§ÿ>ûüÉИ5ÀÀ ?X á×£µ>36fÃæš™›F7¸ƒ. s„¡4Úr&®µItš_šM½ Õßá À mÅ¢ —F4VܧÇ`ýÕŠæO“Q6ðW8q¹L]pjàĵR¥8õ'ÚŽâÚ|¾e–žEt5ê*($gZFƒµÄ™«½ì$G;t+Nõ⛸ ¤§ÅÛÎà'´ëS¶ÚþD'ã¯Ë×o;á›Ò¯³ß²òÄÉá6›T‘y*›ë&騙¨U®Ì›»~ËJgHðQ­³>v>žN0Øwg9kK~› V çåÅœ°cÐ [G`Él؇àZßþ~¶Þ*;û[²Þ4¡çÅK?¸W gc].>Œ¹u=Ï~xJ àµÝºšŒeÀ?ýwÿÇÏ^Ýxuv|OóàÑc?Ã|뺯ù>ßòEôÓ;§Ü²^\¸¨7'ü#õHdY[!•m4˜ÉEºc˜ª&(ÊÙ­‚Q(­âŠÉ›‘XäX(cæàýFŒøôß'g'ä^d–DÅi]¤¶¿Hp²a#£µÎyß”éæ3 i–¶òÔÈ]ë,ba€±àNùÑŸar8Z‘õxœkígÒ4h$tøe7ªãÏ|ÚÊ×ûæxNîž¼¼¸ÈÐ2ý†¼¦(Ôˆêa($Fè[©„vk׺í¼óŒƒ·IÈxÞÜ xÜap‘󴮯ˆH^ ‡g}šý2ÁàCŠBÌuiiNh3¢êWç&VKôXGü4ÔqÁòÙgÑéüU˜DWÖÏïµìÅÝíW_¹Œù‘ãšm£]x¦ûw@n1ïâQ E¨5ª|µä` MÏ´-AâI¾Ð“C@8Õ2P9¼!³–ɦ.Z!¨…`D?wSnóÁ©a^P?¨¢è¹“28¦EªÐÂ?é¤1¯,Ÿ9œÖm±Ç-îøÓG1ä¬}EÇLXr ¦u7MàÃW_}y~v/9sÁ¯›P*¤5þCŸ=­1H)(Gç8÷ÛŽx5³Dï¬iMB)ÄhtmÒþñ“F&DÐ膂\©)e.˜eî…;y8¥Ž¡ª1ŽŽ Wfþ_ò¤:Aa¾¯c4Æj.a ´/6^Úª¥i GˆCŽŠà‘9­^ÄÐ ¯Gdˇg|BƒÔf˜’Œ—]ÞÊìÌ $cÜ×>zëb*ù¢[7^<¿ èÇŸ=é°Ç‘3 ©Ïïk]N,‡&œC@xgÏ$ä+"1æ4“s³yµOÙäæZ.I‰{b5ù¤Õ‘ôRŽqî<ì¹±ÊbPŠlçÕȦ ‹Àb*Ù[*^:Ë1m°¸iÔÀškíVÎXõ¡ëE¶¡(QÀ¨ÅÑQu7ôgž)ü¿²¹~þåèö½û~’õnCÜ£SŒ6A—>eš.vlk(A0¦/^\Ì”p¿²¤*5ÊJÌåUS&±%`.o®Šüv&´¸Ð‚Üa`ŠÜE„p}´6»“ƒôé^Âh´ ­Ö\õåºñzÜ30°kÛfâS‘SH'F”Ö*rè»Ô¾oíT¹"BƒÊ@b„Q¡Ÿ ­ÄŒaL9#SçbRÁÈ:ïJ‚é¬c?¨b”¥9ȇýkõUuvL“ýW|Îm%pDÁt±JÕ)‚æøï6Ï‘Hщ¤½P£ü¥_B~êaóVz‰ß|Üábípùõ¶âã%d*µÀîkuÌœWä ZÔ%á&³^£za+ž)Õ^1Ânæwæ;Çàxòœ½Â€óÊc¸`ùÆ<Ô!ï*T­ÈvŸc3ÇÁò«íY/0×r¡±OSJø…ry+n€ÖþêWÄÅ–Tù—ri™ˆq©—Ïq÷Ê}«Ø; ®åµÕ^zd"ñJ¹Èǃþ6qÌ(0oÝ{5áœñÊäcJö†ë5æÑàTKtNû8úßÿòÏü ßÇßÝö=ÿÓãë?Ý>7cdÏ‹tHÚk®/ž>ýš_5?uëŽYú´µ¤K¯žÆ¯–É ¥ã®ˆ¤¶š¢cqHŒJ¯'V€Á¾™jÔ€-:ÛÞ®Á¼RíLç¤çgj%Ì౉êÐŒö³ÄX‹pgblÞÖ¯:‘˜šbôb,ÊiºƒgaLòçw~GípN'†xݾm£½¾Ù’ß+MSô«gäh/¿¦FÒTõhÝO.&:½©œm?×äÓŒ+ÛÅX¢tOu0®UíªS&ÂÀH¨‚š #ÚÝx’àÁ`1™ÐœÏ4”Xó:V»Nw%¦û˜°cy}³+‰‘»‚3àk¸3]{«rKáÓïŸ>|üÐOØØw_¸Ù›·ÎmßžãÑÕE §`“ó ¢ÁFfê¹Äd¬Î€^ŒO€€5à{÷NÝQ‰‚x…GŽ}h"ðt› rÜ¢)˜I”‚¶nŠ ~Z°ˆû~Xú}›Ÿ´§òçÃf…‹Ë[ýö€è@FRçRT#P|=‹%Zqa ‰\kš3%CÔÊóF…ŸàÎ7•TßïbMK·(¨äŠ9w×ê•sO4!{˜-<¿wÁZ Âýç_-r›÷,IËdŸis~;ûÐÆ“0¤f *ŽT N“'£R¥–£å]˜ØÈBê¹]CI]Ëæ‘â±;ÒÃÈ"Quó.ý×å‘Ù€‘V9îr ì±Ÿþ1L>‘ ò ÔÚȘGV\) ¸/žbÀ8} ÔY•3 **zõò5ÂÇæÏùȃ«;ð®¡$ªP¸\`„Älê:t<´Ÿ’f1«X1Æàlk­-‘ëþY§ RRœž ²âFË@R☱B{©T©Ý·aÌ‘lYHÖ¼U~[׊%ö‡…¼XQgì‘Жr,Ãb¼aj‡AÕ2íIÝDL€%!_˜¡±t§›×0 ÅÑã>`‰Ž:xÙ‹ajQo³¶´Œxžm_)(ØÝµÒ á·º€»·röò4±´NJ›p箓ãhÁ0ü¬ÄKžÌ­e_Õ+ç1"€4¶àTð ÌïçTOã(‡Ô·™Ý+×â@°©Š\Cåªé|º&f½ÿŸ©c‚"AÝòûéS,Âá4ßµ’÷ À¥Êì[h H´%.jƒ?é+KðVÙ­óý¸ßì€.™À–`8±~9YÈ!œ•4ý¬RÞ©>W;ÐÄPfMžtð r ¨Ê‰Ü^ú µ]VnbÈPçÿÅÿptzïþùg¯ß¿úòoÿ¯OÏ¿òóõ/Ÿ¿¸}úÀ1Pv¨˜œw¼™À{÷ïöägü˜ œúoÑL§H¨ËÑk «ªåmšqd9Ÿ,/1ï­¿y,ÁŠò“·Mâ¾˜Š°ªå·óf™ãrăC)>BÏôWµäˆg^B¯¶Kóû9É×´MÛ >ŒÃÚ ‰4¸ëÀü“ò(“}ûíw9¡y;]›Á ŠN\XkaõújAƒËIJF¢¯…4'b¿ª!~@C-p>î@0PÒÉL>”‡Kíš6ÇÚZî•£"µøWË•OË5•m½šß ™¾ˆ´ÎfCû™ŽZÕb‡@ôSÔ$=Û»Œ4 ŽßÊÕKÚ.£A<ùì ±Ø4¦É Rs¦lj—ݱˆ^Õó¹ÈF­©,³fÌüœ¨=X9)’D•ÆC;õWyœ+¯G¬!T©O}<)³¨œÇ„8Ix”EN°N5’ Êÿê¯þêÉãÇ]ÀýO˜êzežƒÍ~;šN?û©Š·²ò9Åjccò7÷0 Íi®µx„räiJc$î‡É0¹4XÈU yÊÊOPãÙá‘H×$ŠáÉ”#áñPdšÉV:}J_„i}(¥le64Ã!ô‘£^Õ!@Z´|ˆó¾¾ß¡ºåGÇ•:=»¯´AŽË`L0Ç’ŒÈËKûг—å@îq8j ÃLÛL;½t¯¼‚sÿÏþ!Gä 9I`?Ô³èSµó–2•….i³€;/›Ý.w`Š…&ª€JUòéR×”=ô ò=’ÒÒ©žX¥<²cÞŸ+ð¯¿Á¤³áOS½]²Úƒ«Ñ®m?ÌÚ"ûÐ`IgÚ}jÞþe."k¯³ägHغ|>–GÞTª˜GìÚLrX°0aœ¾±äŒlH–MrPDYoGž{„ÊAk2§øocSÄãL'Rx Öôa¨§ê@zµr Û´÷µ¶¦™Ð'jJ!QE ‡a„àÑ¥”LžG)ei†“Tmo0’giùnÑmAƒ|ZÍX8$ ‰i‘Ç2ÛäÄËÈyV¦†5d¨EÕK ¦ä¸ûúj¯qÉßxø}T…GiÛƒ'$ >Uõ¹¤¼mæ·%Xñõ*›^!³Æ—·ùaÕL"FÿE&ü$[é)-a¨ªàÒ°oÝñ«j±ˆ½T9âK¿]ÝÑí)Ørá‘oOR÷ X_@SáÄ8+U„ Y2Ë‘^í§”¹ÖéA%É[’T±—Çd¥¤ª·ÛÝG*0Ø›Ÿi³o‹êæŒ ËáóôÝþ)ŸHüügŸûÑ^âõV‘rý7ÿÕü;¿üÅ£ó~øêÞ;ÏøîÞ“ß}ðó?𱼄ó÷ïÞ½wvþðÑg¿89¹?9UiŠ´e¦N¢!ê1Œ)t£&»VB«D#ßt`®â²…ö´ ,¼ Ö~ÙùÚæq´½8¼•®³Õ45&ÏéÀ«Ô]½®µv¸¶µ"fëšØ%jÅâ:Å>ò1ÓN€Ñ¡Ÿ%g†.˜¾OÚ¨äÃÜÖÕ¡SH+Ræ. T™¯Úº¨;j4ÂÓ ;ï¬aäS,c9´­mÔ2IÓG7}1À9 ³ôx ×ß7qåcmÄK£ã U¯2­ÒȰˆ†6F ¡æ¥§š¶X&<É7²Qä.ïaf„Ò„oö…LóჇbk¥É'ÝwOü¦9U‹}áQ50*‚Ç%€Ð\¾­Ó-֪懿ÇõYz³kª%×YÂ[Oaʵ+µþŽ9AU+² Ú•Šž=wìþ[[Ý‘ª÷BéPî7gšÃÐãKÆÅõ|, ç˜GvÂâi:ŒA@\ìV·bš@ ?ÕL­G§Œ\x«œé¨ew‹õ ´F`„iÕR'¤,‰ê ÈdbÄ¢ j}¾®…°aÓD¿ùæ›'Ÿ¨ŽÝö™™M‹}œšý×'±£Jd«7³@Ëè*W"‡À5¼Ø¹aIÿdfOóIëÙW¤Š¨Tù+áæg‡ùê.31]zC5º€¯·­_ÌSHdd¾T‘i¹î“_GÛëÙ· ÅyÚª‡ðz&zøMHÀ IíË—KS#˜­«Uuvûî-7ÜoŽ;»•Q-¼¸zÏW³>2fî²aŽ˜aAÈXJFàáŸJ[ •Æ ­I€‘¯Ô<. J¾´L¸3ΡQÊþeBÊ×ô`²ÞÐÊ3‡ºT©H-2á‘B—z¶Þ«Wêâ2”R‘´Kž‚”‚vÞfÿý¶•ŠÌâ ‰SEYsËË­‹)«æq?:HO ¢„a¸Ú8|Ü¡t®’¬ C êQÙ¶R€‘mxq'^ tæFfl  3À<€•‹"Êð(Ó[eeJ¸C§8<.Å·Šˆøid-x‘^$Š«¤»:˜|ô¤èiDkr}w̵â K*zM«•9Ò€&R¨ÈÏËÖ¤h¢6ehKLúÍZŸ‘ØÌ$Ú ¾=»´A¼èRBÔÓæÜUs5”R‹|‰qüB¦–2f c|s€„ÌÜÇÕ£\½q­¸²{I+¢¬,ü¼|0‰ÈW&VK§sY‰–@m¾hTà%Œa%‡j”ÒtÌGz¥4S ÿhÒ¨f%ÚîŠ<‡´ê8Éë—Ý¿üòK›>ò9&õlÜÚtDJÎÒ<¶ñËшDíùbZ„ÀÏã]EfXÚ¼1–Ÿ8¹`k‚h¾V‘‰¶Á¤öu•?œe}‘ 1zK È0Xs"öIhój^ÃÄÑûûƆuy¯Žþ»ÿú¿üîëÿçñÏÿ“O×_ß}xö³/îœ=üxëž!Òˆ¯½·¾ÞÁ¹S!Í­R0®!¨˜^,îé  &gUènÂx¸ë6¥3‚ð¤T $åjd~Ø`y£ÑG»Œ¥t0ƒxMèª^ 8U-³wÓD˜Hj/†r³#†þÄ'yÍK½=´ 1%–<¾{ÇŒRÅŽ,‰ÖAêõMvrÖuó#Yî©ò¥AU -¼zù‚éÏäM³Y¸h2ÉZò]ß:ª^\°i®UYùqÞ”FÞO·În²TH”œE?$гª$Øxt®Ù³IÚàB1³¸‰¥»ãÆ?¢xJÔ*éèAäälò° Ôj —©T«{óÑìÛׯ.8Ì{ Ö»¾'@ªâ0T ^8!Á€8ûÉ…NÀñ¿ñöûï¿Ë˜~êŒ(õò8 YNâ=ÌfðxzäÓl¹§OM‰É?¿ç2†¾g62Æ?™³_¥$É:JLtO3ôÔ’¥Çÿ̨ڎkÊÈ×ïò+Ù°þè«Z‡¹‘Öx®´C,³°6vÍ'íP9ß–¦ƒ(H09~‡y÷§yóʪ G¿ÿû¿§VVwÿÞ¹ßÇ!Ì%TñTáN³èŒÉ&cÐé5O<þE>²£¼}–ÌÚVH$qçG(ןŽcÍr„PÄà¢ZÂ<}õöúñù£‡wn|x{ýç ëÅ‚’Çø.ÁØé†HÕ ríf©õ´ØŒ²-™Âˆ,YŒ^ÝuF³G5?2½TG„!.õ:w±à÷£méúrþ‚› ¼Œmã¶Nþ<yË9¶1Þ¥M.MH|CÊÞÚN¨ƒ¼w~€ûxUAù‘dPsóîËNmHÚzDÑ×cB ÀàïG‹É ÛxäÃ1m¹¯¦nØ¥43ó B7ÿéÕë +÷º°H¿£Kc/_µ¿Iª3³)á-ä+wD’-nÈ/‡S[‚5âÝ€#%F1 F\8l6a "‚×OQ-XEè†eùM“%6µè¥äÏà'o{zv¶fMÞ¾xù—ƒ÷ÎÓqÖAb5~|gÿþßÿ=NõyÚ ±ý$™7F(î?@3J… ñœ¶ØOƒ¸yíèåÅK{½•b…àïݵ"9›²± ÑZçÄaÃr(¿Å;r•ÒÆsšÚ˜J`<õ½ÆñéH,S{É·J…û„ ºØ~a3pzfcÙúVŽX|®B’­puü†YÜJêôs×g§6O香Š;ÁjêZ˜Mê¥b¡©—Jý¾gºž³9Œ‹Þ‘íÛNºBƒ],‡ vL‹-6#~xWã0ðž Á<É×µåæD‡³½}êJhó¶ÔðL¦ÁϲiÔ4H‚«§J:B’kA)&†Zžƒ…Óœô:+'çô8Ú„ŸÌ‚bk»ëq—jûîÈ ç¨=@|¢¹jQŒúÖøIiÀ3<ð`ÌÖ É[µÔ–g>ï?ÿü«/¿Ôñ»_ôtž¨xHs!²¸ÄaÈSÆØÜ«tºy÷1˜jáW\Z¥ŠjŒÖ€ÀÛÐ]^‹Äi«RŠ€œâf¥Æ<ÏQÔÍêA3'‡wû¦Á0 ‰RÀD£`Ãô!lºÔ¨fãeBPÍ8X´yåI&Y•9]»L¯ì™ÀåèSÃdˆ~§ÒÙ{Dá0GÜm 6‚âð´DhéE?€N¢¥.úb ÑðI“öG«4^1Fˆþ¦¥W\ëpQð´RÚ·TÍJ-ñ ‘Nˆüس¢*úÿ $$ÒHÅìoqY¦§åôƒô™A—Lz\"|Ú†c}ɰ ow*•kÝ‚‚ÓèÐ/Áüªµ—‡I®ýc üŠNÎäøîé›Wµð(á- àm3D¬[NS‡º4lZÚe +©jֲ„dG@(åèXoDŒN ŠÍõfЩÝ#lëë¤Õ>\çÜ$Rá,5,§*’ 3-:ÝU7p}_vÈc¹çF29…ðÓ1.J{¸ð .óù”·Su1‡ª·´kÉ@Õ’W³˜ÈR»£Wà¼üjçß`Žà õf3É4Û¶Ø4ͼžA½ÒDÑðr>>óçÇ”E „°M"WK32ô-<–gñQPÃd"D¡9”¶M2 Mó$^¼hÎrT4ùqG´ ”7H3Âáäq*¾sþ%R,‡ýáýóóÏ~é0ŽçÏü ïÓ»'oŦG„Ú.Ne¹#ÅBu#ãw¹$D¬dÝUC=ÙÊ ]H'øSÇxpÒÿäkÈq=×uçôª[B{ µUÔælôÁŠ·]ìzºl #˜á8ÏCÜMK N=ŒÊ) r&]+œ¹ÙCÕ³-Æø‹£ÕÝ^ˆ]ÌEPxŠaQ˜ïzƒ,ž={îÇ‘^<ÿÁTº^Ó¢ ]Ï£‡ç‡Æ›1ŽOb¨™O½m¼wRsŸrKÌDë<¿®54þJÈkdAC*±àMÄÉÕæ6ðSûièÀb4ŽØ®‘š“½ÔVF`1í‹$jÇÐ)]lÓv¥)ï³Ä»-C0`²bÄb“r™KöHþBXm’¦Fž©ÌP•*(4 0d  †¤tÛ‘T?èv @^»aÔ·ß|%LçDÌlžžüõ_ÿõ£G=b”-—£„~Qfèâ#ïÆöøxûêÂâìé z÷ÖSÐÉCÌüêâùýó3™„tñò¹-MÜHk¾c*ņ ÀLoGò¼@CL?vÔx‹¼EE':«¾á¾|_iãˆàãæ ó<}¬Sç´À>œ$—8rðÜaè夢é'™ášAs˜æáçúi|¢‚f¹@‘)…T³CÄÍ 3¤LºCà°O4eúsB#ÇœfuTȘ©‚±]OV;ã3 ¨V­F-ì.ƒ•Õ¥3Ñ7@BüØûØ2÷†Î Z¯°° ³Äï6±Nºq –8’;ð»ÎJªýÎmSêÀ°Å}ˆÆëmhã÷?¼»sìd×*áßSWñÁRˆá ßÚQä0n´ù¨±ÃC÷'èP•AÎ)÷­}‰yü¸(uˆãX¦F1¾¥¶Ìoj›”\Ä6Q£ÌÜ/ÓÝœŸ½óÝ÷ßÜ<>ºwÿ³7ﯿû`ßÞD M×é’m÷®U¡•>ÐÉêh„}®C4ͳ߱†”DŠo>é!œ©F$OÅÙ½ËoCµqN7. ,®1̨nrk2©“èîô“ñ5ElÐ$cw”—VVAR³—¼ÅM+ksJ$C™ZŠÔ¡¥x´D™ 0 Ÿo? šs¡mŒ'‡> ‰f½ÒôWyW]dæ›MøÎ%-Ü->|ôÄ שÓÔj‰BêQŠA(‘43•fOŒºIb4™ ‹óݶo´M4Þ»ÿ ƒv€RRÇC²–€ÓiÜ­l œÜ˜ŠþZSÊä Ef¡$1"Ÿ@øÐ6”;¯G›ôk{ÐÉM”"ÃРÍÎ@‚ÍèšW˜;©ß몯9_æèßýåÿ&h ?ñØÝ³óköÄ}j‰,Ö¦ÕM"¸>YÁaŒ˜4ÇèݽÕv²‰Ëï˜nqC#ªmûjñ°o¥Ë€s ]ŽÞe.9Þ‚Q¹{eN*žn:àÖ ½Ò1ƒq©*øÉáþ—C4ÔŒƒ™œhåN½5@"ýë_ÿúþùýG7³ÑÏä™<3ÏGÓ7³lĶÐVKÖ·`S0S9:}ó8ˆTÊãZz®ˆ§Kò´Ã|“âh! 阕¥Åš\ávhŠïT‘‡øÉ!@ãÆP©Òâ3­ºñq‡ykTDa2]ØU£L9K Ðò]Þº»›ð£Òv¢)EJó#áèö Æ/¾øB¾@GL0m¦â®<Íõ£÷Ï…ìÍWôaÝ;? ùNàZÂl¢ÈOËçJtý œ`”°daÐ 3¾÷ÆPf†mÍfÿMxx¥UÛ`׌ØË×Ôp™By÷ÁNrK¼›âhK¶ p³:\3ë*©yÃ)4´¡ð½~å:ØåK›aæ¥"¤QÁ ÍjLŠ3 I)ªÀVu`̦Ígk¨³MU…+G˜)vúTxìÙÒµƒF“[œ/  Û3Â3‘fïN IDATÍ{\'çATG]e$}§ÏoukÒ³ Ee ˜¥`ŽÌ¦Ãùl§¾åè&F¼" 3’¯®ù^¤‰#‚¶:Ô91‘A&H”«$hpSæ³gˆÄ6^Ñ0ÝÀ"D2d‹N%3ìé£2u4^9n£Yj+ŒV¥¸`Ú.Ûã»Âñöˆ¨·J#²¤NU*Õëµ>*×›UC×5åcà~tåÌRõ\Xû¹º—_ϲ,±ë÷ÆóÞ¸ñȬ̪¬¦Ûn·l#!¢`À€$’1cˆéîzØ·Ä_€‰BóÆ–Ækà–81mGzäÍñ5QÇ~®¡Qªd·õ¥yU—iÛ"p0¼`O'¾éKȦ5¸|eWLZÓe!ÌS-†ÿìT“‰r\Àø•ã)øÞèo¥m~b½.RžÜN/9þö·¿õ¡-§ì$¿ú è‰J× :ç"œ?~zõæõýŸÝc{xîcÒZQ”¦˜>Ä:­m!ŸœÚö—»1e°²,ö‚-"I¦¬\ΰQþÎiÇÕÃa!çboï,ºƒa6AŸv¸™¹ê4Ù¨˜¡æJf^Á[²°CoÆGà »\ö à4 ÍAGtx¸s]‡pà ˆz€óHÆg¬—ˆ Hðr4¾vlÐ`CÚ'FÊ<æãᜪ¥uP}#ÎYv+ÌÇy –@u#jæw©pàR“Ñ*Sã•Z¡|.#®é‚C}¶4{WÜèâOXDìw¢f^cÈÒ@…F‚á<ªÞ@d”ADo7(Æîé“"®Ð!¹Ôø«ŒC¨.ÑVdHÿöüÅ·ß9»çMŽ6Ÿ’T#K1U@XòWE52¸oÎ}¸·É-è)m\¥Lg²§91pZ×ḟ Ipµ#v™¼ˆ7^U‰Ò ‡ Ë1ÓTb:.0iEOix\jáLCâ-z¤‚+83,A…© ñA@þ|µ ¿[¾Þ¿É YK±#jö|hZ΢Dš»ëx=ñksWcÝAKW¸™{y´WŽÆóˆ8°‚\ÙþÔŽKÚò» -ìÞëÕµ¾XmZ+žÎoÁº¶T³Ìá'lB{!«âÑPpˆÏÜB…4•vI[˜ªÈaû2=]Ì;ê´ )ИpTM»CrNÃ`•m“ó ÜóŸˆN“×_1åÉÀʯÔú·)“b±ÅM×ëNìåíL•Ü_OG%2ÃÆ4½göë0µÓ$а¢ú©™hPEH¤ œi/„—dBcú‚FËK*¸DrØá¯9¥^‘Ñï䱟 “ ÎêžÈ jyÊ"ÿéSµú47·Êw„3ÖÄ·Žª4£þ:,êÃSÑ=PÀÇi}ñàÐ|W£¢(”‡ÛË£y›õ¾€Ï‡Ôú¦ÞXÙ"œ{A²F_>Æ^ôÔÞŸÕÑðì’°–c~!®i˜ãîIÀÓ¢9ñÉR$½— ÃØ"™-#gÓ<6†Žþet ½˜(“Ò98‡cñ0^ùpîk¼ÜÎ?ü³?ƒªù‰Î壴ŠE‚a(ˆÛØöaªì­‚‹œ%]û*J‡¤ÍÂÅØâ¼9·°TXÂEðg#¡K€ ìÓ¥gx1˜ÆýEÐÜ„»5­A©ÀËÑê×:ù$’þÖÁD†(ƒ›ØdŒ®³QJƒþܘÄb;µ“N(|ïîeqЧÑÿã§ž?/RæM?ßàëMÇ¢9wóXTªÂ€$ ÈÒ IX!\-:G#§4FŽNå‰@—¿êú…•@‹¤¡:ã73% 3ßS6¦²ìê騆ê€ÃD÷)Îc n•YnøuìWì„SІA34zæ ú Gf“ã̬ÀJ lW¬K”4޹úgþH#õ!Z3ïÒpz®yN#-¯´iLÎJ™l%ô§v‹Yí•¿O§ËÕ+ädroÆž Uû¥Œê˜×§XšÈ‹§z¡ í ´ ‚T4ÐÁ¤Ó>ðrãöÍÛB?¦DûÄS8¼¢I`I(j‚j˜b… ù <^PB×}0sr‰úñ³ã?ÝöÁĶÄ>º~óTï‘¶„•ñ6©Eïdè— ÚoñÅ¢«ôîÜù4´÷áoã‹æ§wÎbZ\‹iC)Â] },|‰ÕvOåcEš<KÜÃdžF8c¡ ‹€Z>†"It!¿9Á íÆ)•Es›Ê-ZÈ ‹Æ f¡Û–DNÿç0¤zÐHÊŸŽ3ÓNp ´ÀìÐUÙ„6‘c¡ ’#¾‚B"#h´en£}”Á¤5„¡?¼P]ÅPžË¿æ¡!ìÎ#ø/+´%§*9ÉôTŽ’Ò!Ü2(¿ËdÚA·hšnOÎ(Å,@Oõnf¨îÒb¤·MälVrQw‹ÉßV¶Qù¿‹¤´ ÕöÑæ`]ñJ Ÿ+6oœ©ü!ÞRF•‘åÀ¨„æ\ ìµk/_ŸêŸWˆ¦²òtBb‰ò«é… =·Mï?ïq“’ü+±¾:©5ŽÁS8`ž?{kÖ'¯«V€:U.µ!w¿®üFü,–Zfb‘Ý;½óìéã_þÕ/¼ÎÿÙƒ-†ÐUÃ*/¼÷öC&M‹´"çÙÓ§LFk`¯¿¹´Àµ¸C ˆ¯RiÅ­*üÝóµŸ|DNǧs©˜&äL/f¬¯Š‹Å0zZcáØxîø'?þS¾ÉÁWöŠiûÎéGÁxê\ˆÔX›^THö¸p)rO×~ÆiÓÝ‹0PÄ*G14drÊqÉA‰’µraÀP÷(¦ü0fWôùVùÍY‚É]Ô+—n¦ å©uhÎfgá¾ñ î+f•:la¶ñÜçwÎÏÅr‚ÅS´LuƒZ=÷Ëç>»gùÆh£`«áÚa9i¯µ…„¡. –&ãU5S¸†é Ai©pû3ÆO5xœýBƒ'eÑ»§‰ªQÌ!°Ÿ!”nÜ‘ ?A[&hcÅ1@kÑ\­£| q;¬à ³êÂÿÚⳈzÊ'áí˾>fÿĨ¯®ÛWÑNOîÁV”pˆż…ûœÏl¦”V1  ®Ðî ‹tdEo *)çP¾Ž-¸ê⃄kZmÜb£[Ê#J‡$GÍâW•ýy´&~*3B< _ÑÅw-æ–Rá8Õuv¸ë²¢øQÓ{mCh¹äy¶9 Udª®3X ~TÀ#éAémEXUO3oþ¢Ž‚«f-IˆX… ë×9Íê¼`HË"éôd®-¿Êà¶i.2‘³K2ÇKÔ—“˜F™ ܹ©±Ë|)ëкÐ@u!õ޼*²T×|ž-€ÒÀZ±•_àÛ(1£]~çÊÈô(°ãX †²N'/fSäÍ«]Rð©PCM¨Ø–‡dQƒç3Ò³½„^g6ß:ܨ¿ƒ*9§½›æbf2;¶Àdµ‘ã_ž/¯äKP÷ù­ÇºDxkAX&Ö‘‚G4~óUZD󖮉‹ÑCÎǤåS$aÊ6Aáƒ9þ#Ï6}3c]Rt*¶–;¬ËO¦8œ‰ÔÇ?ûg?£ßÿê÷ŠEÆõŒ†4‚RQsözøÅ‹.à«ÈT¥í¬h0Aý_V[· €ªZ˜q>é•`ÈÛ×,Šdò;¦Û×$0 ð?þOÿþOè.a,ƒàÕTgGò4æëoiSf‰û ï_þtö^„à¬@)¬Iø-wH–:Ý! §¦Oq©ˆ““өÉÖïÐ*­šIWe0•ÄdÇ¿€«àéÈ;¬\šsKõU!2 R™€²@éSv˜bæ#¤û¨K‘J« /_Ñ¿Bד><þÖg‰Ï}_=:»{—Œíéa–½€6¸Öµ¨Ï‚ɘ®«pм Û_Þ¢ I„ÕÔ *{æ?ë¸äd]Óc)æiü/ð8Dô*—.ßw¦Sâ¸ɶc_·=6Ú?ã¡èÇ&0a‰±^bƸË¿[´±œ>tÞ™õø@KoÏfaJ!ŸÒ·ë•çYmnªÊ›{sR¦-bbÖ{÷ÏðWElŸkêóÏ>Óí™Ü7 -É#AÈ„+íÊìó…õÚ0)îùã%ô èZû—À^Ðjý±…Bͱ}£:ÂzÂØŒdœ—Æ´‰3b•Ðå\ï)üfá<Ú¯çŒ<óLÛ•_æHOÓŒˆ˜2e—ÌÍ'?쨡¹bf!2ûôÕsøà<­@&\$Šä{Çdã0ƢÀ¸bpèã ;K1_Õ@‹ò¡.aºã,ãZ£þÈáUQ„g®?åƒF+Äv`¢’P>Ø8f‚ôP‘1!æEëeÄü«G/Ï_ˆEvR´gx (ø¥‘6‹ÓòÁ÷Ë.ˆµþ;û§ <‡,˜€§§âéz†QKncñK2$•—vùtq=ˆØôÚÑ‹gO¾}ôðäÎÝ“;´3]ìÌrµ²œ@¬_u±ˆÔq†Ç>Ô”W1<³*í´ ªBÙ ØWš0o.ãÛȨ”¯w£z14€åWß¾ëDétã"ÆEIxÎÛ‘6ÝÂÎc)F=Ö•‹óóY40S[P]—(±˯ÜXqOû u_j§LàãXÌcKí8·(ù*ˆÛäÎ_šãÁ¨«æV üFÚ¼þ‚K¶ì"¦\<• lÿ.¿Ò¦üH¦'ê.ÌŸH€#_Âos?9ž¢ÅS |غû Èæà ° ÀŸÚH»‚L…á,1üH+Š•Ô<êm‰¹¦ŸR‚¾öú‹‰ØÜàï2XO§­Z#¶mKÞ›Ÿ7<$·›§ döAWuhTLăËçV¥iˆÍÔ³3Ë à4…¡±{ ­Ogœ‚a ÒäD¬­ò³w6Bú|rAd¿6Ú^ »5m”k夨cA@¼;²½›_Utmh@WÕÁê § 7¹]íµi´°4|qè&?VȨQ™ª[ÒÒƒi(£ÃÁˆñ ©K=O£;/ä²¢e”jã.ÜèÅky†mvß÷ú¼o„tr¾-¶9­htÂÑtÉ­KŽè’ÞR¦„½<$–cx|kzâãÝû÷¾ÿ½ïÛ߀h³ŽQxÕæ}cQ® ¨ÀÜ®,TØ+‡-½êÔ‰¦ÅhÂz-á’_Ž> Mnmä„óvÊ5¶aòPâÏÍÌDÑcà1¤¡JÖº’ ,«Wͼ‘mGðùñßûOþcìD3ÆÎl¸¸ \iߤ%X2W˹èQúï$¤Ie$ôp"ÎB(Ãgú¤942˜t•gAÁâwo¥åx$ÅÒ³–Á„`šZ“ 5^ø8.K£«]€Õù.ø.²Ê_†V±™hÑ –‰¼d‚@ê"ã…—/žA¢6³®Qî펳£:K‚vñ¤óaùã«ÖwîÞ³’("„ž¾-1qßé¥jCÈÒí˜sÑïRVOi! —|¦‹l±Ÿݱê¶030É|Èx¤÷7ö<ü/æäñíröRÅ=•ÕÐâ _ζë·MJÃg^à WéÄÕ¼ÌÑW±wÖS¨0M =¾@±gÂÓ/seÌ"0Ÿ˜&é“9p…ÚZØ>›ûîÒckÄ8Y_Å&Óiþw:9v²Cp˜Â3âÌ´ŠÄÆÇM´EÒƒ&–“J‚YŸ´ã×™n”И+DÛ„Ä*°O½¾·3˜èe8kð•Ä+UøJ˜§ÐSȰkp¸òúík]¢’ˆõˆƒa[3ãgõ!ì „¾±ÇïyÆÓÊã<õ"rD`ñ[¹ÚËÇ C×{‚àQî…c‰`øƒùò‚q§N(ßò¢Ò€P­+ŸX=5ã¤\)ÀHM,jFUE Æ:VW5D” ˜&!ȧò09‰Þ”2Ò9Ñ£ÈÚ¥–×íFâ=Zj4OÞ×ëaW~Ã6 CÂêšA°xÉ;`æLÍêÔ?¼ï³w: =ý§÷¿üå¯ g¾øîWV4§Ã`Œ(—êØAFLÿâ/þâþà¯qJYw.èýý¬û‹´êp(ôp–Ù¾{k¿W:f.…° †R0ickt{½+¨FaY„@æ«H+Bé †‰ã£*žª¥Šß¦áë×#´¢lËv"¿NʳáŠw,^[÷±¸,ìÈòäk›ÂJù„;â_Öí/ÈÊO¶§(α‡I'R¦$~ÉåÜJ#‹¬%·wK%à |YD]g3 lap®Ù™Aß´_Ī¢¹-¼ÍãòHÓàH+ã í'/SaÀ]«¥ÒÊ€¦ ùóBœñ± E¿«S¾MaUÜJK(ιmÉíï±ÕÂxi“A‡ÈvòÙ1êm>ƒmàP?=ÛÛ=–sé©4 9‹°Ø¨†§qÕ©(ƒÝBöty€bƒð‹(ó?Øj±Ù­®Z¤BÅëTfŸ“è gè¿ÊŒ,ùÒ'ŒETaÄ„ª [šöCÖ ) ±k1äùä(ìW¦ä%+=‰šÝG›)?PÃXú3ååP³;R ðí<36ˆ« ÐÒƒcKé^ê] AÏ [8ÀSæJÜs+0 ááʨx¥!hsEÚ· ã›ßüÖ«i÷<ð"HV—íýŠá¼Áj[A/ÖÌ<ãÉ4/ ñ ¨Ô //˜ =œ&ßﲂÿ_õƒ¡L·º3Rð4SX2ñªÕÑHÐbŒšZj}ü£ý)Ù(Ãgp'©¼mÝ"¤£ñÑ懲„‡|‹[Äo«|$p©.VË)FMeqVEÅÂo\!¶Ž.GªøC+j©â’piË#ùr¤]ó0ìÆ±fWÒÃëÑ•NåÎq¨kl*a€CyÐæÃ–€À‹Y6¡M‡4˜;¢IX¾UQRG [îßKꎸÿÞ°ÎFÔwö¿‹ Xjk^À¦XÞX ùníºÜn&Èx-qI”4äý¢ŒäpzZ'Z¸ç ꥣ‡V†­šôùžæ…öô8 ÖG®M-0A ©,a¡…gÄ#¿±LÄyÕݹ4çW­e&”;óؘãR¥D¦‡b÷•F·~ò+9´…ÑùôÙ33H„‰Â8¬ózüío´”N¦ro-@Ö£ó.¤Öœ;uà˜vÊBÞÔ-áÖÒ…!ô‚·îœ|ûðaBo@¿þîêëwoø!TЉ5³ÃQ TÉ’P¥¸ª®÷%5*Q‡™8®ÀÆ5”Ö"ZÜ’%*e.~†‰›éwäØQœxé–ÎkAùG#ßBI/~˜²o-ÞIÐ/ ¤ÜˆÊF7h(ÑRG0]‰Q¡ÌájØŒE,V rÄÆ¿i2º[jšÅî$îº%U¦t« ƒ›±ýû$2\m‡g£'‚.^ñM0'>…!£ G¦u°5P`wÊc”öjGÉ0ÓÑ «Ã¯Îᆖpž^äÕÓ¯+|å Â(¼[Íiz„ ·‚ÁgOŸ!ÿæõãGß~ýó_üÕßýþµ·‰[UÛBëBˆZz¬ÖÊ炳ùæiáèþèì!¬ðì9SR%ÑžY¬5âü0™n´ÐwW m¬i·µµ.àÑóϘ*˜9ôjuL æüžG /?—É‘ÖSM§«–ÐÊ4”qêÏ”tà’ÂrÝBn°ÎYüýŽɇ€UôHBC[ œÍÙ¥£Æ½¦ ìU¡Ôå»%9ŠÉ&^p7ù½Ð”ô¾§´Âž*¹—ASØ/¦º§Šyªº©™[^U™~ XtÐ(¤`´Ý‡úF… üÕ˦+úÀ‹_º@Mà™Ò72)9>Io™Úbù3X¥Ñ ¸ìž€ ”\ ø-rC>ªëÈ0wýñ“9f=®Õü^0ÔȨÄ2K¾á: a·ñ—Ä=]ûëCˬ¹AWï0m‡Šb< 0²`àCBî% 9f*Çusn„`Ù«íh|+…ÂÐ0 ôâÑÕ_iâ’9ÓW2¯<|ø[9È%Sè¡}Vh¤-àŒ8Òâv”.žçÛnæ$ÍQYóÁ•:ÄY œ¼°¥B½‰¨`¬¢æ$bGp1½ªQQ* ,uNÍÆ6ã8j!æ4W/rê¨HóþQqdÃ6â–høÞ¦Ü|×ÄÙM||`ýHM쀽Õ­26õ"3çÁÈÖ¿ÐÉã?éKÄ×tN \¦Ìê~ZB ¸Ùë¬ABÎ*‡æá‡ Ý“´.±"òFƒ˜šB›2áq‹Ï?xq€` €ºÎ¶f0·Côà6é—Ù7•·½ Ñíœç¼±ï„qŽ!*G¦C½ðª¨Û6ÓTc>† >jxåÎm‹€4* 6cÙ œí9Ç놥•›§æf¯w ÑËÛ×´Y²MHâ]ÝŸ¡=“âÙd=Çb=}öÍæxð9¿fS{¾Þ·Ù—ŽEë…ŠÄæÕ>°‰muįzÇŒù9Mëÿ7Íy1D‘†8ƒW̃ø‰ì—‹oŒ$Þ°é¶ù W1 ‹ñé ~Ôz (m‡Ë,¼[éhBŽòâã~\¼u³C¶PIဲxÝ&î+}ÿáôÊŽèV_õbÐ/„””®±ÎÖ,]~Š®¿'èYÿèHy3®ãÝ!&Z!>šEÜ•"ápÊ­„•¿~û¦àIº(?ºâø®æQ82ÚÈ5äµrM?gOa@1„½ýÈ_;¯¹T?è4% J²ƒmë›·½m*°néÙOÄšæCÃÇõt096a…KØâ‰“h<ÒbÊëƒ>yõSg‚Ì–;=Å}º>P¨ Ûöh OÚ3VAèÝ8ßåo¸^Ôh­ûjk¼¡9n€×¢*…!zä ž°G¢¢‘“‹!/%Äs4òŠd±¥€X«L‰^Qþ;£w= IDAT§¾kmöÓÉíSÏ3(ôu¯dšûÔzÁÊ뾟ýb¬^lk:<„E»*!¶}†ÜaNçÍ`·Nê“ÐÑ8çÞWo_ÿöÛoîž=¸}æƒ0ÞW½KÄ–_¦Wv®PÕ4¦MéŒ´ê¶ žøvÂñõ_ýú¼J Ü9?ÎÎÛu[ü@—õ¦.w,×CC/,ïŇ·Íœ± +ÞÏ% L`w0§6D0<´´„ÀÂ.^Qô…3”Go'{Òr<*0BRã"oõè ,qÉÝ‹÷ù Ÿ“¢Ép ¯“fêÑ¥¡3x*M¬æ á¡(¦Ájctiµý`,Î̈QÌ1î׸e^¼ÕÛ)!ÌRK(ÕÅÀ(µLV¥(6Ëk‰[HD†ãy±úç ú2G¡BΤ˜˜Ì]_ÂÀöš7ë;vaÚ¢J”fF¡*Ž·Ð$¨É¢Y­V’z2Š“XÉûÁ*/Ê zÃÓØ#G¢[”TŒ9Ð…DhA#fÎëD°ž¸g»¡¯UEçÿ™ÀˆžJ`ˆeë¯4ÄZYÅÚ){ Éӛ™'i0À#Ù¸ZÇp¨ ªqIEµhôâÅ…€*òåø-›o->¿ùÑÞ’CÆAmõJè%Sá ”ømÕÕMìÍ>t¼J 7_Ô¡°øž)’—•ŸYq"ʦ¶QÎd{Å+4öÑÇÎc)žjÔ„18#ÔK¹×+Ñ4¢Ê\}cJ4ËÌä'ñ4§Õ8Ouù(Âÿñ½!±>S;Jz.Âׄ Bí>ú""lÞ®§³ލÔzãÞ±Y´‚T@1ÑÑªí ‡«½akTŠ=Z]ñª»Â.µ¦½bÖ§°öÊG§^c›HFD¡•×Î÷! ANj´Í9ßNÍŒÌju}¨ D\C%8}}¸ç`ÚßöÖ'<ª+uŵYTå±,@F¹Ê/=ÇÉ£<î79Ô410 Ò’~4ì~p$ÕËçW ëÑ·öÄÈd„tŠÌJBIùS+3×DÀ‡•£=9éjÉ™MÊÃëñ íðC›ûÖØ˜=Þ­½å·Î½êÓÓ€àPÚÌ$È/>DHýgHA¨§Í£šxªÀ•[ìëí“o?‘(Ÿ]$ûãuK“èŠÒ¦îšYZ´GlÈC½ (äñã'0¤(Ís ç›BÇ$šªèŠ`Y!ž™}#Q  õ[0Úð›1A˜j¢L‹lq¥.dgÆn“ËZÚ%ª¢Ã8-”^ÎÌ_gM8ˆ>ßj“–¹ßìvø‡€7ìP¬o å›á§}½Âÿa)Ïž‹îÜõê‡s‰^<÷Q ¾ÕÝ  Ár&fê P.[:Xµo54g þÄô¢7.7%+Ff½)^_ñê,Ùöškkè©:¶"Ñ(—Cb‡Ý û ApVQë~]¾Æ¨ƒ·¤Á¶‡Û â¼rMÏ8Äðt¹ ùdš ·i£ºôIs}òBõð~âã™Fo?t#Çe‚_ê¥`’ô­HÎJ0_ÃEE' h‰˜±‚8ñY±JìŠxÕžWÅôªíóM ¬5ÀžZ\Ì%¢yº ¿ÐЖ„§&qm·uǸ&&Ãá›|+•¥jAd™Ü×E»øÍbÍ|®Ê@Ôˆ98#SvøYÜŒáJ 'Ä9uòäñÍãOŸ¼<¿}óÔ0‹Áql!sÈwÏög=8|¨“A8qÕu{?ÿùÏ~þóŸñï(…€¶&0‡†¨†î&b%†.¢¹}ËVÑco±˜ò‹¸@ÓË®&H_rÉsÅ–!žÊ‡<ÑKËOjsÉwm1ÿ‰-KáÀLØê—0cz“¦™žCE©Qr_‰W.4ê—TòÍkh})¼N¦ÇƒžZ.iä÷HµT1¹>‘m,‡?å'^¿XO ZÀfP"Pi¸ ’ù¥ñÖŽ-l·ëÅØL¼H{A¦,N)Ó\ Ù¹ M€Muj“Z^Üw¯x† 9T» ƒjÜ›‘/멲 r¢Œ&.n#MŽßiÓšÀΔ†L@KrʣȒœ|pðÛÿÒæÐAˆp®RIUÀTJÒJ²ˆ* JP¥¶N öÕ´šsoæÌúÉ SÔËCIbUÒ#š»d¶Îh­9êÁ®¡æs©å)ôFæñÖ£¥zX¡—÷¡åçt[sT"òoܰg‘†,ÎNZìcÙ2ÂËÍ™ÌãüX\z %N”H`Ñ ÆºÙ[¦#óùÀ¿ÑXû ÕÖå/d¡ 78‡:ÉzÚ€­\ üz‘E†l2Ñ}} <•\JÁ´ûöí|÷f)EÎëuã­ðý…¾d/½0Tׯ®·MÙçã})ÛŸÀÖË×Ia»§Š©kEK•ÛsÌÉÎ@,-©pÚ•ž¯á`Âõ;ÁýÃþ)ñ­ UCp s,Ü%Ì´¡&¨hcöå”Ó !. pªc¾›ºê8^äØ;í‘?%c†êJãMÑ=ŠTÎ7&*Óí$*ì© €È”=9[F&gZaümò³PldGX³pTGš[µÖ2AX•s€ “J2;œüDËkk›øíE1õˆ§·oÝùå?þ¿ö³ÿçoÿí#À»v|òéÈ÷ ïxÙ†.¼žÙ5C̤ÄÞ9ÅGÓ òÛo¿5É)ß^hhz1¤µ˜ÌÔN4¼SÀX¡žÊŸãotdÝl¶SkûÜv­7ì°1–?=uìBÑŒ!ñ¦¾3òÇ} äå6ƒ/\Sz˜7¶0|HδP]& Cïˆ* 0 +ß*:þÖyRf¹]¾‘„‘à€ðY† Ðäð#’VC´E»ˆdRЄÛ5òUÒ6|…à6œ(Ü¢]IZ¶JWT¢%SL‚Æàf“xª…Rò’³DùÕ® >Ë|µ py ‚—ˆ€óRÁÞLU·[…›ójŒ^=Ñ¡8õÔ¯8é]ß=ãæm5’DëË!ÁKdôÃf-E®æKÐÛçeLYӖƈ‹ ž"Ä ÿ[ì‚•[E©LF-mkšÀ¨ç¦`Plé…ÿ^ J  ¡@VÌU°8G|‘rãžôÚ‘o‡è ´âÚ’ŠÓp¿{†Í qè¼§µT\߀ÕË|ƒ=e8m¬«"\9>öõõ“³wbBˆ:íf¼„Ÿ†Û¥‘4ÕýpvvRÐÖç OÿÏÿã¿ÿÁ~ð¯aì7ßüZðóŸÿ¥GÙ}e5Òv#ÿ3‘Dt­Q`\ÄwEæ“9M¦”GRO ,íRËíù£gsašÌÁöàÊdÖæ\x2bÍ´¹ &”¿”—G©YMè„+Õ–áJ.{z_å ólAbÛÅÔJci«ÛUð®B¼•çRŽéÅ·:P¨,’õ_M‚1VÃyLh«ÇMQFÍ“NAGâ<¤>Ã+µµÎMÁyZ“íÒ›¾š-Çå·LŒ«ÚùèÔSFDyBÝ9/§Bl, lÂ|Œ¦É :JfƒcqÊàÛ°¶˜F‹£Ø‘¸¨*,=¹à&_B¿žæ7γžMî)hfé ÜV÷ü*Ô:¥Ðžcu·ibZà~]L&h—2ëpâû\ºÔ¸™®Oa±¶²vá&”••à)xµ0Ä4·ÀY ‘/sˆ¥ºlmöäŒ×"·E¯ZÆ<N7û$†;b /u(Á_–n¦VªK÷[hhίr𩈑òMÍÆ½wP‚8mf|.(`M9pGäË<’{hfQôà^'©QiŠ¢ºÄB0LËDyÚFFOaQ_Þævêe<¥Šn%–3ò5³Id3¦ ¨¹% ¹þú˜»È_:¿SÈ›ž€Ÿu ùº,ž@YÖ8UBQêuÂþÿ'Ób½B̈c¾\ÓÈ ®ò‹(½…×Áer¤’„ºèÁÚ¯Öváö»Ð Úàu-‚Øê ˜RÞ5F¥©®ÚØán2cÙšË^HÓ¹ïºU´ì¦Õm6SИ¥Æ!Á„[\P¦ÊoZù‰âû2È£€tÕMiN}­«F?ut¯ÙW,4LöñÓ§Ï «OÎnžÝùü—¿ú m|úüñû&3LÅé•ñÄö´ÀÓ £·‘[úœ¦Ìg²Éös8Kg¬q¤ ׌¤{ œ jršH×/^`Ûð‰Ÿ‚Ò8› QÙ¡iê×£×B˜3J‚hÓ€³M*(ŠÚ˜/”ésãæV@˜VT–óŠiÅÀ90B&Bäp+œ9â*³P"N•qOIÊͱÚ" LÓ)çoRMB-ˆ[ÓÅfa q›•&ìE;+—˜ÅáK‹ Òý'ПX„Å7Évn©"S´mKœ!ðWŒx|[™5ä+/ÄŠQ4 O éV®¨ù§oȃýü†áÅ'B¥Á¯yùöYÏÔ©/‘GTYGó«qß|þüñݳ{wNÎ~õ«Ÿ³Á¿öûýüõ[ghýÏÿãÿôë¯i<ó{ßÿÊÜ/oKU_ƒ·)Ã\›ot€ó{fAX}>Àyø’D\ܧfš7Æ §ü¢%¶Œ§ª‘¡Ôo<™w<=­åyw]‹5õ8²?àÓ»Ó|–Sź-_ãi+dÕš¸ä ±m…-jæo»ä ¿n›ÈL ’ÀjÑ莞¹E nÓõƒ6˜—XI{ªŒø¸%RÈKó íÔamNhsêX DÕ‡®­XÛGÑ,½wn§·M‹àMWØ`ʳÍxê0Çî©%¾Oõ| _‡"å©M–2½¾ø+áRf©óÔa™rF¸!ΚÑ7$–&bʬ‡vPà—†ê5ÖÇ›—]TrE€'­TR6éË:3Œ¤bµÌqÎ'ƒ8Žk[õ,eâ«,Ÿpб á¤/)!Sûír«"ÕCD>éL5:Áê( bW@0wÚ¤~°Å9€Lëyv 9U4Gœžœ4pŸØ C–uêó“ ä"Úéªè 7É1ߪää;òÞätc'Rã ½o¶2I\P+2`sïáÖÔTÑáŽW¤¥)›§^tgd·Õ嘻â§4¤dä‚§!÷½ùpÖá*£¢ÂZ¤Ex;®¸ixm¬)U†í”Ôy5Dl ÝÎí¬.Ñ=Õ•Y»6H&>}žw~‰Ûÿ³øŸ¹Ñ "U°¢7ÂPïàݦÍÍ]éN´’ ùvjQˆÊ•Mi%TÑ›â¸|ºãZ¶&žYÑ€.ôtºL·­¦Í犤W•Ö„’ô0.* §ÊHO׳ñeº‚Yà /¶JÂYŒ²N¹€b€x*áR¥§sÉd C@]HóâF”ïÌ¿ºóàÎÛ÷¼{rý>Ÿ#~½vä|«K-Û‘VA{õ†ðx |AR}çôXFÒpƒîˆwõPô›¯sÜ–ç X^÷Ù|#zc¼K6lÁN¶‹!p-"O’cM#”Iæ77n6«t©£Ê°gÌifQP“›F¯&Š/Á™tŽC-èé—9žjqÚ-<²Û¿¦Oôó½-(=˜4aÌ+Ä‚ Dò˜½.“…Òj÷K*>yò¤¦ß÷²ŒŠ8¶’MC;=&šÉ¾+yáÜUW^çB‘É!¦¢ÈÁxZþ«_q1o«Ybm¹l[ׯ|Å\NÊ %J‡¢æaq&À.[°S+  ´gÏž2[˜=¶ô§3!`K]U‘`­C¯Ú»PÅ:¿s>LXsýùó CÆ#F£!íζ^ø0ïÉ Ûî0«o0«üx½FÛó¡$tz*N` °b†W×,L4y—}–„âª{}Qg´¬ÂÇÀ%\uJ[oÛÔ…¨±@dŠGñʺí,ͨ+(§ðINrÇ\`zº¬4ÉάF®€+¿xv‚ ëžïýëoŽ?<¹û¯ø+«Î÷îÝwâ)B ª4ÐîÆëÇ'¿úõ?±ÅõìÎýö—¿øõ׿øÁ¿ñ¯›ˆŸ.óößü[óoüá_ÿþ÷¿ŸL(¬¢F7ÀJ£¦çðL>à3e3[@¢Ÿz¼·DÃ}ªi¬öëÂC§‚°Ù-êW/âwºþ˜ï¿šë"â¹ÿ3jÅd9$´Ûòa9дЧ^²ÐeéÁšõðÙæ¾<%¸©›!+ƒ·jéÖ ÒX¡ŒGòeANNëÆÜ†ÚÌÊ•¹ §ª9—Lׂ•±·ôJ¯¸g<_Qp\‹§â ãVËþ·@OúÈx½£Ú–,ê ‡îp›UR졎ÒÂP]>9ni œUƒuêÊñ«–|Ñ:ÈrTñH¬ß6mrp ¢ÊŠˆõOóu‰XMŒ³=ø(úx¹eÖ#(ጒPE¬œE9àxŠ%;ÈWxýª§¸Jì)÷P=ì9…°kI[î/€**‰? +CÆrz"®וԬ9*sÌ-ª‹|#°m©ÌªfP;þ4>Ê") &œ5áVI ù( +bs‹3–›äСEfhGµ»:åú¥‹`N±"ŸåA~@5©¯zAæ|“ðpZWWÅáyK ñªïÿä¾bZ·ºrCÍÖýè3|‰ÏiçÇ?ùÉGš1W“@”ßAÈ —ˆ®ÔGZ(\ËS×m$Ϲö$à i$–ÝP$µ]—­•™—«1H•—<Û|¿Jz¤Œôk{xÇãÈ„êeZÅÚ.¤(Â¥Õ6£­uy¤â^ʸ¦é—Y¼4\àóšc¹ž(¬ãæ}æsÒ>˜àûB¯è¾·C‹ŠoÛBd3QqÏÇÏ­à}þùAKƒ87€ï0!EØ!>~a®E™†ÑXŠwÐQ²~q·²áOah؆¸³ïø^éóÕ\•PnŽúD°N|Å–‘Qi9h4§óè®4µ\ÒŠkÄ¥E¥X±¾¬„òà!\ÉÊì´Y7Ê6L`ûâÅ3ÓTÊ{µzÉ„„&Y¬ZüµœTùCÇ<öŒ¥ÀÍå)T­‘kq+næ:¼é49ÊN-üQE™’ zê†ätÏ`mŒÂ¢>4è %mªU†Æ¼·y‘$nf`äQ¸HbÂYd©<òñíÖ{ñh…"íiDÍ|­¶Dœè²¥€™¹à?޵SXðÈ/F€ͬgÔ0{×øYÓ¨6-}ïû‰ÚÔ„Öµ5Šœ%›`‡´Wšðá°F[ZwÆaÝ€¶8Ò•ÍÌn‡Ü‰:ÀòÓwŽ{*š/ì1@IfË.¦±ð_ƒØ^ÿڻ塓NŒ‚ ¿n¡:O¦¯ê=D³ñ¹¿:í™ÃÐ:¡P<Ž„³Ö2[—G.p¦+ªEÿÉaO“ŸJ+nÁïõ»×çOŸüöáãO?ÿò÷w{åºõðSDAMèöìÎÝÿõùßþøOþ£üà_þÿÖ¿òë_ýæÓ6èñéSáîÝ3›½f$Ù‘B¼›ê` ã¬qÙH[ c|Û$2I?ÚRzžÖt_÷î6j/:ìe‹§2«Ü»Å1.·.·~1|…Œ´ ùÑ1Mš2£ÇM+ψj¦<ãVÀ˜÷rÊèY½gƒ™zŠ­ÌEïÒI˜ji"»›ò^P@ºBth ´7lµ(3ìqsèÕº„ÛÅwŒËi'ø\Ó\ˆ‰ØM˘ò-:þüXʀϛ«ntonQ1†ÖÕpMžF‰Ù…\nØ„§€@ÙÅ\šÙ dàhË%¨)æ)àû+_B&§à´QË(‡ƒ2ôÖSìr‹Ÿ ó!€K0‹ýÓHÏ“Kð@B,Y \šTÑõÂF(/¬ çAã_‚•Ð CCsÒ§'-(ŒLˆ¸Á½´dºÐ²éh™9¹8>ß#Y” ÈÆ¿+¦º*+è&¾†»Ú'X Ž—õC‰lì"ôl\Øêplû•;餰ëü>>DÒ'¦ 3é¶YgáÕ]|»Û'YÃO1vé ÿÙC†]š¯@Àc»)â@Ĩ^¬–I‰!j 48$]ô5öjbùcÓÎ]h…VPMhÊ©¨Oÿ ˜ ÝŽò§Õ¦Ša JïL׃3衼« ŒðQÅ–Æb&æ_yòø±ù•æâDT°\ ÓŽejNÛ©£šËYe(<¸ÉQ‹6AåT”/˜ão{ÕÙ„1m uê‘D­Ì£-GQB7ÎÖ•º´åV¦’3ÒÊSì%_æ"\ÏK3i—öG9›®ÀÁÄ <3$И4†#á° ˜ÑØTG*³rÌ‘íù«g ›8 ß\ÿôîÑógO¯¶6ñìü»_}õôYS`â˜: ¤5z,–9e³4yT[– ej´3¾åøêáà7üß/°UK‹× 58hTáÓVÄy>Ô¯ÛFPdßýÛ^Z©VÆP§®`D‚ô%TŸ&ÊŸ’Aã“助¤eCævTW^B1j %ÓêÎVL¹ Ï.e~xóþÕËç´ÚÛ‹6ä~ú`î­n%m°Óø.<üïÿÛÿîÿý¿þñÇ÷¯ÿé_þô‹/¾8¹û]Ñùó¹MÐ&Œ ›ú!OU쫇Ù<cŒ ƒ…ýʧJׯä”Õíø7c–½ä·=š‹¸Ýêï4„¨­…œp¾¸Ìˆ‰Ò—éše·MZÛÒ¬ŽÄ¤ƒ˜ñôÙ«ÖÀj(H̨´®ñðüC“¦­ê=)³æàÌÕRh TýRcqcó=bJpVW+2/©D¾œE¾*\ɼ=oÖKª˜s»@Oa9txá@XŽn! 9¿—¢ôT:fN[…2sµ¢6š#ñTÝ¥<_ÎÅq¶‰1v5p¬XAhˆ±á€°RoŠx(ü–MåнêjŽŠæd*, øÌ 与­)¦«ºÑbq¬Òûߺwǧr~D°Aƒ¶ D<ªq@è³ü0‘›¸^_ŠÅ}­¸i[ÿÜ‹Å&ñ&i@±ÈþÂ[ÁCCŠmøSÈ=Â#%™Õ&=ˆÆY% RµGˆù±"J[ó‹EäÈ~÷^¿8Ïß. ;r`Žl¥ÕUS1¿Ø·ø<ˆ¢LTZž.YÈ&»5ö¥7Gͯ|¸uìË>ãúŠ·¬wtõìÍ›¢¸qÞNtUWB&¤µ¥‰DñþݳçÏÞ½cœM lОÕô(YCé69e„g5„P`È’“׌zÓ­éí´»äpV°ÄRnQ£ Dò¨þ0Í’\“Ox)>D4CžTN¦âûIà{°dmŸ²Â+AV2L‹Ÿ^¤‚â%l‘ ¥vÏ|8ì7D ©y?E»#â+ù—ÿôóÏ¿#ÓGâ,ÌÁÎ ÊŠOC—M( õbµ™M±AC ®æNŒ0Èe˜œ–f–³¦ÎMÍŽíà0d^Ÿ{o#õ†<€@" Îft… `°=¸y«É­ø?4BÓäL+­¦"8#5΢¨ºÐ(OgY<Íš¯“>¨r»W›Å@Ñ”h›e8paÔ¹ g… #Ç(ÚÆ¤Ý×u­Eí±±Tsì0°"—,gºðófI{AA¯…Ϲ™-æ\Q— cWËÁf’¶ÃÓ»P•öðÒgU墜ÈAò…è©HÞpÕX¾ku)­¨|«idG@Ð6•)@A3Ÿ„×S°å IDAT!,-&7ˆ5÷VÝ̯Æ:“ ˜@&™†^þèÊ o9Qã¿üìæÕwnݼóäü-phêK¼ í_üâÿõõßüÿßú;ÿî¿}vöåg¾÷ÎÁ^X;>iv /ŽŸ‹ÕfˆE1ìd5 4ÂÍ›+ÓAŽ3ÈÔë“ ¯…%2¥`CòÏe[㻼ʚÁ@ü½r«Œ[“¸ËLxN[Õ3ï ÿyT ,g+f2c‰#ÒÖÅ”ÁŠÄšVÑÛ¨0C12…rî÷@ \6¨ŠòÃÃÂd*€lOüÅ·,å+¦-c”ahžœ[ü7мXÕ• t½§ ŸÅšUU@Hã¹hõH©}u W¯:iYsˆÅa5›éæ³E#âæWk„kKI§­BQK›+Od ˜¹5 œG©ôn„—¯!­êª.£¤fá¥2©G·}©…"›ûÂø“Ó9etd²Z.ÄHå·’xÎÝb¢÷a½´a‰ð‡+!ýŽÓ~„aBvÝ¡a‡³+ÉY„Ô4`ÈšÓnÕËŸÞ§INç?9Ê™k5ø`ZBVªÿÓ™¿>eÚÓÜIß—È?4È@ô@ì–./À[ AšÞ4Çà ‰WmNjù}Öª°˜Ø(ZâDÒMê°¶t€Î>‡8ç$A d>‘á’Ì!fØõOùPaφ4àÔ•ŒbQG_T †^?}þìÆµwGŸÌ`Ýí¼ÃWß½útëô”Ÿ0þ½aýâ½™VМËxûÚ1 ·ñ„*ÓmFmàEà&,b>9Mêo{ć6ß9¶ÇÖ.ªïµ]BÓïG}|÷½/[¿çÆ>¾=;±þ蓜zI;zõò)õ°ª=ï!¦èPu0#N‘ÝÍ['°tÌŽî R„6&ÍpM„ÎY3†q²N×xÏh´Y‰?°…i-y^3åàê¡‹Q,›Î'eÜ TÐÈp/Ï…_ÕmtàÆòK™N.0ªóu^_¤ÝDÆ×P90mR`Ý4èeUÜä}°%¹zÕ°;ÇAïŠ(:FHˆ ˆØð»wÜŸë|[l;”£ëýíS±/Aèøaš#pz&–I Œ-øoázŠ"Ξc=À.ݽ"éKMHdnÛä=vùóMʬ½‘u½^|䈽1úÚ:;»k¿†9 رçíKltŒŠ æôÔ&îpÀ±ºÓã"]̹…´æo¶‡†‰Õ¹¾xí™fû™Ù‘/ðÁDIL::uLᥠñÿcÖ¶ÿ;gg¢U¯ý'wnwÏuÛ3ß‹‘6@$zj¡[fäºR6i÷1òœ¸3pD6½1Is± ! S¨ÚüDÂ-˜á~¨ƒ/â–ºüQ+¿¬UoMg(IŽ¢w#Ú$xËpðƇێ©:þòÊñ[HêšÚŠ‹<þÊÎâqÇÔæßû»ÿÎßýþÃÏ?ÿ}@®\ƒŒnÂÞ»›!s›.Íßq—7o½xþ„|ÿüÏÿœÖöàã"ñù̶ÈÒ,‹—=[Eu¥óJc>¯ˆòæÿ(æGÿtc}ÆÄTô,=lØDø”¶" *¼Pµ!-€Ë=¸ùþ]ŽCNÞ°«‰ÌqXðý.÷@Ï­ |×¢m Áè¿æe-µQCÉ44\Ú2&/4s¬«S’iê,]'PR«÷¨ÔòN‡¡ÈÒ ù%Žê:ÀØtPoá˜~Ôï|µeJí†U kDkx’*Õ3Æ4\•+¶;jIE1R\")œVjòåiò¥¸Ã^õ :>–H5‡ˆ>¡²*WõÁêÂÜ/Iih|r+žà7üà<¥Ljp“¯Mˆ‚êBË š·…˜y™Y…é¬<5}2G£ÙXa /ì}:¾À2çÀÈh¢ÍÀ*‡isÄ_”α½üÑF;š9 &5:¯ÍNÕ®ióStCQ'W«ÃL@1°Ö­ Í'¤ÄsÈôË9³~==Þá§ !½óŽçñ‡›G¢¹»ú²ç¯Ì`u€òêJëçb —ôèÉÓ'Ø»æ?Þ?W€.MÊ_W¥7ùìóïˆõÓ³Âðäžßáó!ô/˜&Ï‘:š:¡¨~–7ŸOÙ  u¹ÝäXPï‘+l.ô°ìè𑸶m )º%‰Ñ´èe:]ÆNcU7R8¢¼‚2©„&jx%ÃêjÓœu]"+a ^öt̤ý[‚·˜SH¤Wkgns3*ƃéó$àÁÜJà†’õp3I@@ìn8™±Ð“%Pe"w ¥e ê2E¨ühƒ³™ûú~¾Px€&f&ÜÙ¶PŽ"^Ú7Ë,a åQÕª \Jº–“@á[œ.n›–éÖS—×Þ„ô&–)òÌD‚¿Ý*:÷ÆQ0]“Àœ=VÖ ÄR6½4ýz;ðöˆ&ƒüuJ»ŠZA—·뽕’Q—‚ð€^ä `R“Žª›­H´¬„[éå ü‘,¿™¤ JÒÞñçÊhËÓA>Í”30Då{;O=­èƒÛŠ&ò}z8a€2>àÁíÓ(8x*[y N-ÿòçŠa”LO§õéßÓåb_`Ãöø€¼—Êy˜¸¤•q]ëƒgzn¢%·ïŽçlëDæ|×áªñ¹=çHØ‘ÿÒ›Œ/hÁ%Ÿv Ê6ÏÕ©6ãsDüðïÓXT»h/ÂqHé@j9ÿò¥C­ß[Õ)À‚7ÚvJIÂ-<Z5Ë¿À“ ‚lÛíÞþa]{ÂŽ6•šìe6ZRŠí“¸À‚€Ë( ûV]EÝÇX‚Gnö‘‚u„rô…™Ñ¤Ú\ñVi{¢“qß10ù ¸mÚý[E5ÝÖEe‡F_|ÃÓÙ8uPÊæ?\ªØeÅé>ß¾yõôÉonÝ<³™þSãº7/¯Ü?»yýø/ÿó¯¾ýþ¥ó·oÍi7Ù 5\æVrzê#<½ý+˜MvÓ)–ZAŒ:ŠlÌpÈ÷Á>ëîÈ1£ÏÀN+Íé븿äÝ€ÃóŠåš¡ÌöçËz8@ ¸A=Ï6‹Á3‚rV×®Q"3îg ˜@vš€¤ƒàfÍ2Ÿ=µðPaÙ#CZ‡Xç™T㹡•ÀæÒ‘4D>«1Z[¸ær1FHGašJOÐ+ë…+Íå5D6Áp%èíREùÅ?iænJè¸Q×HòZ‡¡blFÅ ùaö¶ãïköÊuR½AÝð-—íDc> 3§(ÛBy;Ù!ÚñYë£ù)-†¬–‚àŒ ]YáÒÍZ˜ 'Ì&˜Ãˆ!KHÚR—¯TÜ# õX‡ÕÇ…ä+ v9{É‘¯0ãòãüg`-ß,‚¿¤ãr!CµRÝc;#â­îÝ@ܶw gø×àÞ$3‘Löž)Xñ4Óû.ùÛ¿ÆÞÃP(d”$ ‘>$¤[ —Õ¾£§$•ž2MkDxQ˜5¼½àÛÚ·™E™!9Ö÷ÄÊÃõûç¯_¼xûþÞÙ}ѰªWq«¶'Û9IÀjÙ«0Q>s´ ÑαèÒ!>¸ÿ™)3@”l)¹+šA“Â5¼L†·S]»KÚ¬‘¦¢¶ÈÄO¿ P‹Þ¸º* ™Et¬™au“R]êÞˆ¸>àñ±•§ÐŒ{sI¸@v™t¡dú «é-Fš¬Ri*@ÖÅ×l«òEö&$ô¨3ËÚ|6ì´«1 ”§Ï„¾ zk —@u`!:ÎMN 6Ýd®ûMË=àȤ ÒõCõÖ¥ç(ÚZ àºq8Œ­‹ÉtñZ 60áÛ‘oVÌïŽÀW(+m&­¿›–pEN´TÎ~]ÉQþ²®[6z*qYÀÔ¯brHÐ/†P`œ n“é}ëJ†=0ÇFgÚ!Û:ø`*ª®Kbác8þ»Í$—Ÿsm\´AÃ…9èãǸú02X¤$¶OÇA)ì2•ApK)‘™ ‰7ËO‰ ÁqÙ¦ÂQa†2<ÈÀBIõ•©[™Ëi«£}µå2€òË¥û0Z©6¨ñØå„|.k®¹M±IÃ)œFT3Ï“¸;éЭÚoWŒšv9l¬›€ƒÛ¥]ñíÈJGEOý–“ö6Å å×c{üîyñ øòå(¨;UÌ_Èô%Ý^ æH™RFïç·0,oJ4ϲÑxÑk}‹'4Ð|æDB­%DáüUótWРeº]Kœ GRï:Q¤÷’¬’%àô"VZ ^dg´äôQ±€I}DÐh€Ã,e"7ÃÙŠR,hÎò‚í˸ü@ÚSˆCÛ¥<¾ÄåÃT„C œÙß 7Øœùye?FfS·Ð„å+4™hrÄ©f8©ã×_ÿÕÇ/ïܾk7üë·¢®Scü÷¯õ‡ß»÷ÕWwîÜ¿~ìpv:üøéÓgÞÞŸÄÄ PÌØ”‡"¨VyÃtÛŸôEŸ<Á˜Bl¼p^^ÁŠQyoñå«ÖF-¦ýìšÂv‚†«â­.Câè®–ëc†Õy1@8P`5¤ P.ôT}Øb¿üsòU š+Ó½‘à¶)Ö£>¶ Ïy]Y‹Míø“€C> `°AðjH7Ô‚ó}“T̈†ŒÿTsk.ÑŽª@pÇ•˜¡ñˆµ6öºe9*Nrš;Zy‹Ø€ÏkØIq4 !ªŇbùÀ>è¡LO Q‚m€3‡ëª>íµaŸï°D}Rÿ|SoÜt¶2µ@pËgÜSdO^èu c2eBLŠ~¨î–…™9 ¾=Ι‰:HŽCnë$M0Y¤–¹T2£e†% kÈ=z¹9i` ˆ‚pgþkøžKÊY U¨ü‚ ‡Ù¶2SÝu‡òç‘Fó­ãFxƤ炿ö©ÙtkÇÎß>}õääøêͳï~óÍ_y‹P€u ¹­-‰Ôr‚z-º÷+“nÀ™X}æXL`/[pÑÒ´V1h^Ï‘Tqkþ&åãæ:¸GºÎ¹ÛÃ|\Œæ10VË: ÖšähB®€Ï¬-å¨_Áñ‹j¥âÿp@ƒú–ÆHc‹?%]#OS€ìúa nÂïëešr[‡‡¥-NQöcÚ‚ ˜rº3%+-jniñkb‚##˜†ª‹2“±’ÔÆÅÅ©ˆ´Pj妴°ÊSôãƒ*¤àwiÇ"U&%1ÅI2D€ÀS™8¹…±©ÑÛvXv…˜úr7 ¨¸_ˆ©²·rÀ‘vÁJz/ù—6!ÿ² €2•¯Ð 2Ѳ1üR¸Š)£9­èøeäS#>Òü“æà#¡ª+6|P]ÏA¦ný.±è²¯ £ 'W Î\ùdlMY$ßñ6‚.·þh"$1ÞïºP˜Œ@ÓA¤/ Æ«©OŠ—ÄÁ—XÃß×2¸ å xf¾v‘D À| €V %ÿ`CÚá#‰3ªÀž‹X¦›NFS o3îi:©i‚¦ð|±Ì¾ÞmE?”VL–б‹ü¡ ¨å­G«ô**¯0 ±WC$FÌ£œä¶®º”Qâsy´ÔqLBˆMÌPfðå@Ä‚¢k„f™´ËzE磴•œÝ]F~öãÿðwbÌÑà ʩ² Œ6RF-tDÛ¬Å`©¤ñÊ׋˜ç€:‚óÝcZˆ¶éÁRŽO!6SmÿÓº¯e µW7Û~®©k:x9òº)ºLÿ8ÊØ7΂~H(¯Lƒ°yõw4à0 Aܶߕð ™,ÁíH7“€‡¾‹ %Å4ׄö˜¢³¤9àõ7ßüêã‡×÷îÎc¼}ï\g™;ÝêäôË?zwõì¶EBûjìÃ:úüóÏ •# .3.½ ý¾½‡ÚGÛ8Žæ·²®+WLYA†ì9¬µ1AÉë·¸òvT8RvÙ«¨Æ‹—ÏÌy1À…q2±] ê%Šnס g ³bIdbLV ×spØ2ösäógä•(§kQ¯ˆžUN4ÜÔˆ¾b<{{qæuãÆ¦æÃ@Àv…‚âr"q‘ÓÉíg(<}òÔØÔJ&‹RÒĘÜRV  ’PõèÑ£G2—^L`îZ=ÄGÅÜJxTSß\® ›8 mYO› µH¯ÜÑ£°ºDã, øx‡¾m€óú“¿„€2ªˆñaåÒWuKv•7-×ì\‹¡î¤9—us‹¿¶àO &&¡3,“à¸fÞÓâ ˜Ú…žò`ºÀ¡*ì& ó3[¯€ªÍ“öò§~Gâþµ‚ÜD½>JE@V>ˆ‚°y¿o1ouÅÔŠAI{0&kÑåÌr‚b0!btyâ×¥}£k­ÌðPþ. myª"`ƒvžZާ* 0œZ\µXôéíÝ›Çwî}ÿá·¿63ëC„áùÿ ]½}z;ßG¬4ÀI›Nïõ¢nv7ál£wnÛWD àt„h±UŽkÛZ žG£|¿.ieç~Ôr[QE?ôµ·OîÞ`kÛùÙégpyñêÉ5ƒÂ÷Ž®ØaøÙƒÏž<7Nyo¿M[áf†Üâºþ\°²Æ" gý÷lÑ …ÚÂ.[[tc‰¥u X×nYóí&çR ±i/Ù™ !ãÄgäë„â h‘ô©íu¤he^×ÂuâþsjÊ«(JŽc)n0?DàÀºDZ% D,Œ=UsT4¹î ŒF•A&' ØÖ–€㳠¥>{àC¡´OL`Žp<¸ʨ¨:¶pC ˬCo#Ôí/|®Üûõ½X=h<}ú h|+J›ÉÓ*ûâPÔ\´Âhöj¬ôDöÙ'º,b‹¯24:Ml'Þ?¸aǦ·{Z†7q8¥èƒ¬) nƒàZª—ÚÒŠvÝ.3ýJ»øÏQÏ(©‹:ÓuÚD2`0‡ƒ¦1ÜS6"\SQJ˜J˜o0–ŠfÂn6;ïdÜÜ(ÏÁMËÁL%Ú~K:Ó‹kåÄPµ^¡“ýd§ÉÈ6Ãb_œlb?ôàf= x{¿VH·&P¿ùÉÇO¼Î/³ýn‡ŠÕ½K.A™74ôŠcز¿iKäeÝ.—a·Z» 6HÀºìݘ‰’âk®@XríÃõOonÜ÷æÅÕ·îÞi}ÁjéHûè;9}ü‘‰­Ó炆¦aV-ó<Œ–øT„íPmF*ÆRB>ÃxÏͲw~évÓJmyd[„ùºN ü¬ÓªºG„²™©‚fÖ4F—ðT& æ0æ” TÍãa_sã™sÎx°H‹Üzš³ô žº†Ië-T§6¸úòùsá22`}˜Äðm¢¥q ›Þ¯ AKK%gµtqÚ~‡SZ·`BX4d.-âf4s0|Ž£‰ïEº ™fѪ«b&[­eeÔe‰ÝÖ·]0é-ÍÁÐ@Ж©&#¥±æÀƨy‘ŸåbžZc±3µš´b }`æ!óXEÚ_MƒìÌÊ$¾ JwÈAÓdÄçvÍ_¼F­¦Lœ ‡™’¦ø°ÜMÓkNê‚­§ #GIFC%Èty*]ýò–2å@’X<• ÚTQ ¢4*4e””#a¡“e®ÑLðgÉ $j¯xîH?Ñ Â† ^Ì, ëÌ‚ ΈUsr.»ÅU9¨@£9b%ù!§A¾­§AF …÷‹2ÿaÝ+“Ã÷-Â?a`IÀÞeÆšÁh‰SaÃòµãà–ÅD À£7o}e¦mž={Ê#C+³»eÜÏ’ÇGª*;"ܧ h~DsÞ¤ÛF4®-6I뇔¤ã]¸?ÐÔ_LÔ¿n/„”òW Céø’ð¼Q‘ò3Œc<å²·¸nÝ£x+šÜ2¿ßê{wžíHÃâ†ê¢+8,’°¢°¥D˜$õQhA‘ÃÁµùM&£Öê£o[€äw˜YogŠ[Ž&€7TgðÚ†:uôkG£pfvÎy²­ ÚhѳÂ+Ô5Õ£ ÒžáÕ6Äa¬®X­ƒ¼½Å¢ª¼x-_²lØÕÔÕÀ¬}øN…´~Ö7Eˆ‰ÅÓ‡¯ðŽ;SÅ24{ðÁ:ÊGB¬t8SOv!ÄùUÎéûêkAÅs|¦˜ný,IQ懟ü‰Þ]1frþò¼јa!| èŸjPŽ_™£«é9hpÑ…N¯òõýE…¬âoµØ2‚ ªÃ¼µå[¹f¦:Î+„¾¿|åùÊÀËx‘˜ƒ ÏAÀŠX)GBu8¨åZlåO‹‹¡XªØE¾vtéµ IDATP».CpX>ÌŒ£º÷G›:~öâÛëWñêîÓgOïŠÑçà{$ ¨ÖD‹ <ÍÖöÄ^™B#àtÎk!·0?_yp┼- qfÆý€ IC80g\ä¶ö(ûØx-Àá¯QáÌ!#GIð±T¾[™@É„¤_Åä»ä»•ЖG.9‘6€V¯{ˆ«1vJ…¸Uq«hZ‚ý:×MaÑÉ,5\±…ß„·wà÷#¸ÌöóÑCá‚ñØçŸ}¦É'ŸˆzxAjUA%j} Yp# íM¬œu$PéØH‰[°Ø¥nÃ^®¢eæCOQÄZ%\j¹ÜâªPÅI²æ\¢¢h|õò…2Þ…m(5†ŒCJÆ’Áá ÉÝF!P=/”­) Œ|e\0—/Gy×ï>òdׄ’…A yÔ«²ÂJ+>²¯¨ I9%¸B^-8ï-¸K24€Ä-˜hÆvå1@9EÌ4Šuõ3ªVòðÉŸLM^õA­E$sóRÞöîNÉ%wé­ÉSå6æ$U<™šl?{é ˆ¢xš(ê¿„!Û*B6ǨÅÙ‡G£), šPKë\ÜP! kùã ‹]rô« rT÷{‰à­€®@^]'€ûÔèQb£uÛ„§ÊÇÕQš¿XCD0…º‡Låá<ýlèá ?tZ}€èô¹4¼#œHjâ,³ã½Å=1¹‹­‘üÇü÷Ð o€V~ƒb L(¦‰Y—ñ]jj–ºðÆVÌZ¹z~mg¨"Ù€&Å UÑœ_cÍ©‰˜Ûa²-çéà$ÀLf-6ÛñðáCµN<£š$á̆nÃ#uT‘^°@aÓP[W-Ýj ’ ¯,U§Èecœ»¬ƒ|ˆµ»F¯>éÀ··>XiŸû›ØÞ<>?rûÑÑ·¿¾çK·¾8·âûê—& Àßáéx–Ó“(Âh#KÁ™¾ò¦±½ù…VÓz“+pŸ‰êN%ŽYÆ%Äb/C§SѦÁ0#jƒVF‡À6ï³gG‘69A…ê“\¶ B°ÐÃÛŸd¸YÔq4°E!q0S⇨|±ƒïBÜx2q 7OYœ_—l9È×¢_ Å¥¨¢ÔL§Ç éWؽZæéY‰1æóó'øÕ–ÿÉOÿ¿[gÓ/&Ú/¼ê*søOŽºø?tí8!=Ä7¤QàçÏÚÛB†™òÁ®np¦è¥ÿÀY_èŽ:éî8C~<ºÈe¿v TwݠȦFçëÜ鋿ónDÝt?ÈWPh’[G+š€°[éU -Òm¨@Ù:i'í¶-Ù^Š´1<&‹üEx+Þ¸yëɓǶß:p@"^”4]y\xoæR ”P Œ ¥^º9n(‚×Mxƒ5·TG¥%p#‘AÆÎ§‰H°B4r¤mIZ!äjõ±…À¸ˆ¨¦eóŽ{ü€3à—}dŽ*%”¯ÝÑÐLßëÛ  Ge…U‹Qí»ÁõÀeºï ,8¼ªL¡+£$V<[þÈ_PªôCCT ´Ñ"‚(´¨¹®LCAžK¦2n]ê¢}Ô)v©ˆ_²Û¶6Å[›‘ NON-éóy?[œÕÅ1…éfœ bFLÕ|F–´ÿÎÜü¡, `ÞMÉ–VÑ‘'0eXK*Ÿ¯ÕЉÙÏåä$FÒš¥m…ó×ùRù€£M蔳¡*›®éµ£xwz÷.%ðœ\ìû9=íÀ$1¡9:u“ÐlW‚É…’ÞBïÞ„YJNÈBéê 9©2,¥+ù”¢Ú¯×›Í™åÙ2fèÎß}8·>u튯î½xòøËßûƒã[_~óõ/OíŸ9½yãÁ—çŸèÁÕÛ×®pß÷ÎΞ>ñáç:t‚OÍrFÏë2Ä ¾ýÖa`¦²¸cË‚ºÏG¾Îˆàš“„<þqÙŒÖ\ ©‘W}üî¹Ý'ô Ö²ìN>哯WŸ|ûðéãÇßýÎçço|Âö u¯Ø"‚F ëÚQ»¶UWöôñô&æKµ£_OF# ¹ï| gè¬Y8ëCõÔúðëlæ)ÞÒOᦀÅÊ)J8¦ß¶Ç–ÀuV;;Ekõý£ýl¬WNE¤LÖš/1†ŠÀ9堹äùñÓÓ§„‡Îôò¹ÛÝü™U¬ ßI›|eÒì„}B À}#ò£· ôUäh^—.šì„ùãGx…m•s¦ vB.ÁùŸ3u¯MzÙaç4@\»7ÎP3òìØ–÷õFlø 9’lYsÑÊ·ýV„¡…dWâp8$@7® `ÿsž†TlòÉ:yîyòdVVÕg×o#Š–‘zsÏ;·b¤!ÜÈœ™—p­JÞÜm“:?7ã·J#êq®K{šû@MN°+ÄD¶ðÞè+L(ñ`€iR"·”‹h¢&à¶\xáÐÌŸþþïÿÞR ‘p rI‰LiÜ•æé¿LÈÿM:IGù½³TïÓ‡áW¶æW@1vZ†í½hÍïu"ÈõZ2÷^-ÓʼÆS›h•ý@)ZáðÕëÚ•Ý<, =pÔª ‹lû¼5SrçU{Fy> —qŒNØ`º´R¸wZ¹%þ͵D -e–¢üÑ&oß¿y÷úÜ‚æÉÉÍó7ï^½¦j³ÔˆIÀ!‰;}«ššÀˆTëØôV0Yaïß%¯ÅD_Z÷é Âbƒó0øÀ:´4q ?!ˆ>è* ÜßšŠ-L&í§ý4©àÃÌMOÞØÄ‰íz¸,A ÏkbŒÖsך\Â=Hi¸œ‰Ò ×…i¾]üÇ3'›òyŠùEvo7Ç@Ÿ3÷ð/ÑiWŠÈå;Ú&©êÚµž}¾ðZ í¶{ L[CêsÈõÇÚèh^¨û¤ÈºW@·ˆ×®XS¤Aò0‚Ò°ð/1ÂŒˆÀ8¢¦7š1jÖkÆÌ>ÄæOÖ½•þûí7Ïžýðàá#æ‚B­Á#j4" ÃÌìpàÀݦúðá‡gÏ ¦Þ.W3R’n\8ì7Pƒ:B/“H1¥ghi^Á%ø_Xkà÷5z¼ƒÍ^1«°úEw¾¬|×GdœÞ:o­e¹JO}éð/f/œÛ)2±¹NXžÞ#wjoh€é±î9¡2l*eSM.ôiÜA˪£ìŸ€Sc‰Ú[YФP#Ò7NÜ" 45ÌľF(3I&ub­õl×0ñÛiš~„bWK†Å‰N<üÍ7ß|íó_f›“–<éGßvðþ¬àö>ªÀÊaÊjñÖ8ÞÛ9&FµËȦaÑæu+ÞäÙsƒ›þ-iº]À(Ø ‹Õ _~’‹Åü¼%GôY&N*d<#‹ “™Ÿ`’V¶çŽvZ{ŒÉ×P÷Z9R8V™wÍb9÷^¥±ƒ‡È¹È¦þŒ‚V,1³[fG\¨è:ãfñî.†wÈ‹ZöžŒ@þ@@Ï|Ý¿wÌcõÁ£?þ·ÿÆ+J5Öí¦½ôÙ„¦Y>bÚàÉÙOˆéˆUÆö¶OJEÉÖ¥#úÕFÚ¨ ‡`ššÄ(j¥&¿ï%¶½}@d€¶©ÿ¸€¸ÖG”ïÞcù» Fpy~öf)«‰7¼{ž<ùæË/¿|ôø!Ü+˜ñ>ç$6}쉼´i”-¤‰D:šû8™ãàÄ IA:•XU˜Ç‹Jw¸‰!#¿?ºòúå‹“ã»ÞCvþúÍÍëW$4æ‹7=Pª…Ä‚ózAíÍ›Oø¾ùá>9ê ÿ ^ ä‹fŸä"¸*]‰íüÀ`¶4tð¶í‡Ìéà‚ôÔî#éëŸ6É»q|rÜ(q³WÄÁll"5:÷¦ÖŒÀÀL)ÑÁ€‘ýCJpɘdß½6DCØ›Šr&õjÌô"ò´28™\*[0´4 "dûS×€d1hç*ðäåëÝ,·yK=…Ié0áz”áœ{2»ÁÑt"+PsWæþæÍ™â›™Üºs[/Òm 0ÝmÉÊBÂ+æÁYäÝZù’‡Á GÈç{&Ÿ&Êæç§, )µÙ0€+£$hÝX{××?i’\*šÀ¹ª^6ØÎO弋RÆ]Pä}Î4ÍFêøê\ð7ØØú#Ø7*”ûâÍEÑÂå ÒðãîphSŽ&¨Ã»^ÆvŠËždE—ÑGRH\ÏA„å–ʱ$ljdäv8€ß!“Oì¿þúklܹw׋yoß»kàMÞroL¶ ȇE?D!æð¨M†H;`#)%Œ·Äƒ"½?×ÊÎÊë™É3h.e¯IS¤®ÂFo:cmÇO¨Œ]À‹kM7!]UŸ¢°ðã·Ú¦ÃqoÃøz«ãA‡Î§mýWĨëµ1hYšåþnÎ`c‚¹¿ý…˜4phé­”32J¹TïKÎ1À»4wö¸ŒÈ^jàÉe°K`;¬<éÝ(Â)Ð$•ðml_AÐ…‡«= .Á ~¥ @‡}Ô52v·ÛA"Ôâ_ªÐDAM0ãÏÛ¡ü„ÁUI6­; hªÇgä¯>ùªwcÞïÄÉ8ZõÎ<T•RkN'ÀÔ•¼U é‚l}§õlq fæïçPñ2€Êг¶µj.Za™„9œvqÙœs%B¦Ü08°Ííµ™žgYúU_é†Ð¾‘+GÿîOþØM¬ù‘“…²¼$¦µÉEòèBm¿cÙT—ª‹¹uéYÓ–ÐhEG"êt•áb÷  .0Ÿ€¡`g&idBÛUƒ“ríÝ!“M›­ï% ‚MÆ=þU\ãtø1ë·5]¶½ŒÊV³V\dߥõ˜¦Mb °…tæ¡›þ¦neîå}ÿäÛ¯{ÿáýY¹âòfFüÞâø¿þçßž<´M[ ¹y»kÍwÉ+¾`€–¼¢š›­ê×”@‡{^8wU+Úsû\$ÒC¾ýö[½ÏÝ"•¨à8/¯—u`Þm³=Þ€¶ä"k¦ô>®\|tÕì(Œ«°cL‘Š›²4¬järeê)ÖìmÇX÷˜«%jÀHk¾ØHá²/á¨]c©ú’4Qg ~²î„¨üœ´°à~*Ë8=µò&–û1ó`(£"º"®`Ã9$B0-¸I± óp2¥e3³x÷|ÑzH^äšÉ x¤±4®hý@1†l`X%öèFoLH€Z Ýþ)ÁŸ‡àt ÿ=ÊÇÇ_? ¾8)­Œ3YgYq†c,Ûˆ¢NÀމ­ ö‚§J Ó¥‰ð¯ Ô¬ÔŠèp`€YZç§K4ã§&ÊSÈO¬žÂ¼ ç!ËFjxòb&ïÚQjÑ~™»ð‰(bÙðƒä®< fk²rñ™•…@;ÝEDRX0ÛßÈSz\C$áÞÅtI•bÁ i–r÷öñ=O¡¾ô‘Ùï8¿%±UKþ ƒi,L ìÛÔ/`¤I„øƒ>çky‡ %BͲòUAOÓ¥6ÕЯ¬ŒòÀ L´¡!Vá skåWpSµŸEΈ®Pà£Ûª·é5ÅœZ+Ü…`œÎÒvù‰¹™œŒK€¤vÈR)N`3iÔ“d¤R /¢ºwÞg=cžJ)01Y¯yò]{*`øöÉ“Ï?ÿ´æ`0ó@Å¢Õé¤ÎèF¨÷ò4£†äLÃPqþv'Ké–àébù5Ҝޜxd‚ŽÉ …þ4w¦af; ¯\Ã%ö¯à '€)H ãÓjLj“?/Î~ühç“75Ñœàeu„¶ÿ×ßýÆø·Ù’Ÿ¨cóñãÏOOñ¯G‰æj<ŒËÂ_8²l{.»ÇücŽ;ªüø±iß“'O>|ˆa¯D|ðà‹žFd[iÓZ€–Ð’Í‚°&Ò›ìÊx¯ŒÐôíÆ‚HùQÑû(^ÿ¤1}.?f,pÑÀš;çÏ30Š<Bn[^V¯ÍÀ†5Žuô¡PSÏ€5äë%ÁMBfc£ÒR“mÞ{ÚÖvød¹&Fd„Ž!0àRcØOZ‘RstIE[ JZú‚ÂÒ¬̳ç~N±ż ΗZ¾ûî»í¥šÀÙ·#: +|üÜAIô7,nФůßz Æ}c$V ¯³f¡†„1&pg¼·ÝH?ïÿQùÀÈ%”÷ˆÂ,“OÔÜ[³ºÊIÇ''«WVYÇÙÄÚ÷Ëé<‹nŽÅó ð¬é^1Wk\ð‚€3L>|ô¿¶•æ<Ù…u­%¯‘PèÉ1ÏÏ”Ð$ŠøÊn3?µ©f倬X>C?ÎÃŒ Q4äŽêŸü÷ÿñß-{”÷ôô!ºã,1ñ-ÞîÔ4 ¹1—# ¿D3UøüWVB¹'³ºÅÔ½]ùkϽpdú6hŒ2që§«Ž¡ÕO¡ ^Xº9j, Z-B/*?ÌKWC¥-&.i«¡Û>°¬o¨AȤ­»`Övšë8Ê8ÑËФ<èó›z´q]€ÂHщ]ìÐÐZˆ^ÆÓ¼2ެ9¯ÿXRÐN8$0?Wp0 üÃH ’"öZí‡ ƒõâ2È“ó« 0S täxÐ×0NË]3ÖÚ‰‰‘GfL!öî`oDŽÆó=.¤Ò¼Þ Ÿí€«R37øZŽyŒ æH‡Ý$re„v59&˜à?Ÿ1Àf¦p%NXðIœÊp×ý™À& m÷Öf¨ékÅŸ\£C6áÝÄ)˜ú›éBDiŒã–ð4*5‹èŒ"Héß´„œò^ŶƒJy&ü¬Öcš;´F¨Ì ßâ¶Ñ­_%êZ-¼ŸÊcå&œÂ0l(+¸¤3*;–Ã3`n‚_¹ßûÌ—„Á4ÞW“¥+¬™C2³ä æ£HFQx̽áwi´:þ`_ùÞÛéöŽ«-1ÈA}7̈ɼ×ܺ¤  ’ ¡ Aqo/Egð+hÈ8šŒ% éÖ Tí'óo“ [J(XaZÕlÜczÀˆÍilqØ|¶o}æÍJ¾ûâkIóÈmßí-9ú¥Mî“!²Éà0pR"ò£œ:ÞÚf JÖmW’§êà×r¨R}üÍ\Á&šlÜeÆ‘»ç¬^R3®• Ä ‡áÖî¹+1c<0‘§Ì@ÞÚ«[E GÏ­+(âcšWžÞ˜“Nø.›×$‚†O—4Ç* Ã’æêë½s LQ^<'£ôÏŸùLÍ;ß,»ÿà>Z¶³àíáƒGó6¹¸d±Œs vfÌx&òÜ…)ÆñT€i…ˆ/ÁáG4Jưa«tK6`Â"!¥gÆ ä°Ÿá›¾í@‚‘‹p¸Eo: gÒ\9„3GÑJp9ë1)aág«šà¡ å,覞ˆZ‡àˆP€µ¥"Mü„ü–‰° c•hήb@å.MPŸËNwr†œB‚wi›X¡fÆÕVëCV·ÔŠÁÃVÊ5<À¶€Õ;”i^’zÿþC©™Nñé¹$~l‚n$6¯¢ ÷1¸¼wg±‡°èÒVÿÅùúõ¹ù†6D<ᣠ-š³ËKàÄ1™‰Q1³µÃÓÕ+üÁæ°°b’°Öuæþ{ù e€5tÀ3‚&6Œ*/c€•ÑmX42Í´gƼ~n·Åóò£¹f[s´]r^7«üÁZBû)‹’ÓYìe#¿nƒ¯ìì0•ÒV½{~UghTƒ íàEÔ×^6^Ú†w†¢W5±ïBY>–ÕA¿ÖÏC\šNÐ8¡ÌÙ!DýÄŒöêÕÿý›ßÕ$äÑãH8ŽÆw{×FúÊõ¬Ré<¨]¨â¾=@2Þ%„¨AÂhÍÕaŸ‰t>ãª3ü§=[v ºÝiæ&·0[°Ùdrü¿×I´û ’1²¨‡m¹Øg¯ÊWÚÔ/nÐ(ñ1FQú2N ¥­QJfÒµ—BSšôŸ·³H×U‚¬§QPç YGôo!ŽÞd,So«Û’Z`Ó¿Ð*.ò:¹Eù›À "4‚¢çˆÐ¢ˆ£m³©r•³õÎÃx}YY pÆ êË »Ã'T´âØÃôúeEŸ=×ÄLò’Ú†Txð0v¹êÝ5|’˜­Î”ØÙ¤Ñw ý"¿&æ£HÈÕ 0v$×êÄ3ÓSr°ÝRr¨pYÓ¥<p?g ÊNÊþ²j©˜| (CÔ&$Ïa‹‚L‰:³;¹v¾j@™I‚ñÙw?Æ1°ai®šn]™ÛvõÍ+ÁðoÒë,Ä¡H½¨ ØÁ%€!½?Ñ¢mæã¬ž­QÔ¡Y\×ÖÇê–m—©N˜±±öRãÐWR«ý“K)s”Є!¼¹ê¼t“ylm¡Á•”U¿x#Š¡™ç³øí2‚¿è.†Dzù×ÊO"šß2‘`žÃàçí¾t™Jý\Ê+2?qÓY½¹ä ?ЉÀTÂì 7ª¬€$ƒ÷ÄaÖ™+*ƒ‰¨f³…ÑžI» ÔÕyV NŽÅÕ‘Hã‡õdaü½Ïf ì<­ÿêŒGÿþOÿä®/æ°S×”…œZmüØÄ •8PæŸìNZícÂ,4ãM 1ÈÜd¿Å¶m5q•™õjëü”F6—¤^ ÿÒ/ÞÜ›ëŒVˆªï^@kf½8xn°“55D!D+=–ö`§P˜~E¥¡õöU/Åq;Zj<£Ió¨Ð6SZà¨ÉtcJĤy0õüÕ$ïäôQÍ–€Ø!Á6Oßxòä÷:LO‡¾{{öÂ×é‹3WpƒÏò‡iNo‘~#\û¨ð‡é«VEð—ò&4øÑJN¦Ò(’Ç\ýðõ׿Õþ@c8ž` ÉßgóÕñZÍËQ€AE(;4i´œ»×Â%‹ÃkøÕ/™Èo‹k‡Â5ß]8 È‘ÔÂ}üQ5``.!ÊA•éÇO$ÓÜÙ¥%­R|d ¨1,Dåï[ÕÕ@I«ÌýÙùâéýf’ÑôþÓ(–è» %*ŽMÔ÷a8ò3ÃTFK%HçO†Sï'þ©Î~aÉ|y柞Íôðl[nÀ`Hs¨XGÅa’fºModQCç+„jœý¤¢ÑX™œæÎ+ x¨Ü`1=S#ðhãœÐñÕ—¿EôÞɱ3}-]^— ÓŠ†rÍfeHàM¹)ßx;ÅjÕ—ÐÜ“ñÚ‹÷¶ä?µšÕL"k·–Û!Á6®Vo®*#ŠÌZeæÔÛøÎ@£ùúžùÎd,ãÆ¹‡Ãàµ`” f5<|¶J’«Œ#a5ÿ™5BŒoºcRC2™’1áè/~õK»ä:ºªM—f¸.Ëy†KìxÀ’°I 085…jÆxkTvPùRÄrÄ\™à¬•­æÐ׌±¢^³ÏnØÕ;ºÏÎ3ZšCëÞ\zìÅ•ÝÁ$˜°xæUªƒ“Rk›G  6Õ|¦­<»¥iê+4óÔfºMµÝL"4Õ.@«õjîÐŒ!¸‡]Ïóf×1Ìû²½Q·ýë4¹Š"ÎmªÝ°ñŶªw?þñe‡nÿíáƒÇ‚‚áÛ£9Ò,q)Љ¤AÁ!• ‹eTH­€O“tjô- ’·ŒaÂà…e–#ÈÓÌ$RäçÓå`PžŒçpÕ¸¦[·Zç˜ H»%ãTÇ çt hÕ8ï±þ+¼©¡æYË£¶±v2J­À¨§a­”û•@,Ù5ŸUöÑr¾mcž~­cçi—ÌùõOõŽÑFÉe!7} DQüÅ‹n"ÛuôäÉwôprïž HÁ^¦JžÒâ%Í‹E“F‹â¾'4=¥×Ò©5ne›öõdµÄ‰CÒ-OMê–«fº“9DCnŽ´MKjehÝé.I“±¬âÕ‹­´_o©ü“PPÂÃhõã{%dôsu¨ò“Ϋ4§F6%‘<üܱNÖdÚÒ’!Dê9Î\>êÍÔb:Tl© †0k•+Zbñmsê˜kRðžÖÁ`¯”tüŸÕ²Ô¤Ý)gÜC+ñÇ’!…°>ÞØÉ¥¥’J{q® ÿKøÄ2y?r=í\Nì}So¿ü‡¿÷ §µÉW>aÃÍî“hÆcvy~vGqN <}Ǫ›>»ÎÓ^—u¹kª{›/eñEfÚ`‘©wVní¦×yE’à²;;ÙwsÐéPZ§¸´7_¤PI Þ²ÊÑ–žµÅ½9Ó†`o•Ì©HkâdI*»D†ƒAŽÃ"!D†ƒÎSëË*,iÏÞð^²0Í ô©r­y‚ßμŸ—ƒ\Y[àgû8rÛFMÒæR}_cu°±[²Œ¥Æ×gôZxµDÆùªÅ0­²«”z§?#ÅýÓSC¦V$J{ ç¨o‡à†[­ {xÐGP‚¢òñqK*!Wž8Ä_Îcñr]\`¤[$ Ï¡KBè(ªÑgÀÊy`£‡Î5ù:0à f%Í3n#5•혰1o¶å-?¡ÊZN$Æ<’§Œs]£[®«ŒgSo#3Èa;gÇvd·|F>ñŸ9vrHµu[ [æŽË¶”áW*]u^BK ïšë¬ôù8-öz§0ò’]!dÓa·ÕƒßK®ÓlcÍ=±^S蛩C×§,DÍæôК²Í²¥A‡æ!×놊ýˆírWÁú1Ñ e½°[“&*ÂÖ¤†3òF 1ôñ\vÇ1)$ë¡%X)Z[Úpv‰þSèEõOãZNB4œŒÓ¯á;­š³q6}r»Œ 'R Kv7Çø«^Ã9ñã,Lý¿ÿå¿ Àƒ+ü„`#|]ÞÅN5`”y>¸QéÒÅqãíKýQ öEÈ„ÓÏû±Í‰Íx ë†öÕÛvþrsÂ2*@>TšŒ‹—@ˆï4?IÔkP¬›¶ñÚž†¤åã-ÿn!ÿ¤Òð¤,\!þ³ñh„Ç( ò•ŽšèBÎ,‘ÖDòeHäO(xQ½7|óí÷0 Ù81…+ˆº\ÆxÿÑþ|6`¯TòÃ×_}m§îñ½M{!Ên-2° ®ê´¨Š23gb6 §lV7 )ûœšâ)Ò»äÀ¼K×®xj½ï1ºŒ.=øé væÓP+æVÆmpxzÀß4ã4nÊ04­»º:¿æ3/1“cub:›.ëK@ˆîp…Çøk3Z°4†®¯‚dUôq4¹]»æ ')äVó“®ã­2Õx̪ÇUt€YoðØçÕ]ëy~n §áhb>…ÃÊ$î3ñ~V/xå‡vó×Óò=WõñøØ^Ÿx’j_÷À‚Û¿V(…]ŽÊ ó´‘$›§åÍ<ž0õÆ%U9xzçÍ‹§ÿßoþîôÁ£Ÿþÿ'XiÝpöÊøÀEò"op0¸X@{qöºmœÕ+shðâõ­žø6>¿;¾ëkTí5Ä**d4¢pTŒµ8Íq›w‰8¿bÞt"@£‚DWý/Ì?u‡I¿²[óïÞ1¸NJv™ü‚®Ê¹-"3ËYè“OêæŒâ ËòXž,JÃôSbÚóJH¯ê§«¼†”9R Þ·yÛ˜f.!§ìÞŠ4ÂWêïp¿F˨6áa\ù¥_ºšê›Ÿé ¥’˜™Ñ¢¡B$¶‘3äç« QÈ྾GÒvÃQªî†7}ºÞñèÑçÓëåönzx+››Ñ=™EFã⸟qšþM~¸%0NEPCCÔ› •۴ʈŸÉœ,Ò‹¹íÅTCr,ÁÌ*Yä¸]]!Á- €UºD«z1»‹¦´·Î æÁðýÓyýo±™ )à¥_‚ëLWnz§¡Ä‚kw#Û‹‡Üˆh|3r Lþ¨KJ?ïðáMð¬K`U¼4ÕIl…ybŒæ'b4Ì#I½ûئäq åAØížIƬ1Ϩsá2 ½ømv<·ËŒ–‚w²™ çØóNTbΌ˜ã¦çlÇLót¼á„N5÷©VáB¬Ê Bþ3 Žh˜gÄD„™*Û4÷°\%‚ Øá»;Ï%y]Í™_Ñ[´^åre«ÆyÑ»×,d (Ö™!¡×øéö×uw©ÑÆ> ‚Â/ByN‰E¬“úÉúoL!&k,¿ç½ŒØþóuûšç¹3ûꥭœ"Ä;1°qß®öW,‡7PdJD=hdp³ /úP f—=¾ûxçøDXó'pýòÿ+-”_mÚĽ±ão^ÂÄiõ ? Iï(ÅÃŒsÕK1ûv5“dÆÖsH½ Ÿ^†F³o_·íÑí¤æg Œ´˜·Uêè¶`9¾2Fɳ0Sî½É<ýA}ÄpsE s㎇EËic*€µÊÆyo7þüDÅÑChà”Ö( Ú@$—,¤UËíž¿wOVwË^æuq×\Bå»Å&Öítûþû8¶õy?;„Ož<±Æ`1€ß[å2h!Jmæm†jÀ¢  ]Þ‰‡"µ«o'ƼUT«"?³¤LKØÊbR§¡JœVR¦«‚æÓïP€\¶­••ìù(õ…¬}æRÝÉ °axrð˜]3½ÌilŽ61lŸ§@egxÐÝ]Ž4¶õã®T@˜Ô-›@ª7égz„Š#}%5Ò)̈@u_|ñð/ŒC…îÒ¢%e*ŒçMzÒK¡³Ù7]9\šXÑW®áQ#4ÓŸ{ù\7kû´qw| Šm˜¢fQÐOeÔ¡·ÂãS%ßêomÕäi …PÁkû9¶\æÔ*½}çÕ/"Ÿ €ãmPoºš±ú¢À…”aJJñ NL•œ[ þÕŒ_'Ì'žñI;f£8¡;©}=æ‘Ä#Ù?»Þî–Á¹Y —|cq.¦s”tm²Ï¡#rk€ÜðòÙä1„aµ‘`ª(vtÓF²¹¥{Ë›çž?}òWÿí¿ý_ÿ÷¿>yø¹ötˆ åižL êkn”–å›u•ž©·5­}l¶k, ÒE‘À;;Ø‘×ѳ^ÊÀ« ÿ,Je€Ír>䜈£Fm/wÅ™[W½S†ÚÑZ¡œA€2É…„ŸfBHíÜñž1þªÕ>=+Pêçæø‰«QgTSük=ÊUlŸ0–¹ñ@ŠR² kØ›w<|½,FÞà*mI»—áÁpðjÝWËö˜éC=*ËÉÌ©kâCÊòxHý£%`‡‚&pÙÁ¿°¡R¯aŒ”%òÚélò?]Ì·ÓÉ ¡KÚRÄÂ/EDÇÔ Åܲ_…¥éWjt¬ö¨S7Ñó U©`,5Ê B,Ã<ÉBÓq6 3N¤A`¤ш)^çýú•Q\hé+†¡l…ƒ0Ì™@Kl«¿í‰‰¦9îËP¢C®urlàJ[Ø%¬wï‘c^®Œ^ÈMVuêI­~ÄɆë¬<’í® ñÁVI4âCȃ‘.ØÕá½¾«ÛQÍ4Aº{„™¬ÓãĺT{°˜€a@ˆc[¿ä뀤zªs¡“ŸF l†„eÎåÖÕË5›,¥¨× 1W·hiÅh›×[FÞ6°Uš»B?þñÖ®NOð1mÄ)\”Áº ¡-å ‚U…r¹‰¿ÄÑI±bòÌlð܉‚K´a±¡d^jL¼9ðLÏ:•¡]1U*hŽ+gNµÊá!÷îÝEh^ZÖ.¡«+4íÓFÄœžbdQƳC°fÜò_•V^\µr„‘qŽ´åBÌ’6ž”Ù7¤óz[£#orO:­F‘õ!5ÎpâY²!þ51r®Ä™žñB:¡ !Ó¸¦ä³Q—r „jm´^ê9uþÛ\ÄxÁéZpBŽm•‘ca,ZuR6R“/!ê'°óç?:_ýöË[Ç~öÏÿÕ4i˜!œÔcˆðh@ÃÅùë7,ÍbܰT¤@qÇMc[ÃUÒÚîUð^'±s0$楦­PŽk5‘ÆãkøêUs!÷Ÿtv…ؘÀ%öAeÐÅ€)/g&pN9³ÛW{l?"®äZ`²¦·1Í€J(ªÀ!U¬WdO¹B>cÏìfŠCA_Ã9`hý/òø ]Ãô‚8`x2¤j\U3nt Áê.¡ËD„xÍÚÈ%|:ƒâðÓ£«”èïG±´f wº›^¬3©Œ8 ¾õ …¢8ƒ.+ àI=:®Nezp,cš»4ŒåEÊKZ~5äR "ŽàRþ6ÇÔáS¥V0;Á­ó„—➸å'a…ÀAPWÒÜO0Êüg‚˜”½å Y‚.@öI\ÊÁ F Xâ™3što9†ÓÿÈÛTgùÙùç¶Zö„>M*WWÎEôy%:ôÊÚ€ZtG¢Tôìùs zÂñU[ŸËEršÔ?œ¤×Ü¡­1×™z\ÂÍYHVÀ˜&Ãv1qÓ©ÛâÈñŒF‹ˆ7Á‚„™fLõã¿ ޖãŠè؆"ä‡³Ùø?ü' ŠÂ£Q˜ ™O˜=ØK0Ä‚€Ç{û0ÈÝ;Çä‰rFá³Ï°é+™ëkWXL^¨×Ò‰Dâ“û)¸êO!©ùõXÉVÍ‹3Pòlµ;^ºªŸ|ìùWxÚß½Éëò««ÆZòsGg1êùivKê2 ÿ ‡²n‚-0Fˆ±“ļ­T3ˆànû‰« Öéõöé'ÄoÝñEº>ÐfsÝŠÃ4šw·‘[çât7þ”£g¶¨uŒ^230¡W0[gâýÓP}­[[;ô:×KúóM_êZ-**+ºë£ó ξ¾b-á†ynG9ä9õ"·„~mù+AL Å¸¿ýÛ¿ —·QÚ0ËHÔÂ?8"ŸÑ„6†n“•ö3Õ½‹wâ#Im_ñf5 àÑÆ°Ÿ˜Ã° Fõl`4ÿï¾ü­JÁª®?æ,Û EÁ“pÂ4`ûó»éýÊç,„±:—Uãêbžd"5xc#ü`˜˜P)cbežÀ¾cºÏ!ti€ƒæ±Fá´YSHªfüÀp‰‘½ -læ bÕ´2¦ lTª9ÕU²/!ØØ_ŸŽ—à’7,©]u~#k·ÊÜ(–ns˜átÖСE5Pí¹™SO¿¶[|¬ÀáÛ¯Cpá#Ò³Ó‚Š0;rB|ÒÆ3ÌX…™oŽÃ·Až©v\„sR””fs+¿e3‚‘&éAe«HŒv ¬ ‘Ö\a”ÀÏñžõñ?BÉ6J:W K_.+;k`Àl¦°•^e „ûBÎÏ] áÆ8‡_+ÌØs:ÓÒ\T0Ìèu ‰¦DGï€Ã>IÄ—zûbÁÚÆ`ð K ™´´KxО¿x&ûþ»ïnÞùgÿâ_:RèÉÔKC3cx(Ÿì¸MeÞ<éà`¼‚P¦çÖé-Æ´Â?7¤I+yÓÞÌ[u0¨‚ïù^;H¼±©?W1l.iž|ÖöŠóÂá§Iq¦‡Æ›ONÉ0 ˆq8‘ÀC »»\¸Ú à’å̱o”ûöÊY­ì˜‘«XÙ¸xÒ DCF³Èe•´A?ʹJ?*³ò8Éô> —G=4‹v&–ˆ[&filVøaÀ›¸çv6ërWËóÀV\CÅë`üe 9ý˜ª ðo?Âó¨«yÂàI0ÎS8„-.af9”¼ÃÄcïu=ª-ó úÐOªpiI¯– Ï“'_㪠ÒÁ`”ìö‚1ÚzŒØ§zŒkeTš¶†ÖsV™÷Ò¹†Å€n×ï@ºJ4(åq§ÃÀGŸ0 @<Ì"$Ëí2ìì*´F´C„ÁÕ`nÍÌ4s!ãô°•>ÐÅj.’tmŽoèÎmƒÃÉêBŠC€•!'š¨DžÁ@:°—:záö¹},I=÷åÁ;P7nú²È#wˆ·3F;[Ü2.‘š—°S °a€’É"OBø•]¿M55úŸ`øIÞHܹßz›ž’r¥4&E·úh~ðçÏ–5Y#æõ0œa{® \9b¢GkܾŒB¡”ÊÇÙ‰‡ºË˜ðñè¿øsÚÁ=ËòBe:ÚöRÙ^‰!„®/âeËÆ-‚QÐÃŽ1FN‡zL( ـÙQ–7ƒŠÐºŠÐНcBlyáoãàÓ/ºi¢gu›ƒ°˜Ôp~Õ»(€[lÏœëÐp¨«Û„ÖÒTšÁWj«Œôô¨d˜¡N+M(˽T<ƒÞéëÒ fø!„ØFs“§aèÈ[°þæoþÆ"o[†„ÕA±Ò-•C‹IC£¶Æ3´À#d„Æ$ð)%0´M2¬K ¬á¨º€HäÜe6¿£2Ò¥|‡ðÊX3ÜÖUº‘?´ºJg!‡ …«¨“ã[ A¨­|yåà9àİErC|e”aÉí yëaC8ËDöÞ[cXm…OÇ &GÂæA¯’5‘3é½.çµÁ^?˜B[2‰¬ïMïÖ½A*ê‚ ˜3þf5»Eù„2€1uÿ“')ì±âó€Ña_µ 1u\¢A®!°5éQ@ÿÙ©±ñ´ñ¤ƒbbì IDATKƒÓ¨ÓÆð6#~ìQShñãn2–ø3•` àW h‚ô“TC‹ ÏTáª[Ó ÿ`¼×ÐÀä dÎèGcÃaÁQ“%AÊÚªÜcÊ1 IO ^Ë35ÄÌB®\ôÑëݸS=YúYÆaMب€; å7TÇ tÆIÆ,VGÀtµn "ìI=YêqRgf´oÅg_½ò%Ouþæ7¿yø£/~ò‡ÿ\CŠÄ&q«}7òª°«â¡gÎs°Æ³”ÆÔË$µ¥"lŒŒIŠÜŽ"z1qÔàc—)„p§F»:¬î*lW…¤<Û !˜u‚°…Q{'¨ªwhµm¹ÆrØ¡1™^ Û¶šúV”ÇqüêÀ0-ÍHg¶Á1V*Y:â“!4+Uh¥ Ìz­¨øÎkyuAPç œÓäÃ^S0HOݧPên×Ì-…‚±'¸F•䢀•Ž…®ØÈ!·€Õ,5±nñ#ƒ??×úf&¨¬Jɵ"^TÂÃLóS*êS?xÊæütP.ýP†\Á%$L]hF[¨V ÎŽ­ccµ”r¦Ÿ‰åÒÒjQqÑ…„6jG¨Düî­& Ñö6Ž|™2-ÍW¢—D´­òºS$€Rl¯;³ˆ?5ˆŠJó“q¿‰½-Ï.8P¤y‘“!ˆƒš¨`Ïìë@ÈOf˜~*ãA×p^ÁÑy‹ù¯I^§Ì,ÀP1ÀÑ€ñå—ÿ`ä¢xéªNÕl>i•JÌÌ%ÞïZl{Vk« uUìµ?a¶y/‹GèÕP…0<zîÀ4˜­a}ϱE‘#Ë Ðê…Þ@Á.ß€Ó õîжâàm&F“&œÊHÑòj㣤µζrNÏ¿üå¯ÔÎðÖæƤ¬+˜ª2U2+ÔQä›Y2r3â6&©Y&ðL{g2!#ÃX“ìa&œåM…6]ÎS$ÊX²H«Ê"ÚÚTFyÜ÷¬ÍLÔëb[¯× Ùü¸XWæ¿¡zIŠY¤E`C>£5–[Œì/͉¡O³Š<ýÄL:¥¨™(½YþáÁ3ð=ÔÀo~ö³Ÿ9‹¤žà¦wTr8?W˜ù úÝW_=xð°›‚£8<û4³ À6Rs©a)3C¢’N𩉂Õg"€wu"Lih+‰¼ÛÕiòÑž>»ßÅ>¨VÌ|=ãy «xDR½K!÷ˆl=,¢À8õFy}nºÙ&Fãß5$…ƒe³ÂE I³17Z3ìé×Pøc ¼9„ *RÀ˜C£‰ ¾VÝáôeeb=€Kä]„òȸ“;¶jÔ# FA/ öÌ‹&¬/\ÁÙlhZËÀ˜)Z§Dé*'íPoÈgH0‰Ššt “Á¥F70Âæ'å–Í[@Ü·n‚æuð8…éÁ×À 9õjij°ªúÅÏèH6Á£À‹•lG/âºÞÈ€ »ä'öÒÛìÁBË!zâvñsÿžl¸ð¼H“Ú{.á0åÝÎ¥•+´—#Å|6Bbuî¾¹©›sÃÿÂgÖp¦!±O[ýKlñÙS¦3`Ì(€-è¸À£['‰ïª¨ I –5^öþ³+ŸÝüâŸýÜ8;>ƒT™–`…Ü¿c–ø”× =Fë?#åaèÍ MQ¸g(þÂ5ASÈbÿ¿1/f«×[>Éd³Hláæ»ïž.Çès¿"„NÝV‡tÜd©;Å«(xÑr ²,±æÐj BÑNl5ÔLÿ0cž 5Ì@{ÊPëÕØpí7î 2Êo¼ÀŸ‡–Ó!’lúby®•†A V@†ÃÛw¼5*m :¨å|ú §Â¢RãPÐTfÏ13©Ô 0=<îCjaó>Ó@eÜÕñõs$ܪÇ2¸‘!Ì­VWh*¸ºWd?ÁÛuÓì­;oifB‘û³òtÉ\W7±ò$¨N|À¨œaå—Šñ‚xºH,¨‹HÖØ»4$òÛÒ_þn‹Âa˜XlTÚÇÓ)„]²Ð³Ý´¢hcL^W°bFc‘Kãx0 íÖGN¦áfý!ÿt\Ú½Ê8qÆ$ÇC‹,[þ¸:—ªô3Ú¦ÔÓ¶ò'”=×À„ u34ÌÉ«°X UhG9Æ)V;&´4÷ ­Ð¤Oøì$p­ˆL@ç<ºö*Dx ÷sÛò”>VÝ^Àñäm®Bc¬ÌEµ—$˜8hóN)ƒí¦ôÀ‰Ð9Ød罦ÇalÅ’÷k¥íùŠƒT„8äV Ujåð lô2¬Þ§{ÍšƬx:»©BWl‡d™\Mì]®KÆ-1”sô‹ÿðçzH“©ÃèaÈ\ína¿†Z@ÌOs Hà!"­òÚ•ù‹11ƒÙx!áAr\¤úéÂàl,s´æ¢-sÖoçïà@iaê¨]õ[V@e8?LhV;Tø•†.ÁÙóns4Ì.Zˆ†r-óhv ¥F[ç!—ìêµ-Vå{‹÷ÉÈá?”c1¼õhçâúÓû§xàjÏžŸQºQÆ«•üôA™BAg33ZíÓ.½p¹‡iÑŃ» ^N‘®R¬)yù“óú½³«ÐN—.¦cϱ=œsóÏ—g½úÜa–cäàu|® õ3²=+›Îq÷Öí×ö_Ó°w’µí=“ÈÐ"VÂ*q™y©“£ù–VQ—³ÞÂVöš¹#àôi¿ÔÜ-¢äåœä5§Y[#4†HòŠö´n¢.=u÷G&lr¬±¬žPWÀ Ì~Î(V!B¤ÖÊ8ˆáóz *¾ F¤:r®óˆÞêa‹Òæv$H0¿î±¦!Ñ'ä[V¯-qÔÓ0Nág%mu`—ð”H!ëèÙ.}!0Ú,¥Ç¢UoÏû”ž¢©ÜƒeíqQx€¹ ­)# ªAÚ¡¡³ŸÂꀉرõ®èkKc`;Ó˜ŸšÃ¶W•)YUµP#¥ñ„ù ÿÒUÐd1M–à'Š®.NY¦fÆR¶*Ú°>¼•ɲ‹&r½¸NC©—soÝ3’¬hü}óêÅ?þ_v=yðÈ­$ê…Â’’Qä°—’†œç.š€Î¬ZH€B­u¨‹S©™`U—ß”B HêºxoC’>™«ýCjÛTaÙÕâ9Än>ŒAa³Éý“V «%åAx¸“ ÿšÃYêz¬IXkTÆ›ë*aV±l€t@¡æ¸}òä[ÌãV•äâ5¼%f澉Â4*jAØj1òp«Œ=ôäý/é˜æ|C¤†Žåõ=ðã &]6À˜5¯·«Ü1OÍå:Ó»ó—}õÙ:5‰sãŸõ3;åJ;zC²¸Dñ“šxñiO`o"@á}ñSÅj²#‹Ó#>!_Y`ÆÌ‘·¼Ý|±Þ¾3rL(e‡Áç2~<#„½H"·×q&+B†+EW)‰Ëk7 m’o®ÑºÎ,‚„^è¢R¥Ý``214J¤¤P.Ç0¯VVé|Ég–riLÛbà\GÜ0ÄF†Åüs¬/`l WrÛv Â Î^@Â0ÏÁŠ0cLa‰Oì‹ -5ÊÉr9=ƆŸ y7Úfø†'$ÜÆ¸ÀÃýœn=®>iϽeø©K™Ìœìé6¹{X0uC8™L3/ßñHǤÝ%a”#Nw°+cÚØ«jpí*§É=f§–ÄäÌÊ?çE<½[ B<ÓxRn1 ´èê^B~”5†$³Ñeâ+|Ë TpýéŸü ½ûåÏL•{}ËÝ–}uË™‘ЂÔr՗ߌ™ ð:¨,Gœ aLe*„»å½‰ÎÖ„p×&5ÝY<óî]ÂðªÉÇóE˜Á뇤'Fç@…°~.]ÓC‘;rÝWn—Y tAƒ$b!mçO|ЋKüiuÍ-´]­mÛ‘”åÇ(úé¹PÛò 6ža†¾v÷îWbRñ6A‘¢Lyñ†è¢UqÔx @b¬•â0$Zf (3·†20g0nGqG>„´Ÿ#5­b‡ækiRsxª@HBàð0‡L $ç/íÞÍI‘øæ›oþèþèûïžBý£ÇŸ tDz£—mz‰F»Â¯[2âdOŸ|Ì=rV[>Öƒ)sô¹IsÃ$–t´äm´AczëpØ"‡‘@ÙäRâIp¥• l¬ù Ãç°‘ºá£†p‰V“”KÙdEýޝøAh›S‚z`Øæ'–èd¸naLY¥Ø…›†ä‰b#fBg¤• NjŒÃ¶úT¯9>× ƒÊ»ïêä²Àñ–î Sû°]hÀNt%„œ=< NÌŸ³$ f+m–·äH;Ì©iÖìÇ”4áWBýà…ÁÐ?§Å6 †jùO«Bz_ݳ¥y™e]` u«"em5Ī d;Ç(ÑŠ.AH„Oœs€rKÔ5wÆ•œ1 ¨d™ ¯£môŸ¡hz·&ú¬z­Â©èìÅÙ{ÏÆ{BþÝ›Wï>ܹÿðæÜžc@ë Rè¢á2¶èÁš´êA9q6VäÒЙ˜R_Ì {S]zFžtr¤ÿæÆ Ç¥ë¿"¡7}¬¤ŽI‚°ƒž9ŠfMâúÃg,ÑF1…ïÆþìОžÂU£%.ñV5ºŒoE¬nuJq\,•2àV|¦&¶ZÚwÅ.–›©Ú þ^ÃóÝdé’Û‡ƒk?ÜLJ?&éh ?D¤3v ÿñ¹‚EAcb¶ð6ÒEýJº’Nik_)œîWÂ@.Alû¾‡¦Á´+¹w J’ʵµ…?kzýÇ­Z…=äñì‚Ì‘**Ó #z ½/“×Í—RµÛ¶™€™5}­Ý3¾_9;ËXl ›r°Ä+‰Ëßð/¹¬fÖ>èâ8ÓƒJajkàRï804Fã*¾@n™à ™F ¡”'8\l_Öè“(J°Ã³!w©¨!…­5s3ÄèS ‚ÖK«ÀÔè Z+ø)ßôP!жoݶÊ𜶠DZTGQXf þëƒÞx<£ª­T&Àš­uÖX`ˆ$O•ÞœœbÃÑkŒç¸Þ—c zºmX‡‘ÌûØð°raU!ÍŒ§mÂÆÊ(¹ªSú‰"Üù o¹Ú–ëðæÃtBnþÆš¤Î+.Xqn,š-{y”"U³Ó\%5R}Æ‘ë%j×´,<Î$2É;|‘‚Ó%ä¡€¦Þê¶Bß÷›dŸ&˜ñ8¿´Š‹qü àÔ{KQ5`g¬nNì×Õ³—gö÷pÊR7Ÿ ¸úAP®w›ÃÊÝÇë6/ßh9d² DÆÞBW€BEy€l—öüÄÚÐzëIA*br!^¦a–Ž=Zò¥-+XÚK$½|ùìéÓ'¯^¿|üø‘¾,ÊÆq­·V-Á-pS#”òVo‰ÀÊ9ýã[â§÷%JúÁÙ¹©ö W³Ó‹Åõ:O+L*-˜r\y€¸ÐˆÂEoܼm4zùòþóïL‹½ìäMJ¿úñäô “h>z|þê•·5>zðÔ:'§Ç]õö,ZÛŠX´µ*cÛfÙ—Ó zØ•¤”Ï“Ò;CHÄËzK±•*[“3}z¨Wö‹ƒõ¢–s-ÏR;½ÃÂCõãÖx{}¼.¡?yÇ› CÅ^wæØúçˆf¹âªôiÇÌÚƒäñš[¶/[bιëánˆÅÞ·^î•Qó)C’Žó(­”Ð1ö™Í’×oœy=ÄLÉóÃ#‰ÆÕ£w$º;3¸úU‡%—;w-k“Œ#Œá¼&ñ¦ú5ÓúY<­cx%µñBé  ׯy¥ÓkuFÅ™ò"¡—_8ý4±®Ã"ù‘ôŃÌ-¹—é ¼ÚUrÏÍ#ÏÃcm%mòÇF6D£báÒº˜nM?"Ýà) &Rƒäÿ˜<@€®]Ô¥C:‘)ÑùËWâ‘~„ëèÝcêÕY/Ïô¡LÙ2R‰©9•!*A6:Éò|8¨ûb:ÚÍo¾ùVo4¤Ÿ·Î¯ð·–¥>^3¯Õ_¼|a üìÅ«ŸþäçMLŸ>ê îVÏ+s|óÆõ§¿ÿ^F!÷îÜÅ’Vçç/ pƒ}¢*fÆ8ÏyÑ¿…yé`†"yëbÝ¥Í]ÛZ!é̾te–ÎóG¨¦"„¢Uqw†À¦˜æå@~Bî'×IiÕÙaÄ{VPŽέp´ácãâ,@ÐoéžÓ¦é³ÔÕ#uËYÇÇÞ¿8{Ê¥I{î) ›øãUŒå§D­Ø:ÑUÿRƒ Ël°sâúæt1ýnaXŠ„ƒ¡ÉHpk^ît½‡¾»€e‘äË6v-˜³/ëØúOÆTÑ*_è½zÂ$e|÷Íïôšù,›@;ë‹Loäñ6¡ðtF_H3ó÷ÁPw‹|kËI]ÒPÆcÝW}§!¥a’cŠQdÁ:ƒâVPÝîCÍNô£P”*†(1é†ËP‰eVì °0 „Ï{$ÎÝíxþì»—/­÷ÿºÙ5o‡ ?´­9/RÈÝíñн‹·&Ønb >VU£: :Þì8³zsN³hŸ¤{ÞîV íNk`Ñ÷òÂØ€{D›©»—×4ŒÒ€K–%zúl½@ÏÅyî›uóÚ¤¬‡[æ' íÌiÖ‹²Gm‰.Ñ<ͧÇèG\Z믞½9ãównµ°Ó°î¬á·ö¼hiFÚkwnY›ÇiÝfEÔ™rÔJ†`ìa&õÌEH— ªXõg3)Dlhí.Ÿï¶2·)ç3«YnvsÓû±h Ó³»H;ÃMS¦ttçÁ §ôæ¾/î[Ñø½ØbGÏÐ8d,ŽvÄ,‡Vùþ¬V¬J•­ÕdâÂ(¨nU‰WÆ+¯M P)|?{ÍùË—7nƒÊ¡¬:S³éœ ÆŸýÙ¿Ñø+O]¶001eÕQwÙ½zjÓëÈCMÑ \]Çu&”K dQX´[^¨Êd›XÓÚÌö*‡J¢žµÊ=©U¥N8”‹¨Hy“KšÔROŒÈšÃõšÎ’šXãywqÿô>™Þ ”)¯Á ¯åO:ä0ß;YKKp£ˆX× (ˆÃh½·.J"¬õm¾¡ÏÆŒë×eåú qÄL€Ä1ù”ØåÎÏ­éûÖØs4}ŸX' #9: ¹ùY~ Ãô±ÒA—°!¢XI;¾«KÅ"—G'éÙ‡nôaŸ8¥`š;£K(WWçäRI‘Ž ÊÃmÀÞŠRPOÕ.í!}TÀ)‡Üc#ó­8î.¹‚†:¥ Æ$bʸwSd€xfzìÛœ[¸4—À“ñ@>•èbš1|rŽÐ“">ß{Ab‚ùT4¼xÓ¡æèêïæuoâýÕGŸáF9¥ì!q•ᕬ®»ÞOx¸ïŸ2N}'°æÄvVå“ 5zÄ:ÑÆ(z‡•å[:Jû?æû¾½6y|€˜iÕ™¶±G@c'»¸º8UÂã'œ[#ä4šÎô1D/&0<À¿À¢ • g‡z͹g´‘<´úÚ°& ¼Tp‚rB¡I­”ß§•˜DxVxPf)-ùbߨyÑò‰¹ÆÆ¹„W.¨ÁlØ@ ‡Mf'z"NlE\GZ©„ q‰Òë43CŽN I R]ÿ1†÷’%ÁãLø ‚¹uf²ÀÎW–^å7Þ83Âì+ä‰ûyy‰×‘‰ŸÊÀ˜ÆYº•ijػNë*1b#FŠ8À¶L³j²àl¸ñ3›–Ù£†:²ÙVé9|ÂÄ_ÉS÷’ÈE÷š{ôÞÿÉà}¦F‘ÓÚ]áÙÂvsV¤ry}?ï2QƒÊxäÅû'OžHÎ1€ÚpXÿRv6u^»h˧xìL¸›øwT òøCF4n‘bjê&0° >¹ÌŽ1k¹:²Ozcxîå)dÖ)(´@Yº-™À(Œ\\<ýþ©O˹tçö·'YRGÂÚÇyXpHgMǸPêb=—g}]И•\šŒþ&¯hvÄ9_ž=¿{§ ¯Þ\ܹw°â¢9¨Ÿ‡xø¤‡ 6¯Ñ÷M*æ[@²¦‰I†uW#$Ÿ S£»DCî­^[£†Îëmvb7•kQúæÍÙ9TøVLaáRóµn¸¤í±EK#®Œ&[2Ô k[XrÊ€q¨ !­ÂãÒÈ ‹ÃE £A+~ Ÿm¦è¦|ŠÝèJ:_·¿‰ 'bæRXe5,–œ‰µâPû;ŸÐZfÙ;uaª™`š®àð`(æ &lÝåìf€e‚l)=ºr €G”á;=9‘¤&qÅQÝF<·NOø -&5¹§Ÿ ë‹}¨À”`çuõ>QHŸ¤+ÇØÚ¿©N?I´*„hTJ ?iL ¨L|c+EqB¦„2´Hô¹-¡Ÿ(¢HhõA<¯Þ•ŸC hú~B®=¤ùbH‚дdô³ç:,G5¹ÈBèjÈÛ1ã‘!ä8ÖU¡˜ÔæMW\Å›¬ pO—Í0J¬*£8}µV8Á³³ò°×šIÑr^$B¼~|ö¢m¯è6|LJÀ#,?~xêî'Òrhll|pÏ ˆÚ36³¹îŸ4¶Y”» ¶P­íu@¾…-[´-êõº€ m’Sºæû2<ãoõu¢aóznhÅ6C¸J±‹ÖÙUr¹”’›ˆö„5ÙQ¬"‚~¢M`€W!À°¢0Ž‘@ÁÁÿˆŽê§KÆ_øÜÓ¹L9õþ9úÏÿé?Ò»c½*s€RéLÑ 8ÓØ•Üao?¯Ãsè\]æ†ÑOQ›ãÓ¥ÐȬIÄèø= -s®BåCHÍÕû©“:òZ•jö,¯S€q™‚ÐÉD8¢®K{©¤´@®\f<×à´íÆÚ>08,£ˆËÚN íeWºqÀ“>"ÝjrÇ"ýâ©‚¼/¥¼¤zÆ…&Üô‹i¶ã9VE$R° ÆØRw¨á2ŤøÕ'AÈí*×AzÁvœ)Ë4u‰Bsæ …ÙÕ®"ˆz*øœu(1£ò{{ßNN}¾­ ^é{|b«„œ†#º¦à Ž:ZmÈQÀåÒô‰ùá?Hôã—w¿g—ª¹WúÃ;¯/µôF>^…%¦a)JÏiûÆÕk/{ Ýz‹hÛçhÊä6Ò8O’bf¨t‹„7ÄÆ]½‘].¼lS&Ñ;ò«éšƒtÀïœ$cª ‹&¶¦ª<ë¡í÷™´–®ŸœÔ&1ìNU,Z^ÁÜíîšx‡¸¶ô€7õœœM”‘ÚÂÖ§¨0‚O »ˆ[eýIînrÉ(c/½z‚ÆÈ»wŽ5œL‰ÅíW[…kË Œu ‚ŸÑOoRä’ƒ½×±§¢Ê”˜i"Tc7òÝ{wûñ”N IDAT<6!ûô!‘]¦§†V‚­·9D‰F®ÊW¤×=Ž@“87@\€S“hsŸ´)Èa?\Ùæ\ʃg¬’`IžuK~_üÁºã”w r‹!@œ,äÞM9·éü@½ŽO?æ¯ÔZĘ;J,Ÿ/5ônïk ö³W_µ$0ȹ‰™º¤˜ÑèöE#Ÿ®¤N KW£°ê 9aV[ZdW¯ìrõŽxÊY‹r ûp ÿk0Ç·«ðÌ[Ÿœ+Ä;¸Ä;²×àIÑsÀ´zÚ‰]¶XÒIa/A0Cd[¸fe€Yä‡iϸ±û¿œ€pGp“7*×Ü¥'Ç_ÿî+YÓÝù WoåÞÛSxåÓíÂ5u±ŸáU ÅH@‰ Î‡Ž¯T¹Tžð©^¿PpdpÌ;ÞðÃ9 åX%àZj§[HVW«RÀu€3¡xË êDÎúØöËøa <` Ò–´…Ó¡—Åå 4þ‘›Íxôê"Àr'2º4~X­SN0Ç»ÁàpMƒ¢&ðldPÿÉOXË%ìQEôç°â’z˜T:ï¡ Ðr‡Âz¦6móÏm†óýܧßù4…5ë’Q'È[ºï±ù®<5ß'/½8å$>(§?¹D¯Jg‰“.Ô2×KÑ™60iÿwºMènÉ ¯b“&ðr``ëÉÕõ­woloe7Ó¥‚€LîàOA@@!óβÅè§ -D¯ÉæR ð‡ö6T -0ð 3b3Êl&IõSý$XÍšÖÓ6¾qŽ£ÿôÿrl‘ž¡X Ÿë‘°ÄãA¤Vù(Œ‹Nî&D*ƒY‡&˜ƒâ4Yü ‹_[—0„JT‡®œ}h5Â--WÕ84쟙ŽÀ°l8¬=ggŒ&nVZE ,8g„§jû$Š‘;Þ¿óŸÙ'´B×Ç0?Ç&"ôî¼nßÖï@Zþt^‰p‚C·¡ž¡ü +´Ü³†ZÇ «qÇHÙÕj>éµè0HM0©cÐ+|$6:É•ádxÇ”ë!á'ÁwiT¦aRÀ P¸+Àˆ£‰3‡`œÑy´üt˜è®6°óTw‘M^)àü|µÑ]Hj!‘Ç"…òÐì[Ø«X¬~Gj¼­éí¨æi'ÅwÁŸ;àeƒ^"o*™+^x=¼ýá·FZk‹›Zð¬Pú ¿ßÈUƒ[Æy#gÓqÀð@›¥L™îZtôaõç’ÑÛwîI°Î^<—ÚË—åèhéêÝ»±Ü~áegíæš&—à'&y”Ò ´ 1£ŽèHT¸[% Ÿk\|ÖñµÅŒ«šPŽ&ÃxÛ`Å¡IÖC؀ƀ3ûIãÔÎÀÔë KÂÙAçš{&EœCŽMøïVÊôqN8mûp‡¦1>&ÂÁf…ÑYW„Ç¿ˆJ|ioÂ{Ln"¥Ûp‚Š\~"ê0Èà\óõŠÄHÌ+|bO+Àš«¥AÖ¡æŸV‚ÂÁÃ`@ßpÿ¾ÁE+Û"BP\»jÝF‡(cl?%µÈÄû>šÚ"M«R‰ÜH­ÙŸ¸‚“7bÀR‡+Ì­r#5qÈž€3ʤ¡Á~MÌ…–[é/ Á8VF`öRO“øÆ®jŽÃåÇO‡Ÿ~Ì%hUbLŸð@¨µ> @?ì"Êéí€]…v„ýè/ÿòÿñCm1¬”!GÙ3¤òËÕe.|/=çE‹&€·^!æŽz•°­$ ¿ØÆ<]¢ìô2Q°2í•QGQ+5Ü^ï–„«`\@£›P¤jÝè0qÙ{Ø+Ë„ÑYñÓ›?ÌÍõ£¾h[[²:#™š"dŒEÅ™äPÖ®Íc@8›WP'ðÃö"Dþº¯1“gáÄ*ŠlàП?9ç¥4!ø[”YvDì=B”tù—Âi`*³ôFÀéäã‚g`ÚQQªÀâ¨zÊ_·@z?x¶ú¶w‹÷¦¾D_øöÛo<¾áË—¶‚Ùd €n- é€D+È­xÙCZ,úI‹ßqêX+OŸk¯¤Üõ˜¤c'%æ:¸…m&+öK2Á …Ì–a“a#߸víôødÓíe³zÅÉI å…Rïƒî{6~@B!Ë­s4ŒYÍ=¿ӎ]R£ –!=P9¤ƒJéÐ,rÎ* Û–0P C3¶>Å äfc—%ShE.·ÞŒˆíô¼¬.¿^¶Tò5:5ÀX±T‹½L8ÞVÊ . )dâ­EœvìuëÙa‰”fÖ ¨wmköŒ?ÆÂÞ¦>·nöÒ?WaØA /ô#ÚÒU7³‰¬Æ‡¨gõöÝ­¹ÀýÝDîÙÏîŸÊ qÎÜB*¡Ì Ó`#ubÛ¡§1yHÝóÚ éõJG+òκƒ ‚·˜¯]3~æ·QíSܾOî B/3¸øøèñŒº&#øœ­î³ •2_q )ôIó¦@³ø6b7h¥¼ËØôP‚¦m =¿Eeض§RØ3Âyãâ„­^™Æ ô-Œáp^çNY/HÛMZ*SQ¿½•?*`igVFeäò¯Bþ†º2§‚!…Æ"®b'Kb£W*êCR}]˜ch;üã<…ì†kF WS>ÜÑs•õ°@ÃÛ¾rXúæÐÖÕ~0¨A½XGp¼‘Ñ™¥Øo;‘ÓJÓ¶/þà'X¡=obîÜ»«ò‰˜ÓS“Ò„¦Åàßúª¦ÔìÎá*Þè“·ã4ƒCãD¥Ÿüƒ~dblªÓ–ö8œ8qÕIJÆLý$—úÕëàÁOŒ?n>Ó{¶¶)x0p®PÊ‹¨ð8Ô;Ðã€çÖ‡YJ6_I28ÝÎn¢Kipªa8}d¾"Oô¼K8W#Aü«¿ú«ŸÿüçÓA, ¸C}fç¥`‚yÃê 4 9­,~mq¸n  £ 3Å´99í©T^=(cÞÙa—™PÀœY'Ôð÷¿ÿ=÷Ã] –6¥XæîÞÖÏ~j³K¾ÎôCµ}${MÃ#_½fö¨†ìËŠÆp«­² Æê½;M¤©–BhcWŠÕÒàžî–‡kè¼ýq¬ÜœÄ€ý„°’š° '~btœýiîÎÕ ËíÊ[XÜ%?ˤýƒyx¼÷‹èàÁl _`O Ö¯1¹ˆ ÆÓ°ØüI3¿1 ­9üdZò#@M‘ÐÃîëa?»DUš;V0<¹´Lpì [%=C@+˜· Ì ~:¡‚‚ÊOx`á\²&,²‹æáŒ± v3ÆÍkfC>.nߺk,”ubÒpõ×ý×Vñ»¯¾´¯†I$Ìþã./E³¸ìî”j˜—a]âÉ{Ô Ê±ftøuMæh€0¥Œ)™°Ò·çö -é#Gǰƒ‰ƒ¯õ`!Ó84¤äçÏž÷ÕúI%‘³ñHµIŸ9ZyÓ÷Ƨ!A”6 Xr±zÈü?«#j`¨kËpªwöS¥ÃU‡Š³C ¡‡JJ­¯Jµõ¨|R¥‰ð7aݼX$Ïž½6¥X´ÞÀÇöŽ&#ðñ¦·ó³^ÈÄ´ÌŒm,Jèä}ÑäïHFÕNÿ‘¼z€cÈ’)rè o\”Vp]ÛR]ð9ðܨ5 ÖYYª¸üá*·× š“‘c'À¬®Ã§•3'!E{ß1Ö˜Þú––&Kk–É"'Ç÷‰ÿòü‡à-ðXV™¤ß«%Úá¾;ükŒ‹êÁÔeÅÖè’?Ì}:£¶ÊèŸz]šéGƒ_*Ÿ¥Ÿ÷oŸ?ªwŸÞøÅO¦Z¯¶Ë„2Ý)¥º^(ÕMÇÜoòÙD¨|È` -Ôî`mòÊnC8·—z ƒ ¨ÐÄyÔ›óh’ÆhoQ¹ºÎƒ ‴è¶ÈL=´ÎV·V¨âàâ‰×µÜºmYÝO>a6ÒÛ;ÇJ»2ÔãLã«·¼1¼›2íé¯k¹/˜¯“ÎÛ½1€”2Ë.WÄA”)É¢ƒ£‚mèvûêf5uËŒÕ= dSsæÈ‚˜„˜c1[×”€úCÑîuhYØ|ü„eçv#üðü…§ëîIÆí¿õ™›¢» Ìè[Ç/+ž´Xsè"÷ö“–о]vtH¤Pþ1Ï"ðàÚ±Ü)¸Š ‡‚Æ3À)6©tFeDhRâ`Üqã²FQ±ÔaÞy¶˜R'F?ëHÁÔ£¹us½žQè¼åó𚂚”ÿ®åy½¢_ðçµÆz&‡iÒÉñ)¾\Òg !áP°Ê9%÷Ú`“ÔIíì#üq}Ÿ¡«~Þ%/øt¿9n¬Yœ•·p©ÿš`È\Yb`24?ÝlvÙÐ0Ç.®¹evafã/”j%3ß?õþìeÍÃÛ$ÇþH‹ÿ|’ãê¥ìâgï‘ÿÌ7OÏŒ[6Õl0Ʋ&`ØÓx=¨·¨B'­$,%;üTrmÝvêËîz„˜Œgƒ–À84ÁǶr«rh7su|³»RT4n)e+â‡ÈÑ_üů€g‚å{ú×iG›õ$ååÞ5`«87ÔQͨ ]ƒ¡§90ŽÿŸ©;íÕ,Iû^Õµô­ºK­½Ðœe‰‚8 ÃßJž…6üí$@o ¦%‘Ðpfº»ºk¿µoþý#ž[ÔéÛ§òÉ“{F.'Ïâ'ÆÈèß³F¿… úN'4v `¬œ‹ö¨¤ÀªË dï´¸ÛÎMjaš£8·]š–$‚~qŸèã0@àK‰_Dfÿíoûgö¬HA†ÏAŽG£d Ús|CÓØ©-ºw(ÑP²ioZÈÞÛˆí}êÌ¥+³GÛ]º®uo^Ú²KøjöËn¢Q÷Ó„¿"ØÐÍ4°køÔ¢˜Fä,{Wú3?¹'æ*aTáe4|öSL3Û{‹Í#{ð¹<ß ¸svæD/>yü䧇?ɳ°Íåáÿ‘iÈ ¸´‚C°ûp[ìbÏû/djv´ã£çë =•uÍ 8çfÔeÍ'S Y"Äî|õê¯þê¯:޵Ÿú&8zMõ•ŽÅˆòѹÓDÁŽêʤ{õ¢"¬Ú³¥7mz¨Šýù¹jŸ¤gD”KE#FHYÇp ÏOåSÚËSOYY2²à{µ·µ ëäD¼ŽE¾ä}¤ãäpÁÔO(Ì·b• ñÐÓ)b>>;³e+Ű‚Ÿ/&é«”âwnÝ:År\ç ÄBl°nÚ(ÎWEJ'Ÿ°øßiâò£¦W…_Û–¦’㩦 ˆÖáìé§2Ë=º@ʸŤ½Múß|ó5SÂÃ:εh®$Nž8:o%“Sgp™&ÏüÜ+78,^xý¿O&cˆ5¼•@ öKx @÷,^¦ÞßüÉŸ~yã vœZÒdÙnAAW?¡žF¹Ër~š×:Ì5'S/¥LÄΛž%,ïê ulz×£G•Áž­…Õ*.Ç$>WLjãÇeJ(€±bŽ*ûQò¥±jÔÆó¤¦äÖÕ1Í®áÕ4Å[hö´ßçs¤ã¦™¶Ù{DÕŽè*@Œœ€rÄÿ‘u–‡F¶! Ë÷“¤L7$lye.pn.S$S V/ÇX=“&Ä´øýî}û81Š¿œEx/ÒkožŸžªâ¢rÇó¥`©†ž‘qðÏ žá¥ Ûyš¬œ×ÿÆ\‡—d)§Ù#”šó8Î#Mç=ËLMzÍœ Õ¤tˆ~Ñ€··ê€à§iD > ?ÜÈ÷³qü‘Ày÷•ˆòË%èI`ŽNn>é«‘in¬^ñ O»Ê¦9 ƒø€@`×;QlÃxà*L@6 „‚/G$7goYü¿Øgçš­(¡¤»ºuë,HoÓgˆ“,0W]+2§­ƒXYËI|øŒ°?UôVî lB+8n.¸ÖõÌGvü‡2´QPüþc_AåÜæª Eæ®*°<›sª­ëœß2Ôäºx¬‡&àáÙÌ Å™Êo»׬V2mróèXúÃ?žžÝ¢ ãû…ài©Zk!ä $.uT&„–£.&¬vŠjÆ.›½zbæàÙs Â%¬Þ t‚LR3W´Ò!QAF1è«ÏžŸß»û «x~þôÒ‡wà7gÕnG”Ú"f!›Ö}¼vùê£ê`îïå),šx­"-š¥‡à#€d‘ƒÞEŒÙ&®Ð¡Û­O™ÄøñÇï99ñ±Ù;]‹þÆ€]ü¡c³={úØ; Û1üôàÀâëÿéçiëÙŸ>•ÁˆÑº~¸›·à] §8¨™7åÈ_Ÿ¿bÚ§'†Ik¶Œ*º¡èÞz` ½—e¦ÍlY31}I‚æÐb s9ìC—ÏÏçšg˜§Aµ/ m çHÒLhkhÞÿ(úQ†ýç&R1çx'ýKÕîÖº|ééã?<úéþÞ#v âÈL‘:àÍHCOÔX +ƦNìJˆÉ)‰;‹/E¾?æBßœÞPî¨6Ìá‚x‚£¢P8(2sFm@¦Ù3³Ñê7¥€ zŠ+a"0rèŽUˆX!!F& ‡ª‹û{»«!½;ÕÒ-Jëçé<¸Ïž<Ó:aAdæ,> ޽÷`Ñ\¶8»-.ŒÌXu¶ð¦ 0±½ýÓÓ§5ÊMH¡‚’5gР:‹™]7…³Ñ”aÙ}qP±éìOçŸè.ð“ʲ÷5t™û„hÓ\sÑU¬È³Ôƒ O¦ó*0€ÓxQ>ÁFd‡®9§‡Ê(,þñíð¥è‚*€3Zî…J$t| ¯³©ñ9Í©AŒm3p4”m ÷®Q­0: |åW¿ú¥Ò ªæ…£v„‡¢c‘—Fê>LÑ$âÜøšñ¹z·ÈPUÑ1#^w!ºD€’ H7>*¦KI` èÒV‡ªZBÖf~@´ÄÒií~@^g ¨’ê°‹ Å\uÒ$¡sRZ‹”J)”ÿf¿!šR™#UñÔmCln!£ËÙ5ý%æ(™Ä{¡Þ\/;M‘ßœ ÉܱK3­XA¦Ý‹¯q~4ÿ™"HÎ QG›Ç… ¥+X¨Øà ;/ÅAæå1'Í ŸGЉiä[â²Ù‰*|ÁÌE_·ltëÖ-OMe©">om|ó'ß"ö«o¾Fï¾ûîÞ½{YÄõÿ„1´iöò5FØÌi.jDjÚU‡Ý¹¶‚’Ù8âä }«C.Î…¼|eN?a¨ü¼Þåô6ðê³Ç¦Á½›fÍŸ þš#ì„!ÀD ž õÞý¯Dz0_yÁM¥»bp㯖 CÁ/d7$´[n<‘mþ¤Ê‘€¿šÓž›éáPDOÔ²Ú¥ lÁyýê…ù$¸³™dj,kQ, k½iÝ\ÏìU:91áã)×/í)TÅà»Àt­R¥Šy..`þÀ(˜vµ;©ô©Ê ÑÒð±Sð’ÙÛ–œ(kÍ—1˜U¥hQ+/óÖ^º—ËÆ( /_ýÉRNœrà.FH-›òôßë—Ož<>;³•¾Þöô´W‘)èÜ üþcþÙÉ)>°>´‹ý`dÿdí8* iÊr-õš¤ét¥“Œpfàý$ˆXû…m‚¯n j_ŸsÙwî|uz Âñd&Íûôà†¶&ÈÎWºdÒ@Àûêu@Ž‹å( "E2N§~ö ›`n`ˆ6!oÐO7움cQE¡­†4­- Fꎶr­ŒÛj€0;óuÞƒN¦4퇪IYlñdJ`=‰p€CÕ]¡á˜>C¿c¢¢´LšÀ°oÃËMH«Þà¶.!ˆ ¨Å‚¤«žÖ7 Á%€¼1‘Ÿ)aÉÝZ´ðgËTcI3Žèæ«Ú« ¶«Œ›*ÔkúpšE•>C@4¬e#q›¦©(Òð‰NÀÍ9Û©£grjš³oÚ·;ŠÂã$ú0°¾§ÛZ'€Žj¨ÌÐÓKD˜r{¿n\7BÏgnQ!ˆ…Œ&ð̽pæKâË(Ÿá@ŠŸÁÑЄ•}Œ7NIÏ{·¢$‡© æSƇ5d”‘£Nbþt!\t7*Êã9÷H»PéòNÒî.O¥—ç±§!ëöç“¶(€ËñÓeüi6žÑÝÈ©®´ZÊà˜Ä˜U½0Ñ ‚þS9¢„çô3 À…™Û È[·Â<„áOJ~ÿþ}׫™Ho«•PÐAªø±,‘CÌ*º`½Ûæ6ÎwÁSw‘“Ÿ0÷S1i ¸© ´ûå®ÚŠ‹öVƵù£¹¦Ë@PË"eÈH{2=š¦Ã^ÂφêC@µo>Ñ0ö•›^çÒ¼EøK¤¢Pqå¦eb{8‹²‹§ÂŽð¶W££ê#@[žbˆ*ȳAÁŒòUq¯ÖÔÕ²§2] LZ„€‘qþed&Èoa!¿Œ‰i!8ùPA¨~´ãøò§cŒ—ÌgBž` 4œÌ‹©¨ñÓS'46\@¿æh6MB¾Iéçóž‚=/›i¦šåQðµ¢]‡AW‘kãF|L1¿A”(æÔ‘Ð`máa–Ìð— ›¼I¯•’ðAòê’`Ê$éªÌëx¢¤;¬êbæE‡ÝØÚ›‰fp‰WŽXßÐ\|‹ÿ¹[ܘ"šË"0±Ý¾ý³ŸýLë>Î÷òEŸqLÍáàýˆ™ÂÑI1DjWé{÷îr»p[AZÅPµI¥·Ì ÀëÙÚr6dîrÞÓ)©¨«# :òÝïÿÇïþ`6ÍܹëDœš#?î IDATŽÞ1Á®-SÔ¦+¨[2ÓÌñGsúf™¶¦BL 0–Q°wbHÄXüºÐdƒ3» ñ•DLPysQÆB>ƒ y’öIð˜–0nÞñ3^<¯°òÂg¤î'³ghk…›„§G‰àfßäF¦;& ^õ|PrI@f+"ÁUïÏDQ¦ZTMüé'|Âø¤=¹s’²É^šÐF nÂÜRKæ°ú£jÏ@H@™ˆÀÏ#öÒv¶,&_ø @«0m^öÞƒ‘FÏGóŽê<›“·ˆ›ø<%ßÅ6Íœ@‘,KUD„­î'’UäøÄÖ2-ÄNô“‚Ÿ˜Ãƒ’² ¼èîÃÛ›Ç×½Ãíû+(‚U²»ôÁÄŠ0MÎ>Mù~ª¢æ?û°k³’¿ùÍ/œ’qÏ|æ´§ÅP^@@+ËQmÉ]ÎÅON'ñè¢W •ae{÷w^h![¤a·ðÝAyd>9kë]DeO†Á9^cXb0øjQ<÷ÅÌÕQ(‘ÔP„"›è_VBE]îuä«nÏaA¬÷ä[fPX£0Ñ„n@;:51 `¶¥ÀØÈ.„šf?ãÊð« E18¸å“cÜhO°8Ÿ´‹]ÇìRX•MÐx’èrÞVÀ.HªIÕa‹LUø«ö†FVm„Š3`B€®+ ]«`|œÉ áT £ŸT9qДÎîÙÓFúKÃ[„ ˜×üTÄðÊ7¤Þ¾yðÃ÷Ö¹„vIÊî Ÿ¸1O:.yNHjiÀÕ.`·(õę́%bÝ–‰÷/™I~‚oþóÑM!Ü— a®9ŸŸ÷Ž'ä…#r’`2lD¥¼ùJplÜñÇ%ã´v!†ƒø†'§Ð&2<‡†LéS™½ýäæ±LÛ¤33’Sþô汦ÜŒN„Dx òŠÙ„KÔMXC„úÃÑ¢KNЉòbʰ|ÕÓÉ–8-–ù(ÐãÕ(iN:bÆ™B»gÀ€ `R$A[‘:móy§^AªÙÜ–*p’rXÔp×ùÄ›e”™2̹Ã>¤`ˆ›,´±ÄŠJŽ^¥ÏÞ!Õ#*Ü|Ø':C¥M ´È^½y¢;/"±þ€‹HA$ƒ‰Sº¤:a84ͺ—4Ô¡UIÀ‡-hY>°=´æØ™·­‡¢q†°ë|àÜ2+H(52²ºøÃƒ?²³o¾ù9‚,u9¬ñïôȵ…d¸õˆ ìºé(V—«¨SäâÐjÑÛ76#*l‘ ŸÌJ:¤TI@ ?UÔªçÆ1™K£4u<Æ3ÃYf«JíÔ÷Yí•ôoT “;lC\TÆ¢1Û óìw^à•é§L¥¥] ËÁ‰@Ôã4ÄÂBwîYô[mq£ð8DÒ „Cðýlù€ƒÞƒ·UA¾Zî OÄß–{XH QÒå®ÏȬäŒ+gxØL¡F­Œ°Vxª]ü£öáÿå±rí êUv³kÜì¬H/ªNEóhÞS¾ÒNAhR†»ô&ÒþÐô¨˜+®{Omlš1sÆGa”v=Çüük ¹I(lW!ð¨É6+³DšÜ¦¤»Jm¨Ã받ѫzwÈPZùeŽAµ­G»aéϲ2$Jð,X4Ñø•ì(ÚܰrëÀqW^žø‰E Ä𤉔ª¸<’¿‰ÍΪ 2¦$3±'2^Ψ%Ÿ“Cˆôhm,€æ´ÈToè2«Êú•qy¤:àš$3%©yŠdéyÄÔ„VEc^‹]|Üq_|\b ôSÓrX°~jB]Ú”Ôð }GÔ¢A4„ôðÄÔRX4öàb ØDóÁ±Æ­ U»vÐ \”T $‘©i£…©R&¢\DÑÈšˆ·–&0|®j§*â ¾G£®å“æ+ãQnvBU0ùD‚\W–i ˆZþÀ‡¨UDÚ@ˆÃÊH»´î§ÄòPb+“EÀÜhMÎ(³ùË7V ]àÖ:Ý¥xÎë*ŽºÀJÀÁ5‰Ò2AØüM#A>Oµ”E£½†+ÈÃÜ]Žé oyžzÊÏ®Ê$È–”YþX"Šx0÷}Õ½ÓúÒÖ]Æ"ªèjv[BYãÄ¡¼2L |ËtëW~ùx‹0þñ$ $*ûì2é,A>Ô]ž®®HâKY£ÊîÒäÒ;G…e˜•0¬'Ç'÷ïùøqkXFê+,ÆlëêÙòÊo–„2’é­¼Ñæ/.L9L7IAû¹9…1´êìVÏŽŠÅXWXuý£ßiŒ>mP_a?ñhöšô) ÂùP¥xÒF4¯ã2g4x—EyµÄ§=9# ¤(óZÍic]¢Pp&˜”^~j5Jà#æ›ZÒ"ÄàP‹p°nkqsfÈÌ#"\? [GÆù™øÙH™ªÝ¨°¸G+ÓUèK˜ŸbZZ¢ ¨fJºâÆ›w ƒ^ 5àLS©à·ß~ A|óÍ7eµ„/4ØÄ’å¯ðî)9¦îxg®¦ JD-©û‡‰ð…MBLowëÖm=ÇS›‡+wÝ’%©]Åu;ÊI‹Ü…PÒ.ÁAR+"n>@7}ÓÞo]¼LiëÈÕâ îsÈCiwúýÎîgÿr@°íš¦ÆdںĘESÆvº4 OÄîjSÇqD ŒÈÁÁ""Ð5fi\£°‡6h8*_u¬útxÕÄÜÅåµ&åO¾E£ºIÙV!:o‹”„fÄ6>31 ¥­Ÿ>Z±{(á‰Þ†&ÐU%0ÍOÛý±v}Á® ?‹Ðè›>dN'õ•+ôÑ ôv.$Hƒà—üeµ´|ºA1tôã‰]j3é,÷íT$TäNª~ùª‘ÿØîÁ'\ùõ¯~5êT«Û@½óádó$ù¹UÔ MHäßÅ6*n]FW~\0äÓ²Ùí„5ðØ’ÒÔQ±\üÌ€Ö£YáÆKÛ¡È[æ¹®+ÍpÀÁ[ÛPu#-zäR“1ÜlšnËg}Loð)¬™™º¾k¬¦× Ôò§õiªA*±é²±wv\6ßc—iÊÜÕ«%£ôž´’=GI©h¯º‘ŠA|'ÁÚ^ÐóÚÉbƒ@n¹ä…ô±­2ž4ž–ö¢™»Py0o7Üð”! ¶ƒ‰Þ1ÿ‚þ€Ò]Áú–G“;––Fæ?© ’«@jñâº:´kfñ³ŸŠÒ dSštø†öϬ.’_¾ò÷¿ûû³Ó³;·ïðƒÅé£÷Ûh‹zÓÂaÝ’wÈEI1âø—7/ž=³¡yíÎ<§Øáª>—¶àˆùøüó¾Õ}Ä 4 Í½æy©ã(—ÞAµY@q˜ÈL®Š·nŸY^eÆdBæŸÞ|þô™¥[º û›‰¾òÝßY)ÄR¬¶ 몃FGuÚ¢‡ç¯:cZsÓV±¸¢M@ýºiÝTIJüÇ «“bÁÌêâh7{ÉÕE2Yý ÄEW7|çÚoû_Äÿü_üëí´¦û¡à¤.ØÍlA®:VƒÃã“§Sø>qŸáŒù[kY*£erqsbçô—ke‡’* «‘CvÒHF36Ï”HðzåD9:|±ôô|ÚÚ´œÝ¹.Í‘øbg˜H».«€:s“t¡9`CM˜§÷pŒÜQ¤¼ä¸ÍÜ… .m‚#Ânv² bÈ ÇÈ&à«·ø™;åb¾EÿÛ'fV!%¡©Ö"90‘Ìõ´É×VüqŸ^Á¦¤ÑYHóÎÈ ×Õ˜±Óz§EÅ])¬Wñ{êù´+ Õ!ï!`K`>-_ýŽmfJ¨-ØKèð@’p óhpíÌåâüÔ%‘d·¤}&0þuøœÉfs‡õ>Øí©¨`ði3ƒ” ]Ë.0¥µ¦¼^* …™~üг¨5½|6 ±e‹Äâ¦ÖÐ(#“óî* ì§L%ýütËÈQrÈÑ•ž%?D*·4öpng.ÀaQvÄ¥,â5ÜŠv ˆŽVES?e´È:\¹SGv©ˆf‹9sá¦zã2ì¢Ákõ2 ï™!’‡ÛñOÝ4ï­,zÍ´ùRü·«ã¶ìðôp9 ðð3U! ¸Û 8ïíî4.u÷sˆ­?•˜{+fZ‡¹;8~»8€,oûhZ‘wÈ ß´+d¢lŽ(Â'Oåw’{¿&O}àÂOp=RM¢mÖ}b}ÒÇ$âÂÔ…ä @,8ì« ÚvBž/€¨Éx1¶åQ32n€;£›é‰-zkÔŒ'Ò”~ÒD¥iƒürF^-×ê´»>N7,ab o\,°í.l7:8ââ sÅ`%1(ŸFÌÓ7 /dç‹­žŠ´ø³|Ðú˜©GrŠ•Í¥ô*kÓWZG)Ë¢ù~®c)VÀŸTºÛÔ)Èv䘃ŸÊ½’¸†ˆ ð¼DÎ'Û4â"QàÄ*7s þqIàÆ¦Ud.€h…¼€¢*Š@cK®ælÚÓ¬£%Úe¬|†2ÖÌgdÒ+‰i¨ªºvÿÏ':#A’%òßÊ·ç´ž ¤cãé «i™ 4»(9H „,7Ÿžœè¾ÿèPž^™Ñ|AV#‡%º´¶aìj`'_Ì)†)±Å-ŸxµÅV¨º£·½wi4…:TØ1e;h*A¹Gœ°1ƒPLù%sÂÀ!§ÛjºiçxZ:€`f‰Te\Ü”E°e‚‰^¶+d§ü"K 濺ùÞ{}è+ìãöyoê= êJ5M=pೈµHý0Ö0 T± U&—¹`H#ù‰ês>Y¤ÜãÈ¢—:ž˜€ÀWëôr\~Ê„ rüôˆ‡ÉWÏxÒ<渀²=Ê#NämT¾a0™óOͧw:ãÚW.e7%ë~µÊ)±Mü‹‰ ¶Ä “õæì¡1Å.??7”2«Ç j„­¾¢”¾àCf¥úë.=tQ].ÅäèaÌÆóÍtQ~J.ù8Àú‰!ŒtAÉY-æÊŒ¶³§Ü¬ne ¸CRIÁ_|Ppæ"”W=°3› ¶X’žËYfªråÿþË_³%84Ðô`Ç(‘]Kô„Š+Æñ \ÚíP mÒ"8/XÔÉý‰Œ[ÏNu J9-ÁÊLUø}äaåóbЂ¤À”}9Á·[¨vÈ‘öuªƒ7ã{]x'ÕÒ“«Ÿ—œg#JOŽp”85Úñ—ö…Ì¡h¯qbf·‰^U`Ä_ ·]EN`P‘Ù§ÙúÔuçA£F4S-A±å9ü€ V¤ú/žÓÆ¡Oµ›GæZé+ŽÉá„+_3a¤É}Ã6ÎÂSOÛr÷²M„ú #'G\¾dFÓÔùés¯é‰Åók ~×ÇH®u P÷ò”éóÕêÛŒiðÞ$ÃXïˆ,îl¿¤Ï¥Zp„C+f™†§éqÑÛsœ &;0Óa@ÌŽJàè €‡\jéu£Ê«õ Fg*•DÙbÙã9_¼z;G‚Åw”®8ŽÚ¨Þ¼WªåÔ@Û¼Âò² Þø€ikTaÌ$îº@6!¬Ö8_?§»)kDäé5žŒ!tð XåY7 1epfxLcøNO5)kÝçÚUë[§·n €nR(·rk”žÀJÂG`r'~Ùú2Óœ ·+?ˆ¶¨Ÿ¹R^‰’ûpȼˆ O“=ÍãdÈùÏüàõÁ!à:z“š¦5éÂ…·gᘠždõ;ÌPMð½'Û¸Õû |;ã…-i ‹jL)¡°WvåOœA]ç ?ofäxu¹u fFXËjÅ.Â:Â`z`ž6QÔ¨F•t­°¾ðE܃"¯xÛ/îL½—/εÛö 8I…æÚrw){#Ђ‡.)O>vpÈhGœ‰â¥].ü°¢9Ò†ïôö(O¯Ô÷¾ÐKU"ÄKM7`KûÖ©KC;ÜéÜ×vB¯ CUÐA‹ÔÉZÇr÷^Èåxz©9sæ_Q)Ι­Ai&ÌÃP!¨äØõM¿þå¿ÅÙ«±cÒ +4‰†]c2;%-(pQL&º ç(Q§*”£ -¨|¯U7D¢ÖOÜsBºñ pò”)ŽF0 ÌÏ2¤]T»¦4”qìƒÚxúöo/¨¯R€šˆäÓƒ¡¢Z]¯JÜÞf¶"dFšú2â$<Ù>• eÃ?…˜ 4±~ÆCmýžØr1hâ9¸¼v;­†°kô&¢(¨òŠÑâ5X#쉙š G8‚uè’æ´pÿüX<Šwt=q¶—Åû±ë±Â#A¤?ƒªÃî]@çÂepäãYÜûp8‹ÅkÞ7$yæ§i¬.ø·õH/¾Å2Zh/¹VÒ¦Ù¤ b28ݽù~Â_  Á×qJPw ™=l6Ë5ßgø IDAT§óoË×!,Â.‚ék/^Þ¹s;pcdÑØÎH[o*ÌåÀr+ñ(À#›Ñ Áž¦Ê÷@ƒ4ù<£ßÒd¤ˆiÂ.ÄY'Êõ»<Ê»èþD¥8°å5*ªêjÔOP°U¤åˆÄ”¡O\ w™EÃ)´¨‹ûÊ,rxjD r'š}Á˜÷œ©2ÈšZž”Drr¦Eºfñ‚PÛ-ÉÅœ.¯g ‚dMhQ+"Vñýƒ”¨ ÍÓ×·vø¤üµ/o9ÃáÈùj\(~¯~qùöÛÚ {ÑÎ_XÛÕ(gvh&}Üã‹#˜Z´Ïú—ô/Ï6Úo!xt§ßÙÅ•«?Ô‹kQ3“S›öå—¯÷ßÿ‹_ü«§Ïž`—v—i8æòsÜ—÷RŸ"Ê#„0.ðëDfˆèN¾Ø®0–bÑ)„O1ÐC{«‹ê•÷þ`(gf[±ÏÎÃÅ50ýOc:ÑU.n´E1MS8?9zÎ, å›sJ£0ˆn f•M¦´|w<Ýé˜þ`Æ5× ¤g0½‹Ò‚^ù.hWn"N´"3²œzñ”¿åLú³ñêz!›ë½(#å>à1æ¬OÈÃçÂm]™Šš®â„;=BYãÌv7–ðT&¾á­ºÔÕO'W“W‹¸^œªû<ìãé-H ¨K!‹ÄþCÃpøuQ²¹vAÃàcóC?m \f~ÆÖÏp›Š@-2à/u+bååXx‘ÃY, F±N×F euÐÙSžÛ‹Î: Žir,}eéÝ"lŒÕVŽ}^°©SÈ(Ï;É×¶òÁÓEvîʬûš®³!7Y+‰«T4J ¦I¹ãg³äY¾Ñ¥™x=LÝà+©ƒŒ÷ðòrܵZø˜z·Ù'031Â;æA‘åªMÝIV݈Ŷ“æ„Õ çÍRþº›‚øÜu‹©¦ ›ñ´þ™(¼…ÀÐHªÓ˜Ÿ*zî'$]%“Àz£´âÃ1ÕMÙ°”Q²aÎÚ'l€ aÑw¡FáänHW–ª"aŒ®¥‰mÀÜLwZ¡³ £áíÝLe”¢ð+…ü&G÷ðÿ?óëÀi° †¡¥1ó, ‘Ð_£0ÙÏ‹¦Ó"ë­až·ÄÀŠƒhðH&® ›Ò³ñ­A\9rÅ;˜„Ä`,½ã' 9šæðcèŒÁ¦ßþ¸«EY=ÇHÓàP<‹s[‘Ωy@´¥ØÀWÇ7¾4Iz(ç·i^Þ PëƒQåR}4>ýDׂ] eéSCžâ¡*Ò˜H-y±„ª#Ú?]¶¦&X‘dßÿðýÑM3膹 LÐ=îïS´@ÛÝ«K×.þpqR\SXÀ9˜o”Њ¡ þ€Œ™”›±ú‰·rVîÝ»§³‡7ê`%œñ²›=Zd'€ÃÿüùS4GÅVÁ¼ï¾9”•)ºt0+wwk= z–®æÞa¤iMàÉ®MË”† 1 S /@XîAr¸ÚMz*6$…¡ùÝzrÚØñð.E'ý,ëev̧"ÕtîÌåkÀ†k¶c}fCƒ9U¸!ù.åU\ü£EûYedaã¸17‘ê~ø7pŽ~«Ò€ÀüÁ¢o:õò©bònß¹K{ ¶.%A+0o4‘•LLÐ: `öÔÆd´‹ìšÔt6˜óŽîßs´˜RÍ©@X,Em„¿F'RtbE‹ïl‚˜›Ë¡8ß8/ëΈ𠼔òÍuÍ@Ÿé¿pÊ60ÿµ^ì‹}.u®=Z:MãK»‰Ÿÿþü‹¿øOŸ?‚z{TuÍ¥üùåÄ*gwÓkK6›†69*°J!¦®ZÃö±åy³Ç, ˜×¼útÅ%AS˜á³)Õ¥Ýruýœœü›†DMƒHý~ùá )Vz$(åjF.õ…U^»Ò.ðûg"‰¥k› à|&u -ž¯ÈL¥ú-jmÃt}†pi8˜cI·[ N\^¥´\õ0ÊdzgÒjG¨‰¾C”áw%;G=h&‚º tèKfÊÆÁBž`k ɽ«»’RakbKû.¶méçÀÀ.å!Ïcã8\*½GÔ7íuÑV‡y²%µë.TE;DíûþܺÒZa&ƒLä|Öm•m¤U¤6Å$ž(“ºÕóN¬QàssðW½#¶©C^ $qxf•6F“i˜¶ -D¢p²UêˆÒ©>+oVÿÁöMÉtÕÌSh€€óʼ1Ø‚qC5„«Ö[î_¬<Ëßî.%—í8Ù˜@ÝôAãÚH½`Gu µk½o6ÔúäÛˆþw|[ÓÙ?\Wy²dê -,½ÔÕ3åÝÁ½ø¤æ¯žšv¢G1¡£¹ŠÈS*Leæõ²ø¶\ìÜ43dZ¤ry€*Õx—•)´¨bî'«<ŒT‰F…ÄÓAÔwGnM*åm ¦–êàµZµøýåoT†²öòÁ=š d^‡Ñ’rúÓ9eö¨@J+ òÝ)š©ã‘ÇÆ^Ú'mÃU.RS}†•Úá‰<-Ç#y ‘ h(ß¹w£@ àÂAÊ£[ÃŽ borù»eRLît‚FŸZšÀ÷W} àˆb]>º¤ºLj¯i¨"jÉ”cÖJ"f,‚¾ZîxutÛM}Ø„ðØ¿º-åNT 2ºCU>”˜’n)½…ÓØLôÎT¶Ö¡¡¤bjIHŒŠ ÓÐ0?«UÑ…i¨Ó«_qœÿÑ«<8îŽëÿ/ÿù?ÿìOÿÄ@]Ì¡3Ó¾NŽm€@âPcÌúFlôSŽ]wîÜÖ0¡Dãd¯œ¿h;Åâ/®\âœÚa@´ „ Æ lpÆœÁcª)¶3}Ý97׮؎CXjéü¸žÁ6‹³ÝøöÇÀ_½}cºŒÝj…ÝrU¨Ö®ª%á‚[ :ÌF5¥±óÕå±"2ÇZpQI?eO 9 ãŒú«¤œ) `Ó~Ú·£.*( °ÌWkA¥œëøÉVG¼€5ͦ¼eVø¨ŒŠÒ2a¾™˜iù <’¯Œñ © ?h[¶æâ#H|"¨3VL uëì6„Õ=îÛ97±4ZómGTÄ#†ßWÒÉ¢l«ºTwÊàò8”¿"yœšA¹bÅk/_˜F3EJÆúÙÓöBõ©Dßú±ÔÆ´Ç,]Á™ÊQ›çO÷I™&uœnÕJ¬CèÆÖM°]$vU”¡\5S9Ó¨—oúuÅîÜ»nË`óÉ㟞=yŒÀ“Óã^0™ík+ :0A“ƒÏÔƒ “Ëf’’¦ÛÛaTSðMK %?6 Îíg°lܽbã ‰k›Ó–|÷ω©( >ä\ÔŠØ­²@äû š¹' Î~òÆZà¢ðpÛªæhé‚—GÁ™¨p§'ŠRƒ¸\“š+§^_[Y·G$ 7ÉC1TM·ä8ÃÆ9€Üø²iyW¸¤öySUº«­ ©+˜u¹ñ­·ANîsVÓê6Ë¥N€(23呺.¸‡ûz9ÕS žjúÑõH3yÎiDí Öq§2ó«¥(¦%  9ÚGv«›£,Ú>RÎf*¹ì…Œ„Ì…@´¾e>Ã_—wÀÕÚÌÀºaJa”Þ0¢Ï|#Dª·ÌV_°˜ƒoAoHK¹?Õ ½t­›æd‚â¼?TŠ'ü ÖyOÇÃ]„×sZi,‡5DÝu<Ñ?²‹~À€,àIãÇ.ÌYˆ´ zkÒÐGuMÈœÎ.êj ™´ êi|p!FѦ¬¦-0[³n·CðåŒÉ¿òJÐÿ0Q]rs‡€;ä1d¬KªxêÑÿ DLHÃå#  DCk‰ØX»r”OoÓˆ;8ê³{ò9æ“V VSêý2™˜+=›’óÒ ™®¦_ØkØ•8]°ºò—¿þ• lOÑèÜY+d8‰Úæ {¥%H:–·ÖöX%n"œ!APÙ†GÚÖý`©?fœ6@ãÀÍöñA‚ìÇFé´8LóÖÀa¼dKM½¾76°´qt›Nl×UQåÑ&4ÄEï…à•¡à—¿˜DÇ~Òxšƒ«s¤6(Åeê¥:Òð—ðä»À—£E­H¿0ŠŽ¯bøé§Àh*µ Q\Ú0ÊJ9/66§BÚ“1¼Ía³¾ 8e2ÇG âu3Çfj‹ÛÒ4˜p‹áclæºA‘¯EßaêYTBòÌcÕm£ÂS­@Þz¥ŽMI“~ŠÉ”÷”tÐ׫W*RJD–-8Âb…=ÏS-8q Іƒ>[[Ò÷ïßg„6 ©x|êd”ÚúãÿHD·În½zõ˜·É`’ÍäÄ\±(1DÇ"^I‹{N&b¡8Μ°==iÁ\[êÏD¥&Æs¬T!0Фs9ˆú‡§ó©L”I´…ÁðËH…è (F;Sa¹g¿½­K›P…eL8ÒÆ‡AÀvø03g„œ­ˆ 8 2@´Õh¬&>vÍ»ÆYJ@ÐC|“@ŒËßA\õÈs"*?ëM͙̀[Ú¾‡kŽuØæ¼¡-Å4¤=K0 !½3@¼Æø·ø“Ù¦·:¡íxzÐÙz(¡:M×v7³õ©Ï1 Õ¦Æ(Åaf’ÓBútuí™eÉG‰¨òþÃkjsó¦}ñïýôý½»wþú¯ÿßû_uóä ˜æÒ® pÔI,!x…í -‡=5ß©V#Ð¥9u!æÑèanCyÖ7yçLUD[’Uó}*Ñ`,Æ®ip಄»V @%–3ûˆRáŰœ G¡°±y¾fœ;2UԵ𵊡‚©S¸y£2^ÜÖ›ˆOåRüÉÆ¡ÝhØ„\¬ˆ !.#7 êšÂwö©sb>è¤u¤‰Ûòÿ kôFuPU’–!~G2!¯âÐEÓ“¯4Üå+ î KN<ÇdΙP@1µR•w™¸J­åä*•´æŠ=)sˬMÉÔº­XÊYhüÒ°´áàŠ1F9°b­~.áÒ©QmŽ2+_ ù´BAHÒ¤6Í>`66\ÙFÕrjº?~Ûh§—9np-#ò ¦«Ç” pÁŸ& ’–"EuðQ€°p‡ì@NâURø±hß*å±qœ¥W¦ C‰içðPêòú‚·§*BOCô£À÷sñW%•·,'–Œ3TËåéÜTvÙ^=Þ™F)€4+¡ˆÂ-i·^€Þzäžb¦9ºÏRžÎÝ6j”<û7-ÊFZˆ 1UhÈ"Ù4MwÑèaˆòÌëT„Ó"®×#™–…r óDå÷6¼‰*°ñ'Xê©p–néA5t|®ïçW'í=¸ÂI"U¹Mªšüf’©òó– æÀ »!Þ¡mzµÈPŽ«6ó/œý( ÈFeTŸ´à _˜9.:†-êÈPëîÈTE‹‹?ó`ÆZòsNDª0ÄÈÀº—A'8¨œ TˆËú†PµÀ‰=Ãn­{ÄÀXÈe?•Ð ÿ]Ѓ$JL8OÖN°âƒE,ªI¦Žsl‘y[½Ÿ1°Iµ0P,sô‚ 3ÈÃ3ÇÔ¼z;Fu´Jê&U„i:¬Á]UU4‡]ª,2Ì urÒaF6#,fâdo‡cà«Z`*™ƒ›A‡ºjIžž’µD¦Gó>ÙAR$Í«rROzæýœ@A"n£oW¬¨¥Ep ¯]h3DtÁ †¾s,á)| á»óÏt`I‡áX;¾ÁBqÌÒ-·[ˆ4‹$~>pFETÛ¢´>ýÁ?Z‰ÃUû`<J9;‡Ò½9Ü ÈÄ ž?{"\sF]h;=ßy­óÆëÍùv)7U‹äôQ-ÛØ- yh#z]ðÆÉFxáiN׋!:ȦH¯ßœÕæHfÌXN7ñ®ÓM]ÐÄ8Ÿ~¼}óâìö-Ê&€;™Oçþõúÿþôç?³ŸTñ¤ÛþvnŒQ ‰3PÁL ‡¸›{ëEñy“{©æ'MŠZ\Oß^ø¶Dn(N¥º É´Sa™€df.^BÐò i—‹‡]‰+ˆµ=©í™½Õò©¡´¡§¢»:tO©™0ý$Y°ö§F'AÜ´´—ï”ÑÜVñtËÃL?Ý›[Ø§Ë ‡ê^+Ä,FË,Ï·Ûç+jP P­@rÁÊ$æŒ[«ç5é¶|å2Èi¼gªäÀ+òEÊx™T1ÊÑ<Çt®ãÏT´Æý¶óÒ’¾žuVBpŽJ£Ýeü>_viEŽwè63ñ ‹(3ïÔÏaZÖH@#ÖܑٛoF8Ü5»³PØÈªQ1ë€öÁGBK€ ¡]p””߀ë>dÆzÓUϲ9ë[öZtLÚÕ–8@»”dÌ TeÈԱnÛ  †ãÀp˜|1?ýqMCqßF:eBOÛÛ®»2…öœj©¬%˜±Ö:Áæ–Æá€ –ê¡]%FÚ8œø@Ž%î6‘æõü¶vE"­}„}j1s…ì‘®6„˜mó…Ó;{Þª ç5xâíü\6Ž.B4äŒbÊL±ÌŒÉScÎMGˬùÍí˜è€|wˆUÂÓ‘uiúfâ­lV¸® º§õˆNÙ4BìfàƒHæO^ŸƒÌP)3ô\Ë@Ú%32—%Â_•ÑŠ’r à1<Ì¥ Ô"Ô D[ÄМI±P®Þª±Ùƒ%ô€¥Æv¤&÷ÂäˇªºfísÉìÍ:‹.yî2ÅÙJ¢Î—¦s#íaÒùéê!h¿]³e /@‰`ŠÅ'GÜÂyŠšõ² 2ZwÁ'áTôœmÎk•~‹yÄÂi¦7([Éãïf®…Ý9³Ê¾`DÀ¡0s‹:%¦ŸVLpcÞéìVÇ^p!¹¶¬µåŽ:ˆÃ?WÕåШG>}òж-ÛÞtN©Ý»zÅ!q¢=aœ)R‡wP{ý±u¢|ž×ºê'£ºëGן<} ú›ïìaóÅKŸ9ò_õyñèÑOôÊ”‚{DÛ( ±&2¡&2A U´+fð<甚+ á¿ûÝßÿÅ/þ%}À®åÿ2]Qô~¾¿ÄŸÎq>¼(…Sh)žÐ1ð·n ?½£à»°Èv@- ÁÈÐlV×X”’ÊY‰kTbp³ñ6•YÕ|2ùÀ]EÏ(•ò”ÐD$Eå¬LÎöA'…=‚€îO˜ó¡ uŠ/És« Á¬!¼ê¥ÔLFšÖ¯“ l (OìÂ>ì¤ùpø›¿ùÆK'ŠUÞ£å·o-u#j°a )Ãh¸8×í´þÑ™F–Mî9d ;&BÚºIm™Ø.G§£ ´|„¸¨¢»¡]k[^É-æ.ÙNœg–… •oÖ·.ÚAÛT±ÂŠ š„ZÐ j´|¯B›±7[±…!/aLùðÌë µÃjÆîâ¶‹ÆA[IpX´»*ZôHb…"@QXŒ™^FÂRŽ{‹|4vVÏÈA-µ[­}RÞ“±œ%{âµæk‚j:¯i‹Æ,†ÀÂA³7¼œn£ÎÅd˜§±eŽ2Æ»D¬4L)àGј(­¥Bø™LÇþœ)à+Š4§aÇ”ºcÜbØx,€ i(C<”9;"—ÃÆÀÙ÷†Ž§!óñ#zí\»sûêx7Ór¢Hò†CÚr’6¿¥!ª›¼2;ÏŽZ¾Ñš|âBL÷£¨`ïZl7§§qÌ{!Öæ¹‚㣣^Šok”¹Á @5ÛL›OºD žYYöàÝ;g¦'íÅQݤš™pÛr¸s»¯zÅÕËhvhµ¸Ùkꦋͻ#TWJÐÌÀ¦GgÐkèäæ±e®)–#Ÿ?ê}(žŒÌÝ8=>Å)Åþê?þ?ÿëÿö¿+„oTX³S¥.™vዌ'óæ<_oeÜNmÅð'ý¿X…^ÍÚ]IÐFùëqW1 !X—y;OiÂýaª{ËÎuàUrVù± b nÇ ¸éy;Ie*!VÌ õÅ »1 p@غbäNŒ] ,ÓÈ‹½ebTÄåT-Ö›ti+M}=ìæ#°G£]A~˜jòÔ,2˜Á×ðaÊ4ÙJFZ»é-.ÃpÖ)‡ËÅŸP˜a³rZ–™}o}Ш(ôè}Ð¨ŽŒh€•¶ËÄÊT­»Äœi"aƒ°š€oØŽ?ôž©èŤ©Ÿ€@‹=~ôÊaQŒ‡†¹oLwX}ýü¹ñ¥F_¬YšûIQgnŸÜÈÔ˶¸ÍíZ çtDègª-D&JgþŒwúéáS¯ªÐy³ÊØ\‹:;+„'4Ù8J#óÉã'ˆKëöôG<Nê b¢NС’\â¢1/9ôNNCzµ÷½2%*âE™ SÛl•5Í{Ú…¶þÅÃW/Ï™áãÇOöMj:æ"‚å"Kv 9šeÈ’š"̇tÞMFÏ ÖœŸk°î4YK¿[ôÏ”®<~ü([3`ž…KGí0Ï,½¬à8*³¡¦¨›GÏ¥Šöf†Ri ‹¾5:õº-Ô]?òÑ9ªþé9"ð©œò4jyõèûß^zóc3Xü 6BÛ04µ@¤œ¸›Ö”pG ²ª4}ÌÂG™©È¿£†b˜£äül6OZ‡}€ó6­’V„mW¸C™j¼K=W)O—A´B‚ø$œ<’¡ô7ýTgeM‡á,ràg™ÈÝ–:9ý¢YŸmNb›¦ñGì¬ÀçØÄü ýPkhÐHbÚÚ)Xn(/døzAlø9ø¤™j%Æ­èº-©ÚÔN*¦òÔL”σv-Ÿ+.ŸåMfbR­+RZŠ–ROS^O&zVc0[à3”OV¸ž±ôԪ󀡻nuþœ›ÐVð/ÊÂÙ°5`.jA×ñ‡)Ie‰ÛŽH˜"ÑKÙWÄ}ðtð¹åÝ„c‡Ýñ­WÝÙ¼ò–;c¶¥W¦EÇ7O?yHË…0h·owÂ;ƒ íÇ®A£Ñd^>éªÃsÍÐPfù-O7—©!{ç 1ÒæmÃJ“1pS[ض. Îj©¢QÈÌX¢YÇOq(|¢§^ò¨Ýülã ýène`ª@ IÓ Tª.º™6v¯ÿFþê¶’‡ÖiÜìK[i´…·’ƒE"ñ¯§·C¸ °5‡Üƫَ:ceõÆĆ)†)(é튟1²{ï ~Õu(+Ò=°¾0jznš£!¡¹ðByëË€3á‘à^Œ=nù{®ÜS*uÑ¥$º6î׃ 9ÙÂŒD) ·§øíýí½û_ßÿæ[Ü6º ^Ãâh€ÞD¬º¤/øÀ›MgA.Æ„4ÅÜÁѨò ( ˆL~.£ãù$S†öIƒ „êÒÐWÒy?-X®rMèh‹•@bŒ{T%3½þh«&b_¹a.dƒàŠL»ƒsÙ¤«‚&’³Mþy?YrTØBÕ]ÝPƒíŒéýÔúri;e´d¨&n È\µÒâBˆ™ÊpF+Ýà³ÁÙ’dÁ@¸’½uhgNXšLÃjú…aW­»„H›©R6P]ã:šÕ¹Ü€0X—ß´,bhÌ™C2íåÀÌE¥åHBfµ×Ó(-0êhò-¦Ý𘹠å]`z7,wÐ9‹RÈ©–œÑÛC¯§V8Ì žê ”Q÷Ùs_E;¼o¡"œÁTÞj»ŸUF&r•ÄXñë&Œ E-œ'œñŸ~N_(¦ =dbZAZ‡Ç^™@£S’÷Þ´…ã |ðáàãØÈ÷ ŸÐde ìí[·6PG¨.2 1Vˆ}þÌÒ›ú ….œž Õ£´·n:7DéÑ|äh"ܽ:J¸¹ÃbŒT™±ÓæàáJß«N`*\8k¦ôvß8~êïÔŸ?¢*à'ÁÌMZIÍgä™Ò’ ä¦„{ÁN-¤AR*ß…! ONÓá‚Erä/äÀ¶RÞË#ð»_T±§’­¿{Ó¼~æÓA?gF­f°~iÌ¡4,AÒ†4Bpðé._â¢Ì0vq訂P jQ¿ÎF¾ªŽõ/êî5® ãT¦ð_Äs¤!5ÔT=šÖA$+JzLº ³;ßnñ¾4{YÃ8’Sĺáâ¼Ý¯N.5§E$Áà`ÊÖ×;ö ’ųN¤9CÞG§ù_‘…Ù“ch5¸yÚ‰µÊ¬ÇPÌ¥Gñò©Õ[Ð1™ó3`ÇÐ~°Vµ™{Áä3Váøð™«MBà+);6ws =‚,tEs-ºØâÍϨïÛûÍE  x½_p]2ôÍÍ—ì†Eò‡BÒ„LIP3:ù¤ }ØÞWû`¶Åè gñÄ‘i˜ ñ~».b\  0 pƒ©Z.âThûÓË‹ì”qUkF_Ià)€ÐÌ‹½ä/@…cBëÔ-ž*ˆvé†b«ðÂVضæ>¼¯Œ²Ò.™,LY§´z_Ö±Ž‡Ð‘ïoj]î­ˆÂb ˜Üyw£h³ø'ǽÙ'g#rá‘6MpSÔ nx %3sìѸ•žÀÜ…å %Fµ Q1|Ι¬ó“f(Ãbâÿ‘¨\&´âFlo_g5jÀvúò,~ÃßQ@$À>‹ªYCøÏ4RÞ»èÉJÐOä,Ûõ¸ +uJš")v_*»ÕI©&$Tq’‹„P]1|s\8,Ÿ¹ËÇmwËlÓÓPø¥˜nä"q¶3ð}¤X-ÞøòÆÛ—}¶!¤©,3Ý_øâ…Mîúpè4JÉÏ¥òç†UF)9Ÿ­Nb"þ‚ÁÖ¡fŒ™ÄÒ¦ðÐ@…¥fjŒ~ ¯9Ùô#þL ð]c9åÁœ¯!Ô°2¨"NZq Lͬt*f’ŠŠ‘+¨4[&|ˆo )¯ŽÇl!…ðcðŒä¹Âdåý¡h~æÔ4¤…»FtBšƒZžo£Ã–³v*84 ¬ÛÀhj¡>yÈÃs3U¡‚ðÆOk&Óô!ÀÂP­«¢9¯·Ã“!§-¥£ýv¥°çüª mà«møHhK9øò3Oô•¨pضF'œŸLí¥9 P¦(!¡%€„% Ú½qóÈ‹úøÓAV×®‰~¬D+FÐL´*õòÜú×Ý{÷1cðä zÑSs9lÒºbçu®RÇ+›£„ví{ég°b9¢€žG¿Nfa€ÔQÎ&ê @w<‡^`<"D =”ÄcA…dä˜ՇxþâCRÐüÄmj'¡a뉙6MÓÌ„;¾Ч³„åôNåÈ!  …ÉjëÇï fì( ž Qm4$ ð þxv¨Ž|!ßkö®òÇÅÆQ' ù+FA²ÖRýŒ®qUšX‘8pþâ?ÎP¦°VDx4ï<` ¾9t1 ¾‘#ÔÅ@è™õ'¢|ðà; Œ—T÷È@CüTÝb ªaŽÉ³ú]ój¯œPBƒÍèïkïEû],¡¾zÍb‘‰êï-ñ<µêùò•ЙRå[üÓn‘XA°.¶ô±:r˜íÀ“Åa’懕G|+Ή£KJ[éñõë)Œ»Ë?‘°@Üaî÷ ‚°(œ¡9€ÀÜØ Lå`zH"Zß*Г8wÚc«\„ tÑSÀwmX—{„ @þA%JÌ'‰ç`þiB عÂÓÿXs°Ê#ÅÉñHû sŽ)ÞLÜæ^ÆEPo8ˆŸ ©…"’éÿø1h£ÜÜœo¨¶Èäcé6„5.3T' @U±q«íœ0Þ*às¼UÞ\ãzHù‡×PîNÇ\á¸Ú¨‘BCA@÷çô€­º.ÇÔUnŠÇ@p ç’£€ÄðdºØL‡ý>RfTɯ̟¡z-"nO· ”Z¸'A™ççÁº•ßæÕ<#_šž.>¡ïJͰJ^¨ÚPZCZQž»â´¼…­¼Éco—Ü<éuÈ’ÅFO×p@Û¦U§? ,¶–ûüSC¼.8X¦B—6ýæò(¥-X²tß ²Â !’rQT-ît¯%M𱊻PKÓjvf…ñpuléÓ5­ÙêÐ~ž_þ-Õe;¬Ë·UÚîàkÚk-ø ÈŠ~WO]®IëîÈÑï)  ŽUðçÎØÃ*åÚŽÕÍAbIKðŒÞ Âà/×¥i9i Q”ñ“RÒ_£JÂÊ¥1¢èƒã5ï†+þœï×:¦aµS9íú?^\¼'@݃u4ƒyh*\Äh$ÿXÃPÑI3'ã+TTk®‹ÄAý™KRgZ\SA­\s|ਨ‘i¨˜ƒt{ý÷CK§¼  ¯Ü)nšœÑU‚5Ø7ŸAð… ÖH¤‚ŒËÞp/…vºæÞBž¿±®‚=éPWùAµ9$†ØV”ð¶îÈ´g¥iæÕäÈG£ÂÙη4`iˉ7åPŒÞ á)ýœ åâkƆ3¼™rú®EX‹.¡~‰±7PÊØ>*cJ‰2a½4Ó›×9q™4y…¾íú)-1‚«’¾(|èG5!_&ú$@Uz<(y‚¿žJkSûÔ®Zçç/½!(”±&Â8a¨K&¢§9¸î«,mÖõR7ºLç†ÃVdêÛˆ”íì´C"x7½cz?¢QKG$r·¥Ý¸CŒ¦cnÚÌ™ÁEšM*F6f}øhÕoÃÊôÄ»Bí«†MÐü#1Ê “C¯]Ÿ÷eZ‹”Hró‘"`AP2ËL¸ù0Ž£~bEŸä›yA;ŸnŸÝ’&bLfGКü’pm'4ÒîX)AW„Û¶ ÉÔÊÞa‹|Hjz+nº_ŽŸÅx.ÉKµbF…ñRýeÛtÒ`¥¢€p¨^}ú€{¹ð,/Ú4vÅ cM6ÇAo´§…`^X~r1¨¥‡Ø>—žœl¤wÉf£Y“ÍVg''öûzÿ–ðž=f{Âý¯¿ìB KuW25ZŠ'BX¨ 40¹2™™R‰"'„Ô^Ä:¡£ï¯c]˜sÐÙ̳a ¾R.!=´W}&½r$­†ô® ‰ó«é¹Ø`Öd_Ý)ä’T—¡Õ¸ 'Ð&:§Ÿ‹p5&zƇpˆœ´9î–»%à?ð³;iÀ·.8®òQ 4?‘`ø"-_ +Ý®îÇžVom­-ÃEKhahÇTl£X¤BF‘Âð³Ö™æÀ fdg!cuI»LZϨ<$tíÆy„n,‚ì×–çÞÉtiqWÉÝ¥ÌØûfºû HÔöº@Wé¡"Ù^ÁàH+¯¹ÃÆ×´;HëLÚ«â-BoõÆj¨Îïªk6Ž«C‚‡\353ëÏšµ ¾7‰ÌB!·ÉS{ªŽ¦Íë`+Š4DzHìqèƒÄΞõeâÙÜfó˜|VAî´šÔtÁoßè¶^<|üÈ!X·n{'±ÙJwð%Vó5ª"´‘É@ø&ORÆ”Ë äx4*Ì ”G ”Ü1-˜µl\ƒlltm] ¤]`ºJͶt ù‹zŦ¯ò?ôÖyX"L•û‰Ï£_9IÕÓŽGI{´ð1b¶Ç|ªÈ‰çz‘A@Iåa¢¼Ä Ø¿rñlØÖ$èa#Á`:CÁ9°JŒËx† ‡¥æ˜$¯_,iÛgïX_Ó§k¨ÙC÷¹#î))KŸa₆´¥ÿdÑέ0UrwømC°JEÒÜ=à­´7Iwà<8±¥ïpǼ‘¡Þ‡†ç*ÌÝÆ«²êna”@mwp·qúÿÏÔ÷è•\‡æÎ&Ù$‡äÈ’2v90œ8 í3ÅY–âİøÃùlËð–Fšîd7›;óüÎy›ÖžËzëV:{Zn]S&£6ËXx"EɽÜf¦)yÿ<…Þd@h;Bº³i'ÉÎRÆÅ÷ðû©ktøâ¬½Þ\ƒ†\l‹U/ÆcÁçã{¿ˆê>m#8/Åa‚mx÷a¢«ÖìlÍ¿îÃöì¿Þ0øÝwXíÕ¾üÔA!ÍáíSGÙ‡l9)³¥˜Ù ŸžS“E@Q ÍAdp8ÇÒg¯¹qv$°Šª;~Õ‹Š)°&̃‰ùÊ£EàÅ'²Â6DŽ2_ýËù£ÅFà[9îʹÞ4ÍÙz™O U‡óÏç/ì¼Ë*gÁ ±ÄŸÈSS€pW&óUþ)“C€Œ&¸H9ê–žîG-¬Ž Ú¨°üvýÚn—q”kè‹lU¦bZŠœ‘Èa ?q#PzÚÑU…]°WÌuøôå})ù€û ^ï³Ítߟ—g»ÕeBU? ë;Ú j…ì.4FÒ2F7ôL]è)BRèiˆœˆ‡ ÑC ò*‹e”§°RÕ5H¢ h¤jEáxa—sgõûFûœ¹bè$ 0oÞ¶^ÖþúFž½·Ø ™·z“÷ô“¾tL_¨ET€á§ºz3 eâ *(C:”WECÊlW ™ÐÍàa Mx¤Y–cš¦TÒF¿B+m¹Ô ¥äÐ=#±7Ú(S˜hîøÍ›“£ëó]O³¯àm´(?zcl 2kúLŒ º-:_½ôðá·?üáÆo³0¦ôáù+Û ãÿÄs׎k†Æc:l Vr~ô£©(:!üÑYñ6ù‰H6Ñ©©HF4Uuò‚O‹ŠycÀÝß³Ê"뀌 l”†ÞgOËa}cïñÖ8ø†dü”ƒdwå1XëÃ'û(n*‰X,uW`ák}³—ÛæÜ3%dn±"ÂóžHsž6§Õû¤WMr{K]CD š CàRdú ºÊ娂U@]MØ1ö†î™€L\(XZ wÐTôNîéë÷G×0æU[–¢}˜îº·ÿÔÔ=:¡ Ò”6 2à–þmÞhq POúÁŸ6º˜íêÓX\b Eø)Œ6œTÑ£ai˜Ñ9€WžbÍ[„àë(<ð¨§;­Á 5â‹>l`&ŒÙÃÑÒdƒ0]T[;×ëitDI†æ¾KIÊÇ5Íð†žÔÖx|7e°å3CN¦LÅ@p)0dž?µñ´úà VŬ}iBw¤I ž!IC Bh@ª·ñõÎbF£ÿÆ|~Õ™‰LxwZ÷öqß=i ôT·†uzÒAí†<¤‹£” "r†®™…öžêŒø=úî»oX;È.‚X ú-@ð£wB5{]àL´kl*”<ºfCÏ6š§ÆÔp¸hàÑ¿¦ÅµxÂQA@0!¶=šÐÊàãGOM<9æÊd˜JêÞ‰¦”ÝÜ»XêtÎHçÝá GÌFY9:6œQ†¢A{W=<‚<+”Ð4}\(G IDATH€†½ðD~ɦҪè8è¼\Ðl\èäP§br«çq鸵“æ$’xKÉžbµò@éI CâòÈZC 4½ñn(ƒ3zbÓq^DoŽSó"ïp@É úôå ¯@Ø)‰÷(ë¾ÚYYÌV³Ï¬)XÓûË ¡™C>ÆRa˜™MZ™KŽ0‘†°BNf·¦Ãwó»ô²Ïë³BÉõC‡ncaÏT¶lJ»bÅAcá˜i÷íNðáƒQÐH«˜4¥6ðuŽy‹†­‹}óÍ·ëã4¤fnfí@ÃpLY™ÈH«›Ôdïõ :¤úÕ×ø¯ÿítëC2¤âå‘^¾è›’&GÒC×Dl‰\ùð"´ Џ¤ÊHó°$ Ÿ'SBad¦?ÇŒ9hÈÔÖug¾Y0A‹|í2ƒzÂó>ƒûa2”IE™[¦bÌ-ûM[\ZÕ(Fmë¢C "X…oYöCã­ò‹6Y‹'´Ž· o0¥=×sýä8ØU: Í‹€óZô#"a;ý„„JÚeñ e¦ÃM¸Š·.°ÍWµd"¼k·œ¥uJPké‚8Té9ñ½Ïá2¯Š8x”Üòä%R0yaZÐðWþPÂòÇ}ác…Fá'¦“fA0AÂXž ' ޱÊ]-°U´²Ý×ukÚ#—º2£z”Ž×‹8_d¸È‹ 2[ öõ×_ÿøÇ?f4µþ&VHü¹;-ú¹]&&!ÑôhMbýæ7¿ÆRÇ ÐÀq›2âL„‚Än·uý”Ç1T=„0$ãMs#P‚äà«‘ëm Üp^† Ï•G2îy  ‚Ä¡"°ä-ŽÄqî!A¦ÈXB`­âòøè¡54ÁÆ­Â|œ+‡L‹Òy°zµ™ª7ÅeÉØ%Î :ÞúbôLyâ$<¡Kð_ÙÉñÍ_å‘Ié””ã’Ã4ý½dŒÔTSëù£€XämBžOëùg?yl a‚|D ­+£€‰ˆ@>”/ÄW˜”,Æ–gë¶§WÃd\úαš&€¯t( ëà$ÿâ/ÿrP€kžq*˜q¾ãÇ™€/þˆ 0ï<׫·é¤˜[a/ñ³TÝG¢=ÎD%îUÏA~*Ó9àÒß©ÈJuxýì™ßÏ€‘'c+jýÂ¥ë¾ùá+à³è1m³„DLyŽ[Çe' ÐoÑI§¹ØA¬/…UK⑯1Öù4€É ™Ú\à-|˜Ä~õúÔq/½9á–«>ç|ƒ×0†6EȾɓ–à,Á`1Ý‚!ŽáÆrTÀ–ÁÐHh(©kQXè$PF¿ÞËÎÁö:3–c ´ Lûé„…{o®AÒ©»Ì W (·â:SMkBîn¹Ìö˜ÞÄž•`¾y…(ÇAqeðQ¦NÑÌ­hÈF™´¨Odg *{øøÑ[7 /Pc×i’)Ó $ÀÖœ3eÀ™ŽQ0¶ê \4¥“âçŽ*é€;~Ž[òöw/M~ôj±Ã r‘€ôèRgÒèGu´/Ÿ??=yn èôù 6‚чß=䎿úê+[pO‹ü•¯²Ë·[„d±K~~:¯ÊNûÖ½¶¬ÙÉq~–˜o;5ÏŒ8² s›–Ý Öoߘ»–`æÒ¯^¿Éòƒtº§ÓÉåÎ5m]æÈx®û §&¦ç#^éõu¢ú°´”’ãU~ÛzÊQç Õßê³³Ó³»wï³smøOi‡WVdÀ6€Q±3yöúÍí»wyJGžÝN>´ysª«Öû © ˆæÆ#`ga^Àß“'Oá\¡'³²“éâl€0šr/õï4ËxŒQoß¿q„:!jãjâºdÌ^À„F}½N(¦= ”1§1ƒWãÓ¡Rd´vÎz¼¦ ùšè”±¾Å×tË"& 0Æ!`:ëz‡OŸ„€)_s*ï>]êÄɧ!›ïG'6¢`’G·îØÂBF'/_üø÷ÿÂh~úäÑkWìïƒ*ų” °·¿±‘±NFþx"Ë gh>½‚8©—ÅØ-ƒ×-0WÊÆŽÄÏHh^©txü¬ †8•ôS¾ eÚ¥áTÔR2«´~”xìŸã²‡X˜ D=Ð Æã@ÊöšXH#ÉŽ* pHbqÞCV(Fc¹+ÓcÖ^ä¤vÒØxj²5öÙ§¡«Jëüi&n° iô%¬†le¢H™äj[»Lã¹OlPfÌÂÒ5­W`ØA÷Õ×Ù¸æh) ™8oãß–† âa˜ÍÇ4ÆÉÇ:sldd®c;;}fPÝÝ0—¡ÁáŒLøú$ÄìókÉ_¸#Ðc +Xi1¡Åö]ª@alÓWÔÍq¬F))6Xg¨­KŸtE`…Á*aÝXäUQšø€ISlCø‰Ÿ~kΠΩYÓ ’>üNµ:¸W'ÊçÔR¬·ïŸ½xrÿþbÀÆáÒ…ûD›<Ç«Ùó¦ ºþå—¿cEá†UZ›º:ŽÑÂÆ[·ï ,5ÍY$¶ùî§§Ä1.î:¶Pçt¦¾Õ¸Ý‘p£äa¿Ê ïGL†:Å£TâöñMÁ\Šá<\à¶RõØ34—l§gdÖ¬ó3¶I³zì1¿8æ€Ç…¨…ïì‹¥”æ‘è°þvÏù£ †” g æÂ±1„xè{i=®Ð¤Áô§ UÉü¡]ÐeŒc6ϙڶ 2÷©«AŠr]ÄêÒhâºâ؈Ӭ.ß›ˆ?~â s„>;%%AIðε ¯ªwrH{äõõó%ïŽ‚Ë à!nçTlq_éLídVÏ^w².,½üWõ©ÔšS È0éª3Ø|-᚟€Zµ‘PN ¥Q‚'T‡fÃô8•iŲo¦ªf›•,šçé!…€F5¯Qåõ%‹ƒïf,S%†¹T´Ó…ºh”ã#29ÕÕyã)éÂgHR¡F6>WÒLOñŸ˜`[å-hsˆZ¦…Wìž³1Ù< að?yçñªqp@“çœqâçvÊ@ CE~\‚Š?R[g–W#KOëé’s *µ€]³.AЖZKþþT}ÝaåÈëôÞeè­Zw¢š—«/îá.õšÑ{~H.h4Óá(Ïž=÷‰pC¾bUŽêæ“¥ŠŸ\j£tšëm̱  <}~¨ÂRV²¹ÍÞ1!‚²åsjs2­º,™BB}ïË/i²†pÛ ÝÔˆ€Oúæ­›¤`˜¢2„% Á]fÔ÷òeȃ/,c?Pj Ñ0æ‘z@Õ=zò˜1_ål,Wqš¼6êó|0= Aa„I§ÁÖ…^Ý H­Ü1•íÙJgAÉsœŸ·´@œ¦š¶yyÇXÒj¡X`a¤˜Çꀟ ‹†erm2aânêzv˜ŒiÂpn¦N=r©’ÕÕIÇÓM.S”ß §“ ™âÅãGtšÃjtùP/“í3þÂË ö1Ù²¦ð½ù€¶òž†F&ëbñU»ZŒÌ™–ÆB]+‡3šr”¢–;WÌÝÞ©œK89aö0$UPÿe‚I‚î&Aß¿½×·À-Ó¼{ñìùüá¿Õtˆ@xùÆEû 7L†*r¤÷' 9Ü-8‚ˆÀ Gk±ð¾1mŽÐd4£h‰´Ëù´­+Í{ôŸÀg4.U’E‰lÎý°²|öë(†ŸÖ”ÉCéÎ}ô´ØŸ^@ ÇK?€êt_ ³ë8<‚Ã-ŨÿA UÊà'Âuk_ ówAm§Kcç8‡ô|º¹au Eަå@•L1YÓÐ`U+Ó©K5=HÆ"H,H'(‡þ/ž°’?Þ½kj¹`W pb#ôt^0Ф9c?C3döH)©Š¨TPp­£h&UÅÖKxÊ‹y$GóDg¸5•\º @wíèl^F£ÖýÄiu=Ó:·|…ÑaÍq˜a{1¹KÔG­èë_^)C| ¹ƒ#d˜*þú×_ÿã?þ£*8 ®]­€¯€Í vÍÔ »²_×"ì¾\Ú»Z.ŽW,® ¢ÝËCÕØ ‚JgzŠ#Å„$¥”ɉóDä;ƒO‚ÕòtïŸ#V(âÚ†Ðt…A!MÝŸKzî …‚„\1n_þ³?û™êËwP”=Ï9ÇL392ÖGæOœ¥>Q ˆšŸN¨öÔU«íõ³áÀVõ±Ü%ýD-„‘ ¹ðre íj(ô+íÜ«¢âx®zS¼å¨¢Œ4”@(T»´èÄ¿ùM˜-M@’»÷³Å¶á€’VŠàóåÚèa‘JÕ§-TKk’m“ï|Z.jéu”gû°ÕÓÀDú·±ªƒ€ ”lw!+0¸ôú•³õÚnïÕSÈsšŒ”fÄ °<¥Nªèé!ãBÚ"°ØÊY¥Ä ÜĦëEé$–ŠÂ-º7'<ªÏu‰òZ¤âb¯«ˆB?yÄ™µ—¼Aµoݶïƒt“½xnY2®v… l¼Å[Yî÷t%Ý9ù¾´b$^d¦InÝ 3Áq_¢€’8Qs à2¢Ðޱ9´O!Ö„œr|=•3#;î°Ðn®æŠ7EãjàófœÚ' ¹}ç6ÒÌW‹Ò<–»Ç7 %A›{7˜¼Y'YÌEð2$:&Ögû‚@H¨À8¥\?TUšI2´ýTbfšÊf‹Z¸¹öGo–«åbRn{…Zô?£ùZd}ôÛŒWSO3ÿ*¶"»˜žrÙ*ø n#ÐÑÅ!b[Çöy_Ä8ºåýÇN 2ùDÍxØõÎiNË@}—ÿ¡çf7G…ñ5Ï‹ö^±¼äsL×8ˆ¿ÿ»¿;yñò?üÇÿúèÑÃç/Ÿ}"1£œÐk9ƒúÒ.$ƒïÂg"Ãgž( ,^%åëàÇÆ™ÈWLDÉQ×Oצ·Œ»‹È(ºb£6‡ÂCÂl!š½ßÓÖ¢*žà‡[‘ý‡*Žp.Í)þ>¦2M¹•BŸ@)Ì­¹à€‡ã…=ŠÛÝP€ˆÓ¥¼zÙ>šªˆc¿­ö Ã6ä»>9Č𒚃Ÿ;mÔ©Q¯ƒL»"A™a{¼`©à02W¼4*ãRF ìE/Z(؈>žœ3„-‘¾*ðPžzü©fH“ˆ^¹ ™=õüµJh« "“9Æaµ_š[ÄÀW]>„W™åBW—"`éˆL`U‘ÐÁSfòòh¢…¶Èbq,G[ 0_‡Þ&Ÿ2î)XÀU´æ ‹(Å×Õtñ¹Œ4cZüßî5•H þ…釰†À4´óGÇ)÷pË,Vu«Î·‹¶¬*ª«ir·DËÎS fòÕ4ö¼|Ѳþ´ÖrdÌ+j ”ÀC«·äÅ“ÀœìÒÖéq–ŠïÿwìQXsº™˜% Bésó„'à2WXPõtï yäîg|PHLÎ"O…¦ÙóÕÒ®lpûÇ¢™‰ey‰i¥380Â.³Þ²Ä+iŽ|²ûR­¹Ax·HâZ 0[†;Ø™¦ —ö³ŸR.XMà\ÚSGMnB>\#¨Àë ëˆ“žÌæ½fV b°0áâÇÖY!Ú^ì6ùxÔ¥å“ßþÖvàÂDŽàæMÓ-ÐÛ1FoÔ¢º ›ÇChƒoýÛaÅ–B4ô˜:ÙÁÙJ–#©L¢èÃÍYrgBqoþÖPЖnáDèe+¯R_¹tòêD¦­™ÕÅ·|¥Ög}nùøÎ§NZ ¸}|ÇËèõñ”ó0ÓOÍÉ9Z,Aºž·t2Q‰V¦]äª<˜øÏ/ip¨4] quž— ؘo4 y-*iןéJÜç ²õ×>Öô§¨ÈT[£J•Õ1AÏx^ì…?˜švQ5–S4/Žh½™§9066:Ì¢s/íZ¶þ`¹çÖíå˜ H…Å:Q3+¡zñz€2Ó^gÁËs„Á0CØŽ"ûÅßý=ÅøÝßÿ Í›:Η½ <7vª0Ô–¦×îäò’€±pX‰H+Æ'ŒÚëó4ª¦ð–w×ÐÚ˜„ºD§&æ|ÑÀÊTE€b z¾%%÷¡½î¿9rÃTÞ˜x–3àAˆÊŒF˜ŒW°Òô^–| szŠÙb3£Î;AÒì1"9€ÈQq¯Ïé*šdš‰+&)‘aÎКP“´Sá~äfÚ×>R~õ[°dã…5æâ]|Ju• Éâ°z)ÕQ*GÓŠz¸)p° ¡)Nɵ@þÚ»|®ƒþ+ à±b<€ôp÷ÐéÂ_×–Q ÚµV| •Êç'±áF+£¼æ\ËòLùË+UTÜo + OµvÖgÊ‚6È©2ÑI8x¥ó §¢"8À¦äçëË;NÛÍX§w¼ ð˜P ”JÐgO=€XGÛ)$ÜB;•!1Cʺ6,ßq’° ·é¤T\4üôÍÄÕeÈøÌ¬Ààšôü0œY«4°¾äzg@Ø ]øCXVØNÓF1dÞx¸lߘ&¨šÞ­d[”¶}3¯,ß…W£T«JpsÇ…XíjKbÊD‚|™áÏNм¬ð¨:8]ÐÈÎ^g† -HE·rXN»WdÛ\7b‘ïKåx˜œù(08ÚòHE¨b)~Ow¶ú¯¡¶)]ÇgL†9»LqñòŸÿùÿV® 3°,‡3˜±ñ4C"[ŠÀ(„‰3–Ý‹A[v¸zñ=gw©|Ø´’ЖoÜ@˜ÇËgo¦„ieù+Ñ€Ìg,àž&Á©æ9´÷Î[˜øïÙè^¦‚‹ê€i—Ÿ³ª Ó±‰©b4¾ØF§+AܵNÒò% ) ‚k0ÌkÐÂý‰KM¤Î‘šÂ›sªç¶A'–,Óà—GŠ{ ù~ç‘ó5.uÍpàWâ§Dµôñ£pX¾m­UìS$´òYÆ”x”µ˜¬•sIõVÝP@¦(8ˆóW‰8Ñ€¡ÿaÏ\`‹OpPÞš†2Ú…¡¶4á®.È›³ÔÉÄíƒf~õ³ÅD¦‹ÓÜ%Ü&h¥£Ÿ%¿ÿ°Ç„ʱ G³…Yv/‘¯xÈûsä5jÒXܾ¯ !­STk4 Ì´ íƒïê謯ˆð™ñÉM,¾4ñûò¥ UÖ:­Á÷âô0j¦Íë´"S[×ÏÓhGíéœXƒñÎÓø—…fXÄS5-“¿ûæÛ—/žÚˆ=󸔣&}gÓ=°d…áéòÓ¥¢¶üÄX)&ºò“+*^œ [ùô;ò› œ5jW,ŽÍ¥àXçZä»X‡%-ÊwgJ+;½‰iÍö9!aæØ•¯¤pÓë€C6\>hµ¾«9:ç… f Œ Ôõz ¸ãªeØ5=Xy¤¬ZÀðQ*ú)ꢓêú U V(…:OݼŽÙÓÙ¨@wô²&±HÃSA ¥þþW¿÷âä¥9-Û­ ,Z¤Œv‡ˆ‘`¦ûòƒ^Ö„ÍÒZ‘¹OÛY¹òÉĽ +³—’UŸã£äÍtØEÝ&—7*Çó ÜES¿é†º.@pÃEöÏh&~Î^)à9*I…”)ÇOªˆRaú0‚Ëò8·Ë?˜0ÓMó1 ¢ ˜²3˜¨¾%âùpF"°HŽÃÁŽ4‚îÃm׸Bå]pPLBe¯N@­*Ž—[•€ØÚ(¶§çµtQÍx ° IP`|ðiB{=ë¿ÛØù )©¢;V°ýX1¡-lÓ#„³„üõ$ܸÕ]äõŠÄ~ÔùúA @vç[¶¼F—"?W{ÝOw™ Cª<‰­â¦Ö€ÒÊgJ%`·u}JúéÜ|”6‡¯ ±šñìÝ \ÓàfÝŸRqS¶+˜þñˆo-F>tމÚ…“´GR ?à¦h9.«ù9§Ë¾f;AÞE3Ù¢‡ bYŒ‘Q–µ'¢þ—ÂâÄÆñÞI è)¼|Ðâ pŒS›h²( 쇿ŸÒË@ۼ߭ŒTÞn׉F”t 9Ýà³J« °òT†0™¶Šh§RMȤ"õ2#åmBðç²Æ*s"‘&}læ€Éà`7"’\¢À¤Úôè‘’Ü ÿ¸LH.Úê1H)RQlî(­Ì¿!,­z”ŒYÂ|ähòŸý¯Ÿ-SÕê6F5'Ó«¹°ä« ´Veª"*å5¹?ç_fžf+£MžàsZñ÷-dö SE@Z(BXCµ>o»NCR Æ6Ì$a¸?xN^$uöB„©‹d™á6ƒxJƒ^xÊ”°iÃ]¨Ç$¾¸Çß^´6ËŠ‰E35 ^ÉJ¨(¾è p*Ÿä7ÕZšNB€µ.Õ‹N,IOCˆCã"&|Á:…á.éá[îc¹>ȺeT‘Vp–©uµ¶˜*[lÆ%(Á0°àX15aÉL •:ÎËÒÛ2†t€hˆÒ+¯«¯t­ v6äR#‘%ÖŽ~´4:à¾hh{FW:Ü« ‡ڜ놎S»Ê»˜6…ÆêçOž qlÃg®°%"Ìpÿþ·ß~sõÈ–¦K?ü_=zøØçc¿¼Ÿ2qÄM®ˆ\@ú•Þ‹ÛPǤgÆûìØ"m£kÓÃE`g»7¶›yt.o&z‰ÏTÛÅÛ·ŽiázF]#¾U¾¬5Ê-¥f}¦€ÅCb³¦I1ˆíª8JôÞƒ{wîÜÓ®íêfeìIÅ ô‚‰{»²&G °ƒ€  Y+Òµ½ýËû†í}ƒVÜÙ§à ‡û usF ¯ûÚ(>HsœLÁ+ÏŠçÄ[x¢¼0¨ ½ÃFÓuÁÊpõΜYªÀh£‡Ö,»‹¯fbx”óÜÓ-!ð‡¡4=ËIC4<ÐT ë—vÁ1:•Ÿ-ô Ûë~h‹ y4O¼¾wþÜÌaÛd&BaGÄédã~a‚Ë.£øá£G÷ðÃz{J;3Þü70p:†©LH:šP|uóøÀGøi:!Örˆ¸á)xˆwu„”4Û­WÖ­ÇFwÿ»8;ê ‚4ú¡ß£ÆiÚ…T~LA6K.ÊÀ„t #ÍúÒ®B+£ÛføütA?qu‹åßü?N|•y½}´6Ô0—ߨ•Ü0ò0'˜"A}úªäÒg•뉥—'Ò‘pˆÏ>wWLÐ0ñH‹äå§«óHƒ~®‹×´.Laa «¦§ÒîÒÓ0šnæ Lù{ßbJbv h“}xª2©·iê}Ý®*Ìó_¨ 2À(­TÀ–L?WB[¯ˆs”C­^H±ñ4»ÀdµëY4ºÐ„@~ºðÄX1l´àI ˆú¼p“êðö…ZÓ¡`WœŒi„˜\:Nór³Ѝ!­C(á% 9\Ó®ìø×[A9™ÅJyÞØÏÖ,Ç£BctÛìF»Ðr³ÒÍÆ=R¶Ûú6²L€ H+xJ+¶Î„¿šº)˜ZÒÐ#,…sᣠƒX¢KOÅLL_I§`È«£Zп¨ãÝ0kšÍôT„3ø-+킚§ñk6Ð{‘)œ]¬.ÿüg?Um©BérIqœKû²["ñ7‰èW ÚeZ‚‡ÁC•Íì‘÷×?CÌB…pÃ5‹fe¤\\ƒ©ãÂÚa/ à;æ±×ÐÀsQ©pëw޽ŸKÍeoìh$´hÿqN9ºbP=8Åš¹ÛâSý”üŽ#E  bõÕÒƒ–+‰Óš›·sóyÀ{…º€À¹‹É0°ÉÛU4¡4 ~k™¬—tdR>>d«kZbéaóì=R’1[DÐSÕäXÊct„KuÑÐ"ÞÅq-æöE‡\ncCamƒô@h¡*ߤ ö+=Õôâ#±h+-!s‘Btq(Ð >uêøygÊÁ§¶8–ŠsOÎ>0_õàþ—"<»—oÜj<–lªIfjÇæJåðwê¢%ꥵƒÚÖ|ñ±|\Ð!â¯|óñíØð-(Ÿ }O@‰/ IDATV¥ÿ°ut6ìc•h‰á¹"™C!éÄXûP¡Û4GeÖꮉ(\Êë–î'§/ÆO9—?×@n„ÚþéÒ“ç/oß¾é#­hôN€0ˆ2¬ v5Y+rNO_èa)ŸòMê`Zxå2óîèy¡Õì¦G2j”  9ú©ËÑk 'Äg®‚ˆ1gºÆd…ˤ੷ ùèçÏŸš »Ûžñ–ô1³×PÑfß•Ñóî;io>M»ä¤™aÿe;¿Í”†¶I;+&_ø½õŽ·£í{/É EñNëÄâH¯á€”í(Œ´´÷°ÐØ2PÃvÒêÒ¡ÎJÔeñë?üÃ/Žoÿð÷~´—«æI„'Æ*U‘¼À±å$1Ô̆ÆHõ“óÕ£ Û­^Õõf¤¨E‘GfJçA f~ÖvÈIc¹¬I³Ú‘Žº‚³ŒBu•ä½ ¶IæÕé ü¡;-h!BO£=æ=¤|ÈcøŒeË\n§ëÖòq2Øe„k᪗¨OJÍ$Ôui(ü뀇jO§×Šp4ŒW(Á„VlÅO,aXºiÅpt'´$@TX&€¼ZJøº"Ôe}´ù „öÓF®Àëiº‹¦VM«¸üd ž ÎhL!f"ôâùV§Ûbhòµ6¨]¥DÔªt)æ¢2%´y(ÁM+ŸYGŽø/§Q„sw{ùŽGém! =@°*Q;¼DŸZG ›ÌT4¾ƒ0ܪ!ú?MÃ>[H‘,Ìß¾ 8CC±z›^½,ÆS¬´Š ”ª¥˜{6âcž´©— {JH˜ ¸÷ —Ÿ@q/ªë6'P•^upX ë;à TÂi¢Z›p6€„˜ažþÂkƒíŠ@UÉp˜½kæ·ý'Aô¶`ºjX¢´ZôuñÁ"¨ny x*8+ (W¸îf¤DK¬ÂªÈ!(9?¨.=R~fLR}4©Œ©tN-8@Òšê~‚ƒR…ÇP6´BèšÌZÍAß@VKÉìm"„IcÔaâöò_üÅŸC1ä BšÙÊš,Ι µÇàÜvl˜+Z¹}ÉhøCêÊoI.?k÷<! Š7‚Ƙ{$$,¢dLÃØãÕZ¦a°Ê©mHjCÕÕgO{OÅ&>4‚Ô±A [h˜„òÑ3ÃÜU}XiTºb»÷Ùãq^óoªI&« ׯùÞ»8û  XåÄG øGúâw|ÇÉ3®û¹y£˜Ìš½ããpéÍ«3ëVÈüå?ý’\D'øúë_’æ2A׎?â’œäõ@DY6_e‰P@q÷ Eß@¥Û½Ó{=&rÚ%ÇÒ8ùfés)Ÿ®°W–ÏŒ›CrüØÍ†ÚÆ<"6¯QùȤæ0-{³÷J‹dënz|áøîË$T~ú*%:Ä:‘%˜f_8AoysøÕ«>A¯{Xg¡ ®©»~«ñgû-2Ò Æ‚ƒÅ=Â:»nW¼ð-ü¾§Æ'NÅxòôþ÷¾Ôèþ~up «|‡ÃÇKˆV©}„–rF¦~) g;tÌË-@äµ£·¥‹ã†˜*pg@øÛñãûk¯Ù¯ª+¿ÝŒWƒ…íB5-1+È:m>ŒW}Þ¶fߺyã¯ÿß_ÿ§ÿòŸ¯ßh#)¾©‚öà[Ç<8–lßS÷,#)Îy9³m>˜Ï÷ ëyN¦œTq'ñR-íûÀß°¨XS¾‹uàF™YjÈv½®L´´CÔYãİrÚÍmz›áá·¿©Ï´ŸT×8N-=hO%ÔØŸò=Õ(ï® •­æ£ïЋÀ…uQª’]æÚƒµ*œåhK$ðÜ¡Ÿ7w-jÎjI°/wMƒ#SÉ}$®Ñ‘>½™àCõZSú l È æ–NÂxF¡˜&í®!0é­îìÉÓ§µx5G!D&äH3Ñìe—ÿ@‚ (S2x©ÑdT\‰hTzH¬°’ÒJÖÝ}r<ÊÍ¿ýÛ¿u®ŠÍP‘”ϼ•*hø1Ã¥ø«ÇyºKãÕÇåkb8@:¥á‰q[~vãÕ%A[Ž)ywÜã7@à‘助d0€e›šFTŒ!Kow†ØxÝhôÓ…“U÷Á¥™3½Ç„Bãòy[T‘Ýqu"pUðu1'9¶YðôôÌU»Ë%åy$ðo\»ÒÊ}±Â«L ^Pag ôŒ•¬Pl´‰](r×;ReÁ&çYú@…&üài·:×ÊvŽ6fö ˆÊ—ö |! YI[•2Žy¥‘c½÷àœ‰t{§Ãù›ìndíNytt}T«µÅVGõ§˜ 74 lÑê€ï\d†²…ÖñMMqµÁ9"$ü§ÔÏõâÄÇ%Í¥'&ʳ~£-[Zt¢Ïlÿòð[8E³[6…þŽûô÷ó7ÿþþèÒÕ[b ŸÕì‚©¥×fJªSHƒ4® 5Óâu%ެÝï³ñ¶Éid2xÎ <ÎvϾSßMkÃMk%YÐê?œQoÖˆó+¨Ð#î±Y¦ ŸO&õöíóg^<{tãèx¾›L"vLÏ[Ý -‡m¹“aú?¬~Ä–5ãô®Œ7ѳ:¨QhõãêUn«Íãq° мªï ¬ÒRp<e#uL;ÐÕýÌ­R‰5ˆC»Ú¤± å4øg;8ùÐ>”Tïk˜„½f°ËÝ|ç0²ðe”ªyÎ L…QÜÛ%g¯óøb2V|æeï‚@Ë5‹ÚqVÖÙ±3qÆ š®Ú„·zÔÀ,€ºaM *jŠHˆ2~•ÁAŒÿ´· ‹˜^ºh©ÓtëìÅ7\Ñ2{ ™z¦£anÞòù?¯ZpÙØe^¾»œSãÍóYJ*€4“™Tèë_ýJ:8*¤ýëôD8>8gB9R3Û•tŠf©óBuÒP呸2‡À'¬Z½xöôz~ ¦™ƒ'¯:J£¸¶ù¹P¥Õlê›ßügTEïY;WO®a8³ÊH7}é–=F'/̸ !Þ¼;>¨EÆ2Æ=#Õ¬&q“/*ô0ß|ûk~âøVoF#Ö‰w¬»ã·Ï&³ Êá¶]ƒJ´g„^Åf}ɸÔÄÛ§sìû8éújÇsˆx¬²ÙºM’X7E*HåL®7Í_Ž3üä‘1F]‰ƒŸ%/c)†Ó 7×JbK®r>Vf^Àà¡7ð>x¯™€p†Sä8˜ò’qªqñ­­½Gºl£\EÉXDÃׄ°‚½ÊѲDˆÎ)Ü´Cçï²=XÊá²æDÈR[˜|h‹ð—7P µy™¹bCõðü‚ð"´û; 73Xï?Xƒ þJJŒS/¼v¢]×â¬:¢„ Û:žh¢n’³ö íòÔå)øPœao($%HMë’­0ZÑEÕ×_ÿJgöÔ,LÓ_#²‡Ùí×A!ƒœ|æèYºÔ2Ųॴùë_ÿc¿úê+¨h‹½a"¾9£ (ýЄ#IćaëU¼Vé];KCØþƒ ÕŸaút<¢"éÐV¹SÝ}2£§€(…´Ñ̨ߨ177#%Œì%7&h¡,z lTžTÚv{e‚?<£±Ëœ]¿øÕ:¨wKÐ`@:lJ¯–mLŸ<ÁýT4 ´ä¸êª<­P@ë‚¢¥‰^ûí# k¢$ã ÂÕGÄ9K`¤’ÖôZH–ºMð´Óù7¹+­¾¿ák£n$詊Ö]øÙaŠWòx:5þÍœœ‰{~¶Nnti‰’æ*¥]ÒÈ–Ò‰1\ÌÂëå6Õ]ÆíúwcK‚#qôÒ øhþø)MÒãN;ísfå mv[zXê§å¢e,†Kìåi¸ Ý}‘ ò Õf• <Hôª£M»8C¡Çµdÿ!m‘b,Д•»KaT\šåà…L’ç1A>ï /xº¥gCf‘$#{À.žmùâgøÓÖ;S”à+ míjH]š\;͈…'FQ}VDÕõ€¼)„ÏyzÊMkݶ0]:~0åpîîˆ#û¦•„É>uWÉCº†EÈ×äÔá7&í甬“P+J×øtû‰Û¬ÇÜ] -zÐék• å(éŠl†j¸i.®>¥|“SÖîÈDñõwà‰Fµã®-SïZ%´ñ>u_ÒVú‚€cª˜Š¦l1±XÊËÇcL£½§Ož4ˆ˜µKÎQ1œÁ‡×Ìfì‡Çšz ‰Áy"ð)Ä4'­u0a®Jh~ÉMÞ¾sË y¶üâ¿ð…/åÅsh*Žÿd‰3˜Hü’) XvÑ1â"cSMUËòMܘ/F\V@׆5ëšÅ±OÂùòã¥ÙXC‚žÈ\Èá/Vâ!j9†"òÁe4—cMa t/^J7N ]¦;ŒFEÆ«ŠÁÓàªòt›ÁV’ I‘RÚisgÈ}”§×äÌ”Q´ä»s©Žºú7<‡ãû) PBis ½ØpsH0™aq¿]k0yðý¯p„%>MËÛLºê«¶-¢ÑEË%È S£®)cT,5ug`ÙPS+ À X ™¨”ôê}ûÎ]— Bn‰¸× €I0/ž>±ÉãiÅW$ßa?»Ã<¦)ÚÿÁ ¨ŽV­ S8+ô´#ÙlßeRid:°Hƒ P iòA“À@iâèaQ@¦¹º®•—JK²*ÊH»WnpÞŸº± Œ~&zêM><{òØ‹®tµ Åì :W6¢VË´+j¹sVÖÀ4À“MÖ–Š€»/0‡€D"˜ ÅûZ|ðA>”d&ÜZó®Iæ™rºÑúá&àå†ÀìÂe>R»;IF”¹ƒ±Yø¨Ì0ÓL™’µl¼Ñx¤]æÚÝꀊ¤#ßݶÓ*„©þðí«~UÉócm1(iF@\ˆËÓtw+öÔ‡ ² œ0pNc“lK“¨Ñ4™Ž¸!–Í*Öä¢óS®ó'9„íôüNÆQ@1âSlýª¼¬!†M+€}ðŠüC¬êé6 çz5¾¡í­¼”Ù:?áÃlAðWµ>A-$1#*¦oÄ+X}”1S …c8Au¬O¬›.vŸž24 DƒBY¸‘oüçÁ[±êàºìЉk3Þtôôɺ Öõ’ýŸ¿´B¦xFÉiÚ¬X™Òt²s°TUaä]P©Ö`…Bª¤Kûž™ÕW/¡KõµYW4uÓ ³ý–ž´ÐO›RÙÖì‰à«%X­Ú-¨ÊTäãnb™’’É­ í)LÖ‰\yëm¡ŠÅ*J@@:ANZ+¾8hk~\Þ!¥ûÈ}¬ePL}²²RÈy¾h.Œqmb/àû†8Âü·ÜAã$2tLŠ€Ô®Ÿ ôú˜Å6’3š6÷ÑI2÷”® k©K篨¨:Pp¨2C&ô©Ï‹R\ÊÐJ Iø ¦òœZÔ…¡kÅí¾¡:~ŒŠ©"_„d´ÃP‘0lIûÍ´ƒe6ÊsˆÍF|†Us€7ð×yÖ²W&È®ø}%Kð§ô OˆSà&AŽ54FõºOÖô†¿ùªb*@ÔnI[us«Q_A…õm8¤FèW;q áòѤú®•߸B/¿³ÍÙf¯Ö«ªJ›×mE2Eï{Òã7áobÒ}™iµc^ä®{ Ã5Jc’K$Ä%Έ0iÛ/ÒÁDÚL†K»1sâ™Þ?‚L’°Åg¦ôt™b@ŽÙ„›OY ϱg#x‡'E,€Žuщö–kê°]¿“«J(#b jc’™?ui¶«[=L‹S T+a›OÉ]ŒM¬ÙFì’\ut¦oŠt±òÉÈnû×®2HÝ’K£ÌÍ_h¸xí0i¡¡=d/ÙïÝßgèJÒyO?C@ ~1ßVƒ‰™à!·°ùÊàϯÕáC®yÌ7WUzè£+k¬µ)•R`†[%Æ‹F}|Ó;ª{|Úìs*£!ôÖja÷â­±l©Xö­¸LwäGÊ.;eݺo~Uq9)æ‹c©Ævü;Ì7~ƒOÁJÆÒÆŸ;.éQ]h3Õ Õ²9§vÍ«œC{(O£nôJK lmÂPIÖ Ûâ@†l0Ü™eç£bØà!³úiÏ¢…]”†è»÷=´§›º²õ¶-št­ip"V )9™·m´KˆÞ¥@µ˜ˆÇ¤ç{ŒÍ£í-íaf¥™›À.e·€ §QÌdK‡/}õ/µ„Ÿ½Ùãxb5q0O5§õ&ÁÄ }æt'Ÿ°ñ@cÓÆ] «²4Iû©¼»vI ¶M†\Ù€ö¹¤>»»øéµ»‚og™×ìÝ@Dþóç¶@4ˆÒwLÄãä6×^œšè‹¥0Xö.ÚyegÆ ½Cl—Ïd“OÓmyÕñ ³½ÌC–S=}Ðm‘¾ÂÒ¬cYJ ˜éòÖæ fÆx䨃62)1Ò.” T½‚^ÄZú°|? ¤ì“ë†p}º@­#'ÒY<’H•fÿÓ0,wÁ“Ù€«$CƑڔàå³ç´Àò"ÿÉ\äÈ­¯¢ú hœ§| bP½X¹xÔ‚îARIíº$¸–FÜš%r:F·ñ ¿¡MÛ/ÿô§?*ÃÖtbå„ßñpº7­Ù °Óø'µâ£O½…†zÄÙ}E9¦¯ˆÄ&JCðhHLãòbÖ‘¢H¼Qxª?—*c½Å³"\IGÜxC-n¾êò] lG?&Wbþí¶iM#µTZ{àëB¨2(ñœjC{{K}¹*Ì`iÇ&…Ç¥]èI@ÉÁ„¥Kk$Tc…Žo;²r6úé§ka‚¢î€ ½€Ž˜å Ë&8³­ûI¨àÓf™ û)MzSWI4aoj§i lBû6ªÌäfþÑ¢®G.>w[™&ÄEßàó±ƒ`kÅšAyOX‹SÖ Ï”û0,£.º$DUÜ­™ñÝhÖ¯1 G ­G€@d¦= ÍLÊá{œ£Öì¦2Zòˆ%ju×ËÞ<L_s%|àkäHÀF3ꘛij⊥¬h&ùƪ€ Èâ*XéÔ2&ò‰JW½ÓåË÷ÜC¦¨×Þ)C¡¶7Í—9[$ÔùŠøœÚššÍ†˜ÜG£ ‹ˆMŽ"–ßÌ â¼òZwÁÊOú¦k$Æ¢–´G*N‘ú&™Ë=CF ÷çç&a‹èâ±Àä áÔ’JéÑC:” ¼[¾j´ŽŒ àE¯]j-Xâ§¶@c8BR鼪YtÛ2ꡊdb®ZBùO&í:Ðú^’ÄmlB™s2ØFÀyБ»e K¨Æo&ƒ÷÷¾ê$í äÙŒyÕëfÄå?Ñœ¶°EÓh=€†h爥00”ãÑrXBŽZóè§Œ]â~ 0Æ# ðÞ]yæ“÷l0°1eóâŠÉÿä+ýx$á¾0T¦s.Ìáøã|UñWÏ O½&Ó+Ôóü< ŽMfoÎ5‘”¦cîåŽÞhÒ  ¼qSº¿S ôN.568DB_¯QFÔr¥~ÂP»jøKz¤Ž…Æ•]¡&K$¶¨{¹£¨‡{[8:-“z "þ\»rç‹{l.XfÈÙgMjñ²×Ãg7Øô²„N™ù4(  d:˜k„ǨæŽK>$V:Àª«áàçèP})«Iñ¨§G‘úÒœŸ"@À{ô¾Az)8*õb¦ö±™Þ£#Ç7ª‚"-ºÔ‚!šóSË»N9šUL 6Óx&¼›/@”Xe">&JL -ȤT 8Mu@p•P?1J§ .#B%Çí¿~ãÌÊØ†[€ K‚–ɪK³ —±öTÌ¥ 剟t–( â³ö°5i.åÖ‡¯pðÈWJ«]ˆRH̶)¹aHTô^¸Ð¸÷ƒóOŒeMZÉZRr~ß䈈Ä(ÀO“÷&¼}gÌ‚­œž`ÆX ô@-­kE­%Á0~ŠÂG& ;`•tcS 7ñðÑ¢;˜Êdwÿë窜Ê~Épù å¹Ðƒ£´»‡êoì]ýääš3½j«Î³œ¼ÜÁ4 U !¤v,êSGÆ~ú…’ê5êB„$hž„2ÒðÅ–N݉„N¬$F0Êc Ô¯C[E˜+´ ¥pôKææƒ)&ÁnÒãË´µðäF0რ&qù wugÉTD|ꬪs ð1Š¢ š`nÙ‹¾™.¶,4@´ëÞøm’¯€mnÑã˜ÂA˜Q ²9ÏL]-9ú>pôdø¨„Ö©âʉ[‰xÛ‰ÀJ¶…CT^Œ8"8øÏ ¶,¢Â‹dXÍJ?žHÛ0Ê/kwdµž¤)_±Î2nêâüþœž;‡…qòMNª»’Zô€Ý„§ÑÎ SƒÑ¾C²BÑ.6‚9È7t3Û³W¯ïÝï#Êà«ådü™Î¾mL ´#(ဃÃh커Á„Úhj{ IDAT‚¬$‘i}‘1È¥ê \gf6æc&ìÁ„‹¨àÆ+™òO+†³+v"ƒ´küp¢ÈéKâ³w'¬F òi27¶+‘hÛ‘)$­ÛVXZëþqí¤[òuHÇ—{Ëòt&±)º”YÝÛêæÒm9g·ÂRgvacª˜ä9‚ä‰HùÃzÿ&ˆ>‹vS1<1äè>Îa%宯® ê>+Vi©* N|¶ô̤i+8$àSÍ®ÚÊžúÇôèäI™Qz¸L\é{¸‘¦¥ééã§¿úáWÏ^˜;½Ð—{8·¦ Ö!Z’³¡3΢I±R£çž(Ùo§F¤?Ô‘Ú¶îNIP'Óš½ 3µ¶+”pQ˜qA LŽÄ TCü7´æàFQ#ƒûñÎ-»ýÎìóõÄ”°,#=ÁV$éá^Ãjqj£ó¢ i‹ŒQÚÕÛðÏÆ[Ò²>æÃ!šJUÆMhT&V.¤<  (¨f›ƒ|~o©XJA[†hÅ£A>ôçO7Ð0=Ú§w-ª@€D‘ƒS¾Üð軇÷|‰ï˜oÑ2jˆþE|c;7¥wÌT½&#nÐcù¼£~8X¯Ï“Ç8á0“—ðàâà¾!G0ñô9#=ÈaÎ'«u‚À:Ç ËÍ”‰]Sªžq)Õœã¥áBU´kòÁð«_ÈÍÇ?Ï>,P1—æógOà3Í% ê;]þ¼Y• å5á û¥z^<Á6uY=%äÇΑÑA·Ü9ˆ½ À{ë¢Ã‡[DCà fki³ÝÒ7O8%p"ܲàHÛdÄ<Ã|ói¤Ó¹Ç|¨Ì}QEi¸ÒSÐÕ ú53lÇe²»Â.¨BCBì© n&2×Ð$üäe4‘6/·ªUæ|Èñ‹ÀIS>*Ôi*Ý q,êØŠ“âQö n¼ógÕ…b5ÕßœYm´õ¾‘VŠž±z蹿ѺvB5ŒHº–.íâv{°­x*KI¥Û2•7áfµ{E…yáfÓÙÎŽÒP‘]]¯M 3¼õ@ éU¼s1Üåðæ5¾g‡Q,…ƽn­ÉŒµ«ìpùð4†ÅûT- ¡’›#ÍÂÌctZ^Q” L™•/ÞÛ* "”1?È^y£ù¸2Ê£vÛ ½éB;]‚¡ Žûc?ªCÇ#À Za݃¥‰m×O–tw¦7ÜåØ¿± 0 [Úî;M¥¼‰“y”´)ðJÓ«^Aöøœv`¡C ËÆÅð!¼Ñ†¨VÀ½ÅƒˆclÉœSA54§ŠÐmâ3¿ AÔR]¢6]ß ó³ð˜¾PžÑjb9?cÎyõ´É¥ }ªü…IÕ<ÀJMõ)´¹@ÆÔ˜oª¥Å™>1ÍbOººÔPuúŠ|ô¥YÓfÒ鈬‚×ܯæÍF¯Ø˜9p¾4RpC”Ǽy< µ©ŽQ°à2T¨NmLgwü^§F¥]šËO·¨žÒÈÔ·hXfúàôås®Ž3ô²¥5{½—zÓÞqc`Ze6‡31‘iPwÑÖV]kþ¨PEBsˆõǤ+4†9ÿ®÷ H]þÙŸþ‰\°Î9˜WŦÞùžè,éÃï›”ë=£“ôÛÇ)û2ÉÑ­Çä¯5!¢%pUh¡&AÀ—^Á ùŒ‰Vì’Î)C´×³'1¦>¨x­–˜ÍW÷ú\ zÖÎñçÂrÙÊ ds ½›ýªÉ#ù3+¨VÜÔ¥Oj'E$¸x MïÈjœ ïŠÖ95‡QÙÚR¨ä"¤éÃÚÈÂþ }™SǾ¦ð†œu< ñWTË´1±LèAåÐ{û{sŽz>ŠŒ6´p¾Œþ½PfG×™·T.XA#°¿0s-šÃdó¦9A¶¥¨¢ªùT9jÏH¡Ø^0Dó¡?Þ¹qL0çÕž·eÄ&Œ&¥³‘‰¥ê æØïT*[Õ5$RRLÚÔà”÷v_(Â;#Œ†ç Òv‹Î½6”< a!Ác 0¡Gh"¸ DEá»æ„šêHk¹ÿñ1XeBb’é3. þ83FÝ–SÜß©å„ëÀj`!àƒÉ3æ>ÌY÷¹ü>´)@p&®ÕŠ2x¥!p Ô–äzˆ\ð¶U˼‰§° „ä+LÑEe掺å"µªÿI' /д”SOFÀs²@sÍuâe‚¼L6úüé3•¨­©æ‹—  ÈP$ ®]øè&Ó¿u5õ@YF÷é‰pEÔ8.n£–pðsú†DŒÌê˜ HnĤ{KÛMçhTE$»ÐÞÜp;´xÅÂhhðMlÇ"ü•Q´©´1Á÷4±­,þW‚=·E80V¯,ß&™Hkî3;ÕóaœŸ$ SìSH·1üڅ΀e˜v†Å¥”$µoF0‡©—> sщpX¢<õsi„6K‘# +?XÌÌöôžÿÆHŒä0–Õ¨b.g-¼k¬’h´@±šÆóBh’ÎÌÌEG}ÚªÕä,ÔPs™»b±âê¥;^‘žI—º­+N®¹Y_Ûh¶ÞDÓ«ŠtAÚ°=¨Ð5/T8©«üÖ…óŒ>KZNÀ¤ßë7¦ði2å\݃¿‘¤½rÌýã-?Ì€vNdð8ܦ‡µˆ¡ 9„ÎèàHÍQïë½K¨|£q/1õ\‡ñê\'[ÛÕú*¬L\Øÿ&Õ¶ŸP4$C¤s !rƒHƒ3¡¬ž¥uØzó'ðX¯òòäy7AôÏN^ÐZÑ‚†Àq"´7Nœ2 iqSBõcG$‡ºë¤žæ¼ /¶¿1SÌ-éáД\ÓQG…%ŸkræÐÞ:°‡eóg"¡ÞWˆ^ÜðñÜâùO‚ÙWŽz´¼ªo¹rtS£ÛjR€€b•:Çì:«Ñãáå°Ï‡î³Tň3‡—·"†5`>ƒTxˆ­FhLÁf©öο3„0kС <éû³Ws:³7æ  ­ ÎÄÌ8)J'_M¸ ðœ-ëµH»žy:_«íƒ—žL÷pqwbBë›l¾½¦Ž r EÇm œî´xû†œÀj%g20AU£F‚>¿õ½°”À £1•ò09ñ ú§ƒó¢µàoÝL¿ñ±îP¿ÞÒ²òx"só•i@ íÖÇ·¨OxŸ°Ù'tWpFŽ–Õ€‘UžB‚º‚²gúìeuòÈ}Ž;þÈ#¤ÊÛð•pºÝœÎB4ˆ­‚K•>½ÕÀ°wM $á_µ£Þ¹ð§3 Ì ò&3ÒÕ2)ª¼¶W>õñŠídmãȧk…š•£é4ƒ!Záj‘ÖåÎx1­ïpBŽÙXÐ@™ ˜gÅAÕæ‹f¸§£Ñ–¹­ÑÐü/‘õÛ÷m‘¼väàÓ:!f±‰wŽ•g8q˜Øs‚WÇíW¹.¡ Pˆô\c»,)m»D…ïxnY“¹èjß[k 8Ï€eï«?¦Kf‡‡J\@¯ã ®¤sØ[&±|`e~ ÊñBg§¯¸C1)G#zhql挧FÖ aDê'Ì‹Éè½YÃ$‚èmÕ gí€Åœ÷vb9ÌÆ§Á ž a¾Ÿ²fÍf첑޴‚#a™ -LàªG8ÎÆI¡Iƒê„ÐàØ4­¤:Ê|ø%¸%…±V$ËZ ÎXÖ¿ÂÅßûÞ“§.àˆ pɨ-T@—,9y„zЪ‚©„ÓDñ†¿|h:P§‘kcÒ| 1kí5®ÉŽL"V:‰:d \/tzö‚àÒiiBŸz<ß`ªƒU+†9.höÀÚJÄ(ÚöþîÃógÏ£¯°p£‰1õnÙSE+iz–Œ+§Á‹0)õpØÐ.^t0kP<î’yN…a;^Ì¢;¦‡À‹âøC{À]•œ0ÝàN Ï4©# óºäঌZ®“žÝëñ8ß®òís½‘=ûZoî“L©PÓ(úL{ÿuEÑdM9•>4bõûO}YU Ï6 ºtúêY‚=´Tc¯ÞïcÈ„ì{5'¶ÛŽÇCøÈ&À}寸wÝ'^¡+t ‹ç?ºîäI!y'¯%éÛଦÌ#‰é ":“ÝÓ×§§;õ…'?¾}ÇÖµ“ÓW ÊmÀòÒOÝ5»Ãó¾=ë¥B˜ä2SÀÌS½89¶šØÔQB^a&d(¨~ =–wÚ·4±¯>×QÀ8ÃRL4¾í4졆£{9@ò›®¯‰O±äûòÅKÓùoœ­÷êÕõkG¼?Ï–ÿûôéÑw¿ñBÅÊ`smudœ¥y•ðÕÿ¦¹/_Ôxüè±w4ýìñcá–‰XOum&qÚbVÀê:ØYëðÔ9y©QÂø|…'¢údÞ O0œGå$µƒ;:A]!IÒƒ±³6u!Ù=ežCÂÅvì‹ùøkó 3±4`ê#V¦¡4†Œv82MrëÄÊ8…{*ž_¾äØEïð^½~ ~<ŒX˜,…aøÄF%8:Ëòa«ÁqÅ6Û ª3ÙIò$ÈÙ2Ä–IŠ8Uì“ ø²ìèòÿñÂÆþ~Q¬™HÄ=2ï¤ ¼6xÆb1Ñ‘DÂ&åõ]XɉÀ è‘p5ˆ‡ù@U>GðI×Õ&2¸¢JÕWï“3×EŽÂ´4lV̪î|hï I¡_ S]`%dd2á&­ñ¨‘_—ÑS(yyãÁ=UÝO¬×Ðøˆ–7*x§¨”_˜U<%DÊ9ù8Ë®›éÓ–•GyM ŸÒ]|Ȧ†&.V`I^<ÅÎñ\Å…I/™Åp\UÆ…ÙS&O§.îó™õHª°Ú&—¹Å$\¢Â5ëãOCÛÄJz)©Á  •BÜÁÖ+ÈÜ9Ñb9âÚì³ ’‚"hÈDzCÏpJ$%G ý¤C(z¤V™ý߈gðI"QQˆPœ@ Æ3.HM|c ׸`àduÒªÀ-¸±Èçg÷:µÔ°®©ž†ò°pUw-Õ ¹9ï¤tSYŸn㤟‰hRÛb¨Æ™%*…‡†’#»Lz6DgdK™îæI‰C™sÑXäXˆ˜¬¥.æ R“,ˆ_[)^ìžMôÍÀõÚ\â¥2Çâ v‘QKþމÝO¨ëÎ!Rn…ñJؤ]¦Æ(ìØP¥v§3@”·ËÏ…¦Ê>ÅUT¸êmÎ/áã>(í¼WIÏåSèóYÜCŽüìÌ2(à’Îâ:áÀÒõ !·wÞÇ®4mlv‚›&c®dz6a„V&~¡¡‡rdÆÏGí“0—Fµˆ¾[÷–~R3% Š.-N%ƒÐ$µ£óÔÆOW­O¬À'eÏ;hlÚÕ1›&¶M9CgV=µYnM©å»Gzd•?Fíc³13<ß} C6f1sx^Ås­XU™ÓDr^&ºH“ÒšP&Ë"émKN*tÉMeBï¢ØàRŘ1ÊuÕ(` úJNƒ(MVÉqP%.M³_þnÒª07iÕyÑRÐþtÍ7ê¼)‰CÌ'ríû0–À¾úÚ©˜¢jBÚ¥9øS‹†fhÀïkYé!…€Þ Üë“Ò4\‰"~ÁpK1.Î ‚’jƒÏEvÕ°±¸'õ>5:6Ó¹£C©ü¢¿™ýå €Â=Å&®J[Ê5HƒNìþâ+…4¦šM¨IetO¾&°…d¡~˜ë½>E Rçj(0ZACÄ„Wc_½ì ikxÓ©¢F»e pàì´Wjƒan@¼8ïÖÀ`uc°mƒ„ÒkÝ€I5+/íNºKƒ&±D2]¨¹@’È &_b0ïE¸¿‹pµ'¡§Û|cW…‰L¸a{Ê2…7Û\”‚Ÿê.·ÎÒÓ±éYfJ…Ò(z£Ö^*‚ ‚ŸÃ1"ÌaÔ‚Mvólö–ƒ¾B4Ð r–ÃÛ®GK°žnʧå鮡 o¨ÌѼ´"a2HC |ÆÄ¡ŠÊ’”ü ¥ñ=,B™¬ãA3"ùe©|ã! !f{:JÇ%\§Ká©®òËŠbØZ´p“øhøR9í›osÔ•Ç7¾¼hde"Ju¢j. ]’¨¨âî”XKZ¡ Ì %Μj73"~€ÁËðžÊ YBu—aÃsØ×yô²f·™§èÀ m%²£Q£EÒ8Oi‰Z”ƒV§®î~ŽÃ¿jîºfhüv´qxÝ_ož/ò;å†L¶˜ÜÏÛíé,÷ó¢“sÒИ5ø¸S ±šh'±19%Ñ•cæÃÔW“N­ºF AÃTQWa±È”£u\Mu¦ç£þ†œzú8Î{ ÃÉÜÄ+Âàf2ÀK¨>“<•VñÎíãÓW-Ð@€:db9É4pÚÂ÷RRWŒ ;ì¡¥R³”f”Üfül¼Z£{¦i¯_mgà¨vÍ ]séÙ9±*jAœ… rÖB•!Y$ähÈ‹ëôDtçµ2­phÌcÂ{.&ìs¹C«‡Œ×¢lü\œi/F*9ù‡±D^f>Û›zGHãLâ!Žç™Ï(&9§1?`¸ÔAXù½/Ó.ê=]ÒͱJ2šþOòS¸¹(—Wš°„WÛQ/Óô­œA>ækš¸%ø Å´¸b—kÒÇ,Z>$ÌQKX g³K—Õ6Zn|˜m»ÚGièËEŽ“6©PqÃØBš3ÂZKLÓ†žÜ >'DàÓT´(Ì”D¾K\,‡ÍñÔ­y¡áÅàMLÔÍk¥оÕA¶bžw{g8oi¸6Õ¦ñ„î¹*~*±1óAfpƒx-º÷s.ì&@(ACóîjnðÆ‘YÚë|luXØt^>Q”ߨÿª÷ÚÌ™ñL#‚úJü‡¼¦Ï'Ï9 Až×Ôà6{ohévĦëì”Aa,“À"¬¨þ¬ç2íIãžL(ƒƒ‡£&YGv;Šm×v0RÖ´œYÁ©›\Æx5ʵ*,sÙ¢<‚×2ýd¾|Wt‡}ÓeA2ýX%plˆñ®‰8R´*ugªàÕR”]­¦$7?Æ™™åräø~þó‰Oì–½Ét¨š’Äe²À—»Þ¿9ÑÝpIü»7¢—*1Õ@ +j¢ pîÂ3¡>®¯ÎB‹½´P÷sxå¨vWLREs›Z+FxF9TTj¡‡ã•_ÞîQ@Z_{ ^“±ŠÀ· y øÜŸú þ¢ 2äÕ’PD©îBÊr¨ÅV*ìxUXñu¹Ñ|„û'rÎó³òEäÈ6˜^EvÕ¹gwUpoö¿Ò•_hîÛ^IÀÕÀ*çg¨GÃægØšm‘]P«iÓ'ã=ùH]=ª»‡Öhö&p "¦U­{1wëeL½9© =›ð¸ì%y_EØáf²¦ˆH7&ä‰ÂËÏæSù¡"ç•ÜSßám×5z˜¥Sxµ ÌK/š¾åm[¥†üé뜳uáÃé+_Ýê€>8/ÚÚ&0jÙ"·È®Pa…” )›êäª3nvBTxª·]ú‚/UÓLšrëØP¸°£HI3Na/Kåä—ƒ£äTWf}xÃ=á½â–F…D¬ŸOÚ¸!ŒRK9~šŠÇ(™Šj-Õ.ÈúJŇœ”Xª¼º˜Pá âÝå(L“+3û“‚7"S^&îXÒ;-¬GïØdÏtà ֹitp>DðÄXÍI¸èsÌâ.ØKBˆmÂ:Ww±òÛbMHÛ¨ ¹×ŠXûí·ÜœÅ‚=¯õ‘˲…õqÁ¥±`æ–lÍ]‹ãðêóš ì¡±oóouqdäœ@ú8Öˆi‹mw ŸÐë%¾æ(Ï8e®cmP ÓÛ¬G]‰åx*=3|%h ‰(ƒ Ñ®n,ÈÃÐ_‹ Mg-ÙcW©A\ÎØ4¬°ù¦ÎØ>Þ*Ù@½vu"ù% BòàFX %”rŸD8M‡Xj9nMɵ¡W‡q)¿wZ±„«B ëqt´WÉ‘T!‹¬¡ÇjtxµTîT‹.åRÒ’ °àª®$dè2€É–Ô¢’¬Y_àègv¡Š|?I_Õ3ÙóQ¢œmÂ]™ZÍosû  (#pS\Ò³$ÝPy*fzšÓ–pWWYÐ1¬PFPbÆ1ßä4ÄèÔâØüš@j¶OÉGÝÜçSUÿ<®C>´³AúÞ†>2»¬DçjÝèlR¡†yztÚ0…§·üÕH0޹,MÙ\#?&gWg ‚äÓ>ìëŠ:+ƒ}±—ÔyúòTH+_0ÇI}Š|¨ðcZ2V…’ ‚ŸWÍÕo[ËI¬CÂ+‚ž >JÊÄR~ÒÞ5ÙX±V°ÒQÆSù[—™ËŸ2­§Er›ÕÚ-3P[ZfHØ×%BfƒK™±q:DÀcìH|1œ…¯¼†å(¢:4¢g^ÓO"H{Æ”ü¼ü'ÿó¿Ã@iÔ«Ú:D,e¾zñôá7¿|õòñÙ‹gmáXmàh.Dül É­hï<æå¦V‡€˜+‰ «èvt.\5"–›xïçæ0"åqö3w,]‡ ›b-á{«+½éÍövÂÆ 6§]OŒ`M+¬z? T%Kï¤eâŠÒe,·¥ÌS-:rÃS—GZ—¹&Ç!šíçÑ&!ªÛ½b9 %µ¾äk"ýšK&ø hNI1q“Ø $`]á}îqHø&ca¬¯ìX **œ]½,'?&½…cÏâãþ&Ʋy?¡§iÈl1 ß æJ`fs/×Ù+‰"bE4l-2sÔjÝš¢c¹˜c§P~CÃ-¯w%ŽÏUbu!ܽQôÈBRE ¹ØÊN%ŠsÙÈÊ";Êç>v‹âúl¬þdj÷̈KE䃉 ÷áUr_þo¦ä«Å"•—ðX·´2ºgÔ×rpÇ£7y=õn [Ô):‹Aî ¨ž»„G¤‡'ˆ"RÔîØe¢>gò>¾ÖV¡Æ/Wm8mªLEØ‚7Tï’¯áÑ`;#¢–Þä ùs—Ä/h7?®è\Ì{Iàè0–pÊlã|'oáRþ âªÀ‚eAÀJæû¾=|0‘)½4jÇWÅ » szü—†íRçç xà›ôPÌfNª:Ë=÷¾øËÕ¢“ IDAT‚xøžÓ7ᄌw¿°BøCë°ª½•39Š$ ‹ckYÐÄÍ OXrÇù€/hƒŠÝ99ãïž?æý‹G`aµÂ{„òÖb©Í"/O<]b#ø.¹2÷çJMy(©©ïww¾0e5HuMfŒV˜/×FRGÚ4‘ÇÈ"9Š´ÿ³º*¯Öˆ.ma~•)»kŠáZŽS©=iÆ>´tMQLM@ü‘lÕ·émq@)¸…§|ŽŽÊ†°xÂD­½À‘SÝ‘¾"1jÒ±Weˆbä]+J›X/™h,:Ÿ/­à-ž·§­Õ´+^Â. îãê6ª ü(Ãþ´Ó(>0Û"ÂÒ;– Ê£äÐ(w–ói/TýÆ ÆÉÆ)Jã¡NÁö‹/uÆÿŸª;íÑ,Éû^û–YU]Ý== i¤E²`@öÃoüBþ 2aqÈј3úFü(† W"akL g†#ÏÖ]û–™µú÷?çÉìÖíì§âÆ=qö8q"nÜ{Ñ20á„÷j?8E•#–ÉŸ5h$Î`²>‚ 6NÆ(i«ÚêÍ”LRdñ›Žçf½=¦:¯tN.8æ„hû6û“ãu”Ú¢f·TZ&/"­ž19ÆUkÍÕ"•Ö¦,'ß°Ü/²î$ Zeïyk,e-èر}DóH¯x`Óʧ™È¢k°¨û\!sçRÝ]؈`àÄ9ÞTSXl(‚Q~QEóm¥x˜­¶Å0O¸SõHêjm$¢Û¹17) ro«„Ç£Uƒ‚¥ei+,Æ8MàÄÿRœB°CôÐeTRcL:D޽̠k“û_ÙhÆ€ª¶—ÑHâ½ÒkÎ^=}ùäÑÉ«—6ÜQL^¯ßè ‡š 9ÝaTÏÄÛ Ù(«6°AŽÌ‰w-ªÈEØ,Þâ˜%”LétkØÅHì*”îL‚φø6@N˜&g=[Rº аʮ1²K¦ë72ú.éx*ÀIw.A55˜¡Í¹Í5ï÷ÚS ' æ««q¿ŒII М×O;¶ß&´„TÈŽ¢‚‰D•5´7T]Üø›ë~h[tcïyÇ¡í6ÃL|躃ҕÖñ´Jzs&<ÕÁ°ÐjÎdàu–ÃUˆJ¤, :Å_7X>È3úp$»¡;$ +H¸Äµê¹W‰”`£H4Ú.˜A^Í]¡e0ذiÔÉtÎ 12ft€ö̈9C%g! Ù[ò™!¡î>6ú¦0“9È5‡ ¤*‚ƒï«¹Ú 1ú£¡µ~мQoCa gÓÖ¯y$ÈiúÑ—Vq¡^ži*‰„ìÔ‡kZâ„f]åRÞµÇ 8ð7Ä\´VŸÂÕ0VÙk}ã‚èð9wú]HüÎæ03sÒ÷ ­Õ$Žàé)r³u?(Õ¬Å˾0mÐÒä(D ¢ pOÉ–Ã?_ñÂ6'‡ BeP¨Œ\iÏ©æ Ðn49ðˆÖ^ÎqÂÃy=ލðh¥l½¦‰ölxŸI´Á˜ñmæòøÑW¶mß:¶éöîçú/»uxr>m6Áï­ÊH°£&ì²0¬/ÖP/ÚÚO- ¨9I [ >ÄSðqÛÃÍžZ ÂöÚkek®:u(ª5ºSfÃlùÉmr¼ña:$RlÏÄ`  ®+9°’7ÃÖ3 M]u‡Ò”P=T*Á;RÇÇ,R‹a¥^›œ!%§JÍ™D-‰–[˜]EkÑjDºôøÀa1uP’`w’\_U¤ðÅyZªvêXæY0œCŽaóÉ)Çe=zÜiÕ+ÎïjŒ¢ÌâÔô‹GÃNhzŸîÆ™=ˆ•!Y‚ù7Ògoú†)L”¨Ÿz‚¤ |K¿m?Û¢€f}©LqÖ5²£‰®©,þ&n¨Ø¨hÕ€ÚyWS‰Cž¬•òQ?I¥\$âPd?ë@)Ë¡•³q±’Ò=Íg”Èš€Ü3äÝ¡r(ƶ^£LÒt:®žq'¿N¸¸Ìù‡ø4N&×o{*r²ía³žÞî4r®¼ôØ«!…ÊxKc –.Æ<¨ã W‡8¬wøo䨯]ýwó”PÕ`öxb¤ïß½~òø‘wF<øäÞñÑ=r\½~ûÁƒOûz|‡oa–°—G϶kþßs_`x’‰÷úH†éE®Û¯y†Î#o–²ZlÀ xǨ•¨|¦;ôœS_â‘õºÒçà ºw5‡&’oŸ‡ ðX„SÉÒýX´ñ4Y€QAÜÀrñPÓ”<DdõÖÄœ*¸é{ˆ¤z”/²Þf "˜¶ ?HFÅÆ"]Ãå.)ù WÀƒc™©yqé0بt,Ø<¦T0ëú]*¤+*Ë6.!MjÃ*‰æi©Øh´@ 0äMÁgňC@åPïBÈ©«ò‚4íˆ,õÿo5Ìi`Ÿ-fJ=V­ÑÐuMî¯rܾûÖˆe£yR«¦W¢CyßÈÅ©Š\šGæZêV!•9’Økà¡H!€j|C©¨ÜÔq¥j¶4C‹°=ÔܺaêÖWZ!äu‚ìÖrÁ" ŒÕnµôêvîá£ôó™dH$‚'6Ê8¥ËWس‚åÇüÁîëA¨äí3ÑYÒÔKltM[•Ea4𯼶ЄU—ɲŒÙ; •ÑÃŒí‰Tb $¢âœÔð(ܾyKï ³yöXœ":-~æ9´æ×¸šêÆ÷POç@|ŠÄ†Ù’Âb„N¥Äú/ÛwÀ”~˜”ÃÚ·›€in³­É+`VœÂ"W°©c†*¨ø6£pSùvq]À¯¢b‰Þge‘´œ$',žsÝ–«á%-ÇÛk~ùO?ÿoþäÏcr&¾ÀDvmEóybWPiYN=Ñ¿þ^²¥qS互3®DE«‡Ø ƒOZáVÜ\ýxPtZÌwÆt\ã³aø5ÁðÊBQú‹J8µ…gGHø§«ˆ!Ñ»5IMÏ:,J(±R§1d¦¾Îèâj $K¼c0øì`l/íÕé=àÃú åwj¦Îæ†NÕÊZ“ÐÐ_õ)°~xH‘y zt9ÿ(¼ø£fÂЀ_Üúͬs  °‡)0 ÌváW{XÉY´Szs)ZÍ,ÚX&k€ÖkYLÆäós÷¼T ˜V:² ÍiÕ’ ¯uFºHG”c—9ÒÑ—äP:Ú†;ÃVêãydÑ/Hä@Bó\¨û²Q÷ g=Ì$ “+W¼mI…m¦t Žf$¸Vxro¼Ì£»HŽŠJw!C€B¨MS–Æ[½kZ\ɇ•Œ¢ Jž±ê„a= Ë5=4’µÔ”ÚÇ¢(¢… KVš‹ZN¹„‹T¨K‰Úz›#ü€e!8IŒY4EÝZ,6`FÈ©"ÓÌŠ™¸–FÞ™ ¦•:„F¿€–VXe‡òöt…Š]ú™ÑelÔOë‚ñ^¢ìT“”Éþó¢czÃÉÔ7ÝuÚåm’ÂC%@®ÇªQn«Y®R"èPÉL`×:8sÊUeÿC¨©ÌLDŠ™WðWÿÆÍ—º>[™ü/ìØ½f; †îÞ¹í]C.Z­¸yûÞ5÷w[ ½Ášø0¢$,*Y¨–L!L$5¥V%̹˛3–Sv‰ñJ<£ž/)8wꀟââÒ0?*P6Çöå8WY.{L8~õúÕgŸ}Ö{&›qÎ< 2Üð0öhÙ¥æO|ˆZC§q¤ßªf½GªK‰Hx_˜øë‚gl™ì„õ»5º8 |è98åj‰¼ê]-ù Á §Ç"Ÿ€k¡ï5i3F¤áìÃè‚f¦ã¸„j&MØ‚ˆúñ }šqć/.áa˜ª/Á41%”þPᬄâ>Ë Hý¼¡ÝëæQ:f[fÐDw5~ñr§á'`†Z8¡ÄHXv,G9lñÎÑèüî“£jæQS2¢Z­1 ÝžyyFö&¹ÚÜÑÆšÅ\Ã9œVzQÏ|cR`$Mò‹Ü´NÄ?}š£mæ¨ )Ò¬Æ19Ÿ¼¡Aíúµç/ž»U‡uÀëÕšl'b>\`Mˆ%'‹Ê|Ô…ƒ%MZ‡z)àÁ®Ê[s”iT+R{¯Ì¬S”:ãÄïx¯F¼±aÆÑÉä x“;ðŒ*g8qiff,·ïþ`ü ¨‰ "?c ¼£Y~7ûðf»0§äYW‚€G´\ÍXóì'l㺭V±u¾Zl#ˆ$Ös# ¬Rín¼Â I4æ!¬ß %Âtðá:n­àê5ìEtòéƒâÙßýÝüçÿÿ|úôÉ’çûÅPªJ×#! ³CˆK+p&FH9ö<¿˜T=¡µ7†ð+âX·)˜âjÅôÜ>œx÷ •†ä£§hFä&q?•ªÙŽæÔx.}Ü;¶Œ{Ô͵xóöT§2öS£þ“k"v`U[Ñn¸–xîè×<>c9&Ög ;ÿ‰nÓòpjèoUŸÝ‚M¹BþÀЈÐAð‘}îÄ©]­M‚ÅŽd ]뺳ubbm’ÚwúÛÙ©­Õ7Þ½ñv{gga¨90@ÆÀ$‘›Ñ@Ñ鎣ör\ä°€y‡‘€ãáW¿¹w÷ÞƒOú’Kš eÞžÞºÙ ßq{ûÆ›Sc*­QÈcg晓|.æQ»T„ ×äB° *i2nß{Õ­/í^±³NŽU–ßÓQþö]ómØÈ臕-ð«¯~'ÐõlËy/={þ\ךèŽTY—د.@Ò(uûÄ\HjõüÙó¨O¤ ÑíC%¥¥Ç6ˆZ”óÕW_Ú?S÷‘høÑ›3¯Ó$ȂƵ–L ¶/[c WqåС6*ŽÐݦ¤ºâ?n2«>b«ѰÓS6Mª;R6t3îÀ³3Ÿ†’96Üѳ›˜p"·úÑ ZµõÓ^õçŽêº†*!÷‹"Äšïåj³` @e–mãWaÍÙ°êzFÆz¢©ÁL퇺&œ¹„ ­@¦ ï šSpªÞÕU¬|MΟDfDV¸ú—ýC/·ð&‘;ãúø×«Ko¼aØ EÝ'ð‘÷¾†tõÖµË×mÊùlú¦·‰¼wÌ*¬#ð>‹òàŽ9ÌäŒaVqxG"YrÐ ÜõËç ½ )0Îê%ÕI€±NZ*Æ"œr\;ëZ múxëÌGX· ï%[± ¾¬d—ê!¬KW{À¼ŸºÔÊ>KtíS±ÃÍM›`L ¿œ^wíÔ¢š!Ù’ƒ¯±ö¢Žr£2Çcø¥h5Øsßy܉øÍÞbÝ¡w6‡FtÀHqð'ñË«—§YnÝ‘Z¶±ýÖ‹Ï9Š)k$¦ûúuƒk6›f³yzΚÈûüµÝ-‹ žˆæŒü×ìÇŠ°iº9I~oìï…®³ú ”@¢ÏnK@'µ2Œ5S=ü M°ô‹ÙI­cÎÛ’8;lÁxrþÝÙ³çO §ú”h0ùµÐRÐÞœÔ,S 4·X€3‘ö’ÓNƒ 0L™dÓÞ¤’~1ì îÜéÅLƒIc‡çË[Ñ´œÙC³=Ɉ°œJPë½@—®y½-…X ·NæuBC¨­Í¶OŶn9AKtI·ž«1ªêV¶E™¶ŠÈD±É‚ ¨ïÝ¡öBo]™gQ?¼­$ý÷ïz3–…ý·×nïyƤh%¾z¯ýÕÔèmaN\3Žêõ½¹~ÖAR‘¸<ïX´ºnéÞërZ|õDb¡Õú‡3ÞpþFÁ1z*¢(QÆ/Ÿ{õò•Î +åºôé=¥ôÉĉÙ~ÿKÍM¨z}”Ä´ éylï8à“ÊMøq(Õ`zëdfH`ixP¡j!Tö !ÍPãܘxgÍÌÎh5x'%mùQ¶´©3$€œÃõ¢—›™Àõ^-ºY&m8˜{€¥SÞ¶Åpøi)TT0,ÓmSz]Æk…Âwoþñ'?ùãögÂ4ú qÈ_m÷NîÍäb/ 0Y©6õΣ»7cŽüT¸ÑœÞ%£/–¹#žœºÜøêL6û° y¸–ýþ ºŸüÀÂùì«R[lËÖ¼zÂÂ.ó´¦Zšlïˆö\Ìg|Æ{Q»,—J¿ãö6Óþ†*ëÄr=ŠKî²f‚'g¥Ƙäµü½ŒÉb¥I¨ E: ˆíy]qEú'¯²?d6ú's¼WŸ~^×N· 銢Xb"^)ŽJZ2KO[ÌŠ«ÜK<Â,=ì=Ç'ÙqnèÏÛò±"joP,ÎäÿüqKª¢ÜP)ƒ#7˜I•¸·ƒ6€Ú[© òüùz¯o¼âÍ)W¯Ý¢W¦‘ˆˆicŸ¼Â©ÝéO?¶÷’—,ò Ìêþ:pwÖfR íÛŽói¬#ڞΈq¯ö"½å ÝQv£*4c¤T|~¸Œô,¾®–XÐÑ3ݬK™°ÀÏ ØÓ• ¯b¡aÙv ñõØ«ÝìdõAˆ‚"ƒ¾£Sïr·eÛPÆš1´°WÉ€wÛ·s{¶@âU¯ž?÷å{cyñĪEdš´_ÖÛÅô² 4lšÄ^k57”îßÿdì¶Yl}ZWr•PB}€rz‰—Þœíõ¼öO/aN’Be¢È•ºÃ¨ãM@½¬©-ã™–·°pÙJÝÌãbOtYy`îeiÇ}ªV9“(hæÏ“›¼NŽg\PCZq‰ÆÐ¶@ÌKïºÙ¨'ãÍ».étä-Œß™µ@`Þ[|™÷‡Á°ÚàƒÀÖòïÔ%}“E_oÄÚùOã/ìEn3g»DÕm’)ËŸîà—¢®þøÇÓòŸ}îÜÆ†µ»w9˜;#"‘A«»6ÂY⎂åòFo'±8«,ªO¢.6ÔÏ­„Õ¨&úÔ Ì%øHJp"ì Ø«q`‹yñ›u~n’Šã¾úw^øÆ¹(N’K™aš~É3aOHA‹=§“¿ú¬B!QJ8 %¹Ô^]$ʘÙ_0 ›áÒöœ Þ4Î"¤h6h†´£ØÀ+Pš«pj9ªI+CN·:œF+W5\à—(Î>´"7…bb‰Óœ‚t\\ʯG'ü˜ãÍA?X[îÖ1²]Mf©’lÕò¼æÄó9XW—OÈaØK½CŠHÊVœø˜|»úêô¥‚ˆƒ1n ¶:µæ9´¤÷ 1Hh:8ëãD $¸ÕJìU¦VS´¥¨^o¹nqq2ÅÈÅ’~Ñ-Áæ9þe¨óGÏöõßtNæaUŸð„‡°õðˇ¦E_|ñíYøÉʺè$Ç:Z+txÔ£^:6K•‡„Xž “gh.ÀžË94w°Ê_V9€]¥I¿°éjÂŽ¤aÀvf \eaÖÔ—Áw»JšÑ$0JÕØ–O…te*éÙÆ@!Ê4¯ë : ™‘@H!<}Çpœ¤©ü`êŽs C¶¹ó5ìïÕß$­ÞQ^[ÛÒwxÆI<”tÓM]_Ê$ºYœþÕ/ù»_ýîŸý‹ÿ0Ìx^7ÓÄ©©z¸+ͳË\ˆ6Ï^aÐEƒÑhIY[Œ;µðLÆI€wn?TRšü ¢Ë`’ŽÇ—ò‡YÏ[êÚXsnµä;I‘­r ÇÜ»)ç;–.¨$5ï-#ŒÏ<eÞHè¯ù¶ï0~AlBvÂF¨Iú„mµ­í&ÚŒŠÖ—ö˜*Æ&¥È.0¨œ1¾µm‡S•‹*øæù€VŽÁ¿ ?ÔŒ+µìO‡¶ŽÙ{3: &r~ÓM\qîcj›?M¼u 躪 ÒÚªT¦"b2„åœÙ~wfA¤®gõ*jµææFË´5,=öo]îÒlÃ…ÅfsI%´xÞ_¼éæeÔ³Í$m\g´dƒœ_Ÿ‘úÔk÷s<º3š͘”vèTÈaûzï6kee#à Õ6nž—ôÈ!f_²Œ€MèâáW™üù³§ö]qBt©­™öDÂnúþïm[|>ÜâÂ;«#wçíðO¨“HÈ¡‹…–7öÑVÔŒêð[„›²˜ïC:—”½P¹zþk½“qÀ¨ ø¼ L;c“É@^ä'ßj™ÿpRƒ™þANó€NhÌ+æjÃý„ôp°S¼‘‘iü˜>U"¢ ’Š­žé”KÞ¥ööÌ;ãnsD¡UH{ þ8âˆ3N]ÂŒc™7üåÀÁ§K¥1Ód'«,ôr~åÎÈI±G"öF²lóþ–wξ;½þñí_v¾ 5—¿töêí­#S ¾½+Ïæ /¶ÅÃ*†•CÄ̈…$óP1t¾,¯É…¯ÔÙÈóA8z÷þõÌþI‹‡Ñ7mÂC‘µ8ëªØÀ”ÒÑ«F¶ŒG®º­âuÚ·ovzræ“^’jÞÞëL)NBú…$¹ÓX7þ\¢ßQe}ÆUÃ,*‚2°h TéRæP°Ìl™Ö\àÏ.ÒË ¾ ‰ŒœÃÜ9̓rº™ÈˆÛ!M=gRxÙH££ »ÓÆí°Æ}MrKHÁéeL@—õ{ c`;”A +2 `TŽ µ-)€Xà[ØK38ýP¸Á'$Nqr®ä…è3÷Ó»4F‹è0·Ë%ßĢÙ|+íY•!½íÍ38AèÑ â¿>5?k*ãAz÷é7Af-°îÚÊ×|XÐÖ,™ÃŒøT1ßäúÐû¶šÑx¾îh&šœ»ÿ¤æøæù"aÐÌ>œ5S¿w÷¸ž={‚g¯Ô;:º«»Z“K=zäôäôõúÅjNv™“Õ›Ý`<<„ àt„O‡™ˆdCa–ºòä}Bc¢Gx4¨r\æ}XdG”d›m…®b’bT€OäqW w! ‘zŒ©/“œGW˜w57“›Ýý"¸V:â+·à‡ÇÞ ¨Rß`»ÜöÐô\‚.? Î_|ñå—_úŽV´•¸{Õ¸ÞR…&³;ªÄ}‰º›¸1yk ¼f?K÷ƒðÜLZÖ€;qy¼Éê6)±%Ù‚ðe­]ÚÁEñŸ F.lÏðõîñãÇ*]‚ʺ£)É6·VÄ*7¢"Š9ìþÁüÇ8„Aõ§óÕE«?B4>¹9“’Eòƒ &skèî‘oï”^Ï0tÅ GOhªÆÔ.ý˸¾õ¤s‰øÇZ“ð€Á$¶Ü¨q‰6ôzsê*þ•·ù¬ðÍ2•+½/·®è×aK–¶ WX±‡ ¬ïAâØz˜õˆƒ9ý“È-X=ãPX"ÅxfU¿’ްñFŒXo5úW%Œ€=„¤ƒe´R)†¸õÙCCµ¾œ}þ(˜·m†˜!OC¬²l´‚‡SøeƉïH3í ©}&Í(¤4V–MFã|ÖÿžgØæÎ¯_>ó {ßD|söò“{ß>{óáèîí—¯Oá§OŸyÝÚ̲ îG£ÕØ‚? ÃãRÜQdCÅz\ípÖÄœ÷¯Š <ÜgT¬ÄVw¶êÕ´AfGØÏ‡ â¹\•ã)[d΄µ+×ç+•}XîÔí†t?NÖºš1¦¸Œ"uClÙ´À¨.ƒ!ÿdH‚Qæ_ƈ°|‚¯2©f¬Âìø¤ºŽe•*¤Ì€Õ@¾R(¨ÑˆÎÕ«TCQj” åQe•K6–…F;Æ´p¨f.%4q¨tä4¹¦NÊ®(ø?c¶«Œ`~·0íÜ(ì ÝB5†›{²s¯ 5zó[¤Â¡݇ÀZ肼VK÷‚g— ×JŸôƒ` piL9F ^âÂ=豚V4ÊH0Ùbd®B*®_µ¯.¥Yïi5Ø? iój7 Ï'ëØ|€ï>Hi³Œ!HÝE‡2éNTt¬*ÈÕ‡dÜdžQº ЦxÝØ™]qèIœù\<³Ó†Ñüy÷¦½»áöï¾2£•ùQ åÀ1Œæ-k,† !mgh Ì4àÛ5rYŽç\ÚRm!¢çÀŸB}cœjCÆ…Ÿ´.½þL(¤\ÝØ¸€ÓÁE|ðØs:*˜qZc/ÁÏìåTçÂ[ ¶¬¥`Y»ýêÜ MK–¯<…—³m~ œaF{ÜcÙSƵ+°IìZÕq¨ó£CY*è®k‘Ya,¢ºãôm4¶cºwVÒÃzîkþçÿ÷þäÏÿ 0þaÐ(¹Ø-Ç™4¨ìm”¨RÀ³Û× IDATqCÿÆØ„cù1©…«Í­-ÂÌýÊ6Åß¾c²6šì!ùׯNÜr* ïw6™åÿ¹Tñê5ŒÄôJ½Íb>ÓÙ7á8øCf¥Ü:V?!©)ÿiíÍá´ ”¶$U¶æšÏaT¸•:Gb.Kb ÿW3ÊÆƒKƒz8Tbe—ð»4Ô‰\Ê|½ž­qË¥áóÀóÄ„ /m´éª&õ¾^o›”·I—rÃ5|¿Ó¿ëç$€Êµ¢Óó¤)Ñ€æ+”ß•h}Þ/ä~pêa_§Äÿ4Œ˜^íÿÜ[ºsx(¹–+’:…!ÓŒhøW@ȯ¦ò‚¯§L7© rãÙûURr¾òqpW*ŸK€í„ ýLƒêvÞ&yæ`ˆ%j5ô[ßúÖRÑ„BÄvkèT!cûü“O3¢ÄNûxIN)Ã{ñ§ ä@L¾êC&fÞƒ5›Íaà&]ùc!¤“¨{¦½ ¤ÙÞÔ¨CÎátþ½Boø#¥. º¢<å´ `5òN§œ7j«Œ"¡LÞ±ÎÃÍL.>•é\Ê`N'–†VÍ ®<Άtßs òm²ƒ¿TIa—·ðO¯÷»|Rï²ALe|2ð¹¶ÕÜTTpKEŒ»x´•–£å-5Œùó"ÔÖÕÌ< ÖNPã§Ñ6÷›ÖõHÂ,Þ djQsõ¯¿ÿ¯{Èœ5„ÂKN^?w_ðí{_Øx|ïSqà—¿ú§Ï¿ø6‰Ì"-ĺ )3šm*[aƇ|êЯœrp a˜Å°â°%…H$‘˜/gßPh ~^¾x’Ž0· ƒâõ\ÁUÂC"%3¼µ§‘$S±ƒëdv𬩸»÷”LŸ¯adq#Ÿ…Áâ x<`†©öô‚15®^0L6ü€ÑÁâ¡agwßcÄÛø…Ç/xû;ÆËeÇ䫺Aíx•m*PéÐÎþ Ö’ci^¶ ;´:¦a*]Þð ?ŽF' RãæÚyÉ,ꀦ ÎKÃMÔ;Uïj‡ÛÄá8t•ŃçÐV Ë6Ķ–ÔSÍ»JÛÝ 3Zði¼Õ|.\kŸÖº$UMAܲgsÚB$Èžh›ç«eÝÛ æžÎí¤,ê°²-¸¢(<»Š§~ #~蟂ÑP9ô´`ª?t’d´gĺkÚpư”½Ï;s±àÑë¢K¯3÷òô9æ£Øí¸B—N $ÎjØu\ùU#G+yœœFߥÜò®fõç©ÿ¨( (r+2Ά‚tû€¼<Ô3› ©i ]ñ·å1â>96ÔpÒ¬Â, ,ã øôðát–;V#0i3~ú·;̈ã®Á >âs­_ZKµŸÑ.@Ìà)󅄘ú…Ä4ÄjJ \p~ð,…ùeC]QI £ˆ»9Þ5*[²³JRÿ§ÿçÿþÓ?ûs0 ±RÄß¶¡ò?s­é}P9u•g¦³D.ˆ#Ç«×10or\Ýí¸jÁàDÆ0 qË.V@]G”9é‘n]¹8ÑZº(÷©SÈEç&n5“·§ÀJ‰–mì±LÃ[O…æWÅÏ9ð<ü~@f¼BKÐ5€.+v±‚="P'_´Öœás'Ùs6‹nŇzçÜñŸÉ°}ÊçÛæ tEŸÆK ÈÏWç)s‡%ŠŸ•ÈæÆ5ÄzÞŒ,P¢h¢|“y[ŽÞyÅkW¿‡ ñäɤ顆ßXœûòöžnS²MH½íÓ+4…÷£”|îx€ÇÓópúqÉàí@Å%V£kÏ+ÈÒæ*ÌeVá>ãá!bÚ¹J™ n³¶y­c v—pP±ƒP|@‚§xîdÌtÉäßmA"¸7»Q>hÝŠŸ@ëÉdhhÄ+Ù†ÄeÉHeÛøàW ˆH:ÍKL,Ü¿gTJ¬MY¥_™¦ÇSø•…Ô1¯JWÑp˜aÊîPkyLC]^Ìhe̲yÀõ÷Éá‹–¨ûuU P )7Kê§8IL[tWÃkbÀõ¸Q²V08´ò L+ìUL*¬9–"<Ž¡x°,f˜o›€W C ¶§cŽç©Ý%$–¢_Øàç#ÓG( <órÚ !`£:!@€£ ôy¾ÒÁYå²;˜R½‚_)ïÕ¿ü?þ5Û˜K¤Í¦ÞÚÎvÙkrμbñȇ’äÀ_þöK™MôQðä˜éªf~˜ÖÎ÷%Œv¤ÅÿXËáNôpéÀ×tõCO£‹ò‚!˜÷¹«ðÀ¯œ.æ}ñãÍtÄ'ƒ3€á\ÍðÆo x”ç†EBqxc'$ º·>?!îêÌ’%1ARêÀ5ÄêZ¡>Æù2F}H;Ô`|Š©Õé6Ñ| £ ]0˃޸ònM›û6c¸ "ã4îú{Iru Œi¾ÝeÍÕ#T³‰P¨”"3Ê C¢˜—Íp¢­ÕCòNÍW½ jåV‡­ñ‡„ n©^«sDrB?q\Õjœú‡³.“{/Ž•Á¤‹ZAD l XÇl%™Tˆ\‘,ñFaÝÍZ;C-õVIa)XN[!l^ åsQw¨Å0ŽW|<=±ñ¼é)YÖU­Ô£®ãž‚¹  ´·Nc@ÄQbJ»˜ùØäX6@˜Ú$‘ƒ]»fµß%Ë]ÊFíö-‘lkð@E%ôÓ¹CŽ/•¼|î|ͰM¬R ÅðJx3*Z4pçvrq"¸*‘‘æ ä˜Þx·MÔU±M^eüÐH¿dWC‡9FÈ2*]UZWqId†¹áÞy—6Íð3[ì1&¦|IÊý…Í Ì£mõåÒ”(öDH ¯†k«lõ‚ªç·§@|¾]ç%Ù,¿ zÁ{:áïÿãßýñŸü‰Dî£RÎPªÿ-ªŒˆÖ»³Ö™ÔRS ÊJœÒ­fb·ž;ì_¡œ·®a´Û 6ðy«m,æ­VÎMÜAeÌR ƒ²æ×¿£ðé¼6yafö4tQ Ji"3Dû_Š+1¯†D½_ À:æv¤‰L‡‹j›¯“«¡^}pÓô”:oêrUÂê’ÍI†ERÐÇÞp²Ác¯Ãyˆ%úN×£Ð]¶`K}› LÇ3°âòSƒƒn}R>1¶Ýu|^ÿÁ¾Û^×É.èú®àG×JOOu˜¼²©NÝóžÓ=ùR¡•mØ€*±'±@Ù®) à*b¥ôYü=·AWÁ¸5«OúQõË—,]ó ^±iœÑ¤,±WÊu‡!1ùÊv[CóýÓ/~þ›ßüæ»ßý®Äå˯¾2Ю½0àག¡tu’h}üè–ß/~ös•¢–4œHñÝ52ܘ5KŠ’_1©æàKsŽÇÅ7ÍlõÃÌóçϘÕ#>zÍãGש³Æ8(Í™Häí3‚Ÿ¾‚—ñ²nªºZ¼,iÐñYBo¢ÛlŸ Y (ø‚'ìsK]“î<Ì-6èiØ‹Íäiãó¬°L¼zR¨ÑÏ5œ±»à쪆©idÜÄKK08ˆ¿ýâvýv©@[WÍθm Œ_MõÐxaœ\…0ZtÀÒ1„ŠcêÑÉJ±¡ÈKëËðD «ó¦4òr€•„ãê~ðW2*Y€²·£»v͂Е믟=þ§_üäÝ›W·®ÞòÝ8Vöº†“SÏ Þ@Dß®Ö ÀR¶™Ü\<%Þ?>3R‚öp“¨}FÛ7IÅIè@´\{¬ã£Þ_°òPö»B*p2ð rt·BtþR ø˜²× óaÍ€É ·$×t²QŸúCz_ÔŠMó‚ॲœ,ç(:acôKÛ uõy¼!—semA8=É^ÂA<âjå⶘;R0yj¤&J4Ôbÿ4áú~É.ø2gyìäÈiÃ"Ùù‹žç`Ë Z[UhÒ(Ô+ˆ’Ôp5˜æ‹jÑ|ª›’hµáv]Ý೺é¿:íÔö‹‚õq‹yläÆÎǻπ ½ZXÔ[ž>yt÷ÞÝQaÞÍI2bB:Ñ&¿lÒ­œ”ë eu Îcëêë†ùVĦ>ÏB#£øwnYú¸œ·n߽߳1W¯ßéÓ íV¡fâ;4Ü!–¤ór8kÎøMxà, ÄgÆÂžÊdÉ,Öšé§7D¥F0ÔKøÁ)›­¿|ñ‡:BI·{ ¬‡ËGóôõ™Ø­«™âk»0ð.œp?5 €V®Æï0ÍY3þJ-ÂÞå6 9ØXFH>­¶×‘§SƆNH6 5{éFaX¢‹ñ®Ö¦$IUb&ÞDIæêYNn'Ä3?l·nÜþ‡ÿôøßþ1 ¿Âëê¡Hüx2¿vÕÄÅ!¦mVà9 Ò8ÐÍ#ÊcÁ‰Î¤grçÅÞ;c+ Üþ¦W êAw†d{ Ö…kážñ¥µR`SõŽ]“¦@íéViÀvOÿÔgÇ+Ÿ·ºUA¥†mMÔÌéâl@¨œVPÉšÀö “‘ÂU=&J팵ÒЬ߫!ý:4YÙÇõ\§«e˜ Ì¥F±àóôó[ßï$Ó~ñ,þƒQ óÂíDžtË8ž^šîÀU]…Z¬e2ðÔ(‚hçüY[l8†«Þ>àªJÆ£GÉ…§ž)Sƒ_ìa‰y¾Qà£7­w÷sÅ„G9¸Ç¼U{¼·X­×·¶CX`¨ÃΤ°—Ï{ Âô°{#ô©ÌBfGW$´ÒI€Ÿh”]·§1<Ž49£Òö; Jëˆ~­N‘NrkhÖDKXéŒuîÞ¿÷úµ¨ºª‡ ÝÁx펳)Ÿ FöZaÜÞ¿Û6¬¿ÿû¿ûâ‹ÏoÝ9¶¬˜ÉÝ1iýÞ§[+Ô3bG†3‰c¸F{À„V>ÈÞ³€ºÚùŠpd'"̓±…SÔôÊѱ$d ¢É.«/ÀÔ¢ù¸ ;ê³ù`zXÏTOñÀ;”Á(€ñ›®Þ¼‘ãâ6$\Ý…Fòõñð±Ç ¡õ^ŽgOŸÒ0îÌuhÄyLoÏØ’2ˆïRœÌªóêÇïvɺbë{´ªÔY¼])D)eÕ|€Qö’Ó«?üë¿äþzž×g¿b’ÛG÷/Y“úøúÕ‹‡‹ëg(Ÿž>÷ ¶›·îõ‰T7”o[bÑi½>lrj`FÉ¢¤xEŒ‚ÈLÝ ì‡*ÎüÒNZ› Œ$”Å"£Ds‚àÉïÔálÉl«‡­¼ ¥§1ßy·Š¹§X-AHŒzZ_º]3à„àú*㑨 –ËÆÃ1‰,šà0J–LÇÃF= ¿jÒäB×µcû=/×vEpÿs¯¢®rÅ$8H:³¨ÀŒô‚@ÆŽUÐTð«œÓ4ky£Ìú÷À€KT6»![܉€vë-w\àL~¸Ú°­Y®œRg[$í‹óª=9®0ÓórTüΈòÁþnoIÐJóѤnPnžYÍAÔh!Ä LÙ-õfÌF£"rR”s½ó ŸdKZ`ðkÞëqå'OiRþ6oÁñìž®b‡²¸à[Ë3…€xv Íw'Zt°³!ÏÛ׋0Cö¨Ú«qÌe¤S¸%·°Eÿb7ž95ŠxKŸ2€ë×l;ìƒðïÝz>”Ý “iÝ9º«§Ðç>E½+gFK"ø‡„;ŒÜLŒ8x qW£ƒÍúŽíF% 1‡‰t·Ñ ÔúEåÙ<„B¿ûͯ…¿vìº5~²0:’"”°Òëÿ&Dnl 3ZT•#•Ç/õNUN–¸1EE5iÏ‚Šîvè­¼:AXWoÅ>œ†a'N5B`^s¤üÎÑbF›4&*ÇdÐÑ"Ñ€3”~ ¡èLϲaÃÏè%@]úèÉ£¯þÁý!«a“„]¡`;™ÐtWßC(êõ¼+x™|Avn—ænìL`Œ—y£g•cÞ++ùÉ(Ká°ü*ç*ž¹Ñƒ®…V¿d…-`:%Výz’ÂÃ03NhÞ€ œá •W/+2üÐâî)Ç30åq‰ÆleDUŠŸ ¼n+ý:ºDÍ-¼å¥Øñ«Ã¦«›%åj´¥–ùÝ!-¯à*`üJ=‚D¸˜<ž˜3Š5'`þ6ì¹:´b@O/•l4)Y“6à .šƒrõÙ /½ìýLÖ3ß Ä8?Ìb† Xž0q¡BWƞؠiê‡#þ± eç|ÉŒÍPÊLªÇAž1oË ;˜X¹¶“(X4ª#>_huÜ­ötXªÒ†÷l1A ¯\_&#¹dö¾ƒˆm*ì.8tÛ7{TðㇻvÏbɆ\|¢+ãÇÀÓ'…7«ãüèþÝ{8Á*¦­ëfû0×M1JoöA'¦¼ÿÉþC@âðáð»ßývŽÚ$tnìLvh“€îçáY'¢ÕA1w~V ñÆ®°‹È*Þ£æ»gÀHÏÿù­ÜeGR:cM"ã‡^4Ôþé‚X(K†œC¢žgŒÛ8]ŸdGÖÓxÈöü`°gP,&ïw»•!®Õ×U›Üz¼/ç’÷\LšêIŠ6VÑJO¥Ý6ÒW$7hßâ…×ËWÅ“>Ù,/©V é”v¨B4ãž¿xlzÁZê­ñn,ë›Fâ¥K­s#1+»ÙÀ€q8%œt[þÔ^ž÷kƒ7 ¬‡q³ #‚Ð9>SØÂÀÌ0<*"[³uWÁ[i}Ñ ÉèݯðêZðB”P.îf(ïÕz7L¯œa¤òJo’Úã§¡iòb‚3¥œš“{ðÍ$Á Î-ÍtùfÏŠÏSs¨i†+£Èl~­ÐlÂJj™ÕcÖ®Ÿ¸é„â%ODb¦Çñ˜ÆµY:. Ž3Š›¼ääÅ·…{aÜ FA„&ÌYãñ«^ÁÂ^ÄÇ?Ûí:°%L^ìkítWF\¦´Ô…’x¡ô §Îéz/÷nÿl3¡\É+Ø”ý!ÀƒÜ"z×®,‹t­E÷F¾ž3±°Ð®;÷w|À§ø¸E¢]ƒ¢Ãë7'ˆÁ=L%ô‚òæ^óÖëõZ”btoq»yûô„þÅÕ¦ ØãÆjý cïI’b™ÏëõÒ©3¬ê}ãä#±úó[*³¼jí]AÆÐ(Ôׇ€‚£²L*åNPµfÆ–dæN‡§¬™ORÈO,àY<ǘ½ æµL¨D²xNe½Å sÖðSÈŠaÇPÀ8¼q:?Ç× g²¨+¿7c¥…a¯ÜlÑ£NdŒìÃV¹$cé¿Y}üub0ýøä»êæs³&Ù¼ÝÓ¾Bídêž -g!` 0šS ˜}çgpQ¯‡zkË·=šRzL¤D³zµpi/Âvßãç?ûÏßþ½ïÝ?¾§sáJRU°Óc-ƒ™ÉØ×V OŠÚzi;~lxƒl—̼ïRj¶¦ÃL‚@«?=±hKqÙŽZ,[õ^ŸòA±ý3§'aoÜ;í¤ºQèä"·®”-ØWö6Ï÷¤]U7Ì%ÚTÌ3²[ŸÀ PåHðà œ…ËòÿÛ0‹ð2$ÒHÐPGµXÀ÷”bïæiª£›cRÞH­[q›1wk™Šã„î÷ý`-ÏÌg!ôˆRU¦êÞGK¦gËJÆæì>›{?¸àb¢UÉ–™!w0QÎÅ~(h\Ô”ƒw±8r4A-{è>õø!é‘V?öœ²NkQ 3ü§Û%FztB\¿ù굕oop½æ ‹,ÓX`ƒÁ›&c< «i¨›Š×é2 –Åöq3QnÇLšg€©Òp@‰Xœ¯°É0Æy’/n_Y%’¹ñ#œø~ŸOº^®H.C¸‘”cHïŽDËׯ»Œ ¥á ÞÞGâÊ/­<ñiJ÷64/ŸÔ&ꕼÁ,¯¸ºã…D~÷[ßS9öR+±ð¦0xÍ«‰pëZ+ÿ©½ ðñÓÏ¿•Ú{‡p_8¥œ§Ÿü;=¡Xüs#3fxLÎÁC]DäY 0О)Çf“Q×'Q÷p/zFšP£{¸SMr6˜—.ß¶>)&»5‹5 ¹½l– Ûq4ïœ#;røãã£Ï{‡¤°u;ù†x€Cikr÷³ ›ßú”gßœð}ý”Âùe^þþÝ‘†ÙÞ»vöé§ß‚Añ¡k2 ‘³•¾Pbg\'³×ÖBšlë%ؽ‰š*{¶üûN1q’ìÙµåÅ·“ÌLÖgCE)íÿùo¿oTukĤŒäóÏ>½yÛÃäFá×.‹s7n_¹~ëòõ›Vuï=ø¼@àhs•| 1ê]ÔtžšY¹5¯"Õý˜: ½tèKÀ™.c1•·þÔ ÒªRCìjZ”Nšà¸9æzÕ¬|L¼»(Ó‘2l‘PÊ¡6‚uÛ½ ³‚‡îUl¢® ; J×ã"¨/˜«.iÞ½‰srªÄoæ­$ÃB@ŒÛÏÁ_ˆÐZ64ÃSïPfà%ít9¹(ˆ_n†%ÌŒ©N¤ÐÂOȇQÂùLÓ'úíšA7Ñô™"û¥¹£œb¢íªZC0+kð7+åƒêy¹jÈõVRu„J›A yzp ¡Â…2›uÍÁ!ü«Q(çf‡ LY Ò”¬ _‰õü èÿV¡À8 Ç•²Èe .¨Ñ œžßþ‰™L¡%y½é=Øå›óbm¸.Gͼ»µêÃc­rR‘ʈ¶ç¦B¯°wPA™Qê8Ä 0𬖔…=|*‚ ¢HlÔcuD`HN´Â0‰ÓÌp“õÑÄeWAQ”ß!´:kV {¥º!%¤HÆs[³Ôh”úNlÇ›NÀÆKÑŒ”"a‡ I ì ßÐæ0s "þc”óB£³¢‚E5Wnóõâyšº¤Ì®MçÐä vµ.:ëÆ¢à!$ðÚ° å­t 3 kÑÞœ9·óQwÉ”KlæWd²NB¦f‚j„Uú]üƒ­þC3Z+¾¸ºNᙘKî ¹lVp pCr;ß«~”QªIzæø0LP€ô§œÀ° `D¯3)«ÔÖI’N¥ÝbX=JÍ´¹f%ÜÚr0˜ºhð£¢ùvœ•;8kò”|qJ£+¼WO(xUò§­‡p¸ å;.C^•Êø„Ý)³‚Û[¸¬[Öz¢ƒ7³a ¼ ‡uëä[í- ”&^».ÐèEM.ÚÔyÍm5A§¤bÒ5!OÖ4.j 5BG¶›O!¡¸‚˜£øCbÂc7˜ØÑ'›àp¯¶Jßò’RQEœæî$"õl$×|‡Ñ›†­ÌÀ–#gO›PH·³¬ÈRX‚гá0 ±ÈÜEXËʘ`Ðy §ú;S^x=|üøÉÃçÏŸ«¹~åº9¹¬Ò]/[±ýß=Üóô¶ç¨„Ç-Ist ‰FÌ^¿ñæ´·x8VdÙ2 4´çryãòœ•1•`ü\ýúÈ«?ú›‚žMzîw[Šœ;J¶þe^ÀöÇwîÜ?¾sCÕÙë›GÞ–îÃR·ˆÝÜÑœÓ켦EÒ )ìzNÎ^Eôðà”˲²ò˜ªÛs´éwÁT` ²oMô5yƒ& ÀÈ3à*b’J>—üîL>Žé€3ó!Ä,òq…”£;MghL–±†f]…\ÿ®jè€Ê/HWu ÿð\²«~]:?U¯•ÓÉ'¬õLŒ£y``<Ë@¹£¹Áž0´†Dt—ºß%w‚ð ÞCçYýúGd=³.¼¶E­”Kð§yðæ ùãúM\ÊE«ža…ˆHƒÅ¢ºå!pÏkŽ'à„Š7^˜‘@µr`hahÒñ~õš„ÍÈÞvû R—º5qsù/&` ñeÒDÏ„lúR™N-~78LZèjd¨m’ŠîMi9T–Ë‘¡œV_º¼6οµF=K÷Þ~fã DÖo[cof‰†ä°fNJ7ÛêÓøNŠîû$z²«Ýé,AÓ©‰Žäi@„ö×Ò mèÒfõìêân}È¢{¯üŸÇ 1ÞNä¬4À¢7­œªí.IÂã@Ë$ñ;íÕ"IËu]þF—Ìý¯ò§o|‹0fMšõjCÞa9ºÅ§óc™¬ù×½à0ÐB=•4¸ªÝp›òhØ%§çh4'šf7ôº]Õí¡î_¼î Ó·Ÿ<}lSŒÒB¦_‡å³šOn^Ûhæ®ÜDÿqì:çÑJ!^ms$ýù4i4—‰Bðzê ©–"n·|B‹€—4—³\À±ˆ\Ïô©/°áj£1ñüÖJÿa|r:vÉ?5Al{Êò©B¿å1çCäƒdx–Ì& ’ÒæÄ˜4§„ŒÎÃ5~ê_:¢5Ìä×r…+ª¯óRŽ2@%ÈýƘîTCÌ ¦H;›5-'ÇmEÔï€ñ[S²Å¶ÊõÍ$0@ÁkíH1jr?:“fü“'àEo 3|”-À ¸( Ëy¢ƒ 6Z[,KrˆØiubQ·Ì'•„ðå«3]Ú0ãÎŒ»uÿ Ж§R¦CtÌ=˜½ ×=ê×0¨“ãá9Ývßt…%ð.qQ`´á×)r8tr¨þöoÿÖS€ë<†v–ØÛ#ðšýh#tK'Û\¾ÿéƒô¯Ü¸®/¼•@øZœBÇË-‘™‡±áðê>¬CH©ÔÖÉ72^š@â£!:OýÁ«Q?r}=ü X À jH?ç%‰ÆE/Ô˜-ƶ5Ñ$ sK7RŒ–œ¸† ¨r$ø†J™‰Íµ¿þõ¯ÿ÷Ë6ÕÐØ€Bl¹o—EëˆwÜ—ÖEZ"˜9ÿ„çnÎ?ÓÔ¤±sÜ©ùyoÓÄμgy¢Pz¡(ª¿u†”6Pè¥òo¼ÕÆ|ñ]OßióƭωdMëôí¥/¿z(qÖ¯ˆ÷ÕÃ/ïß»óÙ/âu·Ñ¶*æ”Eú€'³!ØA:Qr êN(tt:–Û«~]Zþ̰ÉÂ|NUœ– ‹Z)®ÈÉ¡†®Ùûª ¯*Ú†Oã ¤ ÕÒRP¹eœ¯ièéªJ¿ºÓÒU¯€ÖÅDJ7• á'g*ûž&Õ/…Y9³ŠB˜cX–––_•[D˜R„ 2ðs2 ãzZ­6 Œ%¬×}Ÿ1%Lf€p±q& *WŠaµ6H—³N¸W©faÔƒ…ixŽCqBuÉ@HŠí¡:\µÂYüíØiõ¨¡¥¥È-2Ýæ@zØV¹tlÃí÷tøÉÐ:‘Ø e#ìj«áz•©z»&æAK±@D¸bJj@m3AõÖ7v9»˜t–E4—––EÙEwûëÅKtSN-%Vë›3ÞåWâ‹ ¯_¿À!V×9V($ÐÂ3`5 Õ´ÈÚnnR¬üÈÒÊéª*`j¶Rý"1N©Ü© ¢ï€t¨„-1;˜…,ÄªÌ ~o€¦ ­C˜&‚d,$>_r r¹Àw¾óž6¸|ùù˲÷¬½Ü¼q|Õ›4 §A2™RZ‚j9ñK **Ž­¯Bp5â4p—pÜék®ó_ ›ßÌqõÇóCÛ«çÏL˜\w®½~þôä²·oܼÿÙwï*0̾BEæÙ.МžñïŒ_?-ԼͼÝÕ$Ù¸3܃ĄÜtg™„Q³R)ó;¬ËyFÞô¨9箘?ê3$lA%àèÎýl uj˜‘F‘¿¸Ò„=Xà -~0ëô¢RãsøƒÃO«Zh[mvƈÂ@{ ÌŒ˜•Gnð ,SÌ ˜f˜qG•æÓFzqã?4íp×.Ÿ3¤ ìåV ÕèÞ’å6î'ú ®%dýÓá÷0«sB"Tôe¨ð†"IØ»AœÚ¹¦JËsàâ5úd}(Ç›ÙDó5¨špÎréêS™Me$iaV;ù¯Ç¤u.cw§- +” ²Ÿ{L‚É®ªɃ°'0Ž™ñðr^…´c¤K¨D'±æ“á,Ê­(EH5Z  ÏV&ð©Ç°K #¢¨§zÖ¤Þ¹Ó²"B\ŒKR>«+:%8©auè™-C3–‹kF§9?¦Ö$?$éZ`»ä+­ðÈïtjYÜJL™Ü$‘Óo%¡812ì2„°a]ú`£è&5„XÊðÓ`Æ–š…_ÑUÑõÆã2$5Í ¹âöùfE‹Ë9ôuBQ°]K1>¹÷ÿñ§ÇÇÂémÛh#Hð™N0g~& Cb$Ö#b`ñSE½[“ñ‰“ ¶ ²"À´ÅöJ`2¹,ò"»e@ wŒQÇ`¨ÛÂØ(„ø¬cˆ-¥|5c\Ï:nv9ŒCê»4‘$ {IZì §¹_õ*Œ¿ ÉîÎøWKþ¤q{œ €Ñ‘¢bŒ)aXä{É)l5` å¢[e½xf›`­Ç‡¼Â¡?¶#M Ÿ[‹9TF‘%¦*8TÎ7?|´.AÌðhì€a… ÷žO¸J?8Y ð'þàœ¶üY‰ÍÐn5‚‘®Cdhej5NU”0 ãàÕ“ZÏEÏþëqÀd#îÐùÐû6T¿Î3‡Û54ÆåC¥t£NØøo`ñ®P+Oõ%—¸ƒâÞí bŽaÆrû­õ¿ý«ûŸÜ×iñ£òù‹Ë6Ã'rr&„Jx8o—Q‰ã˜|ÂÏ>û ºçà,e¡@; £ 0Žy¥¬Z,pÐÌò³¿N!_<~µB×%úÖê¢!½tŒàas 0Í,Œ_W¡r(Û]U@ѹſ 0T°D‹jx‘K°¾õù[)¤Ù控~©”t°¥´ñ¤B¿·C[ƒ¤Oû®~ý«_¹ezÿøøÊ5ߣëÛ¬ÃaÛp…]¸ôt¢é¡£¢æ3 Çã³Ã~üã 3Ãj+X)«¡ÁI`…_šef®ûƒïßós¾ïÚ‹—¯Èé-"ׯ\r[ðÝék4_9¾wÿú­#àÆÕv’šr["ê³”¼Í®©‚õh¶MåOz¤^ÇvÝf¡5•°½U[ ÂÜðG€lÖW§4»C>)k6ö^ÙüZô3·ÛætW?)Žì6NjQ¹¾ös(#í¥h~úI‘k¸jgû¹l›,·~ÁD±t íÂ=¼z‡\-_ßš¹z˜Î7i©ÅÉÔ/*M¸œ_0‹Ù/Ò~$ñ0ÏpÒú00ï‚™>Pø£ñ2»aÕg³ôòçFôC'!(  1](Û~$†ôßf›3°· ¨•ƒÂF7g…t¿è îˆÀ(¡rZ,º)¤ *¨•¨αZîÅWB6 ¥Bë3šò_!f„.>Ö97üÑžTФ“gÆ¡òtÛ“žÀfI$.»ÝyÃ77Õc#0/Èø8om(4NõÞ†µ¯·YãJ±:o„£ªDŸLéQ@F§–ñeN—>©™Ü»¯/ ‚Ãm<˜Ù¦Š¼bzÄöIýY „¤Ø;}´€O²Í‘°Ns§y²Ì¯²£Ý=Ay˜!ÞˆK{1eÆDÄ/´ƒ!‡oØäÒ0›ýçÍE ­È²—ÈRã{—bµ%ê2¬L“Ziâ ÀkØUåm¾•в:xn3g•:’M50¶i¬VåùÚ¶,’!'†x‰Ù«—/$?ýéO>ÿì{·îÌ ¯Ñ•ÄöÀdH.ÌR“˜(r'æXWÄ*ê)¡™ÆÁ9ÁŒC¢d…'þ¬ƒ‚×sòNvñÎk·'æ›»žVãö"dO~Ï …œ~FVL5NYD†)ý`’àƒÏY*r ªl htÏ2¬Þß.Xõ³À¬ lìâÁvðÅmþÓ‹ëL*Ä©A!«ÊÃH™3¸ð˜Cómëw/í)÷glÂ]wôèÔçr›“62G<“härºü£µš,`Íd2°—#1oµ¸%ü°¹¿M·"¯¼êæýS lÙt“æAĤ?&˜Þ:ù–F+cõ³‰ãõ«çP˜A ï}§./‚á+8Õéq2^™,4Pyú/I ºˆ_lëJ$Ezu®’D"—T‰mÇj ƒÜìÅËçz‡Çô,[圀,ßv@âE ¯N|ëÚ“tI,2üãOú½ï}ÏÖŒáv1“Kwõgz³*‚ÛY·«w¬Ç^å‚+„ð‰€jÿ³¢£¼áÅUøüÎU‡šu§U ®"m—Æå¶fr­ƒE\"Z$zîµÍšìÚ†}VÈ&b:dW2E{gTä¡ÍÁ+à¡iÏ%õžyüPÀò´rKž'¯ Œ×DE/.ðÔ£Gdò1^¦þ–i¼.tþÎ:gú›³€fðãÀ¶2é´1Ø2eÃÐ\~Æù†_ÍÀG´”`ëìô•eÒ£ã}7µ={ý²·_ýî/þîñoÿËËg_>{öɃOìÙXËOæýÔe³§q s ²Cf÷Sowâm<•eúgûŸ°h.K‰&ˆL^Ø’³"•ÊýÝKÒq5}ÚÛ,ŽÚõÅÆ¸Êl¤ž~äeßítIm“E˜ò€¡}r²Š1 9W qÐZ†Ÿ 3†÷ˆ™»œ ^Uˆ\-k W‹f¨»ªÒ¯cÕj­ƒ¸Ð°±¾%“n“žìX¢Kˆ;‘¶AR.HR˜UpW—O¿“šÏw¸:ØÜ9öL{íè¹{¾¦ï µÉ€í8”tqÐ6Æði%KŽº’œ/ÅÎRb†èÌ!¦P(ÕŠ€š“Üß1Yz˜…ÿƒN4ÜÄkÅY·Ì<+k±B¨„òÞD5ac–²øÒw+¶Z´ ¶ó{àç°N™1K‡IFߪ!‰¥t¿“¶µ]Åk€x™åh¾$‹rÐçϬ¬ù®L\ä:‚ßš pI9Çpª²&¹A÷ÅèDýĆm‡xdW„^`0QD’~üðìù3Ž_6ÓÌ©MÜ Ê%Ù\å9fØcôœA[饎=~’ËÀƒèFÿÈaÌS³ ›æ’b—©f3TMv=Ì]V™™V»§Qä\-ß(§iÌK†J¸É¨›ÎÄ vUNÙA^¡i•L-^ðÆ‹F ê8 !³~ò9ž†ì¸@å­ ’÷›÷x´¢ú½WMzùÙõOŸ>øü;žQooN‹Iž™Øç3Ü:¤FZZ °Å3Çm3_ÈjjÐ1œáV_•Œ¬à_þu¥nĨÓá}"·oÏ3k}¡k‰ ì° @o‹Ç¦hH+PjÐO¶sÈ!`ìP x"MDÂÃjOC–¦b,.rÄz±-üV­nÄÀ”Y¿GRf“„ˆ¸ˆ G:Ð:Ï´PQTa~VäÎY?ƒ ºŒÄôŽºÃ›¢©A'qï#õ»t4±T <ä«ä.[Æ›dÈ"ÇÖ½¸‚¢öH:é³UjZѰmQ$ˆc;ˆ{ÝتYßðwtäAXˆVP!×ôš†—ÐBˆÔPу[kí9¶ч"NϤ;7oXívñð2¹Å¶¨Ô[ò6 ßlO‘fËÔÃôÒ€µ²P¯@´.§¸´š';=Ý>ò:SÀ«FÃΕå H8\Rƒ[ óËÊ=ÖêEb6féJ´‡(&AÙ[ïcr²L~ÛHt¥ÏÍÉn$w` þãzЛÎQT½ ŽB–(„<û6(æÊ,ëão`0ÑYÃ1z^¡0©¹¶nÒÉ’(6tC@39ô*Jݪˆ±ÞŒA†k½‰¢˜9ɓߴä‰íC–ÖæZ¶s R¼»8%¯J}Mžà>/{Ò‚>%%õ}­““—>ßw¾oÙÙ)ìJ³’Z·~,—@KÝürÌ$aÍÐ*?›Þ°ûÜ¿>8ë•W½vqC§wvXýd¬ÀL"ÿÕ÷£ïó"i´å$ØÐêkÜ:}ýÆ;=?ú‡—Ý.¼vãÞÇ+7}>üνO=a£[Pì9†Oåx1]£»’{°Ÿò ·ùÄu7wºLW»ooYå줥¼³ÓG•&š¼ÁÃ6@Ïo0'ö…)~?ýÓÛ%ä=%CÈ6ušk<ë0¦AO¥’üìÌ›?nòI‹C£”&7§S¾+4X3l†Q­rV¹Ò~BšÁ+³¢«\!m(m Zë—žž-ç÷ðg³ ‰kÇ ÊÛû»ùà±ë´9—-'â‡~ã¯p¤YN8@Iêl™Ïâ„C´(U÷ìNP!²lßjxÛªOèá0å¾òDáGK<O8e²^Ö!L§Ø3Õ–ÔRæªwW¬²6ÊÎXBu-³ò4¦¬è°@ÍÙá´ò2C[žkþBr8ÊôÐ7€¤»xóâZ¢‹ºxü´ EE–š„Âö6ëá‡ä}ý꥖˜'”q"·€¹Ô#"7-A›b›‡X7êY$2y9S£˜ÄûèÕ3ã”{õR aq— iŠØšO˜<Ƕ%b¾tÙ­RÏNèU•cMt!‡=Sö‹.WGJM¼1¥WgaŒ>i{œÇÂ=·¾$c‡ðbÔûNæFŒq¤\{!On5GjœWþ`ÃuñÀn˳£@YžÝJK 9õÎPámL Q¸šn#Ž«†n[8æТ ˜ŒâTÜ*œ–¯ø§å@þÏ@÷n-–1Ìlø3Qw³ÞÇÑø!“êP.G¾¡´Ã|£µÅ·žh¹JÆ:—m îáÒƒLQÂÓ®i4xcïÚíö´oI|õ›ÿr÷‹ß¿ûÉ}c‰·!˜€n©Ç©Lg…JÙKÃ…zÛ]ÇA½9]Àm­‡jSïÂC¿>u¼¯ª¡Œq‰éq—l3Õ˜5Aæ!sLJè®iT:œ°‡ðÉÓ¾¬7Á!šz ¡<âvo¢×¨ÚU©ÃzÆûæuü J—°<(ò§R8Rb~æ<öó¦@qÛrE¢6I-‹KBÿ$äÊŃ™c °@Îpð£Ã7Ø5¿:ÑJÇ}àdg 3sQžV©¢††¨Ë¥®ŠnÆJiÊ¡2"ŒVÝ*Oؤ¡w%Âd“ý%ÍûÒm¿óÂ(Ù1kÁ¢¿V0Àžg¯æþÚGC»‘L¯1S‚–TÅCJ¸´qŽòž6Œ^ºut—ñmiR!ÀxiA£fI8:©Kq2®!€ÈH¬mx‘Ïòf)»Î Ý—1´ª§LR¥sës13ï nšöÌ“’ŒSpñ긞êcR€xg»¦[4Ï÷ó=NÈR>ÜÐ+}XÐ-·ž°‚ƒMÙoNÎîøœnYæeë+§¯OŽ}lÑ‹ûö¢{åï­ÛXž€Š!h†usnzzÓ©hùV´¤]ÔšäõNïP´‹ÿ:CxÓq âÆ–ZcÑ9YÏz†NÔ’åëå^oß¶ç¯ÙuTúå¢2¾Áÿ ÜÆøøÞP®!ÑèaRÃGS7QEo‘DÌ”y|»íVãiâ2ÝBn )B~y*źá IóäÞY˜Ã0ÙôBé—ÑðãËgOîßAÒ”–77s½åã‡?ü£?zðàó»àšDÂ8èö«Î%¸M¢„˜©¾w¾ÉI(߯P¦ó¹d¡‹ù×å D˜~GŸÝÉûÕO? ug WôËuö–^¶©°7¡]=¾{ïþ'ß’ß>ºq÷“ÏîÜýâöñö}1þññ}ˆˆ ¬¼qÂt5Ô–³êm²›)m*c}I‡NöæÝ™…MW¡1’íž2Ý€IŽ%`ú%(/*òÅïÀ4ÑšzwÉPêö"‚|Ȥ±+ådžSAÇ ¤ù(*Ô4CöŠ/š3¶†is^Œ”r'½åÄÛÄ] #Hž1]*†Ôbœ8B5Åî£a–1YfI÷E¼øúÁC˜Jzܲ•}@ôCZvixs?»eY¥& €19KtgŠ/Ã:Ź2 QÂVºBÊ 'ß*!,x¾­0ø+ƒTï*`¡MÁ¬‰qD:)C9ô<ñ$àDd,[ÆÇ  0Ü çÆM „"„¬à»¤êžcȪdðD(}³a=ü2$XUNäé-£É†ó$žŒJñ¶LÍÒÕÐ%šÊZÑöœjº|v¹¡z³œd*;1´ÔY…ãÀ #XË!µ¼AsTàãrM¸š_—to¿.…¿w+÷Nêº#ÛÌÚƒ3hý9V' z™VúuÉ:íŠÇ-`•v5<À–ï)–p¢•S­|[%Ë‚$äOgá0Ûjñà<3œÇ”‘=mhÖRÜÛèž’ÁP±Oõë„Ü~Y¸­øƒ+h3‡Êw ÅÙœüÞÝ£·§¯þÿÿ¿þôŸÿ®][…øÍÍf‹^´awIêÀá°7ŽqoD‹p4Yq¶®ŽÝÕ(ÓLòNÈýT³¾ÍY­9Jh!m;—§t$¦k×Y£Š" û ¡2Þ àô¦’tÉ2qCs£â*–°¡š„¥|#ž—?Ÿ¯XTS×а°©90ØÔ(ìC ¨q`îÕ‰«jœÀ0¸m‚8!^27î¼Àˆ7kÒ¹Á©ÊÈU ÑáŽBYÆ(ÿDHVÈ5›ŽUnÃéÝdèŽ$˜9Ô ™…qw̹ôê¿å[*ÉðLÜŠ¦¡:i4ç݄Ċ˜Iá«ùÖÌÜt®ù•+¾P9}ŸËØ)VòGÉ3Þšäç8)v­ O[šãÒÆ5³ÁÚ“Ië°éoz D[œX2"˜¸Ô•UZÂ(ÈyÝö— 7‘Ì…ô^½2–aŒ‚…Ì IDAT,2Üû÷Þt ˜:÷[Ñ3¾´"¸†(ÞáG%êM´:¸%®àß²Ûˆ 4ÏÇ9IœN:ŒeÀV^……äðài!Øð@ç³ Þ=+ÁŸ áÉãAÛ$š!>ƒ%x\ᤃJå…í€_CxT*ó%¤Ò©ïÈM9—«-å¹¥x«Š3¦XPË´†J⣨ F'QçÀHèèT¤_Ï3”ƒ1]TAÏpužÓf®:ÈJ¿5Pù½úÃþ@îY¼ñ¶¾"ÞI½ÚãèÒUùÅûGŸ|ûÒõÛ…+b‰L‘t'²! ÂÀ®ŒcvAƒ±ËauõYçÇ[€ŒC:% nÑmmÃÑ7æŽ97‘ ’ØÚf§Œé y3ÊŽQSŒËòfšU«c0äMŒ²ß5"ág2´J«º0§«&qðH50#”¾œLÿŒÍ‰ì ®ò <5€M«®^7›‰=e‡V~ÜÖŠSÄweÕÅÆ!L-`L:²¨&À°’ÊÏTš›ú—rkbÑÇÚÕø+ËÁUQyÐÍœZÄp v^b_]ð6…8ŒÊDC¡?Ôî”´ÖSè›5‡¥Ã;]Ô² Õ¹ÔàiÙ¶=ËMòè>Vc`Æ£ ˜ñ”;©SïDgWðlé.ElH'cbWÁ_”lZƒ]‡UB¢ÀË©†¼W O9w™ƒTžÈâ6Q•µ+ÛüWwŠƒÓs"¬RàåœDž‰]i°9> ù9’dAîX?4ÉoL~ÛN'¤Ð*:$ S8M=©Zà„ÒJ”åÅRU÷¡¤wÆC ic óÚ€CFFZaµöÍŽ0žN„¬ñ–ë°ÝÒMÃÚÂÞ¯C W·’Ñ©‡£ƒ•þEÎ} £Iq$,êw÷¦v`ë! Þ¥…å *$°êÂ`k4Âð*¡¨Ú£„,á¢ÿ¶ªANzvÿÈR#‰ªßýοúåÏÿ¿_þâ_þÏÿ+ ¤ð»WK~ˆ°*¢„óVpü“;ê-Ødç£Ò2K nxá‡Ã4ì`¨³Ä¯ÒUtµU(jai&¾sß'àýêuꔜKƒA‹z‡«CˆWãÒšÀ  #F³ÔÃÑ9ä‡Á>ÂscÀŠsšeáºZÏgÀԣ责±íª‡ÔPM½d™Ÿ{”„e… ‰†Ðtw zIx^m¦§+µ¼™;0à’CÙozªwàA}Ìw¦Å‡È÷@¼†Náïc˜¦ú,PTÒJ †àÁê®0÷/ù×2¼U[ÀZÁì. áxùâÙtíì+?ñÖ+7t:j„AìuÕÚ¦æÞ›0¼DŸã?ü¡ý‹NêéTØÏ‚ƒJtèÂÛÕéG… Ë’ƒ¦HRB›¯ÓdƒWÑU‹x¾tÉHù¿u7R‡ü¦wÇùƉ72ò)h÷gx·æ¢=É®°¡ìÍŽ»éA‘Œÿ¤Ð4ð_W3删Ô~ rÑrüÙS1Q´ˆ R  R¯C “Ф¨ðCœá¼Íax@¢SqxúÍgMìÍ®©à‹öëŒzœ«ZV/T¤€Ô®þ›¿ø‹f:†/õHg“iƒñ•ë&÷®\»ëiqÉîéÙ«.]=:µð>)O€ Fhís¬‡ê:™µM »¸:ð1ïÁÒdúÌl(_K³ç]²u¿‰ÏÕ=çÞͺÝ\ŠwzGÏÅ1LQhõâ§óH[n,©9ÇÄÜ’$ä\ .·³ÇZ×μÊ%ÉÜ ï ³š€WÁÒéxávy^÷'vP¬é.ùÝÞ‡þfñÌI«„`€LÓ‹é]°¹:ëI†"‹À­óéE¢^cG^÷}ß‹‡eD3:’×¾,2›9(Ü"Iø'HEb¢ƒÂ2¿XÅ5?“õöí ;:mO4s:ãè0¨FSZ§ƒ¡îÒÛMç¦O í^¡ÎJR'¼Æù¤”C.z¦™ˆLfœãN¿U ŒÜ(3­>]§"j$¯czZ=goÃŽ$mó=i.V‡©æuˆ–ðåÛó(ª”¨.4m qu½ŽÝ â˜=œÃ ýùëQª[¤5.…9üPïLîr‡Ât8œ×ójöï0;ƒBC‚O-fkù»™% ‰Ñ¼‘E<¦áQrHÉ‚Ð6÷K°V³™ÌiÔåg§gsŸ+®Àken‡ Àx£Æá”Q¨™~6lûUiÁ .&@ûU†Móéweá{uó]eî Â¥ú«+Z£ö4¤hÇsd¨RÀ«¬AŸ‚g艖*V϶ó ˆVÖÿ_¿xúÓøÉ¿øŸþôY`Ž ÑÚNGŠŸ„räÊ¡ÁãÁ%sxÅt W ´RãR6ÅÕ(6˜¡¶\È¿hN®¯±PMó­ÖVWÛÑ/ð†@¿°i¸B¥+«P {V]¹*¥¤á1 ¥¤¢YÆÎ?ñâŽâ ¸IgÕ8œÀmøÅŒÂENDFäJD2}Û†Fîü•)GkNCHAôŒ“u¨rÔ·…éˆ3Їô›ØÔ†g4*ñ.Å ÿ“M}YZâKßäŽÈ¹ÊgÚíÞ'¿ rPÐw³ë=W}2«Ï¡دz1žá–þûÎ1lv ÀÐ=&޹–3ûDižõ®×4x Ãf€¬ ——¬­90a"&ãÐͲîé?ér¼:6|jáÑûˆéز« ;§âj:Úz‘zW×( c˜ó:}½;ltìαoZô¡CÚæ§j¨B<¨ظ™Ä‹¾('˜ã6ÛÇMÁX™wPãPÆÃ¸JÆrSé ¿°ù¯hˆDb[áaF ÿ2À+M q–MC²ã? ‡ ¶é=jâ£4³#þ¸È÷´àk©Í>Ê p&éa“ Ôhb†¸~ i“n%%°«Ä‹ÐÌ$sµ¾c €+!„®ÂIÈüb†éä˜i‹¶‚Blÿÿ\ÝYïnÙvßõªÚU§vµ§ó±ŽqC ‘¸à.¹à’—Aìtnâ$‚Æ @€„ ‰8Š ŽÇŽíãsN5»ú†Ï÷7žÿöUÿZ{®¹Æýs̹æZÏ#.*$M1'êé´´©%1a%FŸ²>Õƒ'馗ÀýÄøî.IÔ7<ÈèTC8æmç `3aùÇ ž+ou1ÿƒà#g½#>[ÆD´¡Ë]®+‚/ê6Í µSN&»rx£/Në–7¡§½Æ`s%0RS™V^¼%"/Í«p¸|¬{ë“M¿*½Ø;…õÛsª³„€Ûk¢kxæ«êÀ¬ˆó/Ç-lð`“€¨¸{bNóe*‰À.Ú:äcQ´9ý÷Ó'y°¸3*ÃÛÖ&qnDó…JÒÝZ \ÚÑ«¦n«9hØ~ÞÝÝÉšC«Ç6Š¡ sj˜ÕÌÏ·@¯»Îƒ™È«òm’ÃÀÃ×5çòtÅJnâ'+<– [}q@Õa`YgÃE5rpTC±}ß©¡¹Z?ýéÏŽ"`û==û³?Ä’ÖØs †hŽ'æf¯nY ÙCœ}(q.FÀá”ß*8𩾽; ù1MƻˇŽZÐ E m—`t ÒåCW°O™š¸©<ñË`t@gRP ´iÏ#¹ºæcž„Ž¢Â^:ìg^¸‰µöѽ÷Îóÿãÿ_õ?ù[Þ ÒpÕaFŽ\’+,‰'Z;ËöX‡Døéôìži/àßCu;…a˜ZRN­P¡´õD"«ÔPýœ-H¡T²—¶ ü­­’†Ì= Ué*"¦x.ª ©w#TÀ_̲_-!6Râ‚…6Ä”ÀêO¹Ïº0‡&Ž«ÉgfW$ü±–[ˆŠÅÞ˜£1 ¤;8W˜Œp$©BâÆzêQÿ[T´áXžz÷0ε¨chumàT3cù÷‰M‰ÃŽÕLˆ‚Dˆç°µÕ¨„\›[Ñ×½E¼´ÝÃÁÜ—ò}^Ì^Ak:͆¤†$„ú_FKZf RTE QÚÊT÷[7ó(5ddê na··pèÖ‡Z¥é‚Oxö³åÔ/Йz!êAí¼ »ÿØäüß&9\ÛuðãÙ›°‘ÂÖ+ÿѰx€¢fYÇúÙÏ>Ä9µˆ~ˆÚ펜†7‡:ËboT£Æ1§Ë"ˆ:  Úu Øv\C’ ðîªË±ÝuÖÐåÄlnw)ï~L Þx‘½<…FeÑ#í)¸Ô ðï,múñ ‰![=œjPDè/þâ/ÐÔ#þàÿúçßÓýmîý°o¼_ 0 .›ÀoÏç„l¡£Ñ“‹6øÖ^Ø@ª×·Øpit„„;ñ<àÕ«!ØÂO9ŸÊãê¥ÔL GN55§±g¿õ[¿©ån¤2÷™ÊíçoJ‡yžÁÀorÙ6 æÕO^ü¤e,šm>dPiòéÝ%w9½ãX÷CSƪŒ^^[43ßõ‡¢"I¢´QAW}Ù$*©fÜ# Ô =¾ÌÄÙŒ·«4SÏ=79ƉVî¸{e¢"Ý`Ž€…º~ ¼ìRS«¬Hñ·¯ä7|ºï$dæ‡ âÇݸz8eêÆÚé‘rÜŒ'MË! rù(Wx£ßË,{/ixàYÍ‚B)W¢5¨»$Ô[°ÑÄ­†„ÖÒ¨!i›W.ÊØk—‡Y8À æÄÖOÈ‚Sƒ÷fƒ›6J¬)Ê&ëú𶎺!Ç­ Ld¼¿’}Ì$RKœM/1Fúnõ²Y;Àêfj$û¥q5ÉÉÈs`PJ Ô¶[ßÜZBoùÕÝ›7L\6`¤†håÀ¹†ƒq—á!Uóͧß)›MS#S®óíÙTøMmDlCæ5D@—îNR,/¸ì#„øF€ƒ٢Ť¾ù[tü²¤†ýV¸bÿz ´”ßdâ;}†—ÿCâЇOŽ‹/÷ˆH gt¯zp \B‚þ§vZú˜™”AÇ.оËôe³v 9Î7«¹œ¯§S\eHŠãÜÿsÆÔ ¿Ke˜¸ë1pÒÓtèóÖz ȉuCâäi3%=_*M”Áξ 3.ÁÂÀ›jìHát[ð\¨éP‰­ÅŸg,´=ãõ?ú×ÿ·¬_þ¿éC‚"ï‘Ìa¨Zr¡î¨yƒýuçÑõ;÷À‘…³omy†Áuo°.Ó—ÌOc5dhgH0¬_Ȭl]oò7¹ JBË!h ·¡m÷|ŽšÃ–—M¬ƒ¸@‚«Ç¿ÈúqCA[ù%Å(À™²6¤¡þ2þ‹Ìê!9qfµÃ9ÄSìÝBîFcÛÁ›Û­I‘ S¾ìȈƒ±#ºX‹Böm¢+3ÆM¿±äZµP]†i¨©£zú8œ .U™µŠ`‡Pµ«hÁ³2/‰4©[“UPÔ–z}pª÷Nn§ìórô¹Üü+FZøî…WC¼Ia1LºãsSæþ,Ù²–‡ÞS¯Ð|¢I_Û{m%O0ü¼,yKÝÚl±ŠæWaÙ¼F=u¹0¥ÉI‡sÄÈB Êê$†Þ4¢ñ½>iZÞ£+è ýäÅ'=^xšÛœ–RHqìkI•¬BñÄk[jˆüÁýÀ9Å[ÄðÐSA÷Ýž×’¢Ð2ÌûqâVÁ!w¨qog/—HÜ- TÐðÎna°³26<°Ã÷ç_~ñÑGŸ°ˆ‡kº ì_|V G}´è’ËŸ0|J€ÇóiLÎ@(ýe#ŒêoÔx³áûï¹>üÙ«ØþÎÛ=ýéOú‡ø‡õi†6«,¢ ‘Ü»ˆ´µüLy"mDEì6Éö¹½bmÖ4¾rìExŒ'æì¹Ô™˜ÎR“ŸÊÇùéDYC|»åüì÷~÷w3£4Ýlpr)ȘYëReØYÈ»i_YÒ.W²oöfZ-zõa=á€Ó°¡×GMï…ç˜Àžte•%:}ªS¶¹Þ/©•:ô{¨­WßxÌï-T%¡HG_þY—RöÇW¤/A)‹Ÿ_%‹æºÄ³©ŽŒ°Áìî”R÷Å¡_{-ÁP“¨‡áôHøéér’ânk¹}ÔDæÐÖñ²Œirñ*ä |í%|Å—ßùü Y|ÆTˆ|˜–È#!ŒAe ARûÓÿx¡*žÑžÆZ/i:[,¦ÊO4•ø§%ÍHSü Ãq¾uQ`w`¬ eR§íõÄâ»Mù"¿€Ð-×|ãM; &íúIç}°ê;"´ÅK} -+ ÇšP£o®Ñ:¶qØò<º…¹ ­¬ð†¬íRޱ‘KUøšÑzÄØAâ:Éœ$"Ÿ±Oº3³Ùúõ·ðß[®€/®iè@K »Gl¸?OSéHÛÓ£Ê]ÑLgBS·±Fì^× ¶¾Ê–  ¾ýgG"Zu*Ï>x¾ß‘,—1¶dÈO ô¥(`û|Æ Ù† üó·ðé.©oYEÙ‘æ ¨ØWbR£ àê÷š.]Q#±xÂ*ÌÚéf áf´çŸüH뉩¢ÏÕø“°e¶¼7ymÖˆ=¬¬<®²©GÞw>;ª·¹éfz­ú²KãJ]6ŸÓ–¢‡wß~ëßþÑ¿²ýõ×þÓ¿õ ¿ð t‚ÕÔ¸®ϤH‡å垦ÑZ𠈵Ÿzíó·ûtuÔ¹Ðá’r®^™yOujê0.V¸µ»'×Ãc‰JÅz«)¨(¨Pé®úiþÁþÕhr*Òè'¦j GÆ¿ô ÀÊ©‰‚•W¿õœŽEÑeÀýÝ;—ÇÆá„è‘ÃÒRä˜ÜRÇËú£8±z¢Á߈!ÆT{aÈ1qêå‚ )ÀŒ™<ç ðó eÇiìA«îR¿JT*Ô—Ý¥ãô æéJ],Ü\Zì,ø3s’¼©s(¹Z_Eú”Ïj]Ï{¬‘<û€$Ó[ é)é.Òy\¯c7ƒ­—X+ÚŒóÜ€Päŀ±«+;kå¬Kǹ,A%GUë…£‚gFÜ\çMwû)UÑHP÷¦` 6M(Þà0}™Sè2èKàmÿÝï~Ï­²äu ÓS¿x ’ô~åÚ/Ò¡uÊ_ú¥_úøÃ²LvKJ¼ß;j÷U©•²àÈgÊô¼ä’$j<¤!FèÖ¨Œšs©si‹ggÔ ižÓ‰Â!w¦Šzö»ÿàïñµÌÔ 5{¦¯¾þù I¡ ">ãðùWõîw %èIÛœ¡/Óß:Gƒk}l¸…×MÊ© ‡Zgê¾¾ñZù¾ƒžñY a²Ä°H$5„×ð,Ñ4o ©[*å8Œ„8í[6þ…‡º7Y<ÄÛôÒ‚$?@”¼0À}U%›Ûã†ùð©Õ%ºb0Ye–ÜO½žcÂ=4we<´ˆ°ÑQÛ€œ}Á„â¿ðÁô­n …+®áY-g –Ó€~œ¡«u×¥ùãËëOW—ÒI!Àms¦æ:¨ º(æuqhÔ”ªïí^>p—õ¥pš>Ó/+ˆ«KtT`@®L!dœªÛ ¯ÞÚ¶êèG¿åШ{s¹?ÁsM)ضl†ÃàÁòt¢L<ÈrƒÞ ñ,¬Á‰ záGÀÀŒnsÀÂß5wIjaKô3>ë ¶ Æ¢¸æì.)k¤ Œ›‰´¤ÊÙáÒAÕï¼ý¶V'¬z¸é¯mRaÛØ†á©Mýƒ÷r_Å^}‚º ´4ÏQÍÌÚ¯ŒÁŒ´G¢0†¥.¿ìK0ùã¿„Á¥©>Ågzv6a‰ÏóC`nËãµâÏÆ ßG­Þóß¶ã]ggYe÷)J«©¨‡eT¨œV·Ü{ìQÂÑ ÓS³æYP{×ËôŠDÂѺ}.Z²»[jà‘'h›–ZÈàiô Ñ7;ëÙP$¬N½öê÷¾ûοüðŸýÿÕûï¿Ï:Ú€býÊvÔ~òˆ;õH­Íz<Ç£’UùRñ[ºÆëoîœ0£ó­Cˆ:´')aÝréÜ„jõA?Užø´¡†Œ˜QpI@+ÆGå³×‚ w-çÓnuaœ¼—šÉž3sƒ|í1#ûõdœÄ0g´xZ`xZWžÈ$ÈÐð£‹Äq~>Oà gC¡À 0r&('QA¸ÑÔt©µS²Ë ꑯéÂb£¹εÊî&­í屨'ÂP¶RȹTîì[eíµJ†/•­¸"ÇÁæçîeÎЧŒÐ\«•ÅÃe ¸år¡éUÝdü4o´†aY KôŒôñi0u³£1áÍïXøyïý÷ù™äunc]ç /”aŒ™(YsºÒÖ¡øÐM¤:¨œ& ®| øW+þ ;ǧ8lN8hOxqÌÜ_á”ï.~0yhµ…Ø Ee~,Œ8E@x¯6—ð5{)¯r@¥ »K4«Pš¨¹3´ŽÛOl3>Aò*Æúîûï9kò«¿òË6öÿáþ+=è?ø¾ž cÊO Z™p>ûô;:Ð¥7þà¿—üŸ¥P'*ç»úÍ-œÆ(ÏÇž| «§“Ó§æî:kŽa¥eçÓ» ŸýÞïü6êîÏÚÇ#M„Ï¿ùêÓû¡²çßyKZíû[ŒdpÈm"Ð4t‚–ð"YBMÍ¢Þu5õ¯=óý^'…\ÃÜ®áwE,.+>:WlUÝÆ[Žø‡.jã&¬®¯ >:çÃé¹0þdPJðÌ·¿%R;½ÃÜÔ.Çåß”5»âSçanÍ`¡2… 2‡¸‡kx¸u¯}µ·c€=#ëa–ŒHž© k¾Ê£bY¢Ÿ—Šõ-–8Ó#*µf*úç?<ý•„iݬ<Ò#¥fÛÙ¬ÿvå çd' r„·ßy÷G¿øK^õ4×Ñ O>ûÄ¢µ_ž"í—èɂ“W3쯲#°0ãª_Ç0Ã'ˆ-"²¾oëƒ[Pà 4OáìÅšèÒáújƒ™V,¸å@nÐÔœ8ëihò¢’3`Æå}°»§U{G†€XÀ˜ÔÁM^Ëà´0×ØÚ†°bÀ$hšÁøXÿìej)§1Ý”Ÿù¤qôKZ)ob?ÒŽK>àul>ƒJß:ªc0Ò…~YE¯#`ÿ-3·›uʽ¸4&5ñ‡Ïj¤z}Y޹ÅIã\o*…»„ÆOL¡Dñ­·ß-â•üqßQl”ù‰ù¢\!çÇž2®¼É¯-u>[ðë“HÞ‰ñ ¯ï4ÞÌJ”¹Ü>ì‰Ïmih«‡~ÞµñÖ¦"˜³"oÈ•LŠ­`ií郉¯Þeð¥xK¬á 2 ß8$÷ĬØûê¸)Íb™¼ïØ™ÏqJê;[±úê+†1/^‘%O˜oHgt\á¥ÀšïÖGüÃ8ÌÀ !íÆxK¤—Qm¸¥Ùü7}º°”HÂùª#¼%(÷Y›¯_ýô½þÊWŸ?û§ÿËÿü_ÿwÿ½$Ĥl«ë˶»‚Y®“1à—¢NDÝÖcÁüÓ’ç&~ˆÍâq¿VÙ³€"@ œ×tòJehù<Á‰t^Á±©Õ ÉÖ. ÇM'äna!¨ CJNIJÞ4çË4ÁiØ™êK KÒ,A_Ë`Œq`Ž·À mˆ_~þ‘G&¦ãŸ~üBŽÔ<„7ôk9~ ¶Ù`¡¸÷X™ÒŒT¢ kèæ í ¢¥"Û˜lõY¥9Õ[ûm¾äÀz:‘•Êœ¼­ÜI–£}SЛŽìO@^D‹öyògöëé´À3to—ð#5ðÊŸDö¼×Ø‘¢„ýܵ®DÏ›¸ VkûÔÍf /ç*" :Noê …Iâ¯Æå㡇­Ê¶3z#*’"¾h3t˜éY2>ù´žÒÄ4[îkÌv•õ¶,—0©Wš~«_g#sc =’Îq%‹b£¡§Qƒ?îÅ•04ù°ÇýmCÖãDEƒ #çZØYŒó~4ÇÒZ_2k¾GPr!q/4»,&KÂÐ:ƒ²&×ÒÄ“Âço½ûÁGÒ­¡AwüøƒDû|ÿ»î•¨ “úo-=Ñr@‘§^ +0¨I8vù•ÚÁ'YPAwVHøx “ŸªÇIAºÅТõa†æ²Ÿ¼Õ¾xá¦Wµø3t¢´æï¿ÿ]­rË7ŒYDãJ…P5V¬d:$ žØêkõA˜¥\Å´ÍI|¬qÕ;­ÛâÖ •…² aÌçEb׿û“?ÖÒ} ôÅ'ïùålC»ÌrqÛϘU‡ IDATý=Ù¥U™ÏL|ö…pÚ×öm /7ëYçS‹‰d²ðGix#ˆ!^‚µ1Tw¶2B¾~öwë79ì´V¾²D¸÷7 ,>÷ñ‹ú*ñ·¯Ð ì¼d™–Μ^HÕ*k¢ùýj?~ça†6±1€­—î5,…—ð…jù²øÊ<`´ìÐÖ%ç8¥iîÀT*¸É/ÝBË%ËâÓ—úÞxÞ+{˜7¼á‰e¹¬ÑÁ]M´U9*éóh^îùz÷7Eæ9%Ù°³¯Hs*_ÐÊujÙ«>¸rhî®oc {L¤¶€Ì F~©­ï'Ðê³T&r‰ji˜;Ižšñ7‘Ñ(‹DªÞ‡ŒÁ®µî3Ôyª¨<…OÒä…0<Ö\ulð£¬eÌ«V0±°Þ‡®œkÑQÃþ·r`YÉÃQѧjµ£µ{#ቇBC†Ø’X3Âí Ö?‘Õ\¦AN­‹‡Ö‰ýx‘èÖ¢u1”ÑE gõ+Æsöð· ¢K à4À]QWÆ[üì"œŒ`?}ƒ <œ^’î³½Tf åíw¾û³¿ø‹?ø?ÿ·ÿò¿ùoµå Ór­2ŸªåÙ'¯æ0Ç 0q«¡%RŒ/¦UÃÒÔ¨ù‰ÀkµÂ+ÂoD{ôô(¶üÂî¦Ézí†È¯Wâr€<$µLÐÖQ´½¾CÇËrQk•0D¢°ó5刢eŽèËàñ.Ú÷¾÷}5¹ìÓçÚ•D¤†·- ò¶sÔH°¸ÜŽf!K!åˆnM´0™{Çðìrñó‘ïBÏïŒgÞvΖÍÏÜiÃڳĽlÉ÷uoÛÈ^éZ¢òëá_‡R@ô¨ÏMzÝ:ÇÇq8c‹n5QØÑJ üƒ6ÿûúk]o`.£Ý¨¾É¾ÒÃèRs•Ül©vŸìryfb=lИ›¨œ™ÜÂ?˜µŒ®[c’zrCø<‚ ¡ ú¡Ÿ-£‚T£þĹæÔèPy—ØÓÑ|œÝÔNê¦ —@ÊRcŽƒ°šÆöìæ‘RXѹ»BÄ;ï¾-–±g ÙS.iÆÏ†à§b•·ð¶¨ø¶ÞœG ÙãŸÕ²§¥muZ(£7럵H9ƒDs:A€€ç2õ®ÜíGr¼FfjP¹«‰¦¸Y¿Ñeöâ‡ÿìŸýS9–½\˜$Ìüó?[ÒØG},Ôäûvƒ,…Bò“ŸhõÃ_øáGûAù%Êh$Û2]9º€®§“Sß!óB«ÿëv Áo´åºMGtçtÍ{êÚbZžl’’ÛKÓbà³ßü­¿Ýga¥ÍŒú„¦@¶TÜŽ¨l“­¹òw¿÷}™V:7v úã€Ö•ék¶¼S1E%uŠÈÀŒ5•蜳@ïÐÍ~gvÄ¥V"?f´Ò˜C… .iiãÜ"?8û±(`Í)º¨×0Q}`ˆõV×Pd3•Œôò¤ƒ¯ŽtTF¶ ­3´ ¢ùÜÖKóÊ n˜ Œgº“¤Z(³„î­IRwˆqEσ×ä0¸ÄÃð=,>y˜óŽúóiU…q´îk%I»&â‚Yø×ÿù«æ³E݆Œú©…J žF`gñŽØÎ—¶Ì•]Ч&'æ±A'H»«RYÁÀÆ‚D±nÿ™ÏÆS¹¯K£80ØTÍdIa—«)í˜t%\&Š\j¶ f§Š¥Ýzdž&ùÚS¶4Õ_ë à î.Bar‡e¤ÖüE´¥+ݣá´5N¾mY—ðX_qm«€&"fTõIÜ&Ö§Þ­ƒ9^á¤1Z¢wÁP£K,°1"˜e&´€¯âø›ˆPH¾õm¿ b®½ÿ*ÏÜ °Î(²Ã8äBEhG«*#½$ãÞµÅêyZEóEFzì–áª5=þSã@èšh‹PlèõmYO\¨ª1 ¨§”RHôŽ·¨Â™¢uB t> Îæ¶%Û×=h‡ VÿäÿèÏÿô~õoþç·TÃü-a–Ðìå|q®96Ží8p`Hª!D,2à¶,\ZÝ“hÜ5=pä7K4%¬ŠXíÿIw(˜ù0û¢”ëÔ¥˜ºÏÁ“`ðù[%¤nÔ×\$€¼àc§@”6®Œ.?EÂñ.2Ì€‚Â{L¬eK³5õäËlV|®s>d7ªéÔb´‰T´lì„kü|÷­~PÂÄ|âá÷¾÷]é”𠕤Ÿwß{ï‡?ø>¶9-ɽŒ00n?OòÆ’–"‹gŽî‘®`fÃe`‡nò}‚HõëÊæv/-–ª¡¥KFé]wq;ž‹ÏjŠ6:QK<._}ö»¿ûÛš¹qç+ÀÕê]ãeŸÝ3úùêü»ï}·ïÆôA¼Ä8MŒT³,Ûã”ûVÛ…Íðh¹ÃçÁhTXW‡ž}íÂܵ=[º¥7r¢ñÝuÏ ñ¶YŠ«™øu—G…›’MÏ!¶ƒýN´‘NGëZÅMêêgõôòHJJÐr?ŠÀyÔ÷\€ž™LG*èliŠþÒó"¬~†­†„{‹]É«ìXŽÚO8H«á÷§G‘Eߣí…~Œ¹Ô–ÒÈ¢ìÐܦ]€SƒGŽ¢9ÒöŒB05Ç•š¿j¾é¶¤îcuó‰©%{…ß?áÉ]ðŒ‹GUO½®ÝrH2ºœêzbèR¦ Ö`s9çã*XJÃyNAü¡xZM•Ýîñ®.dÄÄ3Zy”¬áÀÄ­: ÛÐäñQ/Lt9+Pp9Rá•2C¥3£ËP ·Äîñ›­6À“h– $ÅÙOJ¼p°uàö÷­p¨ücHaŽrð;Ô-峬³Ý­x£ ÚÖçûÀæ>.Œâ7ßÚÆ¥ôm´½•æ7öÓŸÁ$²8ˆ -§p¦n8Áœ¥æ­ ²†‡_4# KJøŒ(ƒSÅšƒ±ë’X<Èk<¸Hs¯´+Ž˜ 9§_À…Y90Ò|ÄŸÃ^†¨úo3šÄ#¬0Ñ<õà¬L¥&ÖçÉxCHY_ÉQ N)ÇäÊËžžaùzųæ~„㕯|¯î£·ß7#ýŒ!é9~qàz4ûÂéˆÀ&~Ê|Ð]”I9ô‹ž:Â4ó}º%­gd!13þýë2mâä™Y+:ô@ÙîS»:0LLŠâéõšIƒîP‰êqæ*ý뜰¬Ñ}j¡.­š¨±çj”jöÀñi½?&®ŽCË:Ø3¢P±Jhë_å%sã†y•.zÄuÿÃpMê¥ë›ã$äñ©4ѧÌ}zÑjãH †ÀÖ-÷íhöÇC=eG=”@ |s½Q L´>|ÀÍO Îfâ,ÂLƒKyÑ‘˜oœ>1‰Ò„‚ÓÌøVƼ3}ë„:aæœ!4äê¤òL<Ÿ£˜¼›E7äBðUò÷åÌ*!Çäødšî¨t¼$TWê²pG[íßxíñöè±'˜3Á¹¢KBM¢Ë횢ˆl_fOßüä§öçNî6—GàÕº¥ŒŠŸÉ;³ªa^œßò æ5‘°ü÷Énäh¤7ÜP º`@j« áR%01FE/5sŒxÊŽ08ÜåQ(4WZÁ/1T)èÜôœ0ëD¶TŒ¢‹dï4ƒ: oäbz>ÿÏÿÅ¿ð¡2ùλï¿ûáÇy$jçƒ_ÖòM{w%U:²å;…×ÛݳrBûñA¹+k‹¨2Ÿ|Ã^pžÌŸÊ"töi©ì¥ÝÉ4‘bqrrÛÙ{ù7o¤œ;0‰CÜ:2™þZž ,â16?{öÿáïjàí€úŽR~ûF{ºé£óoACÔl«¯¬“pIwiŒÄƒ©¿nûšÍ\õF—Zá³Zãë*ë߸>ØU‚-!Õ4@èׄÁÎù„ õáxÃ!àÑ$‚&”£ÿЦÕ6Î.€Ú˜²3ÈaH|³a>„PâÄZ‡g0 („hK88‡ö±C𨇠ƒ÷ÑN^gM°äF=5ÌÒ!õwhw.f³ª¼39ÃcsLv¯ï$ĸqR¦^¸Ðî–«L๪)b9\þ_šò“qÍ $þrúGKõc”»³`.ACPfý«Ê2 .ë͙՟2‹ $W‰™!}ðù›žráÚ¦¿ kLOš£ÈÖ´riÁÖIŒéåWô“QÒŠDJ<€9ǰ84æs0B§ÏÅöQb×ÇçnÍ‘|:B4{¡U—­7§ :ÒÒ¾á‚#ÔGʯj‚«)¡V‡A_‡Ö.")2¡ÝõG¨f©·éÁó@îW^ÊÙûóQ\ ¡5ò%U*s‰Õ+k΂oZŸ]ŠpÓ­ÔdáN¨ìGÀ €'¥P/ÒÚ%¶ÏçxÐ]':¹ ­bÛ]‹Çðá+m±ç/ul:7*z ïãç[npäô²ØòžKgÛ®ZI‰æ®ó>+_^Ž1ˆa#Æ”!äKóÃô­ò8$>·,¤^Í!z8Ò^žxT>ž6^4ˆ œš(À§½¶ØS‰ ŠwËV'ðƒñ]ÀýèGÔõá‡Ð ¯ÿÙÏ>þõ~þ«?ü¡ç€/ø¶¬áIF²†‹Ï0ZR(ój³A Ò<ñŠP<ÑâSÁåãßçêOúáŘÕ3–9*3=û­ßü`A@íKçÑ6C€î=Â̽šÑà„-‡ö°·e¤%ÏÝúMïAÖaô ø‚ér5Å8™Ž02|DuŒ;ÔsìÅËz΃ï¢n›,H|ÒN).E7 Ï…ß~"ŸôDz5a1Ø¢wÿLAT‰ bò×ÚZ Û/c`@'F{® GO:Ò(Ðê—&ýöJþÕ/"óÆL)Ï ¢×+Èp²ƒ‡ÍÛ7\ˆë<¢ÿö´T÷3£&·B:ÉWú@¡ÀÜ¢ˆJm»µd÷Ú:Ã/+Ho ZBõLîÁÏqhØ¡ƒëJn«.ºjŽ1çóvÏË#ÇùŸQtzÄ™‹0Â?Þ8˜¶&,­8lÔq©íñÆv``3º80ö.?»'tÑyM‰RøÓŒâ$=—s¹°ÿ€4Œirä´+Üá[%fÚ±Á‰øyÜ1:<8|(„ù´RpNRŠº63ñ²BÂüɧö>6©p@h6ÇçÓÏæ¼*©EÑζê¾ßn† i¶;`8wÆz7’E,¡¯ÁVqª•%GݸVÓy°ÅÎÃrz†jMb ˜ÝܶùµŸ’ ‰Y%ù×P~Ž‹ÑFÄqØh[ò‹Šì¼õÄ~˜8Gñ0°ó(æá ™„»R?ÇÒÙZóeã ˆu/™a`œÀ£'óüEËÔ[Ï.tÆpËçÚEgœÛ\ïu"òÁè ƒ·D=1¿ÿýHònXQ€Žrüä¬' I¥›#ÍãâK,| @ Gjxn ëéÍŸµr@4µ£˜±e6j $wG >ÀÀÿÄ^Aµgï7ÿ¶ü¿¥&è Ì]%5 ÷…§›üÆCP—d‹nƒó6ï¨êÑl¿1Ž/­>] ·>•ëÌ Ñãjà™Þsw·’=ׄ*3p(É ÷‚£üIʼn‡Ée-KMizyÌÈ!O9¥í=±pä2ùAœ0É) jà§‹1£Ãï³^Žî6Êó€Ar¾âl°\ÿ/+ªÁz z^õÆ ¨l4D¼‘û)RgŒ'Ò×Sá‡j+8²ØÆà(2Æ¢[*X8†.Ýͳ‰óDy‚Ôu›>'wñ:ù'£vÛ w KÀu1zØòtf ªÍ4Ǫ»Wp~ÙE÷ª`ú‰Jz¨£hPXæ\%G0©4­âá¾Ù| éE€t´£1ïµgü‚À`:Æ!›s¼xö83éEWyÉÓ4=ö­9nè,…\±rºžL|–?BL.qåö¦I-Ò$Ã9»+£(O(2Å+ —o;x§»× à õF”»‹w“h/Q85äpÄZù"1=y4j<–Êu"½·Ùù§vÀd ÐWqTCK_l«þd†{Þ´Ì» Úò;w)þö*iOô°¸ù˜…_T{KšA ǧŽF aà hw‹–èà"ÔæQ”;ë £]М¾ü¼ß‹OÊ·†*÷ˉÕ÷ßy?rvOÐô·Ÿÿô§ÿþ½þµ?û³?ûµ_ÿ­wÓ_n]Z–¦˜DƒÇ™æ¸2p…n`gq¯ôú@üŸßd(·ÆÔÉž8–ßX$ažû ¦y8êŶi»ü•.yE=øEÛ.à4åÓ æ°¤RÃó•Žÿ“Û$ŽƒWgCØ'Ÿ¼ð¨H:+8ß›¡Fˆ¬Œ£Í©Ž1E0Ùƒo>Í^¥P¡¢',t²H–ÃãusúŽqzÓ䉷,ùÿ'„OO æKnq©0h$ÅYœc:Ô[ù£¢}˜oAˆ€ç?Õèé¬AÇÃu´Ü,ê-Å5ªÝ­cÌ¥{<760+;ÈK—¥eÛðä’pëhLÓÂØj4m¼4Ñb'È/1¢0D¸´[ÀðCáØÌÕ–™9»ËýýQ0ö¤ €½ì„‹àŠË©GÀÜiÛ¼'¸}50@RÌܨӳó)ÁYÇFD Ý&þ“ï6  «!x—€­¢½øøx² ®@âCp:ʲðI´ïò€Gä¦r³;'EIçɦºXê-Ô+@‹wësu=„ifØZ•†S‰JÒ‘^Xz|ÇKÏðÔ{¶Ò¡•gÿ«^ÄÕ‘€WlÁ{ÿôÿÝ/ÿ‡¿ÌnÙ£f¯"g{çÝ÷¸, ÑJ]ª÷¥>e*"ãçVÎБ™*0ÖD÷ëÌ·NQü:AÀœn€9s®—Ù!I1)ÀX°ØH‚¤’7öÿžö—ðj%á ƒ~&zxX€c1Æç8þTÐK!¡V|„´$á0ToÂcyòö`AkÔ<;A‹(©¦¸=€û&Ÿ&•¸weš¶g·ô­ìx)¶ö1–¾D5‚­&V;Õc ¬Ç.þAŽÏ¹{žqLs`.“ú¦ÂÓ»J·|ùñ›/¿½ôލúËQ½­ÓC1é“~DéÓ§wŸœIq’:SÎO½aÞÊ?er°ÖKÙ7÷¤–å®ÖSn‘&•ÂXï`¯EÛòà%ÁЦ«:¼/v0¼ 92:SÙ!Q6<¤C90¯˜¶7üU7õƒÊ,þÄgã±áë'×é퉥FS§ºÀÖä!I Û< ÏœÇÑçÚû” dÄóovQmä#×b™-vÅøbÍÛpê`Ó &3AÁ¶ÞÂåõ.ù}øêºO¢ƒ£jµ‹ø€‡ñ.ù‚×߉¢g ÐsIµP¹TÏ‘GÁ¨ÆüÏ/J}¦ÛÓ1¿‚XüÝEú3)¤ÏÏÕëC°Ý%€:Ëz ü Îçf ‡EŒQ´·,VYø6l(¨Æ›·Š¬·iÎ×Ïñé¥t~HÉ>ŸƒÊÁËŒ}„Rã X+—BNÉûÜ6¡^Y²?ZÇY’J ”ÿ¼7º¿’Û`×6 `0Ó']3îmâ''lô¦çºœþ2q •htÚ`¼6ÔP?Ÿ¼øøt~ÞÎ=ðÊ_cþS¯”>3R}ùé?ùÓ?|ç½çŸý¦/güÚ¯ýFk}yBSsÍÉÏè 3SäÃzΡ|8ƒ—ݼ•-ÈøØÇcSAZb£tâ±ãÞ{M  «$ñˆ$åP”À… qšgoèå-Ó*“RRQçúQ‹prÀŸ¤Ç'lǧ3a[ñÚZïÝUæ:²…Ÿ D c¾0€ 8èIìöÕ'`Œ ‚ ‡K<îNö è´‘»nË`‚_ʈèÑ"`·4 Õ5ÜÝj’”7¡’e®ï¸ûÒ µuÙ`µãð€:ujîP¦=äÒƒ°µÙ²+DéÌX À-õBâ Mn nQã‡:Î)3´‹råü}8#W¡8|°À}ü¯À‘„€Kú½d,!nÀ‚6 ñˆÊéÓÝ|mö0á·Ù`ú±]b0Þˆš8Þï±€’²L¨Ìyf‚S=€“·ÎòUñ {c±¨e…Kš€ì >Vóô+sðx‰c_Íx­eðÒ£~1˜&\—6¤ê5lÀ›WCë.Ècõz+äÔ‚œJÀ`DÊËJ7p]g' E|#µ?¢¨/ã÷öŠà‰SBñü-Z–Âþ‹?€'68‹6u,¤\×]M $)Ðñûg±÷Þ{¹Æ\1„äì•:—RR®ªé_Ð:|4KÖÑlLj®X%üc»˜f`íˆÆ€îê—trA «ˆêärÀ9¢ gšgÿà·ÿ>ÒN€F+=C±¯´\5´}æ ·ˆ<Ý÷ðÿMÉÃ~>¹èé§™£‹¶t|*à ›™¢Z ÔAhdÒÏÍ#×Yó±,Ä; †c‰€°"ÖÃHn³“Bˆ[ÍpA 6ÚùÃoavtÓÚíîêþÇŠ7NÎZΰ9PäG&¯"µHáAâ[ÏuH»Œƒ¹¯ƒZ©L|õö8X}'°ßL˜B™–Bˆy÷êY uÎjÖ1Ü=Ou‰Ë‚1C.RˉÃf‚."aŒÑÜb˜5 !?*ÈšÏi"ÐN!ø7X‹MoxÿE¶$NµÛhG½’T:6hGùqÀe'áG{ÖiZƒSÓbZ_ªQŒ×¥+1Â諭ÙÄ.ó,^kŽyúï)Ç™DDF7] ûU©1Ïí®öaˆGJäEœX:•b‚´ùÅþž ©'øp«,°¬_ÿì'}ró\Ÿq[Ïdz´Å,¹Fíº5.æZ™ã+á­ ³|¹eá>«£€#Òoâ4ÅyÕNÌ00o§¯!ïÐCtPì1«yE;dßzî».—í¬'šƒ¶˜fýˆ ØO‡Ûç¥:-ÆJ”ZRš"(ž¹‰i¿R?Ý÷ñÃøö”БßzûÍï¼M!ÙÕ9O‰âWë›{;ãö‰5 IDAT°efßNæÍ²yC=¯ùÅó2£¿t”=67t0¤ž½, ˆ™NRö¥[ÈizS¿÷dÿâE¯¦âÌþ•¶)°~ةӖg6B»Ï” Žõx[Ù\PJyÎ ¨H ,û@®•$ý·§/XÒ¿¦›ôßüök?9g#³u»%úm.K Ÿ?û굯_{ÓgݾþìõçßùäÓ>üØÏq¼ø~ý×mýœ–¾ôŠvkE‰VžàoدÐv^ýÕ7☠³½ ª¤w2b÷¿6áèû­Y**h­Ñæ±,Á{š±ÀÆÇD³â5æ÷ôSAóE£’Ô©(»7ìÕ“Χ#?­ç²U¡_êÙ"=õU?|{Ž6å¢YÝqnäÑÉËhH â'/úî;ŸôOƒ”O™œÕ^¼h¼gr†ûbM`EÈ]}Ÿ-üô cøe£†ä×üt„”ÝásV½µ*bðx@êðo¶ƒ9DÍÛÍ#ürm-øL+UæîüsVmÎYâë] ñFÖ7å²™ƒg#ã˳/¿±%#]9¨ÑŸðq ‘æë‰Å(ëµ- 6¶¸ :øòÈ)ïçbútßkØe FéŶ¤s庴ˆIÒÓ¨%Ù ¨ÉFmfè.nÿ@ŸôìÑ9 rš¶ÄÙ‡RÝ¥=‹í!ð*n1¡ï€„gÑefDËæ}Xõ(A¼íYnÅ·žÞ»ðŸ‚Š´¦r ø¤Ls¹i&ÇÕZǼÀÅ´ˆ§®¾ŒÕ µ kæT*Gºà#áâ0¬# ÛÉFþCvé—gœ€8|*² ÑýÂ/x‘P|“RZ]‰Ôº8Ii©(Ô÷Þ„Üf¡¬Çf܆lNe¦nؘUºlDU9»œÅÇ'A|2Q>º(±‡›šd»-Å+àYCj9¹Ð%#øg÷ïüæÂ„[Å>i/a\‰Õó':¢ ê!ÕaÄä ¼ìjfÄŠšú •áüax$1jУ-0Nz¹8A¬Ã¢¼%ÜyX‚Ôêx½Ë ÈÝ©“‘LE„pœ ÎçÜ qq9ñw){k 2}~C![ëëU !ð0sž›‹¼"ÿõ‹b_mhIÒG·ÚS‚ˆ °±»b2ÙŸ·N9*èÙ]lƒä=&ÇÊ8ß«é䂵p ØÄÞj¤æ˜ÞÈ\ð-õÑUz@É^Puw^RžRxÈ­B:Q·. Àå¸.^ºäüjD VB¾ÑôÂìØèUÆy^Ã%ÒΙlk× €)$ï,8zwƒ¼r Šm>d6Iåxå?vø1'¢’u=v1?X ¿;ð;pâ.¦p‚L¨±@3ÓÎC´tvŒåÞFÊ¢¦‡N~Ú® Z:}î»ÎoÕœrØNâEŠvi—!œx@“ø€ f.ÎÇräuNɶ¿Þçp!yã§?ý‰"@ €ªó¢–@ž Ž÷AÌHt^pÆÊŠV7xgãç‚,þpíºØ(›jÆËkÓ˜s†ðÖ™\"Á‰–¦v°8EwQ÷‚8dÄêÊðS54­-ü.¤ jÒöÈ#y,ä`Kàêƒz)§Å9.¡½x¥YÓ§FÍó.£­oB¾âY˜d¢Ùá»oKdßÿó?ÿÓßøõß6 íÁ‹¤vo4Xæ{Ç$ifG¦éÖr¯ÄªCù³Ã ó® 2)bLPÄ)ñ4˜ÅYÌ1¦×mY$ Ý+ª</0*«kĽh“8¬3¹B{gDƒÜp­`V)ÎÔ~„§l0HHÐSv0 -Ïÿëkl­ÂÅ/ÊÍ‹” Î6?Ä;åøìŽWÜMüü²E¯ßk…4®®Ÿ¢yKã[lh—î^½t-8má°A?l60–D‘‹±€ËIP„ÇŽt†©3ÁÒ™žp„")*€_žµ:íÑöéÿΨ3/bJÔo!ü6«\€…a;ië€G+Zº[T§! +9>ûTäÉ4:^®ŒVj®ï wRCÆ-W©&цóDPF´»E\ÎM¦мR3fR8`‡ñ ó*õ8|òÑY^MvwPl,V£yÙþxPN®í2ÁЪ¡j pø§s®/?yD¾59nÎ @þ7¡5ʰ ¤'>k@’Cm‡>ßÓÊ-ªeú‰ÞÎË‚õÖ›Ožª·Ã³bÞèHüœ¼CÁ¥<þ4|Ò9s6gxÚ8…3<b[ñnþk ž'0œwœõ;äÝþÚu~Å9rõkãR£ó1ö|›\JuKXÆ ré‡''Åñ©ðRL5aëÖç=Ç9é®m¬áé8Þ„ *càÑáó!qØ£Ú[þeoø111émYÞMØ“K»Ü4 >%SE'$P¡|gq hÊ~\ós…„‘-PÞ¼+C#êx"Šßz ¶‡PÏ¡õ–ÃË®`–)áÙ ˜-x†X ²C±0„±ñsZ -l*!eŽ?Ðò/ñ¦OPמ?Ò1Ø£_õ`Ñ-²†‡™Z*öS•øou­oe Lº¹ßØö-œOÄÇ÷Þ}ÿí·ü¥_·è7MyÚ;{+B€&ÓУ{¢‹)/儌èŸåëÀ¨O› K ‘ ÷îâÐAÉÊî:ÿfZháÚ]žI/-ˆõ~RéRC`Ö)Ãt˜U±š¼…ÔÎH-«)J \A6i.ÅIábHËÖ¹°ItÝ'ì¹}?½òÕ«_¿ùºY¯6ž ~l Ú& —í¯ýJØpUŠBòÎQ;§îPõ(Ç­Ö×—c) àÏ­.³íeN¸¾È_('¬¶ÎÊð¸ëH¢M ÐRÖ¶š|ÀÍ” Þqùs‚¤(ÿž\‡Jùê»·…®¨8\Æä£U>ŒìÇ|(¾y –Ĩ«~\Ž€u d8ü`Œ½,R´DÓ‘qñ“;Y2ù¼(‡ êÎ Ý✞ã6·ZT^°¢S`ü$!æK¢.¯`êÁªr‚lºWÿšs¡y$bÓ=C  ½θÚÿ‡?eg,á[a~• âgÌðÚY°ÐkÜã²Ú5¼sˆv€©¼(­z•ýÕK ÔgÛ*#Gý]Ûcìà é g,`)Ä™|mÝZÒ©æNEj—B±¾ÆbIàXK@¿Þ ã2 GáØCE‡Á7Üt‹›(S)O¦$\¹ËâÈáÙÀ‘ëúj]³Óé}€n\Èýà¬fÁ-Yö«kðP0‹¤þ¥S—îÐÄ(0 —í11µ¢¨ 6ÌŸ~Hæ”fôhJcs·ð¹,Ÿ«ãXÛÊDÓð6æ:«TàV[X7…ÄÂT梯=ûð£%ÜÆÜ`¶vƒ»g ­ÀS”§ Ê8¥ãÃÆ!b·í’aúJºÒ1]‚w¬Þýöœ€†í«ç–'Ñâ_«6$•Ñb/ÎÙ¨ñº‰‘ç n—ÕRé.¿DèK2m7iYóœ@¢•š‚•­dûÖ>\‡$aï_mšÊ“'^çCàóŽÿï¡ÒñƳ7-ºC yg8¼0ÿÜ:¹»Ðº¶1¬oŒ e~œƒ¤UñÛ¾«AÑx #.Á,íl¢£†Dîâ< ¤ÍöñÌp›GZ]º¥ÈÅ·!,·ÐàŒORã­Oîåÿ.Ä—Ç*rÖy̱!pkm¨ægˆ}óyìÿã§?G«~Y®Ï&á!ŠßôÃ8)Û3³>½ž†è^¸á& ò ‘ ÛÚv< hy5ùÕɯŸyF“C§"詪ŠàUÞqåT=æC4Ó¨¡ µ1²> ­Kͧ1Ñ:6\z fR¾o.|ûšš‹;B‰"²\ ÎR‡–2ñ m ë",á €Þr~›,@ó¾d,þð8ãʃ 8ï]_iULÈÇ-…M¢è»çÏzÙ©Q«çOJ?ï`>˜GäFD㤆lôzÅ‹ -Üs!ߦ„þè?úèx`~:K˜ˆP*ö¤G@[W󬼅þ‰CÙvB¶MÖ#¯ÃÃ!¹²TsºDFH=º"‘1õÔØ-øÝrÎQ·àʽ囎Ïõh…ÏhKL s^¦l­~?¸ÆâœBWÒµH'\²®Õœ¡±êè¦ÿ¬-bãêÌÑЙ>_N¶=<ö0y˜åäÕãÖO•z¨‚[Z9»Œÿ×K±æÃUt0=ǃ™ã9Ü;äHQ³UÓ›2™á—`~2êà>N%3К&áõ(ùs;Eì@ô&Ç·¯¾ý×_|øg~Õíƒ?ùëãoxUª`¿·1p›®øŒî6-uæÊhSVóS$¥1¶9H"³²ZPâ4N`£jïôf‡½®Šjó§e™äKyŽ6exé¡ÉñS=Ùñ£²¶2Xâ8N-X!vªkÄÓƒ3÷Š'ÝÔ,ˆ*ð™ÞÇúôlRWÊ—ÜÕúB‹ ¶¶Hxn±Ø*,$5Á#ÊÖ²mÍgøêÎešë×¶rwqÝ­Ñš4d5Ê éÿö0d…‡Š ÑÐÌÁ 8ÔÍ©|nEŠþÎÉŸK‚ãüñp¬ÖÍÛ1¬çÛ™‰ÔФÆO‡æêÕªÃ0œª›]ëNZ0ŵâMô£5xöü´';K« hµZn¤É-'*óg>Gž±¾þ7ÿú_½øèc»*q]c¹Qáç9&+@db~çÑÊJ?ïýáGí1éšèjVC8/t0,9“?d…S001D%~\*â Ç— ­þÔË!Œ7o=ïC»*°h‰©\±Ë=†b¬‡h. #Š%Ì@èÒ•}§Cá´¤­m˜É¢²­–û (–1ÿÓÿZc -N¼3¨‰¼c8)Z=íF£^ÊeQ\ÄöKÏÈÛõ±PõJ ßt¶CHv¨¡3(œñeÞ­j¹2ÌÖ¯=ÆémÐ…õ ZÁÃÕo¶¬ ðoC[eqBs``ÜÕÊÝþOÿã?^è¤iAŸŸ­# B­ÕŒ6~mQ=ímx]bÊ–ºç6𷩯åÐ3g½Z&;ë`óø(u¬O=]͵B!‡›£0á‰cem±á–Jçbþ¢"ÄçNôÅ'F­²7¬là¼,Î^1h=†¶”©CÕ£ÛµP’ضœ¡Õœq”KÍÀïy6¶(¬·¯ˆ¼šh Sa‹¸dTœ«¤Õ‰ÆøÞ˳ÎqIK$$ ë&¦] 7ÒoåS$Õ²©—ö劥Œ:ó’±y‡¶ èŠžÈÈ pëçúk©G ×K«Vq•†ý‘®X÷/5 Rõõ ª˜ Õ^«°,²¬‡WãR,J”¸ï{3íñ‚¸&AfŠ:¤õÁÓUÚ™kPß­û¶òÔè®zº=ü8£­ó“ím†,ââX¢L˜<Þ–"3Ö˜Lp·\NK9­/yêÌÃiƒHž*»õÞ;ž „é3ÛïDH®…y#X{Ï•hfKÙ`Œ˜¥ï –ìùªýƒ9ØFkÚ~7š¸ß±‰F’åA¡&Ðd_SO>ãuï=Í9•êÀTBWPÁ™–ŸðFZn Æ‘Rà3YE àÉRî:â멳ÌÙ8lZ£;š!>l«U†JÁû² ºš[É1ÒêÆÑÔ=»€[dÓ\,‚õC¨7 R+æ[gÔS™8γòŠsîomþN;Nøõ·¯½ùÃï¾ûÁÿ­õÍ«ßùáF¹vŠÕø­­䢟På̈³¦s<ü“õ‹“-|RN8âg¯³UØØvmAæÜÓ$0ET&rY5ݨ„V+•<™†˜r`åëê@â€P½‚ši µ(«T.¸»¢™|㱸 GÑÿ­RÀÀ=§^¦¤ŸIb²óX2±9ÞPÇ'üÝ[Pɯ_h›06’ßæG*?enê[¼­w›)ä“F°aé\´4œ!`ðc*‘¿½fSy¯™‹ºDscŽ(ám6»K"Oü*·èJAC¬:Tº$¬n‘”©¶ã´}Ø"¿,ꩃÇàqæÙ—SösIÞÌ} ·$÷h~¨Âxþय़ýVÈ϶ÆuÆUSP}"ŠaÔñ÷WùÚÏûh†áô­·ßÉÅ1 Qkꇫ¾ôÍÈO¸q ^ÐÚ`ê%2/Ò²ßãiÌqN?¶£.ýÿÕƒ*w[Íz:°rÀY?Ñfg—îR‚e8S¹çê?)0{`F%wñíÒÝ<~?ª¬ÚÀHÜÿ×j±òÚa£“%vçá€?þè#¨.õ†7…ÑËÞ¨ƒVYŒÅ^B}ód‹BÀ`Þ¨zùÒôÆdlî"×öÜý™’xZ`xõY€Kó%0"ŽóÉÎnx†é„IÃR[ßñTääR‰ex RVéP3gˆ–¦0d‰[ ÒÍOïÿïý®Ææ:žÔôK$ñX9¦Ùž‚Õûó!CTŽˆ€»vú(B…¸‡ã[‡ËóÈFÚÂ!pÎ"îó*0 H`òd‹Ódkà‡ÙUlÒùøõ$^ ý„”lº>ð¤GÔ@åµÂ°¹l,á!O‰ÀÜ¥&xÔcÈ™v`à*ùͤÂÔ”Ž¤Ê´ŸQËòc–ŒG6šoÜ£rø‘æî ”ÒÆÕgMPp¢.B[z¶=µxú¡¡Õ¢0¶+E6ºX‚dò±M{žwø1OR¨0€u ˜Chr÷ðcø¥J=ÑŠ_ãâ˜Ô%ו™ÂÏd=a# lpž4tI-¨+8çý…r¹,K•¢Õ$5•(—æÔëh/ùQp9øõÚ`—ê©! œð»…¨H¥²µ ºÈPi&äÊi©ÉU_&ئE0ë ñ¶s­=G¥_hâçgŸ¾`F_à4…®”šñ^FEÀ“‰¹ˆÌìUs/]?f^}ÅÛLÚŸGTÔY‰Ïg{ 걯ÎÀ·U³×eÚýØ×?üõ‚Ï9Ë$± ]5là œŠ™öÜ|˜F¥‹®Ç*›«ãPC˜)EšFL¯¢l*ÛË€†ZæAc^7Ú¼t6¨rà?£‚«$Ž.*½–›)£ÛÈå¬oÓ©òÿ½‰R«/^yÝ/Y빘± ëµWÿâOþ¥à{¿ø+ t8 òçÖº¾ô 7öFBºcÉù$:6Ž•g5ÑŽ"Šîs*§X©÷niJåµ| ,î.æ¨_Mþƒe2@óy”¹¡R9U?ÎêÓùDà§a±­2WÜΕáHQ¦{9^_Ó_(ª´2NêwŽ—ã“^~æE:úÀ‹Ê3tjQ”“‘NA½¶;¦±ÇÓÇö©‡‡zëlK ëhú„¶ÐŽ ¢¶Ò’ÒôºÝ]\  (:!źå8`ÆŒó•ï. êU:»ŒP«t­8Åço5}Ź¥9˜±ÑäRYÛÕðߥx´:õ)#4„Þr-yòžÓuÛý „§+òñ,}yósR7÷&›»P½äòk‚–€øÕ÷Þïíç^Ï÷ZåZ}e+‚ç¨~u¾…ƒu½¯÷`¼¼üáþèôÃïÿÀ öâÎŒ[Žuªx „îLÝÀP¿‘VµP]ó>ãQ;VOQ!Ö¦F™é4L8ùØÕpái²P©ÆJž¾¦r4¯±V `´ÅÈx gÃÓC'Lù°ºjÏ+¿iO!aE êá¼L`¤[˜‘N)£è|ƒÚÏ~öSa3>©rk{·µ ‰c5NÆaéÁ4§­oÖ,ç?Þ@Ža*l¹„ê\jë|<(cìVOŽCx„MG0žÈ¬MØÚ>T®)„jñìŸü“µÔçðr#†N~qÝr¨²J’ÜÃA½VÄÎ& jbk7ŒqÆÅœ7û µM8fOjs\5:Žj|ÀìÿzãÚù÷42iÓ-8ë£'¡òšÔ÷XYGR>Ã\'Ô¶–ÀÉ™¶>‰ý8æïSF ïϯqC²Ôcò3r4’¹+€kr²§ËF#kTŸú èfÒ}㱕ò5{VöÛœD 0À(çøÂ3n!T&šu:§[²`cÞftƒQQ1Ñ©5GÖsü.[Åùòsy¢ZÉB™ÁèAàZl(Q'86@"A1øìio©žº>´Í¹ØW7ÃxþV¿H€ù‚ꎀ¹Z1uÕ* góàexÅS®m=¾JLdM:8ò×ßüåÿÒçL¦ÝœÕöÜס­š›¦Ãì–C oT0ÈiB¥32¸z¡6*ÜÔƶùÓX9·7Xqc¬%ÎÏ<Ôê`Á*7yúËŸü¥á€!|²…Æp¡ƒ2–$P†5¹2<–á9ØcŽÕ6©)á<¼5Š]7±sˆ@ cr!ÏžF—Œí=dbê“xp«Õ²"]s^5tb©“Rúº©ä¸1~#…?’R³ 1 Z9ët´x~è’–0ËŽÊ8¡O ó`‡KäÂ3L.»ÞfÀ16Û³{lÏusé“nÍ)¤ÀD˜SÚ¾(Gs¡†MB ê… ‡{Hê ‘ûæÍ×Ûíf1úeÂ/?ýèÇÿþÿyã·ß|ï>~ñÂïˆP!{„á&H[8q1–ÂJ´s'À.ïÖÉëË„ÀØ÷ÞÌÅŒw¨ý¢êTärêz˜¬E†–`OILs~µD«[ТBÛe«ÀhÆŽ‡ê%W«Œùã±$p«¼ÞZxw|ãc¯øåÖÔo–×gm‡3US)³¢^—g©eP¡¾£þ';ò^}íf^‡A 8P“AbÈ€YGb0ÈOçº 0Hh,Ñ-sg:)>„!÷LvÈñžKmâ6$ɰpC Ê txÎsú§Iç½3YÏ@ñÃdF2g˜‘ÓP!z\Š< J ]žoß-$°­1·¸jD *ªžx½†ðCâ@w S‚.‰£Ò¡ì|R FY—ö]‘?û³?öP‡ ¼ñ·›åéòŸº±®î98*`±$n|ôÑÇ~·˜nƒ«fÙQz”tÖ5ÔkèŒC5[‘Xjµ„Cä–°>¡ IDAT®• 6EB9É%½Œœ½Œ¥VÙ2ˆè?¯ëu‡€éüµRpF£ŸÔ±©>´h€?Ëòt ×Áëqd¡…RÊÐ*MØä ¡æ^$‚ùn%ÇfC”—:e&¦ã\^M…H5uÿ¾°c‹ª/¡ôe,;Y›u,R$ƒ´­ž] ÅH“¢ó>j•*çÒ„Â>ÏIZóØ'㪌;×ÅÛ•a‰Ý=IÕk‚OS€GùÙïÿþïØ !¯oçø¸¿±Ù—@Œ@5"åg>Df>d¯ßW±w|üˆ½áD|Ô1¶ñ ´Lu=¡ÈÏh¹1áñM‰Àö<÷5ºø l¡È¸ùÐ~Ú,í5ˆõ»¾Ô\z´ÏZˆn¼€5ÜφsMÜÆ‚T`ÈIá8Ëõ@¯œ¬/ ÏŠNŠLãJgr¯¸7G6~µVAtû{xu®üÙW_zôi" #iBuçI„${ü‚GV÷“hßø€–ÝN-¥lfãÞˆåkxà†}… 5ü>ßÊÐï¾ûŽ[ À±<±´Ÿý±l¢õko¼e¹/,fZà«'¶4¼.Kß&¦½­î=VV6H7ðîÀdOšü8ÀüL{ûz$ ©¨þy_d _r†óElP¼o¡Âª½ØEû’§Þ ©“€Ñ>úèCظµ§'ï§42R—3„wWÀDæ¼`×É3“»Åd³kŸ"±Åù-_Ñ,ÚÇÒ~°ïuú·žóN*àØI‡’.ܼÚè.\" +s-4¹Ò´Šhªók6äí3 }Ó·nIUmªàŒ:g,_7ÎiþÖ›Ï}dÖz½ÀäY9r ¦0û®Äg|•KñC+\¼—~ŠËb…BxkdÂ…=jfp,n‡·„Ûfµ Ÿú‚×Ñ„µ‹fº> ÿùÇ ·õÙh|ÚdI‘ì"¶¯;<{Uêgló§W±Ê—¶³nÅÕ!ÏÄîöü^ÞGð>ÿàƒý@=Ñ|{̧S¥‘š9ÈNE(‘b]³g ²]‰-$'G‹Ö»W ø¢ýdœ! ÎÜ-Ê [M츫À§9f©ˆBˆ'a´áèÒ˜»·ßÈèRw~æ—‹xñ_ùò³ÒÐ+¯¿'ûyó=šÿÁȾÀ¼€É—ðE‡ûX(Ð-6ˆ…ÞRÜl›‘øæ7Ÿ½¶²Èç_¼ Tv+Y3_ã\¢.™hu´oQ ¤&ì)¿n7¨Æ•S~‹?õdÙƒ§M¹KæB¸Î¾NáÅU_ ±ÐÖ³ÂN?L)6–k•cô„/Mï7kñ7Ï÷ŠÀ'pòg|ÞQ×Ó-×19§Â£K=6T½å Vocr,.!˜l<3àéÝ6ˆÐ­ìÃDäë/|@¨M3H`F!f¾)nÓ/r´‰[ð^p8%RõІ.10°Ô)ÚãÄ`Ür$üιœ“z %š¼(áÞ>ÿÌOÜôÅmÇÀ½£’÷#ÓáÄݧɳ8[àêüÄ×Ô{£Bg±]¡_-é)ñ¿üâ3,öš‹Ýl ô¥’ó±ÍHÛ°ÏêÙkzˤÇçÎç“FWºýÎÕ[ßõÁH‰­‰=XÍ|ãÙw e<“æÙÖøP†-¿öö»ï꣥RË,Êžº¦’øÆ%—^I<ÅfñìðÈl^{ý¹Ö y65(þËðx|2SÐ×=jŠûfarÆó™e³vþh·ë¶ð¶YžlËxŒ­¯PCzÓËÑï÷}|œ¢tÓKžù»”Ë-Æ—Šù‘«xó™Ü  i;—0LK8|ª†¼Z‰œ¢`Pøä…íÙnŠm\-fã†-&^”Ý‚¥¢¾¹qÂòCPs±W@ÂíÌgõý¢¾!¢}îØ³T©^þB_‚´˜Á+Є{hëÛ›œ5t@RPßN|õwYáxxöû¿û;¨B„c ªŠ ûÕ ÒyÇÎko \WGE 3håuÂPÝ¡_¸²ÎÏ_Ò}Ö:Ö~'¦/7š³dŒí…Dúê®sóªuu0ðà½Ñ%/áF¦ jˆpmE¶•û¥cs~ŒT›æJ®[H®Þ=6¬¹5ܵ1¬â²Ê#ÙÏ›´ªcug¡§È×[À¨¦†zrãúdFlzÝèΛµBÑ™["wÞóà¬d&Ï@7 `'–v\V[Ô¹b] è&¬ÞQ=ÚdʱÜâ4ð¤Çà“ºÌ€)/åª'g§¡y &Žx!«ísâDkd¬:jÿ/Ð37I¹›Š}t…wÔRubÖŽ®‡†.ìÿéª ÀFˆPmÜVgS‘zÑ ¼'Í@5 ó²7ò–!¥íS»R1ê ‡Þ&lדM"uÅ–ÃZŸCÂTZÀÔg–z5!…ú–K÷ì¹ãÇ¥n-5Ęy§EÓöÉJôñŒ ô–Ã3>Q«×¾ø„þ3¢ûŠÚëmóóçâÝÇ&²o?ÿØH_¦ÒÏYW—ø2•¨‹Ü!¯«)Ç<]9;0঳¹Dç–òpô rJð/=¨ v<7™|ðׄ˜®[¥¨’ø9]³æÐbH7WNÃÓ§3ø±ÙHÒ'#7´R¨\c"¿©N@^“©N -ŠŒ¥_ܯe×$€/>²ûõë·¾÷°ÆEâ´írô“Ëߺµà'…0ºãò]œh^tiX•µ"þ#¡¡„9|niDÁø fÂÕ4!›¨À-~„ žéIäFÌ‘ª¯] I1@E:ÎØÎÁ†úÊóœ´7l}J÷"Ñ($7Ôý÷Ô(pžS²z­ƒ&¢‡ËÓÒ+º:vÜ ?`H2À\Eªâ9¶ƒT·;J÷u+3³-Kh~¬ÂYó:bN¢R9ïÝ…V7Îâ>A—«X' ÃH]!ñ§æÝB`Ǫ Î:I¤òkUf&óò¯€ä—µÄ.^<.,<gÂBEÊGâtr&Ó¹)shËY‘pVSœÙ ›Ú:8x!qHNp{õ ¨T·w!yRrâ¡(¦ª¡çíDmÁµ§X[êP£áÕ¼Á3ÖWÔ š­Ö_ä+:/ÿ¹´µáµ)R£@²ŒÓôö’U­`c¯ó"õÉ|²zMÈ« ¬†3ÄtÿWsÝÁP¢7Cõâd§|Òã€nјsÍŸ>£Xt_°‚ ã wÿñ˜2¬Ü¸ïI½£‹7Äeº5®ùé¬{%‚쉖[Yg¢#êÊ-<À[ÊÆÃÉxç…®E¡u"B·~‘0 jœ£µNá* ÍÊOD³à þì÷~ç· 0Z,ò>ê6'K‡Ð•iï;Oãµ0xMRš³Ÿ|,É ±dôØàÛì®ÄñxÎÕ¥/{§šWˆ2f©`§ R1Æ>o¦¥É©²8ô\çqÕ¥»µlŠo§Áú³Ï¬ö‰¸÷@0ï7e†9º Åì²|KÆ’ùWqU/àäpq®&eû®[4vL-¸˜p6ot>»c˜Â)LJé Ó¨>®?ö¹ìávÊ1 _ˆÎן,êSÎÐN´©wyww6³m$sœK\ùXbh0ƒf¹Õ=Ñå¾!-¡m+Ô_üä/ÿÜúÒ{?úõ'Å…Ýí?ô‰œzg^„Ù°óQç uÖ‘þ $®Õ&pš_9Â6+XÐÉ)“Uó#ôRöu2³“Wýa@¢òÓÞ ;=«Ç"Ý"¥^[õ˜G¡<1ÒÂdQvëÑJ«°¤쮳š¨ôrô´C O.y6Ö®÷¡xŒQÿ†;C¢uYk»Î%£Î1 I¬Ž=> ®¨\8Âô¶oÒsA;Tò,ñ¡•zsß§.7 sL±þ…ø¬Sè¸3k(dô­ëÒ_ê\ASœÀàƒ¢§.0Z1ýK°ééÕûƯ­Õ¨ïVß;`„êh›3ΜÌ:˜}ð«2&FKA¥£eÙ¥Ôœ€3éa†zm˜×ã_í¶nŠs„¨P"ç¡bBm¡r–@ÓEáÄ*èÒ鈞ÿÇjÃp¶>ÝžŒ‡s ¦ðŽiL"*»Õö2¨QÁ†­ÜP1v¢­$Ø2M¤¶”C–íc l ß .HTêY¯Øç3ˆCG_öŽHTtb¬¤ycú`ZUhi¼Q•ŠÝ¢.÷ùW®Ô@|£xÈ:¤ž‡”<ð0«©{:¬å¡E¨šy+“]%é T"HÊWƹJHÀhu·\*3¸J‡Ë˜ZütùWÒÎTT¹à‰4.K·ç@n½ý¶ç÷(} Ýø¬xýþ{ßó¡áÞ‚°Ì‹®90ò![ àqxÈH0\=þÀsAÿ}ÓŠ ”«ß ´IEÂTV²ã$ñ!“èî °q ½•#ågÅýt±'>·ÔÓHp~õ}"«sK<¥¿Í$ø”âPžàÛË–±áWªo4chœ°v$ðœAYWW©•¶¾Ÿ¤F+·ö<ñbý¶§ÀÓS¶oÍ,Ìñ.øZf¾A¥îw:|ÝÃ0O/ŠœfŠÞZ§IƒÛHLÖDx\‚öØ8 08®LœUSaÑN¹ÂØó9òxþä“|R«QæiàáÖ…ªšÿœ¼‡#Â…òÈ*4ñyé‹XHû’E\Â’ÁÁcz¢(ǼÃbŒÊ/¶¾@&Ôõ¿F¿ž¨ztœf¾ú¼O==‘«ñ¬ŠþÒfAÛéîÝžƒ IžØÀç‘•2ÄkX7º¥’|ŒÉ"“®‘O%̆9ø7|ÜÙó_¿ÂizQã5ï~úù—ï¼ýÞ6XÔA¤><ð½7¿Ûï®÷¹¯ÄƒDC|)@~gtW€Ãã`çž<Ž%2ãÊá7 4†¬9Ò‚ÍÏ7§ƒ˜¤‡(˜ 誑üå1$?k€Çˆ®ÑF¾ÜàÑ|:Þ>9£Ì²e%S§(•¨AÕÝé\=B¾póºžkû…)…—¾>øìÅ Ö-á,‚¥aü„j±K¥ í bh@˲Îg2RWäÖ9ÑGëÁ,Þâ%H¸‡Ccšh«‘z}JõI€9Ûá m¬°¹Ðºx4 ïL‹ÜVÛT¼¤„!©l÷‘NKšÀŒ%å·ß{WÁfeŠÅ œÞù_Ûã纤æ 1³.¹Vát[ṡÛ§|¨0{¨€é÷ìBjĺ ’É|yƒÜU6ÅËyÀ‡ýP!ae‡ÍìÍá £wÏiCòRÁ£õÔÊP_ô„$*óøŸWˆ·®áÄ$Ž'× %g–›òF¿ªD|Ëp/2±5ǶïøÿQq f…ï,†=²jâ.Ež®´½æ//çD¹‡îj¥Ï›;ª9SØpïñYåÒ±„ŸÄ›[4üâãZHô)}OfÄdz# aþÙ.£,à$¬ >þãòz2œšd4, ù5°·ê SÎ#k¹æWsegx®æÿåêΞI¸Ç= §^ø®~||B H 6ÉžÖ"ãÖu؇žºÞR —xœÿ5@›ÿÒ!ÍóLøÑ]ÞŒO–'ó̩СÅÒ¯¾ø 2æ<κ‚Ï«¶­?#,¥±WxÏeß´kçˆJnÛ±JBžý ØTô@ûiÔÔsµØúyç,…k¡v5ˆ´ŒZiÕäKn`f¦1p¬•gat¼6æÑC²¬Ì®€c{‚”kùq·>Øæ ‘àJ˜ôÊLST…p’é„1Yxª=_‘p •c[$»·šHb™&®5iæ?J$µ¨ç&¥$…D¶|6šƒ¥ªè©mà=¥u¹ø–åcl%­îhNÉ0™?x,BSÞ‰F”èošA*Š?PÞ€Åý¤a&vª:.ÿîÈÁ°HS£ŽxQ6/iàám;ؼë¶Ew~`tË d‘'éz³*JÛ€àêÖ¾¤V€JÎY£Ëh¾Žªø%Ç4®:Oã|÷›~ ¤±DÆg<¨0†U°£¯¸3UÖÙÚÅa>ú”¡¨á®=•úáqøþ½fGo´‘náÁ ÈaLäÃÛ¤ ËÔ¥„*ÌÞàGˆT˜è8ð!z:fEéÚšÅÙE3*ry¬œûÃ$ º®paËÛn’¦eãö# ¾Jj]ã™ÏL´Â*€µ‚eóm¿&žé<EA2’æn¥½ÅÛf`&/B%ø­}5aîµé<„mÒ))wŒOÁ)ŸÁ c:Š*,Ñ,FgŠëCºI½3˘'Ž¢¿{sýøâÑÕËçíW>ú”–ž={VÛ‰8™Þ Ýœ¨Ý4²g,…„Â0ÂQ¬³AÚÑ“e]òLφ˜\Ø 95 yU‡PÍ” F!0·)q;¶k¢æ6Æ•›´K«%úAN%Ó€Õhƒ‡† Q¾ü,˜†€éŠð̵fåà‰jaؤX•†j• S¹æÇFÛ/š|@"ÑÆÈ!­ YÓ×€IªØ 9R£”rÐQ ŒmID‹øÑUîS­íÑ«¥Å£ øi»‘?½)œ~ø•ÁÆí&|¢Ë¤ÃB±[óéPk˜gKºr…Z™áy€ˆ¹i¸Kèt£ÊÕëíæ¼söÉëfÇtJ@~€8Ù73‘b8Ï·ÝnŠDÏf8?Ršë´³D:¯þ¾¡"‹J?º•?f.s…Kux&ņSC@ô¦åkúXqY¡—áü:µ"‡„"ÕP9$RÆ¡Úm¿çÀkÍÄEKK› ES–aV0MÎŽ39˜ë1x$õø· ‘‡ÃÈáŠeGÙ.‰¹[f»èƗц£Ü›½~ùòñŹCh`ø•f8’—¸ª˜Šá}Föèü2õÎëŸíÿçö0°]ËczWgQ¢JJÀX-…¶ "ªàt6£5œîìÇæqReYá§Ý=qeXJ·ÑpoU 9Eà×^·ƒ,FÏ4ÅÒ¤~ Œp¼S؉™qfWÊ<<ãË­rÉöÃBZÞxkÓ›ž„}úì™ÛR1ʸ5ç ê=ñÛ} ¤¿vì±üêýÐcº¿ý9%A$›?˜¼QV,ÂVXj_uéÝÖ–®|CsÃ!в…¯ùîçÑ*N€!j;Î’~ƒ§Öi¶!Åls$Äq"KÛÙq"lʲ,ü¦—níy@Ušyï´´nx˜~µt{ÕƒO {2ΓݲŽüàgscl·ÒøšjÍQ>o¤Kd4T€:xï&´SÜ9Ú¥‘Ej‚&¿§!xÝBC\ ¶&·`ÊÇ”IàaÛH²À •¯°Ó->#wŠEJ„ ¡ràv¬0Ÿ¶@LO <3Ò·$aõÎlm( YC®²ÿtœ-]–8Œ—}¬â—¨B0 ® uR®˜îÒXá~™T»…˸ºê½¹õ@æÃýYÕ›°zwÓœÍ" “àç:„¶¬ò“›£C8×”›ÉHK7©E’` 5?ÅÝ } ¹œ+!©B&žkîÔo‚Nó[W·ƒ*4Ù«&2€‹¹³£¥mE:`ãÛ`Ž!€Yƒ÷¹œÌòž|neØDÑšææV6V˜µr×ÑIdæ|ÈòrYeP%´=ƒ{þ1¬ÏC¸SvœŽ ·æÃs] 嵺Õ„·È™‰ n¥-_5YžÝâÁ-<‹êì_þÝÿh ÚÓqP:…²s@#™µFrÙµIÀS=vAR§¯ØÔ«^ΊâØ<v­$Õœ¯sˆÃ TIâ‘…‚L<ÍÞŒüÒ’Á!xvÔóñ¢©[LÓ¤8Ü1¦^‘<8Ï0 í¡Móé:Ãÿ†Z˜•¯éq/æ4Q¹éSŸö R\Tìvö1ÉdœO‚ÕAªÅ”q_ÎK¶?nMaÆð‚bJœø2¢]Ú‡ÁN!¤zÒM}<EðpÎTøJRŒK§«é ­‡„æ‰ –}€Iêê ¸C»–PI‘&ðh{ð˜ø}I±Fá ²*Q~j0M\éV’Iºùµ`5n)&ÖŸ¹‰¨H$‰ÔÊ ÿÑT²U¬O´‰x«+ªr ÐIn% «Öôs"TMlL(jDóè‚­®eqå‘€wZu×FM¡êÑE¯†ö=Ý2•«AˆjVÔ)’Ê'²";öu“~œxÆ•^>¶-Wj™ÛQ‘§ ×ÉóÞ:‹JÖˆ5TF«WÍ5DŽ’4‘Ü®üʘiHàŸ1ò½O`€{P½ªʧ­^ÅÛßÜôÆ>ð‘Å^3öÍá×pÆP¸óc`4`=g«›`)!&Tk f†*ÀÀe$¨´¢*%C †"k6E v0’/b ]Þ59cᬸCF˜¬ácxHôBâh#kÎH³Šr]}Ž9²)|ŒÝ|jr8ùÍÐ*`£•NCoíÉ+wÕÜBßUyMçŠ4Ábu܉¼ªF-¦ 1lÀÈóÜ.X¾â3cãªð`ªA­äœ©ŸÈ¥Ñ=“¦«›«çÏ¿Õé…3G‚zRG±—ƒ{'?¦ ¡n„]\\š¼Ñ˜pÆ:HkëÜ«i £/K Ñîõv÷ÈKÊ ® Þ¬—µK›SHQûväl¡u¸³ˆüÓþÃeß–ëw /Ÿ<,àÔ !Ж€¢°¬‹™ IDATÈV¶8g}!ìúDˆæ‡fZ-ã•›i¾iISêRÊã“Ó³n^_µIÓÚ¦NkMôÄVEÆàÆc)匷hî–‘Æ‘Š5ÝNï`JߨXCðÅØöÐ3 ‰¤ƒµèLéòš ÇþÛ%åãì4¶Á fû‚­'Ü SÁÜ1AÉùØ¢­âw7N^¿ºúøð ï… WÀ4Gˆ€Ó#†Iç=‰éJH{f‘ž íw¤CÓÚÈ`µ=¿xd)… ü¦!À¬YQã¼÷`"n˜‰}åÀ¼€ ×ƒ/3?ý„bª6ÈéÝ»×8zXœÊ«š9$Ø»öHà„A‰š½rK“G£–â˜<ü,ŸÀ~ÈKGàÊîî³ 1Ìd·ÃFÈÿä¢ê®šÐƒœã¼ü€-B¤%šxœÉºÞê ZJdЕ¾#ôÄý˾~_q…ÓÑ]î0JÈÖ$‚ï2ª5×ZUS·ÃI;:i戇ø-ÖMÏ5*™´una”$úí’µ1ïA%A.A21Ÿª‹ÊÁèhÕ³Úá+dIh±ö[r<Ù,.¸ëö‹±K¶²Îoâ5D›­¡ÝÒÐýϸò”Ðs/壃¢+¬æ¢Zñ?·Ú*Hš÷ÂÃK 8¤y—5*aÛ7ÆLU˜Õ¨Ù:3#vuj‚ äJ:Ѳ \¡Úm‚¨LÆ'„a-â H5eP û¸€¹<½€;ך|ìÃ4÷…ôÕ‰¯6Ð!VÝŽhIš}Ç‘´€¼vÍèêq` Õ÷rÒžä³=N€ˆ”˜³˜–X€§Ü<ëT+©Z­é¶ dð{3 rKU®Ëàµû´žåÄ>y'ÆÃ(ÐÄ5Ì¿üùÿÌG1‹š%¶}å<Êù£—¯^‰Ä‘˜Ý¶[t‹E8á †Ëö®r‹ö'SǼFZÔhÙ/Y2¤S½Ö-vYˆU8z¢C Ù¾“A“ólÞ¯i¾òë  ÊéÅ.½sÇâ Ö#‰BóãH#?­úÓa0‰Ô×ÐÓ(â¤#›™Z4O¯#loŽ ¡!˜<Èö9+Cßû¦FQqÄáŽ0;ªuçÑå9¡ÿ….ݼXDJ®Ö×G¶gªôèÓ㺰ç^éÍ™Jß9˜êÅ]t{„Ôib´î8.C(¤·çœ_ø­ f½ãà§×À•Þòh.52Š…E°Ž¹çGiúÊßw®o®}‡wz—`Jä:*qF¥™Q‰m›bj6ÞšÑßwü™†÷q3p£#ÉûöÆ~ŒÝ “=öãåã'=Y™‡Â6h}âe$Ð&ÐÔ7òOjguìÍÖË]ó-Ã3…ø$#RKšñ ÈÙoI|÷ôò±/xB͵|DÇv‚ž<¾´ÙEÉþô€Ç~Ë^“EªM©‹Ë7×MIë>4ÙájƒÜƒÏ~üSÝÁG‰Ìå=ýqzÀ‹è…ëw$ÙSÅK]׃ÏËs‚LµÉF«þõªíB¹7JÎÖàôJÀ™u>e"lQw³È­š_½Çƒ¥Þ·œC6v¶¢-h‰bÎô4—çRÓ &R˜:³¸ÈU+Ħ—Q¦§´E ÐfR7o;FÆ=vǺŒ}25žÏL÷)˜Ö|"”,‘š‰Ë&¬ðÝ‚çñù#G ŸóõOòÓÿûßcüŸýÍß`•kÃyôóó»ÆìKi=³hwAp,¬Í€ÂÌ_Í‘lŠ÷µ0Fg#›\MôÐŒªëËåQ)·XS|k¦É¤¬KP¦çíÔ î¶ê c¾ CÎdN=ß!ßæºæ ué>þ÷Гà XíDR#çWf#^dâÆp­ÄHÆZ5é³³&Áa~:3Uzˆ @‹gozôÜS§ Äz9/ëà1¯´…9³n‚G±Ñˆ„Þðô™±ôš‡Þi¥1ÞÞÇ ;±oÆ?Ígš Œ& áÆˆkÈat«—“†¼lÊCÈe®Ãÿ©Âq(ƒCÎ3 B©þ>Q½@­Už0Ã6‘9mÎ8.$Ž8äQÿ‘^-=ÄRßõ3²ÖWÞ[Á¡2(‚‘ÐÉMÌÐÛX|÷ìÙSm?=Í@°ÅöC#w‚͇ÍzÉ­/3‡ØÅ¥Y“ ÊN$³…Ÿª$}ìe(«ñ†Ü0uÀüI—·çà­s õøâae‘·´¨ ¦jÀÖ®PÙ禫5.C{¡„°°¥¿‚+uô'ެ>ó•TK.8uŒ:òLÜ’‚ŽY„ƒE!‚&ƒ‘Ǫ €±Ø5ȱ`±…aÓxòÁ¹0< ›î·Ô|õúùô8'‰q6îqvf"A‡Ëyvà<¥1—§4~>¤¤Û[ÕíèžèÎd‘¸Ú8†[‰€ì2îtÇ'CM [æWŽ/‹HŽyù|fÏmš)ºké‚ûÚ’šÿÐŽ¼+yÖëä§+ù—-ÒíX­™¹ª%--Øú^Êì§o ô¤À*´€ù-ê¯_½Ò¤QøW¿ü…Z2Ö}yج·¶Ú\l¦±®ž£âÖŸþ=£aqhÔ8!ÚA½JØÅ„CµüR@b~‡¾f¢“T´RB”¿HÚiå¶]–ÙèC¯ )w÷Q4lJ7i:@ÅßÂos26“\rBb­„úæQQŒ(6‡!±Í„ >5Ï®³²G7ÍuzžÅD}ÿGlèòW*‚O€otC´°ÒK,èNßN0ì¹U«¤._4i_jf{ë€B*pøÆ/±·´¤°;jÎ#§Ö0…Å•ºŒ°þuËs\WRÔØ |hÇ"µ™Vø_Ë óŒ¸e‹¢ y6_) „DZ) XñfZÀ'ÙüaB™7ŰåÉ%¢Ç •}8 L¼jUA¥ò¨ãixÑ€s¥“ÏBlô®I¤ Zô£¯âM€•µ`k£×È÷Ч•ˆ¼sÐM¥;›HÏ–Ð2`D¡ID2Y‰0i2ŠMì<[|tsÓ/Ë"ªEóBQIÂùmÀѤA¶Øo„»6“ƒ$ðs%oÑúÓwŸçû´-¡ ’“O¼È@†eñ¬°m›ã€Ë.òRK쬠mão~_˜@‹uiªC”1SÜø¼Ö« / ÷(Çti[1XŒn÷?„$†sx]^$:| k2xÛGë„ à•ç‡8Z›V4a„¤¤O:˜/_²ø‚AKÉÚ5Yé‹ÏǦW‘+¿w}Eñ/Lg~ôÙ§¼àúýÝ¿úÉO|ñÈo]Öa»tÓî ~KIÔ„¨e·«íâ&`³‡ÁpH1f¬ã©ù²øÄŒ*¼1´Bœ¸â6@Bš8›´Á8®X9o±@èæ9ík~=çÛ6ÎhõÛN&OO S ˆæ‡ëul‘–0‘ñvW¸ vìÁ¶F&Áã*”*dz<`MtÖÀ' ’ñœ‰?ÑÑåD·áD/…dp6Qo¤lBP‚\!äFzWV 8xŽûZž0Ûs±ucÈa^x®˜ 'mÁ6ÓO:÷Ö}³‘¡ ŸÀVŸÃjÏ%µÅ!Áñ³ø±*¿ò[xË LÞ¿§4&îmj‹½³_þêzŒ¹ƒ«"^mˆG{R'F‹äªL”pÊFG,j \ðÒ®í¸"0[–&)Úd z"¹'{@?·Ù·Ã¬–5‘wEHí:+e´"¤y]ÞÙD>šJ$¨°Áv¿`k9æ@V³ôh–÷›[ôƒÄ(Nì£ò*DãG}­Jú!Û(¶=ÛF‚ˆŽ¶õŒùFVÀi¶=•Áß6C:j㇛¥Õ‡Œfô6O •Ã9Ò•áÓ³ù”ï4% …lj½unýj5„¸v«Ù- ¦‘8^‰ÒÎ$*ò¯š…„G ·–q nI›A˜»è¶ú±.jÜú€ŒÉ½‘k<ìÂAHªÊ¼)h_’à#‹™·5÷§¦ÚQ˜q……Dé?ûc®rî•Ð.—C.ü´Þ„_ˆ‹+»bLÉ, ÍRò¼•Æ)ƨ1s6ðÄYˆãNÃÛ˜s^yƒÚfÉ$R×»ùn³ õºÎ¬í€ÐLšÂMÖš!]5Â|mËIÔíä·\+)A¬mƒ:”î–7Zäu+WÞ«9_Ÿk2†˜I[Oˆ"9K‘’áÜ_ª|z¥s f½zAF×Ç{9!ñFÓÑ›ŸQ$ý¤Á11#P „ç–õÃ< oZ¹"1Ö§ñJÆ1qŒŽ Ãn§|[Û3|2®ä"’°Ð…zâ1‰DœDU3¿³;ïÞÜ|óåŸ^|ûÕG_·¿øL¡ E(ë¢:ÝñAÏ h‰ø×ŸÉ6Xz'z,ŒXÎ…2˜J…VË_RÄNëxªl6äZC‡3üSÀÛÈ †ìzDóÎúúìI€À†r¬tèÊ›uÝö\·è På»=™ê陲e{‘¸%ŽM …™vV˪ G ¹Öp"¦øc¸MGä̸st?Ó°|À3#‡Ì’ÛBv:ÜÇßüæ7†±ÿøÇcµYqE´¯Ü­t$¥:\A¸ÈÕò‰%ŠUZIÃsVˆÖ¶‚þs•V(ð4‘6g“‡\|ë€[²Th(¯p`Ž¡Ü-C,ÃK ɂлJÛcjÁÈ`@!K-àI«Ùwñr¨+\$2JP××£x?ÑÑÉ$÷E“£‹AÃ1?[$58%x†æM¥ü;Ê@A.À`Ô®¤€ä"“¨”˜£›´ ÿ–˸…m9\3*q+Á&©5߯°ø#ž€EK- ¨˜â¸J³É¡ BQT»tÇHc1üz Bþñ!"(FÉÓ¶îƒ[UºŒ˜å×ßÜ.i0¼ËµÈ~{ƒøyàŠµ¼a[É^é!)\E¼Þrw,«‹V4Ëx`£«:  $j¹ª’€ yÀQ2g†ƒi¥-xßéŸWq*ðÌ·ø¶½[ŒÂµ²­ÒÝjI~dövÅ·ÛgÜn„§ …Õ2U‹?ñ´%Ì¢«Ií žÉ`QI+î-´¬¢˜.0f_al-0s³Å …loÜóò=æ"773 ÍÏ…ž—Ï‘R¡X­÷8,‚œ×ñDKÈ+œI^ìðf‰¡¶Åê¸WC§‡¯€óMºÖßâ¹éÒ9qÃÛaéFÊ‘k=&VfÆ–õ·“R‘3‘~º$#6æÑ‰+lëëy®LwªÂ§'µ&ýÒc4çU<ǹ.éxôÑ£XŒ=si—žœÕk"q}½ŸhR´À¤¼m ÏÄý3{aæ|öÿ¨bŠSÈ/&m µ (T%þ =0–rvømP½÷ýA²ð>U ï FêöÔd±Á "ΓõÀµIì¾ãÃ÷{¤€×Ù¯Ú‰†œ¤glYÖ6[j§1U´»·ÊhèJ´‹Ë¦•O˜³ò46’ñ×̇¦¢ŽÃ€ùöƒ;G+µ}{КÃC†w¾†€»üÙñ‘«×Ë’[0&pžØ*…Íþ¿*K;¹áᤖ2œsðëø6D7Ý뙵ÇU¼Õžt'ð0†Ï€ ¾t–-døçݽºéc ™îÙ™ñíNdú—®°´z–§F·k—Äa¦YL//ž+DNR~¹eœ"ÃÊ«ë×£´Ü[IHö@î|±~J¸zÝò”{¼¹¶Fêïï¯ýlèÍÇ^4ó0Ë”^‡EáüòoÇh…k„[klT™ý OUÌšø¬îbÀæ?œ¸Ôgl-"(3‡…«¥¡¼žË¸I§œV“«ØØÌ@Z‰` ç'Ÿ|jö¾£‹‰2À=›È!'õ|îX+ CÅ'g1í LF¢PËU`p‹–©j:— <ÃKúÔØÄæPÅÙð¶–ºk¨¦yNÔÊïg-S.hEâgý×ñ<‘™ù¨‡Û6)Ã’ÿžg7cVªÀåÕŠ3Vå «0Pao«¿&HWlÕ¥óÊ«IZ ‹ø¹“:FÏ3zpEN *ª8’¼ ëp0™i—r¶<þ'~B"P²šI`ÕéÜênãÛa8†ˆ¨póúˆà6Oò,¯2ÊIŽ|Ášª‡B¶“¯h8ÇŠSuèM~¼³2k0Ϥec`ÊÀɰg<¤S²Ì“š¹5‡–绂_„ò2®téŠ ÈÌ7kÂÊW|Lʤ£³³çÏŸ+‡Í,j¸mžÙÐí#dÂãX%®_Gþøñ믿F7–¿HØu¼i]P¡mlaØØ?Æð,Tˆ(êfoKqú—W4uïB E½ûÅ..iÒŠ¸&T´±ºìØ-T†ȹþõ\ðë®ÊW9®ÊaX6´ÚtË¿—@.˜ ˆHµÐ+Uäç` à5¤ y?ß³9t~ÑDZVTÙé#Ÿ b0×%›j¹ôëÅL¢•zµÑ$-/$î‰ †*±;)oYæ„lì) 3&§;ôÄóCNe—pž¼Jô”æ*󉳦٠kí‚pPºk«,¦Ôë0éTÓ´d¸çèÍ4Fuˆ*×¶~î›q°¦V¨hŽ[|êŒ óp:3ØwˆZ̓ãO {mÔOä°i[8T\%»†Žåd®õ‡M14,¹)ïŠMÂ1P!ÇMÇ!ewG$8œ œŠ•é-€èH~¨OXÍ(÷ULT¦ª+Z`˜BádŽŽM$U¹Ü˜ ÜnÓ ]ånÓ¾f“À-6èmØè4"…™J0&Mñ›Z8¨{~á–±Ì&ˆaÓ„ÝB˜Æ¼µé!ÂFEyœ*oh-ß,¥“4¨o3ïâüB°À ÁWç¶çЕhe´šMe$N;^móüÚ ×Æm”V|<§I­ ¾ßúŒ¼*ž±v^p†“œ F zNöòÅsòëyQ$úr‹'°I‰5&`Üa'å‹Ù¶T]¬³×¹bú™L£KĶÐç— ìšq­4¶LÀ½?Ã{ºT:Ûˆ(®òÉ0t‹¡N _‘‡J_ÊuKʱ O8D7nyÐìïvGê(¬Z\zã!…Õêó×ïþê§?ceу*ìüäÉÎ×?èm{âX£Œ9v2<PçYü.K(áØ¬cxðÚ€`^föÔ¿ïVx€DCÝ{ØÜ P ‚VªæÇ-8Wææ/.U™¿öuг{/y“Sƒõ7êe »-“ 6M5`Yë{ÓqB‡ ]ùùÈËHGÕ,€p±MÂ6‰ÁìŽÌò¯Ð¤˜ƒøy­j™za;‹ŒÅ€¡Ÿ ª`Þ ´tËRnAªb,è—ºB¼¹]]¥}þË…cf™ lÝ£òy…⇠º•À瘟5XÓ€ ­Š¬#¿øO~#:ÍØ®*dPW^r+¹%”[_ý —C~ò¢Hiq‚YH·‹J• Ê'Å%ÆŸxÞ×­0Ñðq,~ŠtµxdÀC3þiçr>laÒ"ç囉Æô‰–E¹¯î?äây9Y­…~ºíTñ:mD TT¡°¤#q… 0~Žp±BÁ#)ãº$öê–{@ŦfEê™XQòÉ'ŸXWÓ­Lœ*c@%è3‡#®£ž$¸±*H€§TÌØ}úô™[µBñ_þòG‰ dâ(C…¥Üö['£AÛ[Îq¥ <Ï Æ( hå.³þϾbž  £•C,õiÅ€ÜIEÇÀ„´RïF­ájýn]Q9Tl¥ãRTÌLX²Òx8ûå_èª Ä&™W¢9‡R3!¥¸.‰ÊÙ û¾7ªÆ9péL]ºOÞw¾¤èÙÔE?o>„›™½›Ò’šÞ ¶˜€dŸ@GotîF!n•«í.ÿi£A?õ©0®JšDN{Úžýë_ýr!öJ*3Ju(hH[¯òèx »J·Ã·§¤æ¶hZަ·³b泎ôž34Î8öû¨¹Ê‹›Ÿ§°Ü[HKú.…W<¸ÕÀ•ê`[ÖŒ`t4>WG’FæC‰ÐÍË/£«†X~Mæõuö“ál ð§¶žÒ!˜é;ä>›Ù/¥§Šé¥dãæ‡}Îp<ÁWeLž~3¼ÓÛ£ÃéŒÅ¬©ƒæBÔëÝ7¿‡º½ˆ“e9œ4©¢ÕBaS@¿ÙÔ§ ë>£J¨QˆKÌÐÂæö$¨bø9¬¾=q€ÆÒpÜñåtb/•«Y7ÀFËŒZ`L 9¥ ?†]À×àü‘¹ (?vãgYá™'J°Á]w]e†hÎc¶$j†ZL¤aru?ºóÔ’ãe9¹öþÕúvK(¥îy»3‹&ÓÅ–Ã;w^|û ÿ'OŸépf©N˾Aé9UcŽ“é¡óDÌë®éÄæ\“cÌ:Tïxbl–Ð «"#9PH–û=ƒ.ÀÖ>úìѶâ0Ï'ád\Ô„bG›ä"BôSuQ°m"£Öë œ2Ú|R%+áNÞôÁƒ(û™(¤"¡œ:4ö†—ù‹Èô¿þõ½‡ç?ýÙ* «ÃíÌt‡ ¤“À[B¢r.„}kO…CS ÆU2¦ æÉç6Ò²au¥Ü­¶J4‘q‹“Ûy•r%ÚÒP”ß’Ñð1ÄlC­R—}/%oLŽã ÿ špJ‹S†¤ÆÉG˪ö#¦VrøáPü¶éÚP§ü"«®°‘žUšVC„ÒdDç'êYÓÏZ¨l•rb.¼˜ ˜—ÎÚ’*dÿ  0 IDATÜBºÓð Rs¨” jÊñøÛo¿5‡9HŠ™ áT :ë!z4|æ“OŸ³`ƒ.´^äÖiÛ«kþÇÿ!Yý H!„€Ê,ÎU'Ú $KNf™q:l®n‘¡ÑR¹1<àm0wkg¼ýÓ¿Û}ŽéǺǺ‚‡\‡ðŒiÊ£¥g¨’o qêT(°宛‰1lü›¿ÿ{£—Ú¡X]ƒ> &jà~iè`õ¼qX&v÷ª³Cw¼Ç49 NHa(Ô7Æ•pˆ¢Èë^ÛÓ¸¤®x WGn °ÃÕl³u¨=”ãÓqTöp;s›Ãöð¼~}¥#- p»õ5Šãc¶4eêlàK@`H2Ô³Ÿn‡cLÛ¼^ <–ãï>Xôθ]S Ž5[‡ Éx_Tî#–wf³©òÌJ”œ ÿÂlƒ4¡(HmZ3Ã<`±¡Ö­}~¡rÕ…=­˜f´ÑŸu 1ˆ,M=òZ-Ýà/¦@¨¡+­°1p~™Š RŽ ùx­»×™ñ/»åCÖT­4ÏBD·Ó ÀÓ†íõÛ#.æ!²­é«J£9­¶2nìZa7±¦µ(œ±˜Ã´X+ Ñ«»é3û¥®ìH40¦äiÅÄ>Ø6ÇŒ®®ý –hhÙ@’ŠåÞM°¦“cÇ&™+êüð¼¹¹àD žhy½c¿x£Šì¶ÐqâyžÛÔŠ³s‚%VTQ¯BI¦¹Ë£¾g1Hz;•r5™óKÏóX˜=xÔë¸ùž5C‹xmÇÐ=Ñ›Î%Lçòª¨z=GFá¸Ê(`öQR欰I^ÅúÞ¤¾m;aËU°¦p0àÍœ¨ÑÞ¡­(üW ¥Ÿ‹¸ö£Ï?ûòË?õÍ‹ñ·ë%ÏW­¡Ó`²ð6yL²ÿ=»mº“º¼ÔkQr”…<å#PßëáÞLÜ2ØxÚÔ%èpš×q"Ê!zq¬Á†tk÷y;µo²?H×%ºÚPEQ:È>ž`Ü¥H@2ÎAJHÖZÕØ¥[T–:ü 9¸[øµ"‹<×(˜õÈ¦Ž r{ö+T U¡5ͽHïÕ×p®Æ¹.}îÀ)£•&r¾€«º|OWÈáò[ö0ïKZ­’aÆ?Ñ]l`d\7°U2n•»ê• QJüƒOàLŠ»&¸}£wÖHx˜Ô’Þ0S³™(,šh¸„\·‹- 0˜Q)Oy⃗w3¶d ×=µ:ÂS.S¼vb UÃà^+$4Ä-T9‹h˜¸A ò‚• "ƒÚX9?AŸøäƒš+ÇÛÞ’T+ÿs?ßP¾˜¸Ý—óæTñZjeÁ†Õùx ‚ ¼x0,NÆEå7‘3cÏÂD‹OÝZÈDœÁÆ]sø'Ož1H‰–ÏØôvyÏ hO“bï×_Åi_½xI{~ÅÒf•ÙfˆIQ®K´'ã–!¿Uä¥5nÚ¤¢Ž¿wŽ+Šå#cy˜t „:Ȩ‡Äíca¥ÐœUä×X ¡•“uÃB¨+ü®|¿ÅMlÃò‰B·À9¶Ýž}ñ«/ Lŵfšêˆ T3-X`xè ¿³¬æ—X¥¸¢Ã¼G3òº%0q2(ýú‚QçÆjU–¥&nÏWH‚!W²Dý FÛHŠ:¨Ü4vœß"i¦Å¡ŽÁ„D³Õ#ä´u] WY_î—+ UÞâ1ÿ£«NhN²‰³r½'ùŽ—=ÿyšÞL´¹¾öýÌÀÌÙ›ý´_`¦È½î= 7 °`½…ˆk-=×óv2áx¦Ý”†“Õø„'BdÔ¦g>æ'T­rÍLÒ¼³0ŽMX])J;{W(#Æê¢ž±^‹¢jl­–Zf»yX @-†AÃLP7–“ŽÇ#Iås–ÙºÇ{my;†Cb(géù)(} ?®˜™½´1T¾ÛöòzȽÞ0aC(нá•q;kf,'/ÿN/EŒlnâŠFy Ñè!ûÆŒ„Méøšm¤Ùò/Û¹K([÷Ž4di2°çsîFR#GÙ1âhçÇ~}ÅÓx_ð‰óõÔã7›Ì­x6“)øo™Á´@¨ÕœShÚNzï5Ò>ïä\u/GàËÖÛ‡Þ¾cnùî½Ó¥Wž=ŠWyá‡ÌMÈí|ø’VûU«&šæK:X¶³ã>àîô:öÄ”ç÷Ý\ÝÀO]É—·|2Ô¾—Æ-Åí±íAd‡@÷«oÃ}GÈa7èèMíꙜëq¦[x#'«E3mòQ¢EyjΠeØËLÆèGC¢êì¨+p"­—®Ïg­¶ÊV¯¸žß?òà®snã9Ídt‡æã¨ˆ-DÈ,}¾Âw´®_ûþŸ\|úŸÿ—ÿõÍ›>)Ä75ѽFV#CnB¤àzÓÛ{š^nhîcùQ­ H¿þí -]ÍEàz:Ò龨‚_g‹ìºÖG؆¢Ž6ºþˆñœ*}j$4¡%BÎlÇŒªh‚ú裑 ݲïàṃ¼‰¯®Z?nN c߯ÈJ¥žxz)[}?0ʱ51«³¾=«¤ÍÈ”ñkwÍߨ³d¦Ä²˜ÐžtQ7–²¡ N4ˆÜLG‹!f3¡ŸueO0¦©'ŠttÄL—‰ÙÈߨZTmŽê\£Aþö¸Šï¤r—[ñ1¼£Ò˜KE\Ýõð$“ôDá‰Kô2[W}ÓX¡}xuõбh»)&ë¼»ñ–ØL‰< 9÷Q“]þæ›oféèƒÀ¾,j>zýÙgŸø˜ÛG}À¹®°ý—¿üÙø‘-ÍÙòÍÛFA¿4ev{Ç“„^aŸKœ>˜h”ÀŠtN^Hdp¤u© Y³”*¢5¬Ï¼åˆfèÚqëËzý=¿RcñS§xÏßÞ9üšEèÓø"Þƒ~ØgU k d†ª'ãàb…þÑ=A¥TOÜ^—ÎùÅ/èlƒ÷tø#b8š–ãê-,¦76R:Æ^ÿŸÉ 8öç=®~‚Q'vå3òiÙÁYq?ÝA\á9ñt™šNŽ4š œÈÇú ]À#ÅŠî HmÃ?a[°0xÐeo0é+œmÚqùq»&˺Æm¶óWRxZÎìÐT¬‹WíâΦB=Y²‚ÔÀ¤át¡´Êw&©r+»<'(ÂuªqŸdU7$çG˜˜Ãm.ò’kb-0H`æãÇm<ëˬñXE™Ñêü¤h› ávK1ÃqIE'‚.멲 ¤Es£R±|ãOY!^Ú$ê»äU¦œ›,Ú¢ðœ p–?  Ì„4ù›%k¢J¹Äp‚©BVP¿­øtLŠ;<i’ šk蕞=­fni½áX³™äc3:̃Tˆ½œ¸¶ é›ð1Óìo’rAN0†S±ÛeƒÙ¶ùP«J¹S¼8› ÅqïŒÖ×ÿN=?Ä!…†4´[œ£ äy© ºJÔr×Ó:8¯ßöý¯¼'2h3ª¥³~ÈÿŒÙ­°ØÇÉÖ"F#Ï»w—çV¥<ºøÐ~Š\ónЬ¿‘)¡r!—µÁXÁ]í[B4pâÓÕ\“ǪÓ´Ø`HÆÙ þÆKEÅSÄ 0:¦¹Ñƒ>ã2Íg£Ôœ»àN¾‡Ê¡Jy{smø{ñü›G—Ÿ|þãŸÐç|ú¤EÓd½@3II1zœÓ,i[¿ÊiþÉù ø§dš@F§ÇdñÙ*¹}¦>ò¢{êG0"µ’, óÇŽÝDæ"€Ñ]ÊY÷¿­F½5GQs`Ð.˜[Õ•Z­š¿†‹–Ð _3ÇûêâÖÍ]$À«y׉$yÈßê6³¶ÌÃÍ„¨EE»e bÔ—mM¢{fÃ",äÙ?ÐE÷ÉÀ0úKFI‰ GÛ åÀ WÙÛÕÍ@*A]²inÚ]«d;o]&•â–ŠÖ‚¤FåD“ßrœàa¨uØw§g…®yýäoõŸŽ›ÄXåa„éãFŠûO:c´_HO'ýán¦È–‘N|É!ÎÆH¾IÀQì/<¼xbUÅ·>z¢Ã›^\|êít‡V²¯]}´9iúNª …[Z㺊É«k3DŠÐµý,}]ŸÛPgʇç5™mëVž) <ÄŸ> Ū]0üP¦+]éyñÅ8‘DªÔn:Õ(,jå'µ8×j=ÖüNDöl;Š~õÕWæ%ªººÅ ,Xç4ÙØÎ F[€4#ÌÈ›&(¼¿qK"s «ÇOž}’N¦`r´:5íŽñ®ñQ ‰nÇæMÙt•°úq%©ë9yE‘Á5Bñú6æ“ù”btÖ·Ø£˜ l)ÔÔÇÆü(±U…Ó'nu¾™–uzf‘*„ Ë®‹bIŽŸ·ž©Dí–ƒY`¤”»ÝveŽ.MžÑoôNY?Ä,¯ª’%Íw©šZï?šSDÂIË,8G6}7§UbsÛî`kçytÕÇT¨H°é“Àü`Š”Œw€J$½|3Üsi™&*™ ùºßp›N^~ûܧGÉn°Ï"äyiv?¥åÓ±-IS<°Áüð¬ ×UB§°îëj©‚ìþ ÿÍu-¶fN¼D¨xƒÊP)+ƒ 1A‚¡ôyX¼Lâóx(ȯ¿™@ÌzCŒ`)ZW.‚Á·bA¬×ÿúêFO†'ãf›•î¾ýÐ)™M뺨KOž<õ ôÚEC Ÿ–ËÞ– ÛŤ&€g™”Z]jˆ´¡JnÞ\ã¶öì49àgÑ5RP`¿®ÀWÜúWõS|òÉÓ>£¯gU/_>7ñrN‹úìÛç\Úxº˜a0|B4mýPïL–(ÝZÃ:«è¿n‰È=Lú)*bÀ2À‘ùèT.Üd̬ð£Y¹×Ñ2C)'•ŽêtèR -Á0 8^Ù’™ºàZkwð”‚W2-ó®Ê±·ñ ‘ð¸%…¶[NÝnå%M$U¨»å2h‰o[5\%ˈ°0Xmù~[¹Jp‚YꪖÜÂÈoŠ éTdšQô–†ÉÍLTH-JOð´Q+ L»µÔŠ É„‚œJ‰$ÃX{°dùƆú^8 r\ѵÌA~È¥‡ÓPMöu€{=èàEÛ2‡jr6iU‡Vï{¨Â¥R‹þõù§Ÿ^¿x¥¿;ƒj³Ão4›øûè½¾^ìš= cjµLù»E<ÂÞ&µYp–¯ ó&ú:N<ð9©̦Ôc›ºÜ;gUË71Z¿´@JBÛ:‡ø›w½U#ü¸Z1‘nÚÛ¸û˜ÛÔ±ß<ðèÌÒsuø{úÑ Ì«ýv²íªÍyÊŽøÜfæLÚZ⼆ºp ?ö……éˆïŸ>ýfÌÛ Àí»÷™²Éø&=ÑŽ[x$ðÃ´ç ‡8}œ²e ¢“ÌɧŠ:~‹ÏÁ¶ºKV‰²hVnô ç€QÁêB²¯Z–rUîJ"{£Jçu«¡¡k·ÿëÿòoT;ô£ZKm¤5ù¢Æ tœJ'ÐFÞõ`a@6¥faÀ>lngÉX°Ã4+6æ¿Û 0ó`hq6w¯Z~ùçè~òBÐ6N²á #‘X0qLÐXUÛÄç¾M}YP¡„®éÔNÝÆqJM„Ͱ±2Vq\‡Ý¢kÿk †0I2S˜_ÂïVR3üñ}×É+6ÔÃéÏc_ÔwÞ ¡ÒÖÕ­4,u»8‡ÛÊWŸ2€UYfø— o B®jŘä•RDª`k `°JÉô”¼VcgJìaD¦yA‰áA£(æF™žfž٘¥/<íÜ!Ê\ƒ‰‰è!‘zG"8åù‰ÄÝ‚ä*«m]qo) °|\9ßÐÒz'Í Rˆ¸*ãolšÒ.#»Ú ·æã!#¸Õnï0öZ_›9@3ž™×ÆÏLÞ—P8'Á¯ª4Çeü ̇¶ñ¨AŸ gÅ©XC? 3Ü®sZ °ÌÂ}ÓÂržz ˆOЇÖT’#)ZPO[ÆÆ^ÉžûvM'ú ÿàÅö NBfÞ"‚>ü9`‰½O}V+†¡Pâ¯Õ¶J›ÕOzÇè¼~È^$U¾†[éØT‰+ÌÄVHLŒ¥;ÃEÇÅZt±»qjùP ½å;ÕcwÏ#Û÷"À³O~üìÓO=qØ¥Ù&£Íêh=OÖ°çJ³¼GAš(r°8txèô90ü…£'ÅØ´¤µ¾7dζŸÃUØÁ¯¶æ¤¶J@KR·2£Ÿ«ÒT¶ yøyqàÀZmC M’¥iAÏ+É’øðD²ÞÑР’YâsÞá:Ó/EW€Ô€I+Uj?v¾ZDÁ'.ˆ-Eòúu=¬ÖùÏ„…Üx[ *àÆSUVí¦aÌm_*‡-ŸX‡+~UȃÔJ~"Mð4dê 3t!(¦>âO^¤%/ÅÓÕò*në žÙF̆C`‰1/{ß*9l£©ÂYÀœ a/û*·´«Ìä5 ‘ßÇãc!nƧß_;m}çìá% |÷îÚv~>—½6ÐeÍ„·ÑZ~ ³$b†7Îë„»[ìvlJ›…Að€)ARN ©œDSž)%U…ÍÞjÉy”¨•A\àSèV[%Aõõ„eCIÆýhSRîbƒÃ÷Šm8d‡Ý=3 §]+üæ7¿þÑ>Ç¡Çn8õ²„“WL&v±B¸æëÿ0èûš˜^‘mØŒÙ\9×Ï-n9WO$ˆ9¼`»Á, wR±‚(Yn•+ñäƒ d”k‚bDu«Ñ  ð›T­° 5Xý¸ª¥cÔÉ:X·xX[Ì"Ý#BEÛáUÄÀ`THDå*Òµ©Xð63Ày–EyC5ûmìÅÌ0Ô"¯Ê-£ƒÊFà^4ÛÑt¹q• ˜4B‰ÒjëC"ñíÃÕµ[„$ÀÔ±zYÂØâ>ê#B.ŽOÝfð÷HxlãƒX…ýH8\Õ@Þ²©ÑÚgûï÷ÜÊSð&ŽŽ ö…Â`Dñç ‚Õñ•âšr··Ò~O+ŽNGAáY6hX)Làãù´sëVC0h-ŸD6md©õæ)ìK ŸiQoÀæ²!`hÜÆÀ”°"6jçªq9C”HXÚ}ΨOÇ@…“wÊ`35ï³õÉ"„§qEÌ©&`Ĥa·Hï÷ dÀ‡¼Ü-]ʯ™B5|ÊxÄ£_!„.AðŽ[,É©I‹1ìŠô= wØ9Gñj(×UÅaľ1‹O<w&:ƒA6WI«%4ñHä×uÑL™Va¶IcE;ØÇ¾à0~ Ù¶ ë¤æöÊ™LóU Ì2d0y#ÕwPï—%³œ€,'X6ð@BuÜEc¶æÚ ,Ç>Þ9È—+×%Šœæn‰é †’‚ʬ¾êbUÕ¹+\YpƒkHÖ!a^%,6yÔ{¤7úÔp:M“†ø@w§­ÊOäkæ¦/¦™*M]¿ö ááÕõû'Ï>¥PÔMülއ2ã£ÿ‚ &%y<@e¤ÓJ<%…¤CT5}òæ\Ws20ŒÒoíoÏqSÏÔ[«´mŸ¸€¼rJXB´äq!Y*Q;RçN»5`›, „T"Þ²—¥‰‡ºsSÿFÁؤ EaÊœð’XZêÌ 9tA©¹vM7Ê4S,0…ZM=£QPy @>“!n ¼¦®ìsª fùÁLü„°¾§Ø0Éa5¤(ü(¬¼0Û@T¡Ziâ\ÞHøè&ŰTùªÀǨ™\ã9V#À¶¹Ó0’éØO?í”ò*]G=ßÞܼqεÑ{>Ì´ä ÄtÄÀƒ)‚,; ÛÇ~ë¶“m/_^ÝôÔ#ŽÇíSÞ}m]é…˜y¬òà‚[å„R ˆ«ä9ë§Ùê$1!ËXcGV¶fbjº´ÒË8ç4/A’þsŠÎÏ@®ÄÕm”z¬‘Šöv3ôJp`ƒ$Ó¯¹Å&clœ\9J Rl9$¦Îoãxt裒Mn0³VX-ñUÇ!wC¿]s×pé  !„Ö!iFI;,/_½4÷UežÀ:xÆ0þ’}tŒf°Š +”BµxÈ÷FÆí)ò„óGÓª šÉ~ýô’”QWí Ñ‚|µxÎC·0q?û&bþÎç²Z4Oþ¼ü¬Iq¨vÓ*ðì_ýË¿#¤"j‚W^K”\—ÆO{<>#®ŒÚÌ<¥¬Tšãoÿ€'ªÀ¨´œ^Uñ†¥Uél»å[ƒpIÈ#ARqÖ:JÛÎ xÍRÌ&hŽÁªu;-N2æg ŒÊr²yèkŽ2/¶¬Mÿý—¶r´…@Œ¥yðÄåà„ßUTužÃ¿¼6ÀH`[7S—³ð§QȱŒQ³xWÌà?ÅkÌg!ˆÈ·ep:>¤2ÍÓ%{F9¬¢»Z’Ak:†$FéjÍêx ƒ½ínn×ð{˽æ'ГbTO9< I‘ßÀ­Û5þë3jÉÒ6k'3´êÓ—ˆrUÿ1ébØ†äÆ Y–’ð@^È€o–CjÒµ°jå˜F×ÝeÚ(sÓ2BšpµÞ=Y¨Vä)ëÛ"ÔàœN@qðÓ¾0Õ xûð\ 졺L3ñE«M)b43ÿF ÏÊÊÒwý¡û{jöÀž\`ãm¥æJæv‹A‰t‹g‘»]åà ]Ù+,MOÅÑ0¸"0å‹M•ÝGá¡UírÛ‘ªÛH,ñj=L0«"µPIôOä O%•RÜi»^è¨$-ÊòŠïÇã¼Eƒ}ƒÔÇCiQ–.[g£OJ·s©3²R‚¼ûà;XïÞ^?{öøã=g³î]>}6óÞÔ7œþôê_{TÃó|¯ŽÈ¨²6/[ bY*ðahÅô™¯ºg„nñÌ#iy™-QËÄØWkžƒò'OýØyÎ$ÑëÞ2rn]• "#ië¢*fŸ‚>Á5VhM»ª°Î3$xª¢“¨ ûXÿ˹Ð':)T ¿DQQë@ZüÀ£ŠAk9Ýh9à ò[ X‚h>ì™í(pâd¢½ªE› §4ÈÍîÐnBZÂ$˜iX€ÝBW%ª]x(›n!I÷Ÿ¶áÇ›¸Gð¦„-t5ò x1D‚Çp誑fƒóˆ“Zyž1“Ë€M 9-1‹QkV=­0(d¦4 ÿ²^F§* +žq|÷ö嫯þpÞ‡Õ|æÑG®ÿ($|¸sa}þÄ—}|䞧ɵÅð,[ŠH‡¦æ5Þ¢Bˆèœä;Æé±){œ0hˆ[Ú,O.דԹ ÌX™Yù}ûú‡VÕâLã{ƒbúµòn eð}D!¼®“ ±˜y…I—`OóK2Т¨-ÃIÿôûß[³¿ŸS¸‚‡†~ÙÉQ«çß~cÚ5-迅ܯí\^:â©‘m=· ƒ$ÂmÈп«¶X^™C‡¹Ð2™m2$r<Þ›Ó§`ü|Z5®Á\a5BG¬ÀƒÛF®‰ßnEÆqLƒYsÆ¥üèþê—_øGÝ-%½êä“Fï,/ ËÄ -j¢f3ài€¥¯!ìM‰’÷¤`”®„{U;{nó€$`£*y´vThKôcïϤ4T5<¸;ü¾E‰Oì÷ëÜéN¾^íïÔŸÁsUp"ḛd=´ ®„#$680µ<91bgŒ ÕÔåùÎu/”{a‡ÁÆÏî½}wCaÆL #]¬†§4Š8ù÷­t2ÛQõ8s¼cÔ›ÈË(š».¹õštÿ»±tB¸ÚCK€2Sä)ãv)‡|àµÚ†8Ù¶„R^ʶ±˜ƒ!´­¸—ÓJ­Mï•…MÐRFS [熢U¯*|ÓgdxäjÅt·ÏjMFÌqi,JÈè rBœÞχ• I>.¡dÔÒÞÕ Cî 65›37‰ÐGêEùªEÔãyŸ’ìîc¶Dè=mï•ì.‘•_¶Ct1ŽzÖ÷È`–ÐqEÀq!=K‚œÛáM‰Ž²ƒåL¹òÀ4³$b{h)ÙBsҌ鳚äZ 9%¶)ËžB — S:Þ' IDATW…à.¡è}øðégŸ*×w`cÑÁÖÜ0œ¢ ·l cÀ¦íâ zX°Ã3^q 0f?š(\ŠpN6–h[[i±¡%lþ#µWw× f ¤$€`€—ï}øÎ«RËáÍõÍ«Ï_>r¾ÿ×?µ5ß~¼ûÈ–òÅåõM§b½ç±AÒK,9æï± õPó¹és3³oÔÃ`Q{ÈÑü2 +7€Ù“P‚ÈjË3½}ÌèLϺø$c#t¢p°#@¹sÔaá˜pÐ'=(‹‹Ö•àH«Ý>¨3k/;ØprCÔW.­&5‘Ñ !žx{»:œý˜ÕtaœËH0ŒxFó` ( 1·ðµ‚ÔýáJRf Ë,9WÍ%%Ò † }UR¸ºES­æƒJaš˜Ö!qëzBÂ}ºÕd5ï> qc²¬Ý"á l¬Ç93¢©”Q îEåV[öž39Ãv±Á×-ÚRÁçMÕ|°­~¡9µ’\ÉÙƒ _Nyóêå_þñÕ_þñùW¿xÖw€Iû»÷ò¢g?ýgz¬7,|8Ÿ¬é\§ÀQ$Ì=FÆc½-ÏüÉЧ5š<0tiq#çl>Ñ’bþi6™ïùz”‘>=tä+$<݈g=ilÄ)äRÈŠƒÒÊ ìÍõc?¿Q‚C©·‰m2]9ŽFi|fÖÃü$5ŸÝ\½¬á˜x×*gšèºÆV6·¨Îé«?ÿùϦP~£Ý›,QÑV¹âß ;$ö;4-õL¿¢òþÝ«W/Mb© Ðb˜PK ÛÓê{i!þ=bÛ üh²^goë#ýp§Â#‘š^à—F]yþ8@±á)¦+5V!â '¥A¾ëlW8ê» GoÀ˜;¤ô&$V>7jxñ›\Mò’-uÎPÏœ@Î%lH¸ÄÚ° \øGH \ŸÂÉ™“On@jÈ"(Ê?ö3s  ?‰Ö&üí·Ï\’âàvæÓ< Ñ¥nùÕÀ7ks5K­y³½aQYCz6»Ô¡pIf|ûæóÏžýñŸþðÛßýñŸÿ‹¿}Km]7Ÿ3‹³{„9’`¦…V‹1u&|&u?”ñŽ!ó‡lÝÓFé®]ôÏî¬Z"¯š1JÂúÖZ!¨íIÆp‡ÉÞ€ßëu¥ùâ‹pQL$¦¾Ó;ö½-‰îKf~Ó¡õyýZ¹«_`ôÚys®ôêãßÝ?Ï—ÀpŒý£i·4)à!J«˜Ôw £¾Æ•‰¡A¦•Mõß¿¯sBk¿lÂÄ3ëŒì•}S‘Na’AŦJ°(²™7#¶’|,™¢áщf0@u[EÉK®‰„ în]FÒ"Ç(ÿKÍ‚D4­¶;¸]Ì"ÃzNb&ÏlšHýÌ!£ÉÆPKRTd r%™± ›ÛV±v+û˜í”/-ËlNãëtópWïՅмÓÑô<þ»›ÿ×ÿñ¿}òðÝž:ÓýöË/ÿBÿßÝüáé³O<û™'ß>,Iß;î‡ÌŽ”È¨cõ Ë€©J9a©¢“€€nqï£2ý8iΖoåÌxÙ‡€0Ð%¬þ··27rÒÒÏ3¥†\áêS¡ÚN_èE¿Yd¬~(óÜÑÖôù\d³lc´·L^~óõW|Ã*GÛí­§Õu©W{С‡‹±°k¬÷«ês£÷V×çÉŒät­üÒR¹Ùè;OjíÑ„¯-ÄM#¦k{ž ‡ßï©?.IÂë3Õhf½2ÆbÚoдx²a€éü*ß½‹Go®‹ fHðì÷õUÍQÁ¶¦SÞÙ/8o˜SBõ°ST,†ÌÄBlöÕl!ÛU¨èêižÎeÖýäÒZÅ‘û;ζä³ôÃ_ëÉÉ !¤¨Dm@e*å^G¯dÁØ3HÛïÁ¿®5â }ÐdÆf^“ïNššBƒ‘µ¡•èÓôÍ¢Svìw{ã|šÇ»Ü-Ü•lN¥Eßø9ƒBæïúpˆO¯_p2 Äü 1cvE;òëª$®Y.Ò²oø`GýL`Ê–u…‡â²Žíâ’9% "ú‘`jC¢ƒqšTÊn¤â ðÞú‡Š[Óë´Ô–[ìVVûPmh71s§ýì§Qö‰×ÖQ›øeêj&^—ÞmÁP šù9HSÁñïNz©¤] J5’:!„yñšv|ÅÅÐê{)øÎ]Ñ´±ÔYìû"…ÛyA°¼‘—ó™ûð¡ aK'Äõ®P®4)$8NE«V~^\¦vs+£ßݼ½1}¸¾¹"-VRg.¨sÛœËóÞîøáG•¶Ø×1ô”öŒW‹dÄ+NžóqãOÞè74}*[—iXG*Ž1:ä˜&]`ŒRôÈ`çÚ|*Ônõ#^,b}`»Â–6g¦ïͽ}ûj~N«åTÈž“t ëÆZú’Gê#Ý=J™ûŠÞÇû¿ÿ÷ÿî?ù/þÝÃÃ?R|ùøÉ#êrjÛ—®®üäòÒÕ¶ôbÆò’¦ ÆàG~&Ë>a‘åŠ.ÓšqNpìWY¹Ûq\n`ŠÌï}µN>®›Ç”Œîš÷¤OÔ¡+lC¾ñjgDüT k„ËCæ 9$œÞ¾ñùC_¸…©Iñð"D|çñ•G¯öëD½KÛ;eõší,}HµnŽeëDƒ¶Á•ÃcKñf ¸0æîIPˤ¾&(¿ z`ã*ÄϨ _3rª©¯À¶m]Œ ˜Œ¢1æF93X˜×Öß7'àm4ºÙ_ů_ïš]^TÓgpß—ÍT¡Öú/U@¥›3lúà0œý˜ŒËåÞÞÔ›áÖ1“…ͼë(P½6;wvñÝwýÐéÍ›ßüÃÿþíþáí׿ûÓÿ÷ÿ|xï7ú)–›·¯ûˆÏËoÞÞ{ñ㿹sö¹­s.xïÁ¹µ¯ø%‚‘ä"ßÿ1Ó1ÔÆð,B‚èô0Ë·w V0]^ˡۙ`i‡ÏœMô*}Ÿˆ}×ñA“3o†¬¼†|`K‹Kˆò·ªÀVª;ßùÙ%[[,6çè7˜U¼B¶£cŸ<~ùÂS/>òîâ¼WÍ×°Þèþ}±LÁ“vÞÞèn–,ÔyñôéåÓ§~—D_œ~ôWe¸2åyúäü«¯¾|}}å·;,¼n•¡ìYhjkPï7¶NHœ\Þ÷ó£s@hw¥ºªÝnÖ¤n=Äãá‹z¥i#­î´›ˆy>J'IÀ¼øù'•7²ÌA }Ê$‚†áIBË?ö‹FÏö8a__½:ûÕ?¿ô9C®!Ç –¾þìØoßêäèI¬ràšŽ„¡½EÆy4k'Íu×5ŒÍZC\ë¶g<‰¦q^î–4‘©»æXl:¢x¸ [(ù|$|qÝ€ål1j’†š&Úuíº4ÝfXÇ Æ¡—Êð^E£Â8ñJa UÒGÒf'ÌUÕ ŽšZ­ÐqŠ…þ”k(sÛ[dÜbaʦF3¤†Ç7ÙJ“ÓÏQˆ‹1~Â…–ÂÑÙeM†²åê™ý˜f¨·O n3¡ç¾ýQxæP,ÿŒá—~Š>ø ˜ÓvUwh‹`¶f$FZÁGÏ‘‹‘Ÿ´"$Ë<·j–b9À>aJ•K 3–Å&]Ýî¨U>²Þ>Þ,¯~‡,Ãwyˆã)s[ßÂäÐÙÐ3{‘2BGhTš»+âèË­rR(!ˆCª™A–·´KØ<#vUÀó&ŸÅSf&(<¶u6)Fçc÷y¹!ò™ I€51*Ë ­Ñ[R 7 IÂéœP)‰áSBš§7slæÑÊ•o©tKvƒ¶=;%°â„·«†l½UÂñ!À¶¦E˜[ó`!sÃ$Y?EÕ4ŠK,jŠiÚu}õÙÓ‹/ÿüW/ÿéå«o®o>yúì'?úÜšèÅó—ÏŸß\^|Â?Üûîò™ß#ÿüòÉ¥Q±×ãtâbgcÁˆ磴Ô~00]LªÝßÓb½õæØÏ”›7ŒuhŒ¶é§S¼w­D%&ÈÑa›7il:;œò(*¤sW0¼Ã¼D9Þ$˜q«ƒQÐ8|3%¿þõÿëp¤å¿ŽgG ð1xa>ûoÿáÿÖöé“'Ì ?6..ž\Ú£i½ypºåÛ¾)sõB¬² nE"2®–èDCUž6Z¥âY9Ù׬ôˆDÊœo¬Ð+x¶ãÇÁgaÑ:©Àq‹aa¶Ÿ,ðèÖ+tد³1œòäÍŽõØÕ?<–xÂ’ýzÞJj0€mªò°_ 3BÔæÆDTø½ó4ê¶áÙapz¶ú9ü‡³„é7 ‰À-´xƒ"G˜-}åÑ<«ÔmÞ5.„¨ªa‰Ë˜˶k&2’Z½Œ—/{€—gŒ¡uË-öqáj"bÉÆ˜²ó&²†£y4‰ÛY걎áÔ•8ª«Ã›y%Hi¨´>– ÿØJô©îò|M¹óåŸþôÇÿð»ÿê¿ýïëíõ+?åmqüÁ–Ã]0&I­…?û;)€5÷Oô÷ðÓ Ó;¿€ ØíÒM7©7 ‡q6(nKð)Q¯À¾N® „ÒfVüÛæ2Òð+µ´o@ë{ª;…VÓñùì'x(2v€PÑEåØD‰pÍmÑî¸÷·ã0È]—îޭ—Éq†éÊáâò0JT¨N[% ¯d©èmu øáCúÒ] Öq8½t4·ß[ø=÷™ÍÔaK-3·Ñ¡(yGYt‰¬£YÏC°½OCjP¥È&×wï>ÿúÿª¢Ÿ}†‹hµZ-–¨O!*¿ýíoÙ¨xê†E4É“Wj:EW_öC|järXûÍ—ü·Î;?zâç`DV6‚ùé³Ï./ž>~üÌ£ˆ—W7î=ýñ_ÿÇZ;c”Ör8DÔu9Ù«[Uf_%›fèäË?GÍÿGEöàÕS4ñ8ýâs^'£F^M4§2ú²—O–/$*k/‚˃‡$¬§èðN€.[lÇŒ&€Á ìÖàî‘’Çó@ðù·ßÚ!•oѵ8Ÿˆ¶?þášÿìg?ƒÊ ƒ/ý€ã|PôÙ'Ÿr6?~eïÚ¢Q¡pâÙ鼞¡ùîTÌ.lfa, øíå«5Lè:‰ Ø”&zÄ-x\M´)Æé ¶L Îf±­ÞfØ·˜CV{MiFåé‰JWW’FebšÌ”ä;»k:k l`ˆç[¿?ý‹Ÿÿ\ë|Ðì ÷€&BåšKXåaéqãñ”W‰[Þ gäßL>:Ëh\rë~#eöuà”ðÅ#÷óµ´¿óSy}'èB.Á©‰Û͘)Ð !µ®ˆ ÈØX_Ä!H ø\þÕæM™k(ƒ_`\Çq+Ôvjб:É¿ñ=ia&Kd\Ýü-BjC¤å'‚VË6fȈ+…X2aÕ*œ³d<ñ@¨mö/I X¹}Y×™ØeJR.\LHmèiÄå‡4€ú*ïÙ« ýLÝ`Ð2“$SBC’éâ·M,pÑšqNF+x4±õGTÀà6ªçq=ÌnÑYá+4³$ .þâÚ2€mDGä}rq&snÑðk«‰ &S(ïTY“H*ŸUȸM'QÝŠú oWƒ%^í‡Ì,}0?VYÀîä5—¶E²ÅŒOòÈyª„‰þäë½qhV±ð‚ÑJÍÿÁ+Üç0Sƒ‰?Ø¡rü†àÚ‚T&‹³{ͬëÅ9Æ4ä$2¸m;êìÞÆz”ýôÆ<¹ð¸ Û”©%„°xQ‹–h=‡3©¯ÕÉ.Ë-…YˆÅ†bºoÂ7·Vƒéœóäuªd“ÿ¬ygnQgãô æ,Z¬Ä¹DðS#éä]b`EN ¡[?+¯ «Í!4ÛÉh™”®-M™!«Ês°Ú#¿†@çŸþä?+rõ¢ÖÙã'ƹ+'.9òˆ.EÁgbQÁ )׆Rä|ª7&j>°œc@]ɬG¡ZI+â·»8l+9Å«B†’Vž½àÙ¤DF­Œr™½ÅžíìáG=#€ƒÓ-àQO^gL¦vYUÐÂ0k™ÅL.åC÷‹ò/v@6`2Óº.¹I Š“oh±q+xV?ËÏR\þžàA­,¸8I¹%è(‡o›Ažv4œE¡4ÚÕóå¦FÖD¶OÙ§¤mNc곡 Þ4œñ5*šëçƒðÑýÿŸª;á­59ÎÌË}'ï2‹,Ùr¤ HŒ ?Ì0IJµÙ?16bÁ±Ķ–‘4šånÜÉË%ÏûÖ9œIç»ýuWWWUWWW/_Ÿ-ã}¡¯¼¹ÊV_*æµ½m‡ ÀêÊ/º”˜ù¡nˤ@ÙŠ,. eEF_ŸË¯½íoŸ¼þâ³›«ÏàÝÚçG •™Òº¼6vÓjÕâòíÍÃæÉ«?ÝÚ>ê’‚ßscW­9¥k@KbèA<™Œx+ÿ¸Y²F†ÄKÎâ“UÑe 4ªé®uœÈœ^чXK™Öí´uT¨WQÜQ´)¡Ä_yWa°##–É3¢Ë/ÍçW€z K£NG@X‡Zót³×ï—|¬8>Ða(ONœo±n¨Å¡¾Ö!Mñ_|ñýïÿý»÷ÏŸŸ:ÏNÅ·鹺ԌÿðÿÓù­>þÄ>£Ÿc™`@!èVœH,΂‹ˆèYÖtOßY#Mßmngس\Zb1LÏ?R*C–*sfU¶±9Z›÷ß܈Hî Š4åØO4M±o-Á?)1X=8ˆe¥£“Ò1ïä¿ñ“ŸüX’bØ Þ%zªxÐIâ”XÚ†gO¡bÊ« Ë@HÍÅu„Lѳã™ñO1¥«H®WÄz’ 8j9… À°é)À[6érÒAj³NS7­Ôç¬îF°Fh„?Pu”Uû]ú9Vô½à¯í‹UCDðð+â?„a³Ú=Ôö´»*ÒÕET4ŠKг)n¸¹¹]Xú&¿™Dbv…6 3á‰}J¦ßz›ú,P>Ša¬Í؉$þ~œ™åN¢®#Ž`2Q ŠZqé^ý«ç“°Wh+ϨµíPƒqÌiPwÜYþ±/“f [#â-†¤Àà‰B~Ĥ¡tŒëÒŠæ¨bž b6íÕæÙÈI*%HGà©Â`‡kŒ=ë¯#‡N´Šî0ŠxèSÎ< ˼nJ'’ jçÈ,gl©œ›ju]Ò¯‰ÊÙKºÈz¢–¡uT‰lâ*B:æ›?ÅÍRhâ´x$¼ˆ1;øi”ø\ˉ–楯?­6ÅÕÅ">åæ5‘NBåTœ²itÂñ%Q%Sjüˆrƒ¹ø„©wŠ‹£DY¯â£9,]00Ë¥fr§˜èŸë0¼F£óQ!‚6FaŠÛó£Ý™M1V&îÑ-åû¬¨zô<úB’ruXèY|˜EXj/ΧQGÕ#OE¤ˆ+Ú8Æ<éÊJŸ\ÏQà /LV`VÒ@*(KÐ^è'^†B1_ü›Qžz´Š°OåÂŒTðä3‚’‹¶|©ÔþH“f@9Ø?À¬D²UʦՌnN•€Ñ (yùò%!hYŒôR²"ðNYC˜!\¸¼z¿»ãÁûqýq÷öæ|síÖOÙ?[ß=99ñ -îZÈÚÕõù_þþíûwògÿå£OpåôÏ–Ÿ•³Þ<ßITµÆe¯‹‰ê‘¾Ð9BCO„° ÓFm5RÔ|ßÝètUÛ±T”0:@ÜLn•„chi¹îẃ„»û9P¥ «Õ±t|*õŒ+yF^.UÚq!~‚¾óƒ³0Fù©¿þÙ[溥\óü*Â#üõ×_óÛÀ8÷âô¹†–k"êGZß½÷ï|JþŽ2¿xõêúÊùŠÕ˜^ 3­¦^dP ´A­¯k #5èÈŽþË­`ea¥F HîdVJŠtË'"YxL§ÓÒ âªƒ-g.ÝßebÒE ì{®ý+ ~Ò!_N¿CÖI•TW$üd¦]K1•©X€Ëk±wZ™ã´‡æ…D‚›ŠAê>Ä:EL‘¢ ' 9•¾š˜§R´K¥†OÊN»†Õò ¸xQÚãºOVæ `²¼˜¬©}ŠÏÅ¡H%âÌ¥æ©Ç(¨°È0)­TbZ 9)[ â)K?‰ªE¹‚‚ˆôÉ’+ˆ<$*ŠÜ¶v¬ÅHg `%Šx ’qdÅä•ÃŒÔ`îU²É´·Qº ó¹P“¸ÑGH¤Aáxµp’Æ+åÒ'½ÂY5SBXƒÁmjˆ<^eŽÀ% ^'òÉòjlÓ|ùÀ+Ý8¦!k~WA³?<Ë÷ÈÍ9w]%ë@ÝhëJ†*€…G:Fz–ËçàQ •gnjf@"ÒÌ B›ýkeP!%²†O6ãi®¬8J‡ÊSPV=Ὰ4 Š\¥ødvydé/L­v[ä±vd¬¬Wíâ…3fzQ}…?í¬—ªbÒ2%ÏñŠ ¼í8Á¤[<ÆùÐØé 4Øß!Û  F}  Š ârµ°†¢Ãmí(|+Íð=À^….|^᜸²"ÚK"†BFP3˜b‹ò·ÙƒPc)RqÊìªí‡ˆÑþ¨sÖmF¼Æ!¯OuÁœ_eEIû~†=Ÿž|xùâ%“}¹X|î‡g[*9rû‡§i´ ™BUU9­Ô[ýrÆ—‚H0QWàãIQË4!e@¿ŽG'ÇVJÞ†øFÕÍ7ï IDAT"ÉÕßP®¢Ž\Ú‚–fC%þg!×±KJga­sWeçý² Òî‘j/yF-Òu|¯‘س¬7““˜b·’‘»ÚT¯t)„Iè—ƒ‘W´YcŸvåÒ£Az¦YS$:?e=%Â1Oµ‹#U¯²<ÛÜ)"D ¶èŵ>úÁh#XA:Ýp»øÚÌÛZ$–ö„ï-‰ü'Çcv:&xëÊh±#/®=Xq5"…ÂMnÏb§t!€´¹1ÿWâì?! y°ì±E= ]Ê^|©ì$:Š ¹17Æ„íåV­±9Ê=»¸;ß?8¾¸ÞßXÛâøôâêÜÏ­Ó4?ÛÂywOñÞîþæÖ‰+Kýäq2aÆôŽWQw8ƒ¨†‘êUûˆn^Ñ/wÚN®ˆ ±Ìºœs)²I߯˜ïùZ RCÀÒ!ô4À2P€½³¼0\K”%­ÉKU$d ®Y‚ ]^ïûŵ¥Áϯ‚îl½|~êŒ $T]-C ÅvœöèôùöbŠYrMÿöÝ;TÛÄ¿¾¾`-I ZM£™ÂòFÜe·’ÒEÀ‡&®Gxk]ïujDãŠÓs3ðGéb Šî29©elxÓˆÇF±~Šˆ7莜¥( ùRY%ôbé*õ ¡|¼×¥ ,œ²r¿€êþú¯äs?”mmÖ¹–³‹3Û úÎÓø­šAÔœ}¨qˆ‚¢`Õ_Åâü¾sÉ‚‡^––-ÿ¢2–¡Û(¾np`˜%{dÁ $øü -(¦J4€o!$³Ç.Q_)ˆÁ*<ƒJ¢×@¦½Ĩ úú옧‚4Oêb{ªßO‘ Våá´€ E…ªT=/¥Z†Nõ)å)eFv¥† )ÈHrKb<ŸePN% äŽx;ij·Nò¥™u%Fþ^EøR­ÐݽàËÆQpVÓå¦á‹Ói>gÆÅξÑöh|MLЏMF]wˆ‡1°y…‘M‰—¤?ˆ‡±ÝÀ+H8§¤à‡zÒEŽ*ƒÄ—bʨ*2<êýF(#KðóWâFŒ"%%Ó‚rÍh’Åç´J ¸›² ÕRÈð%0èéÝw~þ==yhRQU4ÊVôyH¯R§W‰0>p"“Šxeâ÷ÁrVl€Ÿ¤ñbm¥Ÿ6ÔÍTqMžÓ³VdLS}Ïhùº\Å»§„Íe»00Ã¥!UÝÞ0£i$6®’-E*ñB4l5oóª,äOD£xC:ˆÈ4½-Ë4)G¸hÖ:¹q ŠÀ™f툂/Ô®™: ÎYÌŒCÅ·”­RŠi6 jj÷wo7{Û/¿÷Ãó󳫳wÏ6w@ßß^“I)îc¨€Ç†Ž†Ëþ5Öãm¤7ùFp´}GVÓUFôS U^k™NÃ0bð‹ûtÌR5ò×F0Y»I­‡td(ˆ+.‚Dº‰Dƒy¤Ôáòâ’ú*îvãìwgIÁ•á²ß)h †mãK¯"RTê­DA/dÀvë»y®?Êêð«eRà¯A릌òejžÄ+oxî<‰£ÿ²¯ðG,Ô‰6šOtaÊ x,åK.Ü<±àåœvªÞÓ›äyÚûûîÝ;UÏ29@š`„žµžžbàÒ×+½ÎBgº­íwïÞÛËWœYÜÈhý¥õ|û É8ëFâýý#NHËçØW>°?{ûöáîÂïâøÔzÁÁÑñÎî± @‹E}òéÉó—·×üŠÎæãÎöáå¥oè´¾Ó#Љ÷ <¢Æ…æš(F®ÈäΫl&vFÈr¥ôFuÉ :!‹ËCåÜGì”ÙÇ×w9áO$Ù ¢ xRw‘©}¨ÒV{VDztÇU0›í²úÒž;Ÿîà/ÿå¿|õQÍ;³™ãY·‹+8®«ãµéBÒ÷ggº'_Ùù-_úø]zW¼ogúÃÕ¶E“B‡G{lÇèF]L”»H…IÈG<¨Æà "Œ€í¼D;õJ¯ÍíúZì¡×,W1ƒíòí‹\_ßYStD.. h Céû< |^—ý§öaXëÉ4PéÑdB哨 ¡8Fc£ðº‰ ›†?þñëßäÌ¿`‘1gÁx.§PXžPyj¹ic¶@L¢tmï‰ùR_\í–¤cP¡ô–Ü Ò` g5ryÛJ€u,ÒI‡Yý éºw‰Çƒ ò±ž£0ÈžQÄ>)W!spÞBzp¡1<«NËf;X —»¸6À ¯  bGrk^€¥3Ëò¬ƒy ™ ì¥„af‘‰*²"µ6õ‚Ó‘R–” KJòÓ,Ä|‹V>‡4íy…t¨FàÀ¤#òŒˆz:}ˆ§7ƒ‚9yÜVKFål¾X®ë"°y¼µ¦|'m¾cDÓèôXº¢jÁlŠ;ÛÛ}ŒôeÍ #Ð5Íj×[‡/j šÙP)ˆPÊ©ôj©UDPrÔí@.èY\%Ư۵dÂXˆÃ$ÎÃÔâ°Á¬« ’Åõ%’´R ´äŸ 0Y©eyU°)”vfXiïÈ$LY/Xð„Ô«ª…ȼ*8v#D y˜ð4gÕ°m:µ ¸T´9 ÂÇD0½Í÷T2sYyY°h7¶•d¥(µ‡¡Ìý1é_A¸¬aÑe_˜û~ /¥Qþ!FŠ0q<Ê(aâ¤2Ã> ƒlEÓ©Ód^£ny,§†ÃQÀ#])ƒÙ3ðKjG˜™ÈÂ#+=‘ÜÏ•q2Ì]7êG5^}ïؼ½:wO7…\%»!$Czt&4ÄDg¾NI\²` ÍíA±$9W0*Š n¨’¾Ûûó 1'ïÉ3ã#tñ)¯NDèZ Á໬GͤƒväéµBˆÅÉ¢!9-Úëµîî9X™ÓwðÓ²ÒyŒøx’˜²°)®C )#7Ü æTÓ†@’¨ªSi…/K)eW¹1¹Ó Ô®ÓÜÐ>Q\ºúG$O "C3ª±Ø¾;ð Æ99Œ×HÆÅÏÆ#$ØãxPவ‘&›#…¸T5UO{™™ÇEëI8õÂÉÔÀ£~cÓŠøX~›¦v¼¸ƒ@EÌàÉÉ©ÛÀ#Up’/Ñ 1’±×éïnßky›;-›~X,¾rŠÓè.\›ŠÆqÓ4ÏxÃÛû»Gߵ쳽ïXZ±~{í.ƒ]+.«îIbS/’P+^ɧ}Uí©jÂùç‚’•{¤é± )ð¥ÓaMíì€ñ…æ([€é×éŒjQ°ÜŒ Õdµ#I\£Ç³±Ð݉õ–‘„bÍdÉ!›¿þõ¯èçÇŸ|bH"´œd??3c槪…ǧ µ6-báõë×(ØÙß~ÿþ|gkÓ¹kqñþáw¿ÿÝáÑ>ß@¥ xØ.sGIxDŒfÕ"K²ÙÃ^h~§‰ftUÙš´pM‚ýå ­¨#|ðc-#áºÃ½×')M[–H&šC&Vì­F –¥èb9‹9=Zíž ¡ ©w~Pȕǿÿ»Ÿð=]vrk/cÝ~§Y”;™€2vk§$¹ž'¿øA«4a:-Å×Í“]ª,­ç.f «$¥E ò]Ú•‹Th;zE d”ïlæÌú›äŒrì‡`˜ c Ö÷îC=ÁaŒ¢ò'x L0j ÆUDÃ8¤!r‡5•8O‘r¸ˆ±í=‰O(*‡ üšV\Êû4LfUµƒPÕž%#j𶬥›ÈŠÂ`6‰ŠgRÑW"U"ý‹:+m¶Löº.ñŒ—dèÐùUž—çC'’ èXcYYze-n®MÚGÓZF)†i¾òS™?C˙ՕŒ@í{ÄhØË׿iëŠ47ÕŽ@L0"nS¢ 6¶Ï44bƒõ*ô²ß¬U¿µE6y<èG\Üš¨Éz. šgìð´a¤=éõR/Šá½\CâÙ€ŠwHæ ¢†Üx^üjØM}oìÒû.y:i4rùßu¾é‹ óÌ3YЛË›Å!sÏž.‚ìê:?¬k=¡*ôÛG•b&HϺEÖ7Œª9àõ¬›VTyíqgoŸMãQZô½ùpÕ)‚îZ1MÚðETôF¯ "ø¡ã¢Ö»¹@Eµ 8Óël¼²G$«ÑŠæQ}û¨¹ÔÍ^·ùt@—!O:F(ZÆQŸMB' ;#j-RŽ\y>gÑ%H’kŸ•»¬om¸F.6:#rÏ·QNš®cbC• EÒ ÃkÎ2gÞðÑJWÎb"i2áûè[qã…1WrrbTÁ´¥Ôfô¯W‘0]Ðl™ÁžÖïdÏÇ~:þ¡3¸vvýHßíû‹ëO?þ˜Ó™¯f--ä,à–ÏÍŒyOþˆŠ(‡ŒÈŸ²±’¬ž®ÝOd*âèJŠj¯¤·aMÔzaŽîÄÂfî¡Á0Ì Y¬æ Ú$r‰|sâ[ègl&YÑmÇ/¢-^òáÛKMz¨%$ÈÍN´õÈVϳ٤÷iôÜ~àa®™<ì«È9çcÒÌE;‰_×goÍÇãvçºA«¶ÅëÝ]dv+Ì0£çÕL„îýòD‚õ‰˜k‰BæÓ‰”±Ü?¬ñ·,Û’’À¸KcÕÕ)‚eÜI“Ýùñ.Æ N$õ¡Z P˜¬ÿÑ~ŸåL×ίÿfþZci…ó‹KnŠq"ƒ‰{ÝzAš™\Fhk&¶ÝM:ØÁÌ"ØRDÞ/..T¯KèmÔ—ˆµEÔŠQ€n¤b_ˆÆ>³Í§»q•¼b |…èj¢±¢¥›ùxŽuÌg׆¤æêx;·k¹ Œpwy¼Ù¸:÷í'nûüìë4G?±¢ˆ¹ÁàÎHgÏkïâúrçèùöΉÃF;ù˜„/éÛmß>"4b4³c~/‰3X¨·Re¨‚q í£¤Î¢¿²P¹Å¤ëÅÅY7Cõ✻pŽ Ž´µ=ÞêÎŒÎÒ²ãSÄ‹j[§É.¯®éŒHÆ> ü[;£ºÖœ+§ ª¦H¼ÃÅÂOñÆhÁYgÆóS’\<@™G¥=¡õåoÀ¹CåðÈ'ðDD™×_Í2ï9F– ,رL‚>ýä;oËŸkœ:N2é$¦Xk %Æñà÷˃h ËÀüZÜÊ!úÀª…"Q¸G‡“˜x?7Á57D)øÍeW•ö°ïE¤àë}F_‰Üxª`FRÆ$ýÝ­÷WÛtfkÛ¨¼ñóŸýD ¥Âûœ^¤”liÛ8ÒÊ@P§ŒLóJCÔÚyH¥7 ®§ #å5–(êM-à™ŽÇüÄZ†Ú¯Øb4 úC[ŽÅgîÇ%‡›-›Î—Š Ù®ÓΣçÀ¹ «Z˜MI¨Ìo$bDRˆëÌM0· ýÈø6˜\¨$ʼn$â²ÄEæuâžJ)2`²&°Z<µx]#ú¤È ¬CWÁtJë£Æ#¦¬Rà½Æ ¦ËÅšWh‰X´ƒÚEÊ_lú¬ªð¶¤X¤‘Îñ bi—Úбò4[á°>ÊwCÀ ®¡š™"ϳ¨á0h eU›xmlWdæÄ™(ÐOLWüj¡aF{eùæÚe…JY7 Òkl J‡´K’eQ×Û˜ÅÆë×N€GàŽ+!ÏÈÚ”hšn ÿ¶Ÿ°@ž1jÕ²"Bô¼k¨*Õ8n®r^qã1–fåjÀƒU£ä $õ¦¬xb$–!.@ú€|`Üa.Ömˆ¬Ø©~?, ¬_ÌËáìC~Ê7RC,ð‡F¦®Z¢—Ät^É‘§ŠÑƒ*)C5Š3£Ç•\k½L^Š¡5•¬ÆƒW‘PE˜«ÑÎ+ǹº|†<§Ñ˪êÓÄs¹ `EFJðXKè8½•x›«(àÝíâïàap‰Ì 6¯·oÞ¼üèc;¯Z?cË֦ˠóAiS=Ëàà¬%Á¯I–ZÒ:‘Ʋ™2º—/Y åŠÈT-Ý+H=àc¤W†¼3FÒÁ ˆZ%à즪XeùmîX¹Ìñ)Z±é»Á}sÓ<Ö‰²£S·º´©öVj´ÈÜ’>kMf:,QÌ[^Ë•‚yˆœÖ (AðŠ»Ìœ҃äÒkü— †aJx¤·3gˆàoGHL┑%žÑݧo Z=‰‚!×2!äOÙ4´:°D· Ãcî‚÷¨[·Õ¸5ìkhNµSE0B•†«>É QËJ•ËÞ5˜¬¬—dK.·ÿ5M$Fæp&"¯p’°"$ ÃåÙM“©Q\q>Eê]]ú F}Z!YÃx% ])=Y{hTÑ”lv@¥3X­RÄ­Ü­.ëk‹ÅeÉæÂÒ˜§Ø !UGbêÉÏPðÊq¿{¿R°wík‡(ijà èëNFµ“,ɱhYßeN;òá–ý?ßwõÍ¡sv”²- ƒ^u~f]Í«!dFÁ~£[AÉŠœ™,Ö™CkîÖåRƒƒk‹…ìÀÎÎÌBèohë†[oèŸ"réÀ¤LÀ_-Á椑_¸è¤ õGT¢Ã+°4Pâé/zŽ6Y9Tå.<ö5Ä(%®"¨ ”Ív™ hæ’‘˜Ébï~®§’"†…j Ê¢Üë´øg?„–­ê< C÷ÒÁ¶ÖwùšÀëÛL¶ïÍ­C|/Ö³üØ0â’¢¸SþÐW?x ŸHRk‘¬Z‰HŸ¦‡ m^=½"rhé>Hë%‚“¨²("æy¶vî@y+›p{‚ÚÇs û’BçÊ ((ÅSCp; ‡pŒ¤/“òæÍlj‚+¬ÅY Ù‰¸xûúõéiwÄÚ»ŸXS°EÒâªMŸ_‰BñdY¿[5 ÌŸŠ €'lÂd‘ˆÀ2T‰Œa!ˆFæ°rµ 䜉ÅÝÜ&ê-ÕÕž¤ƒ}T$¨ FT=ÄiªwoÞX8:9%„¶E¢F÷¹òûý=”™›&)D‡O‚Í=òÞ¾;7¸©Wgá5ÙÄoˆ;TYñ‰ÓU4¹6?ŠlLïß½ùýÕù—=›°±¿wÌ7\ä[ÍË‹E,ˆ‹¬µlädKIÏÎß¿ø„Pb!¬îÄe¡k`f—FmÔ¨vìËD³U´1h`(¹'íà çŒV)97mß³sŸè§Du?l{ëЗB+‹")xs“Í5MæIòas50eš¤º„Ú„Ðá`¨âÈYN–h`¤†æŽ§[;ûYŸ»»Ô4°Ã“cKÚgÆYá?|ÿϲ֎§/_e[!GÒdjAv¿^\íäó@¨à/UþÊñB,‡«W\(#¡± ÙMG“U¤Qp1tÂo°šD½ZqZ¡Ñ5/þK) ¤6†©IQpZax÷”Ul¾g"u~zì¦ørLÔq2gΩ^íAF°è$|OÂÒåCMK‰Ùµ¦×>ÃTòÂ6Å\Ò»eUAzDð>“Ž­ÒÅ; S¬ƒÉH$hù ù-&ÀJo¾>E±¦‡–næµÛvȷĤFˆ´ßŒj¨s˜©°^Š’Ôb-­n/:ŠÝ6Î !ªvÕF ´UÎöBtùRP˜RRÔûô*20óTJD¢TâOaŠH”Eò! æ@0ƒ§gé?ðÄ—x²ÔgÍ`$¡)RúSå\½UÅExÁ*KvÊ–_âQ£gq$Þ\¹VÕÍZâ'”ÓVH…Ô–1Þ”JŸ(r_^+óÝ]•?µ›Å†?¶€¡ðT…1±8ÒÄ#¯räÃÚ­8M扰Sdæv8ÊfžC¿R á'G«Éíã9#L€D-S s€EÓ ùgÕ²ZÎEE$·¥nóܺºtm T91£0œjP)7»±iaº6TD–f¬«~-\ùL,»™Î,õ sZ¯µ/Þë„©EHVgo"ЂŸZ ¼N$|ÕF’\ ä)®à Œ8*ÅåN€@cYöÆÈ*-ã¥Ä<³™³0xª  £?N¢?# ;í³ð|ˆQG' š¸…Uþ©Ãݨ.G{७»ªÒÆ&¤ë7Fë æÇî\ß=Üóæ½zµ×ÔiγK;/°gA“¹ðà áÄÃx}¤$€ºD8ÑêÆ^ºÚ£j€T «5ÀËbLÁ±âÂ,û) †Y8¯öŠ"ò®ZõaCuV”$ŠàäHišæ‰ß§ˆRâx°”TЧ—a6]¾hgÓbJMŠ'Jö)'-¥ ,öÐ(û`~ëW»Ùì‘éqÍ4Ãï&rÕñH`Ð?zt!§?mÊKŸ]XÁõ·G BâPN—èæ ²³"·#%Í—›0;ÞÓéNbXº:¿x÷•ÓžéÜšíÙ»×_l¯ofÑãÑóíìQ¹sß[<ËÍOWïÜ'ò!§Ž¸a¾y¤’Y¥ó‰¡­­iS‰"¨gœy(¼;¾@&¥¶—‡JœqÓ“˜™ C¨[ߺ}J¼5xXô¤Ô9ǜ릹ÁcÁ$Ö0ˆzZ@gTg}Ku ªr0á­º ¥Bp¿ÊD’Àüq 鯸\ôƒ#Ì+7>Žà¥Ÿ<¦“Ã]‰7N¸.=u_I*'C3ÃP ¤"àÅ¥ NÄ«r”M’¢RÄcG:_6Q  \*H£h£5ªÜ—Ô*SWÅzÚ1+wêfåî ×™Ñý蘑SVö M¸eÔ 2ã D︀³‘h+¦T¢ÀBiJÁNµ]È¢´ñÚ*h•ùíHLú´²#è£OŠÈår"fª¸â lDCßy-çÄÁ†L4€e’;Õ`ûs.ƒp[j\=`nÿ,–B ~qUˆÀ€H4k6‰À¤L˜"“xj|‚™¸çà£H(oh~ iÎjòžk¦ìr-"K)ô@HbF2]‹Ü4*ޤ£4[`åz0£WD© µejêE†H sÂ&œNŠ¡yŽ}!ȧ¸žFĨIºFÑ@Ëhð£SÂ2®NÛ7áv¬A¥"ÈDÊ4KËë §* ©Ûw<®Yn5„ÃÌÐ8óá¼3C©üšØV½ÅüŽbÙ-:·Ãˆ €óÉb¶ 2r‡£²LÑ:#Fíà ÑhwÕ¥Ùó–¸÷²Žðl{‘Ûü–:3r@;-° ®ìpÕ#I”0ò­)O)Jã7-nó5A9ý‘ûX]4SHµâÌ è˜Ô—å•YTÑ4¢H«Ë¤ zkM¢âEUݨ#IP!¤¾F]è©8ÚÒÎä/CÚlO |Œn ¶ÉpÃ×ÊùÓåøT¤>ãZEÙÂH žª=I&Fj©ûéìˆN¢»kÑt±Díæé¿üç_üÅ_üWÚ K!ëòüÚŒÝJƒßkäÙ%f³øåá£!Å,K… PXæýáï뽬ût£-¸!DĈÀ&æ'ü¡³ý@ EÕL"€é_ø =!>ª¡S¤°Î"Çî 5­WÎüÞ[¿±;f2fy0#r×?2ãˆtŠè‰w´AE&°Ñ]Ô|T§.BÉ}HDZǂS"´×r^6­_fŸž°Á ¡§0"FaöÊ£’…ÞùC"øÈ0‡A4­z¿ícRz+üvðÖ´þéŸþ׫/^}ô±ö@mz¬2rWŒchšô¡gxä€ZÚÎçÏŸÓCß©™ÏS-?ù£°Ø¢‡ŒÞ[ IDATJÅ`ðá!?bÕ³1º߆y¶×>\þá7ÿ÷þöÍÞÖæÍå ­Ñ~Çi·ƒý-¿…ýË_þÒÏ4Zã,™£\ç(s&P»û§‡Ï?ÍW‡½cEÂþœQ{ò;щ¡J#ß+ä ÈC-ñbÇ«¾ŒT7BÌœ0Kã|8,Àà“ˆR²B1ŒcEx™òÌxà'~i~€oÛ²ÞÚeV>hŠT=Ðüß2DRÈ_bé ÍôŠË Þ- :†WM ­Úß¾~strŒ ¥°ƒÀ³÷ï#è}‡ô9ŠñÌ<êw®&(©ZPä˸î\Ö ¥=>ðœÄ /mG‹,ùr #^õŽð¨ÒtÖ劔LÅcre¨nšb 2J¨ñtU,G]þ#QÌsÄ2P#³´ÍÍJV HNa¦# àŸÿáýÛwõWÙŸóÜvN}Å,¦ù½táýȶ¥7œcóš ”„-­·¾Ú¸nQ Æð#àW+ø¥gËÃÙ©“tHéÁ^)£¹Ó¨Á± r–Sšñ‘õ±a†4œw’^È"õÖ‰)¾\Õ5ÒGFÚ¢¢Ä˜(±ÀüQkHÃ<‰€„"0ÈÑ?þÁÐŒU¯†˜«eÅ}Ü”t•TBRrzÉ!>bú£NÙªóžZ7¿ƒ‹<«ƒŒâPƒž‚J ­ Òž2çOA8­ŽKŒÊ'Š#;ƒSe[CǺ#/c—¼O¥éýÊA†zk„P){ê ø:×,œŽ„švc¤æ7AÑ9•†à #D5…°Ø6®ýôD«ʳÇÒZÈJ™kz—CÁ0H䑤³1H«b§1ºn§®+g¡6 5Ø*ÈHOö£§;9‘³‹ùÕ[£¬Cý~ÿN\.T‡Óˆx¬l#shð‡Âñ:œj=Ä‹§ƒ¨V[ª¾rA¶’ýkÑA#ê!¶H4”€[çwJ©×«,Ïböˆë,Èe_dñêFgKfLLj²d—ì€M©‰ÈJk®°ðÊbNÈ-¾ Úé¥ Rˆ¶9z“†è ¥‚´Ñ#ÚˆžÈùeáV:IU0‰S Ð!¿¤M=äBÁWØ?Øã³þÌ I°j÷—Ï_üË?ÿ¬͇d³ÆŽað䯊ΓX Ÿ=eE¯VBC7†<õ4fÁ ‰P‡HÉR*:™æ˜ØFP1j@—S‘8yá}µlfäÅ=íë$Nõ .YóL1ã¤KÝ(…OsR¤P½ú8çÒ<©LQžtRç"FÐÙã¢0«¢Á?Uà«-¦„ð‹¾.‚€'ARò ²”ž8<‚HØíêð5D£öš‚“ëIöE’¡+(~%¢GÍVŒ&®ÍIÑÏ_<‡Ûè›u7?ˆ›™Î’³²‚Ÿ†SEgl*úx¥H"Ï0ïÞñ²Ä³Ÿx“ßL5»6딊yOÇoÿôb"ú£g”GKYÛâ òP™ ^Ôåû/¾úÝ¿_œE.ïß]˜ßõ7¿{»ñ!¡ˆ—§'æ'W—¨rZ,ÓŒµ‡½ƒC_ÎìœúæPmšÆé(]ß¿é9Óqûæõ×l#žÜaíBöûŒ†”¯KPEŒ e›Ÿ0ê€ÊY»¯!cä_aF,q1» •ÎHJù‡Ee¬2“j•'SÙ˜„Z‚ÁfÂnЯ&|3+ƒ6ÝgÕM ûOm§ëMí„ÇfBËʯpGƒÚx«8²zöáÑQ–ÿªü1¸£™NEëï,1´£‰«N†ÚµxšE èQ‰,ÕÜzóq/ò]@:¸DýhUuO²DРl#AñdÆú¦WèÕ£[Á)p*¬‘ACìXgÑ’WYŠº´=Ší3­iƒOoß¿ýõ¯~µ¿·¿ñ·ó×ó¡ [¦–€fEµz­L¿8léÔˆB§UÚfYÁ’(†°Ç ÆT× •Px%G0ÃVÄ›×%'e5¬“F‘=«y½E3ƒŸ¹:–‘°CƒgéHL\0ÊÿÒø‡Ò BW¶²`BñÞÝ}þ‡ßÓ¥O?ùxãç?ÿi½û;S†ñ`*î;¾r_h:* nÿŒeÊ´2ôA¤:²Òñš{ä<,A’Eb(KÊ àÉw5¥Pª{ðËëˆôÇŒgªH"¦¸¸ÈivKeÑ)€¡»¦9¤O4ù:˦–…²[$´ïåÄ(ˆ1輊cMAÏ'Åš¶Œi¨»0Àž#ú*Vº¨âÁHŸ6ˆš8håNdPS;˜A5À°i’h‡Ð¦EÔøúƒÅñ*ƒ8cÒsmŒïk²áã)5ìl<x´C ¢†0X™g¤W;00BU-\ÎZy†=N´pÒÄÑ0D¢N¼^Ýr›Ò+8EôKµheE¼2:ÎR 8`‡!’J‡vŒ ;ƒ 0"tªÌá‘".E%â˜4o‰ÿÄÇêø’aÑÍÌ1G8²XM1·&[º#w3´Ç¾ƒãi(I Ô¨8ÈaYÃQm*g†çà,ø“#£R5Â`âMƒà ªôøF&1²¨š:¦ƒ!vm)IeòmCx#ê –ÒÏ–c™ )Èб”mƒê~Ùpa¤îY¹aù ¶Rª@ ^Ônp÷ Gùð0íN[¼ T8ªWáƒÁƧ]˜T^u@•øN ØÐ ‚$ω€±lŒMD# ½Y0X0cI'©–s昨y´K<ã}A+ ×AbÓ#¡ØA¼µ1ên ½8;ûÝoûòãO>úôOêd¯å‹Eˆ2*¤÷ ´“ÅUu3}hõ7£#–OÕ BȈéZøØP¥F¢è,6J5’™ˆ,t†øjK«£×±À åÔàÁmÔDªòx3àùÇ"/ã„€Ù‰{’¿]?9VB¢ îàpˉ¹c¿‘LçêÌdTdç,x6žñ¨06ëÐU¹­÷çç`ŠÎ©WESé´>ñw©Á·uCvµ:ú£ QøaŠž‰+"Œq‰ÂDØ+8§º‚ÅÈ•ÊmúŽÈþè<ž…læÝ…™ü…´š•u·çÇ¿ßxvîòUÒà¿RbmNúöÇÏ?G-” oïœaˆ.éGª“n™˜k8£P¹6É­ç$ •q¸ó£–Š ³ —VvK‡3~çhÓ{{þzýî|kÿÄ64gæ7¿ýׯNPã§›…/oâ9ñÒÕÅØ¨éäù NwvN?Ú98y°ßÚ¾@„¬Ëâê"šV:¼åvr¯1‡ÇA’Îíèv^Ì¥a·‡ÑÙÒöbl2þ4;‹ôY5T I¼œµõË tf¢Îúèc0¬î-Éh%Ÿî~8Æ”;Ãô 8‘ÄC>;;ûöDF|›Qñ¶uJ#[Ah!dOÀM±v˜ï’¾–Cu'+×ñäøà7£ign¬UT£çh Éâ'í…jär¥{E%§3â"$Í NñÛ6u@(fÐÂð¬ÜÇ­¢í=3:ÒPd–}±rÅDÂgš,+ÓZ2$é‰â,©®ß‹iÕɰBEírx…ö‹?~ñO?ñ‰åÆÏ~úc›v¦ã?dˆíë›4»zí4Žh7wà2²jc¹ÑÛ¢¸ÆÖ ðír òGGu”påµ­« n‰ÿ°'Èe£ã£c«ˆ$1*Hÿ´æÅQ¨=eº"#ÅåZfè¨J‡Ü–A?ÚüÆ _{]INNÓVXÊ…ýݳÃa쵸"°ÉŠ«kÚýѱÿ?e)I¶DJ©ˆ‚#¯°E•Rjw( ÒÏ¡¡n+P”<žNüþ‡¾ßèâÇùÅ;ÛŸLÎñ,=–!n3Þx‰ì¬ï´±P•s‘•Ê\é*b`Û}ýúþIóÓ¤±Ì=€C2]ó N6ßÛb‘‰}¥[ø%4ô‹oGÄ  òlT,Q+_ÖXo¼¥²É%4ú0ìhVDQª®-.µ ý„Ç®*Vòfqi&ç ýõµã½QÍÝÂdçžÒ"©ði‚m~;éWLI€Mä*©—Ì©3%ž_wç§ÎxçF;ýV:QT Öu¬3sôV'%SKÎ&ó.|BŸõ+ æ˜ãVÏ2Kpà¶ÌWÊ—°–62WãKe†ŠV4˜ŸÐ ~ ^‹·ÎnÉ¥_™«ä~‹Éºu6  ãAÙªI¢¥ºêéö(Xüo¿¢ƒƒí-¾pÝ@sèiZË¥¼îN‹½ˆ6ZÞ»šÖÁ]•Ä0–vÔ™Ã(Â󑳯R]>égà®ÉœF Û‡G®_Z¿¼¼@¼/Ár8}ÓÆÊ;Û´u6H2Ï­âEåéŒÕw¤™;Eµb«`š”$ÑF¤žðÓQ3@½ë«¯¾üþŸÿ€m¶gÄÀ°3&ó;T1Wr“xXã…ÜóG÷Ö·×-ê„ôzác+ЩC¨^ºBš’(4ݔǜ¹eºFhÊ:%Ën8=9Æ)ùÛˆ¦”m4œeªÏâr€Ê‘F±2Ó †¬=d¿FïâR‡~©ð˜×2 ´:EÓXl|ó~»—žžŸEг`84ëÝaÊoöñ‹×û»{Îã@šõëÏn¯4Öó2£ÌU{„LJÖ[Qbé èlL8(Ï\iñ’×(¦ßiYJ¥¸”t|Œ»1( ΫÞÄbX¶YøÁ ®£œÐŠÉj*¢•[[ûHRr~#Ö˜X™:$“ì†9û–vXªû;®sŒV§Ž¤½Û‚Œ³ÒæZX»Œ|Y¿3Ç˶šW­kôózÁF1Œªµêƒµ‡‡8Ù™áëLûtw¥«ŠUÔåk†‡Û­Ç›w¯ÿhûà}Ø.?óü“ýýìhñÍÍL²;ÁÞÙÿÚgƒ˜©ûÃÍýÛÏÝ^žYŒ[¾w׿ë?ÒÐ?þÛ!·"0ädÀc+‚*[„T1“±¸,9Z N‚€ÀÚãŸÁχÅZ²]}”O;y…°µ$‚bT…%åçU:lx‡MŠƒÅ5 9çm›ˆ,OJ†Y¡yµJéUP—Q%ðDŒRÀ° ”ºšïMÐ<ŠAJ¬`í)Å ;j IŠL)¯È†»ò‰n yÚc '·ää14‡Ž”Í«§×œÞîX‚-â.h@*LœÎ|QA²Ñ—‡uÍÁpH‘‰6^/zS b´É¤ˆyʪ½¨Ì«Ò:Œ…@΂,ª$WP°ii,Å!¤ á¹³y­íökY'­"ŽèàQ5ƒJ‘Buè2´Áç2FÊãsåÀ„ÊUð:j®J&£0Y1+û.Pn3áNÕ•fF? ND‰WzOªÉŒÜù•Ö‡¸&%RíŽ:Á2‚kIoÓ§„ÉžvŸ¤Ì«ÂE,;o&ç(3É ÓY)éÌäø‹~è-52CÏ’Ùu“×å-» $õ.I•îòNðº½È<¢N­vFìðyEK¤0ý/eÈ6„1U'lIäðîí[HD`V›Y,¸ 4žzºX˜YJ7(“a‡‡KC§s²ÑñÀðïm,®Õõ»ßüæøôtßYoÂOÓg‡î;‹D>‘ŒFìù*k±Ê2ì  $ÛawÒ#trÍ;ÝyIïÂ\ âÓßV½¦m%‘1x€ÉmªßQíꊩ2ÉeÍ`X04€i‰T¡8Ö($-¥NT¨­µ5–þgÉFۑȸãóîæêñίƒ[ÊÉÌò67Þ¿»8·ÇÇ™êû)Â''Çú¯×uçèÕÞÑs½¸AcZHUÎŽÞºãY¬ ws §Ó¶ËŒýä©‚³ûœ1Êÿü\ób‡;Ä È6°zÆúô³8JbÁÉ”Øwðüw¿ûÌÕ„`*…÷ôþLJ)˜©Ê¶ƒ, Aecò¯¿þòøäxwÇ—é a Y'‡yD-ô¼U!‰Z´™<'H`ÅX$ßß&ÆBµ(&ýˆG„€=' ïy]u“¡N!†‚ĈKMýS|ji)ŒŸËN(Hž ƒ“RŠåÔ9êš“$:«êÔå‰Â YnOgˆ rÅ£Ã5ø.£1?YVÈÈ¢$i#²éÞD-¡¬v§ HˆQs\±±DήV²Ð$$ÃG4Œùèˆzö5ê‘Üé¤[y#E&eZ*Ÿà•€Ò½¦‰€1ßêÒ F?ªFÖ€û,ب`« ŠuÊÅu¸¾¿]ð¢¾üê+úÂ$ðÞ¾þZÓÞ\ÓwôêZ–~µëü†4=‡äaóhs÷À'1™ˆq¸É'e-¤e¡?” åt\ó)T‘ñ(@FÕO±Ô"›g‹ÌIbë°ýëB$L’,†ÏôÎΈü—_~IëI \¸ûöu:òÆæû³÷–OON¥ç0Ïr;þÙùÅ{D1Tgéóðð˜ð£Â1Pll’ÈŠè”z²áHM3up—ÛFO/”Ϫ“âÙ¶#Â,C*ýQ\MOF üŒ‡vLṼd°‰Ëž^E„€Í`'–¹™Õÿˆ½"͇#4 ¾(h`3û-]Ñ iƒaµ‡ÞÒw†rB¿ÕÅœ|ɆµLY’É6ôÔ·Ï÷’ÎÙU´÷óŸB§U 1¤N·á +Æbz*¦N-EìÀÐ(_Å%wÑ*J–P@ ^i2üøC¬bºÈÿÊw)t4U.Öã·¿ýí(n•cúTŽ`ú”®vðxU|: jÉܨ½áÊ,&@Ad$KµU: çà!:G:Ÿôà-ª0ºê&1­±W8—íXø©H:„Éh!hi+CF~ÊÆ´)Ø ôD†ÅÈÓ Ç'Ç¡¤É*µgE‘Ñ$)›êæ í*1&^® WN®", ›JeI/Ú¸Új÷ à ¯F)#´&>ŠNnêÀl題/kn:•—ˆkˆ¬Yj5Ë×Ö6Rw5*UT†"©eéÞ±S¬“|UiˆX%ŒaûLƦ8Ñ©˜>_£@UÁ©rx!%­Fûç{ø8 u8mžH‡6Þ@WXM+!Tûp}Õùãi–ÈŠ±³L0zPt»²ãtIJ)®¦$ÐÑþ1%t€}mðKÞ"p¯5 –9D>È +rÂ#ã–‰Hl)frohSPbKÈLF‘B°È€‡EVªB3~ÁfNµp†B›tv7Â…é-ÆÀÏ/Þgˆl¥±æY´WšHÐmÉìKЇå:FS»®§½4@ÁB‰v€•6R±q±CN/ SHëÓŒtñ ƒÈgsýïÿj¬ùîw¿§bÄÔè&é K97Œ;ù›Zh&â—Ûš‘`µ w°ÊšW4¨½hi¼âµ¡­ú3ȱ6¯òS–—ß ®¤·PqÙa·Ã§¹°âObD¶ê:Ô5*¤¢QP¾ÖS9h5m§g£¡Y5U¤Ê33Ø`I¨²£‡^·UibHÎ=#«F ×k¤@2D`›OÈ=+„°Ð×Öp àà—®CÁ)d`N¥€µ2­‰@29ÑÊãd3’_ÊVA}Á:'V?“¡n¢ ºZ…É¡[^;ÞÕ„N:A:FܙޕÅã=°l*—ñcŒ n¬}ñâÅ"÷_äw”´Úþc¶•¹>¸{ðrö€ɲ©•3gí×aüí:üÁY-î[FÄ #úÃÆÞG›;ŽÏ úd>äzdHÙb/T”5¤-{Üöv]ígÌæßÐDâ‘(´XèéªAšµ¿p¬òÎ4âǰ›ýÇT¬J,Ë0Ö®äjŽï|ç;TBºZP IDATǧ^>ÏÔr¹=Õ7L&åF4ËÉÑôDAi?f%E]GG3çAÊÀM …õ|Q(î£6íÐàU–ç¼’Ú µ«Ž!EQƒrÅ%z¥^^E<© feÁ¯ñYfDXBªNÀú&¨,·†¨²eK2ûªX-ަ`J‡ÈÈL›æXX;8:Õî¹ âK+ >Ðà >ëa¸Æ EÂK«Ál&Ï•CKÜÆO~ò·X¢y2ÒÂgÖÁΛaEŸR•*ÔÖ±PcÅ›T K+ C†(ªÐ¬ˆÅàô;V#ž}ÎV¶OE!³/¬«0&$I·•EÆgŸ}æÀl¶ãÞ¾}»ð!^wW4ÐT$¿¯°‰ß¨ÒyØòB¹Š\—¿"γœ8JK«üÎàôkíÊ cÿàÈFdä¿î'Àý᤻ê_ìÍ&¦,çŸüÐO”ÖELek÷ a\Fî|½“àê•Nb5Gµ½ýx_ëÜÜæø9¿Ž RDh»d.Jàõ,`ÌïÀ",/—±8¢g"–ƒf¬Tü6Çê§ÝŸ?}²V¾ã¼„O´]¹nãx˄݆yúeµ4Â.‘äiöëh×2l䯮y,z<§‰ÅA¶cÁž€Á7=ó´Ñ¯:Sœ6ô÷š€ ¤D¼£ÆX›/š#®¢Œx­Øð%Òb j‹£¥qðýN¬DSÂKìv{|ƒm*SŠB là§ µš)(‡æpXJ˜]¹º/yÁÉrÊUÐ6Ó¼ñãÿ 8òDîбÆRFkÁ©˜&!JI‰«ªTú—¬\ê‹™mó”U"HŸS–6xâ<0¹Óü^'E*⤗·L)€¹;˜†SW ­§\AóGâÌ\A³‘~“É¢NFj°™j«Áè¯oIà™ÚE*É °­íMŒÍq˜°Âü”ÒFZ6va—¦-„–å&†}aPyŠCdîYðèÿJâÁ`Íz2Úä GKbô±üvº´2iÃ>àÚA¥ˆ0¨8::!#?@0Ë…a`¤ÈJ¸cJÒ3¨Uw­xIV‰µ“ãÔG¥Žû9”ƒkÚ@˜YW»¢85%ÛÔÞæ`>Tƒ,¼¡Vc};¤²¶¦¬)kŸÎÀ '0…²"É\tR„ï‚r½Ž X\ŠqË7ݘHò+E{ÈùÓ:Ñá6$§,Ã÷hNÓ³‹Ÿ¹‰h6Á q(M-9ú ål»÷(§ƒKDÚŠ|±3ƒ0+3Â(`I§š¯ŒOòR2°yñ$éòZºØ™oýAOÇÏ×Èí¥°h@Œè¨šêxNC7 _–£6=tˆ)c0G8âè¤8G¶\Ã>Ëm¯97 ín°$ÉÁùpïîfíítŽÉ1“=£8áÀ&€5S¥Wí߸òâ|D’8Kœv=<øÚæÅóç¿þÕ¿}ÿ?¤,Z tí4< ­¬ q ›…É㨷ð$d•Çd®¶M°$&ý&Š$%–t¦eýJ¢$M“M¥4 o¼Í¸?é¤å(Oå2•¨J«]Öð+]ŸQ aRPëI’“ËnkG– ¿=âÇì܈í§lbN/ͤêØZ9ÁœSÂÁæ©ÔSõÄžªØi‚ÒCZTa^<ç¸Oe ¿Uõ`»8Á䢟Ǡqõ)Za¤1\Çz·}aVÐsE2X¦Òk &Õ‰FYguÌ,z2Ù[•ÃoÁFÇ·€”åŸHãÑ¡(nXµ1ƒCŸ3ê2|¹Û}.%‚ ,?zÓ/Æ`ðç ’rè1S²»Û|Öè›ëúnB'OŸ¿PÌE> ¶Ëš#ê×Ìœó'úHŽ“çˆcº¾Ÿ=Xß::y±süò¥ðˆQÑ’ëgä™S‰^Q®ÆYï,…Ê/7 XßD°æ×@’ù@ —þÕÞg«ôÊû0ë—ÎÏP1Ì´Û„„®˜ÙN›¢‡„!$[N™ÇÂ)_õ0Ÿé K5G&d P¡.ÿLAÀÈVJ®xÊ/1„_)‚¾&°ÀT*éƒ4 ü3éž²AvR æ–ã«èòh r±þD¸£­èwšUÏÑ|ºuÿ¨zªn½aal¤(†¯Zò4˜)"_Ÿ×úvr”?’!4ÙÂñÂlùGã)µA†K"é„2 Xçé`X`"¦*0rÕJ¦”BLÆU("7M[S"Õˆ~§mÀ ]‘©½„ÅnN:0*Õ)E¢‘ÞjÕ=¯ªZ$”Bx0?…C‡ªKvXV×ЩGƒj:ê `-.ËXSRIRYƒç$ÎÓ«\S×Sn±I³vU£Îa+=SwM+ U#4ÀS] kQÕÈÊ 6Ø“q¥0Œ@Œ ‰¨½7Ó/ØT©6]±GD¥+(.(e4W›‚¾édúteðdF¤Èƒ“Ã1RRPD ­‚6YäÒ´GER;ª•õFV(äª%aªòIûVVR…§±À¤€ŸN!; ýÉg”Ã^n'Ì{ø¦tAº.§W¼Bå!Y‘æf¶¡‘Ïa!¶Éb1Â2sÊêÞ‘]G>˜ì À‰û‘éϵóñZª¹¿§GÝw-fñJýòý‡éÏ騥$V¦NŒÁ@…q9ä0»)»ù+mgÏí˜øÖЙþ{çmïoÛ8>>Íe…‹Ü¶Ü@v1ö-¨lφßÙ›ê4ÑE1P3²ìP‰cÇ Tš/ÈcŽ\T¦¯Üûe¡ü )€³DbWpz ff‰+Æa‹«åÝäTà(OHÊGZy )Y ‹§›¦eÆŒÄÎdvuýox/ûÚ§µ¥¬ñL3Ê õkú§šÁ&ox™tíŽ ZYåÀ‹„;I–Wõ‡ZóðHç_¾záT`ö 0'JdTÉÂÀÖöž#gô`{Ç|áâé”G/>Ñ-×>\=ÛÙ»;Ë æü‘mß«î¾üà7§Üò¾–=òäöÚøô­2ýqỾå¦*?§ÃIcnÙÅnûÚû‚9š—ÍCxºOÄWJ†Ð°}~uÉ—ˆl¼‹¸µA\‹¾|ùR‹à ³Zµö@/}0Þ N-XØ=Tdo7?–¬ûf&µÚòèĤDk‘z§ª5( oVæ?\†HÈ%BòÔU†\%Š‹(nãTdZÄó©¥ &ÛÔ®vðŠeÈÎl˘òC ž+Œ§šâe„AúT1U‹ %Uµ©:îTçBÂó*Ðu¾wº‘R‰LG£¤G7”“5d—vùß4°Ìu{p-†e%)ímKÒvÕ{M†¼Ÿÿì'P›-…¾Ú;ýÙ†Î=,zìlsPÐì5èIÉþŽsw@PS‹ŽŒ¤³$Kn§­a/«U+Õ)Ž>¨0ÕÊè¥w”ŒºI$pÄ=]$꧈’@4¤FLp¦&uD¨üÜ/EtB)À<W»DÕ)EÏПÉI>¯ƒ¤.lmˆ<òB¼ xdõ¾ÖY®ÂžÊpx®YúV^Â×ÜåCrkòfH9’·b¡‘Š'=+ª_¥6kžZaRd†Q»“c-]Ú(¡ÂG§È0Yµl¼Ź©èLqt.]¨4‡×ÐRöç£ ßŸµ6é‚BX •zC˜?ÔjF«=µ,ëk 5/tѾ5®:˜A;˜ç©v//=gdñÞ¾~OX‡¥5!8+)™oá»Cm” 1o_b êRè¼D˦D¼îß}E0ª ãqYiP¯Jåóö,hö„_6|O·f’ì¨ÇÎîæ˜Ù.Cºá$ËFëùýãì¢.˜v>¾£N~UæÖ]W ÓU]3_Bæ»°Ìr<­Ð¨K<”ãpÛÝÉcþúòÝ»¯~ÿþÍçv!x`¡9Æ"‹OÈPÖv²‚ä ƒÐIC§4+3Lz“,wuÙŒÐLñ50=ŠôÒRE›@ÞÝŸ,.Ê­œýÖPWMúµ æƒ9Üßg¥¹¢3á†w7/××Íñ}‡ÏGg›)\BHôÞQÜsZ¹›ÀúXL­Ë Ü™°~¦”Nø.÷ðÿá÷8ðs²§/è0¯5‚D°_eC4ŽÞãþÖ»4A£é§Ùatž/îNkÎÈO>^Æ~¹œRVlV‰pȶ¨Äï\^€¡™!«,òÄ3K9I†N¯è×ăœ†©Ë‹*8p-•£š¼sª~Û]À˜+¨cêÖLÍ UpjA£¡*@AOé­‹êÆ0F•;:¶´©¬Î‚øÌT¹¶Ú¿ÿéÏ$3cb¤Vƒ`¬Ç3·å¾»¶q¦ˆQ‚¶_%È!ËÆÜQšœ?¶°™îDŽP“‚ùÈÝ"Ó2œ”Í<öö³*DôíĤ_ÊdÙ ¥Ojæ¸;——çz£¬`ôpÏÃÍ[g¤ùò˜îÌs²ahØf­È1ØxEè.v¬X*¨øŽ¥[Ì„ºó§§y¨0 ©Ñ 6#Wˆ_"‰&aІH] eùk”5U³-MÔ«sÕ–®…:b“S.¾«µÑØá™H±GKéÐf§¾Õ_ßê9ÝxÊv…꾜Íu%?BÍ>Žz­$”¾->0"xÁ‚ï~ɾí‚þevˆHÅ“d4D°Ôm¯³E¥$)Y£V¦"øíßæ.‡ÄùšñEÌ•­¾orh¬«§G¾&»¾1ìqÖx.àNÌimëD#Ó,X "OÍ7³ÏüÄ„›Tm5^¿mÄ-‚ÝeN&^: »Ï:š^'õX)ÔÑÓ@E1-ìÛÔªº\t²>%•„MÁŠ(^ ¨9“Þrtx|q~aƒ”›žž¾05ÖÍtÙðX¢ÍÅÍC›f& • åè÷1^ïîá>×Õåþ!ŽtD¤¿¯™åæç•ý¢4Eê‚}¶­µíÇ›ŽvßÞ\>,Þ^ýû7¿ùåÝâ‹õµóë×_ï¿xØ==[¸¥Â–Œ‘^goc’0Ll r5²>`Cƒ`‡n#Õâ?b1¥§ØGÈ—›¾h ¯¬A¼º¤¹}>ŸÄ—Ö0Õs#ŒŒ(åˉበÀ™l®[òY¥O}]®íKϵÅy®Ë§*ERDÄÚO¿ð)Výé׿åI<øõýÝ~ ñiËRëwîF·*èÏŽÑ#7bg}·¾¤ÚÛÙùí¯>ûøÕ'Ì€>’©(‹áò3¢¸»ß–H—oÙ¢M犩\#*Üæ8?‚6Ö6/Ï/‡Ûë^­'­-.¯¢ý…û˜Jè#ÐXí¬Þ¸45»«”“‰£YöÑÜi‚ÓÊ ©B·Šg3Mùp4LRÀ8ôÐÀoCo;qfž´‘A ÅÓ“s{V4íñFÌ•7rðÙ¾áG«5’Ͳ:Ê4V'áÅ^-Ìøsý ™bµÀ‰€ÁN/¦ÈÑ4ÈJç—?)w!.> CÖ±‘Òt>¥ Ñ˼j!–™­°ƒ‰H$±‹„¦“B«ápþØN‘\ý8K¿ù>!uR0z‚ì`QýÐv]!¦= ‹æ»Z8SHyëØ°Ú 1¹Ýw›V(ÂXãå£`ˆµ1´›a+×#ùŽ8?¸§2«»ˆÑ³£gUcE´*#"¼Þð*r¦ÊZ“¸áN#{k6œùF±Ù˜ûø~ÜÝ^GÐˉ2Œ|ðçg&H´‹ÍÄ—ÇRÑúæîÞÑéÕíÃáé«ÃËËþbDÛ0+}öâyu ›Š|\&Êohj¤:ˆ¬\f>(4A9ëo*Br*_œâ¥©9u:ý¥3Éúº¾i•%$pr|¬ÛË%R|Bè?›€ZX½Z‚ecßü^8ÉŸâ Þ-÷¨¾ÿŠdO|]ȰKáƒGC–¼ î ”ÈT1M”wu‰P³uD’’a·0ÚÚŽVÎê²TzZVÂ)_'Ëÿí Y#aöÎ<8 cÖµ8µ>Ìp¡Rã¬J©gš4#Rœ3µŒc@›‘H†0û,5<üUºüà Wfˆè¬g¦†/ØÑwJ¡Þ8RB"É #Ý€š¹^XëÚŠÝæïrÚ–ÁIgjÌȲñóŸþœÍå9+ü¢,Ùeç /˜Í,‡Lƒ‰:ˆL¥ÃfnÀä² `x ÝnÿèbÇÝ "k˜ÂSƒRr›•wm6…'¹\×øÖ9~’ùyÚhôFm—Ýì½Ï=ÄûÔEõÎܨbÊÕ8jQ¯Ò‚,(”T¤^¹åefEF¦`“8Uj6(ˆÒDéÕ4fš*²ŒkU2f p\aŠ+ÆõNvdë“õ"Ͼƴ$5‹4 âŠ×&²ÄáD3qŠ È—$˄ëN¢%5‰â”#˜!TqU¼•†¤AE8âXPº³G>À†Ïbbi*²M¢çäŽî»ÛýMvìÉ‚¶R¬$‚*§ŠêıS×ÐÉp ë+UQ¥T°š$jOHˆyQþÊ 1$íO#«®än™%¥Óø´¬T¥ ¨P6«¶cÈ›>ψ{gW!ñŠ.kŸâ ¶Ëeö¹ÚS…¦†°BÕ~°,ötÈÎ’Ò]>“zÆkX\.nî¯uüvªþø«³/þÏÎæ%Mr ÄÅ4_~ñÅéþÑéáé­_ݼq³Ëú›ºôR[¦¼Ü8Ó:N$¬ òÄ_U¢{…œ"C¶Žá™Ø„̵ãQdÅbë˜2ÎMÒ®]¨†b"b®“«õ¦;ê‘*‰{Ê?vÌq͵m‘*! íåÜ›¦Ÿ&ö¬.hÏ3zÑ@g Õ(ô†ÔID†¦¡;RcUl79>’¯ü´¾Îë$V˜í¤Ë«þ뉃§ l˜Qã`¦M¤ØÁ‹÷©nE^àÅ)vúêk˜_QHŠ¡¥+UXн ×L¬®jãcHr£Æ‘YCP…ê%ƒZA<›ÂÜ*™Ø°êÀìô#µÃ³jŒ2"»®< ”èIÖ¬µê(ÑÚÚûwgi+ƒY>¤ÈöÅ… /wcîìØù2òû9‘þÖl8jÈi'«×hè:Û6ù1TÆ›COOYrN›Æ~ښϒ’Úù¬”…qãîÙ¬#¢t&~·YDÄP6|œRŸƒ¿ªÎj´Ê|2_¹âh²ð+ÀŒHrðL¤$`Dè âd•†é™*òt¹pP=.fŽçú‘ÇÈÖgñA¬âúøÕt“ò³?¦ —‹…Ÿ¶4z}ôñ'†ý+×eåN`¸#UÔâ»IU"³B)‚^ô²<ÕX%)"[bçÞÑÔ†`2ªv‰eè’E ud³ìqé¼P€„‡ ô©ˆb?^#6%òC‚!ªb’jQs— kµéàâiˆê°y²²0êøpÇ5ÊùÎ8ýª4` @D¦ö‚gDFk˜5M’ˆ'ªôf!œ!Cž=H¤ ò³2úßÿê/mtXüÌöYoÚ¤EŠÚbF#Y|éKo—‚§]¡Ãª§€Õã!ÌgUs.MÈ]^x@b¨›#„!²†p¨i(ò¥;‰{E”EŒ“IØ“8‚PHuicææ†U_Yul}c²? ÉT:Á¦lŠ÷©y¤À9éŠSDŠ|qõO\"˜¡G|^<\ CwRDJ†–ǃÂx%“Á[´JI”B¡­¦RµäM %`|P÷’—B)°Ùor’&“ý²†"¹²{Ônƒ¥ Sž˜‘õ€ê(¥äˆ 6~ϧ‚ƒGb)/õuFùÀãKúCÛ*M8|QÖÌQV&CâÔEÇЋ˜¥ˆ(#QuÎ+xj,8Kr- ×:â-SËÀôÄÁKg"Àx¼JÉí2™A®`†/À Å»ç/jDâ”d”‚VKÉýv-R¼*ÈÉ@dc´ª®ÖQ¢ %]½JëáN¼¢×²Š—Ì÷²Ô¿vãQ¿Kvæ:šÓÝgŸÿÛ/>œ~uöÖÝ…Jœm&nËðæÂÏ¡ìÙ’¸¿¹w·«Õ m;¼é øPñ#mVò¬¨1>±ƒO^ÎßpïÒ:Jd ðfvT¿°dk*öX#–ŽÇ,ÅŸuÌ“mÊNqD› ì={vyaõ4Ž~ÕL`é}¦¯‰Çé ^ÄèWÕîü~¹ºÚ/Ú¦à)* ”ífÙÄ:ßù»·æÃŸÿás—r¼xñ‘ZõôÖ7äÛœ êLßã5ö⌌Í8ƒ—ëë» •Ýì«?+´¢…Ò5âüáýv·0›…û5'k=D\¹ƒÙÉüÿ¨º—&Û’ìNèñ>'Î9ñºq_ù¨T¥„°  >c&´amÍ » µI´0cÒ„!SFL0¬˜ ¡URI%QY•ª¬Ì¼Ïxž÷3"øý—ǽ-vÝ:¹Ã·o÷åëíË—ûŽ ö]Çp¤å)&Wz©° T…´ ð£ÊŠ´‡à¶T»vf®ö ú™ñšNX5ƒª-’4Øô¨80îjüŒ´—òªrœ R°,}BÆUpïFSD[›ÕlÎÌ4L÷Ñ¥aqÞ˜YÐèe€A«MÈT Ét„øˆ«3Í„î5¥…´fVœ¥üàÜ¥$ ×Ÿê”¦ œB•.„zZQí@ʲ‘°±çqìÒI ¦³ì­>‡BFD?øíõ,XGƒéË#}ÆÆQ—‚œrà•<*×­'D! n»ŸOFB¾‰únfÒU Sdr_­Ùo¡„+ÊãD¼OSû¿xqsû"NõÉ&j¨ºaŽr¾ IDAT` ¨ê»wÛîƒ=ä(¥ /+Z"‡ ÅQ Á¥*àÈ̹*uäÔå=É IB¨EOÅæ"X"¬$П0Ü«ùÖµ|ö„ߘ­…ŽÅRÁ«:‹Ž1ê˜ È×#8]^oÚ8nIÔy®‚(SD,§ÐÕJ‰d­Ž{óëOö´æ^¡ËM«IäÓ]MÛªc¤c. J€d þ,ã¾jü¶Öðž–hhª‰ºãPñŒÝàœ„ŒŒÆõŸ8y$MiµÜÀÈã^C@ŠÅ(d{‘¶Þ³ã]Ô4uôK˜ €1å(Üxä2íÛýÿÎÀ¨!aûÁñ ÷²xYXÆÛÍu0ñ’ÐóNúˆ¥¦!L0Òå•Mõ È\æ6§B£~C·ðø¨¼}Q芖ÑbAí´§Mzû³5Hoa†»nî°šÿE –¡°B¶Aµwrÿ Dð¨àÞÓº $zñÛ€qŸvŠät&ê›0òV­°®ÊÓsDï¶fý*ôk°Zvƒl ºˆbûÕšKËšR!¾{­ÅgQº½n½L3Ãx±^Ê[ÚÁ‹³[GÚQÁTO%ê€ ðoòß*x¥ÕoÀ»WîCöÈú.M¹ÂS:…Rt/ù3(lcô4ˆ*4ª¡¦ñêÑ͇^´óˆáÖ¬_h¦/h`î Rè!`XW’zl¼ö–§÷Œ½Y”д.•½<a ¶ÜUOƒ2E`kͯ¦üÖ«D|3'«lžeÿÚ‡apÚí ÆjòMʾz¤#O59ìÏ€%jÃú‡›Hu~r4°´·¾Üüb÷a~z|Úí>IúÖrv°Õ%o _Zˆ›\Ö’ëéÃÖ >>a™Æð¶"°9ž€…S3“"¿X9ª+û ÊÁ2_ÿ~¬ræ;}1èÇqöhB™O«ºZÀî(ëZ66j8–Šl¡§C’º~7ÀÀÅ%”p«)®v'',CœjE™t€³Š”•Á'€ÇJ`ü^Áœ:õñqƒÕbÆ¡„Æñdúå¯ýºïZÒn¬ Ð*ŒŠ„P˜R2Òò!,ö‚|8ÞRkœÍƒ©t"æôèI”…ˆ/-L•A3F*æWe.T2CÛ0{Iœs+Äòpvþíq<“`#I”V•N‚Þ¢{ã5ýå>býÈh?ìi²„A¡ñ?«,¥Qï…ý™×™«rãZùã/xìgCî:•Ôé¥t÷™èê,ä ›btÃ@+2`!o×A!›4|©ˆBR—ñfPtÌÔ)G|DÃ3÷íJo®ôY‚Ot!ÆQz&ÆùLbùVÌÄÁ¼Ñ᫨PúÊÛ0íÞë÷ý)œ­kMA {è?å`ëÊ‘Ô}ã*7>÷W"¬ ͽþ…6 ,ÒŠ‡¹ÈŠèrîÓ'ë7[wóéðÒB"à¶–£Û÷ûj­^ßßMÇC˜Sß*ar“ã]o‘E‹$.?Ý“$ ³|T’ŽÃqŒqš!ÏGSDNÈ­–Y¨BðQnÜy¡ÍìRƒ0æOïzq4ZÍóºÕ óTÔÂr–«ç/ž»d, ©ZFQ•ÈRÎÆ” Ùƒ¿€4(ÚF*Mì>Äü|7™^ºÐ h‹à‘Ò 0NC¼Õmã £Wƒßå‘«°OÈÓV­=õ§ x®FOÛ£¼¿D«ê(tÅU £ÌXÜ«Õpâõö§^ònÓ)¥ÕÓJ]ÕRxÒSõT®Heë$CØPø±¦÷Ü«ïÆ3C>j>¶POå G#8ä2QS°<Hœ|<ÕÐ"­Æ{IS®Ýßýí¿‡A«O`âòêâÕ«ï}LJ§P)J—ufHTT€*>®#²±ú`äì‰û(͸& Ÿ€Ÿ|$@Cœ_¤ŒJ­‘Œw’[/ê¨ð££ ¯+ V„C‰šú ìõÔ¯u˜phª*'£Ð”F [\⾪Uœ+Tô§ßüQãOõÝ‚á„kºé×½ªW‘[ÀhSe•üÙÆ¢©ÖH{êÏVGµT¨:ñÀ”ƒÂ#¬ê§U󬂠&2iu9ïB¢\™8µÙ¾µ 0}…:Ešj9Ck6@êÔŸF&< mwÝ¡ŒvKÕj¡Uƒ§­ššhR­\_ªµÑµ–º”ùS¹Wb¡‹gÜû/5ŠÓ¢¢¼*˜«L#ÈÖ£¾ünâ”d.E‰'h‹ì §hJ@ØÀóÛn´ã&p!üÖ4ª)süÈ`æ³íiBk*¯å*Þ(æ„s”ŒÒ¾«Uò _ðÀÆP4ÔSmf„„ì¢uùU ª’ÃÐÌÊ‚twIð‡,ÌîÝøúÝí÷?ß,®FÃËX°Þ¹í´¤O˜ïo¶çËûîÉ%sùö;¹¿>({·Ûs<‹!]]ªñðg2f²VÒѸ,SÝ7¥öÇ““@ï\±¬Â—E;|Xð"ñYy„N1ž¬Äa¿®8T‰X'ѺÖŒë‘@pÂ5…»Œ”? ßà-l~P¹aOy^¯]ÉM ü©<<™°šÒÕ£¶ +ÐÑë7¯¬£þÆoü«8ØT[ ù%Kå¬5–&²ù¨Ýê4ù¦*40†£ÆŠÈüaß C`æÍ š!¥w9+M7d 6·Ã(0OT1¨ –€­ÛÜÀ‰ TjþÇ ÇA#Eq5(ÃÌC ÊHÿæxãÜè©®6X‚ÆrP /THW>¡(0Cï%<£¼µ¹ Š<*|6L>vп³Á¨MiD?~Pë‘%ôØè^ƒËÈùÓ!€Õ®ýÀ˶¶$qj>ÿ_Vàkº¤¦HCFžF€@½íaÅÕ讔ŒI|=…p+Ôù,z)–ŒÜÕ„%Zä˜BßÞ\aÂd0Õê ³R̉”ú¢Üh3`$Õ²ÎÑÆ„ Õ‘óÍŠÆöλ÷o,b¨éø¶ƒaf7›éÍÖjróö[Ÿ¡»|ÿj6¼¸_ÏÖ«áz>Þ¥uV3¿ÓÑõ‰»õb2º]ͧ–±}'RÙq¦CâjRåÛÝ1–*Vä†^zŠnq4ŒœÔI¥P‘‘•¹1ºFJÈQT¹…Ï Jeg}yT&œÑK仵ãéh8äðSƒÈÇߺ¹º2_ò­ê¬rFÃk¦P¡/çJ¦fM¤1ªãñP4¢wØK¢cÉœòµiç¹KCLâ©.,žbÝ7T¨0¸¦¬axÀS~¤Gå¸'^¥‚ѹ¼âj7 ݫܞ¢WݧÄà=Râ×›°Õ£÷/W{¢}¿[_ðcN‚ +Ã$7¼yKÌ-Ûj?M˜i”Õ«ÉŽ™SlGë´Ø8äsã•Ô¯¸rëKŒÑ'Ëfs[a ¥äÝœJ±÷+éËd$0€ô*»vÿîßþ÷ÎÎNMn®oo¯®G··OΟ8eˆ4d;û+@ ÚXŸnØX¡&` ¿^mæ‘Ì`+«¾Uh#q“A>Še†l$*ÀšvÒrÃo »*ã¿x©érc íùÉõJ)Ðíð÷è«Úáìu•[³mí]cñºNaRIëE“þ•ØÃ²1xÒ Tm¼ºÖT4²ÂbO›Ö\í)Ȉ\ÉϾTã¹QK×î ¼”ÔM9+xQ¡ŽPËåÞ0á5 ËzŧCãÝÀ¼[#…–Ä-Ü4hq¼wU E*ИÊÁs$T¨ãò¨^gÊÒ²úJôÞêV±áÖ+ÙŒ£()r35u™ÕÒ›F S êyªJûoÌQ]ÞR?ÈÄìñËWçQ¯~Tíƒjª£íÔ""* z¹‰_ïz ž‹ ‘šùÏ£ôF( ÷¦ (~Ë/H—KaûU$÷*€×1¥ÝÃ"l{W³*¤Ûr€Ý:ªªƒ˜Ü4áÞñÈ8]•¦†Ñè¿(ãÊ1ʇ;÷·ß]¾þú`ûÖž®£}ãû>ß!°afw£{ß4hì<ô»û¹½g}Yö€%‡¦¬Æž9O–C&¡fêØüq0´†YÈD2YÉÜÚ`“Ø=K|2êúHŽaj'Þ§¶*×òù­ù`!`KÐ.¡ô—zú¢ J«ùœÑ"9º‹ZÏQI¹À,Õ¯úîØ"|âQc°¥$uYÇÉMJ) ×>“"]˜V±qëÙË—£áؼ;®díœÐ”F˜·Šá%\H`D €7„bÄ"»µY s±ö a¸3 èðÒäÌPLì²ëâM<÷"<¬îx·9|Uâ»—¹• ®²æäKkYà^”hÚ¿ÌF ž{Ûd£s§ñæ…@²&ÂTž÷е"¹nüš:‡yôòÁV)Tb~¤x8Ý[í)õU4Ò¼èrcÈP—…SžNÙH… {©‘Èh ðª jªÌ˜­E@<°]UøX¹Ð¾®ñ[´„§ '†äyP ØŽ‹\^òJGbé­å2‰¢y=Ú÷\Se}‘d¤utt,É]“qêq5Úú~èµµå4M 3g¼†éð¦OÞæÃÑÅ«‡Õøöâmò­—3* ˆ“Ñuÿ°3Ý2" ½ƒíË‹·üèÛá|¦ãAaâò›R!ÉRÊÖÅl…íùΦ‚òøÈØnøïN©+­«»†8q3…ÉÇOXW;zÞÜžË@Ïöd4ÀE˜›H2S½L3˜<ÒJê‹a…a‹ƒIJëõæùLܽÏãŒGã““S^)šB·±Ìm²ú–Ý«³Y•í^dž[oF´èÛà×{´Y¸­cÂ\mõ(„ö®Âõ•XknZ¹šíÒ,G'Ìóh£St\Ý¥e7Þu£~c¶¦+@Ø ?þÂ:0‰Kâ%5ÃPAÕ’¦ý?œ¯?ÈT_MWxnàQ±wC Ç&ÛX©ëˆ¹í¡gÎ|ž;‡[k†h7‰ÜÍðwþ6zàW²­êèÉù)ç—FíYž€¦r åú´E«Ä™²ÿ¦.p«®SƒgðÀª'èR„äM´Tð¢ß ïdVš±¹´ú Ç¥¼Ñè!"M‚µÃlõχdq$ŠiÁ…u¨÷°yõ¥åj,ÊÅ¥gÐzÔ`öT#­}èm… ØS^ò™^Û}{=Ö¢\ÔáGP«–Ñ·á¡V¡„%mø¿€áF×Ú¬?Û/û+JÈ#ýFØJ·WÜkñÐ-^aefhJ<Ýo á‘À­ëÖE F‘oûÓ¯ûŒS`xt"Í!0¤) ý~š.°¦_¼ÕZð´Jb6¼AŽ?U 1ÀìòH ÊUVÎìÐê躚mқ؈’ð}±–G¸Î¯¨Ëä¾D•תbœàÌB§©½4biÕÓÖ¯WÜ·§î[#d¤®æ>†ÍTP¿p–sï×@PÌ#@‚NR«ªÐ¸¥aIÿÊ=ÖH]îà+k‹>ÚÄÀÄ*(—‘Bë&̲ÌF×ã«ïNz÷óÕ\Z½é‚ÑYØbEÔ^ú¨³höö޾eaû䜨÷»{;Ý“±}=ɲ~Ž( þµ÷ˆxÛég·Ÿ•¯¬àÙ_ãC¿I1Mr¾LDBd²o§Xo‚Š{µäqrÖÒçy©AnŒñÜD±WDá Ì©À rlÁ§w4"UȽǮ §¤z1¤Ö4Z7A úã@5U@n¢ ÖŒ.óÅ´Õ&‡MÏV«þÑIAºVqkìRj?BäÜÎ8ÀÈ·z ›£k j˜;íf2…îÛ3s` °ŸZ0«1€K\¾¸-{‰'s+iV‰OÅ ß•çÖ6Ú•+cMÏšÒ@ëªÝCeÌT!Y„۠臭`^§yË6Œ¼…¡¡´@\® Ûƒ%x+ûÀêÒÜ6&lO#wá·¯L–’iH†L8T-|Q—øYäÂsæiþ,Ï&AÌSÔ šŒóxO‰‰r2‡â3š*•¾mÍê§éÏ@UòhŒÆ/.¢­ÕšD§‹œ¤“–€§E€¼ øžž=Ñ¿thª„ ‡·öP×Ã(7üd'§'­¸5Áã7ÉJîð$°ôf¹pöOŸ'±œ¼ýæg÷‹áôöòg_ýôôüliËs"‘6æs8|%äïöEF׳ћ7oC§Ðœžœ9«‰ï1>Ž{ÿøX¾ü~×Ñ`C–X7Œ þÐ(Q·¸dzáĽ1¢Kƒ°êOuZ6Œ©n³Å%oµK¿´Ìd6¡Ð¨©œƒ–è W£³ô^ÌÞq×§Ÿ~ªeÈqbDéQ;¨¶ó§OHà·2ùE:½«hýºxZ`“KØ^ô ˜ffâŠ>x¼èt£ OP¶^©ÆK–ŠW½Ø#¯¥~±™_0à7 Ðü{3>7:ˆx¦‡°U1Ò#E´íkMjh¼¬\¶.„U_Ù@ci¸=BYnÍQ©Y5Wˆ ®Ý¿ÿwÿ}Þ®•WNÄžœ0áíŽx]§gOà·ùETòâ×D* 7 F”Ã^SÕL÷+,AQB  S³h“a|p°”h÷hMy#‰_å€ó¨°ôQ~º ¶EÎè)¨À¨UÁb¼¿ð^Òˆô4ÑÑyÖ¿¢`VÞ¿X;ŠuØZnš†`UÂÊ‘ Å~=jó3 Û#lÚê'—aQ×9·F5b‰.ÀsëÅ[¢âCzÝHýºÀÙz1t£óg•ùoäÐXLôèòŠN¢<‚œ†«pÛÃC·ˆbÒ‹šzÔ»?Õ¯Bg2eSLœJ§3ÈÇ̼ (({™Ù§j•úæéè較RmøÐ¦{ï«Ù ~5ZèÊp³Ù$ÂZœ.¿Ç“øg.-c8¹J´ ߆¬ÚÁS0“yxC¥ô°ó®{Z‰¾À íPäEæ'Ô§è°¢î - `@‰pNø«x)c.ážN›šLá;D&ÝC³XN¿ C‚N¾‹5©l¶*ÐZËÚ3¹k¸ªfÂPõ4¤ŒÕ®„!&¼ œÖs…‹Œ ‡†¡ TvNÍGwóëÝ»ÉzÏ&ÁÑáþzx}±oÑa[ÊÃõðsÜžœÉñ±ë{ǽ£áûËûî1 µf–*zN ”–ädr;6P¸Õþ¦’BL²› –ú@U Jp ח†Á•„ 2´ì<,-®Exk8Ó˜hoš ÐÝ5Ôù3J&ùzœÇ"`¤áä%wGïQ…W­)zk‰mïtm°0ëËw? GJåÈ­Ñ}Ò âÙ^ï9áåýÅÕà(Aw;Ë®á@|àH4ÜÈA¯p… ¢¬fÄSÿB†Øf<|b,ÆI¡h‰I) b3Û±ò€€ºc„X>¹/”LƉ+!¦ZP»1–ɻּë_ÐUH£š±PcxÄcP‡á›Á.|úiROT¹ð”†ã·ý‰ÁE1 *46hÍâœcYÑåb0áŸÌ«}¥pNZåö«M8°?†…µ &DåfªÃ¢ÁM¢â°qYÕ¼kDÆWÊ]ª5t£Y52”Õz–æÃ{mâí þ‚!ìafÑàaVܰ°MW°pzQ™†!t2¸¯¯/?ÿü³›ë!§JyˆÝZ SÕ…îÜ_u“HðÁÎVÿ›¯~ºžÞöö·ONúf‡Ç';Ýþ““ó³'OãÊ;…n¿ƒÁ¨É«Ùm¯?°ttz†TãÉŒXþPT14® €ìò]mðÏæ$«=+Í¥ºΗsÚÏ’¢@ŒNXr_70€%0FÂÓ§çÖO›þ7ÏôÈlÁX_>áuj$†æ8{ú øSa¡=<ÞXÞÙæÆH87k;˜òÐÚúag:››çÙ4ãËg}Z ŸnÌÄ<®¦¢)ÿÊ‘OÛntQ‚Â5*»©û¨S—ÂÀÜìò£Y²ŠŒ&‡]¨‚Ù¥ñ©Ö¸J½…Ħm¼M¦têÆ¯BÖ++FFô"§~ý+Y —ªü”am÷ 50ˆ°}K#’+0¨NQ¿†€[‰=¶vLbýÙ†¦šæý>Ž«–ò´Ö¶Y€ ưqÅCÿÉôxQUòę˳)PÄ)ÊdíÅã $ùÞE¢â¨Sr"u&Xg‘* Œ;©¨cCy¸ÅìÐ c ²à4ê*Ùy¸!M< KµcÜ =ó ÉŒÚ¨€žöÝ*Œ¼uuÃûÎêzÛÉß=¤!°Q^Цð¡ò섚Ûõ½í¸¯ý,sdú˜Ù"°Õ)jPI*ÜOŸÍÖ_GïÚ!â€Ó¦ E€!I9ó6wØ“ò_í¿òâz_$¾ã³,¬Ÿ¼ÞÐøêí×ç']ߣ±èv8„äÞc¼¸Û¹Ûíîn†£ñ­pÒlµ¨ã W6·95úêëƒõÍäâ§×ßÿéõ«ïîÌOÏ_ÎÖ»íU÷°OUÄ¡Ú~˜Lø.¬ïjl•­·¿Ø¬»ƒ>‚b<é¸ÿÇ?ý£ïþßÿõÓÏúGvô=ÄMʇo{Çó;ºÞ y´SXvù¨ŒÛ‡} à^¶Â|ó6òQÈõ½˜¼Âœÿ#”Ü9Üw‚Ä67uï–›¸¶½HLxÝÂU‚6áñ¨e‘C;)‰tÎ73û€ãdlY‡[uzæ1ÒëåÂ<{»h1[¡1‰åbË‘±' žqVr’PÂQNoÙŽÃ!\xˆu¸wFN89ñ!ÀúPíÌ·âã ÒÇÕ—6—I †Kä³1ùÇ%ÎÚ˜âtYe‰)pÕ5ÚÚÄõƒ ^ U}…ú̾ÿtÂ@X  ²¨ l^¯Ó‡ 8FÍTS(bl¬  É€U$‡QÛ‡C¥°ET7k- .k¯¼X’Oî¡)#‰x<ê$Œq†gÉmŽ’ÿ°ªˆ¬¥1ÌÒ‘Óô \Q :Ÿ,‡‘­SIèÛƒÁó‡^GŠñjæ481Àí‡Íê‹ÑwüòÙp)Ô¹àm òT ÉðjñüìW/¾ú}-óäÙ±>n½o'[Nü©çó8«°ô¹ZˆÿPÚ•é ƆììNÆ3¢þ¡Ùt>½=´”Ø=˜Lgvœž½”©HÙÚYÿüSØÁä,ÃGéEhþ"å£)ãj„Žª)F)!9™8Ç<¹23avÆeèM ¬™øÕ7p¶e7êéd„lÓÉ-ºÚ(€ÛµéÔR)'@vŽEe›,Ù3\ !SZ抛Åk(W#&|Èíi‹ªðŒ°¸Qþ-±2Š0r,» ž9L(©®ÿǪº´àY{׃ê1sMáCҀÔ¤µ¼EŽß‹#&Â`“´®ÓA¿ -ÚúK 9½1ÓiK8]F­&בQÏÄLûºVƒ‘rO«f»NþV-U׸ÚH Wiƒ""iª’ ¦ü¶|i£Pô¡ ç¶XvY?`8™ Là§”ÅüÝßþûÖqi5 @àu]ñ»®ò §p{Ó}àN—½<ƒD8%¨ÏšÙÀ…jÆ–GåÓ¹o(Vn$ˆƒŠX„‹@J=z´Íñ{’>5Þ Jø“„jÇŸÚG§b¿H+"Å·KXR“˜9gjÙSxWº¢nò W/ôà…•7Ä9`ÅI™j8=k Eü5a-‹áE<ÎN¸È˜‚,“ dÊS¥¯W ùŸŽøÕ/Òª™5M¶A5žP¢šKl̸„j!0 ‚®Ãd-d⫊x—¼µöd£BBü×UlWþâ(—~»"œ’©³ÝFÐ2ŒŸ™RkX‰9wº íh¤™4åZ$m`“'\?ÀC)ƒ%ĹԦF%M¡‘xžÝ@ðfB³ÈC§ƒj²¥—Âáïñž# ð—¨ÀÒvâ`žß©¹‚Ú “Ôb"lÝI—³E_ÐïÊCÂX„Äÿh.©ÎiÏ ·â×”faL+ äà$}…ÓºFa,Ô~‘‡Å¨F©ËMxƒùñ .¯¸ôòèòW@KÝ””bKN-ÆÊ”Õ‡;³%sŘs—ÊpnÂb6¾¦>W»Ç'GR¼mÿ Ž_¿¿4C8;¶YL5úôù Ç#™-€X¢Î§§'3ÛŒÖλWÞYÞmížíH±ª ‚'F“lÒñó¯ÿòèäÔIw›áõëŸþhøÝO^õǯ¾þão~öG·?û?ù×?:¥spêKs°®/*N±ùøøÈQ4¼†ÝÉbÝé 2ùzX IDATSŽØ‡\ nŒŠI ! 3tØ®ˆÒÂ?´$»ò¢WtÉ­©4Œ{,¤à3ØbqWø!•6ï/¯?û•/ –gÅ?óí‡nŽäæH›Ï:0 7QåTÅ ”qÈwÙÚXUtŸo=,ûƒÃélt;º…rîàl1±1¢Ôj#Gd3“Ô°þ]ˆk°m¼ß`=RèÆ¥Ü=E ÒÔ UY¢eþ`†4 hZÍÇz8's¡í­Wßi]]­œbïÊr§…âSï`%¶y|àýë·x0ÚÛ-R fMÙý©‘®üÆÏòJžO£èQŒûæ^dò>#ª‘BCZ`Gc¨S’’öJðßòQx/ 3ÉWÓt^Úˆà¸ÀL0˜¾‹ÍŽ|Ä'Д2zéono_¼øl>ŸˆPói­'Ú÷º5Ú9—Çì´$ž :®6óýc´¾»½ß]Ì6·Óõêxðòörüò|ëÿþãÿþúýÅñé™…sÀ'&¬ü rÃ-DãDxM~ Óª#לɒ~kš¸•o"z Nøˆ>}rr–C®;4wÂmš;Ω— ݃ÜNU²êFá27¸¸¼4@Xj¸BÖFýR°ÁžP‘ñ2™‡‡™¡`\0[øêöv(ùŒ³e~(ªiô˜¾€jPŽûÒFn»FÃF…ÞµPãDÍR¢~3T¸#‹nóH¹›vq`ÃJÒ+ï7m©æE£ñ«;—Òj!Ð*ôûñCÍ@0Ó&U)&!i;ŒN ›E'ããÕ²’6YUÅÌ\/ÊWÝF<]QŒQM©^‰Q.@‰ûÄãtÅŸúõÔå^çÀ¤—¸²1g­} ¸UŽ'ÕRTYŒ LC©¹ë#†a ‹ Æ!g÷~ïwtœw˜ Ð+žY2H7CÓ7³\àa78†"S<@¹Î‚zµM /“†¬ò(OuQÜ“èwC:Eª\c(X£b€Ñò馣áQ?ó˜gÀ=æ-ÏÙ“ÐD7AŸÆcÚYYaˆh—޽Q2Šç_ é uyÝE({¼¯÷ï¿äTÞâ»'Rƒªie#$=Ÿ¨°¡;¹QÙ`µ­5ï6 Ã…å(d=8Ø+þó £­rx»Æ|ÚNˆË¦Œ¬² kJ„:ý£cjM4Μ²]zÑ,”ØD9ñÝ-›Òqâ1Q­êŒ¦#%ðÆÄÁ’úµâ´8­_KM£’=ª‡9Xïài¦çµxX‘±°0¨dƒÒ&J%(\u˜ì¡7›Þ—@¹×XX–ku}3T_ Ï‹t«š/jTHàM\ÐÎ+Ç|8Ø£b öÐxPÁÃct 6Ô>ŠxI™'xùJëÜ‘0^‡^ç€P s:Á[§îy^1û± 9Ê¥)Wx¼yÁX$%ªºêùc„¹=ò;16Ù¨*tŒÄÞÚrfMiw  /‡–?4]ÌGƒ£šôúêŠ'äèP±ý|…cs?ŸMÜôúÇÃñxß¡5e ™oØnx«IÞÚÞíöXQ9Jšö‰VS ¸˜Ýž öî®§ò¿ÿO¿üË?š¼ÿóûù÷Ñæó—?üôWÿµÏ?ûáýøâæëþóþ¿ôîO_,úAH>öãøSìaö’S¶Äг@ôäj:ŠÜ#4ä+ô*áŽÇ•´"PS8|K㣠&ÏáäÒ¨P3/.QBDI•O4 ÞvÜS%‚š‡½W¯ }_|ùk Cèã.2ŽY âˆÆœÓˆ¼·°tÖNÍ:´T‘HìÀ¬pJÙ'è=ìgååèø¸zˆUJ‘0|n 5ú76ð["qVþqøÊÛÕ¨?ѽ6é$ŒO"±?‚SSá !ªátrw\aÊ{½îgǃ²è õ¢iµ)Å?é%@GâJé¥ZbSËøµ®xˆõ4 0­Bý¦-p@ëÒx„1Û$ˆˆ5Ù¼"> N^ÙÞOÆÐ[`ã…ÒöAKˆŽÎ>cEók2]eȬ¨æ\á#Lj]D‡ŒÃðøŸØFT½ ¿žz#wŒÌññS졽#_¹“~~H͈%c*¾òÝÖGCûçÏvwz»;ýÅzè€qò¼E³ö·§ßûËéûÃîÙp8‘“Ýýƒ –S¯A›aœƒ`%‰Þ¢yúü`ž‘)ðàd¦ Ö@~+ÌÞïvûÇ¢Y›ÙJãðD៳¡q­º… ø4F: ’á$1jmÔh­fŒÝYFŠ •@£GˆJµ™È%M3&¦r¿uuå vçA$‡l.¹}: ú9+'fÅLk0#×Úg˜BðrÙ19`} 5hÕ¥¹á`©ã†žqãjÕJTÑV)Ã"hb–üÃÛaªŠk/çi1óCY&²a•R†  ¶Þ/‘§B‘Æ0d„_•ID¹ø ¶¼XHj͵S*•⸰“§©ìÆõ¡\oÑNÚ aZ!/ÖcTó¿ŸA­4_Š–a)¤Kƒ*f’C´æ5’ÄuÕéîïüöß“Fgóêñщ8d¨[_KJ›\pë’º•õ'?œþôZ˽:.ÐÓ8•ïáÑek=Jì‘Â-¯‚cn6“l@Än0iD%ìš%}JòàÛ™MF/D7S‚‡aKÊ)Üá­ Nµƒ5©Íå¡5‰æd”Öcö\ûàgr Xza}uáO\Õ®pm”¸)”®ÂâþÂåØ`Ùë›Å£De¬˜ 4¢Y4N9\ñF(§q}jBq’ËßJL¥¨žÐ/%"x•Ñ&ÀTzÔ»ÕRZÞhÃj›¤&€O²R žËE5Ñßùò÷Âæ½O&#ý2*î;Ýþåå¥ît­žömÁ?ˆô¤©È¤pO> ·YÙÉ:£FC H¿ÉþÒ[ÆT”ûÅÅ…˜aÆÔ€,š\el؇z‘ªS¯è×HÁ£}#Õ¸¯ù8³(a/¡µ­û^Ÿ–̱jB1†©+•½¢‚‰Ô5­Då“£’éËžï›è9|™CW,c0X ˜ÜÖÈ­Å…ÍêGú#žÄ¯üʯ(±òǪ ¢á),œÏdØ~ôH "7Ñtñýãg'Q—ÑÇ2Ûvç>´cÝK+ÑPüçÛÛkèÕy§2|°â~cãÏ5uH›wbsƒ5·Ž<:Ý zݘ);ˆÅ«¾•2Þ€1ºaåÞ¿ysuuIQŒ½“ ö´ Äjgó—?ÿ‹õô¢³?Ù¬nOŽ»Ož¾ØÚë}þ°t¿Ýé±W¦…›Åf5YŒ/ã÷¯~þ§½Áé³/æò³¶¤ÒïH±]½÷ýé¯è9ÐGÁ†a áU%¡KUPÈ fݪÚÈ.×§Q,7êvxkç³f(~§ âhõŠM‚)>xŒ½¥KGøô¿ûÅÏ¡õ“Ï>§nÔä<…OjÅ1´8°¤( “×Ü»õx2d‘†r+QJ¶“ÞNžû‚ït&wvý%ÍÄ![†€”ól ³Í {a{Ç<.P»ÚÐüfµªN111F‡¦î£±sÜX„‚RŽ¢ŠXq\â)z‚ö ÍÎ+!¸ H˜¨Ø[šÇ~›ËïîJ”®ÂÆÆ¥ÙÆlÚ‚æ‹‚!h‰uiÿb·´êÌ£h¡€Â† ¤èHÝÕ¹P|ŒÔTîÂÀ6LÆ_´Î^)´уÍhЯ!¸Ó)ñ~`ëôÂçÔ~†YaKcUESþ)ƒ Ô0GÔ&–.Ý¢–övçëYåÉø®”hV×Fu¼a1Qðê~Û÷šùû]ó´Õnw°»uø´w¾ºy÷ö—r·rʃÈìgÃë÷ÃáèÙ³gf$¯_¿ÂcÐ WWE©ð3ËÛ.ÜìñíMâlø´Œ!¶'ãÛ$³ìͧh2cµØ(s‹›/Ê#ÞóÍAÁOœD;ÐÔ,iÈY¶€Bèöp)$„Üwå•ë‰oÓs¼¤M-`†_*§¹;1.¨‰» c±ÙÄ¢`¦—™þ€Z:_! â#õƒ­²„¹nÓžÄ!™²µŠe"Ä‚:Ï=Td%õZñ‰#•Q_v³ BÑNÑÒd"÷eã§jÞjïºwq¯T@îhVN¤=¥IÿÅ$Ùêz×tÌþ©Ü4-Yhë-^¥j0°tª¡VÏ4uZj?‹*¥…´ÐlnÆ®ŽÊ^ioùuiÐUБJ• óÊ!Oj¤=2(-xkx.¬€­Ó’ð¢Ç<‡´Hñþþ?î«W¯ÇÇâiqÿÀä¾2t£/”h±ÁH 2±c93º5Äúu¯2ñ©ãÌ@¯ ¸idÃ2îµÃ˜W×n¼(qìNŽP¨ <¢ï°`fiŠÚ`öj„Yãþu㊾¨I"…ò%É Bü§k'ÿf÷чùW2»ŒjŽÔ, eë cF£IÝvÀ÷Níè0Iõ™ÏVWù  N ®J“jT S—¡¢NÈ~5U0<ån´Fñóc€Ämï09ïœf”ŒñÞ’ùÂîÁDœZ*&ì†#W™åù Ÿü˜.×>;,“»úîÍûú&—êJòmMQB;šÌ0[_÷4¨§OŸÂ¹(–ל?9¿xÿž; “ô Qx89¢™Àg¨f µKSä [)J(Î%#ž:¸Vp[?ô©gí ÚL 1Õè'AïêúÆ7ᣠ‹[àÊ€‰;é Œ•.@Ò2ªZÐÇñND^ ’ÍÈ’^„í›_~‹3}NžMFPêk}Ö8(þbbç) ÃqÁ/u„µ“JT‰Yl_8œVÈXâ%³ÅZ`ìÂI›C¾½Iá1ü‚sp2¯mùˆ-j!Ž™“ gF鄿ìÀßlÞ½{{q!½øã‘eˆÍ=Рò}ÖâÀaB„ŒÞ||r{ (Á雫·wû'½Þq`å¸,g“–åÍâæÛùÃnÿäl¯²Þ:4ÒïjÝõãûëWo¾¢×é³ÓóƒÎáÞjvõ×_½ú럼x~~px¼}xl¿HdßËP=T.×јøćþŠsÍêŒã:´MiB2!IwƒvÐK©‰¸n §QÐSoѾñcüé$äÕMMº¾ùê'?ûú›/økÎéNLZ†„ VíúÁê8Åx8·7·ÚŸY.D™º'Qôœq^¯on|`QŽ0Ò~òé'| sÑRÁjg½‰=*AŽg€ß f7þ„ÿ6c [–ïâÞ0­B^"È»ò§GþDè²yÑÚ ½LUk$BIÖPMƒ\ÕqÔ¸ï)i„ðr36…Fσ@N­vJÔ¬²™%¡œ¼àõ,U#ë‰L¯¶XdcôÁµÏÌš<f ]²ú îœX2Ç×â³Öè2õ…d@zË~³¼Vk÷Ȉ<Õøß„¶À@âï^ƒ*Ta@nx«µì¦ ÄŸ­„¡ËŸdÇŸm€Œ±{­©ïúH;3v…Ú¯ÂlM€(Ÿ*ò«¤½²ûû¿ó‹OæÓ§Ï© Xa‚ˆK¸"1•ÖbÑ8º¢=bMã7›…±˜Š…î!£Ò@âŸ^@Fü·©c¤Šdú–g™(¨ì1»ËE¨àŸÚPÛÖ ‰Éš/•›ÂC\®¦Ž±…wužèÑS* ‹»o(F,¨§bÔ¨žûdüÅ’Ët„`åîÊÇ$àÁâüFí`-Gè)8añ©™ …&é¢&Z)t%š¢…SWsFUCŒ8éµ *ªRMŒïþúú VýiáÆ $Öh-§¼Ìó ‹CÈIOú´H4#ø>Ä p¢ÒvðÉz¡®u€ôwï0Æ8gOžœ¡øµ¯úŽ·AÆÄ± ƒrJòz͆Á?NÁTÌ©r¨£ƒDïÜ`5hpvºpçP^ Íà]RPŽ5”xÑ”—‹@c‘Mån”ãIThÞR~“ÇœÕqpþðF·CáéÀS&SŸp÷]Ò¬¾kYƒ7p°Ä3Ô 7?ÀºP‡­Ñ¾¯à$ƼÚ„¬M°¾8œ€â§/^ZqÓ~oÐçw§Ç|Í£ÖyË=-›¨ ŽB&ˆgÎq–ŽÊìEU¡,GÓÈUpy½Ñ]k®É(;7)kï†íÄ"©”("šNötÎ Å\:˜OÇBX{‹ëËë·ïÞ½øä¥]=(b“¬wEñ3ñm·Ö¼»EwtÞ\o¯,ž8°,Ÿ¼<êt#ÃÝ}5w9º¸[\=;ùœè'Αƒ4ïd~ÑâpHŸÙ¶Ñ;ع[Σ¼ö»_ü­e{5~ÿöõlrÛ½Ÿ=Ìo„玟òÐ;¿_L!Áe¼0àרuG¸Hnª*\z³µê÷ …a瀨XídÄG,ïªOíÀx› †dÚÅuHÆýáÁÓ³³ý³?þîÕ«ã·þí,|ˆbVì„dúF5*«»»òdµbr\jFŽ1ܰ=T¾&æH¿¹³EúØ9ø7Ã+T‡A2{ù¨ -gXÄßÒ&Rft5£mä\L}…mÕp ÙÐÌx_¢OF'Zé-Ö‡Û!ÍÍ?¦÷(@!OÏŸŠZ‰‹mí‰ÿ>;:~ÂSMnf³ E‰9M¶hiãx£¥4(\C~SÅwÊãRÀ»³4Á‘ˆx0S~paÐðë!Á÷.Z Dx¯MWû>ôýP‹ s>¢;‹t83«HïuÃD d¢Á<µæµæ¯¸ÁjÔ¥¿&Ú oó¢ê·¯2"Pƒ‘Œ/¥(Y(†NþxUyJLœð€Ó0^Á}FJ“'HÀSAÛ•Íó«û+“Øvr:#®_Äò zÝx‡kެX²²4é_Ñ"2RF Äo :ïê"º÷ý=GeM¯*(Ë:[fÛYJŠÔgJMbšõ{$+H …ìþWÿå?GZAMSC,†¬À¹A£a¬|p*÷ A—‘šqÝ€Gž1U%~¥·UÖ² n Ë/$¶×è.íÀw1œ_ø‰ck­¨ÖVÔ¯¨ˆÞ“¡¥“Z÷@Ö¸ÌÞÕ¬µL—‰V4«f…©XË'ÎДd#´Ì`ËÅ»}¸ò-ñ`¢2–VA›^tð “fƒy¶¹…dÎhPcS©…%¬îuPµ ¥½Þ†©¢Ö 3™ßƒÂSSÜë2Š6çÖ£îü _P©©š«qWjV(‚rÆ0þe"B»%Øs`‰ÖÁ–JŒàÊ' X áýòöìéùñÙè³/¾ 4Y¿õ…ZYA³éóçÏ ºÍAMÍ|zf·à­Nº8™1ÇÓãã_}uêb¸ Ãí½ý«wßînù ˆ#oÙ´/®Þ_ÇØî½5ÛYl_}÷ý÷ýÊœ82h³³±”&ê8³qòþ'ÿ쟮Ç×vƒ2+>Ò×8߀·_k!¡Ï(½½Äè¤îÕB¼¬H <ßpˆ ð@”R´r¯ÜS,W,VÏ`>S1¥¤I† àÿìKIS¦+¨éþ‰‰ö`g5zõßþìÿéu¶œA¾ýp\Þàö||ñ°¾¹zÿÕíûŸíÝÍ%¨!Ç)¼xþùŸÿùWËé_|n 7“°œ¾yõmlÖyöòÓ“ãS2Âg¢íaH$QÊUÏÛæe`”³]QP”¢í9¾ã¹hZ÷ü“¾øâ×Ož¼éÑÔ,ýƒ»šER!9Ñ“,Ðf‘*EÍ9óÃXº0y½â)ªëYk…ùàß½NÓ²ü,ŠH¶º!½„£agªfàFLü(6(»ë¤v4¢ðbÎÁmÁ—¸ÅšDÝÖ¯ªá䬓æûß*G^ÊB31ðW”­ËNÝcw ”öÕc] -)°›¬N¨3.âØZÐWü‰m¬ªÀˆ€²zéü Ô‹F´¯×kHî]»ÿùïÿ.{óäÙSêÏJ™þ€ØÀ…&À»/Deêx Üá^÷y«4Ä]È×ÿF;ÆÙ¨…“]l¡±Œ [ÑLô>If^ Æ™ô¯¦¼å‘Hƒ–£“"'¢;YYˆ:)O™›®iÊäX{zñ¢ÊžêÿûMG»õÉáà ¹T«à{5´š,Kà›%q !‘þ¢qB$­\ õ.‡'*6V?ú‘àW0ÀL_¥,@BsÃóze¹ñJã`zÄpP–¬Xa ˜âÃ÷®ƒU¬ ˜p“pO!ßI’obïm´‚g5]š f¨KK¯ 'y6NØàª)a®ÈN}`A0ßp¡•O–£‘’Õ5ÔW ÏH“ÆÕ´ì¹ØX2}qÅÒàGƒ Û4.Ëv IÄq­jŠM|NÙ¶·‹Û$»ÙœžŠŠù蘨ŒìËùbÂ_„N|"73ÄŠ˜çP;,A¯iH¢ &Zx{#³þþìô8A,9[Îsªtgœ¸ 1€ê¡ L8 ~rŠ©«BSÜ L1º¹…Z2kmGùö–fÍÑk‡áÃ98 *¯–l7ŽŠ_’úVyˆqˆÉÔ”ß`·Iž¹Ûž-Äîd"Ói5ì“뛫~vz;Ž;ç8V ²µ¾aŽ,líí GS÷L²óÉ €™/¢GZéíÛ·¡;FÈ’ý?ƒ‰tØ 1§Yn¯†¼´ÁÙ»³ô°ݾ]ík™Föi¿áf6t„üd8ö…c_»½ß¹³!8šÏa+{YOdìv÷OŸzw0˜mvú݃۷_ó§ÿÛüÕOžüê¿!xÀ ¶@ŠžÂD3xÑÀ Ž{_|Ûᦥ •@ë+±Š.Q™—¯t”Ó]Ïï¤ÑWjVAûœÏ¿ÿö;¡ë4Ÿ|þÅXd7âµKƒB‹Ò„>2KÀ0*ØÚ& 8E@hA^L¿6œ=;<<²Ùûôìü?ø¡$øî^÷ìøÏ«g !rŒ¤<-¿¸´ˆP¼u¤}£Fh>®…1–¥n¤ŸÉ&´"YÇ@g,bZvï.r¾C,G\ ¤‹ÁbN’¯oRqô-©ÊèÕ,¬1•b󫋸S⸠ù‡ó¼Æõ¯PºŽ¢ˆ4©¿Ñþ‘50+Ä…(ŒëwIÊ@yT`NÍ{X\…}A¾Ä´H¿Êp5B9ÈÂM7¸ IDATÇ¥*T‡¾î8dÔr*ÇIÊŽ`þ7›m£{ŽdìÆ'ˆ…0°%ÀcÆwÓ‹Wvìk,÷ÆœÑs6³gyûÀjÂÛ¯~|óÝŸö…àøÛôTÜßÝž½{ó×ëÉptuñå§ŸZ§TVSéXG]R~¼KEƒJk‹™ozÚÖÀJüÄ^¨AOÐ6^“¥« É×Aæ“ÌÊ:=¾µCy€Ä]I Ü‘&óÕÓO¸ß²Ùé:¡å1H<.TÊr616zØ(ù’PàEcá!“ƒcjçï‡ìÛG®L3ÕÂIÈc™Ü;ø*[àF¥O ‡hŸ$GZ†Ë2Y@Hg4d­Ë« :.4 $…[`(Ñ&Ì#«:.\Û`U@<ô… ¢ „¸§ù-òÄ'Mn;N ãq4…¯Qu¿þlm‚p=Ÿñ—TE…8,t—…ŸýHfêaSà‡"˜ ñ¿z 4ˆ¸ û¥ßŠ„-Þ•ËMÃ'Ýê¯êT‰GÚ`GÜê€Ä`Lô§a!‘óg]ñ5‚9«ƒJ#C jfåiðMâúWïšõ®ò8‘΄Ðîþgð;æ·Þ‘ìQÀlí;ã[înÑ/dk³XÏùp쳚ƒSS6¡—>LVà~w¿oBôþâæ“O?cÑXZµÀ*:ÖI(Ó òÑóã´$ÑÂl2¦q­ÆÉ]Ö>1ºšhbFÁA1蒹⌥\`N—ú«õŒˆ³(@ùTáÆ‰/!B8ØÐâ¾ç¯! ‰:µ+]'].{þ!—:DÔ¨ª-!â¬Ðç뜅s«4½ÃN¦NtdKo¤gù£Ž‰ƒyF«ŒòÅ|b< ¥õN_ÓCa¯]çøº‰ 'ž%¨‰åL£œ3‰a™L’i†„5ë)&@9üµ(}ÁŠ}§Ã5tò ¤U&1€Á:5Š-‹})!ˆµç…¤Å+uNÇÖúøôïN&æúXY°DZh°òש.Àˆ'Ê©Bà¬Ôeb6 Ç3…¬T ðŒ:]ŽUŽÌfÞl dk“Se(hš˜e‡9@³[擽^_Ì€VÊœÎlˆË|‡¿¸XIŠ·iî .ÆÑ–­Eæ ,¿D×Ö`u*½fÿÐí½ý¬›H%¤…–ÁÓþ ±ZVóéÐSòɧ„è°F-'¿poÿ—ß}·çœ¨ããË÷Ü­ lÞ¿}Ǻfa„ˆuæmŒ÷–콸³Å¬8G_„œl>2l‘ÕZB2üG1 äðUDÌ–ýòï!j˜¼<Ì}Ñãf8ìàûé|§ÀÙ;£ïø²ö9r:1»Ù„¥]¹_Ʋ’Š´ã”š~®ÙÙq¤ÔšIËÔ[³EB3»ÀbûéúÂáÔþr‚{-6Þt¶|àÖ kœ¼øôËÝNoÏQט`Ûg×væ7«ãÞSO¯n®6›‰C w÷3_3MiúôÅ‹§Ÿþ`púôüù'ƒç_ZÀq ñƒm‹GÂÞ–‘ DzK dŒ¯“2„z]§ƒ’®Z§¶üf ‡}ŒµEœÎm,…ãjÃ!xVŽ‹MñæqÍDƒ’YÌ}±fýæÕOíׯ^ÿ›ÿúoQx¤ ÿr±.ÆœgsK 4€ãåÌzñv& Ø58"YÁº ù‘S¼ ¿˜“PÑPöéÚ·Pä£ôº¶»ñk…J+s9t';¬ÓB­GÞ9Cä'9û&9‰ìB-Ùf ?'MJÂk' ©Gúü•Ì5¢ªu3¢¬Ái›4›òÆÑx$WÂÈC…¢òœ¨) FIVÖ0" ÿpÊI=ùŠËç\ilª^˜2ž–$‰~Éýv.ØrjÇ¥éÍ5_d±ŒÇIà‰ B锂 PÆ•mS+ÑÁƒ¨ÌÝRÛÔ®±„÷ñBÒchT,]®6m‰Û¡J¯APî³´& 0qÖeŽõ2lÉ£XÚF}‹÷Öñ¹ ¬†F(Ðða&í}ͺRP*IöË2Ò{¼fxëªìò'N–ý*!.¿&?òçògùŽn¸GœCÌÖÜ/õ‘N þ$qX4ÞÅÌ)(üÇi‰_NuGïƒ%ó ¢Úl®­·QzšÆá{j,‡¬ý7ÿÅÍYÍ1 è¨Î®ïËn:u³MwN=Úgpw;³ì.ßb-²d×a粇³0ÝÈ|ùÉ3Ó³Á‘Èü‡rSÍv’\Œl¿cOñ•ßΡÃ{Ø]œà›}P„J@š8”CwÆ»u„—=± I×w“8nޤc»7>뚊@ §Í\‡s õ·2üû—! ¸&uªà9­Ð¦\Š‚ éÕy?¦Op™4,1*¾°÷MV-7%ôÀaóê¾NºÌê±$€{»ÓB BiÉcž× •œ|CÉ"0ªÊÄáoó4S0̳˜S¤¬ÚDßåìMâUñè"gYðþÐG=ÙZ‹ÞG›D8d¾øC8k8y?d1ßò £&A™r|ÃÇ0Έ—·ä“Ÿ£¡ $KØïY5ß² Üá/…_{’“’æ-tµî†gj¶ºÅ}g?H¼Q Q#ÿë¹`>ÿaì‘L`_!öMGÜV* $X¶Ètä»ô{àQOl° x‰Qó̼ª9Ä™^å˜ÖÈñÃýiÖOõ’P¥ÃÜÅyÙæÕ¹’³iÎÉ3öNÙœ ›Ò²@µ8öšŠßÉÞÀξõ©2 o´¡”H6FüdFS²É7ºÇlHhhÂU !SmÆO zj\º¹õKxÀKþ§»››[¸y`S‡ùÜoM¦.T\@æm1ž\}ïØ`­ÙŒŠ   ™k2%àìéÅÔNs'Œy 2r;è8Šgã_žc/Õ“²‹ëÉ{B¿ØÚ?9ÿÁó—kº”îã<²Ôew% G˜ ¿z÷3ñ„î>e1[Ío|wk½8=ìŽgëìì“·’ÔóÈe—(Eiàt(ÇÔd€r$Gf2ÚLd(æ$WrP„HÈ/‡Ÿ¯ƒKÐÁ Õ»‹«O?û‚m8 Ë²N·æ¾D”‹–£_ÓM˜ÉG¬Ws/–×z/çÌ|Ÿ«…äÑ\_]èéôøÈ|š 0µ„FbCp¨Ñ6W1£s Ê*§!96’H GÀ2ÉUÉCCø1å0U­*dÛ9LS,8B-*;y0'ékÞH 7}Èó“‘Æ¨[%´HýÆç4×=mÄ_~LÇ”˜/'8'W!Ú©f€ 0ÄüÔxý€Øˆ2àÜÄÈ1çê2{.ôyÐ=šO†ÿäøï¾ýó2¹}½ßãíÍÆW&¶\@¯óÑž<aÆO@³D„fïàäôœÒ•Bm}ØÚÜlqa'Þ¡Û÷ºŽÛyÀTüf†“š—“j‹§IÈ]RÄ»=gžä૜\ísdÝòm„: ¾ßéìžúk‡ÇÏv;v~dG’„gjhhbãE§+8Wr¨ožY³ $–¨w:‘D³ IF$³0J“P>ÈŠ™ ˆEriœ°¤QTS‚-]nH–|ˆmÿâ"jDAâلС¥»ÂÛ\ŸB£â&˜G‚øfº«·MÉÞÖ^w·{盪|D ‡¦ôvŸôçsãzÈŽ“Œ"¿ÜÓŒ»Uop¨³Él´Ü,`[0At&ã¶1|,:êA¾u0ÑñŽ Š=ÿ[w{¶7«étÄ+âŽPŒq梬œ!®i Ìñ°Ÿë†äøaíĵ´Ù†ÍqCÆŒaØ¥²O_Œj™;űÛÇÏ9ˆÁQßåjãa“F>I²)…묿ìHful +yå²ÞgÓq%µŸ6oãZ7=eNÈ6OŠJÌÎb(a©%„‘g"j5Ù¢j–>}DÏ­Y¿ÏyÁNF—KD¹ ¯/M£³š^Ï/¿µ­»N¡Øƒ®ñø–+8Ý&2‰Šyí´Ìƒ!ã»Xìpî@>ìêØ°ÃÃÑdbžù¥¶§#iì‹Í|(˜ж«õn_÷9·Œ#²Ù L„¦«›ÁéàèÙ>ÿò7w:Ï÷ûÏ_~þC¢9Ÿ1±Â'ȺvSN 9Dúzâ#Õ¿ø«éõëùøÝløÊ¹©\rã2cÙ f«#3Vȉw.J|gR¹f˜1§3GËÚé8e¥¸òæn3E6Od7KY Õ/ÊrÕõíXÚó±LÃow-Ê }\Ê&-¬(mŸd;õ¹›»¬‚™­]ù[“ÑÍõ‰DsçÆë—Ȉ4¨ÊŠy7fþ†·òá þÃ’ÌÈæOŽ÷p6ž†j‰<Å\Ñù™èÃÉ&ßî?ݶhÓâö"ȉ‰å´&(… ÙF`§7 k£FÊãde/¨k&Ž0®Ò¸$ØfAÔ7IM)¨¦ð¤¥vJ• ‹×¡{¨‰ÞþÆ3.¬^ ? ]r€è×ÒÑV>˜“ù£0A¨#Bè-®ž:8Ïa-(,O7ò¤Áòm@HE%K?0“ñžv® $¬îBÁ€©ÁäaƒÖ—Uœ(#DqM2 §õÈÃ!b䙀áb‹ÀÀ¥)(ʳ‰¬\÷ÓE\¡¬|)ñg»7v6äøÕN›y· JåDï*4ë]Ͷ×Ý„eëj­!€¿Â µ¤¨銱ˆ˜gzDÁ9|ÇuËQ|-Q$^àÉàˆaåYîþ£ßÿ½ÐºÎŸˆSZùCBÜF‚¦‹3uʼvx’ƒ¾/˜·¶³’$át°´Ò‰¯—³m‡úlß/,ûØ5Cr>œM²æXø–íl„õ¨®Ý}LùvGÇŸÜ¥¡],Rßãe‰ÔÇ,|µ~-¨jõÎg„¶÷w92j.Åd·ïç›åÏOdœÿ–øøö‚õ¾_ûzź ßâ?2¢JË mgÐ?µø;›åÓm§ •ø¯š —¢œ2Ê÷ñ0”K&Èl9®-»G¼»ìjɬƒÌ;Ô£¬ƒ Ì|$ZŒç3óg/ Ñ»‰Aë=0Gm!`g>az•„Ý2¥‰É7 Ìö¨èµìãÃs²†“ÚEy"á{ÛßjwO\îè2ú0ÙÐ*îvRþhŒH¦äîÞò–ðaÔ›Š™žÐ.G—óÚuþoR³¸&z7—l!Êez. Z ›«ˆÇh <-´fBÅ ‰Öâ]S ¯Ì Jz (¢ÄÙgí¢"!ùÌÏŽýnØÌç& ’¼‘|'{u2c§Å-³fuX;ÞÏ*LeÚ—X ,4:؇IˆM,ŸUã0:Ÿ|WV)ENøžÿa’v{sSZŠ¢é VtDýÔ<Ë»€N™qæP~Â#ó¦!“ ˆ2¨ï©©ãbÔIÑ‘áò'im" ÃT ê¤{+Ê™‰1vI£Opúda$ÈJžGvE-¯á„žÒƒUßãˆ×/µBŒ” –•Ìþp¤þôÙØÊÔݽóÜáä™g¹ÿHøêøô¡²›R:“¯!àë‡>I[œ"Ší‘0kâçÒÑC—NïÙé³y§óÔêìdí<@Àñ'87˜Ó&Ü2šŒû{}ˆ4Y⸘x7Τ¿ ¯dË 4žœ›6‹>òoÀ58Ꙝ?îƒL>þ|*DЇYsÿøšêãžå>ÿÄä~í¼¡œ4»YÎù‹¿*O¨48' ·gûzýâAšo‡kœSbÍC®Ñ0Áp©ø¸§*8¸õòâ½Ã2À@„ø^¬‚9öÕÕE¹qeøb ‹cUÙuDžýÍÞ°'ì%Æ3U•GŸ0PD ,C4Œ¬ÇY¹¹L¯ñY}»OH³NhÅ¥/œà> Txü³²™Å,Ê‚TÈ'S*€:W­\ÄÒ _ÓÌX´ {I ‚Ò›Átb$¬Tm'2„¼`ÒóÍa$îi@ùÓŠ-&ä/$î^5Â,y%çK›Iúƒ6Ì Êp³ÂÈ<×6OÊÖáмRM鞦Υ®ÛLÔ€^âX'Õ„cÖô[¢b«|²Ül“Ý­Y÷ ·ºëîžZXyÿþ öì«×o „9¹­{J!b±òl:Ï·³hÎß?|º³å«V‰^¯—æ©[fÖ25õו­·ä]ÓºR3x#±t¢z;¢AB/ô$ ã8Óx¨ÂM÷êôOºƒ³Ã#_Jp’{vSF© øe Fø ÙÑÀ ?—gO%W;–Ê‘7eøF¾‰2͈ʕEï!YoQEqVæÛÑ+åpГ”Mc(!7~C·D‡Â9Ü=ëÑ?ê%¯Û—çÄ¥“ìq„óa*ñ¸Cº é°91ÄaäÌÞÍÎË/´|á¾JÂ08‘Ý¢Ðô˜¾²§;ÍáfN匵”«*Á–$‚3>;õú´2ùÁ/ZÐ µzžˆe›ZŒÙ#ÆUXŽBviêC¼Ú#í{%(´»q¥Óà"ÿ¼&ˆë7LîccƒÔI…j_%%­宼V¿Õ{ŒBš›•+¦žšÖNk!d*;QÔ¼še¦í°ÙýÃßûO© Z<ôN°+$}áˆDÐÀCV)`Ѓ÷áa2Óa,®BˆÃRfè>å¨$Kt‡U‰·EÝüˆUðÛNNRž°ÖÖ:„K8iÙ †pöc•“”ÏôèÅÈ?Ö€öÀƒ]ýÃÑ b¿²jÂ,÷@ÍS¬îvsÜxͺȀ™E&DZ‹™Q­Àœ0Ôýfêì8‹µVŽèVŠ;ë›kÛ«Å]Ì|<Ç&êàor&øšîî„gh~ÀLx'Ò&oÖm9‚)?þ³S…§6ßåÀ­l£eÉ%r ’y9ù’§lô¢l#œbqkAA \Å_¬uwŽ.‡M Ä+´#H@› y>æUjˆ‹JÄ•&y¨É¸º§/¢ÚHšßJU¡8d‹s}ñ~Ì-ß]ß*I¢ÍýÃpxóîÛ¯ºÓIÆ›øh—ë¥Û­-ÇÆJ‚ÉÊfÑâÂÜ’a³pŸ&äó _q@ÅHÐ~L—­ËZõ€UëcY|ugB_¾$Å«(Ó‰s5v|êghûøäewðBœôpÐT2ÈÙttÒß÷ jç –b §9-d±žÙwhlr ±Ãaw`ºòì¬;šLOÏŸ'Û/º ‰D+oÍ⹤[vBfèÂ\¤:aĈrã ‰úྷ:Ö£Xœ€…¿k‚´¹¼øîéËOÂxÉýÖõ%+*Ò4ÚúBŽÐ„ºæ"àËÆÛÄSkЈËùdþÅsPÄ‘Îó/_¼xÁeT(ÖȘÖNΫp Üöƒ¤{N|fË]Ó¡v݇ï°A”ŠLAv%æ‡úÛßC5TBk'nLÆ#q.<@ÁRT "òàË;É·4ôѪ´uÌo~±UŒ™z±R8)ÊB1>Âtæ ”Ÿò(6LV‘zþ4öÒ`쥥lúƒŸ¨<Ë‚¶&O‚T²‹G'ÑôE¢øX:1—ý¥oÍXÊ VÍTŽ{ܬzŠ×™‰X‰èŽJ´ˆ•H,œ©J ÔœÖà-¬æ ï°Â'™n%åÅ/zÇÏÐ`…lg«½#énãë7ßÿ³I¿óØC}Æ,}o÷äø„ZË4{Gƒ'>¼ùÞWaâËòÞZöŸ GèÙñà|x}ý‹Ÿýh5¿Ý1UÙÃW6qO¨b;L¬0O€%_ çmVÎj¦â0k"Ìj4’ ɾ58ó/a+>Ä*ß]IÌvKBDÛ""|™dãC(F3f¹Öü<»Ç B­2£¹$q¼uÏ¿_˜«‹×—¯?yvvØ?Ñ”F]ÕçŸ) ˆÕ¶Àr. ŠC¬Æ%¢vŒ6+C½ÜøˆD¼f|¬ÐlÔÅuts}í-@’_Wä#¬¨Rb¬­:õ‚d‘͈¤ïb$Ñ÷X”¨b'¸)>É´3°¢–¿Ëâ·•'$¢@ùÇ"äQ˜Å Ž¦Ê• j*÷®·\íÞ¯{ÕЊVÁt†w)p3ãÒ‡Kƒð£PÁYkA¡~1g|.|òÿñKÇâzbg»@4ß\ ßál.³eb¤“,JˆêÌeïí Å0ˆqJ %cîV`ü&4šh YÃÁ–'ðž¹Z†ä¿5‰… ,7Á‚Ÿ‡´ùõ'eÆoªZº—¾Æs‰3G˜!"Û÷‚Ïä£SýÓqÆÜ †Ù¥Ja˜×€Òonv—ø UµÆiµB± ~iãæà!Ùu8U'”a”’~è%µ,íYÉWÑÓ’GÞÍÀ;ޝaë@æ > MZÍDæÀcĺyHrclJ+ƒ4¡2ó°‡máx!3~Ši“Ó´Í¢ÄÕ±okOZÁÁl¥5XüNþ%——ÏÊ‹÷I‰îTʼ꘢۶ŒJK¨Ä4Œe&“iؾ!¿6,+ó£Qþhƒl—ïß³¢!F„ÄÐ] ^îÕHÀ?ÇÚ}\Þ@.ì·åÃ)÷býz›¸€7%à:4­°„ÐÎrrh„)ß(u–ã–Øm.Ik=½Þ[á ?éäôGñh@RÞƒCª ÿ0’Z¹üpR§{Œäw ÔIC»mk.cÚB³ ÊÈÜEÚ;ñ·ò‘ÅõÙyWÎ.XQ›§“†k“<{IDATJ,lóD'%Ú=&)ì^.óôÆqŽo^ý‚3m¨¡9ðSƒmç6Ë—ïÚ 8ò«Çéåõlywtþ‰cµa—Á…ÚDWRË-ù5#‘˜(ÒC¯-¥¢•èÐP6 o•S„¢uòÞ °îl^|ò^ûùù³³Ó'¾1àÔ³n7qJ -íÓUèT !7´ƒ4h‡„¨Âmß Xx=}rÆÔ°LÛ?¹>r‚q4?Q>eˆ’tðŒÇ‚m@Ž!T}ý)fi¤R~È!XqÆûääˆÉc,ð¹Õ)‰'+¢nY)£7|5œo,?kÜ‘›b;êŽ ÊÀñ8‡)¶-È”ÃF»RGšX® J ³eO؇Z¾L¸óSßuP Í1DzâæÎ"°Õ¬'Q-ÑFRgezUУ:qãhÏ„@AÕÊ9ðø¹„âQjtD´ùWÑ S|H‘³hJJ±éXIo³êTNØØÛ1ýþ/ßüôÿÚÛš9»,çåda³˜sËÓø‘T“–zwÊaúCÿ/¯gãË£dåù•D8\ÜÞ^˜P0OÏÏWR&zÇYˆÈ˜3Ê•I7§ºw, *€É” •ù2É:aH«¥,‡KÑ#M™HÏ盕YŒålèÖ`¡Ð4XßË%9Â=˜4¯–Ø/âÆœD-\‡ý$ ÂHB$ñ³×¬/ß¾¶†m'þ´#AT.!ƕł¦åòªƒ[Ó tq«#¾¼é[øÞ(ÕŽ?º´ÐTJºHÜ¥ìTm§Õ~«æ¦Uöb{EåvÁ6J© YÊD!^Õ v\^o-4°£¶’&{"» xäZ»¼ºÙýwÿß|ûÝ/G7Wë Û…|üt>r‚Îd6:z9/•8ºu K§šŽŽ´XŒ¬&ðù²=šµ ;ûðdÛüknû†97ÝŠ-¤L2Lf„ÊÆNÞÊ·Õ²‰†W˜Us< óh´HzÍ+TžüsÍ¥ÏRfÁ++šaåÈ¿‘!Œˆ IÏ•1Ï@ZÞÌþõíŒkqxàÑZX+¯cT(LÚ‡çE§r4dmø1·{Å¢O¿/†qÀ‰S2gCP3ƒš`q†xE<>ÂFåO1ÁÔ…jÆ$ BSÊ‹¤t¶mo¶u¸w¤ÄŸÆÚÕr\5ðA”8n‚&Q„:Èð°š¹rüþ²öõë79Ø<¼Êk^/Øs?™Ž²"“ØV>ã¤Âßè` õl›_DÁ¿ä»‰}%Ǫlc5ãåð±r¦¢X…Yv–#ؤGš¼Î0¦å¹z¦3.ßäNªŒs´J¤Ð*ÌÁ¾©¹·¸!¼NCNÍ# SÜ÷ ︒j‰OE mîÆ¸ÐÖ} ‚f4'DÌ2¬$÷,mÖ»É1<37û—  zŸñ<|ÇJZœ.áHÉŽ˜¢áÙÅ à™lLIYȵ„Ú©¬]¦›| èâ÷â ÊÅ08“I)½žÀ^<¯ÔõU–˜[£³L)‹ÐFAPôeWX©Ü“«½àHµœ‰¤ÏÇËG-rò¸±‹|Ø"3°Œ¹¹‰ºYN®nß}súô©£DGã‰S©ð‘ögzIÀ3_›É# f 9Qa *aÂcå%ŒÄ¯ÌˆÀÃ[Iêpðé”zˆuµÙ3 —úËÅ(1Ž­Ñðr³^¾û…¸®ÙîõÅ7÷«I¾Bm OrPíýÜ?9þt2v@¿xÌV¶‡ÎGΓšÍ¯ûOÎ^~qxö\æs¦w’uvô¾›0¥S-êÈsêhŽØ7Dª ¼ÕðfX ³8¦‡³ˆ3„©HH·ë‹|‚Ó†F·cÖ‘Á€Äk˜×‰îbBôo B¾ùæ:ìåËO~òã?;rpœ!, 6A¢°„¨Òjåó Vl!0ßû+…‰ãÌ r¸Ì¸›æK,Aë1ƒaxÚûÿkéÞvÛ¨¢0×I|ˆ=3¶Ó´rZè ¸ÄCñ2¼À•¸$Z©B%MëÚõ1‰“ðý{b3ïó^çµöÚ!f¡¿à—I%’ ²E&Æ­ž½'µmó1Y94ÔV*°¶ÚÃ%YÈhŽ's@¡WàìÞ&~Ã, m0s¢" eŠn"k¸°¯øà§1ù{,1^'ôØ«°Ê(RÐË1í£cç>±ÿ‘ðdÇLf fΙ Áæ_„H¢ƒÎâ×R©oO`'Ü(HjcpޏFKɆf+• q‚±’@õH !Ó¦?x´3#¤^òœAâ;—ï^û|”üæ[—øŒnÍÔBV†wr¼Ñh-KT‹ªÙ°Î/owKÔO@•£2ÌÝsŒDH(ÓçÛtÒ¡š¼êU³îäl}}tZ ¢:Ÿîy0¾hž½:t,>uâÈa×Þ°î:­CNp¤7œðÖ¸Å9ùƹ LdÕÆ«¢ˆG‘&Ý‘÷@ A‰ã1 rA«ŒÔ;è®±†R¿­•y#C–ýƒœ)ÙVšVI™öâÅ˧өÄ=Ô!Gk-`,èV_;À=ºkÙ‹"'$– ¦zwÅc  a¶®@¬ÎP°? 8~ËÒ !œëCÌ’fÑ}‹¼äóÛû$(÷HË Ñ·ûèFÆ:ÊÊW’°ÛL`sØ ZÆÖ€eãa6ÒˆzH 1ÅÈÍżÀ¼ŠfA,Ëbø­ÈOx `±Hæc5 Û UY„Þ‘byÔ„Í;í*1È{Ÿ4XJ* ±Œ4µ¢ÄI¢¤?}<(ìAù¶®Âà¬o’ˆ¥“¥‡´ltªøgŠýRÆÙl 2¹‘"©7€H’“u~ùù3ª§´ÛÅàDœ ®sR®Ï‘N¿š¡Më[ôÖb9_Ì?5c™‘M‡õ‹ °Ý-¨Ô(-`Æ|Xò’hDÁ¥(šƒòAk<®—W~%ä¶ËgzŠ•†¢±Â¢yÄŽN,&?—, ÞX(…1¦D²îYM"V›»XiìÓÝ[°ÃÊ5BS‘¸±cXެ׋‹Ù )^®ÖnžáŒ<ºÏeG†—ùØ…ÑÏVo`?»ëgg碲,…aØ N}Ctã´‰ÀN_ r„¡¨òbGÂ3 Úèz{ÇmtìØi®4¹uTMH‡ð턪àY:Ô81¶Šà4%t森÷TdܰÉ9x¯ Ý·Û5¾à’D#V¹Z ƆÇô7͸^­–ŸæW³ÙLø¤ÂÁÇõȃÃÞÚÇÆÌ…ü£÷;½Oši¦~Ÿè¾÷ £5þ“°JáüU(øñT“‹ ¬ M»<®[²Z)nØ|8+â2J¦抮YAŠu¿»“àáĉšÍÇ7ŸÞþÞ4_½dÓxÿþòûz÷î_­cN hšÉ|.‰WÌ$‚ÍaÀcвU„z?›ž 4á=qbd¹r‰äÈÁ>3’~½*g3qD]E(¨5¡BŸ?¾™67[¦èÝiVÞl–»Iý\ŠqýÔ$ˆ`µE×Õùу4i_M½yROî÷ŸÝÁ|÷€IÅ×=µ·H.Oärñß³ó³Û½‹7®Ÿð¸ôÜ“þõ`4þãõo$üÙó—2`‘}’«ÛÜî®=Þƒ‡D «±cT›8%öÉQ¶_á¨ô.šÛppBí<<œÈC‰§€èx ꎚØV¬,ĉé9ÕA¹G ÀO ¤¬L´w›Ü[o­4î>Úã¶Ë!tg¬ªeqã*&+ó&Ô^ï¶ô“p1?IbÖ ‹¯A« Œa/&L }âØæšHpþ~“dËZª©ÿÛh'ÚN‹ ‘kÁg…©NR…Æڜ}Ïfi\žg}y ¢´¹¨¨Ëü4àŠq±4¯Š4¦îi¿¢÷²“” ¾{^´‹Í.’ª<&1ðz™³|“õñ&ë£ @Ø6`“9¶ˆ`,* èÅK Z±% ÃߥÙpeZŒÐˆŸBìiÑGÊŠY4-˜i»’ö«Å ßšòê&³ABÍs ’½§T4ÇHÊh¡À°‰Ðb#ÏaÒf¡„°Øÿ JLg`=;IEND®B`‚numptyphysics-0.2+svn157/data/L50_nautilus.nph0000644000175000017500000002502412264274602020273 0ustar warp10warp10Title: Author: test Background: Sf5: 437,267 439,269 440,273 443,277 445,278 451,280 455,281 460,281 463,282 465,282 468,281 471,278 473,275 474,275 476,272 477,271 479,268 480,264 481,264 480,250 479,248 478,247 476,244 475,242 472,241 470,241 468,240 464,237 461,237 455,234 446,234 443,233 435,233 431,235 429,235 426,236 424,237 421,239 418,240 416,243 412,247 409,251 407,255 406,259 405,261 404,261 401,273 400,278 401,293 402,299 403,300 405,305 406,307 408,310 411,313 414,317 416,320 419,320 421,323 424,324 426,326 430,327 432,329 436,331 439,332 443,334 447,335 451,337 454,337 457,338 460,338 466,340 479,340 482,339 484,338 487,338 489,337 492,336 495,333 498,333 500,331 502,331 504,330 506,327 509,325 511,323 513,322 514,320 517,319 520,315 523,313 525,309 526,309 528,306 530,302 533,299 535,296 536,293 538,291 540,283 541,280 545,271 546,265 547,261 549,256 546,242 545,235 543,232 540,222 539,217 537,213 535,210 532,206 529,199 526,195 523,193 520,190 518,189 512,183 493,175 489,174 487,173 484,172 481,169 468,169 460,167 445,167 431,169 417,173 411,174 395,182 389,186 382,190 376,195 372,199 366,203 362,209 356,213 345,224 335,238 330,244 326,252 321,260 317,267 314,274 310,280 308,287 306,292 303,298 299,308 298,314 296,318 295,326 294,330 293,333 292,338 291,339 Sgs: 453,254 451,256 450,258 449,263 452,271 454,272 455,273 462,273 463,271 464,270 466,266 465,256 463,255 460,254 459,253 454,253 451,254 449,258 S2: 371,452 Sf3: 756,413 755,409 753,403 745,387 741,380 737,374 734,369 731,366 730,363 729,361 Sf3: 752,413 753,410 754,411 755,382 757,370 760,365 763,355 764,354 S3: 750,404 752,408 750,397 746,390 744,381 739,366 737,361 736,358 734,357 733,355 S3: 749,410 750,406 S3: 747,401 750,406 749,387 748,378 749,360 S3: 747,405 746,402 745,392 746,367 747,357 749,354 751,348 S3: 39,396 38,394 33,394 32,382 30,376 29,365 30,342 S3: 25,396 24,394 27,391 29,385 32,380 35,374 37,369 40,364 42,361 46,353 S3: 28,388 27,390 28,384 29,380 31,367 32,363 33,336 Sf5: 435,272 436,269 437,275 439,276 440,277 443,279 444,279 448,281 451,281 453,282 462,282 464,281 468,281 470,278 472,278 478,269 479,265 480,257 478,242 477,240 475,238 473,237 470,236 468,234 466,234 463,233 462,232 457,232 454,231 450,231 449,230 446,230 443,231 441,231 438,232 434,232 432,233 429,234 426,236 423,239 421,239 417,243 414,245 413,246 412,250 411,250 410,254 408,256 407,259 404,265 403,268 402,272 401,282 402,300 403,303 404,307 405,308 406,312 408,313 410,316 412,316 416,319 419,322 421,323 423,326 425,328 428,328 430,329 432,329 434,331 437,332 440,332 442,335 446,335 448,336 450,336 452,337 454,337 456,338 460,338 462,339 469,339 471,340 475,340 477,339 479,339 481,338 487,338 490,337 493,337 495,335 498,335 502,333 504,330 506,330 508,327 510,326 511,324 517,318 519,318 520,314 521,312 523,311 524,308 527,305 530,304 533,300 536,297 538,293 544,285 545,283 546,282 547,280 548,279 549,275 550,266 549,244 547,227 545,219 543,218 540,213 539,210 538,208 533,203 532,201 529,199 526,195 524,195 521,190 517,186 515,185 512,183 511,181 507,180 505,177 502,176 499,174 497,174 494,172 492,172 490,170 486,170 485,168 482,168 479,166 475,166 472,165 469,165 463,163 457,163 454,162 435,162 429,164 426,166 423,166 419,169 415,170 411,172 407,175 397,180 394,183 390,183 387,187 383,188 375,194 372,197 368,199 365,202 361,204 358,208 356,209 353,213 350,215 343,224 338,227 335,232 331,235 329,239 326,242 324,245 322,249 319,253 317,257 311,265 309,269 307,272 306,277 304,279 303,284 301,291 300,296 299,299 298,304 297,307 295,311 294,316 293,320 291,322 289,335 288,336 287,340 289,345 291,345 293,335 Sts0: 150,91 148,94 145,98 144,103 145,108 150,111 157,111 164,107 168,102 166,90 159,89 153,89 146,94 Sf2: 658,94 659,95 660,95 655,95 646,92 640,92 637,93 636,95 633,98 632,103 633,108 635,108 638,111 642,113 651,113 654,110 657,109 659,106 660,104 662,103 663,101 664,100 667,102 669,103 673,103 675,104 674,103 673,101 671,99 670,93 668,83 666,86 663,89 662,91 660,99 Sf2: 639,99 640,101 641,101 643,102 642,101 Ss2: 723,130 725,130 723,131 720,131 717,130 709,130 705,131 701,131 699,132 698,135 696,136 694,140 697,145 699,146 713,146 714,145 717,144 719,142 725,139 726,136 729,140 734,140 732,132 730,122 728,126 726,127 724,131 722,132 721,133 Ss2: 705,137 706,135 707,136 706,136 Ss2: 661,175 659,177 655,176 651,176 649,175 638,175 636,176 633,179 632,183 633,187 635,190 638,191 642,192 651,192 655,191 657,191 659,188 661,188 664,186 665,183 667,181 669,182 671,184 677,184 676,181 675,181 673,177 672,173 671,172 670,166 669,168 667,169 666,173 664,176 663,177 661,177 660,178 Ss2: 641,183 642,180 Ss2: 623,148 625,153 627,153 629,152 630,150 629,147 624,147 623,149 Ss2: 616,128 618,126 616,128 619,129 621,129 619,125 616,125 Ss2: 640,56 639,60 638,61 646,61 644,56 638,56 Ss2: 647,25 646,27 649,27 651,26 650,24 647,24 Ss2: 704,94 705,97 703,98 706,101 707,100 708,97 704,93 Ss2: 714,47 712,48 711,52 715,55 714,49 712,51 Ss2: 724,14 727,14 725,12 724,14 725,14 728,15 730,15 728,10 Ss2: 742,71 740,66 738,67 742,71 743,68 Sf4: 42,414 39,413 43,411 47,411 50,414 49,429 46,434 44,439 45,445 48,446 50,450 52,450 53,452 Sf4: 60,436 59,437 60,440 63,442 65,445 66,448 70,450 Sf4: 29,417 26,418 25,421 24,433 23,439 21,444 Sf4: 425,449 429,452 434,451 460,451 464,452 466,453 470,454 473,455 478,456 482,457 488,458 493,458 Sf4: 581,452 583,449 586,447 589,446 593,443 597,441 601,440 603,439 606,439 609,438 610,437 615,437 618,436 621,436 624,435 633,435 636,436 Sf4: 644,435 645,438 651,438 653,439 654,445 655,446 658,451 Sf4: 633,447 Sf4: 689,452 692,456 701,456 707,457 715,457 723,458 748,458 Sf4: 761,431 758,441 756,447 Sf4: 763,430 770,437 772,440 Sf4: 769,420 771,425 774,430 775,434 776,436 777,437 Sf4: 769,421 768,424 770,429 775,435 778,440 780,443 Sf4: 768,419 771,423 774,429 778,434 780,438 Sf4: 773,418 775,423 779,429 782,435 784,440 Sf4: 25,411 22,415 19,424 18,434 19,448 21,449 Sf4: 27,404 25,409 23,418 22,429 21,442 22,460 Sf4: 31,416 30,415 28,416 26,424 24,447 Sf4: 209,434 Sf11: 19,453 17,455 15,456 14,455 13,441 14,424 15,410 14,403 18,402 21,402 23,401 24,398 26,398 27,395 28,391 30,391 32,394 38,394 40,395 42,395 46,396 48,397 49,398 52,399 54,400 55,404 56,410 57,411 59,416 60,417 62,420 64,424 67,426 69,430 72,430 78,436 80,437 108,437 109,440 112,443 116,443 118,444 121,445 126,445 129,446 138,446 140,447 144,448 151,448 155,449 159,449 163,450 166,450 169,451 171,451 173,452 182,452 184,451 188,451 191,450 193,449 196,449 198,448 218,448 221,447 234,447 237,446 248,446 250,447 264,447 267,446 268,444 274,442 282,442 284,441 290,441 293,440 295,439 298,438 321,438 325,439 357,439 361,438 376,438 378,439 388,442 396,442 400,443 424,443 426,444 429,445 438,445 441,446 447,446 450,447 464,447 466,448 472,448 475,449 477,450 481,450 484,451 486,451 489,452 491,452 493,453 513,453 516,454 532,454 535,453 541,453 544,452 551,452 554,451 558,450 562,448 575,448 579,446 583,445 585,444 586,443 589,441 595,438 597,438 601,436 625,436 628,437 640,437 642,435 643,435 647,432 650,430 651,429 656,429 657,431 659,432 662,435 665,436 667,437 670,439 672,439 675,440 677,440 679,441 685,441 689,442 691,443 697,445 699,445 702,446 705,449 710,449 713,450 715,450 718,451 737,451 741,450 743,449 746,448 748,447 750,447 752,442 757,427 759,424 762,423 764,421 766,421 769,419 771,419 773,418 776,417 778,417 775,415 743,415 741,416 742,419 745,423 747,426 751,434 752,437 755,441 753,447 749,449 746,450 744,452 739,452 737,453 735,453 733,454 739,454 742,453 746,453 Sd11: 272,444 275,445 285,445 289,444 297,444 301,443 310,443 316,442 346,442 Sd11: 202,455 201,453 198,453 190,455 182,455 176,456 161,456 154,453 147,451 142,448 136,447 Sd6: 16,6 21,13 26,16 33,21 41,25 52,28 64,30 91,32 104,31 117,28 129,24 139,21 153,14 158,10 164,7 166,5 175,5 178,6 182,10 187,12 192,15 199,18 217,24 226,26 237,27 261,27 273,25 284,21 294,18 304,14 312,10 319,6 325,2 331,0 345,0 349,2 359,8 365,11 372,15 380,19 390,23 401,27 412,29 424,30 436,33 461,33 473,32 484,28 494,26 504,23 512,21 519,19 525,16 530,14 533,13 535,12 539,12 542,13 545,16 547,17 553,25 558,28 562,32 568,34 574,37 598,37 605,34 612,33 619,29 625,26 632,21 637,17 641,13 645,10 647,9 649,7 657,7 662,12 666,14 671,17 677,19 684,21 701,23 711,23 721,22 730,20 738,20 745,16 752,14 756,11 758,10 Sd6: 28,37 27,33 31,34 36,38 40,35 46,32 55,29 65,24 75,21 85,17 93,12 101,8 106,7 108,7 112,6 118,12 123,15 129,19 137,23 147,26 158,29 185,31 199,31 212,32 225,32 237,31 249,27 259,23 269,20 277,16 284,12 289,8 292,6 295,5 297,4 299,4 302,5 304,8 307,11 310,15 316,21 333,35 342,38 354,41 390,41 403,40 417,37 431,33 443,30 454,27 463,24 471,22 477,21 483,18 486,18 490,22 494,25 500,28 507,32 516,35 527,39 538,42 562,44 573,43 585,41 596,36 606,32 614,27 621,23 626,19 629,16 635,12 640,12 643,15 647,18 653,23 659,26 668,29 678,32 702,32 715,33 741,33 754,30 765,28 Ss9: 759,409 761,413 764,413 763,369 764,349 763,337 760,325 758,312 755,299 751,275 749,266 747,259 746,254 745,252 747,255 749,260 750,266 754,284 755,292 758,301 762,322 763,335 762,386 761,387 Ss9: 759,397 761,394 Ss9: 761,402 763,405 764,395 765,381 767,347 770,337 773,322 774,279 775,298 774,309 773,380 772,383 771,389 770,393 Ss9: 770,397 771,402 773,402 772,385 770,368 765,361 762,354 758,347 755,341 752,338 747,334 741,330 736,325 731,321 730,315 734,316 741,323 748,331 763,350 769,361 773,371 776,379 775,407 Ss9: 764,401 767,403 768,415 767,411 768,413 770,411 772,399 773,412 772,410 773,399 Ss7: 51,392 50,392 49,389 50,386 49,386 48,362 49,337 51,332 53,328 51,339 50,342 49,355 48,363 47,369 46,373 45,381 43,387 44,395 45,397 46,398 47,395 48,394 49,391 51,388 53,386 57,380 59,380 62,377 65,373 69,372 72,370 75,369 77,369 75,366 72,366 70,367 67,368 65,369 64,369 61,372 59,372 58,375 54,376 53,379 52,381 48,385 47,385 45,370 44,368 43,367 40,367 38,366 35,364 33,364 30,361 27,361 32,366 37,369 40,373 43,376 47,382 46,383 48,375 50,372 56,366 60,363 65,358 68,354 70,351 66,351 64,354 62,355 60,359 58,361 56,365 53,370 52,373 55,374 56,369 59,357 61,352 60,346 59,345 58,346 54,354 51,365 50,348 48,346 46,340 45,336 49,344 52,348 55,358 53,360 51,359 49,355 53,341 61,333 65,330 67,327 64,328 61,330 53,336 49,340 47,343 46,344 39,344 34,342 32,341 31,339 30,338 31,338 37,343 47,353 49,358 50,363 Ss10: 750,416 748,413 740,409 736,408 734,407 731,406 730,400 728,397 726,396 723,395 726,407 729,410 728,413 727,411 730,407 735,407 739,413 740,417 742,419 740,420 738,418 737,413 735,405 732,401 730,398 733,395 735,394 731,400 730,407 733,412 735,415 732,416 723,416 721,415 726,413 747,413 746,414 726,414 723,416 724,420 728,420 730,417 735,412 737,408 739,405 742,403 745,400 748,398 752,395 750,410 752,417 numptyphysics-0.2+svn157/data/pause.png0000644000175000017500000000115412264274577017134 0ustar warp10warp10‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDùC» pHYs  šœtIMEÙ +;‰`†tEXtCommentCreated with GIMPWÇIDATxÚíš1kQ…¿ 8¢ ¦I›fI±[YYYv‚•¿Ï"ÉHŠ@ºôYT­D"(¨àÚ(Á“"Øf“y³÷ⓜ–]ØÃ7oû–;ðÀcŒ1æžÒ”„%-ûªϺw€9ð˜7Mógè%¥¹‹ ¸ã柯7Ýg€)pÓ! ín>Å]ºe¯VÒ IZÎA—iKo>ËYÀHÒ¾îf_Ò¨ðšiîEÖVìfŒ{äÆ]¶wX¯€IܤËÖâ+àIR6ÛVÀvR6ÛVÀ<)›í+àiR6ÛVÀ·¤l¶;¬€GIÙlwX¿“²Ùî°&e³Ýaü÷x x ¬Æ¯¤l¶;¬€Í¤l¶;¬€IÙl·GaÂ…=xð(ì-à-àQØ£°GaÂ…= {΃‚ìzEî°Jަ´¹ÿÉŸ`[‘;¬€‹‚ìVEî°ÎÇÕLwXŸ€Ÿ=rϹà ˜»=r_÷¹CŸO€·d.ÀiEîrn9+¸!餙¤/ ç÷.%]H:’´3ðšiî¢Î op}Œõ%ðvá§¹œ6Ms¾BñincŒ1ÆsŸ¹l·«4ÕŸIEND®B`‚numptyphysics-0.2+svn157/data/numptyphysics.service0000644000175000017500000000012012264274577021622 0ustar warp10warp10[D-BUS Service] Name=org.maemo.garage.numptyphysics Exec=/usr/bin/numptyphysics numptyphysics-0.2+svn157/data/next_win32.png0000644000175000017500000002150112264274602020002 0ustar warp10warp10‰PNG  IHDRúņsRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<"¿IDATx^í |E¾ÇãäfÝ÷\Ö}¾ç>ׄr‡‹,x À¢ˆx€¸€Ü‚AX\]\ÝÁ®pß(‚ #á;÷=™dÞh¶mû¨©ééééšüøÔgœôTWW}«ê[ÿêéÄÛ"žü¤BzÒ_ßWÑ“_R­VÄÍ·U.¦W§ÖmÕ<ÒùßT®*¿/s»TŸJ?z oÓ=Žƒ aN Ì«õ¿’2õ×/Ž|TJÝn¯Inü;[µû# Ò".|áV«”"Ú&Tìz"¢ç¥ˆ>W@@ÀAºäD´IŽ¸ç ¯°è?¿9 @œC@WX·u< U€€ã Âr\—8g5CM@ÀiTŠhž(ÝÃÊJKBçðÞ¶‚°œÓ¨ €ƒ€FX÷ï‘"¬ˆn?€8Š€°è[C ;b‡€°pŸ@@ÆÂêyÉQ¡ * Âêö}Ó:  à(–0Á°£Æ *!! Öï{O–Ãî5†dpࢠà4zоäV¯T§Õõ(ç4ÂzðX ‹ž%…°d8Œ€°(Âz6½œ»Ípƒ-!EX–ÃÖ§ Ôì'aá[Ba@XÂt•ý«®N#a…RXÊ¿]ͧOìú`nŒœÿÅæ?WU²‰Mœâ×@vù~U™L Ü ËQsƒ³2d«.=Êøø5Â8/ª,ÓÄ)Á®’ÏòuqM›:úÀ¾u>Ï a†`£aÓ,¹´±°Âô¯58j@pVF[éÎC¿†çEÃRXRÛ7oøÒ/bvf6Ñ;vV/ä×2ÖÍgGC^¹`TÀQ‚³2Êð*$g=M÷W0Êg¤´¡6]Õ`Ÿ Á®³åCXÜà ù v‚Q¾ªÌc‡·ã*–ÏUù­jy«ù ÔVåF§jɬÒ+…¿rrŽZßòFŒ†ÎüÍ–Û8zä ¹=;c¥ãôF>HäÌŒr(OeŒö€ÚsUGV¯üLýô*דqQÊ/7b:j¾|gÉR«ÙM–òЦL®]—‡ƒ¿cŒÁ‡Z'—fÔ4)ÃWKæÑm/e„Kˆèà…”}RƒA*M"L¬Tí¢ËIU¢7þ6¹<䇰t",¥}´¢É&¤1'2š|P¾EÂ.'¨ÂRN$©bò^R;“7õ¥Ö)Oa”¬·®Á% èZX:hÕ¬S5SaQt…¥ìDmÕ’nšdÞ@«\K¨@‹= ,µ°hñTªG)ÉDÊ òZ­|Î@Z~}–Tai ¯ØZaÉ“D{{Þªbž&«¶fFW \[FNTE.FÙ|6\Z«8»ÕÊ8 ‚°~¡$ítUR.³’zäSä±®Œ2h´Ñb«&xÊñYí´1Ú˨ô'­ÛÊõ_^´U‘7;T‚|E™Q2O“•yäø”“ƒ_32­1Êo µMc\…¢TmUý R|§ 3•7 ,Ë?a)c%#_(E@#Où£<xÊᜨºÙØÞáôš¶Tmº©$íw…膇ç9§˜ŒÊÑî|ÙQ'g£†pÚÐQS:¼+aÙ*,íüQí°ä@@ž±Ú œÁ;*‘ 1ª€Ï©®;1ØÕ6šÿl ›è¢Ðµ9¯UÕà‘cxÛÁ­ƒ°B#,¥/Ø3Ÿñ){&ó ‹=.9Cåô6 òø0mµŠñ©]ö–¿QœÛaY% Âb=¡ª»5cøˆ½•s¬°ØRæiTXÚÁ‚°lã6îG>W~ΛA>C í®J÷Òì Fw««î>!°£EžºUÀÈÈ>+ÌØ˜;pž‡M• ,›„%oùŸvª>RMBÝùú¼×£­›Ï C:…¡v{u÷³ FÄä¨M·>J“êÖGigåÕ!,g:²OXÎå¤VZ·úÕðO÷ëZÈÌ €?àa• 'sak @XåbºZ;hD,-ér®ˆ¬œ\g †„%LW9yÝCÝ@À„ K˜®²gÃU@ÀÉ , @@–0]åäuu{@X€€0ð¤»0]eÏ †«€€“ @X€€0 ,aºÊÉëêö€° ,a@XÂt•=+®N&aAX €°„é*'¯{¨ØC‚°@„!€G…é*{V0\œL‚°@„!a ÓUN^÷P7°‡„aC¦«ìYÁpp2 †„%LW9yÝCÝ@À„ K˜®²gÃU@ÀÉ , @@–0]åäuu{@X€€0 ,aºÊž W'€° ,a@XÂt•“×=Ô ì!aAX ÂÀð¦«ìYÁpp2 †„%LW9yÝCÝ@À„ K˜®²gÃU@ÀÉ , @@–0]åäuu{@X€€0ðà¨0]eÏ †«€€V£*¶]!´|!¬£+‹Ð‚ÀÕAØh’ö›Ùzt(§jè…=¦âsmÐn\u ' a8¿aÜ¢'iÎ6‰‰IUC)¬Î£#Z­8jA—=ÉßtœpGHÚ‹‚p a%ü´ñû³«æ®{­õØJQcCଠ‹ZKmž»nÈîä¯÷žƒ°8 ²@¨°¾?·zÁ÷c·œ\øùî˜ãk¶²}{aQ;;L¨µôûwwùêÓ½£¾MYa…j⺠ÀI€„õ]Jì?ö ùpç+q‰sW&|ðÄÛw·iëmø+zT…îÓîÙtlÁÖ“_|ú݈vÙ“²¢¶„iø¾BO€¬Dñ„~U‘öCî|yζçgoí·pÿøø£ÿ|þ¯ ¢ÇTèÕË¦í¡­ÂŠˆ‰ˆ[qàÍvŸ^¾.é£}÷ÆÇ{þ2o×à=ÉË)Âò’2Hœ+²H€æàÆãŸÒ¦oÛÉEÛO-ÞqjÉŽÓ_î<½Ô›Î,ݼü¯Ûú¿»¥÷ÌM=glzæÃ¯Æ'}2rAgïmøqv8˾G£ÇFP«Æ-zâ۔دf~òí°ìylõÁΗ¿Kù†œµë̲g¾Ü~zñÖS_l>¹`Óó7œøçº¤DÛ¾O°Ëq:ˆKÀ+¬ÿš´î±)ñ]§®bÚ†îÓ7>Mnš¹©ÇÌÍRzfúÆîoox*fýã“ãÿ4ccU‰ïψ{¾õ˜JQc*»á6 «õˆ*Ñã*ÍL!%Ý´#Oý}× Ú ÿmÇÀ¹Û_˜³­ß{^g÷ Sâ»M\ÛùÍÕíÇĵµöØGV°Ê™ +þøÇ4'¬íDÚ"%Ñ”œºáñ·7=1móÓ7ÓëãS7u²±Ë¤õ'¬íøæêG'¬é°øÀä·½A7¦£ƒü@¥¢'Íè …ÏwOÚtâÓy»¿¿ãÅ›iÀÜýçî|~ÎŽggmïýî¶Ó·<5uc·IñMXÓq쪶£V¶|#¶Ùš£ó ,L'° ‹n×ŒŽ‹¦9H2¿¶ÃÄõ&oøã”Mc¶t‰Ùò¥)›ÿ8qcû«^QgàÒß¿¸ä÷¯,}€¶J_ìôøÛÿ=¦RðjtaEªôä´»W˜{dݨ›µ¥ï¬­ÏÎÞö,yjÎNJ}fíìõîŽ3·wŸ¶µ[Ìæ.“6tzsí££âZˆm>tE£5G?´ÿ«ÓàáFÉ àp$,št+ÐþfT\ËqkZ_ßvâ¦G'n~tòÖöomióF|äÀØ»ú,«þç/«ô\Tù™Ïoï>¿Ò“ÿô&Òܲ3úÎy(xAFp…=¶R¿9‘›O,ü|ß›Ó6ÞÚ ¿³¥Ç»Ûz¾·£ç¬]=ßÛõÌ»»ºOÙÖq̆¦C×Ö{mÕ}ƒbÿ0ø›†¬¨7tÅ#¯/o°úèßð[;â¨^8 é{dö«_ÕyíëúÃV>2|UÃak"‡®­ûÚš{®úÍs±Õû­¬Þ/¶Ú³ßTëûuÕÞK«ô\\…œõÔ§^a‘æíŸÜ{ö¢ ‹~Uò¹¿EÆyŸÂEº‡'m†i˪’žž‹«Þuõþkj¼°¦½>¿Ê«­¾4a¿ªê³T¦»]ó¶¿Þmjí þ²ap#,z:ƒ\Û%æÎ¿on¨÷]X{ÀÒ».¿û…åwö[Q“LÍ–‚Bha"X„ŒØAXâ¨^8…õô‚Û{.®L>¢)ù|\õÖÖx1¾æÀ ÞôâúšÖÕ迺Æs+«÷]^µß²;ÞßÝÖúçÚ¯5,¸Ï‘WXRG¶Y¡Ýøjï¬ëûþÎú.¹ƒ¶¾ÔHj*5˜šM¿E!¾&A!4È«íÅ• „N“mq>IX+ôXXùæTõÆV^[m¨ùÒæZ¯lý¥—·ÔziS­ñ5i Z{÷üC',ï=ºRdŸ ÿ!›m< "}w0vÙcó÷5î)¶òÚ*¾æKkQã% „ƒ D˜![rVèŸ~vþ4C ­" kÉÁÉKOY–³<)æ›§Æžz;îÌÛ«R¦­>;í/{~;hÇÞ »©Ö˜íõ3x~T«‘ïn¢G«4:U{Hf•^)V!ʹ§M=£ñòÇ7fKŠ­¨ÁÔljüês^„ƒ ´üx Á"d[Bk;¥ƒãN裕g' ßw×o=xçÓ÷·]rtLïÙ÷Ñ6°ævØŠªmS„%úÕo#¢†VèùÞÿ-<4júÞŽ¯l©EͦƯ¹0 # @ äènúÊs“FøÝÐïÔ별a]bj7ôm ²á¶ Kºpã—*vžô_Ÿìí£Ä¾¯û›¿|ÿŸë.Í@òሠ€›€WXç'O8zߢ”Aìéß~|õºO÷»¶>!U¢^ íÆUµµÏ¢Ó¯9xOü 7ª@ÀéHX´Š»8qòš®mÆÜ~oG[c+I^¡]øÞ¶ék…±Ë;,?7.þ2„åôÁŠèZ©—<}Èg-[ªtW}›nZ©°‡LXTßÜÑjd¥?L7ݱ%Ä|‡ IÚ}Æÿ¶^¡FÐØ*”–Ü7QÃ+>9ý ,‡VT¼ÿ›¯aAüÅf¡Œ°äú‘³!,žÞB(ç!¬rÞh>€' w»A„!a ÓUœK²@€° ,a@XÂtU/›hp€° ,a@XÂtç„l Æ , @@–0]ÆË&šœ , @@–0]Ź!„1 †„%LW…ñ²‰¦' †„%LWq.AÈaL‚°@„!a ÓUa¼l¢i ÀI‚°@„!a ÓUœK²@€° ,a@XÂtU/›hp€° ,a@XÂtç„l Æ , @@–0]ÆË&šœ , @@–0]Ź!„1 †„%LW…ñ²‰¦' †„%LWq.AÈaL‚°@„!a ÓUa¼l¢i ÀI‚°@„!a ÓUœK²@€° ,a@XÂtU/›hp€° ,a@XÂtç„l Æ , @@–0]ÆË&šœ , @@–0]Ź!„1 †„%LW…ñ²‰¦' †„%LWq.AÈaL‚°@„!a ÓUa¼l¢i ÀI‚°@„!a ÓUœK²@€° ,a@XÂtU/›hp€° ,a@XÂtç„l Æ , @@:ªÜèTí!™Uz¥„±§Ñ4 @X¬-"/Ô¬%aAX €°„é*kW*”"€° ,a@XÂt•ˆë!ê Ö€° ,a@XÂt•µ+J @X€€0 ,aºJÄõuk @X€€0 ,aºÊÚ• ¥€ˆ , @@–0]%âzˆ:ƒ€µ , @@–0]eíJ…Ò@@D„ K˜®q=DAÀZ„ K˜®²v¥Bi " †@@ЉyÔBI+K³¶ds•tBÌÕ< Îü0èÄ`4Ába"@ÎåAãïð7?ÕÁÄ)<5/‡y@²v:O“!,Ã`s†g)à ¬èÅ*,XR’@(Ô}oFé—KP–/—j¯¢ª‰QÝŒÊÑæg\][-UÕˆÑm£ ©2vSW®ÛR£ËÉ'*9(¯«­¶jvuËÑm‘.g'Ø…«—ŽŸÜsðØÁãÉGÏœOøñäGÏœ>|"ùð‰ó‰ÇÏÛüz$é\BÒÙÃÇÎ<–’˜üC♇Oï?rr_‘½‡í;t(H¯{‘]E™N?ròôÁ¤?$8–r.åZêÕŒ4ž¾TXÚi¯:"O`íqŸòÒf`Q wžs•uãÉÏÎ#OBUtÀŒ¨*¦[‚ìkÎ.PuÃ>Kö‰Z9òt¡ù\xÆ®cóœ8{~ö¼OÛwëU·qëºMZ>بÉÖŠzè‘5Œ¶?ÕoÔ†R½GZÓ¥ë6hUçá–”|8*²)¥æAKQõ›yÓͫܺVƒ&Í4mÚ¨yËÍ[>аÑý7nû§§ÆÏœ³í‡£©ù<Ja±‡µrÖuj^ùœEºaÌ]›h/Êc1#g]B˨@}*×MΠ½®¶½Ê#ª’UåË£]öÚ`$SžìÀ2ª‰Qñ\‘AI·EFºçÍÉóûº ÉVž÷Ïû,åž‹ç}á ¹TTì6J=eæRY™Ç\Êr{2nxîªEæâé¾€¶„<`D%ªð„'§UWTYCû£Ñ…‚7/9ðøñ#§*Ž Æ%ì)3²Y«‚ROFž§Àí).5™Ê<sÉU˜k:yÊÜ&“Ù¨îj¶ûÔåœ:QéNOï@X·žÃâœíœÙxЫâ þST9µ¤é¢Br"#° I}¿( +«Ð;ƒó =ׯešK&uUæqæ˜N%®sÉ•›n.exN_ÊnޱǕy›„ÅSäð ðP㨌ü2¯°ò˲3óÌ¥¢ü<Ý¡ø§›¡8/C•è ùˆò½6gIA–¹äq»Ì¥<—çjVqd‹Î×s!¬›Ï²"€Í¶hG7°ÒrJéO©É”Ÿ™©M¤ÝãʃÅ9éªä•”æ îï¦R^jš¹t=»(Ãå¹ëfôO7aY»?2ºÉmɽ-ÕMh4&òX Ä’†›h…ö”`´K¾JP ·¤ùþÙ´]v±‡v…ùEžÂ|“éF[•È;ÚƒtD¹¤O•!ØœlJ?g¸ù^yDúQ:B¯žºñ–Gïå7Ò¹ÒŒ”Ÿe.]Év'§ºîoö§4W(„Å–»ãµçú[šÑзmJ°¿5Ó~sçó Fåý-Óßü~UÛDáþÄæüõ›¶ñ~ùUèÉ.òî Í¥â·*y%æA)ƒ÷5;KJÒ{þ#eù¹”(¿üª<"½×M%E.s‰n]•_aKÛ¦„ö{®@Ž/Âòˆ¿ùýDP ÷«&Ve®×¤EºÛs½Ð“UäÉÉw›K…yªDa”2Ы›ž§¿™¤÷üGJó3(Q~éUùOúÈ(¹ré|3éjVnJjÞƒM:ÑÆ‡ [BíWÇ›(ê6mLÖ5WIª»$ÃE_Û›I¹®åaËy!ž¢•§M§®±v¾’{>½è앜ēç/]NMMË:sñÊéKå']>uù"%o“/¦ž¾˜NéÌOôzíì•ëg._ºœ•y9''éÜåù_¯‰~¬wŽéÇ ,£?sϪ2}–a™èqÆ)#ÆN|uø› ¿Ùøí‘äÇÎÒqß³çÀÁ„£?$þ¸ïXðÒ©}GÏîK<Ï›(ó±SÁ¬Ïñ}IG½ÉÛdª[2¥ý‰Éô~Ǿ„}II»¶ìÝ·býÖ¡ã¦NšùQVž“",kJ'HËÊ0õÇÿ< A‹÷×oÖ´Eûú‘Ú´íаi‹ÈæAKÍZE6kK¿Ä›(3¼ú4ŠŒjâMt‰f­oÕÍ{ÑÖMÚ´‹þc§:©ß¬y×}†¿9åÔ¹ úsZ<}з„<@°Š„…?ç K˜®²jB9 .€žt·Ù¨9€€ˆ ,DX €°„é*×CÔ¬%aAX €°„é*kW*”"€° ,a@XÂt•ˆë!ê Ö€° ,a@XÂt•µ+J àIw @@úÂúõS礿’\å©4FŠè’ƒ ¶h“qÿžˆ{¾ˆðÚëw‡éïaUìz‚œE¯ô€8‡@óÄJ‘+ÿ-,ò€8ŸEX·Ý9 @œOàÿ5|B'l ±IEND®B`‚numptyphysics-0.2+svn157/data/L01_tutorial.nph0000644000175000017500000003540412264274602020271 0ustar warp10warp10Title: Author: test Background: Sgs: 596,391 605,370 604,379 607,389 623,390 619,392 615,399 613,399 617,409 612,407 611,408 612,407 614,409 616,415 606,402 604,402 598,410 596,410 594,413 593,412 591,405 593,399 587,397 582,391 591,388 598,388 Sf4: 123,447 126,404 127,312 125,258 122,251 125,251 141,254 155,253 210,259 355,264 357,267 367,273 381,287 385,288 392,297 396,298 402,304 405,305 440,338 446,342 452,350 460,354 461,357 468,361 475,369 482,374 484,378 503,391 510,399 513,399 524,404 548,409 557,413 565,414 571,417 597,418 623,422 671,421 680,419 685,414 691,402 698,381 694,301 697,299 721,298 725,319 728,388 734,403 742,441 746,448 Ss5: 697,295 699,298 706,287 709,277 711,275 716,301 Ss5: 707,278 709,277 712,261 711,258 Ss5: 694,262 695,265 725,264 723,275 719,275 Ss5: 709,253 710,255 717,255 718,251 714,244 703,244 701,249 702,253 714,256 Ss2: 693,242 698,239 703,239 726,247 Ss2: 700,234 702,237 703,233 712,230 717,230 720,234 718,244 Sd4: 130,252 131,295 130,401 131,413 132,440 131,448 130,447 129,439 128,415 127,442 128,370 130,353 131,340 132,334 133,324 134,321 133,337 132,363 130,379 131,426 130,376 129,359 128,331 127,319 126,353 127,360 129,357 128,282 127,261 129,261 130,285 129,260 Sd4: 134,255 133,253 129,253 135,255 143,258 153,259 164,262 174,263 183,266 189,266 191,267 186,266 179,265 170,263 160,262 149,259 139,259 132,258 128,258 131,257 136,256 164,256 175,257 187,259 208,261 215,261 217,262 208,262 199,261 190,261 179,260 169,258 156,258 158,260 196,260 209,261 222,264 232,265 241,268 237,267 182,267 173,268 167,268 180,268 191,267 205,267 221,266 237,266 252,267 264,268 277,268 275,269 268,268 259,268 249,269 209,269 218,271 273,271 283,272 291,272 277,269 256,269 243,268 230,264 215,264 220,264 230,265 243,265 272,267 286,267 295,268 305,268 298,267 289,266 258,266 246,265 238,265 234,264 247,264 257,267 322,267 319,268 313,268 302,269 291,269 281,268 273,267 268,267 339,267 328,267 323,268 317,268 325,268 333,267 341,267 348,268 352,270 350,270 353,272 350,273 345,274 319,274 307,273 296,270 286,270 276,267 269,267 260,265 253,265 246,264 229,262 169,262 167,261 138,261 141,259 174,259 188,262 203,262 218,263 230,265 240,266 249,266 266,268 272,268 285,270 290,270 297,271 306,272 314,274 322,275 329,277 342,279 346,279 349,280 351,280 348,281 343,280 335,277 325,275 303,266 322,266 343,268 358,271 360,272 350,272 343,271 320,271 316,270 321,268 348,268 345,268 341,269 335,270 304,270 296,269 264,269 261,268 257,268 254,267 236,267 232,266 186,266 176,264 164,264 156,262 143,262 139,260 141,260 146,259 153,258 191,258 199,259 206,259 211,260 227,260 231,259 273,259 276,260 281,260 284,261 286,261 288,262 290,262 292,263 294,263 291,264 287,264 282,265 275,266 245,266 247,266 250,263 295,263 298,262 317,262 Sd4: 355,269 360,273 364,277 371,283 379,291 388,297 401,310 398,308 393,305 388,300 379,293 373,287 372,285 369,284 367,280 366,279 365,277 363,276 362,274 361,274 360,271 362,272 368,278 375,283 382,290 388,297 396,305 397,305 396,302 390,296 385,292 381,288 377,285 374,281 370,277 366,274 364,273 361,270 360,268 358,268 360,271 363,275 376,288 392,302 396,305 390,300 383,296 377,292 373,288 368,284 365,281 359,279 354,278 351,277 348,275 350,277 356,281 364,286 371,291 376,294 378,294 375,294 362,281 359,279 355,277 353,274 352,274 356,274 363,279 371,285 377,291 382,295 372,288 367,283 363,280 360,277 358,276 366,279 375,286 384,294 393,303 402,311 411,318 416,324 418,326 413,323 408,318 403,315 392,304 398,311 405,318 414,326 424,334 433,343 439,348 442,351 435,344 429,339 423,333 417,328 411,320 406,316 402,312 401,310 403,310 419,324 449,354 453,357 449,354 439,344 427,332 422,326 413,317 411,314 410,314 411,312 417,317 424,324 431,330 440,341 442,344 440,343 436,338 432,334 429,330 418,319 409,312 407,309 401,303 398,301 397,300 401,303 406,308 413,314 432,331 439,338 452,349 456,352 460,356 458,354 452,350 444,345 438,341 434,338 438,341 446,349 457,358 465,367 472,374 478,382 482,385 483,385 481,382 475,378 469,372 462,367 448,353 454,359 464,366 475,375 484,382 491,388 495,394 498,396 488,386 481,380 472,373 465,367 459,361 454,357 449,352 455,356 472,369 480,377 488,384 495,389 501,394 506,397 508,400 504,397 501,394 492,387 478,377 469,370 466,367 464,366 468,370 490,386 497,393 502,397 506,400 511,403 514,404 517,408 520,409 522,411 526,413 527,413 Sd4: 512,408 514,405 517,406 520,406 524,409 529,410 535,412 539,412 542,413 544,414 547,415 549,415 552,416 553,416 555,417 552,416 548,415 542,415 536,413 530,412 526,409 522,408 516,405 513,404 512,402 513,402 519,405 525,405 532,408 540,409 545,412 550,413 553,413 556,414 551,414 545,411 539,409 534,408 529,408 527,407 539,410 546,411 553,413 560,414 565,417 572,417 578,418 582,419 587,419 592,420 596,421 608,421 593,421 580,419 574,419 570,417 566,417 564,416 561,416 557,414 559,415 565,416 572,418 579,418 587,420 595,421 602,423 620,423 622,424 616,423 607,423 596,421 587,421 578,420 573,419 Sd4: 563,416 557,416 555,415 559,416 565,418 600,422 611,424 624,424 627,425 666,425 669,424 667,423 661,423 655,424 631,424 674,424 676,423 681,423 683,422 686,421 688,419 690,418 691,414 692,412 693,411 695,408 697,402 Sd4: 693,307 696,309 697,312 698,321 699,324 700,328 699,351 698,389 697,398 695,409 694,410 693,412 690,415 687,420 686,421 687,416 689,414 691,408 693,407 694,405 696,404 698,398 697,400 695,403 694,406 693,408 694,403 696,400 697,396 698,391 700,389 701,383 702,380 701,366 700,358 699,357 698,332 697,321 701,305 704,305 707,304 716,304 713,302 698,302 713,302 714,301 716,301 714,302 711,303 707,304 704,305 703,305 701,306 699,306 705,304 712,304 714,303 724,303 Sd4: 717,303 718,303 720,305 722,321 723,326 724,333 725,337 726,339 725,335 724,326 722,315 721,318 722,333 721,337 722,363 723,337 724,367 725,374 726,385 725,373 724,368 725,384 727,388 729,391 730,396 731,399 732,406 734,409 736,415 737,420 738,421 736,413 735,407 734,403 733,403 732,402 731,398 730,396 728,385 726,384 725,387 726,395 728,398 729,406 731,410 733,417 734,417 736,421 739,431 742,438 741,434 739,430 736,418 735,415 734,413 733,415 734,422 736,431 737,439 739,442 740,444 741,447 738,435 736,429 735,425 736,432 737,437 738,440 740,441 742,447 743,446 Sf5: 16,445 18,442 20,442 24,443 29,443 35,444 43,445 51,445 60,448 82,448 88,449 95,449 101,450 151,450 158,451 255,451 263,450 271,450 291,448 300,448 310,449 320,449 331,448 372,448 381,447 390,447 399,444 407,444 415,445 469,445 477,446 543,446 551,445 607,445 613,446 620,446 625,447 657,447 662,448 673,448 680,447 694,447 709,449 723,449 729,450 735,450 739,451 750,451 755,452 760,452 765,453 791,453 Sf7: 24,45 23,43 24,44 27,42 29,41 31,39 33,36 34,33 33,45 31,51 30,56 Sf7: 22,57 25,53 28,52 39,52 Sf7: 18,32 15,33 12,38 9,42 8,48 9,56 14,61 31,61 37,60 40,55 42,53 45,48 46,44 43,30 38,26 31,23 24,23 17,25 10,30 Sfd11: 265,39 264,39 267,42 268,47 270,47 Sfd11: 272,57 273,56 274,56 277,60 278,64 Sfd11: 281,67 283,74 285,74 286,78 Sfd11: 289,83 290,84 293,85 294,88 296,89 Sfd11: 302,84 304,80 306,77 309,74 310,70 Sfd11: 315,59 316,61 320,56 322,51 323,49 Sfd11: 325,39 322,34 320,35 314,35 Sfd11: 306,36 305,31 294,31 Sfd11: 284,31 282,30 279,30 277,29 275,29 Sfd11: 268,29 265,30 264,30 268,37 Sfd11: 69,25 68,25 69,35 70,38 Sfd11: 59,26 61,20 76,20 77,25 78,29 77,33 75,37 74,38 62,38 Sfd11: 86,38 85,35 84,31 86,23 88,21 90,21 Sfd11: 102,26 98,26 97,25 93,25 92,28 93,32 97,32 99,30 100,28 101,27 102,31 106,35 Sfd11: 110,25 109,24 110,30 112,34 114,34 116,31 117,30 118,25 120,28 121,31 122,32 124,33 126,30 127,24 128,21 Sfd11: 155,27 153,22 150,21 148,21 146,22 145,24 144,25 146,29 148,30 149,30 151,29 152,26 153,25 155,26 156,30 158,31 Sfd11: 117,40 115,40 116,55 117,53 118,50 121,48 123,47 125,47 126,50 127,52 125,58 121,58 119,56 117,55 120,51 Sfd11: 132,39 130,39 132,50 133,58 134,62 Sfd11: 145,44 144,45 141,45 139,46 137,52 138,55 146,55 147,53 148,52 146,43 144,43 Sfd11: 163,43 161,41 157,41 155,44 153,44 151,48 150,51 151,52 153,53 156,54 161,54 164,53 Sfd11: 169,31 168,30 167,30 168,45 169,50 170,57 172,57 Sfd11: 177,38 174,39 171,41 169,43 172,47 174,50 176,51 177,53 178,53 179,56 Sfd11: 189,45 188,43 186,43 191,42 198,41 207,42 240,42 242,41 252,41 Sfd11: 245,34 247,31 249,34 251,34 248,42 246,43 242,46 241,49 Sd7: 62,159 61,162 59,162 57,159 58,156 62,153 65,152 67,151 68,152 65,164 62,167 60,170 63,173 67,173 70,174 73,174 Sd7: 61,142 59,140 55,142 52,145 49,152 48,163 49,174 55,181 65,185 77,185 84,182 88,177 85,160 78,151 71,147 63,147 56,149 50,152 Sd11: 103,159 106,175 109,177 Sd11: 114,174 113,172 114,159 116,156 117,161 119,165 121,170 124,170 125,162 126,160 127,156 129,157 130,160 131,166 133,169 135,174 Sd11: 138,174 139,172 140,152 143,150 146,151 149,154 151,157 150,160 148,163 143,163 Sd11: 151,169 149,169 150,171 152,166 153,163 155,160 157,159 158,160 160,165 161,169 163,174 164,176 Sd11: 152,168 151,167 154,167 157,166 161,165 163,165 Sd11: 182,157 179,156 177,156 174,157 170,163 169,167 168,170 170,174 187,174 Sd11: 196,156 195,160 194,161 195,173 Sd11: 188,157 186,155 188,152 202,152 Sd11: 215,134 214,154 Sd11: 212,167 214,168 212,165 210,166 209,168 Sd7: 399,84 400,80 402,78 406,78 409,77 411,77 409,81 407,82 406,86 404,88 407,85 410,86 412,89 411,95 409,96 399,96 Sd7: 394,69 391,72 390,75 389,80 392,97 398,102 407,105 416,102 421,100 424,96 420,79 415,72 406,69 392,69 389,72 Sd11: 437,88 436,89 435,118 Sd11: 436,87 439,88 442,87 444,87 446,89 445,95 444,98 441,100 437,100 441,100 443,99 446,99 448,100 449,104 448,109 446,110 444,113 443,115 435,115 Sd11: 467,100 465,102 456,102 452,105 451,105 450,109 451,113 459,113 462,107 463,104 464,103 465,108 467,109 470,113 Sd11: 473,83 475,86 476,102 477,110 Sd11: 482,89 483,89 484,115 487,117 Sd11: 436,129 437,131 438,144 439,147 Sd11: 439,128 440,128 443,127 444,127 445,130 446,131 445,137 442,137 440,138 442,138 444,141 446,142 449,143 451,145 453,146 Sd11: 459,139 460,139 461,141 459,141 457,142 456,145 459,149 466,149 467,146 468,144 467,140 464,137 461,137 459,138 457,140 Sd11: 474,130 475,125 476,137 477,141 478,147 Sd11: 483,127 485,146 486,149 488,150 Sd11: 502,132 501,133 495,133 492,134 495,137 497,137 500,139 497,148 494,149 492,149 Sd11: 371,152 376,156 406,156 411,158 414,162 418,165 422,169 424,173 427,176 429,180 430,184 433,186 436,196 438,180 Sd11: 436,197 435,195 431,194 429,194 427,193 424,193 420,192 418,190 Sd7: 526,176 525,178 518,196 514,201 513,205 515,205 517,204 520,203 523,203 527,202 529,200 Sd7: 524,192 525,193 526,215 Sd7: 514,181 515,183 512,185 508,189 505,194 503,202 505,209 509,216 516,220 524,222 532,222 538,221 544,213 545,209 544,199 540,187 538,182 532,179 527,176 521,177 514,182 Sd11: 557,174 558,170 559,189 Sd11: 558,184 563,179 570,179 Sd11: 568,169 570,165 572,169 573,185 574,186 576,190 Sd11: 583,173 585,189 Sd11: 592,184 594,170 595,186 Sd11: 587,168 588,171 592,170 604,170 Sd11: 566,200 564,203 558,203 556,204 558,209 561,210 564,212 565,213 563,219 556,219 Sd11: 570,201 571,204 572,205 573,208 575,211 576,216 Sd11: 566,202 568,205 570,204 578,204 580,203 582,203 Sd11: 580,218 581,218 583,216 584,212 587,207 588,203 590,203 592,207 593,210 595,218 596,219 Sd11: 584,218 587,213 589,212 595,212 Sd11: 599,215 602,218 601,215 600,210 601,205 605,204 607,205 605,213 603,213 607,213 611,216 614,216 616,220 617,220 Sd11: 562,236 563,235 560,236 558,237 555,241 552,244 550,247 548,252 546,256 544,266 546,286 547,290 550,294 552,297 553,300 555,302 557,306 558,307 559,311 561,311 562,314 Sd11: 546,314 550,314 552,317 555,317 558,318 561,318 564,315 565,311 566,308 567,302 Sd7: 162,409 161,408 159,416 160,418 166,418 169,419 170,423 169,431 163,431 160,430 158,430 Sd7: 164,408 163,409 168,411 175,411 Sd7: 158,397 157,402 154,403 152,407 150,416 155,437 160,440 167,443 173,443 178,442 182,437 184,434 185,423 183,410 179,405 175,402 164,402 156,404 151,409 Sd11: 198,412 200,417 202,428 203,431 Sd11: 193,409 192,410 199,410 204,414 210,417 214,420 216,423 211,428 207,430 194,430 Sd11: 228,415 225,417 223,420 227,434 233,435 237,435 239,431 240,428 237,419 234,419 232,418 228,418 225,419 224,422 Sd11: 248,417 247,422 Sd11: 247,423 251,427 254,429 258,432 262,434 265,433 264,429 Sd11: 248,418 247,420 249,441 Sd11: 268,430 265,430 264,422 263,418 264,415 Sd11: 276,420 277,437 278,438 281,439 284,441 291,441 Sd11: 276,433 280,431 283,431 286,430 288,430 Sd11: 274,421 280,419 287,419 290,418 Sd11: 304,399 303,409 304,425 Sd11: 302,443 303,438 299,438 302,440 303,434 300,434 Sd10: 733,31 735,27 730,24 727,28 725,33 727,42 729,44 733,45 739,45 744,44 748,40 751,35 752,28 753,23 754,20 750,18 743,18 740,21 739,21 736,23 734,24 732,27 730,37 731,41 734,42 737,42 740,41 744,35 745,34 746,25 744,23 741,22 737,22 734,25 730,28 729,33 730,38 733,39 738,42 741,42 745,41 747,40 749,37 748,27 745,21 743,20 737,20 735,21 730,24 727,28 726,36 727,38 731,39 734,42 737,42 741,41 744,39 746,36 747,30 748,27 747,20 744,19 742,19 739,18 734,18 731,19 728,22 726,27 725,31 727,42 728,43 731,44 739,44 744,39 746,36 748,30 749,24 747,17 743,15 738,15 734,19 733,27 737,33 746,33 748,32 750,29 747,15 740,15 739,17 Sd10: 726,53 729,53 727,51 724,56 721,60 717,66 714,70 713,73 712,73 Sd10: 738,50 740,50 739,53 738,66 737,72 736,76 Sd10: 748,50 751,50 754,53 757,54 762,59 764,60 766,63 Sd10: 756,36 757,39 759,36 757,33 759,33 763,34 767,34 772,35 774,35 Sd10: 761,20 763,22 766,17 770,14 776,10 781,7 784,6 Sd10: 750,19 751,14 752,14 754,4 Sd10: 720,12 718,4 717,1 714,1 713,2 Sd10: 713,25 715,27 713,25 705,23 694,23 Sd10: 715,43 712,40 708,44 703,48 696,53 693,56 690,57 Sd10: 735,11 734,5 733,1 731,1 Sd10: 709,36 704,34 700,35 696,35 692,36 691,38 Sd10: 714,51 711,49 709,52 703,62 699,68 Sd10: 730,51 733,54 732,57 731,61 729,65 727,71 726,77 Sd10: 742,54 745,55 748,66 752,71 755,76 756,79 Sd10: 755,44 757,44 762,45 766,46 769,50 773,50 Sd10: 763,25 766,26 770,23 775,22 778,22 Sd10: 733,28 735,25 731,25 729,26 728,30 726,32 728,38 731,39 735,39 739,36 741,33 742,30 743,26 742,23 740,18 738,18 735,17 730,17 727,21 725,24 724,27 722,28 723,35 726,35 730,37 737,37 741,33 744,27 743,25 742,17 739,17 737,18 731,18 728,23 727,24 725,34 728,41 730,42 732,42 736,41 738,41 741,37 743,34 745,30 746,24 744,17 741,15 738,15 733,14 730,14 726,16 723,17 721,19 720,21 718,24 719,38 722,39 724,42 729,42 732,40 741,31 743,26 742,20 740,17 736,17 732,18 729,22 726,25 725,29 727,37 730,39 733,39 736,37 739,34 741,28 740,24 739,21 736,20 734,19 727,19 724,25 721,29 722,36 725,39 735,39 738,37 740,34 741,30 739,19 737,16 733,16 728,18 725,21 721,24 719,27 721,35 724,38 729,41 735,41 739,40 742,36 743,32 742,21 737,18 734,16 726,16 722,21 720,25 724,39 733,39 738,36 741,33 744,27 743,17 740,16 737,16 734,19 731,20 729,24 733,35 737,36 740,35 742,32 743,27 741,18 738,21 735,23 737,28 Sd10: 760,13 762,13 764,8 767,2 Sd10: 712,20 714,20 713,17 711,14 707,14 703,11 698,11 St0: 315,105 314,106 311,105 307,105 304,108 301,113 299,126 302,133 309,136 317,139 324,138 329,134 332,131 334,127 331,119 325,112 318,108 311,107 306,107 304,108 numptyphysics-0.2+svn157/data/pen.png0000644000175000017500000000260612264274602016571 0ustar warp10warp10‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDùC» pHYs  šœtIMEÙ '0„¢tEXtCommentCreated with GIMPWáIDATxÚí›KhUÆ3¹¥y¶jI+Z¡ôáÆ¾´-*ºÐ¥ÁG\¹p¡E\ØlD(B UK5¥‘@A ‚PBÕE+5hH±¨˜pC-15¹¹Í|.z¢ñçÞ9gîÌÜĆ@Èœ3ßwþçþøË^­~¸¤pbž·4(G<ªÞR$E o©/'‚·ˆ‡‰à/'ò‹Á_ÎärI{ݘQÜežÝÀð ðp¸ì¼QŸçk’t@ÒO’æôó»%­¶þ>ò6"XÎq“¤C’¦õ߸"éYI ™ÀrüÛ%½"éO•Ç×’6fR˱·H:VfåKñ@Ø÷åjÈÓﺇ"Æ/õN§@Fð0ð2°ÃâÝB¦â‹ÕxÝ’ü9à·ÌX@DòMÀÓÀ @»ÅtsÀgÀ¯‰ÅaN0â’Žš3ݤÒZ­O©¸(÷·AP,KÉÈIšã’Ô°|w¤>òEIý’Ö¦FÞá¹EÒ;äg%”Ôf£¤DIë$q4ûþ nµÒR$¿UÒÇ% MÌH:¾XâS±iŸššò%=(锣ٿ+é§0=$í“ôÜð¶¤kü*IÏKq8ç%©×¤Å¡ógjïo‘ôž¤IÇ•?aâ÷ -Aò{$5gµ F$Ý/É/7çàà`y"¿]ÒâA ˜b‰V«™ µÀ.`°3†1ÏŸ:;È[€Ç'LÛØyà#à , Ð< 6Ç4æïÀaà`2Ѿ€:€ÎÉo½ÀÕÄ#Ø l3fêÒ) €Q '‚c¾ïRé Y` °Ö‘ü,ð%ðÐïûÕ«ÜUcä?½ôÏÀ[Àsù|~ ‘:]ÌÏ6I§-ÃÜK’:gffþîæŒŽŽÆþÿêgV¡#Ûbê÷Ï”«É/‚{¡j.xE÷ÆÆÆ\·À`…Å»C$ŒÜ¼* ­ ½=RÚÖÛÍϰǿ|ŸTi~¡¸œuÀ&S»ïn6«î×,ŽÁ#i´œr ÷F_Pì5íª½‹¬v¥æ?/Òp*ÉͼäJD"x&ÐyÉ8-"2[¤Ùˆø-0 ¼Œ¤j¥^2Dˆà>“åUJ\&™9 |ÍÜÃÀÀxZ]WÐìVEp’à p¸D†ÕSÏ{ü;"¾W¬Ìy[6«-s„¦Z`¥9ïmÐlfN€àn˹fâ¬ä¤%ÀàN‹y¦Ì9?]ËÔïoãOšS P3”dM ÀSÀKÓ¿»»ûŒçyA ×iÃÆFIû%]´¼ªò£¤ÖêUë Ü<¬·\ýn†æå …ÉD$(ÉÏçó>pѯ¨Íšp·ø<Ëfï…°žëwôžŒ(À4ׯ§}¼éyÞU‹mW}âåEÒAIc÷ü„¤W%m–Ôì’®–Ü«ZM0ÌìÚ"¦»Ç`ÂÅì#Ö&œV>,8LT8n8®Ä±ç“òaÐoŠ;L³ËÄó q ¸œú€ žçq®Vjÿ6'É7±c+|ßï6šP¸Í8»aSÕ9ß××w¹«««*v‡±ü㤤œ ‰ëÌžŸfã\õ¸E¨¹È3iü‘C¿E‚¥îIEND®B`‚numptyphysics-0.2+svn157/data/close.png0000644000175000017500000000251112264274602017107 0ustar warp10warp10‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDùC» pHYs  šœtIMEÙ B¼»‡tEXtCommentCreated with GIMPW¤IDATxÚíš]ˆTeÇÿÇ` Fê,EŪ´È[„‘]dÐfY¶°ZPA }`7e}(ÕE!a]E†E–T”г]ôáRM…E˪éêæÇÎþºð90 ÎÌ9ïyÏ9?¼ÌÅÌœç}þçyŸ÷ù’J”(Q¢D‰%þ§’ü¤ª¤¹’.–t–}5!鈤© ð¹A“Ù^ ȇ€&å—KZ"éNIÚ×JÚ%i‹¤ý¾Hh£|¿¤k$ا$IúXÒXz7@@X üB{¼ \žd6¯Xl'šäêÀs@VÜŒÓï <Ð[Þ-@À(pÀá­ÄºyvÏ»b'p¡L -AH³û9ì #^vTüð©J•¬|@´[6yí üÓFTRÌ›+3Qþ TŒéºÃf†Z=>°ø×áy `S&áo—¸¼<èh®€ÀÖ¦ü G³ÿì–1fA@DÂFGVÚQz8ìøŒíÀ¥Ñ~Š @À™uRìv§ðö_5+_$i®FW†[÷á ¹ÀNIoHšÎ!(–´ZÒn_ôAÀ?’^“ôQÆÊ•´QÒö¢rN+°JÐÞ M“EŠgÜCÑD$¬ÈHùw;)ß+˜¬÷¨øIàýVï“ß‘YIÛ$ö𬃒ޒôˆ¤ñ^¨t[Uà`‡‡7ÿ7°ÊŠ¡±äMÀ ð¬ÕãÒbxØ|Šz€±‚é)gÿË8ç¾hBàQ …g3ðüµ(¿ïE¢ü}2Ã{¿a)÷ÝVïBàñ„µú4˜^.3G[(Ñ›?N¾˜>7k¨E@¬þ¢8^ˆŠ y0œ°=Ö.•­yð _›ƒ ó" ¶¤¸êÀ{ÀõF䤇#ù†Ey0j=xü¬úïµùu£æü3®cdˆ}ÛZ3‰öeÛ×¢uP ÈøA#¯@ɵ(vô9211>„bá1c†e,f4fÉBaD«A˶Âh¡QÜøa‡¶¢&GÍz†°”Z§@µ9a%µq€Q=SÉQ K[¥>¯ ê–·&ŒM—?PKÑX\9å¡’ å3 L10_the_leap.nphUT :òIWIUxèèM–Ire5Eçoo T“’<ƒ-˜ PQ¸öϹ™ú¶=ð}’²½ÙØ¿üõöÏ——ëùóøéÇÛŸß¾\¼}ùïíñó¯¿ýýõû·ÿþþþðxýc¼\cÖ»mínkÎËÛû彜!§s/;ôz‘|á¾cëid”ðóq7.XÂÃXzlù襟GÜn4÷䱟G“9Có Bóµhó°äm T@ ·Ë«#ì)Üj»ël`IÂqá¬à¼+ÆÚàºðžHb•HBŸB_rDˆþÓøNc#S¡“hk;=6]â©™,œÇÁab¶ËýÓœ#9ñíÄ2ñ5Ö§ÇÕRcY E€Í™f¿Š[0Sà¶ÃŒÁT;tÖ3TmPÚF†Ó¹å½ Ù…#/¯0K  m¢gØw•ƒ³ôãî”/²ƒ~ia/î‡g#ŒJ#(.é›â{¼¾‰‰z[ÝÁ„5òêû6dÛ ùzK¤mm(ßu¹)okÐ;y¯"û:R¯"×u¦&sSgÖ—«’ˆ•’â¯ç·ßQ8}÷´`]– $B[—QP3ñlD®L°ßô¨®éBi-)O ^F»-.G¿'"TàvSAóÀ\-¼0fã¦YŒìè>£È4Ÿ­r3 Féw“•fø#6"‡Dâ²ùEüÁŒPyaF ΓŸîíñªÜÉ‚Àzo¥ZèkF•äyD‘© ¤üVpXzà^ÁÇö±³¯mkgK!ÚÅB±õR>@„߯Ùj$3Kä’3õüÚ5ad¾QñQŸn“O Ê”ÓïAÆ6²š™F=iUEŒpµä·–ˆÒìðlÇh¿vxfqÐXR¾œ>)žö‚&ä‹ÚJ2´R:’j×NvûHxæåŒÄÔýÄvJ>“Ô1e*3Cí =Ší5¡ÄåX  š¬ŒLG§b!BC §=ìñ{ÇÕl ÉÚÌ$£÷zr?2Í@ðÔ3 ë9©Ùªªíô¡&UºÑ«êYÏÙó™¶üô®ú¢ª÷[l­œš+cÍåÒþýàLÙ˜‡}l`{éþ¹X]ó|³½fût­ÒY*¬9¶'š‹åg¬tv¥æ˜Uiô=PéùÜ7h ÙØ÷@ÓyžuÞ ™ýk´»ìK Ò_ÛŽ ||Ï’Û ”Tªc¿Ç¡ˆ»–`¹|ÎFòX7,&­jþÜVgwͨ ÿ¶Å^ÛgjHT,5µŠ)Ù̹œ>Gx<ÏçU0õâšür¹ò¤5£}7¡XÒ¼–+M¹3eóÌ©¦ç#°B„]¹öãPKÑX\9e—µ‰HL15_trampoline.nphUT :òI„IUxèè]—M’]7…罊»€7¸„¤ž%[èl •8N*©¸Ênï?çxîªx௯~!@¼_þzÿçÓëÅ/?}ÿóË×úxÿôíýåç_ûûó×/ßÿý]ƒ/oŸ¿½^뎇Ý÷µ†?Æ: =ÆÞà|Œú1n ëè Æm4çÃyƒ‰}\ßf==˜Çñ^µîNð”="æÍ@è±qå¡Ü¨oèͽw‚·ìçü8KrÀ—7{½lŸG y›¯×xDäËÛøЦ_P;í ýÑs^´ŒàL\´›˜ZaGpŽËS˜2ï+fKâ\Rb_ó oźr8äöÐààI*(¦KEˆ¸Æ\żk<‡¶4ÉIÅØŸ4‡ßXŸ^ßkÔüâ~È_»ömŒÓ¶}Vœ¿9àÇÃäàDŽ«á7úã9¾î°Ã1X‡ÐðIbÿÄ~„€'ô“žü†üe:§Ó\½/ž?¾±Wîòpµ~pðë`öäu¼À¹síýˆÛ®½€¸öæµÀœá¶1x ðu nVøÂJ˜¾â>Œcè¸b¸-–_ðZ &¿NE ƒŸc ò"öãL‚ÈPpG{à&NÁ䬨`J®p~Cž3¨¡YÁã091LÁë›ÁmØy»<Æ ÷ÉùO»‡p•7²”=yàa %o27oI²yã88ügIµS‘›‘²ê{®šgôî£ÈË3‰JBžëfX×9,ªx˜ŸJ~ÏJvòxnÛEç8ö1ûã†}Ád‡˜<"ôüɈ7È9« ù6q9ñÚiæâªtR²ë®tYÑÌßOîJ#Vq)QMš¡,·»J…ñ°óúFe¸§ÒNëÒjßB:!b‹£ÒzD¦%Ò`í&¿þk³Ç¤o4!iÄtÍÓ‡§Ñü¡ÌJËáš­t—Òù•ûÈÛp²D5€Æ Ü$#BÎ:4 òN”q'Ë™‡ÎE$¡ÜÒHÕŒŒ&"í^ª-ED$Ê´jÊ`A$ѵ%º¶ôMª†3¬†¢ë’ƉK6é¡ÉLM×M$=#¦*xÎhròæ]aÍ0oÝ\FÝÆ¿]NJVt±œ˜ GñTšè†H~gÙ'9?·Õ·.¡ß¨õ<ì5½Yß§ŒySÈíI#0Ï@UL†nDN`ãfx¹X½]F8j"•9žÊeVuÕ‘7a/o[‚¡;Ê!$ó¡œîM…v­åƒ˜Ð§rüÉUã~Št&÷J¶×Þ1ÊázTɨ½¬Ôkû‡žyv­}I¬-”ËW2ïZÃÁ¾¹5î"M¹|Y穵«äLy´fîÙ\-ã´ŒAÙµ—wƒ€™™ÍÝ2¬zèÛTW0ÁÙÜ5>­Y¯öd0ÍU{G•’©Þ6¶ÑÊoÓzž~â^Þ‹¸J‡ŸÖÅõQ2ï¶ý¶æ,ýò+é5.«tòülÜÚϱk.Ní‰Sg‹Í,Y*•dûI¥r— VvZk6+‰ƒI¼CqµÌ§oÒQ²fwm³ÎÌ ÊZêéjW™Ž™Í*‘­]Мµ–qˆò+Z8ƽ8«Á“,PzY (3ÚæX?üw5w¡7ÕÝŨg)ÔÝmp6W뮾1\ݤdy¿·% ÕFuеf×óç«Ö¸ºJ½9õF»ÞròÔøéuô/÷Ù\¥CÏ_ëÈ^ËÚ#fÉÒ“J®W¡¦ Ù\2¢zgæž’QsÖ¶±¯)ýµšèÊAgn ÇpÆ¥hµÆzíS†õù\~©½Ì4zλC}Š],™Zk磟2ú}ŒÑGâêñ#ú]}óî½ê€1µönzï™M®­x6ý<@‹¡ŽþGÓ›Sò ¹ê‡z¸Áö)g3ô+Z=œÚ¤Ô¯]õz6ª­âO«åjxÕò'ÖŽfÖ88ëö?Ôþ ²~½³ ä¯tÎcNëeŠ€ìDql÷(£Û¾Ñm_Ñú<Ü¿üPKÑX\9EþF±L30_see_saw.nphUT :òI…IUxèè]WI’e5 Ü×)Þja[–d×®P\€`:¢©¾?™)5l~þg[ód÷ÛÇ?½=ÏóòÍ—_?}æßŸþúxùöû~ÿåó§/þˆ¥—÷Ÿ÷Û³|¼îmÏÚ·ßvëu¯p÷ëž\w ×ÈuÐÍù¬¤Ÿ ]AgüñtvJ¸] Ÿ _øž ºÀn—L°K¨ÝÓx%d©s{PéQß6KB÷½9ô{@¨AèzµžS°î«å‚Z¯ÐÎ^ÍaöÜêkþ‡ :ÎÙc‰¾:·±·ï³7‹Aø—*]²ò<†ã;{ghIâáUðKˆ'w,‚Qø³¡C•ÜÅ/õYʸ´Ð9{rL„“ú&Ã9޾7tL†UžÐaˆ[‡ÓjsðPÅ<kX”~š8žÿIrZ20ò®" ÜŠm2Q„ÞLaÃ-!4VB×­óÖB×i!<”Ŭ„y e«4ÚüV½¼[[%„œŸÛâÜP0°n¡à%£âPŒ^ßñä„„9ù=€ØG%䀡Æ.dvIOŒqçw*rÓ°YrÃÚËÑóöö)]鼨°Tfé*§ŽZ'Úï&(#"Ýc(çÕ&‚ºCF¶n™…g”mÇ›.›Ozñ%7ʯòoÙà1ˆƒowŒäoÚ¹K÷ÝfyPw;í§h¿­ö'x£X“5hŒèÖ)?âÀyŽh„¼›t›Yû“çÁzñö:«g¶h.iä·+?V–ÞÖùCŸ0n^%T ËØìÿØ>êldÇü måY‹Š«UqÈ&§N·âHGtÓD·´I¿ÓœOkœ½~J÷ î£âDÛÿå/ÚÀxÑ—Œ—äGå´w~xõ*å—ÒÏ£ôõîѶÿcs÷˜É¢Cà&Û‚gªÅS£c¦WåOvmàbwÞ«F…p©ˆmžÂUûP°Ð§ŠÛÈOèu.öÑe gM‘í_‘ç1 ÄŸÒgÇ)ÌYëÙç²ôÜy Oé±oó¿µîš.h²×ÇÖHóš2N}¿¦“ŽF|#q¡#°:£OÐ Äùs‹ëØG#*LuH猲cB ‘‰zÁ‡I'D°.ä0ÈB~Cø¿ðÔú]^t7Ä/Æh,=‚öé×±€\w ט1kôã†$ Ú1Áó‹öíARÆJMé@rJ‡ Mç°-¿…]åSìÙXùŒ¿Ðjy#\ò{0Nšòl…¦u6ŽÂJañOêÅÉd•lH*;{¸Ì.ÖÈ<ñ6,ÚÙÈ}ðÍÑh56O4j|¾¼ÿòöxL5TgÁ:bÃFv4x9 9éqÕˆ=9 ð¼,ÄÒ›8³g6n5"gã@£v6Ž$ýÒPÔ~f?È%6~!ï7Qrõãþ(½pA‘žI}›OŒB60òc£Á}F9ˆk•³Áàþálx‡çxÝ= åiЯߪæ¶7ÖÈ5®óYÃô[—â8G|ãlœ7ù“ˆss ÉG½C{ÚþÈí.ÿyî{KñŽ·â#jÃêÕúZIòeÔƒi(¾L«×^¢5­V kh]Ðm—èì"Ø“°÷ƒ€µqM-±jçfÔn³ˆSÆ›œšéæɰ›ž°«-¹DØ©9œj§2.€»D·„Aè›ZÂ-!h!|V xc I ÇÃ7(6À®ðg6®KŽîù;xº2†ì¡ö¿S$ºÑ0^Ÿ¥Löz¿t®9kÁ´ÂaöÖóPf©èƒ@ß0œÎÓ~˜RO÷ hTFЯ„?54¢¥HL]UéS«þÑÀ.3Sæ»r×ÒØ¥¨Ï4Óyêª1]±ž$¨9ÿµ6ÑýC R¼ÒAuÈâÙ=5Ùyùœ:†zq íÎȳŽÜcD,†²l+¤©Ç½OîÑ&«gþ/9TãsJ+ê§÷•.(eÒ„ÂçP`”¡NʰÀ¾Ø‘бMýá;r‚p]ø\Sè­ÑIǘ{öúO>!5ªQ8c"ÝÊo°«ƒ×‚išàö¼††FÉ÷P5|±µKWû£55@$Þß *‰f/˜…ˆV:=ˆBƒ}T<0/º¼ð²‚5Þi(8tÑ ¬Ô2SË.}=uBÖ)NÊ­Œ™¡!ý4„[…Vî@´}ùöúg^qì1Û¸b5`àºb=pŽ};@âÞÁ¾Eáºz#:p ¸?¬{Ï«Û_`sÉ!Žstoœó&}qn ï‘ïКrdž~tÛ¥?Ïcoñ¾|úm¼>úœ——Ov ×qù6 _~&Ä-€í ë>ðØA3ÞTÒtN¥´vÓyžûc|J¦;qµTbÄmP¢wâÁù³ã…=•=K÷G³B(=ðÂ6 aF„’ 5(ÝÖ´8×}ø­„ÁÌ}B‰v¤”¢]F%–_\J¬~™q=.ãË׺ß²¯åzÊ„6ÌÅAqlî~µ[¥lq“´}#ždõd!(Íô¡åþ@QÛ 3Ý@Ùž@h³&ƒ_‚Ïé´†)¯pœ{¿>/R9”S?×Àf´k`x8Â+üâ"žªCEúfêÄžž‡ÀåólÝ— ¯Ëƒ[[0;-R$;7C«Hz )¨aÒÒC{ëý‡þGZäÜ¿¯äaòÙ׸‰êYƒD1ßwp³çÛ!>º¸å1”˃-:øž{í£4…Ü? —ÜÁp°ÝÆ´Úé®´Æ–èFºÝîºûiÉàBÎ{›·Ú¶¥Ù{—¬O˜¾¦¹¹IŒÌæ[d¶3F„­­ô¡rL*ÇôQ,!ælgš@¹Û±~ŒWc= Ì6R–eŠšÍ”äɬ™É³‡RÏúVüÚðŒßq? ÌXP¨¤n\ËÄAÊŒë$=kÉ[‘+ `G¥#åf>ˆU‹¥bBÄÇö&vt~MSöÌ..³jñáÏÌÀUzKŽwey2ôìv=·ÒóD:éDHï ÑW•ÏS¢ŽLÐyyÑC•Xòˆf*o#¤6#`8öYØ”ÕwIgáêŒ9šÜ+¹zºÄ³ >mÕ2qN|Ìx£——,ÈÎq+¥ÑXH·g%§Ç2ÂFÕ”®(ýÏ¢ø÷뾫®Ë#–Õ˜uƶòwÝ©x“€g5jµXôž%µóuxm÷¦Æ.ÈÆÅîÊÆÅnÈÆÕ«q¡›Þ3ÅÄP# Bq²–ÇZbª®†F,ã`Ónb^ê éP¡ß®ìFÁ®Df}ËþÁF1±oÙRã¶„˜„É£á]š„jèÌ>‹ðñ]ÈY8ÀÄ×3 Q<+–|'±SmÙufÿç=d0ô·Ä™†Ô~ª ‰í•±%ÎØÉŸíŠVÕÖ«³½£q¡—âd€r6R§]öNÌMY‘Q"sIlp_b*¹ÚløIŽ–E+˜é-‘©ÈŸáÊAâÔÁ$ã!ƒÀ«ÝÁ˧·öšÖñ{¡þºªßfítÙßsMûóˆ÷ÔÙ1\G*Q£JÏF˜ˆón©û±³) !‡AA—Ñ Ü÷ºÇNH:éþÕ@½Z£¿Ï=ߌçœÃ9‰™ä3rHP=3Å«¤k`% Õ9gsM¯ñ\UÕÓÖÆa/kTXݰ•oˆ+MÝ5˜¤!Y$ÜY, [Ý:hu ®Rµe8VïCƒ…s@‰œ GäÌ7zKÝ»§Î:ƒ®o¹x º÷†åF½aô|Ã`Ü€?T¾…+õä Ëê§ý¨{Ä‘³âó^«{çÃyÿ•t´ ùpúæý›^rGáJ~â{ß;¹ßfÉ¿õ‹Ò÷<ÏkðN¾S¶×°> £þæL<3&T(4Ð׌Ì~fô¹•ŒL f²³µŒ¥XÀp.ûv¼O)D{r2Ñ{·Îi^ïÉ•y[1¡4l^Ãm}<´’Iòf%¤Ï8Ó§L†ŠN_t &xÇÊäA;p (O@èæ|+taL±70Ö0¸vÆm€^ªïË|èŒMáL[0fi «Æòâ¹ÒF¸×NÚ„ùÅ©yGÛ0ï6ÏY‡!Wux=‚ß#ˆÉ`’#&ÑR€+ïqš#§;Ö0ÚVôD]ž÷”'œÿs/Š_O>â? IçEG½£¹bE?r_÷GaùZïØ¥·×½ñ?z¼÷_¾³ÖöG“þsž¦w­VÈ6¾»œ…½öûI䨀·¨7\²Vºfñ û²Æ…Ïf¯°jw¦mÒTK_ÛðÐH¤$XŸÄ¢ä7Æã$½ƒ®`Ô†¨á‘p\Vò‘Öò²–ïäíüäÉÓõãvg† bW-m²°/Ù88CŽŒ[ùÊÊW=¹k¦¤8ïj¯ß$­ýÔ¡jÇÓ^å<ØõyÃó•Ôìt£pñMü}&é'# tÓsò=·9+1íi·“»3³cYaÅÃêwk¦åäGôPKÑX\9Š®¥‚% L38_box.nphUT :òI‡IUxèèMVK²$5 Ü÷)êµ°eI¶ß®Ð\€`†€`"æ½¹?™)7Lo2ì²õIK©þåÏ¿?¿]ú=~úþñÇ×ogõñùýãñó¯¿ýõåÛ×ïÿ|ªÝÇóËûÛÕg¿Ç\W_í1±Þ÷ÈÄÚ°Ü ˆýíÀ ĹÅï«pãÜæz˜Àøa½ëûî·7ÃþÖ.?B¯ssgÅCÌó ?ç’v­Öô›ð»p/fÅÏï3ÊÎŒÇów»`àî#Ï÷†T£Ý7|Þ †=nÚ‰~÷ÖqŸˆõ´Âeµ<÷P+”ݬà'b™íÎÐÕd$~ç„ãx»¼Ï ß}ä%Š÷Ë#HØÛ5ó6äÚ t¯Q°°ØúÁÂt›@DaqI2¸Þ È$Y8W2Þ›äyÜ‚•Ý1`§ƒ\ã{ß…†G8×Avâ1zÞÞ‡¾;Ï{äÚE~áªýyÎDî[Ÿë»™ŒÚ·U8Îþ˜i§_æ Òˆ"ê}A×¹1yŸuoøù>–î1ó8ˆsôƒ§*<û,"!ó‡ŸÙ‚ß1àml ø â~ð;îO®Yœð?·ñ<ò ¯Z°Á·e°xŒÙ¬­ ÒPéY˜(tŠ¡² d(¢BœCÝÈNìÇó¢–àX!†¢FÔÊÑad™“30ak–Óõ2’^—sl!h@J¢ÅÐ*¤IFçÖ*çÛË9#tf²ʯŒï­RÝK…½VîkÚu3¸q¡§”ÂÐÙ+ \¶ ¬\ªD‹ |Ž–e¸wÜNSÑ3e5•ŠÅ¾ªÈ‘¢<ƒÎÍÒàE{gƒ Eª/ºfl¾a‡Í1éyXy噀 Þ/¾¿u²ÏjÙ(<†ˆ)”Ö”#{EátW^ì5£’ôʬ÷ÆÞ=d…|n–gcä‚]›« TÒLÇ "e•U8‰QY¡Þ˜UV`iV§¨`S„‡e‘U)dÑïþ"9¥RR!Îø*¥«]ªË¡€‡d4«¢ÙMÑð!§„ŸÑ”Îyیƻ‘NïÉh¼oɤ¹DÓ^¬Ryø¨ô¿Š=É}7ù{3-k<àñ½M)§w'iŽiŽ—ilËmR“Ý$.kIœ¥K¤¹‹4wg)8²¥Œ¡ÝQãbœ Bx„¸³ê`ÎSÕ辘NjM·£—M^:u u„ÙDwçФÅ3ù„ŒŒ“ÏSÏQ–³ÿ`yŸK̆a }ªž»XæØô©j¬[@ž¾÷‚ª| óÎiE ˆDMagà Ñ,4õh[…lyîG?u>„çÞ:ßÕÀ(‡ÖšöÕYÄlº§‹*z†eºOÒ_èJbP¯„¡ÜPÓ…’¤y ÒGÌŽ¡Á ¥ˆ¡¿Ò…ëÐWܺŒRNÏC/Kòá”``´¡Ö‰,¡ j+Î¥•ºå¨÷HÉP“WRYø2l5áVÜÉ¿ZDª9òœüËHôÊsú*Œ—”s=þPKÑX\9ÉšnÊ "L40_tree_of_life.nphUT :òIˆIUxèèMVM’^5 ÜÏ)¾| [’e{vp…p B  HU2¹?Ý-MÈÛt=[Ö¿Úþ寷>¾>ô½üôííÏÏ_úïíã×·—ŸýíïO_>û÷÷Z}ùðéëëcÝ|úëé{xûéhŽ}¬Ï 4 ä.Ö§7îg ¢7pÏÿÑûùŒ¹ 8Lvˆë^É­{°?äO!ö§H9ê]ú§ÝuàߏcòŸû~Žô_>ü±^N¥q0²Æ#”ÄÂ9¿@ñ\Ï0þo…Ã06pDAÃ(%ÂøÆ>“Ї <Fz‘ Ÿ½?²ä‰ÐçÃe§Î"xð´Kÿx€¸~¸>«ÑŸ†àüÌFÈ|ø>ÀBþ@nçÓàŸö7ô#9¶³ôž¤/»<‡¼Øa>¼‘ÿÈŠh—ñ…ì3.»Œëý  Éß°ò?l7–_áSvÃ!—Ðë°“wø™È§ß€\Bodã*ùpù¯}æß©?uÞYÊ/ôú4Ùqµ?áG0ï°·¬äWû¹²q—ÿÙñ¤W¼™m/OÉçmLÕ/2JZù±²üXô'ʾü@_˜)¾Bœ3ÆE¹>óʇ{åÇëŽ~‰¬8£òç9+NåÃ5<”Sß:‡‡ÿè{›Ò‡šHøPQÙ‡¬ò¬9€؃ߜT¾"zˆXdW‘g …i2ß7Ç÷MŽc §„ éQ¨3ÐUê L՚鯥ör–›ã´¿›çŒÁwãÌEiFo‰éD ‘]ÆÕàA‹O“…˜P²’ß„m©«kóTô0̼›E”,1E»§#•±T¤ ÂþÚsM~é¾ y2jÌ•ç;‘-ÔÄ ¬9g?øÉþ‡Ÿš[wÌénÌ>ŸCýâ 2¬¯­þÒ?H½ûøW?î:'ܽ^ýéÉþ„Åù€^ö-úØ×,>Ššs_œ[êç<–¼­~[Cú w¯óÿJ!æjeŸu®ã1ƃøÌ²ø‹Hžc~.åÈO°‹¤‹#•GkÞ6ñõÕ9–»pë¼ø‰åGc+Œ^Ñ9ò“æ‹ûSs#=± ÉœCäÓ¼æÙ4üßÅBȳ'é?÷é?çfÃÞ/äåEd>Ní ¹ûäqä%îhl>d¼râiè½Í{¼Ï-ñ~ýgïï’'_ó<§ñîêÃÛ<ÈKýê;žÇ?ó³³1Ôw±½ø<çáÅoÄE\âñù,Š?w¼ôñy \£ô®Qõ_Ìέ¥wyõÏŠê—-¿Êßµ¨olú#ä~Ö\x´žì"oYœËÎK²_…åozw¿W%ãF=Rõ ¦ê•éÕɸÑ[sT½¸ ­ê¿Íw—òH¬>ß;ÈKŸSã»™GÐÓ>£‘¯È¾`ïìFÝùE»‡r«év;Ô«ÁjÜ·õªàz–R:íöòA:Þ¡#ÞkÞk»ñTÐl2:+{Ä,ýV¯–͇ˆGëh¬\‰‘lT V>üPKÑX\9,èÑ–v*L50_nautilus.nphUT :òIˆIUxèèmšK’]»uDûÅ@5ð{öž'àÐÓ“vX"5çÊÄe•b£’ßýÇýÿþù¿þþò¿oÿö÷Ÿÿõ׿ݯŸþñóÛ¿ÿçŸþç/ûëßÿï÷´~ûíùý5úþhk áó£|´Ý…]¨ö1…ç5fýh§õ}êk¬rQãN΋'í»fÞf)—Pã¶öÝŒc_;Zo a½¨ïYÒ?XGëŽùCý[û ÖiBÖ)Aöš·´_×øUƒÐÝ5o¬‹¢«ëœ}^dœèkÏEÆ-á]§Ñ/þÔ»~…Í«-t͛ڿè\Só‹ú§Æ­¿hkø[JøÃ÷÷Öyß?z)ž×KÖé…õÏG¯ì[…ì;„ÛtôFû½uÓÝÛð9zÓ9zrÏM¨}ºÚ{õ½÷ÞÌn¾láô}wóm\¤ýøÞƒš?r?Æ£uáÏé?wüy2ÿ¡_t<:ü~Žq–b:fi™_„ËôιækÖœkVÑÙšpø¼³jŸú¼fÓ:UãZ7fƒ´¯‹Ú¯¬×„Eó{7¿'÷ÿо|³ë~Ñ}Èý´ЮqKûŒíûœƒ{_i—êQ¿ä­ø§~ôIü­{˜ß¹ÿ+ú%=ªè³ô!¨uVôÙØo½óÄ_Ö麟*=î¬{–°yÿ¾CWßÍtvÝ+]ýúžËçêœ_r×­WGX¬¯}šZ=ZZ¯ÆîôŠ]P-æs/ص£?Æîé¼tWº7=BÝkå{Z¾Û¹ÑZ®šå~äøùöÛ_~ÈØM-6GŒ™.mLŒŒ„”K\bÂl1JsÄHa4`‡4öôc\v±´µbüX~”ãè}ŽžõŒ5íšóí·ö] ­ÚWÖ¸mqqˆ‹[Ë¢»PßâjW¶¤±‹K[RÔŵÝujÝâÖmêF„’ndKšúªïEÛ]T‹I䶨Ñu{]¯ÅÔŽjK´·NÑ'¨Åçøö›×("dd-]ßý ]ƒÄc•Ùߘ²!@¨~qØ„Nï^;kŠ ¡‡µ×mÛú}·yL®k—¹ô÷*_ÆNÓ ó&=-4­í~ïÉœ íbÒ8ž ™Ò-@XÍü€‡‰27øÍ“0)š„eÕè¦Õe(vfæJ|§ïŧǘ °ÁædÍž•´ï9Y¢äkd%4ÃÔ³ nÒúzûê±ÄV±<¶€mÅñÝûún|ù¸x}²}xØW·‹ãúò·ï¾¾ ߺ¯ïe?ûêy}ó¾>ùúrû‚è¼}>6Ÿu°ù¬‹oY×÷®ë{Ùß# âkkÔDM¤ÓñÙåúlÚk[ͼ>.¶¬k>¾øðßýˇïë»5oè<ò)m¬øò¼jŒMB½íÛŸë˧}µc|7÷‚/‡Ÿø2ûp|y÷øøðifŸ^ÛõéÝûôšýƒË>->½}ñé=¾AlZÁíÛŸ/¾}\ß¾¯o/[|;’h<ñÉ(³±ý“Ï_ÿäó¯_Op×Ì‹û¶ßþSÿ1xÊúÅ: ÌôŒŒ'±|Òù Œëûð :P;ü ÈG£±…þí˜*1Àp À=Å÷ïëûñùèÃŒ/w °|¯öùŽŽõʾ_ú7‘×µò-_çqÐË|bäúÐOûþçú~­]Ä"¥ßX þ‹X`\¬7Øöͳâ«ç¯˜¾ÔC E?|SÿÞækÅ><7VxöÅ+<í¢bÜÚY‰Žc;£îµâîö¼Hû´<“Øî‹Z5Û-#çZÑKÏ'Æësc‘™}‹4ë1Nrž½:g‡N˜‡Xáh™Ó]ØqÇ(j'öq¬¢{ƒèäºw9$óÝ1‹c—žØ…{T Ù¹/Ç0Ç÷˜XFóoŽÐm_žÄ4ƒ˜&vDº*T{ÛwŒ3‰qªíE/ɱ:vd·Ä8›X'vÚ±ŽAwNP…ű)±±ªcŸ‚£Ø¶'Ž}jMìSWbŸVóÈn4ÇÞS=oèá(i½gDå”þ(ß_U\ÐæUB.^Vɰ¯*•¨Q>«XÇ ª­+W .ú·P,«u­’ÔªHAkƒéÑ£xâ…=kzù¥’ì% ("×Å +&¥\RRú¤+¢gIU ‡OèY}^<¦gÉÔU]é’Ë Š>©Ü‚^]9ûVÅl\ÅÒµîzˆ°Tpù<¿¶Ï³qúw¿83o/íš'“¨›Zò|Ð,n`}œåµÅ¶zjŽü\fÈ 0k”,"ÿìÙœÃEs?4v£42Š[N È·"&ã@»„-8Ó.¡F@¼$LU±HW ÇB¹$ e3ãä·œcp¸ÝëËÈm”VÂ:‚¶¬CèÉ:D|ÁæýMkc¼öm+ã¥\ãfúï8Œ\ï÷°&^ƒÊ2±‹À&þ^´Vµ™ðJ"ÌïOú‘ ãJ;²#µ³,+K2'–% ¯Ç?W–DÖ3δ#KÆÇæÇt‡ÍóZ3ë"C§F†äF‘z}q¥™2öœ3¶{Æïf¡Â\zu²îz,^Ǿ;ræùæËŽŒïs™…lA‡:å6"CC+r—2\KŽ2¨&*¨ù{hEîÌȼç.R¹P-RsÁŸßš¤¨dq± ¿çíŸo²ÊÇ\V„ίj;`é;‚÷p,«H„–ý°ï‡}±â#CÆ[ŒÆi"g)6!–!R dª ('½û?ɼ޹å_Å-3.fly)²#ú÷Í_ª [; f¶ÏÆsf”aæëÞÁÖ…(µÜb„ó'q`6ö¥ üc|'™PÜJCN7ºS92!â>ò*Â@¥E®èô¥Œ’X÷–GêBÉæ€~SP­/aQ~ñ’L+|ôFA’ï5$o~xÌj#DúzH”³’( RñntýJHÞ‡`¥ÇvvÄ:fªŠÁ‘v¶"qö^ÙŠÁVæ1ˆÈP$yø>Ž,ǼœšÇ™µ°{³y [áÜŸyÀ`¥SO)…ÎZsØ‚WYá‚\ @ð˜UvóÆE™¿.[ÇíäXlÖ‹w3’òqøÇ`y2+Ž}?Nx¶žf`؃ۼ@>ͼpêü‹'{±-ùõñ™]px¯Lâ?p;Ý2@bÈ»©¢S+H÷öwð´˜ííÓ 7“¿NÒ6r„£¬,ÑÌ$9fù>ÈYORc}îN=;yÒÉN îï!9¯èÁþd°ÃŸg@ꈗP¡ùªiªY•/ µ¥ô¹Ã·k-µ˜–˜Ü®47­»º¢Cen X½¡ÚÑx³¹YžÐ„Z¿{_IxÝlßÝza[øê¾$¾ tº\‘ØqÑ:€î²‰K‡M ”LIw4h©u¤òAføLW(€åiáCzæUH IFØV¦bš'®SéëÚÇgEy+^Á‚²BµœÔÀ*?‘–ˆæœÈ™·‹¥¡bo¥˜µ®‹H‰`¦‹-0ÕE®=FMᆜ`•»¬è˜1Ö†hÔˆœËìU[ð±Õ©.Ŷ‡bq»ëTme„Oͼ'†¥>ëâ¹2tÑôÊ*öqq›Îvp›¡·­Û¿nÿÊy‚A‡qXÚS.vó‹<À–ý©¹¶z1ík×m·ª‚'휋<Æçh~›€ïÃRÛ¯A­5>Äüž®Ã@/oÆ{žqÏ3®£¶#Çy£­>&‚úÊ©¯õÇ@¯WxêÅn¡ö\öäËÁ™vè™Éßmøçu3ëOÛTIí =Óô€×!ØQ(Ÿ>ÓçÃè×a æ±ÝvØîò6üóbä˜`&خͿ>zç^∈Ð&ã¶q^v¾Í™‚ç­»þÚY×öùq€œq\ðÕz—ÏQã1pßðSçYvx ñÁ]šÏO|4Ó”‹Ñ“x0òOq×8r„'?n``ùÞ)â#¿š!ÿŒåݶÝ…æx‰uñùtÆ·_60vÆiSëý±ÀÛ1Òã‚°×±AÛ>÷±ños^'ØCçx>Ï1SÔF~(j·åk_y£˜ü¥d_Ú=_Þìw |³ô£Í‰žÚyã“vßF²~n§×r1ÚØÍÕö^»’kh%²n›c,q'ý^áIV¢ƒj ÏÝÕ¨ý¿/ù"ÅÛ/ç_/—h¨>ë>(·R}ú š§”örAöšºƒÌ3e1[c¼”‹[Nù+>‹×åm{ eÓàšZº)äh=êPøeò$ÑA/#J±Û¶³a"« ó´Al©he"ãê5)Â,›ÀnŠŸ¦øûÐBaÂ…!¹/׋¦Ì Om®.QlõCmjÂOžSË}5õ£2°©·Ø|Q…}¨ »xéwÊi”&ý:IÌ…Çšºã}¬yHȺk†Œ”¾d±|N —vÀnñ¤(÷ )žòâIQˆ@¬bRJ¨Î±œrMgDÝ´PHÁ=_ðr%Ç6éqµmvJ!-Yå¸ÉgrU à 9Ñ« ¬žŸøÐEMëª(©!í‘…«‰:Éwµf² QºŸÅàA)e¤›º;}èô‹;Â$Z`1o 3¥ñÇi±í %aø­¸C¼ÏjΊðM~·uîÓ(,‹‡ ¼) ¤~gð= h5ùàçrŒÞøí‡zìÞóÖÙýZIÄèß—(U~¾Çð:Šm«×{^C1RØñ•w?l’²Ìãwm¹zì¨ßo?ÿ.û Þw°ßÍö|úÍ:íïqy°ôxnàŒ»^ËúT¬§íî?ó}–éígÂ/¨4RuãJ8ïL¬Ü'Øgúô~^]Tp·ó(Ÿlç×{§‚ŒG䵜o~õà~Þ‹7t{Ô~žÌw•ƒM÷}ËÝws®ÝØü´éþuBĺÇó{ê 1¼#ÛæÉÝ﮸Y_`É0ìG|±=?Õð›°Ýuž·üÆKnê÷çâ0Àûqª riýr”7¹ûÎø¥ÜÉãÌw½™'²AÌÄ÷N:“˜"‡ô#4›Pý±¿¿x(Ö}ú»9â—Å—è¯äH+}áê¶Ùýç¯L2g&à3ò2ÌQx!ñµ¢Ð‡wÛda3éW’¸‘$nÜ|íqÇçx?Þ¶/yæý˜ÛqÔ;ÀÃM*Oü3 "üµÜ¿;#a3rå÷ȨV™YŒ{çÙkø"x k9ʱÌ@õÉQxÐ^“còÓ“lDªmy1_y‚Н¼å×=”}yMß.y±­whæ?‡¹$•¸ŸûÖý%(©ZáØH!áë á1°¤åÚ$ g¿û#–”ŒMoù²ß5ý¦̯¡;XÓÞîyÆÝ Þõß7¾ÇÐÇùÚݧÞsÕ›r˜Ïý­Kûõƒ Óe»pb{¡Û÷Pîo~ö·ÿPKÑX\9•,~$ ¤L05_plane_sailing.nphUT:òIUxPKÑX\9å¡’ å3  ¤[L10_the_leap.nphUT:òIUxPKÑX\9e—µ‰H ¤ƒL15_trampoline.nphUT:òIUxPKÑX\9EþF± ¤Q L30_see_saw.nphUT:òIUxPKÑX\9)¶ãs( ¤ÙL35_pendulum.nphUT:òIUxPKÑX\9ºáˆ¨ ¤L35_pusher.nphUT:òIUxPKÑX\9Š®¥‚% ¤xL38_box.nphUT:òIUxPKÑX\9ÉšnÊ " ¤8$L40_tree_of_life.nphUT:òIUxPKÑX\9,èÑ–v* ¤*L50_nautilus.nphUT:òIUxPK ¦Ø;numptyphysics-0.2+svn157/data/help.png0000644000175000017500000000245512264274602016741 0ustar warp10warp10‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDùC» pHYs  šœtIMEÙ &“ÞrØtEXtCommentCreated with GIMPWˆIDATxÚå›]h\EÇ“†U¤B¨}q+¸  ~!èC¡•VPJ¨hÁ?E|ªO‚b}â‹>h|QÄŠ"$6‚ Š…@£ÖôCMK)ÊÖ`ü ±i7"ö,^b²{gï½³³ñ›äì=óÿß™9gÎLàWÔƒ%•!àA`3p°~™ÙpÖ>ÌïUç\µ+•4$éI5µ‡Ÿ$‘t¿¤J7/KzZÒy僚¤c’îµÑ-ñ’¤-’>•´¤üñ›¤w$Ý(©#ùaIÓ‘o`IÒ„ù*ÅH>NHº' lHN(<¾—´=†ïmIÕLä!z<‰# à`;°®Cï` pwè·ÞheIŸIú[ÅLá±'-ù*À5Ef‘)qp[Ð)`ØaÎ}ð;ð p+°ÑZž~.´Ñ—'%õ…þHõªÓ­â·¤~IÏZÒã3µÎI -ÀŒGç$í°œaùTZ-£ôÉ+.JÚZìI’O¶&¾vIºàác_è5Àï‹-Bêr|÷ðq]ÌœòÈ-¨ßxø(Ç,À¢ï4sÎ-‡Cqè!2Øh¸Üã+ëÖ”‰d+-ÎÇ,@›äwyØŸ‰Y€€g€A ÏC€K<||˜¥ƒ½ p3p-p»U{Ç€ùßy¸ÔÃÇñжyØ_Ü™Ø?´Á'µ&COj›¾nv¶Xà¶y ðƒå Ax ø¥Mƒ->äù¼½ÀB³Ôº¨0“!¼]½Êß¶z>ïÄ*5‹Âx‰ú1V^Ødѯf˜Ž™ÃअŸ?ÛïtâçõúâkVhñÁXÐôt…V–ôºçàh£€!iƒ¤û$}ÛFuyÜg‹]” “t*E§HzDRŸ‘‘4ÛfAôñXh´Š¤§ìäf¥êíh‚ü&I/g¨Kº2/\ZR¢ÏVúÁÄj8šX°ž²”±ž°¬rá?dœëØhù&ìíïÎx|þ¾¤õ>~càI'3?+ikpòy`‹åGŽÐk’(‚|o HZnj3ï8cyÂÇEt,”wáš$êEÕ½À›)¶Ññ žýžµ»%Ë6÷‡š‘Ϻò÷L¼ë=É¿¼Ñj¿‘GØ 56zØ~iù"‰‡À§Çß­F¾ˆD'TYüWÛ¿V"^T–J€“¶„ Z€¯€s)ì~¶ÐW8ñÐ ]õöðu(ò!¨R?*Ÿnbs Í£Ìc˜O”°vÚv¹’ç¨•ØÆœsó!È»©^š|'SÀˆp DGÜ;CËi”¨_~ØÀ¿— jÔïÖìvHœdÁ9‡Ý¢~P:lŸ¦€qà`ª"dÚõ¥© ÙU¹Í’ö7©úì7›k ’$íKsçOÒ@Ⱦ…J„¬åe×u %æ|v]'@´%À+œäd°ë:&ƒ)ì’ñÎOÌ»ÁÃÀ\›9³©®É¹f§C#’ªËîÔìw#øYZ[åWʧœs³¡øÛæ­Ý«P IEND®B`‚numptyphysics-0.2+svn157/data/L99_Gravity_Test.nph0000644000175000017500000000415512264274602021072 0ustar warp10warp10Title: Author: test Background: Gd: 0.0,0.0 Sf3: 10,10 10,470 790,470 790,10 10,10 Sgs1: 596,391 605,370 604,379 607,389 623,390 619,392 615,399 613,399 617,409 612,407 611,408 612,407 614,409 616,415 606,402 604,402 599,407 598,410 596,410 594,413 593,412 591,405 593,399 587,397 582,391 591,388 598,388 St0: 330,65 330,68 326,68 321,71 317,74 314,80 318,96 328,106 336,107 342,105 348,102 354,96 356,91 357,77 354,77 351,69 344,65 333,63 331,65 S6: 214,215 217,211 217,207 221,200 222,195 235,172 237,177 236,185 238,203 241,209 241,215 S6: 223,197 238,196 S6: 277,189 278,188 267,187 257,192 253,198 253,211 261,218 269,218 281,208 S6: 313,187 302,189 301,191 296,193 293,199 293,211 300,218 309,218 314,216 314,214 318,212 317,208 S6: 330,204 341,203 345,199 346,195 348,195 349,184 346,182 338,182 332,186 328,195 328,206 333,214 339,218 349,217 352,214 351,207 S6: 369,160 365,169 365,210 368,213 S6: 380,200 388,196 386,187 392,179 394,170 391,170 382,175 377,180 373,189 374,198 382,208 392,212 394,212 394,209 S6: 410,214 403,198 402,183 412,178 419,179 S6: 441,188 436,188 433,190 430,195 428,205 431,208 439,211 452,210 456,206 455,186 441,186 S6: 469,208 469,205 466,203 466,192 472,180 475,181 483,196 483,209 483,186 485,186 488,180 493,179 496,189 498,190 498,207 499,206 S6: 509,197 525,189 529,184 528,179 517,179 515,181 511,192 511,206 512,208 517,210 528,210 531,207 S6: 540,140 539,193 540,206 541,209 S6: 540,182 553,175 558,171 S6: 552,196 562,197 574,192 574,190 576,189 576,184 574,182 564,182 555,185 551,193 551,203 557,211 563,213 575,212 584,204 S6: 589,181 589,203 591,204 591,197 589,193 590,179 592,179 598,174 606,174 610,176 609,178 607,178 S6: 270,242 281,238 326,236 324,236 S6: 300,241 301,259 303,260 305,280 S6: 330,267 342,265 351,258 351,255 348,251 339,248 328,248 324,251 320,260 320,262 323,265 323,268 327,270 331,275 343,278 356,278 357,276 362,276 363,273 S6: 394,249 385,244 368,244 365,246 365,253 369,258 379,263 394,267 398,271 399,277 393,283 382,284 378,280 376,280 371,273 372,272 S6: 416,227 416,230 411,240 410,253 413,261 412,266 414,267 414,271 417,282 S6: 402,251 407,251 410,252 427,247 numptyphysics-0.2+svn157/data/numptywinicon.res0000644000175000017500000002711012264274602020734 0ustar warp10warp10 ÿÿÿÿ¨ ÿÿÿÿ( @ÿÿÿÏÿâõÃÙÞ?ÙöÿßݬîûÚò÷^åýÚýÞáâôïï¡ÞíÀêò’æõPÛô.Ûûmá÷Íãê Ùÿîää¸àçÔØÚæëîÿöóÌñ÷±æñˆÞîëõõÿéåÙçêõøùˆèùæóÕùwÞò5Öõ7ÞýÁãê\ß÷£ëúäæçÖü&ØùÿðêRáûDßû¿ïøªàíöêçeÞôöãâ·ëôêàÞÐíñìïïËÚÞëêéyæùEÖò‹ãôùôóÈìó¤åñÛìð¸çïØÜÝhäúÅÜäÿúùGÛöñóóûðïaáø>ÝúÆïøräùßäç(ÛüÿæàÙýûíéðìëçñôÛáåñâàÎèìÔþ»ìöºãë›ãïãèë Õü8Ûùåðï„ãõÿõîü÷ööåçûèä–äó×ü3ÙùPÞøKÜøóæåöíëíóñçèéáãäßíðÛßâòêèéííÊæé‡ãóÿóðõõöðððçäæ„çùÌëòÀçî’ãò­ãíÓüÖùAÜøÿíèYàújßôØïôyáõ®èóþäãèëìäåé·âìÓúÿïìøññóìêñõõêãäêíîáæèÜÞÞ½ãíÙþ7Ø÷ýôò`ß÷ÖÚÛÒïó Öü%ÚûPàûøðîóñòòôð\áùññíïçæííìçææÜêí×èëºêó×üDÝøôõóèêêæêëÞãäÑÿÖþÚýÿúóÿòíSßùûîíúêçXÞøóù÷óììñîîîïñêóóÜáã‹åö­æñ6ÛûûõôíñóíêçííîëììäèéØûÙüIÝøÿù÷ÿõñÿðîúòðùöõ÷ö÷÷æåöóóõððõëêóö÷hÞõïôôïííëðñêïîéòõèìîæèìãäåâçæàäåßßãÙÛÛÝäèÙÝà…æ÷Âèï½íø¾èï¥äï¯çðÖþ ×ý8ÜûCÝúE×ôýòîýîéúðîúíëúìé÷øøõ÷÷ôäáôóòóõõóéçòðïñòòòëéïóòîïïîññwþwwH8w8¬ûûvøwýÿ8H8õõûHF0bH8ÄÛ‘Å8Hˆ88wþ×uË—vˆrÙHHHvøûH²¯;Êølýˆ8ÿ8ˆn*ÿ¤ŸM+äu:­ÙvHHøÿûÊ.êbHHHÿØÅÅňˆnˆ åX…¯¿>‘øHˆþø—„°KøûûÔ8Â88wÙ¸8mŽè¯ÌJXLÒ8øøô—¯°øHHÿØÔH8rlr8ñtX-§GQŽÅHû>„°XXXõøûÔ8Hÿÿwňˆ-f(òĺ³°‚ÿH² ±/B©$µÿHHØ9øûûø¬ˆSBXW¥øˆº°ŒËy~÷³Ò¯YbHHÿˆÚHûÿÅÿÅmů0ž»Æ­žXZ)ºÒóÕÈÄvøÿH ÖÅÿÿHˆ*ˆ-X`FmˆÆˆËX&—ÑAë|ù8ø‘HHHˆm8HˆÅw-…ë³Ä8ˆ‘ÿËæuÿž"¯ÌÏÿH‘HØvm*‘ŤkS¾œ¯‘pÜÿ‘‘Î øÅ˪¯¡aõ ØÛ‘Ý“*ÅÛ{¯•ÉkˆÛ­­­ˆÅÏwwušg‹³8’p‘‘*Ýnq¯oÌmˆ8¬Æ’Ö8ýþH8HzXš—8ÆÛ؈Æ:¦¯'6¥ÆmHÅw8Æ8ˆÙrøÿ88³Û÷»Â­Æ­î,jnm8*ÅÊѤýˆ8l¬ûÿþûû-†ÁÂßÐ]¯×qÓ:’Å_@oÑĉøÅûž—ËË-¾Q5?SÅ­¶ÈXX,=¹c4óÇDï»8rþTe!;˜´KìKê¯XËmýÿd¨›¯^í~ÀIþýÞ˜XQ O쀷ƒŽˆH8:wÒdB–%ÉX”b8ºsX}¼úŽdV22ñÍ8ˆ­¤:¥H:ÃüöðVPh Ŷ(O£wûHÅŸÿÅ8Ånmÿ*Ä¥m«:¥¤w¢ˆºçXjhµ8­Â‘û8Hû8ÅýÿU\Þ­ÛÛ­8ˆˆmþ2<47~éü8Åww8‘ÄÄÿØÅˆN½™ˆÂ­­Ø8H‘vïkY¯RÄÿÿÿ88Ø‘*ˆÆÆ8®\’­Ö‘8­8ÿÆr8a¯[3#Œˆm*mˆ»Û®ØÛÆÆ½®­Æ‘Û‘‘Û’Ö8rŽ!Xt©ËÛ8Æ*mˆ‘Æ­8‘­ÆNU’Æß’­Ø‘8‘rÙÅA•iXÌrwþÅÝmmÖÛˆ8ÿ­®Npn‘*mýØØÆˆÛIg°XÌ’ˆÆÿwˆ*mƈ­Np½ˆ‘áÝ *ˆÆ’­®\xŠXXà pC®½½r* ®Cˆ®®ˆ*ˆn‘‘ÿØƽ*\‡›XEþ½’’ãNUp‘ÞÞÂNßÛÆmˆÆÆ ‘ÔÛˆ’­\xŠX ¹ˆ­®NââNn­ß߈CÞ*mÝ‘ Æ*ã®’ˆÞ‰‘U1*ˆCC’’’­\’Nň¨ ÿÿÿÿ(0`ÿÿÿÖý‚ÚíÊÏÒAÛø²ìöÞêî"ÚüeÞõÝéÇßçòòòÙÛÜÊïõ{æú•è÷RÝö1×ö×ûªÙäsÞóçåæ½æí¥ëø‡äöÒåék×ì‘àï÷úùêìí®åïÝâãÑÔØ[áùÓíñíöù¿ìô5Ýü|Öç¥äðJÝùÄÓÖ*ÚûyÜíœæô}âõ[Ûõ¶åî:Úøäéênáöwã÷‰áðìïóÅëò˜ãð¬êöƒâóáäèØÞáÖýÙüØëîò÷÷hâønÚð0Ûüéêé˜ÛêïðïNàû¨èô–ßíüüüÔÛÞæííâãã_ÞöÎíòŒäõÝßß(×ø=ÝúCÞûÂèð±çò-Øøöö÷Êëñªæñ×ýíëêáíï•äóØüãæåWàú¾éñ…Ýí<ØõîóóëððLÛöÞåèkßô˜æõ&ÚûôøùðõõFÝùéíðçêîâæêÛßâzäùÓר‹áó8ÜúôôõïíìåççUÞøràôuàôŸßëúûù>Ú÷òñíððñêêëãêíàààÖÚÛ³äí3ÛúîîïéççåçëâçèàååÚÞߨÛßMÝøçìëçéêßãæÙßäoÜò×ÿ÷ø÷êíòÛâå1Úù?ÞûPßúíïðìïíìíìçèç]ÞõåäæåéìâäåáèëßáâÜàálÙïØÜÝxãö¼çï¬çðÖý;ÜúùùùöøøMßùôö÷óôóñòñðòóïññíòòíííëëì_ÝôêïïéîîäääßääÝáäpÜðqÞòÜãçÜàãsßôÖÚÝÓÖÚzåùØüôòòòôõñôòìðñéëëéêîèìíçêèæêíäéèãäèâçæàåæÞâåÚÞá‹ãó®êö)Øù+ÙúBÜùDÝúGÞúûýýøúúøøøõõõ\Üõóøøóõö_ß÷ñööñóôñðòðñïïôôïîðîïíìñðìîïìêêëîìëíîoÛïêëéêèèéîñèéèèìïuáõæçææëëvâöæåçæèéçëìváõ ˆFF´±µîµµœ‚àF–á Xˆäµœœœ±¯±±É áµÞ±±±m絸»»f D²Fµœœœ Fž·¸XFäßÉœf»æÉµµµ±Xœœ¯¯Æ•®–äɶ»œ¶fîœÉœýîœñFˆž ²wFçÉœ‘íí´çÉ´äXçÉ´ç±ç•á–Xäämeçf2œÌ´µœýyyµˆ·³³•4ççî‘ú¶ää´µ¯wµççä±k•)X–äçÉÉêµËºçýçñÌñy¥yîî·è©•ÿ•ç‘λe±±µîç³ç±µç¯•ØX±É´´çêîêêñÌÎËÌ¥yîîÌS•V•ûòæe»µ±çñÌ É±´µ••´ÉäÉçÉ䱜êËœ‘œµñº@m‘ýÌ‘¬•î©••ñmæ»îääçç–ɱä••&Æääääääµêº±ÌÉœµímêíîÌñ•·œÿÕê»çɱ¯àÉä•›•••ä±±äç´´mËããeííζfî´œ•­F‚‘îg•-2‘´ÉçîwÉ•••¶æ±±Éç±êÎÉÉœœ´îñ´‘ñî|•{̵·Ìµœ•µÉ´œçämã••8•̵µ´äç´ƒ*äɵµçÉ‘‘ÌîÌ•œœüîɑ˕œäµî±ê•ã¶æº•ñµÉ´ççîœLäÉ´µçç̜Õ4‚w·yÉË2œñ•ÌÌ絕þêþêH•Tä±ä´çɵžº$Éç´µœñœœñýñ0•‡wˆœþþþµÌ•I‘¯Ü•(œîÌÌz•j´ääÉçççFœ¶µµ´µœœîœyyÌœ•w²ëñ‹2þ̵î•ø4•çÉ´ñ•yÌœ±±µœ´~±ãñµäÌyîÌñÛ•ZJè£ñÎ2̵çs••¯¯äñÉîa•^̵çîîäœç´Ìœ´ÉñµœÌ:•A±‚î´yºñî´äµ4眴‘µî•ñÉ´œµ´îœ±fäáÌ‘ý´îœññ‘眜ýœˆÌñÌäîç´´±œÉɵO•[ûç±äÉäµñœËµXyýyîÌž¸Û••ýýΗ»eÌ̯´‚XwDµÿ••³F±äl¶÷Ð÷ÎþýQ¥£ññœ‘•••™ÃîÌþú22þº»çœÌ‘ÉXˆ³œîç©1•œœfú’ÕþfþMyQ¥‘2ºø• 9œ£¥yÌîê»2Œ2æfœµÉXwɵ´±ççµf‹‹»æê£î££ýú»• £µîÍyý‘‘΋ÎeííêfîççîµÉ´µ©•4äµçþÎúfº»‹ú2»Î•‹Œ…ýýµ´‘œîðúú¶Î¶»m¶äçœœ•µîçñœeºþþ‹2ÔÕ• Ô½QÌÌy£çä– ³ÌÌî2mê@ê±Éµ´œ³²œî•œäçɶ¶»ŒÎ‹¾Ä•Œ2£ÌÌñœy‘µ®²žˆäœÌœçm¶º‘µœµµF²²œî•œÉwwË@±ÔŒ¢BþfyÌÌÌýÏÊ‘Fˆw‚ý¯ñ´íêœçµää áwœñ©•n³² Ìññ΋••n×yýñ‘;Šýž©•Æçíœîú¶f³³·´±±µ ²È]#7••[©F‚¸þºþøW•••nP—!‘Ì•_±ñµµ¶Îµw©A"GšCÇ=••••••±Ì‘º@ñ„2Hå•••À”{4¿´µœîmÓ‘ñ·•••••••••[>+vݰsÌÌmœîDç´‘M}â••••••••u¸Éµý`:%Y?L‘Ìñ‘‘î‘Éñïxµ´¸D¸‚|ÀÃÕ‚±µœ²,•i‘µæm´ñD¸Q¥y‘‘œ´µîññÎîˆïï‘äFDöó‘Q` ¨‹ •PºµÌD•«£º¶eêœÉœœœœîÌM`œœÔî¸ôñµó·žùñœDµ½ºº•ýŸ¼x•ñeËfeîÌ‘ñîœyœœîŒÌ·ö‰Ì–FDŸŸ³œ€é‘»ºþ •'Q¡U•ÚœÎfþúËœñ眴±±µœœî¶æfÁqoþ‹»ºººþζúñyÌ̵Ì•RŽŒµ,•3\‘œñœ´œµîËñµœ»îœý“ÂÂλú22þË»µœñœ‘µ•Qî´d•«ìµîœµº¶µÌýñ˺ýµîqq’ ¶mfλº¶ËµµÌ´¯œÉN•c •·ùµ´œ´çÎËî‘‘Ì2‹£ÌÔ22½‹»mËfËÎλɜyÌœœ´œ•ó†•ñîÌÌÌÌÌÌîe»2ÎêËú2ú …‹2΋ºººËÎκÎú»ÎúÎú¶¹•5©•Ãñ‘Ìý¥£ýÌîf‹¦ŒÎ»ú2úÔ;r;2þ2»Îºf»ËË22êêíê‹Î–•ª•Cm¶µµýyÌyyµîº»Îfµúfþqr’‹½ú2‹2úþ˺eºff»êºå•.•_»ºÌœçñÌ‘MMñÌeeúþœÌ˶2;<Õ‹¦úÔ 2þfæË»Ëº¶ú2Îeb•Ù•Ëfññœñ‘œˆ£Ì¶2‘´èº»‹’;;¾Žyµyy£ñçç¶f¶þ‹þopõ‹•¬•—Òh¤ƒ2‹þ´œÌîy¥‘‹½2ξ’Ör’ЊîQ¥y¥¥yÌ»22‹½;Т¾â•[• ŠKÁ½¨Ôú½‹Œ´Q¥ÔúÄÕ’ þ£y £¥yýœÔŒ¨‹Ë‹‹úq¾Ð•qÎ¨Ô ¨½Öަ‹Œ½úѽӺã½Ô‹Î‘yœ¥œÌœ@ꨋ¦½2¢Š¾/•E;fŒ‹2þ‹×õ©äï6Ýý„àðêêëùüüâããuâö~åøŒçø•ãñTâüZÞö×çê½æî¡èö´èòáåè«àêñõõñîî«éõœÛéFÚöÎßå Öø=ÜúæíïgâùŠãô‘æö–ÞìÿøõîòóÝáâ×ñõÌëòÝðùòñFÞúèòôØëïØãæÇäêîëêèçætÚïáó¡ëùbß÷Ùý%Ùûùöõ`ØðÔîôËãç’àïWßùâëëÙàãÐçíqßó±éó ãîNÜöæèë^àùÜíð¨éõ<ÚøPàü{ÝñäïòŠáñÖþØûôîíàñôÍåëpá÷ÆÚá¾éñ·ëôÜì®åïœØæ™èö Øþ,Úú5Ø÷ú÷÷ððñäåæâèêÞæéjÞôjãûsæûÆèïÃàæyâõÙé¥äï—äóŸåò×ü4ÛûõõõïøùIÜøíìí_ãû×ÛÞÓêîÒáælâøÌéïÆìóÀçð}ÜïºíöŒäõ«æñ’äóœçõšäñ9ÜúBÚöNÞùèééâàábÛðÓ×ÙÐßâÏíòwÛí†ãô.ÜüèëîàååßëíÉáé¼ëó˜ëù÷óòñóóêðòéíìWÞöäçéÓæêÏáæÁåìƒæø³í÷¨âì¤éõžâðØüîîîíñðëééæëëãìî^ß÷ââåßãåÝïóÜàãÚßà×îòÆèò~áôäö­ìø±çð”çö Õü ÖüÙý!Øû¦êêêêêêÜ^Üê#¦¦¦êÞO궦ܶ¶Ü¶ÜêÜܦêêêÜ^¹Ü''¶^ÜܶÜ^P'''¶¶^Üܦ¹¹êÞÞÞ#ܹ¹¦¦êê¦Ü¦êꦦ깹¹ê¦ÜÜܶ¶¶Üêë##Üܦ¦Üêܶ¶''^¦¦Ü'·I¬'^^Üë######ê¹¹¦¦¦ê¹êê#ꦦ깹ê__0¦^'^¦Þ#Þ#Üܦ¦¦¦Ü¶¶¶'^¦¦^¥(Mù¥¶^^lë#¦ë#ÞÞ¹#êܦÞÞ¹¹¹êêê¹¹_l˜fÜܦ¹Ì#ÞÞëlÜÜÜÜ^¶¶ÜÜÜÜܶlÃþ^¶¶^^^ÜlÜëÞêÞ¹¦¦¦¹ààÌަ깹ê0ÑSÔW‰lܦÞÌííÞë^^Üܦ^¶Ü¦ÜÜÜ^¥åÉ; ¶¶^Ü^^Ül¦ë#ÞÜÞÞÜ#¹ÞOàQ§Œ#ê¹¹¦ÀRÔµ¾˜—OÌííÞl^¶Ü¦#ÜÜÜÜÜÜlÜk%;¶¶^ÜÜÜÜÜl#ëll¦OO¦#OOÞí§Q§O#¹¹#²µ´¯Éé`­™Þ###ëܶ^¦##¦¦Ü^^¦0:ºS(¶¶^ÜÜÜÜ^Ü#lll¹OO#êOíÞÝ#àQ§O¹¹í¯}é³¢„,ƒ¹ÜÜÝÞë^^Ü#ÞêÜܶ¶l?;¡l(^^ÜÜ^^^^¦ll##OOê¦#Þ#^^#àÌOÞíW C³e•ý;ïÞl^lÞ#Ü^^ܦܶ^^ne;•> (¶^^^^^^¦ll#^¹Þܦê#ë^^ëÞÞOOOOß ÑŽ[Ä˸„Ã0ÞÞ¦^^^¶''^:?¢ •´ÉÉrn^^^^Üܦll#'lëÜêë##llë###¹ÞtË+——ÞŸ± ýDíOêÜ^^^¶¶^g  H^¶^^ÜÜÜ^l#^¶^ë#ë#Þ##Þí¹¦¦îŸÉ¢WtwOO̹ýË/íOêÜÜܦ¦¶^¾¢;´¢•Ñ0^^^^ÜÜ^Ü#^^Üëê릹¹¦#ÌO¹êŽh~ *7êê¹Oê#þ|ÝÜܦ¦ÜÜ^^^<;*‹´>”7¦¦¦Ü^^ÜÜ#uJ^^ܦ¦¦Ü¦¹ÞOÌOÞ_¼•CfOO#¦#¹“³}¾“ÛÜ##Ü(3}MÚ ¡É¸‡#¦Ü¦ÜÜÜ#ëf©B^^ܦ¦ÜÜܹÌÌOO¹×éR¹¦OÌÞÜ#Õ#_Æ£´ø¦##Ûnä´£û0ÛÜ–g¦Ü^ÜÜÜܦ#¹Þf“^^ܦ¦Üܦ#OÞ#O¹­ªe³¹Ü¦OŒ¦lÞí#_²;•hOOÜÝ•´È_lÕêÓ}>T^¶¶ÜÜÜÜÜê¹ÞÝ^Üܦ¦¦ê#êê#ÞÌO7U2–øÜ¦ê¹#Þííí#_ŸÉ;, Õ^ ´*¿_#Ow¢Ü^¶^ÜÜÜÜÜêê#lܦ¦¦¦ê###ê¹àÌÞœþ¶0¦¹#ííÞêŽAé2,r–ÙlÜ#Þ é•÷7#¦^¶^ܦ¦Ü¶¶^^êꦦ¦¦¦¦¹¹Ì§Ìw+µËò^0¹ŒííO#0õr;2‘V3˜ÛÜÜ#+š;£LwO#¦^^¦##ܶ¶^^Þ¹#ꦦÜÜÞO̹Þw¼ïµ/·¶OàÞÞíŒO#Ü( r}{¥^^#êÜ#h>}h¼¹OÞ#¦Ü##¦^¦¦ÜÜÞOOÞ#¦ÜÜÞOOÞêê¹7”~ ø(_O#¦OÞÞ#êl(õg«:ۦܹަ#ïþC¦Ü¦##¦¦##¦^#l^¶OÌÌÌÞ¦¦ê#¹Þ¹Þ¦0꼸+_¹¹#OOÕÞ¦¦#¦0“(ܦܦ¦ëŽË–ƶ^ÜÜÜܦ##¦#ëܶÌÌÞ¹¹##¹Þ¹wŽC/ÇÉ–vw¹OààŒÕÞl¦ÞO¦¶0_Ü^¦¦¦Ü“‰eýe¶¶¶¶¶¦#Õ####¦à§§§OàÌ#¹ÞOí‡U;•£.ìŒíñó\ÕÕ##OOÜ^¦O¦¶ÜO¹0DÆ}ý;ŽD^^^^ÝÕŒŒfÞííàQmQ§ŒÞ¹Þ#¹.É´¢;•2RtOííàŒíÞÞÞl¦êO̦¶¶êê¦#Žõ`|5 $D¦ë#í\ñÖíÞÞíQQmmmàííÞCÓ¸ýÿ¸3iè] ¨OOÞ#Þíííl¦#¹¹¦¶¶ÜÜܦ¦ÛsÀ/eõ0¦#ÞàÖÖíÝlÝQà§mm§íêÓ~ýbpÅÑ_wx§§ŒÞ#¦#ÞíÖÖílë#êllÜÜÜÜܦ¦^¶0_Rýé`sܦëííÝll§OíQ§àŒ…¿r5®Qà##ÕŒààÞÞÌ#ÞÌÌíÞÝë#ëlë##Üܦ#¦Üܦ¦/Ë¢W:Û¦Ü#íÞíÞ#ÞÕààí¹¿Ébv)GmOŒàŒO#¦#Ì##ÞÞíÞ#Þ###ll#¹Ü^¦#ꦦêëÞh•ýÇ0êÜ#Þ#Ý#ÞíÞ§§ã ¤j§QômOŒàà๦¦¦^ܦêííÞ#í#lë^Ü#¹^^ܦ¦¦ê¦¦_+ø´ÔiêÜܦllÝ#íð-a–•yâÖñQ§OOO§Ìê^¶¶Üêêê#ÞÞÕë^Ü^l#ÞÜܦ¦¦¦¦0ܦ—+ „¦^^ÜÜlllëÖŒ\½›•–&xàQàOOÞ#ÞÌ#Ü'Üê¹êܦÞO#¦ÜÜë#ÞO¦¦¦¦¦¦¦Üܦ_¿£ËÜ00Ü#l^^ÖÖ§X8Küé/îí§àOOŒàÌÌÞ¦ÞÞêêê¦Ü¦¹ŒO^¦ê¦ëëë#ܦÜ^^Üܶܦêt¯ –šò0ܦÞÞ##ñQv;´¯.6ìwOà§àŒO¹œ÷|Çõܦê¹Oílë##¦Ü0_0ÛÛqqq—fCA„ ˯‰îOOOíÖ§.e••þªƒLÁ7wŒððìOYW¢rÃ0####Þ##Þ#¦õCœÙÃIå`çZÇ¡ûÄh´W_OOíÞ#7$W¤þ};;µ|²¿tX7á’•{Û###ëëííÞ¦ÜÇï„Ëreµ£ÿ2;•••;;;;;Ô_ÌÌÞllÞ7â@Y²¾•;}£ˆpÂzÓN‹•¡Û###ëëí¹#|;¢¢¢;;;••••ý} >µe˯tOOOëÜë¹Ox6êòCæ8EÊ–•–ÿÿ ~~´š+¹¦##ëÌwXªéé‹„ºg3R¯øhÆÆUA³±LŸú¿fOÌÌ^ë#êìx¹Üܹ6§v±*Ë£ÿÿÿdÿ>ÿ•$¹Ü¦#êÌê…42ýߟ:HõŽ×íw666wwwìw___êÞÌÌÜê#êOw¹#¦êOÌOOO7$pppFÂNˆ–×^Üê#Þ0ÀΊêl^Ül#OÌO§QQ§ÌÌO#¦¦#¹¹¹¹ÞÞ#¹OììOܦ¹ÌÌÌOBBXXâÐã|´µD¦êOÌ_[;|ã§Þëlllë#Oꦦ¹¹####¹Ì§§Oêêí¹OìxxÞ¦êOOOÌÌOìxì¹OQQíœ;¸‚ìOÌx ³´•Ó…í#ÝÝÝlë#O¦ê#ÞÞ¹###Þ§Ì#ê#ÖŒ¹OÌxx¹ÜêOOOxÌêê¹¹ê#Œ## ;2 †§§QÌÄ•¢A—ÞÝ#ÞÞÝ##Þ¦êÞ¹ê¦êêê#OÌ#lë#ñàO¹ÌxÌÞ^ܹÌxxO¦#ê_êÌíÞ#íÈý!ͧx‡ˆ;£Å_Þ#Þíí####¦¦¦¦^^ܦ¦####Ül#)\ŒÕíÞ##ÞÞííÞ#íÞOàŒíÞ#O. ;9 §#Ÿ1¢ßYwÌ##Þ#¦¦¦¦###¹#¦¦¦ê##Þ#êÞ†óñÖñmÖÞÞííííÞ#Þ##OOO#êÌÞÄ;-Oë$9´z¼wÞê¹¹ê¦êê¦ê####¹OO###ÞO##O))óóGGÖ##ÞííÞÝ#ë¦#Þ#¦¦Þ0ç–•Òu¦¦šüéÅ…¹#¦##¦¦ê##¦##Ý#OààOÞÞíàO#¹\\\ñôôÝllÞÞÞÞ#Ý#¦¦#O#Ü^¦0À|ʱêÝ„~¿6O¦¦##¦¦###¦#Þ##OŒOOí§§ŒŒÖ\¨\ñÖ#ll###ÞÞÞÞlÜ#àŒ#¦ê¦¦þ|ã•b+_ÞOÞOOOOOOO#ë#ÞíÞl#íÖô»ó)Ö\Ö#####ÞííÞ##ÕíííÞÞÞ_õ‹;L$2ˆt¹OŒOŒ§Q§àŒO##ÞñÖ##íÖô"óóó\ííÞÞÞ##ÞÞÞ#Þ##ÞÞ#íÞDçµ2WÓµé êÞOÞOàQQ§ŒŒO#ÞÖÖÞÞÞÕí§ñ\óó\¨ííííÞ#ÞÞ##ÞíllëëlíÞ^éÈ•rÜ#Þ#¦#ààŒà§§Þ####ÞÞ#ëêOíÞÞí\óóñ\Ö§ííÞ####Þ####lÞíÞ#Ä£´ˆµµ¿êÞO#¦¦ÞÌÌàQQŒ¹ÞÝl#íí##O#ÝÞ\óô)ÖñÖ§ñÖíÞ#l#######íÞííÞ#œï;–~o_#Þ¹¦êÞÞÞÌà̹OàÞl#Œ#¦ê##ÞñóóñÖómŒ§ÖàÞl^l#####ÞíííÞÝDz•´; oêíííÞÞíííÞ¹ê¹OààííÕ##ÞíÖ)ñ\\ñGmàÞŒ§§Qà#¦¦ë###Þ§ÕÕÕÕOƒý•þöOñ)©¨¨§Þê#OO¹àQQà§ñÖíÖóóôôó\Œ\àOQmQ§QmQŒOÞÞííÖÖ\àŒŒ§]b;;•–\ñ»))môÖÖ§í¦OQmQÖmômñG»óóóñŒàààGmQQQQ§OÞŒÖmÖíí§ÖàŒ¨ñ½èé2auà)ôómôôññôôôÖíàññ§ÖmÖí#ññññÖí§§Q§QmàOOÞ#ÞíGôíÖÖ§Œ¨\x™5•´°âŒímñÖÖmñóGôóñÖmñÞÖÖÞlíÏñÖÖííàà##àQO#OŒ#l^Ýmôñ§mñÖŒŒ§c’~´ØOÞ§Öí¨)ô\\))ôñ#íÖÖíÞÕ¨ñÖííOŒŒ#O§àOà§§OÞÝ^íí§§àŒ\†1yvOÌÌí\))\))©ÖñÖÖÖñÞímÖíí§§àQ§OàQQ§OÞ#^#í§à\ŒŒ\àpÿý€ÁêÌÌŒÖôôñ\Ö†)¨¨ÖñÖÖÖŒôm§§§§§QQàÞQmQŒOààà§íÖ\ŒŒŒ\=p,ž¿OàŒŒñ»"GÖ¨\óñ¨Œà§\\ÖÖ\íÕí»ôm§ÌŒ§àOOQQ§Œàó»Ï»ñ§íÞÖàŒÕŒ\óñ\)¨\óŒàôÏ»ñ§§íííŒ\)ñ\íÞÞÞ0 ÿÿÿÿ ¨00¨@@(numptyphysics-0.2+svn157/data/record.png0000644000175000017500000000126512264274577017300 0ustar warp10warp10‰PNG  IHDR22?ˆ±sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ%›:9tEXtCommentCreated with GIMPWIDAThÞíÚ¿KBQðï}]ðGPi-rh±- „°Í­¥¿AZÛti—Ü\Å¿¡¥ÍM mµ4¶FXPÜîi ÂÂó|÷Zvïèòõó¸çÜ{ž ""ÌÀò0#ËAÄÐ’£>ìß]þê/í/­»­å â ³Ø~'YDº¹… .ðvz}u zx„X\€—YÃÜö&dvbuBˆÈrŨKc˜s„´†juðzx(5Æ#”ˆUKù„ÇۣΑH ºÛàPÝ÷ùO2å#ѬÁK¯L÷@TíÏ{û¡@÷}<ïíCµƒé»jx9(G²Ç_ÊaBCt·â3Fw{ö ¤5…¢‘6:(AZÛ¨V'tMŒS3ªÕ1ß~‰O[»ãµØÐ§›ÄüÙÉ·çL$]‹nnÍ"@©aŽÉ­¥‚ +WnòvznÂÍaCôÕµ7‡_#V Ü6D,.XpsØ/³fgPbæ°!sÛ›V Ü6Df7ìL|Ì~¬.RVÈaŽQˆˆUKF±j‰=‡º4Ê|"å›éV)2Ÿ³sûž‡D³f’hÖØ3üDƒ•—^A¼^‰¯WX³{d£®ÜÉF†‰×+;ÙéÌì˜äq#t͈”äqc"D¨Áê§ñ÷Ï¿×ú:Aš~Óhbc¹_¬ÄAþ1D¸?Õ8ˆƒüÈ;GâæKÉ=AŽIEND®B`‚numptyphysics-0.2+svn157/data/icon26/0000755000175000017500000000000012264274577016410 5ustar warp10warp10numptyphysics-0.2+svn157/data/icon26/numptyphysics.png0000644000175000017500000000323212264274577022055 0ustar warp10warp10‰PNG  IHDR©JLÎgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYsddx‘õKñIDATHÇU–MÈoUÆëcŸó?î{횊d™Xt ú$h£È šÕ¤Ì(B…M¬f5‰&h…Bá$ÑBdãJYZW¹j÷Ö}¯ïûÿŸ³÷^«Áùß Ùì½×zžg=둾ø|–q€TÈDUi­ánDï  ªˆÑW'§3xš¶ºƒÔÖ›cÈd‡ås"‚Ì@ÍQ3ÔÝ0QTw'3qwTݽ]T•̤÷ŽŠÐÚĪþŒÕüs„JŠ0Ž#¥¢w":­UD¶gÉD£uzkÉ<Ï´ÖˆD„yž©µ@B"X?ÃNý%Á­ÔyM­3‘Aïj J\.N•yÚàÙƒóBD ª¸Ûr±µVÌUg\ÿÍsØp b{:)‚êQ&ômg¦Ë.)‰š‰™à®ˆ@ÆÂO"Í‹”|ŽnïÛ£¬v€¼mk7cœÞUs]:23Ô 3ÿ?N"UÀ(õ÷dN4¿‘Ð7ABdжðš"0Ïó–ï z§ÖŠ›½waµˆ¥8­5Ì ÿÁf?M‰¿B?Gd¢"”R€¥{ˆ¥„ˆ¾ð† Ñ;"²Å6¶,õdB0=CÖWXËGh~3Öÿ…äEM1wD–îÝ  ˜¼V«ÔÊHöPsRœ–B`„,‚Ȩøôy/-ö™¸ÍóXidäR,ܘە.Å÷a RQRÈTÚô ‰ò¥þ™zò>V¾q=!oDæ¿Àp/FïI±…OÈ¢7Ü÷âÔ9 @â"ºy–U{’¡?±&<ÏRÇÛa<›ác¬¦‡[#~‰]zî’ÝAvpß!ìZzW¼Õ޶ç~ÊÀ Ð_#üLÃLq Å×ì} ön%q Asøü2o°8BâhÀñoDŒõÁý4» Ÿ6c;Ë8=BÛùG;÷]G2,üèEf»›ðÓËô_T6í‘À2Hz;f8~«"V·Ðý&TÀÍ`æC÷²×¡•™B)IfúòÄD«d¶­%æFë ô\T+j$3¾ù óÁ=äÞíh?f £"‚¨û'ýö¦ý°+Ž^çc"*­Ídv’$rñÃ…ôI2:ÃñOÈá]ôñôz‰Þ+­5´ÖN­d‡ÍÞ(rŽSóWÙ­`õiz;"#ˆhd¹]%½%*( ˜4|~‚²y”y÷³$;ÔiMkuqŒ—_>›"BqGÔÉ~Èjþez mãðÄèv#Ñg†a@T-d‚™.ï3^º›þÈ|ðurç6À˜§õâ2jh)…R eIÐ}æÝϳÙý"i×Q†Ì/…DPU¬?Ïjó–¯!¢À.—¿‰X}”L#31ða¤ #º Ó²ð€eqõ†ÏO‘åmÈðÖ…—íäK{‰ñ¿_A×2~oÏ"Z˜Ç;~–¶~‘ÈDDÌkR¿ìQÛOUÑ\£ýt{;­Û–tCT±£iò޾G—SèáÈ~D>z«x’âÃöŒRk#ú¼¨î²[/ÊMÐÝoDê¢_ÜúWaÜ<ŒÇßéW} õS´ƒ»Ðr’×ïe¬¿¦ëÕèæqZ½´õ=’Íú_öß"×ÅÝ•L¥·2\ú/ÓåZtý†õYï“7ãÈ>}ÿsŒ¯~ ?zˆ” ´|ìÝsðØÅ§i¾²ìÔu0ä (óãìL¿£³Ç|òàïA5—Z³‘åæ«¿O9’‡Ô_Bü’Ü z®ˆd³žhµaª¨Ã(›‡;Áfÿ&}!†™De‡[¨§¾ bÄpìz2:™¹µ&óç_ËË—mjè6T8¯bíYb|?=¨mƒ™Q|›ßÔ¶.‘˜4Ê…»AöhWw›ëú¶ †\¸p!).Ñ b‘fïQÇ}@e ƒ½Wܵ%pŠ8%ÎÀô ±ûIz ÔV—„Cò?NVÌ8Ìï„IEND®B`‚numptyphysics-0.2+svn157/data/play.png0000644000175000017500000000216712264274577016771 0ustar warp10warp10‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDùC» pHYs  šœtIMEÙ .`ÎÇÊtEXtCommentCreated with GIMPWÒIDATxÚíš]ˆUUÇÛr¦š? (‚$RB¨Â˧‚¨‡^"¡Àˆ^|ˆ@)"ë¡èC²!™"˜¦‹¾FzÉ>&¨l ¦bF4­«†ŽùëavÓ¤gŸ{Ι{ïœßËÌþûìõ?kí³öÚ jjjjjjjjf)!e°Ú\,ŒÀo@#„pªcˆÆ/nîˆÿ|ìcÀÀWÀHáhG¸‰Ú¥®TßñÜŒ¨ýêZu~§°TÝiÔM!‚z»:d>¶©×¶»ÏÚ¸xèÖ«Kf“LåOu¿zºx&= …ß œë`)°Ø¥Þ]´e„ÀÀ`¨ÀuöË€À—ê#•æ‰!°G ê•êõûBã/õ„úX%Y¥:°¸ø›9ê<µW}]m” Ä„º·tÔÁ„E Nóûùê:u_Lƒ‹ö†ÝyEȺI˜ó?cceh'ð Ðθ]¬hY˜ÆVÅË!õLA ÔîVI…Ï:6„p4„ð)°X| «Í&P—–)ÀÅ sf…ø¸¸/~6·êa(%HJ›CcÀgÀ6à `;Æ·óp~ÆqÝ sv'î/7·’xWùø¸LÊØX{€›€ç€«cçaxØ×6!_ l–4a<À À®Âñ¶õšxÜ];ÍðÐŸ×øŽ%Ìyì,oýVàqຜ±>•÷ãÆIÙ,J¬óM5~püöwdü3À[ÍæYÈ• «W«'€ÅMÆú?ü ©¯£!« ¥*¼ 5{À ‰‰Ôÿqøx:ÖÍŸ"@jUx “×è p÷ à›xˆê‹o½¨ƒTfRÞ`/°² rÛ8ðf¬ —ÑoU€”< ˆRöDtó‡€ÏËì<É*ÀÜ “Ä“ÀËÀK!„oË~XVªêýùØô…ŽTñÀ²6ÁTN3y²¬²Ù*«£%®áßßõ_«î4Ë*ÀP Ïn0ÙM¶øº™|¾ ~‰gîy¹ûÁx ! Óꨗ©›Ûíæ·Ðâ…zWìÌkøŽ–¼ûÏ!°:ž±hD}µ• Oíîa²EöfàNà¢x› \‡?{²RØ`A:®yº¦¦¦¦¦¦¦fÖð7s| Øõ¿CIEND®B`‚numptyphysics-0.2+svn157/data/L00_title.nph0000644000175000017500000003112512264274602017542 0ustar warp10warp10Title: Author: test Background: Sgs: 598,412 607,391 606,400 609,410 625,411 621,413 617,420 615,420 619,430 614,428 613,429 614,428 616,430 618,436 608,423 606,423 600,431 598,431 596,434 595,433 593,426 595,420 589,418 584,412 593,409 600,409 Ss3: 255,235 265,173 267,177 268,182 270,183 272,189 274,190 278,198 280,204 282,194 284,170 287,161 292,170 294,180 293,237 289,239 283,233 281,228 279,220 269,201 257,233 Ss5: 299,182 304,216 306,217 308,226 310,227 312,232 314,232 315,234 319,234 324,229 327,221 328,182 321,188 319,199 316,201 312,195 311,183 304,184 300,187 Ss7: 336,236 334,229 335,195 337,194 341,182 344,183 348,188 350,193 353,205 355,187 357,183 366,184 368,189 370,197 369,238 361,238 358,235 354,217 351,221 346,214 343,216 344,233 342,235 338,234 Ss9: 383,256 378,251 377,238 379,195 383,189 392,189 402,194 410,203 409,221 407,221 404,227 400,228 399,230 396,230 394,234 392,234 390,238 388,254 381,253 385,252 Ss9: 390,202 389,214 397,214 398,206 389,205 Ss10: 419,174 417,184 413,184 410,187 409,192 414,194 418,197 420,200 422,235 438,238 442,236 435,226 432,222 436,202 435,201 439,198 440,189 438,187 430,186 428,180 430,179 428,178 425,175 424,173 418,173 Ss4: 445,193 452,227 458,235 468,237 471,241 465,247 455,248 452,250 451,256 473,255 472,254 475,253 478,247 476,201 473,198 467,196 465,222 461,217 460,200 457,195 455,195 450,192 446,192 445,194 Ss2: 287,308 281,283 280,252 283,250 304,250 311,253 318,259 319,268 317,268 311,274 302,276 292,281 294,283 296,287 298,297 300,297 297,310 289,310 288,307 286,307 Ss2: 291,259 292,269 296,269 299,266 301,266 290,260 Ss6: 321,250 323,264 322,311 329,311 332,309 333,303 335,302 339,288 340,294 342,294 343,307 349,308 351,301 349,292 344,274 337,272 332,268 330,255 331,251 316,248 Ss8: 352,275 357,289 360,307 364,309 378,310 365,318 361,320 366,327 379,326 380,324 389,324 392,297 390,287 385,278 382,274 378,277 379,289 381,290 375,294 370,290 368,280 365,280 364,278 361,278 357,275 353,275 Ss11: 420,277 409,274 400,275 398,284 399,292 412,303 395,304 398,313 401,315 416,316 423,313 426,308 424,299 420,294 411,289 414,284 423,285 422,278 418,277 Ss2: 438,271 434,272 432,275 435,314 440,315 442,314 435,273 Ss10: 468,285 479,284 481,282 479,275 475,271 461,271 457,273 450,279 448,283 451,302 453,303 458,311 461,313 465,316 473,316 475,315 470,302 469,300 465,300 455,288 456,283 467,282 469,284 Ss3: 513,277 506,272 496,272 490,275 488,279 489,284 498,290 504,301 484,308 486,314 513,314 518,310 515,300 513,296 511,290 503,283 509,283 511,281 Ss9: 87,449 83,405 79,371 77,350 74,337 72,326 70,319 69,311 Ss9: 102,450 103,442 105,429 109,407 116,374 124,347 130,331 134,318 137,313 138,307 Ss9: 158,452 155,441 151,428 147,407 145,391 143,379 141,373 Ss9: 176,446 175,450 176,448 179,440 183,424 190,403 196,386 199,376 202,370 205,368 Ss7: 204,368 203,366 202,371 204,377 206,378 208,378 211,376 213,370 214,365 213,362 216,365 219,363 222,358 221,345 219,342 217,341 215,342 214,343 213,346 211,337 208,335 200,335 196,341 200,353 197,347 194,346 190,352 187,358 190,370 192,371 195,372 197,371 199,371 200,368 Ss7: 147,372 145,370 147,374 150,377 153,377 155,375 156,371 155,363 151,361 153,362 150,347 141,347 139,352 140,354 138,347 135,347 131,348 128,354 126,361 128,372 130,375 132,374 131,373 136,381 138,381 142,376 Ss7: 203,350 202,359 204,368 208,369 210,367 208,352 202,350 200,351 Ss7: 141,352 140,354 137,355 136,359 139,363 141,363 142,359 138,357 Ss7: 142,304 140,309 141,316 145,316 147,314 148,309 149,305 153,305 157,306 159,302 160,297 158,278 156,277 153,277 151,281 152,284 154,284 156,279 153,264 147,264 141,265 137,268 134,274 135,281 138,281 136,274 132,275 127,282 125,290 127,301 129,302 132,303 133,305 Ss7: 147,288 146,283 145,284 143,284 141,283 139,284 138,288 140,292 142,292 144,289 142,284 140,285 Ss7: 65,304 64,304 66,311 70,312 78,306 80,300 90,298 94,293 96,289 94,278 91,274 88,274 85,276 86,281 89,281 87,266 84,263 75,263 71,266 69,270 71,274 73,272 71,266 68,266 64,267 60,274 59,281 62,290 64,291 66,289 65,283 63,284 59,288 57,294 59,303 63,304 67,304 69,298 70,294 Ss7: 80,278 75,283 77,286 80,285 76,278 73,281 Ss9: 78,379 75,378 70,372 61,358 54,351 50,344 48,344 51,344 55,346 59,347 63,350 66,355 68,360 70,370 71,377 73,379 74,383 77,387 Ss9: 80,376 82,373 84,368 91,356 94,352 96,347 97,343 98,343 94,359 92,364 89,369 86,378 85,382 84,385 83,387 82,390 Ss9: 108,398 107,401 106,401 105,392 104,375 103,370 102,367 104,366 107,370 109,373 111,385 112,389 113,398 Ss9: 113,398 112,403 113,397 116,393 120,387 122,387 123,386 126,386 122,398 119,403 115,408 111,411 Ss9: 150,411 147,415 144,413 142,408 140,408 139,405 136,405 140,415 144,421 149,425 152,429 153,432 Ss9: 153,418 152,418 155,408 157,403 159,400 162,397 160,409 150,426 149,426 Ss9: 178,420 180,387 182,391 184,416 Ss9: 184,429 183,423 185,419 192,412 194,411 197,410 199,408 200,411 199,415 196,418 194,421 191,423 186,426 180,429 177,429 176,430 Ss3: 30,449 29,441 Ss3: 39,448 38,444 39,433 Ss3: 57,447 54,447 50,441 46,437 45,434 47,434 52,437 58,438 61,441 63,440 65,436 67,444 70,440 71,439 73,440 76,442 80,440 85,440 91,439 100,439 102,440 100,446 99,447 101,449 104,443 106,444 107,447 110,444 112,444 114,443 118,440 120,440 Ss3: 82,448 80,447 79,438 78,432 79,433 82,441 86,446 89,448 91,448 93,443 94,439 98,440 101,443 103,444 Ss3: 113,444 115,445 118,440 121,431 126,443 129,439 131,435 132,441 133,444 135,445 Ss3: 135,442 136,443 140,442 144,437 146,434 147,443 148,447 150,444 153,444 156,439 160,439 163,437 167,438 170,435 173,433 174,434 173,442 176,445 181,441 185,441 187,438 189,447 194,446 199,442 201,442 203,444 206,441 209,442 215,442 219,441 Ss3: 213,435 215,445 217,445 Ss3: 24,436 25,442 26,445 25,431 22,428 18,435 17,442 16,437 Sd6: 92,52 91,48 87,45 82,46 75,46 68,52 63,54 61,59 63,66 66,67 71,69 77,69 76,77 81,88 87,88 93,86 98,86 100,83 102,89 108,95 116,100 127,98 140,98 150,92 158,88 161,84 156,81 153,82 152,82 154,83 159,83 167,75 169,69 168,54 164,53 156,50 146,52 138,52 133,55 134,50 133,46 128,44 118,43 94,43 87,46 84,46 87,49 86,45 80,43 74,45 70,49 67,55 Sd6: 225,78 222,71 219,67 214,67 206,73 197,83 195,92 200,98 208,98 216,94 220,90 222,92 224,97 229,102 237,100 246,96 257,88 261,91 265,90 270,88 272,84 275,80 271,72 264,69 252,67 240,67 230,68 221,68 220,66 217,66 211,68 Sd3: 83,447 82,443 78,437 71,414 73,418 76,422 79,431 82,435 83,440 85,442 86,445 88,445 Sd3: 96,440 100,438 102,434 105,430 113,422 114,420 113,423 110,429 104,439 101,443 Sd3: 89,439 87,439 86,432 85,429 Sd3: 149,440 147,441 145,436 142,433 143,430 148,442 150,444 Sd3: 157,440 159,441 162,431 163,430 Sd3: 166,450 165,450 164,449 166,440 167,432 169,431 Sd3: 179,447 184,441 186,438 187,435 189,435 185,440 177,446 Sfd10: 695,26 696,27 694,28 691,32 688,37 686,42 690,52 696,55 711,57 716,56 719,54 723,50 725,47 726,42 723,26 718,24 712,23 705,22 698,22 693,25 688,30 685,35 681,40 683,51 688,55 704,55 715,52 718,49 720,46 719,36 716,34 712,30 699,30 693,33 687,40 683,48 685,57 691,62 700,65 710,64 720,56 721,51 720,40 715,36 709,33 701,33 695,34 687,41 683,48 689,63 697,67 705,67 712,63 718,54 722,43 718,30 711,30 704,29 696,34 690,41 687,50 690,57 697,63 705,65 712,64 716,59 720,50 717,34 711,30 704,28 695,28 691,34 688,41 694,55 704,59 712,59 718,55 721,48 722,38 718,23 710,21 702,21 693,26 685,35 681,47 683,56 690,61 699,63 707,61 713,57 716,48 717,40 716,35 710,30 703,30 693,31 686,38 681,45 688,61 698,65 708,65 715,61 720,55 726,44 724,30 716,26 707,26 698,29 691,37 688,47 690,57 697,61 705,64 711,62 716,57 719,47 720,38 717,31 711,27 704,25 696,26 688,32 682,40 680,49 684,55 692,60 702,62 710,60 715,56 719,47 722,39 717,27 709,26 701,26 694,30 689,38 687,49 691,57 700,63 706,63 710,62 714,56 716,47 715,40 711,35 705,35 698,36 692,44 691,52 694,58 700,63 707,63 712,60 715,53 712,35 708,34 702,37 698,44 701,54 712,54 716,48 710,37 704,40 701,46 706,51 711,51 714,49 708,37 701,38 695,44 694,51 695,54 700,56 706,56 710,52 705,40 700,40 694,46 698,53 707,53 710,48 708,38 703,39 696,44 694,48 698,54 704,54 708,52 711,48 710,47 707,48 706,50 713,50 715,49 707,49 711,49 712,47 710,47 Sfd10: 688,74 689,75 687,78 684,82 679,88 676,93 673,99 Sfd10: 724,22 725,18 728,17 730,14 733,10 738,4 740,1 742,1 Sfd10: 724,60 725,62 733,64 740,67 744,71 746,71 Sfd10: 674,32 676,32 674,30 672,27 668,27 664,24 657,23 650,21 646,21 Sfd10: 672,45 670,46 654,46 648,47 645,50 Sfd10: 673,58 670,64 664,70 658,77 656,82 Sfd10: 728,52 729,48 744,48 749,47 753,46 Sfd10: 728,39 729,34 731,34 732,31 737,29 743,25 750,23 755,19 756,19 Sfd10: 700,18 699,7 697,3 Sfd10: 681,17 684,18 681,18 678,14 674,13 672,8 669,6 667,6 Sfd10: 705,100 704,97 706,75 Sfd10: 715,72 717,76 719,79 722,81 728,87 731,89 733,91 736,92 737,93 Sd6: 250,59 249,61 248,62 246,62 248,42 254,40 262,37 272,37 282,38 290,42 289,45 291,38 297,32 303,28 308,28 318,30 323,36 326,41 325,43 328,36 348,36 353,42 350,54 347,57 345,57 347,57 353,58 361,62 367,67 370,70 366,79 362,82 357,82 356,97 354,101 348,104 340,104 330,101 321,98 317,95 311,95 305,101 303,104 299,107 295,108 283,108 278,105 275,103 273,102 269,102 266,99 262,96 259,93 257,92 Sd6: 296,71 298,65 300,64 303,61 307,60 311,60 314,61 316,65 Sd6: 123,76 132,76 137,73 Sf5: 3,448 5,448 7,446 9,446 12,445 15,444 19,442 51,442 54,443 60,443 64,446 66,447 72,447 75,448 77,448 81,449 94,449 99,448 103,449 109,449 113,448 151,448 155,449 168,449 174,448 178,447 182,447 185,448 195,448 198,449 202,452 210,452 213,451 218,449 232,449 237,448 245,448 258,446 279,446 287,447 304,445 312,445 319,444 326,444 333,443 339,441 345,440 357,440 365,437 372,438 380,437 388,437 407,439 451,439 462,440 471,442 486,444 499,444 506,445 514,447 521,448 538,448 548,447 559,447 570,448 643,448 647,447 650,446 663,446 670,445 679,445 704,442 722,442 728,441 742,441 745,440 747,440 751,439 761,439 768,440 774,442 779,443 783,446 789,447 791,447 Sf5: 722,445 724,448 728,450 731,451 735,451 739,454 745,455 750,455 748,454 745,452 737,450 732,449 723,449 720,450 717,450 728,448 744,448 751,449 757,449 765,450 772,450 776,451 778,451 776,452 773,452 768,450 763,450 758,447 754,447 750,446 755,445 762,444 767,445 772,445 776,446 779,448 785,450 788,452 790,453 S3: 736,396 735,408 736,422 735,436 734,438 732,439 731,442 727,442 724,441 723,438 721,437 720,435 719,434 S3: 731,393 734,395 736,395 738,396 743,396 746,395 751,395 753,396 754,396 757,395 759,394 760,389 761,386 762,374 761,362 758,359 756,358 750,358 748,359 747,362 745,362 744,365 741,366 740,368 738,371 737,372 735,378 734,380 733,385 732,400 S3: 740,374 741,371 734,371 732,370 729,369 723,369 719,368 711,368 716,368 717,365 718,364 717,361 716,359 718,367 719,369 721,370 720,376 719,379 720,374 721,372 723,370 731,370 733,371 735,371 737,372 739,372 740,373 S3: 761,376 764,376 767,379 769,379 771,381 773,382 774,387 775,397 774,397 776,386 780,388 782,388 781,389 777,385 776,383 778,382 781,379 782,379 S3: 752,362 753,360 752,360 751,358 750,348 748,346 747,343 746,337 747,336 753,328 766,328 767,330 768,334 767,341 766,341 765,346 763,347 762,348 758,350 755,353 752,353 754,356 755,357 S3: 750,327 754,327 747,327 744,324 742,324 740,323 738,320 747,320 748,321 761,321 762,318 765,318 767,319 768,321 770,324 774,327 776,327 778,328 780,333 778,337 773,337 771,336 770,334 768,332 S3: 751,393 754,405 756,411 758,415 761,424 764,427 766,428 767,435 765,439 763,439 760,437 755,437 S3: 746,396 748,400 751,400 754,402 756,402 S11: 489,74 490,72 489,71 483,71 480,74 474,75 470,79 467,83 466,87 468,88 471,89 480,89 485,88 490,85 493,84 496,80 498,79 S11: 491,86 495,83 498,83 500,82 502,82 505,81 517,81 519,78 520,75 519,72 516,69 511,69 507,67 506,66 502,66 499,63 497,63 493,61 491,61 489,60 486,58 484,58 483,57 481,57 479,55 477,55 475,52 474,51 473,46 472,43 471,39 470,38 469,36 467,36 466,40 465,41 464,46 463,61 465,69 467,71 469,72 471,72 S11: 485,61 484,53 483,47 485,45 487,46 488,48 491,49 495,51 501,57 502,59 503,64 S11: 468,76 470,72 477,72 478,73 Sf6: 495,4 496,4 499,2 501,5 503,6 505,6 506,2 507,0 S2: 493,64 495,53 497,39 499,33 500,23 501,20 502,15 503,7 505,4 Sts0: 579,351 581,350 574,350 572,353 578,356 580,359 582,359 578,367 575,367 573,366 571,363 Sts0: 587,350 588,348 590,348 589,352 591,366 594,367 Sts0: 588,353 587,356 591,356 593,357 595,357 Sts0: 604,356 606,358 605,355 600,355 598,357 597,361 598,366 601,367 604,367 606,364 605,358 606,364 Sts0: 606,363 608,368 609,370 Sts0: 614,365 612,357 615,355 620,355 Sts0: 620,351 621,349 624,349 623,349 622,354 624,369 626,371 628,371 Sts0: 620,362 623,360 627,360 Sts0: 581,340 582,341 580,342 573,342 570,344 567,345 565,347 566,365 567,367 568,376 571,376 573,377 576,377 579,378 616,378 620,379 633,379 635,378 636,377 637,374 636,370 635,350 634,344 631,340 630,340 626,339 618,339 614,340 591,340 588,341 582,341 numptyphysics-0.2+svn157/data/blank.png0000644000175000017500000000046512264274577017112 0ustar warp10warp10‰PNG  IHDR szzôsRGB®ÎébKGDùC» pHYs  šœtIMEÙ 8%­ÂÆ…tEXtCommentCreated with GIMPWIDATXÃíÓ1 1FáKo‘cxO°Wñ4[‰Gð‚Í*Ø –î³ÐBl  Â|õdòg’@!„ÐX*)R3°æÀ¸[`ÜÞÊG O)ª$TgêàÃh¹E­ßÙ•ôŸüèjr­àøÒ¸ôm­êG³Ú«õ¬^>Œý\×î{5Ý<„Â_¹©)»HÖ”&IEND®B`‚numptyphysics-0.2+svn157/data/forward.png0000644000175000017500000000231512264274602017450 0ustar warp10warp10‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ2'T ²ttEXtCommentCreated with GIMPW(IDATxÚíšOˆUUÇ?wšFò5S4êd4‚P¸Èja% ‘JiST˜¹háNBÜ•´[A-Z„‚M¡‘A2bP–Ò@9ýq´™O›óê5½ûæÞûîyï÷ wó{Î÷üûß¹P©R¥J•*Uªt*i ¶~A’”^è…Þ™çý}mdXì ×I`3°&oaëLuºËuRݬ®)À‹ÓuBAŸ4]“ê­*­®Ì…ÞÓ‰Ê7¶\&Êff5 èXÜ”á#Àã@-C7-•Uêf×yõ® ­ƒ­äQ?°¸¼™}ê4w=ÎÌ<–«ïšO§Ô{Õ”nƒmLGs>3¼¬ì 3j/¸NÝ›³ÅþRw«£)-ƒm<ìær7 ¼r`Fë׫ߨ <Ú"§_*3¦£êžœ™›Yug‹Ê—ÎŒiÀx¬Í1uU‹ µtf,ÆÔCfèõ-*ƒm®Ìã[X—?ê03škCóäçv¿t˜ÙõãqB¹ø¸—˜4` x%ìô:ÎLÛ µkÀDF÷v‡22?+™I“ôZ)œŽgøß'À;À¹ŒÌïKfÔÔ¡qÀ˜úF‹%ê-uež™sOYÌîp¬`hL}DÝßPÈýá·±"_r…çžj—Ù„[KÍ5¡•êûð2¿).ó[áJ•*UªT©R¥JªþF7.¯ž©¯IEND®B`‚numptyphysics-0.2+svn157/data/femkeklaver.ttf0000644000175000017500000031016412264274602020315 0ustar warp10warp10 €0OS/2@ý¼8Vcmap¼˜»Ù@VgaspÿÿlglyfN^° t~ôheadîl ›¼6hhea.Æô$hmtx½'[°locamz˜Úmaxp0­ namez!Hú‰hºpost¿¥J Ž$ECðÈ¢_<õ ÄQ­\ÄRÒþªþN$>þNCßþªþ¬ìì­Cš3š3Ñf€§PJHL @ ûÓþQ3>² Adüü 8öJ“ÿØZöö¥ö4-ž4-S9Æ5öiöZöKö-ö-öCööaöq--öxöaöxìRãJ° ÿýMìŶ‘‘ê7ÔžFËU ‰ˆŽÿþFûdöi9ÿÛöiöC«šN]ü„ƒ8Øÿˆ /™ò¯ÿ½1´¾¢™?ã’dÿù×öpö«öqöb söLözîö«öxÑŠdˆ°®öWŠdž¢<ööö<œ]ühöΰe¬¬¬ìFw‘‘‘‘îNNNNNö¡NÝÝÝÝÑ`ãšššššš®‰ÿÚsTòòÿùòòòöSò·¡’™dÿùòdÝÝþÛ˜OqêÙT8-º-w-wŽºŽwŽwöGöFØw®weVþªö0öLì0‰ßÙöM9ë0¶xöWööB™ÿ¸ö^öWöW19L0F@~ ¬­ÿ1ÇÉÝ~    " & : D ¤ § ¬!!"""""""""+"H"eðûÿÿ  ¡­®1ÆÉØ~    & 9 D £ § ¬!!"""""""""+"H"dðûÿÿÿãÿÁÿÀÿýûýúýìü à·à´à³à²à¯àà”à6à4à0ßÇß¼ÞÝÞÚÞÒÞÑÞÃÞÇÞ»ÞŸÞ„ééDBwä   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a„…‡‰‘–œ¡ ¢¤£¥§©¨ª«­¬®¯±³²´¶µº¹»¼ÒpcdhÔvŸnjÞti†˜åqèéfußâáækz¦¸bmäçàl{Õ€ƒ•ÊËÏÐÌÍ·¿ØeÖ×êëÓwÎÑ‚Š‹ˆŽŒ“”’š›™ÀÁÈoÄÅÆxÉÇÂVVVVn2èZH | Ž î v â r –Œš²À’>ú¼HhPpä¨!Â$ & '˜*ž-¾/„1.2`3 5"67Š8¾:;€<ð>v?ìAJBlCðDæFvG®HøIÔJdKBK²L2LâM|N4OO°PpQŽRnRàSPTTêU¨V˜WDWüXØY¤[D\v]l^€_P`€a>aôc>d"d0ef4f4f4fzfîg°gÄiÈjjŽjŽj°jÂk\k\k‚k‚k‚k‚kškšk¶kØllll"l"l"l"l"n’n’qs¬vbvbvbvbyÀ} €„4…¾‡JˆæŠ´Š´ŒdŽΑ”“n•h•‚•‚–ü˜v𛾛¾›¾›¾œ°¢ž¦Ÿ¼ ò ò ò ò¢£ ¤H¥¤¦¦š§(§è§è§è¨öª«&¬Z­®®ð®ð°Z±È³D´ô¶¶¶¶¶0¶B¶P¶j¶š¶À¶â· ·4·B·N·f·~·–·À·ê¸¸b¸â¸ø¹P¹d¹x¹ˆ¹Âºº¼½z½z½z½Ê½à¾¾8¾F¾Z¾Ð¿¿>¿\¿z¿z¿zdœš$83!%!!67632#&5454&#"7632#"/&54d8üúÔý,¯5;\p.@?H #£B:&@9 8 8 =šúf26ì_P1cPPh/&_a3LK9Büÿ: < > G ˆ@FMU[msyƒ•ª´¸ÀÆ2273'#373#'75#'#&=35'7&5&5675##54735'375'235'#375'#'6327'7&'35'37535'35775&+"375#275#32'#&54654'"7#375"'375#èm,( @H($P  9C4@(( 8 d€Ø88`444dH+9(Lì(TX,X_&" XPCMR:  þìÔ\," @805<f€($4tl€6&0,H,A/x$ˆ* fþrƒ‹’þUË5x% 4 Šj‘ß       ý[^C)né» þJ>>h4 4 $9 ? å /%}œz"ªT 6D…sh­9 /9 0Œ#BU[_esw{ƒ‡'##'565'54763276=4+%'723#'6="'&5476365336=4'#"35'37375#'#357'675353657'37#T01s$H5YFL(QþM88\/@ 8dt4œ¼À  þè$˜($P #HÉw$(Ô%3,d˜( Ph¿=(  4 Ò68$<°' $4 9Û8iWS/,$(  |<pþø pX h$   S^ciosv|3736;"3737#33&=5##'67#'5435575#565'574%7533733%4743%77365#375357375Â5"A5&z¿&\E&˜D5=6dþ=5,0556k[ôTþ¡=2TkÂ.ý¬ø.þ5‚ký~S #÷  5"Ÿ)M  Gþ·ª ~™þüW; ‘þ  S#1{)eh(þˆ²b)üļß)!þý)/ þ65/#4Ηßäó?CTgms|‡Œ”22##&'7322#'53'75##'75&5'4;3'527'5757'54/5335"/523'5635'673735653'#'6=#'#527#3'#353'&5653'57"5'37327'54735336='?/7&/75#'573237'53&/7&54#3#'542+5##&54%75'75?'274#'#'+'#'57'575'6356=7'75'5'32#'#7'7'3'735'35'6=&35375353''iy0#k w b E Å #tHY~5$ú ?Gs>G #  ¡ G Dn- A°  ? $H5k ˜1 i8#')-G? 5#k >#Z#»!-  5BÅ #-Y~#,H H>  $ G -!0$}Q$>[  tZ-75ZG&- G5  ?è2-¶,þëH    .+   65- P   HYk  ? , > > þ­ Ù è þS ’-—(œJº4 s.FeÁ¹\y s KstK,+"Qyb tKWÏQ- Eb V) 1:t.4"DK@³#(#( þì´ 7%8. Eh]9h@"o -:?œWbK 2)nQ#-€. Å¡ @%QhE)~Ð ‘Vh  (@Bf(](y(@­þ¾  Ð4n  ‹…V:#§h)( .@":Q4 …"@/P…K(. EQ/-V:Kn þƒ) ø— *AIT^lw‚Š“—ž¢§3#&'6 "'54736?#562'3#327#5252=4'#"3754'35'575347=3$5##3636=&372354+3654##365'375&5#'35#pþ¥þ£dµ afÃþmãR²/Ɉ–K»qŒ WÕ>ANþÄý× Ÿ 0B²‘q zþ¦& Èþ¸K Ÿô&Ÿþúþð »&Ä^4 Bþÿ BQ; © ³LμuMÅ Å þ‰ 8 B/8% üã  —NýôþI¾ª<9â4åD<1ªxÔ.Tû/ÁÎËS)''ýôýŒë-o'eO•7[—N'S*7N7V?eGËþZf +-þbžûNnX7=†LXm^neþÈn{—m%@˜‚DŸ?'GVF7> f'¤(¼ ÿØ-DTYw|€”°´¹¾ÈÏ765776767%'%#'7#$/&%7&'?767676?7&%3'&7'&'?''776%6'&?775&'#/&'7757?76?'&/7'%''7'7''67?5'½º! Ìþ¢AÐ gN"   +=  3V þñ  i gþ€Iþ 5 3˜þG C2#* iÛÍX  Š  Îßý™hqC DQ # Ÿ Cv A ûJýç ), ýæŒV „# ¯jžá  G [Šˆ«¬T0—(þc? zo+; ûV0"¯:"€z’ •·^"ŒFcsœ.¿/Iz [þûM&7‰pJC = n bì.#‰Q”ñS,¥=zIJ ½145!eN    oÇ Š%K¬]ßF=\«þhýøž/^<)ÐRr™4_SŽ  …T ,$Kå(Mn¥¡  N6  ¨7ì#49FJNT[bhlq;#5323"'+4'5754'5327654'&'7&'35&'3354'53537'657537'36737#375"/¬" (  « + , ( lPx 58\LAhìà Ð<<ì  -K=;¬0ì( He³, @4h4 Yt¬<ˆ¢>G   ¸EW4 D€<\‹?U< ¤tP€9G*V(þ‚¢ø)#73$&5475&'5?5˜9 :þêbV0ústþúå¤[ïEþ›þóÝe0W&ø  ®òuþFþ…äG!B&ȸãt þˆþÉÀÐþÇκåxÖ‰Hþ‚¢ø)5735#5$765'&/7=' 9 :bV0ústå¤þ¥ïEe Ýe0W&þ‚  ®òuº{äG!BþÚÈþé¸ãþŒþôx7ÀÐ9κåxþ*‰H ¥Öõ]pw}‚ˆŒ‘— «3&573233737373'#3''75&##5475&+"#7#565&'"'53'732?5'573'5#6;25&'7/65#37#"75327#"3537"35'5&23'#&#‚ ) >d)1 2; F) $$ 03 -MG< "~ Š  6R1 @Z ‘Y3$? ¢ •M   R  þK| °{VI^">4T/ij2 1= j" . .   _"*QeCEP"eŒ0B*5–&)_PfH " YCb&27+D&!3"@ 4ÒŠ‘\`emrv{®´º¾ÂÈ327373'#"'4375&+3"#'#3724335'3&'57/#''75&5354#"56736765#5355##5'65#353'2'#2'2#&##"'575"=75'5763375#"37'#353535'ÃCI"`' ' >8º)¯ D®{"  " '-" 8 xD<[HC '08þ‚- ýv † öe> -v   8D |82>Ê %"I>þ >O =D_>>‘$û    ¶I ¿1 /*Æ ÿ -¡   %hT 5    þá $Rm4ÿ$  D§¼^  $Æ?%%    Ú*%$/S P$$CˆþÜî 6:B2##'#&5737'733'52754#&54347'53276=4'#"5753765!>8XhP7R0#DC86EnR3)"" 9Et]%"0Y0b^²cà5  PH V!;'6² ž+8+Ž*„§?H.þ@'7T4÷POHPVZ^d33277'##'7'#&+#636337'53##"#'543754+#573'7&56;5&#75!353575'#d Ikph   bf8 %+1¬¨ À6  (( P0,\0< Àˆ€0 O @<  € œ <@D(\    ¼Sw 28<FN2#"'5475#563723&+7324'#"3;27&+"35'35;27##"75#'ûn„a'L Q02& @(@40T50 F&B€ô(T:)#.,,( ˆjtD $($<D8p0  Xÿ¦ Û$(.LRX\`"#5##75#3'#&567"57554775365#73?433'56;37375375575L%jø. 1G”'ð±\¸#j2ý®FÆN1¸ *qÆÿj°+88Mþ‘#Ûj’ý^˜­<! Ф.  û÷"“«(`Ö&1ýžFõJŒŒB ü‘ 59S;elƒ‡Ž²¶¼ÇÌ27+&5&'&=356736#&'#3265'#"'&/#2353#"#5##4'#'54'53354?625&34763'5727#&'37#3753""5#&576725336767'733535'#"325675270MH:þõYN#›S# ÐD>7þš ƒ$D£ñz) I“$|+H:NŽ0) +M< *#H# á  : þÇ YY' cN"Š.B¾ ¬**‚/eq)qA5 ;wB™WýºÛ-y(¬$/ SXc̤ýÖÒ2.7^Ñw@ q@þ ¤‹ÒÁ 4± ‘Ý&·îT.Bo©'k ½Õ'|‡xr.p9  œë  -?þ'„ŒjÍ…p-GRq°` Ýl‘ +þ°¾3  /ã*¦+†þx?ˆgCã&&þ²9Fr 9Ol i`Taejpw¤¨¬°;2337#'"/5%37#'7#'"5##4'57535"5?5'7354##'#'#'?'6747277537365#327'#"#'#"'733757'#'7#'#75#5273'3535î&M`  fM& sþn &s8 ? &@ -3   ’Æ™-  _'#0 ,Ò†z [J²   ì Zr:  Š‚ ˜¡þú  mL†T  Gj¦d#þb) p‚ #  5 G   G v> øó Éa d 5;š1(IE Apþý ýá A5ø; ;)±Úw( ±üÀ š Z’[•™Ÿ¥ª®¶¼Ä32'5337#535#'#57'52765#4/#&+2'""354767+##5#733$5#'533234373676754'#3''#'73'63'56763#3#35'37'373536=3275#375'#ÉEŽ“*JIJ ,#'* “/ [)9#x%% B*™I'3yd%^N„x *% % 4 ¨‰*þº:þôD %I?®P³~*I_ ::T!4 (  Ò?5þ U%þÔ 6MþÅtdI[@¢ÜNpkÆ2ðœžgZ:7+@9)3ðMj2#<­8e¯é@ª1T9žsçUw,o+*8ô4$@1xcŽj}#“%q9þ cþ5$KtLfq¾ÄËÐÔÚáçðøþ 22353#'535#&'"'#'633'53;275#5754''7'2?54'##575##'"#5#527675#56775&#&##57"3472#3772#"/3576?4'&##'7375"=367'&'#7375#37537"5'375#37&73546=#57';75"535'67535'ë¨MP w  P"¶a?l}: " (} +%DD UJ.Œ*ƒA1 "((aD#K™ (#O}3x%0>bþô "%E"°HRr0 P(&5"3O_š)Ž3ÓP>P 5(.3"KD[`¡/n9 &à þü rPD «.  þ[3«Ó  þwPULz—u:E†¯]zžt  O##z] ";F  #‘/ ‘ž:#j9Q@W?# ^d # n])þº€‘ €L†:#–B F@ºŒ.: *>  }º(µ^  N6X3`4hþþ)ÀEþÀ  LzFH2 u>~ ##R: )@@@:3© -¨Lj¨¬²¶»¿ÈÌÒ"34;3673375'73327343'#32'2#'#'5##"53#'75'525'75'##"'5'57547337#525#73676=7#67565'374#'#4#757'#+5674353753537535'#375#35375#» H"XJ Y03 !v O  {Œæ ¾e:&"p  8=3"{ÕC2 '¾'TCZŒ Iz? 2¦®pe-þ¯O3CN¢ Æ þùHCL  þ ` !åH 'ßAÒ-( o!@P (; B!&O' o v55' å4\”ýÝi     – «'O#ØHË..ÄþÆ(Ï[!iv v ý]  þí''‰ -™LÖÜàæï÷û$,32#5##'#+34;757&=3;'#"'57375"'565654'Ȕ54'##'"'35734?5&=35'75#"3775'73#527#"'&'#"5##&5##'7&##'57325236=&#'#"5##5#'7'#'57'336;273'5$5#"3535'354'#354%35375#34'35&375235&#35'36=67#»(ï[ &ŸŸÅŒ3˜ Yò[9 \cy 2 [=¾ë F>T 39™?-†‹`_ ˜¸9 L‰þS Ų&,S…T+C<##3],   ! - ø’"pLÄ   : ¥l9?l_ýË>Š© ¾Ö _3þ™E&þ2ûýR Yl?¥Œ,97J %4 WLþÅ*#"S/)€ëK‚ð )"7K >) #[WZ_§¢Y0 n7 $ :7) Rþ:=="7k\¤g nR!2Î"=7"`¹00*6~) Tät`` `GþàtYjŒ.G"¿o7R.$0 72 "7‰GO`=7*¿/##>÷:0Cÿø¾K2`djtx…‹–œ¤«¯³¹¿Ä3#4##"'"'75'#&5/#47334675"=4%373#3537#327654'#5"5676=7'375##5#32757#32#&=47635'#;2754#"347535'75375353535'327'5(OBPI·2> À`¤‡ <( !ïq%"…]?$P þº.qÁ/wBWC±Y~ï5…2¦I þâO" +O(PI´ ³™%R.(d J{+q’ (.  þ­þâ!Ä '0DÍKÌU÷ @O2–"€ôV~. SM#Ãxh>(µ“´  LZ”ý³wnh½-4  (›“®˜X" x;}. þ5l#y x¡9n>"E4¦?(  ¸a9·x4 #Jb? "mi9QV# [aVKE9  ÿÛŠL049=Awƒ‹“ '57575&+376;'##'57'7##'757'#7577535353533+575##4753'575#276572766736=3536?#"7535Í0‡ LsðØ1+®) ‚i+”21 $ch>þ§ ™  xk UE%×oÝ ¿7 +8ŸJ>%uD+Jý½J =$- CLP Ö Æ %þÅ%  :û   Ö + @&þÕ óþ¨ K 1ï_w ý›a~0kK +¶KBC%Ë%k`¥ üT  & a’S^cmqu£ª²¸¼ÂÈÎì-3:#'&5'547675"'&5'4%#'#37656=4'&5#525#56=4'&'&+535'#'"76535&=7%55!237'#'#"=435&573676=&+7254'#343535'355'375275"/##"'7'47336734#57'7#;5&5327'3375'#"%3754'3475335"/47537532?Ìn»m4ysLŽ‘yÔs&BÎI 1%m%Úsþz=$ < b_o $[<1>0C+1yUs? þð… UH*H7 ‹0U*h+%Zd^ø(0Î Àýa*$ Èg©+j?$/s|! ì = [\)s2_o5  IB‘Ó +ýæ6·C*žBžN1ü00‘¨>dS –o­;t§{PäU 8;Z%yÙ9" ltIÕwþÀItY&?pjW= "!kza^{* X3B>5bI ¯]É#(þäL ?@ÁhD ^[S   C`‘m&  1H—Vl$*   $1=/lr%$$`Uuw I =…%`… ß m§Ia(-:ª„OBIy3=g*mU 3psVP©Î6 ¯<µT=O þsq¡S±·¾ÄÊÐåêõø$/6<@I7#'#37'3#5'74'&+"3;7'5673#75#+'&57#&5#7332727'536553##&/#3#"&5373633432#'#353#&'#367#32767'#67#"'35&54763473'775'347#"35'35'37&322#'2#&=4765'3275&#"%75'47355'#2?5#";5&5'375#;75#"'75#375#355&5„EWE  8ÑhN7l2S8CQb 4f7C€-e N T>…`(5F u= fy8*~2&9‡H =>   ND 1Du(La>QgÈU":¥ 'Y8pCp_I-þÒj-PYZOTù"2O !ö®’!‘"þèT’N3¶$A þ!(8klp!Z|t þ«28{‡!õ=-pe5;N3NCþÞT  -S!›_€'u^6)C-!Hp›TœaŽ­  r m˜u'!ÿT‘TD6o! j‹,('"Y¦Tþ’þî‹ "'  G?' ! €5K.6{1H¾UŸÊs¬€<>ÆN  ! { b !"YC,z -Z<“Y= ¸HNjBzy € ,,U j.j ' ,!¾2þÙ S" !2'3o çt  -37?Saipy‡2#"'7'4726=4'3654'#"3#327&#7#5'75"'"7#+"/54%5#5!37326=4'327&#%35&'&547#733275"/‚CÙDoñC> 'Wþ÷t²H Õ1›:z )þÑ ,)šH›> jo:!,Qhª Hf 0"Rö{QE*;Á' þp‚0& oxC[d+fv$th.Q4;9 cK1RyFNA:OyQV ED .< Kþw Ü4W.V@  *snWn 22 y6!5-:2 4cV .b#ÿñ°  AW[c"=4735'35436=4'"2##'#&5737'733'52754#&54347'53276=4'#"5753765•8$¸©°9##8þcqY%…A:ZlS8U1$GE:8GqU5*#$":G…x`&$1\1e`° Vp0dkP!0*zP0 Tý¥¥\Ð1  ID O7#2¥ “(4'…'{›;C+ þ`%4N x4XJNRW^—¥©·½ÅÊ3?3"#5#&'&'&'7335&'#575'#'%337'7'75"#56?32763773537575254#53354#57#'##&#&'&''##'754'575##72735'&#3'73##"'535';5&'5&¨MK¼ Ú>©S`-# ßDe› @0<ôþì$ˆ' ™™¡`-í (|€ øþeût-  (G%S¡GU <<   þèDhõ/$    þ°ªQoø3X1?l  „L`¦&[9\. M| FF,Ø$( 4 œä›1 mT00X`D€P`´HPœ%ÃT$$  ($¤ $dcS, P$¸D@G-Ä H œ,$<$<$`>"„ ( aé¥AKQUYk’¡§4/'57&+"475#53735'367675'##4+##'7#6=3'7573375353#2'#2#'"'"54'##' 543743%256=25#56;363'##632%3751tŒXXDÌDXP Ø” 4þL 1Œ¼0Ø\ ¨ ð$à!  ìÜ((˜Á?l LÛ¡C5Ä)€xÌþÍiH¬`    ý[    ,   þð    GD›M$RNh < h( $,³  $ H$( 408È$$ x4XJNRW^—¥©·½ÅÊ7'567##'27'7'367&/73#%'#7337#'57#27%3#'675"7#65#75#7675'%'7'&/"'3#'#3'7'733'7337343'353"%5'#%75'&'375#%'#&'35'532'5'#%5&+'&'ìMK¼ Ú>©S`-# ßDþèe› @þÐ<ô$ˆ' ™™¡`-í (|€ øìeût-  (G%S¡GU << þà  Dhõ/ýÜ    PªQoø341?l  „L`¦&[9\. N| FF,Ø$( 4 œä›1 mT00X`D€P`´HPœ%ÃT$$  ($¤ $dcS, P$¸D@G-Ä H œ,$<$<$`>"„ (RÀˆŒ–¦ª¶¼ÁÉÒÜâøþ 2#''#2#'#&=6765754''#3#&'"#5#563472#&5#275&5676765#&#&+5#5##5#'##'63#"'47634?75#"36=4#75##4'35375"5&#3753673475#367'7#"5ȿ5'"'547#&=47375#;6=4'#3675"3#p£n;-¥H1$%tL:ªp$5 "1  V:X!E®) %¡1 S…&S(      ³dA^?y5x} :„‡UQþø$ Z "À  Å:7þÆ $:R1L $ ΪgcP2D$ $¯$>t DH::“#%07-1k  ˆaK,+u88š)%b &q »8ã+&T/= \ 206Ø0<§b©z&@7$Lf MQ¨T3"* Q    -Üf61 ˜ý7 q/6cò'*l& )C1J1Q!l&%­Q=&  þ¸>iÞ1;6 <Q ;ã'kj3)@-"$ ag ’L 2d¸6 JþyOàmpv…3#'#&'&5##"'54%77336537'275'74%'"#'373;76733263'573"575'#'#$'4'&76735';2754#59yœcá‰(,¦F>p,±,; 0;X9þFξþI;,LÌ…,;-z»…w&Jþ÷ÝXXÀ„vþ®ìÝP¹óB,þd)iƒ…¿þ­,à$þËíýÝ$=-(…¶0òo /”mª U6 UmIóU%$¥Ôþ‡ÆþíÓE H äXž †lçU’…ªþñãz 1 QA¡ø±šÑ³‚%þ> aI$¶0zzma5ü×  #ô—MTZ”š¡§ÃÎÜçì÷þ #*.2;CNSXaekosy32#7'#'#535'#'6565#"''#2#53#&5#57&"'6674%325&#2&###6?5"73#75'35"5672'5675#3275#&'375#347#%3543'"#"'#'75##'67232354/%54';752=#27'75375'375#3575#35&#'7537"375!3435357'357#'437537335&'3737#7"6=3'375#3575375#¥F¸QF=#¶1bF T#*pG( 01[ ej=H…BX¨E·9ZýÒ#žb%(#-À,!*1#[˜A["+6HìþäHEíMF¡wZmEþWš ,Ã1 )j#Gu„/%1 ÑþÆ8?:#1Êmý½#ýà8##}14Ø ý¨fý¡1f1ýÄïýç7!aýÙ¨oLS#—ý¶…Ñ?ÒL1 ¢å8YNd/p 8*#7WowAò PŒŒ#TwýþO¶?0 ª*##Izæ+5L°0_ BR2S…–=„ j1h,8Ëo8F‹>21>¨bŒ#lX%/,*E*1"’\?Wþ‘þOÞz**S?1o?ØT?S„w#11#}E)"h#L))>MF##Œ#w1~`88#?T‹S}9u##‹#(ƒ—,0=Bv}„ˆ¤«±½ÁÈÎÒÚÞäíô")IO\`fjpu~‚Œ’©¯¹3;723#5"%'67#747'53343'3353757#'57#"75#32'#"3253325736567&'&+'547'#56=4'&#5&#3#3535'!732'57'5##'54'735'#35'37654#!3537&#365"3565&3532537'75235%2+"/335'5673237##473"235&#'37#"35&'737#7332754'&5&#"35'36574'3535'3537'37'3635'65327337#367#"5#'#'#;2527375''#7327#R @«ÇB3 S°MLelr²þ×    3Y «37L 3_-?_?Ø‘F,   ä RL/# 92 YS½f…| NÓ.i8z8 !!-,Nd33C’TC_pO'C8d3O!g%EC C 7! 'à—­µ¿ÅÔØÝáåêðö *06<AGKPTZ_c3353#+#5#4'525754'#'372733533'5473+#&'#&5"'36;2%&/754'#"#'&'#;6?67'57'7'7#"'#&'&'&54747275##56767435&#327335#%35&35'57365565535357537'375#375#5#3753753&757543535#'3&#'35'35&5&#%5'35'27"37'535'673#(ð [9"­I "ša".P~?6<D4  ¶˜/(A˜3 ÂA%B+a„ kÞKs¯"ÇBRMÛ1.·OU'@ *aF¯V=:9C¦aV  b!WYxa(9 ý‡(P¡ ýN   P ýþ   ä  Â # &þî¼P"? f3 x ü_ ýÈ DEà þ>—%+ 0eƒ3. (K839}[ @Á0 ±þö$Ê7þ¤ØÌMtm"DrÑ.? (Á:.>q5 nN™·Ÿ$  ­_¸'D?( >?l  ,9"  -3 9  #   (.#( K ?9PDJ   (  (  ## m  l"3Pl(%‰g" g ‰Žrg -ƒþè ÿý~’")-7;BGLUlpа´ÆÊÑÕÛáí6?667'&'6&7'676?'7'?''67'77'767'77'%&#'&' &%667'&'&&%7'76&'776/76?''/676/'"'&'77%'7'$6/7'767'7'?'7?'7'77''à ''¸%cªAÉ—  7þð>> þÔ¯GZ15& 0×/8' è< xB ë þ} / ,ª%  ”+¯ & €þ( 6»æ 2%3 y«Ô¾Ô ¿s°C)'  ) 3 ue+  ÜAz% PA‚  _   ^Ä;Q ý0 ;* þ¼T¯7H.þÆ™A) Fn%"% 1•¶0Y‹þî¿4 üÓôýz  #C !l  # rýkýúM8žT¼Î%c b ä|3Mê:® %:#þ¢8s€VWU}ÑqD jKþë' '¬®³º,44þO þô1þ½   8  )  ,ÿÄM—´¸¼ÀÊÏÓ×Ûàêîó÷Š’—›¡¥«¯¶½ÄÊÏÔØßãçëðøü  )/4873373'57375"=3"#'##75#&+"'5#"77#'75##5#"'##3"37725337357233#5"#%%&5275##55##6'7377##5733633275637353353535'#'#!;53733'3'#37537575'37%5'353753374%&'3232567'#&%&'&5335''''575##7'5357335'75'575'73367435#5''#''435&57'547'73767575'4'#&+''535"5!35''!3737374#35375#755'375#325#37535577536753#353#355'75'3#"5"35'235475'75''735&'3#'#35735~fr f&3 - - Wny& 3 L  M %&93'9$ ,  9 @þáþU’  3 ?L-& (- l'&M þÎ39  D ø   -  “ ?@l¸ %& F ü˜ +",ƒŸþõx J!*T-_y3 Kþóu]& ŒZL&  ,  ¹  - f 9 ,--_ÿyL33F-SŒ-&²l ±†? ªü `Yœþè:L3S &f9 þµ 9¬Åß  þ¨  M þb3& ß ™&Å 9  þ¢ Q  ) @+9LMY -3,“æ¤& —  ý  ',  •%T^# , h2& !     2 /Œ B<È GbðcÀ  1!!'          Šì &þçþt°Bs!!-GCINTX_djotƒ‡‹“—›Ÿ¦ª®´¹ÁÅÊÎØÜáëñõþ &*.9>;6737##&5'37373373##56=#'##"#"'6=4'35"535"535##535#5#7327675'336335'37327#353753'337335&#75!237'3755435&+!7537'335735'#34;227#3375''#3#'#3;35'757'57#'5376=637337&57'''75'7'7'736;275335'"/35735&3373&7'#3753';5'35#35'35337'33375373#3#3#%37273#3#3275353#35'3753737'7537'3373375#5753535#375'75#337535237565375#37'37'7537537'75'27"5#"375ßd™##F?64_ÂA#5d)‡' A/ dG# Çv$$     s-h@$%Gn °# ý"  X  * /)L :¼dþ #üž LG KLG#)ýäÓ  )   þæþ«) a­   )AX #//U' # ;¶¡O lþ®K±X¦# & m# ¶þ+  Ón6x#þÛXRá5   Aü~   _ ü§  F)PNVþ)þ¥ =  ë ) LÍ þà ¤) ¼L)){ /Ú 5  )  F' E  Ë^   °  Åk T0 *;Új*³RÉWi0U0% 50$  &      %*%      %   ' %%% *þ|o:{E z%0U+@ êE% Š ++   @¿  *zº  :      /*% >*…@:  5KEEU    %+ % @J*5 %0J&'… 0 EÕ5@0Ez0+E5;+;0+& §—vzåëñ÷!)/37?FLQ5'52#53&##'67'3;5##74#4'"372672?'6;'5"='73#'"#4'#'##&'&'&=473'52?6733675#63537533773#4#5'535'7#"373353327&=723473"653#57#3#'3"'&'5335##5476367"37535'773'#'575''5&+35353533536=35'53'3735'35&35'375ÕŠ™D5. -=¯ânþÑ@LLEœX”B5£!ZO5&-6LšL¨>'XÊ=5.5)‰!­&Š<¬³[m$c9ýø‘6Î'5þÞMrET5oXk<O;T%L‘5T&E3Opn&& #•U.þ°&6TÖ¨=å.5&-þ‘[å.°&†&'þ==ô=6¨. '\‚.0+1X#—"[α( [V9P•#-9Ì£ûþ6ˆV3ü"( ƒ#þÜ \k­  &—#¼¤<O³ r½:l#HR 4þ{? 4()O   a  #¸"m?¡D P " *-9""A# ? š7Ö?¦.¥K „9:((g„" 9:a üå 4 .  ¦#     4?3 dSäêðôúþ&.5;3737#57323533#537'4#&=3675##55"57'3'5##'#%#'#"'#535'75'75272563'3575#57'3737357#5###"5#75##'37+57''7'25'7'435#75'7'737437;73'533'"'57535'35'375#3554'3537'#"357575+'#73537&5375#53275#375u;<&%÷KKxS4-5€VåþÛ »LJ-Ú%-¥K 4bwZ&C-R'þÝ&54ð-CK'5%<'<&-KþZÏia»KüÖJ&<þÜ D´»S-þ®-þÉ3(k™w 9`3D ™þÚ|Ý3w˜( -Æâ ·à-"'3N-' qþû 3 " ?8v»_ µ>" }TÀ  =T  `Df33þÚ ýjZ k>".-( - $(SKOS…“𠥩°´¸¼ÈÌÐÕÜ24323633432573#'#7###"'532?'##'67352=735#'56743535#3=7#565#327365'7'#7'7'65'75##&#37'753573353753753535353535237"=353535#3753275'\(P   gEj*O1°HŒ(ÐTH 4440Ö0$ þè$40@/Ñ (<   /ÑEa   þT$ Hh 0þ$D$T(S)þþçãîb$./9 /% 0 .…ˆMN  $9üÝ ½r Ùüéo ]þwþŠ.)fæ¦HD|=à/$9$ S*‚–NNXD9h4/ ..w)/9«þÉ339))°M *4I9 3)fSTŠŽ’–›¡¨®µ¹½ÇÌÖÚä377433#'#""#"'&/#36;35332?336=#7''/5475373'5367677#"/#676?''25'%735353737#35'3#566=32=75735;75#&7275"'#37557;67#'K`Uò # 8u"$Pk&"+(#!+j - #}Gj)3 ;  h-AK)Y 2G [«h '3þͰ ¶ i   #(þh3 7y8#- #-ü ØB-%Û S& Z7¡S  þÿ†V¡þ];›qF@H  !5[›0tƒ5- 2­…  ª"+þÉMT|Œ@F¨/ =97ª;  –M ö 6FFþ¾‘3#].B 0  †0  k` ; 1+¬6( ‰S­³¸¼ÃÉÏÕÛâéïþ3#%#'##5675##5#'5275&=#"'73?5'737&#5'735'467333=##5773&5#7373#'##'&/5735'"#5#"'#54"=733776?336735'353535'37537537527535"53337&5&734337337&'337"535&533535AÁkþÜOcy (N ´·#GVëOhX8#Ö5/ò92ÁcŽœ þÙ« 3À.v²(@9#B«Hcc#’.+ý*#A]«]«$+¬z`k$_} ';-kUSª†§R [}0&mÛ›,1þ”ýzÎ&éb<–9T&’2+gÏQþ¿*2 +!lþ þëU   ‚  & «Ï L1ä&WA ú™E þc²gQ&!&!!6ß’“r!!³7¾Îï+& !6&%*¬W\<L1‚³(1,7³b6G ÝDnu{ƒŠŽ’—›¦ª%637337375"'5375&#'2+#5#"=3'7336576;23##'#'#'#''7'5'7'5/75375#75#35#37#7335353527#35"354#35 <þÜ$" C[…È*=Q)¼ *+çB  s mÂ)0  $ùÿ3.gI  Þ+ %æa7 æ* 1 Ï=Ï þŽü  Ú6D#&@6!f\ýfi 6&    ½g  AFoyl ü{ þÇ& + QÂqK Çþ|        ½½1+A0ãDq¢¦ª¯µº¾ÂÈÍ×ßäéíõùý 273#5#3'7'7###'#"/#74'57#737327'##53#'#3%?33575#'#'53535"'73767#4'4/#'3333!&54375#'56355'35'75#37'7'3573&37"75435'!2=35'3537'7'353536=37[;ÊÝ)!) !Å B 911!Ä1!F  )Ä ½$¬! ) ›b”z)R]ý9ÄJfy¡)j21þ¹ (!!ÝZQþWJ)!1>J)!9)pýý Þxü®! ‘þ¹BÍ )  üÏ  !!D+*@þÉþcÿ?*+9EÍ j[Ö9…*$†æYNNª9ýey#*öú± $+À¼-ö˜U$þˆýº‡? U¸°+#\+9$xþÝ#*1#$28N]£$8+c$ã†G#ÎN#$11\9G]F@$>S Ÿ£©­²¶¾ÃËÏÓØ37#"'5257#!3%3'5'#4'375'3357'3573'73#5#'##'#&'#3537##"5#"5&=7'7'7'75'7'732'#"'"#75&73'52353535'3575353675#7#373'%3435;5¯[;;U‘© ý U''þÚ   $7uŠ    . +'o Mþç!! ؃'   ˆ   3à€ƒ ý’@ þôˆü$¼. `UýWUv .!U Mþùo!ª;[S     þþ«…kq,5[V](þ2L­Àœq?Ï ³ŠÜ'} m= H,þýV-5~$ª #6$Î$ #   , k þ/tÄ6m+Å-j% "8¿ ýb,? Y Yk c–7 æD cüí6-6, $W ý—?\! þ QP MS&.8IsBŧL˜ê§Oˆ-φj3½=ˆò§5yEþ¸~=¯ÜŸs†,(´&¶5.þçj=-&b&5 .'6q&&—&-ŸDbc"HrcbSc.[[DSD q&c 9.-EQU§&:)V+.&5<%%-¶.þïìLaeimrx~‚ˆŒ‘°µºÌÑÕÝáåëñõü77332#2'##'#'57#'56?"'57&=335332?2754'&'##"5'#'5'56?33'3373535'7375#355375#3&54'#2'547'"5335"#57375#3'7336336754'35'3536?'3575675#75#375375#×+++³f¬$s}Œ$@e2ãe@ ¨¬+]º}6Æh»ìß+þÄH+VA#AHzýü9#!—d]þ’2¿.³z#++dA2ž ZD0»Òý»Ld$ý´HdCMÐA+2þÚV2L  zJpÊ@K. *þ»: NE %š…%0õ ^’_ûþ²þÖþÜMÚ  (      pu6)kU nG %:%0   •% m2:0 %%P…uSo?00 j" @% SS5;@uy}¢«ÓÙßåëñöû32#'##5##"/"'#3#"/#&676%772#35'&##'#533277327336375&'572753375&'&%''57#%347#322##&'#373'$/75'4767375'#"'#65435&'567'337356=4'#"%35'375#%37537535"37#753535ì ½ES  A 8Rù 4@ÉÇ—  ˆº J«71¸7J«×H°Š@ 7ù'Iý  /1b&o%¥/R A c^Dt ,' @bþÍJ$  þ3})!üè. KJí_%.(b Ë mK%þÞE7 ¸µ"” oS+Í eË\œ%7;¾  . ÊŠGþû. .ý` A7þ} n DË.7 S “Aý…„ SþÏþù+Gþ†$$#y ­€G>#êG9xI¨Î¿PLþÝ*2@ýÞ‡‡ÀyoID<@Ƈ§Ž#r\îŸ8,$ |#'#\²‡Ü8 ¬c²>¯q1©³r@#¸[¥çC I@27WG+\dœyyUN+ Ü91þy@1#\ÕLˆ–›Ÿª®²¹Üàùý 2##'7'3#"'##52527&/575''57365#653&'&'#7357/7'67373'32#&5#&'#5##'#"& '636;5#"35'37576=4'373535'72#5'#4'75&='7'757'547'765354374'4''57#'353'753753535'§©×?Î7–à  !s )—i*€ ¦, `‘±Ã3´ T - &G3KS aEZ &  ma9  / 1VM6CTSþ.ç:FÀýe ‡'œ+:´m-9- šþr  GÇ -Ttþ“'¢ 4á   LV6a H8ØA J˜ †î  JnkFŒ  Q/=‡}¢¥ V$þaþt7 ¬I1  ;P7Tˆ|ÂQ8$ {Œ +% Ni¾  ŸC$ %b7 öyIt;‚­µ++++ OOVgW1%V%C +*I %Öa_ ),$[+\b%1 $O þ¼$ %ŠSQ[aÂÆÓØáèìðöþ 2+"5&'#2#"'"'&=725?37"3275'&'4'535"'#&=6?325&#&#3435'#73#&5&563347#'35332?27"'&'735&'4'#&/7&'676;2;533235'7&'&#"736;7335'3735'7535&5343'5&#3&55'35367'&'\Ì *#”>G·MÓFþ…@WtIb*#Gw1ïCWi0dTMX“ l¯qŒq3S3(›2¶…;Š#~#wM¾i ›\%8…»¥M  .Qq,ôFXT%R&*CeG]ß®[bb$#Mš~#*&$$G þ0#MFi þ¶8-S10¥6CbCRmX ,`]fa%=…<2nUDB$h  VÛ¥0z)8 O‡~%n€ zg  =éuH<>0ˆœE/+G3+VI %gKA7+7I±0Œ8<=PN $OwW#m=0=ª%sgf€žO  7=[¤1 V~# *†0/3&rs10t °ULK{ƒ‰“—›¡¦ª®²¸¼ÂÎÔØÞäéíñõ7 532353#'#4'5'3#''#'4'+57"563257''&''5?'7'236;2##"7#573354'53533255&'$35&#'53%5#"3535375375#!4'35353535'3535'325335'35'#375377375#3'3353'33'Žœ•dÜ92+d22#òäG7 +Ü+9$$Sµ„$ €#.#2+]J=xäýUŽGuÙcüÀNUÀ2ò9²2+k*þ#OþÝ!-€d€jñþU$]qL7BmTµg  HþTè I 71* `˜ 1 ¼ Oþ× Úþj‘A ¢0  34%þÝy *m[ $     žUUNstžIþ×$1s’ª     SPT•›¥«¯·¼ÁÅÊ32273$5&##"'##'7'7337&=65333;65'6='35&'67673'353##$'4##&'4#4'332736?5##6=7'7"37535'37'35'35327673'37#;5Gp+N 49…¿ÅþYsB  % › E<,Š=µ 4¤y34+µ"3,x Xü¼ 1 Š"=h^þÒ Ç=#1QNg­ 7KF;”Î¥‘ …A= "+ x@¾ú<= V . û742PEEéüT4=E "ý R8SØâöÿhX?ˆ/T +1®2ý9 —,?ÆF % aþÕu ­V?md3E9wš•X ~ þ©¨Ð:Št@ ý»þpPqFY=ã0ap“Š?9‡,50‹Š93&&þ÷e&,^…,Šx,Ýx;Xþ×RX92,§LJRVZ^cgp¡§¬²¶¼ÂÈÌÒÙÝâæëñ÷ü 733'5334733'53#2" '#565'3"#'7#+'''#'4767332?6375'75277533273557'''373#57'#'#75"'###7%37"'5'3753535'3'3753'375363'353537275375375275653535É  // ÏP PY:!¤J&*"( \<Â!ð( I%/Ü 2Œ d…#þ ¢J(ý6]d ´È< <™e /5C/Õ( /dø.(þ@./þ‘ $JJýéá . þ žÔþí[¡=T‰Ô6.^ 1–.å& k±4¦7UDExˆjqþF'Z &&þ°SC  ", &$ `\Ae(/C^ XIþú6/ 8ÇP( €((P5ýõ+W¬F&þø/¨Œ(è"^ed(!<_Ö5(y !eë/#  ^yE’ 5erdŽ(ë× QJ† 9 LÎx" 9( (/5ñ6„8Š–.(1&þù)@S†!CBJ(  þô eSDHPVƒ‡“—›Ÿ¤©¯µ¹¿ÇÍÒØ23"#'"#$'477/535'7273#7##'#366;635543536=37#"475#'#'#"'%3537375#35353535''53753757537535&#35'2=35'R 9 K,cþ›M8Öþúò ?,8wü ã&? 9üóD˜? Ð pÄ&9~wL!ke8  J3Öþëýé E»þ(? 3/X E þ[Cv'~ww ‘23SD­lNô±ÁCmD/UW †:{}: S <þþ ZQ4$    hÚËN  WþÇ: p  ˆ3l¡·H Ë^Y ]m*   X: ¶'þt mS CTSƒ )9$$$  [X]e¨¬°´¸¾ÂÅÉÏÔÚàäè277373273776376573373'#373#5#'''7/65736#&'#"53&775773353727#'75#$536527'"+#"575'67'7'75354!&+&5?5337753775'35#3'!3'35'375365#375#335+#oj\/î_l#£+9dFqþÁxN+@úõ7^¿Sž$9*1UŽ$GÆIÒ9jÎ2b–*ÚÎ@œ*$þãh!*8#þž¨t#N21Î99Ž$q#ýfE#1*ñÓ[%&    }þÕž 6  ·§   &%! ç'ß{&x<;  hÕ0·þØQžyC¤%!!c A  :Ç+  (     þØ þ7 +;0FFi¢€<Bƒ‡‹”327#5#'7373&''57547543737'337#'57375'35'73%7'634;'#"'#"#32737'535"'"'77535353'57'375#'÷Ã?S Jd ?‰  ‡'* i?Mþü%t £::*%D @%   :: 1ö 5Ji/Jþþn? 1 " ÃÓ þ¯E?5D€ N¼ èþÐù    fÂ0Vg,¨0Fýòþ_A;bQ10w &7‚ +6,   & ­¿Lþ%%A\\þ)6; LØÿÛÿËu$(.LRX\`'#'#'53'##'##&''95#35'44'35&=3235'52335'35''55ÖPn˜Ð" €=+ (Ö[ B7+™\Û¬b$ Ÿ+ C«=þH11I +ä .þ\ýŠ !<­˜¢’j üõFb1&Ö`(þU“þÞþ üJŒŒP üƒi¢€<Bƒ‡‹”3&'$'#3737372'535'7355'##'&'57;7375#'#37$=735'5;75#&+#"5'56=75'327237'7573535375''#375:£ t%þüM?i *'‡  ‰? dJ S?ÃED%*Ž " 1 ?nþþJ/iJ5 ö1 ::   %@ ¾ Ý FD5?Ep0¨,gV0Âþš    ù0è ¼N QLýAþð­ &   ,6+ ‚7& w01Qb;A¡ýý%%A\\þ)L ;6ØÅ{F*.EM3##'&'"#5737475'735"5635&#36367537'"53737å~eE.' ! ¥I´y þè'À< G! Y','¥Íl?AY‰tsÛ ÷H1 F HV' ¨Œ)*è6    6åaYq6èþ÷  Cÿ=·]?HLPTZ73!#732#'5"5"''52=&#3?73%#&%#'375#53#4%5"'#35353535'ÃYç¬   sÉþ¨(þì“®þ" 4 ¤åoÈüИ ° ¬],  $ p0 0 ¨ <$4$ttˆ  «Ûƒ =BIQV\`ei67'?/&'&'7?'&'57'&/66'&/&7&77&7&'76'&7'7'&7'?'7'>‡ &8e®4TA >CŠ(ĤJB„Z• $°ka€1 &*"'C8Eš ˆ1&¼0&"9#-$®!"b ì4A'”.D (%10DUYO]l + 4[8 '3). #:D Û<.d1œ* 5«)Fò$%  0 ¡¿!*5;BPV[bj2732747#"'+"576335&+;2574'#373475+"'3272=;'35%5/"35&5>—kE43y<@—`U4ùx_M¨ £_ NÎ{¸d Ïþö Èl¨+<%K¾M"þ  E¥E"þ+Mp¿^^:0€ /uF¤¨ê9‚#þŒ€_ SÞ/ $ /ýýÞ0^£Ys=.RŒ#% Æö/ R°F/ FRi/ /&8 ]##/# (Bõò/3;?HNS]chlrv|323536372'5475&'7#'##57#47#'5673532735#337&+754'35'3674'#375#2757527#75365'àgI[*@Sþ¦l[[F*TM3‘*)y?ÒþËÎ(DA?Ná1*?þŒéaýà##ýžš yn 8**1ò•þã1£sþ–¢K ^r1%N9,bUm>ùÕ99þø+2cGV #9îvf¾\+UNGþNy7GU+ "PW^bgmsz~‚ˆŒ”˜3#'##'57"#575##65&##'"#5##375"=3276=32+"'&='36635'25&'3573'3&'35';5'37735'335533535‰ )8(197:0Mc©yéo sPÑuS(ƒ®(Cmx'zN0.¾e!X˜ !ývOz² ±\,™ýæ0¡(8H(È0X(`PE`Ž*(<<R-Co[R•S5jœa–6´‡4x2M5Ê…‡K<+D*%­%þ8Ê¡1q-- % æê?DUY]aglqu#37##'#'&'##''#&5"54743633732'533573347547533676&+"775353535'7537535Ù $&_"6Q Œr e)665_5=C(ýÃ"" 0 )/Z&sBR63@DDXþJ )6/Žê"6ýý$" 0) 9–Mr7â¤7Î\>7Ký„þ±"t=T)_<^=007""ï77g eû49@GQVZ_einsy}2#'#36?'673'533""##'#"&=74737535&'675'"37&#%35352755&'753&357375#'37ŸƒÆ'' YeþÜ5eÄwlN/'rši'>cy…N > u6ë9ƒ?þê“KK±A•;ý‚ýW*,@$þYSf''Vû–1#a.ÿÃ¥Ja5Lˆ÷ÒKDC€„x% F'$- þUu˜KOVZ~„Š–› ¦¬±·½ÄÈÌ33733#575#73#73'3##&5##'5335##&=7&#"#5'47673527&#5'35'733673675'73733754'"35'35'37535'3'275753757536="75#36=#7535‡ |Eh@O2v2h ¦#  'Kr cŽ-My>*, Õ    Z  m<Çäý  Y  ¨@*t0T<'A '˜A~ð &„Ê_&ýÂk,F31YW9 BjßBYF e3'ƒR·‘þý h ,7 8 -ÅJ2FL  -k&,9˜xe 9 žEEüR¼     þU?ûEL]bfkouy~ˆŽ“™232572#"53634337327?'757#'#&=75"'5335'47625&'33736?&#"%5&37"37"3535'3765"35'7'5"375#367#35'ã5-%s#6 */HYa™»k?mE © Q †ù%> ˜TDÖ &46 ªˆËH%,þ\ 0!G4Ïš=uOh'*;þs ã ýÄ5 ,Y ˜6™> , „- # @ úP ?û'@- A GT½ýò0A4[Š%XG6• M»@:  ‡nMà–AM4%ïÕ ÆŽnm»2@`'A'!&&þÊ  ÛgþÝ-TG-;ü G  ÿ[æã7=AGK637#'#+7'5275##4'"#'#" 7'737'735'3'375#35EOc ¥!EÆ81 < !$ žE   #{   Z   ¼ ãMþ0LkäEþGq ¼%œ.~,Rü ,8kR  Š 9þT¶ªkþŸ88 îL )/4DI ##"'567'567#24'35&325&+35'5&2#'5"/75q75$gN+U•  , +"igЂРBþÍ®E_h¤4, 4  T +4 , L`%` ~)<0 Z+$a*m*mþÇ0$ýoIB BI $®BH* f ÿˆþUÐS )/4gtx}ƒ‡2##"'567'567#24'35&325&+35'5&2''#&6737363"32652'#3652753'7#7&7#ÂÜ& H8=i JIb\b0Ù{1DJu$% r< ˆ++¤20 7 1& #/4‡#Jn ×  P {1)ÏSp*p“0F8##!h2*p1~#1~##þ•8*ýþÎ,*Jv¸J#?F86*?IB[. Bm2ü¤]=R8Œ81*# ÿ[Ý=mqu{…‰”š676336?5'3#'65632=3237&'&'&'##&##&#'5"'#75#'57'535'533554343'73535543753535335'#375#´(À?šd]ïòB rIãP®F !^5Jq†—‚!:.† (" 5B$  ýÏJq"/==TýÕz• ?~_µØE CU?Q…<§ÃE þÞ   (b G¨Aþ€8 D¾22?Ĥ9 Š8ë qFý–%%899ÖL .@9 99e 3E EоFJNTZ^bhlquz…3373373367#'36?33735435"'55&'##6=7'73347353537535'7''#375#'5'35'374#375#375'È *:  \3 :*E/A8E / m›4r"0  j:  “ o /5T  Y  0¾-'-u ³ó«K ¨—†N3C"J =†T>ö8 >!(^ MP 'p8-@Ô§'Œ{{ý - "   ! Kïlqw}ƒ“—¢¨737673#57"'#54'5635'#""#5##'6=#'"#&#&5##'#'75'533'533637'5634!375#75'67#%7354'35'7#%35'3735'D F°> a  2 Ë,# 5jK 2F)@   #  oFCva  ,,  #5 &p©|= “Ö$þï s= ,þÌ(S *!5Xý¡, #öO F¤ þ%õ  ïJPkþî]6",Nþ¨//'9»¾’GG"ïVþcN7/:qˆ¤þkÄ '."þ×+¥¬>¬7/nf3J>bœk N7NFNF++''>fN þÍ·SW]afjptx733373#'5&#'"5##"'##'#57"#'#75#575#57'77337323637#35'#756753535'3535"!t:l2)™xK ;C×*   % B![[" ! û 2¦B­&-S2 ×þ1 -þÄþ´"4w•þn«C-œÎ*•öþì…Q4i&çhJ4a- <%a÷LwŽC~AHþù%%4;޳oxxŽ--¿ó 48<AJPU\bitz $476%3635#"35335';276='3354'&+&35377547534727535&535'3275375#+"'335'‹4þÞ/éþ{£\‘ jK-Z67$ ýÏAk-±°Q ¾6$ Ð[HÄT=*E ý~ H?š R[\.'ü¿#¤¬v "$aTœþ†`yµ #A-.b£þóO^þd †? TFàí g<&æ'‰MC& >t† d"¶ n" ð } MM ¶ªó)I} ¥:2SBKIKR¾ R›Uþ!:!!2ž8) 6gß•11 ) <S !7J))Kþ@' |aµ J9þ¶K:k=.¥,&))11”[4 þd]ûFMQX^nrx€„ˆŒ2343#4'5#36733##56253'57'57''&'7&525&5672?75&#7#235&375#73765&# 75375365'35353535ÌP6KC"dT!´› þ¡2\: 2T:K_ 32'x!¸u $ó2eJO«Ú m"!¨BW`þü";Cš **Kþ  ûf¿ çXÍ“ Äþ†M†@ 9 &9 _ÝnS 3  Y_ þ &?T!…—_&SM…@? þÈrY†Mr@@S&&3&ÿNNTY^hlpuy„Š•™¡¥ª®´¸¿ÄÈÏÕÛßæìïôú 533#'#&'&'3&'#'##'5##'&'527'565"=65773753676365#35'5'373375#35537#7'276=&#73675%5'375#37'7#3527"327365327#"!3767#36753';5'375#367#35375'37535'5&35&%37;5"'35'35'Þ5[h|4ºq^&.y~ Q4{ws V*ZÛ   (,.#: 'uD (.9› ##@K þæ*y þìVÀO$¸(,o þ¸. )EmG2mÓ ýð ÅWýÆ ìýWIV?5 þ  É9VÏ ;.b"Š#(4mÛ~ "E?gc9Wþu î#. \]b#4Š  þÓ=2þï:E'Q39m%/ ?@T½X¥ ,& . 2t lFD!>L& 3   þ¼.8&L@¥™!  9 d_'-??, àL__ S#03   ,9  ²²DM ?`[; bs’-&S33}\bgmsw|…Œ”š ¥ª°·ÁÇÌÐÖ32#&#'54'#"3#&'3&5374'&57'5637363365254'&/#&5##"'6733635'5&'75#74'37#3775&53&5&535'35'5'3&'5'36='#275'35'653735'g¯8œ TA •@,@:lDXz·=//eç  ‰I8• Žv3° ·)`¯='Ò/#_QsX "/e"6fŽL "QQýý 06(aqSÉ/)3mfþ÷6F4H0"(ÅD)fô7!2b^Q[#+M9RQž= wL-X BÓ A3-}TR · £7z› –-,& 2 _'TD"9F/j& 5 HHF\222Y)=M‹0[ H‘‚onWH '  ¢Ôjnrx~„ˆŒ’–›Ÿ¤©¯3373373347363363#'36?33735435"'55&'##6=7'73347#+'675#'7#'5476?3535375375#35'7''#375#'5'35'374#375#375'd 2 F 2„;Œ'U1bœL  E3S9OCS 9 ƒ»@‰)9!  ,]/ Œf %ø@ &'þ»  y … 9@f  l  9Ô.'-w ·ÿ 6 8( *%iºP3D"K ?ˆU?û9 ?")` NQ 'r9-=¬$  3+¨‰(Ž~}ÙýÒ. "   "äûdhntx|€†‹‘—£©®³¸¼Á34334373337'326566=335335733273367367373##'"=#'&5#75733564353753753535353752=3753&35'35'37#35'3'!353&367#h((wXh (0"&0g/—(HègH§ =ýâ·HHþ-‡88þQGþš'Rýƒ( ˆ ýÚ6 ý;( ä$û0)0£þ ^=6*<·2Z¨"D0f(D þâ=þÒ…7?K]"s0é))f""·mª[œ=þ¦>>‡>–/Dàál7((DDz{6/67C)R‚"0 706= ! """  1SY_ciptz…‰“235732333673367336736732'##'#'57'#"'773'5735'7335'735'35'3535'#35'3537537537527356=MÆ_hq`b%C* =C þÁ5N3  y &  &m  3  --&3RSS¦@?L:-- .uHþä~þ-¢¨äÉK ‹ZtLlþ G)!I ' dDS8 ¸ ZHïþï ‘S­ê,,22j!{d ðå>Œ‹¢!dp uNv) ,Ûûvz€„‰–¤ª°´½ÃÉÏÔ3#5###&##&'#"'#&'75##''7#&335473235335'336733474737336337527654'737&53353753#%27'37575'37&35'37535'357'57'35'35'33756=Ë6HO&87 'v/07W /o?¶R4 __8v0 7?O0އH=/?W—ž?'(ûÓB G0§¶('l  þ«00þ<¼'8('ý(ûo-) 8þbþ©Q2V~8 —®)_L)B#e"+° [“`ÅP 9 tþÎþøÖ6[(R (lþñKþ³¦§C›>'r[N Qü“Ž t 833-<# .íAü7#(f—VQ ~ƒ~$(((GG3 ÿ—Š™KTY^chlv|€335'35&=3$373&#'##&'##&'##''7#'7##56%34/7'735'335&'367#35&773753735&/36575fÌ {,'5#Bþã‹ yœ8%:œlþÒ3XII,;ÅR23W_ÿoý“P11þã¯et¨¨:ÔJ{‹ÌÌø$™Õ+K¬gN/â eþúÿ'   õ‰> ]}&Åëþó,d2 L TÞò %>µEˆr‰H]qPoþíŠAœœ#þ¦Ź© ¦– ÿùþb,¡JU\djo776?'473'76'73767'5&?''#'6'6767/&7''67767&'7&'%767'7'?º ½  M+q  q  7$­_¸jB# ;šN¥7 d>h0!u   Sœ H <WRH­¶. •Oþ¯-þÕ¡þØ‚Kd?ˆ". ? #ƒ˜Šþt³³N( %’Þx$w4 #½=;uþLX 5GН7?4þD¼ò 6 ý¯  ÿ×ó}‚ˆŽ“˜œ¢§«°µ¼ÁÇÍÓÚÞãê257327333365733733733653327'6337'533&=35"'"'7''5473365'67675"'#57'#6733763'3&567775757535'3737367'2735353755'37575'37;567#ô   3U ˆ & a”‚3o7r \ @  ˜&+)i+&r67 +&;%m~’RiDKS1 ‘,N%g1<ùXV—Ù#þ¯êbr&—ab¾1 A1L! /[³É6! ÿ! 0 A6#/ó $ k @ƒS)/5!WÐÏ“GL2P™0)_/dMlWvA1($5  ¡Ï«ˆZ/ (*†ÐM)”:0;>Ï!¨—¥;#jˆAÉM  þG9v 00   $ GG5   /    pÿctÄgmrx|€‡™¢2";/5235&/56=7453367363"'#32'#&'&&#&'5435"57'73276767375375375#435375'35&535"'&5335ÒE›k+&Bpp2‰7 DK] 2 , \fa@S%  `IYQD½6D ' ‰&2D KOG%S{µ  c& µEKp  9, $L8W,JÄœnþ”MC1T+wþæU_6f ê G,$ª I} Z„Rt¥ó3(< fN¿Z 8^o´-  ؼ¦Ÿ?Ì**þ&HB‘  r*`|F6W\n+00`o0•ˆ#Vb1#R e -5(G5JK9 rS ,F5ƒG , ,    h’]149$‡ˆ X Xr B,rc%#,b$4SL¨®0&+"!!!27!7654'&'#53&546;2#&ìHXdZT5hþ²#¢’‚;1gý1»"¡‡:÷·KÝ:Ce]”‡Š<?K¡Ö„ç2î´MB 54&'&'&54632;2632!2#!!2#!#"&#"#"&54676767>#þ Óyþ¨ 3+Aƒ` ÀD9!!ž )  / 84‹F & ?T©C þ’.eÿýî ›C[ë Jáò  ¬  9bÅ   D+Ý"F Œ   f Î  9o  ' ×rH   D«þ^K*3#3#«    süëÌüë%xþd?-t~”˜ž¥«±¹¿ÃÛßåëñûÿ  &+/6<BPU\lp#'##"5#5654/#"2'#&5&'7'573437334;75&53373327'5737'&535&'&5475&57'4%3754'#673237&#5'34775375343&27'#75#3'7'#"34'373&=3275&+535'"%3%37535&35&374'353753'753'354'5'3#35'37"3#36=5'35'#'3'5275'37'5'&'675+''353íD=>±[ L™M>T..™ "BZFý6-&&56Š'Ig·’°#¤‰ = DM‡V·.‘6.¬0—5Fcd'&&6) 9)(sE+p+9)uEEÇkE\“41hMzþí==AI56'þËþ™..TEE‚M.&õwþ¥=cdþ-&&ô=-D9ID\¡T=$ ¸\47&\'&c=¨-IAGY+ \ 'ðma)1WT[“ ØYf'8y n@oP >%K8f;;!32&u‚’‘[je;ŠŠ:N4+|)Š3m_ ),\=‹I,IIþÇXJ`e;$$2)þì'8'Sf$ÌH„¶ƒƒVm$3WB8K,$$3A:½$$ +qF6%½,¶,B̃If> ½:3$P ,t3,,? B,+5++3Ñv]'7632#"/&54%7632#"/&54ßG E E L {G E E L  H I K V H J L W dÿî&°/Z2#"$'&5476$3267>54&'.#"".54>323273#&'&+2653H‘hfqqjiþô•’þøjjoohfþ³_ffabò‡‰õaahh]`ø†‰úŽô€ƒô„&J'*H,4OHKV¡)! u[H^|Œ5Á°qheþî’“þòiimoih •”ghqþý`÷ˆ‰ôa`fe_b÷‡†û^`ggûÒˆê~~ì… Æ^~rZ^yÎ1(pFd.Q®°K3#3#®VÍÍVÍÍß/%þöþö%//%þöþö%WŸÿ!#!WHbýÿþˆdÿî&°9Qi;>7654'.#;!53254/"';!53254+5!2#"$'&5476$3267>54&'.#"ï!= 0AŒRd2"þ¦-EK**$5þÄ+%%+d@=32#_#)!)þ¶E_#((Ë]¡›####.5463¡R¦T®Ëײ›Fú«Uú«â½—À8{F7632#"/&54‘R P P  X äTV Xe hþ^32654'&#"73672#"'hUCB91(>0?% V`ufmPþÞ4+--°hQILY e°7#553#553sÍÍVÍÍV°%  %þÑþÑ%  %þÑ(ôý)/6=‹’˜ÒØßå %*5<BFKRW\ahlpyŒ‘–Ÿ£©­±·343##7"'"%52765&=3637&%435';5&'237532#7'#'#535'#'6565#"''#2#53#&5#57&"'6674%325&#2&###6?5"73#75'35"5672'5675#3275#&'375#347#%3543'"#"'#'75##'67232354/%54';752=#27'75375'375#3575#35&#'7537"375!3435357'357#'437537335&'3737#7"6=3'375#3575375#& Ù“  §0³gþ¬+OENl—V'Eb(BýýO 1g7 K+7 •F¸QF=#¶1bF T#*pG( 01[ ej=H…BX¨E·9ZýÒ#žb%(#-À,!*1#[˜A["+6HìþäHEíMF¡wZmEþWš ,Ã1 )j#Gu„/%1 ÑþÆ8?:#1Êmý½#ýà8##}14Ø ý¨fý¡1f1ýÄïýç7!aýÙ¨oLS#ý&R%0 ‡ RK,?  ;r($+s =6#Xý¶…Ñ?ÒL1 ¢å8YNd/p 8*#7WowAò PŒŒ#TwýþO¶?0 ª*##Izæ+5L°0_ BR2S…–=„ j1h,8Ëo8F‹>21>¨bŒ#lX%/,*E*1"’\?Wþ‘þOÞz**S?1o?ØT?S„w#11#}E)"h#L))>MF##Œ#w1~`88#?T‹S}9u##‹#'ô*.EM›¢¨âèïõ*5:ELRV[bglqx|€‰‘œ¡¦¯³¹½ÁÇ3##'&'"#5737475'735"5635&#36367537'"5373732#7'#'#535'#'6565#"''#2#53#&5#57&"'6674%325&#2&###6?5"73#75'35"5672'5675#3275#&'375#347#%3543'"#"'#'75##'67232354/%54';752=#27'75375'375#3575#35&#'7537"375!3435357'357#'437537335&'3737#7"6=3'375#3575375#2t\@*$  ˜C¦o þþ#±8 B R$(#˜½c:J"   x$ $È /.ÆSM a/È ä fý¶…Ñ?ÒL1 ¢å8YNd/p 8*#7WowAò PŒŒ#TwýþO¶?0 ª*##Izæ+5L°0_ BR2S…–=„ j1h,8Ëo8F‹>21>¨bŒ#lX%/,*E*1"’\?Wþ‘þOÞz**S?1o?ØT?S„w#11#}E)"h#L))>MF##Œ#w1~`88#?T‹S}9u##‹#(ô'PU\`®µ»õû$/=HMX_einuz„‹“œ¤¯´¹ÂÆÌÐÔÚ32&5&+"3##'#535473236=6;#"'&#"3276;236?'52=#"'7335'4375&53532#7'#'#535'#'6565#"''#2#53#&5#57&"'6674%325&#2&###6?5"73#75'35"5672'5675#3275#&'375#347#%3543'"#"'#'75##'67232354/%54';752=#27'75375'375#3575#35&#'7537"375!3435357'357#'437537335&'3737#7"6=3'375#3575375#p5!Ä}"57'?ÄË7cQW'^:?†•/'?VF%?V/…7?si ý7?" 7þþF¸QF=#¶1bF T#*pG( 01[ ej=H…BX¨E·9ZýÒ#žb%(#-À,!*1#[˜A["+6HìþäHEíMF¡wZmEþWš ,Ã1 )j#Gu„/%1 ÑþÆ8?:#1Êmý½#ýà8##}14Ø ý¨fý¡1f1ýÄïýç7!aýÙ¨oLS#ÄaJl4)  CTQX8 1]4v‹*%$° R)  $8 >„X / 1 –ˆý¶…Ñ?ÒL1 ¢å8YNd/p 8*#7WowAò PŒŒ#TwýþO¶?0 ª*##Izæ+5L°0_ BR2S…–=„ j1h,8Ëo8F‹>21>¨bŒ#lX%/,*E*1"’\?Wþ‘þOÞz**S?1o?ØT?S„w#11#}E)"h#L))>MF##Œ#w1~`88#?T‹S}9u##‹#.ôé!&8>DPWajsÁÈÎ7BP[`krx|ˆ’—ž¢¦¯·ÂÇÌÕÙßãçí32#"'6;6!3373#"'6;65'#57&#275'#335&#35'34/475#347#3275'#"#3&57375#"'32#7'#'#535'#'6565#"''#2#53#&5#57&"'6674%325&#2&###6?5"73#75'35"5672'5675#3275#&'375#347#%3543'"#"'#'75##'67232354/%54';752=#27'75375'375#3575#35&#'7537"375!3435357'357#'437537335&'3737#7"6=3'375#3575375#š+þøU2V/1/)f)_"R).Lý¥"f_}/7 þÁtC"ze _J]$s("(ýïXKX9 ñF¸QF=#¶1bF T#*pG( 01[ ej=H…BX¨E·9ZýÒ#žb%(#-À,!*1#[˜A["+6HìþäHEíMF¡wZmEþWš ,Ã1 )j#Gu„/%1 ÑþÆ8?:#1Êmý½#ýà8##}14Ø ý¨fý¡1f1ýÄïýç7!aýÙ¨oLS#é,’'g‰6GF&bx ! 49,AWCLK 1g,I /D !m 1bA.1 <¿ý¶…Ñ?ÒL1 ¢å8YNd/p 8*#7WowAò PŒŒ#TwýþO¶?0 ª*##Izæ+5L°0_ BR2S…–=„ j1h,8Ëo8F‹>21>¨bŒ#lX%/,*E*1"’\?Wþ‘þOÞz**S?1o?ØT?S„w#11#}E)"h#L))>MF##Œ#w1~`88#?T‹S}9u##‹#1ÿÄMý)/6=òöúþ (,15ÈÐÕÙßãéíôû !%).6:KRX^gmrv343##7"'"%52765&=3637&%435';5&'237573373'57375"=3"#'##75#&+"'5#"77#'75##5#"'##3"37725337357233#5"#%%&5275##55##6'7377##5733633275637353353535'#'#!;53733'3'#37537575'37%5'353753374%&'3232567'#&%&'&5335''''575##7'5357335'75'575'73367435#5''#''435&57'547'73767575'4'#&+''535"5!35''!3737374#35375#755'375#325#37535577536753#353#355'75'3#"5"35'235475'75''735&'3#'#35735& Ù“  §0³gþ¬+OENl—V'Eb(BýýO 1g7 K+7 þDfr f&3 - - Wny& 3 L  M %&93'9$ ,  9 @þáþU’  3 ?L-& (- l'&M þÎ39  D ø   -  “ ?@l¸ %& F ü˜ +",ƒŸþõx J!*T-_y3 Kþóu]& ŒZL&  ,  ¹  - f 9 ,--_ÿyL33F-SŒ-&²l ±†? ªü `Yœþè:L3S &f9 þµ 9¬Åß  þ¨  M þb3& ß ™&Å 9  þ¢ Q  ) @+9LMY -3,“æ¤& ý&R%0 ‡ RK,?  ;r($+s =6#X  ý  ',  •%T^# , h2& !     2 /Œ B<È GbðcÀ  1!!'          Šì &þçþt°Bs!!-GFJ[bhnw}‚†3##'&'"#5737475'735"5635&#36367537'"5373773373'57375"=3"#'##75#&+"'5#"77#'75##5#"'##3"37725337357233#5"#%%&5275##55##6'7377##5733633275637353353535'#'#!;53733'3'#37537575'37%5'353753374%&'3232567'#&%&'&5335''''575##7'5357335'75'575'73367435#5''#''435&57'547'73767575'4'#&+''535"5!35''!3737374#35375#755'375#325#37535577536753#353#355'75'3#"5"35'235475'75''735&'3#'#357352t\@*$  ˜C¦o þþ#±8 B R$(#˜½c:J"   x$ $È /.ÆSM a/È ä f  ý  ',  •%T^# , h2& !     2 /Œ B<È GbðcÀ  1!!'          Šì &þçþt°Bs!!-GR>G…F .a)E ,? yg .\=+. 9‹KOS…“𠥩°´¸¼ÈÌÐÕÜû 24323633432573#'#7###"'532?'##'67352=735#'56743535#3=7#565#327365'7'#7'7'65'75##&#37'753573353753753535353535237"=353535#3753275'343##7"'"%52765&=3637&%435';5&'2375\(P   gEj*O1°HŒ(ÐTH 4440Ö0$ þè$40@/Ñ (<   /ÑEa   þT$ Hh 0þ$D$T(.do ~$‡Mÿ! <4;R2A4J1þ|ü%M* 9 *S)þþçãîb$./9 /% 0 .…ˆMN  $9üÝ ½r Ùüéo ]þwþŠ.)fæ¦HD|=à/$9$ S*‚–NNXD9h4/ ..w)/9«þÉ339))°M *4I9 3)Ì&R%0 ‡ RK,?  ;r($+s =6#n$KOS…“𠥩°´¸¼ÈÌÐÕÜôú 24323633432573#'#7###"'532?'##'67352=735#'56743535#3=7#565#327365'7'#7'7'65'75##&#37'753573353753753535353535237"=353535#3753275'###'6?3373676375#375#3$?#"%375#5375#\(P   gEj*O1°HŒ(ÐTH 4440Ö0$ þè$40@/Ñ (<   /ÑEa   þT$ Hh 0þ$D$T(†#KþÙ0b%$xÄ" ,þOEF\3)&þ¯U ' þSzuS)þþçãîb$./9 /% 0 .…ˆMN  $9üÝ ½r Ùüéo ]þwþŠ.)fæ¦HD|=à/$9$ S*‚–NNXD9h4/ ..w)/9«þÉ339))°M *4I9 3)ë6 ¬/! +P/| þéÅ 0)¼ÑþÊ@;ŠKOS…“𠥩°´¸¼ÈÌÐÕÜ "*24323633432573#'#7###"'532?'##'67352=735#'56743535#3=7#565#327365'7'#7'7'65'75##&#37'753573353753753535353535237"=353535#3753275'3##'&'"#5737475'735"5635&#36367537'"53737\(P   gEj*O1°HŒ(ÐTH 4440Ö0$ þè$40@/Ñ (<   /ÑEa   þT$ Hh 0þ$D$T(’\I 2" x5ƒX ÌŒ,4A x–O-/AdTT ´4$S)þþçãîb$./9 /% 0 .…ˆMN  $9üÝ ½r Ùüéo ]þwþŠ.)fæ¦HD|=à/$9$ S*‚–NNXD9h4/ ..w)/9«þÉ339))°M *4I9 3)Ï>J"   x$ $È /.ÆSM a/È ä ;–KOS…“𠥩°´¸¼ÈÌÐÕÜëþ!-4>GP24323633432573#'#7###"'532?'##'67352=735#'56743535#3=7#565#327365'7'#7'7'65'75##&#37'753573353753753535353535237"=353535#3753275'32#"'6;6!3373#"'6;65'#57&#275'#335&#35'34/475#347#3275'#"#3&57375#"'\(P   gEj*O1°HŒ(ÐTH 4440Ö0$ þè$40@/Ñ (<   /ÑEa   þT$ Hh 0þ$D$T(#œ227<L8 1- þœ<8I ¼D(HL<<8,7D  þÈ4,4!S)þþçãîb$./9 /% 0 .…ˆMN  $9üÝ ½r Ùüéo ]þwþŠ.)fæ¦HD|=à/$9$ S*‚–NNXD9h4/ ..w)/9«þÉ339))°M *4I9 3)] lLd (44HX     &* 0@1 8  h7 $L 6"2 ^P$H 0"$,>$'PU\`là $,04932&5&+"3##'#535473236=6;#"'&#"3276;236?'52=#"'7335'4375&53537#"'5257#!3%3'5'#4'375'3357'3573'73#5#'##'#&'#3537##"5#"5&=7'7'7'75'7'732'#"'"#75&73'52353535'3575353675#7#373'%3435;5&,¢uh,- 4¢©.RCG N04 n{'!3H:4H 'o-4_V   ý±4ð-Öo[;;U‘© ý U''þÚ   $7uŠ    . +'o Mþç!! ؃'   ˆ   3à€ƒ ý’@ þôˆü$¼. `UýWUv .!U Mþùo!ª;[$ÄaJl4)  CTQX8 1]4v‹*%$° R)  $8 >„X / 1 –Ô     þþ«…kq,5[V](þ2L­Àœq?Ï ³ŠÜ'} m= H,þýV-5~$ª #6$Î$ #   , k þ/tÄ6m+Å-j% "8¿ ýb,? Y Yk c–7 æD cüí6-6, $W ý—?\! þ QP Mî&R%0 ‡ RK,?  ;r($+s =6#&.8IsBŧL˜ê§Oˆ-φj3½=ˆò§5yEþ¸~=¯ÜŸs†,(´&¶5.þçj=-&b&5 .'6q&&—&-ŸDbc"HrcbSc.[[DSD q&c 9.-EQU§&:)V+.&5<%%-¶.þïÿ#.5<jt¥©·ÃÈÓ×ãëð!%*.5###'6?33736%6375#375#3$?#"%375#5375#327353#5##75#'#"'&5'63653&+"#'#3#"5##'3 7'567'565#56754&#'"53356#5"5'#'26=34757'352&/47235&#375;7332574#3753755&535735'377567375#õ#0kþ\E‹#53¬0#>ý—Îd„J:6þ å8ýž­¦| RO 6Y<›t  X.…? } Y‹“-ð½} ä 6 }B,-Î  û   <€> ³ŠÜ'} m= H,þýV-5~$ª #6$Î$ #   , k þ/tÄ6m+Å-j% "8¿ ýb,? Y Yk c–7 æD cüí6-6, $W ý—?\! þ QP Mÿ6 ¬/! +P/| þéÅ 0)¼ÑþÊ@;E&.8IsBŧL˜ê§Oˆ-φj3½=ˆò§5yEþ¸~=¯ÜŸs†,(´&¶5.þçj=-&b&5 .'6q&&—&-ŸDbc"HrcbSc.[[DSD q&c 9.-EQU§&:)V+.&5<%%-¶.þïê*.EM{…¶ºÈÔÙäèôü '+26;?F3##'&'"#5737475'735"5635&#36367537'"53737327353#5##75#'#"'&5'63653&+"#'#3#"5##'3 7'567'565#56754&#'"53356#5"5'#'26=34757'352&/47235&#375;7332574#3753755&535735'377567375#¯~eE.' ! ¥I´y þè'À< G! Y','¥Íl?AY‰tsÛ ÷H1 þJ RO 6Y<›t  X.…? } Y‹“-ð½} ä 6 }B,-Î  û   <€> ³ŠÜ'} m= H,þýV-5~$ª #6$Î$ #   , k þ/tÄ6m+Å-j% "8¿ ýb,? Y Yk c–7 æD cüí6-6, $W ý—?\! þ QP Mê HV' ¨Œ)*è6    6åaYq6èþ÷  i&.8IsBŧL˜ê§Oˆ-φj3½=ˆò§5yEþ¸~=¯ÜŸs†,(´&¶5.þçj=-&b&5 .'6q&&—&-ŸDbc"HrcbSc.[[DSD q&c 9.-EQU§&:)V+.&5<%%-¶.þï'PU\`Ž˜ÉÍÛçì÷û&,3:>EINRY32&5&+"3##'#535473236=6;#"'&#"3276;236?'52=#"'7335'4375&535327353#5##75#'#"'&5'63653&+"#'#3#"5##'3 7'567'565#56754&#'"53356#5"5'#'26=34757'352&/47235&#375;7332574#3753755&535735'377567375#¾8"Ì“ƒ#7:)AÌÔ9gUZ)b ³ŠÜ'} m= H,þýV-5~$ª #6$Î$ #   , k þ/tÄ6m+Å-j% "8¿ ýb,? Y Yk c–7 æD cüí6-6, $W ý—?\! þ QP MÔhO!u8-  H[W^= 5e8€—‹!-''½ W-  '> B_ 4 5¢¸&.8IsBŧL˜ê§Oˆ-φj3½=ˆò§5yEþ¸~=¯ÜŸs†,(´&¶5.þçj=-&b&5 .'6q&&—&-ŸDbc"HrcbSc.[[DSD q&c 9.-EQU§&:)V+.&5<%%-¶.þï!Ò!&8>DPWajs¡«Üàîúÿ "'9?FMQX\ael32#"'6;6!3373#"'6;65'#57&#275'#335&#35'34/475#347#3275'#"#3&57375#"'327353#5##75#'#"'&5'63653&+"#'#3#"5##'3 7'567'565#56754&#'"53356#5"5'#'26=34757'352&/47235&#375;7332574#3753755&535735'377567375#.!þæ[6[3542,m,Šf$Y,1Qýz$mf…3: þ«{H$‚Š=mePd&|,$,ýÊ_O^< ^ RO 6Y<›t  X.…? } Y‹“-ð½} ä 6 }B,-Î  û   <€> ³ŠÜ'} m= H,þýV-5~$ª #6$Î$ #   , k þ/tÄ6m+Å-j% "8¿ ýb,? Y Yk c–7 æD cüí6-6, $W ý—?\! þ QP MÒ6!µ0€¨BXW/y”("@G5QkR ^¯\ <7%Z:Sž)‡ =y%"Q:!=IÉ&.8IsBŧL˜ê§Oˆ-φj3½=ˆò§5yEþ¸~=¯ÜŸs†,(´&¶5.þçj=-&b&5 .'6q&&—&-ŸDbc"HrcbSc.[[DSD q&c 9.-EQU§&:)V+.&5<%%-¶.þï¡sU' '7'77û÷c÷÷c÷øb÷÷cj÷c÷øb÷÷c÷÷cý)/6=Ž’ÍÓÙãéíõúÿ343##7"'"%52765&=3637&%435';5&'237532273$5&##"'##'7'7337&=65333;65'6='35&'67673'353##$'4##&'4#4'332736?5##6=7'7"37535'37'35'35327673'37#;5& Ù“  §0³gþ¬+OENl—V'Eb(BýýO 1g7 K+7  p+N 49…¿ÅþYsB  % › E<,Š=µ 4¤y34+µ"3,x Xü¼ 1 Š"=h^þÒ Ç=#1QNg­ 7KF;”Î¥‘ …A= "+ x@¾ú<= V . û742PEEéüT4=E "ý R8ý&R%0 ‡ RK,?  ;r($+s =6#œØâöÿhX?ˆ/T +1®2ý9 —,?ÆF % aþÕu ­V?md3E9wš•X ~ þ©¨Ð:Št@ ý»þpPqFY=ã0ap“Š?9‡,50‹Š93&&þ÷e&,^…,Šx,Ýx;Xþ×RX92,#.5<‘ÌÒØâèìôùþ###'6?33736%6375#375#3$?#"%375#5375#32273$5&##"'##'7'7337&=65333;65'6='35&'67673'353##$'4##&'4#4'332736?5##6=7'7"37535'37'35'35327673'37#;5$2nþPF$74°1$@ý†ÛfˆL<7þò9ý޲«Qp+N 49…¿ÅþYsB  % › E<,Š=µ 4¤y34+µ"3,x Xü¼ 1 Š"=h^þÒ Ç=#1QNg­ 7KF;”Î¥‘ …A= "+ x@¾ú<= V . û742PEEéüT4=E "ý R87 !¯1! ,Q0~ þäÉ 1*¿ÕþÄA<TØâöÿhX?ˆ/T +1®2ý9 —,?ÆF % aþÕu ­V?md3E9wš•X ~ þ©¨Ð:Št@ ý»þpPqFY=ã0ap“Š?9‡,50‹Š93&&þ÷e&,^…,Šx,Ýx;Xþ×RX92,ã*.EMž¢Ýãéóùý 3##'&'"#5737475'735"5635&#36367537'"5373732273$5&##"'##'7'7337&=65333;65'6='35&'67673'353##$'4##&'4#4'332736?5##6=7'7"37535'37'35'35327673'37#;5º\I 2" x5ƒX ÌŒ,4A x–O-/AdTT ´4$p+N 49…¿ÅþYsB  % › E<,Š=µ 4¤y34+µ"3,x Xü¼ 1 Š"=h^þÒ Ç=#1QNg­ 7KF;”Î¥‘ …A= "+ x@¾ú<= V . û742PEEéüT4=E "ý R8ã>J"   x$ $È /.ÆSM a/È ä ŒØâöÿhX?ˆ/T +1®2ý9 —,?ÆF % aþÕu ­V?md3E9wš•X ~ þ©¨Ð:Št@ ý»þpPqFY=ã0ap“Š?9‡,50‹Š93&&þ÷e&,^…,Šx,Ýx;Xþ×RX92,­!&8>DPWajsÄÈ #+059>32#"'6;6!3373#"'6;65'#57&#275'#335&#35'34/475#347#3275'#"#3&57375#"'32273$5&##"'##'7'7337&=65333;65'6='35&'67673'353##$'4##&'4#4'332736?5##6=7'7"37535'37'35'35327673'37#;5 *þÿ S1S.0.(c'~ ] Q(-Jý´! c]y. 5 þÊpB!v } c ]I[# p(!(ýýVIV7 p+N 49…¿ÅþYsB  % › E<,Š=µ 4¤y34+µ"3,x Xü¼ 1 Š"=h^þÒ Ç=#1QNg­ 7KF;”Î¥‘ …A= "+ x@¾ú<= V . û742PEEéüT4=E "ý R8­2¨,vœ>QQ,p‰ & ;A2JdLW¢V8v3#T 5N“&} 9q!!J59 E²ØâöÿhX?ˆ/T +1®2ý9 —,?ÆF % aþÕu ­V?md3E9wš•X ~ þ©¨Ð:Št@ ý»þpPqFY=ã0ap“Š?9‡,50‹Š93&&þ÷e&,^…,Šx,Ýx;Xþ×RX92,¡4)/6=_hsy€Ž”™ ¨343##7"'"%52765&=3637&%435';5&'23752732747#"'+"576335&+;2574'#373475+"'3272=;'35%5/"35&5ù Ù“  §0³gþ¬+OENl—V'Eb(BýýO 1g7 K+7 þ1—kE43y<@—`U4ùx_M¨ £_ NÎ{¸d Ïþö Èl¨+<%K¾M"þ  E¥E"þ+Mp4&R%0 ‡ RK,?  ;r($+s =6#g^^:0€ /uF¤¨ê9‚#þŒ€_ SÞ/ $ /ýýÞ0^£Ys=.RŒ#% Æö/ R°F/ FRi/ /&8 ]##/# (B¡c#.5<^grx“˜Ÿ§###'6?3373676375#375#3$?#"%375#5375#2732747#"'+"576335&+;2574'#373475+"'3272=;'35%5/"35&5#KþÙ0b%$xÄ" ,þOEF\3)&þ¯U ' þSzuN—kE43y<@—`U4ùx_M¨ £_ NÎ{¸d Ïþö Èl¨+<%K¾M"þ  E¥E"þ+Mpc6 ¬/! +P/| þéÅ 0)¼ÑþÊ@;=^^:0€ /uF¤¨ê9‚#þŒ€_ SÞ/ $ /ýýÞ0^£Ys=.RŒ#% Æö/ R°F/ FRi/ /&8 ]##/# (B¡8*.EMoxƒ‰ž¤©°¸3##'&'"#5737475'735"5635&#36367537'"537372732747#"'+"576335&+;2574'#373475+"'3272=;'35%5/"35&5Ä\I 2" x5ƒX ÌŒ,4A x–O-/AdTT ´4$þn—kE43y<@—`U4ùx_M¨ £_ NÎ{¸d Ïþö Èl¨+<%K¾M"þ  E¥E"þ+Mp8>J"   x$ $È /.ÆSM a/È ä u^^:0€ /uF¤¨ê9‚#þŒ€_ SÞ/ $ /ýýÞ0^£Ys=.RŒ#% Æö/ R°F/ FRi/ /&8 ]##/# (B¡='PU\`‚‹–œ£±·¼ÃË32&5&+"3##'#535473236=6;#"'&#"3276;236?'52=#"'7335'4375&5352732747#"'+"576335&+;2574'#373475+"'3272=;'35%5/"35&5,¢uh,- 4¢©.RCG N04 n{'!3H:4H 'o-4_V   ý±4ð-Ö$—kE43y<@—`U4ùx_M¨ £_ NÎ{¸d Ïþö Èl¨+<%K¾M"þ  E¥E"þ+Mp=ÄaJl4)  CTQX8 1]4v‹*%$° R)  $8 >„X / 1 –^^:0€ /uF¤¨ê9‚#þŒ€_ SÞ/ $ /ýýÞ0^£Ys=.RŒ#% Æö/ R°F/ FRi/ /&8 ]##/# (B¡!&8>DPWajs•ž©¯¶ÄÊÏÖÞ32#"'6;6!3373#"'6;65'#57&#275'#335&#35'34/475#347#3275'#"#3&57375#"'2732747#"'+"576335&+;2574'#373475+"'3272=;'35%5/"35&5j !à ?%?#%…#K_ G="8þB KF\# ( ëU2Z _ŒK F7D UþyA7A) ~—kE43y<@—`U4ùx_M¨ £_ NÎ{¸d Ïþö Èl¨+<%K¾M"þ  E¥E"þ+Mp/ž*p“;LM*j $ 8>/G^HR™Q 6o0!O 2J‹#v 5j G25 AÁ^^:0€ /uF¤¨ê9‚#þŒ€_ SÞ/ $ /ýýÞ0^£Ys=.RŒ#% Æö/ R°F/ FRi/ /&8 ]##/# (Bep)/6=rw~…”˜£§¬±·»343##7"'"%52765&=3637&%435';5&'23752#'#36?'673'533""##'#"&=74737535&'675'"37&#%35352755&'753&357375#'37Û Ù“  §0³gþ¬+OENl—V'Eb(BýýO 1g7 K+7 þ°ƒÆ'' YeþÜ5eÄwlN/'rši'>cy…N > u6ë9ƒ?þê“KK±A•;ý‚ýW*,@$þYSf''Vp&R%0 ‡ RK,?  ;r($+s =6#g–1#a.ÿÃ¥Ja5Lˆ÷ÒKDC€„x% F'$- eˆ#.5<qv}„Ž“—œ¢¦«°¶º###'6?3373676375#375#3$?#"%375#5375#%2#'#36?'673'533""##'#"&=74737535&'675'"37&#%35352755&'753&357375#'37ü+^þcy…N > u6ë9ƒ?þê“KK±A•;ý‚ýW*,@$þYSf''Vˆ? &Ê8' 3^7“þ¸è92Ý÷þ’KF–1#a.ÿÃ¥Ja5Lˆ÷ÒKDC€„x% F'$- e1*.EM‚‡Ž•Ÿ¤¨­³·¼ÁÇË3##'&'"#5737475'735"5635&#36367537'"537372#'#36?'673'533""##'#"&=74737535&'675'"37&#%35352755&'753&357375#'37Ú\I 2" x5ƒX ÌŒ,4A x–O-/AdTT ´4$þ¹ƒÆ'' YeþÜ5eÄwlN/'rši'>cy…N > u6ë9ƒ?þê“KK±A•;ý‚ýW*,@$þYSf''V1>J"   x$ $È /.ÆSM a/È ä 2–1#a.ÿÃ¥Ja5Lˆ÷ÒKDC€„x% F'$- e!&8>DPWajs¨­´»ÅÊÎÓÙÝâçíñ32#"'6;6!3373#"'6;65'#57&#275'#335&#35'34/475#347#3275'#"#3&57375#"'2#'#36?'673'533""##'#"&=74737535&'675'"37&#%35352755&'753&357375#'374 %Ý H*G(*·("U"k PE"&?þ UOh( . þö`9f k¿U O>M `""þGI?J/ +ƒÆ'' YeþÜ5eÄwlN/'rši'>cy…N > u6ë9ƒ?þê“KK±A•;ý‚ýW*,@$þYSf''V,–'jŠ7IH'dz ! 5:,CYDN‘L 2i-J /E ƒ!o 2dC/2 =w–1#a.ÿÃ¥Ja5Lˆ÷ÒKDC€„x% F'$- =)/6=MR343##7"'"'52765&=3637&%435';5&'23752#'5"/75y!Z f m?Ð 0* 0Bø5*<(þÅÍ>" ." ÷T +4 , =5 W40 ) &IJ'Z#ö0$ýoIB BI $®BH* f#.5<LQ###'6?3373676375#375#3$?#"%375#5375#2#'5"/75ïAþ)U gª & þŠJ"   x$ $È /.ÆSM a/È ä ’0$ýoIB BI $®BH* f Î!&8>DPWajsƒˆ32#"'6;6!3373#"'6;65'#57&#275'#335&#35'34/475#347#3275'#"#3&57375#"'2#'5"/75¸œ227<L8 1- þœ<8I ¼D(HL<<8,7D  þÈ4,4!—T +4 , Î lLd (44HX     &* 0@1 8  h7 $L 6"2 ^P$H 0"$,È0$ýoIB BI $®BH* f¿h)/6=JRV\rvzˆŽ“š §²¸343##7"'"%52765&=3637&%435';5&'2375 $476%3635#"35335';276='3354'&+&35377547534727535&535'3275375#+"'335' Ù“  §0³gþ¬+OENl—V'Eb(BýýO 1g7 K+7 §4þÞ/éþ{£\‘ jK-Z67$ ýÏAk-±°Q ¾6$ Ð[HÄT=*E ý~ H?š R[\.'ü¿#¤¬v "$aTœþ†`yµ #A-ýWÁºd4þÞ/éþ{£\‘ jK-Z67$ ýÏAk-±°Q ¾6$ Ð[HÄT=*E ý~ H?š R[\.'ü¿#¤¬v "$aTœþ†`yµ #A-J"   x$ $È /.ÆSM a/È ä 2þBþÐŽD3IeÙm—XH80ýûÿˆs4?¨o@(F‰€O:H ˆ7jUPŠeß9¶; ×· wר·×88˜PPW0'¿x'PU\`muy•™¢«±¶½ÃÊÕÛ32&5&+"3##'#535473236=6;#"'&#"3276;236?'52=#"'7335'4375&535 $476%3635#"35335';276='3354'&+&35377547534727535&535'3275375#+"'335'¼,¢uh,- 4¢©.RCG N04 n{'!3H:4H 'o-4_V   ý±4ð-Öµ4þÞ/éþ{£\‘ jK-Z67$ ýÏAk-±°Q ¾6$ Ð[HÄT=*E ý~ H?š R[\.'ü¿#¤¬v "$aTœþ†`yµ #A-„X / 1 –ˆþBþÐŽD3IeÙm—XH80ýûÿˆs4?¨o@(F‰€O:H ˆ7jUPŠeß9¶; ×· wר·×88˜PPW0'¿!&8>DPWajs€ˆŒ’¨¬°µ¾ÄÉÐÖÝèî32#"'6;6!3373#"'6;65'#57&#275'#335&#35'34/475#347#3275'#"#3&57375#"' $476%3635#"35335';276='3354'&+&35377547534727535&535'3275375#+"'335'd &æ J,J)+É*#X#p SH$(Býó XRl* / þìd;j pÑX RAP d$$þ5M@L1 ï4þÞ/éþ{£\‘ jK-Z67$ ýÏAk-±°Q ¾6$ Ð[HÄT=*E ý~ H?š R[\.'ü¿#¤¬v "$aTœþ†`yµ #A-=E$ 2F< &a#2 I4P–#K KX9,(ë }"+P9l-þË 2 €› Kþ"TxïwþÑ~ A2 !=-2}rþŠ(#F5 ß¡=; W0*1A}ZP&9<.1#&S(#.} 18MQ 'BJ Y@4QE ^  )8  u 0 E =)þµA ] M$ OI0MA)55^( ,0E(!90-% ä~)/6=¢¦¬²¶º¾ÄÉÏÕÛáçìñöúÿ343##7"'"%52765&=3637&%435';5&'237534334373337'326566=335335733273367367373##'"=#'&5#75733564353753753535353752=3753&35'35'37#35'3'!353&367#ê Ù“  §0³gþ¬+OENl—V'Eb(BýýO 1g7 K+7 ýj((wXh (0"&0g/—(HègH§ =ýâ·HHþ-‡88þQGþš'Rýƒ( ˆ ýÚ6 ý;( ä$~&R%0 ‡ RK,?  ;r($+s =6#u0)0£þ ^=6*<·2Z¨"D0f(D þâ=þÒ…7?K]"s0é))f""·mª[œ=þ¦>>‡>–/Dàál7((DDz{6/67C)R‚"0 706= ! """ äñ#.5<¡¥«±µ¹½ÃÈÎÔÚàæëðõùþ###'6?33736%6375#375#3?#"375#5375#34334373337'326566=335335733273367367373##'"=#'&5#75733564353753753535353752=3753&35'35'37#35'3'!353&367#_$3pþJH’$85³$2%Aý|âi‰M<9þ û:ý‚µ®5((wXh (0"&0g/—(HègH§ =ýâ·HHþ-‡88þQGþš'Rýƒ( ˆ ýÚ6 ý;( ä$ñI,$ê@-:m@© þ† A9ÿþZWP0)0£þ ^=6*<·2Z¨"D0f(D þâ=þÒ…7?K]"s0é))f""·mª[œ=þ¦>>‡>–/Dàál7((DDz{6/67C)R‚"0 706= ! """ ä]*.EM²¶¼ÂÆÊÎÔÙßåëñ÷ü 3##'&'"#5737475'735"5635&#36367537'"5373734334373337'326566=335335733273367367373##'"=#'&5#75733564353753753535353752=3753&35'35'37#35'3'!353&367#®\I 2" x5ƒX ÌŒ,4A x–O-/AdTT ´4$ý®((wXh (0"&0g/—(HègH§ =ýâ·HHþ-‡88þQGþš'Rýƒ( ˆ ýÚ6 ý;( ä$]>J"   x$ $È /.ÆSM a/È ä ^0)0£þ ^=6*<·2Z¨"D0f(D þâ=þÒ…7?K]"s0é))f""·mª[œ=þ¦>>‡>–/Dàál7((DDz{6/67C)R‚"0 706= ! """ ä!&8>DPWajsØÜâèìðôúÿ "',0532#"'6;6!3373#"'6;65'#57&#275'#335&#35'34/475#347#3275'#"#3&57375#"'34334373337'326566=335335733273367367373##'"=#'&5#75733564353753753535353752=3753&35'35'37#35'3'!353&367#> %ß G+G(*¼("V"m PE"'@þ UPi( - þóa9g mÄV P>O a""þBK?K/ ((wXh (0"&0g/—(HègH§ =ýâ·HHþ-‡88þQGþš'Rýƒ( ˆ ýÚ6 ý;( ä$.š)m8KJ(g~ " 7<-E[FP•O 3l/ L 1G ‡#s 4gE14 >0)0£þ ^=6*<·2Z¨"D0f(D þâ=þÒ…7?K]"s0é))f""·mª[œ=þ¦>>‡>–/Dàál7((DDz{6/67C)R‚"0 706= ! """  ÿùþbV=#.5<‡’™¡§¬###'6?3373676375#375#3$?#"%375#5375#776?'473'76'73767'5&?''#'6'6767/&7''67767&'7&'%767'7'?;&Sþ¸6m*'†Ú& 1þiNf9-+þŠ{ , þ#‡‚Þ ½  M+q  q  7$­_¸jB# ;šN¥7 d>h0!u   Sœ H <WRH­¶. •Oþ¯-þÕ=6 ¬/! +P/| þéÅ 0)¼ÑþÊ@;5þØ‚Kd?ˆ". ? #ƒ˜Šþt³³N( %’Þx$w4 #½=;uþLX 5GН7?4þD¼ò 6 ý¯  Ú¾%;!53254+5673Hd.þF.do0Þ'0ß­22­°M,EqÝ7#š3#'Ýèvè:éé7cþØØÝ6#š373#Ý:éé:èvšÖÖþœþ«(5!þ«}}Û7#E 332673#"&Û3tmmr3”{z–EIDCJ…‰Š˜vo]7>32#"&/.546¦E GG  K HL  L W  O7²š 32654&#"4632#"&›:**:;));LfJLggLJfé*::*(;;(KfgJKggqþ^á!3267#"&5467€GO6.(;$mAFXye>s7/8!?DG7L¡7êl(f+"'&#"#>3;267(aN2?B0'+ 6bP.C@0$,fgf)3ji(.Ù7&š >323>32Ù+(Íã+(Í7,&(&Ô,&(&Ô8£5!8ä£xx£5!£xxºø¶) "&5463?,YŽDIøƒVmë++“w**wøs) 2#5674'5î,YŽDI)ƒVmë++“w**wþès 2#5674'5î,YŽDIƒVmë++“w**ºø) "&5463"&5463?,YŽDIê,YŽDIøƒVmë++“w**}ƒVmë++“w**wøÔ) 2#5674'5%2#5674'5î,YŽDIØ,YŽDI)ƒVmë++“w**}ƒVmë++“w**wþèÔ 2#5674'5%2#5674'5î,YŽDIØ,YŽDIƒVmë++“w**}ƒVmë++“w**Gþò°2&'&5463267632#"'&'#67#"&54632æ.9H<9K7. `Qe1<7- hU^fj&lf `Re1;7, iUþaQe1;7, iU^.9H<9K7. °eþ4ýþÌe° -9H<9K8.Fþò¯[%67632#"'&'#"&54767#"&54632&'67#"&54632&'&5463267632#"'&'^Uh -7<1eQ` .7K9þç7654'.'&#"#'7;27654%.547%#"'&';!53254+5!323!6732#.#""'&#"#"&'#™)C9; DvUB88 }³"5G17;9F\;;þýeVIþ8)2¶cd[!faýÐ`gg`j\Y[42 Ø2*D6Ÿ*{H@Mëz[Sf~:/|chýj f3,†nW\tÍ*#þ$ýSQ&À‚,,45Sf|4xUyIe]r@þÏë22ë`ë2<>sq|cþŸBTI "' ´¹"œ'' 7Œ gH-D6'0 “4,5j“—àlT $ÝÙz""!J–j/#+ 1ƒ"O:6S Ö" S &#+W1þÍ5 þœ"1¯" ¶þl 1"\ "?  Xu´k]:ˆ‰a  W; 1 I X;"k:1þÈ=#Ka{ *  1( ( !81"O1‚ ?  …‚B J  E  X     "-   —$  ¢£vJ'0(@,, l^h;?,Š7 66^" 8       E " # _y  ' 66pÀ¨'5ž€ õÀ1§f #D' D Ø6‰;I- ; lg ,   H©l vÅ;  z' '6 ØqR¶ Mÿ穳1327>7654'.'&+#".54>32&'5 è_G@@FsaGA? DtÁqÍppÍqtÎlmgTþÕ±2¢)&zØ95ƒrIL*+zÛ82rT…„ð‚Aë 7ýÆ1š ! !þj!þ–ûÕ«ûÐúf0þ^»š#";!53254+5!#";!53254#ÿffaýÐ`gg`‹affaýÐ`gghëúÿë33ëë22ëúÿë22ëëxþ`xš !273!527 !#&#!#üì{‚;1güg>,—ýi,>™g1;‚þ$ün¶è25 [92è¶W‡Ÿ5!WG‡Œ‹373#µ¤JUØ–Hg#¹¾<B`·:+O&'&#"327>7327>76=.'&#"67>32#"&'&'#".54>32·;.& 1W3. /W; RE6 >oC:%'Cx0 "zCCzDDzCCz" ^44`33`44^óg E2.,0R  CT`90 P=66 îŸ++þÉÐýçþ†^›'#"&#"5>32326#"&#"5>32326›?v9<ë;3qI@v7@ë74qI?v9<ë;3qI@v7@ë74qœH3a8TœI4c8þøœH3a8TœI4c8WŸÙ 5 5!Ÿýqü¸Hü¸G2þ™þ§áSäû(Œ‹WŸÙ 5 5!WHü¸qýGÙþSþ§cgûÐŒ‹'Ú4 ;4; ;*S ; ?} –¼ ÌØè lø  0d  T”  ~è  – f  – ´v„ –– –¦´ – –$Ä-Ò  – –  –  –Typeface © (your company). 2008. All Rights ReservedRegularfemkeklaver:Version 1.00Version 1.00 May 15, 2008, initial releaseThis font was created using FontCreator 5.6 from High-Logic.comoby ejnénormalStandardš±½¿½¹º¬Typeface © (femkeklaver.nl). 2008. All Rights Reservedfemkeklaver:Version 1.00Version 1.00 May 15, 2008, initial releaseThis font was created using FontCreator 5.6 from High-Logic.comNormaaliNormaleStandaardNormalny1KG=K9NormálneNavadnoArruntaÿ'–ì  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a£„…½–膎‹©¤ŠÚƒ“—ˆÃÞžªõôö¢­ÉÇ®bcdËeÈÊÏÌÍÎéfÓÐѯgð‘ÖÔÕhëí‰jikmln oqprsutvwêxzy{}|¸¡~€ìîº×ØáÛÜÝàÙß²³¶·Ä´µÅ‚‡«¾¿¼÷ Œ˜¨š™ï¥’œ§”•  uni00B2uni00B3uni00B9uni02C9lirapesetaEuro afii61352uniF001uniF002ÿÿnumptyphysics-0.2+svn157/data/font.npf0000644000175000017500000000605012264274602016751 0ustar warp10warp10S2: 22,448 24,429 25,426 26,420 27,417 30,419 32,424 33,428 35,432 36,438 38,442 40,445 42,447 41,443 39,439 37,439 36,436 34,435 32,433 24,433 S2: 51,442 50,442 49,439 48,434 47,433 46,431 45,430 46,422 50,421 55,421 54,431 51,431 49,432 51,432 53,431 60,431 62,434 63,437 62,441 50,441 49,442 S2: 80,424 72,424 71,427 70,432 71,441 72,444 74,445 77,446 79,446 81,445 82,443 83,440 S2: 90,424 91,436 92,440 93,445 94,448 96,448 98,447 101,444 100,429 99,429 97,426 92,426 90,425 S2: 118,425 110,425 109,426 112,437 116,437 114,436 110,436 109,437 112,446 118,446 S2: 129,445 127,447 126,442 125,439 124,432 126,425 135,425 133,425 131,424 124,424 123,425 126,438 129,438 131,437 S2: 156,429 154,428 152,425 151,424 147,424 146,425 145,425 144,429 142,433 141,441 143,444 146,448 148,448 150,447 152,447 153,445 154,441 153,437 151,436 156,436 155,442 S2: 166,424 164,424 165,442 166,447 165,442 167,436 174,436 173,429 172,428 173,444 174,446 175,446 S2: 179,425 186,425 188,426 194,426 192,427 186,427 185,444 186,447 185,446 182,446 183,445 194,445 S2: 202,426 214,426 207,426 205,446 203,446 200,443 198,435 S2: 222,422 224,447 227,434 228,434 230,431 236,425 234,425 232,428 231,428 229,431 228,432 230,437 231,440 233,441 236,444 237,447 238,447 S2: 243,426 242,427 245,445 250,445 252,444 254,444 S2: 258,444 257,427 260,426 261,429 262,431 264,433 265,436 267,437 268,433 271,424 273,422 274,429 275,434 276,442 277,447 S2: 284,444 285,425 287,428 289,434 291,435 292,438 296,442 298,443 299,443 301,444 300,431 299,424 301,423 S2: 316,426 314,426 312,428 311,430 310,433 309,435 310,445 312,445 318,447 320,447 324,443 323,430 322,429 321,427 320,426 318,425 316,425 S2: 333,447 332,444 331,438 330,434 332,424 337,424 341,426 342,428 340,434 338,435 328,435 S2: 358,428 357,427 353,427 351,429 350,432 349,436 351,444 353,445 360,445 361,443 363,441 362,430 360,427 355,427 356,441 357,448 358,450 361,449 S2: 370,443 368,444 367,436 366,431 369,421 371,422 379,422 380,424 381,427 379,430 376,431 374,431 372,432 374,434 376,435 379,436 383,442 384,442 386,445 387,445 S2: 405,427 403,426 402,424 393,424 390,425 391,430 393,431 396,433 399,434 401,435 405,439 403,443 396,443 393,442 390,439 388,438 387,436 S2: 410,425 413,424 420,424 423,423 427,423 418,423 417,425 418,430 419,445 S2: 432,427 435,442 442,442 443,437 442,426 441,424 442,435 444,440 445,441 447,442 S2: 451,421 452,427 454,431 455,436 457,438 460,444 461,442 462,439 463,432 464,430 465,424 466,421 S2: 474,424 475,435 477,441 478,446 480,446 481,442 483,430 484,436 485,438 486,443 487,443 489,444 490,443 492,428 493,411 491,421 S2: 499,426 501,426 503,430 504,433 506,436 507,437 509,440 511,441 513,444 514,445 513,445 508,440 507,437 505,436 508,431 511,425 509,428 506,431 503,435 502,437 500,439 497,443 495,444 S2: 515,423 516,425 518,426 519,428 522,430 524,432 526,431 527,428 528,426 530,423 529,426 528,427 526,431 525,432 523,435 522,438 520,439 519,443 518,444 517,446 S2: 536,424 550,424 548,425 546,428 545,431 543,434 542,436 540,437 539,440 536,443 534,446 533,446 536,446 539,445 541,444 543,444 545,443 550,443 numptyphysics-0.2+svn157/data/numptyphysics.desktop0000644000175000017500000000123712264274577021645 0ustar warp10warp10[Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Application Name=Numpty Physics Categories=Game;LogicGame; Exec=/usr/bin/numptyphysics StartupWMClass=NPhysics Icon=numptyphysics X-Icon-path=/usr/share/pixmaps X-Window-Icon=numptyphysics X-Window-Icon-Dimmed=numptyphysics X-HildonDesk-ShowInToolbar=true X-Osso-Type=application/x-executable X-Osso-Service=org.maemo.garage.numptyphysics MimeType=application/x-numptyphysics-level;application/x-numptyphysics-collection;application/x-numptyphysics-demo [X-Osso-URI-Actions] http=X-Osso-URI-Action-Open; nptp=X-Osso-URI-Action-Open; [X-Osso-URI-Action-Open] Method=mime_open Name=uri_link_play TranslationDomain=osso-uri numptyphysics-0.2+svn157/data/C50_Gesualdi.npz0000644000175000017500000004205112264274577020207 0ustar warp10warp10PK n9p)´z9ôgesualdi/Bell.nphUT bÓIEIUxèèM•KÎ7 „÷|‡>@/$>ô˜}ûí8A‚ð?¾¿¿¢f‘Þ$Qd±Hª?ÿýü÷ÛãÒ÷þ݇_Ï¿~ü<«ç··çûwÿøòÏ÷Ÿ?~ý÷õqL>ýi+ïÈvÍ]ÈÞ÷7öö¸}÷k´¼}60À ÎÛhÎ9û}ƒb·ÙïþÂyG8Á®ÿ­ãu>îè‰_°YÅæÞe—{qÞŠÏAλƒÊN~³ÖŠ› ~›{ËŠ¿Î}­ò*ãx\ÑÚÝ}°zc•&ŸØVNø6;w´í£…Ç•Þn7|;Z±Ÿ}\Ä— ¶¸$÷\G»m³ä|ÎÛ–8²Æÿp?˜½ÎG®²#ÀqéåoL´%÷1Ѻ£Ý"ž9ç|qîØã×;i:Ç>ð¿á=¨å†×ÀNZM!÷öûU;iÜTíÆ5«F¬ý©Z‘—ö}9ÙAùß×lè‘·öáSkô­ó®µtš t2°—^c+ÿUÔÞÔ«èd»‰n“û“{ƒ:Lî ôWo«Nð/ý‡êtÊÕNüê>ãàXeŸåGufªÞøÏÔ¾úÀ+®úA<2[ñÊXÅ7#+õòJW^ê¯Y}‘®üñïÜW/ûé“4ìªOñ¯ž·£_Z;Hœº¥fR3¤™Ôì¨>®:à_u0ü2{nÄ׌›ö­ú)Û©_lÕ3ÁUu­µøè\ý­úiæšf[û^}“í̸ü׬6Ͳâ3Ûš½šeÛ/|ͺi_/ѳ=®NU4m=[±í1ÎZSgquW´bßíLC×ôúO½ÏÊ¢Õ»~¦¢«;~¤ Uíz©˜²Žj¡xê~ÅÁOçLm8÷ƒuˆç!>°gêzM`OÕꜸtEáÐ=øÑ5ÄÑ´†ŠÚ·6랉þL< Ù'ÓkÅÔ›TãU2òçÜQÙô0ô ¯*˜x6­Ï n¡?Ò“.¶ út·ì¥‡îKŸB¦Úôê¥ü÷êÅwñÔkéÜëç•ßBééÜ×D¼Ô%vò=è§~zxͺ^+é=òÔwøk­ºR¿Ü/<ÝÛS]Í‹þPK n9½’bž ®gesualdi/Packman.nphUT bÓIEIUxèèUYK®,· ðz=¨ÿ›9[H6ÄŽ$ˆûyÿ9VUß \¢(ŠbQ¤úoÿþþß_¾½ü÷ã?ýùý_¿ý~Ñßùãû?üåïÿøÏ¯¿ÿöçÿ~þv‰ýõŸ?ïo¯Öâ]O°û;F`}õÚÁï~ëæ—Äü½€8¿ª-V»Ï« ‡ù«$R®ZÍ©÷ôÒß«¶‰˜>`å8Ä[ìpZNKÄ´¾_½—DÒˆUûxõQ«ùCã—ºÎUz7Æu_†ÅžÀ–Ã;ùçS,ê‘–˜ã±u½cѦš±u¤ÍHñÇ$ÁŽsˆcšRÒ1¥jçq¶=t+Øéèš^ÇÊñmzoïT_ºÆ×2"[äê!ñXMêc-|Äá‘â½?µ´:_-"q+Ðfì@;ÐØ%×ÇN<”»Ô²p<8uzCAÒÉÀöé*D+İõ¾ Ñ1}a«Ó×bú"ŸÇ8ÅR%ek^DHOtð41šé ôÉ4ÿsYœ€¦cÐèÁ{LJ¬ó$.m¥Öýˆ5¨ÃíÂꥸÓ5Ÿ¥è§!‹[í¤Ébø™‡Oþ°ðåˆîÅèÏajÃéÂc²âš~ÅQ‰î%4|¦a/eˆ½»´l Å£Z^¼¦Î♊äÒà£9¸ò~öoÆ(¾ Y=ß{F¦˜¹†Dö2ì7÷…4 ïéØÌ÷d樀ç#,”ìHrÑ,²|>±L§éx{"lEtƒ’8¼P¶c6"/±ÙÉ“Ndž-Ÿ•!Ž}´3}6rºË e‹#æ|o®±ß& Z.ªxŒÐÍï=Ìœ–œ–¬–Á“5dŸ€ªïåð)”¥1ãv 3L…¤§TðÈ©ÑØ~-–'2»ßóÇ5ï^ «´b­¸J‚w‘Ò­æx½¥2¤GŽŽHº{-a5_ô%W?×\9kµ¤‹w²Ê-µ•#o'I‘¦”pê’ÿôkì|?œ%„ÅQ½¿H¯Dµe ïYø¦ÃkEä¬H-ôµ ‘Õè­/òûÖÒt]KšÉŽ£Ý'iþçø°'šËryc'òŽêIk[9kõOËOJŸR½¥Ïüð8“<¥”¤“¾ƒÙH~Oú¿c„TÆDkú–1óðo‹ðqé®lú2Ž¿ RMÉaG bAJ Ë*E5µ¤.y$ (f#ð´&ý¬6 §iXÈ¥dxhxhxö؆õÆ„ŒðöBù]Ä[çœßV7L3)Ÿ‚¼?ÉÃ%-Ø2’r[ÑÞ:“3¡=ú{•|¯’'û;®A¥‘¤$r>VÃŶpic£‚-‰f]ȤdRd˜y$/w*æ¶C5Óv EyP*}>­CÄR#B“CÜö1“`%¸nïR¢âÚæX--i±v"sPOK¯•È·HE±T¤TTk’ŽGguÏ«¶×8Èÿ´±§–Þ<›ÈÙâU6o9»OÛfî`æ…ž¹Ó9Sn&ÝS®ßZ˜ËŠý´sÿr&¤vÚ&d,Ÿ³Xãr–Hñ,#‹¥OéElØâ[j<É']sÞç‰F÷šÆæÖƒôð™WòçGNµrty?,aû®‰ÌiÅ6Ìc¹y>wpÒâco±£“û=> ã±<µŸd°âø^·Öí‚w-å:j3fÁ»ZbÄ˵5úg37Ó§¾ûä¶¶¬¥Ùo­ÛfãLþJdI÷ož×Ú]©r}E,ÃP9ô ÑcÀŒòB$Ø €J§¡¤e¿+Z¤ZޱÍÃYÑ=âØuå‹Çã³j2CœÓÒâ#+Hn¥Ü™?ës•Ð2E§Piæ>i˱¬§1½¥º¶mVKu(Ì4 肵Œ*`óãY®¨@¦‰×c± ëczz?ÆAy,\ØQ6±ú7rœ>ž‰\n«•0RR{ÆQ%Ç®¸—/&—ïRœÝõûÈ:~†Ìsj|¦ÜÔø]#Ïîr²¿AeÊ"Å.0Ô]LvkË4w9µ«öe:f±‹Ú.üqËSMN6UROcp<Ž\ÆÅЗ>[â³úú`{Ä×Àn¨êbŽÙKpxô¯ÉöƒÀ”ðš­˜0°V3€š¶s~ ö©¢ VO¯O/£àBqTëL\nÎ*¿“ñˆE¶tÙê…ðS ¯«Ê— ¢Jèp'HTéŒØÙVów·‹GÑ~+g mè±[ë«Åo^WHù™öͤ×eµ~Φ?µÓOß:-Þ{ÂâSÞÇ(úo)¾QÏñS9 ú’Øeù=¿löŧ.ºæ8KTÞ¬Bz|¨åy°ß4]„lC-üš=üºx"gú„Nž¯öšöiõ¬{—;­^z¦nÏ3õüæ5ekѨ鮦—{fתL~ýÃéžzc»›OHó§8Çò…Å#k£Ç§ŠGT4,Ñ´‰f=TvâÒàÔ .^rcªá+ìä-z>r½8ôP8NOlÉÏAÚÅçɽ§ô‹Æm©yBÈë[‰ÛûÒþºí$jÓ4K0Ú×y‡|ÿ£|SçA•·«ÒþÖ¯•ïÙè€pS&vËéÙœ8“ÏþI¶û ^¨ŠŽÅoKÌBƒü•r+籬Êgzé_a»„,ýý.ŒíùᾕÅ6ûYÑLúqzCg‘ÍTËÖCiðh=¦9]TÂP:”¼D´¯•ûl¹ïË´·è-סø—¿ÚHÿuË}ñ+ÜýPK n9ô†¯eawgesualdi/Inverse.nphUT bÓIEIUxèèM”KnA †÷‘r‡>@/ÊzÍ®@"R2¹?Ÿ]Õ³ùT.ÛmÿvÍ×_÷?O·ƒßãçûÏ×·<ÜŸÞ}ÿýòöúñ÷Ç-¾<ëí¨§×rô™ÄöòŽm¶Ó¦­ÔÓz'ì§ ¨Æ=v™P!~»Øf?½v(püwö}ßN—J^X4¿¬s¦_ƒû’õ,r/ †_ä­yŽïÖA}“¸¡YÜÛ™FÇ~;¼”S¬]ýWj­øÖ±b*= ¾ÑÊ&¹Gƒ¾YWÎÖR‹Ú˦¤&µÛÊÓ}3´!Oï›ñjîsq\µ‡6ž÷¡UøgÏ}÷žgÍ8_þIK 먛áOc.†FÒs–‹—æq–¥¹”5k6Iü»Ö;ìºêiõ6(YwÓ²)k–—Œ]ÀßÊfèDÓMKšyêÓ¬¦îÍB_â-v.âÆÚÁzq.{‹ÓGΉ¸œuµµ ­Å.aïeí`—ÕwÝÈÓ£?ꕸÐ_ÃNœ‘gÄâ ¿ÐÛÈz{ÜÓŸ“oçÔº'ú8}ÅÎ:yc‡¸ØédøÍ£—ð›lãý¹Üµy ²)í.vh°ÂÛ)Œ]]a‡'ÄΘÔûbeÉU n¯ä«}ŸùãTäž”²îRJÚ™Š¢2â…w¢³å75n ;0 /»pY…²Ê|…·¼û~\¯“Æ‹%™Æ6Ô8_·Ns4tX±àeLVó…ÁmjöB˜o’w ì²çÂ{Uö[xŸªA%g ^ÑäT¶†ÿ؉zxÕ‚:=½áöÖø_ivxü4{|øPK n9üAXË gesualdi/GetOutComeIn.nphUT bÓIEIUxèèMV]®^5 |¯Ô=Ü|±;É}+[€ (¨ÔÞq¾Òó2Jâø/öøüò×Û?__ø½÷áÛÛŸŸ¿ôêíã×·÷ï~úõ·¿?}ùüíßß_[äç?üõ%3ÇË:Bì}úнS8öR#±pp=b=pŽ};@Bî`ßââzÌAtàpÿ°ž÷¼ÓzÃe‡˜çH.ÏÆù?8·rÔ›ZÓnnøwpo»üçyì-=@F<__æ‹â*+mOÈ ¶é›Ž»>tÒwƒNù^À]Kç±Sò±§îÇvé‹m½_«å rÓ.·‚ü¬‹«c˜°ð#vv'bN¿Èõéóy®÷Å Àû:£_dE\{Ë»bFàMm¾$÷i5 ?/â¼ðþ6/Rn;Š¥—tà–åãb{³Ü¯7_‘YÆï3áÅLùsÉ÷FÄžŒï•ÈUÂjR®d=“9Ã~A~!‡5åMV]\Š"k_<ªË\£s¾¬ßbÁΆ+.Î~›U}oQì®}‘zp¾ùVxãm]YÊ =ý{^¬ö›ÙMØcÖ“õÆxw×ã=Þy`¶ù¦è²à³¿ú™ýÈ–â^Ì®a´ÜäýÕùÂïi7ÏõÌóóèõ°ŽbD¯Ù=ŒÂ¸Ÿá…]ïYá´n×kC­°Â‰¬`v©™äÙÅ1n·£#¸ö³uî'uÏOˆ-œì€Žp±É¼Hy²Š Ùí¾Ù½ûâê}øÙØ÷è£K/ãó3ŸñÞèÉ=Ž,T¬?9ʨ\æ²Â.2·ð.[‡×Á¬”ÖÎ XA-UŒ‡³s^.¬zQ»å´C.Dtx“rxK½ŽûâH§~tˆíÃ[?í÷égLq GŠC¥Gë}åŽüoÄzúñåEØ›ý*Z?³1£µMî XÇQ1…ÊqTh¡rœü‘óâ=¯ÑòÅ}¼Y]¯jutè@EÃ5³Vð†µQ°g<‡7`èB';j¯ò\Ä=N‚Ä=Nú%ô>Ÿ£ïMfk÷>³D9q¶*<óa¬xe·2ŒçÙˆ73Vx Ñ..ð„Ué­½÷‘ÛÆ ìÊo„þ:ªÜFÜ_=‡Œ|q¸žªT[%>i\À%žk„ò²lä#ú/„~ò•Öëžïçdbß…kÒ°¿¸fޏ6N"Lã´DŸqøÁYÎ>Ìl6ň{½ÆBœƒ¨A>h Y"øUú ÓS&€t¡ÂN6׺~Û z žð‘”íÈZcô>i$î` {2PïæüñøkšFHÓB ìž9°Ç‘–Yè/CK÷òÔÀÕœP|K^â›i¼ðÜ1g¹³šhÌ.-6ÒèÉ)\’ÓšìGnD²ÍлáßÃùöô<’cMp³Vx_µ}V© l”cÍ$jìfI9ÄÃΛû˜µDž`-yõzpŸÏeJÉ@‚w®¯ý½=ð’— ÙLCDînMÐB4¡»ÆIã’\N6óÑØQp=Ž~Y—š8ÙÔc§šÝ‰ uþrdŸâÐgKsØZäjFheBФð’MY©r¤ !¬3‘ó‰Ôó=æÙ4É_ [ŽôÈtþf‘à8ê1z—èœ#ÙùëÁgÌÒðÓ}>§FöhÜGÈVmœ×ÞøßnðGèmÀСaÄ’Æñ¸¤Ex)$!.ÙðBʧhѬc7Ž^Ðp#õÑj#Ö¤cÊÍÑ÷„(.Ò5õ qŸCb.—üòY¨¸h*º¬–Ï«GÄ4û‡Í¢4,úÏÂzÍŸfDoì}ÆÅŸgÊÛn=äÅúÁ3rŒâ²¶KJ£¬,õ@ÿPK n9͇„µ†gesualdi/Hanged.nphUT bÓIEIUxèèmXIŽ]É Ü7Ðwøø‹äSíì½òƾ€`©å† hI÷wD%•ÖâG½—LfpH’OÿúýÛ§/¿¿ûüñÃûÇë¿_ùË÷oÿùòÇËã>}ýòùo¾~÷éýï¿þò×wÿþïÇ?¾|ÿüþåô?;/x®G>Ïc>Ãë™ùØÏÀïÁïäß˰;þLñL_{æ|³4ä:Éuõæhuòï9¹:©!“gd:tf,èÏ0þ=‚Çâ«Ã ÷6·ÒæW¡â ÷xØØ…†×ÛæZ÷Ç\«p§ÞÏS<ç]ÂÅ}k?V q^Áu8"Áfb}’ÿ~ì°Fœ7á#êO<'öçxìi²jcß~DýBÞñýœ›ü ¼5ÇÏ…ÃÏóÂ|PyšÑÞùò˜±Š%O!ËòðL»™K,f‹™ðâ„ud!D¼,$gÎu*§žr)gOˆœ ÂÃ…1ìy±}y´¤Öyra.Hñ”=€`± 9vÛ‘%Dú ûöTäç&Kìß§ð”oç™§¬ºm嵯Šû¼ÙH¯ŒWÁFÛmËùÆè3øJ`KßÁ‡…ðµ  a;OA¦OwøfAóýxLDÉ&Ö(£ƒV×ziݘå…õD"ÒwÈí¼S^ÊË÷d{Âjz1ÞÇâdJÂ[†+‡ìC¬°¾ çX‡ó ^Eö)†ð(rÈ0óÄ?ŠiÒ†}Š)äi¿Až1E ë Æûzö!ÓëôÛ}û}ÛËé¯RÖØZ|·Öѧ¸2+é]ájV£Ù’5î?3Ð!ß™Yր̈́×Pr®òÆ›€Ü¢—fyC8Ë‹“©œ„þíåeäšá>æ¾…ô2£Cï³þœUȨLF©¢œ—ëŒÞj<•ƒÙ`mf£¿–•EÖYexú3½³Ï;+éMÔÌé­ô—û÷®ì‚ï>u#…ÜëoÖÁ¯6P¤G>Á Ðq$GŒä…݈âhöôÀÓˆ÷po¸7ö>ç>gß‘\z6>r¶q’Fç±iP|¬ydóÀþqšÇjœÙ|Vñ ~„»ž[.Z.{}·»Ÿï,y!Ú .i!J ZØ@âÅBrFAiÉNÞóèç²gÈŽ ¤ÇÞèõF´I\ò@,ä_ì•ƒÍ ×Å´xßöÃ¥¿Gísî»ò·xâêœðâYç£h®â»ñÏeO¶]I;o¿¢JîÇ~êψŸç‘G´}ä!ÜÍs–}¸öe_¼±Óegá(»™g{vÜ¢ìVüOŽŒïl¿Ì×ç^"ïò5þ«äˆÐï¹+oQ|•§Bœ7Sü¥vI?ìôò“£¸®U¡l>I¹]û„½N}hMëêkÈ~Ã{1Ënñ¯Sv ›ïþ^ïG”žáVüõ§oáÑùŽrD¿9ÊSáPþûá=p`4fãi9ê=µ±¡oÙ]z_Ïñº§´‡÷tZÕ ¢öó–çµå¢Ñ3ª¢ á=·½¢?åØè½‘òW ¿òÅòìFœ~L¿ûŽ«áBïÁxHo )—Àh„Þƒ¡ÖYýÎz#õ yBFï`¨c5‚ßÀ]Ȩ_z#ι™UBÊGœÂ¤³yMÚ»Kp•}Ì^¡—?b5NùOö]þ–ÝBÞÊ]þ2ôO(nòÛŽò£p+ë³VÈl½È +Û?d9f¯âË‘Šñf³d¶²yî7 ŽÂÅ,dv}ûŠæÆùÏm—:N«|öSÇ i(-„©¦¡ôÀŒ0™ä‘nah}uóYLbÛµn4s¨‰.&½´1Ë,55¯t2žóŠ¡÷âÁéùVÕ{ñ˜Â'*mɇnÒŽNÓhw‹§7†ì[Ý$õŒ¢]<ÿŒßi\Ío6¿lŒò'ùÚ©gßµî5OÃ?pÿÇß^tÕM--ê€so·Të–jj©G“Kˆi Mz,m¦:4éé[­•¥§pjžuNX^¥ÜzáÜËVÃu–ZN†,µ…®¹—¥Vúí6òü­ù—­D|ÈŸ-”üÉSüoñ×èòúsw¿ŸâÍ@çÊž8¡ê9fÉG8œP¥7jD(ì}äáÕ Œ#‘µ~òý?þ§ùßâï5Q³ÅÈßÞ¼)7nÛ;Ú^+ýÂ踼O”==U¼†&t¶ˆÂÙX~T¼4Fû_a껣ü5êùí´}´rb—òެ·ÆlïÔœ//D Pü*’µi?vÓÇmsFíÎû8ÝKkvlg¼=3kX³.øå& —f~=ÛóóÔÙëçÙW_·â ‘e7.}ˆÃÊ:…ÿ-A.«¹ìj©¶ý-§ußH…¾¤ugrj€²S†õº[OÑ«Q»NÁ…°ììÒzª}bßm.7*FBì¿?b¤§ìÕì]]nk½5 âÔÛyrGõ£?FÝ$QC‡FÖ¿±jA&{×/ )V•uJÏ1j7Ju3ê£G7uvÕÐBT­ÿg²G{¨»öøÑÁ¶Ìä3oÛµ†áS5l££†dñeÛçpËapô0H;Y¹nGü¢}ýPK n9˜·Ü g"gesualdi/GarbageCleaner.nphUT bÓIEIUxèèmšK®¤G…ç–¼‡^ÀäûÑ3Øl1„%w{ÿÄwNÔˈšåãŒÌŒwÖŸÿùýß?}ýòþûñ‡?üöý¿üúûÞï?}ûþãüË_ÿõó¯¿üöŸ¿}ýý'ú{ûúe~ŒY¾ì+Œ¾Ÿ¿Eß]ýÖ/«Ì¾Kà¼û£ŸÀÖc<úë l1ïFí‰ûc°îÀxÞÚ#Ç×Ǩ3è–¦uÀy¯æÍ{b¼ˆcŒ×ؙݩ6ëÎüÝøî4ñÏx?GtÙñøúe”òQûÊÖêAc/=xÁcÚcŽÄ ½šÆû<š_7ýAeïmÔÅ™ŒÀ¥³©kÆ<¾‹½×9uvu6íÕߣ½cÞÁû Œ½{8A¯³·jÜ1¿Çü}» ‰Ì:»&²Û ×nbÐíq†­y¼žÄ¤S›±0?ξY¾Y?¸‹ÒÍ_©ÂqcÞèKûw$2oÖDö½¾ ís2ÿƼtâî„ð½‚Þ >VÌ[1ÀX'dr¬•È/Ç;îx!ÁómôwsÿFb‚»85ã”$mÉ{ëv§½à®˜ ¸[ѸíjîçõnB:ƹFv;—w/ŒSŸœÆNn?¤@§ú§[íI6Ï=ÐtÐèNN]ȼÐ,n#NMR§%©^ÖªHmJåîÒHc·4‡fJºC£A÷4k:tCª;óCzú¶´÷ë†TõCœß±V y«[ˆv¥™´G­Gƒù~Ô#z£­z½1¦-Ä@s¿q«³hµ1z"\Äij쬷Øá"N»Oq3B—áftÛ­.ß-q·W%n ®ÂN©]Æáft¸ŠùØŠ¶D'æˆnŒicpÛ›øŽø.t >c,p&2þqÝб1["tƒ¯¹ƒžt®&võ£“#uÔxDVÖ ¯æ—¶ì`HA?žÇ¹ð=·6ËL¬²óH©Î?À9ß<ïË<ë:çŒ[~ßuîØ¯3sÝ¥s‡OÙeÖ¿Ãü`·á¿ï§^}gŒshSëÄ]ĺq½Š/+þ Ï<·™çãc'潌‘÷µ$eº¯:|µYNÐzÉOì³s>Üó5Žby=qXÎçW´^œR:Ã{bùãeaã´&žá¦åe×xŒ°ErãtB9Ò\¹X¥õ»0†.îŸÖa·›çÑ߯tvv,cœ¾`3Ð!{yÎ韩uÂã5ÐÖìÍö/bÙÃŽ¦¬F7†¿ïÓº?×£ë²WŠž…çjÿÄ Ï'; î·yÛº$¬â]ãBïÑýÛmE߬ÞLo¶gõ.©WLO%ùµF~ûW!Ïçº}vÎn§8†VưŽ<±+¦v{ÊC¾¾"òD*‰¦¹À‚g¢®yïßÄ£ÚéÌj¦<À~bjSDDªUY3‡²ð›ýÇo#Ô‹ó½™P‹ÊZƒÞ@VOd^•ÑüÝõæ‚­§Æ‰MÍY£ÖÛ®±‘ej×µDj¢Ý>Sý´›cÓ¡ê€+¸H¡q™>|>Q‰<¾t{·}§èuÅíŒ÷fƃBùÞ7›ß•cB¥ÚÓ—ãõÏœ×Þæá¡?óedÐ'зO OËеn½&íší’ãÅ<íŒIwÒ9‹ªÝ|ßĶÛ7¡þ•ó_í¼<\ñ¶…>Ý–èÚ¥ÞÀÒ›óžhwGïºǃÅ-Öå6á–4áÉŒÛõvÆ…3û])U»¿Ì}FíçºQÜà­ ž‡ëÆ•ã®Wã'ÈÔc‹{VµGõWTŇ#%cÉþíU¨æ×;ǰÞþH5ôbmÒáÌšòê‰C'€_PmyUëÕô  7Æás‡v.„ísßS›¯;Û[‘—èk}[!Ü×O?}œô’Xë÷Ì ¨Dã—zæj_ÙjåCôãí°)ô«g½Æéügdö…-“6^ge|/œÎ‡ +$‡x, ~§eWèJ¶ŸÊj¹BâçGÆî~rsæ·ü®Qqü¼÷Œ&ˆI@^&e•Oâvô¡~óXë¬|æ¸â¡Z½Þ|‹3’›†j-±º¶OÆ>ãÅ/ØŽ;¿U$EC/Ë]Ty¯âuÒxßn“wÑœùžDÌÎkâÌ5¨-À1üñ;ŽÞ¡ˆÎÕÆV‡Z×+·^x˜G5$¹~5¶·öÑÛåxËûü¢Æ9éë³²½%·ä…zÓ:Ío"ù~êh Ù"k«^꽦ßSSZÆ+­ÎkëÅþ­&&ŸÄëžj7;«y‡È‡qêT‘ÏۉǾ ßRÒç”þ!ëu »ŠW'[!ZÚéwwz÷Þþ5¾nâÿûžóûþ­|ÕAùÉ÷yzÝÍE°Ý]ÜÒcØItx¯²ÖÎrÖöãœÑóUÖ«ÿ8  Zè'XÏBÚ5çÕü®'‡PúŽ¢±°; ¼¶Wò3’O'üz(¿ÍOØ£õ„}·þ¸ ö.¹ßH”þ PK n9ò)zø=gesualdi/AlmostEasy.nphUT bÓIEIUxèèu[Ë®$¹qÝ Ð?ÔÔ‚Á7{'†vÞØ?0°Æ²à‘PÏ,ô÷ŽóȬ¼#»`’ŒÆã0ÈËú¿üòÓß^øé¯?ÿåõ¯?|ÿÇ ÿ~ÿ»?üúËÿü÷o¯ûñ§ï?ÿíõÇ¿ÿúÃOúËï÷/?üçÿüùï?ÿú·?}óÐÿ¯úí5Þ}”×:¤ù­{ͨïÚ[Òöî}¿V¦ã]wOÚ“¶¤í]ÇJZMË»¶ñZ1Lgò‰¤ýÝ4ùE΋H:_«œ¤É·¬w¯Ù_RNMþ%•©9¿ä¸¯yr\ò›g'Is|ÛIs|;¯¹‹èÊq½$Íþ”;WˆÎœ×kÒeŠõäúF3­7Šh?â×·i—üÞLs|Ëy=Dô]I›iá:fM>5åÕÍõͺ¸Þ™vìþJ»Ìïv@‹hœwÛ¹ŽØï¶r|Ú±-øc½Û8ú>†Æ¥ó8¯oñÁz’oƒÞ韕ß뮜_×”Û¢kŸéô?O¯Ïäv†¬Tš¬TЦi…’Rf3MíKJ™¡UŒCïªãw7•×饀wÒeÉKà»À?­±ºä.ð볨O;ÝmŒ+Ös{Ü5>W}RŸ1L§çWÓ´ÆÙžŠïimJ}5Ózt­oÙK«Èk[‹ìoÂ>aû°¿i<ìƒõΜW íC=Æ–þc™RÏôÂ÷ñM±®ˆ5Ä b1Ô‡¤vHEL.ÓÉ\b?)´¸¹!¢1{¤OêQ¤·¢È¯)etE,¾sÇ_³¡yò,éöèeº•Ÿ×ìyÒæïURð½Nó™Ÿ[ÊQ¶Ð®ò3uDö¶ªx íâ € ú¡ç‹Û¶Î˲ˆ 9kK°¢“´J*Ç÷‹Ë yaYyÛçÛ–8Õ´i6Úw#çæ²ÙÀ¯ÌÃU”«TfÛÅxV潂¥Y‰^ÈD¾@iWÞ@v©î¿}v€“¼%ÀÐveŠfì£ö¦Š.Ì{rÉX—c.žÅá¸).ˆmpùÄòÎLîìKF1…ìF+·µô4WÒ€Oi¶†æ/!I~Ä Ñù‹Y«kÔþ޶Ð?é K½Ã<ÑÆ"·²”X;1«»í¬]UãV»³´kt‡‡ÙJ.}h}™që[Ò»‘œó•µšgmºŸó†ÛÕün·ä’û0ö¶±ßtú”íƒýÞHnmyÜsümÇfëƒäêú@té;æÕ[GàkÌvÆA6ª2pE\6Ç-¥†ÇqñäÖ, Hz¤0³º¥ #±d`mîïãtAýŽ=+T7‰æ¨pî ²f»x\ñ¼¶`”³õi77ìE±„¢àT ïaEhÒ{eÙËÝ!GkŠj9Û»Dbhžý€±‰’¢àR„QÀdλ}ŠHWxµ6â: ŽHûSŽ.ÌOòÎQ¢]¼1ë ¬ü“ [6vÚlU#¤Ž£ãÈ8öªЛâé“ý]q‚Y¤UщÙÍ5Ow~viA™ß½¨¢jKVseÅùŽrÌCŽPÎ!œMÝÛ@…vqS¥‰µ5HÇMª«¾{ ìí:‡p.Ç~±Ê6=D¶›Îí™Ç÷lᚸlÉèGíÑÔ?B³Iuz÷kü¾¹i7æJæ1ÙeÙn««¹¾å÷fÄMá⑜1À„ðYu;1£C@.äÛ>‹~2ê8îàÛ⺶8R9ÇqŸ‘"wŒÙ<Låû‹b¦Üq:Á½iêQ–“dšN_œ…ìç9½š6åÒtæÍ¡Œd[çä¤7*àN@ˆT*RJI¨G•+é€ôN|¤Vl‡û‹ç*‘”z8«ÑìÝ¡ï¤]7‰¤‰Mu«R­K•lÒ›f«†­’I¬QS·êõOSÜSMKýœ«| ô@åº0[çÎZ]\WÓ ÙîDZ†¨ÓÅ–ØEÒ1nëüZ?µéÀŠtÞ¨8 ¬Lû ï`F˜VYŠý›ûŽÆÏÇ÷/7zƒT}bâìc;¯ÊVÝ^óÞÒýà“hR§"5é{!ûCK°}:s«ò 9h)¶÷¸Ç#'ïy{=¹#[éÊó¢[>Ä-Цžc®Â&Øû’*-n»nÇÄn¦C^ØKÞÛŽËSžÑ¬F>ëI›òžûŒn•ÿÀvW 5žûo°šéÅe -ŽQä˜wŽ;'ý˜…ì­³ˆ`alŽ#»ÜíæqUˆŸzº8ŽBÑ;la{ Ûc87Æ‘O€"Û(‚Aœíâø:ŽGU L|¬SxYgg Uq*F¬/ÕV¤dz7¸TßGºñżĩ¦éÞ˜ùÚÙïWvÐVA ` Æá;ç'wTÔ?>§Â\Ù0’aV4t¦®Cw`Õg+ŽƒåFó÷êñõoÃY?TáRÄOËtk-{}ÆÏ}JŽÆ©çX7ÄôP•_»v)QŒûÜÞe/êdøŽ÷Ø©C× ŒÜ`UPX¿ëF¤²În¦hOíÍ1ПsZ>‘Ñà6ìË¡û8®û Ï{M+Æ>5Ÿ'6úŒåü[F$DÚSÕVÒÇ©G84L›Ð³Ö6ާH§ñn˜û…_õ ~É7Dž™*ã‡ø4m}ÖBAâØ4Í%D"½ø„)æß‘ѽbF¥jz®ß—nlE½F´ïh\`…QéVÖã~U9î ·/èo®Îq Q®úúxÜíê³h¦S'XÜNÀ·ÕguH¾@  ÝÝOÊJðyStlªU)›ÿ¨BOÌúàÎÍw[8QáœÑ|ÇÑ|râÉßgΡz‘§ÞqLS¯ý¾QB ÿµƒü|GVÏ3w†sgênZÖL+cC߫DžæMãâ㿈éþyŠhïÞ}xNF»º?Ttí'IŸqÙŽâ««"®®§1›í«¿©"~ä)â Vïþë ⨻ã­N“Nˆ³®óQ8ÈÛžéyäsGÊÆ´¢ÙÀâîÊ­cuQMŶ‘ mÞs0güQ±¿sÏÆÿõyZÊÄŽv²å„‘×ZŠ&4­wz½ë«¦ÔÜ0Pìþ¢´>ê>2:U…=²ó”[ ͽ–Ô¤…Pƒ:=”qÌÿ—Öúð†‚'ƽä*)URªØwY¬ßóÀl8»ƒÉRœDð’™´ÉOØ-H·¿ù‹ß›’ [ïŸø9X‡ƒx8¨Ù6è³mo\üÈ'¬Á‡ôo¯Q¯KƒÂ=/¼Ø¦`N%‘¯š#0ˆ^ `)5 ÃNÀñÉ9ºÛ†_R´seÍãÛV¤7[¨¹Ûielty&Ëb¤bbB$Ç€$ Ä Ô-„¸ÉR‚êZùÎéM¾OŽv>EBW–cHpÈÅ:¨·) °3@Uì,åhI0&–•1ìxX} «^q¶£~Y)¹Ú%Í)ƒ•‹¸{AŒ p£Ý„…ÍpD·¹%ŠÛÛÓº•yä†.e(u{ ËR·Ç]üí~.Ây«_$—íépñ®‰võª€îÔïjàêü„‡ün_«[ÿö„“w£ríêq\·Ù!ÃÆ@¶„·ºØÊŽ8ÊÒdZQë…)ÊÒPMXQ –©¬ kUMÈ~È´+§}7m¤Yd¼a¥)/”ݤÝz¶‡¾ÞªïïFÒù›ù[FŒ‡<Œƒü°þ¤]Ƈžpõ>ïMzBöÛíØnÓvë²ô#mŸï÷¸iýæCŸ*=!ü/=–å:HiÇc½«×Ñ?ë»øÒÓß«åÔ‡þí±ÎõUÇÃîqÝú÷ËØî·H½~ÊÝöƒw‡/ã†ú§íw·¯þ0-–oÿßýŽW®ëɧ)n9￈שy|B•Ép”øÇ¡RìZTi˜ŠªSqJ¨åÑV ¥'™¶€|8ƒ!ù‹ã“C›®˜;np”ŸÍ w8~P.fõxÒ¥3•X*!«KÊ»–{,×GšðñVœ/ÅàVB Y *Åù…ï·QªëµsyÆ@²½ÄÖ‡X»§Èœ>déA“Á€Æ»ââÜmS¹º­6aõiª†Mî/6Qww»z\ýŒCFjÿFûȹå·ß˜*lšbS›¨ùûôøýˆý[åbÊu‡Cº›ü ù[lãópUûméò«JÃ57vxÇçd¼q<<Ž ¶pŠÏzinë¯v%Lm¡èˆ.UrKP·‚µ´LåÝTºMÝ Lý bÉ|ûaL2Â¥1Èlý†xví=]§UÜ*àÒTKÕ_¬ã Æ'¡äB‚?aªµÔ79¡ik*V›Öîs§¯Hp#H›±o¾}äã‰q‰|Ë'p´I¡<ÞÖ‰gSK»TÓ½E•š˜áI)5ëƒ\°öTpÈ9õhº É ]–hR©Ê !•¬Ä¡¬OÇjžV—‚aÓžxó¥ý~¨H†;à#é9ê§ÏÎ)RIŽƒçC».”0O× C†. ïj‹Ù®b¶ëá ̪Àô<Ùsjaý£D.zhw»ÔU´Ö©Dg(æ¼¹n.`=ÈzÊJK1±YK‡þ¥5,9|*Z©Ä!k˜@µ ɼåI³)=§¼9×SÅÆT°OmýSQ¾4o) \à¢Ú…C¶üÎÖ–žçffÖÔ5¤(oåÔ¥ƒÎR%5uÃQ'åmÏuU† ?SNrÈ?±jêÌMÒÈ*ti«Z:ChžzI‚«à![¾p$YŒøÉÅÍif—צȓÚ.V3x²wp‡G‹ü›§ì±eí‹i°Ã¸Åâ >ø?• ”†KZ|™Èd<]v#ÂS=lQ¶%àÝþL•ˆâ…¼1“bÅPõ\Þ?è˜ä[>¬™r 9a–"Lã+. ×ÅË“».‡»6#Þ¤‰U‚VáTí·MûÅŠÏG^|®Lûó;d‡•W*Y_|úMåÇp÷çµ´mщ50‰îµˆEZÁ2ˆ³Â°™º§b(º¥:"å¹…lr`(EB)rÅî1Ï¥‘[ùaÝ´[­PŸ.u–ÎnKuK6_Ò̉0ìS»ü,·“C]t¥ƒÐ EØ5OuµšFj‚Ð!©ZmÊÇ WGmÁRqÁÝî…îØL€ñÚ“Wb(º6Ü—žIW&L’ة’hª pÇè¡ãו J‹M^GÞ ÅvÏu›$n…6¢M/üÆúgã…*õo:J7]`òÚt3jCY$ØŸÀVi€_J©ëºo2qÓYS$5]?v]€!VùK"z½é⯯Oßd‡83h »\ PC_¨OyeSBÑîZ˜ \𠡺Üë­%)Æ$&\eê!\6]D‘XÏ… ` mÄPNP=S…ÕÙ?…½û‚Y,#uØâ\—æ]vlúëPIG~ZHh¯Dy=t:ä©!¿ åçÐåÐ_@.<°=Å]ur€tÁIW2uÿ¹¿iqåÞ{ä£v¿ýª7ñ›;%å°C¼ †®‡‡Ždþk›ÿøÖ•›]Ç´Q>V¨îó¯JÚ/_÷;xŠôBý { ³³¿lSõÚ­Æùl-ª¯Šì](þÊŪ\ÜT-šþéÊ)ŸZwa²—Ò#þ ¯Ub¤ý³?#§Äîk´FÛ9«æUÎÓrÜgàž_ó Ö˜ô)wí_·ÄBx`l|ÂþâCln˜äÓIMÙÔäÊ&ô©4oeÁE7^Pœß=‘aU¢&÷×Í’oÇÉ–ª¶¸fUrü¯ /¡ØCe’!T‹å _©ë—ÔøåÞÁ9Sž!ÆÕw»àìñÓSü9:üÇî\_Å#]ü¤Vñ“ÒêŸ2VýDRô¼+Z™'<ÉÂOùË䃧ÀøÉ*žIà'¬xŠ™XQñ㪄ÑäSôì¢ò¹rVžü’‡Õ£'HgTøSݭDZõ,2¶~ KbéñBð¹ß0Íy|æ·LsÞÒ3„XzfxT‚{¡©G71õ˜“›žz¬CÃ?YÀ߸ñ -†)Šêoêx¨ ºø7pµ.ˆB®0ÄÔ#ÉÀ£••ãñ|gMÓ!½ éGy\þvîa¤¸ÏZzŒJû`=|,™ãøs ä{ôÈ#ðè÷G?+Š£ŸÑ°/¿ÂÞG?É¥Ÿð˜¡øÄõÏÌáWýäI´Êïx¦P–ý|äwÆGŽçó›Œ <·A¼„~BËøB<á¡5â ­o¤ˆ¿íx<ŠO<‰áO ›â]žñŒ#áG˜ÿ€ß0ÿaþx¦þxd~6õ¿PK n9p)´z9ô ¤gesualdi/Bell.nphUTbÓIUxPK n9½’bž ® ¤}gesualdi/Packman.nphUTbÓIUxPK n9ô†¯eaw ¤Í gesualdi/Inverse.nphUTbÓIUxPK n9üAXË  ¤ugesualdi/GetOutComeIn.nphUTbÓIUxPK n9͇„µ† ¤gesualdi/Hanged.nphUTbÓIUxPK n9˜·Ü g" ¤gesualdi/GarbageCleaner.nphUTbÓIUxPK n9ò)zø= ¤v+gesualdi/AlmostEasy.nphUTbÓIUxPK4ßAnumptyphysics-0.2+svn157/data/tick.png0000644000175000017500000000104012264274577016743 0ustar warp10warp10‰PNG  IHDR szzôsRGB®ÎébKGDùC» pHYs  šœtIMEÙ -1†f6tEXtCommentCreated with GIMPW{IDATXÃí—¿/A†ß]‰# Ž‚?¸–¨(j‰^Ãqæ =…ˆJ­ò+‘‹†SêÎ% !…Dâ…¹d²ÙÙ;{·s·ùŠÌ÷>ßÌ|³#e  ”€+ ò!@À PáW Ïœ/ëÄ«èƒ>ê¹­yô{1‰ÀЗuòéȺÛ*û ?tпC@¦Égè×|Ð8v~ÅÇΟH _öA¿ÝzËÀeOèMùGôÏíΦ5$•ŸO|Ð&l¾k¿ë(ÿú<ðí _í4Á$°Üš83fÓAßiòpYÛ`ªIßâèuL_t\(À¢3à K“³¿'iXÒ5p,éÔ1î¨,ÜNK©úIÜÕ*©*iì)Hc Œ™èIÒ¬¤Ç¦§6æyH[õÐAS—4'©lªÔÊÄY& Çê Õ„¶ °‘Ù/—ed?ÁÄJæí×Ä­ˆ‰ðä½<»,ŸÆ@Í˃#jâ_ÝÔ‚‰DÅ¢òIEND®B`‚numptyphysics-0.2+svn157/data/icon48/0000755000175000017500000000000012264274600016377 5ustar warp10warp10numptyphysics-0.2+svn157/data/icon48/numptyphysics.png0000644000175000017500000001462312264274600022052 0ustar warp10warp10‰PNG  IHDR00Wù‡gAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs  šœ vpAg00ÎîŒWsIDAThÞµ˜y]W}çg¹ë{ï¾×ïõ{½©»Õ’º¥Ö¾X²‘­Ø–  8l ØdÊöLŠm*2„ÉLM% "€!ÉÛì&Æx"Y6^dm–µ¸%u·zQo¯ßþîz–ßüÁãcÆd¾U·êþqî­ïçü~çœßïV³šk…¢@9oºóçç–/›ËqR ­v (#Ëf!m»ðKµÛmøÚWî†wÞ|%„×q! ШÑvR ­T*e ”c …&Iù|'$ B4ˆk¹Œq BKM Õ†Aai)‚®®4ü&‘F«™Šã N5‚íVY6Ã"@ 8‰)ç&0f ”)¥ó²àû>ØŽ µJ•$R0n¦’mË„E(¥®ã¤8ç)È@h©H@(”ˆ5åT!" +Ta—mضk» ©D-Žã¸Z­¢çyËuü'„hÔ’jE5ç†ì[Q‚ ˆ@Ê!„ñä`@Ì™)•’¿úX)7 FQkRJІ¢„€ÎÙÔÎÜ¿õbûâV@LK%$ZÛ\Ü4¿2»2J[i™6Ó ‹Zu D LŠ_|ú ;&ê¥k‡®}ûè ÇÃ:ïe3%€ˆ„— ÆÄ²lF JÊ™“2hLƒ” (åL+A™M(ê„QJt­ÞF <Ï€V»1UE±ë:”‚9寱…£Cÿ|柯ÜXÜ(ÒfšpÂ+§+gVµ’¦ç.e„•%Êe“šÌ`fáØâ±ü®žê_Çî+ŒWÇ3·o½]칟=þtò{¶ÿzQ™†«e€Àh XŠ‚¤”@($†Á¸H' ±7 €J¥ …B‚0Rg'Q¬P4lƒf ÀÁèM«ß8óÌÜ3S«r«ÈŽžæîÞÝç§S'fŸèhÄ £-Ú*dØÙŒÖu«Þpú#—~dâÈÜ᾿;ôù•û§öÞ¼å=‹W、"…aÔÇ~i=—ÒAÀìì, @DB)!R"¡”‘ÄTiiiTÜ4ìˆ1– ¢fŒ Öž÷òܬ×kÀ9‚”¡VÅ£KÇwÝsâ«—I-ÍÑÎÑ©·¯{ÛºÜH ÚJÚ:Q:a:Ñ ¤-oA£¬™Ìêùð#¾ÍÿyÕÿxʳ2çšA3ÐD«œ× Íf²ÙŽ—*•2B@)Å4jbpÂ0r,ÓV”ш1JÐÈBд,Á(“™LFA©TêeÍf L7 ~}™§L~9¨ô':éüÆ©oô=·ø\_Áηâ}kö-ìîݽÈÁhº–[¥œ¶!VBê³µ±¡¿?úºÒ]âÖÍ·\èL•¦ À¡%~ ;÷r€_Ìv„hZ6$‰àŒ2͘!LÛ™$\a+)MÔ–mûÏq÷âÎôKEQ•öIȦ†”ImîpÐ`WãêÀÎÝéƒçÜs²ü|_¦ÏÉT¡ªP-RB㬕 ÿpõ›Ï¿®ÿ²éã‹Ïåpt²>Ñ3˜,hççíŽñPGhDR­,J(%(D ‘H¥¨’š:¶£*Õeµ¢¯ ü ¢ŒrC+i$"Fƒ‘›Î¨8 ¡P(Â+i¹\†Bg',.-°R¦˜Ÿl]Øö™§ÿvgÁɧ2f:¬F5ÑNZ2Q Ä(ú"èl&ÍÊ_^þñG¶÷\rj¡½P¼ïÜ¿î8Y>5Ô›î^¸uóûôx+Î'‚LJAQ5›Uíô ¡“ø€ ¥”,•ºÁu3ª ÄAM;£šPª“(Jé+š¯T– Ÿï„Jm‰vyéC ÞyôËÙ­][Žð’N–Õ ”hEQXškÍmû«Ÿÿ÷flÙ>xÉTÆLOÝqÉ ¿p€~ò±¿ÚpEïå‹=^ÿ|½ViðD „3®rÙ@TËvP @Ó¶# J %ÉÌD 0>`sÓf"½%²l‡pÛQˆøÍ7›-P:†f»Aê¦/œØðù£_\¿£kGùO·Ýq2Ñ|µU(– 7ˆ–8ןéi–Zó£³÷ouyªzûÖÛŠ8®ô¦z'zÒ=›Ž,]½{ðòcŽå¶(Eð7L LÔÚ툆¦É(M‚Ȧ Ÿ.åé]7¤ä½{•Jœ Œl©” €Q"¾ìáœ@Û÷Áam$®ožþöÎîtwé–Íï½È_T×IcWwæ;Š(©…‘i:•bª³Fv?xþÁ«öOí¿Ê0Ì¡Õù²¡¸><¶t<å ß5©A¸”ŠBPk©…„žH©9QŒq`f¥FVÿÛe&ž¾5&©GüÄÛŸMkIÕQýjÆyäÐZƒçy4NkÛ¶!㥠1ñ,Ϭ„Ë™œÝ‘ìÎF ššµöÛ …ˆÐj†`&A)yAmïÞ>µ"Ó׺óÈ—6|ì=Ýn7¯³^·gÚ3¼f¨Í h'Š"É8ÕR ÅÅ8‰çh­IÖŒkGmK?µ‹b­2¶XQù`0*E¿¨~úÓŸBÇ0::Š### ”‚K/Ý šjíYß3½ -Z¹@Ù$VÙ0 Ñ4MŸ)¥[@R¦í.ø }¾œu…µÇ?°ógón¾ûé‹O÷Œ7ƽáÜêÉ÷o¸åp(Âe…JsJ@0Jà”RDÓdyF;ñ”GôP 5ôhÊSõžnÀæâ ˜ï[õÆ ¬€Ï~ö³¿ ƯE³ÕÎ9…°/³¢}léØÀbs±”3²K”Ò˜1†ˆ¦i‚G=¾è/öýÃñܨQ%ûV_w‚Qzú}›oaïÝü¾\¥]ÎH)fn>Â$úú=_Ê) Æ¥,âÜœIJRLk•Š“8OÅl‰&'·)ºÂ–líbB†oƒƒv\Ó:H».ü6!ضƒ !ØQÚ1[öËñ¹Úx±#Û ©Tª©µNb¡¡ÝöEH/4Öœ~|Õž¾+ÊJ›/ø‰ßh…µe?jŒg­ì‰¼Ûy!Öqà/Uñ¶Ûn®)AÓ0€†a”¥„h&…äœÙÌP‡× nìÆžŸsq´_Ê _‹j†»<þêOü­JJðÛm°™­É¯¿v嵫˜øñŠîlWÿæÒ¦J“´h–¥ÒŒÒ΋­™G–ެ‹U,¶tm¾ˆ-‘$„ œsÉ@yÙÂËþO•ÔDkM‘SJ ƒ å2^¬I6bâøj­ÑpÝ@è¸M&òDUí ”¡œ,—Ë å+C¸î/£„$r0?¸pÃð S³Ù®Ç§®9ÏôJ§Ûõç?û/oùØOì}vþ°÷úÁkίϯ›¯6—(!@…$ "LO¿¼¥”9Q¬‘š)!À"\Îx4:Úi«E—PXaâó#ŠæE¸í9ïõ8Îí1ÈL¯ ½Í€:âÉVNýÝ¿Â[¡ ÚðÝ—jvÛ¶! CB ¤ fœEŒñŒAø ¬úÉÄÙoœúÎ&ÄYã _|×è;&ljÎi¥R)b^숔R)›µ& hÈvä€'2êТe¦åS†- Rµ°‘by0é&º5DÇcû¶oû´«‘Æõg˜ZÜí$ÿòž”~ð µóïÈËèó >s© H3~¢{Ͼµg? »vîx± ùEÁ8ž¬_Øz÷sw«§çžYÚXº}Û“.:s $U‚*‰dDMn(-g¨5àJ++Û1 ^+g¡'?w¹)Î]…ÄÓš+’nW´cÖTÇ!Ñ©ÄÜSî6v6÷¦hÀ“¹’ªÅ!Ô­<ر¨¬ú§ Ûü°v1ÿè‹§q}ôQØ}Å$lù–Å,ÏAÇ·Ngðê«jï]ÿî»û^÷¬e9‹­ ž\xáö €’ Ë¢Œ3@­0 ¤špΙ”LB£VM"«ˆîJì½?Œ}Jº¶ŽºéJ1ð¸Aãºeåëõ¨VúßÏyëºüZ¼vÅ[¿Šj²¢Ä’FšO™âÐõ†x*ИùQÃ3X!0%A,Ú>ì¹r1ÁtC®9páÀÖHDÝéwsqßZÚæ£ÔõïÚ·Ä#c·7•"Åž^¬,/€FD%%0ƒPÐ(5eŒrЄ`ÿõãcĺXå8‘"ª¦|9|êl²ºž·£Éšeen_v¸Ôˆ8pω{ÞøìÂáá«WþáùNoë9±ð­:Z½¦™üd ¢qtB姃++>y×½ð¹õAÅ€ IÎÉÚ͸¹úÎ#w^õðÄ#[g[³]¡ Ýr°œ,´ü~£§¶±±¯ÙŠêD#°$µiX„BµÒhÙPÊ€1 œH)CB(" 2®õƒsI$Ík êvàWÞµ‹}äš´w¯Í—„kúRb¢;ÝBPp x¦rfèlmlˆ¤ mÞ?yÅF"Ì=G7„¹øÂüÕÐøN´Öà·[$ÃÓîBcaøþó÷ï90} ÿC—|pì½ßsÄbæø®™] sw}}׳õã£}¥Û²m%µDDM "WJÐ(ô™úN{ ¥„ µiøR DR¦þx ±îÛêÐ5T¾‘ãÑSm1|7K­ ÒÜÍPo4¿Ž?>û¸3מO£^òìöß^@6K~ɽóê¦YèY ¶²Àóvçèñ¥ï®erÉ÷”Óßìzl±].8sÛº·•/íÙÌ4gr±Š‹½â£GÖxÃ"ÍTýjd0 ¨Á0-P„Rà†I€1⸠P"Ä"­X–ó«QJ ùÒK¿|Ù·o”§[ œË›<:Ety˜øOÒäh¶Oïï{ÅþžŽ·Þnf×>9wØZªÞ—¹¹÷|o·å“ÛF6Ý´b÷sSÍöìü³«d щSp íïŸùþsÛýñ–ˆEܑ͡„L€B @)d2%¨×kÐÕ½^M¿ „ÀìÅ XÑÓ·ÇùEŠáõnôµ¢.¶4í<“O94Ÿ<¿øÜº3•±ðÆ¡Ëάr1…ÂÚXxpóê÷?L¹•98{ðõŸxì/½½ƒ{?›ú71Y¿ 1m“DqübÿŒ`;i"EB1€PM@$drîäó¯jþea€€³šì/–˜:¹ÌÕ˜+èðþ&yÛ~ÚýÆF@ï¬nÄu²®ïc ãg!>¶I°‘cóÍÔ…5Ðs¾v>èJuO¼Ó­§»ÓÝ~ÁÊOÉ8ñ¥R¨”Blˆ(ôi&—Ôôß H Úi…m³»»+Bb¥z ù¾ßàSŸúkø§:õÉÅ™¼é~‰€ÐMzÃÅž¾íq„‹™X–‚Å'‡rC~Ú´gÚ°Ó'öì’R"Ê;`wlÿ?ñsûV]wÆ`Æ\½]«YVJ;N”ŠAÀ¤!(ººûÂñÉÓ^#ªWýZÿ7O{äý[n=ÔKºÊqÜÖˆ¯êÿå¿Ô }©¾±Ù!b댕]ú³ËÿìI”í ÔæfUG÷MåŒ1²úé¹gVíÎh·v&~6 "I ŽcBÀ0  ‘É›øN¼}à? Æ2^³¾c­w¬||ø&•@Óñp¹*i.ýªôÕxžI’ÀC?z)#‘õvà·lÇQ™ÎA(//E çtõÌÐrXéÍ.™ÄXR¨äÂüEˆ¢„aðâÝJ©fŒŠ{¾ðIüÖÞï ¿¶ª· ß[±`0Ó TX@І“ËCòû‹Ex÷-ïÇvÀKg0çeÁ2L „BÚÍnZ©‡'2(wÞ4òÆIÓ±ÊZ£Z=¼–PÆRŠœ3<{vDÐT¨7l°À“- zò²Ë#íǦë!ÌrÐDÁ«çÐïðJ"À² æLsÖ5©Ùî0;æ…’! 2Dm7)¥LkdkG9¡ŒQ¢ÈŽ}×S@™[ÂJÒávÌv:§-Úaå´ˆD mÀÊ,œû-‹á5,—_¼STK‘ ’Àf”-çÝ|#‘±A1Q2Ê¢rnè‰sç…´êíJ×±Åã™ÁìàÂêܪh$?¬Æëãí¤UÊP'SHuX•¢=AÚ­Ú¿/€m;dݬ9Õ˜êõEÐ_J•R¡C U4¨á¤1)™Å|ºNQ7—+ªµTáùR±Ä€ <1õÄ–JPÉ^ÙwÅ| B1Ûœu,f­:±ôüÞ©úÔUóÍùõ i–RË¢P¯W~Í Þ@#µ< †ÁNTNfO”Oô¦ÌTÿ½çïÓë²#“º©@µ’ÀF£Š)rRÉ*suB€ZO/µ™íï,n¿xäKÛÚI»w)(ÛŸzæ3W¦ŒÔª¢ÓyìÝÞíÜ,•Øú óýš”RÐSÌ$C¹•*gçäTcªûSOý¯«KNq‹E¬3ÃF­Ó &9”ºêHi¢çÞ4´oÜâ–x¡~.½»÷u'ï>õuïž“_ÛeqkÕšÜêå÷oºõØDcr²ävÎt§zü8 u)[‚Vû×Óè5P $pÉùÅú,3¨1÷¡húÐgs»zwVR®%Ò`̽oüþ‰Ø”ßÐþñôCŸÿyÊböä›×¼©br«ø‰Ç>¹fGÏö:å ¿½³wס·¼ý) X } ZJ¿ †aüûH¥‰–±²¨5ýð[ŽPàCœðŽÖ¾ýÐJwåY $­ó&1f›>¸÷ló|?`;{v.¿cí;ž¹ÿüý½L<è¼síýO[ï˜úÞ ßßð­3ßYõäü“äÆMï®+u‹»È•ÎÙoôð{D€† áeý—]9pþõ33Ðênt˜ùs‘ŠÆ Ð¨¦oYÿÞ™^·›\ôçöv.vºß{áû¸1ô|ùùÆ5ýW?÷ç;ÿó3†a66–6T×-­mœ­œmB‡Jg_ÑÇkRH ¶RQÛOæ‚IçTùTn´0z±è—"ðý(ŠÑ4̰Ö‚?èßóm"ñ¨ËÜŸmœËm)n^þ“Í·ìïwWœÕ—êQ¯]yÍá=;'#…~Ô (ÄW)ˆ^ó6ÚÑÑB$-°¸iM·§»*QÕÚVÚZM”ˆa¨j¥Ù–C©kÌ ¢ÆF kv:…ó¶iÍ®íÜ0– ˜T˜ Vªîך³/tez梸W*Ë@_Åáïu+%¡Ýl€c9ÖÉʩάåñáüšªB•h`YB1ÎQ£k¦l¤8òd·Û5spúñ,í2JÁ5màÜ@ι–(E,"i6ö¬7•ûÿ`Ü” À”V)F£”GŽíFR /s®(e!"H ž±¼©™¾…å°’Ÿ­O—îN* ®ë¢e9Š1C>ü(ضû;yø?õ‡B°(ç<%tEXtcreate-date2009-11-22T17:57:49+00:00¯fù˜%tEXtmodify-date2009-11-22T17:57:49+00:00ð׬IEND®B`‚numptyphysics-0.2+svn157/data/paper.jpg0000644000175000017500000027662712264274577017145 0ustar warp10warp10ÿØÿàJFIF''ÿÛC       ÿÛC ÿÀà "ÿÄÿÄD!1A"Qaq‘¡ð2±Á#BÑáñRb3$Cr‚%4c’¢“£ÒÿÄÿÄ+!1AQaq"‘±ð2BR¡ÿÚ ?ý¹øOðŸá?Ãù(`ü1ø%ˆ¡Á– Ü ÉQ|u?]efc3Ù˜àWP4PÍׄ]€÷'Ûìü¾[#•L¬±B¶ Ò¤û òÅ„¡dMMª‰«¨ë/£éÎg3#¯©ËnÐ[%•[*ó•$뜆_! øyaáš,¡]¤ /„"…÷þ1Uë†Õ`­§r<¾¸0H„ Ju¨XØýñŽÙ®zwÇ-®Í‚Íðëîp–ŽlÃ\±ðÝïö1 Æ6Œ³Æ×@és勼Pø\8³¹$yíƒ0ÎØ§&¸XòNAk;Ž.´ïÓÌä2ÓDR82?¶èîzׯ¡  h–ÿÛ{’=ÏÏDËQ2…XÑõ¿® ”¼òvI•eÁºê7‡ ÁØì±-"j4°9¿Oliª+H^6 XÁ­†, ’©JЯ¦Üa’+¬ÄìàŽÀ»±qD­[Ÿ¿lû9!ÉØƒ«I ŸH¡«P<FðX²È%‘õ5×m¼¿|k#=’HW°T9ç9"X\M¬lñÍì:ñ'ÒÊLr„@U›óßÞ¼ETÛ<ú{`«Ã"LŒ"D±©¬Áª;Þ׿x‰;'*Ò*œ³¹÷lAÞ·äáÙâ ⃒ &–€±ß G#*h§mùàúzõÁí‡Yv om6]•nÉ?^0ÌyHÖ(rÚI6M·=1»„*)‘@FÇ—®’G…Ê÷š†½ (X¿cXgÚLvDF6S ¨ìlßÇœNËÉ‹&&&1áxÿ8ÖŠJЉ$DƒuÀÇ&X´çÀ)Ej#€zÿ8q0GcÀ£R‰²"ÔX»òçç?ÀÀWx6£c‘[oaùq¤J±¨Ôt¿›ü•â¤ì[•£Yu0ÝÃï]9çœD}‰¡—²˜¢€B¡P8ÜïüÖ=L¹6G»Gé's¿;ûõÃk—Ç6o×îÎ5ø ÷¼ãvogf ABRˆÛ³•Ó¨tZ6h>¾xºöfMTÿN`Q¿HZçj;‡òǧ‹',d\™ ÑZ¶ºûÛ~ÊWÐb Á$Óo¿,jpŸ,{ž^ËÊ?©•yQI­k½H?,>¹ ±SùnÏe$ÓÁ}+Œ>a È–T!6*Êï¶Ée„Ù>ñI5»t®Ó¶cÉÙj)È÷oTxl®*¹Ä'fBî÷ ]Qò¯aÓáLÐ]AÆù¾:~1L¶fr²à“±ûþ1dU›ÿŠË åCü_¤ïұDzâîÆ’ÑBÕlq¸Þ½>˜Õ9uRSrH«#OÌ Æ–Å:øaÈ‘åòä?…e䯸O;’ÉI˜ $-¨]2‚zXþq±ÊJÅ·ÿu_g æãƒ&ï&s2"xK9 ‹·'ë]NÕÓvc"L¡V´œ°þÐÑ‚A½ÍõÿXé»%ådR›ÈŒ+|z¬mE3F±´=2%eœi,àˆÍ°ó¶úa<ä½³<š?òYxUïS,eŽžh߯9ûdnk>Æ«ª¾h€ºX¢ý½yö¬nÎìä‘D‘f&–‚ÜËkÐó¶õ(ò¹à®«Ûy†DPYV%[-À‰ºü}qòÌd4’fd°·ªK§øºÁŸ¦¿Õ[!¡ü°€Ýßr uÛEØÑ/â.ÚíOˬã9”ʲæË3T2)˪ž4›r~»Þöô‹ØÙ4”L"“Hfµñ¹>1䣄€„î­Àmõ¼¾GR0¦Š$¡,K¸³Ç@vóÂ2œ¼’ã‹Y D-É'ŠÇ¦(ä‰Bƒ«p ÍóWµÿ¬&¹s•™ ä¶â¹øñ‹ØvHÇÿÆ´¦F‘ l`uzUW˦3'ìl–]Í 9‘€k!ˆ d’4ïGaëh°’²†r(ØÓgã¾ÍåˆT–BB1]B¬ç°¼Ò”ÎuãW±rð1eÙY àŸ~ÿX4}³È"mN[ĢȥØÙùq]–†ñƒC¤´‘Z¼èâ3•Ë¡–V„i±Ý¨øl ¸ëXÅô¤ORÚòYü„-øK¶bhK™»38$%¶ñeßcð;|kEÝGgÕ…’‘Ê:éà\(@òâ®¶ùc{´»2<ïáîÕš;W‡!œm$lYbz±ÕIÛÛðŽvÝü/Ø™ðŒ‘f2p€ùGPOÅ/ß ôòEï×I*°JËÌMá€'nz^ äÇŒ’c*²G&ÀŠ:o[cðÛ× ä»%“.Ù’’vZFÒ¢¸ñ­ãs3”‚r™Y$RßÜy<Ðøq…ó9x³…b)àˆ%‰¨Òùî7«&ë‚z=¯ÉqŸ°G(ËåL Ø-)<î̓X,ÐÊñ±eœ£°(½[P±Ðó¿[¬z®Îìܰ© а v£øÁsåÑ´`pH¡~§§_¾:~-éŸ{ÁɉZG…Ü_€±4§ctÝ~µV5B! CPÔ~$ü~c€Ë I¯HPWÓoŽ$ùP¥Pû-rxèŒ_çXC+–1†¦¦k‰/Žÿg ¦^ýi •©EZ °µ·©>þ¸öÙ,†Zu% +f7÷ÂٞƢÝ\;1ÜW½tÛâ‘•Ùã+›Q¢$@-ˆ£@ò=6ÃñåHieŽòY :_®ÊÆþØô¹ÞËŸL"è …|MÇÙ½äÂâbTV€Cöùb¼>Ôå|—ÿÅå©fBÊZ‹ÎÀïübÓer¢!ãñÇé5F½±ª°®˜Ê»m±øýp&‡.ö jl|¼c~Ø-¬˜òyqŽQ<€éî»°þdD¹Ú¹áŽÛŠbnÌ‚IŒ¯8U#VbÅãùÃÑÁs¥¾äôòÅžå%µ«›«â¾ýð{'…´‰ì|’½–Ù·*tŸ?ˆÅ£ì̶Ä3£b¡s×|i ª4€³1z ›Ø¬²›lÄ–½]篗Óœ#>êXö&LGÞJì\ ï^—¸ßŒeI”ƒ/Œ9.A6¯ã7^~ã™â3eÒ¶P°Õ·¦ØÉÍvZ¾¦Œ’ÈhÑë^|ý1^ʰ&ìÀâ³3»9kÚ…B€­·7‚ädãŒHÉÞƒ5Þ¦oùò¬kG v:Ä‚†‚Ĭhð>X×ÈeUÂÔP:z¸ÄáÆß råÊ1 ìµ‰ÌÈ {Ðïli.JTd› NÞ_-±¶{-÷r¼Büº`@Rj°W&¸8ë8ã•å¬á rO§ÂP7½ùøa¦ËBP*µYèxôóðeÖÕ2\Š5Bøã§M°Sq9M‚HÓÁ¬¯ÊÆF½tŽÖ(ž>8$YxÙw ¦Ë`Ó~t}¯ hˆëE*F¡½«ž>˜ˆàm%E4£žpa\º3,Å”£°~÷ù`(Üš@ î¨ùôõÃkIwK@l]x¾ÿŒVh–2ÒÌAÙ qçðªßK¶SdrÙŒÁA@ê5Â@®Mà3d&R‹q!IB4Õ_œã}h¡Z‰&–ÇOù{bÆt¬}•0¤­”‰^”¨+i­¬oÏ\xÏþAÿãß‹r³dûO²bq™Ë˜¤ ÖAªñs@€k‹¬}7%&\Á È¬äð¯;tÿÉíL¼p#Hã·½;ôôôÁËŒÌjr»¬ìÔ‹®8Ô¼{”*W~}>8,Í. ܇Ÿí‹e2ÎÐ+”eÔ,/FÛa¨âˆæUg Ð4§q‹†ŽN„÷e^H´Þ€ûý°Ô¬­1›Ãê8Øb[-rzÈ Ø/†"B ‹H¢zVú…ü±¸È ªëröv$/¯§©Lb2ZZbiOCÏÙ8ZgžFÕ—@ Š…mçë‹Í[w³Lj~›5·ùüøÁòqY¥ŠyXBY‚ÈžÑ;NŒY#Ô Õ“Ç8,ÀÀ†5Š‚V¢wÔ<¿Ö ±ˆM\€nH½;y{^,2£)“PÆ3¦1%±**ÚÉ>ç“+¥d¥·7Ò¯sG4˘*ª ð®«k«þ0Dy\7ea²ß'´^]ˆT¸0Êÿ©­~|–*r„PG²W{¿.˜PÊêÌÚ_?ú¯¯ß™ÜF¨±KD÷ÞþüñH¢m%U¨V–7UíëfA ®9u÷¡½íÓ÷¬XV‰C³Y$þEù^.ùñ¼¼*ÄN¡AºÒÃû¯Ê¯é…²YI³R¦ w¨í‡NF1¥²–ïŒØÖ”hžE:â²Gˆ–4GÃã…×' k JÔ1 ÎˆÙZ°@ñqñù`!uJñê)²Ãqçé‹4î\¬K!Á()VF]îÇ_ýÃÃ.Y¸iO©Aòôx ÍÝ)bJ¿sôÀÎmû¢B Qhýœ3ˆ·Q›a¼¡žU”u ÷j“ï¿Ë e29aš?˜›3<¨ã@+aMô¾=yØâ½¢YAaãK‰î ëþpX¤n齃T“ŒÞ™Èä‘Á}æ§{Ù‰c¨“ÒŽÌœºÈ ~ AMC áÌÄÆ@ðš²¾}7øáoêi+`¬þý+´ÎF²9Nç,H $¬¬ž¿ ã É™@HUŠÐV×åíÏî3rÝ¥•Ð`YÞ‡„mí5ü'Û=Ÿø’~Ö‡ñ1”ÌrùŒã:Dîà˜Ö0ºH ¥UËl iþìž ý½oæ?.QÇáÌŽAóNÄä*ï¾ÁM(Á<‘„Ñûu»9GhäµÎ#é‰ÀR×»¨ú×§Ã ö÷â>ÖìlÎ^,§á,ÿiþh$ËËÇnFr4~¼uã&VÌÂ$Ì+Æ]F¥Wë@5*@f<‘uÀ9ÿÆ‘æ3Ÿüøkµ32æ#|çfåóÆcZ]#X°n¬/¦3·dÿ¿2=LlÅ@¶#jmïË ¦\ÈÇ!°IÒEüOSí뀬¹|¼*BµŽI[®?Öƒ55#£µî]øçÚ«È f2†H×Zï¨lGÃß ¦Q!I 7DƒFŽÿ¿+ëŠÉT¶•+U) T¬ØùÿÌ9 £Nü8,,•$U¶:…ÿQHSý¤7X~¬"—Œ.åeôÅÆ3ʲ;O,gŽ#z-d†ÛØýïŠCÙÔ“R­EžÉßø8Úî‚Èéµ*ÐÚ¼¿Þ$1%–F œtßCÅ•ÑU”®ì7,úXÇŸí~ÕÌ# ½'QÔ u7>÷ÓYÙŽw. Kµ ZêõûßG?iI{Ù$wÔ„½ê¯{<뿦ø÷äÚ“3»FÖÅ©¹Xx67óãžæ[f¨ÄgXV #s±ç϶ofö#A›&I»Éê+zJßö9ƒ]v6|½,p§uùu]E˜+.·÷+ËϪÜðg²òΙ[xT1'PSAµ?¾4¤U`±¹V®‡p¢ˆÂ™whT&’BËwé½ýÖ ˜ã)‡ ¨ùcqΔÍC*ÚÒZ쎸Üìüw’‚F¥ñ)ÜîýïìcÎ3I$ȹ,Ç8õ‰4Q¢¦ª"ºs‚åk²ˆÄªRdñ#WOý…`sFq÷AÛFÄ’o¥^4QLt° bÂëÌqjD&A¤=j‡¡5”b‰gKZ­XÏÓßÏ ÈéM^¢G¿¥a”Ëź/ŒŠíç|W¹Gý”oêXž¾ÿÆ,‘wBuYå:l€/RŸû8‘‰K((Vü ìzo_ñƆO,°»MQØl/n˜[7²…Eê&‡ï|]`ì$Ì€¾%$wÕǶ*ÓŸºŒ8 o[?<ÊHÕ\Mo}6ùÞ†"„Jœ ªÙv>ýpÁv&£gv·cmDü½Ž ÿŒ*딽 Íw¯ñ†ò°¬gÄH6H³u¶aQ,*Êši‰"ë¯^ ‹X?—”Hõš1ƒÒ퀯¦ÉåsQÈ%–w)ꄊuÇÏË@òIJ1rÏ!'Ÿ^˜—‘‡w­ƒþš¶ CsíxÌ™Z·¦‹fC»5‹ÒH¾ko~˜\܆)ž–1Ká¶'ÌŸ‡íˆ‹.›¢” É=/—‚¤5ªÛ{ôòÇFVÍDê¢8¥46*v>øJ41Y,†c½[7™Æ‘`Å•—™îÉëXFˆOˆ #o!òÅåidÊêrdR¶×_Ƕ(—­ŽìV«¢|ÿî¯)Õ‘¥H$ìmÀë‹Ã)K2§éÅïÀÀ¨%c\§z@Ôx4oNÆ:x¢‚?¨¦×â,:8m’ ÌË: ‘[ß\/,r&.¤lt…­"ï‚Å È$•A ©6Ç÷86Ujrʵâ`  VVß{`ðå­H‘ˆ³á_®ø±Ö¬Ôà©U 7Þøòàa’›\€FÆ= b[ÈŽ£YB":Z´›ØõÀ. 8bà‚Ìi¬›>u‚ð ²€-½ïF½wƲ3ÚI14 KáÛ× É<†5¸ ¹  €+s~Øg25¶–,BØ:v¯ÏŒBÆ‚3ä°nö®1dÁÙIX_J0!hvøg;‰VÙ’•j@êWŸ†5ç -ÂÑ7:‰à}Þ›)P0 ׆Ç82¤rÙdṙQó®Æ4£Eˆ™’w·5VkÏØ`c&¹`ò÷¾-ÂÛX\!!„6ÍdœÖ˜@®¦F,VÀUªã‹©Œ¼!–È7¾üÙÅËFˆPª”]šë ÑP0½ì‘÷÷¾- ¢º¹4¬A;ÕlM8Ëí,Úå·z\3͚Ǝs´"˲֦°¨¢ÙºÕyãËvÞt玖ˆ»á¹öÆm°É¯C.ctpv}üð6ULÄrÇ­Æ‚)AÓ°ßãéŒÜ„m&¬ÁrWôž› ¡ÇýÇ¡…’EÑHãaÇ–Nû>™êÓ¬e,ª*k{¾>X$q3å©ÏuŒ‘žT‘ʲС¹âˆDQ¦¦ î âë$í…²êÙÔÞ9 7}>úb’ÆÉ8‘uê²öÞX"ëŽB²¥AîÉ ß×ýà9œÄq2IbKnÇÒþ÷ÅpÉ¢LÉýE¦€:õÅŠ 1U¶Ô¿³„Ó5*Å©ËZXᾟïšVgyHQVÕ½V×ðÄÄ… ’ x>˜m‡H "Á›~øR ]ŸJ2• lM¾8nDyµMlRËDX#¾1¹ûc2.•l¶5××”*8T”×[ü~Κ’&¦»kÝH;qñÀÑd$iÐ9Šä ¯ñï‰b3ޱ¤¢Æ¢Îß .³BŽ`ÌúN¢l¿ûôÅó:dȌ‚ é¢FöEï^Wå¤ÍoØCÍuóõホÍ8{…^%&ë®Ý?Î:šMC“ýªoP;ì/×ßç'™I¦ÃÄX‹ë¸Å YVvˆÀ4MQÛÛœÛNÉQä1‚Iñyùÿ5†EêXÓJ…ð²‘⯻Åg2E¤1'Wößß\%¨÷ƒÂ€j²O4zW–M­8Ýds• «?ǶŒ¯w#Âé M‘tN2’hÒh‹FäàuÜÿë e̸‰A¿ê°ÃŒïDhòñÁ–ˆw¡—š×}ðÑ–0Ë¥˜äƒõÀrç»"5E'IEé‹JBš÷¨=,ñïxBËŽz,ÞßÿN̘Äëb™†ûô|°$îL ¸Þõ 6[Üù󉨚´»y±{â6%ƒK@µ‘@Pä`ÉŽ1£‰ ÜšÇøÅe’CÝ Òj•«}VnÇÇ‘ÀËŠzÞ’,í‡À¹p´®6Ü|ÁÅ«/ K ;ùöøb±0§ÕéX›°:žÎjfR¨Hä7<òN&4$š5‹RºxR)ÌJP‚ä>Þ—f–£Õ±ZrGþ¾ØÉRb •‹<–NÕ~žØµZ‘¤žò¶õW8&mcËÆeîÀ¯]°ªæÌ³0†ÉBžxøa“æû1¢!¨•¥ÓgkÂ3¤6j³½u¼3ÜK$á 'Nõ¹©€!RÑÐ MÖØ<¯ çWp,’ªæ÷邬4”íWDqx¸ŽQ#´êJX*¤QðÄH…AQa˜ÓÆßã3.–“½É` P¶½ð¬èJW[4HøÅè½ëj­¦”ßÝaÅGl² *ÜŽÛ^’GmIÎôVÂïՆت³iwÇÕ¥'¹hÜ/ˆê«°HŒe¤Z¥g1‚ Òš;aùdP÷­€µàÿžq•&ji%9xÐ÷aH2ì¶ûúÝVÇ}±šÔò7eö’ÅÚqÁ ×#6ÄøPž/ÿÖ­±à?øÎLöOðážÏ•µˆ{9# \’Î…–F²‚êÛõ»ðÎJ9{V€&u­&¨‚þ¼œyÃr´}…“‚7SY$Ë!Ö¥šEu—¯–1|ÆçŠõ™LÄÓF[JÒ×]¾8i]–ÖP“~|ëìø™rÀšÖãËüÿŒ9$ fM× ÿë3¢.k»»jAÓÈò¬*W\êË•Ž€¡°:Ÿ¾£ ¶iæ%cJ J¯¸Ø}û`ùdgs«R) fëá÷Θe2¹3ÿÃGUetìzsí×ÓîòÁV¢RTiMVÞ~Ø**:Ñjº;|0¼îÊ{¥m Ý7ž˜³FˆÉNè;ŠkÚB?œ'˜H%ZiešjÑòÓ™ôŽñ¶¢51³gïøÇC.¨ËLoû€Ü 'ç‹%:‡mâ/0oú„ß§Ÿ Ç‘š 3K.bF/¡Ö2­Xj๯…óâIf(¶Á]L,ÖÜ{b¹ˆ¥–_ˇduþ—VºèO¨ØjÁ$Ó¸Ï Ø’WwW.–]‰ôöG‘^øs.sQØlš Õªö=6C9w•Îh¡©ÐÊ[I‡‡Ÿ¥úúᜳ3VVIÕ€RÌ58ºé·½c^ÜgÝ£ ‘e`ÐiZkò?ó®-#4ŠAWN0HaЮ\rHµØ ïC…»BóŸD¨|:Z‹qô_23n¦5M-Fúï·¾7$P¡RE¸è6÷ôéüa.Ã˳I´ÕLl‘@Ö5óù}eXÁÒ,7ºÜ~ø,Ö¶“–]CKdP"± uâ…›=p‚ÊÑ3"ÆA*ÅI¡óôê?|.Ò­g$1Ø ã¡ßœ^ÙÓN¯AY@ÛÞï{Åc‘µ 4OJòĘftœÜ†V6E¿Ž˜†iW»Êæ$2 ±äíæ8çœ_ ÒWziWsÁÂrªÊåÕ©yQ×ßgfb‰?9˜˸b¼'÷Ã3ED‘Ũvª¯K?|a³fK+Â²è¢ ó;œLy±ƒºpHýDž=@ù♨^G%˜·vô Ýoþ0ʸuþ–, ÕÙòù󃶺iA™¢X²’ÖwÓ÷ýðA˜ï ²Š2¾›±ÀÛËÆ½Û0‚MÐ>ŸëŒ²«j l¤X?ë|RÆ|¬ëŸÍ(X3?—Œ5 Ì|À¾8­ðÄ’:ªÅß° i£¹çùÂï$¥DLš°um·ßí€ËžÝ^UÖâʸP(LW“XÖ…´„MBè ò<à“ç#yKèMùøôÆPE ?䔳;–,Çû·ºúq‡bÜ«€ Ø“vÏ­à—UâÐ…%bÏE|;‘±æ<ùÇCºÈ U¼Ž:qó8#9ì¥ÔH5`zùb†PŽB¹/Ë+y½†4Íé%8"B«®‡Ë38 E‚X^õ]kË`'iQ{]ŸžÊÉ0d:TýxéÏß\*vl1>f 6¢jõq·Ï¡Á#„)v@+M¹;ºs€$ÈŒ±J“°ãXd=¨ïM“È Ž?® ©–ER YV0~žþ¸²Éß(ÔÔv,:s\ùcœÆ@j7'áC<êO²ƒF£¡ÇÀ8˜+”€&”úsíŽËΤ†¨]ÕrwÂæ ¬Ôx °³ûïŽËD*°4êº>žø3 °éCC€¤“éÅ㣔CÐàð ¶P*ªzECa_\  ÖAòëX„˜3!GY)Óz–øâæV ¬S!°oã|-˜‘¼NŒwòÛlDR,°*D×,(ŸçÏ(ŒÙú•ÓºŠu×v@°ÛÏûH—Yˆ<w 0ÈždÉwˆBJAï ¶çâF/)Ž ÚE)P¤y$Ðö¼¤tŠ"´ê xßëëxF~Ñî$‘&Ûøõ? FfkšêÓBÆ1)ÌÅ6e‹‚ô’v¡Ôã©FÎ12Há\©;~¦ò<ºfðå>HT®•Åá‚O–¹ÆW%# ¾Àúya>ËÍd{k'lvn`K—ÌÆ&†T>[Ú\<ÿ¬=QÛ6u3ÔUA#Uî—ÿ¬³ ï (J¶J êoÐ{cTGAv¢Æäuæ·Ä‘rF5‚Ĩ<½ða-$K ¥ä`m€¶Ú·Û ýñt âèPmü‡AÓüa‡ôJ²F]‹Åý׫DªEÒU6±T|±©ŒÒùÙ ’ÒÄüï×Ïœg°Rz(@…uöÆ·hÀáîAL/{þvÂÌL­ A£\Œ£PXÝû»u .Ô’|ÆØlÈ-#—ÜêÞãÛleK"…ˆ–&€&•‰ÿx6[+ù‚¤é›øê_àzãiÈ ËªOaúA<·÷×yt–CM«}<ºàr÷(C‰Ø”HMþxçhÝC"k*HÛí‹N&&‡Nš:¨±#P}0p’(2%7"Îæÿî0‚é‚Û«n˜œÌ³´EQÀJÕúã5‰Æµ2#B²w;ïë[™™ˆhžH^žØóÙ¢é+¿x1cmð|1àA!! kmUÀÁ¿¦ð€¯ý¼¼ñ4ÒYsÅFý®qHäT]v8¾¶0LqÇ •P@` ÞàÞ¾øÅä”4š"MxºŽv#üz`bx¥%–¨Hõ³ôÀæÌèC"*ªn÷£Óœ#N3!N­d‹<ÑNIc”·ï…×4ÆËf›Üú|Æ,¥È.µÕEˆÚ½/š=qbhE˜‚%”–m@n¤oñ÷Û9Ä PAäGLffIuÚ°²os·\ RQ¬Òº¸ùT0 $ ¾÷c öõ¯ݬd¹ iÚÈä½°fx·zöC^ýOM¾# æåŠ8ÊMƒ°ß·_ò½ß'dövPN®¬û3kfœÏ/x pXoÈ“åYø['šíNÝËÈ“Mm¨ðum^¤ ‡LxÏÃr‰V|Î[1#å³£Ú†VQýŽnmqû‚ ‘ÒèñŽsv:üWºÉf))*¡H‘dùŸ\3›gX²³Çá•nùŽ}oÙvYT&·šÒ@¡ï×ÎÇ+2¬H´ÁJ1&À½þ;cnwÀÒ¢#áÀ @¡Óoçá‚~i!! “Bª˜o×ãŒøcÌF®$,ÎÀ]ãŽ;ò²‰’IsDu*ÀÛýñ¨?¦æ^EÒŽå‹q`V/#Ç.\£7é$‹ûóóÂyI-{ÍÆÄ‘Ï[3Æ¢C#Ê,m@ÝzaLÉ{É&lº!'b£¦‡+ÜÂ[1âuÀpjÝ`¹éL M”ìÚ@õÀå–@D–ÔÇOÀ|1šaˆäÁ&ƒ¹$†éþp2:ÿõ7»ºÖWfrò–44+±Üt醊ˆ¤¸@z…‡,ûR–r‘Êß ‰@'möO¿—‡ž Ùù,¹aÝHB¨ Âë}úïÉÀôË1iE ¨ßoçüà¹SÝ2AÅW5Óóäx5™Ì¶^Mõ¨Q6z^­ßii6Ô@šÚÎ& ÐMÉ"˜nWì`9ì´‘eäÌD±°‡K 4Í[Gýzáa±ÙÏ#rG8ßïl:Í¥äÈ¿N÷Î1ÒW1Å,¬Ê®ºÂƒ¸¿½1sÚ-Þhg \€EQ£ÇÇŒ^ZÜv•bèÊǼ`X;×?\ ³×òŒܱ:‹9Ž¿N˜g¾¤1 ÖFÖ@½ðŽB€¤ ‘ÈVᆚ7$ƒeLjWŸÕËåS³Ñ¥ÔÉ&Èêß\yLÔÅHXdÐj-×c÷õÇ¢ËæUâ ìOˆW?\2+Uí,ìZx¦e$x•|$ߟL)h‘ E$„l/S[^4d‰&Eª'O7è0ŸiHŸ§,õ«zAûøaìtÍ›´Œ3ÿ*à±%I`×^^ž˜g/3Ê‚”¢0ý@Yö¹Iò™÷%…›¢O#m«¯ÓÐðE¡#o¸`4ü:ñX²Ã¿AJÞèÒtjtë’q0e´²X ¤€óÏ®"MKgHOÐ=ÿŒuÅÖ­¨zïñÅš5¦¹°b¨¬’È£Sj6=}7Àæìü´¸Ô¡Nþ!`ïÇÇœ½^òPÌS©4hýý0¥Iƒ*‚5»]û{aÌZ\•“I‘†¢4Ñ¡ü~Äà¦e X%ˆàš¡¿Ã|,äèrAµjÈØu;s‹,Lñ†-¤¹€­½G—¦1á­èôrC»M%ê:@mý>¬’Ä]©ƒ“ú¨Ñ¯/¿/\).\wDë¢jèŸça‹I˜x ‰#­†’·©ºïþ0·æ\Æ EZŽ¢jìs~Ÿ¶R®#uÐPNYMߦ×ç‹k‘РpAýEy`~&^ý€mnÁ^ƒ÷ýñ9.ù ™Í«’Ëá }kÏ…Ç-! 53²“á5ÏøÁêE¥Ù uÝ+ÇG2Þ½maEØ…ó¦)%*-oÈúV+Ò7–R'œy <·â°&‘f5Gl€WaA/aKD.…“÷[c¿2°ÄeÄ@$ªÇ¦ ‹æÉøˆƒ«W¿®Â%\±$ƒGk'¯ÓéƒJ"†Pú¶:G„ ºzút¬TB¿˜‰äbçX²MiæýúcÞ—ÌÆà3G¥ŠT9äïæqå{U–8¥Óá@¯&·Ðm]9Ǫ͕ïK.ªaBÍ\üz^<îz1«?µ{/µ"†AÙMÞÍ[ú™W\ªF˜ÙÚÊØØµ{ã7µ»K3œ—Ø©•Š!ŸPdËæ%TcàÕ$7cS–ðéî1íb2÷FZze[9ßé=Ú}ž{O;Ù¡­ìüД…@Ú†’µâk#~vÚŽøóú¾ŽMã|½—«7üÓÇËÕvpH²©”Ê¡D”mÔ Àôo‡6èMê»1P)¯ßŸ†3²pK(wÄNêX Ôr~¸×ÉÈæÝFÆÁ,O7ñ÷zw¬Çœý®Í³!ž€#§ ÷¬VFRåY4ª¾àË ¼€v°W{ò÷ÂÑ#T‚‰$‘WÓ¯–:°ZvgdµÆÕµPß®,hLP3($¬ úyÿ¬Þ \ˆÀe«$~¯O¦‘¦i%ÒŒ,‚5 #qñ¾¸¶ )‰™’EÑ£X"Ø€@GË|JE<‰"€­…Pçmüý0 €rQ,‰ Õú 0s-khª’ îl~ÈÅîXƒlMnä 4Ð#þ÷Å31A¯¼ŠäjÕÑ8¹Í˜E–ŸÜvéµüñw‚0·É+dÎ ËT˜Œ¬mý38C^ÕB†ûýñ„áx²åÿ¨ÄÚk}JoÛÍæÕ#ÒŽ QÔ¬v öòÆ;¼Ò•Ñ8UaT8ümŒëq­ TÊH¯"îºbh™IRįEQÿ˜Y3r²¬Ju`¦†s÷™<(ˆ¤³[ccjÞ¿ým½°ƒšå‡Â¢Ã²ïåÔ›ÂãóY‹3¡+[/€>_¾/™žWQ¬V¡T^q‰D²&†#ôê\uÄx¦TUdÝyÒ8ß÷ˆü«ÒšFû‹ßn:c³ ÊJDšæ÷ýëÐÈcX“¸¤pIÄœ ÷R…éÝI]ÖývÇK–eÓ­u†:©¹ãaŠJÌ›!4lê?¤ƒÏÇ ÅÓú$*ŠP=¶Á{:S1“%AY{µÇ?¸õÄþ‚÷®J¾ß_õ†ÙÌ€«½ÝA#~¸QÙP’„€³÷04’5rà³k£gʸ¾0þZ]J‹¥)T+u[ñ…R Q,/k‚0Ê»@Fµ ¶ÄƒÎؽÝ,;^' •.XîjÇÄýõÅPÊò,ÊA"è‹Ûãï‹ ó"§pˆÀ Ám"†üñ牃:¹Ì¬Sd¯xU…2Ø»>ØÔ¸ÍŽšv¬v{  ߯°ÀÛ1]{¢ ±s@»K .ÈIZƒÍVãëŒùíÄZß@$ _ß¿\kË> fdC˜œÐST6÷úV3¥ˆ…f”“ÇM€¯öwÁÞH£CVQ›b|Æ.Xx‘ˆ ]|†1­ÒÑŠ¤–™E}ýœWTÝá…G­>ØÖHbu Û»mÍúíxΟ2!Žp±kvÞ§§8­€¡IÄjMRê Î׆/¼QÖÜíÇÞøì¸˜¢>a37 6÷éϾü¸%Ô¨—Â/qgï|Yù”Met›®‹çÉÛ $k¡’ÆêÁùcErÎ|+`Á*+¦ØU$©`EØXà¯ôÝ„>®MÙa½|?l4Š« ²€HQfºÞ3së"³ÂÅ…Û¥¿ß Í´ypR ¤Ò¤$Ÿ½úâ…3Ù”ÒÊPߟºÂÎe¦6›ôß3Ë!*I#Š«¿;ùaˆEÒêXµ‚ÛP7tO['å¶5Ä÷evžS l-ˆ».àŠGÇ8ü'.fi{o³§îËdû[74Åyis2 É_M"p€õ¾o³=“ž|¼íh§Hß~¾ sŒ¯ÀÐEÛ>Ñíq’Š,«v”Ñ3-+<Œlî£Fzé¿LqïÝ'ŠØÊ$.`S64k’7÷ùˆ¤i·eE±J§aC`OÏ®—y%ïÒ2ª(P6w]ýïíƒfÁŽ u»ëW޳íÎ’3+;#3’v&€"¯ãˆÍ'† 56“¨ß®Êhf1æÈt­êà+¡Á³Y¥Ã(¤ìD…k3#¼…&)EEiíç%ʸK+{£üqŠåû?ú€BN…7³È5÷ça/ôÊ.¥€ééÎ|±36šP„ƒ¸ð‚AæðUì³1V |LG§éÉÁåMRëHÜø´›‹Ü|Gí†ä ±"ÆÀ‚v`Ý8ÁLeË–@Á‘“·$j#a…£‰ÙØIƒ` ÛaåïI»‘£fùko¾˜‡ H°ßn}>ý0"Œ†ˆ({ 0³Hñè2ÑÈÛ¯Ož•‘­Z‰AâÓ¾üÐÆtÎX€ªºNÆÇ›ãPÊfj©9¿ï‡‡u+²LCG¤‚‡ª,d®’Q‚°$é­>}pÚ°‰Ø–,X); Œ ̰ÜD‹hu±Ój­ö½ÊUÐHC±ßo_\<¹˜`h‚T›»óÁ¿+‘´šMXßáåÎ,Z]rÅm¹—[ûâÙ©ŠÅ¤Ö¥ßa×öÄG½l Ж7} qÔb'4;©#›N ¼ºË¬ö,?Q;ê#§®6!b‘¢©^›]_ÆzF(€@ »ã?<9–"H•…~¢v£çûzáÐÛËe×O};XÔ“f…}õÆIÓ74JQޝpxø¬;Ú"îä¤ÀÈ'}±Æ5€"îöÚ´UÐÕB½¶ÛW¢±ödHKeô&±+|õþqY¥u §±;SzVÏȹ,“ÎË€µš$×Oa8rÏ4/m`ø€æý0Z¾ Kñº›Ô+ÔãËåXL@Ò-Ò\8Â%'Q IÞϰ£™&fM,I;w®vùÿ8­Ã—;®1h@v$ÍùzâùW!cIccp´pº$h‘J§ûMÙõ÷Áô©:šÉØ“Ç¶Ø½Ë IuÝ‹ÏǦ"“P$S––EXÄÈîH¡ë{ý:àl³J†0ɤ¨b‘< $cR·*Ûv=¾&ê÷­7@é wZÛKÂ.¥–…F_+ÄÆÈéCäo¨Q"þYЮýIê9Á¤q˜•K2ªE·§§Ç¦*s’Ìé1‹B)¢$"=¿|ef%yØZXY”hm%½IùzñŠ®‚Ú 2Ëk@,„¨ïÔûã½OˆÔàÕËd+Ú9¾Ó“´óÒEšŽ4Y& —‡E’ѦT›ñFë¥`]¥˜Ì¥Ï”ʾeµ@7ýV}}ð„3fc€'å¥hÒK*ÇSïí\ãs+:NÎ)*™ZØ‘ÊGJ<]F3•b9zW;|Lt¨-w¹ÿ?~x©‚0Nä˜Éfà±[y}ó‹?2$G0Ãút웽ý¹8EsjËë*XÙ5wçé\`‘fœ°Ur@%FüÖ)ãíYãÝcU¹ i$Ÿ ÿŸñˆŒÆÉeÛPºóöû¼8‰( ‘FêŽäâ_/,LYHopv¾NÞ—ƒ*¡\¢-¶åBŠß›ùõÅÀ’IÆ•ði GCgáÓÏ1'5ÛMéÏ·øÅ^’T ~G;Þź«]ˆÓ¸±µÈù}p¶juH\‰•K[‹qååþ°Î`kUPm•¹;ãÛÉ–[§zíuðûë‚åSÈPÊ’£S³ +L(Ø=lâÑ,lúÙhé®,ú~زÀŠJ–P»>÷‹ÌúJ‰ˆ"Á³ÎǽF³jð,b!ر²8-éï‡#*‡Bë~C ÃD»~º&—~0Ô™ŽìGZ[¢zqücqšRP\»j|V+€?œ-,O$ÉELCK &ɧK¼:ÐÃ<`Xv ov7éï€*énʲlü=ð[Ñ*6¢5 Rƒ¶ý>·ƒæ•žVɲæ¯þ¦ 1ÈœÙ"€oLÿ.¤Åµ Y@õÛœc[¾YÍIÇ)!tÓêr#X"f©U‰%w"ÅVÔ=1µtP#K}@ ô7½ýíŠÈl®° ÕMÇ–Øu‘üeZBl;ÞÕÎ"zïbÞ–µÆô·'éxõž`| ¶ÆÈ_,)aÚN$(i•N¢Ca~¸¸Ú,4R©Ž7²·f¸8¾°T~œ¼"š•šW]—@tŒ–&‹Õ·ÜÇøÅ¸sM¤‘Ç 0¾H#‘¿ž™bï K)tA˜G2Fi’« ,ËçóóÖ@ZŠ)‰»±xVTgc"0×VÞ·½‡Ã×"lïvoÏ뇤¦ iR,ê>Ãlf h–ñ…ö}°uÎnd âa{Œ ré,! xÀÏ•c†ê*­ËdÙÛïÓ9¬Ì@)@(‹y½îºóŒÜÔãR•EÙ®Nß 2Ïeläq9„¹R¸w"9ï &ºs¶0ÒIu©ÛMŠÜmgØcf,ü¢E­•Üi ävßÛU™rÁZ@c,îÀ ¯,³ *$zøFÄmÜIÂðkm“5M¹·_O†*îÉaÕÁâø’zùœi“®@X+ú–‡>ßXÎwÙÞ–ÃD$ˆØP'¡òýðü€ŽrΠ Üêóè=«ÎJí(Æ0Ç àyúá8Ô-3|é÷¾%#rxW=’|»8¨©è¤˜W%œ… hšÒT_º˜w#O*S·ûãV]:T’ñ ©GñûaGq;ÐÞU¹6:yyb½pøÎ¶R ;?LKF‘*Ä¡ž>buU$@Ĺ,Ø-{ýÁâ–¢I%øYãhhQRQ¢Û’wÕëéÿp æA³m¦,Ûå‚°%£4êz‚<_¯Lf8Ĉ[cmz}þX±I™¬šµÃ>¸A­ !D*¡A¶;í_SwŒžÖÍå2)²Ç,³;* HË’OÀõØa¨r³;kÖLaˆPZ…Ž”=°g€xgš]ô…u á N÷ðaò¿¶m*‘–%ñé°EQÙp¶OµKHrñõ½]Qòçö6ã|®hrŠ\Õ*…*ž­×­Ñß~˜S1øS½‘ssxg†^ò ¬tp°[c—?O—ž-ÎRuW–f}X²2‚l/~?\9ÿ„ª=ÙY­—oÛƒ%—‰ÒyØ4Át’j¾@{`9nÚƒ3Ÿ—!ÜÌ.Í2wdDîß«cÁ­®±¹Ç<³nøkã`®²nA;묌¬Ô(µðƒéÔb…#eÈZèmFÏnpäñÐ,†€\ìpì2…ÙÔPxa¶š\»eÞW\vQ˜[|}}±Xs íjÀÇ þâx>CïœZ0\ü¯$º•K!vGKùb¥œžñ7OÖA±×ïËœj%c Ž5j­4/¯¶7t(d]U__Ûlfñ殮Ï!É ½ôÙ”‚%m¤:WQ;UòOømIU‰aDøhôÇÿô_²³yæíß1™[Z™¥gT6ZÂVÛ(ãlo±!…øô=:`ñÕ7)¼¬Q¡©¨ @MŸ¿ž‘Ê-{îHéí팸IbÈÒHo,£Qb»‘Ïñ„H+IÀ©Œ‘Io\yƾã#$l×Gâ$“·Qþñè䘫;˜Ö¨ÐÇ—üagû1ˆC¤.Äm¿óŒò¸Ô’ÓYI<º"¥°P &éÆ'2¬\6Àºþ›ÜWú­ð®WQ!ÁE'H½…û~Øpî Nš$MqÀé‚wéšìã,‰*»\Lb#¨?ÀÃC9 €nA±³çþñ@å”9@jóûã\cæ{Fe™²r8:†Úž+o,r·Ù]$¼Þ›!™+*Äúvfx°köƨD–)Qž›ô=1ã{+<Ò°ËMÞ#÷…m€:@ïòßñç#H„"B£GˆžñXß§ÏG.8~H¶Ö¶§H5~C¯ß¦4sUîZ½‡ÃËgÖf†M…Š7½×ß¾ÐÎãXPmi@ãñ»Ž «_ ¡¹òûóÁ{â(Q¯{­øã÷ÄMሕ½*Ä-.àß?,Y‘X©wÁºÿJ8ÎLºHÏ*Å®]•ŠŸÔ@ÛþzàØCÑ C¬ÇY îw$××Ëf$zQ/¤š­¼ÿ|',o²Y²löþÆ—˜+§t¬{û'ìÕ½gåûìÓÅßMQà€|zãÍI•›9ø¿2‘ÿLöcfb™9 ¦wukæÜÉgÑ:cÔd+,âqjü³Èã'#7âþØü²ç4±få6Ag-"³þ°=€Æ.[ž+r\³"ÆæØôŽÄŽ˜ V’vë¶ÿ ?˜¨Â³¡-ïÛ ÌRF2ÔH7ÿ+ù8ݽ±(]:”ÿ¬.ëë‡!Ì30R¶¼8öÂ-]Øe Õ°"ë® —}SÅ ÝUqŒÂÐÄÌH*H*µÊŽ,~øj2±I% ‚Xlk“þ0? J¤7úBŽØ‰*ªéj·ý^˜Þü³Ç:éÔ½å‹eþàÕa '’P]É}®±‚/Q² p6³dm×»Íd- b6,Jü›£Óœbµ'Ñ(„K’ØñÿŒ!ÚR">©<NäQ,8þ0ió+—‰ž$¶N£¿ßûÇíŒÊO ŠW•T¿õ+“Á <èߟÓäÕ–ÓiœnóB 6 ×K$þÿëÚ-4±“‘@šº&¿mð,¼öMZ8]Áó¯Ó|óðùaœ¹šHJ:2%(³{YòéÁóÁ­1¢oËæVG‰uÝXRÖäü‡MÈé‹ö~mٌٙÂË$ÚB÷w¦¯“·A]<Ž;= Lι„½ Öž'mÇAëïŽ|x·h3 J>CPÛqçXÃí ²Lå(êÆ­‰ÜùôúãÒ8FU±Do^ûœgfbê¹F-¾ö>ú`ç5®7YyT…t¢ Y<ï{ztßÏ A"æcrÀoLZ³cîðÒ`b^ëbBîá,¹Í,j$&/j é½ùü<±ÎröÜtÏtzl¬N’À€#q¿>¿Æ4¡•ådïcÔnFõg|#ÙúÚ"’00ñ/Oºz8H¬²$ ÒH±û›Çhåaè¤"1ß¹CfüñVœ5ÕèQÀèAêqXŪ€[f ¯?–ûüqÑ+™ ­Ò.ôkÏ·VÖ’ð ïôþpi5Ò³iaãP<€Ÿ—1Dî‰Ø‘G ÃÞ8bK-§Å°jéñéŠ îö0 ˆ .õ«Ôa‚#„i*ûì7Å?,ZØÈX“` Çž $d©%‰"ú‚+ àQK­cÞ+m¸þî£÷ú`îñHY)¬8"ú#€f2¬NŒDÃm\YßùÇO’­Œø–‡? t™ò,Õÿà˜®‚n€Ú罹(ÑÄ䨖ÁÛÛ Îd`ŠŠÌæØwô5þñ9i¦`LÌc(À(»¿3íöq|/‘³HÉ‘’£.úN•¡M·®ÞXÇìnÁu–Øí)Ϭ’„°¾D},“}vÇ¢nì°y  +JNÖqh⬕"îÎ÷{oíƒË^ É2<À%È;Æü{ SKRu‘f…]MðÐîŒÃYñÓøÁ‡Ü žD€°UXNI#˜Yl2QîOØà¥qÂg›*vyyauÉ~frÊæB(IçÓ’FvÑzH¥]ÍSVÚë~ûc§Tï]C5è¯R9¿Û œn¢=JÙ5Àý°°*È$רâÒ9=1ɾ$ó2…6°`7ªäÐ8¬M™i ’ V®‡Sóý+0·7¤ÈXâðE-²›*JôöߪÅ$i"‹IJjÇ ¾2 ¤¡ØòoO‚æ³*ð—P48Z>LzÖìüheò¬;_´[5>¢í cJ¿ ªïB¼É³×¦58¡P¾ Û#©øáy¡ãÓBÅ«òÃYQ¥i#5@'Â/ËïÓœJF•’kºà°ÊE2Jf„3išÞ·Û\;D´„Q“¾…¤miB†à“·<üpv0¶¦ j©…ÙéŒæD²Nm„Ÿ¥¯aé‡×)ùh !E ¯ËnŒ-Ý´b7ªßb7>Gëv‘håF­b5¤üǦÝqEä,ÌóHâ%ZŒl¨»P«ûôÄGšXÕ£A`…W;ñ‹3E:&f"µýÀ‘k^xË›´%0¹b … <ŽÛßÑiZ$M’7**ñ.[.²¯rC€ ¯Múså†aÎjUì€æ/×Ó"@Ð ]üðä½g¾Q³’Ęó¡Ùy¹s‹481ÃcDÕp7ÞÏ,m§{˜dšW:7Ó\ø™Ã°²É`lb¬V Ö§O+.W1–ʬq }+¹eØŸ0«àU|q,sr¹“¹™ëK”—u{ÞÂïnMz™ fS¡ÀQº{áyãË‚"I.Û_ðdR¼”ðèòó*˜JÛ[j'È1Zó{á3ó¬Ù\ž\‡iÚ8ч"È`GyQß®^ÇËK;L†B^ƒ [·§×‹!ÊhàEpZ‹-§Ý'ÿäs.ωsS3!×1R*êºmt×]±¬¤5ðu ¾8_¾búíI Æãnqs˜PÑj”ä€.µu¯¥ü1¯ ^Öw’P¶<6HécŠé¾c -áýB‰ÿ"ñ¡•hψ­+U‚ày¬²UC°O°ÿx‹;ºqš:H:V¼?Ü}~\iZ\©.·° G8„‡»mD‚H³ðÛŸ†–P /+ÑZðÈ­gf$ 3A+ž¨þ–æÇ–˜I–&$b ª4¥mÓ˜"•ØÈêIÚÇ™òãY˜É‰7©Ò7¢?ècÉŠy(覠I>@ô>Øbu`¦¨tô¾ùm€3P‹jP"«ÊÇøÄ†T³=j‡;uø³M®m]•„T Q;°ÁXÉ+ AÕµõß BÑ"Šr¾ ÛÞÅû_'ÏQ÷"C¨ÚªÙ '¯?ðË/†l³ÊÑe•J‚ôhj o¹òóÁ¥…›¼f &öþX0 £½$PÜ.ïïÓ”sÞ dÐñÏÝcPh‚ÕÄ줕àùàü·¬ZE ” æÉsµõçÞ8Rˆ 5 Ut7ðÄ£¹ ¨ŠI¹¯ûÃÊLr »Õc¾qf•J{UŽÇýà¡B «à+Œ'(0³Loplë]q¤+ÂÁÿðlhž¸LA–Ð%©aCpzþØ$¦lË!I´CÖ‡P>›ñ€fb@4€jù«°ã(hÌyƒ:2¹F¼#suÏ;ya ËHÒ—ƒ»PIR¼ŠãÓo,7˜xbˆÑjè NÞÃ|ãÏö³Ìùy6£Z™Aݨj }>XÇ>Yá®3i¬û¤€ÈŒ\ä]ÕpžÃ’R°k2– ʰ¾Ccþñæ²}µùÀ"QZ˜òÞï§AA d ¦Þ- md~Ý:cŸRríÓ—ǦŒ¹©&Ë‹®}}ñx;é©…‚h’ÊICÏøÂñÊî¡Ty7±aØN¥‹£ÃVz]o¾;ñåðãËŠó"0¥rYB¤ß>˜ ‹YB¨¶‘F·¬Y&Wo꨺ÄNYÚ4 +˜ØžHRtÐ$p÷ùbò·OÞA9“-9ÔÜxZ¼ÏJÁOèBƒY‘˜f#›¾·å‚—Ó*†$îT>ÇíƒÇæ#xã&TbSR=~¸"Ñ›6êܱi…Ƭ›ßìzàqÀ¥æKGÝé¶5¨päyeŽ'G§ À®=0%Xµä ¡G^£Ï.ü)p6YæÉIƒ2ùIôTS*#•ßbU¶5Ôœa­rBI@ÍZ´ƒCmè÷7΄ÂÀ²…xåô×O\!ï@Ó! eéf«~}}pª;“,BEð)}†õñÆgkT¼Q™]TéZ¾=9ƢȫDlG ž˜Í͸*ÅÉ·³¶øÍé|1`Ì:ÆOwᱫH° ã×þaˆ§Œ07`)UjñxL!‘YªÜ(o{Æš(X•îÉ9[Ûâqǹ®¶)6jòÚ¤rt ½õ¢~Æ—´¨Ä´Ÿ$7ÿó_{ሌj tHAánôp›v^S5—Q6\YC®–;Mo›ùã<¹ò½Føñžj¡¥ÈhŸÔ¤ !€ôߊÛX4êcHÃ.|;;]:2Áb e[V‰7åñÂñeÊOÞ«FPÀu[ý½pI~VÏ…lÂ3( Ëß§–†w²Cf·ß}±TŽ=éPm¨¯¯$¾¸œ†K1”S¹‘ ^©WÁ¡OôÇO lËE…_K ÜVßçeÉ5Ã{ƒÎØMáïµ,‘ëQ k#{¯ß»ÁÆ  ”`Ÿøé´ÈWÖ QB(QÜ_b´`Ú7êªóå_ YäH?£& @Ó«ÿkóïœW+šÔU1ÜÁl]þÜâBDŽ ê J¯@zß¶&UÄ^#M¹·Üy|6Å’HV@X‹³t=¿ŒUg…â:#ƒ²‹ã“嚨b ™zMC¯Ô_\QÜŒ¼°—[S@ë}½¶Ãĉ$‘Z£jmïòý±xFTÛ ´"ËdúV5C9¦DˆQª±á7å½áy‹>e„f€âדWñƶc%”uº"Á¥Ó¾ãË O `–] €¯óŒçF\º‡}HŠ®,öÜ`ù6Ug23H ¥³Ç·—¹ÿUÂ’C$P³çíƒÂy%v²[Hé¶ëž½ŒÚF—,ÄVàt²ß#þâ '¾XW`@ ÷÷xÌ¢*ÄXŠÐßrx¿MþX4qBÁAr\ Þamg.’<º]”-›^ø°‘%ƒSÆ1(ÞïlZNçY€c`4©4vž¿Æ9Üw‡»FÐ ‚ £·ñ‹¥ØJ JÿQ¸>ÝOÏ鎒(×RÆ¡ Ô/ö0X@̶­$Üñÿ¸¦f ±É%±ðÙeåˆé_\YÙÒ9–^àøT¾®gËH’EJçpFÿwx‰fF‚õÝ|Ž)±#,QÍB´ô¬eCäaŠ˜|ÇØ`UÿðD¤ž=~½0duý%nÁm¾`à3Åa”,.ÇËØ8Ë~%ŠÃjŠÞûá9N¸€mÈ"¯§·–)‡ð†Þø'÷Åš$ `j5ïgl¡¬ùçh£!H!ƒ>r8òš@ Sj4/ÈúbùÈ塊²í „²t ºP)Ô÷dUuÂù”T ê”§Ué#Ìž•þ0ÌÅFÉÎX ¤(_?딣FtHÅù ò8YW¹[‹OˆÑ Ù;ù`‡1¬á„šàí醈J,¶oÿ%6c¿A––$þ™SápM½ù¡^c®WÄ;¥)5¾ÛÖ.‘„6ƒZ¤ñ(Û}ðunçY¶$ŸÓv=ñ†þ’E¥Ãlðùáy¤ibØIäŽÎ+™už€ *ø±Ž/Q£Á½Yà`DÊJïß"‘[Ñ5dÿ¬9$qM–X™+PÜÑ»½¾½pÀ…(Ä‹º+çÍâÚZ ~«Üz k>™½²¥ËM•”À`Þ!Á«ñÇ\Qd@±ÐöÃS &œ¹*©ÀÛ\^¨Q´›” áU´³3÷jC•²Ã‹'sŠfÙbË¡EÕ[j&É ž EH¥Tx‰«ÐyáYÙô:°µj_󯢬ìη*" 6äÞàïóöÆ>n˹YIk»*9¬zì<&P«¨-öÿ˜Í™Œ’©*îNÛy|prÉéï¹³—Œ@QŽ’+VäNÞXóý—•›ÿÚ?âùs’ª&S<‘e# -ÖDïZn8þ ŽÿþYßcîÈh²òˆK=O™¿N9ǘíBcÿæ~ÚÉ4,?dö|«!aâmsÒ£p u²zƒé?©ÕŽü<\{7Ÿ¾«ÙTÕß'ÎþøÁ“.%DB¹7õ«Å2ñ" F^ Øþ0è”5QBvª×3\ЉW{P4¿– '1Õ cÐYãïüà’$(ÀèV‘Á&¼°¬T€§pÜvvëóÃáiô’9 ˜m±ßy(`¦ª°ãŠ&uŒ_ÒFö:‘ŠHÄjM~çÛ©¤™èáˆEI›ÞºcU“9ÚoŸ‘Yƒ(Ž4 Tcƒ[m|ÿl8¬¡ÂB¬ýúa¼’¥™«<¿,ká(rëBE‹›½ÈZû¼JL;ðF– ½õ}ùàä‡.‚•CxCzm„ä êÞäíg¥úà”5dTd2Þã¡ßëÆ2å*Ë!05¸®¦ý°ôfÊ7QD1gé× •„Æ;À®H¦ØŠû¼®5Dzª:™ bJƒ°ûþ0¼ýäu©l“±;ýpÁj–”„\_‘öÂòwm;KuM@(5WëŒÊª«+FR•[q~‰=OË eäg¦aEFä ¯?|BÃ’¬‚¨mÇ\2¹aFScNõvo ]†x¡ŸôµÐÓú€ýº|±I3LÖ@³@©@÷óÅe‡ÀUA²*ÀãïËïáW1ªn+û¶7ÎX<$ÚiØ ©;šßþ`ù–«²çN•Pt3ŠÇ"I¥˜ ÛUebØöw‚TÏlÆ`÷ˆà©FØMñòçLj®£wZENæýŽ5N^$up¡ÈØÐ7|b ð¸ÕV…• g~¿:ùb2s ²3*ÄA®öýÖøY2Y¯Ì€$´’¬Öä‹¡è7àq‡¡=Ô†Yã`®wRlƒ^XÒ6Xÿ,C–:†‘ÏñŸg»Ë~üðW-ÙÉ ÎTÉ&ˆÕt<ýÍü1LéÍ@e–(YÁ[P§Äv¾6kÛ*I­ÐúŒ»ËË•Z!€Ry±× ÅÏ—+YÝšÙ…A&r‰™C4LÀ•$y¬yúáëYb] 4tÕÍuÿ¸¡ðJ4è`¬‡Ðì0a]µ "Ö\iãp·{{]ã~Š Wj$0#Änìo_¶9¢ ˆI±Dßžýäîb“kØzã:I¹ÔAþê7ÒïåƒH‘Ê¿þI½,´6¡þ°¦iØ; C]Ý|1ÂEª°«ßøÂèÚÛIfpÀ×_ßž3§ Æ+Fä#H#’:šùá.ÐÏ":kk¶Ò6ZàƒóõÃ"XÌ )RÚô•;zÿœRV#–yI@Äð8ÛË ð# DÑD󆔯hiªªÝG{átÊœÁŠLøŠI´Zw]GÄ­UŸãùis%‘]B¿ªõ¯Û燳(LE¡ËÂÒH5[ŠÒÇÈ|Ͼnµ¹åà;K°JÏ>c' ‘ÈÀ€Ñ“jÖ-É`W¸óxÛìùåŽ4IƃTYŽõë[^=!É"!UDb¤ýn¨‘ý±CÙ¼eDq«©² 7ßÔŸç/¡í»ÅÓòû¦V]ÌP4’Û–.Å_^¸ÖÊDÅD#w±Gßæ/ý™2 ¡a–éWe~øk-—9RšŽ£#A&¼Éõøã§6^ÜùXe!Xµ¹EQÿC{¢úî Ð]Íõ‡Ú34izM ˆùaÔËf–h&ìÙòãLèfY‘˜´&õª#KרAäuϦUxP"»+ ~–$ßÇ|c.[,ÒB¡ä Š&ª¯“ÓÎý1hœ4ÈP„JÇû]×—ˉ¿,S2¨]˜罋Áf-Тi]8¯ÝEVÂëýà1ÄÓÍ4Ž„à…o>„|Ñ0hJ!E¡³âñnO¦+›–<»dPF\…ÕgýŒH'@ÅØ@Q?¶(')´¤U]@)·zoÉÿ8¸Ó*›"è!ÅaeŠ,ÂKß-w¤î.¨×®ØÅå·$­´ (w¢!FQˆƒ]GñŒoÄ9˜²pJò9(Ø ÊõøcYY$Òe5Y@NÞÞ½~Æ2;E­Dˆâ­‰"¯…~ø}Ñœ#$lÅ•Ô4lñæ>{aâtFŠ€eÞ¾úa<žZ'ñàRã¥~øbIb_š IäÝ^ßs“'n›¾òfòð£°ÒXŠP šÕ¿°8Iÿä{>–Xܫ˥ÎÇH¿Õ}vÃÝ¥ÙG5ÙýÌ(²O³)&¬î7÷ÇüiØý¥›b°EÝJ¯GA#BÕ1 Ô6å¿^‡ÁüŸWŸ£7Œ{épõzµônÎÏÚ…$˺ºódq¿÷ç‡%XÜ jψŠ6:×–>_ø&v›2KÚ uiZ0UK ‰#Ôtºª06( }*rƒHKѶ+¦÷òþñÛø¾¿çá¶c—ò=ÁË%4½ØWPª@%–Ç?Ö ç»ŒM>4Ÿ~˜O-!HôËB3¹.ºz :¬¨É!7à–> ¿{½»MíL¶N&Ȉ©+( ç“[‹ó¬¬(ßÔŒ!“· 㦠•²ò”dtf27¥#¥r(ŠÀóŠ Â5EX'Ìs÷ñÅ ´Is=è×Á+FÏË Ä€‚ÕH «j­øó¼T±![š+ªê¾Æ †Õ,2'}¼Í`Ã(¦—M¶ÿ¦úž*r¡ž£VÔÜÑ8²æ `¬PÙ4,¶¤ù•|‰Ø™;М­€z‘éXÔŸBß¶ŽaFè GŸ·[À–—. 3 Då·ˆåÇŒQ#j<ã»”‹ÆÒ`l]ƒçüãP"v‘Ä@P ~ÎÒHŨo»³ë ) †;Ëþ« ¹Q f}‰Ö¡NÝF,Œ¥X©ÛÁ@ùŸ2|÷Ä4l 1š]V´8_çBPÚJ—±eyº^ $½Ø/¤‘«Â懾/…ò§wùiQŠ‚Îµ¥¬òjý0Á‘&»°A=O_ñŠ¬Ú¥Ý¥, ð úb5FJ¸ÚÌ_ÝáEÐ<× T(¥i˜ò oûâÑGĹòê?ÛZÉ ÉkÚö£æ‰v¢£Gaáß§Ç1Š=D’Þ"û›ê~ý1§ïrýÀZfFü(m„ÌŽósªü `¹—} ÂSJ›?OK;}0wágÙ,ºÌ²+»Ú€ã¦—óW2H컞9®6Æ”ñ‚­ ¸SV éÇ8^8¤›0K0e¢‰Ø_¦(ª!(½—V¢/Äv±Ë$ ýGûØê<ýðwŽ…ºb6;?ù„såÑ£¤¾«n_ «õão[ÆiŽ2ÌæU@‚ˆ­Yz{]Þ:Yb ó@"“P Àê¿ qD^îMs2ȵ¤ÓëÇÇ‹³u\BIX^å¤$¶ö7é\|±fhG weÃ`SÞ¿|#FÒr¤¨¶°þ}}ŽîHØ–U$‘åÓ Gò\•A b¯ÌùœK‚:c*y¢oI¿®"I# TiŽÄšÁ¡…Rä*§ûG¯LpX,¥,p7@ý:bM²ÊÓ™t­øþá¾GFX »Qãq¶)§¼Y²ÃpWn?|1"“Bo©³C|+B{‰C1_ 'Oø«ß,yìÄË0 ¥ÉÉõøõçÊ´†—î¯~˜Qògó5BÅ¿M BùÖþ~˜¯FetRº ôçl9Þ„!‡‡Ãeªë®/XÖŠ«j`µ[_–,ÒBUDzIý@‘ÓþuÅ"· Œ¿ X½ø¼eÉJòÆ!Ô]µ‹ç|;•¹Ù‹UoÔâ¦ÖÑH5ÐõmÔüñ¹ÔbÍ)¦$ì€.æ·m5çï‚™t‘ô *‹!n¨úÖ ÿŠ?° ]ÉÜØæÎÝ1\ƒöVm,–v)J‹‘¢mj¦ÎņÄíÁ7dŠhÙi¢‘ ‰²v Ù>gኰœf  Ü^«tàâ’‰2šYb3‚×á`,u瑆¤)+݇ä]ý:m†'w%¹wE‰Ò=ÀõÀÑ¥W’9  ác¶÷7ÏüÄû@濯,]×ÿ“@»Ð­Øž¼úbý ¹‰2¬ðg#J«l/Ö½‰øbò!y{µ@P‚è´  ù‚ÆsK¤»£­îÓð®ƒÏ|gv|åW=¡–ˆd'r¥U“€H$ïÓë‡4ÈG˜Í²Ì§b¾Ǩ­þXÉ+,3¬úÎcÁu ("ýO; LŒH$Tk±uÏÞØy€’0¡ÕEjÔÝ:…¢ìà³ÃJî¬u(cavÚ‡[òÁ—àû‰ªË—) i·ÂkI<ï_‚FshLnJ•Ý˜Ž”ooˆ84ÐJ/¿TÐEÞ#¤us-–Œë*vÓú‡§–ßT^€ƒ- "Üš!˜€÷ó邘äH]b3µš'{#åŽXg‰c.ÎZ·þßoO³† $¬&‹ GMÍüq¬Á»KG–9‚“ §Ë¡ôã ®UŒeM«P#ÂvßÛcƒjÒƒ» ɃÌfUDUck±Øßóóøa߀æaPªvPVs鉧v5c̱»>üð›C Ì„€!RÖö@¾›âÙQ´ŽÅˆ b‡ ×-3,‘´©<$0‘ihì}vÄ%ÖXiÔäÙºû8®^[&ˆ ¨!Fãpnùç†%£Þ“á ¹¶Õ\ýïŒÎ5ÌDÑ– h géï¶Uïc¡µš=yôö¼&Óæµq„­õ‚ 5½}¾¸^VΜ¬Ï˜Ì*Fp(ÓÒý+œWµàWÌ"jEu 5) ¹®ŸLCeäΖge‡‹ç€¦b !F o°@ØòN,ZD´ŠZVQeNý~œc ™ÌMý!8¢ËUÙýúcxŠæ;Àʈ­ÝéruýWó8f|ÂeÝ%¿xµòŸŽ4Ú­l" DŸ½±ÏŸmðèì3Ÿéű M#’Iøo‡0—i°v%‚’ãu gn˜ vž]Ø óB¨$i î×åb½ð^Ñ .X®²eE> 7;õŒð»ÑåÇ åfh¤+$¨mK<ï¾ÿ\/,ÿ˜‘×HF¥ =wù†1{.<ÆbYæÌÁ* }Kq€¬wý'–ë{W‘ƶ­r²„ B¨«éóëŒË³¶¬ö´û=¿6ÆX!%!°@zó¾_ÄYi3­ÙwˆC+ ÕE¤ßI4 Øò5Q¢6c+,vsÂí‰-H ©éDpAc±ÙdOÝžŠ¨Íjéã‚GÓãŒú·Ÿ/½9Æì¤{g'ظÿ!ØYv4€# &¸h‹ô­ºã² €#,­n˜ÿh£_ Û¹Œžj)?0ù‰œj?Ó j«qGȃ¿¾ ’ÌNŽ…ÁG#`ÖŽÎÇF<\9ÛÏlÊõrã=¹½=nQŸ5; @§¡!cŒjw–Wt –j¾kÓÛ Bècd¹IÒ߈oðÃê"ØÔ‹É½¯“«Æä|îS·ˆw¬®$‘ÍùZ£P%ƒ¸ ­ŸÎ°cG.¥çŒL²eá‹»«Ä ï͉Üm~Ãcèa–uHÊİ¡¸µ·=8ÂqæÏtÒ‰K¢¯†Ï=6Äg3º2zÕgTJ^¹>[‰ÆdrÍ&mÈ#E#º,Äo{7éÆÇ×µ¨v'‘Ê>”PEÔ[nHéåƒ(ËþM£€¨*Û’(êÕ}}ñ˜óJà6¤;”Ø0Ý ¹<ó† Îåÿ,Djì‰Qè}v鋊½´¡•]t9'«7¯.˜*»˜ÂÈII>`{ái] Àîõ¶Ø‹çÌútÁ"œ»- í¾p°Ì‘Þ•W wÔþŸã O““@t†º#€z_×üÌLÂ=Š€H¡^þÿÆ,d†B;âBêµßšë¶Y!’_iRwÞÖ0gŒ–i*È#m[o¾˜±’5PªPï¸a¿5Š‘¢RÁI ý§€ÞÛ °æv"»ì=ñѪ™{×Q!&ÀòÛ ÊÞ†"0¥fäï¹?¶I ˹35 ±Cß§¾3.dLºtº¦¨‘µ‘êza-q¨+$‘¢¨$± Iû# ã1#˜´‡fÒXøóêw41Ÿ#>™ ªtÆ4«<Ú·8Í1‘ƒ ²½*P=}ýq¡ L#RÌK05á±\ïŒøat•ž?Òe5`pG#qDa–ÌÉ4Z飼¿óŠçÂÿ.Ì$}ÊYÜØÜ_ùÀwŽ%îè5 ú_Ÿ\V,ÄeÀHЃ’פ?,ptI–ä°jˆ=8Ãé=ó˜Ã¾‡)¶¡j»Yâµz‘ˆrÑF’4¤ê"ÈZ³ÓoØbËÌ ¦½‰$íåï,Je¤ eÁ#u$ñµlzl?|kÀò“¥Éªfe6 €ÄРXy/'ýã'Ùë—c‰$,I2±ÔÌÄÛ;¦Éù×ca`‡0ßÕ¦RÚÛQ³îhûW® $ ª„ ÆÉb8Ûƈç˜ êí¬j>Üᔆd_ê0½ã¯øÇD‹ ,ê€Q*TÞ£uåÖðÌG0#.Ñ‚l»zy`Á¬ú–<è$¶oͼ¨yaÞþ=!i¼MÀ½÷Þ¼øL\å Eyfj<ÑÿÔLA2I!:BH+u±Ç˜;àÆ´v™ÊÈJU#û\u.dÀ’w xÿçË‘¼A@j º¬ ¼>þDQ*­ªËi¢Ýo‹@1ȯ©‰bÃ`6ÿ|¤q[^çq[÷¶2êeqdéÒ ûí÷é‰*új@»7]Hÿ8YZGF«PÚ@£À?@Öª$Ø“÷ôÅâŽEŒ; $‘⺭ºb…Yl„$!:IܯŸýÃ"*ùv/«MúA>Ç&¡a@ѱ[“å†bH™ÎÄÀž–ØFbXI'QØñ·±Ž]NƒH$lT=ý0`#$zN•¥¿ËŒ-ŸÊO•ÍÿÆÒ"ÈŠÈEXëþÖ0§Œæ §W"¨ø¼nön¼ÖTˆ!Ð CU¨¾+¬«“’G•”31Øž<¾Æ4û‰Ö71ÈÅ•êú *ažHºpI±gÏ&±³ …ò‹%)vî±™ÕÂEÇzŸ—… Lu ß‘c­0Ïåu…¦áIbO/ŽEÓÙ­ï}=·¶8K¶–4@`KqGpœX4 ²ýÂHAjªß~/ã$-,¥¥a¡…ƒ½‘Ç׎€$5ÞÍÞ*dHÄQ’WÂ;ÇßÏ ZUU†¶b"hê;ñÔ{àqÃ1Ôª,µn˜y#Ì ü²¡vÞÛ“ÏË.^}"Ѝ&ï§ÓÖ\˜rÍ Ð”’kz£gsÏ5„Þ6ƒÞF©šH­ö†6³9^ò?êh†ÃÁÆ|È”j6Û’Ð>7úã<£R”jŠS©u+ÔîG^yÛîðáG¤!$ k×\vP¶A<oW“·¶6rÙdQäém `/áÇ8§k>,¼åYÙH <6j°ÚÃ@€llFÖkŠÁ¤Y$VHâ!IÜu¿ùƒ¤"1n–Hºâm÷厒tź_òí£FÇ ÐçŒL/k0êEÒÒvoþß÷˜É eÙ¨*M‘geÝà`ކ°HZf³éû`°ËÑÙ•*Âèòǯ\f˜9Ãw6„ÕÝi>Wå¶4L]ëxT¡BýM`ê‹,znŶÜùâœuiE ADUmWt>öÃ4;¸-¤ôÓ¹Ã&JBe nN÷C€zÿÌ5•R"³ $.¢jÂü<ë¼3¶'-0î:,k*=©X Š"=Eb±B™×PжV5Û ÁQÁPaÒAÞùøà‘¸"ÎâöcÕ¯E²³¼À‡É˜ª‚MùQû¦asSݤF;³XÓ¾çoÕ\|pçx±È°ÆŽþ@G±=}1UkÝw¾ƒ}ë¯úÃ>™A•¦!ˆ!zi«{`#0Ù”,™g¢v,*¼¯ÜíƒJÑ¢+ÆÐl6¯Þ±3WJ0,ÃbI¶øôß!ÚͤyH˹ @:BÙä*Û C—½HíeÈ*ÇûAóÃë?€ë^îM!J’IÕ›ê6é…¤÷À¢6 Õ@ÝyW¾1|µåòèÂÑìÕÎã…;ì<Ôªì#iä,5^ÌA,¡X¦#P#vò¿ŸË @ˆeî0Dl*÷'k'ežiŸ{;=þ¸%XR2k*—y•œ±%¯sÐzz`ÄwÞƒ¬7ˆ’xÁÅž9J£V¦Zæÿ·o| ¢§bêÀU0²qCýâþ’f++"¹PÕ{w®.ÝÑ…ÕE¦’¤`Šþp ¡”•’'* 6³§²2FñHK5Zõêx¿?LbÖ¢™! å¢ÓÀ¥UUvk€=Øb%dÝË[0AøbU/.‘Á!ÖúÐzàZ›Q38H  uò)TÂÙÙYÖöÚ÷è@<b8ËhÁ,¶Mí·Ýá’€!Ðh· ¦Á€²CE¶Üùãùû8,Ó+2ùŽÕ2S KœÒ›rl³ ­Ôl(WLjÅnìúZ”V’zí¹ûßpСUo ¾=qi „ n|÷ë8{cŸ»PdrYÅ7î½:œcÍ ÌæWÌÈZ@T„¢|ü‰úaüÜÆex(V*ªh[r'o¦0¥ÎË‘Iu¼Q EgEW,Ûš 5U}¶5àL£öªÈ™6‡(L/˜P¨á‘™KlŽÛr±Åí…û7' òwó3Í2žæGÌ!Ôî ˲¡CzÛ²åûK)í”LÝN®5FŽ5Æ´;S+XÔ:Øàá¨äÉÃlÒÉ–’µ’ݵ #’ ð|Æ1òØŽ±I2"ªÌ` o‹êvÅW(aBY" ­êÔ ’Û¯ùÈô$±ÆY£t‚{{æ®°îFo·Y% ¬Vàúݬ!ç»° ì“7þ7' Éß1™’\ܲÎÒÈ噉‘Ø…Z”P V5c̨­-Hbø;НQÓ¨âðËdÕs«!bx¿MUt ûíC›Á›+r2ét€8êk‹ù×Ã}û!ç3˜‰„º YÛ3ú·Ã#0eUÈ(Ýí°6X}õÆjö|£´Â$‹¡C’̘´om‰ãsé‡"‚a•Hä„«avU¿c~\ašÍÆ®[6±+$°Ähò7¿Ž_½â±Uk>÷üãrÑE´ÛjÜ‚|>ŸÆ4òó²º.vý£®ÞØÖ³`£*{,ŒI íò¤`b%P5wæÓË #–•¤i¥^oçÏÃùÆOiæÿŒÔö/eä%…šç|Îm£t[ýJН®Ä® Lƒ< &‡,]Ñm!›ÓËßÙXòÊ–ò0#ÄÍ^uÏ¿¶.Í&^If²Ê´B aw¶ûóûú`¨rÙžîC­Û,Ýâ[èPÄ Æý,óå‰aÍ,Q@ÑÄÎKlCYrFúHë_Î+ir¥P$† ƒ¿·\Y¦š.òxš"‹©·ýÈïçóÇdf9†FTe“rÇmÉ6*½+ô`pÈÁ³!C (©¡UòÃ9G‡I$‘H$i"Æ›® éw…&s–íq–›,æ âR²ÆžÒoIßby¿\h;¶ð Ð4k¡¿¾¸xÑaÕ’ ˆ™°Ò#6£n}°DwXØ[øZKä=pÞT@ 6•ª”ò}°¶eL DŽÌª7$×ÿÛüŠ¡ÚBaüÐ*Æš#s×~½xÂÍR¬’NàŽ—Îü`ÊY´œÈÔûÕ·¯æPf`îô ©[I¡¸¢çž§y jP@ÓÁçŸsõÁà1J)YÙò&¼ø¡å„LA#U«îÄ"·ãéÇ^˜žòH^B *Jžìþ•WÈLX´êÌi3‡u ,6¡g s™&üF’ Õ|j†)šÍÍaF£Ll„&…Õš<à±f[ÕúG+§¥žp­*ŒÍ%…¥-‚t>œý0Ám,¤9- Alçü #háq Û2ß|ú__Le‰ãî”’Êo‘D××- DÖ;ºƒ¤s~G¥^ "3*vS¹êGýۊ䔳~!gÃdáˆâEˆ)k!˜G“_ÆÕ¥“Q˜7 á`Þ§ 2n¬„xw=.úúã—¹ ‘‚ÄrO_S‹LXuw{µâŬÿˇ€—Wµ'a±ç–*ÐÈ„$”sÎ4rÈ.v*y Ïß–:\ºÉ V Š5µWËòÉÌF¹¼ÃG42¿Úä1ÌõÇI ¨ê¹˜À© ¤ó{‹ó¸qàPE°a¦¯|Ni•2í©,Ø1ßÕ})Idp@ hÊš OY–h ýDr9øáÃÙ¼ãË.f`ùey?¥"?öaÓØñÞÁìçí)W;šˆ,1’V?ý‰ëë„3¨Oiægˆx^S ccÎ5hæs\¯÷¨â¨rG¾’xòY(^Dp(`¨ÎWYá“E‡ÀtÅË,€ Mk§[‚|$ÞÄùn÷g5–þ‹¶¦@Õ¥ªÁwÉ™½²gƒ7Þ?å¤báË2“áçêpyÄ“ÅPØjãs¶ãÜá–EË‚¦o3¾+3¡Tr­·éí÷¶8ñ㜵«zÅ"e: Qf¡@‡pÂæa˜›(46€Š)mu[VÕ÷_<B©¹A ¶×µ>vÊÆ`÷¶c‘Ïö¸×açK™/vùg×&ÊyWÓ‡?ç’dXƒ)ûwþÖ®p«IªÕÃLà^Ã¥yúaÌCBÍ<}õ9Ôê³CzÂØEYœ6Ülúý0Ѹ*u©0ê ÿx‰–LÆXHtêÚ”¦,:N8óJUÔ¾¢G‡ôƒf¾DsxÑËþ`k@ª²Š¿ß§\(’Ãbœ`UŸA__㠜Ɨïƒ]Ð%…_øÃ ­v,vX’ÕõļŠÏ]¹C‡3®Q–°K è ZàW¶’™H°ùžµç‡0kÎf„Ìò,²FÎrK1¾9ã9L©G@µµý^žø+äR"±-€§Mî¸>ø"HUȳñãë‹v IrêlÒ{‚}|Îù—Š.îE ¡ˆÚï}‡¶ü»J†Fj#e£±r=Ž+,&õC°> À±uòÀiwuÎ ‹1Z“û‡"ö¿§×–ñ«å`$ð…c}~þx`A§Pe·QëåïÍÞdD…”¨®¿Lkl¤ ËÉ w@¦ƒ.¨`°Ç¦¢ t ¿Òz}ôùbÒ°šN.Áª®ƒEÒŠä[|Qjé^~¸-Õ˜—Œêm%²ÃHºø`Y€ô‘šY¯`0ÄÎÉOz‡!n«{ß§üÂm:Π I£Êÿ¾˜¼'M ÑÝ@¶«³P²»_®¯+%½R ¶£ï¿¦3@(5&´åÇÇ\ÂÙã ã•Qוã¢ÙJ…P¤ITJø…odó#wAµ¨I5('z+ŸŸ{á¾ø÷„mTj' >x§wÌIð(4$݃Ç8,Ó)^òe!TGS¤³]úy«ç ÏÚ]ܨ>àðšæÇJ¡Ç©ÃÙˆgYQQÕƒ‚w]ǹé÷å„s±Íᡨ1ªýz~÷Ž|ºo‰7ÎÈÊƶ”Hu¥¡éÒÏýÀÕåŽ@–RM¨]޼øAëíxªÇ–UœfY‚¸CÌ:üº{bÙ)rýÛ”Ì4§.JÈu(9ÏUQ#×jÊæ¦``B.Å•ëò¬hedÔ¬cQ:­kž:qŒßÍÂ…VHÈØW^[õúbퟌwý#ÅFµo¨õ¬ofƤ@€®Bîw 9÷€åda+‚/S‘dQ#}üúbaic­H Ä‹>.9>_ëÌ ¼Dí{ cÐ_AŽšÆF¾óKnÌhßüþiGL 7±öÂðžõ•?·NäW7Ó3Ni#DˆÙ¨l>~w÷±¤Û¨r û]<†:³ÛG~|ÿÞ!d!ˆ’E›ï:©¯òFÃYPE¬šÒÁ˜Ùc}}ñNÐ9ƒ<ÌW/0îµ ZÛÈa ò…ï3SGqóÞÏ>X}²f O v;!ÜvønpOÈ£ëŒ0:Öëôšç|UBñG›’¢Ñ EÀ$ýlqÎØ+@ª­¦0]›v'z­È}0¶D”&'ši^%:™ÛN÷VØXØm‚$ɬI%¢‚T‡¨ðóäã8×]Ìn$Œ+HSÖ÷ç˃€Ï¢mœx…é7[ïÇQ¾#bîÖ¤ƒâ4(uÅe‘3 cްÒH òôÿ8Ï9³•)<±¸Ê;©‹J²–z”oâ±Á÷_µ¤BWH(X‚Å—ÞÀßLHâ)Ò#*Š]J-A=>X¾f!îõ@Èúòzùyc|:\ò[.5åÆêUŽç Î†B¬Z"úª‰­ïï÷g…“* 6º‡êÿ¸1Y–àé[ ëI®vãE_P36Ä G ýÎN³¡XÌt)‰=óãFQT $Ý“a|ìõóÁÆY^0²¦ö ›Øî}¶Æ».$LBP‡„q¾|Øÿò£@¯Û °¡*HƒèCâRl¶ß·®Íd–hT2‹ iv£Uö1©*è²æ#–""['¯ÿSÍúb$F‘À]ŠÕŠÛÚð¬pÍ•.e–6ÀìÉÓìá¤í&F*t0 iR1¨ÍëÃ+µ¢QïLŠx$±&¯zùÕoŒ³”‚I$3˳±fw׎(U½xwã®fXÜõª±ŒIP#A##¼, b£Š£æq_Ò„"ŽÂ峂ƒh£ifõ` oÇ=qŸšiOÊA“lÂH¤2)xÖ tÐ'U± JÐØ¶E+4r„9yA÷a”© ~šâÜíç„3²`Ì$±«´B2¬Ä-P n¹³äwÛñÒSù®^<©W‰5# H´’7 @â·Ûžh2‹«%´ÿTåÕ€fSt.¶ë_ÆøJnÙƒ3šÊäb‘?3›å :`UY«M¸Üó‡tҼі@Ô,1,6è™#ü 3’‘ŒG5#9ïl(Ý4­šÈ#÷'ŠD‰TÚ‚Kt'cÓ 2ÿ–Ì#Ë¥¨wn¤íçåx"—œ¹‰4•Jñ‚¶ÝV½ºùâ·Êš‚Êä û~Þx¶bÒ]µ£ãå¿®ˆ±M K),×UXf<ÔlB£ÙÊÈÞ®¼¿|[¨¬$™ÈR6pP‰ÒÕÕ¬í`ñ÷¼iÆO|Ì£S¨<ùÖþ÷üa~íc{^Ž™X2çbÄJŒ]…“] éŠl³ÑÆdS{n6èvöÜbÙ 6™3 ºãÏ÷ÄÁÝ ;ØäRZŽÆ­¹¬_6Ñ´e@S+¥­†ÒEÑàséãɃ7Ê’hs~"±·C×€: ëŠç$Ë ¢"ï@¥N£|ùo¾*2r–š0À!*lÀ‘{[ùoÎ/NÈ‘wqÈâYc¡¨, ê=ÎØ‹@Á 3Z†Ã ë¶²+ž·°ëðÂqä¡urä3§,XCrvؤÙH{G+™Ê棸ÊïMDÖüÕØ>[aÈdŠ(Í"&é- #o?ä`¨òž—%—ÌhÍhGZ`Ö¤Mtë^ /˜…“T¬‰bË@Ñ= ¾œñ¶!2ËŸLãD‚tŒ)mop oŠæX2‚ƒw„ -«P³±ÛßoOLSM7wQiµ•áUî6ç›Þ>ØU{R93"¡v$\¥/$¨r}<°†O0„™†=óQ¢ŠŠÜ?ùaÈ#¡Yr’‰"ÔW¼6  Ûj;_¡Ã;a¤:å1„ á_êFß!ŽŽ_,òÉKÝD (¶fò[¯±Á «™Fî•B(_ß§Ž:n~xhÎ’D;¸ÖZ^K#°H5ëüã~f1ÌeÀ|Òëmɯ ‹æ÷¼^Ui!:4 éõ»{}pÍHÒ€ú‚+qÿ±þ1V‡LdCïD‚MÞ¯·Lè8r“ɈÆÃ Ö·Û ‚ `ob=½0l½Ò Z CËÛË0²Û ‹CwlôÄŠ1œN3NE—¯^£ÿÎ äef@ÊTëQt/séÓlVY;°YQµ¡ ›Ü߯ŸüÀòGT¢kï i =6#nlóN཈• ÝÂC› ,1 ‚’(iëþqKHb%C€l«Xö?¦9” `øˆ ž=±axR˜á$¦èâÍ"D(±<ê]…¯>ئƒÝéÞ‹= Ý/\PY¤‹‘LªwL+À©eQˆlUûâKψÎFãÂxçŒjB.èÑ¿Õéx¬²†ÒÍ@¾×¤‘ÓNy?üFtîIôÛŠõ¼&ÂZw,äè$Û(8éwë‡t¼“»¥)“ÁøàY‡h£!X+dyŠã©æeDµÚ±³åö~sò™¸ç^3¸âÅÑÃR($0‚¶c6} 5AcW[[bòžþl¶G·² —Í&¸¤Øï¸?ç(ü„Ñÿó=€¤Èv\‚õ¶¼Ó4JǃH$$s`í£þ•3¯P( Õì:ÄÎåòÄ}¡*ŒÏaªfå‚f»'ÿò>ÿÀÇ>{™ûñŸ/VòG“ȺeÓ@D ¼Û÷Ç”-Ã{ûyõƾnHÎ^XT†V ¶9/ßáç…rùGb®oºuP»ö;hK¡ÇŒ¿vÀƒš6OÏ¶ÞøÓÉåeyŽlyùùàk—ñ‚«Á­¶­ïã†@5©É£ä}>ùÄ¥W0‘²i‘@B»°½÷þ0”èíп¨’ ~ÕÏÃM‘iä:À!Ë JW]­ø<&ŽÛýŒX´¢f•A.nŽ’zއïª÷¤'ƒçÓ|"ñVÔbzõóıFF¢À), '§ýÁò~JèßÓ(kzÿ“…HFÅ&0Cx[Ë‚vYh3dUµ…¡F¿sï†În5Ê¥²~•jýDÛÊë%s Q‘©+nÛá•£ fÚ€T}íöqµ‰ÁÖ ßéßs…NU`„hŽõã¿Ò|þøÃ3'ùG5&…§]ÔšÒC‡WBåT£ôÕŸžd–6`Àê&µ_5½m÷óÅ¢&RæCht×›ß凓 ³¹=Ø¿‰O[®µ‡)PÁ¬¶ãQ䄤1ºØcú¿´Qªøà™)c#¨d`£ P£‹Ê50ÔCŠƒcŸ|$ñ¬%›QK!:׿8~`X޵)²HÛýà-‰äv$08¯AiXæsB8´ê—ÏlIU€ªf6Ÿ\3¦5!GBÞû ÀæA#›ik7‰¹ ëR£½Ùó&M* .£¨–Púû Yr¨FÁN 5mÎþX¬¹ˆŒ@¨³fƒZ“CmŽý>˜E0«)Œ¯ŠÏ×ßœ/˜$0 ¨¡Ðv®:mûb΋ ä¶à^Ø›ƒ-‡õ1"ô×ïˆêd=ë, U¸ˆØ‘ïÓ÷ÂÓFDÏ«3 Õ±?¶Ã P¦¦pÃV°×|úôa\Ø:\/¨éRL(QßÏù? Æ®‘”W@ꀄenM¼7u0†OÖ7aBëVÞ~ø‰ó–2 "øRÙˆ:zñ×ýáy5ÎkŽ42B †ªþí÷ÛÓ3댉‡…c¤Þ¡ÓqÐùy`9|ÑG(rÆ2­¤§pG5ÓÒü±iRÀ™¨mb×!Úö>çŽoÓ ÷Z …ï¬Ðy(³UÖÞ¾{m„9·§ ãF5¥ÛU_÷Ï(1Žðx·Þ€µW°Å‚͘ÊÇ: ,jЯßËãˆÍ…Tì¼E·"–ü?#‚ÍèËŒ\çeÇÚ€´’&ñDÀìƒ`9ö±µâù~Ìž7(³J5m%M› >gÏÛPÂcËÇÝ‹"ÉPH½WÍüÿÖ"xD"DK $P$‹ÒHÝvÇ;Âynr¹9™Êf³9Ë•.¢­Þî÷óõ+ìÜ’G;Åùùed¡l@U4=:õ¾¸Ð—/('RÙ]P9Þ¼Éà=_,IË ®^\ÀC4ª¥€E6Ìykøï_ fLòÕ¦ŸÁr¬´HVm¿JŽE‹ö´± A0rÆ6t‚(ÝtÀA–õfX¤Œ‘fª‡5]07Ϭ€RÈî,ªh(< ­ÇøÆ§,g4̲\!˜V<Ë4X9@F’yãs]0Ôyžî4gubÇH ì Õßn¸g)YöØ#.…Q¡µÑ<|¸Ä4¦MaÀRX;Q>XˆI¤#ª‰'kàP#ßÌæFYg}KÊ©«6@¡µ’O¿^0ùJ‰–BeŠUuSE€Ôp+ÚάÀ^«¦'ûxôÿ¸F-9uH#oÛ0£¾«ÜØ¿¦Ëå«C4Šîæ¸5u~Ûàò‹ærÂ8‹¹.UYŠ-l7õ­…yâš£Ì  . ‡½ØûaÈgˬO8Ñ!6 © ÄlÇ•ÖæA@Pi ¤°ŠOQ‚µBòBÆd¨ªëÛðŠDQuz vÿXVX;ˆÉyLAr¼ÐæñóÏßü³šüKøö>Âìîš>Èü«HÙéÔ«4ÃU"Ž`¤ƒ¿‹¥¹g•ǾFÌD’OÞJêXª¯kÀÀ9€Î²ª*ŠšãP".]³SJd|5°±ÐœevÚe¦gcwIaZ$ …·¦þØ3óÓ/%›'ˆÎ ´Xq°ûßdæ]ÿªÿI=/Û$Ì‘*åçd(ë¨^Çc@ô£ÅãC- í!d‘PéÓ¨ŽG‘¸8òµr˜ßI3¢j:M¯žãæ}HCÙPnÆ×Àþp¶^VfÙ4ض$ØSþ:àÅœ(hÚÙ—s\·?}1Ö9›‰Ž¡á »i$›DŒ|ÜèTÒ*üª°œlýÚ2±ðµþÓ‚w…s „jDpO¼ 2ë7*±ÕªÛH±{>ý1Ï“€SU…$¾lzù0‘‹CltŸÆ:t˜¤TR@¢ª6õ|ðŘU×3+Ty‰¤–u j# ¼½ ²¬o–ð>ò2î4ícϨä9Æ„Ñ,@0«f¼¶}F#$Ù¨Éy(ámTø?çøe—˜ÌcÒñK€`AýßÚfÊä"ÊÈå²ÊHd ¥€bãK*n‡?˜Ðí¤9·n÷/aE‹Ø­ì ýqŒ{.tB™)ž4WïÓ`ìoŠ&Èô?e¸–Šc!…L…KñIªÇ†û ¹Á»Ý0,–C3Ùð&P eT d2GÏ»¦fÜβPHÂ)  $ß"½ü½ðh»>J/ &RX…P8o·×eÕH‘~`í[mêlନ¢(Ñ7^¿/ß‘›Y@M·x‰a¯f#céþð¶g0]Z‚;O„Þß-¼±­0mõŠÔŠG;ôé„=Nñ’£údÒ %¨Ý,6|)ö{³'i GzëX‘,ÁrèøA®=6ýñ—”ËE*(dPçrj¨y<²~_2rªOrT2Ð6z6çË èy*ýñgŠ ¨H-#°5±°üñ¾3s1¶X¤”‘…'V¡Búí×be(ò„,I¶§}þ_<ÚÉÕÝp»@¯çQ‡¸à1±WïÈ`vÊÍŽý8bcÌ;I ‘J«H#O;‹¿A‰xгH$!.¹A£dÞÔ/aï„ÿ!”¤–yÊÅ£  I¡°¾¶IóÆiòô°³±ɶk jS|ûWJÄE•eÖÊK†#J@ÿ?_L+ÙúÌqÁ!E¥“ÝîÄp@½‡[ưŸÂ‹$ª°ÄÖÛ{ãP^‚xçM*% ŠŽ÷È厇yÌŠ´MñÐloØ|Æš•žDS)QªÚ¶­¼úü1xÕ”;ÙŽ¢A¢Z¶ë¾×¶/Ú¿KÌÏZÔ÷ŽP¬Ô+~aŽËI,LЕR…«¡t8öÁòñå1˜m*Ê ,ÜI6|ºàp²‚ÀDé§Á ©_'ÜßÂñ»~I¥ÐL{¿±õùáxóL³XŒ9*('k;Yêl:òB¥—J5{ŠÞÇÛ×!SÜ -›½ï›¿ã‘fQ¢%XÜÿõ±Žï±îÉ4@?ýÑa€.TÊ‚h©½è‹¿?<^%—@%w4k’ÁäøITg’F(Ui;[›õ¿¦Ñë›»A ÌE‚kÿŒYäb A(m‰Þüü¾¸¤ÒU¹×-)ÛpG§·í‚-ÑZY #1&ù úß§ ²‚¤8»éôÂꌯÞ~¢<&Íß;`æIÓF W=+“‹S³Ë 6£ÞUj^TVû|°( Ž2^A#‚(Ÿ/ù‹æe ÆäN¦°®=kçÎ*±¸ŒjSZ®—jÅ«¥a™™gºÀäéçŸçÓ×h^fJ$+Yfn8ôûß ˆÞÜ¢ƒá;±ÜYòé‹eûAP¡­`“dp¦¹ßÏóEã@]ôªòA«=ûÅQÒd1ÆÓx¬ò–Ïf]ÓCJ4ÊGÿÜ3RÀHP phÛëôÅ$WAÏE_2KËD5èG7ôÂ3˜˜ãr6 V£|È­Ç v†©'+;ÛÜó·C]+ OjNä÷®ûs†çÊí«Ù ,NýÄš\ ¾:záÅRËjEžWîĹ%˱êÈZ€ôPäùmÍàß…³"LÛÅ$‹hºÚü?ˆû_!Ú߉r½‡–™_3 o3.’4ªÒ’ Úõ:ì7Ç+d²VøËwHïH^‚©­ö6v? ±£‘?ÓÑÞ*5 ;Ù8Ï\ŸvѦ«eP €jJÃùXŒA#Qn–w ecc#Hd&€ðØïjçŒݘ¶•à‹z‡ß8<‘Êc •’JÖÕ°ýðnòœ’¶oo¾?~q XË#¥FÛýhsûar³ÆY_AV:¬–7ûçÂ#!c4KUÀÿxbOKe¥ºßá†ETΙ/Q ¬tìyûö°B òWHC¿‡o,24Å•Òv ¥‰ÕDoÇÔúV;%–²¼’2¨Z'UìGÓ¦øÍšw\µ ˜“²ª´“{ÿÜ.–N´ºJßQÉý±-2­ —p¾½O®$+Æ¢È"îÛ}–e ¢ÁÔSû°Ä÷ðÌeµÁžf%‹Z£Q– í‘™ªŠì/¸¾¸“OB»'Nã`oo/ß“¸€$-†€>žX[7hš4T¨MÇ¿?ÆÍ:$.ìÆÀ8£ÓÐe`6 ¡ˆkè*ëë‹eû¦&g`v¦È¿kÀ“(È‘»ÀÊ '`G®Ûyaq ùPÌ™(šR5Ð Ø|vÃ/À±½ªT€ËmÀ»ßùÇ1Öš·ÿØ)çÆA¨žì°XØþÓëÇ‘™›.ä$ŽB<Ï–2|ˆî M±»½¾¸ÁȼټÛ¢Y&•Ê—c±fªça°“°àÙ¸óI$3@ K,dYmÀçjï Ã΢9r$«Â)ÛÚ±ŠÓ1“ì¾×ÉE#æ#ÌeDÁwb|I_ܦ÷Û|Vi¡Éæòð©UyΓgÄËV7>Wò7^Ó|¬‘ˆ ª¹d*G„j¨5½zuÂy€Ÿ˜Ô"RQN•¶–±|ííõÄTL‹.tf² ¸‘t«t·¸]þ§Še™€bÀ¡"€:yæøéïƒEát|¹!6BRÞ`U›ä0m9XŒŸ˜ËªÆ°X€œìÕÐá”gÀy–a–'Wu¡Y¶]_/s·\/4€ V…ZX;ƒá³åvqlÆUs®¡s›…“ÀÃæëÓ I0„H’¨l[ׯŸaÞÑi$Íwlª¢’Mô›ñª¯ãüÌYˆËM™"pmÈrü ëåXbyCêÍB¸,Ûnk­VÌÌæ»Ü³À:iH‚ló¹Ån¬°Âi…d‘5¸Uµe°æèrvô0¹ˆHÊ ¡¤bä•!FÃnk`@ÛŸž")µ SÝÉeCTǑ‡0™©"b‘˜Ü;¤„ö7:E ¨WÀã6|Ã/ØÃÆÅ%+úØ©Qâ (è>gi‘ä>:«¶ª H4<×;u^If’,¦„*«°¤s±£^]=ðl¼qÇ©WS %ŠÞ>Hÿk&úc“~ ÅI2ú‹©%‚È ù­¯ý^_*ULÈ‘€]*ŽË~üŽHZ 4×H#‘‹0 x‹$W;Ñ7†‰GcjNÚˆm«Ÿ>»}pK~Ui®d‡žo‹O&f)Dêìñc‰N§'g»²^Ãa¿8ë9lbÀò®söƒS„ŽÔ®†Z£Ñ¼Æ<¹|¨b’-êXµY$Ž¢…þØËìô Îæ£Pï4Ú -á]&´ûrO­ãJY¡d°@u $š ß7ÒöÅŒ¨á"UîˆÇÈô>XÀw†ÁP¦”¯ 7Å$ŠÛN+Æ'%@’/Ûsûœ åB…"’7’âM@”ÿó‡M¼ñŸ&r,–XëwÖ«ª‘Io:n΋µsïÚ/k*±e'Ži‹®¦{ VÀ«îìm†ò“¨gnæ$,éݳ¨H@Ü5ìzaÔš#•šÊ¨‹#áÔã>ÕüÜzaïB¶•ez=<…úâcyW%$n’ê™” &‰<×4>qfqowÙwpÊöÐß><ñÅ•‘ÛQØÒt=>g ªF‘¬J€"¦Û ‡åÆ ®lLÌ*€ ×ÔôãxòØÇ(K0ñæ"÷ºD¢lWߦË”ÕbpAP [|Ç®UDì6£¹õ¾+¥Ë=TêrJãßÞ™ùS84ÔjÃÆÄ±,m_…ò‘,O¨ÌDz@®—Dñÿ®e„ÒŠMt l W—ùÁI F„±¨¾Ãn8Ø“ŒZCží¢MEŽš"ïŸO– ù<º8ž3)M‡øÁ¤I¦²ñ„$•õ ûùz`&f.ñ©%!A:MùlI%Œyfj÷<üO©¼h,‘˜Žµ²v¢A7Àãœc>¸ÿS8b*ÂìÃï|_-™pÏÈIV"ÊõÁ9ÉѼmí§6s)e%pÒoUW®)r¬wÀ’l‹çË~˜[ó "ÆÑ-šm€ ÖÝxà|°‚93EWBÛ©]Ç^\_LkÝô1¨â&B¥” ‹7ðý±yrbÝàÒu(؇žÿ•ƒÜsNþb)ây;ÐöÃu6 y|øÃ1wòàZ˜ñ·§¾øÃlÞaAï»°·Ó°äø~ åH‹37„þÜOlS’±ª©,‘«x’¶ þ_¿\2‘eÈ21.Qº>Åc*Ô“(8Œ `ÍFØoÅ|¾~˜6f~Ð1<Ù  ±ÞW÷ç=ñ‹ÆÅÚ7ÌJòLJƒ@oQ‘]?Î"(Á˜[úGé;úàqFdÒ¬ûêÊ€?ÕaÈÖ®]õ„ØÜøÆ´x/—*Þ0tƒU¨7;üùùàÙœôp¨.ÿ©MíçWå϶(dŠ@ ¿ 𫫝ó»DèØEAwÎ- —~øj@…üDƒd{≠Në/|IN»<^þ¾~˜ªærÒ3kÎÆýÛ@$€GL7¹W‰[Iñ¸³ŒîµŠwÈ&4H lØØ“Ål0™…³!VÁëçxîA%…Õw_|`k2²‘¡˜P)'žÎïˬ9 j]Z=nêÜ`ÞÚL–›Pøþø g+Š8%,”´nÖ9³lc °8A«$ôØâÕ 9Œ¬:SgI+4zoÓ ~NI»ß’Fw‘ ÖðH€‹,ü¯¾#"ù’£/¤ FÃiñ¨£¹·L02s]›'||nà ˆ?Ï?<-Ç]L`ZÉ_OÛÌ,ÏîÊiRÉ¿]öóÀåÈg˜‰bšðžTýõÅn 6’ÌåË[Füùã|$Ò†  &¾»ñÓüoÆ‘¾k;’ˆµÿMuv*˜ÕíÍŽp<ÞC´(4}¥@&ö.îúã×Ýøo $Òvv|f¥ÕL È`Tþþu…$ÿÂæÿÃÚñͦNÎ1ÂÈÀ„© r@êt(ß‚1ŸÛ½“Û™ˆ’Uíp‹ ‰æ8_§ ­±ã öRþíÞÛž>Ó9ÓÚRe4Gù‚ýË•¤~ìí,šH]˜…b.Éáo/ÉÆYÿqÖIí·_hÉ0Ì92+ ºb£¦4'v‚ ÈQ¤qg dÉx–Uˆ~¯Ûçƒè‘VÜî‹Dó[ïñǪΜ„ìÜÁÍB&B’3+.æÀÒh{±^ø¼2žþXt…‘ÏõmöpŸdG–ÈDr™ ºe¡Ž–5Œh@à´py²&f‹;¡–XÎälž^XèOʵ™)º$Yßÿoã&Y%uØU!µ^Äú×–ˆ¡dT¥ê Ø¬Rh­‰C¥€æ7 fI¨žN¶xlýþøœÄ*Å{¶ãf_¾sQ2ƒZH°#©#á„õ‰%ï@'H²IØuãŠöèT‡bᆺagôùo/L4Í}‰j·Ûï}°¹%ÇxªmÇ!¶:)cËÊ^@IrÀ ‡øÃƒÂÞ+ˆPlìóüâÅŽ…Œ’ç¢×¯¾ +?Œ…ñX zöÃ+ù„ BÝß$ŒÊË‘ZDï=¡iäŸç )|‘ô«ÈUFÛ]˜Á ˆÆÆ9­‹n6 }¼ø;`rÅ)•‚¡AÝGé³þ>x¼ô•ˆw3®¹,Q OCæ0f@WL$iê§®ÿ÷Xc ZVô-÷ðÅ `xƒ¬MR+ËççŒ'šË4yèdéŒ4Œ Ý“ǹØãC»2¡T£FøÜF¾§ ʳ~;Ó°Ø{ž½1Ù|Ê„eÝ%wQUŠä¼UFnNÌ®eŠã!·P»Îýq· ´‡ž”Ù²Z€¡ÏñXS)–l¦X«Ç¸ úuÓ…#€ªÈ\‡%wlè=ã>nÎIg2Æì­ªõ° ~½úý8Û •‹A“Y ¶A tĘ̂QE1¢zqµý0agÌgmô”jQtXƒ|q_ÍaYfí4T-Ùæhæ$1È ¥×_]î¼ëÊÎBÇ»þ #b<É¿½ñu–&pÍ!E$¼íwëé‰33k8d~áeh¿InAñ±¬ hó*‚gšKÖÑØoU{ç<ÄH{Äg`ôÕ ¾·Gþj|«³>EÁ âð3,Ž@ß‹¡ŠÌR ,.c ÈÄŠÒ v狼+ø‘òù8 ’rà]™E†KÝH°Üz톦ÏePÄd@Q™t!w£[ÏS¶üù`=±7gOÙ땞XÙYE‚nÊ‚AèÜ’6ÅÒsÊW.FZ —MëW¿Çæ3–ˆ˜2y´‚!W õ;W',iGœ€P°@@6xQ[ß·ñˆŠh;Å_ÏeÑ%Ú? c­yâð@Ž>ùÏzÈ$9Sá¡GI4Eùùa7Ëæcb*’Û€HHÜïÎÄïë‡OaÌ«/u™lÏxÄŽöBýoÊ«†'dæ¤]_™Q$tˆç~×ÈØü1/%•îŒòN 3…b ’uƒ[î8ëÍV ™ÍÈ™P$D•4éWc¨-X:º·^,bùŽÌ‚T+.qRÔ.„` jº³Åµ¸Û®Îv,ÿ—ÌŒ‡jƉ2°,‹ STµdNµÓ|bê»-$n¢)4®›Òæ2VÇMíµÖ)jvzcËæ"`ä  ¾öG¨ä8žÉÉG˜ì´›2ÐIÞx‹­ïõÐb›4 ®:`3~l̹¼¬Ñ¢)”è‰TÉ `@ ¶«8Íîx3ªs8ì’Eª)Jð¨P§qg†þýpžf\è‚LÜÙbŠ[IIm™¬ÐÒ/Ï©ßzØá®ï3ýÞL¼„Ö’]uP6:¦‰±^[à±Ã6~>ä² >$”ccEhð½ý¹Íã­K„òy¼–JA•`5î«»z]ÞäztƉÌg3±+åZ(âÒÌÒ:ÃB¸$ÆnK±¡IDÙ—”æ>èÆF•Ð,£z zobxų=Ÿ$¬NK´gBV8—+­b ¶E È>}*¯–«F 9r! jµVÒk’ÕÉ&÷ëŽrâX£b MÀ>¼áTìYã‘Wó9’ÖŠj*À‡ x…B]ï†;S²óLÙ(ÀÔ"×GQ 'КÚSémg£mk£LŒ1Ô,imŽçâvÂåçÜ„ˆ"KXÂ~¦ó>ƒrF —ÈvóFdî£B RÈŸ[ÝoUµàã±ûBl“,}§â‘ ,«@ƒµy^_ ]Õ,GRDó¤5“Wxo.ùe‡ó3I㫽4Gúçå„ãìu„ ´"bR]öZÛŸß™NÏËÀdÉÉ}CsÊ«PÛ~N(̶ؙ™:X¸,C ÇšüM›x2N„IlÝe`@¯-ÈùcÙ¶N8ã0€Ø+·=|‡\ynÚÉæ&e4„>& À´h¿?,sç²tß µa˜Ž,ª¤Ì.‰ª;s~{àSg2NÅÚn쨒¬sc÷Ç•Ÿ·f”–ÿÆæÊ¢’$f:¬ìAÛË å³-ÚÀ4›˜%X&¦‚•˜Š:•ŽÚlPq›êëÄÎmnÇ–Ë;«Ç2ê)6@{Œ/< ;#‡eÚ˜LPhÞ,Ðç2±¬ Ù™§ (™`›¦/Ú2Ô•’7#xûÍL§ 4Hß­_tI˜_ÊI¤–;$<Ž(u‰NÛ,C UN¦YH^FÜu»ëƒ¦cµ æ<´%™_O‹e +Øïå†R>Ðf;7*)RÌ@'€Hоwã熳ìQœÊ¾VÙ›Æ6RÖHêcK³§ËBUV‚è,Ç{'Væ¾8\e3ó#hÉvz…%AñX¾Hò÷ÃÙ’9$’8 ¡DLlî9=68õÇn3åÊšÉç²S;ª± ú†ûPdã3´óæ_º "îY­Cu5&Èec‰ISjG™¿_/çc´òÙHd—&™né& ‹¥]š¿ «vÜ›ß}…c}ãZ~8×-—72»7„Ö´H¿lD9ò’Hï x´† +Å‚6ßù8™öD£€+Æ%ƒ\_]øãž¸¾_+D™’[ÃzIZÕÔ/çÊ×F³}¦«kÞX (À¿óXYèuË–k-¤zsçþp\¿ee¦B³Ä\³ºÉÛn}ëNÊÈÁ0Ë"*€E‹#ÌMÇÃ÷UÑs›É±ï Îú]…}ß¶/k#*’ŒKt|'qÔc†W³ øû>) 5’WSw³ì/œ0°db#FQ…¡¦øç]]òí#¹”YZ4¼/~0WÏDa÷š,FI#å}+å‹.”©•Pwm”n1Ä!îÒ(WÄň+Wí·öýÖ&y†ašby¥§Êþ; +—ÏK˜ì¬Ì3&¡:Ui ¶uî¤Ñ[Ü ˆlzp“er岨‰(Ø–[Ò:ÐßS‹eâeËŽùƒHÌI° ¿O€Æo§´ÎXòÙÉfÍ@éaæ±E‘BÄ÷dzs夶YebºÙWJÑžµc©¼fç ‘âÅV AUÓÉßµœbúVüºqõ3¬y.ËOÄÇ?,'±àTîC+,Š£H«%l,éëzvÑö‡mKØùT)¤Ì~­"Íø~Cß *åYÙ¼ àÈ/Æ[NÈ ÐV#r/|4g†ÂѩٓIQÝð;s×Ûôó©Y¼÷áçNwñ i.mû;. ªvÒ;i<žWƒ†üF¨ Í•»lP;²@³Ö¾ãsN îÀ€iP’¤$}óŠOÞ, ±I'Šæú|±¯Ç÷W»ôÇh;jVÒùà¢E 7Jªæýï×Û~Çí‡Q'ç¦p¬¢t×å\q•.ˆ-@h¹öøá"JÁ£P"”ð:`üRö§©XKØ Z“7+¶­L_m;ìÕu8j.ǘæ^);FkR€A=tÙéÔü±¿—Xf“Eé vPG=ï‰d‚ @îì… ‹èNÇô8ù‹òÖL!&›1š’@ é%E‚wéþ¶Á ¯p XfTw#I» òzô釡XÖG™ƒHĈÊÝ‚5ë§&ý6Ä I˪±* )»ûÛl?¿JAÙ/–2ɕת‰ÞRÔgùÁÿ!˜Z'½;Ðv­¼ü÷é‹Íq(DbïÔ‚Šëþ°ys£B,zA6X•äž~·òƽ’u¥aì̆–c JÂØ®¢·×“uÿ1xû8©S/Ôo»acf#©Å¥ÎtwªT2Ši[þïRF:lÚiQ–;éØƒÉþvÁœVÑ*ýøPMîj¯n1Ò™a¤¡Òmlmæ/Û뀦t(ߨ‘°ÿœLÚOˆä>Lþ¬¨ùá˜.޹¬Ñb½ê„àÒno­ŸâY¥e|²ÌTÐÒÝhzym„à5]䄚«SǶ+Þ’ö§@Øxúýï‹¢ÒY36W¾¶"Ë4»ôßáŽI3}Ø=‚z Òoã×ʆbc9“Åé#mÿáÁTD»úv¢£Ší‡dE˜rLní¤ÕZO[&ýpOÎ ¼Ð™>$ñåÎp¥ºÈÇR’ûŽ=ÈÄ̰ÈÁ€$øU‚‹³XÖ}2.k4%R›#q¨£ÐbQT$Ö.È&ºïïÆ˜ÉAšÑ"æ÷äýúàI—Š4UÔ÷½S(ïŒïg5\æ]¤™P«ÕmEžhzm…LRåЪ”o±Tó^˜Ð“0…„n¡…i$ó¿¦hò†G"Ô½5ÿÌ2Á•Ód« d†m *(·Ç¦>o‘ìÉůŠë?.Idï‰%ߺ•Uc$ŸÓýf5ЛǻÎÊ_.ðC) GH]ÅÝ|±ãâì.Ò“¶»#¶ã”!Îf •JÝÔ‘.´û®EŠ…nEŠãï”tãÔ¯ ~–LÎ@£ÂÀ+€­T Æ5ÝrÑXié¸?ç d kFv[r¤~’:`À  RuŸí>{c¶eíÉeɱ@ÀP^~xq"&6B(Òk~7±×¦fc eÈïóç‚„mš@U²;·_\XtÁâ”5E”Õã?&Ù‰V’]w!*¼ à ëÓå‡3r1ˆ¬GHo°„P¡MÀ¡m[óÆý?Æ, xä$° 9c|{{awŽËH%@£ÿ¶Üõí…¿+˜‘Ù¤f1n£JÖ¡v¡Þ°ì±…‡N^ÔÙH;Xÿ°•,B+J‚7Ø¿=p6Iy@žH6Æ‚åá…‰ üñnçI%¶Ó&Ì‚ÇaðÅ ¤Ó@ÍrÄŸ:ÁÄò +¨†rEïWU‰™J¦´. ®/§ÇËŠ2T‰5[Qâïl˜51‚dð°Ùñ‚ªI;Ø݇—¦ø¹FÆ‚Ç7é*†þ˜rÄu‚¶Ë† hdRSQÔA¹¬7šqÞÎ@¶ I$‹¥¡Ï§ž'0Z,›¼lÒ5xn~W„óFìˆìšô‚6±¹ ~þ˜µW?iÇ:¢´”e?ÐM·‡¨;ûârQ9Ù–`KZþж½03•2N$’ªÆ”6Âß®úa¨ ‡A–cú†Æö<{ïc\¤¡KkelžµåŠÆ§I’ûñl ‡ßÏ‘ÉcA‰bA Åô8èÙ„`5@“Tüaö_YhÊëÈØƒú}oË2H#Ÿ  H'ãÇÐcƒ‰L‘ƶ¤&èXõ¬óIÓ@IeV$Øß{{^ ]˜2¾^DŒ„i#ÓDY ôQÄeäÅZBiQ`n|?|NbRr¬V‹xŽþ!Í`ZȰžX¯Ô$ÄÿäËüSÛ_„ûC²?öÿþµæXÎS´6tŒ¬¨ÌQƒdVBT‚’ n³ ÈÀÙ¦ ¦‰ãÏmÉÚÍyžpMÒm&ËTPOÔ×Óg…ƒJdP±“©½4,ßÏë‡å`9ÜÓE™UØ‚é]™Y­·éÅW–ø´ù‰#‰F€é©˜>F†ƒ03æLçvÅJD nÊ?»ÖúyŽ&ÚLƗ,¡7§ÏóNò‰Œb¢5¿^ë¶ØG´;w/•„ÆùgV{ÂxVÿWƽêü°i%`C;i é!iºž£ìc²y8Û"ŠãtD…ˆÞè ½ëž’“ç–Hb™u¡‚+ζ¾›ùb­™Œ²Ã4eªÙ[ÆÛÿ±†sy4î²XTQõþ?…c‰Q.B¦BÕu{^þ~X5-$ì[L9†Œ3šM†ÛÒž9$Éš’63—!À‚ªÛ>šßËÃ!šHK"Ô Ò¤1ïÆ ™‰2ñf$ -•·SÅŽxþq~ÉY²³³¼Ñ»ê4Ò¨'‚EU]oòk*¦$ËÉ*D]YÂ,B1Uu¶ê9ØœÉÊ/q™šRµ'xÖÚµ´t I>ûá±RË7{ ÃzV)‘ëµï]pX·Ý‹‘•3 ±Gˆ‡¥R¬K^Ä;ŸKÖí<îr9%Ê'f𬕠ÿ¯…½¨ÐßßóŒ¾_,Ë—ŠGy6Œÿs]НP~XW1 æ f”é•$6Ƭt#¾¸1­gÅdI’wUWÖÊ[b ¥ã¯íÍcg1™xÏsEè4äì¤m~{¾x<êºrƒ@1i4A¯Í|øâ±—!ÏOå¥% eTÏ”Ê ŸÔ65·­úáÌêrY„/,c'—‰2V Z¶‡]·õÅóRÆÒ )–ž[ µ€k”ídƒ~¾x<9(ò¹w‰\¾æEÕ%\„Þ›ÿ×àjºÖ/ g%šÙ΂߅|¬ ¯±{zZg'—Œ¬†Yå=⪂$`o~¿=°®sµ;=¤“'‘¤žH‘ÔT”®£`pºäùûaÈ gS1Ü’w[WKóÄã9¹{¬¸:ù6l§ÒÉ5êkô4Xór¹.®¥A;ƒâ§Ôúc§y£Ž#‚jż¶Uòí  .à=í±>cçñÀfFPF®îÙvéÖüüðÞ““´ŠCD€úE“«Uó÷鈓=8;ܲ’,óíˆEҬ̆>ê7µavÌ»(2šA;~¡Ò«ï|QS¹ÞÒeŒî@TMlMxUw$ßo-Û]¶3Y5Ìæ2Ñ6ZXVpXîÚ”1s{¤€«X>XÄã¼…WDºÀØi»£îøÁüe f»:D2“Á Ój 뎵·NžžK¬ö–#™’(„°^!Ðñì>xs!'€ÄÅL»±QýÜûoé…{H{k7”Îvd>W´ÔϪ`ò¬ ¤dkVŽ5mc“öhG˜C–ž……LÎ $¶Ÿ?‰éëŽ|-弸øoœöÿ–ˆù—‘”¶ÌŠkHª ùõ¿Ltnà)Ž@Yñ°Þ_¶:ÌY˜gP-C/4‹÷ÃKE@d§t#о–1¯œa|³åä”É«N¡©YŽ•'_l=Å%;‘@’a”ÈÖÝH ‡`Yw¯/=¾,MܳÿH*ÆÕGŠ?ÛÌãRO…z=!R€&À+“XR drÉa ]üyû¼/Þ” (,Ô•ÅuúñŠ,Ò  ­ˆn§¡øó…‘N¶ ásGõ{{ybÒLuܹ()MøH=/ÏÛy@ÄtÜkßïÓ†6üÈ—ÅY ãªñy¶ø`¦5Pȱe-§Ã[{œ'Úl°äDL¬Ãôl¥‹1áh|~4m(Œ’w$Ò£Ãϯw˜'PF(ÀƒåC“ƒÇ…v äHÑås0óKßĪº” ¶I£æ ¹p‘ãJ¬Úuµ‹öò¯‘Æ?leVl¼o$Ñ$ŽÕ˜C›²HPwÀºòÛÌ<æk/Ü®rIZ]¨1Pºˆß2Hä1›{jN›2 +¨Ê©ÕbȰ—KXòÎÒSf†Û(ê8ýð«v‘šD ©U¬(%XÕþ¡föà ßšl´ˆ2¨gF¥vߨ^÷Ïà udy—K&êÁ‚Ñ ªöÜO– cîÙY™Aa@Pνë Gœ”3 hÌ‚ôª½³x|¼üý‡®,ki£!u¡@P¡Íƒ·ÀbŠÃˆ;ÄîQžër7µX¤ŽñÌHd°,ov|Éóßa(î¤y£j(¡J€‹bÁ–¡cã†;ØgŒ–f©T0ñsÈ<ßL#ú] "*)Àb½yØ|Ož‘Žþy¤k:ª˜mÍЮœbÆ)„[+.€Ôw ºóÄÆÆW(½W{IÞý0ÔÇ £fq¤-í]FËÅ—@²0$­5½Áøzà9ˆËÅ PåÉÒ7>§qGž—x´H#=ò0Y`wZé÷¾+6ŒÅ©"5'¹µYRvû(¡ï€õè+j Àªòéüñ‚A°C+Ìîã0úŽ­´…ðª×Oû瀜Ѱ¢Y6 ×¶úqŒj+Þ*”Pº™›`9çoç9`°^«º MîO®–iÿ2¢,›˜ÙTâUVF )Bú‚MôÓ¿8u;ÀQ oZI'W‘þ|ñŸ-xYR(×D’A5ÖúŸÓîÑ…;׋Å{ýùã¤Iwv†˜šU×ý?,Y×7(+EŽMQê~ü±/+ dÔ!—Q¢ ^0ÃK]+)ãH7cãåÏÈ•³‘—®€ˆƒwê=·ÀµÍA™CF7Auð?¾-XÙ†åw”lÔl|>üñÓÊÈ«F«;÷ûã.<ÈHYù[°Ì _ñÏÓ åš T14‹û ᜭcŒù‘+Gb¡vfÛOûÁQÙœ¡’ú¯¨ïñÅ­FÎÝNÿçÏL¨Ìò>ƒ°[º°8źƒÌeex+€@¿Q…^7UBwä>ùƱʘavÕ^&ïãÇ­c;5š‹*£KZ¹ j‡—Ï ¤@‰–( è0®^šLüRÝ,±f”…°²)UQ}7$×ÄEš2š:m[öúœ²'– ú™c¸¤’KÞÁÓ&‡R*ï¦ÞxÏ>¬<{•ºª3q†P( â¦/mf9 ‚l©úà9Yãs¤pX‚Aà_û\3,d¸V’‹¹öàc¯—1ò¦7á{¡Gz÷ÃF-‹^Ô¾ƒœc²ÈÌ$Ó©µ]ªŽÕìpÆ[¶(÷3×e\ ˆò>·Š“E£ï ³€kÌÞ°#™K"ÐNúÁ\ÂãX­G¨Â‰˱~ñ‹â÷'¯Ï•½P˜ÍéÛ‘cÕì  Ð<|ðF! >’®Âð¤™xó$D‡¥Vi·ÏœR-O‹Nªøˆ¯jÀÖI.œÇ YõË’0±“*—Р.bÜ©P¾ K#c·\QdQJàšÙØÑØQÜy¼R<£ÁŽD²¬MƒZ·°>{Þ4”ŸË€«tHxã+ÂóHâÀ¶pMtưn•Ž5pG¬’~ûœ;™2Ñ3®–bEm;˜mÖ¬?®\ÔjÉ—XÃÉ"«ZšPXªù«BÎ̪<«¨Ø]ìkÏãx)™˜K$ ­È«RxõàbñÆ™P\(j IÏ‹°è8Û%"R ÐÛbnªºÿŸç‹4Ÿš"°ƒ.’n_©/Ù`@[mô’[¯ÄyáLćó)jÎÁIbxÓ{_¾”¦^¤7]⨽ŽûÙ>_L º…h9ÒÛÑ&‹ &¼ë~0Técô©‡Âîv¡ðÆvg'•ZNêÒukOŪ8ìl»Ž6«ßá…HS$‘¡XUy¿<^,칌—q)r$Z6A؃ô8ò™ü¡‹³Ó//™ZãiU˜6£½­Ò‡Lz\¬d¥¨oC‹7XÇí®Î=˜óÏ,âXóJÓb‚ÝøªŽçéŽ^¤ØëárË”‡´$\®Peà*E’£Ë~ÙÆËÜÅjPSIJŽN3#‹úŠ¡hi  'ÈãO.àeKòuÒØ½¿ÀÇN3:ŽvíDR÷ˆ#(l^¡ÏöõÁäåÖ×Ý’  Ó°Û|.Úñ±ºó¯¿†"õÈD’1U¨õãbq¼ahiZ0à›ÒÙhu<þ1H3LY…±°}/­b ;Å@¨ 6¡Á'ËM,(ƒ¯ô©j÷øqHI&”1«.Ï'Z¤ªÚ&ıóÛù°L¾™NÁ¯qÀëÿ0ô%-AÉ$žG¡x¤Z,ml°CXmG×Ï|!™Ê®r#!M‚M#ð4pèU]M¤„¢§Ã ´ÏnAu`¼×íÓ|J²3ù&—(êéi$d4@Óžž>v7Å8²î© V,HBi Üyõäß¾øØ@ŽÁ?¨ý098ÙBÆJ]›gÆ´¬Fæ¹2®"”³)c²±Ü]ÇñëˆnÐËé›4д (fCV@;Þ‡žœ•r²“)fa¨Ò÷²:]zà‘fæEËåæÍ&bPN©$B¥µmª…¡°éÔœ[—iÈÄâEWj#õ€6ö`ªñ+”`’Iätφp%‘{æqV¡A·;SéÆå$ÄÚL„t(§VŸ@j¯×ƒiA`’ÃÈ׿Èâ(Ó ­¬w˜…˜É¶¢­AW}7çåüã¥e!¤ ­í¨ ëo†/+ûá!Z&÷mþ½0ÁÃ¥’+n=ÿ,%RDÀ÷d³lÉGKr>÷ÃîÁbXƒ/‡WWÓq‡2v¼×!’B[ºpX؃B¿ÎɻƺfB]±?-úਲX¢?ó×Ù¢X $dÞ-Ÿ˜ì¸fÌÆdï‘™Ô‚^ŸçIHÕ¤p –Mš×í-6aZF[¥Z *¹ÄHÑF†v N?çöÂæ&0c¼ ÆÌ„k=ü°všM,çKº‹U;‚ ñ÷ë‡ux+ÝHÅU(•½$w}~ü±\Îf0[” ˜Å÷!ëM:³"ÐÕã €vvçŸÛÉFÕ0щ[ìß÷®›bév¼ $UWPM‹4FÄrFŽE…Ÿ¹—U¥óùÂèC¥(ØA¶¿¿l\¼=çu@ k¡;×]ùŽ ³hY‹«;AM@Õ_Lr±ºi’†“½Šãu)+¢@P´M¾XžôˆU\Ù&dž¯~¾X,Õàò¹i2èI­+GW™ëΖÊe`ˆcKÓwV?î fbºÃPXnk×axeÒg- ¢¦Îž•Uûâ¼aÕ;˜ŒºpÅoH#aæGžËÌ;ÁPøzƒÓBN–ØV¯#¿ß¦.¿%P€@ÜŽ›yztÅ8Å«çäÊHÝàXô¡w²ŠûçlË„6ì£ý¢±éôA2¨!$1;šëxÇÍd°üº0Q±ÿUüâL€7r7¨“ÃSóÛ·1bñIT;+›»lo|2¤P%„VšÅâX™YµÚ‰zýúà4¹} ݱhÉö¾6Æ)@𢦲¦¨°4Zþƕ̛9i€C(,MVªIÛž+4 œÇšxé£Ëkô€e{ØË¬»ÈŒi†á—ÐùùãËM–0\`ª Û¨(õä|ýðeÌ£XÐ’Iܶümôã9v1±E? þqAF"Bt¨² ½ü†.ÇTøÌìÜ×ONœbÓ1¢°›!B›Ø±„n±ë j[›°»Ù8âÚ¢.’®R  ױ漰Î_ ƚʅIÃr/ÈíˆiAH,lRù&‘b@‰¤1º¡Cœ]³@0mD=Ý1^X¤3)HdÚ¬U?¨ùáÆs»Ë¼“¡ô‹V¦RM pt”ˆ6ÝÝv PÛ ÂfGw;€›ÕdÖß¿_,RUWg’Ê’Y…5y WC"æ6µaEì/¨þábETŒ¥«Qòâ³³÷EjÔrh~ø¢µãû{7˜ÉöŒRwÄ)Ë»¦,Îr +üñÙ)3/œ›1'l4±w!R¤rk-Þê­[ƒ¤Zh gö§g<Ù±Ú è±åê"ªÚ†²ý ^ÞGÑ:·þ&<òÄí%‰cêô‚NÀyßǽ¿æºÜ½tÔƒ?õÎÁ#i¤Ê´a¤•T–¤l‘À?Žf$Ó­•–Ž‚§Â»u7Î0f©œ*È ÇEYI¢}GL0³¦b©B#J’*…ô¿/,‘Æ‚fá©u&Å8$wÇÏËÏ K!ˆ‹]Ú±7}@<ýšàa®úÄ„é°Q˜ÆÇ{çœt“ÚRªì H#Ϧ-Õƒ®lËÚzò:_¡ý±™fgg$Ù°A+¤iûß× dXi # ÕuµÞàŽÞxuB 5 õ9õ® óÆm2`yI¥ Ø¥'e7j=o¯¥ VW’Y¤ [Æu%‚¨ÚÚêøºþ+Né)XæòwÜþør‰vEx…lv¢/Ë ©‘gºM`Hgjb®wÏ6G×Ó20E(@’܆ …`I#Ë}¨õ'LrŒ?K0 `7¿+òÆnÌJaÐe’2jÃ&¢6Ë{Źí¤sþ*ƒ,Ì5€€Kuµ<ï§œpuïQÕ );ÑÜó¸ÛŸó„ÊÙ¥™„€Fu) «Äzšýñ£Ë$ wR8m€ ›® ßn›ŒRèÄË:JíP“áb<‡M±B ”*0V£â>]w' «FŒ`(Lcÿɳ.ö¾NývÛ’~í‚@½ÔTÚ¤ÒtÞæ><úaò–p h¢%¶®à`€´¶¬Ä \Nžµôøá8§EGgUf,,;sD^+³É r%cãµ Ý|ÞÛm‡mY M$=ÔŠº—Åâ±ú€8«“5F Xx@5CŽ8Ú5Ö ÑZ<ì~8`Ä…DŒ¡A¡ÅŽƒŒjmd”pK», $¤;µ±¡GŸ!‚rK°b¼­ÿiÜoV|øÃj˨©Œ VcÈ·¾ÿLXÜZ‘4µi²_By8pja2H¡gk°M‘ì|«œ—úrÊ,’l)#câ¾x„Š&] ] :þí¨oä1Fˆµ"•,E©bI»÷ÁÛE×/(—¼U“NÚH.ûðôùb#tÖIe*JìÀ‘f¶úâé"™Dz;-·»ûùa`èòBòDÁˆ»ƒÖ¯×z¯øÁºqÌ쩹6I 7ÜUo·Çþâ±—yÀãr…G]ºaYóÔ’Im Vh‘d_RhšãŠH"G–W²u)µó¯ø`Ö±¬±,D`h6’O,G\DP3ª ;›<ÿÖƒ3+1šSzœˆÒŠ€ m¿¶åÕ‰bé$%~X½Ý‰ çD¶úy ‚Iò½×lx|Üc>ÊãZ$aX© ^@»žÙ¯\{ÞÐиW"Á&Í“÷¶<âHZ8¡Ÿ$¤Îç£ÊH µ´d#ÈH*ý|ñÏÕ›5¾qí2rÄcŽ­ ºëD"L¼Ábñ¨Ò5R€vÜq·—Ëý‹–ɶŒÌª&‘AØ'Ëž!iU„j¾ ò®û|1Ú¹š[ŽiYÜÒW®¦Ùë°Å{ˆ£áÊ@³3M&‘úÙ±>¤ïŠ6d‘gb 9n sÆ e!"ôð dy8oBv/g*¬³1>-!˜÷剕âi4ÆÂ×{;Þÿì`Pµ3¡Qâ]NWmÎß¶ÿt±¶žåWRÖ£¨Ñ¢jǯ_–)1¢@ØY:T‘]έ@½:‰àqÎ["?¦­Uw䟰=± ƒlǧJÞ툌²÷kbËl,ŠöÛØbÊZE#ƒvAê=ÿœ &eR‹«vØ[úüŽ R[í¤l}>úú`V©/æ ‰ýÔBµ‘ôúzâ“BLg¼; àq]}Έô£ŽÊ6øzÿ¼%Ú9¦‰B`?VËdñ°ÿ¿Î%äÙE—ò±5ÝŠïu~cË Ç€D ¬W‚«¾.½ùÆtyx³¶edÌ+ CKmBÉëþ¶Æ“Ћ/ˆ]Ÿ¯¶ì ÅªÑÉSEUOUÞã®&ñäWGxZ¯—¶*Œ‘ä$€ Ô.Ÿï€Eã¢P©úž¿<2ŒY"”ÊK•dP;³Áßf¿_ñëˆÌPdT'¨b«Èõ8ŒÄQiìlÃMY4;|9Âs~_1"eåˆh-á!Ͱ«7^^GØÕ*F[RîlŸïðã݉¢H ,|lߨ Øymüà1e²ÿžyT81€Rä%W¡¡ê9?‹ÞA§,4HË{ ô'ßm«ÓNn)#’2ú NB0bjü®ý¦‘¡ŒL"ÐwhGêHÐÐù^šXó3yf"¸ÃY±èw86XĨ‘ê£p Ýq~§FdµBbÿò{©mü¯Žq`i2¨âëp ÿ¸à‘K#ƬÅ[‚·× >{^Ë:‰M3˜ÈÙÆàï\ô#F»á0i@d'P"±FïK]WI ³`1¹RJ²º“¡Tkœ[ºR…&!K׆÷]½>?|àðojå;âcWˆ¶×Ì}0|Ön8T4±°Î†Ø›Ûßœ ò‘–E$«ÙìÛnzýq\Ô &UÕŸd[­†ú€ÇËÊ#ˆ–'dE„›­þŸ\4äªZxn…á;ÑÄ"f»Ó¼døÆÛ,}ð_ÉÅ#¦aÁ-"=@رÓÔß8±)3Ë)Õ¨(­ÛbO\2ÒeKêeäßçòÃ,ȲKÞv·'ß¡ÅäRˆcbßê'j¾£¼{:ψµ’Xj«ƒdšäzbÞs4} ¨o® 0hòÓæa†I]TÐI6@MoZÄä`')ÈÚè,Ü¿1ç¿Î4—YBI`–;Ý’hõùã²Æ5PÌÄ8›Xè>8 žëM4Ù¾@øó…’ ß0ÚDL¤ÕL /n¾x·<¬ÓîÈQcUe:u1Øùú`- ë¹h(·«¿¨ßû³rrÖ€±mÖ¯­tÀ„‚d%••Ém °'c¤6Çkßn˜Q,Ê”£9K%µ‹­ŽßZû8.dyÚE¶iÀ>Gn˜|e5PØé·Áû8#JOŒ& ÊnÃx~þ¸çzh» h«AWZ¯SÓs‡21*¹h¹ýþ1Å’@H_Ó¹;bÈán¨Sfúô¬£;<#mBJªЃǵV2;kúydî›UÈEt›>~¸pé’B…ÆäQ£z½ºqÏ®3{N)a.+$U§P¶²65íŽvüµ"½ŸÚ*]c¨¹$/žâýïùÆ¥ªèŽˆ[Uú|?Þƒ%PÆUh‹ù8Љ VReR ýÀžxöü<ö(!G ØL7_âñ1å]ܺÈJ© ÐÿÜ4dRXC¹ƒïñçvÌø ÉZ"úV-I@PŒš ìxš8>‡u×eØò_§Ýâà‹\µzš¼V&1Ü@TîAý47ƵœÁY !"êŒê±Åõ?ëÞ•a@†múzœJÈ&J£&˧z÷À–0jÓ}÷_}0¦jdÊ¡²Ìw«éµñ×üÔnÝØV.À± píæ&¼ À—±«šÜUý+V&v~ì• 6­ÍôÁ0™ˆw*.ÛUU}>8+TÔAáM¨$óxB\Њ.ú@¨ Œ+5‘nÁUMYÜøí‹.U£Ìî´Œ ÆnÍž<øÅ¸±¡Ä‘R°"Öô†@޾˜Ê9l¼â2‰d ŽEDð/LmÁÓv@ 6ÌG7xK=Ùª²$°G¢FHf%y÷÷ãhyGnÐei󧸈,…•½ÔVA4>{à¹L¬ýìë!p®T«^,2ذtùyWLk?fÇÆÑÑ—nèR’vó7÷}0|¼J¨°È²H¢,A'nµÁô¬fäµå„Œ«šT( bIR×{Ë×ËHù‡ˆ¸O³nOêçq·ÓnHÃg+ÞH^8É'M_øÅà…â  D#HHÛÊÒf kî;é!Ò÷÷ÿJB<„PÄÙ,]ÝÈICsG~=pê6§J¬m%9·¢hß^/ë…sÈ#‘-ÚªèdÝ_¡Ûœp× }ŒƒBÙ$¨ë¿¹Û¹®ÒŽ<ÔPÉ,k$¤…Œ6–!v&ºk¿ú⼄šz>ÏÈÉ›LÑŠóe:€Þ®¯ qß|5$I#I€vV>.PòÂylÞ€í/è X½866ðŠò|°Êfâ‘Á^P™ðÐà{Þ-‹}ãiÒu ÛéýtÄ2.d«k! ¥TS¿·8ƒ"¼¦†’ØùÌPúS ßnqnœL¼Z@Ò"Ò5ln¨ùôãËîY”tdRXk·ØÄÝÛf  §Ä+qóÁ–¢Ò¶ IQæ/oLKKI¼„¤ ¢TŠoQôàð(•ÐHÄ…sAXÓtºëÉô¼VF.²åKµÕC¨Ø}N-¸øš¨$›P8&¼Íœ0>ŽõeÔ < ößïŒ4{°Žu3”¶çGy4­o²©ym_wÂل̘æg,X@ƒÆŠTÙ³ÏMŽ-éIÙˆÍÄê¶j˜WW§rpH§=ðUŒ«: Dé¥r¯_¡óÆcæ_ú`ÆÁé5µ5uåϧ]°ÌSG$‹0vêPHSm·í~ø-8eçV&@Ó%]0¯·~zሠN ºT𠬨­ý~¸Í|ÖZÞI'þœT#4 4ÛïÏ„„A O!ïRôì:ÝýÖ« ¬¢Gpµ`Ò–þÓÅýñUp ³ˆÂ‚h¨wò¯žóÅ ÅXÈ@VÜíÆÕÓLÃÎÊE@[$V=þøÄ1ÝÓ<£NºŽ•±cý/_L1aˆˆ; -³)îz—ñÆFc´Ö9l¼©¬†b븰&·¯zÀ¡Íæu…~õ ȲO§ ‹$m¹Æg&²ãÓ&U ’CCãÏ–™†£RYX2‹«:vçã¶3¢˜[jÜ• ²8>‡ó‹fóa)u0ÔÚX°­'‘ðéJÎUg™+õYQ¹¿ñâûk=4?‹;4Œ¶W¶"ÌÌK •‘¬uýkC¥Xã²M—„¨Ì ±-ÿµ±»¯#üc´ÎvöG*2åä“1! .—‰=6ïåŽ~¥Ö¸L¯¥$.á“'˜Ž8´_tW§¾+ÿŽœ1–}%É H&ÛžâÐO„d–ÚPéÈÁ²épŒ¼r’‘B°lwÜü>Xï¹áÏË™†UÀ*Ë®Ž¢mvz/ßž9óVŸ 4^*$­úþû`y‰Ùä+݆RËáÔ®Øt÷öÀØ*©wVu ¾•ÖÿÖ #A™}C¥åoEé"¨ó×oõ‚$›'xóacPð¨}}<±žâ³Ä<T EŽõzz}n°v0çÄK¶ÌE•ôòæ·é‚ˆjBÕ3½æ,¨ÔØ×ž OÜE­A* ‚ú^DYSK€4›RÆ·ª¬0Ò… DV¹;‘\}ùáÝ#0ÒÉ:–&¸ õx‰$dF`5#Šþp{$^êå㎔´ÚÿkÆNs\ò T$U“Dí°úí‡ ùiíƒl ž,~øÎÍå]dÓ)×# CHè8Æoe.±´Æ7E²¤õÄ#J³++‚h(ÛËË[Bi؆ñqF¯PÚŽ›$°ãšòÇ@y4d8Óf÷?¨Ýâ„"²ºˆ4ÞÞø¬J]˜õéBÖ à¶a#æ—’wãR3VY2†€WRX±£díµlðÅ×Iˆ€–è°éx ‘)ˆQ¬hñ|í÷Ó‚Vî¡V” oü 8Œ,TL)•X¢ÁÞ·ûöÇ$@4ªÚ¶5¸±Thù_ùÁ‚˜â°@‚—ñŠ@^.üÎÀD…ö8h„»FÔÁˆQ±]}w1'/Í+KÌiK Ûì`é®@fxh%2ÇbÀ;Y>»n¬„BJ::ï¾þưÈàR¬^U½(¤ï@Ù¯-ñV£)^`bP®Q¥ Uçëó84¹žì™dIi³E·¿™8vXÄ1+,ZÌíDÿëè>xPBŽ´ÃŮбñi¾/Ï~GKE*æIgM€ òKø Š™f@Š ñ{ŸoŽ˜Ê°v‡@S¿•ü°WŽã‚‘ÉJ@ÝF­‡®ØÍïË_ÑJEg ½ßQ¿8@½Û2ÌlHÓ[q¶þ¿<½…R5ÍVµ  £sçñãs‹ÊÁTÑSÀ½4|±d£\ÐM6L¨ð°GA[ߙ“ó‘.ÄËÑE ÛÖ¾7åWŒê ,ÕŠØŸ–4øYcœƇˆ×;ï\ ôÃðYù¸¡Ê÷OBœ•:±» ôØ{VØC²2.ã>Ùp%†Ú3ÀÖ ~ H]ùßfrÒf!ˆf»ÆæZUæ‰Ò¨šƒ @ÇPð¨I5ÁçËlfþÌZ5hX¤…ݧrQlºEÙ5[o^T:ã@ÁžœP0e”×[é帣€$°Ç˜dXŒºC‚$q¨¯4Bìá´cʰÒÁÕ{Ú¾Eß7ëåÒ±©‰+—•ì³PZ#ï±ôÁN¨œéЋtAÆØníÏ;á~üÉ!.¥V=ˆ(õz¹Ûnž˜”ÛJȤ–a`ß¶øŒËÈb2„lÀ­˜ ¨­ýHØl7'‡Kæ§”„ÔªA,PlþïbÝ:©fK™!ˆ*Ķô¯!M½s~˜Ëí2ùˆeu”¢#=hb¤ž ºØ1 $Ë޵1Ôd’I äÕoµÝŒfËæâŽ<Â<±ˆõð°m$iÜ,^Çý`·L'2¢Ë T&È(ÂÀ²Aâ¨B0ö]³2B[4ì]ªÍÓ…­†ÂÁÛ­nN£-‘òB@¡V(éŠ*¨ðW 68c7MÞ¬ˆ™õé³c¥tþ=1Ž£RQ¤Í¤ƒº’V˜*©>@ÚÿÉÄ3¢Ê!©˜°"ëÌù»u>~xFÊHKxEУKǨ¬‚7¿Ÿ«æŒr$J¥Ã­Z³2€G]y8t`Å;ÙD4¢D §Ÿ-ÍžMúã?;s³vuB”Íö”Y6v±ÿá,W‘ëÎÛùãXeáiFlÚO]ÙµzS|úcñokçr™,Œ‹2EÚýŸ*ª“¼ƒ5 Ž[æñžS®éãåëûG-,Y˜Ú)$X•™ ¨Uí·Ãë†Ly†@¡Š˜ô…d<-úöÀà†U3(ÉßQ½Ï3½1Dp¦OSd“@]?ÉÇW8 ¼%eb*ÄicÞQ}¬ˆ=pÆP–°Æ‚’§QÜzùïµïûà2G$ÄÒuKEš#on,ã‘…ƒX¤ñÿkü£Ç…TP 0˜ ô“Íqu‹®ñª±K¿á­ÍŸM¸Å&˜€ŒÂ:¢ uóûÛl VG >¢(^æ¹ç±î™D@øm¿V®'x¬WÃ@záIdZ I;鮞ؤ29Œ1 @ÔMtº¯^q‹ZÜ‹­®BC«]Ý‘ëþ0¦î-;² yúà¦QàU݉È’Ei–8À%6ž1jÅãîäÌ<ò)${·‡ãƒ…W© àX»ÜûýŒ RŽ–U¶*@½¼þúàÁ`GÐÊHu²í]FÅKf§L¼ä$0ðŠ;UtÁcÌ ÅØ › lofWTÞ&Öj ôõÿXJH¥^õ`rP¦eºØzlq›ÊÊd•¯"†Pë#"éNÍ^˜  §r@Fwµ'~7ßà/#Î4ä‘°³¿­ü¹Á̪¥dil·ÐéåüáãÏEâ,óæˆÈŠýXŠ{?çÓ(M9\É SL  gŽy¯½æR ÷oJÊ,‚üƒí‹Ç˜ÒJF¬ ¼Êõ"°ˆ™£ŠAÝÌä4‡Zø[[:®|ð)!2@‹ B™w÷ «“4‘L šE[‚ª”mdÕxçäj²÷ŸÓ9Xô±;máçÓþkV. RÉÐ+°qÏ™ßÓŸ6,«¨°:ù}õÀ`@„w´„›R7?ßî$1êiU6ä=pl«Çâêc¾ÖÏ ¤‹‘¦ùûþ0¾Z5v. BÀZ“Öºzÿ8fYNé*’ @]qˆˆèt²k<ÇÓŒ¡’RAS³ Èßþà/˜FÕR+-‚Û‹7Ç×ùÅgY/aâ!›bGuçÛŃE,*¦°PŠ|*»•±wï½ï犳©z .2(qf¯ž¾¾§`ÝôüDçÉô«À§–f”åòâ2Ó·`±goŽ/y7 ŽI”:’ •?Û¿>Ǜĩ/9R6HoZÂá ÜÎ Ø05CIòçË´Y‰\¤¥™!gƒUö9Æ¥!TÕY{»Éë~¼–-áR&BnnìWíÎ.¨De¤b ­=_l/–‹&8ÑWW"0A<Ðþ1Ta|v4Ø=G^0I’‰m»pæþ¿,Š) ’ÇÆ@Ûƒ°']dv pÛyùâAæ©Ý´„ª %?ïl5ßBRÕ[ñ¶Þ^¼ü°„­©Ì‰-–4 ‘NGíÔzbDƒr(MV×D1®<¿ÖDß“riH×»‰¸¥ 6n±Ù§‚(uJáht³[oí„×8Eü@T –o|i£+™ ¿Úúo`ìyÆ7ZsË–ïIWŽô˜ÉVÕcÎøçL[eQdžz‰Q# ›Õóg÷4q^äÂíšÔD ºXƒ¿:ò­«üâÓH'e“/•>˜µ ÜÔÖ5‚M9…C­ê~^Ø"¦Zd ©L£cÁ7í…²X¢ÐX$–î×ïcƒ÷_¬¢ªÙãzcÏí‹UŠ÷]Ê ;’@®¯Ôú}0Â霘äj*nÍn=|¿ÆÑk!J "œ VÅ唘ÁµH;¤ÿÓX7˜rò*º•ªðC:é÷çŠC.” 2ôÔ qóøb1-ÒGA’H}|¹ÄfJˆ j£µqÏøÄ±rzm'H;[Þ¿ÏøÅÂkœR©ZQwvÿg Âb#J«Rw­ìm}1wÅ. hŸqÆøeˆD°»5xx«Â=§2§…È&ºµ}[%–A@ñÐ_\!ŸD` ¦è@ºÁL„òq¹¨É,o¹çR5–¶£[t¯<,‡S† êaÖ½LÉ¡ŠìÒXß„tgèPa•Ĭ!6êÀ“ÿµÅàö§2ˆµ¸ñ·_ùBÈΪì~ªß¿,uXÙUT oÎ5£‰IbTjÀXÜyâ  @P½kŸ®& 0 –ÄHO¿,ç%+\­‚okóöÅÖ,ì9^NìÆ£V¯ß‰HÍ—ñ)؃`ì~þ,• EÞîöÈË·°¾<öÀÛ&±“4[!¶Ö,_â–|«ªÏšAú,ƒ@îvëå¿8Y‰¤k, 6­$ÝéÐÞ 2HÚCG ëÒ[ôñ_LP 7Ð茷ÙkÈsÆØºS]iÀ14»uÞü¶Ã›dD ",Û ÷Æ^–‘T9D$xí‹Uo×ožˆ¹yÕ¥žD.M  lÖøºø]¶bd|¹5.ës~¸Iò°«—P­Á'އøÇ&e` Š–Á!¸æïÌà9ŽÐËe”3!>lÕUµ§|R«™¥V=Ò– €Ä©[þqgˆÊ®ò&§Mj®¿¶ —a>§MŒ‹¨©?¤‡lZw:DjõCéõ8¯jtÅÍJ¹y´¢í¤––Çö0ÆJdΪÃ*ipM.­ˆþ<ðUæS&d)e7AlÝ›£½ÿ¼VH—"m!Dþ¥‚»O&ðYž‘$ï5*Ž ¤o°¿¯L2ùxÞ4DƒNMí\áGνíZ‘ €78¤rLR6U@`Z®8‘ù*mˆ¾¤ þë²þZ"ªê¡è¸Ýí­f%•ʳ۹ð“Çí鿾Ì{Ô—R³FÄ©"Ŷö³¿OŽá-‰ ²›,¼ž:ˆ-•,Ä"kÖÄÞ޲FÂ%‘a¹w8{·Œ2$®l‹ÞˆÛy34ŸÊHªÒ²Õ…ð¸KÅjaÓ~y¬ÜÖ¦ãq2$‘…b=]ã8ntÑôa¹óH?2¹œÃÈdm'@çÁ^KÚ‰$l+ldŒ¯ ùè£f!–ÒUäM‘é|a†ž^8ص0VÒÔN‘¤qÍïÎÝ1©c9Q—HÒˆ±`êgs{ôé÷»KWV5l¼_Ëߟ6Ž¡âeiJj„š'Ø]ý1’ZBL ! gpÂ÷ªänºƒñÁãÁk8=Ø!Ô¢’Ö˸cýó…s¦!$¨-0[çsvÀ¨[zùcŽaÉ’tQ¸mðýƒ…'—3 ¾ZÓ}2F,€Iécm¿œbÖ¡Øç·ðé5îÊž9¾:àŠ3ˆDé˜Ná‰[7¸þ7ÚùöÆ,RÊÑ rÊW½Z”1±±×Ï önbi#'>À¹°À ÝjAÇPyôƸò´XÓ¦\ÊQ%&,ÍrXSk·Õì<°4í cêÒ4!K•Œ*1&€¯>” ë‚Ç:Ë–‘L^ÿI$ïííˆ3+ “*êñ…»,õ'šÍy^7á‘b—ºÌ“TCMñòVô<ð”á£%‚41,”iP«>WåX{y|ñhæAŠP´ƒšÒGK«ãŽ·‹U†rå¥Ê…E¢ÙZ5]lq[áfŠ.è; SÞUa¥Hâ½=0¾—Êf„ˆë¦Ubì€(’xÿCåŒ).|€rȺº ý¹xY¬÷ˬqŠ”+¡S-}xÛn¸ fk•$.•L@ ¿kó~˜.b<Æa’NäFIÖ˹MÐ^œnG™Å$MPÍd/p8ßÎÈÆ+RieVêY„aK]Öú€7ç¹öÀåËO&f2Žš¨©, îlìyòóÆŽl(RÒjCY =Gߦœ:eSJ¾.»ƒôøã67*Ë–ï‚j¤ ìî=~09¡u‹ÀU¥ŠKqBÔÖª¦ß¸Æ‚Æ*)„Ž„ Êjí‡_ÛZR' ï§Q} jjý[û ¼±¹×–X%VyM‹’Ø…q·üÆOã<Ìþ‹L'}! Ó!#hæÑÍ2«ö,# DtÄŸa^Üy¯ÆÙw—ðçjÁgX•Pt—‘PFä¶½#Ô,cÔÙ:k†kÓ\Æ6i¤Ü¨@ª²òé·86OTƒ>©T€OA{‹÷¾8Âï—ó2µ8)+ª¼ü*<Ç;zñ¬™x¢#ÔªG C|=³×ÁyáEÒY‰’1JVùé‚ ¼KLîAä×uóòôÄÈÑEo1R#ñx¬ÕõÀµ÷Ï­ªð—O|kô2JÈŸI .ÖÈ[°?lÝÓpjÁ»<íþ/•Šƒ`Eoæ10äqH ÍÐû¬,c GQeREÕ|zôÃf !µ) éßL ùŽô­i:< P;°æD÷ˆ#’€K§c·éêœcË{‹Ì{¸îbÎ(£“×ïËL¼b h‚[ Éó|,vD–9Tƪ;²­³pIÛœvîè¹jÕM_¯¾)öŠ+x‘^È¥Tò=GÏC®@Yˆ$øEÍrÎä„Òu UyáØg‡%DTD£¡'sï¾4X¬ïL@²+§ 5ÈÂSEyÐ(î6 ÜÞ-œÍRE!I_{|±D–ITžî†«æ¯}ÆST¸"£ÆÀÆÖ¶X“·Kýð)"×ÝHˆ“VÇ¿Ÿó†•HÑÒ¯o-¶?Æ&Û¼A¤ ýC§§LthcCÔŠ¤ƒt=>¸·pYŒŒž;Öt‘æE^Ø$Z…›ÂÚø»Û\D²G ëAGQÔšçd<ʺ$H#ŒÆIÖ  ]l9ܦ_4\¬ˆÙÙ¹¡é±¬t®Óà T6þoH í¹ùïÚªc‘›»nìuéÁ ã÷ÃåP é!WI +ÛÛpq"$bHvA%*†Ä¬+–@²‡Ècà@<#ãÏ<ûa¶ÍÑÚ€ ºóôÅäxDhªŽ¡JWBÀ=w¼DÑ®””8(©'Q¯÷Ž‘Ý™$SJ¦‰Õûúb„‰¹ ˜€â0À¤ÕÐé{_ŒS¥zNïºÒÁ¶a¤ª›Úüºoûà(¹´t2éU¹ÜzyóÎJ° HkðŠu#ŒV*bÒ4•tßšóÜbii',í¦€HF,8óÐñûb3Y”€Ä‰$‚G¥T1&è ;Y"‡R|ñf5Fòˆ¨ ¶ Ô§'øç"œ:´ "Z», 7רØûñ‹vr3Ç”`J‡.§›;›5¹ßœûG/—#2ÏK0[RAmD^šêw"¿‹4(ÏÝ1¼ðÝi±W¿í1¡Hû´TR¿¤l£Û¨Û ý <]© 0³1Äæô«5§ÓÏc¿¡Å[7•—9ÜØGDTŠI:w¥ Ó‘½úyàb(á™j"AR»… Y&ÉöãÃÝ»¸Ém‰Ž¾~Ãó¹dÐ\¸ST }vu‰9—’%a’”9E€ 0½+¹Ø°}E㥠–u -áyÐþF؉Òe„(k6kãmϧ–˃3˜xÒ5ÈF³¹¢Ô¬«çÆÃb@®k Ï•W•“0Ï.’ aT‘dǹþÍŠ–WÒ ¿Kº"½ñEœÊXkfÔ¥›©ÞözŸùŠÌ2ê3 R5x# £P£@-‡¾ØÌO˜”DB¨e ]¾lŸ¦%Ò]JXS1ph 5·N0iHjÌnS@b °'ø>€ *é^>â(ÿ1#¥uÓcp¯íŽ‹L˜LI NÌF’Gé~ÛáQw¨È%;‡+eW¨¯‘÷Å¥É#4y€ò°Ë)Em¹`¼ŽhwFF‚F±Æ[+§ÀC=ÔÔ7òxi&]à~õÒÅ« Žû ü¿Þ ªñÝ BÄÙ=9£€æ”÷A‹j%†š?Û}¯f$â5‰$Wñ CH°k õÃSIùxDŒ1‹Æ÷Ó äõœË« Á½€Û;ÆD߈7Ùò˜µW~Ǩ¢?ÖÜã<½IÂvוèÎS´óÙås1 Ø€ó¿"pÌ™©ReÔâ«mìYÜÇñŠeS»s*% J¾ ·¯,Zx¢üÂkP¦Пó‹ŽÙ´òÉr4’\½¼š–P½^×½zâa’9£ïu5µPb/¦Þ˜TÆí'Œª)'NÔ±^'_ɬ‡`@ ±úã|kA‹Æ$ êM [­GÜaŽð‡XÞŠ“d“@ô¼!$£óa€]c«c}}·ªÂ=£Ûo¥ Lµnúíן|[‚MjÉš—2ŠcÐÒ}wØûahäeZ‘K¸°Ýkþœ'ø¶cí³–éñ@‘ǧ{aÙšv þ˜'pÛbó:kÀJå˜HVô’ÄiØ ý«§¦)3Äà1mÕ†ÄPaÿHÄ®b4‰Å,vØY Ÿç Ìѳu°`Š#s¾d1 Z°Þw×銴 4‰ÝºXÐ;½Î&8bV’ f4ztéübÃZÊcF[’7û­ñ¨Íº)»‘Ú&pMYÕú½ô¾¼íƒ#ŒÂ {ÆbŒ ­ˆ•–']Š“°þáTFÞØÑ1ŽÍkÕ¨¨° n>8“˜ŽF‚ÇIÚÆ×þpHó ¡ Âì^AøãWµ Ò=mKU)é½_Ÿ®‹,w;0äí¤óñÃbS.’‚¿´p|ýp8"2T±¶á·pÞCëŒü’ªÚu ÁØ‚ou¾ŸLtð£8•A>B›r6tÞïˆÇc‚IatGBE|q)–W@ʤéP@ªÔ+Ƶ‹–Í׺g² (u>ýwÆ”y˜–#@ª³]9$€ÜóëðÀ!æ Ê(¹¢+{ó÷éXrL€oé÷ª†€Z>¾Wå‚J¶—BÿSQªÉµmö¯†,\LY´ÐŒtâëËÏ Éß@‰° »5¤{{.sÏ–%e]+"–c§n_³‚ô§bf¢Ë΄wzK-Ø:wûRl–XÐXl-Ø'©÷ÿ8ìÎt2¤‘êÜÙ|BIfMeYBƒcO_±‚wŠÎÎd3†6î [V#I¯º5~¢wê- f#Ë…™$c­?©¿MÝq^xmó%|’,Vôoeœ.XwQ€úNÇ`¯ÇË[ÓA’06\I!‚ 7é¢:×@<¸ÅFBÐH#VXÆå‡Ù¿_/\lÊ*A©Á wgoo\7¤ÄÁ@¼ýnq`Ögq–LÑ•b°À)¶ØWE¿ÓÐúúc³FŽ3ºwÙT2í@Vï·éŠÊfR±š¤7¸ÚºYé[ïéÍ™ˆF’Fåu¥4 µ/Ò÷ûÛß¶–Ë@í!‚#Žô©ô­·þ£~=1¢rã^‹UHè3X:¶ë·™ã ö9­/˜˜×xH…(ùž(ïëH[-+*Ÿí _X×LÌ[)RÅ4¾»Uc'µb˜Gg…ÚI²ì¬M²ºÏ+WZ+«’¾][TÆÆ¢hï×o–1û~SÙp?k÷…bÊéÌÈYKiHÜ;U 7~ps̸G+“l@I ™þ×<ïèMcJ%¥¥`\q¹öãÓ“ýÌÊòF¾, ¤ƒ«žÖ&)d0K ùìEqxìÔrDL¡‰±`7mþð£gdï ±Òؽ‘¶ÛuãáŒø-fWjÒ'zô>^ø$¬q+LÀë=x¾¿~ƒ‰ã‘M0PÀjT ýpÜ6Pi{  Ñ?¿ž7DŠ”b T7ˆ=¿M½±E¬äk•”4±)ñYÓ¨ú×KÚ°}0ÊÐ+L+Ž„zâ;—2SA;­žzYõëŒÉö´ãÉgE𺠌ª'ÈÍyü0#›ytf,¤³’,çï…sŠ¿“–:°tºÐjGŸW))Ì„@I‚Nÿ<[·ggá®EaDí¿b’ÈÅ™`‹Äyè ç_<*Æ5)Þ·#¯Z8áÞ¶ŒnHØéØ7R°E$E¥on ztòß®8"`ç *«@–¾|¼±Ö4“ÉI+¨ÁD ªif± |¯³Y•—!T•["¶ýbÊ¡P²Ù rzb2je+z‹HßlpqCÿ}ã’Ì$›Q¶ÐƒPkßóÎaø˜‰‚¤ Øoíí}1Mq$ͬ!v$@óßOv@„8µ[Q~Ãã¾%¤X­ÂøËY,FÇ× fyAX(‘bÓ~øŽVq4jèäR…Ú‹¤û/,L™°®áÜP@ò7é·ËYд^0¤j`Fž¶hžo÷ôÀÖBU‹HÀ²À’£çë¶#5Ÿ6&£Ge*M·—à +JT¢ª&²-ÌÎæöøaVh“#*»=ÚȬìA¾¦±©ûfµI²‹1ÊK zÕ`5“`íBïv5GM©Vµ«ã»ÂyÓ°e´é¿N1y3 ùS³Æ F«8ýŒQQçH¬C¦Á!ÆÖo] ñëŠ3&YÇy Ä1'ž+’y¬særó"Wøm”ô¾¾xS4ð«OFu HäÎÀž:@$–˜ )NM¨«6lõºãž¸$rˆã‰©É®„mdo_g1$ÐèHü(vVÜP7çÓÏÌaÀÁ4±+aM ó>·Œ÷­ ݬÊñO0Ð]Á`NÄ=ÇÓמ ¾jFýèaº³ $tÓÓ9a" ›PxA"¿R’(ï{ýŒ5]“@Œ(0š²´ÛPùoïÍf“|›<áA%4 * =}xøtë†Ò&‚\¹Œ´“±p}>de™âie¶@oI>\çïŠßvÚ Ó²€Ê¼oö6à µX»>Š!Ý2„aTtÑ¿L0Ù^ì©I%F’ µNØ–1©Ö @ZG¯í‹I3H)5Ñ<æÆ Ý-H³À°²­‡ß·N¸4³f^ð›P)R®ï×Òïá‹íA˜¥X€Öl‚+–ˆÚ¡—H:lj ¡_Qƒ:%sÙ׎&yÔ‚lª†»±#žqæ3_‰g;ùwwž)ñ*°T«a~[W¦=|Ñ÷Žd€TÖÅíµý~˜ÍnÉÉQªŠ`ÚM·çßùoÃ|r"2Æ ÒÙ6F×Ó“XªÄŽd,ѯƒ‚XWŸ>ÿ1.VÌlÁ°T¶£Æ —Ë÷(U“d?M›ú ±~9œ! 5ii³mï…3Ù™.í µ%{ÞHÚ0x5qè<Ó ö(y |LNÔ<ñªÃÌKŸÌ&Yòpï3*HS±¼Šò5-Ù½¯•¥H3q´ic «®Ì”hƒ|wðßg´ºÍ¬ªÅ%!KFCu ‘±£§‘Œ3Ùò~lÉÙ¹¼§h ÊDéÞ!VþåÞÆýïŸêò·œÇ»Óã'¯q‘–y I;Ya¹ hñ½ýñ‚®\¦ԯ±]GϦìC&j"ádCU"°R]'`<±©QÈGxJ‘á €¯Ãl{xw5åçÕRY”¯xËv5 Àçzëþ± ˜ÕÇ!:M*‚yø`s ŒÜ›FÀÙ#­}0À®ä;¦åExwØí¶5T$ì H"VÐ"ëÒúñŠOÙÐOw*¥‡ˆ‘Á°~;a:‘€¸(]hyð1[º€ÙÈØïµ+€ÄìoÃqvVqß-1U•|`‹ß‘ðé^ØÛî]éKk‚°U°êwøm‰ÝVÙÃi}6£b+éÎIKÇ&Ÿ%­‹måíNºíšùI³©RRè\ñ_ ù`1eWó@mdÿhé÷ë%Yf¦kE”›§'¨ôÅçËà ¼ÐÑÁt×?ÍÞwFÁ ã©£Æ)4E¼eÔj£dó鎅ZPH´,tÙ4~ý±i ‘­·QíדKƒ:L€‚+U}ïž —’F‘‘6[ ~7í¾ ¥vQ`¤]=>cŒTA•t— WŸßž4 AbÀ‘f®ù¿üðB4¬j¤Q,I&÷ÿ¿,; Fb‚ìi,XX=oyhÕ@ߎ»záÚ$Å”ÆR=u¢ú‹Ö/É$†M4w‡1Í’‰Øn@QÚìÕÑx8§VØómÛ–•Ë2*°, &®¨u²x×ÿËÈriqÛ0ïAÝhî=øß'eBÖã,ª¬A]@l9$,KdFˆä¥WPù¿,YbÔœæ_ÿ» lXñGö?çÿÈd6f% BÇ; ?PvkGŠEW5Fñ…Ÿ²W”A¤;êZØ>Ÿg'ÉÃ>O8ì!m¨Q­‘xÉíH‹ mMá}j_~/}«©¼jÅÙìÀX/…Tp=HûãÅ_ʘ²ëj´(‘Ó¼=Ærö²•ó¦P‘ª*¦:‰õ?_‰½ðÞ_³¤xšIÿ¿õ]‚GÏlB²•ÐÔ7«?<]³K*¼fZnèñ_ZÆó<ß KE¦X•T 4G VÿÆ#A† «ª­”ùù|ïŸ2c 5mÐ'¨_–æ=F%stHF;VßçºiƘJ(ÌIØ7ê#‚H32Î>ð±¢Jìko=Á8¤rÆu±B»jaú¼ª¸ØýpB†%*S0Œ»›Q5PêHÆyrÉÛRwÓÓgL=ñt$%Ü*ôØ×¾ÿC‹edÈ1È%Rw¢5¸Â¹i Ìà ’ê± @QÝçËr‘L`uU²¿¶ÿçgí#ª¡ØZ¨ ϶þ¾ØÊx !QC¯ M•ØqÔpq¦ÌÍ)‰i\lG"°³ÄÙÐrà“[œc—mqè¾_%¢‚¦Çu$üýëßÓ‘dÇžá­˜›+·ó_¾HçIà«Ö¾8ÐîôŽí p wX¿»8xqÁÊ€±ˆ”, nIéx,‚Yd N”Õ°ÕvFà|‡>¸<!™¬§ÔóÆ 5p’Qn,^ãøÆñ’ƒ(6fRuQ+|Ž*ð,¬rG,Àåô˜€‚@>^˜ÕÒ{ákFêý¸8W2B¹`A·~_¶ Rꬻ`Sa»yÛoÜüðPjä1°i¹¡ý°5”XÆGAçGIˆë5c¾ é^•Ž’3K…9‹G†Ôñuè1ÓÇLX Ym=NÀü·ÃÒì[U°  ÒNÏ$„J]vÜÿ¿\;ŒÙ¨c¢3‹dòFÝ/œ-#’D‘Dh/ˆ«Ï¿ HÉ"“mJlž»Œ;î$$£ú‡®+ÚðZw- $ªhñ¾ ²*PËàVGýÅsq¢JÝáa¤~šòé€ÍßÁSA–wrm@\lONnÉÆmÂhËÆè¤‚[M®äŽÿ¾øwjåÕ¤"3tSõ¿—Öï™dgoDl Üï°«#üaŒ´…P€4,$–ï~\ì9ßÄf³@Â)ZBäk )bÃo†)hEœEUÃKeUö;UŠôº8ÀíÎÐÌvY9œìæXŒÔ²¸THWÂ<^vÆ®·±·\hö_0¹WÌÍš–c#3sv ª¡€dŠ»²Œ±×©ú /o¶±må¹âßL8`2Á®e†Ûðç Ê’x˜€kq½ü|¶Æ¬…–ÎKß¥á˜ø{ûzhˆ‘H+¥ÖÖÆ×{¿l)6L’”nš|ºÁÖb4¨@ih8¡T?|R+Q¥#'Q š,Iéç‰PÞ•$ƒZx$U}üp2WRÇ{'k°ÅÆU’@±#pâ¹>u‡>†ë¦Ùripª­Ð é…-œ)@« ²ÄÁöëçðÁE JƒÈóÞ$Aß"é°@¿:õÁ°ÅK~bMRU‹b@Eb5‚oƒ»)ô#¥btÈŒ‡fäš;Ÿ_®(ï#F²F72é ·"ù¾µübÔr3ß8G2ExùÅó3®#Ò ˆCÏØó„‹N"@êêøã¢:ˆ© %Mi¢·§~(¦ÍЖÒ[oë÷ôÁ£Ì)]´@ ¸é¹ÅdŒ øF«úku›:*ª’m†Â¹3ÿÈ®WðGâàŽNö.ËÌŒ¨>€5. ›Øzc1™@„F¥¸³ÍíWŒÅaûCð¯lvWxPvŽMòJ-C £_Ï¿,yý[þ[½9þi^½²Ñ—‹»S Kn¿°}.±/”ÐKH×¥F‘¦·Ár¢½«ÙùÒÙ¼´3TAtV"¾$c¥wÛ"”^ÂÏž:¹²sYÃd1ZF†Õ× ÂÎ;Â꥾¸¡DÌGŒ•^Œ7»ñ ®T,IeØjßjþqN꽚TŒ‚*vÈÝ‘¨ê}qÍ2¥ X%I;yâ"ÜÓ¤G{5ÐzuߌއËÏáEF6 1_¦ÿJÇ!JÌÔuR7 ›³¿ï‹A `°cGpVöß$Pˆ²ÒmTŽ•¸ö8Õ_ÌM²[ _ž÷ì?|Y9p5l@Ü\@ËJŽl’šú`eg•Œ@¢Ç&ùãŒfÓò§æÁ@êE€àÞ +FdUP ùzaTÊYœ55À#˾x>®î!‚,ÑäWž oʲgP•Ahj˨ÄêD¶úŽ _Çï®9’Å`XéH6U€û÷ÅÕÔÃj4¤l]_ÓÝg0ÎYã Æ'f7¾õ¾þXàè"3`ÎöpñÕ’† [SQÜ}œQ¤. ô3›H±÷Î-Ó€M2kè Íô?{ᬬ}ãje7\C‰Êe—9rÌ Ôo‘Ƕøz,¤i@=†6O¹?,ax(Pw ªÚ2’<œ$ŒxM”Ú¨P¼5&YX+P.ú¶)@† ¶8PG8±i6P  Ü“¸>^ ãxgLŽFPBõÔqƒM‘HìZÂ# såòÃ0¬˜ŠF @PÅ®Ö:±E—‰–FS1%SZ«Ëï¨ÇJå¦ ¶ª¨)‰†ÕÁÿ˜hÓfLeX–­ÔÖ‘Ï=+ïŒJåe3-MK¾¥at+aóûߛពËFùÎÓ3PÁYtì<úߟ¸¸Ë, Ýä£ »lNÔ/o~&,ÏuIÕCQñ]ìq×l,ͤ—Z,ÔEpOn/o–/ð'åêʰ@%ˆæ½°!ì r̵Gu,+ÚïH¥{л՛#cLû¶=+Aóÿ¸zƒÈFœ‡ï4lG˜jkþb$¨Ii‘E•½cÜሞfÐ2ú Üq¹ÀÕç$6r ÄX>5þ¹Àpªgû?2á%j°eY,Cm$íí€æò?œu2;i+L» šk>çliI”5Z¢G‰IYAqüátÊΓ‰¢l«‹¦(ˆ;Ñê=Ï-fí<”²´0™²èE”Ž+}-½qÁÛ~˜g³{o³sò’ cU&9c+¿þªÕG‹Øßž|¢ÄÞØ5€E‡Óȹgu=‡Ž]vEx÷ƒÁ?\“ÙyÈZMJõz|0ô ¦5*FÕDQ¡ÅñŒÈØ»WÂé¸Z¦;lhó†bT–$xä` ‚ßMý1AMHè¨ mtIj[÷³ŠÃ1w #Ðåxª$qª‚„‚íÇ·®&VácRù>Œh;4ÊÚ£1$ð6Q÷·úÀO‚VŠè+ #Ÿ€û‰fWRÆB,’ ×§Ã6̶7@þ¸fõ¤iž?4XÚ®‡Ç§ùÀòjÌ<±Ë¢UÔuXçHîEˆžêÊ @ç¡'möÂîd”ÄÙHX4ìøSG›ÆZ— g;fL‹Wróë IJêRAÒþ/ SÓˆr¶‘ÇÓ¢—þ¢/YN’„óªö <ú`2ež§ñ“L3º±^+;Ój¡Çé;‘„{/,¿ŸÌÍ š4–Vj,Õµ.‘¿€½[Æ-­ÌnËÚÄÂîÚX‚YwÒNĶöõÃB@"4ƈmè €ã2ï “0,Æ -tc±;rhÐ=0Hã ‚04 ;êwØž}}ñ|އË:K1œjM#ÈØß×î°Üm2;ÆÌCI#õm°¯l+’ åžbIÞ¯H ÎG(š¨ó_=úcR}‹~…ï— ´šäíûoŒüûkɳ(«;žÒ‘D5‚ lnA¶2³Ùƒ˜âSkú‡}èzÖpI¬ÉòÍ!1UlEüz{ÂrÒÄ#Ü8;‚öòÃZYéÔ$,×608VFvË¢ØÓ©T±^6Ó½·à„L&g‡¼±¶Á¶&îöaŵ«p´X ž“,æ[Wîn°Ã¦õ·^EaÈ¡9v¢w*/QÚï냎ê¾`½ÚFîÈhU‹-óoŽÐbC³2°O–Híì|:kUê¾O–T£R¡¨~»o¾:HŪC™ HÒI #üõÃAª Á $yí¹ÂË–][XBÔÀP7_óÐÑéë`6¾û4ÍX&µVS¨k`zù|°#—lÃÿrõ¦òïé‚+÷^UFàùïÎd0z$°*ªMQ¾¸s ]átÛ¼`N£J9£¸¿a‚eœ†"@B¸òþpxåy&h»¶BoHnÛÑøb’G#èPï¥$uí¶,;U1ÄÜÆÌÖ6¾žÇ×IY‹¢ß>Þõ†%’R¨!ñmWwçÒÆ-&U™‚«é$)R^_~Xp$’HŠBÕƒe‡¯>^بˤª¢¬[`_¦|³E¦•‚®à`­HLdßx¶@Ûm¿Ö9ãzψDâT&È` ú|èãµ÷YwruϊϦ÷ó¬5]”3± ±6¢l/™Š6Ö>—rNÿÏײF{eŒÈÒ+²¥Ž:yÞ“¹Xõ­9Õj·¶ç/EDd¡ý%…W®Øs/‘pÛ)Ùyû¬rÊéÒ¢ TyAºÜ ¶Ûýa€­évURHcû{bdT(ÂtÒùÞØ":Õœ iúa‘•˜‚ct…vÛ$’ Kh´PÀ‚87ˆÊM–…¼nŒ4ï†Ìi*™€-WDÖü‡O/ùFh 1v¯›}qeŒe¡ ÖH¼·;}Ž&'‰*h–Ǯ߶&iKª#xÈÈZøÖ Zi€.ÙŸ ©I:@±½úuÁãcÝÙhaDЬ.Ù¤*ðÈ€°mƒmks:@»ÒTR‘ÁêOžL„×*#UB÷{ì:9L ³&rÌk‹àcM„fFšAeØqÇÎ2;BX ”Êl£UØy‚Oã+Ž“·HX°% -€ý8{.Ñ+*’7¨Yöùã#-š9™<¸%O†õ_ï]±§rV–R$ ;üÀbãW)Šæ³yhœD²(hÖ˲ÖßÞÊhÌ?x‘‡phÊFÆÁùŒ+œÊ?zuëNìÝ]É7µì0c$ñÆ hMwkígBϯ)îdC)®ý=zó‹G&y£Ùq°Ø“AA^^¾¸_'š :"–ñ°¼UóÎ5 « AÈTÕ¾#q‹›YæbyÕ¬%Pž¼Q Q­ðœÐ<Î#3k*u¬‚Ÿ;ÿž1¯žŒ$m<’èEþ¡cÀP,›ÿXÌÈÄ3 ßE'zX’I%NûcUí‚ñ;jC÷‹­µ›cJx#¿†4r™pê&‚‚ÆÏ½ã8@ñºˆŽ¢Y–ºs^ž˜ÕÊ,É è£B”<úâáºyc„$j š ª¾7‚I– ýU¸ Ùô¼ .@¡˜¢ ÒÎXe£”»“¨±ä“Ž˜Â±HâAŒ ˆ**‡µôIJ¸B„,ÔH5Bøÿx Ÿ-–<`êk$ÙÜí¹^Ã&g¾•{·IÔ"«ô°9æ,Y »ªñ€H®E>%#Âa—‰£ÍiäÞÆ!@p{ŰjôÉôøÛ ¨rÓ’m,¤é·óÅtC°Ç7íåxp¤Á%Ty¦øb H.Ô×]ì‘×üã6¬d41±=ãÛ"ŽÂ†üE‘ŠÅ›9ý!¢¼2 °Ì óñðÆ”™2,³NìjÆÜc?ñ Ò/f¾^9Bæ¯vÌ‘ã w¾˜ãêñκúvÞR7?e{!2”å!ˆ«5Ó"*°¾´ÊG­cB|¼ñ¢©-XoO†ü=88o 3¶•«Ò “CmÇ_Ž4ó‡º[:€Þ·QŽüf9ÞZQò‘h”†&™xœI†°¨j¶-U°é÷Æ/¨dvð¶¢.™xÛÛüá`I픢kÜ>øÅ|t§ìYÞ@Än£ÄCåû`±¶ä±%T¤o_w€;:(%I¶ÝEZíÉ>Xc&€LªÖÂ÷ކñAh¦TJ¨, FäïÎ#6à– ;?îŒ+ÈÄ5½3n~ÿ|3–` ’Ũ I4N4,1¯½}@Y]ˆüûà]Ü@V°Çvs‹CQ´’)6lø¼¼¯ËÔÁ#l›cì>XŒáª9eË™YΫhz`S÷‘ Ž@K$°Ö>ÇÇ/–T‘çð”Òš‰5×Ë©À{#…p 4MƒgŸ¿?LÉRFË—slh¨Ø/z?ÆËU*ÊH^EÑ'¥×Ÿß2E‚%bº@ ÖÔ ë炪éBŠ•±£\}í†"ÓÄ;°Xtß<Þäm÷¶Ô5<{’M“Èõƒø€È &™ªÍ·:Šž´Nÿ.1|¢…FáHÔvóß醠ï,ˆ¨ãÌ]Ö: »j,6 ÍG®8„ŒQ`u!ÇÃŒ:ˉYÿ­*I.çqç傘£‰‰$®ë¥`lÓ£áo¹7Ó ©0¬ŽÂÈ;0«×Ï‘n}öØRí¿ÝàM ³Ê`F(«VG-ñûóÆƒ¶†½l+{­¿Œ-Ò#$Z‹`w³WXÉU2ªŠ®ÆÜß¡À°˜ÑØòÝz/ñ†³3ÊV3CI4x'mþÿœ+sHK:ˆ ¹õ?ãZj’„`Å·ê7ûÿàð4Šè `¯Þçm¾úb“Á®7tñM`^׸ýÆ ¨BÑ¢¡r|q_'ʳ ¶@Šök®*¾üñt§Œ7zCY¡¶Ý+ V¢U¦ê¹ßöÇ7 "ÏLXÅ›i3ýÌ0©DŽ‹w€²½þ’µäA¿\=Ú+ YÍ^ËËtÎ ÂW qæGŸLgçäF¢ñ6¢KÛxo©`Dd!\; EI² øU Ì«5n•©X Ù¹àšâ·¾pädk í­Í“Å‘{Aιhä15mD“ýßg %6Y% *ñ´zÇ@ÃöÂ?ø¬ÄG™lÒ³Æç¨eûôÛÓVÑÿI *hÐßHûÛ˜¡¤W7K°Pßf±›:j^×0Å¥%ŒÐ&÷_ó¿NvĈæyRÕZ6®|Åmåö1\²É`Æ„2­ÆÆþ_ãŠPÆêÍÐ^¾_L¢ôT‰H1HʆøßkÁÖfXFbþ-#lVyÕˆR “ál =|º&ËZØUÁóûóÆ ÝH¹ÙY]«mÿH#ÌÿŒgv¦Iœ„éê,8$ñ%:•}È==0 ôÍAä_4HýGÖdQNµ$º|ÿ®"<¹Žn÷uñSÁ¾lýpa™ š'ÆqWúHÓF¹Þðgx3Q¸ª­¯×Ó7¬¼ÆZtÌ€±Ó·‡óßœ/šZâȶ]5¦¯\?™Ri”.¯æ0,¾w,f÷€]ößü—ŽŒ_tº”h¾6낲(‹¼T7$›VÛcé튉Ám.$ƒ±ßqðþN8;hX˜! I!¯cCljx á;®îÁaªÆÚv¯—–&YËBÁEÝm|úûâád‰šG!€ä…;±Æ¯&fÊÊ dçóŠL@í*IÐ@%‡QóÂó꜀ž%4ÊBÝzþçöʼn“AXÙ¤Ôu €(PÅ¢–mão»×~Ÿ,h@L¢6i{Êínìuö#¸ÆÊÀZѯîõ÷ÛpÍ6§CPe@ëûbaˆAo¤Žl¥ë¹ SMÁâµG,…ˆýEjÆÃ|?¯€X èG¡Â2Nä9A[P`7²@¯Lr‹6¢SU… {p~^¸¿b¯8Ô»QpÄœP‰Öm „îGöíÎ-,Òi)jä…ä¿®bͳ ØPõéðÇ;Ñ£Y&Gvr©GrÞ¿M¯ÛqŒƒÄÄ»s|`°ÈV6ˆÈ /êpb! ‹%XoÐcl€¨²C¨!…ÐþÛû˜#4.ÆÍ¯¯# WW*Ä ×¯Ý NQcŠªAðyæ°ö°!:j>#Íœ J’:v'H±«ü|œ7w*U˜8é{êßýà-G6ìQIÜo¶øÍé­Ò‚ CÿWÄAë鉔ˆˆUØoõôÃÁ¦ Q«¶;‘ÇøÅ4¡Cl&ÅM†5){ÔŒ:Ä]ÜŠ'ßÌñ€N@@i•€¦£\á¹ã5+|¨ªkái ²$UFkÃdõ¿Ûç€ÈB`‚W`IfVÏw<ùÑÁÖhƒ:zâé–F`DaÀ7âØ5õöÅœ:L€i»Z¯_ž0C•Ð*†bAýD¶óóÆn3™1 ÂÚÅÖýzc`,N4’ PËu·½|°šåu1z ã<»é¹Ð’Ž P†U,Ä€m¶wæ8Ã…Z)RW—Â(é'­qüà0# ¸Üô3‹†"G$—fµôöÜá™#7µsÒFjÙL@ÔìNœ4„Ã5ï±ÒvSïÓ¯í‡ß+É ôp8 ¬ÈWkßUßw‹²@dû³ß p Y6w7`ᬼªªUÁÕÏêýGËëðÃ3ÀŠÚ“rTªŽuz|°)! ª:(°]Ï?¾,R©,Í1*ñ¡¨‚¾wÈã|XUòîU˜[4¥MÙ¯íx}!¤(Œ(+¨Ù5þ°T…h¬·ÝƒáR.÷ºôÂ#)IXÄl!ŽàÐÆÝ~wƒe³üa»½`mf¯bG úa³‘¢AeMf:°Eó_L ¸s¢B•£Å›7ŒÍ‡±³%BªÙ7WêqVv™Z»±À=zù|0q™#`›Uª¹À!ŠhÉI’€¡x®‡ý|ñ«F*r2Ú"„V‘×Óáˆ(befq[;o@|½ðÐ’r ºôÇaއ#¼ OBÀÜX¥Áå⻀ >,XÁ#;Õ;¯Nqb#E¦öh?n§Ьñ¨r÷VÄîÄ~ MT DQ«¥qx4J§¼&‹_ˆrzN~ëÊìÈügž¿{a&ˆ Hi‡þÀÑÛð¡7˜xÞˆKª®G§ËœyÅðç"Ë ö^2°FY§ÒšÁB¬•7ýºº^=9…”éj\¨Ø€zzq„B²ö#ÀIͶ@ )C¨Ÿ ÿ sõ&ð±ÓÓ¹ÎaÏã3?fd3k%E>NMø]I•[õÆûª÷ ·ˆêÛVÔÝã?±æî»³áHÀDËÅ ‚î¤7Q[ŠäV—4*§‰MŠb}O–:ñsµËPPIY_ù?}0š´–äÇJ¦•ƒ~­ùªØ|o L !ëPz; qè1I£fUÕB“`Ø÷ûòÁ¿Im£ÌûÙv«Æ–MYc ª€i‰Qd»›%lh­¾ý}0X’@¥€õJNþŸ‡{V`òf“J•EXò=<Ïí‡rñ7ët>&­ êØpluú`ë—EC"•rvŸ¯"pE‡eI(Õ§¯ãÔÛq€þ]K•®ÆÄðMã^X ̬@]’,ØÚüýpÒ<²¢ Ò51jo>:¼YíZuiÐ[tÿW0%¢õàí¿ÞÃÁ6ã5Þ28VpxãYZ‚ ˆ$ž=«ßÉ2é vµ³m÷ÎØ!fE@ÃI$ª¹«ôÁ¸¼¥¢Ñ!A¥ ø‰L¼!˜›$¾Ÿu…៽œ&§:Gˆš!Eñ}0Â$hE-H¥¢,ïö0ÞÆ-"µ$«~˜†c¸‰G}öéüà«­th_"8dHJ¹rv•c”¹D[jŽõÅ Œ¾ê¡@;`Ž …e{ÔÂŽÜàz&ŽäÖH&Âé0¡'mBÔîo #§Ç Æú]»í‹}HãýàÀÊ]#y5kµy`Ë–3+QÑ\š£ï‰•ZVû‡?g%™ìJ¥˜­ÈçïÓ9Nñ™£dYÏ—²ˆhÍ¿ Ø ôý·Ât¶ Mæ¼ÿÆ(XN‘^+$õ£µûŒ-\¬‰±U”w¿Wüé—ÓD ý6Æoì©t¡l± ÅÏSûàÑ:†räYÛÚþþ8åØ#H­ºì(]z`N%YÜU 6çÑÏr {"¬VÜ^f ¥\°6HSǰ놗HP´Y4Ý«üþ]åP«%›àh.Õñ—Ás+ˆ„®iHŠÜú‹2I)Qt7%o}Ï_/¿,]иdA¥É6vª7uðçŠ%x{Ôà1S¨UWñÎøŽ•(Ć˜i&|¿æ²“úé,w»û 2F—$ð0¯]ºb’P}LÌKt߯ÿŒ¥Sò›'Âk` ëí„&Í®³Q¸ Ã~Ýyų9Öa$j€Ï:¡Øu¨Ž91*4›ä¹æñÌdfq2’¬)˜wä0˜í7ý`?+:îNt¸çW¸ãÛן/˜ éëÔl~¥ëg ëðõÅîúÓŠÇ, Ñ:Šº å Õ¨Qéϯ\ \Ê ¤ïý´*ÈÛ|r(nIöã  3l›­l8þ1 «/&•° ¶z?óRÆ3êrÄóÓ¦þ[`®X±AI¿]±­À(Ôˆ^Øš¨ Þ±Q ‰µ57dõ82:É@ ®¸Û O˜`È#£èý6ýñ›Ñž9ÈåFR§Â,ÚíwǾ3sr³ë,úþƆæË¦%^"ª– ¶o{ëŒþÑ\ã£w ã3F®á°¨'z·oƒá¨**™”¹ TM(½mÏž*Q„¥ïPð /{¯-¾XVͬ ˜˜<ì¶êX#]Q»UõÅÇv’IJ˲t­­ŠçOZóÁ«Fꨌu#šV rw°º#Ï Å,Ì3¾†:w{“Ð×!wçÐDén™«!ÈwÞº.›y^ø<9©™‘Lº—ô¢PHlMßÏ©¡›Å’‹0‹t•>#æMò+]úarÆPZG.A«PÐÿà˜ŠTÉ*ÙbZ· UùóŒ¾Ñí r9)óK•¡Œ¶‘áÔAðø»æðò²M£Œ¶à?‰I=š‰[º2’¸HÔ6ëÒü¯4ÿÀÏ–w|¬_šÒDKhf ØB÷d7Û9ŸÅ½©Ÿ•ãž6WP®Ñ1ZX`)èTÏC…×=œ‰#C• Á®¢2t¤UtFõçןþo«Ãù½ÓÃëÿ‡?Jc蟂L™?Ãð.m9Ý‹·ííHÒˆ•÷«bOíŒív[19nóN‰-kÅ{°ήðÊö¶Q%Ð!—[åÂjZ É#L}¿ãÉÇÒã'Ô|¿[o©oìñ¤”à³µÖ™”¶­üVíá¿Zã×3µ÷¥îÅÀ+é_|â³´¡Cˆ˜€(@nOñŽÎ!®j,´¡›ò+z·Üz{`ƒ=;ÚÃ"#Ò¥† ãnŸëñ²»»ˆÑCPRIñ äÞýN*˜*\ø˜Øs¿µVøÎµx¦ï¥* lYAyy S9•I£)jxË PŒ<ýFËçU36±Þ.Ì^ìuÖ† ©\£» QV-Öêñ­fÌ9îІbÇÃ@î+ÏÓý¹X{/7;αB±›’ÛR‚(ñ¸»­¬ÙÛ ‰ÕÂxÜlBµïUGÈמ+˜ËÀÙ7ŠEV ÈçïùÃCÎÇå2i”-1¨w€¹mÍÆõüúãL—heÄó»«,¥H•dj ¨*ÚߊôÖõ·$ú¬ÆOÿÆeƘԲ5šcÐÐãsô½žùØÊfò¥ÌŠ•žÕ‚\q¶ûк1œønR¹ ÞhfLàå"Ê€!#A.ÎZ€,Mýj¹ÞÏÔ†8rñ™µò?xÄ’w>~»tõÀãÈg2æT„–[ðšº_1õØùáˆã`ú„JI .èñ‡àyZË)¯kª³Áó¬tÒ(¸á x@°¯±ŠË iHÒ ÕGÐ<)Ui$"Èä#z°~x.©Ò¹`(G“yVßΕ!2QUs{YÛùÅSF§ Y°Aëö.ðL¦´ŸN£“‚LTÑCU`ÖÇ~~˜<Õœè{<Ñë÷¾)— ¨…$©[RzÙý±Í ÄÁÔ$›5üÖ4Ȇ6w ÛQ6ocŒüþ¨¢xÍ(­ž#ïÏë:ËÞÁ[ßÊñ•ø¯8ý3ÅO>`ˆ"¹Ûö >ǦE9¡&ePÇQØÅñôÁ2¹~ó0½æÚÕ Pa}z<hì6¾>øÅ%(Y#ÒÆ¨6=0fÌR*ºŽóÎÏgá… V @¶ûàG²ÁÝ)Š £«P4G‘ò¯]¥NYŸN¥cÐ5±®1Ÿa¤ˆwlËBÇŠþ8,I¢*¨.ì“{âÖ³Vñ¹FnH*ôü-ìêR©ÄA5Ç©ôxSó‡0É”Ì8°„’¦‰°ô#üᘧ1±(Xïb7_[Á.« ~cºIU  G>ø¾¡Ý“fMb´Øx¯awe‘YÔMÚ‹ªóÁ gXðÝÜ}ùcQ׃—"ÉSÇ·¦91Ñ!`B›Ô´®Òʲ,qS5X>žgò4™a¢‰ †jÜŽ |0ê4™tÒ… pÛ®ÔÉ{ZqÆWŽ*ŽŽ¡·§®!ï†+f®·õÿ?"ÛÏþ`q2è.Ž.«Šßüóƒ †‰•‰bÔ@5§kŸÑqšc¥Îݸø}Þ oD@-*=… kIYûë€M*»±…À*º…y]_ñ€‚"ŒÑî¾Ms¿<œ‰üÂF’…ݶ!Åyùb°³MgÒMo@ÝàAûÉB˜Å ¬+zùtÁbˆåÐܵ¹+wFöÜ|pnös ÉÙÝüŒÃHb,žÔ|^ø¶[*RRUÊ UÝœ4Œª˜(Ø€7¹qí‚€± t†ñ«Ö¾< ñŒ•¯vž(ʸuÔ @öÄACýHn´ZC,ýxø 8„ª±|u¬T¸… (ÒÄxh ¯ÓŒ2-ÕjiFh˜Èbh…<}pGy«”Ôhmˆò뀤ål¸@[©'kûd¦À»¦R QwømŠ_…Q¢^d-GvÌ/êðÒfò‰²ê7êPóûóÀÊÉ¥t‚Iˆ7Ixu.´•½ðÏ=©!£Ÿµ^f"îAXtÀ¤îó ÷d»ùßýc?2ÙrÄhTrÀ{›¯ß]§™•“<Í"F‡ôÄÀ3vQÓâxÃÊ{fß¼}+nG«–ËdDÓ”QjÉң˜,3‰%å\k^Ã¥ºÇÆûc·sÝ­˜¹3ïåá,Lá•—{fØx‡WøÒü/ø³;•\®S5*K–$†bÃTBíxþÚ7¾Àq›ÇüC‡/SÙâ}½wü?œáîÞþŸT|ʰ2AAm·¼Dr4€)ÔJù]æ}N3Iì)oÒÈ¿L)$ïÀ°­÷=8ÛÐc´óùŒ¾Tæ#龜ÌÕZ\qçÿq«Ç ãé[Zÿƒ¥eü-Ù „ü”L‹ •Ü|ß =6Yæ$Žìëv_?oLyÂrL?öb»©“-Á Í¤Ž¡zo¤-šäãk¿f„¡,¥š¬°8¿LÖ¯gmEK•dÖ7¶ÜƒÎ+r$%C†'{ÜÞý~óù¼Æk-8Ь«plyß©ÛöƆS>3%É Ä(+{ùá“Gâ±§ å’’BÊà“cᆣt,„ë^^øÊ$ÈNbJ-Jò‡ŒLXÃ%0äPùü1¬ý³x}¶3.¨ …Ø`í„Úwš#KWúJŠÛË銃+€ÓŠZ/o¦.²Â·h ¨²×Vß®3kŠR•($1Õ`ØÜ}?Þ3³šD&»Â7îø-æ¯\h¶b2˱$] ­‡8«Í–Œ“DíÁ ÙêGíïÂ7$¼o¶ŸŒ9• ]ÁC`W;ïcç|á5œͰ³u·;ßúÁ`uˆ5n†»#k¥kO*# ÊI<×x£”´f”E›þzc;½’)n -EI <þ§yç ÅH$Dùùãs”bÃRHb…ëÄ((½ýžqÑ»3`ªÆlĬ€•³D ×ï¦-e‚¨»$ìn¾˜½Ú½­ Q>îrä;Q!|ÏÒçUHÂÆXÛ-½3ŠÉ™%TYb zWß8štm@×§Qé‡F"º>§ÒOJZ'™’PQ…Ýéj¢7³äza‰ó‚ÌÄž¤Þ·øã1äh³I° Ù"¶ýñ›­A¦)ÔX3mD‡XNL®aæüÐU:cÖ¾d”ª±Àß~}0äe.ì v&×VÅ•¦3´'ËÂú5FTõ+m×õY {‘ŒÛðÔhF²º²ªJ‹hÈ!O66é|Ö& °ÕŒm”°ŠU<·uß±v”­)B•†„ªú@S½€Mïé¹Á³Øò(±:Nà! rnçÈŸ_?,ìX`‘$ÆÌÇ¢:¥Ò,v߇¯\5“3äó‰T-†Ue­èߨý±æ{Cÿ’{/'™9I2Ò>`H`hÒØ+¨½%€¡°?/=°øß´sK"ŽË’Øj$Öžlƒ¸ãê9Ç—Õþg£%ãkÑéÿÕêÈìÇá®Ð‡,ß—ÌÈìă¡•Y‚knŸNÈÁžüãåä‚}E‚«IZ¾5yß›ñ³g¥Mô@æ.ô’dô½/_”œ+Ùù9úRû£ÚC—hòñåÓIXª† 7ÄL`P¨Ž#DØ”5¿¸àmñ¼cË)-˜p 6º¬qå傲QÊìhm[[ù|ñ÷§)&G˲üµ`•µ-‡k 9$îzíg¥y½m!‰( i`Ùø¾…$”O ‹ ÷8 Ý¡˜’Qÿâä*6’t›c͸õó¿,j]g;ó¹?ÔHž)QînÍð …;£>tM$¬¤9(ŠË¥¶*,×—KçsÆ"|ç3 ÎV@;ÍÀ*£‘¨u=Ýqc*£™ÔÈÁ Û‚,€|Iú`0Ãä®xeYbdP¾`GQ_½áŽÚAQÍ ÿX$*ÂĺC•wÅ‹TFg$ÀŠÒxØLÀî5•ª>z±c:èÑ¿Ÿ8æ)˱'SiÒ ùuÿ>Ø€$’`ÌP 6®Ÿµã³ðåçìáKD€è‘Ï¿LI‹ƒ""ø,­ˆÜ~ß_L+ž™[½²éUሮqœnvùÇáþÌÌš8–X{‰”F]oPÛÄ/ bÀQãîšF·m'N…u¿ã°ÿùCÿŽf”Mã>É–"Û•Ì<¶°+Œzy?þ’T’?Ž”²̨ª÷ÇŸ‡ò=/þ§û»óôùïþ7ý›LÌ…Zh‰~E/ŸÆ(“‚Z JèÜ‹¢=þ˜ÃÈÿòà© |¶cñwdG˜Whä#8¬Ô,õ¶ ÿÿÅ–1Çø·±ÉvÝŸ;© runO–ØÜþG§ñʼs¾—;ÿ«}‘ A™µƒFö ?Ï–ÌvzʼnVç~>ý°€üeøBaãNÇP‚ÔœäfÁòñmÓOÇß‚•âÞÄ*V¡Ú1Ó]îwÿ˜oò=?þ§û©èóú§²¬Ð—ˆ©RŒy à =O_Ž6#Ü›VÑÅãÌ/ÿ!~Y_â¾Åݬ+g#äü|ðÓÿòàÖ?v3lŸˆž¯ž1?“é_ý§ûµ}üµ,©"j%ÃØ Îû}ºzáã—Ž8ˆ˜”`I$Ðõø,ysøïð{huüMÙrEcÍ#¸†½ïyoÅß„‚¬’þ%ìåj;6m/c^xßäz~g)þìòô¹}5[,W.Dy]ês½j8£—¼ÊátÖ¡Á‘Ï8BoÆ„b Ñþ&ìµ ^†ÎFïÈßmþ˜ Ž¿ :/â.É[`sñã[ã§æôþãŸâå~M#Züc$òÜüúy`: ·|¥’ÔÄ oëÓ9ïÅ?„$EY?vjjV³ÑÚ€z[u³x‡üeø@²4ÿŠ;0o 9è·õ¶ü?—‡Úü|¾žE­,5E@Úë÷åîÚÙ#0 ìNûYã¦Øó~0ü8Îc‡ñ'f4L?¦Fz6Óæ ÇQïí‹/n~vy¶»8¸•9´e²9>-°~^;š/£&šL¼{”e Oá6.ÁéÓÔ&¬¢Q`@‚¬XËÊ›=÷Á»~'ìL¤u'kvx¡@.j0¾µâûùáv¥LµÙè(oÌFy'×ÓçƒòqûjpåôÚ9\º¿æÖ5k‰Uަ×?Cfó½Ã€4˜ØÚ•f /€wçcôÆT‰ûPŠNÚìñ*î æ“~–ktx¼»gðå7hvrµò3(Eß¿7¾ËÆõ£ñòŸàœM4…sñ1Ô‡P,¤}ƒÈÚï‹=ß SásªRJÕÑROQðóÆ,¯ÙY™˜'md”¥Ä¥3(JžHæøÞ°óŒ\K7h@óƒúÌ«¿€hñBð_VV§§~ZoÚ-O’¤;+V¥-ä8³W±#•Îfå”»N¦(ƆB²·žÜØèj½o ¶g²Œ$'heUöl}yŒ)ldHJù¸Â–KHº‡¡ßq·>X½ßµíÐËì,¯þÄï×ãÆnÑ•ÞX™4W††w)'uÞfâeŒë˜à‘ëÓÛ¿ˆöÑ`üÔÓF?9Ka ÐÆjÇÙ):Pe„*+ÏI¦˜‰ ê+ð»õ¿!‰Lûåáü´¨‡{•B¶Þ#U¾ßJǧø¿ËçèN\~/ÿ•Ç×þ?VÎ_0×â/Äý©›ÌË–í?ÅÝ rÙ¥tü´MÜ¢¡ðé´ H£VM°ÅüOø‹°];3²;MÛ)—Œˆ²£+L…xGïX÷Ф^\bï6U’8Zxž#z£/a…v×µà}†ßƒ;<±œG+"¶T1ñá$[ñ¿øÆ8zž¯/R_~_»ïMráéñážÝÿG¼Éÿòoa¬0ÁÛ™‘ØÙ×TGœ±q¦À” ÙÒMódzê Y › @°òßí.Öìlã̽Œ‚!aXH6¥]’/}÷ûâòþ3üC’ŒAl°XÁ­J$RAÛQÒK[ë×GÓÿ¾¼}^óæ<\ÿ‡ïËéõú¯«gŒŽ†KRŸª¼¨û}pþVë(R%±“êXßÏoð÷â Öc²²ý£™Œ$Ò¡2† Yî š°.ÕáÙ{Bw‘Öt Ö‘ +Ü,}.>§rrŸ/.¸Ü¿ íçh !2ºt›PFÄ›Úöߌ@ÌF8óâ,©!€y$žƒl.¹ÜÌŒ±¿vOuN/bÝyÿ œ/—qžî¦¡eP$1HFª½&¨±\n7ßñöÓ,er™È"ïµŠŠ¶ŸþÊNÝ+á‡hçs‘÷ç;`HÉj"*‹¤V ÄÙà] ±ÏSˆ³œjG&jK¬ª!T­W‹c\×L?ÏfT£DR@ÔkëŒH{C>]#̤,•o"@ž,‹¿^¸fÚ•iš1¯ªÀô÷Å=IEãi¾úU“_|ú$6¿!熲úš§Ì¶h_$VþüÖ<ïæó±ÌdicaÞ "´»s¹Úÿ|hÅÛSK–nû-e$õóƒÓŒÔ‚ð­S*( Þ‡RMÐy^!U€Ô$$‘«`6øñŒWíˆá.-"¨#Nš ú>yÁ`í˜Û2‘JÅT©°Êy°¼ñÔbž¬^ÊÓ(±¤p‰É Fè»W©?¿8f )„êì$ê=±˜ ŽÏɨ­ê%FÞ@|]3qÑ+!Ú½¸Åù/¼~Úf´¸¹€‹h¾9”‘B<ÊtïdX÷¿ˆÆ$òÃ;‹ˆ3(¼AòÅ`TŒZ¶U…rOOŽ3}^\z>É{o È,  ÚÆÇë‚O˜+ "êb5Pó5½úXÇž\Þ–jÌ"†ê@ºë¾/.|È¥›0§k¢kšÿg®¯¤ô1ÊQ‰# ±½<Æ%sD«+k]xïÆ0"ÍÈjA'"‰^@éðÛƒ;§3a4£/Z}ü¼ñ©ëlfúx×4ÃÂUEV–^}}ðÊ;‚U·q[áCœ•„ªçÃFü¼JgD‡LŽU‚†³Dçöý±ÓòÉÓ>ËE1±…ãé1KÚÿ8ÄíÄ]‘ØiC12—™€Š IfVwØö=OSøÛ4Ÿ‰ûW-_3ž‰;"w$G;Ä“I°6ªF­4kW™Ú°§=¥Ÿ2ç Y^&¼‘øƒ-‰è çkâ±ó=_ñåxzs¿¿ù{}?áu9ó¿èôùÄÝ‹•Š)ó?þ,Ï Dˆ©,ú¶]$sD×ÇÛ[¶¿<‘ãû)ój%.¢S¼¡”^ n£ v'rhÆÍv–[³Ì©JÍ«‹•‹ƒ¯Ä€ö5Uå錼×gfå£ìþÄ–y•Œr9—HˆekqªöÒFÞxóz¿Êõ¹ï ÿçýÿ‡OÐôøÿ›þ^s±;Gµ„ÔÙIH•¨¨{6»·4ü’~8ß~×ír€OFê®djZóò>÷ÃÆíÅ /g”$ ­jßô©ÃJ³¦bhóy% %©u÷PJÇŽpç'rÏôz¯.æ» ݰ†H2÷+ D„½·¾‡îñí?AÛâI%‡! ‘GA(+ûE‹4|¶±†;/%ÙóKçr®c~h€`“Öý1ërre CG*"ˆ Q¤*‡¾>‡ð¿‹eœùßò¿‘,¼d#iÖ`e§†X3!|I öý@Ýôþ1ª4¼É%ÎÛ1£~}:|>8Ííƒ<L’0Pm€Þù؃g™È²zQ"*èM:ñõýÞÛÛç{vtÖ+¶*A5~G{ûôÁdoªéØú½ÏË™îÕîaïrùFœ–IJ `$)#Qéœ6ÖQ/amN͸ê7£é†sž öÜíyû Ëz¥Ø*°Rƶ6 ~Z.ÂÏGªg }íj=4»5~µ|óμm¦µï¤ûW ÿÌ/˜íh²í§¾X€O„Uýùc^î7ÊËðw.sq©W!œX- ý– &_´7¦‰–ÁmM[y^Þûã?+Ú™(ÈgY†’X³ ¾9óƒÿÌåó!#ÆX›Icê ýñ¹ÏÛ>Úr™²ò7³M^çF%€FìQÙ¿Q³ŒÌ¶eÈP½Ž¢25¾˜2Ë#ZÊ© ’Ì9äñï†rúg‹4šÂŤíw|ÿœ[¾”jTAPMß{ã5c1îó@;.ïßቑY£y;)Rlš]{óç‡Ü1fÌˬ“½Öª—MÏ„ŽP†kÂØ[?G–̉OxH 5öê+ïlæ%½f;R ¨ß§¹Å ÖýøŽ­è|¶ôû¬Z¦(cîôs@m·žßj,7æ¶¾¶OÌVYˆdãc[ž•‹{d0’o¥S’Ä–Ûp!%̬€,JT€ -C†%ŠCÍâ« Mìk óÄ÷±)´SU_¥bÔI™Yt$kJYnËg“@ÒøÉ:uQGŽpþbL¸F”05|ow„h;¦,äJ—¯í‹~Ì]ó  ª¬`é¢ rk\cvÇh É;ß ­¶Ã3;Èå†#eæý/ËÎÓL©—:YV6 á“Nà]?c¶3{jtÿÙnumptyphysics-0.2+svn157/data/C00_Title.npz0000644000175000017500000001251712264274577017532 0ustar warp10warp10PKÑX\9뛉¶±U2 L00_title.nphUT :òIIUxèè]›I’ž9rD÷uŠ<@.0Ü©¯Pº€LÕjÉ$S›uUß_þÜ‘$K\üAà˜@þëýñ?ýöñÓ¿_þåŸüçßÿñ§¾?þúû¿üåßþý¿ÿö¿ÿóûùÛ/¿þí÷oóžÏQÛÇ*û³ß*¸>G)‚Wý‚m ª¿UÁþ±êþMýu>¨q8Ô>‚]ðþÔ^ï»ÖéKx[Ï:†Eý5t2~ ï‚à[ik½y ëÓíïåO¹¿üú{ÿöÑæül}~´5?ëî‚[p žÏzÚGÛEPý» ^ÁñYoÔ÷{>Ú)Ÿ­ A}¿@}ßú~„gÕv[ÚWýصžð‹¸Ö…ïÐþS?›˜Ð¶úE|[‚Eóçæ»ˆ"ö^ÕËølu .Á-x4Ií*bšÚµi’Ɖ³lrÞÀ¦~q¾7!oU0›í’\=ÇãêÕwI"ÀWï¬fë×#<æl·¿}ô®Á[ïyŸ™Ô·9ÓGÍ"cÉ8Yl ÉU{ŠEã%!Ü·V³D„‰\}‡C]óW œÇ’ìs„)³fs&±~ÓÆ0Çûhß™7´‰«M Ž©Ao›š¼wï›Í軉¸Q‡Q"öçKWûzÑQöƒÃ‘X¼ýBt\ŽHä¶KÖ;¬¯6j1Eì‘g{D2¨ˆ“è;»ûAM*+ýejp-ßDšH߸ÍG™æƒžI®·©=ÞVŽù+–"> óé| óm©=­t£«Ý4ù—–~)Íè×2F «úÉz¶æYéJÚû¦½5¾a‰Z¯ [¤éÙXÀÐfÆ´²ŒÙÂ×'ô±ŽÍjlñkhq™s|žŒŸZ ¥|ÇFΚ·›ù<ö4ŸrgÞŽæ3ΛÀ-ܼl¥“’õ˜„²J?X/°„©R¾@úQ²ö;A&›Ç·àCf‹/‘6o`}¯(Ãù.Ìs?¨ï3Ô&ö²¯NûãEÉÄñ†^`1(ᥭõk± <¢Ÿ´€È[½¨‘®d†渚 e\E“Ö7;SÞ´“…£iZs¥+½àº`·èh²t¥á ŽØæÍBY׿;Im[†ò1òÐÆoÎôbñö^cÆ8²qDä‘èžv0 [– ½È!N:[ºd-ÖÛÁôVìˆ:ÞU¾ ãm%6yR››!œ‚Íp†Ínl¹…Htkg¾×Eü %Ýc³»¤.Ÿ¬8‚B·éï@̼~‹¹î˜3«Ùã0 áã>oX¦HÖ_X§Ñ+žK»¬Ò\±J쾞þ¶ÌzÌQ²Ï:vÕ»Àm€Ÿñí̸ ̸z·Q&ûŽO–“}6Žüå¹ð^|´´ñ!¶y{03c½YÊvÓÒ »TmŒ Ï1aHÇö0¬=š7£}8´’yÞªç8CÕ.™·ÐÂ’q6úi­sÿÚ¡k™Î$³vËe«Ùúý‚‘ÏÀÓCäy›³±*{)ê>Îÿ1N±|ÑÒYCŒ×‘‡šµ¾ùÝDMôhyÕD9 1îÇ!!šè³Ø¦P§Xü¡Gæô!Lj’³õªœÉö›ÉUîF¬Ôôѧó¸J(;ªh4°Jcº|i•1ʇí©ömv×~ž»©d!'-(dràU²")¬c©(IgÅ#ˆ]UÙD·†0YÞZžVp†2·5Y;“j}T6* Uâ&dZY2è AÊq„D>L;ê$iÚ‰¬/ùLCò% ë‚_ƒjúÉ Ûäû ¬5ÈÈ*ógÚKÞ¶¸­E—¼3¾qjž|f¯0Nì‚u6öà+ëA².™k)†ÞóhO6¹Ãþ;<Íw8LôѺn‹N…'ï«â¤˜žçö}û-?˜‚8<q0Ùmqv3¥bZ†|Qsmm±ÊeÜj™‘ˆÓºrC$AqÙ:âþù ãD¼’Ç;6t¡k¬K ®n5Dâ5ø€8š½¾$Ý­ù–0!ï»ä5˜WáÀã8qÚãÊãtýâLý”Ãæ™•…Ô;ƒŒ3l¯¤û I³S6’ò´\žÈì6Ü6þ:ÎûŽGša§!™…ÆÍkUW">Ö…SFí‰)ÐNA°ÙùÔ9\vJ·†× $èOoŽ8[{â/âi½ëõÇÏ×ÏXÛ´s¢s«íÑÙ”ªó‚ùC×p¯uĽÂG"1ô÷xÎ,~Ì<"]uŽTnŸ0Wá$‹¬DA‡~å€`§×>ÈÄL¼,þZ™ ¹•P§V×-ñõ&³+˜NÇÎ2/ì×+.—tIÞ¼IúD,@r(â…Œi ©©TùëÛ `Þþ@ž›#¯q®fnòóxHrÖ Ór˜4“X¯[°yõìv\oÌÙÇWHHµ­TœŽù@&3æ[ÿN`”´…p¹S$¨ÊÍH£d#¶sB·^0í™ J¶½b…È@v³°½df neÇù¢BW?/~ $xÞlî'|!a!$,ÓþqØ-J€'`Ø ñÒo29ü‰g—•»™ö­¢Õ¼Â-_‘PHĺZRRgWDª#bGó*¦#¥½%ŽCRt¿„ʼôßx)\»–ªähh,.ÿž·Xþè æö ·Ò黀 +qŰ'ȵìè÷üûæ+X–ãEÇ÷Ø.9QÃqØUêƒíPËÁv«LË~a†C¢¾Š3J³¤ïrßú?1r}ʹJ½åÂe€ü®OE ñâϱžÈJ?ðˆRgòi7ÎVÎüN»ÓZ’¢Ü8<€ä„C—•‘ahÕ—%ä²ä62Dƒa¤òaÉ »ææª€M‚®éV¤äýh[Ó‰ßеåìÖ âãf‹Ó ~õG-…‚!õ”åbýs†¯Mà¨"ÙK˜¤µ2Ë•óÌαÂu¸Íð&ˆ7Ô¸e·”À……!’4E%™‹8ùÑ(÷ŠMÛºËõkq¬‰crÊTÙ]‚ºþ@-cæÛ¶Ôní Û§'Ìjö Õ›†ŸŠÍ×L'’jÔ¤â`g8hr›ÉEápÑâO8O$ýd;ÌOPßñ­×È Âëf¿ÁF~ÝìiœÉÀ‚[’ØŽÄ–É]Õ0¹›Ö–)>µuÝa+‡ £6¹ý»Äª•D ÔÑã<Þ{ TVddª1¶.+@+êvÂì?±µ†­a:[·5Ë ] ŽýÒv¸;c@+*Œå´èY\þ1“—â¨ÏP-¨‹[hòú±é²W0êâkˆ±Ž†8ʰDwaòŠ‚•¬0‚zµщém"1Î]Ë”d-:q~àŒºÕöÜ´z€ž¹gdÎk«Õ]?$͉ÐÌ‚ï2¹3Œ46fðb\QZS6ìÔg‰m–ç{ì—Ø‘QÛR™0"ð™=ÌðZXáDÏbjoìöÆ6±‡á‘v3õk0’|údõ…_L¼¥â 1'sžyß®4d‹qO‹qkˆ²•%_®H¼u„\Š‘÷~ÍÛ¾%¶o%núzNQ´|:˜vEy @ɆúôÛ>ëÏsWü2z¡Ñ+ãpJʉ)7+AØß',ÎôÍ„D󸓘©þ|ùF\Ànaùv÷–f£ÝvÏkF$#V§è9Ë‘•cäF½9.òÅE^×~l%"á8pL¼A¬‡´}ý<[¢¨‹j@³íR1£rḳ!ž*·‚\~ÇâKu{±øˆþC ºà!Â0ÇxsAJ¥íÈêWvôëtZ†žÝm]âêè}”.¹â$Õˆg È"Ïpª7u¶ws®%yÙÍ"õcS·¿ÔR[¢v*ÆðìA<§æ-épF×Ûb[6^²??„°³ç‘!äÓ—îÜhC÷UF^9߆ö\1òÚçË#©‘2Ð9Nó®Ò•EM®g@ZÓjÀÕšèìËÁ“‹¸û¾Íõ óznÝ üã‘AõE¤¸Ï-&Ä<èW$»¹©}ï&–Aõ~ìçÜ»^úï i™NŒutìI­×K±Eؽæ£3ì‹í’hßödq—óû-®}¹‹Õª‹Å7– IÃò™ë¨I 8îH'ÐÀùí£û¤=ý»SÈ!²åÌ9s„͉qæ@9säç8 È©ÓÙ¥¯˜ Æ@j 7‰èÍ!?øwÅ4î;ßÜWA9`rþñÐ;fŸö`Öª÷ f|ó•Vs¥?Pø''¤÷Ýgÿëà óÚÈüFÕ…;™N´“ÊGwEdúáLà5o¬­ÀžrEïIÎûHªÜ_ÒÞ]¸A›SëîSÝö³W€J Üh®hxþ×ÇÉ:ãfÝYr¤™õÕ“Zø6]y¢H>Í™Ô~ºT$G2úƒÙ×šå °zÜt#YÝpÞ<Þ±!0ûÜ#ûÜþ½¾`j1{?<ÆËI.ëíW¾Ø®úì¨e›Ž9V$%BR¸!ÌS›1Ä·Œ1ã„ Ùü÷þxµÌÐ9NŒ¯¤ÿ庆-ÌsHΨ]ÝïPµw{p…”Òpe=N¦Àõ膹Àyž}ŒÃü=SnÙ+eµíòÞÌ:†)…yÑ'W¬W;eÓ:ËáÈ»œˆyTŽÛ>÷5w)ÄÁ  ëì~0g@óˆq.¢%qΰ9 Ž·Vu¡œ]î0kO'¦«]Ã×Ï-áëç*Áp¿~ÅÙËþ‹«å(…î½r÷ç6Ù×ü3a– øh8^?—jŒã’Í0·Û7uËi · ¦s'”sÁ|ßÁ~Nql¤zo^•’=3Z|]]3Ö07ÎÎVtÌÐ'Ê“¤Ùp=¸CÁϧ…í{Ïdîëßoþµ‚?÷"îß÷µÇûž£²Çõ7ž=ìúööó^o ÷ótgåÂ{syf¸³ÆzkqiCÁ­Íi6j*ô›{"rÚ†¹ Ø®à£¯íÁ¹úžg¾qÝöc||g_úÜÐ4Û“yÏõ‘Ûq4ße?žì±‘‘Û ëzK½g~£Z´¤¿ØF{ÍqÙîÊÂv¹d²Ú'œ<ªàª‹ô_M¥?Ú‹ßù[{´´ä˼/‰2®G[yãJöÄIÙï•jhpÅk>¸ý–Ã{àûÎû%Ë¡=9žìyôÇoxƒ kxÄ|ó‚ïííáÙ¸S½i›ãž¬Î8zÖ$`-RÇ_û ¾h˜ÀgŸ×ŸÆóYøíò‚ˆ!k¶¬YDŸEqê~mãZ¼©éÅß´ÿW>¼ÃY®ÆcÅå‚/q•·Nš`0Ý)œ¼J¢¤<ü®‡×ŒÊ(ÐE¯­(ÅCG%`¤èÌ{œB9K ˜$ÙSælp9›Méži‘H- ¢¼ß§¨t¹&°¬å0¿Xa8Ñcuu¡âŒ`¿&2pQ„‡T ¿…Ü®tÁ•™cùäèæéÆvYÂï¡–9fÛý8ÊWU>{ZÔ¹Â[¿ÓòƆ ¾_bš!Ö•qÈ㦗€KÝ<”â%çõI¦úZÙ;€óúÍÓ£$·W¤Ú¼7ƒ“lv}3†ˆ-yR ² ±`Vm™çrç¼c»>Èzñðn\çlëFÂãsÙ62‘õÇï…‹½› q¼—<ÃÄú ã&Ö&Ï0±>ötòNÄýHïi˜gIsû=Éö“G\“ª‰Ý¿ã-ÈÇ0/¦#†¸³ò’i®<s?òÄ‹î'Oü¤šxeÃëlcÕ "”¢"¼š¤i I7.j­I BpÔZƒ±†¤ôá+ÇàÅ7ƒ1œqÇ]‚J¥ 4›M@DpÎ8g@äÀ9Dc ú¾‡Bpb IkyžC­Vƒï%Ï‘`N ZÉ3Ê c€^:‹œtŽÒkݘˆÀ8‹:3 GÚZG„N DD?ïAGÈ=éq‹šyžÎh­¡ÕjÙ4Í,c‚”Ò°ªœDFÅbívY^ŽÊθ—™Ì bîÓä¬j·›P.W_ãÂÓZ;_@ªóL r…Eh½tã zçœ1tÖ9°à:•J¥W „À\åȹZë M’¬V­jpèœsç²&8¯B<.£µFÄØ:×A]|rÎZ.Ð0ætšÆŽsdüҕ敵‰Jz7ölÈ=é/X°óˆÔ4½æŸ 8çyš¦ù€¤Ár)^v¡s€càÉ,Í…ï“`ÊÊÔ\Yd*•ÊËn¬µOJbœYdL'IBœ3§µæä„XÅè൧6;ºKp>`åÎYk­Më…úüíÃû–züÈ€<îå>óZBx-` Á‚rý9þ¥œztíæžMúÁ-\û¡M÷Ÿò¸×L-sÎM–µ(*¯@)eß7àIâ‚iG« kþdIÀ%Hésr9G-=‰:ï2  N'R)|¹Gc‘’ÛÀ“üú|v@Ä819¾|¡ÿ/üÞNÉåØ@4ÐAD朋{‚žÞ¯^þj^öËa­P“‘ŒÒ‚—ËH`вBý÷þÁÀöú6¯“wõ¯ú·•kíÉðþõ÷Ã@8p†ZˆÆ&IÂð»û+DŽ€+$†c Œc(¥À9­ ZM¤5g>3: Œ±àùAN¶Û]z™ÕT««s¯Ói5–ˆ€s‹ŒG"ç4%&ÖoÛøÖöcgk;rK¿pÇ/œˆ¼h-×üÚÌ—Æ¿ä=uí)ÿJûªßU]/Öq5ÑI(˜(øÂ/‘¬••¶ïçÎm¨®Ï=õèðÿ£‘¢ˆºï»áýK‰NR! Y†Ôl-BµÒû Øl5‘)åu“7`­…r¹ iCž+DDB¢5Ú3Vûy–zਡ2F;Ïó Ry¹÷š™†0 A)A€3,2Æü@£~ì¶Ïœzt·ä2* ñwo}÷Å{Fï¹°”,d‰I|í43·Îh£ynòj+o÷Ä:6ëkë®”G.—‚’édÝMxhÇ•Öý‰·þÞ7×T†_Ô¤V¬µˆÑª‚àÛ–*ª•—{ÉååEˆ¢ˆ»Ý6pÎQJDˆÆZC }au=`È}ß"GDDišB¡PxéžA€µ8ç`­…žZ šÍ1ÆT¢’Ù÷mß±uµ ðÇÇþxk¬bÿOÏþ)š:Tý™½iù-ÎxÂ|/¶6Oó<×ÎÏócš\[Eµ¨GÝØwcp`âàÈtwf¨·X_âÈŒÖ:F@#=Ϩ<ÏV-à;Mbyy`ÕEs"ß÷)Žý r"ÈCAä˜RŠ;Gàû¾åœ´RJ"üš4›-ˆ¢ZÍe ¢À bZ²•kñµêGþê#ý;ûw†ÛkÛ äb£}×è] BcE2ÆÆXSÐÆjcœõb~qü/¶}æä£å_|ÃÏ/Ü·þ¾«¹ÎçaÙ8“H) G"ã‚ z%€fsŒ1\)ÅYW©TÝÊrS0Æ)½‘© P ç Cž¦I ”BRjÎyæùžeÈéµt» :°Nsáqä¾s®à˜ë;xõàÖO¾ðÉ­§O­' ^tïßñþ¥}ƒû–<ô:EY\,x…ÎxÊ€©Š_n ‡– è¤ÿ_ü¥õËéRÏÞ¡[a[}ûÒž¡[.½âUäØtFkk-•Ê=€‹ 3À9rŒµP,U MSfŒAcŒžÏ‰È–Ë5' X“sÄ¥”9òÒ4dƒB! ‚‚Âûžâ8"¹Vø4Æ@ž+ÂÐgÞðŠnÝôÅó_¼ýÓ'?½q%]ö!EÀ,·y–›¼cœ‰ð‚(ˆõÕõ+ïÙöîóo»ç¤Ïü•œtýĉM¿ñÌolžêL†ly`ò_ÝñЋÊfç¹+BgàÒâ,2ÆÈÑÜì,ÔûúAz>jcÐ9Çó<Oø¬T*i¥”«õT¡ÝZc `œ! ç ÓZ;.„bŒÙ0,Á÷ð-iµ–qצÎB£gŒ!bP Š—Ú—¶ÿÂ×Ú:T Øò@«nÞQ]›ÚŒbÕuÖZO[Ý«Éô™9R\Ηçï­¿ûôÆÚ†œ£85Yÿ™¥Ó[/6Ç7¸úTe¬2:õÓ·|èÙj¡v>˳B0ç#g±Ö…º+‹Pì !0Dg-9'¸È(XìtÀg 1ȳ =éY)¥Ç8'¥hm¾/儿]Ø€à{è×Îùø¡‡K[ê›'¾óWfªAm)à@À€…@eyqvôùÙÃ;?þô¯ |qü/6ì¶>¡Q·|ò®½aäŽø#oL¦;Óû9õè†7¾s©ôÌQÂ97ÂË”Ê9c …äl—zƒ` @ §,O),,0T¹NÁXAÏ,\ý³­ì0%fºÀÐ’ïûHày)å¾oaX„<ÏQiㇲÐ8¹tjã/=ýñá-=[Ò_ºã¡KœØÄRw¡Ã³DHŒs‚#p­ô”äÞÂXy4ðPö˜;±îâòø ƒÅ¡‘Mµ³ÎbÅ/_­ŒnÀ³‹çÖnkl?Ç[bŒY¦.% éãÕê}à´ë2‚“s6/›å)XçPµ×±Ú¶Ç ¥Î¿öãO’º&‘c³ö½þ£o84õÌm F%~ª’îÍ›v5vÚ¯N<Ñ7ÌôJÏó DN ¹cŒ;ƈ#"DÒÚñ ·Ý$†œ9¶8Ûôëb|kQù>McívQ[ZÐyìÂȱ&ÿ¾-€K”+™è´ïOüц8üá›êdè…sÚªŽ1Æ”ÊMMÎÁæÍ7cÚHp!¨Àó;=…žxKm³,y¥‘?9ñßÕ¦Ú&¶¡wSÖå[ê¡/êËÍe”dȘR EžçÂó<àœ#‹ÆÁSÖZFDRkccÖYä8XÒ,â³½{æ>A—ÞapàJ !<î<ß׌1—ç90|¥¢Ç)%BütÛ Ž–ƒ²ð„^n^aU¯[cbdd=O²4I¡Z­:¢b© ós3ÀP1Ç<³|ÎôF½3ïßöÞøw|‚ýܽáMcw÷…"J‡¢ò™ÅÓ®î÷Ì–ŒÑJpî„çIßZÍÒԦȈçyÎc9gå¹Òyž»z½Žœ (– 41Y„üÅgìeЩ#ÊMå¶`¸±ŽÀë¢Ò+W€Gy6oÞŒccc/›J)’\˜Ð’zP»ªCmÕö…”žqXk™RÆJ)sÎÁ-/-€± õ)¸ë®»ì½÷Þû²ãÎ9@Á9—VƒjZôJÁl2× ‚Z–e*ŽcÆ9Ï„ÆcˆV–A Ÿ«£’_<9yrh1YpïÞö÷/9p'v ìÒÿîžß¨ÏƳ}+ÙJÏ…å‹xCmÛ•}ƒ{Ïv)]ÒZkÆÁxÎÎ0‹DŒ"”Ò p`Œ#ó ­UÑZ˘–eÏl"Ûµ|K‡ãô²áICR $Ë[9· ‘z{ßÕÙ8p8ðj¾•$»ûvÏ „ËOM<åÿÃí?Z+‡ÅËÆš®µ6SJ?ÉQŽZ+†HgÜàÓ‡6­dÍòÞy¡'è™êên‡!*m(mdŒ’sNpnÃ0¤$I Z«³V>……À……Psæ@Æ87ÆxÎ9&G¸¹°ÏbŸ6rïÓΉV–éÁ4éÔÁ“R¢±öûöþßD•+²Îffw5v]SN¹æ r.zã ¤´A¡Î‘ |¿øA-ò¢AD™êNUa_çæÝ3©IÚÖg­FÎ9H)Y«9#e¬2Åjò<i)Î:´h‘1ç,­‰qÎcdfÖBäDR€:»ÜÜÅöžvü†‹¿|¯Ïfú-‹‹Dui­5Œs$]zµ Ì«‰çy„ˆÚ3ÿ÷üã ƒçz~úád´pÏØ=KIg‚K.¯IÎûµË\;ØÿÉo®_Ç7Ü=Yô£9ë¬FLÓ” !c«uGŒqX^šƒzïÀKÏÎZëPJD`BJ°Ö€#Æ ¤NsÒŒKÜœvD\ÓÀk*ç o”t±Âi:è&%QŒgœ›B!¢~ô£pøðaxê©§¾/ƈ¢È@·Èг#áÚX ßðâü‹ëöÜuˆºE•O-œÞúè©Ç¶_8ÑßU]~ÛÀ­jOÿ-Sÿäæ_QFŹÊeŠ1æœs€ˆP­õÁÒâ0Æ¡ÞÛ÷²ç ιDD–e™óýÐ9B"à¹<ÒÉlÈ f XÈáêßr¬ç¤e[iª-9ˆ.s;¹—ÓtŸônžPÆå… Žûm€ßþí/Ñ™ëyšS—¡÷ÃÈ–{¿+€Z­Y–"Z.¸R8@,rä kM¿@îŽÍþ““Ÿ¾á¹éè_½qàŽÙŸºåC׬ÓóÈå,Ïc !1$ç9gaqaV– Öóm‚€Êy– ãüÌBY¡»1}~ȳgÇ"wf„»v¯Ñ/lk Òò²õ~ø/5Û<•èPÙØ%î®ÜÊíé;BÑp†—)v³}7Ïöü!MO]:é™çßîœÙ)rÉ„ïtJD€LpÀ@’)hÂòùÍC;ž!¸eá»)ßíva~~°€@ÀˆgŠ®\óÂÜ)¹<#P\ù7w>|~ÏÈÞkÝ´³È&‚£Ê•¶Å q’rBDƘãÈÁYÖY`‚ çœN–{)\²{jc¨þç òÄêm‡}sFî9¢aÔÅ"“¸¸3 ÏŽ9¾éELJšÉXȨ î¤4VG]òW£åAÀnN.ˆ¦Œ B@¹¹ù1¦'W+sÃÃcwÀg¿Cùùùùë`š¦žÏü¢/¼rf²ÒW/?Þ{ÛÐmÝû×½õÔOïúÐe"w¶“µ—ân7o¬YK­…YDÈB´ÈãR€s¬Q”§ 1‹–1!B8aœ ÝÊÀÆàµ0ó~ä Åo~½±¹,/%œ+ßš³çH¾£‡É5ž4€¼ÜººöÐô¡Ñ{o´Ûk?÷£Ö2@+·¦CÀÂ~O?óv©Z+žÖ8t(§m‹¿ø”R ¥„v»ÎÙ@r90×Ý:±rm½@QÙTÝäí¸…ïݯ ±›ey¹ËQ4sépÆ!ÉSØ´õ&˜››Æ¬s«ª:‚ àAžiâœY¥÷uâSo. Ûß¼û·õ×-ÛºTïûÈWß¼íy/PÇ5Ú•ç;ò'¿x¡õc“ó`fG¿­|«¹—.ÁáuÈ9÷s¦Z¹ñ?þ7sêÙѹx®°¶´V™=Z)‰ÒHuKy, ¹Àò$nªN·+ãXë©k Î:kç8GÀ¤ç¢(rœ €Nk LpS•Å«Ãw>çø†ç¥=²¶hÛSãÏ4cæuÒª‚%QȺQåˆè2¹‘ÒdÔûüìóÛ^˜{~s1 {$k‰Æî»e¹šÏnäîZd¼Ý§:¸svßN0kʇá#avvºÝ "ŒŽnFÆ˜ï ¿/sÙö_<øÐ®3‹g{ï»·Ùˆó[ãqjRøÊ•¯ |ìàÏï\è,ì̻ɈU*âž#'¬µ ÀiÃ8 Gà¬ë䯀|ß­ )¥¬µä¤ V}@’ÄC… ˆ ­éhÿOûù§ÞاÞXà—78Ѹ¨õÐEëß|Uú»’¬ÛÆ%pº„ÅV#ìËžy¶|rñÔÐÛwÔ”²SëãOŽoæô€Á%÷¿¸Ü¾)]‡Ÿ€€jµ²LR†qágmc²;¹ý«—¿ºëèÜÑú‡wÿÔÄOîú‰ñjPéüç~oìÁïXX_]?ùøÕ¯áo¿ø;v÷ì ÷oy*›Ï(­óB¡°Z~BB'Yk1èœaŒ­~G„<ÏÉó°Ö\_¥y‚+ö_N(É êËû„¿ÌáÛEg3a?ó7Žû^* ^!0Ž"";ún‚¯]}RNv&£XwÉW"ÙùÝÜ\¼Ï±Þ¦–{ŸŽo™¹y+Rÿhýð< yž¡ï‚3qàƒÝÙöЇv;Ú{ÛðmSï¿é}Ç )]W[—E^¸Ð(6®ü½ ÷_¾cøöðÿÙØ=ößvŒÔÖºûÆÞÜ–A·Z ÀsˆhW ¶  ˆ¬µ†!Tª=ߎ …pšˆ´#—å*U1>x‘‚5K>»2-³/¿‹é3½äÒ‚n“ ¼6Û_Kƒ÷¶½4º¥6íèۢΗ#f.oê ÿ=GMøîéFİÓépι’R€ÖŠ[k+©M×?=ùôŽ#sG¶›?V~çæwN½ï†÷‹DtÆ:kë…zþ3{>r~ßšÛæ š¹ZXëÙRÛ2Éhãùæ…ømxï…<K•š½€8çÖ÷}ƒ\|+×@DdBÛ?°æå‘ ç+DŽŒ³ âIhl¸{iþZ>.]<b(C¹y¡·âZgaðჿz«2jûš¨°q%>¾®ÂSƨÝï\¶IˆAIÁ}ePG]ÓØ§+qïšÒ=_¬îž¹A–†jaåÎã‹ã·F,ÎÂÍE^È$¨wÝ8sx…µ[ª‰ß˜þÆš6÷‡ ¿ì—ùøÊÅÂýïo›;zþž‘ýmrÐ6J«b‘ZkȲ 8ç°kýצUO¾º-Í‘"Ržg/«1öÔûanvˆ ®úû*u ñÝZ à‚7.ì_^ávú.æÚ· À£×D~b#3/ŒXÖw¦ko~Ì=I¹rlcnò…m)Šûëgz%Eò‚¹lZûâƒáO>cÙ³Ëg†¾réñ›¾pþ [fã¹HpÁ;ý¿¼r©|ïÈ[Dî4p)À’{©±©Ýn¾´¥¾šá "@¸n«Î ˆà{ ßéì^M¾+€5=—fMNĨ_šcï ô +DÛÊ-‡¬¸éٜ߼R–q”dIõÏÎ}¾ê ¿sãàÛ—„ü²"ÝÜ༽/ ±æ‰ ‡yÀþµû×­«® Ÿ¸òDåÁ-àÆêûŸÿªµ˜1æ$“À¥ÔË:Ôˆ¥hŒæŒ1Ž€Ì!Ck 3Æ0!~§|¿"^íe¸³býŠÐ‹+\ÙÀ(™Qbÿ¡Ýót‡¿e¾¬ðHK_Ÿþúšƒ×ön¬mšß4üÓ‡U ¥{ômÄJçµwיɚ[¾—>;ýœñ…¿xÇð[{¶Ì?7{˜íìÛ9©´ZAÁlžëë:\oÎ"Â,…1F2 2‰iáÖ©Tî[²Y£ä¯Å½€'Ÿ¸äØÇUáçÿ‹Û©ºæû.tèÁ‹ÏŽ:÷Ý­Èh.¤”•S˧zç“yö¡Ýš¼úMoâæh·WœtgðøÃ<ÏZ¾ºçñKW£Ö¶úÖ3U¯zþßíÿ-•åYbȬ0+Œµ–æææ Z­9àÈŒQÂX#Ñ%óæÓy?6±¿¾:VÐZGÚ™ \.ÅíÖüß-€ÿøzxîøÚæ@mÛÓ…‚â+js¶yí§ìÀÜ^ §PrÁcÓSÝ)U/Ô'öî½À8ÍZ¾5£ð> ñSCdçUÀeɫվrå«kÏ-Ÿ/`ÇMõø=× ™‰$O2!¤Cd\¥R‡f³¹:$nõˆ~@]íÈZ]žJ¦ÓñLíØü‹ñ½£oíeR†€¸b}ysçß"ÂéÓGiíÚ]6æ_xNŸÙ ·ï½:C“é¼yKÿ-§÷Ý&F{F'r•·Ò4ÎdñîçÈV<+û³€<¯©šý_¾üW#CÅA~Ïèþ9丈S­µ†ëÅ !â87B»ÝDDä*Ë9€K nY ³Åîbmº3½n4é?³p†ÿ§~gý‡vÿäéÀyóŽHýZÀöí»á—ù—áËŸºúFÞÕ>)ÐZ“eV‡2\xïMï$Yš­òå•+¶1¸8–á[¹Ðíê•öÌà¡©gz~dÓƒÁ`pF+Õ›g‚ðz×m–v¾µvãÌæ™u"w1g;“ëf»³c7öÞPqhÙÉ¥S£ˆÐKÖyAÆí•E(×záñ½NøÕ_ýÕW^$Xk ¤Ý¬›ÛÕFfçûõ÷m†¨<‹ sˆé‚QïÙ¥s#D.XO›Ü,ñWyžÓà`ÄqŠ«}È´ÖÐét R©X ßgT)ÕàìsÇ mjÍ&óå­µ­él:§=NEÎE ¤Ó†1Î`?À~Ð Êå2 ",,,Â:çì¡'súú¿Õ€WgâÙ5uù+#;;íÞá[§ƒ(X¥µ&c(¥ IbÔÚ@¡B»µ­ 'À‘s@`…à$]¨5j½qÚíYHÛƒ¥ñÍõW3›³³ËçzgE†Œ¡ùþ›2þVV;Aû 0Zƒî¼ïÃo7 r&Xè……ãsÇ'æOÔö¾©»©±iÊYADU,•@i‹Ò  PIJœ#8e :º*Q€@ƤˆÈxX.öèÀ¥žðæjQýäþ±ýÏ/$ tèÚ¡^ (: îÕjý@z|Ï)ðZ¾{T§µŒ#€\L ©É¨"*+J©eÊŒµÈVcT&¤rà”ÖÖƒ\r,#h5›Ä§Då ¼ €ŒçíR\òKË¿|©«âŽ#· ‹JéP“æžïcœ§·WÀ‚ƒr¹þúYÀk 2ÖZ²™µxb’x¸23ýÒ.þyïÆêÆžóKçw”G¡hpÚÓæŽmØ´F×ÝÅL5›i–æE§Òœj•Z‚›ûïßpréÔŽÁâ`ùJëŠù‡Ûß7s±u©ÛÎ;B c,8AÀ9¾æx_ `䘱”Õñ]#w. úý?=ÿÙÆ|<…"LµÄG ’mÕ.wuܨÉjèqi¦’™þ“˧‡¿zík €˜Lv§Ü[Ö½yñ¶‘}øOŸúØè“×l(û¥àÂÊ… 6–î¹ëôw|ðùnÞY(È`©·Ø;“;Ý%†N›×Žÿά–¢8ËóÔ›\™ä ÉÂòÏïû]cMñsãŸ/}lßGú¼Þ¥åfSW*eDÁÕÖÕ‘_þ·äÞÆž3÷ ß=ñ‰Ópÿ\6ß/¸§Œ3í{Öîo~ø–ÅŸ9õÈØWŸ¬öE}ñ/ìû'?wîóýí ÊZ¨Eõ³W˜R$].¸4œs7Ð;òÿ€1¤DpÎimôüþµo:³&ZSþëkO¯‘LtnÜsb8º˜ôfÝÀ÷µÒyy$Þ´·o›Kæ·|öÒçWòf)”aüc7þèÔÎÆÎƒ“Éê;öGk9ó»wìÍ“ÜñË·6ö˜3 gvžZ<µöÈüïö‘ÛAJsÁcç€Â „L%«%´×þw àŸìc×_pD;RIÞ¾ñíI(£èѳF<Šß¾ñí/’¶ç-¸‡´lÉv̾uøÞd¢3ÑhÙÖP=è‘§–ÎØŽîv|é/þSŸ)~úÔgä}£o¾ô›wýÚ7×ÕÆNXrKW;Þ³3‡ƒ«í‰öÝkïºÚûærŽ@QTúžã}]|:ë(µÖ.ª\GgWÎzÏÎ<'?°ýÇWAc.Ö페j­@J™..5gzû²îøq©ºÒÕÝ;[ª½æ©kÝ Ž6õû/=´ï_ž}Ï–p¦ä—.j <|׿wÀXetñìÒ9òpÅXc³P,}ï7F_7¾> "hµZ¤MÆ$ŠÒ‘Ù#}EY«ZÎÙ¶"GDãœCDæ¶o¿‰&®^\EôEà…ƒdˆ¶U·¼¹¥ÛÉOìüàå=Ã{¾á¬ÏòlA£í¡ÍU®+^y|ÿÚ7ÍÝ»þ-`ȶ-ÅÿŠ"¯“£}¨_8^.ûeµµ¾µ•ê,ç’9!$ic+Ë‹èyž2®ÈUÃêé›úvô=9}02Ì.:ç®e:›b‚¥Z)Ë9Gç¬K2H)S Ò9ç¬1ÚiýƒeįW( ZåXJÞÅÎÅÊåöå⮾éPi°¥6luŒ1„ˆèœóƒ P,û…bE~Ev÷ï:Öô6?î Oz~nff8ç „ ë-p X)=j4ú~ q¾nr%o–µ3Åþ¨ß ²®çy¹1Æ9ç ^¯ƒÂ"²œs‘c 2l9—×ÕÖ× õæ¥æåj;k5aئM[1$)¥ó<ß0&œžÐP­õßßk:¯;ß÷VïïÈcˆ‚‘i!„""Ë£ååe "‚ë\&¥—i­3ãL—ÍßPß¾ÜÉÛÁ©…Ó ¢È¹dŽ,8GP,–Èó<ǹpÖZ@ ÿ¯Æù$+ü NRÂR%tEXtcreate-date2009-11-22T17:57:49+00:00¯fù˜%tEXtmodify-date2009-11-22T17:57:49+00:00ð׬IEND®B`‚numptyphysics-0.2+svn157/data/L35_pendulum.nph0000644000175000017500000000405012264274577020272 0ustar warp10warp10Title: Author: test Background: Sf2: 5,450 795,450 Sgs: 596,391 605,370 604,379 607,389 623,390 619,392 615,399 613,399 617,409 612,407 611,408 612,407 614,409 616,415 606,402 604,402 599,407 598,410 596,410 594,413 593,412 591,405 593,399 587,397 582,391 591,388 598,388 Sf5: 354,0 353,12 Sf5: 354,13 353,3 Sf5: 355,9 356,3 371,3 373,2 400,2 401,1 404,1 407,0 453,0 Sf5: 362,0 451,0 Sf5: 388,0 451,0 450,0 448,2 447,20 445,21 Sf5: 356,4 355,0 354,6 353,15 355,16 363,16 368,17 373,17 387,20 406,20 409,19 411,19 414,18 421,18 425,17 428,16 431,16 434,15 436,14 441,14 444,15 446,15 Sf5: 359,11 358,5 360,5 375,0 386,0 Sf5: 369,12 371,9 382,1 386,0 Sf5: 388,14 392,7 397,2 402,2 Sf5: 402,17 403,13 407,8 413,3 419,0 Sf5: 415,10 416,8 422,3 429,0 435,0 Sf5: 433,15 435,5 442,0 448,0 Sf5: 410,15 412,10 415,5 420,0 426,0 420,0 417,3 416,6 419,2 425,0 429,0 Sf5: 426,15 432,2 438,0 442,0 Sf5: 398,0 447,0 403,0 443,0 408,0 439,0 Sf5: 446,7 448,0 404,0 S2: 393,12 S2: 398,19 S2: 398,19 399,55 400,75 399,95 398,122 394,145 392,174 393,249 394,264 396,272 397,295 398,345 399,366 400,371 401,372 S2: 417,364 412,364 408,365 403,366 396,371 388,377 380,381 375,384 371,390 367,399 372,424 379,431 386,436 397,439 410,437 423,433 433,426 442,419 448,411 450,403 449,395 445,385 438,376 430,372 421,369 411,369 Sf3: 29,441 28,440 26,434 23,428 19,418 16,413 14,411 17,415 21,426 26,437 29,446 28,448 27,441 28,418 30,413 29,415 27,424 30,432 33,423 36,417 33,422 31,432 30,440 33,435 34,424 36,420 34,426 29,443 30,438 33,427 Sf3: 33,447 32,451 29,448 Sf3: 34,442 33,433 35,417 36,415 Sf3: 34,437 33,436 36,413 Sf3: 33,449 35,431 Sf3: 38,437 36,437 43,419 49,409 Sf3: 755,451 758,451 755,420 752,402 Sf3: 759,447 763,443 769,428 773,420 Sf3: 761,449 762,443 766,415 Sf3: 761,445 764,421 767,408 Sf3: 759,438 761,419 Sf3: 757,442 760,427 765,412 Sf3: 758,446 761,443 767,429 773,414 St: 118,377 117,376 116,397 115,409 114,417 113,430 112,434 111,440 121,440 125,441 172,441 176,442 190,442 191,438 192,389 190,386 187,386 184,383 179,383 174,384 167,384 162,381 123,381 122,380 119,380 numptyphysics-0.2+svn157/data/L38_box.nph0000644000175000017500000000644512264274602017233 0ustar warp10warp10Title: Author: test Background: Sgs: 171,378 180,357 179,366 182,376 198,377 194,379 190,386 188,386 192,396 187,394 186,395 187,394 189,396 191,402 181,389 179,389 174,394 173,397 171,397 169,400 168,399 166,392 168,386 162,384 157,378 166,375 173,375 Sf4: 400,136 Sts0: 150,74 147,80 145,86 151,101 161,106 172,106 182,101 188,93 189,85 186,79 179,72 170,65 161,64 154,67 Sf5: 69,447 70,436 71,379 72,359 74,340 76,299 80,266 83,266 88,265 101,265 105,264 107,263 125,263 123,301 111,301 109,300 107,300 105,299 104,299 103,302 102,325 105,333 113,333 115,332 119,332 120,335 118,367 116,413 119,433 146,433 149,434 166,434 168,433 179,433 182,434 217,434 218,433 222,433 225,434 228,434 232,433 237,433 239,431 240,426 241,415 238,381 237,373 236,363 237,345 238,338 240,335 245,335 246,334 254,334 255,335 257,335 259,336 270,336 271,337 272,339 273,352 274,356 275,372 276,393 277,427 278,454 Sf5: 233,261 234,271 236,285 238,297 256,297 260,296 262,295 269,295 268,259 233,259 Sd5: 250,256 249,264 247,270 246,274 242,282 241,285 240,287 238,289 Sd5: 264,264 263,264 260,271 259,276 257,280 255,285 253,288 250,294 249,295 248,298 247,300 Sd5: 99,263 98,266 96,269 93,278 92,283 89,287 87,292 85,292 84,298 81,299 79,305 78,306 Sd5: 112,262 109,270 107,276 104,282 102,289 98,296 93,306 90,311 88,315 86,318 85,322 83,323 82,327 81,329 79,335 78,335 76,341 73,343 72,347 Sd5: 122,275 121,277 120,278 119,282 114,292 113,293 111,299 110,301 Sd5: 95,329 96,330 98,330 99,329 98,329 95,338 93,342 92,347 90,351 88,354 87,358 85,361 83,365 78,370 77,373 75,376 74,380 72,382 71,386 70,391 Sd5: 116,340 115,340 111,348 109,354 97,378 94,383 92,387 90,390 88,392 87,396 85,399 80,409 78,412 76,416 75,419 70,424 69,427 Sd5: 118,376 115,382 113,384 112,390 110,395 106,399 104,407 101,414 98,418 95,423 93,427 92,431 90,433 88,436 86,438 85,441 83,444 82,448 79,452 81,453 Sd5: 116,425 111,438 109,442 108,446 107,449 106,451 Sd5: 142,433 140,441 139,443 136,444 Sd5: 171,437 169,437 166,439 164,444 163,449 161,451 Sd5: 191,437 188,442 184,450 182,457 Sd5: 221,435 220,436 219,440 215,445 212,454 Sd5: 241,432 238,443 236,449 235,450 Sd5: 245,439 249,424 254,418 258,409 262,402 267,392 268,387 270,386 271,383 273,380 274,377 Sd5: 242,400 244,393 248,387 252,379 256,373 259,367 261,362 264,356 266,354 267,351 270,350 Sd5: 238,364 237,365 238,365 241,359 244,353 246,347 259,334 Sd5: 257,442 259,439 261,435 263,432 266,429 268,426 271,422 272,419 S8: 295,306 292,304 269,304 264,305 249,305 246,306 233,306 229,307 216,307 211,308 206,308 202,309 152,309 149,310 118,310 114,309 106,309 107,315 110,327 117,327 120,328 132,328 135,327 161,327 165,326 216,326 218,327 279,327 282,328 291,328 292,325 293,315 294,311 293,307 S8: 293,316 297,318 300,318 302,319 303,321 301,326 299,328 292,328 S8: 456,456 459,456 Sf4: 6,445 15,445 20,444 36,444 41,445 47,447 58,447 62,448 74,448 76,449 78,451 89,451 92,452 109,452 114,453 118,453 122,454 138,454 140,453 151,453 155,452 174,452 178,453 181,453 184,454 200,454 202,453 258,453 260,452 262,452 264,451 281,451 283,450 291,450 294,449 311,449 315,448 334,448 340,447 356,447 365,446 373,446 383,445 400,445 408,444 416,445 446,445 453,444 466,444 472,443 495,443 503,442 568,442 579,444 624,444 631,445 638,445 647,446 654,447 661,447 669,448 677,448 690,450 737,450 741,449 748,449 752,448 791,448 numptyphysics-0.2+svn157/data/L40_tree_of_life.nph0000644000175000017500000000704212264274602021050 0ustar warp10warp10Title: Author: test Background: Sgs: 596,391 605,370 604,379 607,389 623,390 619,392 615,399 613,399 617,409 612,407 611,408 612,407 614,409 616,415 606,402 604,402 599,407 598,410 596,410 594,413 593,412 591,405 593,399 587,397 582,391 591,388 598,388 Sf5: 398,449 399,450 401,447 402,439 404,435 405,429 407,413 409,401 410,392 412,382 413,373 415,360 416,348 418,337 417,313 415,306 413,306 409,303 405,303 401,302 397,299 394,298 390,295 387,291 385,291 383,288 381,288 380,286 378,284 377,281 376,273 380,272 382,276 390,280 393,283 397,284 399,287 403,287 409,289 411,290 414,291 417,293 419,293 420,294 422,295 424,298 427,298 428,284 431,280 432,269 433,265 436,262 439,262 441,263 446,263 445,269 443,276 441,282 437,296 436,301 434,306 433,312 432,320 436,318 449,305 452,301 454,298 456,298 457,295 460,294 463,291 466,291 467,296 468,298 469,298 466,302 464,305 462,306 456,312 453,314 449,318 447,322 446,322 444,326 442,328 440,332 439,335 436,338 435,346 434,349 433,361 432,382 433,407 435,413 436,417 438,421 439,427 440,430 441,431 444,436 445,439 447,441 451,446 452,448 Sf5: 422,395 421,401 424,413 Sf5: 420,395 421,397 422,396 424,396 426,414 427,411 428,410 Sf5: 422,336 421,355 419,376 418,378 Sf5: 426,340 425,364 424,372 423,384 Sf5: 416,409 415,419 413,430 412,435 411,439 Sf5: 416,425 417,435 418,441 419,444 Sf5: 424,428 425,437 428,441 430,445 432,446 Sf3: 405,300 406,302 407,314 403,329 396,329 390,327 389,325 387,322 386,325 385,331 382,333 372,333 366,329 360,328 358,323 357,318 358,310 361,308 362,307 366,307 367,308 366,312 363,311 359,309 356,305 351,299 349,293 352,268 355,261 359,254 362,250 366,250 367,254 366,259 363,259 360,256 359,250 362,233 366,229 372,226 377,226 383,227 392,234 395,241 394,246 396,239 404,229 409,226 413,226 417,227 420,230 421,235 423,239 427,235 430,231 435,229 447,229 454,232 458,236 456,241 458,237 463,237 467,240 472,241 477,246 479,247 478,257 476,258 477,258 478,255 481,256 490,256 496,262 495,278 493,281 491,282 487,285 485,286 487,286 491,287 493,290 495,295 497,302 496,318 493,323 489,326 483,330 476,330 474,331 473,328 469,343 464,343 454,345 451,346 447,346 445,342 443,339 442,338 440,337 439,336 437,337 St: 213,230 212,227 207,229 203,235 200,243 207,257 215,260 222,258 226,251 229,243 228,235 223,229 215,226 207,229 200,237 S2: 340,447 Sf3: 3,439 5,431 7,429 9,426 15,426 18,427 21,429 24,430 34,440 37,442 40,443 42,445 44,446 46,448 48,449 61,449 69,447 75,445 100,445 104,446 107,446 110,447 118,447 121,448 125,449 146,449 148,450 152,450 154,451 158,451 162,450 166,450 171,447 177,446 181,446 184,445 200,445 203,446 206,448 209,449 212,451 220,451 225,452 229,451 232,448 236,447 250,447 252,448 255,448 258,447 262,444 267,444 271,443 284,443 286,444 289,445 292,445 296,446 311,446 322,444 340,444 343,445 345,446 348,446 352,448 362,448 364,449 402,449 404,450 407,450 409,451 412,451 415,452 417,452 420,453 424,453 427,454 429,454 431,453 434,452 437,452 440,451 449,451 455,448 465,448 467,449 470,450 473,450 476,451 479,451 483,452 498,452 500,451 508,451 511,450 514,450 517,449 536,449 544,451 548,451 551,453 559,455 565,455 568,456 593,456 598,455 603,455 613,453 617,452 621,452 626,451 631,449 639,449 649,446 652,446 656,445 663,445 667,444 673,443 707,443 711,444 715,444 721,446 723,446 727,447 765,447 767,446 769,444 773,442 776,440 779,437 780,437 781,434 782,433 787,433 788,441 Sf3: 718,447 722,447 721,447 719,442 718,438 717,437 716,434 715,432 S3: 711,444 716,443 S3: 713,444 717,444 718,443 720,440 722,440 726,438 727,435 730,434 S3: 719,442 722,448 723,438 724,433 725,432 numptyphysics-0.2+svn157/data/theend.png0000644000175000017500000000403612264274577017270 0ustar warp10warp10‰PNG  IHDRÈx·’½ësRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ :¬QtEXtCommentCreated with GIMPWyIDATxÚíÝ}LÔ÷ÇñÏ=p€€<”'°í£ËÕ§7þñŽêo5Ëh4*+s£¾Y¸›J wâõ3ª¨¼>uÛétéÄëÿ”ÕjѦ¬G%I^¯WÇÿrZUÕu3ä{®ê?6èÈáoËf³.Ù> ëèo_ÑÀÀ©Ç•• ¡¡aF(,\SS›¾wèY%%®Óðð¨N~KÔ|¨÷/•O ¾Ò²jUU×)|u¨öîÖ†¤Y,r8œ:uú-5·tèÜ»—õ¯çÏkfðu}âË>Ÿ/ÑÀÀED¬Öý{£ŽÎ.{õ F(k…{ö™B¥$'Êl6+$$X…OH’Žî©Ç”–UK’(RFzŠìv›L&“Ö®ÕÁE’¤šë7—tënÔK’ö=©„uñ2›MZŸ°FûŠžd„2ƒ,Üú„5Ón‡…†H’ÆÆÆ§îst9?~u?úòÝ{¼wO½>ù¹ÞÞ~ŸŸs¾ïbù².×ÇÏŸ˜¸nÚc“¡²p&“àݼÞÙ¿Þãñ,í>‚@–JLL”Ú;ºô“Rlì#Ër#"ÂätºÔÔÔ¦Ô”¤©û›Z¡¬A׎í9’¤?üñ„Ê+jÔ×7 ·Û£ÉÉI9.•”VéÅ£/-é>¦§%K’þ~ò¬ZÛ:åv»ÕÒÚ©¿<ËeY\y¹›ÔÑy[—._Ók'Î<ðöæû.–/òwmSeU>rõé׿yiZ8óYdAŠöîÑ÷íWVæF…†¬’ÑhT€Ù¬˜è(mß¶Y?|þ¹%Ý¿  @þÁA¥§%Ëb P Ý¦­yÙÚÿL!#t‰úzê¼`Ï @ @  €@ €@ @ À‚˜9þÉÑÕ­+%•ºÕТááy<^­ VzZ²¾²5[ááa>mkddTŽnuÞ½žp|\´âã¢åk#_ˆ ï—©²êºÜîé—U–³Ç%“Ù¤=;}ÚV§£[ï_VcS›<,‹"#Wë±MéÊÊLõ94N±°lÔݨŸÇ=n·[å×j|ÞÖ­†ÕßjÑÄĤÜnFFFÕÞÞ¥3ožÓï~ÿªššÛ +øtÍÑ}ß |{½ÒG®>¿p•@ðpIOKžõÊòƒ”»%ËçmÍõMW ­‚‡ËWÏÓÖ¼lY­ ÓãX»&N¹9™>oËfûìŸÑè¿ÃˆEºŸŠ‹Ö¾¢§”¿k›jjoª©¹M’”ø¥uó^XyÃz55·ittlæ2›”³9Ão#×æÅœz{ûU^Q«ÒÒj+0Ю€€…†+%9ɯßÉ"€5@ @ €Oã³X+\oo¿jjoê¿õÔ¤Û=û`1™VÄÇKêííWñù]«¨Õøø„Ï?×uÛ©Ö6‡ÆÆÇ}þ‹Ä‡ŸÅZ3EOO¯úîÈý³Å\ÌfEÇD)8Èî×3 ø¹ÛÝ=*)©TÙµOÈëýüÝ&“Q‘áÚš—íw¡ˆkïèÒ+ÇOÉåê•÷ ø-Ûí6=¾3ϯN½Xƒø©†ÆVýùØI ùöJiì6›‚‚ƒfüÛØè˜††‡g½Ä=##£ºx©\¹9™~3‹ˆŸÆñ§—ÿª‘‘QŸÂ Õι³žÝûƒ©ââ+š˜œœ3’òŠZ¿™E8ÅZaq ­ RPPà¼ß²mhlÕ›ÿ*VKk§ ì뙰ÐýâçÏ3ƒ`yqtuëØñS³Æ`6kKN¦žÈß¾ S  I :rø¹Of”÷®hbbæŒ2×,C XUU7ô¿;ƒ3î·Z-ÚWô”2ÒSdµZøyÂÃô§`§¬‹þ}öüŒ bc¢üæ˜òQ?Òé¸=ã>“ɨï~ç[ÊÙœñ¹ÄñiY™©JMMšvÙŸÀ@»ÒMfÁòh—Á ©·t ))1A’åùÂÃô÷éÅÇÇL]Ê4wK–²2Sý昲H÷§S¬êzû‹rö¸$IDEhwÁN=–ÆÁaÁÆÔ$…„Ïøš0ƒ,Ò €@@ @ €@ `¹ø?Óó¬TdÁmIEND®B`‚numptyphysics-0.2+svn157/data/L05_plane_sailing.nph0000644000175000017500000000103112264274577021237 0ustar warp10warp10Title: Author: test Background: Sf2: 5,450 795,450 Sgs: 596,391 605,370 604,379 607,389 623,390 619,392 615,399 613,399 617,409 612,407 611,408 612,407 614,409 616,415 606,402 604,402 599,407 598,410 596,410 594,413 593,412 591,405 593,399 587,397 582,391 591,388 598,388 Sf4: 400,136 St: 328,68 329,71 327,71 324,72 323,73 319,76 318,78 316,79 315,83 314,85 318,98 320,101 323,103 325,105 327,106 331,109 340,109 346,107 349,104 351,103 353,100 354,99 356,96 357,91 358,91 357,77 354,77 351,73 350,70 342,66 339,65 331,65 330,68 numptyphysics-0.2+svn157/data/L30_see_saw.nph0000644000175000017500000000766112264274577020075 0ustar warp10warp10Title: Author: test Background: Sf4: 250,443 249,443 250,439 252,427 253,424 254,419 255,417 256,414 259,411 260,411 262,423 263,426 264,433 265,436 266,438 Sf4: 390,441 389,442 391,429 392,427 393,421 395,417 398,417 399,423 401,427 400,430 401,431 402,433 403,435 405,440 Sf3: 32,381 31,381 29,372 26,366 23,354 21,353 23,351 Sf3: 32,382 35,363 37,358 40,353 42,349 44,348 46,348 Sf3: 32,375 31,378 30,347 Sf3: 30,378 29,379 27,376 25,368 24,365 22,365 Sf3: 33,374 32,377 33,367 35,365 40,365 Sf5: 748,374 749,382 750,408 749,449 752,440 Sf5: 747,369 749,373 752,409 753,424 755,448 758,449 757,429 Sf5: 748,374 750,371 751,392 753,407 754,441 756,441 755,424 752,399 753,368 752,429 754,434 755,428 Sf5: 753,377 754,374 755,434 756,443 757,444 759,442 S3: 747,374 746,375 745,372 741,364 736,358 731,351 725,346 719,342 715,340 711,339 708,337 704,337 721,337 731,343 734,347 737,353 743,361 745,363 747,366 748,375 749,378 S3: 750,369 752,373 751,372 750,370 752,363 754,359 757,354 758,351 760,348 763,347 765,345 771,343 777,343 780,342 783,342 780,348 778,351 775,354 771,357 765,363 762,363 759,366 757,369 755,385 S3: 743,377 746,376 744,370 743,368 742,359 738,347 736,343 732,337 729,333 726,331 723,328 721,328 715,326 711,326 709,323 706,323 704,322 707,317 709,316 712,315 726,315 729,316 733,317 736,321 739,324 741,327 743,334 746,354 748,358 749,368 750,374 S3: 743,370 746,367 745,368 748,347 750,336 751,332 753,328 756,319 758,316 760,314 764,313 767,312 773,312 771,313 768,317 766,320 765,322 763,325 762,327 759,331 757,336 756,340 755,345 754,348 752,350 751,356 750,359 749,364 748,368 750,375 Sf5: 157,437 158,438 164,438 167,439 173,439 185,441 198,441 201,442 260,442 262,443 318,443 321,442 345,442 351,444 373,444 375,443 378,442 407,442 410,441 450,441 453,440 462,440 466,439 468,439 471,440 473,440 475,441 479,441 481,442 497,442 499,441 501,439 503,438 504,436 506,435 507,426 508,423 509,416 511,410 513,407 514,404 517,403 523,400 525,400 527,399 530,399 532,398 537,398 541,397 546,397 549,396 556,396 559,395 585,395 588,396 592,396 595,397 596,398 600,398 603,400 606,400 610,402 613,405 616,406 617,409 619,411 621,412 623,418 624,423 625,425 627,427 629,430 630,433 634,435 639,437 641,437 644,438 651,438 653,437 660,437 662,436 681,436 683,435 711,435 713,436 715,436 716,437 721,437 724,438 727,441 730,442 732,443 747,443 751,444 753,444 755,445 759,446 761,446 763,447 770,447 773,448 786,448 788,449 Sg: 561,363 563,355 565,351 566,346 568,340 569,357 570,360 574,362 583,362 581,363 578,366 577,366 574,367 573,369 571,370 572,374 574,377 577,388 575,388 572,386 569,383 567,380 566,379 565,375 562,374 560,374 558,377 557,378 556,381 554,382 553,384 551,385 550,388 551,379 552,372 549,368 545,368 544,365 547,364 555,362 561,362 Sf5: 163,436 161,439 160,439 156,437 155,430 154,425 153,418 151,408 150,405 149,403 148,399 147,392 146,388 141,388 138,387 135,387 133,386 130,384 126,384 123,381 94,381 91,380 89,380 87,379 83,379 82,377 74,377 71,378 64,378 62,379 48,379 45,380 34,380 33,379 28,379 27,380 18,380 16,383 14,411 12,431 11,434 9,439 2,439 St: 86,223 85,224 83,227 82,229 85,240 91,243 98,244 105,237 102,226 99,223 91,223 88,227 S2: 260,416 259,415 256,415 254,416 248,416 246,415 237,415 235,414 224,414 221,413 197,413 194,412 189,412 188,411 185,411 183,410 179,410 177,409 175,406 174,405 177,403 178,402 213,402 215,403 227,403 229,404 260,404 262,405 318,405 319,406 324,406 326,410 323,414 319,416 311,416 308,417 306,417 303,418 288,418 284,419 274,419 268,416 264,416 261,417 254,417 263,417 265,416 271,416 S2: 394,417 392,421 384,421 380,420 378,420 375,419 360,419 357,418 355,418 353,417 351,417 349,416 347,416 346,415 337,415 335,414 333,414 335,410 338,409 340,408 343,406 355,406 358,407 371,407 373,408 382,408 385,409 398,409 401,410 416,410 418,411 420,411 423,410 442,410 444,411 449,411 451,412 452,414 454,415 455,417 456,421 452,423 443,423 441,424 401,424 398,422 397,422 394,423 392,423 398,423 400,424 411,424 413,425 numptyphysics-0.2+svn157/data/undo.png0000644000175000017500000000251312264274577016764 0ustar warp10warp10‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDùC» pHYs  šœtIMEÙ  µ@ˆOtEXtCommentCreated with GIMPW¦IDATxÚíš[ˆVe†Ÿía:h4v4Ó¤)))£‹J%’覊 …HyQDDÔE D7u‘t!Fd“I ! ¡…C%„i9¥f¦NêÌÓÅ,égtœ}øþý/læÀ·÷Úëý¾½ÎÐDM4ÑÄÿYÙÕV  ˜ \ÿþøØ›eÙŸc–5µU]®v¨{ü{â˃ 1«ü“êŽoÆ$ *ê]j—C£CHæ WUŒ+ò"@+° ¸9Ç-·„}¨¤|Š5• ¨ÒÌ&æ¸íšãXåS0®àúùÀŒ±ôY%à༜k‡[3´·XÿGÄc†€v`jõ;€½#€ 9×µ‹âg^l.Pïn..¬‘Ý Œþ.ŽÄß_ÝÀú ².dæ …Õ@'pSÎ纀K Ü3ŽÇ÷€ñÜ£g(’eõ!@<¬‰Éƒ“9]e| |t¿W! Ïî_©v:ò°M}Jœ""<ª½Ž\¼­¶×Ó Ü["^h$VkÔë’ÛuV¸³‰Œlô›€ç²,û)å ¸(Oçû€a´«Ÿ€Øý­á»G ŽK³,û(Å ˜AËhÂùÀ*uZ –ˆG 2àvàÖ¡ðT(šÀ©8ž»#¬!qoüÞLpøžÈ;n(á&…Q¬äÿ»øècênu©ÚV@ö$ujÄ Ÿ¨}åîJ½¤(©xŸÚ£®UçW¬¶¨Ï¨‡ ÈïNAÀ\õÇŠ'àˆúº°ˆa@êuc¹S0I]¬Lð)ü¥nQä-•Ÿ¥üByû*{,ËŽŸïû+òyQSßÊö ŠT£N&‰ƒ„õÀ—‰ªO×O– azµß§L†v¯Gž3£:ÔVàž;éï3äÅ‘ddYv"ª0¯Û€¾$Ì&ÓdJœšñžÿyê¢è à3`%ðq-UÐF¾¦I ð°°àóK]©½¦©…w8QÁ3¼<„Ì–S4éT¯J}jÑ ¬¯‡ŠXÝÀ^ÎÑ4 ¹ x¸¼à³·±eNÀÀ«-BÝÝêñœ»tÖÎqìúu]ÉÓÕU¶2T…€ÓW»ú¬úë/ÖÙõõauG…Okµ:y¸¨ÝÁ7Ôꡚ—ûe°é‘P~µÚ]Á¦lVg&­ ÖP¹ç‡¢¢û<ðxÅJÐJ`CoÃvŠöõÛÕMóŒ“êkEkÃN@(ß©žª¨ü†º¾zÝœ5 ²ÌÎ ’ÑFÀ¢Ê¿{ZùQE@ìþ¶ Š/suÊi±FPv÷ûÔ]ꪘUdÔU¦Í%ÝÖÓ¥zÌ 6Š€¹%”ï‰rØ´z L6ºñ1¯DZû"°.RòáC¢ï¿H¯¡7Òá–zŽËæN‡óŒ $SéȳóUeú(x JjCßq}Ý}£'?ÖÑ?Ø4Þ¶4â…MÀvú'NN QqÚHL9¨³"†ß7 Ú­¸ÅuÍìÊÔêAýKèoÃÕæ/€®ºäôM4ÑDMœ‰…IÕqÿ¥IEND®B`‚numptyphysics-0.2+svn157/data/C01_Tutorial.npz0000644000175000017500000001375512264274577020262 0ustar warp10warp10PKÑX\9Œ©1GI;L01_tutorial.nphUT :òIIUxèèe›K²d»mEû5Š@6øÿTÏžÂó~’ì°ÃŠžæo¬½qòÞ²ªqQä!AArƒùoÿõÇÿüéçËÿ~üË?þøÏ¿þí)þñ§¿ÿñã_ÿý?þû/ûë?þ÷÷¬þñÛ_þþó5ïz÷[_«Ìwß%èzƒîw?A[ïQ_oÐ4Úݨ¯=é~mAwÐô|+ü¾Þ£Îà´4÷D}‘¦Q_{Дïð›*3Þ#'a¶!=ç82ö yeÄ5ƒFý#Ö0Ú¥þhRG‹I ¾ÅäŸõ1IÇí—ŒßeÔø“Ò 4ôñv«Òs‡ýz¥,ã¿vGŽþÚ#&Ô aÿ“ò÷ù3;‡ÜëÎá q—(ï á9mÏ ‹ÁÜi,~¾5 K‡…Ôx~8¨D\¦kJ,¦m‡šæHçùp¼šã­9æãNzä ;¶è¶6‘FèXZö‹ïs³ÆÈ4²¡Z¿î Çkc»Ñ.1RæÐw6êÖ¥KmÙIÆøñÛï¸rGÌpÝ^e=Ê#¦‚2S\;¦..ãïrýû!ImGëŽ%0FS™uN»>»úuõW‹Ák—jИòV]¡õ}u÷‹ø ñÚÊòÒx}z¼Þk.¹«%¨q(¯’í¶ÚµÓTÏ„R/оgf¹Š|·$Ýò“ΞÄ\ôb" ÷æÝ öÒ ±O#·hÔìSM±_ì_?¡L¼ ö†Oq\ðü.·“½í¯û|ìÜüzüZm×Þ<ïŸù9ŸÃ~áq£]©_ú¹Ö4ýf溚ÃóÓs¾zËøõÄ+Ï“ãÜp|P¼²ý¯ˆºŒ'ìG>‘’')åè‡Qïò¡3Nâ>„Âg[>#ÎÎ&&yVŽ?Ò.ÕN¸Ê—“C?òù´Ô™ä<ÔzÜGžbû¼‘ƒq‘Cv:ÖKö™–ƒÍûàÌèË¢ÜÔg¦œ8/í‘ó,Ïó…7øí“tšbÇ_ø§ýGËa¾Ò¿»üa¦Ü5í>s~OÎkwû“vß“óšó­yc†å‘ÿtúkÞ+þ‡}αq’ŠwД“펿s˜¯3í<ìôçÒ þÃýâpÏÉlpÑ?wØ0.\"¢}—ÕÁÉ*N|ƒ[/ãÀýåiqÙˆE+ålŸu`9‚rÃCÞq}) {êRò”5.ãßý#h~ôŠË…õFß’´zäà;zÀŸgwu)ŠK‚ô€¯Êè·|YÊ©õ*¶cœ(ã‚“ò³>®õû{=×\7åS/½ËI9Gò­Ö‡q¸ŒÅLNª-/e¡W̻헵ò¸ÌÅ&(¹9!KÎ,ërŸ?‚ëX\âBï—¸Í%©ùR~8b™V×séÛô ¹6r4÷G'èëˆöˆu¾˜í§/‡ôÏ›ð¸ÜÐc<ìët×ÎÊqJÊÓ¿ä‹u¤K§ø?óÍ%uÚ´×e”“þN~Ã㜸lbçobgnæ…KhÜäAT®)zoÛ>Ò“Kð²^Ë7”A¼Anæ3âñÄoÅo™¿†¨¯yù—äV| ÿ  º|nº{Ó˜‚'NvžÙyeç•7j˜\Ã}Žè×”.LÇð {l]³æ¸¦“ïÁgö¤Ó7ð§~œlßL{ Éõ þB.R ɹRΞÊ6Ã'*C¯¿ÇÉF´g¿‘Æ)ÿ,GrA—åŸ5õ˜6zÒO7úc;ˆnÁ:¶CØ…>í~«˜ÏJ}wKz„<Û€4㈆SŒ–ðHÎÓªáh"s¤ÅüÖJ:lÏUÓÎ;õÉy+åˆñ÷M9vŽ;s\äè¯Åü‹R†­(—-úÈéþÕzÁg£ÿMçZý›0ÏäÏj¥P'˜Ã0x2ƒát¢0Ÿ¯…’¢×õËB,”…—úžýwöß)ôÉv'áž“F>ÇpÏ-–ãÖ„}šœd {«ÂS„å• »Îo¬¯&|y:–}‚X4õ 5cqR,úôcaèd[2ö›®–ØšpU÷"Ò¶š±ˆD®#´™q*žâé~l6²K÷ccv”d+‡4Uê>úYø(Ið+‘Ï" R]yÜoy;iL‰&Ôï±Ä®“Dÿ».òö&[•áyaB7áÞ„ìsö.EåjQ8¶µÊk„¤«%§@*9ArÐmx´ðâ˜O•‚{öã;f_¥=Ô„Œ6d‰ eêi˜°1‘§Æî°ÄÛŒ°%Éà¾ÌÖ!‚ƒP—’„‘º9‚Ïó5B׊ØÍeZÇŠ«¹X*9•ŠÅ¦–ª9L§,ɺ«Ë Oýêm-(Õw ¿´¤Â‹”µ™¼úŽ¥è×R i ŒAÎT½„€«ƒ¸ÏäžVTûÕ®´b,zAi½«¢d™Ý½¦MZÓˆD*3Íè¼’æÛ ,œþ3 ÜNކL#éö(ê=Ý{ͧ×iÖ`_Ûk§ÝöÈúbÙÖ57üp{­J†³¿ÛïælÝÔäÏåý±4W®sf™3qûæ/d3++Jž0>µö|Õ’Ryê- Z’Kz»=ÇU ¸ØÍ@ô‚=À!§Œ#|tŽ…DéTkÁ£ ZÑ‘E•S€-•1`Üsé7úò_È3hDé8DTÙNG€âs$*±•»…‹±ÙÊÜœ2N &N $;þ:do %¾M$îÇTq‘ }I4\ºžÏ·¨Ü‚qÑpJõEÜ!âºD%¯rF Ñ·éSŸ¾W}DNÖ†½yã²?×j8Ö²zÅæ™B=^7Vò&À øLàÃ-æJnD0(ñ¯†vÎJ(=ùäýðÒúøÝˆçRa&rç˜x|-O›ãéã­È°ôxyÝßLqÅDºCÿu|µŠ‰bˆhÈÚl{Sü»ØbpQykŠL£_?Y>î—:á[–'€mˆãD‘ñDYŠ4±C´º·ö€*ø]\ªgÖ_Á̦|7Ì,ÝT.¶4ÒÁ¯ïç$¿‰è¦ŽÈl[Ó[3:»Æ—¥NZ†-…1OÊ ¸ððØŽó€òJ↘"Ú'\Þ¡³¤æ”¹=‹àJ{íÆº °qqWÛŽ\¬2ÑJ½ÓKì+¤Uˆ3¤sˆÁCûNWš'b°Ò/• Ã>sœ†ªx¾ÂZÆGNùîA$YY,=v¥ë$Žip½Ý£ˆ×›RÜâ@øÍЀٕgoú¸Ö·Rz7á3i«Å9“àyE1âßÇy.P>̇FsÒ <ÕÒúå#F9Uœëé‚Ù9 Ó¨ÊuL©ÁCMúk$‘®,€êÑ÷ÓgkC›:^U·Î—¦u8“]%«C˜¹#ëZœ Ðܪ|ô·šíHhmVâ!f„íëG2ráx ¹_¸ëÅcÈY“ÎàÞKú‚Kj]¿ÈÒd#·.Ùû˜žô32È¥ô俆ž5i·Oœ””G¤NNjv“ wUê¹¹V[Oýï/šˆ‹Ò—§LzKëGð C¯l›Z/î¹*ñV\~;_}Ê•4GOêQÈL ¯xMíß¼ú ú±—ç O%TfÎX\CGUò‹'•$¡‡i.¹³)‰Ä³9­Žµ\Æ÷xr‹Û³ê¦ŸÙ’l"à _ qÖP7㑚`IÇWL¹æ?-¸÷j)L›òÓâ&êü¼{yZÏT’¹9Ÿzy˜; §Fä(?Ã3àÙ±¯OÅ@Öœ’°9=mWeþ–/½<èüê ëЕ³'5ŽËùYíÎ]yÜü–(›s5ù Áxkä¸ùæšëtyÜ×wPNÂÎß5åÛŽ^Œ @‰l• *Uô> ÚŠ³¬œ…Õ›¬m¸aËì\SíøŠÛ}:·õt²Î'°­9'ÙôúÙ¯œÐ¬{ö©×ަžß”ýŠ’9k}$u.Ñ|Oòz¥ï>§|ex·.ÓßkÂãR{¡^zÀ7Í7f³Là¹q|íþÂó$—¢úõ„ ©›IVN/åJŸ“jS’Ð ó Jê”Ôp!¿‘õú½r_w¿ä4]óœï–WB²º5ʬosâñ9©è¡ÀÕkát@£]Ó0í_àGM)2ŸËoýIGÛE¹ÞíCç {…æ}à•t ¹¶³|FGh?ܼ²È+i›À U#šÌ9>cÇ´>ÃL›†­3Zè KÝ¥ «ËÿØç‚ð ÄÌù3y~A×ðǰœ(iÏ-ôµ#œD]“À¬˜+i&°NrÖ.w‚¦\ôÁœü®2W{U!Ü»zg‰cŒSüí£(·mŒÇó¾Ä?î w5a<¼EðlN×zùÅ”[T;ãó¹Ø`Eù¿𓈩g}éB?)†œêª7I»B?[¹ïõiØ?3ât̘üè%K?o /¨ò¶ý—tÚÐæ·,Ãî¶ÝÎî¥÷ñ_“ è{+=)?!êqH‰†­7)³ò™iX·5ÅÄ"NÏ¡Çâö-ð6'ª˜ªˆÞ“;+^=ZæÐ¿¢Ç|gÂZ+¶zå5/Ü®î¼öî^yÇ ×UGUñ©ú@CK¯ù±‚V—ë)_ax;æxî0¬,içWË'"G$¯ñ–éÿáPäX©@ØL–+ýŠã_ÑÓs^}†©®:"ƒÝ:DV?ÛâŠñGqªð’œs-$é föD{9¸RöbP“£Z%™/€«+ÿ]IO⯿9@WÇéÂ1{7È£Z¯ßµòìÿ˜¿ÆÝÊv›jÜÿPKÑX\9Œ©1GI; ¤L01_tutorial.nphUT:òIUxPKKŒnumptyphysics-0.2+svn157/data/choose.png0000644000175000017500000000121512264274600017260 0ustar warp10warp10‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDùC» pHYs  šœtIMEÙ ( »;rktEXtCommentCreated with GIMPWèIDATxÚí›1RÃ0Eÿ2™TÐŽŠŠ @Ã!8%7*¸ Ü!U*B“ôŸ†Œ'–di-KÖjÆMFùÞýòX»/ Ðø±„I¦&R§©‰ç6BJM<—Rzâc!5%?† R[òÚ&œØ6Xáêk>20ñ%€KW®?Þx°° ]CD6ên“\’¼%ùHòƒÿcGò•äÉ ’p\Ù4ÆJþ™ýãË“@v MV$ïék’w=Ág×ÐÜ΄®óJш2àìàeã§Žy¥hXcÀÀgÀ¼½c^)Q|x ˜·uÌ+E#ú xóˆnŒÿX___/[>â[XÙCÆÛ—C6K€À àË"vikkëÎÐàé«$-1e¨RË:I3þÂ… =I5’FIºOÒ’ΆÌñ±¤ÙQk^À±¼<âx—3À àð° hHq§³kLBuøxØ'# `Ðì07ø#§”½8Rêwì<©ÙáÇë¿ <›„Pä…ûŽÑ̤ÄÊBQ@Ž×½–l—'‘¤¿¯;ʼû/ã’@ø³ëŽž1Žð)àªææf?„“4šÜ`­q¢-À[ÀR ª‹®ØäåKË´Iz\RSgggÝy}öïß_-i¢¤G%í,ÀBJz_Òm’ªc÷-šb+‡tJzEÒ\IM’–KÚ%©7ÂØO$Í0Ý%?Šñt¸½½½ª¡¡áIààÒ2½žGMb4Æä&QóÿÝdÛä-À@›­$æYªA€uÀÝTæm²ƒÆ¿¬2‰W 6§óð6ð3•)ÀýÀjÛ ò-Å‚ ð)ðœÉ¯U ÔÎ0½#ômï‡a“!F-À©@t¿kÌIúÝÐÔRËx² Òx!2Àƒ•´BÒI$õX.(l‘´HRƒëIš&éMIû$eJY>ËÑ%Zõ»@ ­2Ý(i¤¯rÉHÚaj © ¹º»»kL˜zUÒw%Î1&Öl„H  4u†“ïyž— ™«¸¸¸‡ì­/—7ÖÒÆl¿ ÐB¹v„ùjÉ6.'‹E¸k˜Ìª—€Ü“XK¶»4Üw[òu,Y{<äÚŒÈÞö,ye(iWd>ÐD¸¿¿è-¥­~”-j\È÷ß90þ¸!WñN@\"ÿL¥ðs§€ ØžÏ +’.7¼¾¿ä¸¤ ÕübмC´&IÙ´V…3í°•’Žôaç{ ï˜äêj¿Kèéé©1å°=ENÒ6I·WœñyÊ“t½¤µ’~ŒQS|]Ò ‘k‚IÁȲ·Ëæ™”6ÿJÝ SÿûØaþwÕ. Ö+¨!Û½®Ëqà2l¯8CövZoÔðëUÊëà* ½è9zÑˤ:|ôsÚ7IEND®B`‚numptyphysics-0.2+svn157/data/reset.png0000644000175000017500000000237512264274602017134 0ustar warp10warp10‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDùC» pHYs  šœtIMEÙ ÅÃetEXtCommentCreated with GIMPWXIDATxÚíš]h\UǧÆ5±6 ¦µø‘Š)}HŸêƒ…@QQªø$ŠQÑÁñE,HQðA«¦hý@Z´P 6âS±PŠ…ÐRѤ¤š6šÍ6æïÃΖû`öžÙÜÝ»Kï.÷ÂÎÎ=ó¿sæÌÌ9P @ (p"¤ H*—«ì0 œ±{ù¼²2 ¤Ú,ñ!ÂøMÀ­Àö pØ ì·ç†f|#‰GRIÒfI{´8ö˜LIÕËùžM’ž”4žÐû®¤­’º“zk] `½¤]JÇ.“uFÒ¤ã5t?KB½XVã·õÀ`„ŽA“õ<쮫!öpÐݨ X‹€›:6š¬Çø.à /Bü†Dðm*+zV:ß;l.Š} ¸2Ö9ô¬s|ýUÀS@G+䵘v虎4¾<ì2yÐãÐÓiümöõ=ø 8•“=1²ÀÓ‘/‰ŸÞ˜ž¥§;å믞6;ÇwØ ÌäAÀœCÏ\ŠëßÜõ«X>&òŠ=)ó~»S _³y°äZØ ¼¬vþ}Ö²À†OÊZ\÷0ão^MIusý€›± vd<z,5~¸·Ž^À÷ÀgÍÊjà‰¼3füÀCÀ51Í–ÿÁÀöÂxCJ\'½=«Çg€åuŽå_àOà%I 6­:Ü^଑ûíZàœ=ïF€Ã!„Ù¨Ž¤½Äbp¸¾ŽHß,LÏß$IèÈ(¾ XAë¢×®Wìãž'!«TxE«TwUëÉàœU*¼ŒöÁýÀš¬SáÚˆ€¾dJžU*ü»“°–AV®;üÖ&6 œÎz œ±r÷¯6 `$9Î,«ÁÀ;Àß-lüËÀÉK–©ðð°ÁêÿVÂ~`Ÿ?BPÖ©pUv xÑ*ÀAç '£VáM…²—Û8æ­¢<1·ŸIŸFÀYÇà“²£ÀGÀàb‡ŽåÀ·Àû!„)o1Tïi#ºÂ³À§m=¸”Ê6Ø@«,ƒKé OX@<îÏ °Í*¹PwW8„P¶ù·Ãæb,JÀÝÍô‚†u…„aàm*m®X\ <¬Í›O»d‘ÀT¶©pÂÏ€[ðï!dN@Ù麋EçcT¶ÃÎ9ô]aÝ¥þv ‚iAë ­År’+c=kRÖè)à gšÜlÉ“€£ÎT8 ?ß9b®1à×ÈênÈÔÆ×œS+WFO"tœ>Œ|ß!àM*íïÉ“€À/5dæ-¸ý™¯—ωÛö:œÌÕ=$uIºGÒ¨¤‰Äù½yIc’öIÚà=¯'i å â’ú›qH2æ¬p•#²[,M­ºý°}ùcõTd’ú›€í^].wC'M®!U` (P @ ÿ½2eÒÇVŠIEND®B`‚numptyphysics-0.2+svn157/data/L10_the_leap.nph0000644000175000017500000000446312264274577020223 0ustar warp10warp10Title: Author: test Background: Sf5: 572,391 571,388 576,387 638,384 644,384 647,391 644,409 572,408 570,392 Sf5: 581,388 579,388 574,402 Sf5: 593,385 590,387 584,403 Sf5: 604,385 598,398 597,404 Sf5: 619,386 617,392 612,399 610,407 Sf5: 634,384 636,385 635,390 632,393 626,406 Sf5: 323,273 320,273 350,275 398,272 397,284 395,288 386,288 379,286 323,287 320,284 319,275 Sf5: 329,275 327,276 324,283 Sf5: 339,273 334,282 331,284 Sf5: 351,277 347,285 Sf5: 364,278 365,274 358,285 Sf5: 383,277 381,278 379,284 377,284 Sg: 606,354 608,345 614,336 617,328 621,351 633,350 631,353 621,360 632,373 630,375 625,374 623,371 616,369 613,365 608,364 599,375 601,363 603,360 599,356 590,352 588,349 611,345 St: 352,129 347,138 349,152 355,157 363,157 371,154 378,145 377,133 373,128 368,125 355,124 348,126 345,132 Sf2: 223,100 Sf2: 171,68 Sf2: 176,83 Sf2: 145,124 143,121 142,118 139,116 137,110 135,107 134,99 137,90 143,84 147,83 150,80 154,79 158,79 161,78 167,78 170,81 172,81 175,82 177,86 179,87 180,92 181,94 180,108 179,113 178,115 176,115 175,117 171,121 168,121 165,122 149,122 147,121 145,121 S2: 134,100 132,96 130,96 124,98 116,102 112,102 108,105 104,105 98,107 96,107 95,109 91,109 89,110 86,111 84,111 82,112 80,112 76,114 74,114 72,115 70,117 82,117 84,116 92,116 95,115 137,115 139,116 141,116 S2: 133,94 132,92 131,95 129,96 127,102 126,102 125,104 121,108 120,111 119,113 117,115 116,117 115,117 113,114 112,114 110,113 107,110 106,108 104,107 101,105 100,109 98,109 97,110 95,113 94,114 93,116 92,117 94,117 S2: 77,111 76,115 74,116 73,118 72,119 69,120 66,120 64,121 62,121 60,120 58,120 56,119 55,116 53,114 55,101 58,100 62,99 66,99 69,100 73,100 75,104 76,108 75,114 S2: 152,119 150,117 149,120 148,125 147,126 146,131 145,132 S2: 165,121 166,118 167,119 169,122 170,123 173,129 174,130 S2: 136,127 138,130 156,130 157,129 168,129 170,128 187,128 Sf2: 103,78 Sf2: 99,73 Sf2: 103,77 105,78 110,79 118,78 132,75 151,74 172,71 191,71 207,70 Sf2: 110,57 109,58 114,58 125,62 141,67 162,73 182,79 199,86 213,91 Sf2: 162,69 Sf2: 162,70 161,72 160,73 159,78 Sf2: 172,78 163,78 161,79 160,80 156,81 154,82 153,83 150,84 147,87 145,88 144,91 143,91 142,104 145,108 148,108 150,109 180,109 Sf2: 162,78 161,77 Sf2: 164,73 162,76 163,83 164,86 163,98 162,109 Sf2: 147,88 150,90 155,90 161,92 172,92 175,91 177,91 178,90 181,89 numptyphysics-0.2+svn157/data/edit.png0000644000175000017500000000667212264274602016743 0ustar warp10warp10‰PNG  IHDRdÈ‘^Ó–sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ )3NöEü :IDATxÚíÛ{L[eðsNÛSz§e¥-T …ÚJru, ™.s2#c.Ñ0£ó²e¾.^67—hæ²)F£‹1KT¶á²0ó1S‘,,:Ç4E6®åÒÐ m)miÏé9çýã¼/ïÂ;¡t7æûûþE›ò4|Îs~Ïå<  à ø‚``ÝEáÎ{í÷Øe.É+Ìгà6,À,À‚```A ° ° ° €X€X€XÀ,À,À,```° ° ° X€X€X€,À,À,À‚```A ° ° ° €X€X€XÀ,À,À,```° ° ° X€X€X€,À,À,À‚```A ° ° ° €X€X€XÀ,À,À,```° ° ° X †çç’W˜¯û>A===8ŽÿÕïú=¶%µOng›7­guww×ÖÖvww'ÜÃ0ápxff†a˜¿IÏú«$II’ · ¿ûî;—Ëe±XhšŽD"ÙÙÙ8Ž'''c†¢¨H$BQôï€uãq¹\ÍÍÍ}}}ÇétbVZZšššš••Å0Œ@ ضm›B¡Hà*ööö"b2™x<Û…Bá¸ßy,N÷Þ{ïMLLŒQuâÄ g·ÛÛÛÛ#‘HRRRaaáÚµk—Úl__ß /¼€ ÈgŸ}–——ÚÚÚòòòhšÎÈÈÉd ¨Ý(úŸ$~¹¸ÜÜÜÜœœœP(4;;+~ýõ×3gÎ$YTTôÌ3ÏTTT$ÐlFFÆŽ;Ø=räˆD"q¹\O<ñÄöíÛe2ÙíÆ‹ÅZ­Öét’$Éãñn‡¦éñññ–––¦¦&‚ 0 {ë­·yäNÇáphP*•>þøãAôõõÆ]»v½ÿþûIII­­­?üp^^ÞíÃb& ‰D"³ÙüÎ;ï¨Õê‚‚Eišöûý(Šj4šøÿÎñññC‡ýòË/^¯÷àÁƒV«µ¸¸Çqš¦Ãá0MÓK-ó(ŠŠÅâ®®®-[¶œ:uª¢¢bÓ¦M™™™A£Ñx;j[8I’ôz½v»Ýår ø|¾/¿ü²§§‡Ëå†ÃáÞÞ^Ç÷ïßÏÞ 'vuuùý~¿ß/‹ßxãúúz>ŸÏv7‡Ãqþüù`0¸jÕ*ƒÁ°¤^Æ0L0$I2‹!‚ãxYY‚ ±XÌn·§¦¦ŠÅâ%]nb…3 ¹Ýn¥R‰ H$™={öì¹sçPår¹ƒ!Îñ‹a˜üqëÖ­J¥òÕW_MNN¶Z­\.wÎñòåËÍÍÍccc=öXZZšÃá°X,ÉbšÃYd’‡=N§›Wž÷ìÙSUUõì³Ï.©rq+œ±XL§Ó)йûN,óx<E1 “Éd\.W£Ñ,ÚZ8öz½J¥Òãñ|ýõ×ããã¹¹¹/½ôÛNqqqee¥^¯ijjÚ¾};ŸÏŸššZ·nÝ¡ÿÐjW.ܸP(¬©©¹ï¾û233†™ëD>ŸÏf³Ùl¶òòòU«VÝB,¶p"rÝ"²ÔéŒP(ܸq£Éd²ÛígΜ™™™éëëkhhøí·ß8NkkkiiiNNNJJÊèè¨Ãá¸páBü}E%IJJʹsç*++% û¾Z­.--õûýr¹üÖÖ,¶p2 ç-S¢Ñ¨Çã©©©‰³{£(*“ɬVk~~¾Õj CCCÏ=÷œJ¥*(( (ª¿¿ÿäÉ“Ÿ~ú©Åb‰D¯½öÚæÍ›“ÅáxÚD"çÏŸonnÖëõ¹¹¹ì›ééé ³³³z½þvŒ†áp¸½½ýƒ>°Ûí×b¡(ªÓé,ËRf‡£ÓéØ wqq±Z­Æ0Ìãñœ:uª½½}hhˆa˜;vh4«ÕŠãø¢‹Þ¹I8v¹\Ñh”}éñx¤RiFFÆí›” …Âõë× †y=‹í)‰ Ìsjl±›žž>tèÐÑ£GÁ“O>Y[[[YY¹ÀÞÆu#‰jkk‹ŠŠŒFc0üüóÏÇæÍ›óóó—ÚTâXs·Ï­[ŽŽvvv&%%Q522âóù.^¼¨R©x<^ÿÅ_4†ýÀ ú|¾––·ÛÍî…D£Qǯí;$IF"@ …‚Á`uuõ]ƒe47lØÐÛÛ;55•••UUUURR"‹'''Ç›o¾yñâEÇ_~ùå•+W|øðäääÑ£GëêêV¯^Í>¸ýᇺºº¶mÛöûï¿·´´,ÜÚòÂr¹\ÃÃÃJ¥’Çã9Ά††§Ÿ~z×®]z½ž$ÉŒŒŒÓ§O·µµMLL¸ÝîK—.?ÿüó ×,š¦¹çž{Ün7Š¢ÙÙÙ%%%ìî¨ÝnS*•yyy>ŸÇñøŸrßáÑ¢(‡Ã‰Dd2»¥FOŸ>=22BQÔèèè… ¾ÿþ{’$×­[ÇçóKJJâßAgkÓÌÌÌÉ“'ÇÇÇçŠz4³¢/¯ž566väȆa>l±X&''?úè£H$âr¹¾ýöÛÆÆÆ³gϦ¥¥½ýöÛæêÕ«ëׯOMM³q@P^^ž™™Ùßßït:333ïâ©EQüñÇ¥K—p×jµÙÙÙJ¥rÍš5_|ñÅ»ï¾;99™››ûÀ<ôÐC555'++ËápƒÁ…Ÿ$c†ãx0DD,³2H’Fd||< ¢(Ê0 »‰D®}¸¿L±&'';::²²²¶nÝj±X‘H$õõõEEEÃÃÃ^¯·²²R*•Êår‰D244d·ÛW¯^-•JYl$'›L¦'NLOOgee™ÍæÆÆÆ?þ˜-ð¡P¨··—ËåƒÁ{ï½A?ÿü3??_,/k,•JµfÍšŽŽöTŸÏgG–••Y,Š¢®=DQI’2™lÑzŒa˜P(ŒÅb4Ms8œ”””kŸ¡…B³Ù,‰Ôjµ×ëE„ ˆ8ÏOÜI¬p8l·ÛÉÎÎ ÿû EÑk_²¥Úãñ8ÎŒŒ ‘HÿWˆD¢M›6Y­V‰DríÆ>÷f±îŽš511ÑÒÒ"—Ëåry(šw àÚUÎôôôÏ?ÿŒaMÓ‹v¹CQûa™L–ŸŸw¯ iš>sæŸ]]]IIIß|ó\.g—r4Mû|>Š¢ªªª$ †a …Âãñ´µµ ­VÏbsjj*\¹r¥°°0ÎEÒ²Æ"R*•¦¤¤hµÚcÇŽÍu+’$N'AÍÍ͆q8œ¢¢¢ÒÒR’$}ôÑxÎ]ŠD¢ÂÂB­VÛÚÚºbÅŠµk×ÞÈÉàeÅçãuuu …B,»ÝnƒÁ””Ä‘ÇOKK“Ëåì¬òÃ? z½~Ñ¡AÇ­VkyyùÀÀÀÞ½{÷íÛ'“ɤR©Z­ž788ŽX,ÆnQ,k,E•+”µµµl‰™«PEåççK$†aêêê(ŠسgF£IOOg6„¢hzzúÞ½{»ººöíÛwàÀöŸÉdš7n@ àõz¯»9±¼ <Š¢ì ÎÎ€æÆ©¹ÂÄîØäää¨T*>Ÿÿ9 ÃV®\ùàƒîÞ½›½¯ûûûÿ·xÉd² 6TWWÇ9ÂÞù…t<·Õý÷ߟÀ/Êd²úúzv]í÷ûÙÕõ¼«ÅçóåryœÇ¤à¬Ã‚‹8ëp °nш´üÿÙz`ýÝó/K0¼‘«FIEND®B`‚numptyphysics-0.2+svn157/data/L15_trampoline.nph0000644000175000017500000001011012264274577020603 0ustar warp10warp10Title: Author: test Background: Sgs: 704,200 713,179 712,188 715,198 731,199 727,201 723,208 721,208 725,218 720,216 719,217 720,216 722,218 724,224 714,211 712,211 707,216 706,219 704,219 702,222 701,221 699,214 701,208 695,206 690,200 699,197 706,197 S2: 289,413 S5: 1,446 Sf5: 6,253 7,252 4,252 9,255 14,255 17,254 22,254 25,252 29,252 32,251 36,251 41,250 45,250 49,249 54,248 59,248 63,247 68,246 77,246 81,247 102,247 114,245 121,245 126,244 157,244 160,245 161,246 162,248 165,257 166,258 167,263 166,271 165,274 164,278 162,281 159,287 158,290 155,301 154,309 151,313 149,317 143,325 141,328 137,336 133,343 127,353 124,359 119,364 117,369 115,372 114,374 112,377 106,383 104,386 101,392 98,393 96,396 93,396 91,399 88,402 87,404 85,405 83,409 82,414 80,414 77,421 76,424 75,428 74,435 72,438 69,454 67,473 66,479 57,479 Sf5: 731,479 725,479 724,474 723,464 722,461 720,457 717,448 716,444 714,441 713,434 711,432 709,422 708,418 707,412 706,389 705,385 703,374 701,352 700,346 699,342 698,339 697,337 695,334 692,324 690,313 689,310 688,298 687,291 686,287 685,277 686,257 687,248 689,245 691,244 699,244 703,242 709,240 713,239 719,236 724,236 726,234 728,234 734,232 736,230 738,229 742,228 754,228 757,227 761,226 797,226 799,225 Sf4: 160,244 165,244 167,247 168,247 170,246 174,246 176,247 186,247 188,248 195,248 197,249 200,249 204,251 207,252 209,253 207,254 205,258 204,262 200,270 193,270 191,271 188,271 186,272 178,272 176,273 171,273 168,272 166,271 164,271 163,269 158,269 Sf4: 195,269 193,270 192,273 190,275 188,278 186,280 184,281 183,284 180,287 178,288 175,291 174,293 172,294 171,296 170,297 169,300 166,301 164,301 160,307 159,307 157,308 154,310 153,311 151,314 149,315 Sf4: 690,246 685,246 683,249 678,249 677,250 668,253 665,253 663,254 658,254 656,255 654,255 653,256 650,257 642,257 640,258 641,271 642,278 643,281 645,281 648,278 657,278 659,277 666,277 669,276 677,276 679,275 682,276 688,276 690,275 Sf4: 651,276 649,276 651,279 653,279 654,282 655,286 661,292 664,294 668,298 671,300 675,303 677,304 682,304 685,306 687,309 690,309 693,312 S3: 644,261 640,261 638,262 633,262 634,262 S3: 622,260 625,259 635,259 637,260 639,260 642,262 644,263 S3: 611,258 622,258 624,259 626,261 628,262 S3: 598,258 610,258 613,260 614,260 S3: 583,261 584,260 588,260 590,259 602,259 S3: 570,258 577,258 579,259 585,259 587,260 589,260 591,261 S3: 551,257 566,257 568,258 572,258 574,259 S3: 537,256 541,255 545,255 548,256 552,256 555,257 559,257 S3: 515,258 517,259 519,259 521,258 525,258 528,257 534,257 537,255 539,255 541,254 S3: 501,257 502,257 505,256 510,256 513,257 517,257 519,260 520,260 S3: 487,257 490,256 491,255 494,255 496,256 504,256 506,257 509,258 S3: 471,252 475,252 478,253 480,254 484,254 487,255 491,255 493,256 496,256 S3: 457,252 459,255 461,253 476,253 S3: 439,253 456,253 458,254 460,254 462,255 S3: 424,249 428,250 433,250 435,251 439,251 440,252 443,253 444,254 447,254 S3: 407,246 409,246 412,247 417,247 421,248 425,248 427,249 429,249 431,250 S3: 391,244 409,244 410,245 414,245 S3: 380,244 379,244 381,243 383,243 385,242 387,242 389,243 391,243 393,244 395,244 397,245 400,245 S3: 361,243 364,243 366,242 374,242 377,243 378,244 386,244 387,245 S3: 349,245 350,242 366,242 S3: 327,242 332,242 334,241 354,241 S3: 315,240 320,240 322,241 324,241 327,242 329,243 330,244 S3: 301,238 312,238 314,239 318,239 320,240 S3: 290,240 S3: 290,237 293,236 295,236 297,237 299,237 303,239 307,239 S3: 276,236 290,236 293,237 295,237 297,236 S3: 263,241 262,240 261,240 263,240 265,239 269,239 271,238 277,238 279,237 280,235 282,234 284,234 S3: 248,242 247,239 248,239 251,238 262,238 266,240 268,240 S3: 239,239 240,237 258,237 S3: 225,240 226,239 229,239 231,238 233,238 236,237 240,237 242,236 243,234 245,234 S3: 213,244 216,241 219,239 223,237 228,237 230,236 234,236 S3: 201,249 205,247 207,247 213,245 214,244 216,243 218,241 219,241 222,238 224,238 St0: 179,188 178,188 176,189 174,189 172,190 169,191 168,193 165,193 164,198 163,201 166,216 168,221 170,225 173,227 176,228 184,228 186,227 188,223 190,222 195,212 194,200 193,199 190,195 188,191 185,189 181,187 180,187 178,188 175,188 172,189 170,190 numptyphysics-0.2+svn157/data/next.png0000644000175000017500000000573212264274602016770 0ustar warp10warp10‰PNG  IHDRú§DsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ  —!ætEXtCommentCreated with GIMPW 5IDATxÚíÝÉoÙ}ÀñwQµGûˆZ(‘ìn’]Õ°-$1L’ƒ>ùäœSN @ƒo¹9Oœ›=¶ „Õ¤ÔÍM©]CF EíÜ:Jƒ °±%q¸|>gU¡ªõÈ/د꽆Z­V X£F€€ €€ l]ÍïúçŒû´¶°½ûýÀÇ' €€ €€ €€ €€ €€ €€ €€ €€€€ €€€€ €€€€ €€€€ €€€€ €€€€ €€€€ €€ø@@@@@@@@@@@@z=™¿ùíïã§?û¹ÿ}àýôg?ßüö÷ñdþ©ãæíp“ ‹Q©NEV®Äå+×£V«ùŸÖdvö~|ñ‹_Åþ×—q®§;Ò¤…üùhmm­fe¥Ó37b8«Ä¥Êd,,,ú Þ[­V‹©Ë×bêòµhmm‰Bo”ÒBœ9}2d3»wï›.W"+WãÉjÏÂÂb g•Î*±wïîHй(%…8tèÙ,ž>}#£c1\®Æ;³F5°îæææãË_ÿ.¾üõïâØ±ÃQJòQÊEgg‡€l4‹‹KQ»Y¹S—gbeż°1ܹ3wîÌÆ¿øeœ?w:Ji!rý碥ek}éÓP{Çå¹ãßùÅÖjµ˜¹vëÛyW¯^¯ùMMMÑ×{&Ò$…^#x'—*“‘•«119ËËËk>~ÇŽ¶è‹4ÉÇéS'¢¡aãÍ—ì=Ø¿õrÿþÃÈÞÌku"’$ƒ}±³}‡Ÿ ./^¾Š‹'"+WâÚõÛucÿ¾=‘&ùH“Btuíùó12:Y¹7o}U×9ú$Òb>’b.öíÛcäÔ£GsQ‹ry,î}ýM]çøìÄ‘(¥14Ø;¤^KKË1>q%†³JLLNÇÊÊʚϱgwg‹ý‘&ù8z䬋;wf#©ÆÈèxÌÏ?[óñMMÑ×{6Ò$ý}=ÑÜÜ$ ïâúõÛ1\®ÄèʼnxùòÕšokkBo¤I~[>‹ l++µ¸zõzd#Õ¨T§âõë…5Ÿ£½}G öE)ˆî“Çäÿ{ððqdY%†ËÕxøðq]µî=æÛZoµ§€Íoaq1ÆÆ.GV®ÆÔåku}«rðÀ¾HÓB¤I>Ø·}òvòi8»×oÜ©ëÝ'Ešbp°/:v¶¡À¦ðìÙ‹½8Y¹7oÝ­ï÷_÷ñ(½ùý÷1ÚpY^^މÉéÈÊÕ¿R×ãoŸvŒ¤˜‹$ÉÇý{D`S{ðàQdåjd#cñàÁ£5ßÔÔ¹þž(¥…è=:šš>Ì|Ɇ È­[_Åÿd—bôâx<þrÍ7²»sW ­N†?v؈¶¤7ïFy¤£ÇãÙ³k>¾££=ŠC«K¨œ8qdsä—¿úï.Wâþý‡k¾ø¶¶Ö(äÎGšäãìÙ“ÑØh»`{X^^‰ËWf"+W£:v9—Ö|Ž®®QJ ñ£?ÿ“Í¿ûû\Ó466Æùs§"Mò‘ˋ֖# ØÖ^¿^x³E5®\]ûÿüOÿ°.ùÎ]úìÄÑH“| öÇ®];€7ÚÚZ£”¢”b~þYŒŒŽEV®Æ»÷6Ôu®{@öïßû7?^×g›6«Ý»wÅ…~?.üðûqåÊõø÷ÿøbÃ슸îyôh.þå_ÿ-ÎõœŠ¤˜|î\´µµ%À«W¯Wr©ÆôôØHª~'_a­¬Ôbrj&&§f¢¥¥9ò¹ó‘&¹8×s:ššLœÛÛÒÒrLNMGydõõ‡¥¥å y< ŸÿÅ…ÈÊÕ¸ÿÍ»=…µ¸¸#£c12:;chpu¹ã“ŸùŠ Ø>jµZ\»~;Êåj\¼4/êXÖ©ë“‘&ùu»æöÈÍ[wc8«ÔýÈý{#IVWÒý´ë ÑlI³÷îG¹<åѱx\Çví14Ø¥´Ÿ8ú^ײaßDÎ*1>qµ®7Ñ;I’â`ì޽ˈ6µ¹'ó122å‘jÜýêë5ßÔÔý}g£”¢¯÷ÌÖ{ýyñâeŒ^šˆá¬7êX «¡¡!Ξ=i1…üùر£ÍH6…—/_}»«á̵›uM†wŸ<iZˆ¡Áþí±ÖóàáãÎVw¬g5Þ–ææÈåz")æ?èZ0ÊÒÒrLL^òÈXŒOÔ7~ðÀ¾ÕÝ ÓÂö^÷¹vývdY%F/Õ·ÈÎí18Ði1ÝÝÇ7ä^ÃÀöP«ÕbæÚ­(ŒÅÅ:§µ·ïˆ¡¾(¥…èî>¾n×¾Éw$\Šñ‰«ïµ#áþ}{¢XÌEZÌÇ¡CŸÍÀº˜½ÙH5Ê#c177¿æã£¯÷L”Ò‚ ß×Û=ч³Jܺ]ßžèG|I1ÅbìݳÛ>¨¹¹ùo÷DÿjöëºÎqâø‘(¥…(õÛýcøúþƒÕµóËÕºskhˆ8súd$Å\ z£ý#L>ÛË—¯¢òf2|zæf]çØ¿oO$I>JI!ººl˜{Û’yëíw‹ÃY%.^š¨k¯á·¿¥Éê“\ïâíê¸õ¾Ž°cG[ z£”âô©r®vKäÿZ\\ŠêØT gÕ¸|e&VVÖþL\½KÛÏZ·ªˆˆhllˆs=§£”"Ÿ;--Íú7Írîï«¥¥9ŠC¹(åâéÓçQ‹,«l¸åŽíçØÑC‘¦…H†rÑÙÙ±eï³y+ÜDggG\øÁ÷â¾³÷îG–U#©Æ“'Od`]ìÙÓi1¥´°mžmÞj7tøPWüõ_ýYüåçÓÓ7b8«Ä¥êd,,,áÀÕÚÚùÕy3gNFcãöz­y«ÞXccCôôtGOOwüdáó¨T'c8«o{H€·¢çlw”Ò|ò½ÑÚº}·ánÞ7ÙÚÚiRˆ4)Ä“ù§Q.Åp¹â'xg‡wE))D’äbÏîNHlâ§°ø°Öú–íÿ¨‹€ €€€€ €€€€ €€€€ €€€€ €€€€ €€€€ €€€€ €€ €€ €€ €€ €€ €€ €€ â#@@@@@@@@@@à#i¨Õj5þ@@@@€÷ó¿SóËä{L5oIEND®B`‚numptyphysics-0.2+svn157/Worker.h0000644000175000017500000000241712264274577016025 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef WORKER_H #define WORKER_H #include #include class WorkerBase { public: WorkerBase( int (*func)(void*)=startThread ); virtual ~WorkerBase(); void start(); virtual void main() =0; void wait(); bool done(); private: static int startThread(void* wbase); int (*m_func)(void*); SDL_Thread *m_thread; }; typedef WorkerBase Worker; template< typename A, typename B, typename C > class WorkerF : public WorkerBase { public: typedef void (*F)(A,B,C); WorkerF( F ff, A aa, B bb, C cc ) : f(ff), a(aa), b(bb), c(cc) {} virtual void main() { f( a, b, c ); } private: F f; A a; B b; C c; }; #endif //WORKER_H numptyphysics-0.2+svn157/Scene.h0000644000175000017500000000735612264274577015620 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "Common.h" #include "Array.h" #include "Path.h" #include "Canvas.h" #include "Script.h" #include #include class Stroke; class b2World; class Accelerometer; typedef enum { ATTRIB_DUMMY = 0, ATTRIB_GROUND = 1, ATTRIB_TOKEN = 2, ATTRIB_GOAL = 4, ATTRIB_DECOR = 8, ATTRIB_SLEEPING = 16, ATTRIB_HIDDEN = 32, ATTRIB_DELETED = 64, ATTRIB_CLASSBITS = ATTRIB_TOKEN | ATTRIB_GOAL, ATTRIB_UNJOINABLE = ATTRIB_DECOR | ATTRIB_HIDDEN | ATTRIB_DELETED } Attribute; class Scene : private b2ContactListener { public: Scene( bool noWorld=false ); ~Scene(); Stroke* newStroke( const Path& p, int colour, int attributes ); bool deleteStroke( Stroke *s ); void extendStroke( Stroke* s, const Vec2& pt ); void moveStroke( Stroke* s, const Vec2& origin ); bool activateStroke( Stroke *s ); void getJointCandidates( Stroke* s, Path& pts ); int numStrokes() { return m_strokes.size(); } Array& strokes() { return m_strokes; } void step( bool isPaused=false ); bool isCompleted(); Rect dirtyArea(); void draw( Canvas& canvas, const Rect& area ); void reset( Stroke* s=NULL, bool purgeUnprotected=false ); Stroke* strokeAtPoint( const Vec2 pt, float32 max ); void clear(); void setGravity( const b2Vec2& g ); void setGravity( const std::string& s ); bool load( unsigned char *buf, int bufsize ); bool load( const std::string& file ); bool load( std::istream& in ); void start( bool replay=false ); void protect( int n=-1 ); bool save( const std::string& file, bool saveLog=false ); ScriptLog* getLog() { return &m_log; } const ScriptPlayer* replay() { return &m_player; } private: void resetWorld(); bool activate( Stroke *s ); void activateAll(); void createJoints( Stroke *s ); bool parseLine( const std::string& line ); void calcDirtyArea(); // b2ContactListener callback when a new contact is detected virtual void Add(const b2ContactPoint* point) ; b2World *m_world; Array m_strokes; Array m_deletedStrokes; std::string m_title, m_author, m_bg; ScriptLog m_log; ScriptRecorder m_recorder; ScriptPlayer m_player; Image *m_bgImage; static Image *g_bgImage; int m_protect; b2Vec2 m_gravity; b2Vec2 m_currentGravity; bool m_dynamicGravity; Accelerometer *m_accelerometer; Rect m_dirtyArea; }; class Transform { public: Transform( float32 scale, float32 rotation, const Vec2& translation ); void set( float32 scale, float32 rotation, const Vec2& translation ); inline void transform( const Path& pin, Path& pout ) { pout = pin; if ( !m_bypass ) { pout.rotate( m_rot ); pout.translate( m_pos ); } } inline void transform( Vec2& vec ) { if ( !m_bypass ) { vec = Vec2( b2Mul( m_rot, vec ) ) + m_pos; } } inline void inverseTransform( Vec2& vec ) { if ( !m_bypass ) { vec = Vec2( b2Mul( m_invrot, vec-m_pos ) ); } } private: Transform() {} bool m_bypass; b2Mat22 m_rot; b2Mat22 m_invrot; Vec2 m_pos; }; extern Transform worldToScreen; extern void configureScreenTransform( int w, int h ); numptyphysics-0.2+svn157/Canvas.cpp0000644000175000017500000005377412264274577016336 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include #include "Common.h" #include "Config.h" #include "Canvas.h" #include "Path.h" #include #include #define Window X11Window //oops #define Font X11Font //oops #include #ifndef WIN32 #include #include #endif #undef Window //#define FORCE_16BPP // zoomer.cpp extern SDL_Surface *zoomSurface(SDL_Surface * src, double zoomx, double zoomy); // extract RGB colour components as 8bit values from RGB888 #define R32(p) (((p)>>16)&0xff) #define G32(p) (((p)>>8)&0xff) #define B32(p) ((p)&0xff) // extract RGB colour components as 8bit values from RGB565 #define R16(p) (((p)>>8)&0xf8) #define G16(p) (((p)>>3)&0xfc) #define B16(p) (((p)<<3)&0xf8) #define R16G16B16_TO_RGB888(r,g,b) \ ((((r)<<8)&0xff0000) | ((g)&0x00ff00) | (((b)>>8))) #define R16G16B16_TO_RGB565(r,g,b) \ ((Uint16)( (((r)&0xf800) | (((g)>>5)&0x07e0) | (((b)>>11))&0x001f) )) #define RGB888_TO_RGB565(p) \ ((Uint16)( (((p)>>8)&0xf800) | (((p)>>5)&0x07e0) | (((p)>>3)&0x001f) )) void ExtractRgb( uint32 c, int& r, int &g, int &b ) { r = R32(c); g = G32(c); b = B32(c); } void ExtractRgb( uint16 c, int& r, int &g, int &b ) { r = R16(c); g = G16(c); b = B16(c); } template inline void AlphaBlend( PIX& p, int cr, int cg, int cb, int a, int ia ) { throw "not implemented"; } inline void AlphaBlend( Uint16& p, int cr, int cg, int cb, int a, int ia ) { //565 p = R16G16B16_TO_RGB565( a * cr + ia * R16(p), a * cg + ia * G16(p), a * cb + ia * B16(p) ); } inline void AlphaBlend( Uint32& p, int cr, int cg, int cb, int a, int ia ) { //888 p = R16G16B16_TO_RGB888( a * cr + ia * R32(p), a * cg + ia * G32(p), a * cb + ia * B32(p) ); } #define ALPHA_MAX 0xff template struct AlphaBrush { int m_r, m_g, m_b, m_c; inline AlphaBrush( PIX c ) { m_c = c; ExtractRgb( c, m_r, m_g, m_b ); } inline void ink( PIX* pix, int step, int a ) { int ia = ALPHA_MAX - a; int o=-W/2; AlphaBlend( *(pix+o*step), m_r, m_g, m_b, a, ia ); o++; for ( ; o<=W/2; o++ ) { *(pix+o*step) = m_c; } AlphaBlend( *(pix+o*step), m_r, m_g, m_b, ia, a ); } }; template struct AlphaBrush { int m_r, m_g, m_b, m_c; inline AlphaBrush( PIX c ) { m_c = c; ExtractRgb( c, m_r, m_g, m_b ); } inline void ink( PIX* pix, int step, int a ) { int ia = ALPHA_MAX - a; AlphaBlend( *(pix-step), m_r, m_g, m_b, a, ia ); AlphaBlend( *(pix), m_r, m_g, m_b, ia, a ); } }; template struct AlphaBrush { int m_r, m_g, m_b, m_c; inline AlphaBrush( PIX c ) { m_c = c; ExtractRgb( c, m_r, m_g, m_b ); } inline void ink( PIX* pix, int step, int a ) { int ia = ALPHA_MAX - a; AlphaBlend( *(pix-step), m_r, m_g, m_b, a, ia ); *(pix) = m_c; AlphaBlend( *(pix+step), m_r, m_g, m_b, ia, a ); } }; template inline void renderLine( void *buf, int byteStride, int x1, int y1, int x2, int y2, PIX color ) { PIX *pix = (PIX*)((char*)buf+byteStride*y1) + x1; int lg_delta, sh_delta, cycle, lg_step, sh_step; int alpha, alpha_step, alpha_reset; int pixStride = byteStride/sizeof(PIX); AlphaBrush brush( color ); lg_delta = x2 - x1; sh_delta = y2 - y1; lg_step = Sgn(lg_delta); lg_delta = Abs(lg_delta); sh_step = Sgn(sh_delta); sh_delta = Abs(sh_delta); if ( sh_step < 0 ) pixStride = -pixStride; // in theory should be able to do this with just a single step // variable - ie: combine cycle and alpha as in wu algorithm if (sh_delta < lg_delta) { cycle = lg_delta >> 1; alpha = ALPHA_MAX >> 1; alpha_step = -(ALPHA_MAX * sh_delta/(lg_delta+1)); alpha_reset = alpha_step < 0 ? ALPHA_MAX : 0; int count = lg_step>0 ? x2-x1 : x1-x2; while ( count-- ) { brush.ink( pix, pixStride, alpha ); cycle += sh_delta; alpha += alpha_step; pix += lg_step; if (cycle > lg_delta) { cycle -= lg_delta; alpha = alpha_reset; pix += pixStride; } } } else { cycle = sh_delta >> 1; alpha = ALPHA_MAX >> 1; alpha_step = -lg_step * Abs(ALPHA_MAX * lg_delta/(sh_delta+1)); alpha_reset = alpha_step < 0 ? ALPHA_MAX : 0; int count = sh_step>0 ? y2-y1 : y1-y2; while ( count-- ) { brush.ink( pix, 1, alpha ); cycle += lg_delta; alpha += alpha_step; pix += pixStride; if (cycle > sh_delta) { cycle -= sh_delta; alpha = alpha_reset; pix += lg_step; } } } } #define SURFACE(cANVASpTR) ((SDL_Surface*)((cANVASpTR)->m_state)) Canvas::Canvas( int w, int h ) : m_state(NULL), m_bgColour(0), m_bgImage(NULL) { switch (SDL_GetVideoInfo()->vfmt->BitsPerPixel) { case 16: case 32: #ifdef FORCE_16BPP m_state = SDL_CreateRGBSurface( SDL_SWSURFACE, w, h, 16, 0xF100, 0x07e0, 0x001F, 0x0 ); #else m_state = SDL_CreateRGBSurface( SDL_SWSURFACE, w, h, SDL_GetVideoInfo()->vfmt->BitsPerPixel, SDL_GetVideoInfo()->vfmt->Rmask, SDL_GetVideoInfo()->vfmt->Gmask, SDL_GetVideoInfo()->vfmt->Bmask, SDL_GetVideoInfo()->vfmt->Amask ); #endif break; default: // eg: dummy vid driver reports 8bpp m_state = SDL_CreateRGBSurface( SDL_SWSURFACE, w, h, 32, 0xFF0000, 0x00FF00, 0x0000FF, 0xFF000000 ); break; } resetClip(); } Canvas::Canvas( State state ) : m_state(state), m_bgColour(0), m_bgImage(NULL) { resetClip(); } Canvas::~Canvas() { if (SURFACE(this)) { SDL_FreeSurface(SURFACE(this)); } } int Canvas::width() const { return SURFACE(this)->w; } int Canvas::height() const { return SURFACE(this)->h; } int Canvas::makeColour( int r, int g, int b ) const { return SDL_MapRGB( SURFACE(this)->format, r, g, b ); } int Canvas::makeColour( int c ) const { return SDL_MapRGB( SURFACE(this)->format, (c>>16)&0xff, (c>>8)&0xff, (c>>0)&0xff ); } void Canvas::resetClip() { if ( m_state ) { setClip( 0, 0, width(), height() ); } else { setClip( 0, 0, 0, 0 ); } } void Canvas::setClip( int x, int y, int w, int h ) { //fprintf(stderr,"setclip %d,%d+%d+%d\n",x,y,w,h); m_clip = Rect(x,y,x+w-1,y+h-1); } void Canvas::setBackground( int c ) { m_bgColour = c; } void Canvas::setBackground( Canvas* bg ) { m_bgImage = bg; } void Canvas::clear() { if ( m_bgImage ) { SDL_BlitSurface( SURFACE(m_bgImage), NULL, SURFACE(this), NULL ); } else { SDL_FillRect( SURFACE(this), NULL, m_bgColour ); } } void Canvas::fade( const Rect& rr ) { Uint32 bpp; Rect r = rr; r.clipTo( m_clip ); bpp = SURFACE(this)->format->BytesPerPixel; char* row = (char*)SURFACE(this)->pixels; int pixStride = width(); int w = r.br.x - r.tl.x; int h = r.br.y - r.tl.y; row += (r.tl.x + r.tl.y * pixStride) * bpp; SDL_LockSurface(SURFACE(this)); switch ( bpp ) { case 2: for ( int r=h; r>0; r-- ) { for ( int i=0;i>1) & 0x7bef; } row += pixStride * bpp; } break; case 4: for ( int r=h; r>0; r-- ) { for ( int i=0;i>1) & 0x7f7f7f; } row += pixStride * bpp; } break; } SDL_UnlockSurface(SURFACE(this)); } #if 0 inline uint32 avg2Pixels565(uint32 a, uint32 b) { return (((a^b)&0xf7def7de)>>1) + (a&b); } inline uint16 avgPixels565(uint32 ab) { uint16 a = ab >> 16; uint16 v = ab & 0xffff; return (((a^b)&0xf7def7de)>>1) + (a&b); } #endif Canvas* Canvas::scale( int factor ) const { Canvas *c = new Canvas( width()/factor, height()/factor ); if ( c ) { if ( factor==4 && SURFACE(this)->format->BytesPerPixel==2 ) { const uint16 MASK2LSB = 0xe79c; int dpitch = SURFACE(c)->pitch / sizeof(uint16_t); int spitch = SURFACE(this)->pitch / sizeof(uint16_t); uint16_t *drow = (uint16_t*)SURFACE(c)->pixels; for ( int y=0;yheight();y++ ) { for ( int x=0;xwidth();x++ ) { uint16 p = 0; uint16_t *srow = (uint16_t*)SURFACE(this)->pixels + (y*spitch+x)*factor; for ( int yy=0;yy<4;yy++ ) { uint16 q = 0; for ( int xx=0;xx<4;xx++ ) { q += (srow[xx]&MASK2LSB)>>2; } p += (q&MASK2LSB)>>2; srow += spitch; } drow[x] = p; } drow += dpitch; } } else if (SURFACE(this)->format->BytesPerPixel==2 ) { int dpitch = SURFACE(c)->pitch / sizeof(uint16_t); int spitch = SURFACE(this)->pitch / sizeof(uint16_t); uint16_t *drow = (uint16_t*)SURFACE(c)->pixels; for ( int y=0;yheight();y++ ) { for ( int x=0;xwidth();x++ ) { uint16_t *srow = (uint16_t*)SURFACE(this)->pixels + (y*spitch+x)*factor; uint32_t r=0,g=0,b=0; for ( int yy=0;yyheight();y++ ) { for ( int x=0;xwidth();x++ ) { int r=0,g=0,b=0; Uint8 rr,gg,bb; for ( int yy=0;yyformat, &rr,&gg,&bb ); r += rr; g += gg; b += bb; } } int div = factor*factor; c->drawPixel( x, y, makeColour(r/div,g/div,b/div) ); } } } } return c; } void Canvas::scale( int w, int h ) { if ( w!=width() && h!=height() ) { SDL_Surface *s = zoomSurface( SURFACE(this), (double)w/(double)width(), (double)h/(double)height() ); if ( s ) { SDL_FreeSurface( SURFACE(this) ); m_state = s; } } } void Canvas::clear( const Rect& r ) { if ( m_bgImage ) { SDL_Rect srcRect = { r.tl.x, r.tl.y, r.br.x-r.tl.x+1, r.br.y-r.tl.y+1 }; SDL_BlitSurface( SURFACE(m_bgImage), &srcRect, SURFACE(this), &srcRect ); } else { drawRect( r, m_bgColour ); } } void Canvas::drawImage( Canvas *canvas, int x, int y ) { Rect dest(x,y,x+canvas->width(),y+canvas->height()); dest.clipTo(m_clip); // if (dest.tl.y != y) { // fprintf(stderr,"clipped (%d,%d-%d,%d) to (%d,%d)-(%d,%d)\n", // x,y,x+canvas->width(),y+canvas->height(), // dest.tl.x, dest.tl.y, dest.br.x, dest.br.y); // } SDL_Rect sdlsrc = { dest.tl.x-x, dest.tl.y-y, dest.width(), dest.height() }; SDL_Rect sdldst = { dest.tl.x, dest.tl.y, 0, 0 }; SDL_BlitSurface( SURFACE(canvas), &sdlsrc, SURFACE(this), &sdldst ); } void Canvas::drawPixel( int x, int y, int c ) { Uint32 bpp, ofs; bpp = SURFACE(this)->format->BytesPerPixel; ofs = SURFACE(this)->pitch*y; char* row = (char*)SURFACE(this)->pixels + ofs; SDL_LockSurface(SURFACE(this)); switch ( bpp ) { case 2: ((Uint16*)row)[x] = c; break; case 4: ((Uint32*)row)[x] = c; break; } SDL_UnlockSurface(SURFACE(this)); } int Canvas::readPixel( int x, int y ) const { Uint32 bpp, ofs; int c; bpp = SURFACE(this)->format->BytesPerPixel; ofs = SURFACE(this)->pitch*y; char* row = (char*)SURFACE(this)->pixels + ofs; SDL_LockSurface(SURFACE(this)); switch ( bpp ) { case 2: c = ((Uint16*)row)[x]; break; case 4: c = ((Uint32*)row)[x]; break; default: c=0; break; } SDL_UnlockSurface(SURFACE(this)); return c; } void Canvas::drawLine( int x1, int y1, int x2, int y2, int color ) { int lg_delta, sh_delta, cycle, lg_step, sh_step; lg_delta = x2 - x1; sh_delta = y2 - y1; lg_step = Sgn(lg_delta); lg_delta = Abs(lg_delta); sh_step = Sgn(sh_delta); sh_delta = Abs(sh_delta); if (sh_delta < lg_delta) { cycle = lg_delta >> 1; while (x1 != x2) { drawPixel( x1, y1, color); cycle += sh_delta; if (cycle > lg_delta) { cycle -= lg_delta; y1 += sh_step; } x1 += lg_step; } drawPixel( x1, y1, color); } cycle = sh_delta >> 1; while (y1 != y2) { drawPixel( x1, y1, color); cycle += lg_delta; if (cycle > sh_delta) { cycle -= sh_delta; x1 += lg_step; } y1 += sh_step; } drawPixel( x1, y1, color); } void Canvas::drawPath( const Path& path, int color, bool thick ) { // allow for thick lines in clipping Rect clip = m_clip; clip.tl.x++; clip.tl.y++; clip.br.x--; clip.br.y--; int i=0; const int n = path.numPoints(); for ( ; iformat->BytesPerPixel ) { case 2: if ( thick ) { renderLine( SURFACE(this)->pixels, SURFACE(this)->pitch, p1.x, p1.y, p2.x, p2.y, color ); } else { renderLine( SURFACE(this)->pixels, SURFACE(this)->pitch, p1.x, p1.y, p2.x, p2.y, color ); } break; case 4: if ( thick ) { renderLine( SURFACE(this)->pixels, SURFACE(this)->pitch, p1.x, p1.y, p2.x, p2.y, color ); } else { renderLine( SURFACE(this)->pixels, SURFACE(this)->pitch, p1.x, p1.y, p2.x, p2.y, color ); } break; } } else { for ( ; i 0 && h > 0 ) { SDL_UpdateRect( SURFACE(this), x1, y1, w, h ); #ifdef USE_HILDON #if MAEMO_VERSION >= 5 static bool captured = false; if (!captured) { SDL_SysWMinfo sys; SDL_VERSION( &sys.version ); SDL_GetWMInfo( &sys ); // setup hildon pre-load screenshot XEvent xev = { 0 }; xev.xclient.type = ClientMessage; xev.xclient.serial = 0; xev.xclient.send_event = True; xev.xclient.display = sys.info.x11.display; xev.xclient.window = XDefaultRootWindow(xev.xclient.display); xev.xclient.message_type = XInternAtom (xev.xclient.display, "_HILDON_LOADING_SCREENSHOT", False); xev.xclient.format = 32; xev.xclient.data.l[0] = 0; //xev.xclient.data.l[1] = sys.info.x11.fswindow; //xev.xclient.data.l[1] = sys.info.x11.wmwindow; xev.xclient.data.l[1] = sys.info.x11.window; XSendEvent (xev.xclient.display, xev.xclient.window, False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); XFlush (xev.xclient.display); XSync (xev.xclient.display, False); captured = true; } #endif #endif } } } void Window::raise() { SDL_SysWMinfo sys; SDL_VERSION( &sys.version ); SDL_GetWMInfo( &sys ); #if !defined(WIN32) && !(defined(__APPLE__) && defined(__MACH__)) /* No X11 stuff on Windows and Mac OS X */ // take focus... XEvent ev = { 0 }; ev.xclient.type = ClientMessage; ev.xclient.window = sys.info.x11.wmwindow; ev.xclient.message_type = XInternAtom (sys.info.x11.display, "_NET_ACTIVE_WINDOW", False); ev.xclient.format = 32; //all xewv.xclient.data==0 -> older spec? XSendEvent (sys.info.x11.display, DefaultRootWindow(sys.info.x11.display), False, NoEventMask, //SubstructureRedirectMask, &ev); XSync( sys.info.x11.display, False ); #endif //XRaiseWindow( sys.info.x11.display, sys.info.x11.window ); } void Window::setSubName( const char *sub ) { #ifdef USE_HILDON SDL_SysWMinfo sys; SDL_VERSION( &sys.version ); SDL_GetWMInfo( &sys ); char title[128]; snprintf(title,128,"%s - %s\n",m_title.c_str(),sub); title[127] = '\0'; // SDL_WM_SetCaption is broken on maemo4 XStoreName( sys.info.x11.display, sys.info.x11.wmwindow, title ); XStoreName( sys.info.x11.display, sys.info.x11.fswindow, title ); #endif } Image::Image( const char* file, bool alpha ) { //alpha = false; std::string f( "data/" ); SDL_Surface* img = IMG_Load((f+file).c_str()); if ( !img ) { f = std::string( DEFAULT_RESOURCE_PATH "/" ); img = IMG_Load((f+file).c_str()); } if ( img ) { printf("loaded image %s\n",(f+file).c_str()); if ( alpha ) { SDL_SetColorKey( img, SDL_SRCCOLORKEY|SDL_RLEACCEL, img->format->colorkey ); m_state = SDL_DisplayFormatAlpha( img ); } else { m_state = SDL_DisplayFormat( img ); } if ( m_state ) { SDL_FreeSurface( img ); } else { printf("warning image %s not converted to display format\n",(f+file).c_str()); m_state = img; } } else { fprintf(stderr,"failed to load image %s\n",(f+file).c_str()); m_state = SDL_CreateRGBSurface( SDL_SWSURFACE, 32, 32, SDL_GetVideoInfo()->vfmt->BitsPerPixel, SDL_GetVideoInfo()->vfmt->Rmask, SDL_GetVideoInfo()->vfmt->Gmask, SDL_GetVideoInfo()->vfmt->Bmask, SDL_GetVideoInfo()->vfmt->Amask ); drawRect(0,0,32,32,0xff0000); } resetClip(); } int Canvas::writeBMP( const char* filename ) const { #pragma pack(push,1) typedef struct { unsigned short int type; /* Magic identifier */ unsigned int size; /* File size in bytes */ unsigned short int reserved1, reserved2; unsigned int offset; /* Offset to image data, bytes */ } BMPHEADER; typedef struct { unsigned int size; /* Header size in bytes */ int width,height; /* Width and height of image */ unsigned short int planes; /* Number of colour planes */ unsigned short int bits; /* Bits per pixel */ unsigned int compression; /* Compression type */ unsigned int imagesize; /* Image size in bytes */ int xresolution,yresolution; /* Pixels per meter */ unsigned int ncolours; /* Number of colours */ unsigned int importantcolours; /* Important colours */ } BMPINFOHEADER; int check_BMPHEADER[(sizeof(BMPHEADER)==14)-1]; int check_BMPINFOHEADER[(sizeof(BMPINFOHEADER)==40)-1]; #pragma pack(pop) int w = width(); int h = height(); BMPHEADER head = { 'B'|('M'<<8), 14+40+w*h*3, 0, 0, 14+40 }; BMPINFOHEADER info = { 40, w, h, 1, 24, 0, w*h*3, 100, 100, 0, 0 }; FILE *f = fopen( filename, "wb" ); if ( f ) { Uint32 bpp; bpp = SURFACE(this)->format->BytesPerPixel; fwrite( &head, 14, 1, f ); fwrite( &info, 40, 1, f ); for ( int y=h-1; y>=0; y-- ) { for ( int x=0; x #include #include #include "Levels.h" #include "ZipFile.h" #include "Config.h" #include "Os.h" using namespace std; static const char MISC_COLLECTION[] = "My Levels"; static int rankFromPath( const string& p, int defaultrank=9999 ) { if (p==MISC_COLLECTION) { return 10000; } const char *c = p.data(); size_t i = p.rfind(Os::pathSep); if ( i != string::npos ) { c += i+1; if ( *c=='L' || *c == 'C' ){ c++; int rank=0; while ( *c>='0' && *c<='9' ) { rank = rank*10 + (*c)-'0'; c++; } return rank; } else { c++; } } return defaultrank; } std::string nameFromPath(const std::string& path) { // TODO extract name from collection manifest std::string name; size_t i = path.rfind(Os::pathSep); if ( i != string::npos ) { i++; } else { i = 0; } if (path[i] == 'C') i++; if (path[i] == 'L') i++; while (path[i] >= '0' && path[i] <= '9') i++; if (path[i] == '_') i++; size_t e = path.rfind('.'); name = path.substr(i,e-i); for (i=0; id_name[0] != '.' ) { string full( path ); full += "/"; full += entry->d_name; //DANGER - recursion may not halt for linked dirs addPath( full.c_str() ); } } closedir( dir ); } else { //printf("bogus level path %s\n",path); } } return true; } bool Levels::addLevel( const string& file, int rank, int index ) { addLevel( getCollection(MISC_COLLECTION), file, rank, index ); } bool Levels::addLevel( Collection* collection, const string& file, int rank, int index ) { LevelDesc *e = new LevelDesc( file, rank, index ); for ( int i=0; ilevels.size(); i++ ) { if ( collection->levels[i]->file == file && collection->levels[i]->index == index ) { //printf("addLevel %s already present!\n",file.c_str()); return false; } else if ( collection->levels[i]->rank > rank ) { //printf("insert level %s+%d at %d\n",file.c_str(),index,i); collection->levels.insert(i,e); m_numLevels++; return true; } } collection->levels.append( e ); //printf("add level %s+%d as %s[%d]\n",file.c_str(),index, // collection->file.c_str(), collection->levels.size()); m_numLevels++; return true; } Levels::Collection* Levels::getCollection( const std::string& file ) { for (int i=0; ifile == file) { return m_collections[i]; } } Collection *c = new Collection(); //fprintf(stderr,"New Collection %s\n",file.c_str()); c->file = file; c->name = file; c->rank = rankFromPath(file); for (int i=0; irank > c->rank) { m_collections.insert(i,c); return c; } } m_collections.append(c); return c; } bool Levels::scanCollection( const std::string& file, int rank ) { try { ZipFile zf(file); Collection *collection = getCollection(file); //printf("found collection %s with %d levels\n",file.c_str(),zf.numEntries()); for ( int i=0; iindex >= 0 ) { ZipFile zf( lev->file.c_str() ); if ( lev->index < zf.numEntries() ) { unsigned char* d = zf.extract( lev->index, &l); if ( d && l <= bufLen ) { memcpy( buf, d, l ); } } } else { FILE *f = fopen( lev->file.c_str(), "rt" ); if ( f ) { l = fread( buf, 1, bufLen, f ); fclose(f); } } return l; } throw "invalid level index"; } std::string Levels::levelName( int i, bool pretty ) { std::string s = "end"; LevelDesc *lev = findLevel(i); if (lev) { if ( lev->index >= 0 ) { ZipFile zf( lev->file.c_str() ); s = zf.entryName( lev->index ); } else { s = lev->file; } } else { s = "err"; } return pretty ? nameFromPath(s) : s; } int Levels::numCollections() { return m_collections.size(); } int Levels::collectionFromLevel( int i, int *indexInCol ) { if (i < m_numLevels) { for ( int c=0; c= m_collections[c]->levels.size() ) { i -= m_collections[c]->levels.size(); } else { if (indexInCol) *indexInCol = i; return c; } } } } std::string Levels::collectionName( int i, bool pretty ) { if (i>=0 && iname); } else { return m_collections[i]->name; } } return "Bad Collection ID"; } int Levels::collectionSize(int c) { if (c>=0 && clevels.size(); } return 0; } int Levels::collectionLevel(int c, int i) { if (c>=0 && c=0 && ilevels.size()) { int l = i; for (int j=0; jlevels.size(); } return l; } } return 0; } std::string Levels::demoPath(int l) { int c = collectionFromLevel(l); std::string path = Config::userDataDir() + Os::pathSep + "Recordings" + Os::pathSep + collectionName(c,false); if (path.substr(path.length()-4) == ".npz") { path.resize(path.length()-4); } return path; } std::string Levels::demoName(int l) { std::string name = levelName(l,false); size_t sep = name.rfind(Os::pathSep); if (sep != std::string::npos) { name = name.substr(sep); } if (name.substr(name.length()-4) == ".nph") { name.resize(name.length()-4); } return demoPath(l) + Os::pathSep + name + ".npd"; } bool Levels::hasDemo(int l) { return OS->exists(demoName(l)); } Levels::LevelDesc* Levels::findLevel( int i ) { if (i < m_numLevels) { for ( int c=0; c= m_collections[c]->levels.size() ) { //fprintf(stderr,"index %d not in c%d (size=%d)\n",i,c,m_collections[c]->levels.size()); i -= m_collections[c]->levels.size(); } else { return m_collections[c]->levels[i]; } } } return NULL; } int Levels::findLevel( const char *file ) { int index = 0; for ( int c=0; clevels.size(); i++ ) { if ( m_collections[c]->levels[i]->file == file ) { return index + i; } } index += m_collections[c]->levels.size(); } return -1; } numptyphysics-0.2+svn157/missing0000755000175000017500000002466612264274602016001 0ustar warp10warp10#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2003-09-02.23 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: numptyphysics-0.2+svn157/OsWin32.cpp0000644000175000017500000000321112264274577016304 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifdef WIN32 #include #include #include #include #include class OsWin32 : public Os { HICON icon; HWND hwnd; public: OsWin32() { HINSTANCE handle = GetModuleHandle(NULL); icon = LoadIcon(handle, MAKEINTRESOURCE(1)); SDL_SysWMinfo wminfo; SDL_VERSION(&wminfo.version); if(SDL_GetWMInfo(&wminfo) != 1) { //error wrong SDL version } hwnd = wminfo.window; SetClassLong(hwnd, GCL_HICON, (LONG)icon); } ~OsWin32() { DestroyIcon(icon); } virtual bool openBrowser( const char* url ) { //?? return false; } }; Os* Os::get() { static OsWin32 os; return &os; } const char Os::pathSep = '\\'; /** * For Windows, we have to define "WinMain" instead of the * usual "main" in order to get a graphical application without * the console window that normally pops up otherwise **/ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //TODO - pass level args here... npmain(0,0); } #endif numptyphysics-0.2+svn157/Ui.h0000644000175000017500000002127112264274560015120 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef UI_H #define UI_H #include "Common.h" #include "Array.h" #include "Event.h" #include #include class Canvas; class Widget; class Font; class WidgetParent; class Widget { public: virtual ~Widget() {} virtual const char* name() {return "Widget";} virtual std::string toString(); virtual void move( const Vec2& by ); virtual void moveTo( const Vec2& to ) {move(to-m_pos.tl);} virtual void sizeTo( const Vec2& size ); virtual const Rect& position() const { return m_pos; } virtual bool isDirty() {return m_dirty;} virtual Rect dirtyArea() {return m_dirty?m_pos:Rect(false);}; virtual void onTick( int tick ) {} virtual void draw( Canvas& screen, const Rect& area ); virtual bool processEvent( SDL_Event& ev ); bool dispatchEvent( Event& ev ); virtual void onResize() {} virtual bool onEvent( Event& ev ) {return false;} void setParent(WidgetParent* p) {m_parent = p;} WidgetParent* parent() { return m_parent; } WidgetParent* topLevel(); void setEventMap(EventMap* em) {m_eventMap = em;} void setEventMap(EventMapType map); virtual void dirty(bool dirt=true) { m_dirty=dirt; } virtual void dirty( const Rect& r ) {} Rect& position() { return m_pos; } void setBg(int bg) {m_bg=bg;} void setFg(int fg) {m_fg=fg;} void fitToParent(bool fit) { m_fitToParent=fit;} bool fitToParent() {return m_fitToParent;} bool greedyMouse() {return m_greedyMouse;} void transparent(bool t) {m_alpha=t?0:255;} void alpha(int a) {m_alpha=a;} void border(bool drawBorder) {m_border = drawBorder?1:0;} protected: Widget(WidgetParent *p=NULL); WidgetParent* m_parent; EventMap* m_eventMap; Rect m_pos; bool m_dirty; bool m_focussed; int m_alpha; bool m_fitToParent; bool m_greedyMouse; int m_bg; int m_fg; int m_border; }; class Spacer : public Widget { const char* name() {return "Spacer";} }; class Label : public Widget { public: Label(); Label(const std::string& s, const Font* f=NULL); const char* name() {return "Label";} virtual void text( const std::string& s ); const std::string& text() const { return m_text; } void align( int a ); virtual void draw( Canvas& screen, const Rect& area ); void font( const Font* f ) { m_font = f; } protected: std::string m_text; const Font *m_font; }; class Button : public Label { public: Button(const std::string& s, Event event=Event::NOP); const char* name() {return "Button";} void event(Event ev) {m_selEvent = ev;} void draw( Canvas& screen, const Rect& area ); virtual bool onEvent( Event& ev ); virtual void onSelect() {}; protected: Event m_selEvent; }; class Icon : public Label { public: Icon( Canvas* c=NULL ); ~Icon(); const char* name() {return "Icon";} void canvas( Canvas* c ); void draw( Canvas& screen, const Rect& area ); protected: Canvas *m_canvas; }; class IconButton : public Button { public: IconButton(const std::string& s, const std::string& icon, const Event& ev); ~IconButton(); const char* name() {return "IconButton";} void canvas(Canvas *c, bool takeOwnership=true); Canvas* canvas(); void icon(const std::string& icon); void draw( Canvas& screen, const Rect& area ); void align(int dir) { m_vertical=(dir==0); } protected: bool m_vertical; bool m_ownIcon; Canvas *m_icon; }; class RichText : public Label { public: RichText(const std::string& s, const Font* f=NULL); virtual void text( const std::string& s ); virtual void draw( Canvas& screen, const Rect& area ); int layout(int w); protected: struct Snippet { Vec2 pos; int textoff; int textlen; int align; const Font* font; }; Array m_snippets; bool m_layoutRequired; }; class WidgetParent : public Widget { public: const char* name() {return "WidgetParent";} virtual void add( Widget* w, int x=-9999, int y=-9999 )=0; void add( Widget* w, const Vec2& pos ) {add(w,pos.x,pos.y);} void add( Widget* w, const Rect& pos ) {w->sizeTo(pos.size());add(w,pos.tl.x,pos.tl.y);} virtual void remove( Widget* w )=0; }; class Container : public WidgetParent { public: Container(); ~Container(); const char* name() {return "Container";} virtual std::string toString(); virtual void move( const Vec2& by ); virtual bool isDirty(); virtual Rect dirtyArea(); virtual void onTick( int tick ); virtual void draw( Canvas& screen, const Rect& area ); virtual bool processEvent( SDL_Event& ev ); virtual void onResize(); virtual void add( Widget* w, int x=-9999, int y=-9999 ); using WidgetParent::add; virtual void remove( Widget* w ); virtual void empty(); protected: Array m_children; }; class Panel : public Container { const char* name() {return "Panel";} }; class Box : public Panel { public: Box(int spacing=0, bool vertical=false); const char* name() {return "Box";} virtual void onResize(); virtual void add( Widget* w, int wh, int grow ); virtual void remove( Widget* w ); protected: Array m_sizes; Array m_growths; int m_spacing; bool m_vertical; }; class VBox : public Box { public: VBox(int spacing=0) : Box(spacing,true) {} const char* name() {return "VBox";} }; class HBox : public Box { public: HBox(int spacing=0) : Box(spacing,false) {} const char* name() {return "HBox";} }; class Draggable : public Panel { public: Draggable(); const char* name() {return "Draggable";} bool processEvent( SDL_Event& ev ); bool onPreEvent( Event& ev ); bool onEvent( Event& ev ); void onTick( int tick ); void step( const Vec2& s ) { m_step = s; } protected: bool m_dragMaybe; bool m_dragging; Vec2 m_dragOrg; Vec2 m_step; Vec2 m_delta; bool m_internalEvent; }; class ScrollArea : public Panel { public: ScrollArea(); const char* name() {return "ScrollArea";} bool onEvent( Event& ev ); virtual void onResize(); virtual void draw( Canvas& screen, const Rect& area ); virtual void add( Widget* w, int x=-9999, int y=-9999 ); using WidgetParent::add; virtual void remove( Widget* w ); virtual void empty(); virtual void virtualSize( const Vec2& size ); protected: Canvas* m_canvas; Draggable* m_contents; }; struct MenuItem { MenuItem(const std::string& s, Event ev=Event::NOP) : text(s), event(ev) {} std::string text; Event event; }; class Menu { public: void addItems(const MenuItem* item); void addItem(const MenuItem& item); void addItem(const std::string& s, Event event=Event::NOP); protected: virtual void layout() =0; Array m_items; }; class TabBook : public Panel { public: TabBook(); ~TabBook(); const char* name() {return "TabBook";} virtual void onResize(); virtual bool onEvent( Event& ev ); virtual void draw( Canvas& screen, const Rect& area ); virtual void addTab( const std::string &s, Widget* w ); void selectTab( int t ); private: int m_count, m_selected; Array m_tabs; Array m_panels; Widget* m_contents; }; class Dialog : public Panel { public: Dialog( const std::string &title="", Event left=Event::NOP, Event right=Event::NOP ); const char* name() {return "Dialog";} void onTick( int tick ); bool processEvent( SDL_Event& ev ); bool onEvent( Event& ev ); bool close(); virtual Container* content() { return m_content; } Button* leftControl() { return m_left; } Button* rightControl() { return m_right; } protected: Label *m_title; Button *m_left, *m_right; Container *m_content; Vec2 m_targetPos; bool m_closeRequested; }; class MenuDialog : public Dialog, public virtual Menu { public: MenuDialog( Widget* evtarget, const std::string &title, const MenuItem* items=NULL ); const char* name() {return "MenuDialog";} virtual bool onEvent( Event& ev ); protected: virtual Widget* makeButton( MenuItem* item, const Event& ev ); virtual void layout(); Widget *m_target; Box *m_box; int m_columns; Vec2 m_buttonDim; }; class MessageBox : public Dialog { public: MessageBox( const std::string& text ); }; class Layer : public Dialog { public: const char* name() {return "Layer";} virtual void onShow() {} virtual void onHide() {} }; #endif //UI_H numptyphysics-0.2+svn157/Levels.h0000644000175000017500000000364112264274560015776 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef LEVELS_H #define LEVELS_H #include #include #include "Array.h" class Levels { public: Levels( int numDirs=0, const char** dirs=NULL ); bool addPath( const char* path ); bool addLevel( const std::string& file, int rank=-1, int index=-1 ); int numLevels(); int load( int i, unsigned char* buf, int bufLen ); std::string levelName( int i, bool pretty=true ); int findLevel( const char *file ); int numCollections(); int collectionFromLevel( int l, int *indexInCol=NULL ); std::string collectionName( int i, bool pretty=true ); int collectionSize(int c); int collectionLevel(int c, int i); std::string demoPath(int l); std::string demoName(int l); bool hasDemo(int l); private: struct LevelDesc { LevelDesc( const std::string& f,int r=0, int i=-1) : file(f), index(i), rank(r) {} std::string file; int index; int rank; }; struct Collection { std::string file; std::string name; int rank; Array levels; }; bool addLevel( Collection* collection, const std::string& file, int rank, int index ); LevelDesc* findLevel( int i ); Collection* getCollection( const std::string& file ); bool scanCollection( const std::string& file, int rank ); int m_numLevels; Array m_collections; }; #endif //LEVELS_H numptyphysics-0.2+svn157/COPYING0000644000175000017500000010451312264274560015426 0ustar warp10warp10 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . numptyphysics-0.2+svn157/ZipFile.cpp0000644000175000017500000001056312264274560016442 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "ZipFile.h" #include #include #include #include #include #include #include #include //zip file structs and uncompress_int below lifted from navit project (GPL). struct zip_lfh { int ziplocsig; short zipver; short zipgenfld; short zipmthd; short ziptime; short zipdate; int zipcrc; unsigned int zipsize; unsigned int zipuncmp; unsigned short zipfnln; unsigned short zipxtraln; char zipname[0]; } __attribute__ ((packed)); struct zip_cd { int zipcensig; char zipcver; char zipcos; char zipcvxt; char zipcexos; short zipcflg; short zipcmthd; short ziptim; short zipdat; int zipccrc; unsigned int zipcsiz; unsigned int zipcunc; unsigned short zipcfnl; unsigned short zipcxtl; unsigned short zipccml; unsigned short zipdsk; unsigned short zipint; unsigned int zipext; unsigned int zipofst; char zipcfn[0]; } __attribute__ ((packed)); struct zip_eoc { int zipesig; unsigned short zipedsk; unsigned short zipecen; unsigned short zipenum; unsigned short zipecenn; unsigned int zipecsz; unsigned int zipeofst; short zipecoml; char zipecom[0]; } __attribute__ ((packed)); int uncompress_int(unsigned char *dest, int *destLen, const unsigned char *source, int sourceLen) { z_stream stream; int err; stream.next_in = (Bytef*)source; stream.avail_in = (uInt)sourceLen; stream.next_out = dest; stream.avail_out = (uInt)*destLen; stream.zalloc = (alloc_func)0; stream.zfree = (free_func)0; err = inflateInit2(&stream, -MAX_WBITS); if (err != Z_OK) return err; err = inflate(&stream, Z_FINISH); if (err != Z_STREAM_END) { inflateEnd(&stream); if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0)) return Z_DATA_ERROR; return err; } *destLen = stream.total_out; err = inflateEnd(&stream); return err; } ZipFile::ZipFile(const std::string& fn) { m_temp = NULL; m_fd=open(fn.c_str(), O_RDONLY); struct stat stat; if (fstat(m_fd, &stat)==0 && S_ISREG(stat.st_mode)) { m_dataLen = stat.st_size; // TODO - win32 m_data = (unsigned char*)mmap(NULL,m_dataLen,PROT_READ,MAP_PRIVATE, m_fd, 0); if ( !m_data ) throw "mmap failed"; if ( *(int*)&m_data[0] != 0x04034b50 ) throw "bad zip magic"; m_eoc = (zip_eoc*)&m_data[m_dataLen-sizeof(zip_eoc)]; m_firstcd = (zip_cd*)&m_data[m_eoc->zipeofst]; if ( m_eoc && m_firstcd ) { m_entries = m_eoc->zipenum; } else { m_entries = 0; } } else { throw "invalid zip file"; } } ZipFile::~ZipFile() { delete[] m_temp; if ( m_data ) munmap( m_data, m_dataLen ); if ( m_fd ) close( m_fd ); } std::string ZipFile::entryName( int n ) { if ( n < 0 || n >= m_entries ) return std::string(); zip_cd* cd = m_firstcd; for ( int count=0; cd < (zip_cd*)m_eoc && count < n; count++ ) { cd = (zip_cd*)(((char*)cd) + sizeof(zip_cd) + cd->zipcfnl + cd->zipcxtl + cd->zipccml); } zip_lfh* lfh = (zip_lfh*)&m_data[cd->zipofst]; if ( lfh ) { return std::string(lfh->zipname,lfh->zipfnln); } return std::string(); } unsigned char* ZipFile::extract( int n, int *l ) { if ( n < 0 || n >= m_entries ) return NULL; zip_cd* cd = m_firstcd; for ( int count=0; cd < (zip_cd*)m_eoc && count < n; count++ ) { cd = (zip_cd*)(((char*)cd) + sizeof(zip_cd) + cd->zipcfnl + cd->zipcxtl + cd->zipccml); } zip_lfh* lfh = (zip_lfh*)&m_data[cd->zipofst]; if ( lfh ) { *l = lfh->zipuncmp; unsigned char* zdat = (unsigned char*)lfh + sizeof(*lfh) + lfh->zipfnln + lfh->zipxtraln; switch (lfh->zipmthd) { case 0: return zdat; case 8: delete[] m_temp; m_temp = new unsigned char[*l]; if ( uncompress_int(m_temp, l, zdat, lfh->zipsize) == Z_OK) { return m_temp; } } } return NULL; } numptyphysics-0.2+svn157/Overlay.h0000644000175000017500000000274512264274560016171 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef OVERLAY_H #define OVERLAY_H #include "Common.h" #include "Ui.h" class Canvas; class GameControl; class Overlay : public Layer { public: }; class ListProvider { public: virtual int countItems() =0; virtual Canvas* provideItem( int i, Canvas* old ) =0; virtual void releaseItem( Canvas* old ) =0; virtual void onSelection( int i ) {}; virtual void onSelection( int i, int ix, int iy ) { onSelection(i); }; }; extern Overlay* createIconOverlay( GameControl& game, const char* file, int x=100,int y=20, bool dragging_allowed=true); extern Overlay* createEditOverlay( GameControl& game ); extern Overlay* createNextLevelOverlay( GameControl& game ); extern Overlay* createListOverlay( GameControl& game, ListProvider* provider, int x=100, int y=20, int w=200, int h=200 ); extern Overlay* createMenuOverlay( GameControl& game ); #endif //OVERLAY_H numptyphysics-0.2+svn157/Accelerometer.h0000644000175000017500000000143412264274560017314 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2009 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef ACCELEROMETER_H #define ACCELEROMETER_H #include class Accelerometer { public: // in Gs virtual bool poll( float32& gx, float32& gy, float32& gz )=0; }; #endif //ACCELEROMETER_H numptyphysics-0.2+svn157/Path.h0000644000175000017500000000441112264274560015434 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef PATH_H #define PATH_H #include "Common.h" #include "Array.h" class Segment { public: Segment( const Vec2& p1, const Vec2& p2 ) : m_p1(p1), m_p2(p2) {} float32 distanceTo( const Vec2& p ); private: Vec2 m_p1, m_p2; }; class Path : public Array { public: Path(); Path( int n, Vec2* p ); Path( const char *ptlist ); void makeRelative(); Path& translate(const Vec2& xlate); Path& rotate(const b2Mat22& rot); Path& scale(float32 factor); inline Vec2& origin() { return at(0); } inline Path& operator&(const Vec2& other) { append(other); return *this; } inline Path& operator&(const b2Vec2& other) { append(Vec2(other)); return *this; } inline Path operator+(const Vec2& p) const { Path r( *this ); return r.translate( p ); } inline Path operator-(const Vec2& p) const { Path r( *this ); Vec2 n( -p.x, -p.y ); return r.translate( n ); } inline Path operator*(const b2Mat22& m) const { Path r( *this ); return r.rotate( m ); } inline Path& operator+=(const Vec2& p) { return translate( p ); } inline Path& operator-=(const Vec2& p) { Vec2 n( -p.x, -p.y ); return translate( n ); } inline int numPoints() const { return size(); } inline const Vec2& point(int i) const { return at(i); } inline Vec2& point(int i) { return at(i); } inline Vec2& first() { return at(0); } inline Vec2& last() { return at(size()-1); } inline Vec2& endpt(unsigned char end) { return end?last():first(); } void simplify( float32 threshold ); Rect bbox() const; private: void simplifySub( int first, int last, float32 threshold, bool* keepflags ); }; #endif //PATH_H numptyphysics-0.2+svn157/Makefile.in0000644000175000017500000046321712264274560016451 0ustar warp10warp10# Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(libbox2d_a_SOURCES) $(numptyphysics_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = numptyphysics$(EXEEXT) subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \ ChangeLog INSTALL NEWS TODO depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(mkdir_p) CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libbox2d_a_AR = $(AR) $(ARFLAGS) libbox2d_a_LIBADD = am_libbox2d_a_OBJECTS = b2Distance.$(OBJEXT) b2TimeOfImpact.$(OBJEXT) \ b2CollideCircle.$(OBJEXT) b2CollidePoly.$(OBJEXT) \ b2PolygonShape.$(OBJEXT) b2CircleShape.$(OBJEXT) \ b2Shape.$(OBJEXT) b2PairManager.$(OBJEXT) \ b2Collision.$(OBJEXT) b2BroadPhase.$(OBJEXT) \ b2WorldCallbacks.$(OBJEXT) b2PrismaticJoint.$(OBJEXT) \ b2MouseJoint.$(OBJEXT) b2GearJoint.$(OBJEXT) b2Joint.$(OBJEXT) \ b2PulleyJoint.$(OBJEXT) b2DistanceJoint.$(OBJEXT) \ b2RevoluteJoint.$(OBJEXT) b2CircleContact.$(OBJEXT) \ b2PolyAndCircleContact.$(OBJEXT) b2Contact.$(OBJEXT) \ b2PolyContact.$(OBJEXT) b2ContactSolver.$(OBJEXT) \ b2Island.$(OBJEXT) b2Body.$(OBJEXT) b2ContactManager.$(OBJEXT) \ b2World.$(OBJEXT) b2BlockAllocator.$(OBJEXT) \ b2StackAllocator.$(OBJEXT) b2Settings.$(OBJEXT) \ b2Math.$(OBJEXT) libbox2d_a_OBJECTS = $(am_libbox2d_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(desktopentrydir)" "$(DESTDIR)$(icon_26x26dir)" "$(DESTDIR)$(icon_64x64dir)" "$(DESTDIR)$(icon_scalabledir)" "$(DESTDIR)$(numptyphysicsdir)" "$(DESTDIR)$(serviceentrydir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_numptyphysics_OBJECTS = numptyphysics-Path.$(OBJEXT) \ numptyphysics-Canvas.$(OBJEXT) numptyphysics-Font.$(OBJEXT) \ numptyphysics-Levels.$(OBJEXT) numptyphysics-ZipFile.$(OBJEXT) \ numptyphysics-Scene.$(OBJEXT) numptyphysics-Game.$(OBJEXT) \ numptyphysics-Script.$(OBJEXT) numptyphysics-App.$(OBJEXT) \ numptyphysics-Config.$(OBJEXT) numptyphysics-Http.$(OBJEXT) \ numptyphysics-Os.$(OBJEXT) numptyphysics-Ui.$(OBJEXT) \ numptyphysics-Dialogs.$(OBJEXT) numptyphysics-Event.$(OBJEXT) \ numptyphysics-Worker.$(OBJEXT) \ numptyphysics-happyhttp.$(OBJEXT) \ numptyphysics-zoomer.$(OBJEXT) \ numptyphysics-OsHildon.$(OBJEXT) \ numptyphysics-OsFreeDesktop.$(OBJEXT) \ numptyphysics-OsWin32.$(OBJEXT) numptyphysics_OBJECTS = $(am_numptyphysics_OBJECTS) am__DEPENDENCIES_1 = numptyphysics_DEPENDENCIES = libbox2d.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I. -I$(srcdir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/b2BlockAllocator.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2Body.Po ./$(DEPDIR)/b2BroadPhase.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2CircleContact.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2CircleShape.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2CollideCircle.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2CollidePoly.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2Collision.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2Contact.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2ContactManager.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2ContactSolver.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2Distance.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2DistanceJoint.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2GearJoint.Po ./$(DEPDIR)/b2Island.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2Joint.Po ./$(DEPDIR)/b2Math.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2MouseJoint.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2PairManager.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2PolyAndCircleContact.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2PolyContact.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2PolygonShape.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2PrismaticJoint.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2PulleyJoint.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2RevoluteJoint.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2Settings.Po ./$(DEPDIR)/b2Shape.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2StackAllocator.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2TimeOfImpact.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2World.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/b2WorldCallbacks.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-App.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Canvas.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Config.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Dialogs.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Event.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Font.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Game.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Http.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Levels.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Os.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-OsFreeDesktop.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-OsHildon.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-OsWin32.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Path.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Scene.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Script.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Ui.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-Worker.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-ZipFile.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-happyhttp.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/numptyphysics-zoomer.Po CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libbox2d_a_SOURCES) $(numptyphysics_SOURCES) DIST_SOURCES = $(libbox2d_a_SOURCES) $(numptyphysics_SOURCES) desktopentryDATA_INSTALL = $(INSTALL_DATA) icon_26x26DATA_INSTALL = $(INSTALL_DATA) icon_64x64DATA_INSTALL = $(INSTALL_DATA) icon_scalableDATA_INSTALL = $(INSTALL_DATA) numptyphysicsDATA_INSTALL = $(INSTALL_DATA) serviceentryDATA_INSTALL = $(INSTALL_DATA) DATA = $(desktopentry_DATA) $(icon_26x26_DATA) $(icon_64x64_DATA) \ $(icon_scalable_DATA) $(numptyphysics_DATA) \ $(serviceentry_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ HILDON_CFLAGS = @HILDON_CFLAGS@ HILDON_LIBS = @HILDON_LIBS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build_alias = @build_alias@ datadir = @datadir@ datarootdir = @datarootdir@ desktopentrydir = @desktopentrydir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ icon_26x26dir = @icon_26x26dir@ icon_34x34dir = @icon_34x34dir@ icon_40x40dir = @icon_40x40dir@ icon_50x50dir = @icon_50x50dir@ icon_64x64dir = @icon_64x64dir@ icon_scalabledir = @icon_scalabledir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ numptyphysicsdir = @numptyphysicsdir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ serviceentrydir = @serviceentrydir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ noinst_LIBRARIES = libbox2d.a INCLUDES = -IBox2D/Include desktopentry_DATA = data/numptyphysics.desktop serviceentry_DATA = data/numptyphysics.service icon_26x26_DATA = data/icon26/numptyphysics.png #icon_40x40_DATA = data/icon40/numptyphysics.png icon_64x64_DATA = data/icon64/numptyphysics.png icon_scalable_DATA = data/icon64/numptyphysics.png numptyphysics_SOURCES = \ Path.cpp \ Canvas.cpp \ Font.cpp \ Levels.cpp \ ZipFile.cpp \ Scene.cpp \ Game.cpp \ Script.cpp \ App.cpp \ Config.cpp \ Http.cpp \ Os.cpp \ Ui.cpp \ Dialogs.cpp \ Event.cpp \ Worker.cpp \ happyhttp.cpp \ zoomer.cpp \ OsHildon.cpp \ OsFreeDesktop.cpp \ OsWin32.cpp numptyphysics_CPPFLAGS = -IXX $(SDL_CFLAGS) $(HILDON_CFLAGS) numptyphysics_LDADD = libbox2d.a $(SDL_LIBS) $(HILDON_LIBS) numptyphysics_DATA = \ data/C00_Title.npz \ data/C01_Tutorial.npz \ data/C10_Standard.npz \ data/C50_Gesualdi.npz \ data/L99_Gravity_Test.nph \ data/edit.png \ data/next.png \ data/paper.jpg \ data/pen.png \ data/tick.png \ data/blank.png \ data/share.png \ data/pause.png \ data/play.png \ data/reset.png \ data/forward.png \ data/help.png \ data/choose.png \ data/undo.png \ data/close.png \ data/record.png \ data/theend.png \ data/femkeklaver.ttf libbox2d_a_SOURCES = \ Box2D/Source/Collision/b2Distance.cpp \ Box2D/Source/Collision/b2TimeOfImpact.cpp \ Box2D/Source/Collision/b2CollideCircle.cpp \ Box2D/Source/Collision/b2CollidePoly.cpp \ Box2D/Source/Collision/Shapes/b2PolygonShape.cpp \ Box2D/Source/Collision/Shapes/b2CircleShape.cpp \ Box2D/Source/Collision/Shapes/b2Shape.cpp \ Box2D/Source/Collision/b2PairManager.cpp \ Box2D/Source/Collision/b2Collision.cpp \ Box2D/Source/Collision/b2BroadPhase.cpp \ Box2D/Source/Dynamics/b2WorldCallbacks.cpp \ Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp \ Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp \ Box2D/Source/Dynamics/Joints/b2GearJoint.cpp \ Box2D/Source/Dynamics/Joints/b2Joint.cpp \ Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp \ Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp \ Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp \ Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp \ Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp \ Box2D/Source/Dynamics/Contacts/b2Contact.cpp \ Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp \ Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp \ Box2D/Source/Dynamics/b2Island.cpp \ Box2D/Source/Dynamics/b2Body.cpp \ Box2D/Source/Dynamics/b2ContactManager.cpp \ Box2D/Source/Dynamics/b2World.cpp \ Box2D/Source/Common/b2BlockAllocator.cpp \ Box2D/Source/Common/b2StackAllocator.cpp \ Box2D/Source/Common/b2Settings.cpp \ Box2D/Source/Common/b2Math.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ cd $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libbox2d.a: $(libbox2d_a_OBJECTS) $(libbox2d_a_DEPENDENCIES) -rm -f libbox2d.a $(libbox2d_a_AR) libbox2d.a $(libbox2d_a_OBJECTS) $(libbox2d_a_LIBADD) $(RANLIB) libbox2d.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) numptyphysics$(EXEEXT): $(numptyphysics_OBJECTS) $(numptyphysics_DEPENDENCIES) @rm -f numptyphysics$(EXEEXT) $(CXXLINK) $(numptyphysics_LDFLAGS) $(numptyphysics_OBJECTS) $(numptyphysics_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2BlockAllocator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2Body.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2BroadPhase.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2CircleContact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2CircleShape.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2CollideCircle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2CollidePoly.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2Collision.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2Contact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2ContactManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2ContactSolver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2Distance.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2DistanceJoint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2GearJoint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2Island.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2Joint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2Math.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2MouseJoint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2PairManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2PolyAndCircleContact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2PolyContact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2PolygonShape.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2PrismaticJoint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2PulleyJoint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2RevoluteJoint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2Settings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2Shape.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2StackAllocator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2TimeOfImpact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2World.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2WorldCallbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-App.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Canvas.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Config.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Dialogs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Event.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Font.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Game.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Http.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Levels.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Os.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-OsFreeDesktop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-OsHildon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-OsWin32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Path.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Scene.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Script.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Ui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-Worker.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-ZipFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-happyhttp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numptyphysics-zoomer.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` b2Distance.o: Box2D/Source/Collision/b2Distance.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Distance.o -MD -MP -MF "$(DEPDIR)/b2Distance.Tpo" -c -o b2Distance.o `test -f 'Box2D/Source/Collision/b2Distance.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2Distance.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Distance.Tpo" "$(DEPDIR)/b2Distance.Po"; else rm -f "$(DEPDIR)/b2Distance.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2Distance.cpp' object='b2Distance.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Distance.Po' tmpdepfile='$(DEPDIR)/b2Distance.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Distance.o `test -f 'Box2D/Source/Collision/b2Distance.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2Distance.cpp b2Distance.obj: Box2D/Source/Collision/b2Distance.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Distance.obj -MD -MP -MF "$(DEPDIR)/b2Distance.Tpo" -c -o b2Distance.obj `if test -f 'Box2D/Source/Collision/b2Distance.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2Distance.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2Distance.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Distance.Tpo" "$(DEPDIR)/b2Distance.Po"; else rm -f "$(DEPDIR)/b2Distance.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2Distance.cpp' object='b2Distance.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Distance.Po' tmpdepfile='$(DEPDIR)/b2Distance.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Distance.obj `if test -f 'Box2D/Source/Collision/b2Distance.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2Distance.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2Distance.cpp'; fi` b2TimeOfImpact.o: Box2D/Source/Collision/b2TimeOfImpact.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2TimeOfImpact.o -MD -MP -MF "$(DEPDIR)/b2TimeOfImpact.Tpo" -c -o b2TimeOfImpact.o `test -f 'Box2D/Source/Collision/b2TimeOfImpact.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2TimeOfImpact.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2TimeOfImpact.Tpo" "$(DEPDIR)/b2TimeOfImpact.Po"; else rm -f "$(DEPDIR)/b2TimeOfImpact.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2TimeOfImpact.cpp' object='b2TimeOfImpact.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2TimeOfImpact.Po' tmpdepfile='$(DEPDIR)/b2TimeOfImpact.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2TimeOfImpact.o `test -f 'Box2D/Source/Collision/b2TimeOfImpact.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2TimeOfImpact.cpp b2TimeOfImpact.obj: Box2D/Source/Collision/b2TimeOfImpact.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2TimeOfImpact.obj -MD -MP -MF "$(DEPDIR)/b2TimeOfImpact.Tpo" -c -o b2TimeOfImpact.obj `if test -f 'Box2D/Source/Collision/b2TimeOfImpact.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2TimeOfImpact.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2TimeOfImpact.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2TimeOfImpact.Tpo" "$(DEPDIR)/b2TimeOfImpact.Po"; else rm -f "$(DEPDIR)/b2TimeOfImpact.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2TimeOfImpact.cpp' object='b2TimeOfImpact.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2TimeOfImpact.Po' tmpdepfile='$(DEPDIR)/b2TimeOfImpact.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2TimeOfImpact.obj `if test -f 'Box2D/Source/Collision/b2TimeOfImpact.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2TimeOfImpact.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2TimeOfImpact.cpp'; fi` b2CollideCircle.o: Box2D/Source/Collision/b2CollideCircle.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2CollideCircle.o -MD -MP -MF "$(DEPDIR)/b2CollideCircle.Tpo" -c -o b2CollideCircle.o `test -f 'Box2D/Source/Collision/b2CollideCircle.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2CollideCircle.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2CollideCircle.Tpo" "$(DEPDIR)/b2CollideCircle.Po"; else rm -f "$(DEPDIR)/b2CollideCircle.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2CollideCircle.cpp' object='b2CollideCircle.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2CollideCircle.Po' tmpdepfile='$(DEPDIR)/b2CollideCircle.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2CollideCircle.o `test -f 'Box2D/Source/Collision/b2CollideCircle.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2CollideCircle.cpp b2CollideCircle.obj: Box2D/Source/Collision/b2CollideCircle.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2CollideCircle.obj -MD -MP -MF "$(DEPDIR)/b2CollideCircle.Tpo" -c -o b2CollideCircle.obj `if test -f 'Box2D/Source/Collision/b2CollideCircle.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2CollideCircle.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2CollideCircle.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2CollideCircle.Tpo" "$(DEPDIR)/b2CollideCircle.Po"; else rm -f "$(DEPDIR)/b2CollideCircle.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2CollideCircle.cpp' object='b2CollideCircle.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2CollideCircle.Po' tmpdepfile='$(DEPDIR)/b2CollideCircle.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2CollideCircle.obj `if test -f 'Box2D/Source/Collision/b2CollideCircle.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2CollideCircle.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2CollideCircle.cpp'; fi` b2CollidePoly.o: Box2D/Source/Collision/b2CollidePoly.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2CollidePoly.o -MD -MP -MF "$(DEPDIR)/b2CollidePoly.Tpo" -c -o b2CollidePoly.o `test -f 'Box2D/Source/Collision/b2CollidePoly.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2CollidePoly.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2CollidePoly.Tpo" "$(DEPDIR)/b2CollidePoly.Po"; else rm -f "$(DEPDIR)/b2CollidePoly.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2CollidePoly.cpp' object='b2CollidePoly.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2CollidePoly.Po' tmpdepfile='$(DEPDIR)/b2CollidePoly.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2CollidePoly.o `test -f 'Box2D/Source/Collision/b2CollidePoly.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2CollidePoly.cpp b2CollidePoly.obj: Box2D/Source/Collision/b2CollidePoly.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2CollidePoly.obj -MD -MP -MF "$(DEPDIR)/b2CollidePoly.Tpo" -c -o b2CollidePoly.obj `if test -f 'Box2D/Source/Collision/b2CollidePoly.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2CollidePoly.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2CollidePoly.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2CollidePoly.Tpo" "$(DEPDIR)/b2CollidePoly.Po"; else rm -f "$(DEPDIR)/b2CollidePoly.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2CollidePoly.cpp' object='b2CollidePoly.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2CollidePoly.Po' tmpdepfile='$(DEPDIR)/b2CollidePoly.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2CollidePoly.obj `if test -f 'Box2D/Source/Collision/b2CollidePoly.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2CollidePoly.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2CollidePoly.cpp'; fi` b2PolygonShape.o: Box2D/Source/Collision/Shapes/b2PolygonShape.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2PolygonShape.o -MD -MP -MF "$(DEPDIR)/b2PolygonShape.Tpo" -c -o b2PolygonShape.o `test -f 'Box2D/Source/Collision/Shapes/b2PolygonShape.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/Shapes/b2PolygonShape.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2PolygonShape.Tpo" "$(DEPDIR)/b2PolygonShape.Po"; else rm -f "$(DEPDIR)/b2PolygonShape.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/Shapes/b2PolygonShape.cpp' object='b2PolygonShape.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2PolygonShape.Po' tmpdepfile='$(DEPDIR)/b2PolygonShape.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2PolygonShape.o `test -f 'Box2D/Source/Collision/Shapes/b2PolygonShape.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/Shapes/b2PolygonShape.cpp b2PolygonShape.obj: Box2D/Source/Collision/Shapes/b2PolygonShape.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2PolygonShape.obj -MD -MP -MF "$(DEPDIR)/b2PolygonShape.Tpo" -c -o b2PolygonShape.obj `if test -f 'Box2D/Source/Collision/Shapes/b2PolygonShape.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/Shapes/b2PolygonShape.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/Shapes/b2PolygonShape.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2PolygonShape.Tpo" "$(DEPDIR)/b2PolygonShape.Po"; else rm -f "$(DEPDIR)/b2PolygonShape.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/Shapes/b2PolygonShape.cpp' object='b2PolygonShape.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2PolygonShape.Po' tmpdepfile='$(DEPDIR)/b2PolygonShape.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2PolygonShape.obj `if test -f 'Box2D/Source/Collision/Shapes/b2PolygonShape.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/Shapes/b2PolygonShape.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/Shapes/b2PolygonShape.cpp'; fi` b2CircleShape.o: Box2D/Source/Collision/Shapes/b2CircleShape.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2CircleShape.o -MD -MP -MF "$(DEPDIR)/b2CircleShape.Tpo" -c -o b2CircleShape.o `test -f 'Box2D/Source/Collision/Shapes/b2CircleShape.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/Shapes/b2CircleShape.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2CircleShape.Tpo" "$(DEPDIR)/b2CircleShape.Po"; else rm -f "$(DEPDIR)/b2CircleShape.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/Shapes/b2CircleShape.cpp' object='b2CircleShape.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2CircleShape.Po' tmpdepfile='$(DEPDIR)/b2CircleShape.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2CircleShape.o `test -f 'Box2D/Source/Collision/Shapes/b2CircleShape.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/Shapes/b2CircleShape.cpp b2CircleShape.obj: Box2D/Source/Collision/Shapes/b2CircleShape.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2CircleShape.obj -MD -MP -MF "$(DEPDIR)/b2CircleShape.Tpo" -c -o b2CircleShape.obj `if test -f 'Box2D/Source/Collision/Shapes/b2CircleShape.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/Shapes/b2CircleShape.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/Shapes/b2CircleShape.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2CircleShape.Tpo" "$(DEPDIR)/b2CircleShape.Po"; else rm -f "$(DEPDIR)/b2CircleShape.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/Shapes/b2CircleShape.cpp' object='b2CircleShape.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2CircleShape.Po' tmpdepfile='$(DEPDIR)/b2CircleShape.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2CircleShape.obj `if test -f 'Box2D/Source/Collision/Shapes/b2CircleShape.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/Shapes/b2CircleShape.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/Shapes/b2CircleShape.cpp'; fi` b2Shape.o: Box2D/Source/Collision/Shapes/b2Shape.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Shape.o -MD -MP -MF "$(DEPDIR)/b2Shape.Tpo" -c -o b2Shape.o `test -f 'Box2D/Source/Collision/Shapes/b2Shape.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/Shapes/b2Shape.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Shape.Tpo" "$(DEPDIR)/b2Shape.Po"; else rm -f "$(DEPDIR)/b2Shape.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/Shapes/b2Shape.cpp' object='b2Shape.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Shape.Po' tmpdepfile='$(DEPDIR)/b2Shape.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Shape.o `test -f 'Box2D/Source/Collision/Shapes/b2Shape.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/Shapes/b2Shape.cpp b2Shape.obj: Box2D/Source/Collision/Shapes/b2Shape.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Shape.obj -MD -MP -MF "$(DEPDIR)/b2Shape.Tpo" -c -o b2Shape.obj `if test -f 'Box2D/Source/Collision/Shapes/b2Shape.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/Shapes/b2Shape.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/Shapes/b2Shape.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Shape.Tpo" "$(DEPDIR)/b2Shape.Po"; else rm -f "$(DEPDIR)/b2Shape.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/Shapes/b2Shape.cpp' object='b2Shape.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Shape.Po' tmpdepfile='$(DEPDIR)/b2Shape.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Shape.obj `if test -f 'Box2D/Source/Collision/Shapes/b2Shape.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/Shapes/b2Shape.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/Shapes/b2Shape.cpp'; fi` b2PairManager.o: Box2D/Source/Collision/b2PairManager.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2PairManager.o -MD -MP -MF "$(DEPDIR)/b2PairManager.Tpo" -c -o b2PairManager.o `test -f 'Box2D/Source/Collision/b2PairManager.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2PairManager.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2PairManager.Tpo" "$(DEPDIR)/b2PairManager.Po"; else rm -f "$(DEPDIR)/b2PairManager.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2PairManager.cpp' object='b2PairManager.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2PairManager.Po' tmpdepfile='$(DEPDIR)/b2PairManager.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2PairManager.o `test -f 'Box2D/Source/Collision/b2PairManager.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2PairManager.cpp b2PairManager.obj: Box2D/Source/Collision/b2PairManager.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2PairManager.obj -MD -MP -MF "$(DEPDIR)/b2PairManager.Tpo" -c -o b2PairManager.obj `if test -f 'Box2D/Source/Collision/b2PairManager.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2PairManager.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2PairManager.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2PairManager.Tpo" "$(DEPDIR)/b2PairManager.Po"; else rm -f "$(DEPDIR)/b2PairManager.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2PairManager.cpp' object='b2PairManager.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2PairManager.Po' tmpdepfile='$(DEPDIR)/b2PairManager.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2PairManager.obj `if test -f 'Box2D/Source/Collision/b2PairManager.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2PairManager.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2PairManager.cpp'; fi` b2Collision.o: Box2D/Source/Collision/b2Collision.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Collision.o -MD -MP -MF "$(DEPDIR)/b2Collision.Tpo" -c -o b2Collision.o `test -f 'Box2D/Source/Collision/b2Collision.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2Collision.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Collision.Tpo" "$(DEPDIR)/b2Collision.Po"; else rm -f "$(DEPDIR)/b2Collision.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2Collision.cpp' object='b2Collision.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Collision.Po' tmpdepfile='$(DEPDIR)/b2Collision.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Collision.o `test -f 'Box2D/Source/Collision/b2Collision.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2Collision.cpp b2Collision.obj: Box2D/Source/Collision/b2Collision.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Collision.obj -MD -MP -MF "$(DEPDIR)/b2Collision.Tpo" -c -o b2Collision.obj `if test -f 'Box2D/Source/Collision/b2Collision.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2Collision.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2Collision.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Collision.Tpo" "$(DEPDIR)/b2Collision.Po"; else rm -f "$(DEPDIR)/b2Collision.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2Collision.cpp' object='b2Collision.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Collision.Po' tmpdepfile='$(DEPDIR)/b2Collision.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Collision.obj `if test -f 'Box2D/Source/Collision/b2Collision.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2Collision.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2Collision.cpp'; fi` b2BroadPhase.o: Box2D/Source/Collision/b2BroadPhase.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2BroadPhase.o -MD -MP -MF "$(DEPDIR)/b2BroadPhase.Tpo" -c -o b2BroadPhase.o `test -f 'Box2D/Source/Collision/b2BroadPhase.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2BroadPhase.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2BroadPhase.Tpo" "$(DEPDIR)/b2BroadPhase.Po"; else rm -f "$(DEPDIR)/b2BroadPhase.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2BroadPhase.cpp' object='b2BroadPhase.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2BroadPhase.Po' tmpdepfile='$(DEPDIR)/b2BroadPhase.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2BroadPhase.o `test -f 'Box2D/Source/Collision/b2BroadPhase.cpp' || echo '$(srcdir)/'`Box2D/Source/Collision/b2BroadPhase.cpp b2BroadPhase.obj: Box2D/Source/Collision/b2BroadPhase.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2BroadPhase.obj -MD -MP -MF "$(DEPDIR)/b2BroadPhase.Tpo" -c -o b2BroadPhase.obj `if test -f 'Box2D/Source/Collision/b2BroadPhase.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2BroadPhase.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2BroadPhase.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2BroadPhase.Tpo" "$(DEPDIR)/b2BroadPhase.Po"; else rm -f "$(DEPDIR)/b2BroadPhase.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Collision/b2BroadPhase.cpp' object='b2BroadPhase.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2BroadPhase.Po' tmpdepfile='$(DEPDIR)/b2BroadPhase.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2BroadPhase.obj `if test -f 'Box2D/Source/Collision/b2BroadPhase.cpp'; then $(CYGPATH_W) 'Box2D/Source/Collision/b2BroadPhase.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Collision/b2BroadPhase.cpp'; fi` b2WorldCallbacks.o: Box2D/Source/Dynamics/b2WorldCallbacks.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2WorldCallbacks.o -MD -MP -MF "$(DEPDIR)/b2WorldCallbacks.Tpo" -c -o b2WorldCallbacks.o `test -f 'Box2D/Source/Dynamics/b2WorldCallbacks.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/b2WorldCallbacks.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2WorldCallbacks.Tpo" "$(DEPDIR)/b2WorldCallbacks.Po"; else rm -f "$(DEPDIR)/b2WorldCallbacks.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/b2WorldCallbacks.cpp' object='b2WorldCallbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2WorldCallbacks.Po' tmpdepfile='$(DEPDIR)/b2WorldCallbacks.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2WorldCallbacks.o `test -f 'Box2D/Source/Dynamics/b2WorldCallbacks.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/b2WorldCallbacks.cpp b2WorldCallbacks.obj: Box2D/Source/Dynamics/b2WorldCallbacks.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2WorldCallbacks.obj -MD -MP -MF "$(DEPDIR)/b2WorldCallbacks.Tpo" -c -o b2WorldCallbacks.obj `if test -f 'Box2D/Source/Dynamics/b2WorldCallbacks.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/b2WorldCallbacks.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/b2WorldCallbacks.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2WorldCallbacks.Tpo" "$(DEPDIR)/b2WorldCallbacks.Po"; else rm -f "$(DEPDIR)/b2WorldCallbacks.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/b2WorldCallbacks.cpp' object='b2WorldCallbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2WorldCallbacks.Po' tmpdepfile='$(DEPDIR)/b2WorldCallbacks.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2WorldCallbacks.obj `if test -f 'Box2D/Source/Dynamics/b2WorldCallbacks.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/b2WorldCallbacks.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/b2WorldCallbacks.cpp'; fi` b2PrismaticJoint.o: Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2PrismaticJoint.o -MD -MP -MF "$(DEPDIR)/b2PrismaticJoint.Tpo" -c -o b2PrismaticJoint.o `test -f 'Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2PrismaticJoint.Tpo" "$(DEPDIR)/b2PrismaticJoint.Po"; else rm -f "$(DEPDIR)/b2PrismaticJoint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp' object='b2PrismaticJoint.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2PrismaticJoint.Po' tmpdepfile='$(DEPDIR)/b2PrismaticJoint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2PrismaticJoint.o `test -f 'Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp b2PrismaticJoint.obj: Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2PrismaticJoint.obj -MD -MP -MF "$(DEPDIR)/b2PrismaticJoint.Tpo" -c -o b2PrismaticJoint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2PrismaticJoint.Tpo" "$(DEPDIR)/b2PrismaticJoint.Po"; else rm -f "$(DEPDIR)/b2PrismaticJoint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp' object='b2PrismaticJoint.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2PrismaticJoint.Po' tmpdepfile='$(DEPDIR)/b2PrismaticJoint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2PrismaticJoint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp'; fi` b2MouseJoint.o: Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2MouseJoint.o -MD -MP -MF "$(DEPDIR)/b2MouseJoint.Tpo" -c -o b2MouseJoint.o `test -f 'Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2MouseJoint.Tpo" "$(DEPDIR)/b2MouseJoint.Po"; else rm -f "$(DEPDIR)/b2MouseJoint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp' object='b2MouseJoint.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2MouseJoint.Po' tmpdepfile='$(DEPDIR)/b2MouseJoint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2MouseJoint.o `test -f 'Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp b2MouseJoint.obj: Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2MouseJoint.obj -MD -MP -MF "$(DEPDIR)/b2MouseJoint.Tpo" -c -o b2MouseJoint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2MouseJoint.Tpo" "$(DEPDIR)/b2MouseJoint.Po"; else rm -f "$(DEPDIR)/b2MouseJoint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp' object='b2MouseJoint.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2MouseJoint.Po' tmpdepfile='$(DEPDIR)/b2MouseJoint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2MouseJoint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp'; fi` b2GearJoint.o: Box2D/Source/Dynamics/Joints/b2GearJoint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2GearJoint.o -MD -MP -MF "$(DEPDIR)/b2GearJoint.Tpo" -c -o b2GearJoint.o `test -f 'Box2D/Source/Dynamics/Joints/b2GearJoint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2GearJoint.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2GearJoint.Tpo" "$(DEPDIR)/b2GearJoint.Po"; else rm -f "$(DEPDIR)/b2GearJoint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2GearJoint.cpp' object='b2GearJoint.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2GearJoint.Po' tmpdepfile='$(DEPDIR)/b2GearJoint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2GearJoint.o `test -f 'Box2D/Source/Dynamics/Joints/b2GearJoint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2GearJoint.cpp b2GearJoint.obj: Box2D/Source/Dynamics/Joints/b2GearJoint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2GearJoint.obj -MD -MP -MF "$(DEPDIR)/b2GearJoint.Tpo" -c -o b2GearJoint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2GearJoint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2GearJoint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2GearJoint.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2GearJoint.Tpo" "$(DEPDIR)/b2GearJoint.Po"; else rm -f "$(DEPDIR)/b2GearJoint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2GearJoint.cpp' object='b2GearJoint.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2GearJoint.Po' tmpdepfile='$(DEPDIR)/b2GearJoint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2GearJoint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2GearJoint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2GearJoint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2GearJoint.cpp'; fi` b2Joint.o: Box2D/Source/Dynamics/Joints/b2Joint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Joint.o -MD -MP -MF "$(DEPDIR)/b2Joint.Tpo" -c -o b2Joint.o `test -f 'Box2D/Source/Dynamics/Joints/b2Joint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2Joint.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Joint.Tpo" "$(DEPDIR)/b2Joint.Po"; else rm -f "$(DEPDIR)/b2Joint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2Joint.cpp' object='b2Joint.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Joint.Po' tmpdepfile='$(DEPDIR)/b2Joint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Joint.o `test -f 'Box2D/Source/Dynamics/Joints/b2Joint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2Joint.cpp b2Joint.obj: Box2D/Source/Dynamics/Joints/b2Joint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Joint.obj -MD -MP -MF "$(DEPDIR)/b2Joint.Tpo" -c -o b2Joint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2Joint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2Joint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2Joint.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Joint.Tpo" "$(DEPDIR)/b2Joint.Po"; else rm -f "$(DEPDIR)/b2Joint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2Joint.cpp' object='b2Joint.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Joint.Po' tmpdepfile='$(DEPDIR)/b2Joint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Joint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2Joint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2Joint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2Joint.cpp'; fi` b2PulleyJoint.o: Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2PulleyJoint.o -MD -MP -MF "$(DEPDIR)/b2PulleyJoint.Tpo" -c -o b2PulleyJoint.o `test -f 'Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2PulleyJoint.Tpo" "$(DEPDIR)/b2PulleyJoint.Po"; else rm -f "$(DEPDIR)/b2PulleyJoint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp' object='b2PulleyJoint.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2PulleyJoint.Po' tmpdepfile='$(DEPDIR)/b2PulleyJoint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2PulleyJoint.o `test -f 'Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp b2PulleyJoint.obj: Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2PulleyJoint.obj -MD -MP -MF "$(DEPDIR)/b2PulleyJoint.Tpo" -c -o b2PulleyJoint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2PulleyJoint.Tpo" "$(DEPDIR)/b2PulleyJoint.Po"; else rm -f "$(DEPDIR)/b2PulleyJoint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp' object='b2PulleyJoint.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2PulleyJoint.Po' tmpdepfile='$(DEPDIR)/b2PulleyJoint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2PulleyJoint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp'; fi` b2DistanceJoint.o: Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2DistanceJoint.o -MD -MP -MF "$(DEPDIR)/b2DistanceJoint.Tpo" -c -o b2DistanceJoint.o `test -f 'Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2DistanceJoint.Tpo" "$(DEPDIR)/b2DistanceJoint.Po"; else rm -f "$(DEPDIR)/b2DistanceJoint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp' object='b2DistanceJoint.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2DistanceJoint.Po' tmpdepfile='$(DEPDIR)/b2DistanceJoint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2DistanceJoint.o `test -f 'Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp b2DistanceJoint.obj: Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2DistanceJoint.obj -MD -MP -MF "$(DEPDIR)/b2DistanceJoint.Tpo" -c -o b2DistanceJoint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2DistanceJoint.Tpo" "$(DEPDIR)/b2DistanceJoint.Po"; else rm -f "$(DEPDIR)/b2DistanceJoint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp' object='b2DistanceJoint.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2DistanceJoint.Po' tmpdepfile='$(DEPDIR)/b2DistanceJoint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2DistanceJoint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp'; fi` b2RevoluteJoint.o: Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2RevoluteJoint.o -MD -MP -MF "$(DEPDIR)/b2RevoluteJoint.Tpo" -c -o b2RevoluteJoint.o `test -f 'Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2RevoluteJoint.Tpo" "$(DEPDIR)/b2RevoluteJoint.Po"; else rm -f "$(DEPDIR)/b2RevoluteJoint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp' object='b2RevoluteJoint.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2RevoluteJoint.Po' tmpdepfile='$(DEPDIR)/b2RevoluteJoint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2RevoluteJoint.o `test -f 'Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp b2RevoluteJoint.obj: Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2RevoluteJoint.obj -MD -MP -MF "$(DEPDIR)/b2RevoluteJoint.Tpo" -c -o b2RevoluteJoint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2RevoluteJoint.Tpo" "$(DEPDIR)/b2RevoluteJoint.Po"; else rm -f "$(DEPDIR)/b2RevoluteJoint.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp' object='b2RevoluteJoint.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2RevoluteJoint.Po' tmpdepfile='$(DEPDIR)/b2RevoluteJoint.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2RevoluteJoint.obj `if test -f 'Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp'; fi` b2CircleContact.o: Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2CircleContact.o -MD -MP -MF "$(DEPDIR)/b2CircleContact.Tpo" -c -o b2CircleContact.o `test -f 'Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2CircleContact.Tpo" "$(DEPDIR)/b2CircleContact.Po"; else rm -f "$(DEPDIR)/b2CircleContact.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp' object='b2CircleContact.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2CircleContact.Po' tmpdepfile='$(DEPDIR)/b2CircleContact.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2CircleContact.o `test -f 'Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp b2CircleContact.obj: Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2CircleContact.obj -MD -MP -MF "$(DEPDIR)/b2CircleContact.Tpo" -c -o b2CircleContact.obj `if test -f 'Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2CircleContact.Tpo" "$(DEPDIR)/b2CircleContact.Po"; else rm -f "$(DEPDIR)/b2CircleContact.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp' object='b2CircleContact.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2CircleContact.Po' tmpdepfile='$(DEPDIR)/b2CircleContact.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2CircleContact.obj `if test -f 'Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp'; fi` b2PolyAndCircleContact.o: Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2PolyAndCircleContact.o -MD -MP -MF "$(DEPDIR)/b2PolyAndCircleContact.Tpo" -c -o b2PolyAndCircleContact.o `test -f 'Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2PolyAndCircleContact.Tpo" "$(DEPDIR)/b2PolyAndCircleContact.Po"; else rm -f "$(DEPDIR)/b2PolyAndCircleContact.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp' object='b2PolyAndCircleContact.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2PolyAndCircleContact.Po' tmpdepfile='$(DEPDIR)/b2PolyAndCircleContact.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2PolyAndCircleContact.o `test -f 'Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp b2PolyAndCircleContact.obj: Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2PolyAndCircleContact.obj -MD -MP -MF "$(DEPDIR)/b2PolyAndCircleContact.Tpo" -c -o b2PolyAndCircleContact.obj `if test -f 'Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2PolyAndCircleContact.Tpo" "$(DEPDIR)/b2PolyAndCircleContact.Po"; else rm -f "$(DEPDIR)/b2PolyAndCircleContact.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp' object='b2PolyAndCircleContact.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2PolyAndCircleContact.Po' tmpdepfile='$(DEPDIR)/b2PolyAndCircleContact.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2PolyAndCircleContact.obj `if test -f 'Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp'; fi` b2Contact.o: Box2D/Source/Dynamics/Contacts/b2Contact.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Contact.o -MD -MP -MF "$(DEPDIR)/b2Contact.Tpo" -c -o b2Contact.o `test -f 'Box2D/Source/Dynamics/Contacts/b2Contact.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Contacts/b2Contact.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Contact.Tpo" "$(DEPDIR)/b2Contact.Po"; else rm -f "$(DEPDIR)/b2Contact.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Contacts/b2Contact.cpp' object='b2Contact.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Contact.Po' tmpdepfile='$(DEPDIR)/b2Contact.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Contact.o `test -f 'Box2D/Source/Dynamics/Contacts/b2Contact.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Contacts/b2Contact.cpp b2Contact.obj: Box2D/Source/Dynamics/Contacts/b2Contact.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Contact.obj -MD -MP -MF "$(DEPDIR)/b2Contact.Tpo" -c -o b2Contact.obj `if test -f 'Box2D/Source/Dynamics/Contacts/b2Contact.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Contacts/b2Contact.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Contacts/b2Contact.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Contact.Tpo" "$(DEPDIR)/b2Contact.Po"; else rm -f "$(DEPDIR)/b2Contact.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Contacts/b2Contact.cpp' object='b2Contact.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Contact.Po' tmpdepfile='$(DEPDIR)/b2Contact.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Contact.obj `if test -f 'Box2D/Source/Dynamics/Contacts/b2Contact.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Contacts/b2Contact.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Contacts/b2Contact.cpp'; fi` b2PolyContact.o: Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2PolyContact.o -MD -MP -MF "$(DEPDIR)/b2PolyContact.Tpo" -c -o b2PolyContact.o `test -f 'Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2PolyContact.Tpo" "$(DEPDIR)/b2PolyContact.Po"; else rm -f "$(DEPDIR)/b2PolyContact.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp' object='b2PolyContact.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2PolyContact.Po' tmpdepfile='$(DEPDIR)/b2PolyContact.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2PolyContact.o `test -f 'Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp b2PolyContact.obj: Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2PolyContact.obj -MD -MP -MF "$(DEPDIR)/b2PolyContact.Tpo" -c -o b2PolyContact.obj `if test -f 'Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2PolyContact.Tpo" "$(DEPDIR)/b2PolyContact.Po"; else rm -f "$(DEPDIR)/b2PolyContact.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp' object='b2PolyContact.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2PolyContact.Po' tmpdepfile='$(DEPDIR)/b2PolyContact.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2PolyContact.obj `if test -f 'Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp'; fi` b2ContactSolver.o: Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2ContactSolver.o -MD -MP -MF "$(DEPDIR)/b2ContactSolver.Tpo" -c -o b2ContactSolver.o `test -f 'Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2ContactSolver.Tpo" "$(DEPDIR)/b2ContactSolver.Po"; else rm -f "$(DEPDIR)/b2ContactSolver.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp' object='b2ContactSolver.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2ContactSolver.Po' tmpdepfile='$(DEPDIR)/b2ContactSolver.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2ContactSolver.o `test -f 'Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp b2ContactSolver.obj: Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2ContactSolver.obj -MD -MP -MF "$(DEPDIR)/b2ContactSolver.Tpo" -c -o b2ContactSolver.obj `if test -f 'Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2ContactSolver.Tpo" "$(DEPDIR)/b2ContactSolver.Po"; else rm -f "$(DEPDIR)/b2ContactSolver.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp' object='b2ContactSolver.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2ContactSolver.Po' tmpdepfile='$(DEPDIR)/b2ContactSolver.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2ContactSolver.obj `if test -f 'Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp'; fi` b2Island.o: Box2D/Source/Dynamics/b2Island.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Island.o -MD -MP -MF "$(DEPDIR)/b2Island.Tpo" -c -o b2Island.o `test -f 'Box2D/Source/Dynamics/b2Island.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/b2Island.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Island.Tpo" "$(DEPDIR)/b2Island.Po"; else rm -f "$(DEPDIR)/b2Island.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/b2Island.cpp' object='b2Island.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Island.Po' tmpdepfile='$(DEPDIR)/b2Island.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Island.o `test -f 'Box2D/Source/Dynamics/b2Island.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/b2Island.cpp b2Island.obj: Box2D/Source/Dynamics/b2Island.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Island.obj -MD -MP -MF "$(DEPDIR)/b2Island.Tpo" -c -o b2Island.obj `if test -f 'Box2D/Source/Dynamics/b2Island.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/b2Island.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/b2Island.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Island.Tpo" "$(DEPDIR)/b2Island.Po"; else rm -f "$(DEPDIR)/b2Island.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/b2Island.cpp' object='b2Island.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Island.Po' tmpdepfile='$(DEPDIR)/b2Island.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Island.obj `if test -f 'Box2D/Source/Dynamics/b2Island.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/b2Island.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/b2Island.cpp'; fi` b2Body.o: Box2D/Source/Dynamics/b2Body.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Body.o -MD -MP -MF "$(DEPDIR)/b2Body.Tpo" -c -o b2Body.o `test -f 'Box2D/Source/Dynamics/b2Body.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/b2Body.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Body.Tpo" "$(DEPDIR)/b2Body.Po"; else rm -f "$(DEPDIR)/b2Body.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/b2Body.cpp' object='b2Body.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Body.Po' tmpdepfile='$(DEPDIR)/b2Body.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Body.o `test -f 'Box2D/Source/Dynamics/b2Body.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/b2Body.cpp b2Body.obj: Box2D/Source/Dynamics/b2Body.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Body.obj -MD -MP -MF "$(DEPDIR)/b2Body.Tpo" -c -o b2Body.obj `if test -f 'Box2D/Source/Dynamics/b2Body.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/b2Body.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/b2Body.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Body.Tpo" "$(DEPDIR)/b2Body.Po"; else rm -f "$(DEPDIR)/b2Body.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/b2Body.cpp' object='b2Body.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Body.Po' tmpdepfile='$(DEPDIR)/b2Body.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Body.obj `if test -f 'Box2D/Source/Dynamics/b2Body.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/b2Body.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/b2Body.cpp'; fi` b2ContactManager.o: Box2D/Source/Dynamics/b2ContactManager.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2ContactManager.o -MD -MP -MF "$(DEPDIR)/b2ContactManager.Tpo" -c -o b2ContactManager.o `test -f 'Box2D/Source/Dynamics/b2ContactManager.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/b2ContactManager.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2ContactManager.Tpo" "$(DEPDIR)/b2ContactManager.Po"; else rm -f "$(DEPDIR)/b2ContactManager.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/b2ContactManager.cpp' object='b2ContactManager.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2ContactManager.Po' tmpdepfile='$(DEPDIR)/b2ContactManager.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2ContactManager.o `test -f 'Box2D/Source/Dynamics/b2ContactManager.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/b2ContactManager.cpp b2ContactManager.obj: Box2D/Source/Dynamics/b2ContactManager.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2ContactManager.obj -MD -MP -MF "$(DEPDIR)/b2ContactManager.Tpo" -c -o b2ContactManager.obj `if test -f 'Box2D/Source/Dynamics/b2ContactManager.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/b2ContactManager.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/b2ContactManager.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2ContactManager.Tpo" "$(DEPDIR)/b2ContactManager.Po"; else rm -f "$(DEPDIR)/b2ContactManager.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/b2ContactManager.cpp' object='b2ContactManager.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2ContactManager.Po' tmpdepfile='$(DEPDIR)/b2ContactManager.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2ContactManager.obj `if test -f 'Box2D/Source/Dynamics/b2ContactManager.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/b2ContactManager.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/b2ContactManager.cpp'; fi` b2World.o: Box2D/Source/Dynamics/b2World.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2World.o -MD -MP -MF "$(DEPDIR)/b2World.Tpo" -c -o b2World.o `test -f 'Box2D/Source/Dynamics/b2World.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/b2World.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2World.Tpo" "$(DEPDIR)/b2World.Po"; else rm -f "$(DEPDIR)/b2World.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/b2World.cpp' object='b2World.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2World.Po' tmpdepfile='$(DEPDIR)/b2World.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2World.o `test -f 'Box2D/Source/Dynamics/b2World.cpp' || echo '$(srcdir)/'`Box2D/Source/Dynamics/b2World.cpp b2World.obj: Box2D/Source/Dynamics/b2World.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2World.obj -MD -MP -MF "$(DEPDIR)/b2World.Tpo" -c -o b2World.obj `if test -f 'Box2D/Source/Dynamics/b2World.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/b2World.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/b2World.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2World.Tpo" "$(DEPDIR)/b2World.Po"; else rm -f "$(DEPDIR)/b2World.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Dynamics/b2World.cpp' object='b2World.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2World.Po' tmpdepfile='$(DEPDIR)/b2World.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2World.obj `if test -f 'Box2D/Source/Dynamics/b2World.cpp'; then $(CYGPATH_W) 'Box2D/Source/Dynamics/b2World.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Dynamics/b2World.cpp'; fi` b2BlockAllocator.o: Box2D/Source/Common/b2BlockAllocator.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2BlockAllocator.o -MD -MP -MF "$(DEPDIR)/b2BlockAllocator.Tpo" -c -o b2BlockAllocator.o `test -f 'Box2D/Source/Common/b2BlockAllocator.cpp' || echo '$(srcdir)/'`Box2D/Source/Common/b2BlockAllocator.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2BlockAllocator.Tpo" "$(DEPDIR)/b2BlockAllocator.Po"; else rm -f "$(DEPDIR)/b2BlockAllocator.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Common/b2BlockAllocator.cpp' object='b2BlockAllocator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2BlockAllocator.Po' tmpdepfile='$(DEPDIR)/b2BlockAllocator.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2BlockAllocator.o `test -f 'Box2D/Source/Common/b2BlockAllocator.cpp' || echo '$(srcdir)/'`Box2D/Source/Common/b2BlockAllocator.cpp b2BlockAllocator.obj: Box2D/Source/Common/b2BlockAllocator.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2BlockAllocator.obj -MD -MP -MF "$(DEPDIR)/b2BlockAllocator.Tpo" -c -o b2BlockAllocator.obj `if test -f 'Box2D/Source/Common/b2BlockAllocator.cpp'; then $(CYGPATH_W) 'Box2D/Source/Common/b2BlockAllocator.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Common/b2BlockAllocator.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2BlockAllocator.Tpo" "$(DEPDIR)/b2BlockAllocator.Po"; else rm -f "$(DEPDIR)/b2BlockAllocator.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Common/b2BlockAllocator.cpp' object='b2BlockAllocator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2BlockAllocator.Po' tmpdepfile='$(DEPDIR)/b2BlockAllocator.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2BlockAllocator.obj `if test -f 'Box2D/Source/Common/b2BlockAllocator.cpp'; then $(CYGPATH_W) 'Box2D/Source/Common/b2BlockAllocator.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Common/b2BlockAllocator.cpp'; fi` b2StackAllocator.o: Box2D/Source/Common/b2StackAllocator.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2StackAllocator.o -MD -MP -MF "$(DEPDIR)/b2StackAllocator.Tpo" -c -o b2StackAllocator.o `test -f 'Box2D/Source/Common/b2StackAllocator.cpp' || echo '$(srcdir)/'`Box2D/Source/Common/b2StackAllocator.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2StackAllocator.Tpo" "$(DEPDIR)/b2StackAllocator.Po"; else rm -f "$(DEPDIR)/b2StackAllocator.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Common/b2StackAllocator.cpp' object='b2StackAllocator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2StackAllocator.Po' tmpdepfile='$(DEPDIR)/b2StackAllocator.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2StackAllocator.o `test -f 'Box2D/Source/Common/b2StackAllocator.cpp' || echo '$(srcdir)/'`Box2D/Source/Common/b2StackAllocator.cpp b2StackAllocator.obj: Box2D/Source/Common/b2StackAllocator.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2StackAllocator.obj -MD -MP -MF "$(DEPDIR)/b2StackAllocator.Tpo" -c -o b2StackAllocator.obj `if test -f 'Box2D/Source/Common/b2StackAllocator.cpp'; then $(CYGPATH_W) 'Box2D/Source/Common/b2StackAllocator.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Common/b2StackAllocator.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2StackAllocator.Tpo" "$(DEPDIR)/b2StackAllocator.Po"; else rm -f "$(DEPDIR)/b2StackAllocator.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Common/b2StackAllocator.cpp' object='b2StackAllocator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2StackAllocator.Po' tmpdepfile='$(DEPDIR)/b2StackAllocator.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2StackAllocator.obj `if test -f 'Box2D/Source/Common/b2StackAllocator.cpp'; then $(CYGPATH_W) 'Box2D/Source/Common/b2StackAllocator.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Common/b2StackAllocator.cpp'; fi` b2Settings.o: Box2D/Source/Common/b2Settings.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Settings.o -MD -MP -MF "$(DEPDIR)/b2Settings.Tpo" -c -o b2Settings.o `test -f 'Box2D/Source/Common/b2Settings.cpp' || echo '$(srcdir)/'`Box2D/Source/Common/b2Settings.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Settings.Tpo" "$(DEPDIR)/b2Settings.Po"; else rm -f "$(DEPDIR)/b2Settings.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Common/b2Settings.cpp' object='b2Settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Settings.Po' tmpdepfile='$(DEPDIR)/b2Settings.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Settings.o `test -f 'Box2D/Source/Common/b2Settings.cpp' || echo '$(srcdir)/'`Box2D/Source/Common/b2Settings.cpp b2Settings.obj: Box2D/Source/Common/b2Settings.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Settings.obj -MD -MP -MF "$(DEPDIR)/b2Settings.Tpo" -c -o b2Settings.obj `if test -f 'Box2D/Source/Common/b2Settings.cpp'; then $(CYGPATH_W) 'Box2D/Source/Common/b2Settings.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Common/b2Settings.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Settings.Tpo" "$(DEPDIR)/b2Settings.Po"; else rm -f "$(DEPDIR)/b2Settings.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Common/b2Settings.cpp' object='b2Settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Settings.Po' tmpdepfile='$(DEPDIR)/b2Settings.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Settings.obj `if test -f 'Box2D/Source/Common/b2Settings.cpp'; then $(CYGPATH_W) 'Box2D/Source/Common/b2Settings.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Common/b2Settings.cpp'; fi` b2Math.o: Box2D/Source/Common/b2Math.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Math.o -MD -MP -MF "$(DEPDIR)/b2Math.Tpo" -c -o b2Math.o `test -f 'Box2D/Source/Common/b2Math.cpp' || echo '$(srcdir)/'`Box2D/Source/Common/b2Math.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Math.Tpo" "$(DEPDIR)/b2Math.Po"; else rm -f "$(DEPDIR)/b2Math.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Common/b2Math.cpp' object='b2Math.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Math.Po' tmpdepfile='$(DEPDIR)/b2Math.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Math.o `test -f 'Box2D/Source/Common/b2Math.cpp' || echo '$(srcdir)/'`Box2D/Source/Common/b2Math.cpp b2Math.obj: Box2D/Source/Common/b2Math.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT b2Math.obj -MD -MP -MF "$(DEPDIR)/b2Math.Tpo" -c -o b2Math.obj `if test -f 'Box2D/Source/Common/b2Math.cpp'; then $(CYGPATH_W) 'Box2D/Source/Common/b2Math.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Common/b2Math.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/b2Math.Tpo" "$(DEPDIR)/b2Math.Po"; else rm -f "$(DEPDIR)/b2Math.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Box2D/Source/Common/b2Math.cpp' object='b2Math.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/b2Math.Po' tmpdepfile='$(DEPDIR)/b2Math.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o b2Math.obj `if test -f 'Box2D/Source/Common/b2Math.cpp'; then $(CYGPATH_W) 'Box2D/Source/Common/b2Math.cpp'; else $(CYGPATH_W) '$(srcdir)/Box2D/Source/Common/b2Math.cpp'; fi` numptyphysics-Path.o: Path.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Path.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Path.Tpo" -c -o numptyphysics-Path.o `test -f 'Path.cpp' || echo '$(srcdir)/'`Path.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Path.Tpo" "$(DEPDIR)/numptyphysics-Path.Po"; else rm -f "$(DEPDIR)/numptyphysics-Path.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Path.cpp' object='numptyphysics-Path.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Path.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Path.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Path.o `test -f 'Path.cpp' || echo '$(srcdir)/'`Path.cpp numptyphysics-Path.obj: Path.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Path.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Path.Tpo" -c -o numptyphysics-Path.obj `if test -f 'Path.cpp'; then $(CYGPATH_W) 'Path.cpp'; else $(CYGPATH_W) '$(srcdir)/Path.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Path.Tpo" "$(DEPDIR)/numptyphysics-Path.Po"; else rm -f "$(DEPDIR)/numptyphysics-Path.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Path.cpp' object='numptyphysics-Path.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Path.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Path.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Path.obj `if test -f 'Path.cpp'; then $(CYGPATH_W) 'Path.cpp'; else $(CYGPATH_W) '$(srcdir)/Path.cpp'; fi` numptyphysics-Canvas.o: Canvas.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Canvas.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Canvas.Tpo" -c -o numptyphysics-Canvas.o `test -f 'Canvas.cpp' || echo '$(srcdir)/'`Canvas.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Canvas.Tpo" "$(DEPDIR)/numptyphysics-Canvas.Po"; else rm -f "$(DEPDIR)/numptyphysics-Canvas.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Canvas.cpp' object='numptyphysics-Canvas.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Canvas.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Canvas.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Canvas.o `test -f 'Canvas.cpp' || echo '$(srcdir)/'`Canvas.cpp numptyphysics-Canvas.obj: Canvas.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Canvas.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Canvas.Tpo" -c -o numptyphysics-Canvas.obj `if test -f 'Canvas.cpp'; then $(CYGPATH_W) 'Canvas.cpp'; else $(CYGPATH_W) '$(srcdir)/Canvas.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Canvas.Tpo" "$(DEPDIR)/numptyphysics-Canvas.Po"; else rm -f "$(DEPDIR)/numptyphysics-Canvas.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Canvas.cpp' object='numptyphysics-Canvas.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Canvas.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Canvas.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Canvas.obj `if test -f 'Canvas.cpp'; then $(CYGPATH_W) 'Canvas.cpp'; else $(CYGPATH_W) '$(srcdir)/Canvas.cpp'; fi` numptyphysics-Font.o: Font.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Font.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Font.Tpo" -c -o numptyphysics-Font.o `test -f 'Font.cpp' || echo '$(srcdir)/'`Font.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Font.Tpo" "$(DEPDIR)/numptyphysics-Font.Po"; else rm -f "$(DEPDIR)/numptyphysics-Font.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Font.cpp' object='numptyphysics-Font.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Font.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Font.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Font.o `test -f 'Font.cpp' || echo '$(srcdir)/'`Font.cpp numptyphysics-Font.obj: Font.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Font.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Font.Tpo" -c -o numptyphysics-Font.obj `if test -f 'Font.cpp'; then $(CYGPATH_W) 'Font.cpp'; else $(CYGPATH_W) '$(srcdir)/Font.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Font.Tpo" "$(DEPDIR)/numptyphysics-Font.Po"; else rm -f "$(DEPDIR)/numptyphysics-Font.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Font.cpp' object='numptyphysics-Font.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Font.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Font.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Font.obj `if test -f 'Font.cpp'; then $(CYGPATH_W) 'Font.cpp'; else $(CYGPATH_W) '$(srcdir)/Font.cpp'; fi` numptyphysics-Levels.o: Levels.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Levels.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Levels.Tpo" -c -o numptyphysics-Levels.o `test -f 'Levels.cpp' || echo '$(srcdir)/'`Levels.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Levels.Tpo" "$(DEPDIR)/numptyphysics-Levels.Po"; else rm -f "$(DEPDIR)/numptyphysics-Levels.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Levels.cpp' object='numptyphysics-Levels.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Levels.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Levels.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Levels.o `test -f 'Levels.cpp' || echo '$(srcdir)/'`Levels.cpp numptyphysics-Levels.obj: Levels.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Levels.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Levels.Tpo" -c -o numptyphysics-Levels.obj `if test -f 'Levels.cpp'; then $(CYGPATH_W) 'Levels.cpp'; else $(CYGPATH_W) '$(srcdir)/Levels.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Levels.Tpo" "$(DEPDIR)/numptyphysics-Levels.Po"; else rm -f "$(DEPDIR)/numptyphysics-Levels.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Levels.cpp' object='numptyphysics-Levels.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Levels.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Levels.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Levels.obj `if test -f 'Levels.cpp'; then $(CYGPATH_W) 'Levels.cpp'; else $(CYGPATH_W) '$(srcdir)/Levels.cpp'; fi` numptyphysics-ZipFile.o: ZipFile.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-ZipFile.o -MD -MP -MF "$(DEPDIR)/numptyphysics-ZipFile.Tpo" -c -o numptyphysics-ZipFile.o `test -f 'ZipFile.cpp' || echo '$(srcdir)/'`ZipFile.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-ZipFile.Tpo" "$(DEPDIR)/numptyphysics-ZipFile.Po"; else rm -f "$(DEPDIR)/numptyphysics-ZipFile.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ZipFile.cpp' object='numptyphysics-ZipFile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-ZipFile.Po' tmpdepfile='$(DEPDIR)/numptyphysics-ZipFile.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-ZipFile.o `test -f 'ZipFile.cpp' || echo '$(srcdir)/'`ZipFile.cpp numptyphysics-ZipFile.obj: ZipFile.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-ZipFile.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-ZipFile.Tpo" -c -o numptyphysics-ZipFile.obj `if test -f 'ZipFile.cpp'; then $(CYGPATH_W) 'ZipFile.cpp'; else $(CYGPATH_W) '$(srcdir)/ZipFile.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-ZipFile.Tpo" "$(DEPDIR)/numptyphysics-ZipFile.Po"; else rm -f "$(DEPDIR)/numptyphysics-ZipFile.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ZipFile.cpp' object='numptyphysics-ZipFile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-ZipFile.Po' tmpdepfile='$(DEPDIR)/numptyphysics-ZipFile.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-ZipFile.obj `if test -f 'ZipFile.cpp'; then $(CYGPATH_W) 'ZipFile.cpp'; else $(CYGPATH_W) '$(srcdir)/ZipFile.cpp'; fi` numptyphysics-Scene.o: Scene.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Scene.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Scene.Tpo" -c -o numptyphysics-Scene.o `test -f 'Scene.cpp' || echo '$(srcdir)/'`Scene.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Scene.Tpo" "$(DEPDIR)/numptyphysics-Scene.Po"; else rm -f "$(DEPDIR)/numptyphysics-Scene.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Scene.cpp' object='numptyphysics-Scene.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Scene.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Scene.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Scene.o `test -f 'Scene.cpp' || echo '$(srcdir)/'`Scene.cpp numptyphysics-Scene.obj: Scene.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Scene.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Scene.Tpo" -c -o numptyphysics-Scene.obj `if test -f 'Scene.cpp'; then $(CYGPATH_W) 'Scene.cpp'; else $(CYGPATH_W) '$(srcdir)/Scene.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Scene.Tpo" "$(DEPDIR)/numptyphysics-Scene.Po"; else rm -f "$(DEPDIR)/numptyphysics-Scene.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Scene.cpp' object='numptyphysics-Scene.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Scene.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Scene.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Scene.obj `if test -f 'Scene.cpp'; then $(CYGPATH_W) 'Scene.cpp'; else $(CYGPATH_W) '$(srcdir)/Scene.cpp'; fi` numptyphysics-Game.o: Game.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Game.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Game.Tpo" -c -o numptyphysics-Game.o `test -f 'Game.cpp' || echo '$(srcdir)/'`Game.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Game.Tpo" "$(DEPDIR)/numptyphysics-Game.Po"; else rm -f "$(DEPDIR)/numptyphysics-Game.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Game.cpp' object='numptyphysics-Game.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Game.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Game.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Game.o `test -f 'Game.cpp' || echo '$(srcdir)/'`Game.cpp numptyphysics-Game.obj: Game.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Game.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Game.Tpo" -c -o numptyphysics-Game.obj `if test -f 'Game.cpp'; then $(CYGPATH_W) 'Game.cpp'; else $(CYGPATH_W) '$(srcdir)/Game.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Game.Tpo" "$(DEPDIR)/numptyphysics-Game.Po"; else rm -f "$(DEPDIR)/numptyphysics-Game.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Game.cpp' object='numptyphysics-Game.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Game.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Game.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Game.obj `if test -f 'Game.cpp'; then $(CYGPATH_W) 'Game.cpp'; else $(CYGPATH_W) '$(srcdir)/Game.cpp'; fi` numptyphysics-Script.o: Script.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Script.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Script.Tpo" -c -o numptyphysics-Script.o `test -f 'Script.cpp' || echo '$(srcdir)/'`Script.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Script.Tpo" "$(DEPDIR)/numptyphysics-Script.Po"; else rm -f "$(DEPDIR)/numptyphysics-Script.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Script.cpp' object='numptyphysics-Script.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Script.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Script.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Script.o `test -f 'Script.cpp' || echo '$(srcdir)/'`Script.cpp numptyphysics-Script.obj: Script.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Script.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Script.Tpo" -c -o numptyphysics-Script.obj `if test -f 'Script.cpp'; then $(CYGPATH_W) 'Script.cpp'; else $(CYGPATH_W) '$(srcdir)/Script.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Script.Tpo" "$(DEPDIR)/numptyphysics-Script.Po"; else rm -f "$(DEPDIR)/numptyphysics-Script.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Script.cpp' object='numptyphysics-Script.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Script.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Script.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Script.obj `if test -f 'Script.cpp'; then $(CYGPATH_W) 'Script.cpp'; else $(CYGPATH_W) '$(srcdir)/Script.cpp'; fi` numptyphysics-App.o: App.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-App.o -MD -MP -MF "$(DEPDIR)/numptyphysics-App.Tpo" -c -o numptyphysics-App.o `test -f 'App.cpp' || echo '$(srcdir)/'`App.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-App.Tpo" "$(DEPDIR)/numptyphysics-App.Po"; else rm -f "$(DEPDIR)/numptyphysics-App.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='App.cpp' object='numptyphysics-App.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-App.Po' tmpdepfile='$(DEPDIR)/numptyphysics-App.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-App.o `test -f 'App.cpp' || echo '$(srcdir)/'`App.cpp numptyphysics-App.obj: App.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-App.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-App.Tpo" -c -o numptyphysics-App.obj `if test -f 'App.cpp'; then $(CYGPATH_W) 'App.cpp'; else $(CYGPATH_W) '$(srcdir)/App.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-App.Tpo" "$(DEPDIR)/numptyphysics-App.Po"; else rm -f "$(DEPDIR)/numptyphysics-App.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='App.cpp' object='numptyphysics-App.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-App.Po' tmpdepfile='$(DEPDIR)/numptyphysics-App.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-App.obj `if test -f 'App.cpp'; then $(CYGPATH_W) 'App.cpp'; else $(CYGPATH_W) '$(srcdir)/App.cpp'; fi` numptyphysics-Config.o: Config.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Config.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Config.Tpo" -c -o numptyphysics-Config.o `test -f 'Config.cpp' || echo '$(srcdir)/'`Config.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Config.Tpo" "$(DEPDIR)/numptyphysics-Config.Po"; else rm -f "$(DEPDIR)/numptyphysics-Config.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Config.cpp' object='numptyphysics-Config.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Config.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Config.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Config.o `test -f 'Config.cpp' || echo '$(srcdir)/'`Config.cpp numptyphysics-Config.obj: Config.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Config.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Config.Tpo" -c -o numptyphysics-Config.obj `if test -f 'Config.cpp'; then $(CYGPATH_W) 'Config.cpp'; else $(CYGPATH_W) '$(srcdir)/Config.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Config.Tpo" "$(DEPDIR)/numptyphysics-Config.Po"; else rm -f "$(DEPDIR)/numptyphysics-Config.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Config.cpp' object='numptyphysics-Config.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Config.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Config.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Config.obj `if test -f 'Config.cpp'; then $(CYGPATH_W) 'Config.cpp'; else $(CYGPATH_W) '$(srcdir)/Config.cpp'; fi` numptyphysics-Http.o: Http.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Http.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Http.Tpo" -c -o numptyphysics-Http.o `test -f 'Http.cpp' || echo '$(srcdir)/'`Http.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Http.Tpo" "$(DEPDIR)/numptyphysics-Http.Po"; else rm -f "$(DEPDIR)/numptyphysics-Http.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Http.cpp' object='numptyphysics-Http.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Http.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Http.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Http.o `test -f 'Http.cpp' || echo '$(srcdir)/'`Http.cpp numptyphysics-Http.obj: Http.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Http.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Http.Tpo" -c -o numptyphysics-Http.obj `if test -f 'Http.cpp'; then $(CYGPATH_W) 'Http.cpp'; else $(CYGPATH_W) '$(srcdir)/Http.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Http.Tpo" "$(DEPDIR)/numptyphysics-Http.Po"; else rm -f "$(DEPDIR)/numptyphysics-Http.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Http.cpp' object='numptyphysics-Http.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Http.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Http.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Http.obj `if test -f 'Http.cpp'; then $(CYGPATH_W) 'Http.cpp'; else $(CYGPATH_W) '$(srcdir)/Http.cpp'; fi` numptyphysics-Os.o: Os.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Os.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Os.Tpo" -c -o numptyphysics-Os.o `test -f 'Os.cpp' || echo '$(srcdir)/'`Os.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Os.Tpo" "$(DEPDIR)/numptyphysics-Os.Po"; else rm -f "$(DEPDIR)/numptyphysics-Os.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Os.cpp' object='numptyphysics-Os.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Os.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Os.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Os.o `test -f 'Os.cpp' || echo '$(srcdir)/'`Os.cpp numptyphysics-Os.obj: Os.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Os.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Os.Tpo" -c -o numptyphysics-Os.obj `if test -f 'Os.cpp'; then $(CYGPATH_W) 'Os.cpp'; else $(CYGPATH_W) '$(srcdir)/Os.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Os.Tpo" "$(DEPDIR)/numptyphysics-Os.Po"; else rm -f "$(DEPDIR)/numptyphysics-Os.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Os.cpp' object='numptyphysics-Os.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Os.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Os.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Os.obj `if test -f 'Os.cpp'; then $(CYGPATH_W) 'Os.cpp'; else $(CYGPATH_W) '$(srcdir)/Os.cpp'; fi` numptyphysics-Ui.o: Ui.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Ui.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Ui.Tpo" -c -o numptyphysics-Ui.o `test -f 'Ui.cpp' || echo '$(srcdir)/'`Ui.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Ui.Tpo" "$(DEPDIR)/numptyphysics-Ui.Po"; else rm -f "$(DEPDIR)/numptyphysics-Ui.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Ui.cpp' object='numptyphysics-Ui.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Ui.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Ui.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Ui.o `test -f 'Ui.cpp' || echo '$(srcdir)/'`Ui.cpp numptyphysics-Ui.obj: Ui.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Ui.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Ui.Tpo" -c -o numptyphysics-Ui.obj `if test -f 'Ui.cpp'; then $(CYGPATH_W) 'Ui.cpp'; else $(CYGPATH_W) '$(srcdir)/Ui.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Ui.Tpo" "$(DEPDIR)/numptyphysics-Ui.Po"; else rm -f "$(DEPDIR)/numptyphysics-Ui.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Ui.cpp' object='numptyphysics-Ui.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Ui.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Ui.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Ui.obj `if test -f 'Ui.cpp'; then $(CYGPATH_W) 'Ui.cpp'; else $(CYGPATH_W) '$(srcdir)/Ui.cpp'; fi` numptyphysics-Dialogs.o: Dialogs.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Dialogs.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Dialogs.Tpo" -c -o numptyphysics-Dialogs.o `test -f 'Dialogs.cpp' || echo '$(srcdir)/'`Dialogs.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Dialogs.Tpo" "$(DEPDIR)/numptyphysics-Dialogs.Po"; else rm -f "$(DEPDIR)/numptyphysics-Dialogs.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Dialogs.cpp' object='numptyphysics-Dialogs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Dialogs.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Dialogs.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Dialogs.o `test -f 'Dialogs.cpp' || echo '$(srcdir)/'`Dialogs.cpp numptyphysics-Dialogs.obj: Dialogs.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Dialogs.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Dialogs.Tpo" -c -o numptyphysics-Dialogs.obj `if test -f 'Dialogs.cpp'; then $(CYGPATH_W) 'Dialogs.cpp'; else $(CYGPATH_W) '$(srcdir)/Dialogs.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Dialogs.Tpo" "$(DEPDIR)/numptyphysics-Dialogs.Po"; else rm -f "$(DEPDIR)/numptyphysics-Dialogs.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Dialogs.cpp' object='numptyphysics-Dialogs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Dialogs.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Dialogs.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Dialogs.obj `if test -f 'Dialogs.cpp'; then $(CYGPATH_W) 'Dialogs.cpp'; else $(CYGPATH_W) '$(srcdir)/Dialogs.cpp'; fi` numptyphysics-Event.o: Event.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Event.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Event.Tpo" -c -o numptyphysics-Event.o `test -f 'Event.cpp' || echo '$(srcdir)/'`Event.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Event.Tpo" "$(DEPDIR)/numptyphysics-Event.Po"; else rm -f "$(DEPDIR)/numptyphysics-Event.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Event.cpp' object='numptyphysics-Event.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Event.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Event.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Event.o `test -f 'Event.cpp' || echo '$(srcdir)/'`Event.cpp numptyphysics-Event.obj: Event.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Event.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Event.Tpo" -c -o numptyphysics-Event.obj `if test -f 'Event.cpp'; then $(CYGPATH_W) 'Event.cpp'; else $(CYGPATH_W) '$(srcdir)/Event.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Event.Tpo" "$(DEPDIR)/numptyphysics-Event.Po"; else rm -f "$(DEPDIR)/numptyphysics-Event.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Event.cpp' object='numptyphysics-Event.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Event.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Event.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Event.obj `if test -f 'Event.cpp'; then $(CYGPATH_W) 'Event.cpp'; else $(CYGPATH_W) '$(srcdir)/Event.cpp'; fi` numptyphysics-Worker.o: Worker.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Worker.o -MD -MP -MF "$(DEPDIR)/numptyphysics-Worker.Tpo" -c -o numptyphysics-Worker.o `test -f 'Worker.cpp' || echo '$(srcdir)/'`Worker.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Worker.Tpo" "$(DEPDIR)/numptyphysics-Worker.Po"; else rm -f "$(DEPDIR)/numptyphysics-Worker.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Worker.cpp' object='numptyphysics-Worker.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Worker.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Worker.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Worker.o `test -f 'Worker.cpp' || echo '$(srcdir)/'`Worker.cpp numptyphysics-Worker.obj: Worker.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-Worker.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-Worker.Tpo" -c -o numptyphysics-Worker.obj `if test -f 'Worker.cpp'; then $(CYGPATH_W) 'Worker.cpp'; else $(CYGPATH_W) '$(srcdir)/Worker.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-Worker.Tpo" "$(DEPDIR)/numptyphysics-Worker.Po"; else rm -f "$(DEPDIR)/numptyphysics-Worker.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Worker.cpp' object='numptyphysics-Worker.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-Worker.Po' tmpdepfile='$(DEPDIR)/numptyphysics-Worker.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-Worker.obj `if test -f 'Worker.cpp'; then $(CYGPATH_W) 'Worker.cpp'; else $(CYGPATH_W) '$(srcdir)/Worker.cpp'; fi` numptyphysics-happyhttp.o: happyhttp.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-happyhttp.o -MD -MP -MF "$(DEPDIR)/numptyphysics-happyhttp.Tpo" -c -o numptyphysics-happyhttp.o `test -f 'happyhttp.cpp' || echo '$(srcdir)/'`happyhttp.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-happyhttp.Tpo" "$(DEPDIR)/numptyphysics-happyhttp.Po"; else rm -f "$(DEPDIR)/numptyphysics-happyhttp.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='happyhttp.cpp' object='numptyphysics-happyhttp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-happyhttp.Po' tmpdepfile='$(DEPDIR)/numptyphysics-happyhttp.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-happyhttp.o `test -f 'happyhttp.cpp' || echo '$(srcdir)/'`happyhttp.cpp numptyphysics-happyhttp.obj: happyhttp.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-happyhttp.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-happyhttp.Tpo" -c -o numptyphysics-happyhttp.obj `if test -f 'happyhttp.cpp'; then $(CYGPATH_W) 'happyhttp.cpp'; else $(CYGPATH_W) '$(srcdir)/happyhttp.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-happyhttp.Tpo" "$(DEPDIR)/numptyphysics-happyhttp.Po"; else rm -f "$(DEPDIR)/numptyphysics-happyhttp.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='happyhttp.cpp' object='numptyphysics-happyhttp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-happyhttp.Po' tmpdepfile='$(DEPDIR)/numptyphysics-happyhttp.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-happyhttp.obj `if test -f 'happyhttp.cpp'; then $(CYGPATH_W) 'happyhttp.cpp'; else $(CYGPATH_W) '$(srcdir)/happyhttp.cpp'; fi` numptyphysics-zoomer.o: zoomer.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-zoomer.o -MD -MP -MF "$(DEPDIR)/numptyphysics-zoomer.Tpo" -c -o numptyphysics-zoomer.o `test -f 'zoomer.cpp' || echo '$(srcdir)/'`zoomer.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-zoomer.Tpo" "$(DEPDIR)/numptyphysics-zoomer.Po"; else rm -f "$(DEPDIR)/numptyphysics-zoomer.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='zoomer.cpp' object='numptyphysics-zoomer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-zoomer.Po' tmpdepfile='$(DEPDIR)/numptyphysics-zoomer.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-zoomer.o `test -f 'zoomer.cpp' || echo '$(srcdir)/'`zoomer.cpp numptyphysics-zoomer.obj: zoomer.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-zoomer.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-zoomer.Tpo" -c -o numptyphysics-zoomer.obj `if test -f 'zoomer.cpp'; then $(CYGPATH_W) 'zoomer.cpp'; else $(CYGPATH_W) '$(srcdir)/zoomer.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-zoomer.Tpo" "$(DEPDIR)/numptyphysics-zoomer.Po"; else rm -f "$(DEPDIR)/numptyphysics-zoomer.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='zoomer.cpp' object='numptyphysics-zoomer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-zoomer.Po' tmpdepfile='$(DEPDIR)/numptyphysics-zoomer.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-zoomer.obj `if test -f 'zoomer.cpp'; then $(CYGPATH_W) 'zoomer.cpp'; else $(CYGPATH_W) '$(srcdir)/zoomer.cpp'; fi` numptyphysics-OsHildon.o: OsHildon.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-OsHildon.o -MD -MP -MF "$(DEPDIR)/numptyphysics-OsHildon.Tpo" -c -o numptyphysics-OsHildon.o `test -f 'OsHildon.cpp' || echo '$(srcdir)/'`OsHildon.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-OsHildon.Tpo" "$(DEPDIR)/numptyphysics-OsHildon.Po"; else rm -f "$(DEPDIR)/numptyphysics-OsHildon.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='OsHildon.cpp' object='numptyphysics-OsHildon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-OsHildon.Po' tmpdepfile='$(DEPDIR)/numptyphysics-OsHildon.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-OsHildon.o `test -f 'OsHildon.cpp' || echo '$(srcdir)/'`OsHildon.cpp numptyphysics-OsHildon.obj: OsHildon.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-OsHildon.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-OsHildon.Tpo" -c -o numptyphysics-OsHildon.obj `if test -f 'OsHildon.cpp'; then $(CYGPATH_W) 'OsHildon.cpp'; else $(CYGPATH_W) '$(srcdir)/OsHildon.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-OsHildon.Tpo" "$(DEPDIR)/numptyphysics-OsHildon.Po"; else rm -f "$(DEPDIR)/numptyphysics-OsHildon.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='OsHildon.cpp' object='numptyphysics-OsHildon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-OsHildon.Po' tmpdepfile='$(DEPDIR)/numptyphysics-OsHildon.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-OsHildon.obj `if test -f 'OsHildon.cpp'; then $(CYGPATH_W) 'OsHildon.cpp'; else $(CYGPATH_W) '$(srcdir)/OsHildon.cpp'; fi` numptyphysics-OsFreeDesktop.o: OsFreeDesktop.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-OsFreeDesktop.o -MD -MP -MF "$(DEPDIR)/numptyphysics-OsFreeDesktop.Tpo" -c -o numptyphysics-OsFreeDesktop.o `test -f 'OsFreeDesktop.cpp' || echo '$(srcdir)/'`OsFreeDesktop.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-OsFreeDesktop.Tpo" "$(DEPDIR)/numptyphysics-OsFreeDesktop.Po"; else rm -f "$(DEPDIR)/numptyphysics-OsFreeDesktop.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='OsFreeDesktop.cpp' object='numptyphysics-OsFreeDesktop.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-OsFreeDesktop.Po' tmpdepfile='$(DEPDIR)/numptyphysics-OsFreeDesktop.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-OsFreeDesktop.o `test -f 'OsFreeDesktop.cpp' || echo '$(srcdir)/'`OsFreeDesktop.cpp numptyphysics-OsFreeDesktop.obj: OsFreeDesktop.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-OsFreeDesktop.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-OsFreeDesktop.Tpo" -c -o numptyphysics-OsFreeDesktop.obj `if test -f 'OsFreeDesktop.cpp'; then $(CYGPATH_W) 'OsFreeDesktop.cpp'; else $(CYGPATH_W) '$(srcdir)/OsFreeDesktop.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-OsFreeDesktop.Tpo" "$(DEPDIR)/numptyphysics-OsFreeDesktop.Po"; else rm -f "$(DEPDIR)/numptyphysics-OsFreeDesktop.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='OsFreeDesktop.cpp' object='numptyphysics-OsFreeDesktop.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-OsFreeDesktop.Po' tmpdepfile='$(DEPDIR)/numptyphysics-OsFreeDesktop.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-OsFreeDesktop.obj `if test -f 'OsFreeDesktop.cpp'; then $(CYGPATH_W) 'OsFreeDesktop.cpp'; else $(CYGPATH_W) '$(srcdir)/OsFreeDesktop.cpp'; fi` numptyphysics-OsWin32.o: OsWin32.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-OsWin32.o -MD -MP -MF "$(DEPDIR)/numptyphysics-OsWin32.Tpo" -c -o numptyphysics-OsWin32.o `test -f 'OsWin32.cpp' || echo '$(srcdir)/'`OsWin32.cpp; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-OsWin32.Tpo" "$(DEPDIR)/numptyphysics-OsWin32.Po"; else rm -f "$(DEPDIR)/numptyphysics-OsWin32.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='OsWin32.cpp' object='numptyphysics-OsWin32.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-OsWin32.Po' tmpdepfile='$(DEPDIR)/numptyphysics-OsWin32.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-OsWin32.o `test -f 'OsWin32.cpp' || echo '$(srcdir)/'`OsWin32.cpp numptyphysics-OsWin32.obj: OsWin32.cpp @am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT numptyphysics-OsWin32.obj -MD -MP -MF "$(DEPDIR)/numptyphysics-OsWin32.Tpo" -c -o numptyphysics-OsWin32.obj `if test -f 'OsWin32.cpp'; then $(CYGPATH_W) 'OsWin32.cpp'; else $(CYGPATH_W) '$(srcdir)/OsWin32.cpp'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/numptyphysics-OsWin32.Tpo" "$(DEPDIR)/numptyphysics-OsWin32.Po"; else rm -f "$(DEPDIR)/numptyphysics-OsWin32.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='OsWin32.cpp' object='numptyphysics-OsWin32.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/numptyphysics-OsWin32.Po' tmpdepfile='$(DEPDIR)/numptyphysics-OsWin32.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(numptyphysics_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o numptyphysics-OsWin32.obj `if test -f 'OsWin32.cpp'; then $(CYGPATH_W) 'OsWin32.cpp'; else $(CYGPATH_W) '$(srcdir)/OsWin32.cpp'; fi` uninstall-info-am: install-desktopentryDATA: $(desktopentry_DATA) @$(NORMAL_INSTALL) test -z "$(desktopentrydir)" || $(mkdir_p) "$(DESTDIR)$(desktopentrydir)" @list='$(desktopentry_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(desktopentryDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(desktopentrydir)/$$f'"; \ $(desktopentryDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(desktopentrydir)/$$f"; \ done uninstall-desktopentryDATA: @$(NORMAL_UNINSTALL) @list='$(desktopentry_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f '$(DESTDIR)$(desktopentrydir)/$$f'"; \ rm -f "$(DESTDIR)$(desktopentrydir)/$$f"; \ done install-icon_26x26DATA: $(icon_26x26_DATA) @$(NORMAL_INSTALL) test -z "$(icon_26x26dir)" || $(mkdir_p) "$(DESTDIR)$(icon_26x26dir)" @list='$(icon_26x26_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(icon_26x26DATA_INSTALL) '$$d$$p' '$(DESTDIR)$(icon_26x26dir)/$$f'"; \ $(icon_26x26DATA_INSTALL) "$$d$$p" "$(DESTDIR)$(icon_26x26dir)/$$f"; \ done uninstall-icon_26x26DATA: @$(NORMAL_UNINSTALL) @list='$(icon_26x26_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f '$(DESTDIR)$(icon_26x26dir)/$$f'"; \ rm -f "$(DESTDIR)$(icon_26x26dir)/$$f"; \ done install-icon_64x64DATA: $(icon_64x64_DATA) @$(NORMAL_INSTALL) test -z "$(icon_64x64dir)" || $(mkdir_p) "$(DESTDIR)$(icon_64x64dir)" @list='$(icon_64x64_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(icon_64x64DATA_INSTALL) '$$d$$p' '$(DESTDIR)$(icon_64x64dir)/$$f'"; \ $(icon_64x64DATA_INSTALL) "$$d$$p" "$(DESTDIR)$(icon_64x64dir)/$$f"; \ done uninstall-icon_64x64DATA: @$(NORMAL_UNINSTALL) @list='$(icon_64x64_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f '$(DESTDIR)$(icon_64x64dir)/$$f'"; \ rm -f "$(DESTDIR)$(icon_64x64dir)/$$f"; \ done install-icon_scalableDATA: $(icon_scalable_DATA) @$(NORMAL_INSTALL) test -z "$(icon_scalabledir)" || $(mkdir_p) "$(DESTDIR)$(icon_scalabledir)" @list='$(icon_scalable_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(icon_scalableDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(icon_scalabledir)/$$f'"; \ $(icon_scalableDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(icon_scalabledir)/$$f"; \ done uninstall-icon_scalableDATA: @$(NORMAL_UNINSTALL) @list='$(icon_scalable_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f '$(DESTDIR)$(icon_scalabledir)/$$f'"; \ rm -f "$(DESTDIR)$(icon_scalabledir)/$$f"; \ done install-numptyphysicsDATA: $(numptyphysics_DATA) @$(NORMAL_INSTALL) test -z "$(numptyphysicsdir)" || $(mkdir_p) "$(DESTDIR)$(numptyphysicsdir)" @list='$(numptyphysics_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(numptyphysicsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(numptyphysicsdir)/$$f'"; \ $(numptyphysicsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(numptyphysicsdir)/$$f"; \ done uninstall-numptyphysicsDATA: @$(NORMAL_UNINSTALL) @list='$(numptyphysics_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f '$(DESTDIR)$(numptyphysicsdir)/$$f'"; \ rm -f "$(DESTDIR)$(numptyphysicsdir)/$$f"; \ done install-serviceentryDATA: $(serviceentry_DATA) @$(NORMAL_INSTALL) test -z "$(serviceentrydir)" || $(mkdir_p) "$(DESTDIR)$(serviceentrydir)" @list='$(serviceentry_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(serviceentryDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(serviceentrydir)/$$f'"; \ $(serviceentryDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(serviceentrydir)/$$f"; \ done uninstall-serviceentryDATA: @$(NORMAL_UNINSTALL) @list='$(serviceentry_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f '$(DESTDIR)$(serviceentrydir)/$$f'"; \ rm -f "$(DESTDIR)$(serviceentrydir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir $(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir $(AMTAR) chof - $(distdir) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(AMTAR) xf - ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(AMTAR) xf - ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(desktopentrydir)" "$(DESTDIR)$(icon_26x26dir)" "$(DESTDIR)$(icon_64x64dir)" "$(DESTDIR)$(icon_scalabledir)" "$(DESTDIR)$(numptyphysicsdir)" "$(DESTDIR)$(serviceentrydir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-desktopentryDATA install-icon_26x26DATA \ install-icon_64x64DATA install-icon_scalableDATA \ install-numptyphysicsDATA install-serviceentryDATA install-exec-am: install-binPROGRAMS install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-desktopentryDATA \ uninstall-icon_26x26DATA uninstall-icon_64x64DATA \ uninstall-icon_scalableDATA uninstall-info-am \ uninstall-numptyphysicsDATA uninstall-serviceentryDATA .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ clean-binPROGRAMS clean-generic clean-noinstLIBRARIES ctags \ dist dist-all dist-bzip2 dist-gzip dist-shar dist-tarZ \ dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-desktopentryDATA install-exec \ install-exec-am install-icon_26x26DATA install-icon_64x64DATA \ install-icon_scalableDATA install-info install-info-am \ install-man install-numptyphysicsDATA install-serviceentryDATA \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-desktopentryDATA uninstall-icon_26x26DATA \ uninstall-icon_64x64DATA uninstall-icon_scalableDATA \ uninstall-info-am uninstall-numptyphysicsDATA \ uninstall-serviceentryDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: numptyphysics-0.2+svn157/Font.cpp0000644000175000017500000000510212264274577016007 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "Font.h" #include "Canvas.h" #include "Config.h" #include #define FONT(fONTpTR) ((TTF_Font*)((fONTpTR)->m_state)) struct FontCanvas : public Canvas { FontCanvas( SDL_Surface* s ) : Canvas( s ) {} }; Font::Font( const std::string& file, int ptsize ) { TTF_Init(); std::string fname = Config::findFile(file); m_state = TTF_OpenFont( fname.c_str(), ptsize ); m_height = metrics("M").y; } Vec2 Font::metrics( const std::string& text ) const { Vec2 m; TTF_SizeText( FONT(this), text.c_str(), &m.x, &m.y ); return m; } void Font::drawLeft( Canvas* canvas, Vec2 pt, const std::string& text, int colour ) const { SDL_Color fg = { colour>>16, colour>>8, colour }; FontCanvas temp( TTF_RenderText_Blended( FONT(this), text.c_str(), fg ) ); canvas->drawImage( &temp, pt.x, pt.y ); } void Font::drawRight( Canvas* canvas, Vec2 pt, const std::string& text, int colour ) const { drawLeft( canvas, pt - Vec2(metrics(text).x,0), text, colour ); } void Font::drawCenter( Canvas* canvas, Vec2 pt, const std::string& text, int colour ) const { drawLeft( canvas, pt - metrics(text)/2, text, colour ); } void Font::drawWrap( Canvas* canvas, Rect area, const std::string& text, int colour ) const { Vec2 pos = area.tl; size_t i = 0, e=0; while ( i < text.length() ) { e = text.find_first_of(" \n\r\t",i); if ( i == e ) { i++; } else { std::string word = text.substr(i,i+e); Vec2 wm = metrics( word ); if ( pos.x + wm.x > area.br.x ) { pos.x = area.tl.x; pos.y += wm.y; } drawLeft( canvas, pos, word, colour ); i = e + 1; } } drawLeft( canvas, pos, text.substr(i), colour ); } const Font* Font::titleFont() { static Font* f = new Font("femkeklaver.ttf",48); return f; } const Font* Font::headingFont() { static Font* f = new Font("femkeklaver.ttf",32); return f; } const Font* Font::blurbFont() { static Font* f = new Font("femkeklaver.ttf",24); return f; } numptyphysics-0.2+svn157/depcomp0000755000175000017500000003541012264274560015747 0ustar warp10warp10#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2004-04-25.13 # Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit 0 ;; -v | --v*) echo "depcomp $scriptversion" exit 0 ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. if test -z "$depfile"; then base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` dir=`echo "$object" | sed 's,/.*$,/,'` if test "$dir" = "$object"; then dir= fi # FIXME: should be _deps on DOS. depfile="$dir.deps/$base" fi tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # Dependencies are output in .lo.d with libtool 1.4. # They are output in .o.d with libtool 1.5. tmpdepfile1="$dir.libs/$base.lo.d" tmpdepfile2="$dir.libs/$base.o.d" tmpdepfile3="$dir.libs/$base.d" "$@" -Wc,-MD else tmpdepfile1="$dir$base.o.d" tmpdepfile2="$dir$base.d" tmpdepfile3="$dir$base.d" "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" elif test -f "$tmpdepfile2"; then tmpdepfile="$tmpdepfile2" else tmpdepfile="$tmpdepfile3" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: numptyphysics-0.2+svn157/Path.cpp0000644000175000017500000000716312264274560015776 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include #include "Path.h" static float32 calcDistanceToLine( const Vec2& pt, const Vec2& l1, const Vec2& l2, bool* withinLine=NULL ) { b2Vec2 l = l2 - l1; b2Vec2 w = pt - l1; float32 mag = l.Normalize(); float32 dist = b2Cross( w, l ); if ( withinLine ) { float32 dot = b2Dot( l, w ); *withinLine = ( dot >= 0.0f && dot <= mag ); } return b2Abs( dist ); } static float32 calcDistance( const Vec2& l1, const Vec2& l2 ) { return b2Vec2(l1-l2).Length(); } float32 Segment::distanceTo( const Vec2& p ) { bool withinLine; float32 d = calcDistanceToLine( p, m_p1, m_p2, &withinLine ); if ( !(m_p1 == m_p2) && withinLine ) { return d; } else { return b2Min( calcDistance( p, m_p2 ), calcDistance( p, m_p1 ) ); } } Path::Path() : Array() {} Path::Path( int n, Vec2* p ) : Array(n, p) {} Path::Path( const char *s ) { float32 x,y; while ( sscanf( s, "%f,%f", &x, &y )==2) { append( Vec2((int)x,(int)y) ); while ( *s && *s!=' ' && *s!='\t' ) s++; while ( *s==' ' || *s=='\t' ) s++; } } void Path::makeRelative() { for (int i=size()-1; i>=0; i--) at(i)-=at(0); } Path& Path::translate(const Vec2& xlate) { for (int i=0;i0; i-- ) { if ( at(i) == at(i-1) ) { //printf("alert: duplicate pt %d == %d!\n",i,i-1); erase( i ); } } } void Path::simplifySub( int first, int last, float32 threshold, bool* keepflags ) { float32 furthestDist = threshold; int furthestIndex = 0; if ( last - first > 1 ) { Segment s( at(first), at(last) ); for ( int i=first+1; i furthestDist ) { furthestDist = d; furthestIndex = i; } } if ( furthestIndex != 0 ) { keepflags[furthestIndex] = true; simplifySub( first, furthestIndex, threshold, keepflags ); simplifySub( furthestIndex, last, threshold, keepflags ); } } } Rect Path::bbox() const { Rect r( at(0), at(0) ); for ( int i=1; i ========================================= You need MinGW32 and msys to compile this. You will also need gcc-g++ from the mingw file release webpage and have your "make" binary linked to "mingw32-make", because the default "make" will not work and give you errors. You also need to install SDL and SDL_image development headers, and copy the DLL files from the Win32 binary distributions for SDL and SDL_image to this folder, so the "create-win32-dist.sh" script can find them and copy them into the correct location. Saved levels are placed in the "data" folder, and that's also where you should put downloaded levels. Upstream: http://numptyphysics.garage.maemo.org Win32 port: http://thpinfo.com/2008/numptyphysics/ numptyphysics-0.2+svn157/ZipFile.h0000644000175000017500000000203512264274577016112 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef ZIPFILE_H #define ZIPFILE_H #include struct zip_eoc; struct zip_cd; struct zip_lfh; class ZipFile { public: ZipFile(const std::string& fn); ~ZipFile(); int numEntries() { return m_entries; } std::string entryName( int n ); unsigned char* extract( int n, int *l ); private: int m_fd; int m_dataLen; unsigned char* m_data; zip_eoc* m_eoc; zip_cd* m_firstcd; int m_entries; unsigned char*m_temp; }; #endif //ZIPFILE_H numptyphysics-0.2+svn157/zoomer.cpp0000644000175000017500000002103212264274577016414 0ustar warp10warp10 #include #include #include typedef struct tColorRGBA { Uint8 r; Uint8 g; Uint8 b; Uint8 a; } tColorRGBA; #define ZOOM_VALUE_LIMIT 0.0001 SDL_Surface *zoomSurface(SDL_Surface * src, double zoomx, double zoomy) { SDL_Surface *rz_src; SDL_Surface *rz_dst; int dstwidth, dstheight; int is32bit; int i, src_converted; int flipx, flipy; /* * Sanity check */ if (src == NULL) return (NULL); /* * Determine if source surface is 32bit or 8bit */ is32bit = (src->format->BitsPerPixel == 32); if ((is32bit) || (src->format->BitsPerPixel == 8)) { /* * Use source surface 'as is' */ rz_src = src; src_converted = 0; } else { /* * New source surface is 32bit with a defined RGBA ordering */ rz_src = SDL_CreateRGBSurface(SDL_SWSURFACE, src->w, src->h, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000); SDL_BlitSurface(src, NULL, rz_src, NULL); src_converted = 1; is32bit = 1; } flipx = (zoomx<0); if (flipx) zoomx = -zoomx; flipy = (zoomy<0); if (flipy) zoomy = -zoomy; /* Get size if target */ /* * Sanity check zoom factors */ if (zoomx < ZOOM_VALUE_LIMIT) { zoomx = ZOOM_VALUE_LIMIT; } if (zoomy < ZOOM_VALUE_LIMIT) { zoomy = ZOOM_VALUE_LIMIT; } /* * Calculate target size */ dstwidth = (int) ((double) rz_src->w * zoomx); dstheight = (int) ((double) rz_src->h * zoomy); if (dstwidth < 1) { dstwidth = 1; } if (dstheight < 1) { dstheight = 1; } /* * Alloc space to completely contain the zoomed surface */ rz_dst = NULL; if (is32bit) { /* * Target surface is 32bit with source RGBA/ABGR ordering */ rz_dst = SDL_CreateRGBSurface(SDL_SWSURFACE, dstwidth, dstheight, 32, rz_src->format->Rmask, rz_src->format->Gmask, rz_src->format->Bmask, rz_src->format->Amask); } else { /* * Target surface is 8bit */ rz_dst = SDL_CreateRGBSurface(SDL_SWSURFACE, dstwidth, dstheight, 8, 0, 0, 0, 0); } /* * Lock source surface */ SDL_LockSurface(rz_src); /* * Check which kind of surface we have */ if (is32bit) { /* * Call the 32bit transformation routine to do the zooming (using alpha) */ // zoomSurfaceRGBA(rz_src, rz_dst, flipx, flipy); int x, y, sx, sy, *sax, *say, *csax, *csay, csx, csy, ex, ey, t1, t2, sstep; tColorRGBA *c00, *c01, *c10, *c11; tColorRGBA *sp, *csp, *dp; int dgap; /* * For interpolation: assume source dimension is one pixel */ /* * smaller to avoid overflow on right and bottom edge. */ sx = (int) (65536.0 * (float) (src->w - 1) / (float) rz_dst->w); sy = (int) (65536.0 * (float) (src->h - 1) / (float) rz_dst->h); /* * Allocate memory for row increments */ if ((sax = (int *) malloc((rz_dst->w + 1) * sizeof(Uint32))) == NULL) { return NULL; } if ((say = (int *) malloc((rz_dst->h + 1) * sizeof(Uint32))) == NULL) { free(sax); return NULL; } /* * Precalculate row increments */ sp = csp = (tColorRGBA *) rz_src->pixels; dp = (tColorRGBA *) rz_dst->pixels; if (flipx) csp += (rz_src->w-1); if (flipy) csp = (tColorRGBA*)( (Uint8*)csp + rz_src->pitch*(src->h-1) ); csx = 0; csax = sax; for (x = 0; x <= rz_dst->w; x++) { *csax = csx; csax++; csx &= 0xffff; csx += sx; } csy = 0; csay = say; for (y = 0; y <= rz_dst->h; y++) { *csay = csy; csay++; csy &= 0xffff; csy += sy; } dgap = rz_dst->pitch - rz_dst->w * 4; /* * Interpolating Zoom */ /* * Scan destination */ csay = say; for (y = 0; y < rz_dst->h; y++) { /* * Setup color source pointers */ c00 = csp; c01 = csp; c01++; c10 = (tColorRGBA *) ((Uint8 *) csp + rz_src->pitch); c11 = c10; c11++; csax = sax; for (x = 0; x < rz_dst->w; x++) { /* * Interpolate colors */ ex = (*csax & 0xffff); ey = (*csay & 0xffff); t1 = ((((c01->r - c00->r) * ex) >> 16) + c00->r) & 0xff; t2 = ((((c11->r - c10->r) * ex) >> 16) + c10->r) & 0xff; dp->r = (((t2 - t1) * ey) >> 16) + t1; t1 = ((((c01->g - c00->g) * ex) >> 16) + c00->g) & 0xff; t2 = ((((c11->g - c10->g) * ex) >> 16) + c10->g) & 0xff; dp->g = (((t2 - t1) * ey) >> 16) + t1; t1 = ((((c01->b - c00->b) * ex) >> 16) + c00->b) & 0xff; t2 = ((((c11->b - c10->b) * ex) >> 16) + c10->b) & 0xff; dp->b = (((t2 - t1) * ey) >> 16) + t1; t1 = ((((c01->a - c00->a) * ex) >> 16) + c00->a) & 0xff; t2 = ((((c11->a - c10->a) * ex) >> 16) + c10->a) & 0xff; dp->a = (((t2 - t1) * ey) >> 16) + t1; /* * Advance source pointers */ csax++; sstep = (*csax >> 16); c00 += sstep; c01 += sstep; c10 += sstep; c11 += sstep; /* * Advance destination pointer */ dp++; } /* * Advance source pointer */ csay++; csp = (tColorRGBA *) ((Uint8 *) csp + (*csay >> 16) * rz_src->pitch); /* * Advance destination pointers */ dp = (tColorRGBA *) ((Uint8 *) dp + dgap); } /* * Remove temp arrays */ free(sax); free(say); /* * Turn on source-alpha support */ SDL_SetAlpha(rz_dst, SDL_SRCALPHA, 255); } else { /* * Copy palette and colorkey info */ for (i = 0; i < rz_src->format->palette->ncolors; i++) { rz_dst->format->palette->colors[i] = rz_src->format->palette->colors[i]; } rz_dst->format->palette->ncolors = rz_src->format->palette->ncolors; /* * Call the 8bit transformation routine to do the zooming */ Uint32 x, y, sx, sy, *sax, *say, *csax, *csay, csx, csy; Uint8 *sp, *dp, *csp; int dgap; /* * Variable setup */ sx = (Uint32) (65536.0 * (float) rz_src->w / (float) rz_dst->w); sy = (Uint32) (65536.0 * (float) rz_src->h / (float) rz_dst->h); /* * Allocate memory for row increments */ if ((sax = (Uint32 *) malloc(rz_dst->w * sizeof(Uint32))) == NULL) { return NULL; } if ((say = (Uint32 *) malloc(rz_dst->h * sizeof(Uint32))) == NULL) { if (sax != NULL) { free(sax); } return NULL; } /* * Precalculate row increments */ csx = 0; csax = sax; for (x = 0; x < rz_dst->w; x++) { csx += sx; *csax = (csx >> 16); csx &= 0xffff; csax++; } csy = 0; csay = say; for (y = 0; y < rz_dst->h; y++) { csy += sy; *csay = (csy >> 16); csy &= 0xffff; csay++; } csx = 0; csax = sax; for (x = 0; x < rz_dst->w; x++) { csx += (*csax); csax++; } csy = 0; csay = say; for (y = 0; y < rz_dst->h; y++) { csy += (*csay); csay++; } /* * Pointer setup */ sp = csp = (Uint8 *) rz_src->pixels; dp = (Uint8 *) rz_dst->pixels; dgap = rz_dst->pitch - rz_dst->w; /* * Draw */ csay = say; for (y = 0; y < rz_dst->h; y++) { csax = sax; sp = csp; for (x = 0; x < rz_dst->w; x++) { /* * Draw */ *dp = *sp; /* * Advance source pointers */ sp += (*csax); csax++; /* * Advance destination pointer */ dp++; } /* * Advance source pointer (for row) */ csp += ((*csay) * src->pitch); csay++; /* * Advance destination pointers */ dp += dgap; } /* * Remove temp arrays */ free(sax); free(say); SDL_SetColorKey(rz_dst, SDL_SRCCOLORKEY | SDL_RLEACCEL, rz_src->format->colorkey); } /* * Unlock source surface */ SDL_UnlockSurface(rz_src); /* * Cleanup temp surface */ if (src_converted) { SDL_FreeSurface(rz_src); } /* * Return destination surface */ return (rz_dst); } numptyphysics-0.2+svn157/Font.h0000644000175000017500000000263212264274560015451 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef FONT_H #define FONT_H #include "Common.h" #include "Path.h" #include "Array.h" #include class Canvas; class Font { public: Font( const std::string& file, int ptsize=10 ); int height() const { return m_height; } Vec2 metrics( const std::string& text ) const; void drawLeft( Canvas* canvas, Vec2 pt, const std::string& text, int colour ) const; void drawRight( Canvas* canvas, Vec2 pt, const std::string& text, int colour ) const; void drawCenter( Canvas* canvas, Vec2 pt, const std::string& text, int colour ) const; void drawWrap( Canvas* canvas, Rect area, const std::string& text, int colour ) const; static const Font* titleFont(); static const Font* headingFont(); static const Font* blurbFont(); private: typedef void* State; State m_state; int m_height; }; #endif //FONT_H numptyphysics-0.2+svn157/Scene.cpp0000644000175000017500000005573612264274616016152 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "Common.h" #include "Array.h" #include "Config.h" #include "Scene.h" #include "Accelerometer.h" #include #include Transform::Transform( float32 scale, float32 rotation, const Vec2& translation ) { set( scale, rotation, translation ); } void Transform::set( float32 scale, float32 rotation, const Vec2& translation ) { if ( scale==0.0f && rotation==0.0f && translation==Vec2(0,0) ) { m_bypass = true; } else { m_rot.Set( rotation ); m_pos = translation; m_rot.col1.x *= scale; m_rot.col1.y *= scale; m_rot.col2.x *= scale; m_rot.col2.y *= scale; m_invrot = m_rot.Invert(); m_bypass = false; } } Transform worldToScreen( 0.5f, M_PI/2, Vec2(240,0) ); void configureScreenTransform( int w, int h ) { SCREEN_WIDTH = w; SCREEN_HEIGHT = h; FULLSCREEN_RECT = Rect(0,0,w-1,h-1); if ( w==WORLD_WIDTH && h==WORLD_HEIGHT ) { //unity worldToScreen.set( 0.0f, 0.0f, Vec2(0,0) ); } else { float rot = 0.0f; Vec2 tr(0,0); if ( h > w ) { //portrait rot = M_PI/2; tr = Vec2( w, 0 ); b2Swap( h, w ); } float scalew = (float)w/(float)WORLD_WIDTH; float scaleh = (float)h/(float)WORLD_HEIGHT; if ( scalew < scaleh ) { worldToScreen.set( scalew, rot, tr ); } else { worldToScreen.set( scaleh, rot, tr ); } } } struct Joint { Joint( Stroke *j1, Stroke* j2, unsigned char e ) : joiner(j1), joinee(j2), end(e) {} Stroke *joiner; Stroke *joinee; unsigned char end; //of joiner }; class Stroke { public: private: struct JointDef : public b2RevoluteJointDef { JointDef( b2Body* b1, b2Body* b2, const b2Vec2& pt ) { Initialize( b1, b2, pt ); maxMotorTorque = 10.0f; motorSpeed = 0.0f; enableMotor = true; } }; struct BoxDef : public b2PolygonDef { void init( const Vec2& p1, const Vec2& p2, int attr ) { b2Vec2 barOrigin = p1; b2Vec2 bar = p2 - p1; bar *= 1.0f/PIXELS_PER_METREf; barOrigin *= 1.0f/PIXELS_PER_METREf;; SetAsBox( bar.Length()/2.0f, 0.1f, 0.5f*bar + barOrigin, vec2Angle( bar )); // SetAsBox( bar.Length()/2.0f+b2_toiSlop, b2_toiSlop*2.0f, // 0.5f*bar + barOrigin, vec2Angle( bar )); friction = 0.3f; if ( attr & ATTRIB_GROUND ) { density = 0.0f; } else if ( attr & ATTRIB_GOAL ) { density = 100.0f; } else if ( attr & ATTRIB_TOKEN ) { density = 3.0f; friction = 0.1f; } else { density = 5.0f; } restitution = 0.2f; } }; public: Stroke( const Path& path ) : m_rawPath(path) { m_colour = brushColours[DEFAULT_BRUSH]; m_attributes = 0; m_origin = m_rawPath.point(0); m_rawPath.translate( -m_origin ); reset(); } Stroke( const std::string& str ) { int col = 0; m_colour = brushColours[DEFAULT_BRUSH]; m_attributes = 0; m_origin = Vec2(400,240); reset(); const char *s = str.c_str(); while ( *s && *s!=':' && *s!='\n' ) { switch ( *s ) { case 't': setAttribute( ATTRIB_TOKEN ); break; case 'g': setAttribute( ATTRIB_GOAL ); break; case 'f': setAttribute( ATTRIB_GROUND ); break; case 's': setAttribute( ATTRIB_SLEEPING ); break; case 'd': setAttribute( ATTRIB_DECOR ); break; default: if ( *s >= '0' && *s <= '9' ) { col = col*10 + *s -'0'; } break; } s++; } if ( col >= 0 && col < NUM_BRUSHES ) { m_colour = brushColours[col]; } if ( *s++ == ':' ) { m_rawPath = Path(s); } if ( m_rawPath.size() < 2 ) { throw "invalid stroke def"; } //fprintf(stderr,"created stroke with %d points\n",m_rawPath.size()); m_origin = m_rawPath.point(0); m_rawPath.translate( -m_origin ); setAttribute( ATTRIB_DUMMY ); } void reset( b2World* world=NULL ) { if (m_body && world) { world->DestroyBody( m_body ); } m_body = NULL; m_xformAngle = 7.0f; m_drawnBbox.tl = m_origin; m_drawnBbox.br = m_origin; m_jointed[0] = m_jointed[1] = false; m_shapePath = m_rawPath; m_hide = 0; m_drawn = false; } std::string asString() { std::stringstream s; s << 'S'; if ( hasAttribute(ATTRIB_TOKEN) ) s<<'t'; if ( hasAttribute(ATTRIB_GOAL) ) s<<'g'; if ( hasAttribute(ATTRIB_GROUND) ) s<<'f'; if ( hasAttribute(ATTRIB_SLEEPING) ) s<<'s'; if ( hasAttribute(ATTRIB_DECOR) ) s<<'d'; for ( int i=0; i 1 ) { b2BodyDef bodyDef; bodyDef.position = m_origin; bodyDef.position *= 1.0f/PIXELS_PER_METREf; bodyDef.userData = this; if ( m_attributes & ATTRIB_SLEEPING ) { bodyDef.isSleeping = true; } m_body = world.CreateBody( &bodyDef ); for ( int i=1; iCreateShape( &boxDef ); } m_body->SetMassFromShapes(); } transform(); } void determineJoints( Stroke* other, Array& joints ) { if ( (m_attributes&ATTRIB_CLASSBITS) != (other->m_attributes&ATTRIB_CLASSBITS) || hasAttribute(ATTRIB_GROUND) || hasAttribute(ATTRIB_UNJOINABLE) || other->hasAttribute(ATTRIB_UNJOINABLE)) { // cannot joint goals or tokens to other things // and no point jointing ground endpts return; } transform(); for ( unsigned char end=0; end<2; end++ ) { if ( !m_jointed[end] ) { const Vec2& p = m_xformedPath.endpt(end); if ( other->distanceTo( p ) <= JOINT_TOLERANCE ) { joints.append( Joint(this,other,end) ); } } } } void join( b2World* world, Stroke* other, unsigned char end ) { if ( !m_jointed[end] ) { b2Vec2 p = m_xformedPath.endpt( end ); p *= 1.0f/PIXELS_PER_METREf; JointDef j( m_body, other->m_body, p ); world->CreateJoint( &j ); m_jointed[end] = true; } } bool maybeCreateJoint( b2World& world, Stroke* other ) { if ( (m_attributes&ATTRIB_CLASSBITS) != (other->m_attributes&ATTRIB_CLASSBITS) ) { return false; // can only joint matching classes } else if ( hasAttribute(ATTRIB_GROUND) ) { return true; // no point jointing grounds } else if ( m_body && other->body() ) { transform(); int n = m_xformedPath.numPoints(); for ( int end=0; end<2; end++ ) { if ( !m_jointed[end] ) { const Vec2& p = m_xformedPath.point( end ? n-1 : 0 ); if ( other->distanceTo( p ) <= JOINT_TOLERANCE ) { //printf("jointed end %d d=%f\n",end,other->distanceTo( p )); b2Vec2 pw = p; pw *= 1.0f/PIXELS_PER_METREf; JointDef j( m_body, other->m_body, pw ); world.CreateJoint( &j ); m_jointed[end] = true; } } } } if ( m_body ) { return m_jointed[0] && m_jointed[1]; } return true; ///nothing to do } void draw( Canvas& canvas, bool drawJoints=false ) { if ( m_hide < HIDE_STEPS ) { int colour = canvas.makeColour(m_colour); bool thick = (canvas.width() > 400); transform(); canvas.drawPath( m_screenPath, colour, thick ); m_drawn = true; if ( drawJoints ) { int jointcolour = canvas.makeColour(0xff0000); for ( int e=0; e<2; e++ ) { if (m_jointed[e]) { const Vec2& pt = m_screenPath.endpt(e); //canvas.drawPixel( pt.x, pt.y, jointcolour ); //canvas.drawRect( pt.x-1, pt.y-1, 3, 3, jointcolour ); canvas.drawRect( pt.x-1, pt.y, 3, 1, jointcolour ); canvas.drawRect( pt.x, pt.y-1, 1, 3, jointcolour ); } } } } m_drawnBbox = m_screenBbox; } void addPoint( const Vec2& pp ) { Vec2 p = pp; p -= m_origin; if ( p == m_rawPath.point( m_rawPath.numPoints()-1 ) ) { } else { m_rawPath.append( p ); m_drawn = false; } } void origin( const Vec2& p ) { // todo if ( m_body ) { b2Vec2 pw = p; pw *= 1.0f/PIXELS_PER_METREf; m_body->SetXForm( pw, m_body->GetAngle() ); } m_origin = p; m_drawn = false; } b2Body* body() { return m_body; } float32 distanceTo( const Vec2& pt ) { float32 best = 100000.0; transform(); for ( int i=1; iSetXForm( b2Vec2(0.0f,SCREEN_HEIGHT*2.0f), 0.0f ); m_body->SetLinearVelocity( b2Vec2(0.0f,0.0f) ); m_body->SetAngularVelocity( 0.0f ); } } } bool hidden() { return m_hide >= HIDE_STEPS; } int numPoints() { return m_rawPath.numPoints(); } const Vec2& endpt( unsigned char end ) { return m_xformedPath.endpt(end); } private: static float32 vec2Angle( b2Vec2 v ) { return b2Atan2(v.y, v.x); } void process() { float32 thresh = SIMPLIFY_THRESHOLDf; m_rawPath.simplify( thresh ); m_shapePath = m_rawPath; //fprintf(stderr,"simplified stroke to %d points\n",m_rawPath.size()); while ( m_shapePath.numPoints() > MULTI_VERTEX_LIMIT ) { thresh += SIMPLIFY_THRESHOLDf; m_shapePath.simplify( thresh ); } } bool transform() { // distinguish between xformed raw and shape path as needed if ( m_hide ) { if ( m_hide < HIDE_STEPS ) { //printf("hide %d\n",m_hide); Vec2 o = m_screenBbox.centroid(); m_screenPath -= o; m_screenPath.scale( 0.99 ); m_screenPath += o; m_screenBbox = m_screenPath.bbox(); m_hide++; return true; } } else if ( m_body ) { if ( hasAttribute( ATTRIB_DECOR ) ) { return false; // decor never moves } else if ( hasAttribute( ATTRIB_GROUND ) && m_xformAngle == m_body->GetAngle() ) { return false; // ground strokes never move. } else if ( m_xformAngle != m_body->GetAngle() || ! (m_xformPos == m_body->GetPosition()) ) { //printf("transform stroke - rot or pos\n"); b2Mat22 rot( m_body->GetAngle() ); b2Vec2 orig = PIXELS_PER_METREf * m_body->GetPosition(); m_xformedPath = m_rawPath; m_xformedPath.rotate( rot ); m_xformedPath.translate( Vec2(orig) ); m_xformAngle = m_body->GetAngle(); m_xformPos = m_body->GetPosition(); worldToScreen.transform( m_xformedPath, m_screenPath ); m_screenBbox = m_screenPath.bbox(); } else { //printf("transform none\n"); return false; } } else { //printf("transform no body\n"); m_xformedPath = m_rawPath; m_xformedPath.translate( m_origin ); worldToScreen.transform( m_xformedPath, m_screenPath ); m_screenBbox = m_screenPath.bbox(); return !hasAttribute(ATTRIB_DECOR); } return true; } Path m_rawPath; int m_colour; int m_attributes; Vec2 m_origin; Path m_shapePath; Path m_xformedPath; Path m_screenPath; float32 m_xformAngle; b2Vec2 m_xformPos; Rect m_screenBbox; Rect m_drawnBbox; bool m_drawn; b2Body* m_body; bool m_jointed[2]; int m_hide; }; Scene::Scene( bool noWorld ) : m_world( NULL ), m_bgImage( NULL ), m_protect( 0 ), m_gravity(0.0f, 0.0f), m_dynamicGravity(false), m_accelerometer(Os::get()->getAccelerometer()), m_dirtyArea(false) { if ( !noWorld ) { resetWorld(); } } Scene::~Scene() { clear(); if ( m_world ) { step(); delete m_world; } } void Scene::resetWorld() { const b2Vec2 gravity(0.0f, GRAVITY_ACCELf*PIXELS_PER_METREf/GRAVITY_FUDGEf); delete m_world; b2AABB worldAABB; worldAABB.lowerBound.Set(-100.0f, -100.0f); worldAABB.upperBound.Set(100.0f, 100.0f); bool doSleep = true; m_world = new b2World(worldAABB, gravity, doSleep); m_world->SetContactListener( this ); } Stroke* Scene::newStroke( const Path& p, int colour, int attribs ) { Stroke *s = new Stroke(p); s->setAttribute( (Attribute)attribs ); switch ( colour ) { case 0: s->setAttribute( ATTRIB_TOKEN ); break; case 1: s->setAttribute( ATTRIB_GOAL ); break; default: s->setColour( brushColours[colour] ); break; } m_strokes.append( s ); m_recorder.newStroke( p, colour, attribs ); return s; } bool Scene::deleteStroke( Stroke *s ) { if ( s ) { int i = m_strokes.indexOf(s); if ( i >= m_protect ) { reset(s); m_strokes.erase( i ); m_deletedStrokes.append( s ); m_recorder.deleteStroke( i ); return true; } } return false; } void Scene::extendStroke( Stroke* s, const Vec2& pt ) { if ( s ) { int i = m_strokes.indexOf(s); if ( i >= m_protect ) { s->addPoint( pt ); m_recorder.extendStroke( i, pt ); } } } void Scene::moveStroke( Stroke* s, const Vec2& origin ) { if ( s ) { int i = m_strokes.indexOf(s); if ( i >= m_protect ) { s->origin( origin ); m_recorder.moveStroke( i, origin ); } } } bool Scene::activateStroke( Stroke *s ) { activate(s); m_recorder.activateStroke( m_strokes.indexOf(s) ); } void Scene::getJointCandidates( Stroke* s, Path& pts ) { Array joints; for ( int j=m_strokes.size()-1; j>=0; j-- ) { if ( s != m_strokes[j] ) { s->determineJoints( m_strokes[j], joints ); m_strokes[j]->determineJoints( s, joints ); } } for ( int j=joints.size()-1; j>=0; j-- ) { pts.append( joints[j].joiner->endpt(joints[j].end) ); } } bool Scene::activate( Stroke *s ) { if ( s->numPoints() > 1 ) { s->createBodies( *m_world ); createJoints( s ); return true; } return false; } void Scene::activateAll() { for ( int i=0; i < m_strokes.size(); i++ ) { m_strokes[i]->createBodies( *m_world ); } for ( int i=0; i < m_strokes.size(); i++ ) { createJoints( m_strokes[i] ); } } void Scene::createJoints( Stroke *s ) { if ( s->body()==NULL ) { return; } Array joints; for ( int j=m_strokes.size()-1; j>=0; j-- ) { if ( s != m_strokes[j] && m_strokes[j]->body() ) { //printf("try join to %d\n",j); s->determineJoints( m_strokes[j], joints ); m_strokes[j]->determineJoints( s, joints ); for ( int i=0; ijoin( m_world, joints[i].joinee, joints[i].end ); } joints.empty(); } } } void Scene::step( bool isPaused ) { m_recorder.tick(isPaused); isPaused |= m_player.tick(); if ( !isPaused ) { if (m_accelerometer && m_dynamicGravity) { float32 gx, gy, gz; if ( m_accelerometer->poll( gx, gy, gz ) ) { if (m_dynamicGravity || gx*gx+gy*gy > 1.2*1.2) { //fprintf(stderr,"dynamic grav = %f,%f\n", gx, gy ); const float32 factor = GRAVITY_ACCELf*PIXELS_PER_METREf/GRAVITY_FUDGEf; m_currentGravity = b2Vec2( m_gravity.x + gx*factor, m_gravity.y + gy*factor ); m_world->SetGravity( m_currentGravity ); } else if (!(m_currentGravity == m_gravity)) { m_currentGravity += m_gravity; m_currentGravity *= 0.5; m_world->SetGravity( m_currentGravity ); } //TODO record gravity } } m_world->Step( ITERATION_TIMESTEPf, SOLVER_ITERATIONS ); // clean up delete strokes for ( int i=0; i< m_strokes.size(); i++ ) { if ( m_strokes[i]->hasAttribute(ATTRIB_DELETED) ) { m_strokes[i]->clearAttribute(ATTRIB_DELETED); m_strokes[i]->hide(); } } // check for token respawn for ( int i=0; i < m_strokes.size(); i++ ) { if ( m_strokes[i]->hasAttribute( ATTRIB_TOKEN ) && !BOUNDS_RECT.intersects( m_strokes[i]->worldBbox() ) ) { reset( m_strokes[i] ); activate( m_strokes[i] ); } } } calcDirtyArea(); } // b2ContactListener callback when a new contact is detected void Scene::Add(const b2ContactPoint* point) { // check for completion //if (c->GetManifoldCount() > 0) { Stroke* s1 = (Stroke*)point->shape1->GetBody()->GetUserData(); Stroke* s2 = (Stroke*)point->shape2->GetBody()->GetUserData(); if ( s1 && s2 ) { if ( s2->hasAttribute(ATTRIB_TOKEN) ) { b2Swap( s1, s2 ); } if ( s1->hasAttribute(ATTRIB_TOKEN) && s2->hasAttribute(ATTRIB_GOAL) ) { s2->setAttribute(ATTRIB_DELETED); m_recorder.goal(1); } } } bool Scene::isCompleted() { for ( int i=0; i < m_strokes.size(); i++ ) { if ( m_strokes[i]->hasAttribute( ATTRIB_GOAL ) && !m_strokes[i]->hidden() ) { return false; } } //printf("completed!\n"); return true; } Rect Scene::dirtyArea() { return m_dirtyArea; } void Scene::calcDirtyArea() { Rect r(false); for ( int i=0; iisDirty() ) { // acumulate new areas to draw r.expand( m_strokes[i]->screenBbox() ); // plus prev areas to erase r.expand( m_strokes[i]->lastDrawnBbox() ); } } for ( int i=0; ilastDrawnBbox() ); } if ( !r.isEmpty() ) { // expand to allow for thick lines r.grow(1); } //fprintf(stderr,"scene dirty %d,%d-%d,%d!\n",r.tl.x,r.tl.y,r.br.x,r.br.y); m_dirtyArea = r; } void Scene::draw( Canvas& canvas, const Rect& area ) { if ( m_bgImage ) { canvas.setBackground( m_bgImage ); } else { canvas.setBackground( 0 ); } canvas.clear( area ); Rect clipArea = area; clipArea.tl.x--; clipArea.tl.y--; clipArea.br.x++; clipArea.br.y++; for ( int i=0; iscreenBbox() ) ) { m_strokes[i]->draw( canvas ); } } while ( m_deletedStrokes.size() ) { delete m_deletedStrokes[0]; m_deletedStrokes.erase(0); } } void Scene::reset( Stroke* s, bool purgeUnprotected ) { while ( purgeUnprotected && m_strokes.size() > m_protect ) { m_strokes[m_strokes.size()-1]->reset(m_world); m_strokes.erase( m_strokes.size()-1 ); } for ( int i=0; ireset(m_world); } } } Stroke* Scene::strokeAtPoint( const Vec2 pt, float32 max ) { Stroke* best = NULL; for ( int i=0; idistanceTo( pt ); //printf("stroke %d dist %f\n",i,d); if ( d < max ) { max = d; best = m_strokes[i]; } } return best; } void Scene::clear() { reset(); while ( m_strokes.size() ) { delete m_strokes[0]; m_strokes.erase(0); } while ( m_deletedStrokes.size() ) { delete m_deletedStrokes[0]; m_deletedStrokes.erase(0); } if ( m_world ) { //step is required to actually destroy bodies and joints m_world->Step( ITERATION_TIMESTEPf, SOLVER_ITERATIONS ); } m_log.empty(); } void Scene::setGravity( const b2Vec2& g ) { m_gravity = m_currentGravity = g; if (m_world) { m_world->SetGravity( m_gravity ); } } void Scene::setGravity( const std::string& s ) { for (int i=0; iscale( SCREEN_WIDTH, SCREEN_HEIGHT ); } m_bgImage = g_bgImage; std::string line; while ( !in.eof() ) { getline( in, line ); parseLine( line ); } protect(); printf("loaded log=%d\n",m_log.size()); return true; } void Scene::start( bool replay ) { activateAll(); if ( replay ) { m_recorder.stop(); m_player.start( &m_log, this ); } else { m_player.stop(); m_recorder.start( &m_log ); } } bool Scene::parseLine( const std::string& line ) { try { switch( line[0] ) { case 'T': m_title = line.substr(line.find(':')+1); return true; case 'B': m_bg = line.substr(line.find(':')+1); return true; case 'A': m_author = line.substr(line.find(':')+1); return true; case 'S': m_strokes.append( new Stroke(line) ); return true; case 'G': setGravity(line); return true; case 'E': m_log.append(line.substr(line.find(':')+1));return true; } } catch ( const char* e ) { printf("Stroke error: %s\n",e); } return false; } void Scene::protect( int n ) { m_protect = (n==-1 ? m_strokes.size() : n ); } bool Scene::save( const std::string& file, bool saveLog ) { printf("saving to %s\n",file.c_str()); std::ofstream o( file.c_str(), std::ios::out ); if ( o.is_open() ) { o << "Title: "<asString(); } if ( saveLog ) { for ( int i=0; i #include #include #include #include // for gethostbyname() #include #endif #ifdef WIN32 #include #define vsnprintf _vsnprintf #endif #include #include #include #include #include #include #include #include using namespace std; namespace happyhttp { #ifdef WIN32 const char* GetWinsockErrorString( int err ); #endif //--------------------------------------------------------------------- // Helper functions //--------------------------------------------------------------------- void BailOnSocketError( const char* context ) { #ifdef WIN32 int e = WSAGetLastError(); const char* msg = GetWinsockErrorString( e ); #else const char* msg = strerror( errno ); #endif throw Wobbly( "%s: %s", context, msg ); } #ifdef WIN32 const char* GetWinsockErrorString( int err ) { switch( err) { case 0: return "No error"; case WSAEINTR: return "Interrupted system call"; case WSAEBADF: return "Bad file number"; case WSAEACCES: return "Permission denied"; case WSAEFAULT: return "Bad address"; case WSAEINVAL: return "Invalid argument"; case WSAEMFILE: return "Too many open sockets"; case WSAEWOULDBLOCK: return "Operation would block"; case WSAEINPROGRESS: return "Operation now in progress"; case WSAEALREADY: return "Operation already in progress"; case WSAENOTSOCK: return "Socket operation on non-socket"; case WSAEDESTADDRREQ: return "Destination address required"; case WSAEMSGSIZE: return "Message too long"; case WSAEPROTOTYPE: return "Protocol wrong type for socket"; case WSAENOPROTOOPT: return "Bad protocol option"; case WSAEPROTONOSUPPORT: return "Protocol not supported"; case WSAESOCKTNOSUPPORT: return "Socket type not supported"; case WSAEOPNOTSUPP: return "Operation not supported on socket"; case WSAEPFNOSUPPORT: return "Protocol family not supported"; case WSAEAFNOSUPPORT: return "Address family not supported"; case WSAEADDRINUSE: return "Address already in use"; case WSAEADDRNOTAVAIL: return "Can't assign requested address"; case WSAENETDOWN: return "Network is down"; case WSAENETUNREACH: return "Network is unreachable"; case WSAENETRESET: return "Net connection reset"; case WSAECONNABORTED: return "Software caused connection abort"; case WSAECONNRESET: return "Connection reset by peer"; case WSAENOBUFS: return "No buffer space available"; case WSAEISCONN: return "Socket is already connected"; case WSAENOTCONN: return "Socket is not connected"; case WSAESHUTDOWN: return "Can't send after socket shutdown"; case WSAETOOMANYREFS: return "Too many references, can't splice"; case WSAETIMEDOUT: return "Connection timed out"; case WSAECONNREFUSED: return "Connection refused"; case WSAELOOP: return "Too many levels of symbolic links"; case WSAENAMETOOLONG: return "File name too long"; case WSAEHOSTDOWN: return "Host is down"; case WSAEHOSTUNREACH: return "No route to host"; case WSAENOTEMPTY: return "Directory not empty"; case WSAEPROCLIM: return "Too many processes"; case WSAEUSERS: return "Too many users"; case WSAEDQUOT: return "Disc quota exceeded"; case WSAESTALE: return "Stale NFS file handle"; case WSAEREMOTE: return "Too many levels of remote in path"; case WSASYSNOTREADY: return "Network system is unavailable"; case WSAVERNOTSUPPORTED: return "Winsock version out of range"; case WSANOTINITIALISED: return "WSAStartup not yet called"; case WSAEDISCON: return "Graceful shutdown in progress"; case WSAHOST_NOT_FOUND: return "Host not found"; case WSANO_DATA: return "No host data of that type was found"; } return "unknown"; }; #endif // WIN32 // return true if socket has data waiting to be read bool datawaiting( int sock ) { fd_set fds; FD_ZERO( &fds ); FD_SET( sock, &fds ); struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 0; int r = select( sock+1, &fds, NULL, NULL, &tv); if (r < 0) BailOnSocketError( "select" ); if( FD_ISSET( sock, &fds ) ) return true; else return false; } // Try to work out address from string // returns 0 if bad struct in_addr *atoaddr( const char* address) { struct hostent *host; static struct in_addr saddr; // First try nnn.nnn.nnn.nnn form saddr.s_addr = inet_addr(address); if (saddr.s_addr != -1) return &saddr; host = gethostbyname(address); if( host ) return (struct in_addr *) *host->h_addr_list; return 0; } //--------------------------------------------------------------------- // // Exception class // //--------------------------------------------------------------------- Wobbly::Wobbly( const char* fmt, ... ) { va_list ap; va_start( ap,fmt); int n = vsnprintf( m_Message, MAXLEN, fmt, ap ); va_end( ap ); if(n==MAXLEN) m_Message[MAXLEN-1] = '\0'; } //--------------------------------------------------------------------- // // Connection // //--------------------------------------------------------------------- Connection::Connection( const char* host, int port ) : m_ResponseBeginCB(0), m_ResponseDataCB(0), m_ResponseCompleteCB(0), m_UserData(0), m_State( IDLE ), m_Host( host ), m_Port( port ), m_Sock(-1) { } void Connection::setcallbacks( ResponseBegin_CB begincb, ResponseData_CB datacb, ResponseComplete_CB completecb, void* userdata ) { m_ResponseBeginCB = begincb; m_ResponseDataCB = datacb; m_ResponseCompleteCB = completecb; m_UserData = userdata; } void Connection::connect() { in_addr* addr = atoaddr( m_Host.c_str() ); if( !addr ) throw Wobbly( "Invalid network address" ); sockaddr_in address; memset( (char*)&address, 0, sizeof(address) ); address.sin_family = AF_INET; address.sin_port = htons( m_Port ); address.sin_addr.s_addr = addr->s_addr; m_Sock = socket( AF_INET, SOCK_STREAM, 0 ); if( m_Sock < 0 ) BailOnSocketError( "socket()" ); // printf("Connecting to %s on port %d.\n",inet_ntoa(*addr), port); if( ::connect( m_Sock, (sockaddr const*)&address, sizeof(address) ) < 0 ) BailOnSocketError( "connect()" ); } void Connection::close() { #ifdef WIN32 if( m_Sock >= 0 ) ::closesocket( m_Sock ); #else if( m_Sock >= 0 ) ::close( m_Sock ); #endif m_Sock = -1; // discard any incomplete responses while( !m_Outstanding.empty() ) { delete m_Outstanding.front(); m_Outstanding.pop_front(); } } Connection::~Connection() { close(); } void Connection::request( const char* method, const char* url, const char* headers[], const unsigned char* body, int bodysize ) { bool gotcontentlength = false; // already in headers? // check headers for content-length // TODO: check for "Host" and "Accept-Encoding" too // and avoid adding them ourselves in putrequest() if( headers ) { const char** h = headers; while( *h ) { const char* name = *h++; const char* value = *h++; assert( value != 0 ); // name with no value! if( 0==strcasecmp( name, "content-length" ) ) gotcontentlength = true; } } putrequest( method, url ); if( body && !gotcontentlength ) putheader( "Content-Length", bodysize ); if( headers ) { const char** h = headers; while( *h ) { const char* name = *h++; const char* value = *h++; putheader( name, value ); } } endheaders(); if( body ) send( body, bodysize ); } void Connection::putrequest( const char* method, const char* url ) { if( m_State != IDLE ) throw Wobbly( "Request already issued" ); m_State = REQ_STARTED; char req[ 512 ]; sprintf( req, "%s %s HTTP/1.1", method, url ); m_Buffer.push_back( req ); putheader( "Host", m_Host.c_str() ); // required for HTTP1.1 // don't want any fancy encodings please putheader("Accept-Encoding", "identity"); // Push a new response onto the queue Response *r = new Response( method, *this ); m_Outstanding.push_back( r ); } void Connection::putheader( const char* header, const char* value ) { if( m_State != REQ_STARTED ) throw Wobbly( "putheader() failed" ); m_Buffer.push_back( string(header) + ": " + string( value ) ); } void Connection::putheader( const char* header, int numericvalue ) { char buf[32]; sprintf( buf, "%d", numericvalue ); putheader( header, buf ); } void Connection::endheaders() { if( m_State != REQ_STARTED ) throw Wobbly( "Cannot send header" ); m_State = IDLE; m_Buffer.push_back( "" ); string msg; vector< string>::const_iterator it; for( it = m_Buffer.begin(); it != m_Buffer.end(); ++it ) msg += (*it) + "\r\n"; m_Buffer.clear(); // printf( "%s", msg.c_str() ); send( (const unsigned char*)msg.c_str(), msg.size() ); } void Connection::send( const unsigned char* buf, int numbytes ) { // fwrite( buf, 1,numbytes, stdout ); if( m_Sock < 0 ) connect(); while( numbytes > 0 ) { #ifdef WIN32 int n = ::send( m_Sock, (const char*)buf, numbytes, 0 ); #else int n = ::send( m_Sock, buf, numbytes, 0 ); #endif if( n<0 ) BailOnSocketError( "send()" ); numbytes -= n; buf += n; } } void Connection::pump() { if( m_Outstanding.empty() ) return; // no requests outstanding assert( m_Sock >0 ); // outstanding requests but no connection! if( !datawaiting( m_Sock ) ) return; // recv will block unsigned char buf[ 2048 ]; int a = recv( m_Sock, (char*)buf, sizeof(buf), 0 ); if( a<0 ) BailOnSocketError( "recv()" ); if( a== 0 ) { // connection has closed Response* r = m_Outstanding.front(); r->notifyconnectionclosed(); assert( r->completed() ); delete r; m_Outstanding.pop_front(); // any outstanding requests will be discarded close(); } else { int used = 0; while( used < a && !m_Outstanding.empty() ) { Response* r = m_Outstanding.front(); int u = r->pump( &buf[used], a-used ); // delete response once completed if( r->completed() ) { delete r; m_Outstanding.pop_front(); } used += u; } // NOTE: will lose bytes if response queue goes empty // (but server shouldn't be sending anything if we don't have // anything outstanding anyway) assert( used == a ); // all bytes should be used up by here. } } //--------------------------------------------------------------------- // // Response // //--------------------------------------------------------------------- Response::Response( const char* method, Connection& conn ) : m_Connection( conn ), m_State( STATUSLINE ), m_Method( method ), m_Version( 0 ), m_Status(0), m_BytesRead(0), m_Chunked(false), m_ChunkLeft(0), m_Length(-1), m_WillClose(false) { } const char* Response::getheader( const char* name ) const { std::string lname( name ); std::transform( lname.begin(), lname.end(), lname.begin(), (int(*)(int))tolower ); std::map< std::string, std::string >::const_iterator it = m_Headers.find( lname ); if( it == m_Headers.end() ) return 0; else return it->second.c_str(); } int Response::getstatus() const { // only valid once we've got the statusline assert( m_State != STATUSLINE ); return m_Status; } const char* Response::getreason() const { // only valid once we've got the statusline assert( m_State != STATUSLINE ); return m_Reason.c_str(); } // Connection has closed void Response::notifyconnectionclosed() { if( m_State == COMPLETE ) return; // eof can be valid... if( m_State == BODY && !m_Chunked && m_Length == -1 ) { Finish(); // we're all done! } else { throw Wobbly( "Connection closed unexpectedly" ); } } int Response::pump( const unsigned char* data, int datasize ) { assert( datasize != 0 ); int count = datasize; while( count > 0 && m_State != COMPLETE ) { if( m_State == STATUSLINE || m_State == HEADERS || m_State == TRAILERS || m_State == CHUNKLEN || m_State == CHUNKEND ) { // we want to accumulate a line while( count > 0 ) { char c = (char)*data++; --count; if( c == '\n' ) { // now got a whole line! switch( m_State ) { case STATUSLINE: ProcessStatusLine( m_LineBuf ); break; case HEADERS: ProcessHeaderLine( m_LineBuf ); break; case TRAILERS: ProcessTrailerLine( m_LineBuf ); break; case CHUNKLEN: ProcessChunkLenLine( m_LineBuf ); break; case CHUNKEND: // just soak up the crlf after body and go to next state assert( m_Chunked == true ); m_State = CHUNKLEN; break; default: break; } m_LineBuf.clear(); break; // break out of line accumulation! } else { if( c != '\r' ) // just ignore CR m_LineBuf += c; } } } else if( m_State == BODY ) { int bytesused = 0; if( m_Chunked ) bytesused = ProcessDataChunked( data, count ); else bytesused = ProcessDataNonChunked( data, count ); data += bytesused; count -= bytesused; } } // return number of bytes used return datasize - count; } void Response::ProcessChunkLenLine( std::string const& line ) { // chunklen in hex at beginning of line m_ChunkLeft = strtol( line.c_str(), NULL, 16 ); if( m_ChunkLeft == 0 ) { // got the whole body, now check for trailing headers m_State = TRAILERS; m_HeaderAccum.clear(); } else { m_State = BODY; } } // handle some body data in chunked mode // returns number of bytes used. int Response::ProcessDataChunked( const unsigned char* data, int count ) { assert( m_Chunked ); int n = count; if( n>m_ChunkLeft ) n = m_ChunkLeft; // invoke callback to pass out the data if( m_Connection.m_ResponseDataCB ) (m_Connection.m_ResponseDataCB)( this, m_Connection.m_UserData, data, n ); m_BytesRead += n; m_ChunkLeft -= n; assert( m_ChunkLeft >= 0); if( m_ChunkLeft == 0 ) { // chunk completed! now soak up the trailing CRLF before next chunk m_State = CHUNKEND; } return n; } // handle some body data in non-chunked mode. // returns number of bytes used. int Response::ProcessDataNonChunked( const unsigned char* data, int count ) { int n = count; if( m_Length != -1 ) { // we know how many bytes to expect int remaining = m_Length - m_BytesRead; if( n > remaining ) n = remaining; } // invoke callback to pass out the data if( m_Connection.m_ResponseDataCB ) (m_Connection.m_ResponseDataCB)( this, m_Connection.m_UserData, data, n ); m_BytesRead += n; // Finish if we know we're done. Else we're waiting for connection close. if( m_Length != -1 && m_BytesRead == m_Length ) Finish(); return n; } void Response::Finish() { m_State = COMPLETE; // invoke the callback if( m_Connection.m_ResponseCompleteCB ) (m_Connection.m_ResponseCompleteCB)( this, m_Connection.m_UserData ); } void Response::ProcessStatusLine( std::string const& line ) { const char* p = line.c_str(); // skip any leading space while( *p && *p == ' ' ) ++p; // get version while( *p && *p != ' ' ) m_VersionString += *p++; while( *p && *p == ' ' ) ++p; // get status code std::string status; while( *p && *p != ' ' ) status += *p++; while( *p && *p == ' ' ) ++p; // rest of line is reason while( *p ) m_Reason += *p++; m_Status = atoi( status.c_str() ); if( m_Status < 100 || m_Status > 999 ) throw Wobbly( "BadStatusLine (%s)", line.c_str() ); /* printf( "version: '%s'\n", m_VersionString.c_str() ); printf( "status: '%d'\n", m_Status ); printf( "reason: '%s'\n", m_Reason.c_str() ); */ if( m_VersionString == "HTTP:/1.0" ) m_Version = 10; else if( 0==m_VersionString.compare( 0,7,"HTTP/1." ) ) m_Version = 11; else throw Wobbly( "UnknownProtocol (%s)", m_VersionString.c_str() ); // TODO: support for HTTP/0.9 // OK, now we expect headers! m_State = HEADERS; m_HeaderAccum.clear(); } // process accumulated header data void Response::FlushHeader() { if( m_HeaderAccum.empty() ) return; // no flushing required const char* p = m_HeaderAccum.c_str(); std::string header; std::string value; while( *p && *p != ':' ) header += tolower( *p++ ); // skip ':' if( *p ) ++p; // skip space while( *p && (*p ==' ' || *p=='\t') ) ++p; value = p; // rest of line is value m_Headers[ header ] = value; // printf("header: ['%s': '%s']\n", header.c_str(), value.c_str() ); m_HeaderAccum.clear(); } void Response::ProcessHeaderLine( std::string const& line ) { const char* p = line.c_str(); if( line.empty() ) { FlushHeader(); // end of headers // HTTP code 100 handling (we ignore 'em) if( m_Status == CONTINUE ) m_State = STATUSLINE; // reset parsing, expect new status line else BeginBody(); // start on body now! return; } if( isspace(*p) ) { // it's a continuation line - just add it to previous data ++p; while( *p && isspace( *p ) ) ++p; m_HeaderAccum += ' '; m_HeaderAccum += p; } else { // begin a new header FlushHeader(); m_HeaderAccum = p; } } void Response::ProcessTrailerLine( std::string const& line ) { // TODO: handle trailers? // (python httplib doesn't seem to!) if( line.empty() ) Finish(); // just ignore all the trailers... } // OK, we've now got all the headers read in, so we're ready to start // on the body. But we need to see what info we can glean from the headers // first... void Response::BeginBody() { m_Chunked = false; m_Length = -1; // unknown m_WillClose = false; // using chunked encoding? const char* trenc = getheader( "transfer-encoding" ); if( trenc && 0==strcasecmp( trenc, "chunked") ) { m_Chunked = true; m_ChunkLeft = -1; // unknown } m_WillClose = CheckClose(); // length supplied? const char* contentlen = getheader( "content-length" ); if( contentlen && !m_Chunked ) { m_Length = atoi( contentlen ); } // check for various cases where we expect zero-length body if( m_Status == NO_CONTENT || m_Status == NOT_MODIFIED || ( m_Status >= 100 && m_Status < 200 ) || // 1xx codes have no body m_Method == "HEAD" ) { m_Length = 0; } // if we're not using chunked mode, and no length has been specified, // assume connection will close at end. if( !m_WillClose && !m_Chunked && m_Length == -1 ) m_WillClose = true; // Invoke the user callback, if any if( m_Connection.m_ResponseBeginCB ) (m_Connection.m_ResponseBeginCB)( this, m_Connection.m_UserData ); /* printf("---------BeginBody()--------\n"); printf("Length: %d\n", m_Length ); printf("WillClose: %d\n", (int)m_WillClose ); printf("Chunked: %d\n", (int)m_Chunked ); printf("ChunkLeft: %d\n", (int)m_ChunkLeft ); printf("----------------------------\n"); */ // now start reading body data! if( m_Chunked ) m_State = CHUNKLEN; else m_State = BODY; } // return true if we think server will automatically close connection bool Response::CheckClose() { if( m_Version == 11 ) { // HTTP1.1 // the connection stays open unless "connection: close" is specified. const char* conn = getheader( "connection" ); if( conn && 0==strcasecmp( conn, "close" ) ) return true; else return false; } // Older HTTP // keep-alive header indicates persistant connection if( getheader( "keep-alive" ) ) return false; // TODO: some special case handling for Akamai and netscape maybe? // (see _check_close() in python httplib.py for details) return true; } } // end namespace happyhttp numptyphysics-0.2+svn157/Box2D/0000755000175000017500000000000012264274614015305 5ustar warp10warp10numptyphysics-0.2+svn157/Box2D/Readme.txt0000644000175000017500000000122712264274614017245 0ustar warp10warp10Box2D Version 2.0.1 Welcome to Box2D! Box2D is a 2D physics engine for games. For help with Box2D, please visit http://www.box2d.org. There is a forum there where you may post your questions. The project files with this distribution work with Microsoft Visual C++ 2005 and above. You can download MSVC 2008 for free and it includes the necessary Platform SDK. To run the demos, set "Testbed" as your startup project and press F5. Some test bed commands are: - 'r' to reset the current test - SPACE to launch a bomb - arrow keys to pan - 'x' and 'z' to zoom in/out - use the mouse to click and drag objects Erin Catto http://www.box2d.org numptyphysics-0.2+svn157/Box2D/Clean.bat0000644000175000017500000000064212264274614017021 0ustar warp10warp10rem VC8 del Build\VC8\Box2D.ncb del /a:H Build\VC8\Box2D.suo del /s Build\VC8\*.user rmdir /s /q Build\VC8\Box2D rmdir /s /q Build\VC8\TestBed rmdir /s /q Build\VC8\glui rmdir /s /q Build\VC8\freeglut rmdir /s /q Build\VC8\HelloWorld rem Code::Blocks del Library\libEngine.a del Build\CodeBlocks\*.depend del Build\CodeBlocks\*.layout rmdir /s /q Build\CodeBlocks\obj rmdir /s /q Build\CodeBlocks\bin numptyphysics-0.2+svn157/Box2D/License.txt0000644000175000017500000000156612264274614017440 0ustar warp10warp10Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. numptyphysics-0.2+svn157/Box2D/TODO.txt0000644000175000017500000001005412264274602016610 0ustar warp10warp10Version 1.0.0 - Clamp large rotations. DONE - Restitution. DONE - Prismatic joint. DONE - Limits and motors. DONE - Handle equal limits. DONE - Fast broadphase. DONE - Collide connected. DONE - Island sleeping. DONE - Custom allocators. DONE - Convex polygons. DONE - Compound shapes. DONE - Constraint graph. DONE - Contact solver. DONE - Joint solver. DONE - Improved stability. DONE - Improve contact matching. DONE - Contact solver. DONE - Joint solver. DONE - Mouse picking. DONE - SAP AABB query. DONE - Distance joint. DONE Version 1.0.1 - Joint limit bug fix. DONE Version 1.1.0 - Handle dangling joint pointers. DONE - Collision filters. DONE - User data. DONE - Improved API. DONE - Orphaned mouse joint. DONE Version 1.2.0 - Rename engine.lib to box2d.lib. DONE - Code layout. DONE - Circles. DONE Version 1.2.1 - Handle proxies hitting the world boundary. DONE - Freeze out of bounds bodies, notify user. DONE - Handle running out of pairs. DONE Version 1.3.0 - Documentation phase 1. DONE - Add "no rotation" option to body def. DONE - b2Settings configuration for pixel coordinates. DONE - Slider-crank test. DONE - Notify client when a body is frozen. DONE - Fix collide-connected. DONE - Fix compound polygons. DONE - Check degenerate containment resolution. DONE (no problem found) - Access to contacts and joints. DONE Version 1.4.0 - Gear joint. DONE - Pulley joint. DONE - Personalize the phpbb header. DONE - Document contacts and new joint types. DONE Version 1.4.1 - Fix contact list. DONE - Damping. DONE - Poly-circle ids. DONE - Improve mouse joint. DONE Version 1.4.2 - Improve joint stability. DONE. Version 1.4.3 - Fix thin polygon collision. DONE - Simplify broad-phase internally. DONE - OSX patch. DONE - Fix compound body freezing. DONE - Collision filter callback. DONE Version 2.0.0 - Collision doesn't include any files from Dynamics. DONE - User created shapes. DONE - Shape ray casts. DONE - Verify polygon convex and CCW. DONE - Deferred body destruction is gone. DONE - Deferred contact destruction is gone. DONE - JointDefs in local coordinates so that save/load works with limits. DONE - Wake up bonies on apply force/torque/impulse. DONE - Improve polygon collision performance. DONE - Optimal OBBs for polygons. DONE - Debug display interface. DONE - Access version number. DONE - Improved TestBed camera. DONE - Continuous physics with TOI islands. DONE - Max velocities. DONE - Body add/remove shape. DONE - Damping now works better with a variable time step. DONE - Time of Impact (TOI) callbacks. DONE - Contact solver tweak callbacks. DONE - Contact callbacks with impulses. DONE - Safe contact callback example. DONE - Draw world AABB in TestBed. DONE - Use forces instead of impulses to handle variable time step. DONE - Ragdoll contribution. DONE - Car example. DONE - Constraint graph and shapes support changes in center of mass. DONE - Sensors with overlap report. DONE - Doxygen. DONE - Update manual. DONE Version 2.1.0 - Meshes (segment soup). - Ray casts. - Wiki. DONE - Pairs and proxies use small block allocator? - Bounds use growable array? - Don't sleep until position error is low? - Allow non-solid polygon edges. - User refilter. - CMake. - Kequalized crash. - Soft distance constraint. DONE - Version 2.2.0 - Handle orphaned gear joint. - Friction/motor joint for top down games. - Rolling resistance for circles. - Add comments to examples and testbed. Version 2.3.0 - Convex hull tool. - Angle joint. - Weld joint. - Speculative contacts. Version 2.4.0 - Spline joints. - Contact block solver. Version 2.5.0 - Convex decomposition. - Kinematic bodies. Version 2.6.0 - Ropes and particles. - Growable vertex arrays. Version 3+ - Performance. - Try position correction clamping and larger Baumgarte. - Characters. - Vehicles. - Tree constraints. - Buoyancy. - Heightfields. - Static point-grids. - Revolute 3x3 effective mass. - Use velocity lambda to control NGS clamping. - No globals or statics.numptyphysics-0.2+svn157/Box2D/Makefile0000644000175000017500000000211712264274614016746 0ustar warp10warp10PATCH= box2d_fixed.patch all: (cd Contrib/freeglut; make) (cd Contrib/glui; make) (cd Source; make) (cd Examples/TestBed; make) clean: (cd Contrib/freeglut; make clean) (cd Contrib/glui; make clean) (cd Source; make clean) (cd Examples/TestBed; make clean) patch: svn diff > $(PATCH) # - diff --unified /dev/null Makefile >> $(PATCH) # - diff --unified /dev/null Documentation/latex/Makefile >> $(PATCH) # - diff --unified /dev/null Contrib/freeglut/Makefile >> $(PATCH) # - diff --unified /dev/null Contrib/glui/Makefile >> $(PATCH) # - diff --unified /dev/null Source/Makefile >> $(PATCH) # - diff --unified /dev/null Examples/TestBed/Makefile >> $(PATCH) # - diff --unified /dev/null Source/Common/Fixed.h >> $(PATCH) # - diff --unified /dev/null Source/Common/jtypes.h >> $(PATCH) # - diff --unified /dev/null Source/Contrib/b2Polygon.cpp >> $(PATCH) # - diff --unified /dev/null Source/Contrib/b2Polygon.h >> $(PATCH) # - diff --unified /dev/null Source/Contrib/b2Triangle.cpp >> $(PATCH) # - diff --unified /dev/null Source/Contrib/b2Triangle.h >> $(PATCH) numptyphysics-0.2+svn157/Box2D/Library/0000755000175000017500000000000012264274602016706 5ustar warp10warp10numptyphysics-0.2+svn157/Box2D/Source/0000755000175000017500000000000012264274616016547 5ustar warp10warp10numptyphysics-0.2+svn157/Box2D/Source/Dynamics/0000755000175000017500000000000012264274615020315 5ustar warp10warp10numptyphysics-0.2+svn157/Box2D/Source/Dynamics/b2ContactManager.h0000644000175000017500000000331112264274614023575 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_CONTACT_MANAGER_H #define B2_CONTACT_MANAGER_H #include "../Collision/b2BroadPhase.h" #include "../Dynamics/Contacts/b2NullContact.h" class b2World; class b2Contact; struct b2TimeStep; // Delegate of b2World. class b2ContactManager : public b2PairCallback { public: b2ContactManager() : m_world(NULL), m_destroyImmediate(false) {} // Implements PairCallback void* PairAdded(void* proxyUserData1, void* proxyUserData2); // Implements PairCallback void PairRemoved(void* proxyUserData1, void* proxyUserData2, void* pairUserData); void Destroy(b2Contact* c); void Collide(); b2World* m_world; // This lets us provide broadphase proxy pair user data for // contacts that shouldn't exist. b2NullContact m_nullContact; bool m_destroyImmediate; }; #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/0000755000175000017500000000000012264274614021562 5ustar warp10warp10numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2GearJoint.cpp0000644000175000017500000001550112264274614024376 0ustar warp10warp10/* * Copyright (c) 2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2GearJoint.h" #include "b2RevoluteJoint.h" #include "b2PrismaticJoint.h" #include "../b2Body.h" #include "../b2World.h" // Gear Joint: // C0 = (coordinate1 + ratio * coordinate2)_initial // C = C0 - (cordinate1 + ratio * coordinate2) = 0 // Cdot = -(Cdot1 + ratio * Cdot2) // J = -[J1 ratio * J2] // K = J * invM * JT // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T // // Revolute: // coordinate = rotation // Cdot = angularVelocity // J = [0 0 1] // K = J * invM * JT = invI // // Prismatic: // coordinate = dot(p - pg, ug) // Cdot = dot(v + cross(w, r), ug) // J = [ug cross(r, ug)] // K = J * invM * JT = invMass + invI * cross(r, ug)^2 b2GearJoint::b2GearJoint(const b2GearJointDef* def) : b2Joint(def) { b2JointType type1 = def->joint1->GetType(); b2JointType type2 = def->joint2->GetType(); b2Assert(type1 == e_revoluteJoint || type1 == e_prismaticJoint); b2Assert(type2 == e_revoluteJoint || type2 == e_prismaticJoint); b2Assert(def->joint1->GetBody1()->IsStatic()); b2Assert(def->joint2->GetBody1()->IsStatic()); m_revolute1 = NULL; m_prismatic1 = NULL; m_revolute2 = NULL; m_prismatic2 = NULL; float32 coordinate1, coordinate2; m_ground1 = def->joint1->GetBody1(); m_body1 = def->joint1->GetBody2(); if (type1 == e_revoluteJoint) { m_revolute1 = (b2RevoluteJoint*)def->joint1; m_groundAnchor1 = m_revolute1->m_localAnchor1; m_localAnchor1 = m_revolute1->m_localAnchor2; coordinate1 = m_revolute1->GetJointAngle(); } else { m_prismatic1 = (b2PrismaticJoint*)def->joint1; m_groundAnchor1 = m_prismatic1->m_localAnchor1; m_localAnchor1 = m_prismatic1->m_localAnchor2; coordinate1 = m_prismatic1->GetJointTranslation(); } m_ground2 = def->joint2->GetBody1(); m_body2 = def->joint2->GetBody2(); if (type2 == e_revoluteJoint) { m_revolute2 = (b2RevoluteJoint*)def->joint2; m_groundAnchor2 = m_revolute2->m_localAnchor1; m_localAnchor2 = m_revolute2->m_localAnchor2; coordinate2 = m_revolute2->GetJointAngle(); } else { m_prismatic2 = (b2PrismaticJoint*)def->joint2; m_groundAnchor2 = m_prismatic2->m_localAnchor1; m_localAnchor2 = m_prismatic2->m_localAnchor2; coordinate2 = m_prismatic2->GetJointTranslation(); } m_ratio = def->ratio; m_constant = coordinate1 + m_ratio * coordinate2; m_force = 0.0f; } void b2GearJoint::InitVelocityConstraints(const b2TimeStep& step) { b2Body* g1 = m_ground1; b2Body* g2 = m_ground2; b2Body* b1 = m_body1; b2Body* b2 = m_body2; float32 K = 0.0f; m_J.SetZero(); if (m_revolute1) { m_J.angular1 = -1.0f; K += b1->m_invI; } else { b2Vec2 ug = b2Mul(g1->GetXForm().R, m_prismatic1->m_localXAxis1); b2Vec2 r = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); float32 crug = b2Cross(r, ug); m_J.linear1 = -ug; m_J.angular1 = -crug; K += b1->m_invMass + b1->m_invI * crug * crug; } if (m_revolute2) { m_J.angular2 = -m_ratio; K += m_ratio * m_ratio * b2->m_invI; } else { b2Vec2 ug = b2Mul(g2->GetXForm().R, m_prismatic2->m_localXAxis1); b2Vec2 r = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); float32 crug = b2Cross(r, ug); m_J.linear2 = -m_ratio * ug; m_J.angular2 = -m_ratio * crug; K += m_ratio * m_ratio * (b2->m_invMass + b2->m_invI * crug * crug); } // Compute effective mass. b2Assert(K > 0.0f); m_mass = 1.0f / K; if (step.warmStarting) { // Warm starting. float32 P = B2FORCE_SCALE(step.dt) * m_force; b1->m_linearVelocity += b1->m_invMass * P * m_J.linear1; b1->m_angularVelocity += b1->m_invI * P * m_J.angular1; b2->m_linearVelocity += b2->m_invMass * P * m_J.linear2; b2->m_angularVelocity += b2->m_invI * P * m_J.angular2; } else { m_force = 0.0f; } } void b2GearJoint::SolveVelocityConstraints(const b2TimeStep& step) { b2Body* b1 = m_body1; b2Body* b2 = m_body2; float32 Cdot = m_J.Compute( b1->m_linearVelocity, b1->m_angularVelocity, b2->m_linearVelocity, b2->m_angularVelocity); float32 force = -B2FORCE_INV_SCALE(step.inv_dt) * m_mass * Cdot; m_force += force; float32 P = B2FORCE_SCALE(step.dt) * force; b1->m_linearVelocity += b1->m_invMass * P * m_J.linear1; b1->m_angularVelocity += b1->m_invI * P * m_J.angular1; b2->m_linearVelocity += b2->m_invMass * P * m_J.linear2; b2->m_angularVelocity += b2->m_invI * P * m_J.angular2; } bool b2GearJoint::SolvePositionConstraints() { float32 linearError = 0.0f; b2Body* b1 = m_body1; b2Body* b2 = m_body2; float32 coordinate1, coordinate2; if (m_revolute1) { coordinate1 = m_revolute1->GetJointAngle(); } else { coordinate1 = m_prismatic1->GetJointTranslation(); } if (m_revolute2) { coordinate2 = m_revolute2->GetJointAngle(); } else { coordinate2 = m_prismatic2->GetJointTranslation(); } float32 C = m_constant - (coordinate1 + m_ratio * coordinate2); float32 impulse = -m_mass * C; b1->m_sweep.c += b1->m_invMass * impulse * m_J.linear1; b1->m_sweep.a += b1->m_invI * impulse * m_J.angular1; b2->m_sweep.c += b2->m_invMass * impulse * m_J.linear2; b2->m_sweep.a += b2->m_invI * impulse * m_J.angular2; b1->SynchronizeTransform(); b2->SynchronizeTransform(); return linearError < b2_linearSlop; } b2Vec2 b2GearJoint::GetAnchor1() const { return m_body1->GetWorldPoint(m_localAnchor1); } b2Vec2 b2GearJoint::GetAnchor2() const { return m_body2->GetWorldPoint(m_localAnchor2); } b2Vec2 b2GearJoint::GetReactionForce() const { // TODO_ERIN not tested b2Vec2 F = B2FORCE_SCALE(m_force) * m_J.linear2; return F; } float32 b2GearJoint::GetReactionTorque() const { // TODO_ERIN not tested b2Vec2 r = b2Mul(m_body2->GetXForm().R, m_localAnchor2 - m_body2->GetLocalCenter()); b2Vec2 F = m_force * m_J.linear2; float32 T = B2FORCE_SCALE(m_force * m_J.angular2 - b2Cross(r, F)); return T; } float32 b2GearJoint::GetRatio() const { return m_ratio; } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2Joint.cpp0000644000175000017500000000652212264274614023602 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Joint.h" #include "b2DistanceJoint.h" #include "b2MouseJoint.h" #include "b2RevoluteJoint.h" #include "b2PrismaticJoint.h" #include "b2PulleyJoint.h" #include "b2GearJoint.h" #include "../b2Body.h" #include "../b2World.h" #include "../../Common/b2BlockAllocator.h" #include "../../Collision/b2BroadPhase.h" #include b2Joint* b2Joint::Create(const b2JointDef* def, b2BlockAllocator* allocator) { b2Joint* joint = NULL; switch (def->type) { case e_distanceJoint: { void* mem = allocator->Allocate(sizeof(b2DistanceJoint)); joint = new (mem) b2DistanceJoint((b2DistanceJointDef*)def); } break; case e_mouseJoint: { void* mem = allocator->Allocate(sizeof(b2MouseJoint)); joint = new (mem) b2MouseJoint((b2MouseJointDef*)def); } break; case e_prismaticJoint: { void* mem = allocator->Allocate(sizeof(b2PrismaticJoint)); joint = new (mem) b2PrismaticJoint((b2PrismaticJointDef*)def); } break; case e_revoluteJoint: { void* mem = allocator->Allocate(sizeof(b2RevoluteJoint)); joint = new (mem) b2RevoluteJoint((b2RevoluteJointDef*)def); } break; case e_pulleyJoint: { void* mem = allocator->Allocate(sizeof(b2PulleyJoint)); joint = new (mem) b2PulleyJoint((b2PulleyJointDef*)def); } break; case e_gearJoint: { void* mem = allocator->Allocate(sizeof(b2GearJoint)); joint = new (mem) b2GearJoint((b2GearJointDef*)def); } break; default: b2Assert(false); break; } return joint; } void b2Joint::Destroy(b2Joint* joint, b2BlockAllocator* allocator) { joint->~b2Joint(); switch (joint->m_type) { case e_distanceJoint: allocator->Free(joint, sizeof(b2DistanceJoint)); break; case e_mouseJoint: allocator->Free(joint, sizeof(b2MouseJoint)); break; case e_prismaticJoint: allocator->Free(joint, sizeof(b2PrismaticJoint)); break; case e_revoluteJoint: allocator->Free(joint, sizeof(b2RevoluteJoint)); break; case e_pulleyJoint: allocator->Free(joint, sizeof(b2PulleyJoint)); break; case e_gearJoint: allocator->Free(joint, sizeof(b2GearJoint)); break; default: b2Assert(false); break; } } b2Joint::b2Joint(const b2JointDef* def) { m_type = def->type; m_prev = NULL; m_next = NULL; m_body1 = def->body1; m_body2 = def->body2; m_collideConnected = def->collideConnected; m_islandFlag = false; m_userData = def->userData; } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp0000644000175000017500000001021512264274614024605 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2MouseJoint.h" #include "../b2Body.h" #include "../b2World.h" // p = attached point, m = mouse point // C = p - m // Cdot = v // = v + cross(w, r) // J = [I r_skew] // Identity used: // w k % (rx i + ry j) = w * (-ry i + rx j) b2MouseJoint::b2MouseJoint(const b2MouseJointDef* def) : b2Joint(def) { m_target = def->target; m_localAnchor = b2MulT(m_body2->GetXForm(), m_target); m_maxForce = B2FORCE_INV_SCALE(def->maxForce); m_impulse.SetZero(); float32 mass = m_body2->m_mass; // Frequency float32 omega = 2.0f * b2_pi * def->frequencyHz; // Damping coefficient float32 d = 2.0f * mass * def->dampingRatio * omega; // Spring stiffness float32 k = (def->timeStep * mass) * (omega * omega); // magic formulas b2Assert(d + k > B2_FLT_EPSILON); m_gamma = 1.0f / (d + k); m_beta = k / (d + k); } void b2MouseJoint::SetTarget(const b2Vec2& target) { if (m_body2->IsSleeping()) { m_body2->WakeUp(); } m_target = target; } void b2MouseJoint::InitVelocityConstraints(const b2TimeStep& step) { b2Body* b = m_body2; // Compute the effective mass matrix. b2Vec2 r = b2Mul(b->GetXForm().R, m_localAnchor - b->GetLocalCenter()); // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) * invI2 * skew(r2)] // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y -r1.x*r1.y] // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x] float32 invMass = b->m_invMass; float32 invI = b->m_invI; b2Mat22 K1; K1.col1.x = invMass; K1.col2.x = 0.0f; K1.col1.y = 0.0f; K1.col2.y = invMass; b2Mat22 K2; K2.col1.x = invI * r.y * r.y; K2.col2.x = -invI * r.x * r.y; K2.col1.y = -invI * r.x * r.y; K2.col2.y = invI * r.x * r.x; b2Mat22 K = K1 + K2; K.col1.x += m_gamma; K.col2.y += m_gamma; m_mass = K.Invert(); m_C = b->m_sweep.c + r - m_target; // Cheat with some damping b->m_angularVelocity *= 0.98f; // Warm starting. b2Vec2 P = B2FORCE_SCALE(step.dt) * m_impulse; b->m_linearVelocity += invMass * P; b->m_angularVelocity += invI * b2Cross(r, P); } void b2MouseJoint::SolveVelocityConstraints(const b2TimeStep& step) { b2Body* b = m_body2; b2Vec2 r = b2Mul(b->GetXForm().R, m_localAnchor - b->GetLocalCenter()); // Cdot = v + cross(w, r) b2Vec2 Cdot = b->m_linearVelocity + b2Cross(b->m_angularVelocity, r); b2Vec2 force = -B2FORCE_INV_SCALE(step.inv_dt) * b2Mul(m_mass, Cdot + (m_beta * step.inv_dt) * m_C + B2FORCE_SCALE(step.dt) * (m_gamma * m_impulse)); b2Vec2 oldForce = m_impulse; m_impulse += force; float32 forceMagnitude = m_impulse.Length(); if (forceMagnitude > m_maxForce) { m_impulse *= m_maxForce / forceMagnitude; } force = m_impulse - oldForce; b2Vec2 P = B2FORCE_SCALE(step.dt) * force; b->m_linearVelocity += b->m_invMass * P; b->m_angularVelocity += b->m_invI * b2Cross(r, P); } b2Vec2 b2MouseJoint::GetAnchor1() const { return m_target; } b2Vec2 b2MouseJoint::GetAnchor2() const { return m_body2->GetWorldPoint(m_localAnchor); } b2Vec2 b2MouseJoint::GetReactionForce() const { return B2FORCE_SCALE(float32(1.0))*m_impulse; } float32 b2MouseJoint::GetReactionTorque() const { return 0.0f; } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2DistanceJoint.h0000644000175000017500000000573712264274614024731 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_DISTANCE_JOINT_H #define B2_DISTANCE_JOINT_H #include "b2Joint.h" /// Distance joint definition. This requires defining an /// anchor point on both bodies and the non-zero length of the /// distance joint. The definition uses local anchor points /// so that the initial configuration can violate the constraint /// slightly. This helps when saving and loading a game. /// @warning Do not use a zero or short length. struct b2DistanceJointDef : public b2JointDef { b2DistanceJointDef() { type = e_distanceJoint; localAnchor1.Set(0.0f, 0.0f); localAnchor2.Set(0.0f, 0.0f); length = 1.0f; frequencyHz = 0.0f; dampingRatio = 0.0f; } /// Initialize the bodies, anchors, and length using the world /// anchors. void Initialize(b2Body* body1, b2Body* body2, const b2Vec2& anchor1, const b2Vec2& anchor2); /// The local anchor point relative to body1's origin. b2Vec2 localAnchor1; /// The local anchor point relative to body2's origin. b2Vec2 localAnchor2; /// The equilibrium length between the anchor points. float32 length; /// The response speed. float32 frequencyHz; /// The damping ratio. 0 = no damping, 1 = critical damping. float32 dampingRatio; }; /// A distance joint constrains two points on two bodies /// to remain at a fixed distance from each other. You can view /// this as a massless, rigid rod. class b2DistanceJoint : public b2Joint { public: b2Vec2 GetAnchor1() const; b2Vec2 GetAnchor2() const; b2Vec2 GetReactionForce() const; float32 GetReactionTorque() const; //--------------- Internals Below ------------------- b2DistanceJoint(const b2DistanceJointDef* data); void InitVelocityConstraints(const b2TimeStep& step); void SolveVelocityConstraints(const b2TimeStep& step); bool SolvePositionConstraints(); b2Vec2 m_localAnchor1; b2Vec2 m_localAnchor2; b2Vec2 m_u; float32 m_frequencyHz; float32 m_dampingRatio; float32 m_gamma; float32 m_bias; float32 m_impulse; float32 m_mass; // effective mass for the constraint. float32 m_length; }; #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2RevoluteJoint.h0000644000175000017500000001253012264274614024771 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_REVOLUTE_JOINT_H #define B2_REVOLUTE_JOINT_H #include "b2Joint.h" /// Revolute joint definition. This requires defining an /// anchor point where the bodies are joined. The definition /// uses local anchor points so that the initial configuration /// can violate the constraint slightly. You also need to /// specify the initial relative angle for joint limits. This /// helps when saving and loading a game. /// The local anchor points are measured from the body's origin /// rather than the center of mass because: /// 1. you might not know where the center of mass will be. /// 2. if you add/remove shapes from a body and recompute the mass, /// the joints will be broken. struct b2RevoluteJointDef : public b2JointDef { b2RevoluteJointDef() { type = e_revoluteJoint; localAnchor1.Set(0.0f, 0.0f); localAnchor2.Set(0.0f, 0.0f); referenceAngle = 0.0f; lowerAngle = 0.0f; upperAngle = 0.0f; maxMotorTorque = 0.0f; motorSpeed = 0.0f; enableLimit = false; enableMotor = false; } /// Initialize the bodies, anchors, and reference angle using the world /// anchor. void Initialize(b2Body* body1, b2Body* body2, const b2Vec2& anchor); /// The local anchor point relative to body1's origin. b2Vec2 localAnchor1; /// The local anchor point relative to body2's origin. b2Vec2 localAnchor2; /// The body2 angle minus body1 angle in the reference state (radians). float32 referenceAngle; /// A flag to enable joint limits. bool enableLimit; /// The lower angle for the joint limit (radians). float32 lowerAngle; /// The upper angle for the joint limit (radians). float32 upperAngle; /// A flag to enable the joint motor. bool enableMotor; /// The desired motor speed. Usually in radians per second. float32 motorSpeed; /// The maximum motor torque used to achieve the desired motor speed. /// Usually in N-m. float32 maxMotorTorque; }; /// A revolute joint constrains to bodies to share a common point while they /// are free to rotate about the point. The relative rotation about the shared /// point is the joint angle. You can limit the relative rotation with /// a joint limit that specifies a lower and upper angle. You can use a motor /// to drive the relative rotation about the shared point. A maximum motor torque /// is provided so that infinite forces are not generated. class b2RevoluteJoint : public b2Joint { public: b2Vec2 GetAnchor1() const; b2Vec2 GetAnchor2() const; b2Vec2 GetReactionForce() const; float32 GetReactionTorque() const; /// Get the current joint angle in radians. float32 GetJointAngle() const; /// Get the current joint angle speed in radians per second. float32 GetJointSpeed() const; /// Is the joint limit enabled? bool IsLimitEnabled() const; /// Enable/disable the joint limit. void EnableLimit(bool flag); /// Get the lower joint limit in radians. float32 GetLowerLimit() const; /// Get the upper joint limit in radians. float32 GetUpperLimit() const; /// Set the joint limits in radians. void SetLimits(float32 lower, float32 upper); /// Is the joint motor enabled? bool IsMotorEnabled() const; /// Enable/disable the joint motor. void EnableMotor(bool flag); /// Set the motor speed in radians per second. void SetMotorSpeed(float32 speed); /// Get the motor speed in radians per second. float32 GetMotorSpeed() const; /// Set the maximum motor torque, usually in N-m. void SetMaxMotorTorque(float32 torque); /// Get the current motor torque, usually in N-m. float32 GetMotorTorque() const; //--------------- Internals Below ------------------- b2RevoluteJoint(const b2RevoluteJointDef* def); void InitVelocityConstraints(const b2TimeStep& step); void SolveVelocityConstraints(const b2TimeStep& step); bool SolvePositionConstraints(); b2Vec2 m_localAnchor1; // relative b2Vec2 m_localAnchor2; b2Vec2 m_pivotForce; float32 m_motorForce; float32 m_limitForce; float32 m_limitPositionImpulse; b2Mat22 m_pivotMass; // effective mass for point-to-point constraint. float32 m_motorMass; // effective mass for motor/limit angular constraint. bool m_enableMotor; float32 m_maxMotorTorque; float32 m_motorSpeed; bool m_enableLimit; float32 m_referenceAngle; float32 m_lowerAngle; float32 m_upperAngle; b2LimitState m_limitState; }; inline float32 b2RevoluteJoint::GetMotorSpeed() const { return m_motorSpeed; } #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2PrismaticJoint.h0000644000175000017500000001252312264274614025121 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_PRISMATIC_JOINT_H #define B2_PRISMATIC_JOINT_H #include "b2Joint.h" /// Prismatic joint definition. This requires defining a line of /// motion using an axis and an anchor point. The definition uses local /// anchor points and a local axis so that the initial configuration /// can violate the constraint slightly. The joint translation is zero /// when the local anchor points coincide in world space. Using local /// anchors and a local axis helps when saving and loading a game. struct b2PrismaticJointDef : public b2JointDef { b2PrismaticJointDef() { type = e_prismaticJoint; localAnchor1.SetZero(); localAnchor2.SetZero(); localAxis1.Set(1.0f, 0.0f); referenceAngle = 0.0f; enableLimit = false; lowerTranslation = 0.0f; upperTranslation = 0.0f; enableMotor = false; maxMotorForce = 0.0f; motorSpeed = 0.0f; } /// Initialize the bodies, anchors, axis, and reference angle using the world /// anchor and world axis. void Initialize(b2Body* body1, b2Body* body2, const b2Vec2& anchor, const b2Vec2& axis); /// The local anchor point relative to body1's origin. b2Vec2 localAnchor1; /// The local anchor point relative to body2's origin. b2Vec2 localAnchor2; /// The local translation axis in body1. b2Vec2 localAxis1; /// The constrained angle between the bodies: body2_angle - body1_angle. float32 referenceAngle; /// Enable/disable the joint limit. bool enableLimit; /// The lower translation limit, usually in meters. float32 lowerTranslation; /// The upper translation limit, usually in meters. float32 upperTranslation; /// Enable/disable the joint motor. bool enableMotor; /// The maximum motor torque, usually in N-m. float32 maxMotorForce; /// The desired motor speed in radians per second. float32 motorSpeed; }; /// A prismatic joint. This joint provides one degree of freedom: translation /// along an axis fixed in body1. Relative rotation is prevented. You can /// use a joint limit to restrict the range of motion and a joint motor to /// drive the motion or to model joint friction. class b2PrismaticJoint : public b2Joint { public: b2Vec2 GetAnchor1() const; b2Vec2 GetAnchor2() const; b2Vec2 GetReactionForce() const; float32 GetReactionTorque() const; /// Get the current joint translation, usually in meters. float32 GetJointTranslation() const; /// Get the current joint translation speed, usually in meters per second. float32 GetJointSpeed() const; /// Is the joint limit enabled? bool IsLimitEnabled() const; /// Enable/disable the joint limit. void EnableLimit(bool flag); /// Get the lower joint limit, usually in meters. float32 GetLowerLimit() const; /// Get the upper joint limit, usually in meters. float32 GetUpperLimit() const; /// Set the joint limits, usually in meters. void SetLimits(float32 lower, float32 upper); /// Is the joint motor enabled? bool IsMotorEnabled() const; /// Enable/disable the joint motor. void EnableMotor(bool flag); /// Set the motor speed, usually in meters per second. void SetMotorSpeed(float32 speed); /// Get the motor speed, usually in meters per second. float32 GetMotorSpeed() const; /// Set the maximum motor force, usually in N. void SetMaxMotorForce(float32 force); /// Get the current motor force, usually in N. float32 GetMotorForce() const; //--------------- Internals Below ------------------- b2PrismaticJoint(const b2PrismaticJointDef* def); void InitVelocityConstraints(const b2TimeStep& step); void SolveVelocityConstraints(const b2TimeStep& step); bool SolvePositionConstraints(); b2Vec2 m_localAnchor1; b2Vec2 m_localAnchor2; b2Vec2 m_localXAxis1; b2Vec2 m_localYAxis1; float32 m_refAngle; b2Jacobian m_linearJacobian; float32 m_linearMass; // effective mass for point-to-line constraint. float32 m_force; float32 m_angularMass; // effective mass for angular constraint. float32 m_torque; b2Jacobian m_motorJacobian; float32 m_motorMass; // effective mass for motor/limit translational constraint. float32 m_motorForce; float32 m_limitForce; float32 m_limitPositionImpulse; float32 m_lowerTranslation; float32 m_upperTranslation; float32 m_maxMotorForce; float32 m_motorSpeed; bool m_enableLimit; bool m_enableMotor; b2LimitState m_limitState; }; inline float32 b2PrismaticJoint::GetMotorSpeed() const { return m_motorSpeed; } #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2Joint.h0000644000175000017500000001261212264274614023244 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef JOINT_H #define JOINT_H #include "../../Common/b2Math.h" class b2Body; class b2Joint; struct b2TimeStep; class b2BlockAllocator; enum b2JointType { e_unknownJoint, e_revoluteJoint, e_prismaticJoint, e_distanceJoint, e_pulleyJoint, e_mouseJoint, e_gearJoint }; enum b2LimitState { e_inactiveLimit, e_atLowerLimit, e_atUpperLimit, e_equalLimits }; struct b2Jacobian { b2Vec2 linear1; float32 angular1; b2Vec2 linear2; float32 angular2; void SetZero(); void Set(const b2Vec2& x1, float32 a1, const b2Vec2& x2, float32 a2); float32 Compute(const b2Vec2& x1, float32 a1, const b2Vec2& x2, float32 a2); }; /// A joint edge is used to connect bodies and joints together /// in a joint graph where each body is a node and each joint /// is an edge. A joint edge belongs to a doubly linked list /// maintained in each attached body. Each joint has two joint /// nodes, one for each attached body. struct b2JointEdge { b2Body* other; ///< provides quick access to the other body attached. b2Joint* joint; ///< the joint b2JointEdge* prev; ///< the previous joint edge in the body's joint list b2JointEdge* next; ///< the next joint edge in the body's joint list }; /// Joint definitions are used to construct joints. struct b2JointDef { b2JointDef() { type = e_unknownJoint; userData = NULL; body1 = NULL; body2 = NULL; collideConnected = false; } /// The joint type is set automatically for concrete joint types. b2JointType type; /// Use this to attach application specific data to your joints. void* userData; /// The first attached body. b2Body* body1; /// The second attached body. b2Body* body2; /// Set this flag to true if the attached bodies should collide. bool collideConnected; }; /// The base joint class. Joints are used to constraint two bodies together in /// various fashions. Some joints also feature limits and motors. class b2Joint { public: /// Get the type of the concrete joint. b2JointType GetType() const; /// Get the first body attached to this joint. b2Body* GetBody1(); /// Get the second body attached to this joint. b2Body* GetBody2(); /// Get the anchor point on body1 in world coordinates. virtual b2Vec2 GetAnchor1() const = 0; /// Get the anchor point on body2 in world coordinates. virtual b2Vec2 GetAnchor2() const = 0; /// Get the reaction force on body2 at the joint anchor. virtual b2Vec2 GetReactionForce() const = 0; /// Get the reaction torque on body2. virtual float32 GetReactionTorque() const = 0; /// Get the next joint the world joint list. b2Joint* GetNext(); /// Get the user data pointer. void* GetUserData(); /// Set the user data pointer. void SetUserData(void* data); //--------------- Internals Below ------------------- protected: friend class b2World; friend class b2Body; friend class b2Island; static b2Joint* Create(const b2JointDef* def, b2BlockAllocator* allocator); static void Destroy(b2Joint* joint, b2BlockAllocator* allocator); b2Joint(const b2JointDef* def); virtual ~b2Joint() {} virtual void InitVelocityConstraints(const b2TimeStep& step) = 0; virtual void SolveVelocityConstraints(const b2TimeStep& step) = 0; // This returns true if the position errors are within tolerance. virtual void InitPositionConstraints() {} virtual bool SolvePositionConstraints() = 0; b2JointType m_type; b2Joint* m_prev; b2Joint* m_next; b2JointEdge m_node1; b2JointEdge m_node2; b2Body* m_body1; b2Body* m_body2; float32 m_inv_dt; bool m_islandFlag; bool m_collideConnected; void* m_userData; }; inline void b2Jacobian::SetZero() { linear1.SetZero(); angular1 = 0.0f; linear2.SetZero(); angular2 = 0.0f; } inline void b2Jacobian::Set(const b2Vec2& x1, float32 a1, const b2Vec2& x2, float32 a2) { linear1 = x1; angular1 = a1; linear2 = x2; angular2 = a2; } inline float32 b2Jacobian::Compute(const b2Vec2& x1, float32 a1, const b2Vec2& x2, float32 a2) { return b2Dot(linear1, x1) + angular1 * a1 + b2Dot(linear2, x2) + angular2 * a2; } inline b2JointType b2Joint::GetType() const { return m_type; } inline b2Body* b2Joint::GetBody1() { return m_body1; } inline b2Body* b2Joint::GetBody2() { return m_body2; } inline b2Joint* b2Joint::GetNext() { return m_next; } inline void* b2Joint::GetUserData() { return m_userData; } inline void b2Joint::SetUserData(void* data) { m_userData = data; } #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp0000644000175000017500000001330112264274614025246 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2DistanceJoint.h" #include "../b2Body.h" #include "../b2World.h" // 1-D constrained system // m (v2 - v1) = lambda // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass. // x2 = x1 + h * v2 // 1-D mass-damper-spring system // m (v2 - v1) + h * d * v2 + h * k * // C = norm(p2 - p1) - L // u = (p2 - p1) / norm(p2 - p1) // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1)) // J = [-u -cross(r1, u) u cross(r2, u)] // K = J * invM * JT // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2 void b2DistanceJointDef::Initialize(b2Body* b1, b2Body* b2, const b2Vec2& anchor1, const b2Vec2& anchor2) { body1 = b1; body2 = b2; localAnchor1 = body1->GetLocalPoint(anchor1); localAnchor2 = body2->GetLocalPoint(anchor2); b2Vec2 d = anchor2 - anchor1; length = d.Length(); } b2DistanceJoint::b2DistanceJoint(const b2DistanceJointDef* def) : b2Joint(def) { m_localAnchor1 = def->localAnchor1; m_localAnchor2 = def->localAnchor2; m_length = def->length; m_frequencyHz = def->frequencyHz; m_dampingRatio = def->dampingRatio; m_impulse = 0.0f; m_gamma = 0.0f; m_bias = 0.0f; m_inv_dt = 0.0f; } void b2DistanceJoint::InitVelocityConstraints(const b2TimeStep& step) { m_inv_dt = step.inv_dt; b2Body* b1 = m_body1; b2Body* b2 = m_body2; // Compute the effective mass matrix. b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); m_u = b2->m_sweep.c + r2 - b1->m_sweep.c - r1; // Handle singularity. float32 length = m_u.Length(); if (length > b2_linearSlop) { m_u *= 1.0f / length; } else { m_u.Set(0.0f, 0.0f); } float32 cr1u = b2Cross(r1, m_u); float32 cr2u = b2Cross(r2, m_u); float32 invMass = b1->m_invMass + b1->m_invI * cr1u * cr1u + b2->m_invMass + b2->m_invI * cr2u * cr2u; b2Assert(invMass > B2_FLT_EPSILON); m_mass = 1.0f / invMass; if (m_frequencyHz > 0.0f) { float32 C = length - m_length; // Frequency float32 omega = 2.0f * b2_pi * m_frequencyHz; // Damping coefficient float32 d = 2.0f * m_mass * m_dampingRatio * omega; // Spring stiffness float32 k = m_mass * omega * omega; // magic formulas m_gamma = 1.0f / (step.dt * (d + step.dt * k)); m_bias = C * step.dt * k * m_gamma; m_mass = 1.0f / (invMass + m_gamma); } if (step.warmStarting) { m_impulse *= step.dtRatio; b2Vec2 P = m_impulse * m_u; b1->m_linearVelocity -= b1->m_invMass * P; b1->m_angularVelocity -= b1->m_invI * b2Cross(r1, P); b2->m_linearVelocity += b2->m_invMass * P; b2->m_angularVelocity += b2->m_invI * b2Cross(r2, P); } else { m_impulse = 0.0f; } } void b2DistanceJoint::SolveVelocityConstraints(const b2TimeStep& step) { B2_NOT_USED(step); b2Body* b1 = m_body1; b2Body* b2 = m_body2; b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); // Cdot = dot(u, v + cross(w, r)) b2Vec2 v1 = b1->m_linearVelocity + b2Cross(b1->m_angularVelocity, r1); b2Vec2 v2 = b2->m_linearVelocity + b2Cross(b2->m_angularVelocity, r2); float32 Cdot = b2Dot(m_u, v2 - v1); float32 impulse = -m_mass * (Cdot + m_bias + m_gamma * m_impulse); m_impulse += impulse; b2Vec2 P = impulse * m_u; b1->m_linearVelocity -= b1->m_invMass * P; b1->m_angularVelocity -= b1->m_invI * b2Cross(r1, P); b2->m_linearVelocity += b2->m_invMass * P; b2->m_angularVelocity += b2->m_invI * b2Cross(r2, P); } bool b2DistanceJoint::SolvePositionConstraints() { if (m_frequencyHz > 0.0f) { return true; } b2Body* b1 = m_body1; b2Body* b2 = m_body2; b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); b2Vec2 d = b2->m_sweep.c + r2 - b1->m_sweep.c - r1; float32 length = d.Normalize(); float32 C = length - m_length; C = b2Clamp(C, -b2_maxLinearCorrection, b2_maxLinearCorrection); float32 impulse = -m_mass * C; m_u = d; b2Vec2 P = impulse * m_u; b1->m_sweep.c -= b1->m_invMass * P; b1->m_sweep.a -= b1->m_invI * b2Cross(r1, P); b2->m_sweep.c += b2->m_invMass * P; b2->m_sweep.a += b2->m_invI * b2Cross(r2, P); b1->SynchronizeTransform(); b2->SynchronizeTransform(); return b2Abs(C) < b2_linearSlop; } b2Vec2 b2DistanceJoint::GetAnchor1() const { return m_body1->GetWorldPoint(m_localAnchor1); } b2Vec2 b2DistanceJoint::GetAnchor2() const { return m_body2->GetWorldPoint(m_localAnchor2); } b2Vec2 b2DistanceJoint::GetReactionForce() const { b2Vec2 F = (m_inv_dt * m_impulse) * m_u; return F; } float32 b2DistanceJoint::GetReactionTorque() const { return 0.0f; } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp0000644000175000017500000003670612264274614025465 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2PrismaticJoint.h" #include "../b2Body.h" #include "../b2World.h" // Linear constraint (point-to-line) // d = p2 - p1 = x2 + r2 - x1 - r1 // C = dot(ay1, d) // Cdot = dot(d, cross(w1, ay1)) + dot(ay1, v2 + cross(w2, r2) - v1 - cross(w1, r1)) // = -dot(ay1, v1) - dot(cross(d + r1, ay1), w1) + dot(ay1, v2) + dot(cross(r2, ay1), v2) // J = [-ay1 -cross(d+r1,ay1) ay1 cross(r2,ay1)] // // Angular constraint // C = a2 - a1 + a_initial // Cdot = w2 - w1 // J = [0 0 -1 0 0 1] // Motor/Limit linear constraint // C = dot(ax1, d) // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) + dot(cross(r2, ax1), v2) // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)] void b2PrismaticJointDef::Initialize(b2Body* b1, b2Body* b2, const b2Vec2& anchor, const b2Vec2& axis) { body1 = b1; body2 = b2; localAnchor1 = body1->GetLocalPoint(anchor); localAnchor2 = body2->GetLocalPoint(anchor); localAxis1 = body1->GetLocalVector(axis); referenceAngle = body2->GetAngle() - body1->GetAngle(); } b2PrismaticJoint::b2PrismaticJoint(const b2PrismaticJointDef* def) : b2Joint(def) { m_localAnchor1 = def->localAnchor1; m_localAnchor2 = def->localAnchor2; m_localXAxis1 = def->localAxis1; m_localYAxis1 = b2Cross(1.0f, m_localXAxis1); m_refAngle = def->referenceAngle; m_linearJacobian.SetZero(); m_linearMass = 0.0f; m_force = 0.0f; m_angularMass = 0.0f; m_torque = 0.0f; m_motorJacobian.SetZero(); m_motorMass = 0.0; m_motorForce = 0.0f; m_limitForce = 0.0f; m_limitPositionImpulse = 0.0f; m_lowerTranslation = def->lowerTranslation; m_upperTranslation = def->upperTranslation; m_maxMotorForce = B2FORCE_INV_SCALE(def->maxMotorForce); m_motorSpeed = def->motorSpeed; m_enableLimit = def->enableLimit; m_enableMotor = def->enableMotor; } void b2PrismaticJoint::InitVelocityConstraints(const b2TimeStep& step) { b2Body* b1 = m_body1; b2Body* b2 = m_body2; // Compute the effective masses. b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); float32 invMass1 = b1->m_invMass, invMass2 = b2->m_invMass; float32 invI1 = b1->m_invI, invI2 = b2->m_invI; // Compute point to line constraint effective mass. // J = [-ay1 -cross(d+r1,ay1) ay1 cross(r2,ay1)] b2Vec2 ay1 = b2Mul(b1->GetXForm().R, m_localYAxis1); b2Vec2 e = b2->m_sweep.c + r2 - b1->m_sweep.c; // e = d + r1 m_linearJacobian.Set(-ay1, -b2Cross(e, ay1), ay1, b2Cross(r2, ay1)); m_linearMass = invMass1 + invI1 * m_linearJacobian.angular1 * m_linearJacobian.angular1 + invMass2 + invI2 * m_linearJacobian.angular2 * m_linearJacobian.angular2; b2Assert(m_linearMass > B2_FLT_EPSILON); m_linearMass = 1.0f / m_linearMass; // Compute angular constraint effective mass. m_angularMass = invI1 + invI2; if (m_angularMass > B2_FLT_EPSILON) { m_angularMass = 1.0f / m_angularMass; } // Compute motor and limit terms. if (m_enableLimit || m_enableMotor) { // The motor and limit share a Jacobian and effective mass. b2Vec2 ax1 = b2Mul(b1->GetXForm().R, m_localXAxis1); m_motorJacobian.Set(-ax1, -b2Cross(e, ax1), ax1, b2Cross(r2, ax1)); m_motorMass = invMass1 + invI1 * m_motorJacobian.angular1 * m_motorJacobian.angular1 + invMass2 + invI2 * m_motorJacobian.angular2 * m_motorJacobian.angular2; b2Assert(m_motorMass > B2_FLT_EPSILON); m_motorMass = 1.0f / m_motorMass; if (m_enableLimit) { b2Vec2 d = e - r1; // p2 - p1 float32 jointTranslation = b2Dot(ax1, d); if (b2Abs(m_upperTranslation - m_lowerTranslation) < 2.0f * b2_linearSlop) { m_limitState = e_equalLimits; } else if (jointTranslation <= m_lowerTranslation) { if (m_limitState != e_atLowerLimit) { m_limitForce = 0.0f; } m_limitState = e_atLowerLimit; } else if (jointTranslation >= m_upperTranslation) { if (m_limitState != e_atUpperLimit) { m_limitForce = 0.0f; } m_limitState = e_atUpperLimit; } else { m_limitState = e_inactiveLimit; m_limitForce = 0.0f; } } } if (m_enableMotor == false) { m_motorForce = 0.0f; } if (m_enableLimit == false) { m_limitForce = 0.0f; } if (step.warmStarting) { b2Vec2 P1 = B2FORCE_SCALE(step.dt) * (m_force * m_linearJacobian.linear1 + (m_motorForce + m_limitForce) * m_motorJacobian.linear1); b2Vec2 P2 = B2FORCE_SCALE(step.dt) * (m_force * m_linearJacobian.linear2 + (m_motorForce + m_limitForce) * m_motorJacobian.linear2); float32 L1 = B2FORCE_SCALE(step.dt) * (m_force * m_linearJacobian.angular1 - m_torque + (m_motorForce + m_limitForce) * m_motorJacobian.angular1); float32 L2 = B2FORCE_SCALE(step.dt) * (m_force * m_linearJacobian.angular2 + m_torque + (m_motorForce + m_limitForce) * m_motorJacobian.angular2); b1->m_linearVelocity += invMass1 * P1; b1->m_angularVelocity += invI1 * L1; b2->m_linearVelocity += invMass2 * P2; b2->m_angularVelocity += invI2 * L2; } else { m_force = 0.0f; m_torque = 0.0f; m_limitForce = 0.0f; m_motorForce = 0.0f; } m_limitPositionImpulse = 0.0f; } void b2PrismaticJoint::SolveVelocityConstraints(const b2TimeStep& step) { b2Body* b1 = m_body1; b2Body* b2 = m_body2; float32 invMass1 = b1->m_invMass, invMass2 = b2->m_invMass; float32 invI1 = b1->m_invI, invI2 = b2->m_invI; // Solve linear constraint. float32 linearCdot = m_linearJacobian.Compute(b1->m_linearVelocity, b1->m_angularVelocity, b2->m_linearVelocity, b2->m_angularVelocity); float32 force = -B2FORCE_INV_SCALE(step.inv_dt) * m_linearMass * linearCdot; m_force += force; float32 P = B2FORCE_SCALE(step.dt) * force; b1->m_linearVelocity += (invMass1 * P) * m_linearJacobian.linear1; b1->m_angularVelocity += invI1 * P * m_linearJacobian.angular1; b2->m_linearVelocity += (invMass2 * P) * m_linearJacobian.linear2; b2->m_angularVelocity += invI2 * P * m_linearJacobian.angular2; // Solve angular constraint. float32 angularCdot = b2->m_angularVelocity - b1->m_angularVelocity; float32 torque = -B2FORCE_INV_SCALE(step.inv_dt) * m_angularMass * angularCdot; m_torque += torque; float32 L = B2FORCE_SCALE(step.dt) * torque; b1->m_angularVelocity -= invI1 * L; b2->m_angularVelocity += invI2 * L; // Solve linear motor constraint. if (m_enableMotor && m_limitState != e_equalLimits) { float32 motorCdot = m_motorJacobian.Compute(b1->m_linearVelocity, b1->m_angularVelocity, b2->m_linearVelocity, b2->m_angularVelocity) - m_motorSpeed; float32 motorForce = -B2FORCE_INV_SCALE(step.inv_dt) * m_motorMass * motorCdot; float32 oldMotorForce = m_motorForce; m_motorForce = b2Clamp(m_motorForce + motorForce, -m_maxMotorForce, m_maxMotorForce); motorForce = m_motorForce - oldMotorForce; float32 P = B2FORCE_SCALE(step.dt) * motorForce; b1->m_linearVelocity += (invMass1 * P) * m_motorJacobian.linear1; b1->m_angularVelocity += invI1 * P * m_motorJacobian.angular1; b2->m_linearVelocity += (invMass2 * P) * m_motorJacobian.linear2; b2->m_angularVelocity += invI2 * P * m_motorJacobian.angular2; } // Solve linear limit constraint. if (m_enableLimit && m_limitState != e_inactiveLimit) { float32 limitCdot = m_motorJacobian.Compute(b1->m_linearVelocity, b1->m_angularVelocity, b2->m_linearVelocity, b2->m_angularVelocity); float32 limitForce = -B2FORCE_INV_SCALE(step.inv_dt) * m_motorMass * limitCdot; if (m_limitState == e_equalLimits) { m_limitForce += limitForce; } else if (m_limitState == e_atLowerLimit) { float32 oldLimitForce = m_limitForce; m_limitForce = b2Max(m_limitForce + limitForce, 0.0f); limitForce = m_limitForce - oldLimitForce; } else if (m_limitState == e_atUpperLimit) { float32 oldLimitForce = m_limitForce; m_limitForce = b2Min(m_limitForce + limitForce, 0.0f); limitForce = m_limitForce - oldLimitForce; } float32 P = B2FORCE_SCALE(step.dt) * limitForce; b1->m_linearVelocity += (invMass1 * P) * m_motorJacobian.linear1; b1->m_angularVelocity += invI1 * P * m_motorJacobian.angular1; b2->m_linearVelocity += (invMass2 * P) * m_motorJacobian.linear2; b2->m_angularVelocity += invI2 * P * m_motorJacobian.angular2; } } bool b2PrismaticJoint::SolvePositionConstraints() { b2Body* b1 = m_body1; b2Body* b2 = m_body2; float32 invMass1 = b1->m_invMass, invMass2 = b2->m_invMass; float32 invI1 = b1->m_invI, invI2 = b2->m_invI; b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); b2Vec2 p1 = b1->m_sweep.c + r1; b2Vec2 p2 = b2->m_sweep.c + r2; b2Vec2 d = p2 - p1; b2Vec2 ay1 = b2Mul(b1->GetXForm().R, m_localYAxis1); // Solve linear (point-to-line) constraint. float32 linearC = b2Dot(ay1, d); // Prevent overly large corrections. linearC = b2Clamp(linearC, -b2_maxLinearCorrection, b2_maxLinearCorrection); float32 linearImpulse = -m_linearMass * linearC; b1->m_sweep.c += (invMass1 * linearImpulse) * m_linearJacobian.linear1; b1->m_sweep.a += invI1 * linearImpulse * m_linearJacobian.angular1; //b1->SynchronizeTransform(); // updated by angular constraint b2->m_sweep.c += (invMass2 * linearImpulse) * m_linearJacobian.linear2; b2->m_sweep.a += invI2 * linearImpulse * m_linearJacobian.angular2; //b2->SynchronizeTransform(); // updated by angular constraint float32 positionError = b2Abs(linearC); // Solve angular constraint. float32 angularC = b2->m_sweep.a - b1->m_sweep.a - m_refAngle; // Prevent overly large corrections. angularC = b2Clamp(angularC, -b2_maxAngularCorrection, b2_maxAngularCorrection); float32 angularImpulse = -m_angularMass * angularC; b1->m_sweep.a -= b1->m_invI * angularImpulse; b2->m_sweep.a += b2->m_invI * angularImpulse; b1->SynchronizeTransform(); b2->SynchronizeTransform(); float32 angularError = b2Abs(angularC); // Solve linear limit constraint. if (m_enableLimit && m_limitState != e_inactiveLimit) { b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); b2Vec2 p1 = b1->m_sweep.c + r1; b2Vec2 p2 = b2->m_sweep.c + r2; b2Vec2 d = p2 - p1; b2Vec2 ax1 = b2Mul(b1->GetXForm().R, m_localXAxis1); float32 translation = b2Dot(ax1, d); float32 limitImpulse = 0.0f; if (m_limitState == e_equalLimits) { // Prevent large angular corrections float32 limitC = b2Clamp(translation, -b2_maxLinearCorrection, b2_maxLinearCorrection); limitImpulse = -m_motorMass * limitC; positionError = b2Max(positionError, b2Abs(angularC)); } else if (m_limitState == e_atLowerLimit) { float32 limitC = translation - m_lowerTranslation; positionError = b2Max(positionError, -limitC); // Prevent large linear corrections and allow some slop. limitC = b2Clamp(limitC + b2_linearSlop, -b2_maxLinearCorrection, 0.0f); limitImpulse = -m_motorMass * limitC; float32 oldLimitImpulse = m_limitPositionImpulse; m_limitPositionImpulse = b2Max(m_limitPositionImpulse + limitImpulse, 0.0f); limitImpulse = m_limitPositionImpulse - oldLimitImpulse; } else if (m_limitState == e_atUpperLimit) { float32 limitC = translation - m_upperTranslation; positionError = b2Max(positionError, limitC); // Prevent large linear corrections and allow some slop. limitC = b2Clamp(limitC - b2_linearSlop, 0.0f, b2_maxLinearCorrection); limitImpulse = -m_motorMass * limitC; float32 oldLimitImpulse = m_limitPositionImpulse; m_limitPositionImpulse = b2Min(m_limitPositionImpulse + limitImpulse, 0.0f); limitImpulse = m_limitPositionImpulse - oldLimitImpulse; } b1->m_sweep.c += (invMass1 * limitImpulse) * m_motorJacobian.linear1; b1->m_sweep.a += invI1 * limitImpulse * m_motorJacobian.angular1; b2->m_sweep.c += (invMass2 * limitImpulse) * m_motorJacobian.linear2; b2->m_sweep.a += invI2 * limitImpulse * m_motorJacobian.angular2; b1->SynchronizeTransform(); b2->SynchronizeTransform(); } return positionError <= b2_linearSlop && angularError <= b2_angularSlop; } b2Vec2 b2PrismaticJoint::GetAnchor1() const { return m_body1->GetWorldPoint(m_localAnchor1); } b2Vec2 b2PrismaticJoint::GetAnchor2() const { return m_body2->GetWorldPoint(m_localAnchor2); } b2Vec2 b2PrismaticJoint::GetReactionForce() const { b2Vec2 ax1 = b2Mul(m_body1->GetXForm().R, m_localXAxis1); b2Vec2 ay1 = b2Mul(m_body1->GetXForm().R, m_localYAxis1); return B2FORCE_SCALE(float32(1.0))*(m_limitForce * ax1 + m_force * ay1); } float32 b2PrismaticJoint::GetReactionTorque() const { return B2FORCE_SCALE(m_torque); } float32 b2PrismaticJoint::GetJointTranslation() const { b2Body* b1 = m_body1; b2Body* b2 = m_body2; b2Vec2 p1 = b1->GetWorldPoint(m_localAnchor1); b2Vec2 p2 = b2->GetWorldPoint(m_localAnchor2); b2Vec2 d = p2 - p1; b2Vec2 axis = b1->GetWorldVector(m_localXAxis1); float32 translation = b2Dot(d, axis); return translation; } float32 b2PrismaticJoint::GetJointSpeed() const { b2Body* b1 = m_body1; b2Body* b2 = m_body2; b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); b2Vec2 p1 = b1->m_sweep.c + r1; b2Vec2 p2 = b2->m_sweep.c + r2; b2Vec2 d = p2 - p1; b2Vec2 axis = b1->GetWorldVector(m_localXAxis1); b2Vec2 v1 = b1->m_linearVelocity; b2Vec2 v2 = b2->m_linearVelocity; float32 w1 = b1->m_angularVelocity; float32 w2 = b2->m_angularVelocity; float32 speed = b2Dot(d, b2Cross(w1, axis)) + b2Dot(axis, v2 + b2Cross(w2, r2) - v1 - b2Cross(w1, r1)); return speed; } bool b2PrismaticJoint::IsLimitEnabled() const { return m_enableLimit; } void b2PrismaticJoint::EnableLimit(bool flag) { m_enableLimit = flag; } float32 b2PrismaticJoint::GetLowerLimit() const { return m_lowerTranslation; } float32 b2PrismaticJoint::GetUpperLimit() const { return m_upperTranslation; } void b2PrismaticJoint::SetLimits(float32 lower, float32 upper) { b2Assert(lower <= upper); m_lowerTranslation = lower; m_upperTranslation = upper; } bool b2PrismaticJoint::IsMotorEnabled() const { return m_enableMotor; } void b2PrismaticJoint::EnableMotor(bool flag) { m_enableMotor = flag; } void b2PrismaticJoint::SetMotorSpeed(float32 speed) { m_motorSpeed = speed; } void b2PrismaticJoint::SetMaxMotorForce(float32 force) { m_maxMotorForce = B2FORCE_SCALE(float32(1.0))*force; } float32 b2PrismaticJoint::GetMotorForce() const { return m_motorForce; } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2PulleyJoint.h0000644000175000017500000001066512264274614024445 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_PULLEY_JOINT_H #define B2_PULLEY_JOINT_H #include "b2Joint.h" const float32 b2_minPulleyLength = 2.0f; /// Pulley joint definition. This requires two ground anchors, /// two dynamic body anchor points, max lengths for each side, /// and a pulley ratio. struct b2PulleyJointDef : public b2JointDef { b2PulleyJointDef() { type = e_pulleyJoint; groundAnchor1.Set(-1.0f, 1.0f); groundAnchor2.Set(1.0f, 1.0f); localAnchor1.Set(-1.0f, 0.0f); localAnchor2.Set(1.0f, 0.0f); length1 = 0.0f; maxLength1 = 0.0f; length2 = 0.0f; maxLength2 = 0.0f; ratio = 1.0f; collideConnected = true; } /// Initialize the bodies, anchors, lengths, max lengths, and ratio using the world anchors. void Initialize(b2Body* body1, b2Body* body2, const b2Vec2& groundAnchor1, const b2Vec2& groundAnchor2, const b2Vec2& anchor1, const b2Vec2& anchor2, float32 ratio); /// The first ground anchor in world coordinates. This point never moves. b2Vec2 groundAnchor1; /// The second ground anchor in world coordinates. This point never moves. b2Vec2 groundAnchor2; /// The local anchor point relative to body1's origin. b2Vec2 localAnchor1; /// The local anchor point relative to body2's origin. b2Vec2 localAnchor2; /// The a reference length for the segment attached to body1. float32 length1; /// The maximum length of the segment attached to body1. float32 maxLength1; /// The a reference length for the segment attached to body2. float32 length2; /// The maximum length of the segment attached to body2. float32 maxLength2; /// The pulley ratio, used to simulate a block-and-tackle. float32 ratio; }; /// The pulley joint is connected to two bodies and two fixed ground points. /// The pulley supports a ratio such that: /// length1 + ratio * length2 <= constant /// Yes, the force transmitted is scaled by the ratio. /// The pulley also enforces a maximum length limit on both sides. This is /// useful to prevent one side of the pulley hitting the top. class b2PulleyJoint : public b2Joint { public: b2Vec2 GetAnchor1() const; b2Vec2 GetAnchor2() const; b2Vec2 GetReactionForce() const; float32 GetReactionTorque() const; /// Get the first ground anchor. b2Vec2 GetGroundAnchor1() const; /// Get the second ground anchor. b2Vec2 GetGroundAnchor2() const; /// Get the current length of the segment attached to body1. float32 GetLength1() const; /// Get the current length of the segment attached to body2. float32 GetLength2() const; /// Get the pulley ratio. float32 GetRatio() const; //--------------- Internals Below ------------------- b2PulleyJoint(const b2PulleyJointDef* data); void InitVelocityConstraints(const b2TimeStep& step); void SolveVelocityConstraints(const b2TimeStep& step); bool SolvePositionConstraints(); b2Body* m_ground; b2Vec2 m_groundAnchor1; b2Vec2 m_groundAnchor2; b2Vec2 m_localAnchor1; b2Vec2 m_localAnchor2; b2Vec2 m_u1; b2Vec2 m_u2; float32 m_constant; float32 m_ratio; float32 m_maxLength1; float32 m_maxLength2; // Effective masses float32 m_pulleyMass; float32 m_limitMass1; float32 m_limitMass2; // Impulses for accumulation/warm starting. float32 m_force; float32 m_limitForce1; float32 m_limitForce2; // Position impulses for accumulation. float32 m_positionImpulse; float32 m_limitPositionImpulse1; float32 m_limitPositionImpulse2; b2LimitState m_state; b2LimitState m_limitState1; b2LimitState m_limitState2; }; #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2MouseJoint.h0000644000175000017500000000567712264274614024272 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_MOUSE_JOINT_H #define B2_MOUSE_JOINT_H #include "b2Joint.h" /// Mouse joint definition. This requires a world target point, /// tuning parameters, and the time step. struct b2MouseJointDef : public b2JointDef { b2MouseJointDef() { type = e_mouseJoint; target.Set(0.0f, 0.0f); maxForce = 0.0f; frequencyHz = 5.0f; dampingRatio = 0.7f; timeStep = 1.0f / 60.0f; } /// The initial world target point. This is assumed /// to coincide with the body anchor initially. b2Vec2 target; /// The maximum constraint force that can be exerted /// to move the candidate body. Usually you will express /// as some multiple of the weight (multiplier * mass * gravity). float32 maxForce; /// The response speed. float32 frequencyHz; /// The damping ratio. 0 = no damping, 1 = critical damping. float32 dampingRatio; /// The time step used in the simulation. float32 timeStep; }; /// A mouse joint is used to make a point on a body track a /// specified world point. This a soft constraint with a maximum /// force. This allows the constraint to stretch and without /// applying huge forces. class b2MouseJoint : public b2Joint { public: /// Implements b2Joint. b2Vec2 GetAnchor1() const; /// Implements b2Joint. b2Vec2 GetAnchor2() const; /// Implements b2Joint. b2Vec2 GetReactionForce() const; /// Implements b2Joint. float32 GetReactionTorque() const; /// Use this to update the target point. void SetTarget(const b2Vec2& target); //--------------- Internals Below ------------------- b2MouseJoint(const b2MouseJointDef* def); void InitVelocityConstraints(const b2TimeStep& step); void SolveVelocityConstraints(const b2TimeStep& step); bool SolvePositionConstraints() { return true; } b2Vec2 m_localAnchor; b2Vec2 m_target; b2Vec2 m_impulse; b2Mat22 m_mass; // effective mass for point-to-point constraint. b2Vec2 m_C; // position error float32 m_maxForce; float32 m_beta; // bias factor float32 m_gamma; // softness }; #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp0000644000175000017500000002734712264274614025005 0ustar warp10warp10/* * Copyright (c) 2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2PulleyJoint.h" #include "../b2Body.h" #include "../b2World.h" // Pulley: // length1 = norm(p1 - s1) // length2 = norm(p2 - s2) // C0 = (length1 + ratio * length2)_initial // C = C0 - (length1 + ratio * length2) >= 0 // u1 = (p1 - s1) / norm(p1 - s1) // u2 = (p2 - s2) / norm(p2 - s2) // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2)) // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)] // K = J * invM * JT // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 * cross(r2, u2)^2) // // Limit: // C = maxLength - length // u = (p - s) / norm(p - s) // Cdot = -dot(u, v + cross(w, r)) // K = invMass + invI * cross(r, u)^2 // 0 <= impulse void b2PulleyJointDef::Initialize(b2Body* b1, b2Body* b2, const b2Vec2& ga1, const b2Vec2& ga2, const b2Vec2& anchor1, const b2Vec2& anchor2, float32 r) { body1 = b1; body2 = b2; groundAnchor1 = ga1; groundAnchor2 = ga2; localAnchor1 = body1->GetLocalPoint(anchor1); localAnchor2 = body2->GetLocalPoint(anchor2); b2Vec2 d1 = anchor1 - ga1; length1 = d1.Length(); b2Vec2 d2 = anchor2 - ga2; length2 = d2.Length(); ratio = r; b2Assert(ratio > B2_FLT_EPSILON); float32 C = length1 + ratio * length2; maxLength1 = C - ratio * b2_minPulleyLength; maxLength2 = (C - b2_minPulleyLength) / ratio; } b2PulleyJoint::b2PulleyJoint(const b2PulleyJointDef* def) : b2Joint(def) { m_ground = m_body1->GetWorld()->GetGroundBody(); m_groundAnchor1 = def->groundAnchor1 - m_ground->GetXForm().position; m_groundAnchor2 = def->groundAnchor2 - m_ground->GetXForm().position; m_localAnchor1 = def->localAnchor1; m_localAnchor2 = def->localAnchor2; b2Assert(def->ratio != 0.0f); m_ratio = def->ratio; m_constant = def->length1 + m_ratio * def->length2; m_maxLength1 = b2Min(def->maxLength1, m_constant - m_ratio * b2_minPulleyLength); m_maxLength2 = b2Min(def->maxLength2, (m_constant - b2_minPulleyLength) / m_ratio); m_force = 0.0f; m_limitForce1 = 0.0f; m_limitForce2 = 0.0f; } void b2PulleyJoint::InitVelocityConstraints(const b2TimeStep& step) { b2Body* b1 = m_body1; b2Body* b2 = m_body2; b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); b2Vec2 p1 = b1->m_sweep.c + r1; b2Vec2 p2 = b2->m_sweep.c + r2; b2Vec2 s1 = m_ground->GetXForm().position + m_groundAnchor1; b2Vec2 s2 = m_ground->GetXForm().position + m_groundAnchor2; // Get the pulley axes. m_u1 = p1 - s1; m_u2 = p2 - s2; float32 length1 = m_u1.Length(); float32 length2 = m_u2.Length(); if (length1 > b2_linearSlop) { m_u1 *= 1.0f / length1; } else { m_u1.SetZero(); } if (length2 > b2_linearSlop) { m_u2 *= 1.0f / length2; } else { m_u2.SetZero(); } float32 C = m_constant - length1 - m_ratio * length2; if (C > 0.0f) { m_state = e_inactiveLimit; m_force = 0.0f; } else { m_state = e_atUpperLimit; m_positionImpulse = 0.0f; } if (length1 < m_maxLength1) { m_limitState1 = e_inactiveLimit; m_limitForce1 = 0.0f; } else { m_limitState1 = e_atUpperLimit; m_limitPositionImpulse1 = 0.0f; } if (length2 < m_maxLength2) { m_limitState2 = e_inactiveLimit; m_limitForce2 = 0.0f; } else { m_limitState2 = e_atUpperLimit; m_limitPositionImpulse2 = 0.0f; } // Compute effective mass. float32 cr1u1 = b2Cross(r1, m_u1); float32 cr2u2 = b2Cross(r2, m_u2); m_limitMass1 = b1->m_invMass + b1->m_invI * cr1u1 * cr1u1; m_limitMass2 = b2->m_invMass + b2->m_invI * cr2u2 * cr2u2; m_pulleyMass = m_limitMass1 + m_ratio * m_ratio * m_limitMass2; b2Assert(m_limitMass1 > B2_FLT_EPSILON); b2Assert(m_limitMass2 > B2_FLT_EPSILON); b2Assert(m_pulleyMass > B2_FLT_EPSILON); m_limitMass1 = 1.0f / m_limitMass1; m_limitMass2 = 1.0f / m_limitMass2; m_pulleyMass = 1.0f / m_pulleyMass; if (step.warmStarting) { // Warm starting. b2Vec2 P1 = B2FORCE_SCALE(step.dt) * (-m_force - m_limitForce1) * m_u1; b2Vec2 P2 = B2FORCE_SCALE(step.dt) * (-m_ratio * m_force - m_limitForce2) * m_u2; b1->m_linearVelocity += b1->m_invMass * P1; b1->m_angularVelocity += b1->m_invI * b2Cross(r1, P1); b2->m_linearVelocity += b2->m_invMass * P2; b2->m_angularVelocity += b2->m_invI * b2Cross(r2, P2); } else { m_force = 0.0f; m_limitForce1 = 0.0f; m_limitForce2 = 0.0f; } } void b2PulleyJoint::SolveVelocityConstraints(const b2TimeStep& step) { b2Body* b1 = m_body1; b2Body* b2 = m_body2; b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); if (m_state == e_atUpperLimit) { b2Vec2 v1 = b1->m_linearVelocity + b2Cross(b1->m_angularVelocity, r1); b2Vec2 v2 = b2->m_linearVelocity + b2Cross(b2->m_angularVelocity, r2); float32 Cdot = -b2Dot(m_u1, v1) - m_ratio * b2Dot(m_u2, v2); float32 force = -B2FORCE_INV_SCALE(step.inv_dt) * m_pulleyMass * Cdot; float32 oldForce = m_force; m_force = b2Max(0.0f, m_force + force); force = m_force - oldForce; b2Vec2 P1 = -B2FORCE_SCALE(step.dt) * force * m_u1; b2Vec2 P2 = -B2FORCE_SCALE(step.dt) * m_ratio * force * m_u2; b1->m_linearVelocity += b1->m_invMass * P1; b1->m_angularVelocity += b1->m_invI * b2Cross(r1, P1); b2->m_linearVelocity += b2->m_invMass * P2; b2->m_angularVelocity += b2->m_invI * b2Cross(r2, P2); } if (m_limitState1 == e_atUpperLimit) { b2Vec2 v1 = b1->m_linearVelocity + b2Cross(b1->m_angularVelocity, r1); float32 Cdot = -b2Dot(m_u1, v1); float32 force = -B2FORCE_INV_SCALE(step.inv_dt) * m_limitMass1 * Cdot; float32 oldForce = m_limitForce1; m_limitForce1 = b2Max(0.0f, m_limitForce1 + force); force = m_limitForce1 - oldForce; b2Vec2 P1 = -B2FORCE_SCALE(step.dt) * force * m_u1; b1->m_linearVelocity += b1->m_invMass * P1; b1->m_angularVelocity += b1->m_invI * b2Cross(r1, P1); } if (m_limitState2 == e_atUpperLimit) { b2Vec2 v2 = b2->m_linearVelocity + b2Cross(b2->m_angularVelocity, r2); float32 Cdot = -b2Dot(m_u2, v2); float32 force = -B2FORCE_INV_SCALE(step.inv_dt) * m_limitMass2 * Cdot; float32 oldForce = m_limitForce2; m_limitForce2 = b2Max(0.0f, m_limitForce2 + force); force = m_limitForce2 - oldForce; b2Vec2 P2 = -B2FORCE_SCALE(step.dt) * force * m_u2; b2->m_linearVelocity += b2->m_invMass * P2; b2->m_angularVelocity += b2->m_invI * b2Cross(r2, P2); } } bool b2PulleyJoint::SolvePositionConstraints() { b2Body* b1 = m_body1; b2Body* b2 = m_body2; b2Vec2 s1 = m_ground->GetXForm().position + m_groundAnchor1; b2Vec2 s2 = m_ground->GetXForm().position + m_groundAnchor2; float32 linearError = 0.0f; if (m_state == e_atUpperLimit) { b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); b2Vec2 p1 = b1->m_sweep.c + r1; b2Vec2 p2 = b2->m_sweep.c + r2; // Get the pulley axes. m_u1 = p1 - s1; m_u2 = p2 - s2; float32 length1 = m_u1.Length(); float32 length2 = m_u2.Length(); if (length1 > b2_linearSlop) { m_u1 *= 1.0f / length1; } else { m_u1.SetZero(); } if (length2 > b2_linearSlop) { m_u2 *= 1.0f / length2; } else { m_u2.SetZero(); } float32 C = m_constant - length1 - m_ratio * length2; linearError = b2Max(linearError, -C); C = b2Clamp(C + b2_linearSlop, -b2_maxLinearCorrection, 0.0f); float32 impulse = -m_pulleyMass * C; float32 oldImpulse = m_positionImpulse; m_positionImpulse = b2Max(0.0f, m_positionImpulse + impulse); impulse = m_positionImpulse - oldImpulse; b2Vec2 P1 = -impulse * m_u1; b2Vec2 P2 = -m_ratio * impulse * m_u2; b1->m_sweep.c += b1->m_invMass * P1; b1->m_sweep.a += b1->m_invI * b2Cross(r1, P1); b2->m_sweep.c += b2->m_invMass * P2; b2->m_sweep.a += b2->m_invI * b2Cross(r2, P2); b1->SynchronizeTransform(); b2->SynchronizeTransform(); } if (m_limitState1 == e_atUpperLimit) { b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 p1 = b1->m_sweep.c + r1; m_u1 = p1 - s1; float32 length1 = m_u1.Length(); if (length1 > b2_linearSlop) { m_u1 *= 1.0f / length1; } else { m_u1.SetZero(); } float32 C = m_maxLength1 - length1; linearError = b2Max(linearError, -C); C = b2Clamp(C + b2_linearSlop, -b2_maxLinearCorrection, 0.0f); float32 impulse = -m_limitMass1 * C; float32 oldLimitPositionImpulse = m_limitPositionImpulse1; m_limitPositionImpulse1 = b2Max(0.0f, m_limitPositionImpulse1 + impulse); impulse = m_limitPositionImpulse1 - oldLimitPositionImpulse; b2Vec2 P1 = -impulse * m_u1; b1->m_sweep.c += b1->m_invMass * P1; b1->m_sweep.a += b1->m_invI * b2Cross(r1, P1); b1->SynchronizeTransform(); } if (m_limitState2 == e_atUpperLimit) { b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); b2Vec2 p2 = b2->m_sweep.c + r2; m_u2 = p2 - s2; float32 length2 = m_u2.Length(); if (length2 > b2_linearSlop) { m_u2 *= 1.0f / length2; } else { m_u2.SetZero(); } float32 C = m_maxLength2 - length2; linearError = b2Max(linearError, -C); C = b2Clamp(C + b2_linearSlop, -b2_maxLinearCorrection, 0.0f); float32 impulse = -m_limitMass2 * C; float32 oldLimitPositionImpulse = m_limitPositionImpulse2; m_limitPositionImpulse2 = b2Max(0.0f, m_limitPositionImpulse2 + impulse); impulse = m_limitPositionImpulse2 - oldLimitPositionImpulse; b2Vec2 P2 = -impulse * m_u2; b2->m_sweep.c += b2->m_invMass * P2; b2->m_sweep.a += b2->m_invI * b2Cross(r2, P2); b2->SynchronizeTransform(); } return linearError < b2_linearSlop; } b2Vec2 b2PulleyJoint::GetAnchor1() const { return m_body1->GetWorldPoint(m_localAnchor1); } b2Vec2 b2PulleyJoint::GetAnchor2() const { return m_body2->GetWorldPoint(m_localAnchor2); } b2Vec2 b2PulleyJoint::GetReactionForce() const { b2Vec2 F = B2FORCE_SCALE(m_force) * m_u2; return F; } float32 b2PulleyJoint::GetReactionTorque() const { return 0.0f; } b2Vec2 b2PulleyJoint::GetGroundAnchor1() const { return m_ground->GetXForm().position + m_groundAnchor1; } b2Vec2 b2PulleyJoint::GetGroundAnchor2() const { return m_ground->GetXForm().position + m_groundAnchor2; } float32 b2PulleyJoint::GetLength1() const { b2Vec2 p = m_body1->GetWorldPoint(m_localAnchor1); b2Vec2 s = m_ground->GetXForm().position + m_groundAnchor1; b2Vec2 d = p - s; return d.Length(); } float32 b2PulleyJoint::GetLength2() const { b2Vec2 p = m_body2->GetWorldPoint(m_localAnchor2); b2Vec2 s = m_ground->GetXForm().position + m_groundAnchor2; b2Vec2 d = p - s; return d.Length(); } float32 b2PulleyJoint::GetRatio() const { return m_ratio; } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp0000644000175000017500000002672712264274614025341 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2RevoluteJoint.h" #include "../b2Body.h" #include "../b2World.h" #include "../b2Island.h" // Point-to-point constraint // C = p2 - p1 // Cdot = v2 - v1 // = v2 + cross(w2, r2) - v1 - cross(w1, r1) // J = [-I -r1_skew I r2_skew ] // Identity used: // w k % (rx i + ry j) = w * (-ry i + rx j) // Motor constraint // Cdot = w2 - w1 // J = [0 0 -1 0 0 1] // K = invI1 + invI2 void b2RevoluteJointDef::Initialize(b2Body* b1, b2Body* b2, const b2Vec2& anchor) { body1 = b1; body2 = b2; localAnchor1 = body1->GetLocalPoint(anchor); localAnchor2 = body2->GetLocalPoint(anchor); referenceAngle = body2->GetAngle() - body1->GetAngle(); } b2RevoluteJoint::b2RevoluteJoint(const b2RevoluteJointDef* def) : b2Joint(def) { m_localAnchor1 = def->localAnchor1; m_localAnchor2 = def->localAnchor2; m_referenceAngle = def->referenceAngle; m_pivotForce.Set(0.0f, 0.0f); m_motorForce = 0.0f; m_limitForce = 0.0f; m_limitPositionImpulse = 0.0f; m_lowerAngle = def->lowerAngle; m_upperAngle = def->upperAngle; m_maxMotorTorque = def->maxMotorTorque; m_motorSpeed = def->motorSpeed; m_enableLimit = def->enableLimit; m_enableMotor = def->enableMotor; } void b2RevoluteJoint::InitVelocityConstraints(const b2TimeStep& step) { b2Body* b1 = m_body1; b2Body* b2 = m_body2; // Compute the effective mass matrix. b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) * invI2 * skew(r2)] // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y -r1.x*r1.y] // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x] float32 invMass1 = b1->m_invMass, invMass2 = b2->m_invMass; float32 invI1 = b1->m_invI, invI2 = b2->m_invI; b2Mat22 K1; K1.col1.x = invMass1 + invMass2; K1.col2.x = 0.0f; K1.col1.y = 0.0f; K1.col2.y = invMass1 + invMass2; b2Mat22 K2; K2.col1.x = invI1 * r1.y * r1.y; K2.col2.x = -invI1 * r1.x * r1.y; K2.col1.y = -invI1 * r1.x * r1.y; K2.col2.y = invI1 * r1.x * r1.x; b2Mat22 K3; K3.col1.x = invI2 * r2.y * r2.y; K3.col2.x = -invI2 * r2.x * r2.y; K3.col1.y = -invI2 * r2.x * r2.y; K3.col2.y = invI2 * r2.x * r2.x; b2Mat22 K = K1 + K2 + K3; m_pivotMass = K.Invert(); m_motorMass = 1.0f / (invI1 + invI2); if (m_enableMotor == false) { m_motorForce = 0.0f; } if (m_enableLimit) { float32 jointAngle = b2->m_sweep.a - b1->m_sweep.a - m_referenceAngle; if (b2Abs(m_upperAngle - m_lowerAngle) < 2.0f * b2_angularSlop) { m_limitState = e_equalLimits; } else if (jointAngle <= m_lowerAngle) { if (m_limitState != e_atLowerLimit) { m_limitForce = 0.0f; } m_limitState = e_atLowerLimit; } else if (jointAngle >= m_upperAngle) { if (m_limitState != e_atUpperLimit) { m_limitForce = 0.0f; } m_limitState = e_atUpperLimit; } else { m_limitState = e_inactiveLimit; m_limitForce = 0.0f; } } else { m_limitForce = 0.0f; } if (step.warmStarting) { b1->m_linearVelocity -= B2FORCE_SCALE(step.dt) * invMass1 * m_pivotForce; b1->m_angularVelocity -= B2FORCE_SCALE(step.dt) * invI1 * (b2Cross(r1, m_pivotForce) + B2FORCE_INV_SCALE(m_motorForce + m_limitForce)); b2->m_linearVelocity += B2FORCE_SCALE(step.dt) * invMass2 * m_pivotForce; b2->m_angularVelocity += B2FORCE_SCALE(step.dt) * invI2 * (b2Cross(r2, m_pivotForce) + B2FORCE_INV_SCALE(m_motorForce + m_limitForce)); } else { m_pivotForce.SetZero(); m_motorForce = 0.0f; m_limitForce = 0.0f; } m_limitPositionImpulse = 0.0f; } void b2RevoluteJoint::SolveVelocityConstraints(const b2TimeStep& step) { b2Body* b1 = m_body1; b2Body* b2 = m_body2; b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); // Solve point-to-point constraint b2Vec2 pivotCdot = b2->m_linearVelocity + b2Cross(b2->m_angularVelocity, r2) - b1->m_linearVelocity - b2Cross(b1->m_angularVelocity, r1); b2Vec2 pivotForce = -B2FORCE_INV_SCALE(step.inv_dt) * b2Mul(m_pivotMass, pivotCdot); m_pivotForce += pivotForce; b2Vec2 P = B2FORCE_SCALE(step.dt) * pivotForce; b1->m_linearVelocity -= b1->m_invMass * P; b1->m_angularVelocity -= b1->m_invI * b2Cross(r1, P); b2->m_linearVelocity += b2->m_invMass * P; b2->m_angularVelocity += b2->m_invI * b2Cross(r2, P); if (m_enableMotor && m_limitState != e_equalLimits) { float32 motorCdot = b2->m_angularVelocity - b1->m_angularVelocity - m_motorSpeed; float32 motorForce = -step.inv_dt * m_motorMass * motorCdot; float32 oldMotorForce = m_motorForce; m_motorForce = b2Clamp(m_motorForce + motorForce, -m_maxMotorTorque, m_maxMotorTorque); motorForce = m_motorForce - oldMotorForce; float32 P = step.dt * motorForce; b1->m_angularVelocity -= b1->m_invI * P; b2->m_angularVelocity += b2->m_invI * P; } if (m_enableLimit && m_limitState != e_inactiveLimit) { float32 limitCdot = b2->m_angularVelocity - b1->m_angularVelocity; float32 limitForce = -step.inv_dt * m_motorMass * limitCdot; if (m_limitState == e_equalLimits) { m_limitForce += limitForce; } else if (m_limitState == e_atLowerLimit) { float32 oldLimitForce = m_limitForce; m_limitForce = b2Max(m_limitForce + limitForce, 0.0f); limitForce = m_limitForce - oldLimitForce; } else if (m_limitState == e_atUpperLimit) { float32 oldLimitForce = m_limitForce; m_limitForce = b2Min(m_limitForce + limitForce, 0.0f); limitForce = m_limitForce - oldLimitForce; } float32 P = step.dt * limitForce; b1->m_angularVelocity -= b1->m_invI * P; b2->m_angularVelocity += b2->m_invI * P; } } bool b2RevoluteJoint::SolvePositionConstraints() { b2Body* b1 = m_body1; b2Body* b2 = m_body2; float32 positionError = 0.0f; // Solve point-to-point position error. b2Vec2 r1 = b2Mul(b1->GetXForm().R, m_localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, m_localAnchor2 - b2->GetLocalCenter()); b2Vec2 p1 = b1->m_sweep.c + r1; b2Vec2 p2 = b2->m_sweep.c + r2; b2Vec2 ptpC = p2 - p1; positionError = ptpC.Length(); // Prevent overly large corrections. //b2Vec2 dpMax(b2_maxLinearCorrection, b2_maxLinearCorrection); //ptpC = b2Clamp(ptpC, -dpMax, dpMax); float32 invMass1 = b1->m_invMass, invMass2 = b2->m_invMass; float32 invI1 = b1->m_invI, invI2 = b2->m_invI; b2Mat22 K1; K1.col1.x = invMass1 + invMass2; K1.col2.x = 0.0f; K1.col1.y = 0.0f; K1.col2.y = invMass1 + invMass2; b2Mat22 K2; K2.col1.x = invI1 * r1.y * r1.y; K2.col2.x = -invI1 * r1.x * r1.y; K2.col1.y = -invI1 * r1.x * r1.y; K2.col2.y = invI1 * r1.x * r1.x; b2Mat22 K3; K3.col1.x = invI2 * r2.y * r2.y; K3.col2.x = -invI2 * r2.x * r2.y; K3.col1.y = -invI2 * r2.x * r2.y; K3.col2.y = invI2 * r2.x * r2.x; b2Mat22 K = K1 + K2 + K3; b2Vec2 impulse = K.Solve(-ptpC); b1->m_sweep.c -= b1->m_invMass * impulse; b1->m_sweep.a -= b1->m_invI * b2Cross(r1, impulse); b2->m_sweep.c += b2->m_invMass * impulse; b2->m_sweep.a += b2->m_invI * b2Cross(r2, impulse); b1->SynchronizeTransform(); b2->SynchronizeTransform(); // Handle limits. float32 angularError = 0.0f; if (m_enableLimit && m_limitState != e_inactiveLimit) { float32 angle = b2->m_sweep.a - b1->m_sweep.a - m_referenceAngle; float32 limitImpulse = 0.0f; if (m_limitState == e_equalLimits) { // Prevent large angular corrections float32 limitC = b2Clamp(angle, -b2_maxAngularCorrection, b2_maxAngularCorrection); limitImpulse = -m_motorMass * limitC; angularError = b2Abs(limitC); } else if (m_limitState == e_atLowerLimit) { float32 limitC = angle - m_lowerAngle; angularError = b2Max(0.0f, -limitC); // Prevent large angular corrections and allow some slop. limitC = b2Clamp(limitC + b2_angularSlop, -b2_maxAngularCorrection, 0.0f); limitImpulse = -m_motorMass * limitC; float32 oldLimitImpulse = m_limitPositionImpulse; m_limitPositionImpulse = b2Max(m_limitPositionImpulse + limitImpulse, 0.0f); limitImpulse = m_limitPositionImpulse - oldLimitImpulse; } else if (m_limitState == e_atUpperLimit) { float32 limitC = angle - m_upperAngle; angularError = b2Max(0.0f, limitC); // Prevent large angular corrections and allow some slop. limitC = b2Clamp(limitC - b2_angularSlop, 0.0f, b2_maxAngularCorrection); limitImpulse = -m_motorMass * limitC; float32 oldLimitImpulse = m_limitPositionImpulse; m_limitPositionImpulse = b2Min(m_limitPositionImpulse + limitImpulse, 0.0f); limitImpulse = m_limitPositionImpulse - oldLimitImpulse; } b1->m_sweep.a -= b1->m_invI * limitImpulse; b2->m_sweep.a += b2->m_invI * limitImpulse; b1->SynchronizeTransform(); b2->SynchronizeTransform(); } return positionError <= b2_linearSlop && angularError <= b2_angularSlop; } b2Vec2 b2RevoluteJoint::GetAnchor1() const { return m_body1->GetWorldPoint(m_localAnchor1); } b2Vec2 b2RevoluteJoint::GetAnchor2() const { return m_body2->GetWorldPoint(m_localAnchor2); } b2Vec2 b2RevoluteJoint::GetReactionForce() const { return B2FORCE_SCALE(float32(1.0))*m_pivotForce; } float32 b2RevoluteJoint::GetReactionTorque() const { return m_limitForce; } float32 b2RevoluteJoint::GetJointAngle() const { b2Body* b1 = m_body1; b2Body* b2 = m_body2; return b2->m_sweep.a - b1->m_sweep.a - m_referenceAngle; } float32 b2RevoluteJoint::GetJointSpeed() const { b2Body* b1 = m_body1; b2Body* b2 = m_body2; return b2->m_angularVelocity - b1->m_angularVelocity; } bool b2RevoluteJoint::IsMotorEnabled() const { return m_enableMotor; } void b2RevoluteJoint::EnableMotor(bool flag) { m_enableMotor = flag; } float32 b2RevoluteJoint::GetMotorTorque() const { return m_motorForce; } void b2RevoluteJoint::SetMotorSpeed(float32 speed) { m_motorSpeed = speed; } void b2RevoluteJoint::SetMaxMotorTorque(float32 torque) { m_maxMotorTorque = torque; } bool b2RevoluteJoint::IsLimitEnabled() const { return m_enableLimit; } void b2RevoluteJoint::EnableLimit(bool flag) { m_enableLimit = flag; } float32 b2RevoluteJoint::GetLowerLimit() const { return m_lowerAngle; } float32 b2RevoluteJoint::GetUpperLimit() const { return m_upperAngle; } void b2RevoluteJoint::SetLimits(float32 lower, float32 upper) { b2Assert(lower <= upper); m_lowerAngle = lower; m_upperAngle = upper; } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Joints/b2GearJoint.h0000644000175000017500000000621712264274614024047 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_GEAR_JOINT_H #define B2_GEAR_JOINT_H #include "b2Joint.h" class b2RevoluteJoint; class b2PrismaticJoint; /// Gear joint definition. This definition requires two existing /// revolute or prismatic joints (any combination will work). /// The provided joints must attach a dynamic body to a static body. struct b2GearJointDef : public b2JointDef { b2GearJointDef() { type = e_gearJoint; joint1 = NULL; joint2 = NULL; ratio = 1.0f; } /// The first revolute/prismatic joint attached to the gear joint. b2Joint* joint1; /// The second revolute/prismatic joint attached to the gear joint. b2Joint* joint2; /// The gear ratio. /// @see b2GearJoint for explanation. float32 ratio; }; /// A gear joint is used to connect two joints together. Either joint /// can be a revolute or prismatic joint. You specify a gear ratio /// to bind the motions together: /// coordinate1 + ratio * coordinate2 = constant /// The ratio can be negative or positive. If one joint is a revolute joint /// and the other joint is a prismatic joint, then the ratio will have units /// of length or units of 1/length. /// @warning The revolute and prismatic joints must be attached to /// fixed bodies (which must be body1 on those joints). class b2GearJoint : public b2Joint { public: b2Vec2 GetAnchor1() const; b2Vec2 GetAnchor2() const; b2Vec2 GetReactionForce() const; float32 GetReactionTorque() const; /// Get the gear ratio. float32 GetRatio() const; //--------------- Internals Below ------------------- b2GearJoint(const b2GearJointDef* data); void InitVelocityConstraints(const b2TimeStep& step); void SolveVelocityConstraints(const b2TimeStep& step); bool SolvePositionConstraints(); b2Body* m_ground1; b2Body* m_ground2; // One of these is NULL. b2RevoluteJoint* m_revolute1; b2PrismaticJoint* m_prismatic1; // One of these is NULL. b2RevoluteJoint* m_revolute2; b2PrismaticJoint* m_prismatic2; b2Vec2 m_groundAnchor1; b2Vec2 m_groundAnchor2; b2Vec2 m_localAnchor1; b2Vec2 m_localAnchor2; b2Jacobian m_J; float32 m_constant; float32 m_ratio; // Effective mass float32 m_mass; // Impulse for accumulation/warm starting. float32 m_force; }; #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/b2World.cpp0000644000175000017500000006346612264274615022353 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2World.h" #include "b2Body.h" #include "b2Island.h" #include "Joints/b2PulleyJoint.h" #include "Contacts/b2Contact.h" #include "Contacts/b2ContactSolver.h" #include "../Collision/b2Collision.h" #include "../Collision/Shapes/b2CircleShape.h" #include "../Collision/Shapes/b2PolygonShape.h" #include b2World::b2World(const b2AABB& worldAABB, const b2Vec2& gravity, bool doSleep) { m_destructionListener = NULL; m_boundaryListener = NULL; m_contactFilter = &b2_defaultFilter; m_contactListener = NULL; m_debugDraw = NULL; m_bodyList = NULL; m_contactList = NULL; m_jointList = NULL; m_bodyCount = 0; m_contactCount = 0; m_jointCount = 0; m_positionCorrection = true; m_warmStarting = true; m_continuousPhysics = true; m_allowSleep = doSleep; m_gravity = gravity; m_lock = false; m_inv_dt0 = 0.0f; m_contactManager.m_world = this; void* mem = b2Alloc(sizeof(b2BroadPhase)); m_broadPhase = new (mem) b2BroadPhase(worldAABB, &m_contactManager); b2BodyDef bd; m_groundBody = CreateBody(&bd); } b2World::~b2World() { DestroyBody(m_groundBody); m_broadPhase->~b2BroadPhase(); b2Free(m_broadPhase); } void b2World::SetDestructionListener(b2DestructionListener* listener) { m_destructionListener = listener; } void b2World::SetBoundaryListener(b2BoundaryListener* listener) { m_boundaryListener = listener; } void b2World::SetContactFilter(b2ContactFilter* filter) { m_contactFilter = filter; } void b2World::SetContactListener(b2ContactListener* listener) { m_contactListener = listener; } void b2World::SetDebugDraw(b2DebugDraw* debugDraw) { m_debugDraw = debugDraw; } b2Body* b2World::CreateBody(const b2BodyDef* def) { b2Assert(m_lock == false); if (m_lock == true) { return NULL; } void* mem = m_blockAllocator.Allocate(sizeof(b2Body)); b2Body* b = new (mem) b2Body(def, this); // Add to world doubly linked list. b->m_prev = NULL; b->m_next = m_bodyList; if (m_bodyList) { m_bodyList->m_prev = b; } m_bodyList = b; ++m_bodyCount; return b; } void b2World::DestroyBody(b2Body* b) { b2Assert(m_bodyCount > 0); b2Assert(m_lock == false); if (m_lock == true) { return; } // Delete the attached joints. b2JointEdge* jn = b->m_jointList; while (jn) { b2JointEdge* jn0 = jn; jn = jn->next; if (m_destructionListener) { m_destructionListener->SayGoodbye(jn0->joint); } DestroyJoint(jn0->joint); } // Delete the attached shapes. This destroys broad-phase // proxies and pairs, leading to the destruction of contacts. b2Shape* s = b->m_shapeList; while (s) { b2Shape* s0 = s; s = s->m_next; if (m_destructionListener) { m_destructionListener->SayGoodbye(s0); } s0->DestroyProxy(m_broadPhase); b2Shape::Destroy(s0, &m_blockAllocator); } // Remove world body list. if (b->m_prev) { b->m_prev->m_next = b->m_next; } if (b->m_next) { b->m_next->m_prev = b->m_prev; } if (b == m_bodyList) { m_bodyList = b->m_next; } --m_bodyCount; b->~b2Body(); m_blockAllocator.Free(b, sizeof(b2Body)); } b2Joint* b2World::CreateJoint(const b2JointDef* def) { b2Assert(m_lock == false); b2Joint* j = b2Joint::Create(def, &m_blockAllocator); // Connect to the world list. j->m_prev = NULL; j->m_next = m_jointList; if (m_jointList) { m_jointList->m_prev = j; } m_jointList = j; ++m_jointCount; // Connect to the bodies' doubly linked lists. j->m_node1.joint = j; j->m_node1.other = j->m_body2; j->m_node1.prev = NULL; j->m_node1.next = j->m_body1->m_jointList; if (j->m_body1->m_jointList) j->m_body1->m_jointList->prev = &j->m_node1; j->m_body1->m_jointList = &j->m_node1; j->m_node2.joint = j; j->m_node2.other = j->m_body1; j->m_node2.prev = NULL; j->m_node2.next = j->m_body2->m_jointList; if (j->m_body2->m_jointList) j->m_body2->m_jointList->prev = &j->m_node2; j->m_body2->m_jointList = &j->m_node2; // If the joint prevents collisions, then reset collision filtering. if (def->collideConnected == false) { // Reset the proxies on the body with the minimum number of shapes. b2Body* b = def->body1->m_shapeCount < def->body2->m_shapeCount ? def->body1 : def->body2; for (b2Shape* s = b->m_shapeList; s; s = s->m_next) { s->RefilterProxy(m_broadPhase, b->GetXForm()); } } return j; } void b2World::DestroyJoint(b2Joint* j) { b2Assert(m_lock == false); bool collideConnected = j->m_collideConnected; // Remove from the doubly linked list. if (j->m_prev) { j->m_prev->m_next = j->m_next; } if (j->m_next) { j->m_next->m_prev = j->m_prev; } if (j == m_jointList) { m_jointList = j->m_next; } // Disconnect from island graph. b2Body* body1 = j->m_body1; b2Body* body2 = j->m_body2; // Wake up connected bodies. body1->WakeUp(); body2->WakeUp(); // Remove from body 1. if (j->m_node1.prev) { j->m_node1.prev->next = j->m_node1.next; } if (j->m_node1.next) { j->m_node1.next->prev = j->m_node1.prev; } if (&j->m_node1 == body1->m_jointList) { body1->m_jointList = j->m_node1.next; } j->m_node1.prev = NULL; j->m_node1.next = NULL; // Remove from body 2 if (j->m_node2.prev) { j->m_node2.prev->next = j->m_node2.next; } if (j->m_node2.next) { j->m_node2.next->prev = j->m_node2.prev; } if (&j->m_node2 == body2->m_jointList) { body2->m_jointList = j->m_node2.next; } j->m_node2.prev = NULL; j->m_node2.next = NULL; b2Joint::Destroy(j, &m_blockAllocator); b2Assert(m_jointCount > 0); --m_jointCount; // If the joint prevents collisions, then reset collision filtering. if (collideConnected == false) { // Reset the proxies on the body with the minimum number of shapes. b2Body* b = body1->m_shapeCount < body2->m_shapeCount ? body1 : body2; for (b2Shape* s = b->m_shapeList; s; s = s->m_next) { s->RefilterProxy(m_broadPhase, b->GetXForm()); } } } void b2World::Refilter(b2Shape* shape) { shape->RefilterProxy(m_broadPhase, shape->GetBody()->GetXForm()); } // Find islands, integrate and solve constraints, solve position constraints void b2World::Solve(const b2TimeStep& step) { m_positionIterationCount = 0; // Size the island for the worst case. b2Island island(m_bodyCount, m_contactCount, m_jointCount, &m_stackAllocator, m_contactListener); // Clear all the island flags. for (b2Body* b = m_bodyList; b; b = b->m_next) { b->m_flags &= ~b2Body::e_islandFlag; } for (b2Contact* c = m_contactList; c; c = c->m_next) { c->m_flags &= ~b2Contact::e_islandFlag; } for (b2Joint* j = m_jointList; j; j = j->m_next) { j->m_islandFlag = false; } // Build and simulate all awake islands. int32 stackSize = m_bodyCount; b2Body** stack = (b2Body**)m_stackAllocator.Allocate(stackSize * sizeof(b2Body*)); for (b2Body* seed = m_bodyList; seed; seed = seed->m_next) { if (seed->m_flags & (b2Body::e_islandFlag | b2Body::e_sleepFlag | b2Body::e_frozenFlag)) { continue; } if (seed->IsStatic()) { continue; } // Reset island and stack. island.Clear(); int32 stackCount = 0; stack[stackCount++] = seed; seed->m_flags |= b2Body::e_islandFlag; // Perform a depth first search (DFS) on the constraint graph. while (stackCount > 0) { // Grab the next body off the stack and add it to the island. b2Body* b = stack[--stackCount]; island.Add(b); // Make sure the body is awake. b->m_flags &= ~b2Body::e_sleepFlag; // To keep islands as small as possible, we don't // propagate islands across static bodies. if (b->IsStatic()) { continue; } // Search all contacts connected to this body. for (b2ContactEdge* cn = b->m_contactList; cn; cn = cn->next) { // Has this contact already been added to an island? if (cn->contact->m_flags & (b2Contact::e_islandFlag | b2Contact::e_nonSolidFlag)) { continue; } // Is this contact touching? if (cn->contact->GetManifoldCount() == 0) { continue; } island.Add(cn->contact); cn->contact->m_flags |= b2Contact::e_islandFlag; b2Body* other = cn->other; // Was the other body already added to this island? if (other->m_flags & b2Body::e_islandFlag) { continue; } b2Assert(stackCount < stackSize); stack[stackCount++] = other; other->m_flags |= b2Body::e_islandFlag; } // Search all joints connect to this body. for (b2JointEdge* jn = b->m_jointList; jn; jn = jn->next) { if (jn->joint->m_islandFlag == true) { continue; } island.Add(jn->joint); jn->joint->m_islandFlag = true; b2Body* other = jn->other; if (other->m_flags & b2Body::e_islandFlag) { continue; } b2Assert(stackCount < stackSize); stack[stackCount++] = other; other->m_flags |= b2Body::e_islandFlag; } } island.Solve(step, m_gravity, m_positionCorrection, m_allowSleep); m_positionIterationCount = b2Max(m_positionIterationCount, island.m_positionIterationCount); // Post solve cleanup. for (int32 i = 0; i < island.m_bodyCount; ++i) { // Allow static bodies to participate in other islands. b2Body* b = island.m_bodies[i]; if (b->IsStatic()) { b->m_flags &= ~b2Body::e_islandFlag; } } } m_stackAllocator.Free(stack); // Synchronize shapes, check for out of range bodies. for (b2Body* b = m_bodyList; b; b = b->GetNext()) { if (b->m_flags & (b2Body::e_sleepFlag | b2Body::e_frozenFlag)) { continue; } if (b->IsStatic()) { continue; } // Update shapes (for broad-phase). If the shapes go out of // the world AABB then shapes and contacts may be destroyed, // including contacts that are bool inRange = b->SynchronizeShapes(); // Did the body's shapes leave the world? if (inRange == false && m_boundaryListener != NULL) { m_boundaryListener->Violation(b); } } // Commit shape proxy movements to the broad-phase so that new contacts are created. // Also, some contacts can be destroyed. m_broadPhase->Commit(); } // Find TOI contacts and solve them. void b2World::SolveTOI(const b2TimeStep& step) { // Reserve an island and a stack for TOI island solution. b2Island island(m_bodyCount, b2_maxTOIContactsPerIsland, 0, &m_stackAllocator, m_contactListener); int32 stackSize = m_bodyCount; b2Body** stack = (b2Body**)m_stackAllocator.Allocate(stackSize * sizeof(b2Body*)); for (b2Body* b = m_bodyList; b; b = b->m_next) { b->m_flags &= ~b2Body::e_islandFlag; b->m_sweep.t0 = 0.0f; } for (b2Contact* c = m_contactList; c; c = c->m_next) { // Invalidate TOI c->m_flags &= ~(b2Contact::e_toiFlag | b2Contact::e_islandFlag); } // Find TOI events and solve them. for (;;) { // Find the first TOI. b2Contact* minContact = NULL; float32 minTOI = 1.0f; for (b2Contact* c = m_contactList; c; c = c->m_next) { if (c->m_flags & (b2Contact::e_slowFlag | b2Contact::e_nonSolidFlag)) { continue; } // TODO_ERIN keep a counter on the contact, only respond to M TOIs per contact. float32 toi = 1.0f; if (c->m_flags & b2Contact::e_toiFlag) { // This contact has a valid cached TOI. toi = c->m_toi; } else { // Compute the TOI for this contact. b2Shape* s1 = c->GetShape1(); b2Shape* s2 = c->GetShape2(); b2Body* b1 = s1->GetBody(); b2Body* b2 = s2->GetBody(); if ((b1->IsStatic() || b1->IsSleeping()) && (b2->IsStatic() || b2->IsSleeping())) { continue; } // Put the sweeps onto the same time interval. float32 t0 = b1->m_sweep.t0; if (b1->m_sweep.t0 < b2->m_sweep.t0) { t0 = b2->m_sweep.t0; b1->m_sweep.Advance(t0); } else if (b2->m_sweep.t0 < b1->m_sweep.t0) { t0 = b1->m_sweep.t0; b2->m_sweep.Advance(t0); } b2Assert(t0 < 1.0f); // Compute the time of impact. toi = b2TimeOfImpact(c->m_shape1, b1->m_sweep, c->m_shape2, b2->m_sweep); b2Assert(0.0f <= toi && toi <= 1.0f); if (toi > 0.0f && toi < 1.0f) { toi = b2Min((1.0f - toi) * t0 + toi, 1.0f); } c->m_toi = toi; c->m_flags |= b2Contact::e_toiFlag; } if (B2_FLT_EPSILON < toi && toi < minTOI) { // This is the minimum TOI found so far. minContact = c; minTOI = toi; } } if (minContact == NULL || 1.0f - 100.0f * B2_FLT_EPSILON < minTOI) { // No more TOI events. Done! break; } // Advance the bodies to the TOI. b2Shape* s1 = minContact->GetShape1(); b2Shape* s2 = minContact->GetShape2(); b2Body* b1 = s1->GetBody(); b2Body* b2 = s2->GetBody(); b1->Advance(minTOI); b2->Advance(minTOI); // The TOI contact likely has some new contact points. minContact->Update(m_contactListener); minContact->m_flags &= ~b2Contact::e_toiFlag; if (minContact->GetManifoldCount() == 0) { // This shouldn't happen. Numerical error? //b2Assert(false); continue; } // Build the TOI island. We need a dynamic seed. b2Body* seed = b1; if (seed->IsStatic()) { seed = b2; } // Reset island and stack. island.Clear(); int32 stackCount = 0; stack[stackCount++] = seed; seed->m_flags |= b2Body::e_islandFlag; // Perform a depth first search (DFS) on the contact graph. while (stackCount > 0) { // Grab the next body off the stack and add it to the island. b2Body* b = stack[--stackCount]; island.Add(b); // Make sure the body is awake. b->m_flags &= ~b2Body::e_sleepFlag; // To keep islands as small as possible, we don't // propagate islands across static bodies. if (b->IsStatic()) { continue; } // Search all contacts connected to this body. for (b2ContactEdge* cn = b->m_contactList; cn; cn = cn->next) { // Does the TOI island still have space for contacts? if (island.m_contactCount == island.m_contactCapacity) { continue; } // Has this contact already been added to an island? Skip slow or non-solid contacts. if (cn->contact->m_flags & (b2Contact::e_islandFlag | b2Contact::e_slowFlag | b2Contact::e_nonSolidFlag)) { continue; } // Is this contact touching? For performance we are not updating this contact. if (cn->contact->GetManifoldCount() == 0) { continue; } island.Add(cn->contact); cn->contact->m_flags |= b2Contact::e_islandFlag; // Update other body. b2Body* other = cn->other; // Was the other body already added to this island? if (other->m_flags & b2Body::e_islandFlag) { continue; } // March forward, this can do no harm since this is the min TOI. if (other->IsStatic() == false) { other->Advance(minTOI); other->WakeUp(); } b2Assert(stackCount < stackSize); stack[stackCount++] = other; other->m_flags |= b2Body::e_islandFlag; } } b2TimeStep subStep; subStep.dt = (1.0f - minTOI) * step.dt; b2Assert(subStep.dt > B2_FLT_EPSILON); subStep.inv_dt = 1.0f / subStep.dt; subStep.maxIterations = step.maxIterations; island.SolveTOI(subStep); // Post solve cleanup. for (int32 i = 0; i < island.m_bodyCount; ++i) { // Allow bodies to participate in future TOI islands. b2Body* b = island.m_bodies[i]; b->m_flags &= ~b2Body::e_islandFlag; if (b->m_flags & (b2Body::e_sleepFlag | b2Body::e_frozenFlag)) { continue; } if (b->IsStatic()) { continue; } // Update shapes (for broad-phase). If the shapes go out of // the world AABB then shapes and contacts may be destroyed, // including contacts that are bool inRange = b->SynchronizeShapes(); // Did the body's shapes leave the world? if (inRange == false && m_boundaryListener != NULL) { m_boundaryListener->Violation(b); } // Invalidate all contact TOIs associated with this body. Some of these // may not be in the island because they were not touching. for (b2ContactEdge* cn = b->m_contactList; cn; cn = cn->next) { cn->contact->m_flags &= ~b2Contact::e_toiFlag; } } for (int32 i = 0; i < island.m_contactCount; ++i) { // Allow contacts to participate in future TOI islands. b2Contact* c = island.m_contacts[i]; c->m_flags &= ~(b2Contact::e_toiFlag | b2Contact::e_islandFlag); } // Commit shape proxy movements to the broad-phase so that new contacts are created. // Also, some contacts can be destroyed. m_broadPhase->Commit(); } m_stackAllocator.Free(stack); } void b2World::Step(float32 dt, int32 iterations) { m_lock = true; b2TimeStep step; step.dt = dt; step.maxIterations = iterations; if (dt > 0.0f) { step.inv_dt = 1.0f / dt; } else { step.inv_dt = 0.0f; } step.dtRatio = m_inv_dt0 * dt; step.positionCorrection = m_positionCorrection; step.warmStarting = m_warmStarting; // Update contacts. m_contactManager.Collide(); // Integrate velocities, solve velocity constraints, and integrate positions. if (step.dt > 0.0f) { Solve(step); } // Handle TOI events. if (m_continuousPhysics && step.dt > 0.0f) { SolveTOI(step); } // Draw debug information. DrawDebugData(); m_inv_dt0 = step.inv_dt; m_lock = false; } int32 b2World::Query(const b2AABB& aabb, b2Shape** shapes, int32 maxCount) { void** results = (void**)m_stackAllocator.Allocate(maxCount * sizeof(void*)); int32 count = m_broadPhase->Query(aabb, results, maxCount); for (int32 i = 0; i < count; ++i) { shapes[i] = (b2Shape*)results[i]; } m_stackAllocator.Free(results); return count; } void b2World::DrawShape(b2Shape* shape, const b2XForm& xf, const b2Color& color, bool core) { b2Color coreColor(0.9f, 0.6f, 0.6f); switch (shape->GetType()) { case e_circleShape: { b2CircleShape* circle = (b2CircleShape*)shape; b2Vec2 center = b2Mul(xf, circle->GetLocalPosition()); float32 radius = circle->GetRadius(); b2Vec2 axis = xf.R.col1; m_debugDraw->DrawSolidCircle(center, radius, axis, color); if (core) { m_debugDraw->DrawCircle(center, radius - b2_toiSlop, coreColor); } } break; case e_polygonShape: { b2PolygonShape* poly = (b2PolygonShape*)shape; int32 vertexCount = poly->GetVertexCount(); const b2Vec2* localVertices = poly->GetVertices(); b2Assert(vertexCount <= b2_maxPolygonVertices); b2Vec2 vertices[b2_maxPolygonVertices]; for (int32 i = 0; i < vertexCount; ++i) { vertices[i] = b2Mul(xf, localVertices[i]); } m_debugDraw->DrawSolidPolygon(vertices, vertexCount, color); if (core) { const b2Vec2* localCoreVertices = poly->GetCoreVertices(); for (int32 i = 0; i < vertexCount; ++i) { vertices[i] = b2Mul(xf, localCoreVertices[i]); } m_debugDraw->DrawPolygon(vertices, vertexCount, coreColor); } } break; } } void b2World::DrawJoint(b2Joint* joint) { b2Body* b1 = joint->GetBody1(); b2Body* b2 = joint->GetBody2(); const b2XForm& xf1 = b1->GetXForm(); const b2XForm& xf2 = b2->GetXForm(); b2Vec2 x1 = xf1.position; b2Vec2 x2 = xf2.position; b2Vec2 p1 = joint->GetAnchor1(); b2Vec2 p2 = joint->GetAnchor2(); b2Color color(0.5f, 0.8f, 0.8f); switch (joint->GetType()) { case e_distanceJoint: m_debugDraw->DrawSegment(p1, p2, color); break; case e_pulleyJoint: { b2PulleyJoint* pulley = (b2PulleyJoint*)joint; b2Vec2 s1 = pulley->GetGroundAnchor1(); b2Vec2 s2 = pulley->GetGroundAnchor2(); m_debugDraw->DrawSegment(s1, p1, color); m_debugDraw->DrawSegment(s2, p2, color); m_debugDraw->DrawSegment(s1, s2, color); } break; case e_mouseJoint: // don't draw this break; default: m_debugDraw->DrawSegment(x1, p1, color); m_debugDraw->DrawSegment(p1, p2, color); m_debugDraw->DrawSegment(x2, p2, color); } } void b2World::DrawDebugData() { if (m_debugDraw == NULL) { return; } uint32 flags = m_debugDraw->GetFlags(); if (flags & b2DebugDraw::e_shapeBit) { bool core = (flags & b2DebugDraw::e_coreShapeBit) == b2DebugDraw::e_coreShapeBit; for (b2Body* b = m_bodyList; b; b = b->GetNext()) { const b2XForm& xf = b->GetXForm(); for (b2Shape* s = b->GetShapeList(); s; s = s->GetNext()) { if (b->IsStatic()) { DrawShape(s, xf, b2Color(0.5f, 0.9f, 0.5f), core); } else if (b->IsSleeping()) { DrawShape(s, xf, b2Color(0.5f, 0.5f, 0.9f), core); } else { DrawShape(s, xf, b2Color(0.9f, 0.9f, 0.9f), core); } } } } if (flags & b2DebugDraw::e_jointBit) { for (b2Joint* j = m_jointList; j; j = j->GetNext()) { if (j->GetType() != e_mouseJoint) { DrawJoint(j); } } } if (flags & b2DebugDraw::e_pairBit) { b2BroadPhase* bp = m_broadPhase; b2Vec2 invQ; invQ.Set(1.0f / bp->m_quantizationFactor.x, 1.0f / bp->m_quantizationFactor.y); b2Color color(0.9f, 0.9f, 0.3f); for (int32 i = 0; i < b2_tableCapacity; ++i) { uint16 index = bp->m_pairManager.m_hashTable[i]; while (index != b2_nullPair) { b2Pair* pair = bp->m_pairManager.m_pairs + index; b2Proxy* p1 = bp->m_proxyPool + pair->proxyId1; b2Proxy* p2 = bp->m_proxyPool + pair->proxyId2; b2AABB b1, b2; b1.lowerBound.x = bp->m_worldAABB.lowerBound.x + invQ.x * bp->m_bounds[0][p1->lowerBounds[0]].value; b1.lowerBound.y = bp->m_worldAABB.lowerBound.y + invQ.y * bp->m_bounds[1][p1->lowerBounds[1]].value; b1.upperBound.x = bp->m_worldAABB.lowerBound.x + invQ.x * bp->m_bounds[0][p1->upperBounds[0]].value; b1.upperBound.y = bp->m_worldAABB.lowerBound.y + invQ.y * bp->m_bounds[1][p1->upperBounds[1]].value; b2.lowerBound.x = bp->m_worldAABB.lowerBound.x + invQ.x * bp->m_bounds[0][p2->lowerBounds[0]].value; b2.lowerBound.y = bp->m_worldAABB.lowerBound.y + invQ.y * bp->m_bounds[1][p2->lowerBounds[1]].value; b2.upperBound.x = bp->m_worldAABB.lowerBound.x + invQ.x * bp->m_bounds[0][p2->upperBounds[0]].value; b2.upperBound.y = bp->m_worldAABB.lowerBound.y + invQ.y * bp->m_bounds[1][p2->upperBounds[1]].value; b2Vec2 x1 = 0.5f * (b1.lowerBound + b1.upperBound); b2Vec2 x2 = 0.5f * (b2.lowerBound + b2.upperBound); m_debugDraw->DrawSegment(x1, x2, color); index = pair->next; } } } if (flags & b2DebugDraw::e_aabbBit) { b2BroadPhase* bp = m_broadPhase; b2Vec2 worldLower = bp->m_worldAABB.lowerBound; b2Vec2 worldUpper = bp->m_worldAABB.upperBound; b2Vec2 invQ; invQ.Set(1.0f / bp->m_quantizationFactor.x, 1.0f / bp->m_quantizationFactor.y); b2Color color(0.9f, 0.3f, 0.9f); for (int32 i = 0; i < b2_maxProxies; ++i) { b2Proxy* p = bp->m_proxyPool + i; if (p->IsValid() == false) { continue; } b2AABB b; b.lowerBound.x = worldLower.x + invQ.x * bp->m_bounds[0][p->lowerBounds[0]].value; b.lowerBound.y = worldLower.y + invQ.y * bp->m_bounds[1][p->lowerBounds[1]].value; b.upperBound.x = worldLower.x + invQ.x * bp->m_bounds[0][p->upperBounds[0]].value; b.upperBound.y = worldLower.y + invQ.y * bp->m_bounds[1][p->upperBounds[1]].value; b2Vec2 vs[4]; vs[0].Set(b.lowerBound.x, b.lowerBound.y); vs[1].Set(b.upperBound.x, b.lowerBound.y); vs[2].Set(b.upperBound.x, b.upperBound.y); vs[3].Set(b.lowerBound.x, b.upperBound.y); m_debugDraw->DrawPolygon(vs, 4, color); } b2Vec2 vs[4]; vs[0].Set(worldLower.x, worldLower.y); vs[1].Set(worldUpper.x, worldLower.y); vs[2].Set(worldUpper.x, worldUpper.y); vs[3].Set(worldLower.x, worldUpper.y); m_debugDraw->DrawPolygon(vs, 4, b2Color(0.3f, 0.9f, 0.9f)); } if (flags & b2DebugDraw::e_obbBit) { b2Color color(0.5f, 0.3f, 0.5f); for (b2Body* b = m_bodyList; b; b = b->GetNext()) { const b2XForm& xf = b->GetXForm(); for (b2Shape* s = b->GetShapeList(); s; s = s->GetNext()) { if (s->GetType() != e_polygonShape) { continue; } b2PolygonShape* poly = (b2PolygonShape*)s; const b2OBB& obb = poly->GetOBB(); b2Vec2 h = obb.extents; b2Vec2 vs[4]; vs[0].Set(-h.x, -h.y); vs[1].Set( h.x, -h.y); vs[2].Set( h.x, h.y); vs[3].Set(-h.x, h.y); for (int32 i = 0; i < 4; ++i) { vs[i] = obb.center + b2Mul(obb.R, vs[i]); vs[i] = b2Mul(xf, vs[i]); } m_debugDraw->DrawPolygon(vs, 4, color); } } } if (flags & b2DebugDraw::e_centerOfMassBit) { for (b2Body* b = m_bodyList; b; b = b->GetNext()) { b2XForm xf = b->GetXForm(); xf.position = b->GetWorldCenter(); m_debugDraw->DrawXForm(xf); } } } void b2World::Validate() { m_broadPhase->Validate(); } int32 b2World::GetProxyCount() const { return m_broadPhase->m_proxyCount; } int32 b2World::GetPairCount() const { return m_broadPhase->m_pairManager.m_pairCount; } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/b2WorldCallbacks.cpp0000644000175000017500000000372712264274615024145 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2WorldCallbacks.h" #include "../Collision/Shapes/b2Shape.h" b2ContactFilter b2_defaultFilter; // Return true if contact calculations should be performed between these two shapes. // If you implement your own collision filter you may want to build from this implementation. bool b2ContactFilter::ShouldCollide(b2Shape* shape1, b2Shape* shape2) { const b2FilterData& filter1 = shape1->GetFilterData(); const b2FilterData& filter2 = shape2->GetFilterData(); if (filter1.groupIndex == filter2.groupIndex && filter1.groupIndex != 0) { return filter1.groupIndex > 0; } bool collide = (filter1.maskBits & filter2.categoryBits) != 0 && (filter1.categoryBits & filter2.maskBits) != 0; return collide; } b2DebugDraw::b2DebugDraw() { m_drawFlags = 0; } void b2DebugDraw::SetFlags(uint32 flags) { m_drawFlags = flags; } uint32 b2DebugDraw::GetFlags() const { return m_drawFlags; } void b2DebugDraw::AppendFlags(uint32 flags) { m_drawFlags |= flags; } void b2DebugDraw::ClearFlags(uint32 flags) { m_drawFlags &= ~flags; } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/b2World.h0000644000175000017500000001753112264274614022007 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_WORLD_H #define B2_WORLD_H #include "../Common/b2Math.h" #include "../Common/b2BlockAllocator.h" #include "../Common/b2StackAllocator.h" #include "b2ContactManager.h" #include "b2WorldCallbacks.h" struct b2AABB; struct b2ShapeDef; struct b2BodyDef; struct b2JointDef; class b2Body; class b2Joint; class b2Shape; class b2Contact; class b2BroadPhase; struct b2TimeStep { float32 dt; // time step float32 inv_dt; // inverse time step (0 if dt == 0). float32 dtRatio; // dt * inv_dt0 int32 maxIterations; bool warmStarting; bool positionCorrection; }; /// The world class manages all physics entities, dynamic simulation, /// and asynchronous queries. The world also contains efficient memory /// management facilities. class b2World { public: /// Construct a world object. /// @param worldAABB a bounding box that completely encompasses all your shapes. /// @param gravity the world gravity vector. /// @param doSleep improve performance by not simulating inactive bodies. b2World(const b2AABB& worldAABB, const b2Vec2& gravity, bool doSleep); /// Destruct the world. All physics entities are destroyed and all heap memory is released. ~b2World(); /// Register a destruction listener. void SetDestructionListener(b2DestructionListener* listener); /// Register a broad-phase boundary listener. void SetBoundaryListener(b2BoundaryListener* listener); /// Register a contact filter to provide specific control over collision. /// Otherwise the default filter is used (b2_defaultFilter). void SetContactFilter(b2ContactFilter* filter); /// Register a contact event listener void SetContactListener(b2ContactListener* listener); /// Register a routine for debug drawing. The debug draw functions are called /// inside the b2World::Step method, so make sure your renderer is ready to /// consume draw commands when you call Step(). void SetDebugDraw(b2DebugDraw* debugDraw); /// Create a rigid body given a definition. No reference to the definition /// is retained. /// @warning This function is locked during callbacks. b2Body* CreateBody(const b2BodyDef* def); /// Destroy a rigid body given a definition. No reference to the definition /// is retained. This function is locked during callbacks. /// @warning This automatically deletes all associated shapes and joints. /// @warning This function is locked during callbacks. void DestroyBody(b2Body* body); /// Create a joint to constrain bodies together. No reference to the definition /// is retained. This may cause the connected bodies to cease colliding. /// @warning This function is locked during callbacks. b2Joint* CreateJoint(const b2JointDef* def); /// Destroy a joint. This may cause the connected bodies to begin colliding. /// @warning This function is locked during callbacks. void DestroyJoint(b2Joint* joint); /// The world provides a single static ground body with no collision shapes. /// You can use this to simplify the creation of joints and static shapes. b2Body* GetGroundBody(); /// Take a time step. This performs collision detection, integration, /// and constraint solution. /// @param timeStep the amount of time to simulate, this should not vary. /// @param iterations the number of iterations to be used by the constraint solver. void Step(float32 timeStep, int32 iterations); /// Query the world for all shapes that potentially overlap the /// provided AABB. You provide a shape pointer buffer of specified /// size. The number of shapes found is returned. /// @param aabb the query box. /// @param shapes a user allocated shape pointer array of size maxCount (or greater). /// @param maxCount the capacity of the shapes array. /// @return the number of shapes found in aabb. int32 Query(const b2AABB& aabb, b2Shape** shapes, int32 maxCount); /// Get the world body list. With the returned body, use b2Body::GetNext to get /// the next body in the world list. A NULL body indicates the end of the list. /// @return the head of the world body list. b2Body* GetBodyList(); /// Get the world joint list. With the returned joint, use b2Joint::GetNext to get /// the next joint in the world list. A NULL joint indicates the end of the list. /// @return the head of the world joint list. b2Joint* GetJointList(); /// Re-filter a shape. This re-runs contact filtering on a shape. void Refilter(b2Shape* shape); /// Enable/disable warm starting. For testing. void SetWarmStarting(bool flag) { m_warmStarting = flag; } /// Enable/disable position correction. For testing. void SetPositionCorrection(bool flag) { m_positionCorrection = flag; } /// Enable/disable continuous physics. For testing. void SetContinuousPhysics(bool flag) { m_continuousPhysics = flag; } /// Perform validation of internal data structures. void Validate(); /// Get the number of broad-phase proxies. int32 GetProxyCount() const; /// Get the number of broad-phase pairs. int32 GetPairCount() const; /// Get the number of bodies. int32 GetBodyCount() const; /// Get the number joints. int32 GetJointCount() const; /// Get the number of contacts (each may have 0 or more contact points). int32 GetContactCount() const; /// Change the global gravity vector. void SetGravity(const b2Vec2& gravity); private: friend class b2Body; friend class b2ContactManager; void Solve(const b2TimeStep& step); void SolveTOI(const b2TimeStep& step); void DrawJoint(b2Joint* joint); void DrawShape(b2Shape* shape, const b2XForm& xf, const b2Color& color, bool core); void DrawDebugData(); b2BlockAllocator m_blockAllocator; b2StackAllocator m_stackAllocator; bool m_lock; b2BroadPhase* m_broadPhase; b2ContactManager m_contactManager; b2Body* m_bodyList; b2Joint* m_jointList; // Do not access b2Contact* m_contactList; int32 m_bodyCount; int32 m_contactCount; int32 m_jointCount; b2Vec2 m_gravity; bool m_allowSleep; b2Body* m_groundBody; b2DestructionListener* m_destructionListener; b2BoundaryListener* m_boundaryListener; b2ContactFilter* m_contactFilter; b2ContactListener* m_contactListener; b2DebugDraw* m_debugDraw; float32 m_inv_dt0; int32 m_positionIterationCount; // This is for debugging the solver. bool m_positionCorrection; // This is for debugging the solver. bool m_warmStarting; // This is for debugging the solver. bool m_continuousPhysics; }; inline b2Body* b2World::GetGroundBody() { return m_groundBody; } inline b2Body* b2World::GetBodyList() { return m_bodyList; } inline b2Joint* b2World::GetJointList() { return m_jointList; } inline int32 b2World::GetBodyCount() const { return m_bodyCount; } inline int32 b2World::GetJointCount() const { return m_jointCount; } inline int32 b2World::GetContactCount() const { return m_contactCount; } inline void b2World::SetGravity(const b2Vec2& gravity) { m_gravity = gravity; } #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/b2Island.h0000644000175000017500000000441612264274614022130 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_ISLAND_H #define B2_ISLAND_H #include "../Common/b2Math.h" class b2Contact; class b2Body; class b2Joint; class b2StackAllocator; class b2ContactListener; struct b2ContactConstraint; struct b2TimeStep; class b2Island { public: b2Island(int32 bodyCapacity, int32 contactCapacity, int32 jointCapacity, b2StackAllocator* allocator, b2ContactListener* listener); ~b2Island(); void Clear() { m_bodyCount = 0; m_contactCount = 0; m_jointCount = 0; } void Solve(const b2TimeStep& step, const b2Vec2& gravity, bool correctPositions, bool allowSleep); void SolveTOI(const b2TimeStep& subStep); void Add(b2Body* body) { b2Assert(m_bodyCount < m_bodyCapacity); m_bodies[m_bodyCount++] = body; } void Add(b2Contact* contact) { b2Assert(m_contactCount < m_contactCapacity); m_contacts[m_contactCount++] = contact; } void Add(b2Joint* joint) { b2Assert(m_jointCount < m_jointCapacity); m_joints[m_jointCount++] = joint; } void Report(b2ContactConstraint* constraints); b2StackAllocator* m_allocator; b2ContactListener* m_listener; b2Body** m_bodies; b2Contact** m_contacts; b2Joint** m_joints; int32 m_bodyCount; int32 m_jointCount; int32 m_contactCount; int32 m_bodyCapacity; int32 m_contactCapacity; int32 m_jointCapacity; int32 m_positionIterationCount; }; #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/b2WorldCallbacks.h0000644000175000017500000001351312264274614023603 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_WORLD_CALLBACKS_H #define B2_WORLD_CALLBACKS_H #include "../Common/b2Settings.h" struct b2Vec2; struct b2XForm; class b2Shape; class b2Body; class b2Joint; class b2Contact; struct b2ContactPoint; struct b2ContactResult; /// Joints and shapes are destroyed when their associated /// body is destroyed. Implement this listener so that you /// may nullify references to these joints and shapes. class b2DestructionListener { public: virtual ~b2DestructionListener() {} /// Called when any joint is about to be destroyed due /// to the destruction of one of its attached bodies. virtual void SayGoodbye(b2Joint* joint) = 0; /// Called when any shape is about to be destroyed due /// to the destruction of its parent body. virtual void SayGoodbye(b2Shape* shape) = 0; }; /// This is called when a body's shape passes outside of the world boundary. class b2BoundaryListener { public: virtual ~b2BoundaryListener() {} /// This is called for each body that leaves the world boundary. /// @warning you can't modify the world inside this callback. virtual void Violation(b2Body* body) = 0; }; /// Implement this class to provide collision filtering. In other words, you can implement /// this class if you want finer control over contact creation. class b2ContactFilter { public: virtual ~b2ContactFilter() {} /// Return true if contact calculations should be performed between these two shapes. /// @warning for performance reasons this is only called when the AABBs begin to overlap. virtual bool ShouldCollide(b2Shape* shape1, b2Shape* shape2); }; /// The default contact filter. extern b2ContactFilter b2_defaultFilter; /// Implement this class to get collision results. You can use these results for /// things like sounds and game logic. You can also get contact results by /// traversing the contact lists after the time step. However, you might miss /// some contacts because continuous physics leads to sub-stepping. /// Additionally you may receive multiple callbacks for the same contact in a /// single time step. /// You should strive to make your callbacks efficient because there may be /// many callbacks per time step. /// @warning The contact separation is the last computed value. /// @warning You cannot create/destroy Box2D entities inside these callbacks. class b2ContactListener { public: virtual ~b2ContactListener() {} /// Called when a contact point is added. This includes the geometry /// and the forces. virtual void Add(const b2ContactPoint* point) { B2_NOT_USED(point); } /// Called when a contact point persists. This includes the geometry /// and the forces. virtual void Persist(const b2ContactPoint* point) { B2_NOT_USED(point); } /// Called when a contact point is removed. This includes the last /// computed geometry and forces. virtual void Remove(const b2ContactPoint* point) { B2_NOT_USED(point); } /// Called after a contact point is solved. virtual void Result(const b2ContactResult* point) { B2_NOT_USED(point); } }; /// Color for debug drawing. Each value has the range [0,1]. struct b2Color { b2Color() {} b2Color(float32 r, float32 g, float32 b) : r(r), g(g), b(b) {} float32 r, g, b; }; /// Implement and register this class with a b2World to provide debug drawing of physics /// entities in your game. class b2DebugDraw { public: b2DebugDraw(); virtual ~b2DebugDraw() {} enum { e_shapeBit = 0x0001, ///< draw shapes e_jointBit = 0x0002, ///< draw joint connections e_coreShapeBit = 0x0004, ///< draw core (TOI) shapes e_aabbBit = 0x0008, ///< draw axis aligned bounding boxes e_obbBit = 0x0010, ///< draw oriented bounding boxes e_pairBit = 0x0020, ///< draw broad-phase pairs e_centerOfMassBit = 0x0040, ///< draw center of mass frame }; /// Set the drawing flags. void SetFlags(uint32 flags); /// Get the drawing flags. uint32 GetFlags() const; /// Append flags to the current flags. void AppendFlags(uint32 flags); /// Clear flags from the current flags. void ClearFlags(uint32 flags); /// Draw a closed polygon provided in CCW order. virtual void DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color) = 0; /// Draw a solid closed polygon provided in CCW order. virtual void DrawSolidPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color) = 0; /// Draw a circle. virtual void DrawCircle(const b2Vec2& center, float32 radius, const b2Color& color) = 0; /// Draw a solid circle. virtual void DrawSolidCircle(const b2Vec2& center, float32 radius, const b2Vec2& axis, const b2Color& color) = 0; /// Draw a line segment. virtual void DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color) = 0; /// Draw a transform. Choose your own length scale. /// @param xf a transform. virtual void DrawXForm(const b2XForm& xf) = 0; protected: uint32 m_drawFlags; }; #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/b2Island.cpp0000644000175000017500000003265612264274615022473 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Island.h" #include "b2Body.h" #include "b2World.h" #include "Contacts/b2Contact.h" #include "Contacts/b2ContactSolver.h" #include "Joints/b2Joint.h" #include "../Common/b2StackAllocator.h" /* Position Correction Notes ========================= I tried the several algorithms for position correction of the 2D revolute joint. I looked at these systems: - simple pendulum (1m diameter sphere on massless 5m stick) with initial angular velocity of 100 rad/s. - suspension bridge with 30 1m long planks of length 1m. - multi-link chain with 30 1m long links. Here are the algorithms: Baumgarte - A fraction of the position error is added to the velocity error. There is no separate position solver. Pseudo Velocities - After the velocity solver and position integration, the position error, Jacobian, and effective mass are recomputed. Then the velocity constraints are solved with pseudo velocities and a fraction of the position error is added to the pseudo velocity error. The pseudo velocities are initialized to zero and there is no warm-starting. After the position solver, the pseudo velocities are added to the positions. This is also called the First Order World method or the Position LCP method. Modified Nonlinear Gauss-Seidel (NGS) - Like Pseudo Velocities except the position error is re-computed for each constraint and the positions are updated after the constraint is solved. The radius vectors (aka Jacobians) are re-computed too (otherwise the algorithm has horrible instability). The pseudo velocity states are not needed because they are effectively zero at the beginning of each iteration. Since we have the current position error, we allow the iterations to terminate early if the error becomes smaller than b2_linearSlop. Full NGS or just NGS - Like Modified NGS except the effective mass are re-computed each time a constraint is solved. Here are the results: Baumgarte - this is the cheapest algorithm but it has some stability problems, especially with the bridge. The chain links separate easily close to the root and they jitter as they struggle to pull together. This is one of the most common methods in the field. The big drawback is that the position correction artificially affects the momentum, thus leading to instabilities and false bounce. I used a bias factor of 0.2. A larger bias factor makes the bridge less stable, a smaller factor makes joints and contacts more spongy. Pseudo Velocities - the is more stable than the Baumgarte method. The bridge is stable. However, joints still separate with large angular velocities. Drag the simple pendulum in a circle quickly and the joint will separate. The chain separates easily and does not recover. I used a bias factor of 0.2. A larger value lead to the bridge collapsing when a heavy cube drops on it. Modified NGS - this algorithm is better in some ways than Baumgarte and Pseudo Velocities, but in other ways it is worse. The bridge and chain are much more stable, but the simple pendulum goes unstable at high angular velocities. Full NGS - stable in all tests. The joints display good stiffness. The bridge still sags, but this is better than infinite forces. Recommendations Pseudo Velocities are not really worthwhile because the bridge and chain cannot recover from joint separation. In other cases the benefit over Baumgarte is small. Modified NGS is not a robust method for the revolute joint due to the violent instability seen in the simple pendulum. Perhaps it is viable with other constraint types, especially scalar constraints where the effective mass is a scalar. This leaves Baumgarte and Full NGS. Baumgarte has small, but manageable instabilities and is very fast. I don't think we can escape Baumgarte, especially in highly demanding cases where high constraint fidelity is not needed. Full NGS is robust and easy on the eyes. I recommend this as an option for higher fidelity simulation and certainly for suspension bridges and long chains. Full NGS might be a good choice for ragdolls, especially motorized ragdolls where joint separation can be problematic. The number of NGS iterations can be reduced for better performance without harming robustness much. Each joint in a can be handled differently in the position solver. So I recommend a system where the user can select the algorithm on a per joint basis. I would probably default to the slower Full NGS and let the user select the faster Baumgarte method in performance critical scenarios. */ b2Island::b2Island( int32 bodyCapacity, int32 contactCapacity, int32 jointCapacity, b2StackAllocator* allocator, b2ContactListener* listener) { m_bodyCapacity = bodyCapacity; m_contactCapacity = contactCapacity; m_jointCapacity = jointCapacity; m_bodyCount = 0; m_contactCount = 0; m_jointCount = 0; m_allocator = allocator; m_listener = listener; m_bodies = (b2Body**)m_allocator->Allocate(bodyCapacity * sizeof(b2Body*)); m_contacts = (b2Contact**)m_allocator->Allocate(contactCapacity * sizeof(b2Contact*)); m_joints = (b2Joint**)m_allocator->Allocate(jointCapacity * sizeof(b2Joint*)); m_positionIterationCount = 0; } b2Island::~b2Island() { // Warning: the order should reverse the constructor order. m_allocator->Free(m_joints); m_allocator->Free(m_contacts); m_allocator->Free(m_bodies); } void b2Island::Solve(const b2TimeStep& step, const b2Vec2& gravity, bool correctPositions, bool allowSleep) { // Integrate velocities and apply damping. for (int32 i = 0; i < m_bodyCount; ++i) { b2Body* b = m_bodies[i]; if (b->IsStatic()) continue; // Integrate velocities. b->m_linearVelocity += step.dt * (gravity + b->m_invMass * b->m_force); b->m_angularVelocity += step.dt * b->m_invI * b->m_torque; // Reset forces. b->m_force.Set(0.0f, 0.0f); b->m_torque = 0.0f; // Apply damping. // ODE: dv/dt + c * v = 0 // Solution: v(t) = v0 * exp(-c * t) // Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt) // v2 = exp(-c * dt) * v1 // Taylor expansion: // v2 = (1.0f - c * dt) * v1 b->m_linearVelocity *= b2Clamp(1.0f - step.dt * b->m_linearDamping, 0.0f, 1.0f); b->m_angularVelocity *= b2Clamp(1.0f - step.dt * b->m_angularDamping, 0.0f, 1.0f); // Check for large velocities. #ifdef TARGET_FLOAT32_IS_FIXED // Fixed point code written this way to prevent // overflows, float code is optimized for speed float32 vMagnitude = b->m_linearVelocity.Length(); if(vMagnitude > b2_maxLinearVelocity) { b->m_linearVelocity *= b2_maxLinearVelocity/vMagnitude; } b->m_angularVelocity = b2Clamp(b->m_angularVelocity, -b2_maxAngularVelocity, b2_maxAngularVelocity); #else if (b2Dot(b->m_linearVelocity, b->m_linearVelocity) > b2_maxLinearVelocitySquared) { b->m_linearVelocity.Normalize(); b->m_linearVelocity *= b2_maxLinearVelocity; } if (b->m_angularVelocity * b->m_angularVelocity > b2_maxAngularVelocitySquared) { if (b->m_angularVelocity < 0.0f) { b->m_angularVelocity = -b2_maxAngularVelocity; } else { b->m_angularVelocity = b2_maxAngularVelocity; } } #endif } b2ContactSolver contactSolver(step, m_contacts, m_contactCount, m_allocator); // Initialize velocity constraints. contactSolver.InitVelocityConstraints(step); for (int32 i = 0; i < m_jointCount; ++i) { m_joints[i]->InitVelocityConstraints(step); } // Solve velocity constraints. for (int32 i = 0; i < step.maxIterations; ++i) { contactSolver.SolveVelocityConstraints(); for (int32 j = 0; j < m_jointCount; ++j) { m_joints[j]->SolveVelocityConstraints(step); } } // Post-solve (store impulses for warm starting). contactSolver.FinalizeVelocityConstraints(); // Integrate positions. for (int32 i = 0; i < m_bodyCount; ++i) { b2Body* b = m_bodies[i]; if (b->IsStatic()) continue; // Store positions for continuous collision. b->m_sweep.c0 = b->m_sweep.c; b->m_sweep.a0 = b->m_sweep.a; // Integrate b->m_sweep.c += step.dt * b->m_linearVelocity; b->m_sweep.a += step.dt * b->m_angularVelocity; // Compute new transform b->SynchronizeTransform(); // Note: shapes are synchronized later. } if (correctPositions) { // Initialize position constraints. // Contacts don't need initialization. for (int32 i = 0; i < m_jointCount; ++i) { m_joints[i]->InitPositionConstraints(); } // Iterate over constraints. for (m_positionIterationCount = 0; m_positionIterationCount < step.maxIterations; ++m_positionIterationCount) { bool contactsOkay = contactSolver.SolvePositionConstraints(b2_contactBaumgarte); bool jointsOkay = true; for (int i = 0; i < m_jointCount; ++i) { bool jointOkay = m_joints[i]->SolvePositionConstraints(); jointsOkay = jointsOkay && jointOkay; } if (contactsOkay && jointsOkay) { break; } } } Report(contactSolver.m_constraints); if (allowSleep) { float32 minSleepTime = B2_FLT_MAX; #ifndef TARGET_FLOAT32_IS_FIXED const float32 linTolSqr = b2_linearSleepTolerance * b2_linearSleepTolerance; const float32 angTolSqr = b2_angularSleepTolerance * b2_angularSleepTolerance; #endif for (int32 i = 0; i < m_bodyCount; ++i) { b2Body* b = m_bodies[i]; if (b->m_invMass == 0.0f) { continue; } if ((b->m_flags & b2Body::e_allowSleepFlag) == 0) { b->m_sleepTime = 0.0f; minSleepTime = 0.0f; } if ((b->m_flags & b2Body::e_allowSleepFlag) == 0 || #ifdef TARGET_FLOAT32_IS_FIXED b2Abs(b->m_angularVelocity) > b2_angularSleepTolerance || b2Abs(b->m_linearVelocity.x) > b2_linearSleepTolerance || b2Abs(b->m_linearVelocity.y) > b2_linearSleepTolerance) #else b->m_angularVelocity * b->m_angularVelocity > angTolSqr || b2Dot(b->m_linearVelocity, b->m_linearVelocity) > linTolSqr) #endif { b->m_sleepTime = 0.0f; minSleepTime = 0.0f; } else { b->m_sleepTime += step.dt; minSleepTime = b2Min(minSleepTime, b->m_sleepTime); } } if (minSleepTime >= b2_timeToSleep) { for (int32 i = 0; i < m_bodyCount; ++i) { b2Body* b = m_bodies[i]; b->m_flags |= b2Body::e_sleepFlag; b->m_linearVelocity = b2Vec2_zero; b->m_angularVelocity = 0.0f; } } } } void b2Island::SolveTOI(const b2TimeStep& subStep) { b2ContactSolver contactSolver(subStep, m_contacts, m_contactCount, m_allocator); // No warm starting needed for TOI events. // Solve velocity constraints. for (int32 i = 0; i < subStep.maxIterations; ++i) { contactSolver.SolveVelocityConstraints(); } // Don't store the TOI contact forces for warm starting // because they can be quite large. // Integrate positions. for (int32 i = 0; i < m_bodyCount; ++i) { b2Body* b = m_bodies[i]; if (b->IsStatic()) continue; // Store positions for continuous collision. b->m_sweep.c0 = b->m_sweep.c; b->m_sweep.a0 = b->m_sweep.a; // Integrate b->m_sweep.c += subStep.dt * b->m_linearVelocity; b->m_sweep.a += subStep.dt * b->m_angularVelocity; // Compute new transform b->SynchronizeTransform(); // Note: shapes are synchronized later. } // Solve position constraints. const float32 k_toiBaumgarte = 0.75f; for (int32 i = 0; i < subStep.maxIterations; ++i) { bool contactsOkay = contactSolver.SolvePositionConstraints(k_toiBaumgarte); if (contactsOkay) { break; } } Report(contactSolver.m_constraints); } void b2Island::Report(b2ContactConstraint* constraints) { if (m_listener == NULL) { return; } for (int32 i = 0; i < m_contactCount; ++i) { b2Contact* c = m_contacts[i]; b2ContactConstraint* cc = constraints + i; b2ContactResult cr; cr.shape1 = c->GetShape1(); cr.shape2 = c->GetShape2(); b2Body* b1 = cr.shape1->GetBody(); int32 manifoldCount = c->GetManifoldCount(); b2Manifold* manifolds = c->GetManifolds(); for (int32 j = 0; j < manifoldCount; ++j) { b2Manifold* manifold = manifolds + j; cr.normal = manifold->normal; for (int32 k = 0; k < manifold->pointCount; ++k) { b2ManifoldPoint* point = manifold->points + k; b2ContactConstraintPoint* ccp = cc->points + k; cr.position = b1->GetWorldPoint(point->localPoint1); // TOI constraint results are not stored, so get // the result from the constraint. cr.normalImpulse = ccp->normalImpulse; cr.tangentImpulse = ccp->tangentImpulse; cr.id = point->id; m_listener->Result(&cr); } } } } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/b2Body.cpp0000644000175000017500000001753412264274614022153 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Body.h" #include "b2World.h" #include "Joints/b2Joint.h" #include "../Collision/Shapes/b2Shape.h" b2Body::b2Body(const b2BodyDef* bd, b2World* world) { b2Assert(world->m_lock == false); m_flags = 0; if (bd->isBullet) { m_flags |= e_bulletFlag; } if (bd->fixedRotation) { m_flags |= e_fixedRotationFlag; } if (bd->allowSleep) { m_flags |= e_allowSleepFlag; } if (bd->isSleeping) { m_flags |= e_sleepFlag; } m_world = world; m_xf.position = bd->position; m_xf.R.Set(bd->angle); m_sweep.localCenter = bd->massData.center; m_sweep.t0 = 1.0f; m_sweep.a0 = m_sweep.a = bd->angle; m_sweep.c0 = m_sweep.c = b2Mul(m_xf, m_sweep.localCenter); m_jointList = NULL; m_contactList = NULL; m_prev = NULL; m_next = NULL; m_linearDamping = bd->linearDamping; m_angularDamping = bd->angularDamping; m_force.Set(0.0f, 0.0f); m_torque = 0.0f; m_linearVelocity.SetZero(); m_angularVelocity = 0.0f; m_sleepTime = 0.0f; m_invMass = 0.0f; m_I = 0.0f; m_invI = 0.0f; m_mass = bd->massData.mass; if (m_mass > 0.0f) { m_invMass = 1.0f / m_mass; } if ((m_flags & b2Body::e_fixedRotationFlag) == 0) { m_I = bd->massData.I; } if (m_I > 0.0f) { m_invI = 1.0f / m_I; } if (m_invMass == 0.0f && m_invI == 0.0f) { m_type = e_staticType; } else { m_type = e_dynamicType; } m_userData = bd->userData; m_shapeList = NULL; m_shapeCount = 0; } b2Body::~b2Body() { b2Assert(m_world->m_lock == false); // shapes and joints are destroyed in b2World::Destroy } b2Shape* b2Body::CreateShape(b2ShapeDef* def) { b2Assert(m_world->m_lock == false); if (m_world->m_lock == true) { return NULL; } b2Shape* s = b2Shape::Create(def, &m_world->m_blockAllocator); s->m_next = m_shapeList; m_shapeList = s; ++m_shapeCount; s->m_body = this; // Add the shape to the world's broad-phase. s->CreateProxy(m_world->m_broadPhase, m_xf); // Compute the sweep radius for CCD. s->UpdateSweepRadius(m_sweep.localCenter); return s; } void b2Body::DestroyShape(b2Shape* s) { b2Assert(m_world->m_lock == false); if (m_world->m_lock == true) { return; } b2Assert(s->GetBody() == this); s->DestroyProxy(m_world->m_broadPhase); b2Assert(m_shapeCount > 0); b2Shape** node = &m_shapeList; bool found = false; while (*node != NULL) { if (*node == s) { *node = s->m_next; found = true; break; } node = &(*node)->m_next; } // You tried to remove a shape that is not attached to this body. b2Assert(found); s->m_body = NULL; s->m_next = NULL; --m_shapeCount; b2Shape::Destroy(s, &m_world->m_blockAllocator); } // TODO_ERIN adjust linear velocity and torque to account for movement of center. void b2Body::SetMass(const b2MassData* massData) { b2Assert(m_world->m_lock == false); if (m_world->m_lock == true) { return; } m_invMass = 0.0f; m_I = 0.0f; m_invI = 0.0f; m_mass = massData->mass; if (m_mass > 0.0f) { m_invMass = 1.0f / m_mass; } if ((m_flags & b2Body::e_fixedRotationFlag) == 0) { m_I = massData->I; } if (m_I > 0.0f) { m_invI = 1.0f / m_I; } // Move center of mass. m_sweep.localCenter = massData->center; m_sweep.c0 = m_sweep.c = b2Mul(m_xf, m_sweep.localCenter); // Update the sweep radii of all child shapes. for (b2Shape* s = m_shapeList; s; s = s->m_next) { s->UpdateSweepRadius(m_sweep.localCenter); } int16 oldType = m_type; if (m_invMass == 0.0f && m_invI == 0.0f) { m_type = e_staticType; } else { m_type = e_dynamicType; } // If the body type changed, we need to refilter the broad-phase proxies. if (oldType != m_type) { for (b2Shape* s = m_shapeList; s; s = s->m_next) { s->RefilterProxy(m_world->m_broadPhase, m_xf); } } } // TODO_ERIN adjust linear velocity and torque to account for movement of center. void b2Body::SetMassFromShapes() { b2Assert(m_world->m_lock == false); if (m_world->m_lock == true) { return; } // Compute mass data from shapes. Each shape has its own density. m_mass = 0.0f; m_invMass = 0.0f; m_I = 0.0f; m_invI = 0.0f; b2Vec2 center = b2Vec2_zero; for (b2Shape* s = m_shapeList; s; s = s->m_next) { b2MassData massData; s->ComputeMass(&massData); m_mass += massData.mass; center += massData.mass * massData.center; m_I += massData.I; } // Compute center of mass, and shift the origin to the COM. if (m_mass > 0.0f) { m_invMass = 1.0f / m_mass; center *= m_invMass; } if (m_I > 0.0f && (m_flags & e_fixedRotationFlag) == 0) { // Center the inertia about the center of mass. m_I -= m_mass * b2Dot(center, center); b2Assert(m_I > 0.0f); m_invI = 1.0f / m_I; } else { m_I = 0.0f; m_invI = 0.0f; } // Move center of mass. m_sweep.localCenter = center; m_sweep.c0 = m_sweep.c = b2Mul(m_xf, m_sweep.localCenter); // Update the sweep radii of all child shapes. for (b2Shape* s = m_shapeList; s; s = s->m_next) { s->UpdateSweepRadius(m_sweep.localCenter); } int16 oldType = m_type; if (m_invMass == 0.0f && m_invI == 0.0f) { m_type = e_staticType; } else { m_type = e_dynamicType; } // If the body type changed, we need to refilter the broad-phase proxies. if (oldType != m_type) { for (b2Shape* s = m_shapeList; s; s = s->m_next) { s->RefilterProxy(m_world->m_broadPhase, m_xf); } } } bool b2Body::SetXForm(const b2Vec2& position, float32 angle) { b2Assert(m_world->m_lock == false); if (m_world->m_lock == true) { return true; } if (IsFrozen()) { return false; } m_xf.R.Set(angle); m_xf.position = position; m_sweep.c0 = m_sweep.c = b2Mul(m_xf, m_sweep.localCenter); m_sweep.a0 = m_sweep.a = angle; bool freeze = false; for (b2Shape* s = m_shapeList; s; s = s->m_next) { bool inRange = s->Synchronize(m_world->m_broadPhase, m_xf, m_xf); if (inRange == false) { freeze = true; break; } } if (freeze == true) { m_flags |= e_frozenFlag; m_linearVelocity.SetZero(); m_angularVelocity = 0.0f; for (b2Shape* s = m_shapeList; s; s = s->m_next) { s->DestroyProxy(m_world->m_broadPhase); } // Failure return false; } // Success m_world->m_broadPhase->Commit(); return true; } bool b2Body::SynchronizeShapes() { b2XForm xf1; xf1.R.Set(m_sweep.a0); xf1.position = m_sweep.c0 - b2Mul(xf1.R, m_sweep.localCenter); bool inRange = true; for (b2Shape* s = m_shapeList; s; s = s->m_next) { inRange = s->Synchronize(m_world->m_broadPhase, xf1, m_xf); if (inRange == false) { break; } } if (inRange == false) { m_flags |= e_frozenFlag; m_linearVelocity.SetZero(); m_angularVelocity = 0.0f; for (b2Shape* s = m_shapeList; s; s = s->m_next) { s->DestroyProxy(m_world->m_broadPhase); } // Failure return false; } // Success return true; } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/b2Body.h0000644000175000017500000003676212264274615021625 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_BODY_H #define B2_BODY_H #include "../Common/b2Math.h" #include "../Collision/Shapes/b2Shape.h" #include "Joints/b2Joint.h" #include class b2Joint; class b2Contact; class b2World; struct b2JointEdge; struct b2ContactEdge; /// A body definition holds all the data needed to construct a rigid body. /// You can safely re-use body definitions. struct b2BodyDef { /// This constructor sets the body definition default values. b2BodyDef() { massData.center.SetZero(); massData.mass = 0.0f; massData.I = 0.0f; userData = NULL; position.Set(0.0f, 0.0f); angle = 0.0f; linearDamping = 0.0f; angularDamping = 0.0f; allowSleep = true; isSleeping = false; fixedRotation = false; isBullet = false; } /// You can use this to initialized the mass properties of the body. /// If you prefer, you can set the mass properties after the shapes /// have been added using b2Body::SetMassFromShapes. b2MassData massData; /// Use this to store application specific body data. void* userData; /// The world position of the body. Avoid creating bodies at the origin /// since this can lead to many overlapping shapes. b2Vec2 position; /// The world angle of the body in radians. float32 angle; /// Linear damping is use to reduce the linear velocity. The damping parameter /// can be larger than 1.0f but the damping effect becomes sensitive to the /// time step when the damping parameter is large. float32 linearDamping; /// Angular damping is use to reduce the angular velocity. The damping parameter /// can be larger than 1.0f but the damping effect becomes sensitive to the /// time step when the damping parameter is large. float32 angularDamping; /// Set this flag to false if this body should never fall asleep. Note that /// this increases CPU usage. bool allowSleep; /// Is this body initially sleeping? bool isSleeping; /// Should this body be prevented from rotating? Useful for characters. bool fixedRotation; /// Is this a fast moving body that should be prevented from tunneling through /// other moving bodies? Note that all bodies are prevented from tunneling through /// static bodies. /// @warning You should use this flag sparingly since it increases processing time. bool isBullet; }; /// A rigid body. class b2Body { public: /// Creates a shape and attach it to this body. /// @param shapeDef the shape definition. /// @warning This function is locked during callbacks. b2Shape* CreateShape(b2ShapeDef* shapeDef); /// Destroy a shape. This removes the shape from the broad-phase and /// therefore destroys any contacts associated with this shape. All shapes /// attached to a body are implicitly destroyed when the body is destroyed. /// @param shape the shape to be removed. /// @warning This function is locked during callbacks. void DestroyShape(b2Shape* shape); /// Set the mass properties. Note that this changes the center of mass position. /// If you are not sure how to compute mass properties, use SetMassFromShapes. /// The inertia tensor is assumed to be relative to the center of mass. /// @param massData the mass properties. void SetMass(const b2MassData* massData); /// Compute the mass properties from the attached shapes. You typically call this /// after adding all the shapes. If you add or remove shapes later, you may want /// to call this again. Note that this changes the center of mass position. void SetMassFromShapes(); /// Set the position of the body's origin and rotation (radians). /// This breaks any contacts and wakes the other bodies. /// @param position the new world position of the body's origin (not necessarily /// the center of mass). /// @param angle the new world rotation angle of the body in radians. /// @return false if the movement put a shape outside the world. In this case the /// body is automatically frozen. bool SetXForm(const b2Vec2& position, float32 angle); /// Get the body transform for the body's origin. /// @return the world transform of the body's origin. const b2XForm& GetXForm() const; /// Get the world body origin position. /// @return the world position of the body's origin. const b2Vec2& GetPosition() const; /// Get the angle in radians. /// @return the current world rotation angle in radians. float32 GetAngle() const; /// Get the world position of the center of mass. const b2Vec2& GetWorldCenter() const; /// Get the local position of the center of mass. const b2Vec2& GetLocalCenter() const; /// Set the linear velocity of the center of mass. /// @param v the new linear velocity of the center of mass. void SetLinearVelocity(const b2Vec2& v); /// Get the linear velocity of the center of mass. /// @return the linear velocity of the center of mass. b2Vec2 GetLinearVelocity() const; /// Set the angular velocity. /// @param omega the new angular velocity in radians/second. void SetAngularVelocity(float32 omega); /// Get the angular velocity. /// @return the angular velocity in radians/second. float32 GetAngularVelocity() const; /// Apply a force at a world point. If the force is not /// applied at the center of mass, it will generate a torque and /// affect the angular velocity. This wakes up the body. /// @param force the world force vector, usually in Newtons (N). /// @param point the world position of the point of application. void ApplyForce(const b2Vec2& force, const b2Vec2& point); /// Apply a torque. This affects the angular velocity /// without affecting the linear velocity of the center of mass. /// This wakes up the body. /// @param torque about the z-axis (out of the screen), usually in N-m. void ApplyTorque(float32 torque); /// Apply an impulse at a point. This immediately modifies the velocity. /// It also modifies the angular velocity if the point of application /// is not at the center of mass. This wakes up the body. /// @param impulse the world impulse vector, usually in N-seconds or kg-m/s. /// @param point the world position of the point of application. void ApplyImpulse(const b2Vec2& impulse, const b2Vec2& point); /// Get the total mass of the body. /// @return the mass, usually in kilograms (kg). float32 GetMass() const; /// Get the central rotational inertia of the body. /// @return the rotational inertia, usually in kg-m^2. float32 GetInertia() const; /// Get the world coordinates of a point given the local coordinates. /// @param localPoint a point on the body measured relative the the body's origin. /// @return the same point expressed in world coordinates. b2Vec2 GetWorldPoint(const b2Vec2& localPoint) const; /// Get the world coordinates of a vector given the local coordinates. /// @param localVector a vector fixed in the body. /// @return the same vector expressed in world coordinates. b2Vec2 GetWorldVector(const b2Vec2& localVector) const; /// Gets a local point relative to the body's origin given a world point. /// @param a point in world coordinates. /// @return the corresponding local point relative to the body's origin. b2Vec2 GetLocalPoint(const b2Vec2& worldPoint) const; /// Gets a local vector given a world vector. /// @param a vector in world coordinates. /// @return the corresponding local vector. b2Vec2 GetLocalVector(const b2Vec2& worldVector) const; /// Get the world linear velocity of a world point attached to this body. /// @param a point in world coordinates. /// @return the world velocity of a point. b2Vec2 GetLinearVelocityFromWorldPoint(const b2Vec2& worldPoint) const; /// Get the world velocity of a local point. /// @param a point in local coordinates. /// @return the world velocity of a point. b2Vec2 GetLinearVelocityFromLocalPoint(const b2Vec2& localPoint) const; /// Is this body treated like a bullet for continuous collision detection? bool IsBullet() const; /// Should this body be treated like a bullet for continuous collision detection? void SetBullet(bool flag); /// Is this body static (immovable)? bool IsStatic() const; /// Is this body dynamic (movable)? bool IsDynamic() const; /// Is this body frozen? bool IsFrozen() const; /// Is this body sleeping (not simulating). bool IsSleeping() const; /// You can disable sleeping on this body. void AllowSleeping(bool flag); /// Wake up this body so it will begin simulating. void WakeUp(); /// Put this body to sleep so it will stop simulating. /// This also sets the velocity to zero. void PutToSleep(); /// Get the list of all shapes attached to this body. b2Shape* GetShapeList(); /// Get the list of all joints attached to this body. b2JointEdge* GetJointList(); /// Get the next body in the world's body list. b2Body* GetNext(); /// Get the user data pointer that was provided in the body definition. void* GetUserData(); /// Set the user data. Use this to store your application specific data. void SetUserData(void* data); /// Get the parent world of this body. b2World* GetWorld(); private: friend class b2World; friend class b2Island; friend class b2ContactManager; friend class b2ContactSolver; friend class b2DistanceJoint; friend class b2GearJoint; friend class b2MouseJoint; friend class b2PrismaticJoint; friend class b2PulleyJoint; friend class b2RevoluteJoint; // m_flags enum { e_frozenFlag = 0x0002, e_islandFlag = 0x0004, e_sleepFlag = 0x0008, e_allowSleepFlag = 0x0010, e_bulletFlag = 0x0020, e_fixedRotationFlag = 0x0040, }; // m_type enum { e_staticType, e_dynamicType, e_maxTypes, }; b2Body(const b2BodyDef* bd, b2World* world); ~b2Body(); bool SynchronizeShapes(); void SynchronizeTransform(); // This is used to prevent connected bodies from colliding. // It may lie, depending on the collideConnected flag. bool IsConnected(const b2Body* other) const; void Advance(float32 t); uint16 m_flags; int16 m_type; b2XForm m_xf; // the body origin transform b2Sweep m_sweep; // the swept motion for CCD b2Vec2 m_linearVelocity; float32 m_angularVelocity; b2Vec2 m_force; float32 m_torque; b2World* m_world; b2Body* m_prev; b2Body* m_next; b2Shape* m_shapeList; int32 m_shapeCount; b2JointEdge* m_jointList; b2ContactEdge* m_contactList; float32 m_mass, m_invMass; float32 m_I, m_invI; float32 m_linearDamping; float32 m_angularDamping; float32 m_sleepTime; void* m_userData; }; inline const b2XForm& b2Body::GetXForm() const { return m_xf; } inline const b2Vec2& b2Body::GetPosition() const { return m_xf.position; } inline float32 b2Body::GetAngle() const { return m_sweep.a; } inline const b2Vec2& b2Body::GetWorldCenter() const { return m_sweep.c; } inline const b2Vec2& b2Body::GetLocalCenter() const { return m_sweep.localCenter; } inline void b2Body::SetLinearVelocity(const b2Vec2& v) { m_linearVelocity = v; } inline b2Vec2 b2Body::GetLinearVelocity() const { return m_linearVelocity; } inline void b2Body::SetAngularVelocity(float32 w) { m_angularVelocity = w; } inline float32 b2Body::GetAngularVelocity() const { return m_angularVelocity; } inline float32 b2Body::GetMass() const { return m_mass; } inline float32 b2Body::GetInertia() const { return m_I; } inline b2Vec2 b2Body::GetWorldPoint(const b2Vec2& localPoint) const { return b2Mul(m_xf, localPoint); } inline b2Vec2 b2Body::GetWorldVector(const b2Vec2& localVector) const { return b2Mul(m_xf.R, localVector); } inline b2Vec2 b2Body::GetLocalPoint(const b2Vec2& worldPoint) const { return b2MulT(m_xf, worldPoint); } inline b2Vec2 b2Body::GetLocalVector(const b2Vec2& worldVector) const { return b2MulT(m_xf.R, worldVector); } inline b2Vec2 b2Body::GetLinearVelocityFromWorldPoint(const b2Vec2& worldPoint) const { return m_linearVelocity + b2Cross(m_angularVelocity, worldPoint - m_sweep.c); } inline b2Vec2 b2Body::GetLinearVelocityFromLocalPoint(const b2Vec2& localPoint) const { return GetLinearVelocityFromWorldPoint(GetWorldPoint(localPoint)); } inline bool b2Body::IsBullet() const { return (m_flags & e_bulletFlag) == e_bulletFlag; } inline void b2Body::SetBullet(bool flag) { if (flag) { m_flags |= e_bulletFlag; } else { m_flags &= ~e_bulletFlag; } } inline bool b2Body::IsStatic() const { return m_type == e_staticType; } inline bool b2Body::IsDynamic() const { return m_type == e_dynamicType; } inline bool b2Body::IsFrozen() const { return (m_flags & e_frozenFlag) == e_frozenFlag; } inline bool b2Body::IsSleeping() const { return (m_flags & e_sleepFlag) == e_sleepFlag; } inline void b2Body::AllowSleeping(bool flag) { if (flag) { m_flags |= e_allowSleepFlag; } else { m_flags &= ~e_allowSleepFlag; WakeUp(); } } inline void b2Body::WakeUp() { m_flags &= ~e_sleepFlag; m_sleepTime = 0.0f; } inline void b2Body::PutToSleep() { m_flags |= e_sleepFlag; m_sleepTime = 0.0f; m_linearVelocity.SetZero(); m_angularVelocity = 0.0f; m_force.SetZero(); m_torque = 0.0f; } inline b2Shape* b2Body::GetShapeList() { return m_shapeList; } inline b2JointEdge* b2Body::GetJointList() { return m_jointList; } inline b2Body* b2Body::GetNext() { return m_next; } inline void* b2Body::GetUserData() { return m_userData; } inline void b2Body::SetUserData(void* data) { m_userData = data; } inline bool b2Body::IsConnected(const b2Body* other) const { for (b2JointEdge* jn = m_jointList; jn; jn = jn->next) { if (jn->other == other) return jn->joint->m_collideConnected == false; } return false; } inline void b2Body::ApplyForce(const b2Vec2& force, const b2Vec2& point) { if (IsSleeping()) { WakeUp(); } m_force += force; m_torque += b2Cross(point - m_sweep.c, force); } inline void b2Body::ApplyTorque(float32 torque) { if (IsSleeping()) { WakeUp(); } m_torque += torque; } inline void b2Body::ApplyImpulse(const b2Vec2& impulse, const b2Vec2& point) { if (IsSleeping()) { WakeUp(); } m_linearVelocity += m_invMass * impulse; m_angularVelocity += m_invI * b2Cross(point - m_sweep.c, impulse); } inline void b2Body::SynchronizeTransform() { m_xf.R.Set(m_sweep.a); m_xf.position = m_sweep.c - b2Mul(m_xf.R, m_sweep.localCenter); } inline void b2Body::Advance(float32 t) { // Advance to the new safe time. m_sweep.Advance(t); m_sweep.c = m_sweep.c0; m_sweep.a = m_sweep.a0; SynchronizeTransform(); } inline b2World* b2Body::GetWorld() { return m_world; } #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Contacts/0000755000175000017500000000000012264274615022073 5ustar warp10warp10numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp0000644000175000017500000001115512264274615027032 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include #include "b2PolyAndCircleContact.h" #include "../b2Body.h" #include "../b2WorldCallbacks.h" #include "../../Common/b2BlockAllocator.h" #include b2Contact* b2PolyAndCircleContact::Create(b2Shape* shape1, b2Shape* shape2, b2BlockAllocator* allocator) { void* mem = allocator->Allocate(sizeof(b2PolyAndCircleContact)); return new (mem) b2PolyAndCircleContact(shape1, shape2); } void b2PolyAndCircleContact::Destroy(b2Contact* contact, b2BlockAllocator* allocator) { ((b2PolyAndCircleContact*)contact)->~b2PolyAndCircleContact(); allocator->Free(contact, sizeof(b2PolyAndCircleContact)); } b2PolyAndCircleContact::b2PolyAndCircleContact(b2Shape* s1, b2Shape* s2) : b2Contact(s1, s2) { b2Assert(m_shape1->GetType() == e_polygonShape); b2Assert(m_shape2->GetType() == e_circleShape); m_manifold.pointCount = 0; m_manifold.points[0].normalImpulse = 0.0f; m_manifold.points[0].tangentImpulse = 0.0f; } void b2PolyAndCircleContact::Evaluate(b2ContactListener* listener) { b2Body* b1 = m_shape1->GetBody(); b2Body* b2 = m_shape2->GetBody(); b2Manifold m0; memcpy(&m0, &m_manifold, sizeof(b2Manifold)); b2CollidePolygonAndCircle(&m_manifold, (b2PolygonShape*)m_shape1, b1->GetXForm(), (b2CircleShape*)m_shape2, b2->GetXForm()); bool persisted[b2_maxManifoldPoints] = {false, false}; b2ContactPoint cp; cp.shape1 = m_shape1; cp.shape2 = m_shape2; cp.friction = m_friction; cp.restitution = m_restitution; // Match contact ids to facilitate warm starting. if (m_manifold.pointCount > 0) { // Match old contact ids to new contact ids and copy the // stored impulses to warm start the solver. for (int32 i = 0; i < m_manifold.pointCount; ++i) { b2ManifoldPoint* mp = m_manifold.points + i; mp->normalImpulse = 0.0f; mp->tangentImpulse = 0.0f; bool found = false; b2ContactID id = mp->id; for (int32 j = 0; j < m0.pointCount; ++j) { if (persisted[j] == true) { continue; } b2ManifoldPoint* mp0 = m0.points + j; if (mp0->id.key == id.key) { persisted[j] = true; mp->normalImpulse = mp0->normalImpulse; mp->tangentImpulse = mp0->tangentImpulse; // A persistent point. found = true; // Report persistent point. if (listener != NULL) { cp.position = b1->GetWorldPoint(mp->localPoint1); b2Vec2 v1 = b1->GetLinearVelocityFromLocalPoint(mp->localPoint1); b2Vec2 v2 = b2->GetLinearVelocityFromLocalPoint(mp->localPoint2); cp.velocity = v2 - v1; cp.normal = m_manifold.normal; cp.separation = mp->separation; cp.id = id; listener->Persist(&cp); } break; } } // Report added point. if (found == false && listener != NULL) { cp.position = b1->GetWorldPoint(mp->localPoint1); b2Vec2 v1 = b1->GetLinearVelocityFromLocalPoint(mp->localPoint1); b2Vec2 v2 = b2->GetLinearVelocityFromLocalPoint(mp->localPoint2); cp.velocity = v2 - v1; cp.normal = m_manifold.normal; cp.separation = mp->separation; cp.id = id; listener->Add(&cp); } } m_manifoldCount = 1; } else { m_manifoldCount = 0; } if (listener == NULL) { return; } // Report removed points. for (int32 i = 0; i < m0.pointCount; ++i) { if (persisted[i]) { continue; } b2ManifoldPoint* mp0 = m0.points + i; cp.position = b1->GetWorldPoint(mp0->localPoint1); b2Vec2 v1 = b1->GetLinearVelocityFromLocalPoint(mp0->localPoint1); b2Vec2 v2 = b2->GetLinearVelocityFromLocalPoint(mp0->localPoint2); cp.velocity = v2 - v1; cp.normal = m0.normal; cp.separation = mp0->separation; cp.id = mp0->id; listener->Remove(&cp); } } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Contacts/b2PolyContact.h0000644000175000017500000000267412264274615024740 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef POLYCONTACT_H #define POLYCONTACT_H #include "b2Contact.h" class b2BlockAllocator; class b2PolygonContact : public b2Contact { public: static b2Contact* Create(b2Shape* shape1, b2Shape* shape2, b2BlockAllocator* allocator); static void Destroy(b2Contact* contact, b2BlockAllocator* allocator); b2PolygonContact(b2Shape* shape1, b2Shape* shape2); ~b2PolygonContact() {} void Evaluate(b2ContactListener* listener); b2Manifold* GetManifolds() { return &m_manifold; } b2Manifold m_manifold; }; #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Contacts/b2NullContact.h0000644000175000017500000000226712264274615024725 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_NULL_CONTACT_H #define B2_NULL_CONTACT_H #include "../../Common/b2Math.h" #include "b2Contact.h" class b2NullContact : public b2Contact { public: b2NullContact() {} void Evaluate(b2ContactListener*) {} b2Manifold* GetManifolds() { return NULL; } }; #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp0000644000175000017500000002603212264274615025614 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2ContactSolver.h" #include "b2Contact.h" #include "../b2Body.h" #include "../b2World.h" #include "../../Common/b2StackAllocator.h" b2ContactSolver::b2ContactSolver(const b2TimeStep& step, b2Contact** contacts, int32 contactCount, b2StackAllocator* allocator) { m_step = step; m_allocator = allocator; m_constraintCount = 0; for (int32 i = 0; i < contactCount; ++i) { b2Assert(contacts[i]->IsSolid()); m_constraintCount += contacts[i]->GetManifoldCount(); } m_constraints = (b2ContactConstraint*)m_allocator->Allocate(m_constraintCount * sizeof(b2ContactConstraint)); int32 count = 0; for (int32 i = 0; i < contactCount; ++i) { b2Contact* contact = contacts[i]; b2Body* b1 = contact->m_shape1->GetBody(); b2Body* b2 = contact->m_shape2->GetBody(); int32 manifoldCount = contact->GetManifoldCount(); b2Manifold* manifolds = contact->GetManifolds(); float32 friction = contact->m_friction; float32 restitution = contact->m_restitution; b2Vec2 v1 = b1->m_linearVelocity; b2Vec2 v2 = b2->m_linearVelocity; float32 w1 = b1->m_angularVelocity; float32 w2 = b2->m_angularVelocity; for (int32 j = 0; j < manifoldCount; ++j) { b2Manifold* manifold = manifolds + j; b2Assert(manifold->pointCount > 0); const b2Vec2 normal = manifold->normal; b2Assert(count < m_constraintCount); b2ContactConstraint* c = m_constraints + count; c->body1 = b1; c->body2 = b2; c->manifold = manifold; c->normal = normal; c->pointCount = manifold->pointCount; c->friction = friction; c->restitution = restitution; for (int32 k = 0; k < c->pointCount; ++k) { b2ManifoldPoint* cp = manifold->points + k; b2ContactConstraintPoint* ccp = c->points + k; ccp->normalImpulse = cp->normalImpulse; ccp->tangentImpulse = cp->tangentImpulse; ccp->separation = cp->separation; ccp->positionImpulse = 0.0f; ccp->localAnchor1 = cp->localPoint1; ccp->localAnchor2 = cp->localPoint2; ccp->r1 = b2Mul(b1->GetXForm().R, cp->localPoint1 - b1->GetLocalCenter()); ccp->r2 = b2Mul(b2->GetXForm().R, cp->localPoint2 - b2->GetLocalCenter()); float32 r1Sqr = b2Dot(ccp->r1, ccp->r1); float32 r2Sqr = b2Dot(ccp->r2, ccp->r2); float32 rn1 = b2Dot(ccp->r1, normal); float32 rn2 = b2Dot(ccp->r2, normal); float32 kNormal = b1->m_invMass + b2->m_invMass; kNormal += b1->m_invI * (r1Sqr - rn1 * rn1) + b2->m_invI * (r2Sqr - rn2 * rn2); b2Assert(kNormal > B2_FLT_EPSILON); ccp->normalMass = 1.0f / kNormal; float32 kEqualized = b1->m_mass * b1->m_invMass + b2->m_mass * b2->m_invMass; kEqualized += b1->m_mass * b1->m_invI * (r1Sqr - rn1 * rn1) + b2->m_mass * b2->m_invI * (r2Sqr - rn2 * rn2); b2Assert(kEqualized > B2_FLT_EPSILON); ccp->equalizedMass = 1.0f / kEqualized; b2Vec2 tangent = b2Cross(normal, 1.0f); float32 rt1 = b2Dot(ccp->r1, tangent); float32 rt2 = b2Dot(ccp->r2, tangent); float32 kTangent = b1->m_invMass + b2->m_invMass; kTangent += b1->m_invI * (r1Sqr - rt1 * rt1) + b2->m_invI * (r2Sqr - rt2 * rt2); b2Assert(kTangent > B2_FLT_EPSILON); ccp->tangentMass = 1.0f / kTangent; // Setup a velocity bias for restitution. ccp->velocityBias = 0.0f; if (ccp->separation > 0.0f) { ccp->velocityBias = -60.0f * ccp->separation; // TODO_ERIN b2TimeStep } float32 vRel = b2Dot(c->normal, v2 + b2Cross(w2, ccp->r2) - v1 - b2Cross(w1, ccp->r1)); if (vRel < -b2_velocityThreshold) { ccp->velocityBias += -c->restitution * vRel; } } ++count; } } b2Assert(count == m_constraintCount); } b2ContactSolver::~b2ContactSolver() { m_allocator->Free(m_constraints); } void b2ContactSolver::InitVelocityConstraints(const b2TimeStep& step) { // Warm start. for (int32 i = 0; i < m_constraintCount; ++i) { b2ContactConstraint* c = m_constraints + i; b2Body* b1 = c->body1; b2Body* b2 = c->body2; float32 invMass1 = b1->m_invMass; float32 invI1 = b1->m_invI; float32 invMass2 = b2->m_invMass; float32 invI2 = b2->m_invI; b2Vec2 normal = c->normal; b2Vec2 tangent = b2Cross(normal, 1.0f); if (step.warmStarting) { for (int32 j = 0; j < c->pointCount; ++j) { b2ContactConstraintPoint* ccp = c->points + j; ccp->normalImpulse *= step.dtRatio; ccp->tangentImpulse *= step.dtRatio; b2Vec2 P = ccp->normalImpulse * normal + ccp->tangentImpulse * tangent; b1->m_angularVelocity -= invI1 * b2Cross(ccp->r1, P); b1->m_linearVelocity -= invMass1 * P; b2->m_angularVelocity += invI2 * b2Cross(ccp->r2, P); b2->m_linearVelocity += invMass2 * P; } } else { for (int32 j = 0; j < c->pointCount; ++j) { b2ContactConstraintPoint* ccp = c->points + j; ccp->normalImpulse = 0.0f; ccp->tangentImpulse = 0.0f; } } } } void b2ContactSolver::SolveVelocityConstraints() { for (int32 i = 0; i < m_constraintCount; ++i) { b2ContactConstraint* c = m_constraints + i; b2Body* b1 = c->body1; b2Body* b2 = c->body2; float32 w1 = b1->m_angularVelocity; float32 w2 = b2->m_angularVelocity; b2Vec2 v1 = b1->m_linearVelocity; b2Vec2 v2 = b2->m_linearVelocity; float32 invMass1 = b1->m_invMass; float32 invI1 = b1->m_invI; float32 invMass2 = b2->m_invMass; float32 invI2 = b2->m_invI; b2Vec2 normal = c->normal; b2Vec2 tangent = b2Cross(normal, 1.0f); float32 friction = c->friction; //#define DEFERRED_UPDATE #ifdef DEFERRED_UPDATE b2Vec2 b1_linearVelocity = b1->m_linearVelocity; float32 b1_angularVelocity = b1->m_angularVelocity; b2Vec2 b2_linearVelocity = b2->m_linearVelocity; float32 b2_angularVelocity = b2->m_angularVelocity; #endif // Solve normal constraints for (int32 j = 0; j < c->pointCount; ++j) { b2ContactConstraintPoint* ccp = c->points + j; // Relative velocity at contact b2Vec2 dv = v2 + b2Cross(w2, ccp->r2) - v1 - b2Cross(w1, ccp->r1); // Compute normal impulse float32 vn = b2Dot(dv, normal); float32 lambda = -ccp->normalMass * (vn - ccp->velocityBias); // b2Clamp the accumulated impulse float32 newImpulse = b2Max(ccp->normalImpulse + lambda, 0.0f); lambda = newImpulse - ccp->normalImpulse; // Apply contact impulse b2Vec2 P = lambda * normal; #ifdef DEFERRED_UPDATE b1_linearVelocity -= invMass1 * P; b1_angularVelocity -= invI1 * b2Cross(r1, P); b2_linearVelocity += invMass2 * P; b2_angularVelocity += invI2 * b2Cross(r2, P); #else v1 -= invMass1 * P; w1 -= invI1 * b2Cross(ccp->r1, P); v2 += invMass2 * P; w2 += invI2 * b2Cross(ccp->r2, P); #endif ccp->normalImpulse = newImpulse; } #ifdef DEFERRED_UPDATE b1->m_linearVelocity = b1_linearVelocity; b1->m_angularVelocity = b1_angularVelocity; b2->m_linearVelocity = b2_linearVelocity; b2->m_angularVelocity = b2_angularVelocity; #endif // Solve tangent constraints for (int32 j = 0; j < c->pointCount; ++j) { b2ContactConstraintPoint* ccp = c->points + j; // Relative velocity at contact b2Vec2 dv = v2 + b2Cross(w2, ccp->r2) - v1 - b2Cross(w1, ccp->r1); // Compute tangent force float32 vt = b2Dot(dv, tangent); float32 lambda = ccp->tangentMass * (-vt); // b2Clamp the accumulated force float32 maxFriction = friction * ccp->normalImpulse; float32 newImpulse = b2Clamp(ccp->tangentImpulse + lambda, -maxFriction, maxFriction); lambda = newImpulse - ccp->tangentImpulse; // Apply contact impulse b2Vec2 P = lambda * tangent; v1 -= invMass1 * P; w1 -= invI1 * b2Cross(ccp->r1, P); v2 += invMass2 * P; w2 += invI2 * b2Cross(ccp->r2, P); ccp->tangentImpulse = newImpulse; } b1->m_linearVelocity = v1; b1->m_angularVelocity = w1; b2->m_linearVelocity = v2; b2->m_angularVelocity = w2; } } void b2ContactSolver::FinalizeVelocityConstraints() { for (int32 i = 0; i < m_constraintCount; ++i) { b2ContactConstraint* c = m_constraints + i; b2Manifold* m = c->manifold; for (int32 j = 0; j < c->pointCount; ++j) { m->points[j].normalImpulse = c->points[j].normalImpulse; m->points[j].tangentImpulse = c->points[j].tangentImpulse; } } } bool b2ContactSolver::SolvePositionConstraints(float32 baumgarte) { float32 minSeparation = 0.0f; for (int32 i = 0; i < m_constraintCount; ++i) { b2ContactConstraint* c = m_constraints + i; b2Body* b1 = c->body1; b2Body* b2 = c->body2; float32 invMass1 = b1->m_mass * b1->m_invMass; float32 invI1 = b1->m_mass * b1->m_invI; float32 invMass2 = b2->m_mass * b2->m_invMass; float32 invI2 = b2->m_mass * b2->m_invI; b2Vec2 normal = c->normal; // Solver normal constraints for (int32 j = 0; j < c->pointCount; ++j) { b2ContactConstraintPoint* ccp = c->points + j; b2Vec2 r1 = b2Mul(b1->GetXForm().R, ccp->localAnchor1 - b1->GetLocalCenter()); b2Vec2 r2 = b2Mul(b2->GetXForm().R, ccp->localAnchor2 - b2->GetLocalCenter()); b2Vec2 p1 = b1->m_sweep.c + r1; b2Vec2 p2 = b2->m_sweep.c + r2; b2Vec2 dp = p2 - p1; // Approximate the current separation. float32 separation = b2Dot(dp, normal) + ccp->separation; // Track max constraint error. minSeparation = b2Min(minSeparation, separation); // Prevent large corrections and allow slop. float32 C = baumgarte * b2Clamp(separation + b2_linearSlop, -b2_maxLinearCorrection, 0.0f); // Compute normal impulse float32 dImpulse = -ccp->equalizedMass * C; // b2Clamp the accumulated impulse float32 impulse0 = ccp->positionImpulse; ccp->positionImpulse = b2Max(impulse0 + dImpulse, 0.0f); dImpulse = ccp->positionImpulse - impulse0; b2Vec2 impulse = dImpulse * normal; b1->m_sweep.c -= invMass1 * impulse; b1->m_sweep.a -= invI1 * b2Cross(r1, impulse); b1->SynchronizeTransform(); b2->m_sweep.c += invMass2 * impulse; b2->m_sweep.a += invI2 * b2Cross(r2, impulse); b2->SynchronizeTransform(); } } // We can't expect minSpeparation >= -b2_linearSlop because we don't // push the separation above -b2_linearSlop. return minSeparation >= -1.5f * b2_linearSlop; } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp0000644000175000017500000000741712264274615025551 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include #include "b2CircleContact.h" #include "../b2Body.h" #include "../b2WorldCallbacks.h" #include "../../Common/b2BlockAllocator.h" #include b2Contact* b2CircleContact::Create(b2Shape* shape1, b2Shape* shape2, b2BlockAllocator* allocator) { void* mem = allocator->Allocate(sizeof(b2CircleContact)); return new (mem) b2CircleContact(shape1, shape2); } void b2CircleContact::Destroy(b2Contact* contact, b2BlockAllocator* allocator) { ((b2CircleContact*)contact)->~b2CircleContact(); allocator->Free(contact, sizeof(b2CircleContact)); } b2CircleContact::b2CircleContact(b2Shape* s1, b2Shape* s2) : b2Contact(s1, s2) { b2Assert(m_shape1->GetType() == e_circleShape); b2Assert(m_shape2->GetType() == e_circleShape); m_manifold.pointCount = 0; m_manifold.points[0].normalImpulse = 0.0f; m_manifold.points[0].tangentImpulse = 0.0f; } void b2CircleContact::Evaluate(b2ContactListener* listener) { b2Body* b1 = m_shape1->GetBody(); b2Body* b2 = m_shape2->GetBody(); b2Manifold m0; memcpy(&m0, &m_manifold, sizeof(b2Manifold)); b2CollideCircles(&m_manifold, (b2CircleShape*)m_shape1, b1->GetXForm(), (b2CircleShape*)m_shape2, b2->GetXForm()); b2ContactPoint cp; cp.shape1 = m_shape1; cp.shape2 = m_shape2; cp.friction = m_friction; cp.restitution = m_restitution; if (m_manifold.pointCount > 0) { m_manifoldCount = 1; b2ManifoldPoint* mp = m_manifold.points + 0; if (m0.pointCount == 0) { mp->normalImpulse = 0.0f; mp->tangentImpulse = 0.0f; if (listener) { cp.position = b1->GetWorldPoint(mp->localPoint1); b2Vec2 v1 = b1->GetLinearVelocityFromLocalPoint(mp->localPoint1); b2Vec2 v2 = b2->GetLinearVelocityFromLocalPoint(mp->localPoint2); cp.velocity = v2 - v1; cp.normal = m_manifold.normal; cp.separation = mp->separation; cp.id = mp->id; listener->Add(&cp); } } else { b2ManifoldPoint* mp0 = m0.points + 0; mp->normalImpulse = mp0->normalImpulse; mp->tangentImpulse = mp0->tangentImpulse; if (listener) { cp.position = b1->GetWorldPoint(mp->localPoint1); b2Vec2 v1 = b1->GetLinearVelocityFromLocalPoint(mp->localPoint1); b2Vec2 v2 = b2->GetLinearVelocityFromLocalPoint(mp->localPoint2); cp.velocity = v2 - v1; cp.normal = m_manifold.normal; cp.separation = mp->separation; cp.id = mp->id; listener->Persist(&cp); } } } else { m_manifoldCount = 0; if (m0.pointCount > 0 && listener) { b2ManifoldPoint* mp0 = m0.points + 0; cp.position = b1->GetWorldPoint(mp0->localPoint1); b2Vec2 v1 = b1->GetLinearVelocityFromLocalPoint(mp0->localPoint1); b2Vec2 v2 = b2->GetLinearVelocityFromLocalPoint(mp0->localPoint2); cp.velocity = v2 - v1; cp.normal = m0.normal; cp.separation = mp0->separation; cp.id = mp0->id; listener->Remove(&cp); } } } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.h0000644000175000017500000000274612264274615026505 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef POLY_AND_CIRCLE_CONTACT_H #define POLY_AND_CIRCLE_CONTACT_H #include "b2Contact.h" class b2BlockAllocator; class b2PolyAndCircleContact : public b2Contact { public: static b2Contact* Create(b2Shape* shape1, b2Shape* shape2, b2BlockAllocator* allocator); static void Destroy(b2Contact* contact, b2BlockAllocator* allocator); b2PolyAndCircleContact(b2Shape* shape1, b2Shape* shape2); ~b2PolyAndCircleContact() {} void Evaluate(b2ContactListener* listener); b2Manifold* GetManifolds() { return &m_manifold; } b2Manifold m_manifold; }; #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Contacts/b2Contact.h0000644000175000017500000001322012264274615024061 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef CONTACT_H #define CONTACT_H #include "../../Common/b2Math.h" #include "../../Collision/b2Collision.h" #include "../../Collision/Shapes/b2Shape.h" class b2Body; class b2Contact; class b2World; class b2BlockAllocator; class b2StackAllocator; class b2ContactListener; typedef b2Contact* b2ContactCreateFcn(b2Shape* shape1, b2Shape* shape2, b2BlockAllocator* allocator); typedef void b2ContactDestroyFcn(b2Contact* contact, b2BlockAllocator* allocator); struct b2ContactRegister { b2ContactCreateFcn* createFcn; b2ContactDestroyFcn* destroyFcn; bool primary; }; /// A contact edge is used to connect bodies and contacts together /// in a contact graph where each body is a node and each contact /// is an edge. A contact edge belongs to a doubly linked list /// maintained in each attached body. Each contact has two contact /// nodes, one for each attached body. struct b2ContactEdge { b2Body* other; ///< provides quick access to the other body attached. b2Contact* contact; ///< the contact b2ContactEdge* prev; ///< the previous contact edge in the body's contact list b2ContactEdge* next; ///< the next contact edge in the body's contact list }; /// This structure is used to report contact points. struct b2ContactPoint { b2Shape* shape1; ///< the first shape b2Shape* shape2; ///< the second shape b2Vec2 position; ///< position in world coordinates b2Vec2 velocity; ///< velocity of point on body2 relative to point on body1 (pre-solver) b2Vec2 normal; ///< points from shape1 to shape2 float32 separation; ///< the separation is negative when shapes are touching float32 friction; ///< the combined friction coefficient float32 restitution; ///< the combined restitution coefficient b2ContactID id; ///< the contact id identifies the features in contact }; /// This structure is used to report contact point results. struct b2ContactResult { b2Shape* shape1; ///< the first shape b2Shape* shape2; ///< the second shape b2Vec2 position; ///< position in world coordinates b2Vec2 normal; ///< points from shape1 to shape2 float32 normalImpulse; ///< the normal impulse applied to body2 float32 tangentImpulse; ///< the tangent impulse applied to body2 b2ContactID id; ///< the contact id identifies the features in contact }; /// The class manages contact between two shapes. A contact exists for each overlapping /// AABB in the broad-phase (except if filtered). Therefore a contact object may exist /// that has no contact points. class b2Contact { public: /// Get the manifold array. virtual b2Manifold* GetManifolds() = 0; /// Get the number of manifolds. This is 0 or 1 between convex shapes. /// This may be greater than 1 for convex-vs-concave shapes. Each /// manifold holds up to two contact points with a shared contact normal. int32 GetManifoldCount() const; /// Is this contact solid? /// @return true if this contact should generate a response. bool IsSolid() const; /// Get the next contact in the world's contact list. b2Contact* GetNext(); /// Get the first shape in this contact. b2Shape* GetShape1(); /// Get the second shape in this contact. b2Shape* GetShape2(); //--------------- Internals Below ------------------- public: // m_flags enum { e_nonSolidFlag = 0x0001, e_slowFlag = 0x0002, e_islandFlag = 0x0004, e_toiFlag = 0x0008, }; static void AddType(b2ContactCreateFcn* createFcn, b2ContactDestroyFcn* destroyFcn, b2ShapeType type1, b2ShapeType type2); static void InitializeRegisters(); static b2Contact* Create(b2Shape* shape1, b2Shape* shape2, b2BlockAllocator* allocator); static void Destroy(b2Contact* contact, b2BlockAllocator* allocator); b2Contact() : m_shape1(NULL), m_shape2(NULL) {} b2Contact(b2Shape* shape1, b2Shape* shape2); virtual ~b2Contact() {} void Update(b2ContactListener* listener); virtual void Evaluate(b2ContactListener* listener) = 0; static b2ContactRegister s_registers[e_shapeTypeCount][e_shapeTypeCount]; static bool s_initialized; uint32 m_flags; int32 m_manifoldCount; // World pool and list pointers. b2Contact* m_prev; b2Contact* m_next; // Nodes for connecting bodies. b2ContactEdge m_node1; b2ContactEdge m_node2; b2Shape* m_shape1; b2Shape* m_shape2; // Combined friction float32 m_friction; float32 m_restitution; float32 m_toi; }; inline int32 b2Contact::GetManifoldCount() const { return m_manifoldCount; } inline bool b2Contact::IsSolid() const { return (m_flags & e_nonSolidFlag) == 0; } inline b2Contact* b2Contact::GetNext() { return m_next; } inline b2Shape* b2Contact::GetShape1() { return m_shape1; } inline b2Shape* b2Contact::GetShape2() { return m_shape2; } #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Contacts/b2ContactSolver.h0000644000175000017500000000420612264274615025260 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef CONTACT_SOLVER_H #define CONTACT_SOLVER_H #include "../../Common/b2Math.h" #include "../../Collision/b2Collision.h" #include "../b2World.h" class b2Contact; class b2Body; class b2Island; class b2StackAllocator; struct b2ContactConstraintPoint { b2Vec2 localAnchor1; b2Vec2 localAnchor2; b2Vec2 r1; b2Vec2 r2; float32 normalImpulse; float32 tangentImpulse; float32 positionImpulse; float32 normalMass; float32 tangentMass; float32 equalizedMass; float32 separation; float32 velocityBias; }; struct b2ContactConstraint { b2ContactConstraintPoint points[b2_maxManifoldPoints]; b2Vec2 normal; b2Manifold* manifold; b2Body* body1; b2Body* body2; float32 friction; float32 restitution; int32 pointCount; }; class b2ContactSolver { public: b2ContactSolver(const b2TimeStep& step, b2Contact** contacts, int32 contactCount, b2StackAllocator* allocator); ~b2ContactSolver(); void InitVelocityConstraints(const b2TimeStep& step); void SolveVelocityConstraints(); void FinalizeVelocityConstraints(); bool SolvePositionConstraints(float32 baumgarte); b2TimeStep m_step; b2StackAllocator* m_allocator; b2ContactConstraint* m_constraints; int m_constraintCount; }; #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp0000644000175000017500000001073312264274615025266 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include #include "b2PolyContact.h" #include "../b2Body.h" #include "../b2WorldCallbacks.h" #include "../../Common/b2BlockAllocator.h" #include #include b2Contact* b2PolygonContact::Create(b2Shape* shape1, b2Shape* shape2, b2BlockAllocator* allocator) { void* mem = allocator->Allocate(sizeof(b2PolygonContact)); return new (mem) b2PolygonContact(shape1, shape2); } void b2PolygonContact::Destroy(b2Contact* contact, b2BlockAllocator* allocator) { ((b2PolygonContact*)contact)->~b2PolygonContact(); allocator->Free(contact, sizeof(b2PolygonContact)); } b2PolygonContact::b2PolygonContact(b2Shape* s1, b2Shape* s2) : b2Contact(s1, s2) { b2Assert(m_shape1->GetType() == e_polygonShape); b2Assert(m_shape2->GetType() == e_polygonShape); m_manifold.pointCount = 0; } void b2PolygonContact::Evaluate(b2ContactListener* listener) { b2Body* b1 = m_shape1->GetBody(); b2Body* b2 = m_shape2->GetBody(); b2Manifold m0; memcpy(&m0, &m_manifold, sizeof(b2Manifold)); b2CollidePolygons(&m_manifold, (b2PolygonShape*)m_shape1, b1->GetXForm(), (b2PolygonShape*)m_shape2, b2->GetXForm()); bool persisted[b2_maxManifoldPoints] = {false, false}; b2ContactPoint cp; cp.shape1 = m_shape1; cp.shape2 = m_shape2; cp.friction = m_friction; cp.restitution = m_restitution; // Match contact ids to facilitate warm starting. if (m_manifold.pointCount > 0) { // Match old contact ids to new contact ids and copy the // stored impulses to warm start the solver. for (int32 i = 0; i < m_manifold.pointCount; ++i) { b2ManifoldPoint* mp = m_manifold.points + i; mp->normalImpulse = 0.0f; mp->tangentImpulse = 0.0f; bool found = false; b2ContactID id = mp->id; for (int32 j = 0; j < m0.pointCount; ++j) { if (persisted[j] == true) { continue; } b2ManifoldPoint* mp0 = m0.points + j; if (mp0->id.key == id.key) { persisted[j] = true; mp->normalImpulse = mp0->normalImpulse; mp->tangentImpulse = mp0->tangentImpulse; // A persistent point. found = true; // Report persistent point. if (listener != NULL) { cp.position = b1->GetWorldPoint(mp->localPoint1); b2Vec2 v1 = b1->GetLinearVelocityFromLocalPoint(mp->localPoint1); b2Vec2 v2 = b2->GetLinearVelocityFromLocalPoint(mp->localPoint2); cp.velocity = v2 - v1; cp.normal = m_manifold.normal; cp.separation = mp->separation; cp.id = id; listener->Persist(&cp); } break; } } // Report added point. if (found == false && listener != NULL) { cp.position = b1->GetWorldPoint(mp->localPoint1); b2Vec2 v1 = b1->GetLinearVelocityFromLocalPoint(mp->localPoint1); b2Vec2 v2 = b2->GetLinearVelocityFromLocalPoint(mp->localPoint2); cp.velocity = v2 - v1; cp.normal = m_manifold.normal; cp.separation = mp->separation; cp.id = id; listener->Add(&cp); } } m_manifoldCount = 1; } else { m_manifoldCount = 0; } if (listener == NULL) { return; } // Report removed points. for (int32 i = 0; i < m0.pointCount; ++i) { if (persisted[i]) { continue; } b2ManifoldPoint* mp0 = m0.points + i; cp.position = b1->GetWorldPoint(mp0->localPoint1); b2Vec2 v1 = b1->GetLinearVelocityFromLocalPoint(mp0->localPoint1); b2Vec2 v2 = b2->GetLinearVelocityFromLocalPoint(mp0->localPoint2); cp.velocity = v2 - v1; cp.normal = m0.normal; cp.separation = mp0->separation; cp.id = mp0->id; listener->Remove(&cp); } } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Contacts/b2Contact.cpp0000644000175000017500000001155612264274615024426 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Contact.h" #include "b2CircleContact.h" #include "b2PolyAndCircleContact.h" #include "b2PolyContact.h" #include "b2ContactSolver.h" #include "../../Collision/b2Collision.h" #include "../../Collision/Shapes/b2Shape.h" #include "../../Common/b2BlockAllocator.h" #include "../../Dynamics/b2World.h" #include "../../Dynamics/b2Body.h" b2ContactRegister b2Contact::s_registers[e_shapeTypeCount][e_shapeTypeCount]; bool b2Contact::s_initialized = false; void b2Contact::InitializeRegisters() { AddType(b2CircleContact::Create, b2CircleContact::Destroy, e_circleShape, e_circleShape); AddType(b2PolyAndCircleContact::Create, b2PolyAndCircleContact::Destroy, e_polygonShape, e_circleShape); AddType(b2PolygonContact::Create, b2PolygonContact::Destroy, e_polygonShape, e_polygonShape); } void b2Contact::AddType(b2ContactCreateFcn* createFcn, b2ContactDestroyFcn* destoryFcn, b2ShapeType type1, b2ShapeType type2) { b2Assert(e_unknownShape < type1 && type1 < e_shapeTypeCount); b2Assert(e_unknownShape < type2 && type2 < e_shapeTypeCount); s_registers[type1][type2].createFcn = createFcn; s_registers[type1][type2].destroyFcn = destoryFcn; s_registers[type1][type2].primary = true; if (type1 != type2) { s_registers[type2][type1].createFcn = createFcn; s_registers[type2][type1].destroyFcn = destoryFcn; s_registers[type2][type1].primary = false; } } b2Contact* b2Contact::Create(b2Shape* shape1, b2Shape* shape2, b2BlockAllocator* allocator) { if (s_initialized == false) { InitializeRegisters(); s_initialized = true; } b2ShapeType type1 = shape1->GetType(); b2ShapeType type2 = shape2->GetType(); b2Assert(e_unknownShape < type1 && type1 < e_shapeTypeCount); b2Assert(e_unknownShape < type2 && type2 < e_shapeTypeCount); b2ContactCreateFcn* createFcn = s_registers[type1][type2].createFcn; if (createFcn) { if (s_registers[type1][type2].primary) { return createFcn(shape1, shape2, allocator); } else { b2Contact* c = createFcn(shape2, shape1, allocator); for (int32 i = 0; i < c->GetManifoldCount(); ++i) { b2Manifold* m = c->GetManifolds() + i; m->normal = -m->normal; } return c; } } else { return NULL; } } void b2Contact::Destroy(b2Contact* contact, b2BlockAllocator* allocator) { b2Assert(s_initialized == true); if (contact->GetManifoldCount() > 0) { contact->GetShape1()->GetBody()->WakeUp(); contact->GetShape2()->GetBody()->WakeUp(); } b2ShapeType type1 = contact->GetShape1()->GetType(); b2ShapeType type2 = contact->GetShape2()->GetType(); b2Assert(e_unknownShape < type1 && type1 < e_shapeTypeCount); b2Assert(e_unknownShape < type2 && type2 < e_shapeTypeCount); b2ContactDestroyFcn* destroyFcn = s_registers[type1][type2].destroyFcn; destroyFcn(contact, allocator); } b2Contact::b2Contact(b2Shape* s1, b2Shape* s2) { m_flags = 0; if (s1->IsSensor() || s2->IsSensor()) { m_flags |= e_nonSolidFlag; } m_shape1 = s1; m_shape2 = s2; m_manifoldCount = 0; m_friction = b2MixFriction(m_shape1->GetFriction(), m_shape2->GetFriction()); m_restitution = b2MixRestitution(m_shape1->GetRestitution(), m_shape2->GetRestitution()); m_prev = NULL; m_next = NULL; m_node1.contact = NULL; m_node1.prev = NULL; m_node1.next = NULL; m_node1.other = NULL; m_node2.contact = NULL; m_node2.prev = NULL; m_node2.next = NULL; m_node2.other = NULL; } void b2Contact::Update(b2ContactListener* listener) { int32 oldCount = GetManifoldCount(); Evaluate(listener); int32 newCount = GetManifoldCount(); b2Body* body1 = m_shape1->GetBody(); b2Body* body2 = m_shape2->GetBody(); if (newCount == 0 && oldCount > 0) { body1->WakeUp(); body2->WakeUp(); } // Slow contacts don't generate TOI events. if (body1->IsStatic() || body1->IsBullet() || body2->IsStatic() || body2->IsBullet()) { m_flags &= ~e_slowFlag; } else { m_flags |= e_slowFlag; } } numptyphysics-0.2+svn157/Box2D/Source/Dynamics/Contacts/b2CircleContact.h0000644000175000017500000000301312264274615025202 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef CIRCLE_CONTACT_H #define CIRCLE_CONTACT_H #include "../../Common/b2Math.h" #include "../../Collision/b2Collision.h" #include "b2Contact.h" class b2BlockAllocator; class b2CircleContact : public b2Contact { public: static b2Contact* Create(b2Shape* shape1, b2Shape* shape2, b2BlockAllocator* allocator); static void Destroy(b2Contact* contact, b2BlockAllocator* allocator); b2CircleContact(b2Shape* shape1, b2Shape* shape2); ~b2CircleContact() {} void Evaluate(b2ContactListener* listener); b2Manifold* GetManifolds() { return &m_manifold; } b2Manifold m_manifold; }; #endif numptyphysics-0.2+svn157/Box2D/Source/Dynamics/b2ContactManager.cpp0000644000175000017500000001366312264274615024144 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2ContactManager.h" #include "b2World.h" #include "b2Body.h" // This is a callback from the broadphase when two AABB proxies begin // to overlap. We create a b2Contact to manage the narrow phase. void* b2ContactManager::PairAdded(void* proxyUserData1, void* proxyUserData2) { b2Shape* shape1 = (b2Shape*)proxyUserData1; b2Shape* shape2 = (b2Shape*)proxyUserData2; b2Body* body1 = shape1->GetBody(); b2Body* body2 = shape2->GetBody(); if (body1->IsStatic() && body2->IsStatic()) { return &m_nullContact; } if (shape1->GetBody() == shape2->GetBody()) { return &m_nullContact; } if (body2->IsConnected(body1)) { return &m_nullContact; } if (m_world->m_contactFilter != NULL && m_world->m_contactFilter->ShouldCollide(shape1, shape2) == false) { return &m_nullContact; } // Call the factory. b2Contact* c = b2Contact::Create(shape1, shape2, &m_world->m_blockAllocator); if (c == NULL) { return &m_nullContact; } // Contact creation may swap shapes. shape1 = c->GetShape1(); shape2 = c->GetShape2(); body1 = shape1->GetBody(); body2 = shape2->GetBody(); // Insert into the world. c->m_prev = NULL; c->m_next = m_world->m_contactList; if (m_world->m_contactList != NULL) { m_world->m_contactList->m_prev = c; } m_world->m_contactList = c; // Connect to island graph. // Connect to body 1 c->m_node1.contact = c; c->m_node1.other = body2; c->m_node1.prev = NULL; c->m_node1.next = body1->m_contactList; if (body1->m_contactList != NULL) { body1->m_contactList->prev = &c->m_node1; } body1->m_contactList = &c->m_node1; // Connect to body 2 c->m_node2.contact = c; c->m_node2.other = body1; c->m_node2.prev = NULL; c->m_node2.next = body2->m_contactList; if (body2->m_contactList != NULL) { body2->m_contactList->prev = &c->m_node2; } body2->m_contactList = &c->m_node2; ++m_world->m_contactCount; return c; } // This is a callback from the broadphase when two AABB proxies cease // to overlap. We retire the b2Contact. void b2ContactManager::PairRemoved(void* proxyUserData1, void* proxyUserData2, void* pairUserData) { B2_NOT_USED(proxyUserData1); B2_NOT_USED(proxyUserData2); if (pairUserData == NULL) { return; } b2Contact* c = (b2Contact*)pairUserData; if (c == &m_nullContact) { return; } // An attached body is being destroyed, we must destroy this contact // immediately to avoid orphaned shape pointers. Destroy(c); } void b2ContactManager::Destroy(b2Contact* c) { b2Shape* shape1 = c->GetShape1(); b2Shape* shape2 = c->GetShape2(); // Inform the user that this contact is ending. int32 manifoldCount = c->GetManifoldCount(); if (manifoldCount > 0 && m_world->m_contactListener) { b2Body* b1 = shape1->GetBody(); b2Body* b2 = shape2->GetBody(); b2Manifold* manifolds = c->GetManifolds(); b2ContactPoint cp; cp.shape1 = c->GetShape1(); cp.shape2 = c->GetShape2(); cp.friction = c->m_friction; cp.restitution = c->m_restitution; for (int32 i = 0; i < manifoldCount; ++i) { b2Manifold* manifold = manifolds + i; cp.normal = manifold->normal; for (int32 j = 0; j < manifold->pointCount; ++j) { b2ManifoldPoint* mp = manifold->points + j; cp.position = b1->GetWorldPoint(mp->localPoint1); b2Vec2 v1 = b1->GetLinearVelocityFromLocalPoint(mp->localPoint1); b2Vec2 v2 = b2->GetLinearVelocityFromLocalPoint(mp->localPoint2); cp.velocity = v2 - v1; cp.separation = mp->separation; cp.id = mp->id; m_world->m_contactListener->Remove(&cp); } } } // Remove from the world. if (c->m_prev) { c->m_prev->m_next = c->m_next; } if (c->m_next) { c->m_next->m_prev = c->m_prev; } if (c == m_world->m_contactList) { m_world->m_contactList = c->m_next; } b2Body* body1 = shape1->GetBody(); b2Body* body2 = shape2->GetBody(); // Remove from body 1 if (c->m_node1.prev) { c->m_node1.prev->next = c->m_node1.next; } if (c->m_node1.next) { c->m_node1.next->prev = c->m_node1.prev; } if (&c->m_node1 == body1->m_contactList) { body1->m_contactList = c->m_node1.next; } // Remove from body 2 if (c->m_node2.prev) { c->m_node2.prev->next = c->m_node2.next; } if (c->m_node2.next) { c->m_node2.next->prev = c->m_node2.prev; } if (&c->m_node2 == body2->m_contactList) { body2->m_contactList = c->m_node2.next; } // Call the factory. b2Contact::Destroy(c, &m_world->m_blockAllocator); --m_world->m_contactCount; } // This is the top level collision call for the time step. Here // all the narrow phase collision is processed for the world // contact list. void b2ContactManager::Collide() { // Update awake contacts. for (b2Contact* c = m_world->m_contactList; c; c = c->GetNext()) { b2Body* body1 = c->GetShape1()->GetBody(); b2Body* body2 = c->GetShape2()->GetBody(); if (body1->IsSleeping() && body2->IsSleeping()) { continue; } c->Update(m_world->m_contactListener); } } numptyphysics-0.2+svn157/Box2D/Source/Makefile0000644000175000017500000000646312264274616020220 0ustar warp10warp10TARGETS= Gen/float/libbox2d.a Gen/fixed/libbox2d.a ifdef DEVKITPRO TARGETS += Gen/nds-float/lib/libbox2d.a Gen/nds-fixed/lib/libbox2d.a endif CXXFLAGS= -g -O2 SOURCES = \ ./Dynamics/b2Body.cpp \ ./Dynamics/b2Island.cpp \ ./Dynamics/b2World.cpp \ ./Dynamics/b2ContactManager.cpp \ ./Dynamics/Contacts/b2Contact.cpp \ ./Dynamics/Contacts/b2PolyContact.cpp \ ./Dynamics/Contacts/b2CircleContact.cpp \ ./Dynamics/Contacts/b2PolyAndCircleContact.cpp \ ./Dynamics/Contacts/b2ContactSolver.cpp \ ./Dynamics/b2WorldCallbacks.cpp \ ./Dynamics/Joints/b2MouseJoint.cpp \ ./Dynamics/Joints/b2PulleyJoint.cpp \ ./Dynamics/Joints/b2Joint.cpp \ ./Dynamics/Joints/b2RevoluteJoint.cpp \ ./Dynamics/Joints/b2PrismaticJoint.cpp \ ./Dynamics/Joints/b2DistanceJoint.cpp \ ./Dynamics/Joints/b2GearJoint.cpp \ ./Common/b2StackAllocator.cpp \ ./Common/b2Math.cpp \ ./Common/b2BlockAllocator.cpp \ ./Common/b2Settings.cpp \ ./Collision/b2Collision.cpp \ ./Collision/b2Distance.cpp \ ./Collision/Shapes/b2Shape.cpp \ ./Collision/Shapes/b2CircleShape.cpp \ ./Collision/Shapes/b2PolygonShape.cpp \ ./Collision/b2TimeOfImpact.cpp \ ./Collision/b2PairManager.cpp \ ./Collision/b2CollidePoly.cpp \ ./Collision/b2CollideCircle.cpp \ ./Collision/b2BroadPhase.cpp # ./Contrib/b2Polygon.cpp \ # ./Contrib/b2Triangle.cpp ifneq ($(INCLUDE_DEPENDENCIES),yes) all: @make --no-print-directory INCLUDE_DEPENDENCIES=yes $(TARGETS) .PHONY: clean clean: rm -rf Gen else -include $(addprefix Gen/float/,$(SOURCES:.cpp=.d)) -include $(addprefix Gen/fixed/,$(SOURCES:.cpp=.d)) ifdef DEVKITPRO -include $(addprefix Gen/nds-fixed/,$(SOURCES:.cpp=.d)) -include $(addprefix Gen/nds-float/,$(SOURCES:.cpp=.d)) endif endif Gen/float/%.o: %.cpp @mkdir -p $(dir $@) c++ $(CXXFLAGS) -c -o $@ $< Gen/float/libbox2d.a: $(addprefix Gen/float/,$(SOURCES:.cpp=.o)) ar cr $@ $^ ranlib $@ Gen/float/%.d: %.cpp @mkdir -p $(dir $@) c++ -MM -MT $(@:.d=.o) $(CXXFLAGS) -o $@ $< Gen/fixed/%.o: %.cpp @mkdir -p $(dir $@) c++ $(CXXFLAGS) -DTARGET_FLOAT32_IS_FIXED -c -o $@ $< Gen/fixed/libbox2d.a: $(addprefix Gen/fixed/,$(SOURCES:.cpp=.o)) ar cr $@ $^ ranlib $@ Gen/fixed/%.d: %.cpp @mkdir -p $(dir $@) c++ -MM -MT $(@:.d=.o) $(CXXFLAGS) -DTARGET_FLOAT32_IS_FIXED -o $@ $< NDS_COMPILE_FLAGS= -g -O2 -fomit-frame-pointer -ffast-math \ -march=armv5te -mtune=arm946e-s -mthumb-interwork \ -DARM9 -fno-rtti -fno-exceptions -c \ -DTARGET_IS_NDS \ -I$(DEVKITPRO)/libnds/include Gen/nds-fixed/%.o: %.cpp @mkdir -p $(dir $@) arm-eabi-g++ $(NDS_COMPILE_FLAGS) -DTARGET_FLOAT32_IS_FIXED -o $@ $< Gen/nds-fixed/lib/libbox2d.a: $(addprefix Gen/nds-fixed/,$(SOURCES:.cpp=.o)) @mkdir -p $(dir $@) arm-eabi-ar cr $@ $^ arm-eabi-ranlib $@ Gen/nds-fixed/%.d: %.cpp @mkdir -p $(dir $@) arm-eabi-g++ -MM -MT $(@:.d=.o) $(NDS_COMPILE_FLAGS) \ -DTARGET_FLOAT32_IS_FIXED -o $@ $< Gen/nds-float/%.o: %.cpp @mkdir -p $(dir $@) arm-eabi-g++ $(NDS_COMPILE_FLAGS) -o $@ $< Gen/nds-float/lib/libbox2d.a: $(addprefix Gen/nds-float/,$(SOURCES:.cpp=.o)) @mkdir -p $(dir $@) arm-eabi-ar cr $@ $^ arm-eabi-ranlib $@ Gen/nds-float/%.d: %.cpp @mkdir -p $(dir $@) arm-eabi-g++ -MM -MT $(@:.d=.o) $(NDS_COMPILE_FLAGS) -o $@ $< numptyphysics-0.2+svn157/Box2D/Source/Common/0000755000175000017500000000000012264274615017776 5ustar warp10warp10numptyphysics-0.2+svn157/Box2D/Source/Common/jtypes.h0000644000175000017500000001011712264274615021465 0ustar warp10warp10/*--------------------------------------------------------------------------------- $Id: jtypes.h,v 1.17 2007/07/18 05:20:45 wntrmute Exp $ jtypes.h -- Common types (and a few useful macros) Copyright (C) 2005 Michael Noland (joat) Jason Rogers (dovoto) Dave Murphy (WinterMute) Chris Double (doublec) This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ---------------------------------------------------------------------------------*/ #ifndef NDS_JTYPES_INCLUDE #define NDS_JTYPES_INCLUDE //--------------------------------------------------------------------------------- #define PACKED __attribute__ ((packed)) #define packed_struct struct PACKED //--------------------------------------------------------------------------------- // libgba compatible section macros //--------------------------------------------------------------------------------- #define ITCM_CODE __attribute__((section(".itcm"), long_call)) #define DTCM_DATA __attribute__((section(".dtcm"))) #define DTCM_BSS __attribute__((section(".sbss"))) #define ALIGN(m) __attribute__((aligned (m))) #define PACKED __attribute__ ((packed)) #define packed_struct struct PACKED //--------------------------------------------------------------------------------- // These are linked to the bin2o macro in the Makefile //--------------------------------------------------------------------------------- #define GETRAW(name) (name) #define GETRAWSIZE(name) ((int)name##_size) #define GETRAWEND(name) ((int)name##_end) #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif #define BIT(n) (1 << (n)) // define libnds types in terms of stdint #include typedef uint8_t uint8; typedef uint16_t uint16; typedef uint32_t uint32; typedef uint64_t uint64; typedef int8_t int8; typedef int16_t int16; typedef int32_t int32; typedef int64_t int64; //typedef float float32; typedef double float64; typedef volatile uint8_t vuint8; typedef volatile uint16_t vuint16; typedef volatile uint32_t vuint32; typedef volatile uint64_t vuint64; typedef volatile int8_t vint8; typedef volatile int16_t vint16; typedef volatile int32_t vint32; typedef volatile int64_t vint64; typedef volatile float vfloat32; typedef volatile float64 vfloat64; typedef uint8_t byte; typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef int8_t s8; typedef int16_t s16; typedef int32_t s32; typedef int64_t s64; typedef volatile u8 vu8; typedef volatile u16 vu16; typedef volatile u32 vu32; typedef volatile u64 vu64; typedef volatile s8 vs8; typedef volatile s16 vs16; typedef volatile s32 vs32; typedef volatile s64 vs64; typedef struct touchPosition { int16 x; int16 y; int16 px; int16 py; int16 z1; int16 z2; } touchPosition; #ifndef __cplusplus /** C++ compatible bool for C */ typedef enum { false, true } bool; #endif // Handy function pointer typedefs typedef void ( * IntFn)(void); typedef void (* VoidFunctionPointer)(void); typedef void (* fp)(void); //--------------------------------------------------------------------------------- #endif //--------------------------------------------------------------------------------- numptyphysics-0.2+svn157/Box2D/Source/Common/Fixed.h0000644000175000017500000004421112264274615021210 0ustar warp10warp10/* Copyright (c) 2006 Henry Strickland & Ryan Seto 2007-2008 Tobias Weyand (modifications and extensions) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. (* http://www.opensource.org/licenses/mit-license.php *) */ #ifndef _FIXED_H_ #define _FIXED_H_ #include #ifdef TARGET_IS_NDS #include "nds.h" #endif #define FIXED_BP 16 #define FIXED_MAX ((1<<(32-FIXED_BP-1))-1) #define FIXED_MIN (-(1<<(32-FIXED_BP-1))) #define FIXED_EPSILON (Fixed(0.00007f)) #define G_1_DIV_PI 20861 class Fixed { private: int g; // the guts const static int BP= FIXED_BP; // how many low bits are right of Binary Point const static int BP2= BP*2; // how many low bits are right of Binary Point const static int BPhalf= BP/2; // how many low bits are right of Binary Point double STEP(); // smallest step we can represent // for private construction via guts enum FixedRaw { RAW }; Fixed(FixedRaw, int guts); public: Fixed(); Fixed(const Fixed &a); Fixed(float a); Fixed(double a); Fixed(int a); Fixed(long a); Fixed& operator =(const Fixed a); Fixed& operator =(float a); Fixed& operator =(double a); Fixed& operator =(int a); Fixed& operator =(long a); operator float(); operator double(); operator int(); operator long(); operator unsigned short(); operator float() const; Fixed operator +() const; Fixed operator -() const; Fixed operator +(const Fixed a) const; Fixed operator -(const Fixed a) const; #if 1 // more acurate, using long long Fixed operator *(const Fixed a) const; #else // faster, but with only half as many bits right of binary point Fixed operator *(const Fixed a) const; #endif Fixed operator /(const Fixed a) const; Fixed operator *(unsigned short a) const; Fixed operator *(int a) const; Fixed operator +(float a) const; Fixed operator -(float a) const; Fixed operator *(float a) const; Fixed operator /(float a) const; Fixed operator +(double a) const; Fixed operator -(double a) const; Fixed operator *(double a) const; Fixed operator /(double a) const; Fixed operator >>(int a) const; Fixed operator <<(int a) const; Fixed& operator +=(Fixed a); Fixed& operator -=(Fixed a); Fixed& operator *=(Fixed a); Fixed& operator /=(Fixed a); Fixed& operator +=(int a); Fixed& operator -=(int a); Fixed& operator *=(int a); Fixed& operator /=(int a); Fixed& operator +=(long a); Fixed& operator -=(long a); Fixed& operator *=(long a); Fixed& operator /=(long a); Fixed& operator +=(float a); Fixed& operator -=(float a); Fixed& operator *=(float a); Fixed& operator /=(float a); Fixed& operator +=(double a); Fixed& operator -=(double a); Fixed& operator *=(double a); Fixed& operator /=(double a); bool operator ==(const Fixed a) const; bool operator !=(const Fixed a) const; bool operator <=(const Fixed a) const; bool operator >=(const Fixed a) const; bool operator <(const Fixed a) const; bool operator >(const Fixed a) const; bool operator ==(float a) const; bool operator !=(float a) const; bool operator <=(float a) const; bool operator >=(float a) const; bool operator <(float a) const; bool operator >(float a) const; bool operator ==(double a) const; bool operator !=(double a) const; bool operator <=(double a) const; bool operator >=(double a) const; bool operator <(double a) const; bool operator >(double a) const; bool operator >(int a) const; bool operator <(int a) const; bool operator >=(int a) const; bool operator <=(int a) const; Fixed abs(); Fixed sqrt(); #ifdef TARGET_IS_NDS Fixed cosf(); Fixed sinf(); Fixed tanf(); #endif }; // // Implementation // inline double Fixed::STEP() { return 1.0 / (1<>BP; } inline Fixed::operator long() { return g>>BP; } //#pragma warning(disable: 4244) //HARDWIRE added pragma to prevent VS2005 compilation error inline Fixed::operator unsigned short() { return g>>BP; } inline Fixed::operator float() const { return g / (float)(1<> BP)); } #elif 0 // check for overflow and figure out where. Must specify -rdynamic in linker #include #include #include inline Fixed Fixed::operator *(const Fixed a) const { long long x = ((long long)g * (long long)a.g ); if(x > 0x7fffffffffffLL || x < -0x7fffffffffffLL) { printf("overflow"); void *array[2]; int nSize = backtrace(array, 2); char **symbols = backtrace_symbols(array, nSize); for(int i=0; i>BP)); } #else // faster, but with only half as many bits right of binary point inline Fixed Fixed::operator *(const Fixed a) const { return Fixed(RAW, (g>>BPhalf) * (a.g>>BPhalf) ); } #endif #ifdef TARGET_IS_NDS // Division using the DS's maths coprocessor inline Fixed Fixed::operator /(const Fixed a) const { //printf("%d %d\n", (long long)g << BP, a.g); return Fixed(RAW, int( div64((long long)g << BP, a.g) ) ); } #else inline Fixed Fixed::operator /(const Fixed a) const { return Fixed(RAW, int( (((long long)g << BP2) / (long long)(a.g)) >> BP) ); //return Fixed(RAW, int( (((long long)g << BP) / (long long)(a.g)) ) ); } #endif inline Fixed Fixed::operator *(unsigned short a) const { return operator*(Fixed(a)); } inline Fixed Fixed::operator *(int a) const { return operator*(Fixed(a)); } inline Fixed Fixed::operator +(float a) const { return Fixed(RAW, g + Fixed(a).g); } inline Fixed Fixed::operator -(float a) const { return Fixed(RAW, g - Fixed(a).g); } inline Fixed Fixed::operator *(float a) const { return Fixed(RAW, (g>>BPhalf) * (Fixed(a).g>>BPhalf) ); } //inline Fixed Fixed::operator /(float a) const { return Fixed(RAW, int( (((long long)g << BP2) / (long long)(Fixed(a).g)) >> BP) ); } inline Fixed Fixed::operator /(float a) const { return operator/(Fixed(a)); } inline Fixed Fixed::operator +(double a) const { return Fixed(RAW, g + Fixed(a).g); } inline Fixed Fixed::operator -(double a) const { return Fixed(RAW, g - Fixed(a).g); } inline Fixed Fixed::operator *(double a) const { return Fixed(RAW, (g>>BPhalf) * (Fixed(a).g>>BPhalf) ); } //inline Fixed Fixed::operator /(double a) const { return Fixed(RAW, int( (((long long)g << BP2) / (long long)(Fixed(a).g)) >> BP) ); } inline Fixed Fixed::operator /(double a) const { return operator/(Fixed(a)); } inline Fixed Fixed::operator >>(int a) const { return Fixed(RAW, g >> a); } inline Fixed Fixed::operator <<(int a) const { return Fixed(RAW, g << a); } inline Fixed& Fixed::operator +=(Fixed a) { return *this = *this + a; } inline Fixed& Fixed::operator -=(Fixed a) { return *this = *this - a; } inline Fixed& Fixed::operator *=(Fixed a) { return *this = *this * a; } //inline Fixed& Fixed::operator /=(Fixed a) { return *this = *this / a; } inline Fixed& Fixed::operator /=(Fixed a) { return *this = operator/(a); } inline Fixed& Fixed::operator +=(int a) { return *this = *this + (Fixed)a; } inline Fixed& Fixed::operator -=(int a) { return *this = *this - (Fixed)a; } inline Fixed& Fixed::operator *=(int a) { return *this = *this * (Fixed)a; } //inline Fixed& Fixed::operator /=(int a) { return *this = *this / (Fixed)a; } inline Fixed& Fixed::operator /=(int a) { return *this = operator/((Fixed)a); } inline Fixed& Fixed::operator +=(long a) { return *this = *this + (Fixed)a; } inline Fixed& Fixed::operator -=(long a) { return *this = *this - (Fixed)a; } inline Fixed& Fixed::operator *=(long a) { return *this = *this * (Fixed)a; } //inline Fixed& Fixed::operator /=(long a) { return *this = *this / (Fixed)a; } inline Fixed& Fixed::operator /=(long a) { return *this = operator/((Fixed)a); } inline Fixed& Fixed::operator +=(float a) { return *this = *this + a; } inline Fixed& Fixed::operator -=(float a) { return *this = *this - a; } inline Fixed& Fixed::operator *=(float a) { return *this = *this * a; } //inline Fixed& Fixed::operator /=(float a) { return *this = *this / a; } inline Fixed& Fixed::operator /=(float a) { return *this = operator/(a); } inline Fixed& Fixed::operator +=(double a) { return *this = *this + a; } inline Fixed& Fixed::operator -=(double a) { return *this = *this - a; } inline Fixed& Fixed::operator *=(double a) { return *this = *this * a; } //inline Fixed& Fixed::operator /=(double a) { return *this = *this / a; } inline Fixed& Fixed::operator /=(double a) { return *this = operator/(a); } inline Fixed operator +(int a, const Fixed b) { return Fixed(a)+b; } inline Fixed operator -(int a, const Fixed b) { return Fixed(a)-b; } inline Fixed operator *(int a, const Fixed b) { return Fixed(a)*b; } inline Fixed operator /(int a, const Fixed b) { return Fixed(a)/b; }; inline Fixed operator +(float a, const Fixed b) { return Fixed(a)+b; } inline Fixed operator -(float a, const Fixed b) { return Fixed(a)-b; } inline Fixed operator *(float a, const Fixed b) { return Fixed(a)*b; } inline Fixed operator /(float a, const Fixed b) { return Fixed(a)/b; } inline bool Fixed::operator ==(const Fixed a) const { return g == a.g; } inline bool Fixed::operator !=(const Fixed a) const { return g != a.g; } inline bool Fixed::operator <=(const Fixed a) const { return g <= a.g; } inline bool Fixed::operator >=(const Fixed a) const { return g >= a.g; } inline bool Fixed::operator <(const Fixed a) const { return g < a.g; } inline bool Fixed::operator >(const Fixed a) const { return g > a.g; } inline bool Fixed::operator ==(float a) const { return g == Fixed(a).g; } inline bool Fixed::operator !=(float a) const { return g != Fixed(a).g; } inline bool Fixed::operator <=(float a) const { return g <= Fixed(a).g; } inline bool Fixed::operator >=(float a) const { return g >= Fixed(a).g; } inline bool Fixed::operator <(float a) const { return g < Fixed(a).g; } inline bool Fixed::operator >(float a) const { return g > Fixed(a).g; } inline bool Fixed::operator ==(double a) const { return g == Fixed(a).g; } inline bool Fixed::operator !=(double a) const { return g != Fixed(a).g; } inline bool Fixed::operator <=(double a) const { return g <= Fixed(a).g; } inline bool Fixed::operator >=(double a) const { return g >= Fixed(a).g; } inline bool Fixed::operator <(double a) const { return g < Fixed(a).g; } inline bool Fixed::operator >(double a) const { return g > Fixed(a).g; } inline bool Fixed::operator >(int a) const { return g > Fixed(a).g; } inline bool Fixed::operator <(int a) const { return g < Fixed(a).g; } inline bool Fixed::operator >=(int a) const{ return g >= Fixed(a).g; }; inline bool Fixed::operator <=(int a) const{ return g <= Fixed(a).g; }; inline bool operator ==(float a, const Fixed b) { return Fixed(a) == b; } inline bool operator !=(float a, const Fixed b) { return Fixed(a) != b; } inline bool operator <=(float a, const Fixed b) { return Fixed(a) <= b; } inline bool operator >=(float a, const Fixed b) { return Fixed(a) >= b; } inline bool operator <(float a, const Fixed b) { return Fixed(a) < b; } inline bool operator >(float a, const Fixed b) { return Fixed(a) > b; } inline Fixed operator +(double a, const Fixed b) { return Fixed(a)+b; } inline Fixed operator -(double a, const Fixed b) { return Fixed(a)-b; } inline Fixed operator *(double a, const Fixed b) { return Fixed(a)*b; } inline Fixed operator /(double a, const Fixed b) { return Fixed(a)/b; } inline bool operator ==(double a, const Fixed b) { return Fixed(a) == b; } inline bool operator !=(double a, const Fixed b) { return Fixed(a) != b; } inline bool operator <=(double a, const Fixed b) { return Fixed(a) <= b; } inline bool operator >=(double a, const Fixed b) { return Fixed(a) >= b; } inline bool operator <(double a, const Fixed b) { return Fixed(a) < b; } inline bool operator >(double a, const Fixed b) { return Fixed(a) > b; } inline bool operator ==(int a, const Fixed b) { return Fixed(a) == b; } inline bool operator !=(int a, const Fixed b) { return Fixed(a) != b; } inline bool operator <=(int a, const Fixed b) { return Fixed(a) <= b; } inline bool operator >=(int a, const Fixed b) { return Fixed(a) >= b; } inline bool operator <(int a, const Fixed b) { return Fixed(a) < b; } inline bool operator >(int a, const Fixed b) { return Fixed(a) > b; } inline int& operator +=(int& a, const Fixed b) { a = (Fixed)a + b; return a; } inline int& operator -=(int& a, const Fixed b) { a = (Fixed)a - b; return a; } inline int& operator *=(int& a, const Fixed b) { a = (Fixed)a * b; return a; } inline int& operator /=(int& a, const Fixed b) { a = (Fixed)a / b; return a; } inline long& operator +=(long& a, const Fixed b) { a = (Fixed)a + b; return a; } inline long& operator -=(long& a, const Fixed b) { a = (Fixed)a - b; return a; } inline long& operator *=(long& a, const Fixed b) { a = (Fixed)a * b; return a; } inline long& operator /=(long& a, const Fixed b) { a = (Fixed)a / b; return a; } inline float& operator +=(float& a, const Fixed b) { a = a + b; return a; } inline float& operator -=(float& a, const Fixed b) { a = a - b; return a; } inline float& operator *=(float& a, const Fixed b) { a = a * b; return a; } inline float& operator /=(float& a, const Fixed b) { a = a / b; return a; } inline double& operator +=(double& a, const Fixed b) { a = a + b; return a; } inline double& operator -=(double& a, const Fixed b) { a = a - b; return a; } inline double& operator *=(double& a, const Fixed b) { a = a * b; return a; } inline double& operator /=(double& a, const Fixed b) { a = a / b; return a; } inline Fixed Fixed::abs() { return (g>0) ? Fixed(RAW, g) : Fixed(RAW, -g); } inline Fixed abs(Fixed f) { return f.abs(); } //inline Fixed atan2(Fixed a, Fixed b) { return atan2f((float) a, (float) b); } inline Fixed atan2(Fixed y, Fixed x) { Fixed abs_y = y.abs() + FIXED_EPSILON; // avoid 0/0 Fixed r, angle; if(x >= 0.0f) { r = (x - abs_y) / (x + abs_y); angle = 3.1415926/4.0; } else { r = (x + abs_y) / (abs_y - x); angle = 3.0*3.1415926/4.0; } angle += Fixed(0.1963) * (r * r * r) - Fixed(0.9817) * r; return (y < 0) ? -angle : angle; } #if TARGET_IS_NDS static inline long nds_sqrt64(long long a) { SQRT_CR = SQRT_64; while(SQRT_CR & SQRT_BUSY); SQRT_PARAM64 = a; while(SQRT_CR & SQRT_BUSY); return SQRT_RESULT32; } static inline int32 div6464(int64 num, int64 den) { DIV_CR = DIV_64_64; while(DIV_CR & DIV_BUSY); DIV_NUMERATOR64 = num; DIV_DENOMINATOR64 = den; while(DIV_CR & DIV_BUSY); return (DIV_RESULT32); } inline Fixed Fixed::sqrt() { return Fixed(RAW, nds_sqrt64(((long long)(g))<>= 2 ) { if ( ( left & -m ) > root ) left -= ( root += m ), root += m; root >>= 1; } return Fixed(RAW, root); } #endif inline Fixed sqrt(Fixed a) { return a.sqrt(); } inline Fixed sqrtf(Fixed a) { return a.sqrt(); } #endif #ifdef TARGET_IS_NDS // Use the libnds lookup tables for trigonometry functions inline Fixed Fixed::cosf() { int idx = (((long long)g*(long long)G_1_DIV_PI)>>24)%512; if(idx < 0) idx += 512; return Fixed(RAW, COS_bin[idx] << 4); } inline Fixed cosf(Fixed x) { return x.cosf(); } inline Fixed Fixed::sinf() { int idx = (((long long)g*(long long)G_1_DIV_PI)>>24)%512; if(idx < 0) idx += 512; return Fixed(RAW, SIN_bin[idx] << 4); } inline Fixed sinf(Fixed x) { return x.sinf(); } inline Fixed Fixed::tanf() { int idx = (((long long)g*(long long)G_1_DIV_PI)>>24)%512; if(idx < 0) idx += 512; return Fixed(RAW, TAN_bin[idx] << 4); } inline Fixed tanf(Fixed x) { return x.tanf(); } #endif numptyphysics-0.2+svn157/Box2D/Source/Common/b2Math.cpp0000644000175000017500000000333112264274615021617 0ustar warp10warp10/* * Copyright (c) 2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Math.h" const b2Vec2 b2Vec2_zero(0.0f, 0.0f); const b2Mat22 b2Mat22_identity(1.0f, 0.0f, 0.0f, 1.0f); const b2XForm b2XForm_identity(b2Vec2_zero, b2Mat22_identity); void b2Sweep::GetXForm(b2XForm* xf, float32 t) const { // center = p + R * localCenter if (1.0f - t0 > B2_FLT_EPSILON) { float32 alpha = (t - t0) / (1.0f - t0); xf->position = (1.0f - alpha) * c0 + alpha * c; float32 angle = (1.0f - alpha) * a0 + alpha * a; xf->R.Set(angle); } else { xf->position = c; xf->R.Set(a); } // Shift to origin xf->position -= b2Mul(xf->R, localCenter); } void b2Sweep::Advance(float32 t) { if (t0 < t && 1.0f - t0 > B2_FLT_EPSILON) { float32 alpha = (t - t0) / (1.0f - t0); c0 = (1.0f - alpha) * c0 + alpha * c; a0 = (1.0f - alpha) * a0 + alpha * a; t0 = t; } } numptyphysics-0.2+svn157/Box2D/Source/Common/b2Math.h0000644000175000017500000003453612264274615021277 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_MATH_H #define B2_MATH_H #include "b2Settings.h" #include #include #include #include #ifdef TARGET_FLOAT32_IS_FIXED inline Fixed b2Min(const Fixed& a, const Fixed& b) { return a < b ? a : b; } inline Fixed b2Max(const Fixed& a, const Fixed& b) { return a > b ? a : b; } inline Fixed b2Clamp(Fixed a, Fixed low, Fixed high) { return b2Max(low, b2Min(a, high)); } inline bool b2IsValid(Fixed x) { return true; } #define b2Sqrt(x) sqrt(x) #define b2Atan2(y, x) atan2(y, x) #else /// This function is used to ensure that a floating point number is /// not a NaN or infinity. inline bool b2IsValid(float32 x) { #ifdef _MSC_VER return _finite(x) != 0; #else return finite(x) != 0; #endif } /// This is a approximate yet fast inverse square-root. inline float32 b2InvSqrt(float32 x) { union { float32 x; int32 i; } convert; convert.x = x; float32 xhalf = 0.5f * x; convert.i = 0x5f3759df - (convert.i >> 1); x = convert.x; x = x * (1.5f - xhalf * x * x); return x; } #define b2Sqrt(x) sqrtf(x) #define b2Atan2(y, x) atan2f(y, x) #endif inline float32 b2Abs(float32 a) { return a > 0.0f ? a : -a; } /// A 2D column vector. struct b2Vec2 { /// Default constructor does nothing (for performance). b2Vec2() {} /// Construct using coordinates. b2Vec2(float32 x, float32 y) : x(x), y(y) {} /// Set this vector to all zeros. void SetZero() { x = 0.0f; y = 0.0f; } /// Set this vector to some specified coordinates. void Set(float32 x_, float32 y_) { x = x_; y = y_; } /// Negate this vector. b2Vec2 operator -() const { b2Vec2 v; v.Set(-x, -y); return v; } /// Add a vector to this vector. void operator += (const b2Vec2& v) { x += v.x; y += v.y; } /// Subtract a vector from this vector. void operator -= (const b2Vec2& v) { x -= v.x; y -= v.y; } /// Multiply this vector by a scalar. void operator *= (float32 a) { x *= a; y *= a; } /// Get the length of this vector (the norm). float32 Length() const { #ifdef TARGET_FLOAT32_IS_FIXED float est = b2Abs(x) + b2Abs(y); if(est == 0.0f) { return 0.0; } else if(est < 0.1) { return (1.0/256.0) * b2Vec2(x<<8, y<<8).Length(); } else if(est < 180.0f) { return b2Sqrt(x * x + y * y); } else { return 256.0 * (b2Vec2(x>>8, y>>8).Length()); } #else return b2Sqrt(x * x + y * y); #endif } /// Get the length squared. For performance, use this instead of /// b2Vec2::Length (if possible). float32 LengthSquared() const { return x * x + y * y; } /// Convert this vector into a unit vector. Returns the length. #ifdef TARGET_FLOAT32_IS_FIXED float32 Normalize() { float32 length = Length(); if (length < B2_FLT_EPSILON) { return 0.0f; } #ifdef NORMALIZE_BY_INVERT_MULTIPLY if (length < (1.0/16.0)) { x = x << 4; y = y << 4; return (1.0/16.0)*Normalize(); } else if(length > 16.0) { x = x >> 4; y = y >> 4; return 16.0*Normalize(); } float32 invLength = 1.0f / length; x *= invLength; y *= invLength; #else x /= length; y /= length; #endif return length; } #else float32 Normalize() { float32 length = Length(); if (length < B2_FLT_EPSILON) { return 0.0f; } float32 invLength = 1.0f / length; x *= invLength; y *= invLength; return length; } #endif /// Does this vector contain finite coordinates? bool IsValid() const { return b2IsValid(x) && b2IsValid(y); } float32 x, y; }; /// A 2-by-2 matrix. Stored in column-major order. struct b2Mat22 { /// The default constructor does nothing (for performance). b2Mat22() {} /// Construct this matrix using columns. b2Mat22(const b2Vec2& c1, const b2Vec2& c2) { col1 = c1; col2 = c2; } /// Construct this matrix using scalars. b2Mat22(float32 a11, float32 a12, float32 a21, float32 a22) { col1.x = a11; col1.y = a21; col2.x = a12; col2.y = a22; } /// Construct this matrix using an angle. This matrix becomes /// an orthonormal rotation matrix. explicit b2Mat22(float32 angle) { float32 c = cosf(angle), s = sinf(angle); col1.x = c; col2.x = -s; col1.y = s; col2.y = c; } /// Initialize this matrix using columns. void Set(const b2Vec2& c1, const b2Vec2& c2) { col1 = c1; col2 = c2; } /// Initialize this matrix using an angle. This matrix becomes /// an orthonormal rotation matrix. void Set(float32 angle) { float32 c = cosf(angle), s = sinf(angle); col1.x = c; col2.x = -s; col1.y = s; col2.y = c; } /// Set this to the identity matrix. void SetIdentity() { col1.x = 1.0f; col2.x = 0.0f; col1.y = 0.0f; col2.y = 1.0f; } /// Set this matrix to all zeros. void SetZero() { col1.x = 0.0f; col2.x = 0.0f; col1.y = 0.0f; col2.y = 0.0f; } /// Extract the angle from this matrix (assumed to be /// a rotation matrix). float32 GetAngle() const { return b2Atan2(col1.y, col1.x); } #ifdef TARGET_FLOAT32_IS_FIXED /// Compute the inverse of this matrix, such that inv(A) * A = identity. b2Mat22 Invert() const { float32 a = col1.x, b = col2.x, c = col1.y, d = col2.y; float32 det = a * d - b * c; b2Mat22 B; int n = 0; if(b2Abs(det) <= (B2_FLT_EPSILON<<8)) { n = 3; a = a<= 16.0)? 4 : 0; b2Assert(det != 0.0f); det = float32(1<> n; B.col2.x = (-det * b) >> n; B.col1.y = (-det * c) >> n; B.col2.y = ( det * a) >> n; } return B; } // Solve A * x = b b2Vec2 Solve(const b2Vec2& b) const { float32 a11 = col1.x, a12 = col2.x, a21 = col1.y, a22 = col2.y; float32 det = a11 * a22 - a12 * a21; int n = 0; b2Vec2 x; if(b2Abs(det) <= (B2_FLT_EPSILON<<8)) { n = 3; a11 = col1.x<= 16.0) ? 4 : 0; b2Assert(det != 0.0f); det = float32(1<> n; x.y = (det * (a11 * b.y - a21 * b.x)) >> n; } return x; } #else b2Mat22 Invert() const { float32 a = col1.x, b = col2.x, c = col1.y, d = col2.y; b2Mat22 B; float32 det = a * d - b * c; b2Assert(det != 0.0f); det = float32(1.0f) / det; B.col1.x = det * d; B.col2.x = -det * b; B.col1.y = -det * c; B.col2.y = det * a; return B; } /// Solve A * x = b, where b is a column vector. This is more efficient /// than computing the inverse in one-shot cases. b2Vec2 Solve(const b2Vec2& b) const { float32 a11 = col1.x, a12 = col2.x, a21 = col1.y, a22 = col2.y; float32 det = a11 * a22 - a12 * a21; b2Assert(det != 0.0f); det = 1.0f / det; b2Vec2 x; x.x = det * (a22 * b.x - a12 * b.y); x.y = det * (a11 * b.y - a21 * b.x); return x; } #endif b2Vec2 col1, col2; }; /// A transform contains translation and rotation. It is used to represent /// the position and orientation of rigid frames. struct b2XForm { /// The default constructor does nothing (for performance). b2XForm() {} /// Initialize using a position vector and a rotation matrix. b2XForm(const b2Vec2& position, const b2Mat22& R) : position(position), R(R) {} /// Set this to the identity transform. void SetIdentity() { position.SetZero(); R.SetIdentity(); } b2Vec2 position; b2Mat22 R; }; /// This describes the motion of a body/shape for TOI computation. /// Shapes are defined with respect to the body origin, which may /// no coincide with the center of mass. However, to support dynamics /// we must interpolate the center of mass position. struct b2Sweep { /// Get the interpolated transform at a specific time. /// @param t the normalized time in [0,1]. void GetXForm(b2XForm* xf, float32 t) const; /// Advance the sweep forward, yielding a new initial state. /// @param t the new initial time. void Advance(float32 t); b2Vec2 localCenter; ///< local center of mass position b2Vec2 c0, c; ///< center world positions float32 a0, a; ///< world angles float32 t0; ///< time interval = [t0,1], where t0 is in [0,1] }; extern const b2Vec2 b2Vec2_zero; extern const b2Mat22 b2Mat22_identity; extern const b2XForm b2XForm_identity; /// Peform the dot product on two vectors. inline float32 b2Dot(const b2Vec2& a, const b2Vec2& b) { return a.x * b.x + a.y * b.y; } /// Perform the cross product on two vectors. In 2D this produces a scalar. inline float32 b2Cross(const b2Vec2& a, const b2Vec2& b) { return a.x * b.y - a.y * b.x; } /// Perform the cross product on a vector and a scalar. In 2D this produces /// a vector. inline b2Vec2 b2Cross(const b2Vec2& a, float32 s) { b2Vec2 v; v.Set(s * a.y, -s * a.x); return v; } /// Perform the cross product on a scalar and a vector. In 2D this produces /// a vector. inline b2Vec2 b2Cross(float32 s, const b2Vec2& a) { b2Vec2 v; v.Set(-s * a.y, s * a.x); return v; } /// Multiply a matrix times a vector. If a rotation matrix is provided, /// then this transforms the vector from one frame to another. inline b2Vec2 b2Mul(const b2Mat22& A, const b2Vec2& v) { b2Vec2 u; u.Set(A.col1.x * v.x + A.col2.x * v.y, A.col1.y * v.x + A.col2.y * v.y); return u; } /// Multiply a matrix transpose times a vector. If a rotation matrix is provided, /// then this transforms the vector from one frame to another (inverse transform). inline b2Vec2 b2MulT(const b2Mat22& A, const b2Vec2& v) { b2Vec2 u; u.Set(b2Dot(v, A.col1), b2Dot(v, A.col2)); return u; } /// Add two vectors component-wise. inline b2Vec2 operator + (const b2Vec2& a, const b2Vec2& b) { b2Vec2 v; v.Set(a.x + b.x, a.y + b.y); return v; } /// Subtract two vectors component-wise. inline b2Vec2 operator - (const b2Vec2& a, const b2Vec2& b) { b2Vec2 v; v.Set(a.x - b.x, a.y - b.y); return v; } inline b2Vec2 operator * (float32 s, const b2Vec2& a) { b2Vec2 v; v.Set(s * a.x, s * a.y); return v; } inline bool operator == (const b2Vec2& a, const b2Vec2& b) { return a.x == b.x && a.y == b.y; } inline float32 b2Distance(const b2Vec2& a, const b2Vec2& b) { b2Vec2 c = a - b; return c.Length(); } inline float32 b2DistanceSquared(const b2Vec2& a, const b2Vec2& b) { b2Vec2 c = a - b; return b2Dot(c, c); } inline b2Mat22 operator + (const b2Mat22& A, const b2Mat22& B) { b2Mat22 C; C.Set(A.col1 + B.col1, A.col2 + B.col2); return C; } // A * B inline b2Mat22 b2Mul(const b2Mat22& A, const b2Mat22& B) { b2Mat22 C; C.Set(b2Mul(A, B.col1), b2Mul(A, B.col2)); return C; } // A^T * B inline b2Mat22 b2MulT(const b2Mat22& A, const b2Mat22& B) { b2Vec2 c1; c1.Set(b2Dot(A.col1, B.col1), b2Dot(A.col2, B.col1)); b2Vec2 c2; c2.Set(b2Dot(A.col1, B.col2), b2Dot(A.col2, B.col2)); b2Mat22 C; C.Set(c1, c2); return C; } inline b2Vec2 b2Mul(const b2XForm& T, const b2Vec2& v) { return T.position + b2Mul(T.R, v); } inline b2Vec2 b2MulT(const b2XForm& T, const b2Vec2& v) { return b2MulT(T.R, v - T.position); } inline b2Vec2 b2Abs(const b2Vec2& a) { b2Vec2 b; b.Set(b2Abs(a.x), b2Abs(a.y)); return b; } inline b2Mat22 b2Abs(const b2Mat22& A) { b2Mat22 B; B.Set(b2Abs(A.col1), b2Abs(A.col2)); return B; } template inline T b2Min(T a, T b) { return a < b ? a : b; } inline b2Vec2 b2Min(const b2Vec2& a, const b2Vec2& b) { b2Vec2 c; c.x = b2Min(a.x, b.x); c.y = b2Min(a.y, b.y); return c; } template inline T b2Max(T a, T b) { return a > b ? a : b; } inline b2Vec2 b2Max(const b2Vec2& a, const b2Vec2& b) { b2Vec2 c; c.x = b2Max(a.x, b.x); c.y = b2Max(a.y, b.y); return c; } template inline T b2Clamp(T a, T low, T high) { return b2Max(low, b2Min(a, high)); } inline b2Vec2 b2Clamp(const b2Vec2& a, const b2Vec2& low, const b2Vec2& high) { return b2Max(low, b2Min(a, high)); } template inline void b2Swap(T& a, T& b) { T tmp = a; a = b; b = tmp; } #define RAND_LIMIT 32767 // Random number in range [-1,1] inline float32 b2Random() { float32 r = (float32)(rand() & (RAND_LIMIT)); r /= RAND_LIMIT; r = 2.0f * r - 1.0f; return r; } /// Random floating point number in range [lo, hi] inline float32 b2Random(float32 lo, float32 hi) { float32 r = (float32)(rand() & (RAND_LIMIT)); r /= RAND_LIMIT; r = (hi - lo) * r + lo; return r; } /// "Next Largest Power of 2 /// Given a binary integer value x, the next largest power of 2 can be computed by a SWAR algorithm /// that recursively "folds" the upper bits into the lower bits. This process yields a bit vector with /// the same most significant 1 as x, but all 1's below it. Adding 1 to that value yields the next /// largest power of 2. For a 32-bit value:" inline uint32 b2NextPowerOfTwo(uint32 x) { x |= (x >> 1); x |= (x >> 2); x |= (x >> 4); x |= (x >> 8); x |= (x >> 16); return x + 1; } inline bool b2IsPowerOfTwo(uint32 x) { bool result = x > 0 && (x & (x - 1)) == 0; return result; } #endif numptyphysics-0.2+svn157/Box2D/Source/Common/b2Settings.cpp0000644000175000017500000000267312264274615022536 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Settings.h" #include b2Version b2_version = {2, 0, 1}; int32 b2_byteCount = 0; // Memory allocators. Modify these to use your own allocator. void* b2Alloc(int32 size) { size += 4; b2_byteCount += size; char* bytes = (char*)malloc(size); *(int32*)bytes = size; return bytes + 4; } void b2Free(void* mem) { if (mem == NULL) { return; } char* bytes = (char*)mem; bytes -= 4; int32 size = *(int32*)bytes; b2Assert(b2_byteCount >= size); b2_byteCount -= size; free(bytes); } numptyphysics-0.2+svn157/Box2D/Source/Common/b2BlockAllocator.h0000644000175000017500000000344112264274615023270 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_BLOCK_ALLOCATOR_H #define B2_BLOCK_ALLOCATOR_H #include "b2Settings.h" const int32 b2_chunkSize = 4096; const int32 b2_maxBlockSize = 640; const int32 b2_blockSizes = 14; const int32 b2_chunkArrayIncrement = 128; struct b2Block; struct b2Chunk; // This is a small object allocator used for allocating small // objects that persist for more than one time step. // See: http://www.codeproject.com/useritems/Small_Block_Allocator.asp class b2BlockAllocator { public: b2BlockAllocator(); ~b2BlockAllocator(); void* Allocate(int32 size); void Free(void* p, int32 size); void Clear(); private: b2Chunk* m_chunks; int32 m_chunkCount; int32 m_chunkSpace; b2Block* m_freeLists[b2_blockSizes]; static int32 s_blockSizes[b2_blockSizes]; static uint8 s_blockSizeLookup[b2_maxBlockSize + 1]; static bool s_blockSizeLookupInitialized; }; #endif numptyphysics-0.2+svn157/Box2D/Source/Common/b2Settings.h0000644000175000017500000001352512264274615022201 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_SETTINGS_H #define B2_SETTINGS_H #include #include #define B2_NOT_USED(x) #define b2Assert(A) assert(A) // need to include NDS jtypes.h instead of // usual typedefs because NDS jtypes defines // them slightly differently, oh well. #ifdef TARGET_IS_NDS #include "jtypes.h" #else typedef signed char int8; typedef signed short int16; typedef signed int int32; typedef unsigned char uint8; typedef unsigned short uint16; typedef unsigned int uint32; #endif #ifdef TARGET_FLOAT32_IS_FIXED #include "Fixed.h" typedef Fixed float32; #define B2_FLT_MAX FIXED_MAX #define B2_FLT_EPSILON FIXED_EPSILON #define B2FORCE_SCALE(x) ((x)<<7) #define B2FORCE_INV_SCALE(x) ((x)>>7) #else typedef float float32; #define B2_FLT_MAX FLT_MAX #define B2_FLT_EPSILON FLT_EPSILON #define B2FORCE_SCALE(x) (x) #define B2FORCE_INV_SCALE(x) (x) #endif const float32 b2_pi = 3.14159265359f; /// @file /// Global tuning constants based on meters-kilograms-seconds (MKS) units. /// // Collision const int32 b2_maxManifoldPoints = 2; const int32 b2_maxPolygonVertices = 8; const int32 b2_maxProxies = 512*4; // this must be a power of two const int32 b2_maxPairs = 8 * b2_maxProxies; // this must be a power of two // Dynamics /// A small length used as a collision and constraint tolerance. Usually it is /// chosen to be numerically significant, but visually insignificant. const float32 b2_linearSlop = 0.005f; // 0.5 cm /// A small angle used as a collision and constraint tolerance. Usually it is /// chosen to be numerically significant, but visually insignificant. const float32 b2_angularSlop = 2.0f / 180.0f * b2_pi; // 2 degrees /// Continuous collision detection (CCD) works with core, shrunken shapes. This is the /// amount by which shapes are automatically shrunk to work with CCD. This must be /// larger than b2_linearSlop. const float32 b2_toiSlop = 8.0f * b2_linearSlop; /// Maximum number of contacts to be handled to solve a TOI island. const int32 b2_maxTOIContactsPerIsland = 32; /// A velocity threshold for elastic collisions. Any collision with a relative linear /// velocity below this threshold will be treated as inelastic. const float32 b2_velocityThreshold = 1.0f; // 1 m/s /// The maximum linear position correction used when solving constraints. This helps to /// prevent overshoot. const float32 b2_maxLinearCorrection = 0.2f; // 20 cm /// The maximum angular position correction used when solving constraints. This helps to /// prevent overshoot. const float32 b2_maxAngularCorrection = 8.0f / 180.0f * b2_pi; // 8 degrees /// The maximum linear velocity of a body. This limit is very large and is used /// to prevent numerical problems. You shouldn't need to adjust this. #ifdef TARGET_FLOAT32_IS_FIXED const float32 b2_maxLinearVelocity = 100.0f; #else const float32 b2_maxLinearVelocity = 200.0f; const float32 b2_maxLinearVelocitySquared = b2_maxLinearVelocity * b2_maxLinearVelocity; #endif /// The maximum angular velocity of a body. This limit is very large and is used /// to prevent numerical problems. You shouldn't need to adjust this. const float32 b2_maxAngularVelocity = 250.0f; #ifndef TARGET_FLOAT32_IS_FIXED const float32 b2_maxAngularVelocitySquared = b2_maxAngularVelocity * b2_maxAngularVelocity; #endif /// This scale factor controls how fast overlap is resolved. Ideally this would be 1 so /// that overlap is removed in one time step. However using values close to 1 often lead /// to overshoot. const float32 b2_contactBaumgarte = 0.2f; // Sleep /// The time that a body must be still before it will go to sleep. const float32 b2_timeToSleep = 0.5f; // half a second /// A body cannot sleep if its linear velocity is above this tolerance. const float32 b2_linearSleepTolerance = 0.01f; // 1 cm/s /// A body cannot sleep if its angular velocity is above this tolerance. const float32 b2_angularSleepTolerance = 2.0f / 180.0f; // 2 degrees/s // Memory Allocation /// The current number of bytes allocated through b2Alloc. extern int32 b2_byteCount; /// Implement this function to use your own memory allocator. void* b2Alloc(int32 size); /// If you implement b2Alloc, you should also implement this function. void b2Free(void* mem); /// Version numbering scheme. /// See http://en.wikipedia.org/wiki/Software_versioning struct b2Version { int32 major; ///< significant changes int32 minor; ///< incremental changes int32 revision; ///< bug fixes }; /// Current version. extern b2Version b2_version; /// Friction mixing law. Feel free to customize this. inline float32 b2MixFriction(float32 friction1, float32 friction2) { return sqrtf(friction1 * friction2); } /// Restitution mixing law. Feel free to customize this. inline float32 b2MixRestitution(float32 restitution1, float32 restitution2) { return restitution1 > restitution2 ? restitution1 : restitution2; } #endif numptyphysics-0.2+svn157/Box2D/Source/Common/b2StackAllocator.cpp0000644000175000017500000000407512264274615023642 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2StackAllocator.h" #include "b2Math.h" b2StackAllocator::b2StackAllocator() { m_index = 0; m_allocation = 0; m_maxAllocation = 0; m_entryCount = 0; } b2StackAllocator::~b2StackAllocator() { b2Assert(m_index == 0); b2Assert(m_entryCount == 0); } void* b2StackAllocator::Allocate(int32 size) { b2Assert(m_entryCount < b2_maxStackEntries); b2StackEntry* entry = m_entries + m_entryCount; entry->size = size; if (m_index + size > b2_stackSize) { entry->data = (char*)b2Alloc(size); entry->usedMalloc = true; } else { entry->data = m_data + m_index; entry->usedMalloc = false; m_index += size; } m_allocation += size; m_maxAllocation = b2Max(m_maxAllocation, m_allocation); ++m_entryCount; return entry->data; } void b2StackAllocator::Free(void* p) { b2Assert(m_entryCount > 0); b2StackEntry* entry = m_entries + m_entryCount - 1; b2Assert(p == entry->data); if (entry->usedMalloc) { b2Free(p); } else { m_index -= entry->size; } m_allocation -= entry->size; --m_entryCount; p = NULL; } int32 b2StackAllocator::GetMaxAllocation() const { return m_maxAllocation; } numptyphysics-0.2+svn157/Box2D/Source/Common/b2BlockAllocator.cpp0000644000175000017500000001172712264274615023631 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include #include "b2BlockAllocator.h" #include #include #include int32 b2BlockAllocator::s_blockSizes[b2_blockSizes] = { 16, // 0 32, // 1 64, // 2 96, // 3 128, // 4 160, // 5 192, // 6 224, // 7 256, // 8 320, // 9 384, // 10 448, // 11 512, // 12 640, // 13 }; uint8 b2BlockAllocator::s_blockSizeLookup[b2_maxBlockSize + 1]; bool b2BlockAllocator::s_blockSizeLookupInitialized; struct b2Chunk { int32 blockSize; b2Block* blocks; }; struct b2Block { b2Block* next; }; b2BlockAllocator::b2BlockAllocator() { b2Assert(b2_blockSizes < UCHAR_MAX); m_chunkSpace = b2_chunkArrayIncrement; m_chunkCount = 0; m_chunks = (b2Chunk*)b2Alloc(m_chunkSpace * sizeof(b2Chunk)); memset(m_chunks, 0, m_chunkSpace * sizeof(b2Chunk)); memset(m_freeLists, 0, sizeof(m_freeLists)); if (s_blockSizeLookupInitialized == false) { int32 j = 0; for (int32 i = 1; i <= b2_maxBlockSize; ++i) { b2Assert(j < b2_blockSizes); if (i <= s_blockSizes[j]) { s_blockSizeLookup[i] = (uint8)j; } else { ++j; s_blockSizeLookup[i] = (uint8)j; } } s_blockSizeLookupInitialized = true; } } b2BlockAllocator::~b2BlockAllocator() { for (int32 i = 0; i < m_chunkCount; ++i) { b2Free(m_chunks[i].blocks); } b2Free(m_chunks); } void* b2BlockAllocator::Allocate(int32 size) { if (size == 0) return NULL; b2Assert(0 < size && size <= b2_maxBlockSize); int32 index = s_blockSizeLookup[size]; b2Assert(0 <= index && index < b2_blockSizes); if (m_freeLists[index]) { b2Block* block = m_freeLists[index]; m_freeLists[index] = block->next; return block; } else { if (m_chunkCount == m_chunkSpace) { b2Chunk* oldChunks = m_chunks; m_chunkSpace += b2_chunkArrayIncrement; m_chunks = (b2Chunk*)b2Alloc(m_chunkSpace * sizeof(b2Chunk)); memcpy(m_chunks, oldChunks, m_chunkCount * sizeof(b2Chunk)); memset(m_chunks + m_chunkCount, 0, b2_chunkArrayIncrement * sizeof(b2Chunk)); b2Free(oldChunks); } b2Chunk* chunk = m_chunks + m_chunkCount; chunk->blocks = (b2Block*)b2Alloc(b2_chunkSize); #if defined(_DEBUG) memset(chunk->blocks, 0xcd, b2_chunkSize); #endif int32 blockSize = s_blockSizes[index]; chunk->blockSize = blockSize; int32 blockCount = b2_chunkSize / blockSize; b2Assert(blockCount * blockSize <= b2_chunkSize); for (int32 i = 0; i < blockCount - 1; ++i) { b2Block* block = (b2Block*)((int8*)chunk->blocks + blockSize * i); b2Block* next = (b2Block*)((int8*)chunk->blocks + blockSize * (i + 1)); block->next = next; } b2Block* last = (b2Block*)((int8*)chunk->blocks + blockSize * (blockCount - 1)); last->next = NULL; m_freeLists[index] = chunk->blocks->next; ++m_chunkCount; return chunk->blocks; } } void b2BlockAllocator::Free(void* p, int32 size) { if (size == 0) { return; } b2Assert(0 < size && size <= b2_maxBlockSize); int32 index = s_blockSizeLookup[size]; b2Assert(0 <= index && index < b2_blockSizes); #ifdef _DEBUG // Verify the memory address and size is valid. int32 blockSize = s_blockSizes[index]; bool found = false; int32 gap = (int32)((int8*)&m_chunks->blocks - (int8*)m_chunks); for (int32 i = 0; i < m_chunkCount; ++i) { b2Chunk* chunk = m_chunks + i; if (chunk->blockSize != blockSize) { b2Assert( (int8*)p + blockSize <= (int8*)chunk->blocks || (int8*)chunk->blocks + b2_chunkSize + gap <= (int8*)p); } else { if ((int8*)chunk->blocks <= (int8*)p && (int8*)p + blockSize <= (int8*)chunk->blocks + b2_chunkSize) { found = true; } } } b2Assert(found); memset(p, 0xfd, blockSize); #endif b2Block* block = (b2Block*)p; block->next = m_freeLists[index]; m_freeLists[index] = block; } void b2BlockAllocator::Clear() { for (int32 i = 0; i < m_chunkCount; ++i) { b2Free(m_chunks[i].blocks); } m_chunkCount = 0; memset(m_chunks, 0, m_chunkSpace * sizeof(b2Chunk)); memset(m_freeLists, 0, sizeof(m_freeLists)); } numptyphysics-0.2+svn157/Box2D/Source/Common/b2StackAllocator.h0000644000175000017500000000327212264274615023305 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_STACK_ALLOCATOR_H #define B2_STACK_ALLOCATOR_H #include "b2Settings.h" const int32 b2_stackSize = 100 * 1024; // 100k const int32 b2_maxStackEntries = 32; struct b2StackEntry { char* data; int32 size; bool usedMalloc; }; // This is a stack allocator used for fast per step allocations. // You must nest allocate/free pairs. The code will assert // if you try to interleave multiple allocate/free pairs. class b2StackAllocator { public: b2StackAllocator(); ~b2StackAllocator(); void* Allocate(int32 size); void Free(void* p); int32 GetMaxAllocation() const; private: char m_data[b2_stackSize]; int32 m_index; int32 m_allocation; int32 m_maxAllocation; b2StackEntry m_entries[b2_maxStackEntries]; int32 m_entryCount; }; #endif numptyphysics-0.2+svn157/Box2D/Source/Collision/0000755000175000017500000000000012264274616020502 5ustar warp10warp10numptyphysics-0.2+svn157/Box2D/Source/Collision/b2CollideCircle.cpp0000644000175000017500000001201412264274616024125 0ustar warp10warp10/* * Copyright (c) 2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Collision.h" #include "Shapes/b2CircleShape.h" #include "Shapes/b2PolygonShape.h" void b2CollideCircles( b2Manifold* manifold, const b2CircleShape* circle1, const b2XForm& xf1, const b2CircleShape* circle2, const b2XForm& xf2) { manifold->pointCount = 0; b2Vec2 p1 = b2Mul(xf1, circle1->GetLocalPosition()); b2Vec2 p2 = b2Mul(xf2, circle2->GetLocalPosition()); b2Vec2 d = p2 - p1; float32 distSqr = b2Dot(d, d); float32 r1 = circle1->GetRadius(); float32 r2 = circle2->GetRadius(); float32 radiusSum = r1 + r2; if (distSqr > radiusSum * radiusSum) { return; } float32 separation; if (distSqr < B2_FLT_EPSILON) { separation = -radiusSum; manifold->normal.Set(0.0f, 1.0f); } else { float32 dist = b2Sqrt(distSqr); separation = dist - radiusSum; float32 a = 1.0f / dist; manifold->normal.x = a * d.x; manifold->normal.y = a * d.y; } manifold->pointCount = 1; manifold->points[0].id.key = 0; manifold->points[0].separation = separation; p1 += r1 * manifold->normal; p2 -= r2 * manifold->normal; b2Vec2 p = 0.5f * (p1 + p2); manifold->points[0].localPoint1 = b2MulT(xf1, p); manifold->points[0].localPoint2 = b2MulT(xf2, p); } void b2CollidePolygonAndCircle( b2Manifold* manifold, const b2PolygonShape* polygon, const b2XForm& xf1, const b2CircleShape* circle, const b2XForm& xf2) { manifold->pointCount = 0; // Compute circle position in the frame of the polygon. b2Vec2 c = b2Mul(xf2, circle->GetLocalPosition()); b2Vec2 cLocal = b2MulT(xf1, c); // Find the min separating edge. int32 normalIndex = 0; float32 separation = -B2_FLT_MAX; float32 radius = circle->GetRadius(); int32 vertexCount = polygon->GetVertexCount(); const b2Vec2* vertices = polygon->GetVertices(); const b2Vec2* normals = polygon->GetNormals(); for (int32 i = 0; i < vertexCount; ++i) { float32 s = b2Dot(normals[i], cLocal - vertices[i]); if (s > radius) { // Early out. return; } if (s > separation) { separation = s; normalIndex = i; } } // If the center is inside the polygon ... if (separation < B2_FLT_EPSILON) { manifold->pointCount = 1; manifold->normal = b2Mul(xf1.R, normals[normalIndex]); manifold->points[0].id.features.incidentEdge = (uint8)normalIndex; manifold->points[0].id.features.incidentVertex = b2_nullFeature; manifold->points[0].id.features.referenceEdge = 0; manifold->points[0].id.features.flip = 0; b2Vec2 position = c - radius * manifold->normal; manifold->points[0].localPoint1 = b2MulT(xf1, position); manifold->points[0].localPoint2 = b2MulT(xf2, position); manifold->points[0].separation = separation - radius; return; } // Project the circle center onto the edge segment. int32 vertIndex1 = normalIndex; int32 vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0; b2Vec2 e = vertices[vertIndex2] - vertices[vertIndex1]; float32 length = e.Normalize(); b2Assert(length > B2_FLT_EPSILON); // Project the center onto the edge. float32 u = b2Dot(cLocal - vertices[vertIndex1], e); b2Vec2 p; if (u <= 0.0f) { p = vertices[vertIndex1]; manifold->points[0].id.features.incidentEdge = b2_nullFeature; manifold->points[0].id.features.incidentVertex = (uint8)vertIndex1; } else if (u >= length) { p = vertices[vertIndex2]; manifold->points[0].id.features.incidentEdge = b2_nullFeature; manifold->points[0].id.features.incidentVertex = (uint8)vertIndex2; } else { p = vertices[vertIndex1] + u * e; manifold->points[0].id.features.incidentEdge = (uint8)normalIndex; manifold->points[0].id.features.incidentVertex = 0; } b2Vec2 d = cLocal - p; float32 dist = d.Normalize(); if (dist > radius) { return; } manifold->pointCount = 1; manifold->normal = b2Mul(xf1.R, d); b2Vec2 position = c - radius * manifold->normal; manifold->points[0].localPoint1 = b2MulT(xf1, position); manifold->points[0].localPoint2 = b2MulT(xf2, position); manifold->points[0].separation = dist - radius; manifold->points[0].id.features.referenceEdge = 0; manifold->points[0].id.features.flip = 0; } numptyphysics-0.2+svn157/Box2D/Source/Collision/b2CollidePoly.cpp0000644000175000017500000002262212264274616023655 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Collision.h" #include "Shapes/b2PolygonShape.h" struct ClipVertex { b2Vec2 v; b2ContactID id; }; static int32 ClipSegmentToLine(ClipVertex vOut[2], ClipVertex vIn[2], const b2Vec2& normal, float32 offset) { // Start with no output points int32 numOut = 0; // Calculate the distance of end points to the line float32 distance0 = b2Dot(normal, vIn[0].v) - offset; float32 distance1 = b2Dot(normal, vIn[1].v) - offset; // If the points are behind the plane if (distance0 <= 0.0f) vOut[numOut++] = vIn[0]; if (distance1 <= 0.0f) vOut[numOut++] = vIn[1]; // If the points are on different sides of the plane if (distance0 * distance1 < 0.0f) { // Find intersection point of edge and plane float32 interp = distance0 / (distance0 - distance1); vOut[numOut].v = vIn[0].v + interp * (vIn[1].v - vIn[0].v); if (distance0 > 0.0f) { vOut[numOut].id = vIn[0].id; } else { vOut[numOut].id = vIn[1].id; } ++numOut; } return numOut; } // Find the separation between poly1 and poly2 for a give edge normal on poly1. static float32 EdgeSeparation(const b2PolygonShape* poly1, const b2XForm& xf1, int32 edge1, const b2PolygonShape* poly2, const b2XForm& xf2) { int32 count1 = poly1->GetVertexCount(); const b2Vec2* vertices1 = poly1->GetVertices(); const b2Vec2* normals1 = poly1->GetNormals(); int32 count2 = poly2->GetVertexCount(); const b2Vec2* vertices2 = poly2->GetVertices(); b2Assert(0 <= edge1 && edge1 < count1); // Convert normal from poly1's frame into poly2's frame. b2Vec2 normal1World = b2Mul(xf1.R, normals1[edge1]); b2Vec2 normal1 = b2MulT(xf2.R, normal1World); // Find support vertex on poly2 for -normal. int32 index = 0; float32 minDot = B2_FLT_MAX; for (int32 i = 0; i < count2; ++i) { float32 dot = b2Dot(vertices2[i], normal1); if (dot < minDot) { minDot = dot; index = i; } } b2Vec2 v1 = b2Mul(xf1, vertices1[edge1]); b2Vec2 v2 = b2Mul(xf2, vertices2[index]); float32 separation = b2Dot(v2 - v1, normal1World); return separation; } // Find the max separation between poly1 and poly2 using edge normals from poly1. static float32 FindMaxSeparation(int32* edgeIndex, const b2PolygonShape* poly1, const b2XForm& xf1, const b2PolygonShape* poly2, const b2XForm& xf2) { int32 count1 = poly1->GetVertexCount(); const b2Vec2* normals1 = poly1->GetNormals(); // Vector pointing from the centroid of poly1 to the centroid of poly2. b2Vec2 d = b2Mul(xf2, poly2->GetCentroid()) - b2Mul(xf1, poly1->GetCentroid()); b2Vec2 dLocal1 = b2MulT(xf1.R, d); // Find edge normal on poly1 that has the largest projection onto d. int32 edge = 0; float32 maxDot = -B2_FLT_MAX; for (int32 i = 0; i < count1; ++i) { float32 dot = b2Dot(normals1[i], dLocal1); if (dot > maxDot) { maxDot = dot; edge = i; } } // Get the separation for the edge normal. float32 s = EdgeSeparation(poly1, xf1, edge, poly2, xf2); if (s > 0.0f) { return s; } // Check the separation for the previous edge normal. int32 prevEdge = edge - 1 >= 0 ? edge - 1 : count1 - 1; float32 sPrev = EdgeSeparation(poly1, xf1, prevEdge, poly2, xf2); if (sPrev > 0.0f) { return sPrev; } // Check the separation for the next edge normal. int32 nextEdge = edge + 1 < count1 ? edge + 1 : 0; float32 sNext = EdgeSeparation(poly1, xf1, nextEdge, poly2, xf2); if (sNext > 0.0f) { return sNext; } // Find the best edge and the search direction. int32 bestEdge; float32 bestSeparation; int32 increment; if (sPrev > s && sPrev > sNext) { increment = -1; bestEdge = prevEdge; bestSeparation = sPrev; } else if (sNext > s) { increment = 1; bestEdge = nextEdge; bestSeparation = sNext; } else { *edgeIndex = edge; return s; } // Perform a local search for the best edge normal. for ( ; ; ) { if (increment == -1) edge = bestEdge - 1 >= 0 ? bestEdge - 1 : count1 - 1; else edge = bestEdge + 1 < count1 ? bestEdge + 1 : 0; s = EdgeSeparation(poly1, xf1, edge, poly2, xf2); if (s > 0.0f) { return s; } if (s > bestSeparation) { bestEdge = edge; bestSeparation = s; } else { break; } } *edgeIndex = bestEdge; return bestSeparation; } static void FindIncidentEdge(ClipVertex c[2], const b2PolygonShape* poly1, const b2XForm& xf1, int32 edge1, const b2PolygonShape* poly2, const b2XForm& xf2) { int32 count1 = poly1->GetVertexCount(); const b2Vec2* normals1 = poly1->GetNormals(); int32 count2 = poly2->GetVertexCount(); const b2Vec2* vertices2 = poly2->GetVertices(); const b2Vec2* normals2 = poly2->GetNormals(); b2Assert(0 <= edge1 && edge1 < count1); // Get the normal of the reference edge in poly2's frame. b2Vec2 normal1 = b2MulT(xf2.R, b2Mul(xf1.R, normals1[edge1])); // Find the incident edge on poly2. int32 index = 0; float32 minDot = B2_FLT_MAX; for (int32 i = 0; i < count2; ++i) { float32 dot = b2Dot(normal1, normals2[i]); if (dot < minDot) { minDot = dot; index = i; } } // Build the clip vertices for the incident edge. int32 i1 = index; int32 i2 = i1 + 1 < count2 ? i1 + 1 : 0; c[0].v = b2Mul(xf2, vertices2[i1]); c[0].id.features.referenceEdge = (uint8)edge1; c[0].id.features.incidentEdge = (uint8)i1; c[0].id.features.incidentVertex = 0; c[1].v = b2Mul(xf2, vertices2[i2]); c[1].id.features.referenceEdge = (uint8)edge1; c[1].id.features.incidentEdge = (uint8)i2; c[1].id.features.incidentVertex = 1; } // Find edge normal of max separation on A - return if separating axis is found // Find edge normal of max separation on B - return if separation axis is found // Choose reference edge as min(minA, minB) // Find incident edge // Clip // The normal points from 1 to 2 void b2CollidePolygons(b2Manifold* manifold, const b2PolygonShape* polyA, const b2XForm& xfA, const b2PolygonShape* polyB, const b2XForm& xfB) { manifold->pointCount = 0; int32 edgeA = 0; float32 separationA = FindMaxSeparation(&edgeA, polyA, xfA, polyB, xfB); if (separationA > 0.0f) return; int32 edgeB = 0; float32 separationB = FindMaxSeparation(&edgeB, polyB, xfB, polyA, xfA); if (separationB > 0.0f) return; const b2PolygonShape* poly1; // reference poly const b2PolygonShape* poly2; // incident poly b2XForm xf1, xf2; int32 edge1; // reference edge uint8 flip; const float32 k_relativeTol = 0.98f; const float32 k_absoluteTol = 0.001f; // TODO_ERIN use "radius" of poly for absolute tolerance. if (separationB > k_relativeTol * separationA + k_absoluteTol) { poly1 = polyB; poly2 = polyA; xf1 = xfB; xf2 = xfA; edge1 = edgeB; flip = 1; } else { poly1 = polyA; poly2 = polyB; xf1 = xfA; xf2 = xfB; edge1 = edgeA; flip = 0; } ClipVertex incidentEdge[2]; FindIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2); int32 count1 = poly1->GetVertexCount(); const b2Vec2* vertices1 = poly1->GetVertices(); b2Vec2 v11 = vertices1[edge1]; b2Vec2 v12 = edge1 + 1 < count1 ? vertices1[edge1+1] : vertices1[0]; b2Vec2 dv = v12 - v11; b2Vec2 sideNormal = b2Mul(xf1.R, v12 - v11); sideNormal.Normalize(); b2Vec2 frontNormal = b2Cross(sideNormal, 1.0f); v11 = b2Mul(xf1, v11); v12 = b2Mul(xf1, v12); float32 frontOffset = b2Dot(frontNormal, v11); float32 sideOffset1 = -b2Dot(sideNormal, v11); float32 sideOffset2 = b2Dot(sideNormal, v12); // Clip incident edge against extruded edge1 side edges. ClipVertex clipPoints1[2]; ClipVertex clipPoints2[2]; int np; // Clip to box side 1 np = ClipSegmentToLine(clipPoints1, incidentEdge, -sideNormal, sideOffset1); if (np < 2) return; // Clip to negative box side 1 np = ClipSegmentToLine(clipPoints2, clipPoints1, sideNormal, sideOffset2); if (np < 2) return; // Now clipPoints2 contains the clipped points. manifold->normal = flip ? -frontNormal : frontNormal; int32 pointCount = 0; for (int32 i = 0; i < b2_maxManifoldPoints; ++i) { float32 separation = b2Dot(frontNormal, clipPoints2[i].v) - frontOffset; if (separation <= 0.0f) { b2ManifoldPoint* cp = manifold->points + pointCount; cp->separation = separation; cp->localPoint1 = b2MulT(xfA, clipPoints2[i].v); cp->localPoint2 = b2MulT(xfB, clipPoints2[i].v); cp->id = clipPoints2[i].id; cp->id.features.flip = flip; ++pointCount; } } manifold->pointCount = pointCount; } numptyphysics-0.2+svn157/Box2D/Source/Collision/b2Shape.h0000644000175000017500000001517012264274616022143 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_SHAPE_H #define B2_SHAPE_H #include "../Common/b2Math.h" #include "b2Collision.h" class b2Body; class b2BroadPhase; struct b2MassData { float32 mass; b2Vec2 center; float32 I; }; enum b2ShapeType { e_unknownShape = -1, e_circleShape, e_boxShape, e_polyShape, e_meshShape, e_shapeTypeCount, }; struct b2ShapeDef { b2ShapeDef() { type = e_unknownShape; userData = NULL; localPosition.Set(0.0f, 0.0f); localRotation = 0.0f; friction = 0.2f; restitution = 0.0f; density = 0.0f; categoryBits = 0x0001; maskBits = 0xFFFF; groupIndex = 0; } virtual ~b2ShapeDef() {} void ComputeMass(b2MassData* massData) const; b2ShapeType type; void* userData; b2Vec2 localPosition; float32 localRotation; float32 friction; float32 restitution; float32 density; // The collision category bits. Normally you would just set one bit. uint16 categoryBits; // The collision mask bits. This states the categories that this // shape would accept for collision. uint16 maskBits; // Collision groups allow a certain group of objects to never collide (negative) // or always collide (positive). Zero means no collision group. Non-zero group // filtering always wins against the mask bits. int16 groupIndex; }; struct b2CircleDef : public b2ShapeDef { b2CircleDef() { type = e_circleShape; radius = 1.0f; } float32 radius; }; struct b2BoxDef : public b2ShapeDef { b2BoxDef() { type = e_boxShape; extents.Set(1.0f, 1.0f); } b2Vec2 extents; }; // Convex polygon, vertices must be in CCW order. struct b2PolyDef : public b2ShapeDef { b2PolyDef() { type = e_polyShape; vertexCount = 0; } b2Vec2 vertices[b2_maxPolyVertices]; int32 vertexCount; }; // Shapes are created automatically when a body is created. // Client code does not normally interact with shapes. class b2Shape { public: virtual bool TestPoint(const b2Vec2& p) = 0; void* GetUserData(); b2ShapeType GetType() const; // Get the parent body of this shape. b2Body* GetBody(); // Get the world position. const b2Vec2& GetPosition() const; // Get the world rotation. const b2Mat22& GetRotationMatrix() const; // Remove and then add proxy from the broad-phase. // This is used to refresh the collision filters. virtual void ResetProxy(b2BroadPhase* broadPhase) = 0; // Get the next shape in the parent body's shape list. b2Shape* GetNext(); //--------------- Internals Below ------------------- static b2Shape* Create( const b2ShapeDef* def, b2Body* body, const b2Vec2& newOrigin); static void Destroy(b2Shape*& shape); b2Shape(const b2ShapeDef* def, b2Body* body); virtual ~b2Shape(); virtual void Synchronize( const b2Vec2& position1, const b2Mat22& R1, const b2Vec2& position2, const b2Mat22& R2) = 0; virtual void QuickSync(const b2Vec2& position, const b2Mat22& R) = 0; virtual b2Vec2 Support(const b2Vec2& d) const = 0; float32 GetMaxRadius() const; void DestroyProxy(); b2Shape* m_next; b2Mat22 m_R; b2Vec2 m_position; b2ShapeType m_type; void* m_userData; b2Body* m_body; float32 m_friction; float32 m_restitution; float32 m_minRadius; float32 m_maxRadius; uint16 m_proxyId; uint16 m_categoryBits; uint16 m_maskBits; int16 m_groupIndex; }; class b2CircleShape : public b2Shape { public: bool TestPoint(const b2Vec2& p); void ResetProxy(b2BroadPhase* broadPhase); //--------------- Internals Below ------------------- b2CircleShape(const b2ShapeDef* def, b2Body* body, const b2Vec2& newOrigin); void Synchronize( const b2Vec2& position1, const b2Mat22& R1, const b2Vec2& position2, const b2Mat22& R2); void QuickSync(const b2Vec2& position, const b2Mat22& R); b2Vec2 Support(const b2Vec2& d) const; // Local position in parent body b2Vec2 m_localPosition; float32 m_radius; }; // A convex polygon. The position of the polygon (m_position) is the // position of the centroid. The vertices of the incoming polygon are pre-rotated // according to the local rotation. The vertices are also shifted to be centered // on the centroid. Since the local rotation is absorbed into the vertex // coordinates, the polygon rotation is equal to the body rotation. However, // the polygon position is centered on the polygon centroid. This simplifies // some collision algorithms. class b2PolyShape : public b2Shape { public: bool TestPoint(const b2Vec2& p); void ResetProxy(b2BroadPhase* broadPhase); //--------------- Internals Below ------------------- b2PolyShape(const b2ShapeDef* def, b2Body* body, const b2Vec2& newOrigin); void Synchronize( const b2Vec2& position1, const b2Mat22& R1, const b2Vec2& position2, const b2Mat22& R2); void QuickSync(const b2Vec2& position, const b2Mat22& R); b2Vec2 Support(const b2Vec2& d) const; // Local position of the shape centroid in parent body frame. b2Vec2 m_localCentroid; // Local position oriented bounding box. The OBB center is relative to // shape centroid. b2OBB m_localOBB; b2Vec2 m_vertices[b2_maxPolyVertices]; b2Vec2 m_coreVertices[b2_maxPolyVertices]; int32 m_vertexCount; b2Vec2 m_normals[b2_maxPolyVertices]; }; inline b2ShapeType b2Shape::GetType() const { return m_type; } inline void* b2Shape::GetUserData() { return m_userData; } inline b2Body* b2Shape::GetBody() { return m_body; } inline b2Shape* b2Shape::GetNext() { return m_next; } inline const b2Vec2& b2Shape::GetPosition() const { return m_position; } inline const b2Mat22& b2Shape::GetRotationMatrix() const { return m_R; } inline float32 b2Shape::GetMaxRadius() const { return m_maxRadius; } #endif numptyphysics-0.2+svn157/Box2D/Source/Collision/b2BroadPhase.cpp0000644000175000017500000004246212264274616023452 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include #include "b2BroadPhase.h" #include // Notes: // - we use bound arrays instead of linked lists for cache coherence. // - we use quantized integral values for fast compares. // - we use short indices rather than pointers to save memory. // - we use a stabbing count for fast overlap queries (less than order N). // - we also use a time stamp on each proxy to speed up the registration of // overlap query results. // - where possible, we compare bound indices instead of values to reduce // cache misses (TODO_ERIN). // - no broadphase is perfect and neither is this one: it is not great for huge // worlds (use a multi-SAP instead), it is not great for large objects. bool b2BroadPhase::s_validate = false; struct b2BoundValues { uint16 lowerValues[2]; uint16 upperValues[2]; }; static int32 BinarySearch(b2Bound* bounds, int32 count, uint16 value) { int32 low = 0; int32 high = count - 1; while (low <= high) { int32 mid = (low + high) >> 1; if (bounds[mid].value > value) { high = mid - 1; } else if (bounds[mid].value < value) { low = mid + 1; } else { return (uint16)mid; } } return low; } b2BroadPhase::b2BroadPhase(const b2AABB& worldAABB, b2PairCallback* callback) { m_pairManager.Initialize(this, callback); b2Assert(worldAABB.IsValid()); m_worldAABB = worldAABB; m_proxyCount = 0; b2Vec2 d = worldAABB.upperBound - worldAABB.lowerBound; m_quantizationFactor.x = float32(B2BROADPHASE_MAX) / d.x; m_quantizationFactor.y = float32(B2BROADPHASE_MAX) / d.y; for (uint16 i = 0; i < b2_maxProxies - 1; ++i) { m_proxyPool[i].SetNext(i + 1); m_proxyPool[i].timeStamp = 0; m_proxyPool[i].overlapCount = b2_invalid; m_proxyPool[i].userData = NULL; } m_proxyPool[b2_maxProxies-1].SetNext(b2_nullProxy); m_proxyPool[b2_maxProxies-1].timeStamp = 0; m_proxyPool[b2_maxProxies-1].overlapCount = b2_invalid; m_proxyPool[b2_maxProxies-1].userData = NULL; m_freeProxy = 0; m_timeStamp = 1; m_queryResultCount = 0; } b2BroadPhase::~b2BroadPhase() { } // This one is only used for validation. bool b2BroadPhase::TestOverlap(b2Proxy* p1, b2Proxy* p2) { for (int32 axis = 0; axis < 2; ++axis) { b2Bound* bounds = m_bounds[axis]; b2Assert(p1->lowerBounds[axis] < 2 * m_proxyCount); b2Assert(p1->upperBounds[axis] < 2 * m_proxyCount); b2Assert(p2->lowerBounds[axis] < 2 * m_proxyCount); b2Assert(p2->upperBounds[axis] < 2 * m_proxyCount); if (bounds[p1->lowerBounds[axis]].value > bounds[p2->upperBounds[axis]].value) return false; if (bounds[p1->upperBounds[axis]].value < bounds[p2->lowerBounds[axis]].value) return false; } return true; } bool b2BroadPhase::TestOverlap(const b2BoundValues& b, b2Proxy* p) { for (int32 axis = 0; axis < 2; ++axis) { b2Bound* bounds = m_bounds[axis]; b2Assert(p->lowerBounds[axis] < 2 * m_proxyCount); b2Assert(p->upperBounds[axis] < 2 * m_proxyCount); if (b.lowerValues[axis] > bounds[p->upperBounds[axis]].value) return false; if (b.upperValues[axis] < bounds[p->lowerBounds[axis]].value) return false; } return true; } void b2BroadPhase::ComputeBounds(uint16* lowerValues, uint16* upperValues, const b2AABB& aabb) { b2Assert(aabb.upperBound.x > aabb.lowerBound.x); b2Assert(aabb.upperBound.y > aabb.lowerBound.y); b2Vec2 minVertex = b2Clamp(aabb.lowerBound, m_worldAABB.lowerBound, m_worldAABB.upperBound); b2Vec2 maxVertex = b2Clamp(aabb.upperBound, m_worldAABB.lowerBound, m_worldAABB.upperBound); // Bump lower bounds downs and upper bounds up. This ensures correct sorting of // lower/upper bounds that would have equal values. // TODO_ERIN implement fast float to uint16 conversion. lowerValues[0] = (uint16)(m_quantizationFactor.x * (minVertex.x - m_worldAABB.lowerBound.x)) & (B2BROADPHASE_MAX - 1); upperValues[0] = (uint16)(m_quantizationFactor.x * (maxVertex.x - m_worldAABB.lowerBound.x)) | 1; lowerValues[1] = (uint16)(m_quantizationFactor.y * (minVertex.y - m_worldAABB.lowerBound.y)) & (B2BROADPHASE_MAX - 1); upperValues[1] = (uint16)(m_quantizationFactor.y * (maxVertex.y - m_worldAABB.lowerBound.y)) | 1; } void b2BroadPhase::IncrementTimeStamp() { if (m_timeStamp == B2BROADPHASE_MAX) { for (uint16 i = 0; i < b2_maxProxies; ++i) { m_proxyPool[i].timeStamp = 0; } m_timeStamp = 1; } else { ++m_timeStamp; } } void b2BroadPhase::IncrementOverlapCount(int32 proxyId) { b2Proxy* proxy = m_proxyPool + proxyId; if (proxy->timeStamp < m_timeStamp) { proxy->timeStamp = m_timeStamp; proxy->overlapCount = 1; } else { proxy->overlapCount = 2; b2Assert(m_queryResultCount < b2_maxProxies); m_queryResults[m_queryResultCount] = (uint16)proxyId; ++m_queryResultCount; } } void b2BroadPhase::Query(int32* lowerQueryOut, int32* upperQueryOut, uint16 lowerValue, uint16 upperValue, b2Bound* bounds, int32 boundCount, int32 axis) { int32 lowerQuery = BinarySearch(bounds, boundCount, lowerValue); int32 upperQuery = BinarySearch(bounds, boundCount, upperValue); // Easy case: lowerQuery <= lowerIndex(i) < upperQuery // Solution: search query range for min bounds. for (int32 i = lowerQuery; i < upperQuery; ++i) { if (bounds[i].IsLower()) { IncrementOverlapCount(bounds[i].proxyId); } } // Hard case: lowerIndex(i) < lowerQuery < upperIndex(i) // Solution: use the stabbing count to search down the bound array. if (lowerQuery > 0) { int32 i = lowerQuery - 1; int32 s = bounds[i].stabbingCount; // Find the s overlaps. while (s) { b2Assert(i >= 0); if (bounds[i].IsLower()) { b2Proxy* proxy = m_proxyPool + bounds[i].proxyId; if (lowerQuery <= proxy->upperBounds[axis]) { IncrementOverlapCount(bounds[i].proxyId); --s; } } --i; } } *lowerQueryOut = lowerQuery; *upperQueryOut = upperQuery; } uint16 b2BroadPhase::CreateProxy(const b2AABB& aabb, void* userData) { b2Assert(m_proxyCount < b2_maxProxies); b2Assert(m_freeProxy != b2_nullProxy); uint16 proxyId = m_freeProxy; b2Proxy* proxy = m_proxyPool + proxyId; m_freeProxy = proxy->GetNext(); proxy->overlapCount = 0; proxy->userData = userData; int32 boundCount = 2 * m_proxyCount; uint16 lowerValues[2], upperValues[2]; ComputeBounds(lowerValues, upperValues, aabb); for (int32 axis = 0; axis < 2; ++axis) { b2Bound* bounds = m_bounds[axis]; int32 lowerIndex, upperIndex; Query(&lowerIndex, &upperIndex, lowerValues[axis], upperValues[axis], bounds, boundCount, axis); memmove(bounds + upperIndex + 2, bounds + upperIndex, (boundCount - upperIndex) * sizeof(b2Bound)); memmove(bounds + lowerIndex + 1, bounds + lowerIndex, (upperIndex - lowerIndex) * sizeof(b2Bound)); // The upper index has increased because of the lower bound insertion. ++upperIndex; // Copy in the new bounds. bounds[lowerIndex].value = lowerValues[axis]; bounds[lowerIndex].proxyId = proxyId; bounds[upperIndex].value = upperValues[axis]; bounds[upperIndex].proxyId = proxyId; bounds[lowerIndex].stabbingCount = lowerIndex == 0 ? 0 : bounds[lowerIndex-1].stabbingCount; bounds[upperIndex].stabbingCount = bounds[upperIndex-1].stabbingCount; // Adjust the stabbing count between the new bounds. for (int32 index = lowerIndex; index < upperIndex; ++index) { ++bounds[index].stabbingCount; } // Adjust the all the affected bound indices. for (int32 index = lowerIndex; index < boundCount + 2; ++index) { b2Proxy* proxy = m_proxyPool + bounds[index].proxyId; if (bounds[index].IsLower()) { proxy->lowerBounds[axis] = (uint16)index; } else { proxy->upperBounds[axis] = (uint16)index; } } } ++m_proxyCount; b2Assert(m_queryResultCount < b2_maxProxies); // Create pairs if the AABB is in range. for (int32 i = 0; i < m_queryResultCount; ++i) { b2Assert(m_queryResults[i] < b2_maxProxies); b2Assert(m_proxyPool[m_queryResults[i]].IsValid()); m_pairManager.AddBufferedPair(proxyId, m_queryResults[i]); } m_pairManager.Commit(); if (s_validate) { Validate(); } // Prepare for next query. m_queryResultCount = 0; IncrementTimeStamp(); return proxyId; } void b2BroadPhase::DestroyProxy(int32 proxyId) { b2Assert(0 < m_proxyCount && m_proxyCount <= b2_maxProxies); b2Proxy* proxy = m_proxyPool + proxyId; b2Assert(proxy->IsValid()); int32 boundCount = 2 * m_proxyCount; for (int32 axis = 0; axis < 2; ++axis) { b2Bound* bounds = m_bounds[axis]; int32 lowerIndex = proxy->lowerBounds[axis]; int32 upperIndex = proxy->upperBounds[axis]; uint16 lowerValue = bounds[lowerIndex].value; uint16 upperValue = bounds[upperIndex].value; memmove(bounds + lowerIndex, bounds + lowerIndex + 1, (upperIndex - lowerIndex - 1) * sizeof(b2Bound)); memmove(bounds + upperIndex-1, bounds + upperIndex + 1, (boundCount - upperIndex - 1) * sizeof(b2Bound)); // Fix bound indices. for (int32 index = lowerIndex; index < boundCount - 2; ++index) { b2Proxy* proxy = m_proxyPool + bounds[index].proxyId; if (bounds[index].IsLower()) { proxy->lowerBounds[axis] = (uint16)index; } else { proxy->upperBounds[axis] = (uint16)index; } } // Fix stabbing count. for (int32 index = lowerIndex; index < upperIndex - 1; ++index) { --bounds[index].stabbingCount; } // Query for pairs to be removed. lowerIndex and upperIndex are not needed. Query(&lowerIndex, &upperIndex, lowerValue, upperValue, bounds, boundCount - 2, axis); } b2Assert(m_queryResultCount < b2_maxProxies); for (int32 i = 0; i < m_queryResultCount; ++i) { b2Assert(m_proxyPool[m_queryResults[i]].IsValid()); m_pairManager.RemoveBufferedPair(proxyId, m_queryResults[i]); } m_pairManager.Commit(); // Prepare for next query. m_queryResultCount = 0; IncrementTimeStamp(); // Return the proxy to the pool. proxy->userData = NULL; proxy->overlapCount = b2_invalid; proxy->lowerBounds[0] = b2_invalid; proxy->lowerBounds[1] = b2_invalid; proxy->upperBounds[0] = b2_invalid; proxy->upperBounds[1] = b2_invalid; proxy->SetNext(m_freeProxy); m_freeProxy = (uint16)proxyId; --m_proxyCount; if (s_validate) { Validate(); } } void b2BroadPhase::MoveProxy(int32 proxyId, const b2AABB& aabb) { if (proxyId == b2_nullProxy || b2_maxProxies <= proxyId) { b2Assert(false); return; } if (aabb.IsValid() == false) { b2Assert(false); return; } int32 boundCount = 2 * m_proxyCount; b2Proxy* proxy = m_proxyPool + proxyId; // Get new bound values b2BoundValues newValues; ComputeBounds(newValues.lowerValues, newValues.upperValues, aabb); // Get old bound values b2BoundValues oldValues; for (int32 axis = 0; axis < 2; ++axis) { oldValues.lowerValues[axis] = m_bounds[axis][proxy->lowerBounds[axis]].value; oldValues.upperValues[axis] = m_bounds[axis][proxy->upperBounds[axis]].value; } for (int32 axis = 0; axis < 2; ++axis) { b2Bound* bounds = m_bounds[axis]; int32 lowerIndex = proxy->lowerBounds[axis]; int32 upperIndex = proxy->upperBounds[axis]; uint16 lowerValue = newValues.lowerValues[axis]; uint16 upperValue = newValues.upperValues[axis]; int32 deltaLower = lowerValue - bounds[lowerIndex].value; int32 deltaUpper = upperValue - bounds[upperIndex].value; bounds[lowerIndex].value = lowerValue; bounds[upperIndex].value = upperValue; // // Expanding adds overlaps // // Should we move the lower bound down? if (deltaLower < 0) { int32 index = lowerIndex; while (index > 0 && lowerValue < bounds[index-1].value) { b2Bound* bound = bounds + index; b2Bound* prevBound = bound - 1; int32 prevProxyId = prevBound->proxyId; b2Proxy* prevProxy = m_proxyPool + prevBound->proxyId; ++prevBound->stabbingCount; if (prevBound->IsUpper() == true) { if (TestOverlap(newValues, prevProxy)) { m_pairManager.AddBufferedPair(proxyId, prevProxyId); } ++prevProxy->upperBounds[axis]; ++bound->stabbingCount; } else { ++prevProxy->lowerBounds[axis]; --bound->stabbingCount; } --proxy->lowerBounds[axis]; b2Swap(*bound, *prevBound); --index; } } // Should we move the upper bound up? if (deltaUpper > 0) { int32 index = upperIndex; while (index < boundCount-1 && bounds[index+1].value <= upperValue) { b2Bound* bound = bounds + index; b2Bound* nextBound = bound + 1; int32 nextProxyId = nextBound->proxyId; b2Proxy* nextProxy = m_proxyPool + nextProxyId; ++nextBound->stabbingCount; if (nextBound->IsLower() == true) { if (TestOverlap(newValues, nextProxy)) { m_pairManager.AddBufferedPair(proxyId, nextProxyId); } --nextProxy->lowerBounds[axis]; ++bound->stabbingCount; } else { --nextProxy->upperBounds[axis]; --bound->stabbingCount; } ++proxy->upperBounds[axis]; b2Swap(*bound, *nextBound); ++index; } } // // Shrinking removes overlaps // // Should we move the lower bound up? if (deltaLower > 0) { int32 index = lowerIndex; while (index < boundCount-1 && bounds[index+1].value <= lowerValue) { b2Bound* bound = bounds + index; b2Bound* nextBound = bound + 1; int32 nextProxyId = nextBound->proxyId; b2Proxy* nextProxy = m_proxyPool + nextProxyId; --nextBound->stabbingCount; if (nextBound->IsUpper()) { if (TestOverlap(oldValues, nextProxy)) { m_pairManager.RemoveBufferedPair(proxyId, nextProxyId); } --nextProxy->upperBounds[axis]; --bound->stabbingCount; } else { --nextProxy->lowerBounds[axis]; ++bound->stabbingCount; } ++proxy->lowerBounds[axis]; b2Swap(*bound, *nextBound); ++index; } } // Should we move the upper bound down? if (deltaUpper < 0) { int32 index = upperIndex; while (index > 0 && upperValue < bounds[index-1].value) { b2Bound* bound = bounds + index; b2Bound* prevBound = bound - 1; int32 prevProxyId = prevBound->proxyId; b2Proxy* prevProxy = m_proxyPool + prevProxyId; --prevBound->stabbingCount; if (prevBound->IsLower() == true) { if (TestOverlap(oldValues, prevProxy)) { m_pairManager.RemoveBufferedPair(proxyId, prevProxyId); } ++prevProxy->lowerBounds[axis]; --bound->stabbingCount; } else { ++prevProxy->upperBounds[axis]; ++bound->stabbingCount; } --proxy->upperBounds[axis]; b2Swap(*bound, *prevBound); --index; } } } if (s_validate) { Validate(); } } void b2BroadPhase::Commit() { m_pairManager.Commit(); } int32 b2BroadPhase::Query(const b2AABB& aabb, void** userData, int32 maxCount) { uint16 lowerValues[2]; uint16 upperValues[2]; ComputeBounds(lowerValues, upperValues, aabb); int32 lowerIndex, upperIndex; Query(&lowerIndex, &upperIndex, lowerValues[0], upperValues[0], m_bounds[0], 2*m_proxyCount, 0); Query(&lowerIndex, &upperIndex, lowerValues[1], upperValues[1], m_bounds[1], 2*m_proxyCount, 1); b2Assert(m_queryResultCount < b2_maxProxies); int32 count = 0; for (int32 i = 0; i < m_queryResultCount && count < maxCount; ++i, ++count) { b2Assert(m_queryResults[i] < b2_maxProxies); b2Proxy* proxy = m_proxyPool + m_queryResults[i]; b2Assert(proxy->IsValid()); userData[i] = proxy->userData; } // Prepare for next query. m_queryResultCount = 0; IncrementTimeStamp(); return count; } void b2BroadPhase::Validate() { for (int32 axis = 0; axis < 2; ++axis) { b2Bound* bounds = m_bounds[axis]; int32 boundCount = 2 * m_proxyCount; uint16 stabbingCount = 0; for (int32 i = 0; i < boundCount; ++i) { b2Bound* bound = bounds + i; b2Assert(i == 0 || bounds[i-1].value <= bound->value); b2Assert(bound->proxyId != b2_nullProxy); b2Assert(m_proxyPool[bound->proxyId].IsValid()); if (bound->IsLower() == true) { b2Assert(m_proxyPool[bound->proxyId].lowerBounds[axis] == i); ++stabbingCount; } else { b2Assert(m_proxyPool[bound->proxyId].upperBounds[axis] == i); --stabbingCount; } b2Assert(bound->stabbingCount == stabbingCount); } } } numptyphysics-0.2+svn157/Box2D/Source/Collision/b2Distance.cpp0000644000175000017500000002172212264274616023170 0ustar warp10warp10/* * Copyright (c) 2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Collision.h" #include "Shapes/b2CircleShape.h" #include "Shapes/b2PolygonShape.h" int32 g_GJK_Iterations = 0; // GJK using Voronoi regions (Christer Ericson) and region selection // optimizations (Casey Muratori). // The origin is either in the region of points[1] or in the edge region. The origin is // not in region of points[0] because that is the old point. static int32 ProcessTwo(b2Vec2* x1, b2Vec2* x2, b2Vec2* p1s, b2Vec2* p2s, b2Vec2* points) { // If in point[1] region b2Vec2 r = -points[1]; b2Vec2 d = points[0] - points[1]; float32 length = d.Normalize(); float32 lambda = b2Dot(r, d); if (lambda <= 0.0f || length < B2_FLT_EPSILON) { // The simplex is reduced to a point. *x1 = p1s[1]; *x2 = p2s[1]; p1s[0] = p1s[1]; p2s[0] = p2s[1]; points[0] = points[1]; return 1; } // Else in edge region lambda /= length; *x1 = p1s[1] + lambda * (p1s[0] - p1s[1]); *x2 = p2s[1] + lambda * (p2s[0] - p2s[1]); return 2; } // Possible regions: // - points[2] // - edge points[0]-points[2] // - edge points[1]-points[2] // - inside the triangle static int32 ProcessThree(b2Vec2* x1, b2Vec2* x2, b2Vec2* p1s, b2Vec2* p2s, b2Vec2* points) { b2Vec2 a = points[0]; b2Vec2 b = points[1]; b2Vec2 c = points[2]; b2Vec2 ab = b - a; b2Vec2 ac = c - a; b2Vec2 bc = c - b; float32 sn = -b2Dot(a, ab), sd = b2Dot(b, ab); float32 tn = -b2Dot(a, ac), td = b2Dot(c, ac); float32 un = -b2Dot(b, bc), ud = b2Dot(c, bc); // In vertex c region? if (td <= 0.0f && ud <= 0.0f) { // Single point *x1 = p1s[2]; *x2 = p2s[2]; p1s[0] = p1s[2]; p2s[0] = p2s[2]; points[0] = points[2]; return 1; } // Should not be in vertex a or b region. B2_NOT_USED(sd); B2_NOT_USED(sn); b2Assert(sn > 0.0f || tn > 0.0f); b2Assert(sd > 0.0f || un > 0.0f); float32 n = b2Cross(ab, ac); #ifdef TARGET_FLOAT32_IS_FIXED n = (n < 0.0)? -1.0 : ((n > 0.0)? 1.0 : 0.0); #endif // Should not be in edge ab region. float32 vc = n * b2Cross(a, b); b2Assert(vc > 0.0f || sn > 0.0f || sd > 0.0f); // In edge bc region? float32 va = n * b2Cross(b, c); if (va <= 0.0f && un >= 0.0f && ud >= 0.0f && (un+ud) > 0.0f) { b2Assert(un + ud > 0.0f); float32 lambda = un / (un + ud); *x1 = p1s[1] + lambda * (p1s[2] - p1s[1]); *x2 = p2s[1] + lambda * (p2s[2] - p2s[1]); p1s[0] = p1s[2]; p2s[0] = p2s[2]; points[0] = points[2]; return 2; } // In edge ac region? float32 vb = n * b2Cross(c, a); if (vb <= 0.0f && tn >= 0.0f && td >= 0.0f && (tn+td) > 0.0f) { b2Assert(tn + td > 0.0f); float32 lambda = tn / (tn + td); *x1 = p1s[0] + lambda * (p1s[2] - p1s[0]); *x2 = p2s[0] + lambda * (p2s[2] - p2s[0]); p1s[1] = p1s[2]; p2s[1] = p2s[2]; points[1] = points[2]; return 2; } // Inside the triangle, compute barycentric coordinates float32 denom = va + vb + vc; b2Assert(denom > 0.0f); denom = 1.0f / denom; #ifdef TARGET_FLOAT32_IS_FIXED *x1 = denom * (va * p1s[0] + vb * p1s[1] + vc * p1s[2]); *x2 = denom * (va * p2s[0] + vb * p2s[1] + vc * p2s[2]); #else float32 u = va * denom; float32 v = vb * denom; float32 w = 1.0f - u - v; *x1 = u * p1s[0] + v * p1s[1] + w * p1s[2]; *x2 = u * p2s[0] + v * p2s[1] + w * p2s[2]; #endif return 3; } static bool InPoints(const b2Vec2& w, const b2Vec2* points, int32 pointCount) { const float32 k_tolerance = 100.0f * B2_FLT_EPSILON; for (int32 i = 0; i < pointCount; ++i) { b2Vec2 d = b2Abs(w - points[i]); b2Vec2 m = b2Max(b2Abs(w), b2Abs(points[i])); if (d.x < k_tolerance * (m.x + 1.0f) && d.y < k_tolerance * (m.y + 1.0f)) { return true; } } return false; } template float32 DistanceGeneric(b2Vec2* x1, b2Vec2* x2, const T1* shape1, const b2XForm& xf1, const T2* shape2, const b2XForm& xf2) { b2Vec2 p1s[3], p2s[3]; b2Vec2 points[3]; int32 pointCount = 0; *x1 = shape1->GetFirstVertex(xf1); *x2 = shape2->GetFirstVertex(xf2); float32 vSqr = 0.0f; const int32 maxIterations = 20; for (int32 iter = 0; iter < maxIterations; ++iter) { b2Vec2 v = *x2 - *x1; b2Vec2 w1 = shape1->Support(xf1, v); b2Vec2 w2 = shape2->Support(xf2, -v); vSqr = b2Dot(v, v); b2Vec2 w = w2 - w1; float32 vw = b2Dot(v, w); if (vSqr - vw <= 0.01f * vSqr || InPoints(w, points, pointCount)) // or w in points { if (pointCount == 0) { *x1 = w1; *x2 = w2; } g_GJK_Iterations = iter; return b2Sqrt(vSqr); } switch (pointCount) { case 0: p1s[0] = w1; p2s[0] = w2; points[0] = w; *x1 = p1s[0]; *x2 = p2s[0]; ++pointCount; break; case 1: p1s[1] = w1; p2s[1] = w2; points[1] = w; pointCount = ProcessTwo(x1, x2, p1s, p2s, points); break; case 2: p1s[2] = w1; p2s[2] = w2; points[2] = w; pointCount = ProcessThree(x1, x2, p1s, p2s, points); break; } // If we have three points, then the origin is in the corresponding triangle. if (pointCount == 3) { g_GJK_Iterations = iter; return 0.0f; } float32 maxSqr = -B2_FLT_MAX; for (int32 i = 0; i < pointCount; ++i) { maxSqr = b2Max(maxSqr, b2Dot(points[i], points[i])); } #ifdef TARGET_FLOAT32_IS_FIXED if (pointCount == 3 || vSqr <= 5.0*B2_FLT_EPSILON * maxSqr) #else if (pointCount == 3 || vSqr <= 100.0f * B2_FLT_EPSILON * maxSqr) #endif { g_GJK_Iterations = iter; v = *x2 - *x1; vSqr = b2Dot(v, v); return b2Sqrt(vSqr); } } g_GJK_Iterations = maxIterations; return b2Sqrt(vSqr); } static float32 DistanceCC( b2Vec2* x1, b2Vec2* x2, const b2CircleShape* circle1, const b2XForm& xf1, const b2CircleShape* circle2, const b2XForm& xf2) { b2Vec2 p1 = b2Mul(xf1, circle1->GetLocalPosition()); b2Vec2 p2 = b2Mul(xf2, circle2->GetLocalPosition()); b2Vec2 d = p2 - p1; float32 dSqr = b2Dot(d, d); float32 r1 = circle1->GetRadius() - b2_toiSlop; float32 r2 = circle2->GetRadius() - b2_toiSlop; float32 r = r1 + r2; if (dSqr > r * r) { float32 dLen = d.Normalize(); float32 distance = dLen - r; *x1 = p1 + r1 * d; *x2 = p2 - r2 * d; return distance; } else if (dSqr > B2_FLT_EPSILON * B2_FLT_EPSILON) { d.Normalize(); *x1 = p1 + r1 * d; *x2 = *x1; return 0.0f; } *x1 = p1; *x2 = *x1; return 0.0f; } // This is used for polygon-vs-circle distance. struct Point { b2Vec2 Support(const b2XForm&, const b2Vec2&) const { return p; } b2Vec2 GetFirstVertex(const b2XForm&) const { return p; } b2Vec2 p; }; // GJK is more robust with polygon-vs-point than polygon-vs-circle. // So we convert polygon-vs-circle to polygon-vs-point. static float32 DistancePC( b2Vec2* x1, b2Vec2* x2, const b2PolygonShape* polygon, const b2XForm& xf1, const b2CircleShape* circle, const b2XForm& xf2) { Point point; point.p = b2Mul(xf2, circle->GetLocalPosition()); float32 distance = DistanceGeneric(x1, x2, polygon, xf1, &point, b2XForm_identity); float32 r = circle->GetRadius() - b2_toiSlop; if (distance > r) { distance -= r; b2Vec2 d = *x2 - *x1; d.Normalize(); *x2 -= r * d; } else { distance = 0.0f; *x2 = *x1; } return distance; } float32 b2Distance(b2Vec2* x1, b2Vec2* x2, const b2Shape* shape1, const b2XForm& xf1, const b2Shape* shape2, const b2XForm& xf2) { b2ShapeType type1 = shape1->GetType(); b2ShapeType type2 = shape2->GetType(); if (type1 == e_circleShape && type2 == e_circleShape) { return DistanceCC(x1, x2, (b2CircleShape*)shape1, xf1, (b2CircleShape*)shape2, xf2); } if (type1 == e_polygonShape && type2 == e_circleShape) { return DistancePC(x1, x2, (b2PolygonShape*)shape1, xf1, (b2CircleShape*)shape2, xf2); } if (type1 == e_circleShape && type2 == e_polygonShape) { return DistancePC(x2, x1, (b2PolygonShape*)shape2, xf2, (b2CircleShape*)shape1, xf1); } if (type1 == e_polygonShape && type2 == e_polygonShape) { return DistanceGeneric(x1, x2, (b2PolygonShape*)shape1, xf1, (b2PolygonShape*)shape2, xf2); } return 0.0f; } numptyphysics-0.2+svn157/Box2D/Source/Collision/Shapes/0000755000175000017500000000000012264274616021725 5ustar warp10warp10numptyphysics-0.2+svn157/Box2D/Source/Collision/Shapes/b2Shape.h0000644000175000017500000002013712264274616023365 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_SHAPE_H #define B2_SHAPE_H #include "../../Common/b2Math.h" #include "../b2Collision.h" class b2BlockAllocator; class b2Body; class b2BroadPhase; /// This holds the mass data computed for a shape. struct b2MassData { /// The mass of the shape, usually in kilograms. float32 mass; /// The position of the shape's centroid relative to the shape's origin. b2Vec2 center; /// The rotational inertia of the shape. float32 I; }; /// This holds contact filtering data. struct b2FilterData { /// The collision category bits. Normally you would just set one bit. uint16 categoryBits; /// The collision mask bits. This states the categories that this /// shape would accept for collision. uint16 maskBits; /// Collision groups allow a certain group of objects to never collide (negative) /// or always collide (positive). Zero means no collision group. Non-zero group /// filtering always wins against the mask bits. int16 groupIndex; }; /// The various collision shape types supported by Box2D. enum b2ShapeType { e_unknownShape = -1, e_circleShape, e_polygonShape, e_shapeTypeCount, }; /// A shape definition is used to construct a shape. This class defines an /// abstract shape definition. You can reuse shape definitions safely. struct b2ShapeDef { /// The constructor sets the default shape definition values. b2ShapeDef() { type = e_unknownShape; userData = NULL; friction = 0.2f; restitution = 0.0f; density = 0.0f; filter.categoryBits = 0x0001; filter.maskBits = 0xFFFF; filter.groupIndex = 0; isSensor = false; } virtual ~b2ShapeDef() {} /// Holds the shape type for down-casting. b2ShapeType type; /// Use this to store application specify shape data. void* userData; /// The shape's friction coefficient, usually in the range [0,1]. float32 friction; /// The shape's restitution (elasticity) usually in the range [0,1]. float32 restitution; /// The shape's density, usually in kg/m^2. float32 density; /// A sensor shape collects contact information but never generates a collision /// response. bool isSensor; /// Contact filtering data. b2FilterData filter; }; /// A shape is used for collision detection. Shapes are created in b2World. /// You can use shape for collision detection before they are attached to the world. /// @warning you cannot reuse shapes. class b2Shape { public: /// Get the type of this shape. You can use this to down cast to the concrete shape. /// @return the shape type. b2ShapeType GetType() const; /// Is this shape a sensor (non-solid)? /// @return the true if the shape is a sensor. bool IsSensor() const; /// Set the contact filtering data. You must call b2World::Refilter to correct /// existing contacts/non-contacts. void SetFilterData(const b2FilterData& filter); /// Get the contact filtering data. const b2FilterData& GetFilterData() const; /// Get the parent body of this shape. This is NULL if the shape is not attached. /// @return the parent body. b2Body* GetBody(); /// Get the next shape in the parent body's shape list. /// @return the next shape. b2Shape* GetNext(); /// Get the user data that was assigned in the shape definition. Use this to /// store your application specific data. void* GetUserData(); /// Set the user data. Use this to store your application specific data. void SetUserData(void* data); /// Test a point for containment in this shape. This only works for convex shapes. /// @param xf the shape world transform. /// @param p a point in world coordinates. virtual bool TestPoint(const b2XForm& xf, const b2Vec2& p) const = 0; /// Perform a ray cast against this shape. /// @param xf the shape world transform. /// @param lambda returns the hit fraction. You can use this to compute the contact point /// p = (1 - lambda) * segment.p1 + lambda * segment.p2. /// @param normal returns the normal at the contact point. If there is no intersection, the normal /// is not set. /// @param segment defines the begin and end point of the ray cast. /// @param maxLambda a number typically in the range [0,1]. /// @return true if there was an intersection. virtual bool TestSegment( const b2XForm& xf, float32* lambda, b2Vec2* normal, const b2Segment& segment, float32 maxLambda) const = 0; /// Given a transform, compute the associated axis aligned bounding box for this shape. /// @param aabb returns the axis aligned box. /// @param xf the world transform of the shape. virtual void ComputeAABB(b2AABB* aabb, const b2XForm& xf) const = 0; /// Given two transforms, compute the associated swept axis aligned bounding box for this shape. /// @param aabb returns the axis aligned box. /// @param xf1 the starting shape world transform. /// @param xf2 the ending shape world transform. virtual void ComputeSweptAABB( b2AABB* aabb, const b2XForm& xf1, const b2XForm& xf2) const = 0; /// Compute the mass properties of this shape using its dimensions and density. /// The inertia tensor is computed about the local origin, not the centroid. /// @param massData returns the mass data for this shape. virtual void ComputeMass(b2MassData* massData) const = 0; /// Get the maximum radius about the parent body's center of mass. float32 GetSweepRadius() const; /// Get the coefficient of friction. float32 GetFriction() const; /// Get the coefficient of restitution. float32 GetRestitution() const; protected: friend class b2Body; friend class b2World; static b2Shape* Create(const b2ShapeDef* def, b2BlockAllocator* allocator); static void Destroy(b2Shape* shape, b2BlockAllocator* allocator); b2Shape(const b2ShapeDef* def); virtual ~b2Shape(); void CreateProxy(b2BroadPhase* broadPhase, const b2XForm& xf); void DestroyProxy(b2BroadPhase* broadPhase); bool Synchronize(b2BroadPhase* broadPhase, const b2XForm& xf1, const b2XForm& xf2); void RefilterProxy(b2BroadPhase* broadPhase, const b2XForm& xf); virtual void UpdateSweepRadius(const b2Vec2& center) = 0; b2ShapeType m_type; b2Shape* m_next; b2Body* m_body; // Sweep radius relative to the parent body's center of mass. float32 m_sweepRadius; float32 m_density; float32 m_friction; float32 m_restitution; uint16 m_proxyId; b2FilterData m_filter; bool m_isSensor; void* m_userData; }; inline b2ShapeType b2Shape::GetType() const { return m_type; } inline bool b2Shape::IsSensor() const { return m_isSensor; } inline void b2Shape::SetFilterData(const b2FilterData& filter) { m_filter = filter; } inline const b2FilterData& b2Shape::GetFilterData() const { return m_filter; } inline void* b2Shape::GetUserData() { return m_userData; } inline void b2Shape::SetUserData(void* data) { m_userData = data; } inline b2Body* b2Shape::GetBody() { return m_body; } inline b2Shape* b2Shape::GetNext() { return m_next; } inline float32 b2Shape::GetSweepRadius() const { return m_sweepRadius; } inline float32 b2Shape::GetFriction() const { return m_friction; } inline float32 b2Shape::GetRestitution() const { return m_restitution; } #endif numptyphysics-0.2+svn157/Box2D/Source/Collision/Shapes/b2PolygonShape.cpp0000644000175000017500000002753012264274616025274 0ustar warp10warp10 /* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2PolygonShape.h" void b2PolygonDef::SetAsBox(float32 hx, float32 hy) { vertexCount = 4; vertices[0].Set(-hx, -hy); vertices[1].Set( hx, -hy); vertices[2].Set( hx, hy); vertices[3].Set(-hx, hy); } void b2PolygonDef::SetAsBox(float32 hx, float32 hy, const b2Vec2& center, float32 angle) { SetAsBox(hx, hy); b2XForm xf; xf.position = center; xf.R.Set(angle); for (int32 i = 0; i < vertexCount; ++i) { vertices[i] = b2Mul(xf, vertices[i]); } } static b2Vec2 ComputeCentroid(const b2Vec2* vs, int32 count) { b2Assert(count >= 3); b2Vec2 c; c.Set(0.0f, 0.0f); float32 area = 0.0f; // pRef is the reference point for forming triangles. // It's location doesn't change the result (except for rounding error). b2Vec2 pRef(0.0f, 0.0f); #if 0 // This code would put the reference point inside the polygon. for (int32 i = 0; i < count; ++i) { pRef += vs[i]; } pRef *= 1.0f / count; #endif const float32 inv3 = 1.0f / 3.0f; for (int32 i = 0; i < count; ++i) { // Triangle vertices. b2Vec2 p1 = pRef; b2Vec2 p2 = vs[i]; b2Vec2 p3 = i + 1 < count ? vs[i+1] : vs[0]; b2Vec2 e1 = p2 - p1; b2Vec2 e2 = p3 - p1; float32 D = b2Cross(e1, e2); float32 triangleArea = 0.5f * D; area += triangleArea; // Area weighted centroid c += triangleArea * inv3 * (p1 + p2 + p3); } // Centroid b2Assert(area > B2_FLT_EPSILON); c *= 1.0f / area; return c; } // http://www.geometrictools.com/Documentation/MinimumAreaRectangle.pdf static void ComputeOBB(b2OBB* obb, const b2Vec2* vs, int32 count) { b2Assert(count <= b2_maxPolygonVertices); b2Vec2 p[b2_maxPolygonVertices + 1]; for (int32 i = 0; i < count; ++i) { p[i] = vs[i]; } p[count] = p[0]; float32 minArea = B2_FLT_MAX; for (int32 i = 1; i <= count; ++i) { b2Vec2 root = p[i-1]; b2Vec2 ux = p[i] - root; float32 length = ux.Normalize(); b2Assert(length > B2_FLT_EPSILON); b2Vec2 uy(-ux.y, ux.x); b2Vec2 lower(B2_FLT_MAX, B2_FLT_MAX); b2Vec2 upper(-B2_FLT_MAX, -B2_FLT_MAX); for (int32 j = 0; j < count; ++j) { b2Vec2 d = p[j] - root; b2Vec2 r; r.x = b2Dot(ux, d); r.y = b2Dot(uy, d); lower = b2Min(lower, r); upper = b2Max(upper, r); } float32 area = (upper.x - lower.x) * (upper.y - lower.y); if (area < 0.95f * minArea) { minArea = area; obb->R.col1 = ux; obb->R.col2 = uy; b2Vec2 center = 0.5f * (lower + upper); obb->center = root + b2Mul(obb->R, center); obb->extents = 0.5f * (upper - lower); } } b2Assert(minArea < B2_FLT_MAX); } b2PolygonShape::b2PolygonShape(const b2ShapeDef* def) : b2Shape(def) { b2Assert(def->type == e_polygonShape); m_type = e_polygonShape; const b2PolygonDef* poly = (const b2PolygonDef*)def; // Get the vertices transformed into the body frame. m_vertexCount = poly->vertexCount; b2Assert(3 <= m_vertexCount && m_vertexCount <= b2_maxPolygonVertices); // Copy vertices. for (int32 i = 0; i < m_vertexCount; ++i) { m_vertices[i] = poly->vertices[i]; } // Compute normals. Ensure the edges have non-zero length. for (int32 i = 0; i < m_vertexCount; ++i) { int32 i1 = i; int32 i2 = i + 1 < m_vertexCount ? i + 1 : 0; b2Vec2 edge = m_vertices[i2] - m_vertices[i1]; b2Assert(edge.LengthSquared() > B2_FLT_EPSILON * B2_FLT_EPSILON); m_normals[i] = b2Cross(edge, 1.0f); m_normals[i].Normalize(); } #ifdef _DEBUG // Ensure the polygon is convex. for (int32 i = 0; i < m_vertexCount; ++i) { for (int32 j = 0; j < m_vertexCount; ++j) { // Don't check vertices on the current edge. if (j == i || j == (i + 1) % m_vertexCount) { continue; } // Your polygon is non-convex (it has an indentation). // Or your polygon is too skinny. float32 s = b2Dot(m_normals[i], m_vertices[j] - m_vertices[i]); b2Assert(s < -b2_linearSlop); } } // Ensure the polygon is counter-clockwise. for (int32 i = 1; i < m_vertexCount; ++i) { float32 cross = b2Cross(m_normals[i-1], m_normals[i]); // Keep asinf happy. cross = b2Clamp(cross, -1.0f, 1.0f); // You have consecutive edges that are almost parallel on your polygon. float32 angle = asinf(cross); b2Assert(angle > b2_angularSlop); } #endif // Compute the polygon centroid. m_centroid = ComputeCentroid(poly->vertices, poly->vertexCount); // Compute the oriented bounding box. ComputeOBB(&m_obb, m_vertices, m_vertexCount); // Create core polygon shape by shifting edges inward. // Also compute the min/max radius for CCD. for (int32 i = 0; i < m_vertexCount; ++i) { int32 i1 = i - 1 >= 0 ? i - 1 : m_vertexCount - 1; int32 i2 = i; b2Vec2 n1 = m_normals[i1]; b2Vec2 n2 = m_normals[i2]; b2Vec2 v = m_vertices[i] - m_centroid;; b2Vec2 d; d.x = b2Dot(n1, v) - b2_toiSlop; d.y = b2Dot(n2, v) - b2_toiSlop; // Shifting the edge inward by b2_toiSlop should // not cause the plane to pass the centroid. // Your shape has a radius/extent less than b2_toiSlop. //TME printf("dx=%f dy=%f\n",(float)d.x,(float)d.y); b2Assert(d.x >= 0.0f); b2Assert(d.y >= 0.0f); b2Mat22 A; A.col1.x = n1.x; A.col2.x = n1.y; A.col1.y = n2.x; A.col2.y = n2.y; m_coreVertices[i] = A.Solve(d) + m_centroid; } } void b2PolygonShape::UpdateSweepRadius(const b2Vec2& center) { // Update the sweep radius (maximum radius) as measured from // a local center point. m_sweepRadius = 0.0f; for (int32 i = 0; i < m_vertexCount; ++i) { b2Vec2 d = m_coreVertices[i] - center; m_sweepRadius = b2Max(m_sweepRadius, d.Length()); } } bool b2PolygonShape::TestPoint(const b2XForm& xf, const b2Vec2& p) const { b2Vec2 pLocal = b2MulT(xf.R, p - xf.position); for (int32 i = 0; i < m_vertexCount; ++i) { float32 dot = b2Dot(m_normals[i], pLocal - m_vertices[i]); if (dot > 0.0f) { return false; } } return true; } bool b2PolygonShape::TestSegment( const b2XForm& xf, float32* lambda, b2Vec2* normal, const b2Segment& segment, float32 maxLambda) const { float32 lower = 0.0f, upper = maxLambda; b2Vec2 p1 = b2MulT(xf.R, segment.p1 - xf.position); b2Vec2 p2 = b2MulT(xf.R, segment.p2 - xf.position); b2Vec2 d = p2 - p1; int32 index = -1; for (int32 i = 0; i < m_vertexCount; ++i) { // p = p1 + a * d // dot(normal, p - v) = 0 // dot(normal, p1 - v) + a * dot(normal, d) = 0 float32 numerator = b2Dot(m_normals[i], m_vertices[i] - p1); float32 denominator = b2Dot(m_normals[i], d); // Note: we want this predicate without division: // lower < numerator / denominator, where denominator < 0 // Since denominator < 0, we have to flip the inequality: // lower < numerator / denominator <==> denominator * lower > numerator. if (denominator < 0.0f && numerator < lower * denominator) { // Increase lower. // The segment enters this half-space. lower = numerator / denominator; index = i; } else if (denominator > 0.0f && numerator < upper * denominator) { // Decrease upper. // The segment exits this half-space. upper = numerator / denominator; } if (upper < lower) { return false; } } b2Assert(0.0f <= lower && lower <= maxLambda); if (index >= 0) { *lambda = lower; *normal = b2Mul(xf.R, m_normals[index]); return true; } return false; } void b2PolygonShape::ComputeAABB(b2AABB* aabb, const b2XForm& xf) const { b2Mat22 R = b2Mul(xf.R, m_obb.R); b2Mat22 absR = b2Abs(R); b2Vec2 h = b2Mul(absR, m_obb.extents); b2Vec2 position = xf.position + b2Mul(xf.R, m_obb.center); aabb->lowerBound = position - h; aabb->upperBound = position + h; } void b2PolygonShape::ComputeSweptAABB(b2AABB* aabb, const b2XForm& transform1, const b2XForm& transform2) const { b2AABB aabb1, aabb2; ComputeAABB(&aabb1, transform1); ComputeAABB(&aabb2, transform2); aabb->lowerBound = b2Min(aabb1.lowerBound, aabb2.lowerBound); aabb->upperBound = b2Max(aabb1.upperBound, aabb2.upperBound); } void b2PolygonShape::ComputeMass(b2MassData* massData) const { // Polygon mass, centroid, and inertia. // Let rho be the polygon density in mass per unit area. // Then: // mass = rho * int(dA) // centroid.x = (1/mass) * rho * int(x * dA) // centroid.y = (1/mass) * rho * int(y * dA) // I = rho * int((x*x + y*y) * dA) // // We can compute these integrals by summing all the integrals // for each triangle of the polygon. To evaluate the integral // for a single triangle, we make a change of variables to // the (u,v) coordinates of the triangle: // x = x0 + e1x * u + e2x * v // y = y0 + e1y * u + e2y * v // where 0 <= u && 0 <= v && u + v <= 1. // // We integrate u from [0,1-v] and then v from [0,1]. // We also need to use the Jacobian of the transformation: // D = cross(e1, e2) // // Simplification: triangle centroid = (1/3) * (p1 + p2 + p3) // // The rest of the derivation is handled by computer algebra. b2Assert(m_vertexCount >= 3); b2Vec2 center; center.Set(0.0f, 0.0f); float32 area = 0.0f; float32 I = 0.0f; // pRef is the reference point for forming triangles. // It's location doesn't change the result (except for rounding error). b2Vec2 pRef(0.0f, 0.0f); #if 0 // This code would put the reference point inside the polygon. for (int32 i = 0; i < m_vertexCount; ++i) { pRef += m_vertices[i]; } pRef *= 1.0f / count; #endif const float32 k_inv3 = 1.0f / 3.0f; for (int32 i = 0; i < m_vertexCount; ++i) { // Triangle vertices. b2Vec2 p1 = pRef; b2Vec2 p2 = m_vertices[i]; b2Vec2 p3 = i + 1 < m_vertexCount ? m_vertices[i+1] : m_vertices[0]; b2Vec2 e1 = p2 - p1; b2Vec2 e2 = p3 - p1; float32 D = b2Cross(e1, e2); float32 triangleArea = 0.5f * D; area += triangleArea; // Area weighted centroid center += triangleArea * k_inv3 * (p1 + p2 + p3); float32 px = p1.x, py = p1.y; float32 ex1 = e1.x, ey1 = e1.y; float32 ex2 = e2.x, ey2 = e2.y; float32 intx2 = k_inv3 * (0.25f * (ex1*ex1 + ex2*ex1 + ex2*ex2) + (px*ex1 + px*ex2)) + 0.5f*px*px; float32 inty2 = k_inv3 * (0.25f * (ey1*ey1 + ey2*ey1 + ey2*ey2) + (py*ey1 + py*ey2)) + 0.5f*py*py; I += D * (intx2 + inty2); } // Total mass massData->mass = m_density * area; // Center of mass b2Assert(area > B2_FLT_EPSILON); center *= 1.0f / area; massData->center = center; // Inertia tensor relative to the local origin. massData->I = m_density * I; } b2Vec2 b2PolygonShape::Centroid(const b2XForm& xf) const { return b2Mul(xf, m_centroid); } b2Vec2 b2PolygonShape::Support(const b2XForm& xf, const b2Vec2& d) const { b2Vec2 dLocal = b2MulT(xf.R, d); int32 bestIndex = 0; float32 bestValue = b2Dot(m_coreVertices[0], dLocal); for (int32 i = 1; i < m_vertexCount; ++i) { float32 value = b2Dot(m_coreVertices[i], dLocal); if (value > bestValue) { bestIndex = i; bestValue = value; } } return b2Mul(xf, m_coreVertices[bestIndex]); } numptyphysics-0.2+svn157/Box2D/Source/Collision/Shapes/b2CircleShape.cpp0000644000175000017500000000753512264274616025051 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2CircleShape.h" b2CircleShape::b2CircleShape(const b2ShapeDef* def) : b2Shape(def) { b2Assert(def->type == e_circleShape); const b2CircleDef* circleDef = (const b2CircleDef*)def; m_type = e_circleShape; m_localPosition = circleDef->localPosition; m_radius = circleDef->radius; } void b2CircleShape::UpdateSweepRadius(const b2Vec2& center) { // Update the sweep radius (maximum radius) as measured from // a local center point. b2Vec2 d = m_localPosition - center; m_sweepRadius = d.Length() + m_radius - b2_toiSlop; } bool b2CircleShape::TestPoint(const b2XForm& transform, const b2Vec2& p) const { b2Vec2 center = transform.position + b2Mul(transform.R, m_localPosition); b2Vec2 d = p - center; return b2Dot(d, d) <= m_radius * m_radius; } // Collision Detection in Interactive 3D Environments by Gino van den Bergen // From Section 3.1.2 // x = s + a * r // norm(x) = radius bool b2CircleShape::TestSegment(const b2XForm& transform, float32* lambda, b2Vec2* normal, const b2Segment& segment, float32 maxLambda) const { b2Vec2 position = transform.position + b2Mul(transform.R, m_localPosition); b2Vec2 s = segment.p1 - position; float32 b = b2Dot(s, s) - m_radius * m_radius; // Does the segment start inside the circle? if (b < 0.0f) { return false; } // Solve quadratic equation. b2Vec2 r = segment.p2 - segment.p1; float32 c = b2Dot(s, r); float32 rr = b2Dot(r, r); float32 sigma = c * c - rr * b; // Check for negative discriminant and short segment. if (sigma < 0.0f || rr < B2_FLT_EPSILON) { return false; } // Find the point of intersection of the line with the circle. float32 a = -(c + b2Sqrt(sigma)); // Is the intersection point on the segment? if (0.0f <= a && a <= maxLambda * rr) { a /= rr; *lambda = a; *normal = s + a * r; normal->Normalize(); return true; } return false; } void b2CircleShape::ComputeAABB(b2AABB* aabb, const b2XForm& transform) const { b2Vec2 p = transform.position + b2Mul(transform.R, m_localPosition); aabb->lowerBound.Set(p.x - m_radius, p.y - m_radius); aabb->upperBound.Set(p.x + m_radius, p.y + m_radius); } void b2CircleShape::ComputeSweptAABB(b2AABB* aabb, const b2XForm& transform1, const b2XForm& transform2) const { b2Vec2 p1 = transform1.position + b2Mul(transform1.R, m_localPosition); b2Vec2 p2 = transform2.position + b2Mul(transform2.R, m_localPosition); b2Vec2 lower = b2Min(p1, p2); b2Vec2 upper = b2Max(p1, p2); aabb->lowerBound.Set(lower.x - m_radius, lower.y - m_radius); aabb->upperBound.Set(upper.x + m_radius, upper.y + m_radius); } void b2CircleShape::ComputeMass(b2MassData* massData) const { massData->mass = m_density * b2_pi * m_radius * m_radius; massData->center = m_localPosition; // inertia about the local origin massData->I = massData->mass * (0.5f * m_radius * m_radius + b2Dot(m_localPosition, m_localPosition)); } numptyphysics-0.2+svn157/Box2D/Source/Collision/Shapes/b2PolygonShape.h0000644000175000017500000001077712264274616024746 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_POLYGON_SHAPE_H #define B2_POLYGON_SHAPE_H #include "b2Shape.h" /// Convex polygon. The vertices must be in CCW order for a right-handed /// coordinate system with the z-axis coming out of the screen. struct b2PolygonDef : public b2ShapeDef { b2PolygonDef() { type = e_polygonShape; vertexCount = 0; } /// Build vertices to represent an axis-aligned box. /// @param hx the half-width. /// @param hy the half-height. void SetAsBox(float32 hx, float32 hy); /// Build vertices to represent an oriented box. /// @param hx the half-width. /// @param hy the half-height. /// @param center the center of the box in local coordinates. /// @param angle the rotation of the box in local coordinates. void SetAsBox(float32 hx, float32 hy, const b2Vec2& center, float32 angle); /// The polygon vertices in local coordinates. b2Vec2 vertices[b2_maxPolygonVertices]; /// The number of polygon vertices. int32 vertexCount; }; /// A convex polygon. class b2PolygonShape : public b2Shape { public: /// @see b2Shape::TestPoint bool TestPoint(const b2XForm& transform, const b2Vec2& p) const; /// @see b2Shape::TestSegment bool TestSegment( const b2XForm& transform, float32* lambda, b2Vec2* normal, const b2Segment& segment, float32 maxLambda) const; /// @see b2Shape::ComputeAABB void ComputeAABB(b2AABB* aabb, const b2XForm& transform) const; /// @see b2Shape::ComputeSweptAABB void ComputeSweptAABB( b2AABB* aabb, const b2XForm& transform1, const b2XForm& transform2) const; /// @see b2Shape::ComputeMass void ComputeMass(b2MassData* massData) const; /// Get the oriented bounding box relative to the parent body. const b2OBB& GetOBB() const; /// Get local centroid relative to the parent body. const b2Vec2& GetCentroid() const; /// Get the vertex count. int32 GetVertexCount() const; /// Get the vertices in local coordinates. const b2Vec2* GetVertices() const; /// Get the core vertices in local coordinates. These vertices /// represent a smaller polygon that is used for time of impact /// computations. const b2Vec2* GetCoreVertices() const; /// Get the edge normal vectors. There is one for each vertex. const b2Vec2* GetNormals() const; /// Get the first vertex and apply the supplied transform. b2Vec2 GetFirstVertex(const b2XForm& xf) const; /// Get the centroid and apply the supplied transform. b2Vec2 Centroid(const b2XForm& xf) const; /// Get the support point in the given world direction. /// Use the supplied transform. b2Vec2 Support(const b2XForm& xf, const b2Vec2& d) const; private: friend class b2Shape; b2PolygonShape(const b2ShapeDef* def); void UpdateSweepRadius(const b2Vec2& center); // Local position of the polygon centroid. b2Vec2 m_centroid; b2OBB m_obb; b2Vec2 m_vertices[b2_maxPolygonVertices]; b2Vec2 m_normals[b2_maxPolygonVertices]; b2Vec2 m_coreVertices[b2_maxPolygonVertices]; int32 m_vertexCount; }; inline b2Vec2 b2PolygonShape::GetFirstVertex(const b2XForm& xf) const { return b2Mul(xf, m_coreVertices[0]); } inline const b2OBB& b2PolygonShape::GetOBB() const { return m_obb; } inline const b2Vec2& b2PolygonShape::GetCentroid() const { return m_centroid; } inline int32 b2PolygonShape::GetVertexCount() const { return m_vertexCount; } inline const b2Vec2* b2PolygonShape::GetVertices() const { return m_vertices; } inline const b2Vec2* b2PolygonShape::GetCoreVertices() const { return m_coreVertices; } inline const b2Vec2* b2PolygonShape::GetNormals() const { return m_normals; } #endif numptyphysics-0.2+svn157/Box2D/Source/Collision/Shapes/b2Shape.cpp0000644000175000017500000000721712264274616023724 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Shape.h" #include "b2CircleShape.h" #include "b2PolygonShape.h" #include "../b2Collision.h" #include "../b2BroadPhase.h" #include "../../Common/b2BlockAllocator.h" #include b2Shape* b2Shape::Create(const b2ShapeDef* def, b2BlockAllocator* allocator) { switch (def->type) { case e_circleShape: { void* mem = allocator->Allocate(sizeof(b2CircleShape)); return new (mem) b2CircleShape(def); } case e_polygonShape: { void* mem = allocator->Allocate(sizeof(b2PolygonShape)); return new (mem) b2PolygonShape(def); } default: b2Assert(false); return NULL; } } void b2Shape::Destroy(b2Shape* s, b2BlockAllocator* allocator) { switch (s->GetType()) { case e_circleShape: s->~b2Shape(); allocator->Free(s, sizeof(b2CircleShape)); break; case e_polygonShape: s->~b2Shape(); allocator->Free(s, sizeof(b2PolygonShape)); break; default: b2Assert(false); } } b2Shape::b2Shape(const b2ShapeDef* def) { m_userData = def->userData; m_friction = def->friction; m_restitution = def->restitution; m_density = def->density; m_body = NULL; m_sweepRadius = 0.0f; m_next = NULL; m_proxyId = b2_nullProxy; m_filter = def->filter; m_isSensor = def->isSensor; } b2Shape::~b2Shape() { b2Assert(m_proxyId == b2_nullProxy); } void b2Shape::CreateProxy(b2BroadPhase* broadPhase, const b2XForm& transform) { b2Assert(m_proxyId == b2_nullProxy); b2AABB aabb; ComputeAABB(&aabb, transform); bool inRange = broadPhase->InRange(aabb); // You are creating a shape outside the world box. b2Assert(inRange); if (inRange) { m_proxyId = broadPhase->CreateProxy(aabb, this); } else { m_proxyId = b2_nullProxy; } } void b2Shape::DestroyProxy(b2BroadPhase* broadPhase) { if (m_proxyId != b2_nullProxy) { broadPhase->DestroyProxy(m_proxyId); m_proxyId = b2_nullProxy; } } bool b2Shape::Synchronize(b2BroadPhase* broadPhase, const b2XForm& transform1, const b2XForm& transform2) { if (m_proxyId == b2_nullProxy) { return false; } // Compute an AABB that covers the swept shape (may miss some rotation effect). b2AABB aabb; ComputeSweptAABB(&aabb, transform1, transform2); if (broadPhase->InRange(aabb)) { broadPhase->MoveProxy(m_proxyId, aabb); return true; } else { return false; } } void b2Shape::RefilterProxy(b2BroadPhase* broadPhase, const b2XForm& transform) { if (m_proxyId == b2_nullProxy) { return; } broadPhase->DestroyProxy(m_proxyId); b2AABB aabb; ComputeAABB(&aabb, transform); bool inRange = broadPhase->InRange(aabb); if (inRange) { m_proxyId = broadPhase->CreateProxy(aabb, this); } else { m_proxyId = b2_nullProxy; } } numptyphysics-0.2+svn157/Box2D/Source/Collision/Shapes/b2CircleShape.h0000644000175000017500000000472012264274616024507 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_CIRCLE_SHAPE_H #define B2_CIRCLE_SHAPE_H #include "b2Shape.h" /// This structure is used to build circle shapes. struct b2CircleDef : public b2ShapeDef { b2CircleDef() { type = e_circleShape; localPosition.SetZero(); radius = 1.0f; } b2Vec2 localPosition; float32 radius; }; /// A circle shape. class b2CircleShape : public b2Shape { public: /// @see b2Shape::TestPoint bool TestPoint(const b2XForm& transform, const b2Vec2& p) const; /// @see b2Shape::TestSegment bool TestSegment( const b2XForm& transform, float32* lambda, b2Vec2* normal, const b2Segment& segment, float32 maxLambda) const; /// @see b2Shape::ComputeAABB void ComputeAABB(b2AABB* aabb, const b2XForm& transform) const; /// @see b2Shape::ComputeSweptAABB void ComputeSweptAABB( b2AABB* aabb, const b2XForm& transform1, const b2XForm& transform2) const; /// @see b2Shape::ComputeMass void ComputeMass(b2MassData* massData) const; /// Get the local position of this circle in its parent body. const b2Vec2& GetLocalPosition() const; /// Get the radius of this circle. float32 GetRadius() const; private: friend class b2Shape; b2CircleShape(const b2ShapeDef* def); void UpdateSweepRadius(const b2Vec2& center); // Local position in parent body b2Vec2 m_localPosition; float32 m_radius; }; inline const b2Vec2& b2CircleShape::GetLocalPosition() const { return m_localPosition; } inline float32 b2CircleShape::GetRadius() const { return m_radius; } #endif numptyphysics-0.2+svn157/Box2D/Source/Collision/b2TimeOfImpact.cpp0000644000175000017500000000642512264274616023762 0ustar warp10warp10/* * Copyright (c) 2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Collision.h" #include "Shapes/b2Shape.h" // This algorithm uses conservative advancement to compute the time of // impact (TOI) of two shapes. // Refs: Bullet, Young Kim float32 b2TimeOfImpact(const b2Shape* shape1, const b2Sweep& sweep1, const b2Shape* shape2, const b2Sweep& sweep2) { float32 r1 = shape1->GetSweepRadius(); float32 r2 = shape2->GetSweepRadius(); b2Assert(sweep1.t0 == sweep2.t0); b2Assert(1.0f - sweep1.t0 > B2_FLT_EPSILON); float32 t0 = sweep1.t0; b2Vec2 v1 = sweep1.c - sweep1.c0; b2Vec2 v2 = sweep2.c - sweep2.c0; float32 omega1 = sweep1.a - sweep1.a0; float32 omega2 = sweep2.a - sweep2.a0; float32 alpha = 0.0f; b2Vec2 p1, p2; const int32 k_maxIterations = 20; // TODO_ERIN b2Settings int32 iter = 0; b2Vec2 normal = b2Vec2_zero; float32 distance = 0.0f; float32 targetDistance = 0.0f; for(;;) { float32 t = (1.0f - alpha) * t0 + alpha; b2XForm xf1, xf2; sweep1.GetXForm(&xf1, t); sweep2.GetXForm(&xf2, t); // Get the distance between shapes. distance = b2Distance(&p1, &p2, shape1, xf1, shape2, xf2); if (iter == 0) { // Compute a reasonable target distance to give some breathing room // for conservative advancement. if (distance > 2.0f * b2_toiSlop) { targetDistance = 1.5f * b2_toiSlop; } else { targetDistance = b2Max(0.05f * b2_toiSlop, distance - 0.5f * b2_toiSlop); } } if (distance - targetDistance < 0.05f * b2_toiSlop || iter == k_maxIterations) { break; } normal = p2 - p1; normal.Normalize(); // Compute upper bound on remaining movement. float32 approachVelocityBound = b2Dot(normal, v1 - v2) + b2Abs(omega1) * r1 + b2Abs(omega2) * r2; if (b2Abs(approachVelocityBound) < B2_FLT_EPSILON) { alpha = 1.0f; break; } // Get the conservative time increment. Don't advance all the way. float32 dAlpha = (distance - targetDistance) / approachVelocityBound; //float32 dt = (distance - 0.5f * b2_linearSlop) / approachVelocityBound; float32 newAlpha = alpha + dAlpha; // The shapes may be moving apart or a safe distance apart. if (newAlpha < 0.0f || 1.0f < newAlpha) { alpha = 1.0f; break; } // Ensure significant advancement. if (newAlpha < (1.0f + 100.0f * B2_FLT_EPSILON) * alpha) { break; } alpha = newAlpha; ++iter; } return alpha; } numptyphysics-0.2+svn157/Box2D/Source/Collision/b2Collision.h0000644000175000017500000001257212264274616023041 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_COLLISION_H #define B2_COLLISION_H #include "../Common/b2Math.h" #include /// @file /// Structures and functions used for computing contact points, distance /// queries, and TOI queries. class b2Shape; class b2CircleShape; class b2PolygonShape; const uint8 b2_nullFeature = UCHAR_MAX; /// Contact ids to facilitate warm starting. union b2ContactID { /// The features that intersect to form the contact point struct Features { uint8 referenceEdge; ///< The edge that defines the outward contact normal. uint8 incidentEdge; ///< The edge most anti-parallel to the reference edge. uint8 incidentVertex; ///< The vertex (0 or 1) on the incident edge that was clipped. uint8 flip; ///< A value of 1 indicates that the reference edge is on shape2. } features; uint32 key; ///< Used to quickly compare contact ids. }; /// A manifold point is a contact point belonging to a contact /// manifold. It holds details related to the geometry and dynamics /// of the contact points. /// The point is stored in local coordinates because CCD /// requires sub-stepping in which the separation is stale. struct b2ManifoldPoint { b2Vec2 localPoint1; ///< local position of the contact point in body1 b2Vec2 localPoint2; ///< local position of the contact point in body2 float32 separation; ///< the separation of the shapes along the normal vector float32 normalImpulse; ///< the non-penetration impulse float32 tangentImpulse; ///< the friction impulse b2ContactID id; ///< uniquely identifies a contact point between two shapes }; /// A manifold for two touching convex shapes. struct b2Manifold { b2ManifoldPoint points[b2_maxManifoldPoints]; ///< the points of contact b2Vec2 normal; ///< the shared unit normal vector int32 pointCount; ///< the number of manifold points }; /// A line segment. struct b2Segment { /// Ray cast against this segment with another segment. bool TestSegment(float32* lambda, b2Vec2* normal, const b2Segment& segment, float32 maxLambda) const; b2Vec2 p1; ///< the starting point b2Vec2 p2; ///< the ending point }; /// An axis aligned bounding box. struct b2AABB { /// Verify that the bounds are sorted. bool IsValid() const; b2Vec2 lowerBound; ///< the lower vertex b2Vec2 upperBound; ///< the upper vertex }; /// An oriented bounding box. struct b2OBB { b2Mat22 R; ///< the rotation matrix b2Vec2 center; ///< the local centroid b2Vec2 extents; ///< the half-widths }; /// Compute the collision manifold between two circles. void b2CollideCircles(b2Manifold* manifold, const b2CircleShape* circle1, const b2XForm& xf1, const b2CircleShape* circle2, const b2XForm& xf2); /// Compute the collision manifold between a polygon and a circle. void b2CollidePolygonAndCircle(b2Manifold* manifold, const b2PolygonShape* polygon, const b2XForm& xf1, const b2CircleShape* circle, const b2XForm& xf2); /// Compute the collision manifold between two circles. void b2CollidePolygons(b2Manifold* manifold, const b2PolygonShape* polygon1, const b2XForm& xf1, const b2PolygonShape* polygon2, const b2XForm& xf2); /// Compute the distance between two shapes and the closest points. /// @return the distance between the shapes or zero if they are overlapped/touching. float32 b2Distance(b2Vec2* x1, b2Vec2* x2, const b2Shape* shape1, const b2XForm& xf1, const b2Shape* shape2, const b2XForm& xf2); /// Compute the time when two shapes begin to touch or touch at a closer distance. /// @warning the sweeps must have the same time interval. /// @return the fraction between [0,1] in which the shapes first touch. /// fraction=0 means the shapes begin touching/overlapped, and fraction=1 means the shapes don't touch. float32 b2TimeOfImpact(const b2Shape* shape1, const b2Sweep& sweep1, const b2Shape* shape2, const b2Sweep& sweep2); // ---------------- Inline Functions ------------------------------------------ inline bool b2AABB::IsValid() const { b2Vec2 d = upperBound - lowerBound; bool valid = d.x >= 0.0f && d.y >= 0.0f; valid = valid && lowerBound.IsValid() && upperBound.IsValid(); return valid; } inline bool b2TestOverlap(const b2AABB& a, const b2AABB& b) { b2Vec2 d1, d2; d1 = b.lowerBound - a.upperBound; d2 = a.lowerBound - b.upperBound; if (d1.x > 0.0f || d1.y > 0.0f) return false; if (d2.x > 0.0f || d2.y > 0.0f) return false; return true; } #endif numptyphysics-0.2+svn157/Box2D/Source/Collision/b2Shape.cpp0000644000175000017500000003762512264274616022507 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Shape.h" #include "../Dynamics/b2Body.h" #include "../Dynamics/b2World.h" #include "../Common/b2BlockAllocator.h" #include // Polygon mass, centroid, and inertia. // Let rho be the polygon density in mass per unit area. // Then: // mass = rho * int(dA) // centroid.x = (1/mass) * rho * int(x * dA) // centroid.y = (1/mass) * rho * int(y * dA) // I = rho * int((x*x + y*y) * dA) // // We can compute these integrals by summing all the integrals // for each triangle of the polygon. To evaluate the integral // for a single triangle, we make a change of variables to // the (u,v) coordinates of the triangle: // x = x0 + e1x * u + e2x * v // y = y0 + e1y * u + e2y * v // where 0 <= u && 0 <= v && u + v <= 1. // // We integrate u from [0,1-v] and then v from [0,1]. // We also need to use the Jacobian of the transformation: // D = cross(e1, e2) // // Simplification: triangle centroid = (1/3) * (p1 + p2 + p3) // // The rest of the derivation is handled by computer algebra. static void PolyMass(b2MassData* massData, const b2Vec2* vs, int32 count, float32 rho) { b2Assert(count >= 3); b2Vec2 center; center.Set(0.0f, 0.0f); float32 area = 0.0f; float32 I = 0.0f; // pRef is the reference point for forming triangles. // It's location doesn't change the result (except for rounding error). b2Vec2 pRef(0.0f, 0.0f); #if 0 // This code would put the reference point inside the polygon. for (int32 i = 0; i < count; ++i) { pRef += vs[i]; } pRef *= 1.0f / count; #endif const float32 inv3 = 1.0f / 3.0f; for (int32 i = 0; i < count; ++i) { // Triangle vertices. b2Vec2 p1 = pRef; b2Vec2 p2 = vs[i]; b2Vec2 p3 = i + 1 < count ? vs[i+1] : vs[0]; b2Vec2 e1 = p2 - p1; b2Vec2 e2 = p3 - p1; float32 D = b2Cross(e1, e2); float32 triangleArea = 0.5f * D; area += triangleArea; // Area weighted centroid center += triangleArea * inv3 * (p1 + p2 + p3); float32 px = p1.x, py = p1.y; float32 ex1 = e1.x, ey1 = e1.y; float32 ex2 = e2.x, ey2 = e2.y; float32 intx2 = inv3 * (0.25f * (ex1*ex1 + ex2*ex1 + ex2*ex2) + (px*ex1 + px*ex2)) + 0.5f*px*px; float32 inty2 = inv3 * (0.25f * (ey1*ey1 + ey2*ey1 + ey2*ey2) + (py*ey1 + py*ey2)) + 0.5f*py*py; I += D * (intx2 + inty2); } // Total mass massData->mass = rho * area; // Center of mass b2Assert(area > FLT_EPSILON); center *= 1.0f / area; massData->center = center; // Inertia tensor relative to the center. I = rho * (I - area * b2Dot(center, center)); massData->I = I; } static b2Vec2 PolyCentroid(const b2Vec2* vs, int32 count) { b2Assert(count >= 3); b2Vec2 c; c.Set(0.0f, 0.0f); float32 area = 0.0f; // pRef is the reference point for forming triangles. // It's location doesn't change the result (except for rounding error). b2Vec2 pRef(0.0f, 0.0f); #if 0 // This code would put the reference point inside the polygon. for (int32 i = 0; i < count; ++i) { pRef += vs[i]; } pRef *= 1.0f / count; #endif const float32 inv3 = 1.0f / 3.0f; for (int32 i = 0; i < count; ++i) { // Triangle vertices. b2Vec2 p1 = pRef; b2Vec2 p2 = vs[i]; b2Vec2 p3 = i + 1 < count ? vs[i+1] : vs[0]; b2Vec2 e1 = p2 - p1; b2Vec2 e2 = p3 - p1; float32 D = b2Cross(e1, e2); float32 triangleArea = 0.5f * D; area += triangleArea; // Area weighted centroid c += triangleArea * inv3 * (p1 + p2 + p3); } // Centroid b2Assert(area > FLT_EPSILON); c *= 1.0f / area; return c; } void b2ShapeDef::ComputeMass(b2MassData* massData) const { if (density == 0.0f) { massData->mass = 0.0f; massData->center.Set(0.0f, 0.0f); massData->I = 0.0f; } switch (type) { case e_circleShape: { b2CircleDef* circle = (b2CircleDef*)this; massData->mass = density * b2_pi * circle->radius * circle->radius; massData->center.Set(0.0f, 0.0f); massData->I = 0.5f * (massData->mass) * circle->radius * circle->radius; } break; case e_boxShape: { b2BoxDef* box = (b2BoxDef*)this; massData->mass = 4.0f * density * box->extents.x * box->extents.y; massData->center.Set(0.0f, 0.0f); massData->I = massData->mass / 3.0f * b2Dot(box->extents, box->extents); } break; case e_polyShape: { b2PolyDef* poly = (b2PolyDef*)this; PolyMass(massData, poly->vertices, poly->vertexCount, density); } break; default: massData->mass = 0.0f; massData->center.Set(0.0f, 0.0f); massData->I = 0.0f; break; } } b2Shape* b2Shape::Create(const b2ShapeDef* def, b2Body* body, const b2Vec2& center) { switch (def->type) { case e_circleShape: { void* mem = body->m_world->m_blockAllocator.Allocate(sizeof(b2CircleShape)); return new (mem) b2CircleShape(def, body, center); } case e_boxShape: case e_polyShape: { void* mem = body->m_world->m_blockAllocator.Allocate(sizeof(b2PolyShape)); return new (mem) b2PolyShape(def, body, center); } } b2Assert(false); return NULL; } void b2Shape::Destroy(b2Shape*& shape) { b2BlockAllocator& allocator = shape->m_body->m_world->m_blockAllocator; shape->~b2Shape(); switch (shape->m_type) { case e_circleShape: allocator.Free(shape, sizeof(b2CircleShape)); break; case e_polyShape: allocator.Free(shape, sizeof(b2PolyShape)); break; default: b2Assert(false); } shape = NULL; } b2Shape::b2Shape(const b2ShapeDef* def, b2Body* body) { m_userData = def->userData; m_friction = def->friction; m_restitution = def->restitution; m_body = body; m_proxyId = b2_nullProxy; m_maxRadius = 0.0f; m_categoryBits = def->categoryBits; m_maskBits = def->maskBits; m_groupIndex = def->groupIndex; } b2Shape::~b2Shape() { if (m_proxyId != b2_nullProxy) { m_body->m_world->m_broadPhase->DestroyProxy(m_proxyId); } } void b2Shape::DestroyProxy() { if (m_proxyId != b2_nullProxy) { m_body->m_world->m_broadPhase->DestroyProxy(m_proxyId); m_proxyId = b2_nullProxy; } } b2CircleShape::b2CircleShape(const b2ShapeDef* def, b2Body* body, const b2Vec2& localCenter) : b2Shape(def, body) { b2Assert(def->type == e_circleShape); const b2CircleDef* circle = (const b2CircleDef*)def; m_localPosition = def->localPosition - localCenter; m_type = e_circleShape; m_radius = circle->radius; m_R = m_body->m_R; b2Vec2 r = b2Mul(m_body->m_R, m_localPosition); m_position = m_body->m_position + r; m_maxRadius = r.Length() + m_radius; m_minRadius = m_radius; b2AABB aabb; aabb.minVertex.Set(m_position.x - m_radius, m_position.y - m_radius); aabb.maxVertex.Set(m_position.x + m_radius, m_position.y + m_radius); b2BroadPhase* broadPhase = m_body->m_world->m_broadPhase; if (broadPhase->InRange(aabb)) { m_proxyId = broadPhase->CreateProxy(aabb, this); } else { m_proxyId = b2_nullProxy; } if (m_proxyId == b2_nullProxy) { m_body->Freeze(); } } void b2CircleShape::Synchronize(const b2Vec2& position1, const b2Mat22& R1, const b2Vec2& position2, const b2Mat22& R2) { m_R = R2; m_position = position2 + b2Mul(m_R, m_localPosition); if (m_proxyId == b2_nullProxy) { return; } // Compute an AABB that covers the swept shape (may miss some rotation effect). b2Vec2 p1 = position1 + b2Mul(R1, m_localPosition); b2Vec2 lower = b2Min(p1, m_position); b2Vec2 upper = b2Max(p1, m_position); b2AABB aabb; aabb.minVertex.Set(lower.x - m_radius, lower.y - m_radius); aabb.maxVertex.Set(upper.x + m_radius, upper.y + m_radius); b2BroadPhase* broadPhase = m_body->m_world->m_broadPhase; if (broadPhase->InRange(aabb)) { broadPhase->MoveProxy(m_proxyId, aabb); } else { m_body->Freeze(); } } void b2CircleShape::QuickSync(const b2Vec2& position, const b2Mat22& R) { m_R = R; m_position = position + b2Mul(R, m_localPosition); } b2Vec2 b2CircleShape::Support(const b2Vec2& d) const { b2Vec2 u = d; u.Normalize(); float32 r = b2Max(0.0f, m_radius - b2_toiSlop); return m_position + r * u; } bool b2CircleShape::TestPoint(const b2Vec2& p) { b2Vec2 d = p - m_position; return b2Dot(d, d) <= m_radius * m_radius; } void b2CircleShape::ResetProxy(b2BroadPhase* broadPhase) { if (m_proxyId == b2_nullProxy) { return; } b2Proxy* proxy = broadPhase->GetProxy(m_proxyId); broadPhase->DestroyProxy(m_proxyId); proxy = NULL; b2AABB aabb; aabb.minVertex.Set(m_position.x - m_radius, m_position.y - m_radius); aabb.maxVertex.Set(m_position.x + m_radius, m_position.y + m_radius); if (broadPhase->InRange(aabb)) { m_proxyId = broadPhase->CreateProxy(aabb, this); } else { m_proxyId = b2_nullProxy; } if (m_proxyId == b2_nullProxy) { m_body->Freeze(); } } b2PolyShape::b2PolyShape(const b2ShapeDef* def, b2Body* body, const b2Vec2& newOrigin) : b2Shape(def, body) { b2Assert(def->type == e_boxShape || def->type == e_polyShape); m_type = e_polyShape; b2Mat22 localR(def->localRotation); // Get the vertices transformed into the body frame. if (def->type == e_boxShape) { m_localCentroid = def->localPosition - newOrigin; const b2BoxDef* box = (const b2BoxDef*)def; m_vertexCount = 4; b2Vec2 h = box->extents; m_vertices[0] = b2Mul(localR, b2Vec2(h.x, h.y)); m_vertices[1] = b2Mul(localR, b2Vec2(-h.x, h.y)); m_vertices[2] = b2Mul(localR, b2Vec2(-h.x, -h.y)); m_vertices[3] = b2Mul(localR, b2Vec2(h.x, -h.y)); } else { const b2PolyDef* poly = (const b2PolyDef*)def; m_vertexCount = poly->vertexCount; b2Assert(3 <= m_vertexCount && m_vertexCount <= b2_maxPolyVertices); b2Vec2 centroid = PolyCentroid(poly->vertices, poly->vertexCount); m_localCentroid = def->localPosition + b2Mul(localR, centroid) - newOrigin; for (int32 i = 0; i < m_vertexCount; ++i) { m_vertices[i] = b2Mul(localR, poly->vertices[i] - centroid); } } // Compute bounding box. TODO_ERIN optimize OBB b2Vec2 minVertex(FLT_MAX, FLT_MAX); b2Vec2 maxVertex(-FLT_MAX, -FLT_MAX); for (int32 i = 0; i < m_vertexCount; ++i) { b2Vec2 v = m_vertices[i]; minVertex = b2Min(minVertex, v); maxVertex = b2Max(maxVertex, v); } m_localOBB.R.SetIdentity(); m_localOBB.center = 0.5f * (minVertex + maxVertex); m_localOBB.extents = 0.5f * (maxVertex - minVertex); // Compute the edge normals and next index map. for (int32 i = 0; i < m_vertexCount; ++i) { int32 i1 = i; int32 i2 = i + 1 < m_vertexCount ? i + 1 : 0; b2Vec2 edge = m_vertices[i2] - m_vertices[i1]; m_normals[i] = b2Cross(edge, 1.0f); m_normals[i].Normalize(); } // Create core polygon shape by shifting edges inward. m_minRadius = FLT_MAX; m_maxRadius = -FLT_MAX; for (int32 i = 0; i < m_vertexCount; ++i) { int32 i1 = i - 1 >= 0 ? i - 1 : m_vertexCount - 1; int32 i2 = i; b2Vec2 n1 = m_normals[i1]; b2Vec2 n2 = m_normals[i2]; b2Vec2 v = m_vertices[i]; // dot(n1, vc) = d.x // dot(n2, vc) = d.y b2Vec2 d; d.x = b2Dot(n1, v) - b2_toiSlop; d.y = b2Dot(n2, v) - b2_toiSlop; // Shifting the edge inward by b2_toiSlop should // not cause the plane to pass the centroid. b2Assert(d.x >= 0.0f); b2Assert(d.y >= 0.0f); b2Mat22 A; A.col1.x = n1.x; A.col2.x = n1.y; A.col1.y = n2.x; A.col2.y = n2.y; m_coreVertices[i] = A.Solve(d); m_minRadius = b2Min(m_minRadius, b2Min(d.x, d.y)); b2Vec2 p = m_coreVertices[i] + m_localCentroid; m_maxRadius = b2Max(m_maxRadius, p.Length()); } // Ensure the polygon in convex. TODO_ERIN compute convex hull. // TODO_ERIN check each vertex against each edge. for (int32 i = 0; i < m_vertexCount; ++i) { int32 i1 = i; int32 i2 = i + 1 < m_vertexCount ? i + 1 : 0; NOT_USED(i1); NOT_USED(i2); b2Assert(b2Cross(m_normals[i1], m_normals[i2]) > FLT_EPSILON); } m_R = m_body->m_R; m_position = m_body->m_position + b2Mul(m_body->m_R, m_localCentroid); b2Mat22 R = b2Mul(m_R, m_localOBB.R); b2Mat22 absR = b2Abs(R); b2Vec2 h = b2Mul(absR, m_localOBB.extents); b2Vec2 position = m_position + b2Mul(m_R, m_localOBB.center); b2AABB aabb; aabb.minVertex = position - h; aabb.maxVertex = position + h; b2BroadPhase* broadPhase = m_body->m_world->m_broadPhase; if (broadPhase->InRange(aabb)) { m_proxyId = broadPhase->CreateProxy(aabb, this); } else { m_proxyId = b2_nullProxy; } if (m_proxyId == b2_nullProxy) { m_body->Freeze(); } } void b2PolyShape::Synchronize( const b2Vec2& position1, const b2Mat22& R1, const b2Vec2& position2, const b2Mat22& R2) { // The body transform is copied for convenience. m_R = R2; m_position = position2 + b2Mul(R2, m_localCentroid); if (m_proxyId == b2_nullProxy) { return; } b2AABB aabb1, aabb2; { b2Mat22 obbR = b2Mul(R1, m_localOBB.R); b2Mat22 absR = b2Abs(obbR); b2Vec2 h = b2Mul(absR, m_localOBB.extents); b2Vec2 center = position1 + b2Mul(R1, m_localCentroid + m_localOBB.center); aabb1.minVertex = center - h; aabb1.maxVertex = center + h; } { b2Mat22 obbR = b2Mul(R2, m_localOBB.R); b2Mat22 absR = b2Abs(obbR); b2Vec2 h = b2Mul(absR, m_localOBB.extents); b2Vec2 center = position2 + b2Mul(R2, m_localCentroid + m_localOBB.center); aabb2.minVertex = center - h; aabb2.maxVertex = center + h; } b2AABB aabb; aabb.minVertex = b2Min(aabb1.minVertex, aabb2.minVertex); aabb.maxVertex = b2Max(aabb1.maxVertex, aabb2.maxVertex); b2BroadPhase* broadPhase = m_body->m_world->m_broadPhase; if (broadPhase->InRange(aabb)) { broadPhase->MoveProxy(m_proxyId, aabb); } else { m_body->Freeze(); } } void b2PolyShape::QuickSync(const b2Vec2& position, const b2Mat22& R) { m_R = R; m_position = position + b2Mul(R, m_localCentroid); } b2Vec2 b2PolyShape::Support(const b2Vec2& d) const { b2Vec2 dLocal = b2MulT(m_R, d); int32 bestIndex = 0; float32 bestValue = b2Dot(m_coreVertices[0], dLocal); for (int32 i = 1; i < m_vertexCount; ++i) { float32 value = b2Dot(m_coreVertices[i], dLocal); if (value > bestValue) { bestIndex = i; bestValue = value; } } return m_position + b2Mul(m_R, m_coreVertices[bestIndex]); } bool b2PolyShape::TestPoint(const b2Vec2& p) { b2Vec2 pLocal = b2MulT(m_R, p - m_position); for (int32 i = 0; i < m_vertexCount; ++i) { float32 dot = b2Dot(m_normals[i], pLocal - m_vertices[i]); if (dot > 0.0f) { return false; } } return true; } void b2PolyShape::ResetProxy(b2BroadPhase* broadPhase) { if (m_proxyId == b2_nullProxy) { return; } b2Proxy* proxy = broadPhase->GetProxy(m_proxyId); broadPhase->DestroyProxy(m_proxyId); proxy = NULL; b2Mat22 R = b2Mul(m_R, m_localOBB.R); b2Mat22 absR = b2Abs(R); b2Vec2 h = b2Mul(absR, m_localOBB.extents); b2Vec2 position = m_position + b2Mul(m_R, m_localOBB.center); b2AABB aabb; aabb.minVertex = position - h; aabb.maxVertex = position + h; if (broadPhase->InRange(aabb)) { m_proxyId = broadPhase->CreateProxy(aabb, this); } else { m_proxyId = b2_nullProxy; } if (m_proxyId == b2_nullProxy) { m_body->Freeze(); } } numptyphysics-0.2+svn157/Box2D/Source/Collision/b2Collision.cpp0000644000175000017500000000442112264274616023366 0ustar warp10warp10/* * Copyright (c) 2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2Collision.h" // Collision Detection in Interactive 3D Environments by Gino van den Bergen // From Section 3.4.1 // x = mu1 * p1 + mu2 * p2 // mu1 + mu2 = 1 && mu1 >= 0 && mu2 >= 0 // mu1 = 1 - mu2; // x = (1 - mu2) * p1 + mu2 * p2 // = p1 + mu2 * (p2 - p1) // x = s + a * r (s := start, r := end - start) // s + a * r = p1 + mu2 * d (d := p2 - p1) // -a * r + mu2 * d = b (b := s - p1) // [-r d] * [a; mu2] = b // Cramer's rule: // denom = det[-r d] // a = det[b d] / denom // mu2 = det[-r b] / denom bool b2Segment::TestSegment(float32* lambda, b2Vec2* normal, const b2Segment& segment, float32 maxLambda) const { b2Vec2 s = segment.p1; b2Vec2 r = segment.p2 - s; b2Vec2 d = p2 - p1; b2Vec2 n = b2Cross(d, 1.0f); const float32 k_slop = 100.0f * B2_FLT_EPSILON; float32 denom = -b2Dot(r, n); // Cull back facing collision and ignore parallel segments. if (denom > k_slop) { // Does the segment intersect the infinite line associated with this segment? b2Vec2 b = s - p1; float32 a = b2Dot(b, n); if (0.0f <= a && a <= maxLambda * denom) { float32 mu2 = -r.x * b.y + r.y * b.x; // Does the segment intersect this segment? if (-k_slop * denom <= mu2 && mu2 <= denom * (1.0f + k_slop)) { a /= denom; n.Normalize(); *lambda = a; *normal = n; return true; } } } return false; } numptyphysics-0.2+svn157/Box2D/Source/Collision/b2BroadPhase.h0000644000175000017500000001037712264274616023117 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef B2_BROAD_PHASE_H #define B2_BROAD_PHASE_H /* This broad phase uses the Sweep and Prune algorithm as described in: Collision Detection in Interactive 3D Environments by Gino van den Bergen Also, some ideas, such as using integral values for fast compares comes from Bullet (http:/www.bulletphysics.com). */ #include "../Common/b2Settings.h" #include "b2Collision.h" #include "b2PairManager.h" #include #ifdef TARGET_FLOAT32_IS_FIXED #define B2BROADPHASE_MAX (USHRT_MAX/2) #else #define B2BROADPHASE_MAX USHRT_MAX #endif const uint16 b2_invalid = B2BROADPHASE_MAX; const uint16 b2_nullEdge = B2BROADPHASE_MAX; struct b2BoundValues; struct b2Bound { bool IsLower() const { return (value & 1) == 0; } bool IsUpper() const { return (value & 1) == 1; } uint16 value; uint16 proxyId; uint16 stabbingCount; }; struct b2Proxy { uint16 GetNext() const { return lowerBounds[0]; } void SetNext(uint16 next) { lowerBounds[0] = next; } bool IsValid() const { return overlapCount != b2_invalid; } uint16 lowerBounds[2], upperBounds[2]; uint16 overlapCount; uint16 timeStamp; void* userData; }; class b2BroadPhase { public: b2BroadPhase(const b2AABB& worldAABB, b2PairCallback* callback); ~b2BroadPhase(); // Use this to see if your proxy is in range. If it is not in range, // it should be destroyed. Otherwise you may get O(m^2) pairs, where m // is the number of proxies that are out of range. bool InRange(const b2AABB& aabb) const; // Create and destroy proxies. These call Flush first. uint16 CreateProxy(const b2AABB& aabb, void* userData); void DestroyProxy(int32 proxyId); // Call MoveProxy as many times as you like, then when you are done // call Commit to finalized the proxy pairs (for your time step). void MoveProxy(int32 proxyId, const b2AABB& aabb); void Commit(); // Get a single proxy. Returns NULL if the id is invalid. b2Proxy* GetProxy(int32 proxyId); // Query an AABB for overlapping proxies, returns the user data and // the count, up to the supplied maximum count. int32 Query(const b2AABB& aabb, void** userData, int32 maxCount); void Validate(); void ValidatePairs(); private: void ComputeBounds(uint16* lowerValues, uint16* upperValues, const b2AABB& aabb); bool TestOverlap(b2Proxy* p1, b2Proxy* p2); bool TestOverlap(const b2BoundValues& b, b2Proxy* p); void Query(int32* lowerIndex, int32* upperIndex, uint16 lowerValue, uint16 upperValue, b2Bound* bounds, int32 boundCount, int32 axis); void IncrementOverlapCount(int32 proxyId); void IncrementTimeStamp(); public: friend class b2PairManager; b2PairManager m_pairManager; b2Proxy m_proxyPool[b2_maxProxies]; uint16 m_freeProxy; b2Bound m_bounds[2][2*b2_maxProxies]; uint16 m_queryResults[b2_maxProxies]; int32 m_queryResultCount; b2AABB m_worldAABB; b2Vec2 m_quantizationFactor; int32 m_proxyCount; uint16 m_timeStamp; static bool s_validate; }; inline bool b2BroadPhase::InRange(const b2AABB& aabb) const { b2Vec2 d = b2Max(aabb.lowerBound - m_worldAABB.upperBound, m_worldAABB.lowerBound - aabb.upperBound); return b2Max(d.x, d.y) < 0.0f; } inline b2Proxy* b2BroadPhase::GetProxy(int32 proxyId) { if (proxyId == b2_nullProxy || m_proxyPool[proxyId].IsValid() == false) { return NULL; } return m_proxyPool + proxyId; } #endif numptyphysics-0.2+svn157/Box2D/Source/Collision/b2PairManager.cpp0000644000175000017500000002460012264274616023622 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #include "b2PairManager.h" #include "b2BroadPhase.h" #include // Thomas Wang's hash, see: http://www.concentric.net/~Ttwang/tech/inthash.htm // This assumes proxyId1 and proxyId2 are 16-bit. inline uint32 Hash(uint32 proxyId1, uint32 proxyId2) { uint32 key = (proxyId2 << 16) | proxyId1; key = ~key + (key << 15); key = key ^ (key >> 12); key = key + (key << 2); key = key ^ (key >> 4); key = key * 2057; key = key ^ (key >> 16); return key; } inline bool Equals(const b2Pair& pair, int32 proxyId1, int32 proxyId2) { return pair.proxyId1 == proxyId1 && pair.proxyId2 == proxyId2; } inline bool Equals(const b2BufferedPair& pair1, const b2BufferedPair& pair2) { return pair1.proxyId1 == pair2.proxyId1 && pair1.proxyId2 == pair2.proxyId2; } // For sorting. inline bool operator < (const b2BufferedPair& pair1, const b2BufferedPair& pair2) { if (pair1.proxyId1 < pair2.proxyId1) { return true; } if (pair1.proxyId1 == pair2.proxyId1) { return pair1.proxyId2 < pair2.proxyId2; } return false; } b2PairManager::b2PairManager() { b2Assert(b2IsPowerOfTwo(b2_tableCapacity) == true); b2Assert(b2_tableCapacity >= b2_maxPairs); for (int32 i = 0; i < b2_tableCapacity; ++i) { m_hashTable[i] = b2_nullPair; } m_freePair = 0; for (int32 i = 0; i < b2_maxPairs; ++i) { m_pairs[i].proxyId1 = b2_nullProxy; m_pairs[i].proxyId2 = b2_nullProxy; m_pairs[i].userData = NULL; m_pairs[i].status = 0; m_pairs[i].next = uint16(i + 1); } m_pairs[b2_maxPairs-1].next = b2_nullPair; m_pairCount = 0; m_pairBufferCount = 0; } void b2PairManager::Initialize(b2BroadPhase* broadPhase, b2PairCallback* callback) { m_broadPhase = broadPhase; m_callback = callback; } b2Pair* b2PairManager::Find(int32 proxyId1, int32 proxyId2, uint32 hash) { int32 index = m_hashTable[hash]; while (index != b2_nullPair && Equals(m_pairs[index], proxyId1, proxyId2) == false) { index = m_pairs[index].next; } if (index == b2_nullPair) { return NULL; } b2Assert(index < b2_maxPairs); return m_pairs + index; } b2Pair* b2PairManager::Find(int32 proxyId1, int32 proxyId2) { if (proxyId1 > proxyId2) b2Swap(proxyId1, proxyId2); int32 hash = Hash(proxyId1, proxyId2) & b2_tableMask; return Find(proxyId1, proxyId2, hash); } // Returns existing pair or creates a new one. b2Pair* b2PairManager::AddPair(int32 proxyId1, int32 proxyId2) { if (proxyId1 > proxyId2) b2Swap(proxyId1, proxyId2); int32 hash = Hash(proxyId1, proxyId2) & b2_tableMask; b2Pair* pair = Find(proxyId1, proxyId2, hash); if (pair != NULL) { return pair; } b2Assert(m_pairCount < b2_maxPairs && m_freePair != b2_nullPair); uint16 pairIndex = m_freePair; pair = m_pairs + pairIndex; m_freePair = pair->next; pair->proxyId1 = (uint16)proxyId1; pair->proxyId2 = (uint16)proxyId2; pair->status = 0; pair->userData = NULL; pair->next = m_hashTable[hash]; m_hashTable[hash] = pairIndex; ++m_pairCount; return pair; } // Removes a pair. The pair must exist. void* b2PairManager::RemovePair(int32 proxyId1, int32 proxyId2) { b2Assert(m_pairCount > 0); if (proxyId1 > proxyId2) b2Swap(proxyId1, proxyId2); int32 hash = Hash(proxyId1, proxyId2) & b2_tableMask; uint16* node = &m_hashTable[hash]; while (*node != b2_nullPair) { if (Equals(m_pairs[*node], proxyId1, proxyId2)) { uint16 index = *node; *node = m_pairs[*node].next; b2Pair* pair = m_pairs + index; void* userData = pair->userData; // Scrub pair->next = m_freePair; pair->proxyId1 = b2_nullProxy; pair->proxyId2 = b2_nullProxy; pair->userData = NULL; pair->status = 0; m_freePair = index; --m_pairCount; return userData; } else { node = &m_pairs[*node].next; } } b2Assert(false); return NULL; } /* As proxies are created and moved, many pairs are created and destroyed. Even worse, the same pair may be added and removed multiple times in a single time step of the physics engine. To reduce traffic in the pair manager, we try to avoid destroying pairs in the pair manager until the end of the physics step. This is done by buffering all the RemovePair requests. AddPair requests are processed immediately because we need the hash table entry for quick lookup. All user user callbacks are delayed until the buffered pairs are confirmed in Commit. This is very important because the user callbacks may be very expensive and client logic may be harmed if pairs are added and removed within the same time step. Buffer a pair for addition. We may add a pair that is not in the pair manager or pair buffer. We may add a pair that is already in the pair manager and pair buffer. If the added pair is not a new pair, then it must be in the pair buffer (because RemovePair was called). */ void b2PairManager::AddBufferedPair(int32 id1, int32 id2) { b2Assert(id1 != b2_nullProxy && id2 != b2_nullProxy); b2Assert(m_pairBufferCount < b2_maxPairs); b2Pair* pair = AddPair(id1, id2); // If this pair is not in the pair buffer ... if (pair->IsBuffered() == false) { // This must be a newly added pair. b2Assert(pair->IsFinal() == false); // Add it to the pair buffer. pair->SetBuffered(); m_pairBuffer[m_pairBufferCount].proxyId1 = pair->proxyId1; m_pairBuffer[m_pairBufferCount].proxyId2 = pair->proxyId2; ++m_pairBufferCount; b2Assert(m_pairBufferCount <= m_pairCount); } // Confirm this pair for the subsequent call to Commit. pair->ClearRemoved(); if (b2BroadPhase::s_validate) { ValidateBuffer(); } } // Buffer a pair for removal. void b2PairManager::RemoveBufferedPair(int32 id1, int32 id2) { b2Assert(id1 != b2_nullProxy && id2 != b2_nullProxy); b2Assert(m_pairBufferCount < b2_maxPairs); b2Pair* pair = Find(id1, id2); if (pair == NULL) { // The pair never existed. This is legal (due to collision filtering). return; } // If this pair is not in the pair buffer ... if (pair->IsBuffered() == false) { // This must be an old pair. b2Assert(pair->IsFinal() == true); pair->SetBuffered(); m_pairBuffer[m_pairBufferCount].proxyId1 = pair->proxyId1; m_pairBuffer[m_pairBufferCount].proxyId2 = pair->proxyId2; ++m_pairBufferCount; b2Assert(m_pairBufferCount <= m_pairCount); } pair->SetRemoved(); if (b2BroadPhase::s_validate) { ValidateBuffer(); } } void b2PairManager::Commit() { int32 removeCount = 0; b2Proxy* proxies = m_broadPhase->m_proxyPool; for (int32 i = 0; i < m_pairBufferCount; ++i) { b2Pair* pair = Find(m_pairBuffer[i].proxyId1, m_pairBuffer[i].proxyId2); b2Assert(pair->IsBuffered()); pair->ClearBuffered(); b2Assert(pair->proxyId1 < b2_maxProxies && pair->proxyId2 < b2_maxProxies); b2Proxy* proxy1 = proxies + pair->proxyId1; b2Proxy* proxy2 = proxies + pair->proxyId2; b2Assert(proxy1->IsValid()); b2Assert(proxy2->IsValid()); if (pair->IsRemoved()) { // It is possible a pair was added then removed before a commit. Therefore, // we should be careful not to tell the user the pair was removed when the // the user didn't receive a matching add. if (pair->IsFinal() == true) { m_callback->PairRemoved(proxy1->userData, proxy2->userData, pair->userData); } // Store the ids so we can actually remove the pair below. m_pairBuffer[removeCount].proxyId1 = pair->proxyId1; m_pairBuffer[removeCount].proxyId2 = pair->proxyId2; ++removeCount; } else { b2Assert(m_broadPhase->TestOverlap(proxy1, proxy2) == true); if (pair->IsFinal() == false) { pair->userData = m_callback->PairAdded(proxy1->userData, proxy2->userData); pair->SetFinal(); } } } for (int32 i = 0; i < removeCount; ++i) { RemovePair(m_pairBuffer[i].proxyId1, m_pairBuffer[i].proxyId2); } m_pairBufferCount = 0; if (b2BroadPhase::s_validate) { ValidateTable(); } } void b2PairManager::ValidateBuffer() { #ifdef _DEBUG b2Assert(m_pairBufferCount <= m_pairCount); std::sort(m_pairBuffer, m_pairBuffer + m_pairBufferCount); for (int32 i = 0; i < m_pairBufferCount; ++i) { if (i > 0) { b2Assert(Equals(m_pairBuffer[i], m_pairBuffer[i-1]) == false); } b2Pair* pair = Find(m_pairBuffer[i].proxyId1, m_pairBuffer[i].proxyId2); b2Assert(pair->IsBuffered()); b2Assert(pair->proxyId1 != pair->proxyId2); b2Assert(pair->proxyId1 < b2_maxProxies); b2Assert(pair->proxyId2 < b2_maxProxies); b2Proxy* proxy1 = m_broadPhase->m_proxyPool + pair->proxyId1; b2Proxy* proxy2 = m_broadPhase->m_proxyPool + pair->proxyId2; b2Assert(proxy1->IsValid() == true); b2Assert(proxy2->IsValid() == true); } #endif } void b2PairManager::ValidateTable() { #ifdef _DEBUG for (int32 i = 0; i < b2_tableCapacity; ++i) { uint16 index = m_hashTable[i]; while (index != b2_nullPair) { b2Pair* pair = m_pairs + index; b2Assert(pair->IsBuffered() == false); b2Assert(pair->IsFinal() == true); b2Assert(pair->IsRemoved() == false); b2Assert(pair->proxyId1 != pair->proxyId2); b2Assert(pair->proxyId1 < b2_maxProxies); b2Assert(pair->proxyId2 < b2_maxProxies); b2Proxy* proxy1 = m_broadPhase->m_proxyPool + pair->proxyId1; b2Proxy* proxy2 = m_broadPhase->m_proxyPool + pair->proxyId2; b2Assert(proxy1->IsValid() == true); b2Assert(proxy2->IsValid() == true); b2Assert(m_broadPhase->TestOverlap(proxy1, proxy2) == true); index = pair->next; } } #endif } numptyphysics-0.2+svn157/Box2D/Source/Collision/b2PairManager.h0000644000175000017500000000702112264274616023265 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ // The pair manager is used by the broad-phase to quickly add/remove/find pairs // of overlapping proxies. It is based closely on code provided by Pierre Terdiman. // http://www.codercorner.com/IncrementalSAP.txt #ifndef B2_PAIR_MANAGER_H #define B2_PAIR_MANAGER_H #include "../Common/b2Settings.h" #include "../Common/b2Math.h" #include class b2BroadPhase; struct b2Proxy; const uint16 b2_nullPair = USHRT_MAX; const uint16 b2_nullProxy = USHRT_MAX; const int32 b2_tableCapacity = b2_maxPairs; // must be a power of two const int32 b2_tableMask = b2_tableCapacity - 1; struct b2Pair { enum { e_pairBuffered = 0x0001, e_pairRemoved = 0x0002, e_pairFinal = 0x0004, }; void SetBuffered() { status |= e_pairBuffered; } void ClearBuffered() { status &= ~e_pairBuffered; } bool IsBuffered() { return (status & e_pairBuffered) == e_pairBuffered; } void SetRemoved() { status |= e_pairRemoved; } void ClearRemoved() { status &= ~e_pairRemoved; } bool IsRemoved() { return (status & e_pairRemoved) == e_pairRemoved; } void SetFinal() { status |= e_pairFinal; } bool IsFinal() { return (status & e_pairFinal) == e_pairFinal; } void* userData; uint16 proxyId1; uint16 proxyId2; uint16 next; uint16 status; }; struct b2BufferedPair { uint16 proxyId1; uint16 proxyId2; }; class b2PairCallback { public: virtual ~b2PairCallback() {} // This should return the new pair user data. It is ok if the // user data is null. virtual void* PairAdded(void* proxyUserData1, void* proxyUserData2) = 0; // This should free the pair's user data. In extreme circumstances, it is possible // this will be called with null pairUserData because the pair never existed. virtual void PairRemoved(void* proxyUserData1, void* proxyUserData2, void* pairUserData) = 0; }; class b2PairManager { public: b2PairManager(); void Initialize(b2BroadPhase* broadPhase, b2PairCallback* callback); void AddBufferedPair(int32 proxyId1, int32 proxyId2); void RemoveBufferedPair(int32 proxyId1, int32 proxyId2); void Commit(); private: b2Pair* Find(int32 proxyId1, int32 proxyId2); b2Pair* Find(int32 proxyId1, int32 proxyId2, uint32 hashValue); b2Pair* AddPair(int32 proxyId1, int32 proxyId2); void* RemovePair(int32 proxyId1, int32 proxyId2); void ValidateBuffer(); void ValidateTable(); public: b2BroadPhase *m_broadPhase; b2PairCallback *m_callback; b2Pair m_pairs[b2_maxPairs]; uint16 m_freePair; int32 m_pairCount; b2BufferedPair m_pairBuffer[b2_maxPairs]; int32 m_pairBufferCount; uint16 m_hashTable[b2_tableCapacity]; }; #endif numptyphysics-0.2+svn157/Box2D/Include/0000755000175000017500000000000012264274602016665 5ustar warp10warp10numptyphysics-0.2+svn157/Box2D/Include/Box2D.h0000644000175000017500000000362512264274602017762 0ustar warp10warp10/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef BOX2D_H #define BOX2D_H /** \mainpage Box2D API Documentation \section intro_sec Getting Started For tutorials please see http://www.box2d.org/manual.html For discussion please visit http://www.box2d.org/forum */ // These include files constitute the main Box2D API #include "../Source/Common/b2Settings.h" #include "../Source/Collision/Shapes/b2CircleShape.h" #include "../Source/Collision/Shapes/b2PolygonShape.h" #include "../Source/Collision/b2BroadPhase.h" #include "../Source/Dynamics/b2WorldCallbacks.h" #include "../Source/Dynamics/b2World.h" #include "../Source/Dynamics/b2Body.h" #include "../Source/Dynamics/Contacts/b2Contact.h" #include "../Source/Dynamics/Joints/b2DistanceJoint.h" #include "../Source/Dynamics/Joints/b2MouseJoint.h" #include "../Source/Dynamics/Joints/b2PrismaticJoint.h" #include "../Source/Dynamics/Joints/b2RevoluteJoint.h" #include "../Source/Dynamics/Joints/b2PulleyJoint.h" #include "../Source/Dynamics/Joints/b2GearJoint.h" #endif numptyphysics-0.2+svn157/Array.h0000644000175000017500000000616112264274577015632 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef ARRAY_H #define ARRAY_H #include "Common.h" #include template class Array { public: Array( int cap=0 ) : m_data(NULL), m_size(0), m_capacity(0) { capacity( cap ); } Array( int n, const T* d ) : m_data(NULL), m_size(0), m_capacity(0) { if ( n ) { capacity( n ); memcpy( m_data, d, n * sizeof(T) ); m_size = n; } } Array( const Array& other ) : m_data(NULL), m_size(0), m_capacity(0) { if ( other.size() ) { capacity( other.size() ); memcpy( m_data, other.m_data, other.size() * sizeof(T) ); m_size = other.size(); } } ~Array() { if ( m_data ) { free( m_data ); } } int size() const { return m_size; } void empty() { m_size = 0; } T& at( int i ) { ASSERT( i < m_size ); return m_data[i]; } const T& at( int i ) const { ASSERT( i < m_size ); return m_data[i]; } void append( const T& t ) { ensureCapacity( m_size + 1 ); m_data[ m_size++ ] = t; } void insert( int i, const T& t ) { if ( i==m_size ) { append( t ); } else { ASSERT( i < m_size ); ensureCapacity( m_size + 1 ); for ( int j=m_size-1; j>=i; j-- ) { m_data[j+1] = m_data[j]; } m_data[ i ] = t; m_size++; } } void erase( int i ) { if (i >= 0 ) { ASSERT( i < m_size ); if ( i < m_size-1 ) { memcpy( m_data+i, m_data+i+1, (m_size-i-1)*sizeof(T) ); } m_size--; } } void trim( int i ) { ASSERT( i < m_size ); m_size -= i; } void capacity( int c ) { if ( c >= m_size ) { if ( m_capacity ) { m_data = (T*)realloc( m_data, c * sizeof(T) ); } else { m_data = (T*)malloc( c * sizeof(T) ); } m_capacity = c; } } int indexOf( const T& t ) { for ( int i=0; i& operator=(const Array& other) { m_size = 0; if ( other.size() ) { capacity( other.size() ); memcpy( m_data, other.m_data, other.size() * sizeof(T) ); m_size = other.size(); } return *this; } private: void ensureCapacity( int c ) { if ( c > m_capacity ) { int newc = m_capacity ? m_capacity : 4; while ( newc < c ) { newc += newc; } capacity( newc ); } } T* m_data; int m_size; int m_capacity; }; #endif //ARRAY_H numptyphysics-0.2+svn157/autogen.sh0000755000175000017500000000015312264274602016364 0ustar warp10warp10#!/bin/sh # Re-run autoconf and friends. See autoreconf(1). autoreconf -Wall --install --verbose --force numptyphysics-0.2+svn157/Game.cpp0000644000175000017500000003267112264274560015755 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "Common.h" #include "Array.h" #include "Config.h" #include "Game.h" #include "Path.h" #include "Canvas.h" #include "Font.h" #include "Levels.h" #include "Http.h" #include "Os.h" #include "Scene.h" #include "Script.h" #include "Dialogs.h" #include "Ui.h" #include #include #include #include #include #include #include #include #include using namespace std; unsigned char levelbuf[64*1024]; #define JOINT_IND_PATH "282,39 280,38 282,38 285,39 300,39 301,60 303,66 302,64 301,63 300,48 297,41 296,42 294,43 293,45 291,46 289,48 287,49 286,52 284,53 283,58 281,62 280,66 282,78 284,82 287,84 290,85 294,88 297,88 299,89 302,90 308,90 311,89 314,89 320,85 321,83 323,83 324,81 327,78 328,75 327,63 326,58 325,55 323,54 321,51 320,49 319,48 316,46 314,44 312,43 314,43" class Game : public GameControl, public Container { Scene m_scene; Stroke *m_createStroke; Stroke *m_moveStroke; Widget *m_pauseLabel; Widget *m_editLabel; Widget *m_completedDialog; Widget *m_options; Os *m_os; bool m_isCompleted; Path m_jointCandidates; Path m_jointInd; public: Game( Levels* levels, int width, int height ) : m_createStroke(NULL), m_moveStroke(NULL), m_pauseLabel( NULL ), m_editLabel( NULL ), m_completedDialog( NULL ), m_isCompleted(false), m_options( NULL ), m_os( Os::get() ), m_jointInd(JOINT_IND_PATH) { setEventMap(Os::get()->getEventMap(GAME_MAP)); sizeTo(Vec2(width,height)); transparent(true); //don't clear m_greedyMouse = true; //get mouse clicks outside the window! m_jointInd.scale( 12.0f / (float32)m_jointInd.bbox().width() ); //m_jointInd.simplify( 2.0f ); m_jointInd.makeRelative(); configureScreenTransform( width, height ); m_levels = levels; gotoLevel(0); //add( new Button("O",Event::OPTION), Rect(800-32,0,32,32) ); } const char* name() {return "Game";} void gotoLevel( int level, bool replay=false ) { bool ok = false; m_replaying = replay; if ( replay ) { // reset scene, delete user strokes, but retain log m_scene.reset( NULL, true ); m_scene.start( true ); ok = true; } else if ( level >= 0 && level < m_levels->numLevels() ) { int size = m_levels->load( level, levelbuf, sizeof(levelbuf) ); if ( size && m_scene.load( levelbuf, size ) ) { m_scene.start( m_scene.getLog()->size() > 0 ); ok = true; } } if (ok) { //m_window.setSubName( file ); if ( m_edit ) { m_scene.protect(0); } else { } m_refresh = true; m_level = level; if (!m_replaying) { m_stats.reset(SDL_GetTicks()); } } } bool save( const char *file=NULL ) { string p; if ( file ) { p = file; } else { p = Config::userDataDir() + Os::pathSep + "L99_saved.nph"; file = "L99_saved.nph"; } if ( m_scene.save( p ) ) { m_levels->addPath( p.c_str() ); int l = m_levels->findLevel( p.c_str() ); if ( l >= 0 ) { fprintf(stderr,"setting level to saved index to %d\n", l); m_level = l; //m_window.setSubName( p.c_str() ); } showMessage(std::string("

    saved to
    ")+file); return true; } return false; } bool send() { if ( save( SEND_TEMP_FILE ) ) { Http h; if ( h.post( (Config::planetRoot()+"/upload").c_str(), "data", SEND_TEMP_FILE, "type=1" ) ) { std::string id = h.getHeader("NP-Upload-Id"); if ( id.length() > 0 ) { printf("uploaded as id %s\n",id.c_str()); if ( !m_os->openBrowser((Config::planetRoot()+"/editlevel?id="+id).c_str()) ) { showMessage("Unable to launch browser"); } } else { showMessage("UploadFailed: unknown error"); } } else { showMessage(std::string("UploadFailed: ")+h.errorMessage()); } } return false; } void saveDemo() { std::string path = m_levels->demoPath(m_level); OS->ensurePath(path); path = m_levels->demoName(m_level); fprintf(stderr,"saving demo of level %d to %s\n", m_level, path.c_str()); m_scene.save(path, true); } void clickMode(int cm) { if (cm != m_clickMode) { fprintf(stderr,"clickMode=%d!\n",cm); m_clickMode = cm; switch (cm) { case 1: setEventMap(Os::get()->getEventMap(GAME_MOVE_MAP)); break; case 2: setEventMap(Os::get()->getEventMap(GAME_ERASE_MAP)); break; default: setEventMap(Os::get()->getEventMap(GAME_MAP)); break; } } } void setTool( int t ) { m_colour = t; } void editMode( bool set ) { m_edit = set; } void showMessage( const std::string& msg ) { printf("showMessage \"%s\"\n",msg.c_str()); add( new MessageBox(msg) ); } void togglePause() { if ( !m_paused ) { if ( !m_pauseLabel ) { m_pauseLabel = new Button("PAUSED",Event::PAUSE); m_pauseLabel->setBg(0xff0000); m_pauseLabel->setFg(0x000000); } add( m_pauseLabel, Rect(0,0,128,32) ); m_paused = true; } else { remove( m_pauseLabel ); m_pauseLabel = NULL; m_paused = false; } } bool isPaused() { return m_paused; } void edit( bool doEdit ) { if ( m_edit != doEdit ) { m_edit = doEdit; if ( m_edit ) { if ( !m_editLabel ) { m_editLabel = new Button("EDIT",Event::DONE); m_editLabel->setBg(0xff0000); m_editLabel->setFg(0x000000); } add(m_editLabel, Rect(SCREEN_WIDTH-128,0,SCREEN_WIDTH,32)); m_scene.protect(0); } else { remove(m_editLabel); m_editLabel = NULL; m_strokeFixed = false; m_strokeSleep = false; m_strokeDecor = false; if ( m_colour < 2 ) m_colour = 2; m_scene.protect(); } } } Vec2 mousePoint( Event& ev ) { Vec2 pt( ev.x, ev.y ); worldToScreen.inverseTransform( pt ); return pt; } //////////////////////////////////////////////////////////////// // layer interface //////////////////////////////////////////////////////////////// virtual bool isDirty() { //TODO this can be a bit heavyweight return Container::isDirty() || !dirtyArea().isEmpty(); } virtual Rect dirtyArea() { //todo include dirt for old joint candidates m_jointCandidates.empty(); if ( m_refresh ) { if ( m_createStroke ) { //this messes up dirty calc so do _after_ dirty area eval. m_scene.getJointCandidates( m_createStroke, m_jointCandidates ); } return FULLSCREEN_RECT; } else { Rect r = m_scene.dirtyArea(); if ( m_createStroke ) { //this messes up dirty calc so do _after_ dirty area eval. m_scene.getJointCandidates( m_createStroke, m_jointCandidates ); if ( m_jointCandidates.size() ) { Rect jr = m_jointCandidates.bbox(); jr.grow( 8 ); r.expand( jr ); } } r.grow(8); r.expand(Container::dirtyArea()); return r; } } void remove( Widget* w ) { if (w==m_completedDialog) { m_completedDialog = NULL; } Container::remove(w); } virtual void onTick( int tick ) { m_scene.step( isPaused() ); if ( m_isCompleted && m_completedDialog && m_edit ) { remove( m_completedDialog ); m_completedDialog = NULL; m_isCompleted = false; } if ( m_scene.isCompleted() != m_isCompleted && !m_edit ) { m_isCompleted = m_scene.isCompleted(); if ( m_isCompleted ) { if (m_stats.endTime==0) { //don't overwrite time after replay m_stats.endTime = SDL_GetTicks(); } fprintf(stderr,"STATS:\ttime=%dms\n\t" "strokes=%d (%d paused, %d undone)\n", m_stats.endTime-m_stats.startTime, m_stats.strokeCount, m_stats.pausedStrokes, m_stats.undoCount); m_completedDialog = createNextLevelDialog(this); add( m_completedDialog ); saveDemo(); } else if (m_completedDialog) { remove( m_completedDialog ); m_completedDialog = NULL; } } if ( m_os ) { for ( char *f = m_os->getLaunchFile(); f; f=m_os->getLaunchFile() ) { if ( strstr(f,".npz") ) { //m_levels->empty(); } m_levels->addPath( f ); int l = m_levels->findLevel( f ); if ( l >= 0 ) { gotoLevel( l ); //m_window.raise(); } } } Container::onTick(tick); } virtual void draw( Canvas& screen, const Rect& area ) { static int drawCount = 0 ; m_refresh = false; m_scene.draw( screen, area ); if ( m_jointCandidates.size() ) { float32 rot = (float32)(drawCount&127) / 128.0f; for ( int i=0; i SCREEN_WIDTH-10 && dispatchEvent(opt2Event)) { return true; } } return Container::processEvent(ev); } virtual bool onEvent( Event& ev ) { bool used = true; switch (ev.code) { case Event::MENU: remove( m_completedDialog ); add( createMainMenu(this) ); break; case Event::PAUSE: fprintf(stderr,"Game pause!\n"); togglePause(); break; case Event::UNDO: if ( !m_replaying ) { if ( m_createStroke ) { m_scene.deleteStroke( m_createStroke ); m_createStroke = NULL; } else if ( m_scene.deleteStroke( m_scene.strokes().at(m_scene.strokes().size()-1) ) ) { m_stats.undoCount++; } } m_refresh = true; break; case Event::SAVE: save(); break; case Event::CANCEL: if ( m_edit ) { edit(false); } break; case Event::OPTION: remove( m_options ); if (ev.x == 1) { //edit menu m_options = createEditOpts(this); } else if (ev.x == 2) { //play menu m_options = createPlayOpts(this); } if (m_options) { add( m_options ); } break; case Event::SELECT: switch (ev.x) { case 1: switch (ev.y) { case -1: add( createColourDialog(this, NUM_BRUSHES, brushColours) ); break; default: fprintf(stderr,"SetTool %d\n",ev.y); setTool(ev.y); break; } break; case 2: switch (ev.y) { case -1: add( createToolDialog(this) ); break; } break; } break; case Event::EDIT: edit( !m_edit ); if (m_edit && !m_paused) { togglePause(); } break; case Event::DONE: if (m_edit) { add( createEditDoneDialog(this) ); } break; case Event::RESET: gotoLevel( m_level ); break; case Event::NEXT: if (m_level==0 && m_isCompleted) { // from title try to find the first uncompleted level while (m_level < m_levels->numLevels() && m_os->exists(m_levels->demoName(m_level))) { m_level++; } gotoLevel( m_level ); } else { gotoLevel( m_level+1 ); } break; case Event::PREVIOUS: gotoLevel( m_level-1 ); break; case Event::REPLAY: gotoLevel( ev.x, true ); break; case Event::PLAY: gotoLevel( ev.x ); break; case Event::DRAWBEGIN: if ( !m_replaying && !m_createStroke ) { int attrib = 0; if ( m_strokeFixed ) attrib |= ATTRIB_GROUND; if ( m_strokeSleep ) attrib |= ATTRIB_SLEEPING; if ( m_strokeDecor ) attrib |= ATTRIB_DECOR; m_createStroke = m_scene.newStroke( Path()&mousePoint(ev), m_colour, attrib ); } break; case Event::DRAWMORE: if ( m_createStroke ) { m_scene.extendStroke( m_createStroke, mousePoint(ev) ); } break; case Event::DRAWEND: if ( m_createStroke ) { if ( m_scene.activateStroke( m_createStroke ) ) { m_stats.strokeCount++; if ( isPaused() ) { m_stats.pausedStrokes++; } } else { m_scene.deleteStroke( m_createStroke ); } m_createStroke = NULL; } break; case Event::MOVEBEGIN: fprintf(stderr,"MOVING!\n"); if ( !m_replaying && !m_moveStroke ) { m_moveStroke = m_scene.strokeAtPoint( mousePoint(ev), SELECT_TOLERANCE ); } break; case Event::MOVEMORE: if ( m_moveStroke ) { fprintf(stderr,"MOVING MORE!\n"); m_scene.moveStroke( m_moveStroke, mousePoint(ev) ); } break; case Event::MOVEEND: m_moveStroke = NULL; break; case Event::DELETE: fprintf(stderr,"DELETEING!\n"); m_scene.deleteStroke( m_scene.strokeAtPoint( mousePoint(ev), SELECT_TOLERANCE ) ); m_refresh = true; break; default: used = Container::onEvent(ev); } return used; } }; Widget* createGameLayer( Levels* levels, int width, int height ) { return new Game(levels,width,height); } numptyphysics-0.2+svn157/Common.h0000644000175000017500000000673312264274616016003 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef COMMON_H #define COMMON_H #include "Box2D.h" #define ARRAY_SIZE(aRR) (sizeof(aRR)/sizeof((aRR)[0])) #define ASSERT(a) #define FIXED_SHIFT 16 #define FIXED_ONE (1<>FIXED_SHIFT) struct Vec2 { Vec2() {} Vec2( const Vec2& o ) : x(o.x), y(o.y) {} explicit Vec2( const b2Vec2& o ) : x((int)o.x), y((int)o.y) {} Vec2( int xx, int yy ) : x(xx), y(yy) {} void operator+=( const Vec2& o ) { x+=o.x; y+=o.y; } void operator-=( const Vec2& o ) { x-=o.x; y-=o.y; } Vec2 operator-() { return Vec2(-x,-y); } void operator*=( int o ) { x*=o; y*=o; } bool operator==( const Vec2& o ) const { return x==o.x && y==o.y; } bool operator!=( const Vec2& o ) const { return !(*this==o); } operator b2Vec2() const { return b2Vec2((float32)x,(float32)y); } Vec2 operator+( const Vec2& b ) const { return Vec2(x+b.x,y+b.y); } Vec2 operator-( const Vec2& b ) const { return Vec2(x-b.x,y-b.y); } Vec2 operator/( int r ) const { return Vec2(x/r,y/r); } Vec2 operator*( int r ) const { return Vec2(x*r,y*r); } int x,y; }; template inline T Min( T a, T b ) { return a < b ? a : b; } inline Vec2 Min( const Vec2& a, const Vec2& b ) { Vec2 r; r.x = Min(a.x,b.x); r.y = Min(a.y,b.y); return r; } template inline T Max( T a, T b ) { return a >= b ? a : b; } inline Vec2 Max( const Vec2& a, const Vec2& b ) { Vec2 r; r.x = Max(a.x,b.x); r.y = Max(a.y,b.y); return r; } #define Sgn(a) ((a)<0?-1:1) #define Abs(a) ((a)<0?-(a):(a)) struct Rect { Rect() {} Rect(bool) { clear(); } Rect( const Vec2& atl, const Vec2& abr ) : tl(atl), br(abr) {} Rect( int x1, int y1, int x2, int y2 ) : tl(x1,y1), br(x2,y2) {} int width() const { return br.x-tl.x+1; } int height() const { return br.y-tl.y+1; } Vec2 size() const { return br-tl; } void clear() { tl.x=tl.y=br.x=br.y=0; } bool isEmpty() const { return tl.x==0 && br.x==0; } void grow(int by) { if (!isEmpty()) { tl.x -= by; tl.y -= by; br.x += by; br.y += by; } } void expand( const Vec2& v ) { tl=Min(tl,v); br=Max(br,v); } void expand( const Rect& r ) { if (isEmpty()) { *this = r; } else if (!r.isEmpty()) { expand(r.tl); expand(r.br); } } void clipTo( const Rect& r ) { tl=Max(tl,r.tl); br=Min(br,r.br); } bool contains( const Vec2& p ) const { return p.x >= tl.x && p.x <= br.x && p.y >= tl.y && p.y <= br.y; } bool contains( const Rect& p ) const { return contains(p.tl) && contains(p.br); } bool intersects( const Rect& r ) const { return r.tl.x <= br.x && r.tl.y <= br.y && r.br.x >= tl.x && r.br.y >= tl.y; } Vec2 centroid() const { return (tl+br)/2; } Rect operator+( const Vec2& b ) const { Rect r=*this; r.tl += b; r.br += b; return r; } Vec2 tl, br; }; #endif //COMMON_H numptyphysics-0.2+svn157/Canvas.h0000644000175000017500000000404112264274560015752 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef CANVAS_H #define CANVAS_H #include "Common.h" class Path; class Canvas { typedef void* State; public: Canvas( int w, int h ); virtual ~Canvas(); int width() const; int height() const; int makeColour( int c ) const; int makeColour( int r, int g, int b ) const; void resetClip(); void setClip( int x, int y, int w, int h ); void setBackground( int c ); void setBackground( Canvas* bg ); void clear(); void clear( const Rect& r ); void fade( const Rect& r ); Canvas* scale( int factor ) const; void scale( int w, int h ); void drawImage( Canvas *canvas, int x, int y ); void drawPixel( int x, int y, int c ); int readPixel( int x, int y ) const; void drawLine( int x1, int y1, int x2, int y2, int c ); void drawPath( const Path& path, int color, bool thick=false ); void drawRect( int x, int y, int w, int h, int c, bool fill=true ); void drawRect( const Rect& r, int c, bool fill=true ); int writeBMP( const char* filename ) const; protected: Canvas( State state=NULL ); State m_state; int m_bgColour; Canvas* m_bgImage; Rect m_clip; }; class Window : public Canvas { public: Window( int w, int h, const char* title=NULL, const char* winclass=NULL, bool fullscreen=false ); void update( const Rect& r ); void raise(); void setSubName( const char *sub ); protected: std::string m_title; }; class Image : public Canvas { public: Image( const char* file, bool alpha=false ); }; #endif //CANVAS_H numptyphysics-0.2+svn157/Makefile.am0000644000175000017500000000527112264274602016425 0ustar warp10warp10bin_PROGRAMS = numptyphysics noinst_LIBRARIES = libbox2d.a INCLUDES = -IBox2D/Include desktopentry_DATA = data/numptyphysics.desktop serviceentry_DATA = data/numptyphysics.service icon_26x26_DATA = data/icon26/numptyphysics.png #icon_40x40_DATA = data/icon40/numptyphysics.png icon_64x64_DATA = data/icon64/numptyphysics.png icon_scalable_DATA = data/icon64/numptyphysics.png numptyphysics_SOURCES = \ Path.cpp \ Canvas.cpp \ Font.cpp \ Levels.cpp \ ZipFile.cpp \ Scene.cpp \ Game.cpp \ Script.cpp \ App.cpp \ Config.cpp \ Http.cpp \ Os.cpp \ Ui.cpp \ Dialogs.cpp \ Event.cpp \ Worker.cpp \ happyhttp.cpp \ zoomer.cpp \ OsHildon.cpp \ OsFreeDesktop.cpp \ OsWin32.cpp numptyphysics_CPPFLAGS = -IXX $(SDL_CFLAGS) $(HILDON_CFLAGS) numptyphysics_LDADD = libbox2d.a $(SDL_LIBS) $(HILDON_LIBS) numptyphysics_DATA = \ data/C00_Title.npz \ data/C01_Tutorial.npz \ data/C10_Standard.npz \ data/C50_Gesualdi.npz \ data/L99_Gravity_Test.nph \ data/edit.png \ data/next.png \ data/paper.jpg \ data/pen.png \ data/tick.png \ data/blank.png \ data/share.png \ data/pause.png \ data/play.png \ data/reset.png \ data/forward.png \ data/help.png \ data/choose.png \ data/undo.png \ data/close.png \ data/record.png \ data/theend.png \ data/femkeklaver.ttf libbox2d_a_SOURCES = \ Box2D/Source/Collision/b2Distance.cpp \ Box2D/Source/Collision/b2TimeOfImpact.cpp \ Box2D/Source/Collision/b2CollideCircle.cpp \ Box2D/Source/Collision/b2CollidePoly.cpp \ Box2D/Source/Collision/Shapes/b2PolygonShape.cpp \ Box2D/Source/Collision/Shapes/b2CircleShape.cpp \ Box2D/Source/Collision/Shapes/b2Shape.cpp \ Box2D/Source/Collision/b2PairManager.cpp \ Box2D/Source/Collision/b2Collision.cpp \ Box2D/Source/Collision/b2BroadPhase.cpp \ Box2D/Source/Dynamics/b2WorldCallbacks.cpp \ Box2D/Source/Dynamics/Joints/b2PrismaticJoint.cpp \ Box2D/Source/Dynamics/Joints/b2MouseJoint.cpp \ Box2D/Source/Dynamics/Joints/b2GearJoint.cpp \ Box2D/Source/Dynamics/Joints/b2Joint.cpp \ Box2D/Source/Dynamics/Joints/b2PulleyJoint.cpp \ Box2D/Source/Dynamics/Joints/b2DistanceJoint.cpp \ Box2D/Source/Dynamics/Joints/b2RevoluteJoint.cpp \ Box2D/Source/Dynamics/Contacts/b2CircleContact.cpp \ Box2D/Source/Dynamics/Contacts/b2PolyAndCircleContact.cpp \ Box2D/Source/Dynamics/Contacts/b2Contact.cpp \ Box2D/Source/Dynamics/Contacts/b2PolyContact.cpp \ Box2D/Source/Dynamics/Contacts/b2ContactSolver.cpp \ Box2D/Source/Dynamics/b2Island.cpp \ Box2D/Source/Dynamics/b2Body.cpp \ Box2D/Source/Dynamics/b2ContactManager.cpp \ Box2D/Source/Dynamics/b2World.cpp \ Box2D/Source/Common/b2BlockAllocator.cpp \ Box2D/Source/Common/b2StackAllocator.cpp \ Box2D/Source/Common/b2Settings.cpp \ Box2D/Source/Common/b2Math.cpp numptyphysics-0.2+svn157/Event.h0000644000175000017500000000441512264274560015625 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef EVENT_H #define EVENT_H #include // custom SDL User Event code const int WORKER_DONE = 1; struct Event { enum Code { NOP, DRAWBEGIN, DRAWMORE, DRAWEND, MOVEBEGIN, MOVEMORE, MOVEEND, SELECT, FOCUS, CANCEL, OPTION, CLOSE, DONE, QUIT, EDIT, MENU, DELETE, NEXT, PREVIOUS, UP, DOWN, LEFT, RIGHT, RESET, UNDO, PAUSE, PLAY, REPLAY, SAVE, SEND, TEXT }; enum Modes { MOD_BUTTON_LEFT = SDL_BUTTON(SDL_BUTTON_LEFT), MOD_BUTTON_RIGHT = SDL_BUTTON(SDL_BUTTON_RIGHT), MOD_BUTTON_MIDDLE = SDL_BUTTON(SDL_BUTTON_MIDDLE), MOD_CTRL = 16, MOD_SHIFT = 32 }; Code code; int x,y; char c; char mods; Event(Code op=NOP, char cc=0) : code(op), c(cc), mods(g_mods) {} Event(Code op, int xx, int yy=0, char cc=0) : code(op), x(xx), y(yy), c(cc), mods(g_mods) {} Event(char cc) : code(TEXT), c(cc), mods(g_mods) {} static char g_mods; }; struct EventMap { virtual Event process(const SDL_Event& ev)=0; }; class BasicEventMap : public EventMap { public: struct KeyPair { SDLKey sym; Event::Code ev; }; struct ButtonPair { unsigned char button; Event::Code down; Event::Code move; Event::Code up; }; BasicEventMap( const KeyPair* keys, const ButtonPair* buttons ); Event process(const SDL_Event& ev); protected: const KeyPair* lookupKey(SDLKey sym); const ButtonPair* lookupButton(unsigned char button); private: const KeyPair* m_keys; const ButtonPair* m_buttons; }; enum EventMapType { GAME_MAP, GAME_MOVE_MAP, GAME_ERASE_MAP, APP_MAP, EDIT_MAP, UI_BUTTON_MAP, UI_DRAGGABLE_MAP, UI_DIALOG_MAP, }; #endif //EVENT_H numptyphysics-0.2+svn157/configure0000755000175000017500000055666512264274560016325 0ustar warp10warp10#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="README" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE RANLIB CPP GREP EGREP SDL_CFLAGS SDL_LIBS PKG_CONFIG HILDON_CFLAGS HILDON_LIBS desktopentrydir serviceentrydir numptyphysicsdir icon_26x26dir icon_34x34dir icon_40x40dir icon_50x50dir icon_64x64dir icon_scalabledir LIBOBJS LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP PKG_CONFIG HILDON_CFLAGS HILDON_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-hildon build without maemo/hildon support Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor PKG_CONFIG path to pkg-config utility HILDON_CFLAGS C compiler flags for HILDON, overriding pkg-config HILDON_LIBS linker flags for HILDON, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version="1.8" ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # Keeping the `.' argument allows $(mkdir_p) to be used without # argument. Indeed, we sometimes output rules like # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more # expensive solution, as it forces Make to start a sub-shell.) mkdir_p='mkdir -p -- .' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=numptyphysics VERSION=0.3 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} AMTAR=${AMTAR-"${am_missing_run}tar"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. #AM_CONFIG_HEADER(amconfig.h) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi { echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Check for SDL ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "${ac_cv_header_SDL_SDL_h+set}" = set; then { echo "$as_me:$LINENO: checking for SDL/SDL.h" >&5 echo $ECHO_N "checking for SDL/SDL.h... $ECHO_C" >&6; } if test "${ac_cv_header_SDL_SDL_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_SDL_SDL_h" >&5 echo "${ECHO_T}$ac_cv_header_SDL_SDL_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking SDL/SDL.h usability" >&5 echo $ECHO_N "checking SDL/SDL.h usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking SDL/SDL.h presence" >&5 echo $ECHO_N "checking SDL/SDL.h presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: SDL/SDL.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: SDL/SDL.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: SDL/SDL.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: SDL/SDL.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: SDL/SDL.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: SDL/SDL.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: SDL/SDL.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: SDL/SDL.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: SDL/SDL.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: SDL/SDL.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: SDL/SDL.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: SDL/SDL.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: SDL/SDL.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: SDL/SDL.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: SDL/SDL.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: SDL/SDL.h: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for SDL/SDL.h" >&5 echo $ECHO_N "checking for SDL/SDL.h... $ECHO_C" >&6; } if test "${ac_cv_header_SDL_SDL_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_SDL_SDL_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_SDL_SDL_h" >&5 echo "${ECHO_T}$ac_cv_header_SDL_SDL_h" >&6; } fi if test $ac_cv_header_SDL_SDL_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_LIBSDL _ACEOF SDL_LIBS="-lSDL" sdl=yes else { { echo "$as_me:$LINENO: error: *** no SDL/SDL.h - SDL not found" >&5 echo "$as_me: error: *** no SDL/SDL.h - SDL not found" >&2;} { (exit 1); exit 1; }; } fi # Check for SDL_image library { echo "$as_me:$LINENO: checking for IMG_LoadPNG_RW in -lSDL_image" >&5 echo $ECHO_N "checking for IMG_LoadPNG_RW in -lSDL_image... $ECHO_C" >&6; } if test "${ac_cv_lib_SDL_image_IMG_LoadPNG_RW+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lSDL_image $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char IMG_LoadPNG_RW (); int main () { return IMG_LoadPNG_RW (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_SDL_image_IMG_LoadPNG_RW=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_SDL_image_IMG_LoadPNG_RW=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_SDL_image_IMG_LoadPNG_RW" >&5 echo "${ECHO_T}$ac_cv_lib_SDL_image_IMG_LoadPNG_RW" >&6; } if test $ac_cv_lib_SDL_image_IMG_LoadPNG_RW = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBSDL_IMAGE 1 _ACEOF LIBS="-lSDL_image $LIBS" else { { echo "$as_me:$LINENO: error: *** Unable to find SDL_image libary with PNG support " >&5 echo "$as_me: error: *** Unable to find SDL_image libary with PNG support " >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: checking for TTF_OpenFont in -lSDL_ttf" >&5 echo $ECHO_N "checking for TTF_OpenFont in -lSDL_ttf... $ECHO_C" >&6; } if test "${ac_cv_lib_SDL_ttf_TTF_OpenFont+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lSDL_ttf $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char TTF_OpenFont (); int main () { return TTF_OpenFont (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_SDL_ttf_TTF_OpenFont=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_SDL_ttf_TTF_OpenFont=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_SDL_ttf_TTF_OpenFont" >&5 echo "${ECHO_T}$ac_cv_lib_SDL_ttf_TTF_OpenFont" >&6; } if test $ac_cv_lib_SDL_ttf_TTF_OpenFont = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBSDL_TTF 1 _ACEOF LIBS="-lSDL_ttf $LIBS" else { { echo "$as_me:$LINENO: error: *** Unable to find SDL_ttf libary " >&5 echo "$as_me: error: *** Unable to find SDL_ttf libary " >&2;} { (exit 1); exit 1; }; } fi # Check whether --enable-hildon was given. if test "${enable_hildon+set}" = set; then enableval=$enable_hildon; enable_hildon=$enableval else enable_hildon=yes fi if test "x${enable_hildon}" = "xyes" ; then # PKG_CHECK_MODULES(HILDON, [hildon-1 hildon-fm-2 libossoemailinterface], if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { echo "$as_me:$LINENO: checking for HILDON" >&5 echo $ECHO_N "checking for HILDON... $ECHO_C" >&6; } if test -n "$PKG_CONFIG"; then if test -n "$HILDON_CFLAGS"; then pkg_cv_HILDON_CFLAGS="$HILDON_CFLAGS" else if test -n "$PKG_CONFIG" && \ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"hildon-1 dbus-1 libosso\"") >&5 ($PKG_CONFIG --exists --print-errors "hildon-1 dbus-1 libosso") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_HILDON_CFLAGS=`$PKG_CONFIG --cflags "hildon-1 dbus-1 libosso" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$HILDON_LIBS"; then pkg_cv_HILDON_LIBS="$HILDON_LIBS" else if test -n "$PKG_CONFIG" && \ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"hildon-1 dbus-1 libosso\"") >&5 ($PKG_CONFIG --exists --print-errors "hildon-1 dbus-1 libosso") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_HILDON_LIBS=`$PKG_CONFIG --libs "hildon-1 dbus-1 libosso" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then HILDON_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "hildon-1 dbus-1 libosso"` else HILDON_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "hildon-1 dbus-1 libosso"` fi # Put the nasty error message in config.log where it belongs echo "$HILDON_PKG_ERRORS" >&5 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } enable_hildon=no elif test $pkg_failed = untried; then enable_hildon=no else HILDON_CFLAGS=$pkg_cv_HILDON_CFLAGS HILDON_LIBS=$pkg_cv_HILDON_LIBS { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } enable_hildon=yes fi fi if test "x${enable_hildon}" = "xyes" ; then cat >>confdefs.h <<\_ACEOF #define USE_HILDON _ACEOF desktopentrydir=`$PKG_CONFIG osso-af-settings --variable=desktopentrydir` serviceentrydir=`$PKG_CONFIG osso-af-settings --variable=dbusservicedir` numptyphysicsdir=/opt/numptyphysics icon_26x26dir=$datadir/icons/hicolor/26x26/hildon icon_34x34dir=$datadir/icons/hicolor/34x34/hildon icon_40x40dir=$datadir/icons/hicolor/40x40/hildon icon_50x50dir=$datadir/icons/hicolor/50x50/hildon icon_64x64dir=$datadir/icons/hicolor/64x64/hildon icon_scalabledir=$datadir/icons/hicolor/scalable/hildon else desktopentrydir=/usr/share/applications serviceentrydir=$datadir/numptyphysics numptyphysicsdir=$datadir/numptyphysics icon_26x26dir=$datadir/icons/hicolor/26x26/apps icon_34x34dir=$datadir/icons/hicolor/34x34/apps icon_40x40dir=$datadir/icons/hicolor/40x40/apps icon_50x50dir=$datadir/icons/hicolor/50x50/apps icon_64x64dir=$datadir/icons/hicolor/64x64/apps icon_scalabledir=$datadir/icons/hicolor/scalable/apps fi { echo "$as_me:$LINENO: checking for main in -lstdc++" >&5 echo $ECHO_N "checking for main in -lstdc++... $ECHO_C" >&6; } if test "${ac_cv_lib_stdcpp_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lstdc++ $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_stdcpp_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_stdcpp_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_stdcpp_main" >&5 echo "${ECHO_T}$ac_cv_lib_stdcpp_main" >&6; } if test $ac_cv_lib_stdcpp_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBSTDC__ 1 _ACEOF LIBS="-lstdc++ $LIBS" fi { echo "$as_me:$LINENO: checking for main in -lX11" >&5 echo $ECHO_N "checking for main in -lX11... $ECHO_C" >&6; } if test "${ac_cv_lib_X11_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_X11_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_X11_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_X11_main" >&5 echo "${ECHO_T}$ac_cv_lib_X11_main" >&6; } if test $ac_cv_lib_X11_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBX11 1 _ACEOF LIBS="-lX11 $LIBS" fi { echo "$as_me:$LINENO: checking for main in -lz" >&5 echo $ECHO_N "checking for main in -lz... $ECHO_C" >&6; } if test "${ac_cv_lib_z_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_z_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_z_main" >&5 echo "${ECHO_T}$ac_cv_lib_z_main" >&6; } if test $ac_cv_lib_z_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" fi ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim CYGPATH_W!$CYGPATH_W$ac_delim PACKAGE!$PACKAGE$ac_delim VERSION!$VERSION$ac_delim ACLOCAL!$ACLOCAL$ac_delim AUTOCONF!$AUTOCONF$ac_delim AUTOMAKE!$AUTOMAKE$ac_delim AUTOHEADER!$AUTOHEADER$ac_delim MAKEINFO!$MAKEINFO$ac_delim AMTAR!$AMTAR$ac_delim install_sh!$install_sh$ac_delim STRIP!$STRIP$ac_delim INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim mkdir_p!$mkdir_p$ac_delim AWK!$AWK$ac_delim SET_MAKE!$SET_MAKE$ac_delim am__leading_dot!$am__leading_dot$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim DEPDIR!$DEPDIR$ac_delim am__include!$am__include$ac_delim am__quote!$am__quote$ac_delim AMDEP_TRUE!$AMDEP_TRUE$ac_delim AMDEP_FALSE!$AMDEP_FALSE$ac_delim AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim CCDEPMODE!$CCDEPMODE$ac_delim am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim CXX!$CXX$ac_delim CXXFLAGS!$CXXFLAGS$ac_delim ac_ct_CXX!$ac_ct_CXX$ac_delim CXXDEPMODE!$CXXDEPMODE$ac_delim am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim RANLIB!$RANLIB$ac_delim CPP!$CPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim SDL_CFLAGS!$SDL_CFLAGS$ac_delim SDL_LIBS!$SDL_LIBS$ac_delim PKG_CONFIG!$PKG_CONFIG$ac_delim HILDON_CFLAGS!$HILDON_CFLAGS$ac_delim HILDON_LIBS!$HILDON_LIBS$ac_delim desktopentrydir!$desktopentrydir$ac_delim serviceentrydir!$serviceentrydir$ac_delim numptyphysicsdir!$numptyphysicsdir$ac_delim icon_26x26dir!$icon_26x26dir$ac_delim icon_34x34dir!$icon_34x34dir$ac_delim icon_40x40dir!$icon_40x40dir$ac_delim icon_50x50dir!$icon_50x50dir$ac_delim icon_64x64dir!$icon_64x64dir$ac_delim icon_scalabledir!$icon_scalabledir$ac_delim LIBOBJS!$LIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF CEOF$ac_eof _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 1; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :C $CONFIG_COMMANDS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # We invoke sed twice because it is the simplest approach to # changing $(DEPDIR) to its actual value in the expansion. for file in `sed -n ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi numptyphysics-0.2+svn157/App.cpp0000644000175000017500000002074312264274560015621 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "Common.h" #include "Array.h" #include "Config.h" #include "Game.h" #include "Scene.h" #include "Levels.h" #include "Canvas.h" #include "Ui.h" #include "Font.h" #include "Dialogs.h" #include "Event.h" #include #include #include #include #include class App : private Container { int m_width; int m_height; bool m_rotate; bool m_thumbnailMode; bool m_videoMode; std::string m_testOp; bool m_quit; bool m_drawFps; bool m_drawDirty; int m_renderRate; Array m_files; Window *m_window; public: App(int argc, char** argv) : m_width(SCREEN_WIDTH), m_height(SCREEN_HEIGHT), m_rotate(false), m_thumbnailMode(false), m_videoMode(false), m_quit(false), m_drawFps(false), m_drawDirty(false), m_window(NULL) { for ( int i=1; i 0 ) { test( m_testOp ); } else if ( m_thumbnailMode ) { for ( int i=0; i 0 ) { putenv((char*)"SDL_VIDEODRIVER=dummy"); } else { putenv((char*)"SDL_VIDEO_X11_WMCLASS=NPhysics"); OS->ensurePath(Config::userDataDir()); } if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER) < 0) { throw "Couldn't initialize SDL"; } } void renderThumbnail( const char* file, int width, int height ) { configureScreenTransform( width, height ); Scene scene( true ); if ( scene.load( file ) ) { printf("generating bmp %s\n", file); Canvas temp( width, height ); scene.draw( temp, FULLSCREEN_RECT ); std::string bmp( file ); bmp += ".bmp"; temp.writeBMP( bmp.c_str() ); } } void renderVideo( const char* file, int width, int height ) { configureScreenTransform( width, height ); Levels* levels = new Levels(); levels->addPath( file ); add( createGameLayer( levels, width, height ) ); Rect area(0,0,width,height); Canvas canvas(width,height); int iterateCounter = 0; for ( int f=0; fonTick( f*1000/VIDEO_FPS ); iterateCounter += VIDEO_FPS; } iterateCounter -= ITERATION_RATE; m_children[0]->draw( canvas, area ); char bfile[128]; sprintf(bfile,"%s.%04d.bmp",file,f); canvas.writeBMP( bfile ); } } void runGame( Array& files, int width, int height ) { Levels* levels = new Levels(); if ( files.size() > 0 ) { for ( int i=0; iaddPath( files[i] ); } } else { struct stat st; if ( stat("Game.cpp",&st)==0 ) { levels->addPath( "data" ); } else { levels->addPath( DEFAULT_LEVEL_PATH ); } levels->addPath( Config::userDataDir().c_str() ); } add( createGameLayer( levels, width, height ), 0, 0 ); mainLoop(); } void render() { if (isDirty()) { Rect area = dirtyArea(); //fprintf(stderr,"render %d,%d-%d,%d!\n",area.tl.x,area.tl.y,area.br.x,area.br.y); m_window->setClip(0,0,SCREEN_WIDTH,SCREEN_HEIGHT); draw(*m_window, area); if ( m_drawDirty ) { Rect b = area; b.br.x--; b.br.y--; m_window->drawRect( b, m_window->makeColour(0x00af00), false ); } if ( m_drawFps ) { m_window->drawRect( Rect(0,0,50,50), m_window->makeColour(0xbfbf8f), true ); char buf[32]; sprintf(buf,"%d",m_renderRate); Font::headingFont()->drawLeft( m_window, Vec2(20,20), buf, 0 ); m_window->update( Rect(0,0,50,50) ); } m_window->update( area ); } } void waitActive() { #if MAEMO_VERSION >= 4 SDL_Event ev; while ( SDL_WaitEvent(&ev) ) { OS->poll(); switch( ev.type ) { case SDL_QUIT: m_quit = true; return; case SDL_ACTIVEEVENT: if (ev.active.gain > 0) { return; } break; } } #endif } bool processEvent( SDL_Event &ev ) { switch( ev.type ) { case SDL_QUIT: m_quit = true; return true; case SDL_ACTIVEEVENT: printf("active: %d\n",ev.active.gain); if (ev.active.gain == 0) { waitActive(); } break; case SDL_MOUSEBUTTONDOWN: if (ev.button.x < 10) printf("clicky: %d,%d\n",ev.button.x,ev.button.y); break; case SDL_KEYDOWN: switch ( ev.key.keysym.sym ) { case SDLK_1: case SDLK_f: m_drawFps = !m_drawFps; return true; case SDLK_2: case SDLK_d: m_drawDirty = !m_drawDirty; return true; case SDLK_q: m_quit = true; return true; case SDLK_3: fprintf(stderr,"UI: %s\n",toString().c_str()); return true; default: break; } } return Container::processEvent(ev); } virtual bool onEvent( Event& ev ) { switch (ev.code) { case Event::QUIT: m_quit = true; return true; default: break; } return false; } void mainLoop() { render(); m_renderRate = (MIN_RENDER_RATE+MAX_RENDER_RATE)/2; int iterationRate = ITERATION_RATE; int iterateCounter = 0; int lastTick = SDL_GetTicks(); bool isComplete = false; while ( !m_quit ) { OS->poll(); //assumes RENDER_RATE <= ITERATION_RATE while ( iterateCounter < iterationRate ) { onTick( lastTick ); SDL_Event ev; while ( SDL_PollEvent(&ev) ) { processEvent(ev); } if ( m_quit ) return; iterateCounter += m_renderRate; } iterateCounter -= iterationRate; render(); int sleepMs = lastTick + 1000/m_renderRate - SDL_GetTicks(); if ( sleepMs > 1 && m_renderRate < MAX_RENDER_RATE ) { m_renderRate++; //printf("increasing render rate to %dfps\n",m_renderRate); sleepMs = lastTick + 1000/m_renderRate - SDL_GetTicks(); } if ( sleepMs > 0 ) { SDL_Delay( sleepMs ); } else { //printf("overrun %dms\n",-sleepMs); if ( m_renderRate > MIN_RENDER_RATE ) { m_renderRate--; //printf("decreasing render rate to %dfps\n",m_renderRate); } else if ( iterationRate > 30 ) { //slow down simulation time to maintain fps?? } } lastTick = SDL_GetTicks(); } } void test( std::string op ) { if ( op=="levels" ) { Levels levels; for ( int i=0; i Build-Depends: debhelper (>> 5.0.0), dh-buildinfo, libsdl1.2-dev, libsdl-image1.2-dev, libsdl-ttf2.0-dev, zlib1g-dev ,libhildon1-dev, libosso-dev ,libhildonmime-dev, libgtk2.0-dev, osso-af-settings Standards-Version: 3.7.2 Package: numptyphysics Architecture: any Depends: ${shlibs:Depends} Description: crayon based physics puzzle game XB-Maemo-Icon-26: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xh BQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAA OpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqc GAAAAAl2cEFnAAAAMAAAADAAzu6MVwAAGHNJREFUaN61mHmQXVd9539nuet7777X 7/V7vam71ZK6pda+WLKRrdiWDRYQDDgEbAzYZMr2TIptKhkyBYTJTE0lDJAigCHJ ENvsEAImxngFIlk2XmRtlrW4JXW3elFvr9/+7nqW3/yBweMCY8ZkvlW36v5x7q3v 5/x+55zf75BWs5prhaJAOW+6BvPn55YDL5sGy3GBUgqtdgsoI5DLZgEBIW278Eu1 22342lfuhnfefBMAJYQQANdxIQoD0KjRdlKgFBKtFFQqZaCUAGMUCoUCJkkC+Xwn AAAkCUIQNAAAiGu5jHEKQktNCdWGQWFpKYKurjT8JpFGq5mK4wQMTjUBgu1WElk2 B8MiQAmBOIkp5yYwZqCUEimlkPOyAADg+z7Yjg21SpUkUjBuGKaSEm3LFoQQRSil ruOkOOcpFMhAAWipBAIGSEAolIgENeVUISKgAitUYZdt2LZruw2pRC2O47haraLn eZDLdfwaACeEaNSSakU154bsW1GCIIhAyggIIYQRwxCx5GBAzJkplZK/+lgpBYEf ADcMAEZRa41SStCGooSAzhjZ1I/O3L/1YvviVkBMSyUkBVrbXNw0vzK7MkpbaZk2 0w2LWnUgRAlMil98+gs7JuoTpWuHrp19++gNxxzDOu9lMwElgIgIhJCXA6DGxLJs RglKypkOkzJoTIOUCgAAKOVMK0GZTSjqhFFKdK3eRgIKPM8DAIBWu4EGMVUQRbHr OpQQggQQOeXGsYWjQ/985p+v3FjcKNJmmnDCK6crZ1a1kqbnGi5lhJUlymWTmsxg ZuHY4rH8rp6d6l/H7iuMV8czt2+9XRbswrmfPf508gd7tv96BBBRmYarGGUAgMBo CliKgg8SpJRAKCSGwbhIEicRCbEdNwAUCRCASqUMhUIRgjCBUmcnBFGsgVA0bBeD Zg3AwehNq98488zcM1OrcqvIjp4d5u7e3eenG1ONJ2af6GjEDaMt2hEqZAjY2Ywb 1nWr3nD6I5d+ZOLI3OG+vzv0+ZX7p/aP3rzlPYtX772kIhOFYdQGx35pPZCX0kHA 7OwsFAoFQERCKSFSIqGUEpHEVGlpaVTcNOyIMZYgomaMoNYInvfy3KzXa8A5A4KU oVbFo0vHd91z4quXSS3N0c7Rqbeve9vCutxIEwzaBkraOlE6EmE60QmkLW9Bo6yZ zOr58CMfvgIBzf951f94yrMy55pBM9BEq5zXCc1mHbLZjpcAKpUyEEJAKcU0amJw A8IwcizTVpTRiDFKANAIw4gTQtC0LMEok5lMRgdBAKlU6mUQzWYLTDcNfn2Zp51M fjmo9Cc66fzGqW/0Pbf4XF/BzhsWt+J9a/Yt7O7dvcjBaLqWW6WctgAhVkLqs7Wx ob8/+g8butJd4tbNt1zoTJWmCcASoRglfhkNO/dygF/MdsKEFGhaNiSJ4IwyzZgh TNsEmSRcCGErKU0A1JZt+xnPE3EUgffizvRLRVEElfZJyKaGAJRJbe5w0GBX4+rA j87df+mD5x/cc7L8fH9fps8fyY9UAaGqUC1SQuOslQ3/cPWbz7+u/7Lp44vP5R4Y f3B0sj7RM5gdLH9o5wcP5+2O8VBHAWhEUq0sEUoIKCURKAdEIBqRSKWokpo6tqMq 1WW1oq8L/CCijHJDK2kkIkaDG5Gbzqg4CqFQKMIrablchkJnJywuLbBSppifbF3Y 9pmn/3ZnwcmnMmY6rEY10U5aMlEJGMQo+iLobCbNyl9e/vFHtvdccmqhvVC879y/ 7jhZPjXUm+5euHXz+w70eCvOAyeCEwJMSkEQUTWbVe30DKGT+IAIAAwMpZQslbrB dTMQqgzEQU07Bo8Zo5pQqpMoBErpK5qvVJYgn++ESm2Jdnmd6UMXDw3eefTL2a1d W45/8JIPThmW1QQKGggQlGhFUViaa81t+6uf//cdB2YObNk+eMlUxkxP3XHJfwwe v3CAfvKxv9pwRe/liz1e/3y9VmnwRAgKAIQzrnLZAkBUBct2UApA07YjCUoLJcnM RA0wPmBz02YivSWybIcCAHDbUYj4G803my1QOoZmu0Ec6qaPL5zY8PmjX1y/o2tH +U+33XEyEdF8tVUWBCgYlgkGN4iWONef6RNpllrzo7P3b3V5qnr71tsOijiu9KZ6 J3rSPZuOLB5dvXvw8mOO5bYoAEXDsBQ3TCBME9QE2u2IGoaBpskUKE2CyKYMny7l 6V03pOS9e5VKnCCMbKmUCYAEUQMAACK+7OGcQNv3wWEObSSNrm+e/vbO7nR36ZbN 773IGV9UFBPXSWNXdx/mO4ooEqmFEJFpOpViqrNGgXY/eP7Bq/ZP7b/KMMyh1fkR sqG4Pjy2dDzlC981qUG4lIoTQlBrqYUUhBKeSKk5AFGMcWBmEaUPRlb/22Umnr41 JqlH/MTbn01rSQjVURT9asYfeeQR0FqD53k0nU5r27Yh46UgFjHxLM+shMuZnN2R FOzORqCamgIYGrX22w2FiNBqhmAaJkEpjXl/QW3v3j61ItPXuvPIlzZ8f+wHPd1u Nxmvj7Net2faM7xmqALNCWgniiLJONVSCsUIxTiJBOcGaK1J1gOMa0dtSz+1i2Kt jzK2WFH5YDAHKggaEEW/qI8AAH76059CHMcwOjqKIyMjoJSCSy/dCZpq7RlZ3zO9 oC1auUAF2SRW2TAK0TRNnxAaKaWQW0BSpu0u+At9vgicdYW1xz+w8wNn826+++mL T/eMN8a94dzqyfdvuOVwKMJlhUpzSkAwSgQB4JRSBUQR0wBkFHkcBUY78ZRHD/RQ Chs19GjKU/WebsDm4guY71sH9cYUDA6sBACAz372s78Mxq8WRbPVBM45AoWwL7Oi fWzp2MBic7GUM7JLlNKYMYaICKZpgkc9vugv9v3D8X/cqFEl+1Zfd4JRevp9m29h 7938vlylXc5IKRodZm4+wiT6+j1fA8opCwzGBaUs4tyQnBnEslJMa5WKkzhPxWyJ Jie3KbrClmztYkKGGW+Dg3aBXH/TOki7Lvw2IQLYtoOgIdhR2jFb9svxudp4sSPb CalUqqm1TmKhod32GUVILzQX1hycfnzVnr4ryhtKmy/4id9ohbVlP2qMZ63sibzb eSHWceAvVfG2224HrilB0zCAEIZhlAClhABoJoXknNnMUIfXoG7sEsaen3NxtF/K oF+Laoa7PP7qnU8IBPytAEpK8NttsJkdrcmvGb925bWrHpj48YrubFf/5tKmSpO0 aJal0ozSzoutmRVHlo6si1UstnRtvgCILZEkhBAgnHMdyUB52cLL/k+V1ERrTRGR U0oNAIML5TKBXqxJNmLi+Gqt0Y1w3RNA6LhNJvJEVe0glAahnCyXyyDlK0O47i8a o4QkcjA/uHDD8A1Ts43ZrsenD64HjTnP9EoHpx/b9ec/+y9v+diBT+x9dv6w9/rB a86vz6+brzaXKCFAhRCQJAkgIkxPjb+8GqWUOVGskZopIcAiXM54NDraaatFl1BY YeLzI4rmD0W47TkX7/U4zu0xyEyvoL3NgDriyVZO/d2/AMJbEKELANoA8N2Xanbb tiEMQxBCIKQgZpxFjPGMQfggIKz6ycTDmW+c+s4mAsRZ4w1ffNfoOyZsas5ppRpS KWISE17sBYiUElIpD5u1JiBoyHbkgCcy6tCiZablU4Ytjw1StbCRYnkAMOkmujVE Acdj+7Zv+7Srkcb1Z5ha3O0k//KelH7wDAS18+/Iy+iP8ww+c6kLSDN+onvPFr4D tWcPPwy7du4DAHixCflFf8E4BQSdnqxf2Hr3c3erp+eeWdpYGJ26fdsdky46cwkk VYIqiWRETW4AKC0ZZ6g1EgDgAEorHSvbMaBeKwNnEKEnP3e5Kc5dhcTTmhQrkm4Z V7Rj1lTHCCHRqcTcU+42GnY294GmaMCTkBy5kqrFIdStPMWYALEHqKwOAPqnCdv8 jwSwdjH/6IuncRMeffRR2H3FFSRs+ZbFLM8XQce3Tn9n8OqBq2rvXf/uE7v7Xves ZTmLraCeXHjhFPYNjYCSAgzLoowzQK0wCROkBgeNmnDOmZRME0KQo1ZNIqsciO5K 7L0/jI19j0q6to666Uox8LhB47pl5ev1qFb6389/eeu6/Fq8dsVbv4pqsqLEkkaa T5ni0PWGeCrQmPlRAsMzWCEwJQ5BLBII2j7suXIPMcF0QxmuOXDhwNZIRN0D6QF3 c3ET31ra5qPU9e/at8QjY7cRN5UixZ5erCwvAgCARkQlJTCDAlDQKDVljHIA0IQQ YP/1439jxLpY5TiRIqqmfDl86myyup63owjJmmVlbl92uNSIOHDPiXve+OzC4eGr V/7h+U5v6zmx8K06Wr2mmfxkC6JxdEJ/5aeDKys+ede98LkP9UEUxYAMSc7J2s24 ufrOI3de9fDEI1tnW7NdoQrdcrCcLLQW/H6jp7axsa/ZiupEI7AkDrVpWIQQQrXS aNkOUMqAMQqcG0gpQ0IoIhKgMq71g3NJJM1rf8Kg6nbgV961i33kmrR/d6/Nl4Rr +lJiojvdQlBwC3imcmbobG1siAGkIH9t3hY/eR3FRiLMPUc3hLn4wvzV0PhOE7TW 4LdbJMPT7kJjYfj+8/fvOTB9oP9Dl3xw7L0b33PEYub4GwaumV0MF3N3j31917P1 46N9pQHbsm0ltURETQkiV0rQKPSZH/qQTnsgpYQgCLUQaQjDGLhSChhEUqb+eAyx 7tvq0DVUHr6R49FTbTF8N0utDNLczQJQbzS/jj8++7gz155Po17y7PbfXgFANkt+ yb3z6qZZ6FkJtrLA8zxo+01Wynbl2kl75Jsnv7n7h2M/HHjDqtefvWZo74lA+qsH swNnrx958+msmRNfOv73G747+YPLN/RsqK/ftLNZLc8BACChBBGRaq01ZQyazQYx TRMMA7Ejb/5iG3Wc1IzSSigdimfsj47txGO1dPQFm8oZTUiWLLYv9Hxl7L5LPdPZ stQ8dMnGjlx6tLDKI8zrojQ1rGgXsMJftNbaXgbJW0Ia+iKMfEzzTO6B8Qd2/uCF H1wx3ZwuvHX4radu23bbQYlydkNxw+x/2/NJt5TpKufMjkzJKa0/pU4Pt2XQDSFc AADJGNeMUWnbDgqlgDFGCCGEUor/d/nOTcvxERGz2Rxg6/OwWC4KqmYF4d3nC91X BrNzx7v3Tx8YAHFx1KSxVxWUfv7Qp3etyW8v7i2Nrhiyps2nznz9HYLmpzYVN1wY LY3Om8wM60F1xQ/H7r3EpKZ747obj103dN2TKZYaT3QYD+VXtygQ4gd1DYSZEhVQ Qh3GDRtAMCGlNFMOqEhrDQCMceCcE60VEkJedmpyz8siAMBDDz0EEPwYKBoMAU0N rlFug1qRGln63OU3T0D8TFcNNr4wFdodXz525+jxpe+uZXIHyfeUwwOT3+x6bLFd Ljgdc9u6t5Uv7dkVzDRncrGKix+94qNH1njDByIVzVT9amQwAwEDDajBMC0CBIFQ AoRS4IZJgDHiuAxQIsQiAq0VWJbzqwJRSgkd+dJLAL982bdvH5SnWyCcy5sYPDpF dHmY+E8P0uRotk/v7wJ7xf6ejred3m5m1z45d9haqt6Xubn3fG+35ZPbRjYf3bRi 93NTzRn27Pyzqx8Zf2Qg0YlTcArt75/5/nMf2/3xlohF3JHNoRQSABCETACAAhAF BAgQQoESCkApZDIlqNdr0NW9Al5NvwIghMDsxQlY0dMbt8f5RYrh9W70tQGiLrY0 7TwSk41POTSfPL/43LozlbHwxqHLzqxyjzGFwtpYGHhw8+r3P0y5lTk4e/D1n3js L729g3sbP5v6NzFZv6CBAzFtk0Rx/GL/jGA7aSJFQoExBoAUUBMATUAkZHLuAuTz Ha9q/mUAAABhgICzBJrsL5aYOrnM1Zgr6PD+Jnnbftr9xkYHQO8DEw+sbsR1sq7v Yw8L4xtnIT62SbCRY/PN1IU1ndBzvnY+6Ep1T7x/062nu9PdfsHKT8k48aVSqJQC QgFsy4Yo9GkYBiaX1PQD3yBIDBTaaYVts7u7KxJCYqV6EQr5vt8d4FOf+mv4p386 BfXJxZm86X6JgNBNesPFnr7tcRyEPCE0M1YbSw3lVs2tK25/XibVk1zN+UydpZ6V WHP1xa6D04+XNnSun+tJ9Tx5x/Y7FqQQUStuBQBMp1IOSClBxIkBAAYg4Vrr1IX2 VC7WsWdQM48ALmWklU0VsFFb+n+LwF133QV33XUXrPs0xjq5+ry7DuBPB2N4Tz4A i5lYDpaCjcWNJ4dyQ37atGfasNMn9uySUiLKO2B/d2z/Gj/xc/tWXXfGYMZcvV2r WVZKO04WlIpBCAEAwKSQBiEourr7wvHJ014jqg9X/Vr/N09/e+T9W2491Eu6ynHc 1oiv6v/lAL/UCx99qRy+sdkEIRBiHeuMlV36s8v/7EkElO2gFdTmZlVH900XGeWM MbL66blnVhbtzmidt3YmEH4QBoE2DQ4iSSCOYwBCwDAMBCAKkcmbf/hOvH3gPwzG Ml6zvmOtd6x8fPgmFZVA0/FwuSppLv2qAPTVBnieB0mSwEM/egApI5EfBfV24Lds x1GZzkEoLy+BRQ3ndPXM0HJY6R7Njy6ZxFhSqOTC/EWIopCEYfDi3RMDSqlmjIp7 vvBJ/Nbe7xkNv7aqGbeg31uxYDDTDFRYQNCGk8sCQ/L7AwAAFItFePct7wHHdsBL ZzDnZcEyTCCEQtrNEW5aqYcnHh4yKHfeNPLGSdOxylqjWj28llDGgVKKnDM8e3YS RNAGVKg3jWwBsMCTHC0NevKygcseIwDtx6Yf6yHMchPQRMGr59DvBPBKIgTAsg0A DeZMc9Y1qdnuMDvmhZIhIDJEbRoGNymlTGtka0cGOaGMUaLIjn3XU0CZW8JK0uF2 zHY6nacSLdphEuW0iJ1ECRIEbcDKLJz7LYvhNQMslxdfvIFTVEuRCpLAZpQt5918 I5GxQQgxAVEyygQQoggAAgJybuiJc+cQhbTq7UrXscXjmcHs4MLq3KpoJD+sxuvj He2kVcpQJ1NIdViBlaI9QQPardq/L4BtOxAEAWTdrDnVmOr1RdBfSpVSFKFDC1U0 qOGkMY0pmcV8uggdTlE3lyuqtVTh+VKxxIAMPDH1xJZKUMle2XfFfCBCMducdSxm rTqx9PzeqfrUVfPN+fUMaZYAUsuiUK9Xfs0Hfw3eAQBAIwC1PKCGwU5UTmZPlE/0 psxU/73n79PrsiOTuqkaQAC1kh4QwEajDoopnXJSySpzdUKAWk8vHRq1me3vLG4P v3jkS9vaSbt3KSjbn3rmM1emjNSqotN57N0b3hXtHtwTLAWV2PoN8/2aAZRS0FPM ASQAQ7mVKmfn5FRjqvtTT/2vq0tOcYtFrJAzw0at0wkmOZS6EOpIaaLn3jS0b9zi lnihfi69u/d1J+8+9XXvnpNf22Vxa9Wa3Orl92+69dhEY3Ky5HbOdKd6/DgJdSlb glb719PoNQNQCpAkEXDJ+cX6LDOoMfehHR9of/rQZ3O7endWUpCuASXSYMy9b/z+ jRSJ2JTf0P7x9EMbH5//ecpi9uSb17ypYnKr+InHPrlmR8/2GgE65Qu/vbN316G3 j7z9KaBYEyB9CVpKvw2GYfz7AQAASKWJlrGyqDV//fBbjlDgQ5zwjhvWvv3QSnfl WSAkBK3zJjFmHps+uPds83w/EGA7e3Yuv2PtO565//z9vQ9MPOi8c+0fnf1PW++Y +t4L39/wrTPfWfXk/JPkxk3vrisQdYu7yJUGztlv9PB7RIADEIYJBOFl/ZeNXTlw Ff71M38z0J3qbnSY+XORisaQoNCopm9Z/96ZXrebXPTn9nYudrrfe+H7HY24MfR8 +fnGNf1XP/fnO//zM4ZhNjaWNlTXLa1tnK2cbQECCBlCHIeQSmdf0cdrBpBSAkgJ tp1SUdtP5oJJ51T5VG60MHqx6BSXIvD9KIrRNMywGtaCP+jf820i8ajL3A+fbZzL bSluXv6Tzbfs73dXnNUEl+pRA69dec3hnT07JyMVhX7UDCgDxFcpiF7zNtrR0QFC JBAELbC4aU23p7sqUdXaVtpaTZSICGGoFGqlkNmWQ6lrzAmixkYLaw92OoXztmnN ru3cMJagmA9UmKBWqu7Xmg6zL3RleuaiuB1XKstAX8Xh73USKyWh3WyAYznWycqp zqzl8eH8mqpClWiNYFkWEkKQMc5Ro2umbH+kOPJkt9s1c3D68SwQ7TJKwTVt4NxA zrmWKEUsImkYNvYPrAY3lfv/B2AaHNyUDQDAlFYpRhmjlEeO7UZSCp0vFIFzrihl ISIGSKCesbypFZm+heWwkp+tT5cc7hhOKguu66JlOYoxQx8+/CjYtvs7efg/9YdC sCjnBTwAAAAldEVYdGNyZWF0ZS1kYXRlADIwMDktMTEtMjJUMTc6NTc6NDkrMDA6 MDCvZvmYAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDA5LTExLTIyVDE3OjU3OjQ5KzAw OjAw8NePrAAAAABJRU5ErkJggg== numptyphysics-0.2+svn157/debian/changelog0000644000175000017500000000106412264274560017464 0ustar warp10warp10numptyphysics (0.3.0.9) unstable; urgency=low * action replay * updated physics engine * supports different screen sizes * menus -- Tim Edmonds Thu, 16 Jan 2008 15:48:31 +0000 numptyphysics (0.2) unstable; urgency=low * improved editor * more levels * web catalog * mimetype/hildon integration * bug fixes -- Tim Edmonds Thu, 3 Apr 2008 15:48:31 +0000 numptyphysics (0.1) unstable; urgency=low * Initial Release -- Tim Edmonds Thu, 13 Mar 2008 15:48:31 +0000 numptyphysics-0.2+svn157/debian/postinst0000644000175000017500000000066212264274560017423 0ustar warp10warp10#!/bin/sh if [ -x /usr/bin/update-mime-database ]; then update-mime-database /usr/share/mime fi if [ -x /usr/bin/update-desktop-database ]; then update-desktop-database /usr/share/applications fi if [ -x /usr/bin/osso-update-category-database ]; then osso-update-category-database /usr/share/mime fi if [ -x /usr/bin/gtk-update-icon-cache ]; then gtk-update-icon-cache --force /usr/share/icons/hicolor fi #DEBHELPER# exit 0 numptyphysics-0.2+svn157/debian/compat0000644000175000017500000000000212264274560017007 0ustar warp10warp105 numptyphysics-0.2+svn157/debian/copyright0000644000175000017500000000220312264274560017541 0ustar warp10warp10This package was debianized by Didier Dhollande on Jun 6 2002, and is maintained by Romain Francoise . It was downloaded from http://fabrice.bellard.free.fr/qemacs/ Upstream Author: Fabrice Bellard Copyright: This package is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian GNU/Linux systems, the complete text of the GNU Lesser General Public License can be found in `/usr/share/common-licenses/LGPL'. numptyphysics-0.2+svn157/debian/postrm0000644000175000017500000000066212264274560017064 0ustar warp10warp10#!/bin/sh if [ -x /usr/bin/update-mime-database ]; then update-mime-database /usr/share/mime fi if [ -x /usr/bin/update-desktop-database ]; then update-desktop-database /usr/share/applications fi if [ -x /usr/bin/osso-update-category-database ]; then osso-update-category-database /usr/share/mime fi if [ -x /usr/bin/gtk-update-icon-cache ]; then gtk-update-icon-cache --force /usr/share/icons/hicolor fi #DEBHELPER# exit 0 numptyphysics-0.2+svn157/debian/numptyphysics.sharedmimeinfo0000644000175000017500000000112012264274560023456 0ustar warp10warp10 NumptyPhysics level NumptyPhysics collection NumptyPhysics recording numptyphysics-0.2+svn157/debian/rules0000755000175000017500000000523712264274560016700 0ustar warp10warp10#!/usr/bin/make -f # Sample debian/rules that uses debhelper. # This file is public domain software, originally written by Joey Hess. # Uncomment this to turn on verbose mode. export DH_VERBOSE=1 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) CPPFLAGS = -Wall -g ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CPPFLAGS += -O0 else CPPFLAGS += -O3 endif ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) CPPFLAGS += -g -O0 -DDEBUG else CPPFLAGS += -DNDEBUG endif #maemo ifneq (,$(findstring arm-linux,$(DEB_BUILD_GNU_TYPE))) CPPFLAGS += -fomit-frame-pointer #internal compiler error under maemo scratchbox #CPPFLAGS += -frename-registers CPPFLAGS += -ffast-math #omap2 # CPPFLAGS += -mcpu=arm1136j-s -mfpu=vfp -mfloat-abi=softfp #omap3 # CPPFLAGS += -mcpu=cortex-a8 -mfpu=vfp3 -mfloat-abi=softfp CPPFLAGS += -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp CPPFLAGS += -ftree-vectorize -fsingle-precision-constant endif config.status: configure dh_testdir # Add here commands to configure the package. CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CPPFLAGS)" ./configure --prefix=/usr configure: ./autogen.sh build: build-stamp build-stamp: config.status dh_testdir # Add here commands to compile the package. $(MAKE) touch build-stamp clean: config.status dh_testdir dh_testroot rm -f build-stamp # Add here commands to clean up after the build process. $(MAKE) clean $(MAKE) distclean dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs # Add here commands to install the package into debian/ $(MAKE) DESTDIR=`pwd`/debian/`dh_listpackages` install # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot # dh_installchangelogs # dh_installdocs # dh_installexamples # dh_install # dh_installmenu # dh_installdebconf # dh_installlogrotate # dh_installemacsen # dh_installcatalogs # dh_installpam dh_installmime # dh_installinit # dh_installcron # dh_installinfo # dh_installwm # dh_installudev # dh_undocumented # dh_installman dh_link dh_strip dh_compress dh_fixperms # dh_perl # dh_python # dh_makeshlibs dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install numptyphysics-0.2+svn157/debian/install.sh0000644000175000017500000000414712264274560017621 0ustar warp10warp10#!/bin/sh CURDIR=$1 if [ x${CURDIR} = x ]; then echo CURDIR not set!! exit 1 fi #mkdir -p ${CURDIR}/debian/numptyphysics/usr/bin #cp `uname -m`/Game ${CURDIR}/debian/numptyphysics/usr/bin/numptyphysics #mkdir -p ${CURDIR}/debian/numptyphysics/usr/share/numptyphysics #cp *.nph ${CURDIR}/debian/numptyphysics/usr/share/numptyphysics #cp *.png *.jpg ${CURDIR}/debian/numptyphysics/usr/share/numptyphysics mkdir -p ${CURDIR}/debian/numptyphysics/usr/share/pixmaps cp data/numptyphysics64.png ${CURDIR}/debian/numptyphysics/usr/share/pixmaps/numptyphysics.png if [ -x /usr/bin/hildon-desktop ]; then echo installing for MAEMO desktop mkdir -p ${CURDIR}/debian/numptyphysics/usr/share/icons/hicolor/scalable/hildon/ cp data/numptyphysics64.png ${CURDIR}/debian/numptyphysics/usr/share/icons/hicolor/scalable/hildon/numptyphysics.png mkdir -p ${CURDIR}/debian/numptyphysics/usr/share/icons/hicolor/26x26/hildon/ cp data/numptyphysics26.png ${CURDIR}/debian/numptyphysics/usr/share/icons/hicolor/26x26/hildon/numptyphysics.png mkdir -p ${CURDIR}/debian/numptyphysics/usr/share/icons/hicolor/48x48/hildon/ cp data/numptyphysics48.png ${CURDIR}/debian/numptyphysics/usr/share/icons/hicolor//48x48/hildon/numptyphysics.png mkdir -p ${CURDIR}/debian/numptyphysics/usr/share/applications/hildon cp debian/numptyphysics.desktop ${CURDIR}/debian/numptyphysics/usr/share/applications/hildon mkdir -p ${CURDIR}/debian/numptyphysics/usr/share/dbus-1/services cp debian/numptyphysics.service ${CURDIR}/debian/numptyphysics/usr/share/dbus-1/services/org.maemo.garage.numptyphysics.service mkdir -p ${CURDIR}/debian/numptyphysics/usr/share/mime/packages cp debian/numptyphysics-mime.xml ${CURDIR}/debian/numptyphysics/usr/share/mime/packages else echo installing for UBUNTU desktop mkdir -p ${CURDIR}/debian/numptyphysics/usr/share/applications cp debian/numptyphysics.desktop ${CURDIR}/debian/numptyphysics/usr/share/applications mkdir -p ${CURDIR}/debian/numptyphysics/usr/share/mime/applications cp debian/numptyphysics-mime.xml ${CURDIR}/debian/numptyphysics/usr/share/mime/applications/x-numptyphysics-level.xml fi numptyphysics-0.2+svn157/Game.h0000644000175000017500000000373512264274577015431 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef GAME_H #define GAME_H #include "Levels.h" class Widget; class Canvas; struct GameStats { GameStats() {reset(0);} int startTime; int endTime; int strokeCount; int pausedStrokes; int undoCount; void reset(int t) { startTime = t; endTime = 0; strokeCount = 0; pausedStrokes = 0; undoCount = 0; } }; struct GameControl { GameControl() : m_quit(false), m_edit( false ), m_refresh( true ), m_fade(false), m_colour( 2 ), m_strokeFixed( false ), m_strokeSleep( false ), m_strokeDecor( false ), m_replaying( false ), m_paused( false ), m_level(0), m_clickMode(0) {} virtual ~GameControl() {} virtual bool save( const char *file=NULL ) =0; virtual bool send() =0; virtual bool load( const char* file ) {}; virtual void gotoLevel( int l, bool replay=false ) =0; virtual void clickMode(int cm) =0; Levels& levels() { return *m_levels; } const GameStats& stats() { return m_stats; } bool m_quit; bool m_edit; bool m_refresh; bool m_fade; int m_colour; int m_clickMode; bool m_strokeFixed; bool m_strokeSleep; bool m_strokeDecor; bool m_replaying; bool m_paused; Levels*m_levels; int m_level; protected: GameStats m_stats; }; Widget * createGameLayer( Levels* levels, int width, int height ); #endif //GAME_H numptyphysics-0.2+svn157/README0000644000175000017500000000652612264274560015260 0ustar warp10warp10 --- ================= --- NUMPTY PHYSICS --- ================= --- (See http://numptyphysics.garage.maemo.org for up-to-date information.) Harness gravity with your crayon and set about creating blocks, ramps, levers, pulleys and whatever else you fancy to get the little red thing to the little yellow thing. Numpty Physics is a drawing puzzle game in the spirit (and style?) of Crayon Physics using the same excellent Box2D engine. Note though that I've not actually played CP so the experience may be very different. Numpty Physics includes a built-in editor so that you may build (and submit) your own levels. Numpty Physics is released under the GPL. Comments, questions, flames and levels to numptyphysics@gmail.com. Home page: http://numptyphysics.garage.maemo.org/ Project page: http://garage.maemo.org/frs/?group_id=638 ========== --- EXTRA LEVELS ========== --- Solved all the levels? You can download a collection of user-submitted levels from ,,NP-complete``, the online level repository: http://numptyphysics.garage.maemo.org/levels/ =========== --- GAMEPLAY =========== --- Keys: stylus draw a new stroke space or enter pause/unpause physics esc (back arrow) undo last stroke q quit r or up reset level to initial state n or right skip to next level p or left go to previous level e or fullscreen edit mode Hints: Each stroke is like a rigid piece of wire with a mass proportional to its length. A closed stroke is just a wire bent into a shape, it has no substance apart from its perimeter. The ends of a strokes can (and will) join onto other strokes when drawn near enough to another stroke. These joints are pivots so you can use this to build levers, pendulums and other mechanical wonders. Jointed strokes don't collide with each other. Join both ends to make a rigid structure. ===== --- EDITING ===== --- Keys (in addition to the play mode keys): e or fullscreen leave edit mode s or menu key save to ~/MyDocs/Games/NumptyPhysics/L99_saved.nph zoom-minus + stylus delete stroke at point zoom-plus + stylus drag stroke at point Hints: It's handy to pause the physics when making a new level though this is by no means necessary. Sometimes it is handy to let the physics run for a little bit just to let the items settle down. From the editor palette you can choose the crayon colour and then additional properties such as: * ground (earth arrow) - stroke is fixed in place. * sleeping (Zzz) - stroke is not subject to physics until bumped by something else. * decorator (dashed D) - stroke is not part of the physical world. eg: tutorial text. You should make sure that your level has at least one red item (player token) and at least one yellow item (goal item). Token strokes will only join to other token strokes. Goal strokes will only join to goal strokes. Other strokes will happily join to any non-token non-goal strokes. If this is your first time, you may need to restart the game for your saved L99 to show up. If you wish to be clever, edit the level file directly - it's just a simple text format. Editor bugs: There is not yet any provision to name your level but you can just rename the file to anything. numptyphysics-0.2+svn157/Config.cpp0000644000175000017500000000306012264274577016307 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #include "Config.h" #include "Font.h" Rect FULLSCREEN_RECT( 0, 0, WORLD_WIDTH-1, WORLD_HEIGHT-1 ); const Rect BOUNDS_RECT( -WORLD_WIDTH/4, -WORLD_HEIGHT, WORLD_WIDTH*5/4, WORLD_HEIGHT ); int SCREEN_WIDTH = WORLD_WIDTH; int SCREEN_HEIGHT = WORLD_HEIGHT; const int brushColours[] = { 0xb80000, //red 0xeec900, //yellow 0x000077, //blue 0x108710, //green 0x101010, //black 0x8b4513, //brown 0x87cefa, //lightblue 0xee6aa7, //pink 0xb23aee, //purple 0x00fa9a, //lightgreen 0xff7f00, //orange 0x6c7b8b, //grey }; const int NUM_BRUSHES = (sizeof(brushColours)/sizeof(brushColours[0])); std::string Config::findFile( const std::string& name ) { std::string p( "data/" ); FILE *fd = fopen( (p+name).c_str(), "rb" ); if ( !fd ) { p = std::string( DEFAULT_RESOURCE_PATH "/" ); fd = fopen( (p+name).c_str(), "rb" ); } if ( fd ) { fclose(fd); return p+name; } return name; } Font* Config::font() { static Font f("font.npf"); return &f; } numptyphysics-0.2+svn157/Os.h0000644000175000017500000000256512264274560015131 0ustar warp10warp10/* * This file is part of NumptyPhysics * Copyright (C) 2008 Tim Edmonds * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * */ #ifndef OS_H #define OS_H #include "Event.h" #include #include class Accelerometer; class WidgetParent; class Os { public: virtual ~Os() {} virtual void poll() {}; virtual char* getLaunchFile() { return NULL; } virtual bool openBrowser( const char* url ) = 0; virtual char* saveDialog( const char* path ) { return NULL; } virtual Accelerometer* getAccelerometer() { return NULL; } virtual EventMap* getEventMap( EventMapType type ); virtual void decorateGame( WidgetParent* game ) {} bool ensurePath(const std::string& path); bool exists(const std::string& file); static Os* get(); static const char pathSep; }; class OsObj { public: Os* operator->() { return Os::get(); } }; extern OsObj OS; extern int npmain(int argc, char** argv); #endif //OS_H numptyphysics-0.2+svn157/happyhttp.h0000644000175000017500000002050712264274560016565 0ustar warp10warp10/* * HappyHTTP - a simple HTTP library * Version 0.1 * * Copyright (c) 2006 Ben Campbell * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software in a * product, an acknowledgment in the product documentation would be * appreciated but is not required. * * 2. Altered source versions must be plainly marked as such, and must not * be misrepresented as being the original software. * * 3. This notice may not be removed or altered from any source distribution. * */ #ifndef HAPPYHTTP_H #define HAPPYHTTP_H #include #include #include #include // forward decl struct in_addr; namespace happyhttp { class Response; // Helper Functions void BailOnSocketError( const char* context ); struct in_addr *atoaddr( const char* address); typedef void (*ResponseBegin_CB)( const Response* r, void* userdata ); typedef void (*ResponseData_CB)( const Response* r, void* userdata, const unsigned char* data, int numbytes ); typedef void (*ResponseComplete_CB)( const Response* r, void* userdata ); // HTTP status codes enum { // 1xx informational CONTINUE = 100, SWITCHING_PROTOCOLS = 101, PROCESSING = 102, // 2xx successful OK = 200, CREATED = 201, ACCEPTED = 202, NON_AUTHORITATIVE_INFORMATION = 203, NO_CONTENT = 204, RESET_CONTENT = 205, PARTIAL_CONTENT = 206, MULTI_STATUS = 207, IM_USED = 226, // 3xx redirection MULTIPLE_CHOICES = 300, MOVED_PERMANENTLY = 301, FOUND = 302, SEE_OTHER = 303, NOT_MODIFIED = 304, USE_PROXY = 305, TEMPORARY_REDIRECT = 307, // 4xx client error BAD_REQUEST = 400, UNAUTHORIZED = 401, PAYMENT_REQUIRED = 402, FORBIDDEN = 403, NOT_FOUND = 404, METHOD_NOT_ALLOWED = 405, NOT_ACCEPTABLE = 406, PROXY_AUTHENTICATION_REQUIRED = 407, REQUEST_TIMEOUT = 408, CONFLICT = 409, GONE = 410, LENGTH_REQUIRED = 411, PRECONDITION_FAILED = 412, REQUEST_ENTITY_TOO_LARGE = 413, REQUEST_URI_TOO_LONG = 414, UNSUPPORTED_MEDIA_TYPE = 415, REQUESTED_RANGE_NOT_SATISFIABLE = 416, EXPECTATION_FAILED = 417, UNPROCESSABLE_ENTITY = 422, LOCKED = 423, FAILED_DEPENDENCY = 424, UPGRADE_REQUIRED = 426, // 5xx server error INTERNAL_SERVER_ERROR = 500, NOT_IMPLEMENTED = 501, BAD_GATEWAY = 502, SERVICE_UNAVAILABLE = 503, GATEWAY_TIMEOUT = 504, HTTP_VERSION_NOT_SUPPORTED = 505, INSUFFICIENT_STORAGE = 507, NOT_EXTENDED = 510, }; // Exception class class Wobbly { public: Wobbly( const char* fmt, ... ); const char* what() const { return m_Message; } protected: enum { MAXLEN=256 }; char m_Message[ MAXLEN ]; }; //------------------------------------------------- // Connection // // Handles the socket connection, issuing of requests and managing // responses. // ------------------------------------------------ class Connection { friend class Response; public: // doesn't connect immediately Connection( const char* host, int port ); ~Connection(); // Set up the response handling callbacks. These will be invoked during // calls to pump(). // begincb - called when the responses headers have been received // datacb - called repeatedly to handle body data // completecb - response is completed // userdata is passed as a param to all callbacks. void setcallbacks( ResponseBegin_CB begincb, ResponseData_CB datacb, ResponseComplete_CB completecb, void* userdata ); // Don't need to call connect() explicitly as issuing a request will // call it automatically if needed. // But it could block (for name lookup etc), so you might prefer to // call it in advance. void connect(); // close connection, discarding any pending requests. void close(); // Update the connection (non-blocking) // Just keep calling this regularly to service outstanding requests. void pump(); // any requests still outstanding? bool outstanding() const { return !m_Outstanding.empty(); } // --------------------------- // high-level request interface // --------------------------- // method is "GET", "POST" etc... // url is only path part: eg "/index.html" // headers is array of name/value pairs, terminated by a null-ptr // body & bodysize specify body data of request (eg values for a form) void request( const char* method, const char* url, const char* headers[]=0, const unsigned char* body=0, int bodysize=0 ); // --------------------------- // low-level request interface // --------------------------- // begin request // method is "GET", "POST" etc... // url is only path part: eg "/index.html" void putrequest( const char* method, const char* url ); // Add a header to the request (call after putrequest() ) void putheader( const char* header, const char* value ); void putheader( const char* header, int numericvalue ); // alternate version // Finished adding headers, issue the request. void endheaders(); // send body data if any. // To be called after endheaders() void send( const unsigned char* buf, int numbytes ); protected: // some bits of implementation exposed to Response class // callbacks ResponseBegin_CB m_ResponseBeginCB; ResponseData_CB m_ResponseDataCB; ResponseComplete_CB m_ResponseCompleteCB; void* m_UserData; private: enum { IDLE, REQ_STARTED, REQ_SENT } m_State; std::string m_Host; int m_Port; int m_Sock; std::vector< std::string > m_Buffer; // lines of request std::deque< Response* > m_Outstanding; // responses for outstanding requests }; //------------------------------------------------- // Response // // Handles parsing of response data. // ------------------------------------------------ class Response { friend class Connection; public: // retrieve a header (returns 0 if not present) const char* getheader( const char* name ) const; bool completed() const { return m_State == COMPLETE; } // get the HTTP status code int getstatus() const; // get the HTTP response reason string const char* getreason() const; // true if connection is expected to close after this response. bool willclose() const { return m_WillClose; } protected: // interface used by Connection // only Connection creates Responses. Response( const char* method, Connection& conn ); // pump some data in for processing. // Returns the number of bytes used. // Will always return 0 when response is complete. int pump( const unsigned char* data, int datasize ); // tell response that connection has closed void notifyconnectionclosed(); private: enum { STATUSLINE, // start here. status line is first line of response. HEADERS, // reading in header lines BODY, // waiting for some body data (all or a chunk) CHUNKLEN, // expecting a chunk length indicator (in hex) CHUNKEND, // got the chunk, now expecting a trailing blank line TRAILERS, // reading trailers after body. COMPLETE, // response is complete! } m_State; Connection& m_Connection; // to access callback ptrs std::string m_Method; // req method: "GET", "POST" etc... // status line std::string m_VersionString; // HTTP-Version int m_Version; // 10: HTTP/1.0 11: HTTP/1.x (where x>=1) int m_Status; // Status-Code std::string m_Reason; // Reason-Phrase // header/value pairs std::map m_Headers; int m_BytesRead; // body bytes read so far bool m_Chunked; // response is chunked? int m_ChunkLeft; // bytes left in current chunk int m_Length; // -1 if unknown bool m_WillClose; // connection will close at response end? std::string m_LineBuf; // line accumulation for states that want it std::string m_HeaderAccum; // accumulation buffer for headers void FlushHeader(); void ProcessStatusLine( std::string const& line ); void ProcessHeaderLine( std::string const& line ); void ProcessTrailerLine( std::string const& line ); void ProcessChunkLenLine( std::string const& line ); int ProcessDataChunked( const unsigned char* data, int count ); int ProcessDataNonChunked( const unsigned char* data, int count ); void BeginBody(); bool CheckClose(); void Finish(); }; } // end namespace happyhttp #endif // HAPPYHTTP_H