diff options
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | README | 247 | ||||
| -rw-r--r-- | includes/defines.h | 18 | ||||
| -rw-r--r-- | includes/graphics.h | 2 | ||||
| -rwxr-xr-x | includes/icon.h | 2 | ||||
| -rw-r--r-- | includes/misc.h | 29 | ||||
| -rw-r--r-- | includes/powder.h | 28 | ||||
| -rw-r--r-- | includes/pyconsole.h | 2 | ||||
| -rw-r--r-- | src/elements/fwrk.c | 2 | ||||
| -rw-r--r-- | src/elements/prti.c | 32 | ||||
| -rw-r--r-- | src/elements/prto.c | 37 | ||||
| -rw-r--r-- | src/elements/qrtz.c | 55 | ||||
| -rw-r--r-- | src/elements/sing.c | 38 | ||||
| -rw-r--r-- | src/elements/stkm.c | 25 | ||||
| -rw-r--r-- | src/elements/stkm2.c | 25 | ||||
| -rw-r--r-- | src/graphics.c | 163 | ||||
| -rw-r--r-- | src/interface.c | 72 | ||||
| -rw-r--r-- | src/main.c | 339 | ||||
| -rw-r--r-- | src/misc.c | 149 | ||||
| -rw-r--r-- | src/powder.c | 358 |
20 files changed, 1158 insertions, 469 deletions
@@ -1,6 +1,6 @@ SOURCES := src/*.c src/elements/*.c -PY_BIN := python2 +PY_BIN := python PY_VERSION := $(shell $(PY_BIN) -c "import sys;print sys.version[:3]") PY_LIBPATH := $(shell $(PY_BIN) -c "import os.path,sys;print os.path.join(sys.exec_prefix,\"lib\",\"python%s\"%sys.version[:3],\"config\")") PY_INCPATH := $(shell $(PY_BIN) -c "import os.path,sys;print os.path.join(sys.exec_prefix,\"include\",\"python%s\"%sys.version[:3])") @@ -95,4 +95,4 @@ powder-x-ogl: $(SOURCES) $(PYCOMMAND) --64bit gcc -o $@ $(CFLAGS) $(OFLAGS) $(LFLAGS_X) $(MFLAGS) $(SOURCES) -DOpenGL -DMACOSX -DPIX32BGRA -arch x86_64 -framework Cocoa -framework SDL -framework OpenGL -framework Python strip $@ - mv $@ build
\ No newline at end of file + mv $@ build @@ -1 +1,246 @@ -Hello +The Powder Toy - March 2011 + + + +Get latest version here: http://powdertoy.co.uk/Download.html + + +To use online features such as saving, you need to register at: http://powdertoy.co.uk/Register.html + + +Thanks: + +--------------------------------------------------------------------------- + +Stanislaw K Skowronek - Designed the original +Simon Robertshaw - +Skresanov Savely - +cracker64 - +Bryan Hoyle - +Nathan Cousins - +(This isn't filled in but not sure what to put) + + + +Instructions: + +------------------------------------------------------------------------------ + +Click on the elements with the mouse and draw in the field, like in MS Paint. The rest of the game is learning what happens next. + + + +Controls: + +------------------------------------------------------------------------------ + +Caps Lock Specific Element Erase +Insert Replace mode +TAB Circle/Square Brush +Space Pause +Q Quit +Esc Quit +Z Zoom +S Save stamp (+ Ctrl when STK2 is out) +L Load last saved stamp +K Stamp library +C Cycle view mode +1-9 Set view mode +P Save screenshot to .ppm +F Pause and go to next frame +G Grid +H Show/Hide HUD +D Debug mode (+ Shift when STK2 is out) +I Invert Pressure and Velocity map +T Vine mode +W Toggle gravity modes (+ Ctrl when STK2 is out) +R Reset LIFE generation (when in Debug mode) +~ Python Console += Reset pressure and velocity map +[ Decrase brush size +] Increase brush size + +Ctrl + C/V/X Copy/Paste/Cut +Ctrl + Z Undo +Ctrl + Cursor drag Rectangle +Shift + Cursor drag Line +MMB / Alt + LMB click Sample element +Mouse scroll Change brush size +Ctrl + Mouse scroll Change vertical brush size +Shift + Mouse scroll Change horizontal brush size +Shift + Ctrl + R Horizontal mirror for selected area +Ctrl + R Rotate selected area counterclockwise +Shift + Left Alt Select subject for Specific Element erase +Ctrl + = Reset Electricity + + + + + +Command Line: + +--------------------------------------------------------------------------- + +scale:1 - Normal window resolution +scale:2 - Doubled window resolution +kiosk - Fullscreen mode +proxy:server:port (ie, proxy:wwwcache.lancs.ac.uk:8080) + + +History: + +--------------------------------------------------------------------------- + +* Version 46.3 + o Major game engine and performance improvements. + o New GOL elements. + o More secure login system +* Version 45.2 + o Important! Fix for Auto-update in Linux. +* Version 45.1 + o Small bugfix for Lava and Portals. + o Fix crash when 2 of the same stickman are somehow placed. +* Version 45.0 + o Fix bug where description would persist after a reset + o ARAY now passes through INWR without interracting. + o INST has been fixed and placed in the Electronics menu + o Photons turn into neutrons when passing through INVS + o Other small bug fixes. +* Version 44.7 + o Fix login and dialoq text box issues. + o Small bugfixes to some elements. + o Additional 'debug' information. + o Increase WIFI channels + o Add missing icons for menus and display modes. +* Version 44.6 + o Fix for brush issues when using small brushes. + o Pause state saving modifications. +* Version 44.5 + o Fix corruption issues with FAN wall. +* Version 44.4 + o Many new elements from cracker64s mod. + o Pause state is saved. + o Particle properties are saved more accurately. + o Improved search and save viewing, added descriptions and comments. +* Version 42.3 + o Changed internal temperature scale to kelvin. + o Fixed physics bug with certain powders. + o Fixed bug when loading saves with stickman in. + o Added save history, the ability to view previous versions of saves. +* Version 42.0 + o New Elements: Brick, Glow, Diesel, many others. + o Source code seperation + o Lots of other stuff that I can't remember. +* Version 41.3 + o Fixes bug where Insulation would burst into flames randomly + o Moves fancy new effects into a separate colour mode. +* Version 39.0 + o New element: Liquid Crystal + o New element: Battery + o New element: Noble Gas + o Copy, cut and paste +* Version 38.0 + o New element: Nitrogen Ice + o New element: Electrode (Allows currents to jump) + o Adds a lock icon to private saves. + o Binds the '[' and ']' keys to decrease/increase the cursor size for those without scroll wheels. + o Fixes wall menu issue where walls would be selected by accident. +* Version 37.0 + o New element: Plasma + o New element: Thunder/Lighting + o New wall: Allows only gas + o Fixes HUD bug. +* Version 36.3 + o Introduced public & private saving (more info here) +* Version 36.2 + o Fixes bug where rating would appear as Zero in search. +* Version 36.1 + o Feature: Particle sampling with middle click + o Feature: Download from website, for information, see the "Announcement" forum section. +* Version 36.0 + o Changes to the menu + o New elements for electronics + o New voting system + o Added functions for moderating +* Version 35.0 + o Added elements: White Hole, Black Hole, Rubidium and Liquid Rubidium + o Fixed the OSX version + o Some other bug fixes that I forgot. +* Version 34.0 + o Fixed certain graphical glitches + o Changed menu categories + o Increased menu hover size +* Version 33.2 + o Photons can now ignite flammable materials. + o Distilled water will turn into water on contact with water. + o Fixes burning broken metal +* Version 34.0 (Beta 6) + o New element menu layout + o New element: Liquid Nitrogen +* Version 34.0 (Beta 5) + o Improvements to stamp browser + o Added Glyphs for Blob and Heat view + o Fixed bug that caused a crash on Windows systems when using the wall tool in the window edges.(Fixed more than last time) + o Decreased/Increased Min/Max Temperatures. +* Version 34.0 (Beta 4) + o Cool, heat and Air no longer crash upon flood fill + o Fixed bug that caused a crash on Windows systems when using the wall tool in the window edges. + o Stamp browser now allows multiple pages. + o Improved the zoom features, allowing inspection. + o Modification to temperature simulation, pressure is now taken into account with transitions from liquid to gas and vice-versa + o Fixed bug where Salt-water would not leave salt upon evaporation +* Version 34.0 (Beta 3) + o Bug fixes for uranium + o Fixed bug where extremely hot objects would show as black + o Fixed but where stamps would not be loaded +* Version 34.0 (Beta 2) + o Bug fixes + o Legacy Mode state is now saved and loaded + o Fix "Cool" and "Heat" when drawing on walls. + o Air now works. +* Version 34.0 (Beta 1) + o Bug fixes + o Legacy Mode (Older saves will load with legacy mode, preserving the functionality of the older powder toy) + o Heat and Cool elements. (Air is broken until next beta.) +* Version 34.0 (Beta) + o Heat Simulation (With free bugs and glitches) + o New Element: Uranium, heats up when pressurised. + o New button, AIR, provides instant air, the Alt+Click and Middle Click can be used as a shortcut +* Version 33.1 + o Masses of bug fixes + o Broken metal and breakable metal fixed (conduction) + o Liquid collisions fixed. +* Version 33.0 + o Added Photons, particles similar to neutrons that travel in straight lines + o Added destructable metal + o Fixed a glitch with diamond that would make it appear invisible to air pressure. +* Version 32.0 + o Added Diamond (Thanks to ief014) + o Fixed packaging errors for the Windows release +* Version 31.0 + o Plutonium more powerful + o Changes to the handling of lava (Now solidifies into the same material it was melted from). + o New element: Salt. + o New element: Salt water +* Version 30.0 + o Added the ability to change the zoom strength + o Increased the maximum pen size. + o New element: Concrete, tougher than stone, stackable. + o New element: Distilled water, similar to water, but doesn't conduct electricity + o Changed menu layout, walls at the bottom, elements at the top (to allow for more future elements) + o 32bit colour for Macintosh versions. +* Version 28.4 + o Fixes crash when loading a save with acid. + o Another tiny change for acid colour in blob mode +* Version 28.3 + o Fixes acid colour in blob mode + o Fixes blob mode colour on Macintosh and 16bit colour systems +* Version 28.2 + o Quit confirmation dialogue when using the escape key + o Walls are "blobbed" in Blob view +* Version 28.1 + o Steam rises + o Acid drastically changed, now dilutes itself when dissolving other particles +* Version 28.0 + o "Yellow wall" bug fix, doesn't absorb particles when placed above another wall type. + o New wall type added: E-Hole, absorbs particles when unpowered, released them when powered.
\ No newline at end of file diff --git a/includes/defines.h b/includes/defines.h index a611486..9bf2029 100644 --- a/includes/defines.h +++ b/includes/defines.h @@ -7,10 +7,10 @@ #define PATH_SEP "/" #endif -#define SAVE_VERSION 46 -#define MINOR_VERSION 4 -#define IDENT_VERSION "D" //Change this if you're not Simon! It should be a single letter. -//#define BETA +#define SAVE_VERSION 47 +#define MINOR_VERSION 0 +#define IDENT_VERSION "G" //Change this if you're not Simon! It should be a single letter. +#define BETA #define SERVER "powdertoy.co.uk" @@ -18,6 +18,10 @@ //#define pyconsole +#ifndef M_PI +#define M_PI 3.14159265f +#endif + #define IMGCONNS 3 #define TIMEOUT 100 #define HTTP_TIMEOUT 10 @@ -182,8 +186,10 @@ void thumb_cache_inval(char *id); void thumb_cache_add(char *id, void *thumb, int size); int thumb_cache_find(char *id, void **thumb, int *size); void *build_thumb(int *size, int bzip2); -void *build_save(int *size, int x0, int y0, int w, int h); -int parse_save(void *save, int size, int replace, int x0, int y0); +void *build_save(int *size, int x0, int y0, int w, int h, unsigned char bmap[YRES/CELL][XRES/CELL], float fvx[YRES/CELL][XRES/CELL], float fvy[YRES/CELL][XRES/CELL], sign signs[MAXSIGNS], void* partsptr); +int parse_save(void *save, int size, int replace, int x0, int y0, unsigned char bmap[YRES/CELL][XRES/CELL], float fvx[YRES/CELL][XRES/CELL], float fvy[YRES/CELL][XRES/CELL], sign signs[MAXSIGNS], void* partsptr, unsigned pmap[YRES][XRES]); +void clear_sim(void); void del_stamp(int d); void sdl_seticon(void); +//int process_command(pixel *vid_buf, char *console, char *console_error, PyObject *pfunc); #endif diff --git a/includes/graphics.h b/includes/graphics.h index 4d4d438..b7bfdfa 100644 --- a/includes/graphics.h +++ b/includes/graphics.h @@ -121,7 +121,7 @@ void xor_line(int x1, int y1, int x2, int y2, pixel *vid); void xor_rect(pixel *vid, int x, int y, int w, int h); void draw_parts(pixel *vid); - +void draw_wavelengths(pixel *vid, int x, int y, int h, int wl); void render_signs(pixel *vid_buf); void render_fire(pixel *dst); diff --git a/includes/icon.h b/includes/icon.h index 89b2c7f..4eeff5e 100755 --- a/includes/icon.h +++ b/includes/icon.h @@ -18,5 +18,5 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ -static unsigned char app_icon[] = { 0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0xD3,0xD9,0xE0,0xFF,0xD3,0xD9,0xE0,0xFF,0xD3,0xD9,0xE0,0xFF,0xD3,0xD9,0xE0,0xFF,0xD3,0xD9,0xE0,0xFF,0xD3,0xD9,0xE0,0xFF,0xD3,0xD9,0xE0,0xFF,0xD3,0xD9,0xE0,0xFF,0xD3,0xD9,0xE0,0xFF,0x68,0x79,0x91,0xFF,0xD3,0xD9,0xE0,0xFF,0x68,0x79,0x91,0xFF,0xD3,0xD9,0xE0,0xFF,0x68,0x79,0x91,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x05,0x06,0x06,0xFF,0x09,0x09,0x0A,0xFF,0x2F,0x08,0x08,0xFF,0x56,0x06,0x07,0xFF,0x23,0x06,0x06,0xFF,0x85,0x02,0x06,0xFF,0xE5,0x02,0x07,0xFF,0xF2,0x1E,0x08,0xFF,0xED,0x0A,0x08,0xFF,0x60,0x07,0x08,0xFF,0x5F,0x08,0x08,0xFF,0x68,0x08,0x08,0xFF,0x18,0x07,0x08,0xFF,0x05,0x04,0x04,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0xB6,0x00,0x00,0xFF,0xD3,0x00,0x00,0xFF,0xEE,0x00,0x00,0xFF,0xF9,0x00,0x00,0xFF,0x91,0x00,0x00,0xFF,0xDD,0x15,0x00,0xFF,0xFF,0x74,0x00,0xFF,0xFF,0xBF,0x00,0xFF,0xFC,0x37,0x00,0xFF,0xAE,0x00,0x00,0xFF,0xD7,0x00,0x00,0xFF,0xFA,0x00,0x00,0xFF,0xE5,0x01,0x00,0xFF,0xB3,0x00,0x00,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0xF9,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xE9,0x00,0x00,0xFF,0xFA,0x90,0x02,0xFF,0xFF,0xFF,0x1A,0xFF,0xFF,0xFF,0x19,0xFF,0xFF,0xA4,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xF6,0x00,0x00,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0xE8,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xB7,0x2E,0xFF,0xFF,0xFF,0xA1,0xFF,0xFF,0xFF,0x8A,0xFF,0xFF,0xFA,0x3E,0xFF,0xFF,0x63,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xE3,0x00,0x00,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0xE4,0x00,0x00,0xFF,0xFF,0x21,0x00,0xFF,0xFF,0x61,0x00,0xFF,0xFF,0x94,0x00,0xFF,0xFF,0x8C,0x00,0xFF,0xFF,0xE1,0x5C,0xFF,0xFF,0xFF,0xCD,0xFF,0xFF,0xFF,0xAE,0xFF,0xFF,0xFF,0x6F,0xFF,0xFF,0xF9,0x1D,0xFF,0xFF,0xC3,0x00,0xFF,0xFF,0x99,0x00,0xFF,0xFF,0x48,0x00,0xFF,0xDF,0x00,0x00,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0xC5,0x00,0x00,0xFF,0xFF,0x64,0x00,0xFF,0xFF,0xEF,0x09,0xFF,0xFF,0xFF,0x46,0xFF,0xFF,0xFF,0x84,0xFF,0xFF,0xFF,0xD3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBC,0xFF,0xFF,0xFF,0x86,0xFF,0xFF,0xFF,0x69,0xFF,0xFF,0xFF,0x19,0xFF,0xFF,0x81,0x00,0xFF,0xD0,0x01,0x00,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0xB1,0x00,0x00,0xFF,0xEC,0x14,0x00,0xFF,0xFF,0x90,0x13,0xFF,0xFF,0xF9,0x8E,0xFF,0xFF,0xFF,0xE6,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xFF,0xFF,0xF2,0xC9,0xFF,0xFF,0xFA,0xBD,0xFF,0xFF,0xFF,0xA8,0xFF,0xFF,0xFC,0x9A,0xFF,0xFF,0xA4,0x2A,0xFF,0xFD,0x15,0x00,0xFF,0xEB,0x00,0x00,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x00,0x00,0x00,0xFF,0x47,0x14,0x14,0xFF,0x47,0x14,0x14,0xFF,0x00,0x00,0x00,0xFF,0x1F,0x30,0xD5,0xFF,0x1F,0x30,0xD5,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x79,0x79,0x79,0xFF,0x79,0x79,0x79,0xFF,0x00,0x00,0x00,0xFF,0xD7,0xF1,0x00,0xFF,0xD7,0xF1,0x00,0xFF,0x00,0x00,0x00,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF,0x8F,0x92,0x97,0xFF }; +static unsigned char app_icon[] = {0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0xd3,0xd9,0xe0,0xff,0xd3,0xd9,0xe0,0xff,0xd3,0xd9,0xe0,0xff,0xd3,0xd9,0xe0,0xff,0xd3,0xd9,0xe0,0xff,0xd3,0xd9,0xe0,0xff,0xd3,0xd9,0xe0,0xff,0xd3,0xd9,0xe0,0xff,0xd3,0xd9,0xe0,0xff,0x68,0x79,0x91,0xff,0xd3,0xd9,0xe0,0xff,0x68,0x79,0x91,0xff,0xd3,0xd9,0xe0,0xff,0x68,0x79,0x91,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x56,0x03,0x08,0xff,0xdb,0x07,0x05,0xff,0xff,0xc4,0x10,0xff,0xff,0xfe,0x14,0xff,0xff,0xff,0x23,0xff,0xff,0xff,0x16,0xff,0xff,0x9a,0x0a,0xff,0xff,0x64,0x0c,0xff,0xff,0x44,0x0a,0xff,0xff,0x22,0x0b,0xff,0xc0,0x24,0x0d,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0xff,0x24,0x00,0xff,0xff,0x96,0x1c,0xff,0xff,0xff,0x89,0xff,0xff,0xff,0x30,0xff,0xff,0xfd,0x00,0xff,0xff,0xd6,0x03,0xff,0xff,0x63,0x01,0xff,0xff,0x9a,0x00,0xff,0xff,0xbe,0x0a,0xff,0xff,0x5e,0x00,0xff,0xc3,0x0c,0x0c,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0xff,0xe2,0x41,0xff,0xff,0xff,0xd8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe9,0xff,0xff,0xf3,0x43,0xff,0xff,0xe8,0x00,0xff,0xff,0xfb,0x15,0xff,0xff,0xff,0x62,0xff,0xff,0xff,0xc6,0xff,0xff,0xff,0x5b,0xff,0xc2,0x77,0x08,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0xff,0xff,0xcc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc6,0xff,0xff,0xff,0x99,0xff,0xff,0xff,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0xff,0xc4,0xae,0x26,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0xff,0xda,0x87,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcd,0xff,0xc1,0x89,0x20,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0xff,0x68,0x09,0xff,0xff,0xf5,0x72,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xe5,0xff,0xff,0xfd,0xcf,0xff,0xff,0xf5,0xcd,0xff,0xff,0xff,0xd4,0xff,0xff,0xff,0xd0,0xff,0xff,0xf2,0x3d,0xff,0xc3,0x48,0x03,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x98,0x15,0x0f,0xff,0xaf,0x3d,0x09,0xff,0xad,0x4f,0x0d,0xff,0xae,0x6b,0x1b,0xff,0xb0,0x76,0x1e,0xff,0xa1,0x36,0x08,0xff,0x95,0x26,0x07,0xff,0xad,0x5b,0x16,0xff,0xbf,0x99,0x26,0xff,0xad,0x59,0x09,0xff,0x76,0x22,0x16,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff,0x8f,0x92,0x97,0xff}; static unsigned char app_icon_w32[] = { 0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x44,0x47,0x49,0x00,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x44,0x46,0x48,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x86,0x88,0x8A,0xFF,0xD8,0xDE,0xE6,0xFF,0xD1,0xD7,0xDF,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0xD1,0xD7,0xDE,0xFF,0x68,0x79,0x91,0xFF,0xD1,0xD7,0xDE,0xFF,0x68,0x79,0x91,0xFF,0xD1,0xD7,0xDE,0xFF,0x68,0x79,0x91,0xFF,0xD1,0xD7,0xDE,0xFF,0x81,0x84,0x88,0xFF,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x83,0x85,0x89,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0xFF,0x06,0x00,0x00,0xFF,0x05,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x1E,0x00,0x00,0xFF,0x07,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0xFF,0x05,0x00,0x00,0xFF,0x03,0x00,0x00,0xFF,0x02,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x14,0x00,0x00,0xFF,0xE1,0x01,0x00,0xFF,0xF4,0x03,0x00,0xFF,0x24,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x7F,0x81,0x86,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x05,0x00,0x00,0xFF,0x0F,0x00,0x00,0xFF,0x05,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x03,0x00,0x00,0xFF,0x36,0x01,0x00,0xFF,0x06,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0xFF,0x02,0x00,0x00,0xFF,0x01,0x00,0x00,0xFF,0x01,0x00,0x00,0xFF,0x07,0x00,0x00,0xFF,0x06,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x1A,0x00,0x00,0xFF,0xE7,0x0A,0x01,0xFF,0xFF,0x07,0x01,0xFF,0x41,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x7F,0x81,0x85,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x1A,0x00,0x00,0xFF,0x16,0x01,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x0B,0x00,0x00,0xFF,0x55,0x02,0x00,0xFF,0x04,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0xFF,0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0xFF,0x03,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x39,0x00,0x00,0xFF,0xF8,0x1B,0x02,0xFF,0xFF,0x2F,0x03,0xFF,0x52,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x7F,0x81,0x85,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x1C,0x00,0x00,0xFF,0x5C,0x01,0x00,0xFF,0x09,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x36,0x01,0x00,0xFF,0xAE,0x04,0x01,0xFF,0x02,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0xFF,0x01,0x00,0x00,0xFF,0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x50,0x00,0x00,0xFF,0xFE,0x44,0x02,0xFF,0xFF,0x5C,0x03,0xFF,0x60,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x7F,0x81,0x85,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x12,0x00,0x00,0xFF,0x9F,0x02,0x00,0xFF,0x49,0x01,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x73,0x04,0x00,0xFF,0xEC,0x09,0x01,0xFF,0x2B,0x00,0x00,0xFF,0x06,0x00,0x00,0xFF,0x13,0x00,0x00,0xFF,0x07,0x00,0x00,0xFF,0x04,0x00,0x00,0xFF,0x04,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x4E,0x06,0x00,0xFF,0xFF,0xC1,0x08,0xFF,0xFD,0x9A,0x07,0xFF,0x49,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x7F,0x81,0x85,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x8B,0x01,0x00,0xFF,0xD5,0x03,0x00,0xFF,0x07,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x03,0x00,0x00,0xFF,0xB7,0x0D,0x01,0xFF,0xFF,0x0F,0x02,0xFF,0xDE,0x00,0x00,0xFF,0xAB,0x00,0x00,0xFF,0xA5,0x01,0x00,0xFF,0x3D,0x00,0x00,0xFF,0x02,0x00,0x00,0xFF,0x03,0x00,0x00,0xFF,0x03,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x8B,0x35,0x03,0xFF,0xFF,0xF0,0x0E,0xFF,0xDF,0x4B,0x01,0xFF,0x14,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0x00,0x00,0x00,0xFF,0x55,0x00,0x00,0xFF,0xFF,0x05,0x01,0xFF,0x73,0x01,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x1B,0x00,0x00,0xFF,0xE5,0x0F,0x01,0xFF,0xFF,0x0D,0x02,0xFF,0xFF,0x04,0x01,0xFF,0xFF,0x03,0x00,0xFF,0xFF,0x01,0x00,0xFF,0x8F,0x00,0x00,0xFF,0x02,0x00,0x00,0xFF,0x02,0x00,0x00,0xFF,0x03,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x1B,0x00,0x00,0xFF,0xD9,0x47,0x03,0xFF,0xFF,0x92,0x06,0xFF,0xAF,0x12,0x00,0xFF,0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0x20,0x00,0x00,0xFF,0xE5,0x08,0x01,0xFF,0xD1,0x04,0x01,0xFF,0x0E,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x30,0x01,0x00,0xFF,0xF6,0x47,0x04,0xFF,0xFF,0x1F,0x02,0xFF,0xFF,0x03,0x01,0xFF,0xFF,0x06,0x01,0xFF,0xFF,0x03,0x00,0xFF,0xC7,0x01,0x00,0xFF,0x1F,0x00,0x00,0xFF,0x03,0x00,0x00,0xFF,0x06,0x01,0x00,0xFF,0x00,0x00,0x00,0xFF,0x38,0x02,0x00,0xFF,0xFB,0x72,0x07,0xFF,0xFF,0x5A,0x03,0xFF,0x73,0x01,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0xA1,0x02,0x00,0xFF,0xFF,0x0C,0x03,0xFF,0x7B,0x01,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x3B,0x06,0x00,0xFF,0xFF,0xBB,0x0C,0xFF,0xFF,0x56,0x04,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x10,0x03,0xFF,0xFF,0x02,0x01,0xFF,0xDE,0x01,0x00,0xFF,0x34,0x00,0x00,0xFF,0x03,0x00,0x00,0xFF,0x05,0x01,0x00,0xFF,0x00,0x00,0x00,0xFF,0x3B,0x03,0x00,0xFF,0xFC,0x83,0x06,0xFF,0xFF,0x71,0x03,0xFF,0x83,0x05,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0xFB,0x18,0x03,0xFF,0xFF,0x0E,0x02,0xFF,0xB9,0x00,0x00,0xFF,0x06,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x21,0x01,0x00,0xFF,0xE8,0xB9,0x0F,0xFF,0xFF,0x8F,0x0C,0xFF,0xFF,0x02,0x00,0xFF,0xFF,0x3C,0x04,0xFF,0xFF,0x16,0x02,0xFF,0xFD,0x00,0x00,0xFF,0x63,0x00,0x00,0xFF,0x02,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x40,0x0B,0x00,0xFF,0xFE,0xAD,0x06,0xFF,0xFF,0xC9,0x06,0xFF,0xCC,0x45,0x02,0xFF,0x08,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0xFF,0x49,0x03,0xFF,0xFF,0x7E,0x03,0xFF,0xFF,0x45,0x01,0xFF,0x67,0x05,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x09,0x00,0x00,0xFF,0xCC,0xA0,0x08,0xFF,0xFB,0xAA,0x0A,0xFF,0xC9,0x00,0x00,0xFF,0xFE,0x6B,0x03,0xFF,0xFF,0x79,0x02,0xFF,0xF9,0x0A,0x00,0xFF,0x4C,0x00,0x00,0xFF,0x02,0x00,0x00,0xFF,0x08,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x3F,0x14,0x00,0xFF,0xFC,0xDF,0x10,0xFF,0xFF,0xFF,0x10,0xFF,0xFA,0xCD,0x14,0xFF,0x46,0x0C,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0xFF,0x7F,0x03,0xFF,0xFF,0xFF,0x06,0xFF,0xFF,0xE7,0x03,0xFF,0xD5,0x39,0x01,0xFF,0x0E,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x1A,0x06,0x00,0xFF,0xEA,0xCF,0x17,0xFF,0xE2,0xA6,0x10,0xFF,0x32,0x00,0x00,0xFF,0xCB,0x80,0x06,0xFF,0xFF,0xF4,0x09,0xFF,0xD8,0x44,0x00,0xFF,0x10,0x00,0x00,0xFF,0x01,0x00,0x00,0xFF,0x07,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x44,0x21,0x00,0xFF,0xFD,0xE9,0x1C,0xFF,0xFF,0xD6,0x09,0xFF,0xFF,0xFF,0x28,0xFF,0xB4,0x75,0x04,0xFF,0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0xFF,0x8D,0x03,0xFF,0xFF,0xFF,0x41,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0x7E,0x01,0xFF,0x4C,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x49,0x30,0x04,0xFF,0xFF,0xFC,0x5A,0xFF,0xB0,0x7E,0x14,0xFF,0x00,0x00,0x00,0xFF,0x89,0x66,0x0F,0xFF,0xFF,0xFF,0x6B,0xFF,0xE6,0xA7,0x1E,0xFF,0x1E,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x6F,0x5A,0x18,0xFF,0xFF,0xFE,0x70,0xFF,0xCD,0x6C,0x04,0xFF,0xE8,0xB5,0x27,0xFF,0xFE,0xF3,0x60,0xFF,0x6E,0x3D,0x08,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0xDB,0x8A,0x26,0xFF,0xFF,0xFF,0xD5,0xFF,0xFF,0xFF,0xD8,0xFF,0xFF,0xCF,0x3A,0xFF,0x94,0x12,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x15,0x0A,0x01,0xFF,0xBF,0xAC,0x7E,0xFF,0xFF,0xFF,0xDE,0xFF,0x82,0x5F,0x20,0xFF,0x00,0x00,0x00,0xFF,0x67,0x5B,0x28,0xFF,0xFF,0xFF,0xF3,0xFF,0xFF,0xF1,0xAA,0xFF,0x5D,0x2E,0x07,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x18,0x0D,0x02,0xFF,0xD0,0xC0,0x90,0xFF,0xFF,0xFF,0xF4,0xFF,0x92,0x61,0x27,0xFF,0x72,0x3F,0x0F,0xFF,0xFF,0xFF,0xE2,0xFF,0xFA,0xE5,0xAE,0xFF,0x80,0x4B,0x19,0xFF,0x02,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0xC9,0xA1,0x64,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xB2,0xFF,0xA1,0x33,0x03,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0xFF,0x96,0x7E,0x5E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7E,0x6A,0x41,0xFF,0x00,0x00,0x00,0xFF,0x7F,0x75,0x56,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xA9,0x8D,0x54,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x8C,0x69,0x4F,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x93,0x82,0x58,0xFF,0x16,0x05,0x00,0xFF,0xEB,0xDB,0xB8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF2,0xBD,0xFF,0x62,0x42,0x14,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0xA3,0x7F,0x47,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xDD,0xA4,0xFF,0x51,0x19,0x02,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x04,0x00,0x00,0xFF,0xD0,0xB6,0x88,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x6A,0x5A,0x39,0xFF,0x00,0x00,0x00,0xFF,0x85,0x7D,0x4E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xB4,0xA5,0x73,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0xB5,0x9B,0x6F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8B,0x78,0x4E,0xFF,0x00,0x00,0x00,0xFF,0xCC,0xAE,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0x74,0x38,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0x24,0x14,0x03,0xFF,0x8C,0x7E,0x44,0xFF,0xA2,0x8E,0x5D,0xFF,0x5B,0x37,0x17,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x71,0x46,0x1E,0xFF,0xCB,0xA4,0x71,0xFF,0xAC,0x93,0x66,0xFF,0x17,0x0E,0x04,0xFF,0x00,0x00,0x00,0xFF,0x30,0x23,0x0A,0xFF,0xBF,0xA4,0x60,0xFF,0xC4,0xAC,0x78,0xFF,0x43,0x34,0x1A,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x5C,0x3D,0x18,0xFF,0xC9,0xA9,0x6F,0xFF,0xB8,0x94,0x63,0xFF,0x2A,0x19,0x07,0xFF,0x00,0x00,0x00,0xFF,0x53,0x3B,0x16,0xFF,0xC7,0xB6,0x70,0xFF,0xBD,0xA2,0x66,0xFF,0x2C,0x1C,0x09,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0x00,0x00,0x00,0xFF,0x47,0x14,0x14,0xFF,0x47,0x14,0x14,0xFF,0x00,0x00,0x00,0xFF,0x1F,0x30,0xD6,0xFF,0x1F,0x30,0xD6,0xFF,0x00,0x00,0x00,0xFF,0xF7,0x0F,0x00,0xFF,0xF7,0x0F,0x00,0xFF,0x00,0x00,0x00,0xFF,0xC8,0x47,0x0E,0xFF,0xC8,0x47,0x0E,0xFF,0x00,0x00,0x00,0xFF,0x20,0xE6,0x0F,0xFF,0x20,0xE6,0x0F,0xFF,0x00,0x00,0x00,0xFF,0xEB,0xF5,0x22,0xFF,0xEB,0xF5,0x22,0xFF,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0xFF,0x79,0x79,0x79,0xFF,0x00,0x00,0x00,0xFF,0x79,0x79,0x79,0xFF,0x79,0x79,0x79,0xFF,0x00,0x00,0x00,0xFF,0xD7,0xF1,0x00,0xFF,0xD7,0xF1,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0x00,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x81,0x84,0x88,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x81,0x84,0x88,0xFF,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x44,0x46,0x48,0x00,0x7A,0x7D,0x81,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x83,0x86,0x8A,0xFF,0x86,0x89,0x8C,0xFF,0x89,0x8C,0x8F,0xFF,0x87,0x8A,0x8F,0xFF,0x85,0x87,0x8B,0xFF,0x82,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x81,0x84,0x88,0xFF,0x44,0x46,0x48,0x00,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x04,0x03,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00,0x03,0x05,0x04,0x00 };
\ No newline at end of file diff --git a/includes/misc.h b/includes/misc.h index 4094b39..a372648 100644 --- a/includes/misc.h +++ b/includes/misc.h @@ -69,6 +69,35 @@ void strappend(char *dst, char *src); void *file_load(char *fn, int *size); +void clipboard_push_text(char * text); + +char * clipboard_pull_text(); + +int register_extension(); + int cpu_check(void); +// a b +// c d +struct matrix2d {float a,b,c,d;}; +typedef struct matrix2d matrix2d; + +// column vector +struct vector2d {float x,y;}; +typedef struct vector2d vector2d; + +matrix2d m2d_multiply_m2d(matrix2d m1, matrix2d m2); +vector2d m2d_multiply_v2d(matrix2d m, vector2d v); +matrix2d m2d_multiply_float(matrix2d m, float s); +vector2d v2d_multiply_float(vector2d v, float s); + +vector2d v2d_add(vector2d v1, vector2d v2); +vector2d v2d_sub(vector2d v1, vector2d v2); + +matrix2d m2d_new(float me0, float me1, float me2, float me3); +vector2d v2d_new(float x, float y); + +extern vector2d v2d_zero; +extern matrix2d m2d_identity; + #endif diff --git a/includes/powder.h b/includes/powder.h index f12e8ec..4b94806 100644 --- a/includes/powder.h +++ b/includes/powder.h @@ -5,6 +5,7 @@ #include "graphics.h" #include "defines.h" #include "interface.h" +#include "misc.h" #define CM_COUNT 11 #define CM_CRACK 10 @@ -387,10 +388,10 @@ static const part_type ptypes[PT_NUM] = {"METL", PIXPACK(0x404060), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 1, 1, 1, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 251, "Solid. Conducts electricity. Meltable.", ST_SOLID, TYPE_SOLID|PROP_CONDUCTS|PROP_HOT_GLOW, NULL}, {"SPRK", PIXPACK(0xFFFF80), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.001f * CFDS, 0, 0, 0, 0, 1, 1, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 251, "Electricity. Conducted by metal and water.", ST_SOLID, TYPE_SOLID, &update_SPRK}, {"SNOW", PIXPACK(0xC0E0FF), 0.7f, 0.01f * CFDS, 0.96f, 0.90f, -0.1f, 0.05f, 0.01f, -0.00005f* CFDS,1, 0, 0, 0, 20, 1, 50, SC_POWDERS, R_TEMP-30.0f+273.15f, 46, "Light particles.", ST_SOLID, TYPE_PART, &update_ICEI}, - {"WOOD", PIXPACK(0xC0A040), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 20, 0, 0, 15, 1, 100, SC_SOLIDS, R_TEMP+0.0f +273.15f, 164, "Solid. Flammable.", ST_SOLID, TYPE_SOLID, NULL}, + {"WOOD", PIXPACK(0xC0A040), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 20, 0, 0, 15, 1, 100, SC_SOLIDS, R_TEMP+0.0f +273.15f, 164, "Solid. Flammable.", ST_SOLID, TYPE_SOLID | PROP_NEUTPENETRATE, NULL}, {"NEUT", PIXPACK(0x20E0FF), 0.0f, 0.00f * CFDS, 1.00f, 1.00f, -0.99f, 0.0f, 0.01f, 0.002f * CFDS, 0, 0, 0, 0, 0, 1, -1, SC_NUCLEAR, R_TEMP+4.0f +273.15f, 60, "Neutrons. Interact with matter in odd ways.", ST_GAS, TYPE_ENERGY, &update_NEUT}, {"PLUT", PIXPACK(0x407020), 0.4f, 0.01f * CFDS, 0.99f, 0.95f, 0.0f, 0.4f, 0.00f, 0.000f * CFDS, 1, 0, 0, 0, 0, 1, 90, SC_NUCLEAR, R_TEMP+4.0f +273.15f, 251, "Heavy particles. Fissile. Generates neutrons under pressure.", ST_SOLID, TYPE_PART|PROP_NEUTPENETRATE|PROP_RADIOACTIVE, &update_PLUT}, - {"PLNT", PIXPACK(0x0CAC00), 0.0f, 0.00f * CFDS, 0.95f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 20, 0, 0, 10, 1, 100, SC_SOLIDS, R_TEMP+0.0f +273.15f, 65, "Plant, drinks water and grows.", ST_SOLID, TYPE_SOLID, &update_PLNT}, + {"PLNT", PIXPACK(0x0CAC00), 0.0f, 0.00f * CFDS, 0.95f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 20, 0, 0, 10, 1, 100, SC_SOLIDS, R_TEMP+0.0f +273.15f, 65, "Plant, drinks water and grows.", ST_SOLID, TYPE_SOLID|PROP_NEUTPENETRATE, &update_PLNT}, {"ACID", PIXPACK(0xED55FF), 0.6f, 0.01f * CFDS, 0.98f, 0.95f, 0.0f, 0.1f, 0.00f, 0.000f * CFDS, 2, 40, 0, 0, 1, 1, 10, SC_LIQUID, R_TEMP+0.0f +273.15f, 34, "Dissolves almost everything.", ST_LIQUID, TYPE_LIQUID, &update_ACID}, {"VOID", PIXPACK(0x790B0B), 0.0f, 0.00f * CFDS, 1.00f, 0.00f, 0.0f, 0.0f, 0.00f, -0.0003f* CFDS, 0, 0, 0, 0, 0, 1, 100, SC_SPECIAL, R_TEMP+0.0f +273.15f, 251, "Hole, will drain away any particles.", ST_SOLID, TYPE_SOLID, NULL}, {"WTRV", PIXPACK(0xA0A0FF), 1.0f, 0.01f * CFDS, 0.99f, 0.30f, -0.1f, -0.1f, 0.75f, 0.0003f * CFDS, 0, 0, 0, 0, 4, 1, 1, SC_GAS, R_TEMP+100.0f+273.15f, 48, "Steam, heats up air, produced from hot water.", ST_GAS, TYPE_GAS, &update_WTRV}, @@ -401,7 +402,7 @@ static const part_type ptypes[PT_NUM] = {"DMND", PIXPACK(0xCCFFFF), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 100, SC_SPECIAL, R_TEMP+0.0f +273.15f, 186, "Diamond. Indestructible.", ST_SOLID, TYPE_SOLID, NULL}, {"BMTL", PIXPACK(0x505070), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 1, 1, 1, 100, SC_SOLIDS, R_TEMP+0.0f +273.15f, 251, "Breakable metal.", ST_SOLID, TYPE_SOLID|PROP_CONDUCTS|PROP_HOT_GLOW, &update_BMTL}, {"BRMT", PIXPACK(0x705060), 0.4f, 0.04f * CFDS, 0.94f, 0.95f, -0.1f, 0.3f, 0.00f, 0.000f * CFDS, 1, 0, 0, 2, 2, 1, 90, SC_POWDERS, R_TEMP+0.0f +273.15f, 211, "Broken metal.", ST_SOLID, TYPE_PART|PROP_CONDUCTS|PROP_HOT_GLOW, NULL}, - {"PHOT", PIXPACK(0xFFFFFF), 0.0f, 0.00f * CFDS, 1.00f, 1.00f, -0.99f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, -1, SC_ELEC, R_TEMP+900.0f+273.15f, 251, "Photons. Travel in straight lines.", ST_GAS, TYPE_ENERGY, &update_PHOT}, + {"PHOT", PIXPACK(0xFFFFFF), 0.0f, 0.00f * CFDS, 1.00f, 1.00f, -0.99f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, -1, SC_NUCLEAR, R_TEMP+900.0f+273.15f, 251, "Photons. Travel in straight lines.", ST_GAS, TYPE_ENERGY, &update_PHOT}, {"URAN", PIXPACK(0x707020), 0.4f, 0.01f * CFDS, 0.99f, 0.95f, 0.0f, 0.4f, 0.00f, 0.000f * CFDS, 1, 0, 0, 0, 0, 1, 90, SC_NUCLEAR, R_TEMP+30.0f+273.15f, 251, "Heavy particles. Generates heat under pressure.", ST_SOLID, TYPE_PART | PROP_RADIOACTIVE, &update_URAN}, {"WAX", PIXPACK(0xF0F0BB), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 10, 1, 100, SC_SOLIDS, R_TEMP+0.0f +273.15f, 44, "Wax. Melts at moderately high temperatures.", ST_SOLID, TYPE_SOLID, NULL}, {"MWAX", PIXPACK(0xE0E0AA), 0.3f, 0.02f * CFDS, 0.95f, 0.80f, 0.0f, 0.15f, 0.00f, 0.000001f* CFDS,2, 5, 0, 0, 2, 1, 25, SC_LIQUID, R_TEMP+28.0f+273.15f, 44, "Liquid Wax.", ST_LIQUID, TYPE_LIQUID, NULL}, @@ -418,7 +419,7 @@ static const part_type ptypes[PT_NUM] = {"GLAS", PIXPACK(0x404040), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 100, SC_SOLIDS, R_TEMP+0.0f +273.15f, 150, "Solid. Meltable. Shatters under pressure", ST_SOLID, TYPE_SOLID | PROP_NEUTPASS | PROP_HOT_GLOW, &update_GLAS}, {"PTCT", PIXPACK(0x405050), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 1, 1, 1, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 251, "Semi-conductor. Only conducts electricity when cold (Less than 100C)", ST_SOLID, TYPE_SOLID|PROP_CONDUCTS, &update_NPTCT}, {"BGLA", PIXPACK(0x606060), 0.4f, 0.04f * CFDS, 0.94f, 0.95f, -0.1f, 0.3f, 0.00f, 0.000f * CFDS, 1, 0, 0, 5, 2, 1, 90, SC_POWDERS, R_TEMP+0.0f +273.15f, 150, "Broken Glass, Heavy particles. Meltable. Bagels.", ST_SOLID, TYPE_PART | PROP_HOT_GLOW, NULL}, - {"THDR", PIXPACK(0xFFFFA0), 0.0f, 0.00f * CFDS, 1.0f, 0.30f, -0.99f, 0.6f, 0.62f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 1, SC_ELEC, 9000.0f +273.15f, 251, "Lightning! Very hot, inflicts damage upon most materials, transfers current to metals.", ST_NONE, TYPE_ENERGY, &update_THDR}, + {"THDR", PIXPACK(0xFFFFA0), 0.0f, 0.00f * CFDS, 1.0f, 0.30f, -0.99f, 0.6f, 0.62f, 0.000f * CFDS, 0, 0, 0, 0, 0, 1, 1, SC_EXPLOSIVE, 9000.0f +273.15f, 251, "Lightning! Very hot, inflicts damage upon most materials, transfers current to metals.", ST_NONE, TYPE_ENERGY, &update_THDR}, {"PLSM", PIXPACK(0xBB99FF), 0.9f, 0.04f * CFDS, 0.97f, 0.20f, 0.0f, -0.1f, 0.30f, 0.001f * CFDS, 0, 0, 0, 0, 0, 1, 1, SC_GAS, 9000.0f +273.15f, 115, "Plasma, extremely hot.", ST_NONE, TYPE_GAS, &update_PYRO}, {"ETRD", PIXPACK(0x404040), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 1, 1, 1, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 251, "Electrode. Creates a surface that allows Plasma arcs. (Use sparingly)", ST_NONE, TYPE_SOLID|PROP_CONDUCTS, NULL}, {"NICE", PIXPACK(0xC0E0FF), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, -0.0005f* CFDS, 0, 0, 0, 0, 20, 1, 100, SC_SOLIDS, 35.0f, 46, "Nitrogen Ice.", ST_SOLID, TYPE_SOLID, NULL}, @@ -479,8 +480,8 @@ static const part_type ptypes[PT_NUM] = {"INST", PIXPACK(0x404039), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 1, 1, 1, 100, SC_ELEC, R_TEMP+0.0f +273.15f, 251, "Instantly conducts, PSCN to charge, NSCN to take.", ST_SOLID, TYPE_SOLID, NULL}, {"ISOZ", PIXPACK(0xAA30D0), 0.6f, 0.01f * CFDS, 0.98f, 0.95f, 0.0f, 0.1f, 0.00f, 0.000f * CFDS, 2, 0, 0, 0, 0, 1, 24, SC_NUCLEAR, R_TEMP-2.0f +273.15f, 29, "Radioactive liquid", ST_LIQUID, TYPE_LIQUID|PROP_NEUTPENETRATE, &update_ISZ}, {"ISZS", PIXPACK(0x662089), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, -0.0007f* CFDS, 0, 0, 0, 1, 1, 1, 100, SC_NUCLEAR, 140.00f, 251, "Solid form of ISOZ, slowly decays.", ST_SOLID, TYPE_SOLID, &update_ISZ}, - {"PRTI", PIXPACK(0xEB5917), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, -0.005f * CFDS, 0, 0, 0, 0, 0, 1, 100, SC_NUCLEAR, R_TEMP+0.0f +273.15f, 0, "Portal IN. Things go in here, now with channels (same as WIFI)", ST_SOLID, TYPE_SOLID, &update_PRTI}, - {"PRTO", PIXPACK(0x0020EB), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.005f * CFDS, 0, 0, 0, 0, 0, 1, 100, SC_NUCLEAR, R_TEMP+0.0f +273.15f, 0, "Portal OUT. Things come out here, now with channels (same as WIFI)", ST_SOLID, TYPE_SOLID, &update_PRTO}, + {"PRTI", PIXPACK(0xEB5917), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, -0.005f * CFDS, 0, 0, 0, 0, 0, 1, 100, SC_SPECIAL, R_TEMP+0.0f +273.15f, 0, "Portal IN. Things go in here, now with channels (same as WIFI)", ST_SOLID, TYPE_SOLID, &update_PRTI}, + {"PRTO", PIXPACK(0x0020EB), 0.0f, 0.00f * CFDS, 0.90f, 0.00f, 0.0f, 0.0f, 0.00f, 0.005f * CFDS, 0, 0, 0, 0, 0, 1, 100, SC_SPECIAL, R_TEMP+0.0f +273.15f, 0, "Portal OUT. Things come out here, now with channels (same as WIFI)", ST_SOLID, TYPE_SOLID, &update_PRTO}, {"PSTE", PIXPACK(0xAA99AA), 0.6f, 0.01f * CFDS, 0.98f, 0.95f, 0.0f, 0.1f, 0.00f, 0.000f * CFDS, 2, 0, 0, 0, 20, 1, 31, SC_LIQUID, R_TEMP-2.0f +273.15f, 29, "Colloid, Hardens under pressure", ST_LIQUID, TYPE_LIQUID, NULL}, {"PSTS", PIXPACK(0x776677), 0.0f, 0.00f * CFDS, 0.00f, 0.00f, 0.0f, 0.0f, 0.00f, 0.000f * CFDS, 0, 0, 0, 0, 20, 0, 100, SC_CRACKER, R_TEMP-2.0f +273.15f, 29, "Solid form of PSTE, temporary", ST_SOLID, TYPE_SOLID, NULL}, {"ANAR", PIXPACK(0xFFFFEE), -0.7f, -0.02f * CFDS, 0.96f, 0.80f, 0.1f, -0.1f, 0.00f, 0.000f * CFDS, 1, 10, 0, 0, 30, 1, 85, SC_POWDERS, R_TEMP+0.0f +273.15f, 70, "Very light dust. Behaves opposite gravity", ST_SOLID, TYPE_PART, NULL}, @@ -863,5 +864,20 @@ int flood_parts(int x, int y, int c, int cm, int bm); int create_parts(int x, int y, int rx, int ry, int c); void create_line(int x1, int y1, int x2, int y2, int rx, int ry, int c); +void *transform_save(void *odata, int *size, matrix2d transform, vector2d translate); + + +#if defined(WIN32) && !defined(__GNUC__) +extern _inline void orbitalparts_get(int block1, int block2, int resblock1[], int resblock2[]); +#else +extern inline void orbitalparts_get(int block1, int block2, int resblock1[], int resblock2[]); +#endif + + +#if defined(WIN32) && !defined(__GNUC__) +extern _inline void orbitalparts_set(int *block1, int *block2, int resblock1[], int resblock2[]); +#else +extern inline void orbitalparts_set(int *block1, int *block2, int resblock1[], int resblock2[]); +#endif #endif diff --git a/includes/pyconsole.h b/includes/pyconsole.h index f9f754c..d5118a5 100644 --- a/includes/pyconsole.h +++ b/includes/pyconsole.h @@ -1,2 +1,2 @@ #include <Python.h> -unsigned char tpt_console_pyc[] = {0x3,0xf3,0xd,0xa,0xc8,0x11,0x8a,0x4d,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x73,0xf1,0x4,0x0,0x0,0x64,0x0,0x0,0x64,0x1,0x0,0x6c,0x0,0x0,0x5a,0x0,0x0,0x64,0x0,0x0,0x64,0x2,0x0,0x6c,0x0,0x0,0x54,0x64,0x0,0x0,0x64,0x1,0x0,0x6c,0x1,0x0,0x5a,0x1,0x0,0x64,0x0,0x0,0x64,0x1,0x0,0x6c,0x2,0x0,0x5a,0x2,0x0,0x64,0x0,0x0,0x64,0x1,0x0,0x6c,0x3,0x0,0x5a,0x3,0x0,0x64,0x0,0x0,0x64,0x1,0x0,0x6c,0x4,0x0,0x5a,0x4,0x0,0x65,0x5,0x0,0x5a,0x6,0x0,0x64,0x3,0x0,0x64,0x37,0x1,0x64,0x4,0x0,0x84,0x0,0x0,0x83,0x0,0x0,0x59,0x5a,0x7,0x0,0x65,0x6,0x0,0x65,0x5,0x0,0x6b,0x2,0x0,0x72,0x86,0x0,0x65,0x7,0x0,0x83,0x0,0x0,0x65,0x1,0x0,0x5f,0x8,0x0,0x65,0x7,0x0,0x83,0x0,0x0,0x65,0x1,0x0,0x5f,0x9,0x0,0x6e,0x0,0x0,0x69,0x95,0x0,0x64,0x5,0x0,0x64,0x6,0x0,0x36,0x64,0x7,0x0,0x64,0x8,0x0,0x36,0x64,0x9,0x0,0x64,0xa,0x0,0x36,0x64,0xb,0x0,0x64,0xc,0x0,0x36,0x64,0xd,0x0,0x64,0xe,0x0,0x36,0x64,0xf,0x0,0x64,0x10,0x0,0x36,0x64,0x11,0x0,0x64,0x12,0x0,0x36,0x64,0x13,0x0,0x64,0x14,0x0,0x36,0x64,0x15,0x0,0x64,0x16,0x0,0x36,0x64,0x17,0x0,0x64,0x18,0x0,0x36,0x64,0x19,0x0,0x64,0x1a,0x0,0x36,0x64,0x1b,0x0,0x64,0x1c,0x0,0x36,0x64,0x1d,0x0,0x64,0x1e,0x0,0x36,0x64,0x1f,0x0,0x64,0x20,0x0,0x36,0x64,0x21,0x0,0x64,0x22,0x0,0x36,0x64,0x23,0x0,0x64,0x24,0x0,0x36,0x64,0x25,0x0,0x64,0x26,0x0,0x36,0x64,0x27,0x0,0x64,0x28,0x0,0x36,0x64,0x29,0x0,0x64,0x2a,0x0,0x36,0x64,0x2b,0x0,0x64,0x2c,0x0,0x36,0x64,0x2d,0x0,0x64,0x2e,0x0,0x36,0x64,0x2f,0x0,0x64,0x30,0x0,0x36,0x64,0x31,0x0,0x64,0x32,0x0,0x36,0x64,0x33,0x0,0x64,0x34,0x0,0x36,0x64,0x35,0x0,0x64,0x36,0x0,0x36,0x64,0x37,0x0,0x64,0x38,0x0,0x36,0x64,0x39,0x0,0x64,0x3a,0x0,0x36,0x64,0x3b,0x0,0x64,0x3c,0x0,0x36,0x64,0x3d,0x0,0x64,0x3e,0x0,0x36,0x64,0x3f,0x0,0x64,0x40,0x0,0x36,0x64,0x41,0x0,0x64,0x42,0x0,0x36,0x64,0x43,0x0,0x64,0x44,0x0,0x36,0x64,0x45,0x0,0x64,0x46,0x0,0x36,0x64,0x47,0x0,0x64,0x48,0x0,0x36,0x64,0x49,0x0,0x64,0x4a,0x0,0x36,0x64,0x4b,0x0,0x64,0x4c,0x0,0x36,0x64,0x4d,0x0,0x64,0x4e,0x0,0x36,0x64,0x4f,0x0,0x64,0x50,0x0,0x36,0x64,0x51,0x0,0x64,0x52,0x0,0x36,0x64,0x53,0x0,0x64,0x54,0x0,0x36,0x64,0x55,0x0,0x64,0x56,0x0,0x36,0x64,0x57,0x0,0x64,0x58,0x0,0x36,0x64,0x59,0x0,0x64,0x5a,0x0,0x36,0x64,0x5b,0x0,0x64,0x5c,0x0,0x36,0x64,0x5d,0x0,0x64,0x5e,0x0,0x36,0x64,0x5f,0x0,0x64,0x60,0x0,0x36,0x64,0x61,0x0,0x64,0x62,0x0,0x36,0x64,0x63,0x0,0x64,0x64,0x0,0x36,0x64,0x65,0x0,0x64,0x66,0x0,0x36,0x64,0x67,0x0,0x64,0x68,0x0,0x36,0x64,0x69,0x0,0x64,0x6a,0x0,0x36,0x64,0x6b,0x0,0x64,0x6c,0x0,0x36,0x64,0x6d,0x0,0x64,0x6e,0x0,0x36,0x64,0x6f,0x0,0x64,0x70,0x0,0x36,0x64,0x71,0x0,0x64,0x72,0x0,0x36,0x64,0x73,0x0,0x64,0x74,0x0,0x36,0x64,0x75,0x0,0x64,0x76,0x0,0x36,0x64,0x77,0x0,0x64,0x78,0x0,0x36,0x64,0x79,0x0,0x64,0x7a,0x0,0x36,0x64,0x7b,0x0,0x64,0x7c,0x0,0x36,0x64,0x7d,0x0,0x64,0x7e,0x0,0x36,0x64,0x7f,0x0,0x64,0x80,0x0,0x36,0x64,0x81,0x0,0x64,0x82,0x0,0x36,0x64,0x83,0x0,0x64,0x84,0x0,0x36,0x64,0x85,0x0,0x64,0x86,0x0,0x36,0x64,0x87,0x0,0x64,0x88,0x0,0x36,0x64,0x89,0x0,0x64,0x8a,0x0,0x36,0x64,0x8b,0x0,0x64,0x8c,0x0,0x36,0x64,0x8d,0x0,0x64,0x8e,0x0,0x36,0x64,0x8f,0x0,0x64,0x90,0x0,0x36,0x64,0x91,0x0,0x64,0x92,0x0,0x36,0x64,0x93,0x0,0x64,0x94,0x0,0x36,0x64,0x95,0x0,0x64,0x96,0x0,0x36,0x64,0x97,0x0,0x64,0x98,0x0,0x36,0x64,0x99,0x0,0x64,0x9a,0x0,0x36,0x64,0x9b,0x0,0x64,0x9c,0x0,0x36,0x64,0x9d,0x0,0x64,0x9e,0x0,0x36,0x64,0x9f,0x0,0x64,0xa0,0x0,0x36,0x64,0xa1,0x0,0x64,0xa2,0x0,0x36,0x64,0xa3,0x0,0x64,0xa4,0x0,0x36,0x64,0xa5,0x0,0x64,0xa6,0x0,0x36,0x64,0xa7,0x0,0x64,0xa8,0x0,0x36,0x64,0xa9,0x0,0x64,0xaa,0x0,0x36,0x64,0xab,0x0,0x64,0xac,0x0,0x36,0x64,0xad,0x0,0x64,0xae,0x0,0x36,0x64,0xaf,0x0,0x64,0xb0,0x0,0x36,0x64,0xb1,0x0,0x64,0xb2,0x0,0x36,0x64,0xb3,0x0,0x64,0xb4,0x0,0x36,0x64,0xb5,0x0,0x64,0xb6,0x0,0x36,0x64,0xb7,0x0,0x64,0xb8,0x0,0x36,0x64,0xb9,0x0,0x64,0xba,0x0,0x36,0x64,0xbb,0x0,0x64,0xbc,0x0,0x36,0x64,0xbd,0x0,0x64,0xbe,0x0,0x36,0x64,0xbf,0x0,0x64,0xc0,0x0,0x36,0x64,0xc1,0x0,0x64,0xc2,0x0,0x36,0x64,0xc3,0x0,0x64,0xc4,0x0,0x36,0x64,0xc5,0x0,0x64,0xc6,0x0,0x36,0x64,0xc7,0x0,0x64,0xc8,0x0,0x36,0x64,0xc9,0x0,0x64,0xca,0x0,0x36,0x64,0xcb,0x0,0x64,0xcc,0x0,0x36,0x64,0xcd,0x0,0x64,0xce,0x0,0x36,0x64,0xcf,0x0,0x64,0xd0,0x0,0x36,0x64,0xd1,0x0,0x64,0xd2,0x0,0x36,0x64,0xd3,0x0,0x64,0xd4,0x0,0x36,0x64,0xd5,0x0,0x64,0xd6,0x0,0x36,0x64,0xd7,0x0,0x64,0xd8,0x0,0x36,0x64,0xd9,0x0,0x64,0xda,0x0,0x36,0x64,0xdb,0x0,0x64,0xdc,0x0,0x36,0x64,0xdd,0x0,0x64,0xde,0x0,0x36,0x64,0xdf,0x0,0x64,0xe0,0x0,0x36,0x64,0xe1,0x0,0x64,0xe2,0x0,0x36,0x64,0xe3,0x0,0x64,0xe4,0x0,0x36,0x64,0xe5,0x0,0x64,0xe6,0x0,0x36,0x64,0xe7,0x0,0x64,0xe8,0x0,0x36,0x64,0xe9,0x0,0x64,0xea,0x0,0x36,0x64,0xeb,0x0,0x64,0xec,0x0,0x36,0x64,0xed,0x0,0x64,0xee,0x0,0x36,0x64,0xef,0x0,0x64,0xf0,0x0,0x36,0x64,0xf1,0x0,0x64,0xf2,0x0,0x36,0x64,0xf3,0x0,0x64,0xf4,0x0,0x36,0x64,0xf5,0x0,0x64,0xf6,0x0,0x36,0x64,0xf7,0x0,0x64,0xf8,0x0,0x36,0x64,0xf9,0x0,0x64,0xfa,0x0,0x36,0x64,0xfb,0x0,0x64,0xfc,0x0,0x36,0x64,0xfd,0x0,0x64,0xfe,0x0,0x36,0x64,0xff,0x0,0x64,0x0,0x1,0x36,0x64,0x1,0x1,0x64,0x2,0x1,0x36,0x64,0x3,0x1,0x64,0x4,0x1,0x36,0x64,0x5,0x1,0x64,0x6,0x1,0x36,0x64,0x7,0x1,0x64,0x8,0x1,0x36,0x64,0x9,0x1,0x64,0xa,0x1,0x36,0x64,0xb,0x1,0x64,0xc,0x1,0x36,0x64,0xd,0x1,0x64,0xe,0x1,0x36,0x64,0xf,0x1,0x64,0x10,0x1,0x36,0x64,0x11,0x1,0x64,0x12,0x1,0x36,0x64,0x13,0x1,0x64,0x14,0x1,0x36,0x64,0x15,0x1,0x64,0x16,0x1,0x36,0x64,0x17,0x1,0x64,0x18,0x1,0x36,0x64,0x19,0x1,0x64,0x1a,0x1,0x36,0x64,0x1b,0x1,0x64,0x1c,0x1,0x36,0x64,0x1d,0x1,0x64,0x1e,0x1,0x36,0x64,0x1f,0x1,0x64,0x20,0x1,0x36,0x64,0x21,0x1,0x64,0x22,0x1,0x36,0x64,0x23,0x1,0x64,0x24,0x1,0x36,0x64,0x25,0x1,0x64,0x26,0x1,0x36,0x64,0x27,0x1,0x64,0x28,0x1,0x36,0x64,0x29,0x1,0x64,0x2a,0x1,0x36,0x64,0x2b,0x1,0x64,0x2c,0x1,0x36,0x64,0x2d,0x1,0x64,0x2e,0x1,0x36,0x5a,0xa,0x0,0x64,0x2f,0x1,0x84,0x0,0x0,0x5a,0xb,0x0,0x64,0x30,0x1,0x84,0x0,0x0,0x5a,0xc,0x0,0x64,0x31,0x1,0x84,0x0,0x0,0x5a,0xd,0x0,0x64,0x32,0x1,0x84,0x0,0x0,0x5a,0xe,0x0,0x64,0x33,0x1,0x84,0x0,0x0,0x5a,0xf,0x0,0x67,0x0,0x0,0x5a,0x10,0x0,0x64,0x34,0x1,0x84,0x0,0x0,0x5a,0x11,0x0,0x64,0x35,0x1,0x84,0x0,0x0,0x5a,0x12,0x0,0x64,0x36,0x1,0x84,0x0,0x0,0x5a,0x13,0x0,0x64,0x1,0x0,0x53,0x28,0x38,0x1,0x0,0x0,0x69,0xff,0xff,0xff,0xff,0x4e,0x28,0x1,0x0,0x0,0x0,0x74,0x1,0x0,0x0,0x0,0x2a,0x74,0x6,0x0,0x0,0x0,0x6c,0x6f,0x67,0x67,0x65,0x72,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x42,0x0,0x0,0x0,0x73,0x11,0x0,0x0,0x0,0x65,0x0,0x0,0x5a,0x1,0x0,0x64,0x0,0x0,0x84,0x0,0x0,0x5a,0x2,0x0,0x52,0x53,0x28,0x1,0x0,0x0,0x0,0x63,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x42,0x0,0x0,0x0,0x7c,0x1,0x0,0x6a,0x0,0x0,0x83,0x0,0x0,0x6a,0x1,0x0,0x64,0x1,0x0,0x83,0x1,0x0,0x64,0x2,0x0,0x19,0x7d,0x1,0x0,0x74,0x2,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x79,0x11,0x0,0x74,0x3,0x0,0x6a,0x4,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x57,0x6e,0x7,0x0,0x1,0x1,0x1,0x6e,0x1,0x0,0x58,0x64,0x0,0x0,0x53,0x28,0x3,0x0,0x0,0x0,0x4e,0x73,0x1,0x0,0x0,0x0,0xa,0x69,0xff,0xff,0xff,0xff,0x28,0x5,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x74,0x72,0x69,0x70,0x74,0x5,0x0,0x0,0x0,0x73,0x70,0x6c,0x69,0x74,0x74,0x4,0x0,0x0,0x0,0x72,0x65,0x70,0x72,0x74,0x3,0x0,0x0,0x0,0x74,0x70,0x74,0x74,0x3,0x0,0x0,0x0,0x6c,0x6f,0x67,0x28,0x2,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x65,0x6c,0x66,0x74,0x3,0x0,0x0,0x0,0x74,0x78,0x74,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0x5,0x0,0x0,0x0,0x77,0x72,0x69,0x74,0x65,0xc,0x0,0x0,0x0,0x73,0xc,0x0,0x0,0x0,0x0,0x1,0x19,0x1,0xa,0x1,0x3,0x1,0x11,0x1,0x3,0x1,0x28,0x3,0x0,0x0,0x0,0x74,0x8,0x0,0x0,0x0,0x5f,0x5f,0x6e,0x61,0x6d,0x65,0x5f,0x5f,0x74,0xa,0x0,0x0,0x0,0x5f,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x5f,0x5f,0x52,0x9,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x52,0x1,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x73,0x2,0x0,0x0,0x0,0x6,0x1,0x69,0x0,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x6f,0x6e,0x65,0x69,0x1,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x75,0x73,0x74,0x69,0x2,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x61,0x74,0x72,0x69,0x3,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x6f,0x69,0x6c,0x69,0x4,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x69,0x72,0x65,0x69,0x5,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x74,0x6e,0x65,0x69,0x6,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x61,0x76,0x61,0x69,0x7,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x67,0x75,0x6e,0x70,0x69,0x8,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x69,0x74,0x72,0x69,0x9,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x63,0x6c,0x6e,0x65,0x69,0xa,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x67,0x61,0x73,0x69,0xb,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x6c,0x65,0x78,0x69,0xc,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x67,0x6f,0x6f,0x69,0xd,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x63,0x65,0x69,0x69,0xe,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6d,0x65,0x74,0x6c,0x69,0xf,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x70,0x72,0x6b,0x69,0x10,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x6e,0x6f,0x77,0x69,0x11,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x6f,0x6f,0x64,0x69,0x12,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x65,0x75,0x74,0x69,0x13,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x6c,0x75,0x74,0x69,0x14,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x6c,0x6e,0x74,0x69,0x15,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x61,0x63,0x69,0x64,0x69,0x16,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x76,0x6f,0x69,0x64,0x69,0x17,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x74,0x72,0x76,0x69,0x18,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x63,0x6e,0x63,0x74,0x69,0x19,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x73,0x74,0x77,0x69,0x1a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x61,0x6c,0x74,0x69,0x1b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x6c,0x74,0x77,0x69,0x1c,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x6d,0x6e,0x64,0x69,0x1d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x6d,0x74,0x6c,0x69,0x1e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x72,0x6d,0x74,0x69,0x1f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x68,0x6f,0x74,0x69,0x20,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x75,0x72,0x61,0x6e,0x69,0x21,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x77,0x61,0x78,0x69,0x22,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6d,0x77,0x61,0x78,0x69,0x23,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x73,0x63,0x6e,0x69,0x24,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x73,0x63,0x6e,0x69,0x25,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x6e,0x74,0x67,0x69,0x26,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x6e,0x73,0x6c,0x69,0x27,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x68,0x6f,0x6c,0x69,0x28,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x68,0x6f,0x6c,0x69,0x29,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x72,0x62,0x64,0x6d,0x69,0x2a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x72,0x62,0x64,0x69,0x2b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x74,0x63,0x74,0x69,0x2c,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x61,0x6e,0x64,0x69,0x2d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x67,0x6c,0x61,0x73,0x69,0x2e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x74,0x63,0x74,0x69,0x2f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x67,0x6c,0x61,0x69,0x30,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x74,0x68,0x64,0x72,0x69,0x31,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x6c,0x73,0x6d,0x69,0x32,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x65,0x74,0x72,0x64,0x69,0x33,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x69,0x63,0x65,0x69,0x34,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x62,0x6c,0x65,0x69,0x35,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x74,0x72,0x79,0x69,0x36,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x63,0x72,0x79,0x69,0x37,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x74,0x6b,0x6d,0x69,0x38,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x77,0x63,0x68,0x69,0x39,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x6d,0x6b,0x65,0x69,0x3a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x65,0x73,0x6c,0x69,0x3b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x63,0x6f,0x61,0x6c,0x69,0x3c,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x6c,0x6f,0x32,0x69,0x3d,0x0,0x0,0x0,0x74,0x2,0x0,0x0,0x0,0x6f,0x32,0x69,0x3e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x6e,0x77,0x72,0x69,0x3f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x79,0x65,0x73,0x74,0x69,0x40,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x79,0x73,0x74,0x69,0x41,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x74,0x68,0x72,0x6d,0x69,0x42,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x67,0x6c,0x6f,0x77,0x69,0x43,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x72,0x63,0x6b,0x69,0x44,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x68,0x66,0x6c,0x6d,0x69,0x45,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x69,0x72,0x77,0x69,0x46,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x75,0x73,0x65,0x69,0x47,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x73,0x65,0x70,0x69,0x48,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x61,0x6d,0x74,0x72,0x69,0x49,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x63,0x6f,0x6c,0x69,0x4a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x63,0x6c,0x6e,0x69,0x4b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x68,0x73,0x77,0x63,0x69,0x4c,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x72,0x6f,0x6e,0x69,0x4d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6d,0x6f,0x72,0x74,0x69,0x4e,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x67,0x6f,0x6c,0x69,0x4f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x68,0x6c,0x69,0x66,0x69,0x50,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x61,0x73,0x69,0x6d,0x69,0x51,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x32,0x78,0x32,0x69,0x52,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x61,0x6e,0x69,0x69,0x53,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x61,0x6d,0x6f,0x65,0x69,0x54,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6d,0x6f,0x76,0x65,0x69,0x55,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x67,0x6f,0x6c,0x69,0x56,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x6d,0x6f,0x65,0x69,0x57,0x0,0x0,0x0,0x74,0x2,0x0,0x0,0x0,0x33,0x34,0x69,0x58,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x6c,0x69,0x66,0x69,0x59,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x74,0x61,0x6e,0x69,0x5a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x70,0x6e,0x67,0x69,0x5b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x72,0x69,0x6d,0x65,0x69,0x5c,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x66,0x6f,0x67,0x69,0x5d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x63,0x6c,0x6e,0x69,0x5e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x6f,0x76,0x65,0x69,0x5f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x65,0x75,0x74,0x69,0x60,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x61,0x72,0x70,0x69,0x61,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x75,0x6d,0x70,0x69,0x62,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x77,0x72,0x6b,0x69,0x63,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x69,0x70,0x65,0x69,0x64,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x72,0x7a,0x7a,0x69,0x65,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x72,0x7a,0x77,0x69,0x66,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x67,0x72,0x61,0x76,0x69,0x67,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x69,0x7a,0x72,0x69,0x68,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x62,0x69,0x7a,0x72,0x67,0x69,0x69,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x62,0x69,0x7a,0x72,0x73,0x69,0x6a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x6e,0x73,0x74,0x69,0x6b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x73,0x6f,0x7a,0x69,0x6c,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x73,0x7a,0x73,0x69,0x6d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x72,0x74,0x69,0x69,0x6e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x72,0x74,0x6f,0x69,0x6f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x73,0x74,0x65,0x69,0x70,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x73,0x74,0x73,0x69,0x71,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x61,0x6e,0x61,0x72,0x69,0x72,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x76,0x69,0x6e,0x65,0x69,0x73,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x69,0x6e,0x76,0x69,0x73,0x69,0x74,0x0,0x0,0x0,0x74,0x8,0x0,0x0,0x0,0x65,0x71,0x75,0x61,0x6c,0x76,0x65,0x6c,0x69,0x75,0x0,0x0,0x0,0x74,0x6,0x0,0x0,0x0,0x73,0x70,0x61,0x77,0x6e,0x32,0x69,0x76,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x70,0x61,0x77,0x6e,0x69,0x77,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x68,0x6c,0x64,0x31,0x69,0x78,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x68,0x6c,0x64,0x32,0x69,0x79,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x68,0x6c,0x64,0x33,0x69,0x7a,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x68,0x6c,0x64,0x34,0x69,0x7b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x6f,0x6c,0x7a,0x69,0x7c,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x69,0x66,0x69,0x69,0x7d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x69,0x6c,0x74,0x69,0x7e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x61,0x72,0x61,0x79,0x69,0x7f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x72,0x61,0x79,0x69,0x80,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x74,0x6b,0x6d,0x32,0x69,0x81,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x6f,0x6d,0x62,0x69,0x82,0x0,0x0,0x0,0x74,0x2,0x0,0x0,0x0,0x63,0x35,0x69,0x83,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x69,0x6e,0x67,0x69,0x84,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x71,0x72,0x74,0x7a,0x69,0x85,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x71,0x72,0x74,0x69,0x86,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x65,0x65,0x64,0x69,0x87,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6d,0x61,0x7a,0x65,0x69,0x88,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x63,0x6f,0x61,0x67,0x69,0x89,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x61,0x6c,0x6c,0x69,0x8a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x67,0x6e,0x61,0x72,0x69,0x8b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x72,0x65,0x70,0x6c,0x69,0x8c,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6d,0x79,0x73,0x74,0x69,0x8d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x6f,0x79,0x6c,0x69,0x8e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x6f,0x74,0x65,0x69,0x8f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x72,0x67,0x32,0x69,0x90,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x74,0x61,0x72,0x69,0x91,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x72,0x6f,0x67,0x69,0x92,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x72,0x61,0x6e,0x69,0x93,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x69,0x6e,0x64,0x69,0x94,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x6e,0x75,0x6d,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x4,0x0,0x0,0x0,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0xc,0x0,0x0,0x0,0x66,0x6f,0x72,0x6b,0x5f,0x75,0x6e,0x62,0x6c,0x6f,0x63,0x6b,0x32,0x0,0x0,0x0,0x73,0x2,0x0,0x0,0x0,0x0,0x1,0x63,0x1,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x2a,0x0,0x0,0x0,0x74,0x0,0x0,0x6a,0x1,0x0,0x83,0x0,0x0,0x1,0x74,0x0,0x0,0x6a,0x2,0x0,0x83,0x0,0x0,0x7d,0x1,0x0,0x74,0x3,0x0,0x6a,0x4,0x0,0x6a,0x5,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x6,0x0,0x0,0x0,0x74,0x9,0x0,0x0,0x0,0x74,0x72,0x61,0x63,0x65,0x62,0x61,0x63,0x6b,0x74,0x9,0x0,0x0,0x0,0x70,0x72,0x69,0x6e,0x74,0x5f,0x65,0x78,0x63,0x74,0xa,0x0,0x0,0x0,0x66,0x6f,0x72,0x6d,0x61,0x74,0x5f,0x65,0x78,0x63,0x74,0x3,0x0,0x0,0x0,0x73,0x79,0x73,0x74,0x6,0x0,0x0,0x0,0x73,0x74,0x64,0x6f,0x75,0x74,0x52,0x9,0x0,0x0,0x0,0x28,0x2,0x0,0x0,0x0,0x74,0x2,0x0,0x0,0x0,0x65,0x78,0x74,0x3,0x0,0x0,0x0,0x65,0x72,0x72,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0x5,0x0,0x0,0x0,0x65,0x72,0x72,0x6f,0x72,0x34,0x0,0x0,0x0,0x73,0x6,0x0,0x0,0x0,0x0,0x1,0xa,0x1,0xc,0x1,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x19,0x0,0x0,0x0,0x74,0x0,0x0,0x83,0x0,0x0,0x74,0x1,0x0,0x5f,0x2,0x0,0x64,0x1,0x0,0x74,0x1,0x0,0x5f,0x3,0x0,0x64,0x2,0x0,0x53,0x28,0x3,0x0,0x0,0x0,0x73,0xde,0x0,0x0,0x0,0x63,0x6f,0x70,0x79,0x3d,0x5b,0x22,0x5f,0x5f,0x62,0x75,0x69,0x6c,0x74,0x69,0x6e,0x73,0x5f,0x5f,0x22,0x2c,0x22,0x5f,0x5f,0x6e,0x61,0x6d,0x65,0x5f,0x5f,0x22,0x2c,0x22,0x5f,0x5f,0x64,0x6f,0x63,0x5f,0x5f,0x22,0x2c,0x22,0x5f,0x5f,0x70,0x61,0x63,0x6b,0x61,0x67,0x65,0x5f,0x5f,0x22,0x2c,0x27,0x74,0x70,0x74,0x27,0x2c,0x27,0x63,0x6c,0x65,0x61,0x6e,0x27,0x2c,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x27,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x27,0x2c,0x27,0x66,0x6f,0x72,0x6b,0x27,0x2c,0x27,0x5f,0x66,0x6f,0x72,0x6b,0x27,0x2c,0x27,0x66,0x6f,0x72,0x6b,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x27,0x2c,0x27,0x66,0x6f,0x72,0x6b,0x5f,0x75,0x6e,0x62,0x6c,0x6f,0x63,0x6b,0x27,0x2c,0x27,0x73,0x79,0x73,0x27,0x5d,0xa,0x20,0x20,0x20,0x20,0x68,0x61,0x6e,0x64,0x6c,0x65,0x2e,0x67,0x6c,0x6f,0x62,0x3d,0x7b,0x7d,0xa,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x69,0x74,0x65,0x6d,0x20,0x69,0x6e,0x20,0x63,0x6f,0x70,0x79,0x3a,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x61,0x6e,0x64,0x6c,0x65,0x2e,0x67,0x6c,0x6f,0x62,0x5b,0x69,0x74,0x65,0x6d,0x5d,0x3d,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x73,0x28,0x29,0x5b,0x69,0x74,0x65,0x6d,0x5d,0x74,0x0,0x0,0x0,0x0,0x4e,0x28,0x4,0x0,0x0,0x0,0x74,0x7,0x0,0x0,0x0,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x73,0x74,0x6,0x0,0x0,0x0,0x68,0x61,0x6e,0x64,0x6c,0x65,0x74,0x4,0x0,0x0,0x0,0x67,0x6c,0x6f,0x62,0x74,0x3,0x0,0x0,0x0,0x62,0x75,0x66,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0x5,0x0,0x0,0x0,0x63,0x6c,0x65,0x61,0x6e,0x39,0x0,0x0,0x0,0x73,0x4,0x0,0x0,0x0,0x0,0x7,0xc,0x1,0x63,0x1,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x50,0x0,0x0,0x0,0x79,0xd,0x0,0x74,0x0,0x0,0x6a,0x1,0x0,0x7d,0x1,0x0,0x57,0x6e,0xe,0x0,0x1,0x1,0x1,0x74,0x2,0x0,0x83,0x0,0x0,0x1,0x6e,0x1,0x0,0x58,0x79,0xe,0x0,0x74,0x3,0x0,0x7c,0x0,0x0,0x83,0x1,0x0,0x1,0x57,0x6e,0x1d,0x0,0x4,0x74,0x4,0x0,0x6b,0xa,0x0,0x72,0x4b,0x0,0x1,0x7d,0x2,0x0,0x1,0x74,0x5,0x0,0x7c,0x2,0x0,0x83,0x1,0x0,0x1,0x6e,0x1,0x0,0x58,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x6,0x0,0x0,0x0,0x52,0xac,0x0,0x0,0x0,0x52,0xad,0x0,0x0,0x0,0x52,0xaf,0x0,0x0,0x0,0x74,0x7,0x0,0x0,0x0,0x5f,0x68,0x61,0x6e,0x64,0x6c,0x65,0x74,0x9,0x0,0x0,0x0,0x45,0x78,0x63,0x65,0x70,0x74,0x69,0x6f,0x6e,0x52,0xa9,0x0,0x0,0x0,0x28,0x3,0x0,0x0,0x0,0x52,0x8,0x0,0x0,0x0,0x74,0x1,0x0,0x0,0x0,0x61,0x52,0xa7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x52,0xac,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x10,0x0,0x0,0x0,0x0,0x1,0x3,0x1,0xd,0x1,0x3,0x1,0xb,0x1,0x3,0x1,0xe,0x1,0xf,0x1,0x63,0x1,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x42,0x0,0x0,0x0,0x73,0x63,0x0,0x0,0x0,0x79,0x26,0x0,0x65,0x0,0x0,0x6a,0x1,0x0,0x6a,0x2,0x0,0x65,0x3,0x0,0x65,0x4,0x0,0x7c,0x0,0x0,0x65,0x5,0x0,0x6a,0x6,0x0,0x83,0x2,0x0,0x83,0x1,0x0,0x83,0x1,0x0,0x1,0x57,0x6e,0x36,0x0,0x1,0x1,0x1,0x79,0xf,0x0,0x7c,0x0,0x0,0x65,0x5,0x0,0x6a,0x6,0x0,0x4,0x55,0x57,0x71,0x5f,0x0,0x4,0x65,0x7,0x0,0x6b,0xa,0x0,0x72,0x5a,0x0,0x1,0x7d,0x1,0x0,0x1,0x65,0x8,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x71,0x5f,0x0,0x58,0x6e,0x1,0x0,0x58,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x9,0x0,0x0,0x0,0x52,0xa5,0x0,0x0,0x0,0x52,0xa6,0x0,0x0,0x0,0x52,0x9,0x0,0x0,0x0,0x52,0x4,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x65,0x76,0x61,0x6c,0x52,0xac,0x0,0x0,0x0,0x52,0xad,0x0,0x0,0x0,0x52,0xb1,0x0,0x0,0x0,0x52,0xa9,0x0,0x0,0x0,0x28,0x2,0x0,0x0,0x0,0x52,0x8,0x0,0x0,0x0,0x52,0xa7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x52,0xb0,0x0,0x0,0x0,0x4d,0x0,0x0,0x0,0x73,0xe,0x0,0x0,0x0,0x0,0x2,0x3,0x1,0x26,0x1,0x3,0x1,0x3,0x1,0xf,0x1,0xf,0x1,0x63,0x1,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x27,0x0,0x0,0x0,0x74,0x0,0x0,0x7c,0x0,0x0,0x83,0x1,0x0,0x7d,0x1,0x0,0x7c,0x1,0x0,0x6a,0x1,0x0,0x83,0x0,0x0,0x1,0x74,0x2,0x0,0x6a,0x3,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x4,0x0,0x0,0x0,0x74,0xa,0x0,0x0,0x0,0x5f,0x5f,0x69,0x6d,0x70,0x6f,0x72,0x74,0x5f,0x5f,0x74,0x4,0x0,0x0,0x0,0x69,0x6e,0x69,0x74,0x74,0xb,0x0,0x0,0x0,0x5f,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0x74,0x6,0x0,0x0,0x0,0x61,0x70,0x70,0x65,0x6e,0x64,0x28,0x2,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x66,0x6e,0x61,0x6d,0x65,0x74,0x3,0x0,0x0,0x0,0x65,0x78,0x74,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0x7,0x0,0x0,0x0,0x6c,0x6f,0x61,0x64,0x65,0x78,0x74,0x59,0x0,0x0,0x0,0x73,0x6,0x0,0x0,0x0,0x0,0x1,0xc,0x1,0xa,0x1,0x63,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x81,0x0,0x0,0x0,0x67,0x0,0x0,0x7d,0x1,0x0,0x78,0x4c,0x0,0x74,0x0,0x0,0x44,0x5d,0x44,0x0,0x7d,0x2,0x0,0x79,0x11,0x0,0x7c,0x2,0x0,0x6a,0x1,0x0,0x7c,0x0,0x0,0x83,0x1,0x0,0x1,0x57,0x71,0xd,0x0,0x4,0x74,0x2,0x0,0x6b,0xa,0x0,0x72,0x50,0x0,0x1,0x7d,0x3,0x0,0x1,0x74,0x3,0x0,0x7c,0x3,0x0,0x83,0x1,0x0,0x1,0x7c,0x1,0x0,0x6a,0x4,0x0,0x7c,0x2,0x0,0x83,0x1,0x0,0x1,0x71,0xd,0x0,0x58,0x71,0xd,0x0,0x57,0x78,0x25,0x0,0x7c,0x1,0x0,0x44,0x5d,0x1d,0x0,0x7d,0x2,0x0,0x7c,0x2,0x0,0x6a,0x5,0x0,0x83,0x0,0x0,0x1,0x74,0x0,0x0,0x6a,0x6,0x0,0x7c,0x2,0x0,0x83,0x1,0x0,0x1,0x71,0x5c,0x0,0x57,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x7,0x0,0x0,0x0,0x52,0xb6,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x6b,0x65,0x79,0x52,0xb1,0x0,0x0,0x0,0x52,0xa9,0x0,0x0,0x0,0x52,0xb7,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x65,0x78,0x69,0x74,0x74,0x6,0x0,0x0,0x0,0x72,0x65,0x6d,0x6f,0x76,0x65,0x28,0x4,0x0,0x0,0x0,0x52,0xbb,0x0,0x0,0x0,0x74,0x6,0x0,0x0,0x0,0x75,0x6e,0x6c,0x6f,0x61,0x64,0x74,0x4,0x0,0x0,0x0,0x69,0x74,0x65,0x6d,0x52,0xa7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0x8,0x0,0x0,0x0,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x5e,0x0,0x0,0x0,0x73,0x14,0x0,0x0,0x0,0x0,0x1,0x6,0x1,0xd,0x1,0x3,0x1,0x11,0x1,0xf,0x1,0xa,0x1,0x15,0x1,0xd,0x1,0xa,0x1,0x63,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0xa2,0x0,0x0,0x0,0x67,0x0,0x0,0x7d,0x0,0x0,0x78,0x49,0x0,0x74,0x0,0x0,0x44,0x5d,0x41,0x0,0x7d,0x1,0x0,0x79,0xe,0x0,0x7c,0x1,0x0,0x6a,0x1,0x0,0x83,0x0,0x0,0x1,0x57,0x71,0xd,0x0,0x4,0x74,0x2,0x0,0x6b,0xa,0x0,0x72,0x4d,0x0,0x1,0x7d,0x2,0x0,0x1,0x74,0x3,0x0,0x7c,0x2,0x0,0x83,0x1,0x0,0x1,0x7c,0x0,0x0,0x6a,0x4,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x71,0xd,0x0,0x58,0x71,0xd,0x0,0x57,0x78,0x49,0x0,0x7c,0x0,0x0,0x44,0x5d,0x41,0x0,0x7d,0x1,0x0,0x79,0xe,0x0,0x7c,0x1,0x0,0x6a,0x5,0x0,0x83,0x0,0x0,0x1,0x57,0x6e,0x1d,0x0,0x4,0x74,0x2,0x0,0x6b,0xa,0x0,0x72,0x8c,0x0,0x1,0x7d,0x2,0x0,0x1,0x74,0x3,0x0,0x7c,0x2,0x0,0x83,0x1,0x0,0x1,0x6e,0x1,0x0,0x58,0x74,0x0,0x0,0x6a,0x6,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x71,0x59,0x0,0x57,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x7,0x0,0x0,0x0,0x52,0xb6,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x74,0x65,0x70,0x52,0xb1,0x0,0x0,0x0,0x52,0xa9,0x0,0x0,0x0,0x52,0xb7,0x0,0x0,0x0,0x52,0xbc,0x0,0x0,0x0,0x52,0xbd,0x0,0x0,0x0,0x28,0x3,0x0,0x0,0x0,0x52,0xbe,0x0,0x0,0x0,0x52,0xbf,0x0,0x0,0x0,0x52,0xa7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x52,0xc1,0x0,0x0,0x0,0x6b,0x0,0x0,0x0,0x73,0x1a,0x0,0x0,0x0,0x0,0x1,0x6,0x1,0xd,0x1,0x3,0x1,0xe,0x1,0xf,0x1,0xa,0x1,0x15,0x1,0xd,0x1,0x3,0x1,0xe,0x1,0xf,0x1,0xe,0x1,0x28,0x0,0x0,0x0,0x0,0x28,0x14,0x0,0x0,0x0,0x52,0x5,0x0,0x0,0x0,0x52,0xa5,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x63,0x6f,0x64,0x65,0x74,0x6,0x0,0x0,0x0,0x63,0x74,0x79,0x70,0x65,0x73,0x52,0xa2,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x46,0x61,0x6c,0x73,0x65,0x74,0x5,0x0,0x0,0x0,0x44,0x45,0x42,0x55,0x47,0x52,0x1,0x0,0x0,0x0,0x52,0xa6,0x0,0x0,0x0,0x74,0x6,0x0,0x0,0x0,0x73,0x74,0x64,0x65,0x72,0x72,0x74,0x7,0x0,0x0,0x0,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x52,0xa1,0x0,0x0,0x0,0x52,0xa9,0x0,0x0,0x0,0x52,0xaf,0x0,0x0,0x0,0x52,0xac,0x0,0x0,0x0,0x52,0xb0,0x0,0x0,0x0,0x52,0xb6,0x0,0x0,0x0,0x52,0xba,0x0,0x0,0x0,0x52,0xc0,0x0,0x0,0x0,0x52,0xc1,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0x8,0x0,0x0,0x0,0x3c,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x3e,0x1,0x0,0x0,0x0,0x73,0x54,0x0,0x0,0x0,0xc,0x1,0xa,0x1,0xc,0x1,0xc,0x1,0xc,0x1,0xc,0x1,0x6,0x4,0x13,0x8,0xc,0x1,0xc,0x1,0xf,0x4,0x3b,0x1,0x38,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x2a,0x1,0x2a,0x1,0x2a,0x1,0x2a,0x1,0x2a,0x1,0x2a,0x1,0x2a,0x1,0x2a,0x1,0xa,0x3,0x9,0x2,0x9,0x5,0x9,0xa,0x9,0xa,0x9,0xb,0x6,0x1,0x9,0x5,0x9,0xd};
\ No newline at end of file +unsigned char tpt_console_pyc[] = {0x3,0xf3,0xd,0xa,0xc8,0x11,0x8a,0x4d,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x73,0xf1,0x4,0x0,0x0,0x64,0x0,0x0,0x64,0x1,0x0,0x6c,0x0,0x0,0x5a,0x0,0x0,0x64,0x0,0x0,0x64,0x2,0x0,0x6c,0x0,0x0,0x54,0x64,0x0,0x0,0x64,0x1,0x0,0x6c,0x1,0x0,0x5a,0x1,0x0,0x64,0x0,0x0,0x64,0x1,0x0,0x6c,0x2,0x0,0x5a,0x2,0x0,0x64,0x0,0x0,0x64,0x1,0x0,0x6c,0x3,0x0,0x5a,0x3,0x0,0x64,0x0,0x0,0x64,0x1,0x0,0x6c,0x4,0x0,0x5a,0x4,0x0,0x65,0x5,0x0,0x5a,0x6,0x0,0x64,0x3,0x0,0x64,0x37,0x1,0x64,0x4,0x0,0x84,0x0,0x0,0x83,0x0,0x0,0x59,0x5a,0x7,0x0,0x65,0x6,0x0,0x65,0x5,0x0,0x6b,0x2,0x0,0x72,0x86,0x0,0x65,0x7,0x0,0x83,0x0,0x0,0x65,0x1,0x0,0x5f,0x8,0x0,0x65,0x7,0x0,0x83,0x0,0x0,0x65,0x1,0x0,0x5f,0x9,0x0,0x6e,0x0,0x0,0x69,0x95,0x0,0x64,0x5,0x0,0x64,0x6,0x0,0x36,0x64,0x7,0x0,0x64,0x8,0x0,0x36,0x64,0x9,0x0,0x64,0xa,0x0,0x36,0x64,0xb,0x0,0x64,0xc,0x0,0x36,0x64,0xd,0x0,0x64,0xe,0x0,0x36,0x64,0xf,0x0,0x64,0x10,0x0,0x36,0x64,0x11,0x0,0x64,0x12,0x0,0x36,0x64,0x13,0x0,0x64,0x14,0x0,0x36,0x64,0x15,0x0,0x64,0x16,0x0,0x36,0x64,0x17,0x0,0x64,0x18,0x0,0x36,0x64,0x19,0x0,0x64,0x1a,0x0,0x36,0x64,0x1b,0x0,0x64,0x1c,0x0,0x36,0x64,0x1d,0x0,0x64,0x1e,0x0,0x36,0x64,0x1f,0x0,0x64,0x20,0x0,0x36,0x64,0x21,0x0,0x64,0x22,0x0,0x36,0x64,0x23,0x0,0x64,0x24,0x0,0x36,0x64,0x25,0x0,0x64,0x26,0x0,0x36,0x64,0x27,0x0,0x64,0x28,0x0,0x36,0x64,0x29,0x0,0x64,0x2a,0x0,0x36,0x64,0x2b,0x0,0x64,0x2c,0x0,0x36,0x64,0x2d,0x0,0x64,0x2e,0x0,0x36,0x64,0x2f,0x0,0x64,0x30,0x0,0x36,0x64,0x31,0x0,0x64,0x32,0x0,0x36,0x64,0x33,0x0,0x64,0x34,0x0,0x36,0x64,0x35,0x0,0x64,0x36,0x0,0x36,0x64,0x37,0x0,0x64,0x38,0x0,0x36,0x64,0x39,0x0,0x64,0x3a,0x0,0x36,0x64,0x3b,0x0,0x64,0x3c,0x0,0x36,0x64,0x3d,0x0,0x64,0x3e,0x0,0x36,0x64,0x3f,0x0,0x64,0x40,0x0,0x36,0x64,0x41,0x0,0x64,0x42,0x0,0x36,0x64,0x43,0x0,0x64,0x44,0x0,0x36,0x64,0x45,0x0,0x64,0x46,0x0,0x36,0x64,0x47,0x0,0x64,0x48,0x0,0x36,0x64,0x49,0x0,0x64,0x4a,0x0,0x36,0x64,0x4b,0x0,0x64,0x4c,0x0,0x36,0x64,0x4d,0x0,0x64,0x4e,0x0,0x36,0x64,0x4f,0x0,0x64,0x50,0x0,0x36,0x64,0x51,0x0,0x64,0x52,0x0,0x36,0x64,0x53,0x0,0x64,0x54,0x0,0x36,0x64,0x55,0x0,0x64,0x56,0x0,0x36,0x64,0x57,0x0,0x64,0x58,0x0,0x36,0x64,0x59,0x0,0x64,0x5a,0x0,0x36,0x64,0x5b,0x0,0x64,0x5c,0x0,0x36,0x64,0x5d,0x0,0x64,0x5e,0x0,0x36,0x64,0x5f,0x0,0x64,0x60,0x0,0x36,0x64,0x61,0x0,0x64,0x62,0x0,0x36,0x64,0x63,0x0,0x64,0x64,0x0,0x36,0x64,0x65,0x0,0x64,0x66,0x0,0x36,0x64,0x67,0x0,0x64,0x68,0x0,0x36,0x64,0x69,0x0,0x64,0x6a,0x0,0x36,0x64,0x6b,0x0,0x64,0x6c,0x0,0x36,0x64,0x6d,0x0,0x64,0x6e,0x0,0x36,0x64,0x6f,0x0,0x64,0x70,0x0,0x36,0x64,0x71,0x0,0x64,0x72,0x0,0x36,0x64,0x73,0x0,0x64,0x74,0x0,0x36,0x64,0x75,0x0,0x64,0x76,0x0,0x36,0x64,0x77,0x0,0x64,0x78,0x0,0x36,0x64,0x79,0x0,0x64,0x7a,0x0,0x36,0x64,0x7b,0x0,0x64,0x7c,0x0,0x36,0x64,0x7d,0x0,0x64,0x7e,0x0,0x36,0x64,0x7f,0x0,0x64,0x80,0x0,0x36,0x64,0x81,0x0,0x64,0x82,0x0,0x36,0x64,0x83,0x0,0x64,0x84,0x0,0x36,0x64,0x85,0x0,0x64,0x86,0x0,0x36,0x64,0x87,0x0,0x64,0x88,0x0,0x36,0x64,0x89,0x0,0x64,0x8a,0x0,0x36,0x64,0x8b,0x0,0x64,0x8c,0x0,0x36,0x64,0x8d,0x0,0x64,0x8e,0x0,0x36,0x64,0x8f,0x0,0x64,0x90,0x0,0x36,0x64,0x91,0x0,0x64,0x92,0x0,0x36,0x64,0x93,0x0,0x64,0x94,0x0,0x36,0x64,0x95,0x0,0x64,0x96,0x0,0x36,0x64,0x97,0x0,0x64,0x98,0x0,0x36,0x64,0x99,0x0,0x64,0x9a,0x0,0x36,0x64,0x9b,0x0,0x64,0x9c,0x0,0x36,0x64,0x9d,0x0,0x64,0x9e,0x0,0x36,0x64,0x9f,0x0,0x64,0xa0,0x0,0x36,0x64,0xa1,0x0,0x64,0xa2,0x0,0x36,0x64,0xa3,0x0,0x64,0xa4,0x0,0x36,0x64,0xa5,0x0,0x64,0xa6,0x0,0x36,0x64,0xa7,0x0,0x64,0xa8,0x0,0x36,0x64,0xa9,0x0,0x64,0xaa,0x0,0x36,0x64,0xab,0x0,0x64,0xac,0x0,0x36,0x64,0xad,0x0,0x64,0xae,0x0,0x36,0x64,0xaf,0x0,0x64,0xb0,0x0,0x36,0x64,0xb1,0x0,0x64,0xb2,0x0,0x36,0x64,0xb3,0x0,0x64,0xb4,0x0,0x36,0x64,0xb5,0x0,0x64,0xb6,0x0,0x36,0x64,0xb7,0x0,0x64,0xb8,0x0,0x36,0x64,0xb9,0x0,0x64,0xba,0x0,0x36,0x64,0xbb,0x0,0x64,0xbc,0x0,0x36,0x64,0xbd,0x0,0x64,0xbe,0x0,0x36,0x64,0xbf,0x0,0x64,0xc0,0x0,0x36,0x64,0xc1,0x0,0x64,0xc2,0x0,0x36,0x64,0xc3,0x0,0x64,0xc4,0x0,0x36,0x64,0xc5,0x0,0x64,0xc6,0x0,0x36,0x64,0xc7,0x0,0x64,0xc8,0x0,0x36,0x64,0xc9,0x0,0x64,0xca,0x0,0x36,0x64,0xcb,0x0,0x64,0xcc,0x0,0x36,0x64,0xcd,0x0,0x64,0xce,0x0,0x36,0x64,0xcf,0x0,0x64,0xd0,0x0,0x36,0x64,0xd1,0x0,0x64,0xd2,0x0,0x36,0x64,0xd3,0x0,0x64,0xd4,0x0,0x36,0x64,0xd5,0x0,0x64,0xd6,0x0,0x36,0x64,0xd7,0x0,0x64,0xd8,0x0,0x36,0x64,0xd9,0x0,0x64,0xda,0x0,0x36,0x64,0xdb,0x0,0x64,0xdc,0x0,0x36,0x64,0xdd,0x0,0x64,0xde,0x0,0x36,0x64,0xdf,0x0,0x64,0xe0,0x0,0x36,0x64,0xe1,0x0,0x64,0xe2,0x0,0x36,0x64,0xe3,0x0,0x64,0xe4,0x0,0x36,0x64,0xe5,0x0,0x64,0xe6,0x0,0x36,0x64,0xe7,0x0,0x64,0xe8,0x0,0x36,0x64,0xe9,0x0,0x64,0xea,0x0,0x36,0x64,0xeb,0x0,0x64,0xec,0x0,0x36,0x64,0xed,0x0,0x64,0xee,0x0,0x36,0x64,0xef,0x0,0x64,0xf0,0x0,0x36,0x64,0xf1,0x0,0x64,0xf2,0x0,0x36,0x64,0xf3,0x0,0x64,0xf4,0x0,0x36,0x64,0xf5,0x0,0x64,0xf6,0x0,0x36,0x64,0xf7,0x0,0x64,0xf8,0x0,0x36,0x64,0xf9,0x0,0x64,0xfa,0x0,0x36,0x64,0xfb,0x0,0x64,0xfc,0x0,0x36,0x64,0xfd,0x0,0x64,0xfe,0x0,0x36,0x64,0xff,0x0,0x64,0x0,0x1,0x36,0x64,0x1,0x1,0x64,0x2,0x1,0x36,0x64,0x3,0x1,0x64,0x4,0x1,0x36,0x64,0x5,0x1,0x64,0x6,0x1,0x36,0x64,0x7,0x1,0x64,0x8,0x1,0x36,0x64,0x9,0x1,0x64,0xa,0x1,0x36,0x64,0xb,0x1,0x64,0xc,0x1,0x36,0x64,0xd,0x1,0x64,0xe,0x1,0x36,0x64,0xf,0x1,0x64,0x10,0x1,0x36,0x64,0x11,0x1,0x64,0x12,0x1,0x36,0x64,0x13,0x1,0x64,0x14,0x1,0x36,0x64,0x15,0x1,0x64,0x16,0x1,0x36,0x64,0x17,0x1,0x64,0x18,0x1,0x36,0x64,0x19,0x1,0x64,0x1a,0x1,0x36,0x64,0x1b,0x1,0x64,0x1c,0x1,0x36,0x64,0x1d,0x1,0x64,0x1e,0x1,0x36,0x64,0x1f,0x1,0x64,0x20,0x1,0x36,0x64,0x21,0x1,0x64,0x22,0x1,0x36,0x64,0x23,0x1,0x64,0x24,0x1,0x36,0x64,0x25,0x1,0x64,0x26,0x1,0x36,0x64,0x27,0x1,0x64,0x28,0x1,0x36,0x64,0x29,0x1,0x64,0x2a,0x1,0x36,0x64,0x2b,0x1,0x64,0x2c,0x1,0x36,0x64,0x2d,0x1,0x64,0x2e,0x1,0x36,0x5a,0xa,0x0,0x64,0x2f,0x1,0x84,0x0,0x0,0x5a,0xb,0x0,0x64,0x30,0x1,0x84,0x0,0x0,0x5a,0xc,0x0,0x64,0x31,0x1,0x84,0x0,0x0,0x5a,0xd,0x0,0x64,0x32,0x1,0x84,0x0,0x0,0x5a,0xe,0x0,0x64,0x33,0x1,0x84,0x0,0x0,0x5a,0xf,0x0,0x67,0x0,0x0,0x5a,0x10,0x0,0x64,0x34,0x1,0x84,0x0,0x0,0x5a,0x11,0x0,0x64,0x35,0x1,0x84,0x0,0x0,0x5a,0x12,0x0,0x64,0x36,0x1,0x84,0x0,0x0,0x5a,0x13,0x0,0x64,0x1,0x0,0x53,0x28,0x38,0x1,0x0,0x0,0x69,0xff,0xff,0xff,0xff,0x4e,0x28,0x1,0x0,0x0,0x0,0x74,0x1,0x0,0x0,0x0,0x2a,0x74,0x6,0x0,0x0,0x0,0x6c,0x6f,0x67,0x67,0x65,0x72,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x42,0x0,0x0,0x0,0x73,0x11,0x0,0x0,0x0,0x65,0x0,0x0,0x5a,0x1,0x0,0x64,0x0,0x0,0x84,0x0,0x0,0x5a,0x2,0x0,0x52,0x53,0x28,0x1,0x0,0x0,0x0,0x63,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x42,0x0,0x0,0x0,0x7c,0x1,0x0,0x6a,0x0,0x0,0x83,0x0,0x0,0x6a,0x1,0x0,0x64,0x1,0x0,0x83,0x1,0x0,0x64,0x2,0x0,0x19,0x7d,0x1,0x0,0x74,0x2,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x79,0x11,0x0,0x74,0x3,0x0,0x6a,0x4,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x57,0x6e,0x7,0x0,0x1,0x1,0x1,0x6e,0x1,0x0,0x58,0x64,0x0,0x0,0x53,0x28,0x3,0x0,0x0,0x0,0x4e,0x73,0x1,0x0,0x0,0x0,0xa,0x69,0xff,0xff,0xff,0xff,0x28,0x5,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x74,0x72,0x69,0x70,0x74,0x5,0x0,0x0,0x0,0x73,0x70,0x6c,0x69,0x74,0x74,0x4,0x0,0x0,0x0,0x72,0x65,0x70,0x72,0x74,0x3,0x0,0x0,0x0,0x74,0x70,0x74,0x74,0x3,0x0,0x0,0x0,0x6c,0x6f,0x67,0x28,0x2,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x65,0x6c,0x66,0x74,0x3,0x0,0x0,0x0,0x74,0x78,0x74,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0x5,0x0,0x0,0x0,0x77,0x72,0x69,0x74,0x65,0xc,0x0,0x0,0x0,0x73,0xc,0x0,0x0,0x0,0x0,0x1,0x19,0x1,0xa,0x1,0x3,0x1,0x11,0x1,0x3,0x1,0x28,0x3,0x0,0x0,0x0,0x74,0x8,0x0,0x0,0x0,0x5f,0x5f,0x6e,0x61,0x6d,0x65,0x5f,0x5f,0x74,0xa,0x0,0x0,0x0,0x5f,0x5f,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x5f,0x5f,0x52,0x9,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x52,0x1,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x73,0x2,0x0,0x0,0x0,0x6,0x1,0x69,0x0,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x6f,0x6e,0x65,0x69,0x1,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x75,0x73,0x74,0x69,0x2,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x61,0x74,0x72,0x69,0x3,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x6f,0x69,0x6c,0x69,0x4,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x69,0x72,0x65,0x69,0x5,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x74,0x6e,0x65,0x69,0x6,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x61,0x76,0x61,0x69,0x7,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x67,0x75,0x6e,0x70,0x69,0x8,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x69,0x74,0x72,0x69,0x9,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x63,0x6c,0x6e,0x65,0x69,0xa,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x67,0x61,0x73,0x69,0xb,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x6c,0x65,0x78,0x69,0xc,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x67,0x6f,0x6f,0x69,0xd,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x63,0x65,0x69,0x69,0xe,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6d,0x65,0x74,0x6c,0x69,0xf,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x70,0x72,0x6b,0x69,0x10,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x6e,0x6f,0x77,0x69,0x11,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x6f,0x6f,0x64,0x69,0x12,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x65,0x75,0x74,0x69,0x13,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x6c,0x75,0x74,0x69,0x14,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x6c,0x6e,0x74,0x69,0x15,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x61,0x63,0x69,0x64,0x69,0x16,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x76,0x6f,0x69,0x64,0x69,0x17,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x74,0x72,0x76,0x69,0x18,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x63,0x6e,0x63,0x74,0x69,0x19,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x73,0x74,0x77,0x69,0x1a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x61,0x6c,0x74,0x69,0x1b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x6c,0x74,0x77,0x69,0x1c,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x6d,0x6e,0x64,0x69,0x1d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x6d,0x74,0x6c,0x69,0x1e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x72,0x6d,0x74,0x69,0x1f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x68,0x6f,0x74,0x69,0x20,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x75,0x72,0x61,0x6e,0x69,0x21,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x77,0x61,0x78,0x69,0x22,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6d,0x77,0x61,0x78,0x69,0x23,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x73,0x63,0x6e,0x69,0x24,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x73,0x63,0x6e,0x69,0x25,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x6e,0x74,0x67,0x69,0x26,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x6e,0x73,0x6c,0x69,0x27,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x68,0x6f,0x6c,0x69,0x28,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x68,0x6f,0x6c,0x69,0x29,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x72,0x62,0x64,0x6d,0x69,0x2a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x72,0x62,0x64,0x69,0x2b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x74,0x63,0x74,0x69,0x2c,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x61,0x6e,0x64,0x69,0x2d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x67,0x6c,0x61,0x73,0x69,0x2e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x74,0x63,0x74,0x69,0x2f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x67,0x6c,0x61,0x69,0x30,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x74,0x68,0x64,0x72,0x69,0x31,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x6c,0x73,0x6d,0x69,0x32,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x65,0x74,0x72,0x64,0x69,0x33,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x69,0x63,0x65,0x69,0x34,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6e,0x62,0x6c,0x65,0x69,0x35,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x74,0x72,0x79,0x69,0x36,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x63,0x72,0x79,0x69,0x37,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x74,0x6b,0x6d,0x69,0x38,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x77,0x63,0x68,0x69,0x39,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x6d,0x6b,0x65,0x69,0x3a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x65,0x73,0x6c,0x69,0x3b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x63,0x6f,0x61,0x6c,0x69,0x3c,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x6c,0x6f,0x32,0x69,0x3d,0x0,0x0,0x0,0x74,0x2,0x0,0x0,0x0,0x6f,0x32,0x69,0x3e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x6e,0x77,0x72,0x69,0x3f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x79,0x65,0x73,0x74,0x69,0x40,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x79,0x73,0x74,0x69,0x41,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x74,0x68,0x72,0x6d,0x69,0x42,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x67,0x6c,0x6f,0x77,0x69,0x43,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x72,0x63,0x6b,0x69,0x44,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x68,0x66,0x6c,0x6d,0x69,0x45,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x69,0x72,0x77,0x69,0x46,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x75,0x73,0x65,0x69,0x47,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x73,0x65,0x70,0x69,0x48,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x61,0x6d,0x74,0x72,0x69,0x49,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x63,0x6f,0x6c,0x69,0x4a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x63,0x6c,0x6e,0x69,0x4b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x68,0x73,0x77,0x63,0x69,0x4c,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x72,0x6f,0x6e,0x69,0x4d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6d,0x6f,0x72,0x74,0x69,0x4e,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x67,0x6f,0x6c,0x69,0x4f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x68,0x6c,0x69,0x66,0x69,0x50,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x61,0x73,0x69,0x6d,0x69,0x51,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x32,0x78,0x32,0x69,0x52,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x61,0x6e,0x69,0x69,0x53,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x61,0x6d,0x6f,0x65,0x69,0x54,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6d,0x6f,0x76,0x65,0x69,0x55,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x67,0x6f,0x6c,0x69,0x56,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x6d,0x6f,0x65,0x69,0x57,0x0,0x0,0x0,0x74,0x2,0x0,0x0,0x0,0x33,0x34,0x69,0x58,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x6c,0x69,0x66,0x69,0x59,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x74,0x61,0x6e,0x69,0x5a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x70,0x6e,0x67,0x69,0x5b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x72,0x69,0x6d,0x65,0x69,0x5c,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x66,0x6f,0x67,0x69,0x5d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x63,0x6c,0x6e,0x69,0x5e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x6f,0x76,0x65,0x69,0x5f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x64,0x65,0x75,0x74,0x69,0x60,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x61,0x72,0x70,0x69,0x61,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x75,0x6d,0x70,0x69,0x62,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x77,0x72,0x6b,0x69,0x63,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x69,0x70,0x65,0x69,0x64,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x72,0x7a,0x7a,0x69,0x65,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x72,0x7a,0x77,0x69,0x66,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x67,0x72,0x61,0x76,0x69,0x67,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x69,0x7a,0x72,0x69,0x68,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x62,0x69,0x7a,0x72,0x67,0x69,0x69,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x62,0x69,0x7a,0x72,0x73,0x69,0x6a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x6e,0x73,0x74,0x69,0x6b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x73,0x6f,0x7a,0x69,0x6c,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x69,0x73,0x7a,0x73,0x69,0x6d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x72,0x74,0x69,0x69,0x6e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x72,0x74,0x6f,0x69,0x6f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x73,0x74,0x65,0x69,0x70,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x73,0x74,0x73,0x69,0x71,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x61,0x6e,0x61,0x72,0x69,0x72,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x76,0x69,0x6e,0x65,0x69,0x73,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x69,0x6e,0x76,0x69,0x73,0x69,0x74,0x0,0x0,0x0,0x74,0x8,0x0,0x0,0x0,0x65,0x71,0x75,0x61,0x6c,0x76,0x65,0x6c,0x69,0x75,0x0,0x0,0x0,0x74,0x6,0x0,0x0,0x0,0x73,0x70,0x61,0x77,0x6e,0x32,0x69,0x76,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x70,0x61,0x77,0x6e,0x69,0x77,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x68,0x6c,0x64,0x31,0x69,0x78,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x68,0x6c,0x64,0x32,0x69,0x79,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x68,0x6c,0x64,0x33,0x69,0x7a,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x68,0x6c,0x64,0x34,0x69,0x7b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x6f,0x6c,0x7a,0x69,0x7c,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x69,0x66,0x69,0x69,0x7d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x69,0x6c,0x74,0x69,0x7e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x61,0x72,0x61,0x79,0x69,0x7f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x72,0x61,0x79,0x69,0x80,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x73,0x74,0x6b,0x6d,0x32,0x69,0x81,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x6f,0x6d,0x62,0x69,0x82,0x0,0x0,0x0,0x74,0x2,0x0,0x0,0x0,0x63,0x35,0x69,0x83,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x69,0x6e,0x67,0x69,0x84,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x71,0x72,0x74,0x7a,0x69,0x85,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x70,0x71,0x72,0x74,0x69,0x86,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x65,0x65,0x64,0x69,0x87,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6d,0x61,0x7a,0x65,0x69,0x88,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x63,0x6f,0x61,0x67,0x69,0x89,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x61,0x6c,0x6c,0x69,0x8a,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x67,0x6e,0x61,0x72,0x69,0x8b,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x72,0x65,0x70,0x6c,0x69,0x8c,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6d,0x79,0x73,0x74,0x69,0x8d,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x6f,0x79,0x6c,0x69,0x8e,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x6c,0x6f,0x74,0x65,0x69,0x8f,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x72,0x67,0x32,0x69,0x90,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x74,0x61,0x72,0x69,0x91,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x66,0x72,0x6f,0x67,0x69,0x92,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x62,0x72,0x61,0x6e,0x69,0x93,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x77,0x69,0x6e,0x64,0x69,0x94,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x6e,0x75,0x6d,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x4,0x0,0x0,0x0,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0xc,0x0,0x0,0x0,0x66,0x6f,0x72,0x6b,0x5f,0x75,0x6e,0x62,0x6c,0x6f,0x63,0x6b,0x32,0x0,0x0,0x0,0x73,0x2,0x0,0x0,0x0,0x0,0x1,0x63,0x1,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x2a,0x0,0x0,0x0,0x74,0x0,0x0,0x6a,0x1,0x0,0x83,0x0,0x0,0x1,0x74,0x0,0x0,0x6a,0x2,0x0,0x83,0x0,0x0,0x7d,0x1,0x0,0x74,0x3,0x0,0x6a,0x4,0x0,0x6a,0x5,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x6,0x0,0x0,0x0,0x74,0x9,0x0,0x0,0x0,0x74,0x72,0x61,0x63,0x65,0x62,0x61,0x63,0x6b,0x74,0x9,0x0,0x0,0x0,0x70,0x72,0x69,0x6e,0x74,0x5f,0x65,0x78,0x63,0x74,0xa,0x0,0x0,0x0,0x66,0x6f,0x72,0x6d,0x61,0x74,0x5f,0x65,0x78,0x63,0x74,0x3,0x0,0x0,0x0,0x73,0x79,0x73,0x74,0x6,0x0,0x0,0x0,0x73,0x74,0x64,0x6f,0x75,0x74,0x52,0x9,0x0,0x0,0x0,0x28,0x2,0x0,0x0,0x0,0x74,0x2,0x0,0x0,0x0,0x65,0x78,0x74,0x3,0x0,0x0,0x0,0x65,0x72,0x72,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0x5,0x0,0x0,0x0,0x65,0x72,0x72,0x6f,0x72,0x34,0x0,0x0,0x0,0x73,0x6,0x0,0x0,0x0,0x0,0x1,0xa,0x1,0xc,0x1,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x19,0x0,0x0,0x0,0x74,0x0,0x0,0x83,0x0,0x0,0x74,0x1,0x0,0x5f,0x2,0x0,0x64,0x1,0x0,0x74,0x1,0x0,0x5f,0x3,0x0,0x64,0x2,0x0,0x53,0x28,0x3,0x0,0x0,0x0,0x73,0xde,0x0,0x0,0x0,0x63,0x6f,0x70,0x79,0x3d,0x5b,0x22,0x5f,0x5f,0x62,0x75,0x69,0x6c,0x74,0x69,0x6e,0x73,0x5f,0x5f,0x22,0x2c,0x22,0x5f,0x5f,0x6e,0x61,0x6d,0x65,0x5f,0x5f,0x22,0x2c,0x22,0x5f,0x5f,0x64,0x6f,0x63,0x5f,0x5f,0x22,0x2c,0x22,0x5f,0x5f,0x70,0x61,0x63,0x6b,0x61,0x67,0x65,0x5f,0x5f,0x22,0x2c,0x27,0x74,0x70,0x74,0x27,0x2c,0x27,0x63,0x6c,0x65,0x61,0x6e,0x27,0x2c,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x27,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x27,0x2c,0x27,0x66,0x6f,0x72,0x6b,0x27,0x2c,0x27,0x5f,0x66,0x6f,0x72,0x6b,0x27,0x2c,0x27,0x66,0x6f,0x72,0x6b,0x5f,0x73,0x74,0x61,0x74,0x75,0x73,0x27,0x2c,0x27,0x66,0x6f,0x72,0x6b,0x5f,0x75,0x6e,0x62,0x6c,0x6f,0x63,0x6b,0x27,0x2c,0x27,0x73,0x79,0x73,0x27,0x5d,0xa,0x20,0x20,0x20,0x20,0x68,0x61,0x6e,0x64,0x6c,0x65,0x2e,0x67,0x6c,0x6f,0x62,0x3d,0x7b,0x7d,0xa,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x69,0x74,0x65,0x6d,0x20,0x69,0x6e,0x20,0x63,0x6f,0x70,0x79,0x3a,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x61,0x6e,0x64,0x6c,0x65,0x2e,0x67,0x6c,0x6f,0x62,0x5b,0x69,0x74,0x65,0x6d,0x5d,0x3d,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x73,0x28,0x29,0x5b,0x69,0x74,0x65,0x6d,0x5d,0x74,0x0,0x0,0x0,0x0,0x4e,0x28,0x4,0x0,0x0,0x0,0x74,0x7,0x0,0x0,0x0,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x73,0x74,0x6,0x0,0x0,0x0,0x68,0x61,0x6e,0x64,0x6c,0x65,0x74,0x4,0x0,0x0,0x0,0x67,0x6c,0x6f,0x62,0x74,0x3,0x0,0x0,0x0,0x62,0x75,0x66,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0x5,0x0,0x0,0x0,0x63,0x6c,0x65,0x61,0x6e,0x39,0x0,0x0,0x0,0x73,0x4,0x0,0x0,0x0,0x0,0x7,0xc,0x1,0x63,0x1,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x50,0x0,0x0,0x0,0x79,0xd,0x0,0x74,0x0,0x0,0x6a,0x1,0x0,0x7d,0x1,0x0,0x57,0x6e,0xe,0x0,0x1,0x1,0x1,0x74,0x2,0x0,0x83,0x0,0x0,0x1,0x6e,0x1,0x0,0x58,0x79,0xe,0x0,0x74,0x3,0x0,0x7c,0x0,0x0,0x83,0x1,0x0,0x1,0x57,0x6e,0x1d,0x0,0x4,0x74,0x4,0x0,0x6b,0xa,0x0,0x72,0x4b,0x0,0x1,0x7d,0x2,0x0,0x1,0x74,0x5,0x0,0x7c,0x2,0x0,0x83,0x1,0x0,0x1,0x6e,0x1,0x0,0x58,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x6,0x0,0x0,0x0,0x52,0xac,0x0,0x0,0x0,0x52,0xad,0x0,0x0,0x0,0x52,0xaf,0x0,0x0,0x0,0x74,0x7,0x0,0x0,0x0,0x5f,0x68,0x61,0x6e,0x64,0x6c,0x65,0x74,0x9,0x0,0x0,0x0,0x45,0x78,0x63,0x65,0x70,0x74,0x69,0x6f,0x6e,0x52,0xa9,0x0,0x0,0x0,0x28,0x3,0x0,0x0,0x0,0x52,0x8,0x0,0x0,0x0,0x74,0x1,0x0,0x0,0x0,0x61,0x52,0xa7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x52,0xac,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x10,0x0,0x0,0x0,0x0,0x1,0x3,0x1,0xd,0x1,0x3,0x1,0xb,0x1,0x3,0x1,0xe,0x1,0xf,0x1,0x63,0x1,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x42,0x0,0x0,0x0,0x73,0x63,0x0,0x0,0x0,0x79,0x26,0x0,0x65,0x0,0x0,0x6a,0x1,0x0,0x6a,0x2,0x0,0x65,0x3,0x0,0x65,0x4,0x0,0x7c,0x0,0x0,0x65,0x5,0x0,0x6a,0x6,0x0,0x83,0x2,0x0,0x83,0x1,0x0,0x83,0x1,0x0,0x1,0x57,0x6e,0x36,0x0,0x1,0x1,0x1,0x79,0xf,0x0,0x7c,0x0,0x0,0x65,0x5,0x0,0x6a,0x6,0x0,0x4,0x55,0x57,0x71,0x5f,0x0,0x4,0x65,0x7,0x0,0x6b,0xa,0x0,0x72,0x5a,0x0,0x1,0x7d,0x1,0x0,0x1,0x65,0x8,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x71,0x5f,0x0,0x58,0x6e,0x1,0x0,0x58,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x9,0x0,0x0,0x0,0x52,0xa5,0x0,0x0,0x0,0x52,0xa6,0x0,0x0,0x0,0x52,0x9,0x0,0x0,0x0,0x52,0x4,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x65,0x76,0x61,0x6c,0x52,0xac,0x0,0x0,0x0,0x52,0xad,0x0,0x0,0x0,0x52,0xb1,0x0,0x0,0x0,0x52,0xa9,0x0,0x0,0x0,0x28,0x2,0x0,0x0,0x0,0x52,0x8,0x0,0x0,0x0,0x52,0xa7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x52,0xb0,0x0,0x0,0x0,0x4d,0x0,0x0,0x0,0x73,0xe,0x0,0x0,0x0,0x0,0x2,0x3,0x1,0x26,0x1,0x3,0x1,0x3,0x1,0xf,0x1,0xf,0x1,0x63,0x1,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x27,0x0,0x0,0x0,0x74,0x0,0x0,0x7c,0x0,0x0,0x83,0x1,0x0,0x7d,0x1,0x0,0x7c,0x1,0x0,0x6a,0x1,0x0,0x83,0x0,0x0,0x1,0x74,0x2,0x0,0x6a,0x3,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x4,0x0,0x0,0x0,0x74,0xa,0x0,0x0,0x0,0x5f,0x5f,0x69,0x6d,0x70,0x6f,0x72,0x74,0x5f,0x5f,0x74,0x4,0x0,0x0,0x0,0x69,0x6e,0x69,0x74,0x74,0xb,0x0,0x0,0x0,0x5f,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0x74,0x6,0x0,0x0,0x0,0x61,0x70,0x70,0x65,0x6e,0x64,0x28,0x2,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x66,0x6e,0x61,0x6d,0x65,0x74,0x3,0x0,0x0,0x0,0x65,0x78,0x74,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0x7,0x0,0x0,0x0,0x6c,0x6f,0x61,0x64,0x65,0x78,0x74,0x59,0x0,0x0,0x0,0x73,0x6,0x0,0x0,0x0,0x0,0x1,0xc,0x1,0xa,0x1,0x63,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0x81,0x0,0x0,0x0,0x67,0x0,0x0,0x7d,0x1,0x0,0x78,0x4c,0x0,0x74,0x0,0x0,0x44,0x5d,0x44,0x0,0x7d,0x2,0x0,0x79,0x11,0x0,0x7c,0x2,0x0,0x6a,0x1,0x0,0x7c,0x0,0x0,0x83,0x1,0x0,0x1,0x57,0x71,0xd,0x0,0x4,0x74,0x2,0x0,0x6b,0xa,0x0,0x72,0x50,0x0,0x1,0x7d,0x3,0x0,0x1,0x74,0x3,0x0,0x7c,0x3,0x0,0x83,0x1,0x0,0x1,0x7c,0x1,0x0,0x6a,0x4,0x0,0x7c,0x2,0x0,0x83,0x1,0x0,0x1,0x71,0xd,0x0,0x58,0x71,0xd,0x0,0x57,0x78,0x25,0x0,0x7c,0x1,0x0,0x44,0x5d,0x1d,0x0,0x7d,0x2,0x0,0x7c,0x2,0x0,0x6a,0x5,0x0,0x83,0x0,0x0,0x1,0x74,0x0,0x0,0x6a,0x6,0x0,0x7c,0x2,0x0,0x83,0x1,0x0,0x1,0x71,0x5c,0x0,0x57,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x7,0x0,0x0,0x0,0x52,0xb6,0x0,0x0,0x0,0x74,0x3,0x0,0x0,0x0,0x6b,0x65,0x79,0x52,0xb1,0x0,0x0,0x0,0x52,0xa9,0x0,0x0,0x0,0x52,0xb7,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x65,0x78,0x69,0x74,0x74,0x6,0x0,0x0,0x0,0x72,0x65,0x6d,0x6f,0x76,0x65,0x28,0x4,0x0,0x0,0x0,0x52,0xbb,0x0,0x0,0x0,0x74,0x6,0x0,0x0,0x0,0x75,0x6e,0x6c,0x6f,0x61,0x64,0x74,0x4,0x0,0x0,0x0,0x69,0x74,0x65,0x6d,0x52,0xa7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0x8,0x0,0x0,0x0,0x6b,0x65,0x79,0x70,0x72,0x65,0x73,0x73,0x5e,0x0,0x0,0x0,0x73,0x14,0x0,0x0,0x0,0x0,0x1,0x6,0x1,0xd,0x1,0x3,0x1,0x11,0x1,0xf,0x1,0xa,0x1,0x15,0x1,0xd,0x1,0xa,0x1,0x63,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x73,0xa2,0x0,0x0,0x0,0x67,0x0,0x0,0x7d,0x0,0x0,0x78,0x49,0x0,0x74,0x0,0x0,0x44,0x5d,0x41,0x0,0x7d,0x1,0x0,0x79,0xe,0x0,0x7c,0x1,0x0,0x6a,0x1,0x0,0x83,0x0,0x0,0x1,0x57,0x71,0xd,0x0,0x4,0x74,0x2,0x0,0x6b,0xa,0x0,0x72,0x4d,0x0,0x1,0x7d,0x2,0x0,0x1,0x74,0x3,0x0,0x7c,0x2,0x0,0x83,0x1,0x0,0x1,0x7c,0x0,0x0,0x6a,0x4,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x71,0xd,0x0,0x58,0x71,0xd,0x0,0x57,0x78,0x49,0x0,0x7c,0x0,0x0,0x44,0x5d,0x41,0x0,0x7d,0x1,0x0,0x79,0xe,0x0,0x7c,0x1,0x0,0x6a,0x5,0x0,0x83,0x0,0x0,0x1,0x57,0x6e,0x1d,0x0,0x4,0x74,0x2,0x0,0x6b,0xa,0x0,0x72,0x8c,0x0,0x1,0x7d,0x2,0x0,0x1,0x74,0x3,0x0,0x7c,0x2,0x0,0x83,0x1,0x0,0x1,0x6e,0x1,0x0,0x58,0x74,0x0,0x0,0x6a,0x6,0x0,0x7c,0x1,0x0,0x83,0x1,0x0,0x1,0x71,0x59,0x0,0x57,0x64,0x0,0x0,0x53,0x28,0x1,0x0,0x0,0x0,0x4e,0x28,0x7,0x0,0x0,0x0,0x52,0xb6,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x73,0x74,0x65,0x70,0x52,0xb1,0x0,0x0,0x0,0x52,0xa9,0x0,0x0,0x0,0x52,0xb7,0x0,0x0,0x0,0x52,0xbc,0x0,0x0,0x0,0x52,0xbd,0x0,0x0,0x0,0x28,0x3,0x0,0x0,0x0,0x52,0xbe,0x0,0x0,0x0,0x52,0xbf,0x0,0x0,0x0,0x52,0xa7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x52,0xc1,0x0,0x0,0x0,0x6b,0x0,0x0,0x0,0x73,0x1a,0x0,0x0,0x0,0x0,0x1,0x6,0x1,0xd,0x1,0x3,0x1,0xe,0x1,0xf,0x1,0xa,0x1,0x15,0x1,0xd,0x1,0x3,0x1,0xe,0x1,0xf,0x1,0xe,0x1,0x28,0x0,0x0,0x0,0x0,0x28,0x14,0x0,0x0,0x0,0x52,0x5,0x0,0x0,0x0,0x52,0xa5,0x0,0x0,0x0,0x74,0x4,0x0,0x0,0x0,0x63,0x6f,0x64,0x65,0x74,0x6,0x0,0x0,0x0,0x63,0x74,0x79,0x70,0x65,0x73,0x52,0xa2,0x0,0x0,0x0,0x74,0x5,0x0,0x0,0x0,0x46,0x61,0x6c,0x73,0x65,0x74,0x5,0x0,0x0,0x0,0x44,0x45,0x42,0x55,0x47,0x52,0x1,0x0,0x0,0x0,0x52,0xa6,0x0,0x0,0x0,0x74,0x6,0x0,0x0,0x0,0x73,0x74,0x64,0x65,0x72,0x72,0x74,0x7,0x0,0x0,0x0,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x52,0xa1,0x0,0x0,0x0,0x52,0xa9,0x0,0x0,0x0,0x52,0xaf,0x0,0x0,0x0,0x52,0xac,0x0,0x0,0x0,0x52,0xb0,0x0,0x0,0x0,0x52,0xb6,0x0,0x0,0x0,0x52,0xba,0x0,0x0,0x0,0x52,0xc0,0x0,0x0,0x0,0x52,0xc1,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x73,0x1b,0x0,0x0,0x0,0x2e,0x2f,0x73,0x72,0x63,0x2f,0x70,0x79,0x74,0x68,0x6f,0x6e,0x2f,0x74,0x70,0x74,0x5f,0x63,0x6f,0x6e,0x73,0x6f,0x6c,0x65,0x2e,0x70,0x79,0x74,0x8,0x0,0x0,0x0,0x3c,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x3e,0x1,0x0,0x0,0x0,0x73,0x54,0x0,0x0,0x0,0xc,0x1,0xa,0x1,0xc,0x1,0xc,0x1,0xc,0x1,0xc,0x1,0x6,0x4,0x13,0x8,0xc,0x1,0xc,0x1,0xf,0x4,0x3b,0x1,0x38,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x31,0x1,0x2a,0x1,0x2a,0x1,0x2a,0x1,0x2a,0x1,0x2a,0x1,0x2a,0x1,0x2a,0x1,0x2a,0x1,0xa,0x3,0x9,0x2,0x9,0x5,0x9,0xa,0x9,0xa,0x9,0xb,0x6,0x1,0x9,0x5,0x9,0xd}; diff --git a/src/elements/fwrk.c b/src/elements/fwrk.c index 06390c5..5095cde 100644 --- a/src/elements/fwrk.c +++ b/src/elements/fwrk.c @@ -16,7 +16,7 @@ int update_FWRK(UPDATE_FUNC_ARGS) { } if (parts[i].life>=45) parts[i].life=0; - if ((parts[i].life<3&&parts[i].life>0)||parts[i].vy>6&&parts[i].life>0) + if ((parts[i].life<3&&parts[i].life>0)||(parts[i].vy>6&&parts[i].life>0)) { int q = (rand()%255+1); int w = (rand()%255+1); diff --git a/src/elements/prti.c b/src/elements/prti.c index 560ba8c..fa87562 100644 --- a/src/elements/prti.c +++ b/src/elements/prti.c @@ -1,7 +1,7 @@ #include <element.h> int update_PRTI(UPDATE_FUNC_ARGS) { - int r, nnx, rx, ry; + int r, nnx, rx, ry, fe = 0; int count =0; parts[i].tmp = (int)((parts[i].temp-73.15f)/100+1); if (parts[i].tmp>=CHANNELS) parts[i].tmp = CHANNELS-1; @@ -12,6 +12,8 @@ int update_PRTI(UPDATE_FUNC_ARGS) { { r = pmap[y+ry][x+rx]; count ++; + if (!r) + fe = 1; if ((r>>8)>=NPART || !r) continue; if ((r&0xFF)==PT_SPRK || ((r&0xFF)!=PT_PRTI && (r&0xFF)!=PT_PRTO && (ptypes[r&0xFF].falldown!= 0 || ptypes[r&0xFF].state == ST_GAS))) @@ -28,5 +30,33 @@ int update_PRTI(UPDATE_FUNC_ARGS) { break; } } + + + if(fe){ + if(!parts[i].life) parts[i].life = rand(); + if(!parts[i].ctype) parts[i].life = rand(); + int orbd[4] = {0, 0, 0, 0}; //Orbital distances + int orbl[4] = {0, 0, 0, 0}; //Orbital locations + orbitalparts_get(parts[i].life, parts[i].ctype, orbd, orbl); + for(r = 0; r < 4; r++){ + if(orbd[r]>1){ + orbd[r] -= 12; + if(orbd[r]<1){ + orbd[r] = (rand()%128)+128; + orbl[r] = rand()%255; + } else { + orbl[r] += 2; + orbl[r] = orbl[r]%255; + } + } else { + orbd[r] = (rand()%128)+128; + orbl[r] = rand()%255; + } + } + orbitalparts_set(&parts[i].life, &parts[i].ctype, orbd, orbl); + } else { + parts[i].life = 0; + parts[i].ctype = 0; + } return 0; } diff --git a/src/elements/prto.c b/src/elements/prto.c index 8f743e7..9bec996 100644 --- a/src/elements/prto.c +++ b/src/elements/prto.c @@ -1,17 +1,19 @@ #include <element.h> int update_PRTO(UPDATE_FUNC_ARGS) { - int r, nnx, rx, ry, np; + int r, nnx, rx, ry, np, fe = 0; int count = 0; parts[i].tmp = (int)((parts[i].temp-73.15f)/100+1); if (parts[i].tmp>=CHANNELS) parts[i].tmp = CHANNELS-1; else if (parts[i].tmp<0) parts[i].tmp = 0; - for (rx=-1; rx<2; rx++) - for (ry=-1; ry<2; ry++) + for (rx=1; rx>-2; rx--) + for (ry=1; ry>-2; ry--) if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry)) { r = pmap[y+ry][x+rx]; count ++; + if (!r) + fe = 1; if ((r>>8)>=NPART || r) continue; if (!r) @@ -21,8 +23,8 @@ int update_PRTO(UPDATE_FUNC_ARGS) { int randomness = count + rand()%3-1; if (randomness<1) randomness=1; - if (randomness>8) - randomness=8; + if (randomness>9) + randomness=9; if (portal[parts[i].tmp][randomness-1][nnx]==PT_SPRK)// TODO: make it look better { create_part(-1,x+1,y,portal[parts[i].tmp][randomness-1][nnx]); @@ -51,5 +53,30 @@ int update_PRTO(UPDATE_FUNC_ARGS) { } } } + if(fe){ + if(!parts[i].life) parts[i].life = rand(); + if(!parts[i].ctype) parts[i].life = rand(); + int orbd[4] = {0, 0, 0, 0}; //Orbital distances + int orbl[4] = {0, 0, 0, 0}; //Orbital locations + orbitalparts_get(parts[i].life, parts[i].ctype, orbd, orbl); + for(r = 0; r < 4; r++){ + if(orbd[r]<254){ + orbd[r] += 16; + if(orbd[r]>254){ + orbd[r] = 0; + orbl[r] = rand()%255; + } + //orbl[r] += 1; + //orbl[r] = orbl[r]%255; + } else { + orbd[r] = 0; + orbl[r] = rand()%255; + } + } + orbitalparts_set(&parts[i].life, &parts[i].ctype, orbd, orbl); + } else { + parts[i].life = 0; + parts[i].ctype = 0; + } return 0; } diff --git a/src/elements/qrtz.c b/src/elements/qrtz.c index 74d8c99..e585361 100644 --- a/src/elements/qrtz.c +++ b/src/elements/qrtz.c @@ -1,11 +1,66 @@ #include <element.h> int update_QRTZ(UPDATE_FUNC_ARGS) { + int r, tmp, trade, rx, ry, np; parts[i].pavg[0] = parts[i].pavg[1]; parts[i].pavg[1] = pv[y/CELL][x/CELL]; if (parts[i].pavg[1]-parts[i].pavg[0] > 0.05*(parts[i].temp/3) || parts[i].pavg[1]-parts[i].pavg[0] < -0.05*(parts[i].temp/3)) { part_change_type(i,x,y,PT_PQRT); } + for (rx=-2; rx<3; rx++) + for (ry=-2; ry<3; ry++) + if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry)) + { + r = pmap[y+ry][x+rx]; + if ((r>>8)>=NPART || !r) + continue; + else if ((r&0xFF)==PT_SLTW && (1>rand()%2500)) + { + kill_part(r>>8); + parts[i].life ++; + } + } + if (parts[i].life>0) + { + for (rx=-1; rx<2; rx++) + for (ry=-1; ry<2; ry++) + if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry)) + { + r = pmap[y+ry][x+rx]; + if ((r>>8)>=NPART || r || parts[i].life==0) continue; + np = create_part(-1,x+rx,y+ry,PT_QRTZ); + if (np<0) continue; + parts[np].tmp = parts[i].tmp; + parts[i].life = 0; + } + } + for ( trade = 0; trade<9; trade ++) + { + rx = rand()%5-2; + ry = rand()%5-2; + if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry)) + { + r = pmap[y+ry][x+rx]; + if ((r>>8)>=NPART || !r) + continue; + if ((r&0xFF)==PT_QRTZ&&(parts[i].life>parts[r>>8].life)&&parts[i].life>0)//diffusion + { + tmp = parts[i].life - parts[r>>8].life; + if (tmp ==1) + { + parts[r>>8].life ++; + parts[i].life --; + trade = 9; + } + if (tmp>0) + { + parts[r>>8].life += tmp/2; + parts[i].life -= tmp/2; + trade = 9; + } + } + } + } return 0; } diff --git a/src/elements/sing.c b/src/elements/sing.c index 02f5eaf..4514726 100644 --- a/src/elements/sing.c +++ b/src/elements/sing.c @@ -1,7 +1,7 @@ #include <element.h> int update_SING(UPDATE_FUNC_ARGS) { - int r, rx, ry; + int r, rx, ry, cry, crx, rad, nxi, nxj, nb; int singularity = -parts[i].life; if (pv[y/CELL][x/CELL]<singularity) @@ -22,6 +22,41 @@ int update_SING(UPDATE_FUNC_ARGS) { if (y+CELL>0) pv[y/CELL-1][x/CELL-1] += 0.1f*(singularity-pv[y/CELL-1][x/CELL-1]); } + if(parts[i].life<1){ + //Pop! + for(rx=-2; rx<3; rx++){ + crx = (x/CELL)+rx; + for(ry=-2; ry<3; ry++){ + cry = (y/CELL)+ry; + if(cry > 0 && crx > 0 && crx < (XRES/CELL) && cry < (YRES/CELL)){ + pv[cry][crx] += (float)parts[i].tmp; + } + } + } + rad = (parts[i].tmp>255)?255:parts[i].tmp; + if(rad>=1){ + rad = (int)(((float)rad)/8.0f); + } + if(rad>=1){ + for (nxj=-(rad+1); nxj<=(rad+1); nxj++) + for (nxi=-(rad+1); nxi<=(rad+1); nxi++) + if ((pow(nxi,2))/(pow((rad+1),2))+(pow(nxj,2))/(pow((rad+1),2))<=1) { + if(rand()%2){ + nb = create_part(-1, x+nxi, y+nxj, PT_PHOT); + } else { + nb = create_part(-1, x+nxi, y+nxj, PT_NEUT); + } + if (nb!=-1) { + parts[nb].life = rand()%300; + parts[nb].temp = MAX_TEMP/2; + parts[nb].vx = rand()%10-5; + parts[nb].vy = rand()%10-5; + } + } + } + kill_part(i); + return 1; + } for (rx=-1; rx<2; rx++) for (ry=-1; ry<2; ry++) if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry)) @@ -50,6 +85,7 @@ int update_SING(UPDATE_FUNC_ARGS) { continue; } parts[i].life += 3; + parts[i].tmp++; } parts[i].temp = restrict_flt(parts[r>>8].temp+parts[i].temp, MIN_TEMP, MAX_TEMP); kill_part(r>>8); diff --git a/src/elements/stkm.c b/src/elements/stkm.c index 6d6b4ab..fc6dc55 100644 --- a/src/elements/stkm.c +++ b/src/elements/stkm.c @@ -185,8 +185,10 @@ int update_STKM(UPDATE_FUNC_ARGS) { { r = pmap[y+ry][x+rx]; if (!r || (r>>8)>=NPART) + r = photons[y+ry][x+rx]; + if (!r || (r>>8)>=NPART) continue; - if (ptypes[r&0xFF].falldown!=0 || (r&0xFF) == PT_NEUT || (r&0xFF) == PT_PHOT) // TODO: photons are not in the pmap. This line may not work as intended. + if (ptypes[r&0xFF].falldown!=0 || (r&0xFF) == PT_NEUT || (r&0xFF) == PT_PHOT) { player[2] = r&0xFF; //Current element } @@ -225,26 +227,27 @@ int update_STKM(UPDATE_FUNC_ARGS) { } else { + int np = -1; if (player[2] == SPC_AIR) create_parts(rx + 3*((((int)player[1])&0x02) == 0x02) - 3*((((int)player[1])&0x01) == 0x01), ry, 4, 4, SPC_AIR); else - create_part(-1, rx, ry, player[2]); - - r = pmap[ry][rx]; - if ( ((r>>8) < NPART) && (r>>8)>=0 && player[2] != PT_PHOT && player[2] != SPC_AIR) - parts[r>>8].vx = parts[r>>8].vx + 5*((((int)player[1])&0x02) == 0x02) - 5*(((int)(player[1])&0x01) == 0x01); - if (((r>>8) < NPART) && (r>>8)>=0 && player[2] == PT_PHOT) + np = create_part(-1, rx, ry, player[2]); + if ( (np < NPART) && np>=0 && player[2] != PT_PHOT && player[2] != SPC_AIR) + parts[np].vx = parts[np].vx + 5*((((int)player[1])&0x02) == 0x02) - 5*(((int)(player[1])&0x01) == 0x01); + if ((np < NPART) && np>=0 && player[2] == PT_PHOT) { int random = abs(rand()%3-1)*3; if (random==0) { - parts[r>>8].life = 0; - parts[r>>8].type = PT_NONE; + kill_part(np); } else { - parts[r>>8].vy = 0; - parts[r>>8].vx = (((((int)player[1])&0x02) == 0x02) - (((int)(player[1])&0x01) == 0x01))*random; + parts[np].vy = 0; + if (((int)player[1])&(0x01|0x02)) + parts[np].vx = (((((int)player[1])&0x02) == 0x02) - (((int)(player[1])&0x01) == 0x01))*random; + else + parts[np].vx = random; } } diff --git a/src/elements/stkm2.c b/src/elements/stkm2.c index 319e388..79dbbdf 100644 --- a/src/elements/stkm2.c +++ b/src/elements/stkm2.c @@ -185,8 +185,10 @@ int update_STKM2(UPDATE_FUNC_ARGS) { { r = pmap[y+ry][x+rx]; if (!r || (r>>8)>=NPART) + r = photons[y+ry][x+rx]; + if (!r || (r>>8)>=NPART) continue; - if (ptypes[r&0xFF].falldown!=0 || (r&0xFF) == PT_NEUT || (r&0xFF) == PT_PHOT) // TODO: photons are not in the pmap. This line may not work as intended. + if (ptypes[r&0xFF].falldown!=0 || (r&0xFF) == PT_NEUT || (r&0xFF) == PT_PHOT) { player2[2] = r&0xFF; //Current element } @@ -225,26 +227,27 @@ int update_STKM2(UPDATE_FUNC_ARGS) { } else { + int np = -1; if (player2[2] == SPC_AIR) create_parts(rx + 3*((((int)player2[1])&0x02) == 0x02) - 3*((((int)player2[1])&0x01) == 0x01), ry, 4, 4, SPC_AIR); else - create_part(-1, rx, ry, player2[2]); - - r = pmap[ry][rx]; - if ( ((r>>8) < NPART) && (r>>8)>=0 && player2[2] != PT_PHOT && player2[2] != SPC_AIR) - parts[r>>8].vx = parts[r>>8].vx + 5*((((int)player2[1])&0x02) == 0x02) - 5*(((int)(player2[1])&0x01) == 0x01); - if (((r>>8) < NPART) && (r>>8)>=0 && player2[2] == PT_PHOT) + np = create_part(-1, rx, ry, player2[2]); + if ((np < NPART) && np>=0 && player2[2] != PT_PHOT && player2[2] != SPC_AIR) + parts[np].vx = parts[np].vx + 5*((((int)player2[1])&0x02) == 0x02) - 5*(((int)(player2[1])&0x01) == 0x01); + if ((np < NPART) && np>=0 && player2[2] == PT_PHOT) { int random = abs(rand()%3-1)*3; if (random==0) { - parts[r>>8].life = 0; - parts[r>>8].type = PT_NONE; + kill_part(np); } else { - parts[r>>8].vy = 0; - parts[r>>8].vx = (((((int)player2[1])&0x02) == 0x02) - (((int)(player2[1])&0x01) == 0x01))*random; + parts[np].vy = 0; + if (((int)player2[1])&(0x01|0x02)) + parts[np].vx = (((((int)player2[1])&0x02) == 0x02) - (((int)(player2[1])&0x01) == 0x01))*random; + else + parts[np].vx = random; } } diff --git a/src/graphics.c b/src/graphics.c index cea2ba7..917d267 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1341,6 +1341,8 @@ void xor_rect(pixel *vid, int x, int y, int w, int h) void draw_parts(pixel *vid) { int i, x, y, t, nx, ny, r, s; + int orbd[4] = {0, 0, 0, 0}; + int orbl[4] = {0, 0, 0, 0}; int cr, cg, cb; float fr, fg, fb; float pt = R_TEMP; @@ -1573,31 +1575,27 @@ void draw_parts(pixel *vid) } else if (parts[i].type==PT_GLOW) { - fg = 0; - fb = 0; - fr = 0; - if (pv[ny/CELL][nx/CELL]>0) { - fg = 6 * pv[ny/CELL][nx/CELL]; - fb = 4 * pv[ny/CELL][nx/CELL]; - fr = 2 * pv[ny/CELL][nx/CELL]; - } - vid[ny*(XRES+BARSIZE)+nx] = PIXRGB((int)restrict_flt(0x44 + fr*8, 0, 255), (int)restrict_flt(0x88 + fg*8, 0, 255), (int)restrict_flt(0x44 + fb*8, 0, 255)); + fr = restrict_flt(parts[i].temp-(275.13f+32.0f), 0, 128)/50.0f; + fg = restrict_flt(parts[i].ctype, 0, 128)/50.0f; + fb = restrict_flt(parts[i].tmp, 0, 128)/50.0f; + + cr = restrict_flt(64.0f+parts[i].temp-(275.13f+32.0f), 0, 255); + cg = restrict_flt(64.0f+parts[i].ctype, 0, 255); + cb = restrict_flt(64.0f+parts[i].tmp, 0, 255); - /*x = nx/CELL; + vid[ny*(XRES+BARSIZE)+nx] = PIXRGB(cr, cg, cb); + x = nx/CELL; y = ny/CELL; fg += fire_g[y][x]; - if(fg > 255) fg = 255; - fire_g[y][x] = fg; + if (fg > 255) fg = 255; + fire_g[y][x] = fg; fb += fire_b[y][x]; - if(fb > 255) fb = 255; - fire_b[y][x] = fb; + if (fb > 255) fb = 255; + fire_b[y][x] = fb; fr += fire_r[y][x]; - if(fr > 255) fr = 255; - fire_r[y][x] = fr;*/ + if (fr > 255) fr = 255; + fire_r[y][x] = fr; - cr = (int)restrict_flt(0x44 + fr*8, 0, 255); - cg = (int)restrict_flt(0x88 + fg*8, 0, 255); - cb = (int)restrict_flt(0x44 + fb*8, 0, 255); for (x=-1; x<=1; x++) { for (y=-1; y<=1; y++) @@ -1893,10 +1891,16 @@ void draw_parts(pixel *vid) } if (cr>255) cr=255; + if (cr<0) + cr=0; if (cg>255) cg=255; + if (cg<0) + cg=0; if (cb>255) cb=255; + if (cb<0) + cb=0; blendpixel(vid, nx, ny, cr, cg, cb, 255); } else if (t==PT_WIFI) @@ -1919,32 +1923,76 @@ void draw_parts(pixel *vid) } } } - else if (t==PT_PRTI && DEBUG_MODE) - { - blendpixel(vid,nx,ny, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors),255); - if (mousex==(nx) && mousey==(ny)) - { - int z; - for (z = 0; z<NPART; z++) { - if (parts[z].type) - { - if (parts[z].type==PT_PRTO&&parts[z].tmp==parts[i].tmp) - xor_line(nx,ny,(int)(parts[z].x+0.5f),(int)(parts[z].y+0.5f),vid); + else if (t==PT_PRTI) + { + int nxo = 0; + int nyo = 0; + int fire_rv = 0; + float drad = 0.0f; + float ddist = 0.0f; + orbitalparts_get(parts[i].life, parts[i].ctype, orbd, orbl); + for(r = 0; r < 4; r++){ + ddist = ((float)orbd[r])/16.0f; + drad = (M_PI * ((float)orbl[r]) / 180.0f)*1.41f; + nxo = ddist*cos(drad); + nyo = ddist*sin(drad); + addpixel(vid, nx+nxo, ny+nyo, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors), 255-orbd[r]); + if(cmode == CM_FIRE){ + fire_rv = fire_r[(ny+nyo)/CELL][(nx+nxo)/CELL]; + fire_rv += (255-orbd[r])/32; + if(fire_rv>255) fire_rv = 255; + fire_r[(ny+nyo)/CELL][(nx+nxo)/CELL] = fire_rv; + } + addpixel(vid, nx, ny, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors), 200); + } + if(DEBUG_MODE){ + blendpixel(vid,nx,ny, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors),255); + if (mousex==(nx) && mousey==(ny)) + { + int z; + for (z = 0; z<NPART; z++) { + if (parts[z].type) + { + if (parts[z].type==PT_PRTO&&parts[z].tmp==parts[i].tmp) + xor_line(nx,ny,(int)(parts[z].x+0.5f),(int)(parts[z].y+0.5f),vid); + } } } } } - else if (t==PT_PRTO && DEBUG_MODE) - { - blendpixel(vid,nx,ny, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors),255); - if (mousex==(nx) && mousey==(ny)) - { - int z; - for (z = 0; z<NPART; z++) { - if (parts[z].type) - { - if (parts[z].type==PT_PRTI&&parts[z].tmp==parts[i].tmp) - xor_line(nx,ny,(int)(parts[z].x+0.5f),(int)(parts[z].y+0.5f),vid); + else if (t==PT_PRTO) + { + int nxo = 0; + int nyo = 0; + int fire_bv = 0; + float drad = 0.0f; + float ddist = 0.0f; + orbitalparts_get(parts[i].life, parts[i].ctype, orbd, orbl); + for(r = 0; r < 4; r++){ + ddist = ((float)orbd[r])/16.0f; + drad = (M_PI * ((float)orbl[r]) / 180.0f)*1.41f; + nxo = ddist*cos(drad); + nyo = ddist*sin(drad); + addpixel(vid, nx+nxo, ny+nyo, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors), 255-orbd[r]); + if(cmode == CM_FIRE){ + fire_bv = fire_b[(ny+nyo)/CELL][(nx+nxo)/CELL]; + fire_bv += (255-orbd[r])/32; + if(fire_bv>255) fire_bv = 255; + fire_b[(ny+nyo)/CELL][(nx+nxo)/CELL] = fire_bv; + } + addpixel(vid, nx, ny, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors), 200); + } + if(DEBUG_MODE){ + blendpixel(vid,nx,ny, PIXR(ptypes[t].pcolors), PIXG(ptypes[t].pcolors), PIXB(ptypes[t].pcolors),255); + if (mousex==(nx) && mousey==(ny)) + { + int z; + for (z = 0; z<NPART; z++) { + if (parts[z].type) + { + if (parts[z].type==PT_PRTI&&parts[z].tmp==parts[i].tmp) + xor_line(nx,ny,(int)(parts[z].x+0.5f),(int)(parts[z].y+0.5f),vid); + } } } } @@ -2143,6 +2191,7 @@ void draw_parts(pixel *vid) else if (t==PT_BRAY && parts[i].tmp==0) { int trans = parts[i].life * 7; + if (trans>255) trans = 255; if (parts[i].ctype) { cg = 0; cb = 0; @@ -2167,6 +2216,7 @@ void draw_parts(pixel *vid) else if (t==PT_BRAY && parts[i].tmp==1) { int trans = parts[i].life/4; + if (trans>255) trans = 255; if (parts[i].ctype) { cg = 0; cb = 0; @@ -2191,6 +2241,7 @@ void draw_parts(pixel *vid) else if (t==PT_BRAY && parts[i].tmp==2) { int trans = parts[i].life*100; + if (trans>255) trans = 255; blendpixel(vid, nx, ny, 255, 150, 50, trans); } else if (t==PT_PHOT) @@ -2920,6 +2971,36 @@ void draw_parts(pixel *vid) } +void draw_wavelengths(pixel *vid, int x, int y, int h, int wl) +{ + int i,cr,cg,cb,j; + int tmp; + fillrect(vid,x-1,y-1,30+1,h+1,64,64,64,255); // coords -1 size +1 to work around bug in fillrect - TODO: fix fillrect + for (i=0;i<30;i++) + { + if ((wl>>i)&1) + { + // Need a spread of wavelengths to get a smooth spectrum, 5 bits seems to work reasonably well + if (i>2) tmp = 0x1F << (i-2); + else tmp = 0x1F >> (2-i); + cg = 0; + cb = 0; + cr = 0; + for (j=0; j<12; j++) { + cr += (tmp >> (j+18)) & 1; + cb += (tmp >> j) & 1; + } + for (j=0; j<14; j++) + cg += (tmp >> (j+9)) & 1; + tmp = 624/(cr+cg+cb+1); + cr *= tmp; + cg *= tmp; + cb *= tmp; + for (j=0;j<h;j++) blendpixel(vid,x+29-i,y+j,cr>255?255:cr,cg>255?255:cg,cb>255?255:cb,255); + } + } +} + void render_signs(pixel *vid_buf) { int i, j, x, y, w, h, dx, dy,mx,my,b=1,bq; diff --git a/src/interface.c b/src/interface.c index b626138..8220c62 100644 --- a/src/interface.c +++ b/src/interface.c @@ -481,7 +481,7 @@ void draw_svf_ui(pixel *vid_buf) c = svf_login ? 255 : 128; drawtext(vid_buf, 40, YRES+(MENUSIZE-14), "\x82", c, c, c, 255); if (svf_open) - drawtext(vid_buf, 58, YRES+(MENUSIZE-12), svf_name, c, c, c, 255); + drawtextmax(vid_buf, 58, YRES+(MENUSIZE-12), 125, svf_name, c, c, c, 255); else drawtext(vid_buf, 58, YRES+(MENUSIZE-12), "[untitled simulation]", c, c, c, 255); drawrect(vid_buf, 37, YRES+(MENUSIZE-16), 150, 14, c, c, c, 255); @@ -507,7 +507,7 @@ void draw_svf_ui(pixel *vid_buf) drawtext(vid_buf, 222, YRES+(MENUSIZE-15), "\x83", c, c, c, 255); if (svf_tags[0]) - drawtextmax(vid_buf, 240, YRES+(MENUSIZE-12), 154, svf_tags, c, c, c, 255); + drawtextmax(vid_buf, 240, YRES+(MENUSIZE-12), XRES+BARSIZE-405, svf_tags, c, c, c, 255); else drawtext(vid_buf, 240, YRES+(MENUSIZE-12), "[no tags set]", c, c, c, 255); @@ -518,7 +518,7 @@ void draw_svf_ui(pixel *vid_buf) drawtext(vid_buf, XRES-122+BARSIZE/*388*/, YRES+(MENUSIZE-13), "\x84", 255, 255, 255, 255); if (svf_login) - drawtext(vid_buf, XRES-104+BARSIZE/*406*/, YRES+(MENUSIZE-12), svf_user, 255, 255, 255, 255); + drawtextmax(vid_buf, XRES-104+BARSIZE/*406*/, YRES+(MENUSIZE-12), 66, svf_user, 255, 255, 255, 255); else drawtext(vid_buf, XRES-104+BARSIZE/*406*/, YRES+(MENUSIZE-12), "[sign in]", 255, 255, 255, 255); drawrect(vid_buf, XRES-125+BARSIZE/*385*/, YRES+(MENUSIZE-16), 91, 14, 255, 255, 255, 255); @@ -1205,8 +1205,9 @@ finish: int save_name_ui(pixel *vid_buf) { - int x0=(XRES-420)/2,y0=(YRES-68-YRES/4)/2,b=1,bq,mx,my,ths,nd=0; + int x0=(XRES-420)/2,y0=(YRES-68-YRES/4)/2,b=1,bq,mx,my,ths,idtxtwidth,nd=0; void *th; + char *save_id_text; ui_edit ed; ui_edit ed2; ui_checkbox cb; @@ -1242,6 +1243,10 @@ int save_name_ui(pixel *vid_buf) ed2.cursor = strlen(svf_description); ed2.multiline = 1; strcpy(ed2.str, svf_description); + + save_id_text = malloc(strlen("Current save id: ")+strlen(svf_id)+1); + sprintf(save_id_text,"Current save id: %s",svf_id); + idtxtwidth = textwidth(save_id_text); cb.x = x0+10; cb.y = y0+53+YRES/4; @@ -1277,6 +1282,12 @@ int save_name_ui(pixel *vid_buf) drawrect(vid_buf, x0, y0+74+YRES/4, 192, 16, 192, 192, 192, 255); draw_line(vid_buf, x0+192, y0, x0+192, y0+90+YRES/4, 150, 150, 150, XRES+BARSIZE); + + if (svf_id[0]) + { + fillrect(vid_buf, (XRES+BARSIZE-idtxtwidth)/2-5, YRES+(MENUSIZE-16), idtxtwidth+10, 14, 0, 0, 0, 255); + drawtext(vid_buf, (XRES+BARSIZE-idtxtwidth)/2, YRES+MENUSIZE-12, save_id_text, 255, 255, 255, 255); + } sdl_blit(0, 0, (XRES+BARSIZE), YRES+MENUSIZE, vid_buf, (XRES+BARSIZE)); @@ -1334,6 +1345,7 @@ int save_name_ui(pixel *vid_buf) } } free(th); + if (save_id_text) free(save_id_text); return 0; } @@ -2734,7 +2746,7 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date) int nyd,nyu,ry,lv; float ryf; - char *uri, *uri_2, *o_uri; + char *uri, *uri_2, *o_uri, *save_id_text; void *data, *info_data; save_info *info = malloc(sizeof(save_info)); void *http = NULL, *http_2 = NULL; @@ -2752,6 +2764,9 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date) drawrect(vid_buf, 50, 50, (XRES/2)+1, (YRES/2)+1, 255, 255, 255, 155); drawrect(vid_buf, 50+(XRES/2)+1, 50, XRES+BARSIZE-100-((XRES/2)+1), YRES+MENUSIZE-100, 155, 155, 155, 255); drawtext(vid_buf, 50+(XRES/4)-textwidth("Loading...")/2, 50+(YRES/4), "Loading...", 255, 255, 255, 128); + + save_id_text = malloc(strlen("Save id: ")+strlen(save_id)+1); + sprintf(save_id_text,"Save id: %s",save_id); ed.x = 57+(XRES/2)+1; ed.y = YRES+MENUSIZE-118; @@ -2827,11 +2842,12 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date) data = http_async_req_stop(http, &status, &data_size); if (status == 200) { + pixel *full_save; if (!data||!data_size) { error_ui(vid_buf, 0, "Save data is empty (may be corrupt)"); break; } - pixel *full_save = prerender_save(data, data_size, &imgw, &imgh); + full_save = prerender_save(data, data_size, &imgw, &imgh); if (full_save!=NULL) { save_pic = rescale_img(full_save, imgw, imgh, &thumb_w, &thumb_h, 2); data_ready = 1; @@ -2941,6 +2957,10 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date) drawrect(vid_buf, XRES+BARSIZE-100, YRES+MENUSIZE-68, 50, 18, 255, 255, 255, 255); drawtext(vid_buf, XRES+BARSIZE-90, YRES+MENUSIZE-63, "Submit", 255, 255, 255, 255); } + + cix = textwidth(save_id_text); + fillrect(vid_buf, (XRES+BARSIZE-cix)/2-5, YRES+(MENUSIZE-16), cix+10, 14, 0, 0, 0, 255); + drawtext(vid_buf, (XRES+BARSIZE-cix)/2, YRES+MENUSIZE-12, save_id_text, 255, 255, 255, 255); //Open Button bc = openable?255:150; @@ -3058,7 +3078,7 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date) if (queue_open) { if (info_ready && data_ready) { // Do Open! - status = parse_save(data, data_size, 1, 0, 0); + status = parse_save(data, data_size, 1, 0, 0, bmap, fvx, fvy, signs, parts, pmap); if (!status) { //if(svf_last) //free(svf_last); @@ -3127,6 +3147,7 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date) if (!b) break; } + if (save_id_text) free(save_id_text); //Close open connections if (http) http_async_req_close(http); @@ -3572,21 +3593,21 @@ void execute_save(pixel *vid_buf) char *result; char *names[] = {"Name","Description", "Data:save.bin", "Thumb:thumb.bin", "Publish", "ID", NULL}; - char *parts[6]; + char *uploadparts[6]; int plens[6]; - parts[0] = svf_name; + uploadparts[0] = svf_name; plens[0] = strlen(svf_name); - parts[1] = svf_description; + uploadparts[1] = svf_description; plens[1] = strlen(svf_description); - parts[2] = build_save(plens+2, 0, 0, XRES, YRES); - parts[3] = build_thumb(plens+3, 1); - parts[4] = (svf_publish==1)?"Public":"Private"; + uploadparts[2] = build_save(plens+2, 0, 0, XRES, YRES, bmap, fvx, fvy, signs, parts); + uploadparts[3] = build_thumb(plens+3, 1); + uploadparts[4] = (svf_publish==1)?"Public":"Private"; plens[4] = strlen((svf_publish==1)?"Public":"Private"); if (svf_id[0]) { - parts[5] = svf_id; + uploadparts[5] = svf_id; plens[5] = strlen(svf_id); } else @@ -3594,16 +3615,16 @@ void execute_save(pixel *vid_buf) result = http_multipart_post( "http://" SERVER "/Save.api", - names, parts, plens, + names, uploadparts, plens, svf_user_id, /*svf_pass*/NULL, svf_session_id, &status, NULL); if (svf_last) free(svf_last); - svf_last = parts[2]; + svf_last = uploadparts[2]; svf_lsize = plens[2]; - free(parts[3]); + free(uploadparts[3]); if (status!=200) { @@ -3820,21 +3841,16 @@ void open_link(char *uri) { #ifdef WIN32 ShellExecute(0, "OPEN", uri, NULL, NULL, 0); #elif MACOSX - //char *cmd[] = { "open", uri, (char *)0 }; - //execvp("open", cmd); - //LSOpenCFURLRef(CFURLCreateWithString(NULL, CFStringCreateWithCString(NULL, uri, 0) ,NULL), NULL); //TODO: Get this crap working char *cmd = malloc(7+strlen(uri)); strcpy(cmd, "open "); strappend(cmd, uri); system(cmd); #elif LIN32 - //execlp("xdg-open", "xdg-open", uri, (char *)0); char *cmd = malloc(11+strlen(uri)); strcpy(cmd, "xdg-open "); strappend(cmd, uri); system(cmd); #elif LIN64 - //execlp("xdg-open", "xdg-open", uri, (char *)0); char *cmd = malloc(11+strlen(uri)); strcpy(cmd, "xdg-open "); strappend(cmd, uri); @@ -3868,7 +3884,8 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) { ed.cursor = 0; //fillrect(vid_buf, -1, -1, XRES, 220, 0, 0, 0, 190); memcpy(old_buf,vid_buf,(XRES+BARSIZE)*YRES*PIXELSIZE); - fillrect(old_buf, -1, -1, XRES+1, 220, 0, 0, 0, 190); + + fillrect(old_buf, -1, -1, XRES, 220, 0, 0, 0, 190); currentcommand2 = malloc(sizeof(command_history)); memset(currentcommand2, 0, sizeof(command_history)); @@ -3876,7 +3893,7 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) { currentcommand2->command = mystrdup(error); last_command2 = currentcommand2; - //SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); + SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); cc = 0; while(cc < 80){ fillrect(old_buf, -1, -1+cc, XRES+BARSIZE, 2, 0, 0, 0, 160-(cc*2)); @@ -3889,7 +3906,6 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) { my /= sdl_scale; ed.focus = 1; - //clearrect(vid_buf, 0, 0, XRES+BARSIZE, 220);//anyway to make it transparent? memcpy(vid_buf,old_buf,(XRES+BARSIZE)*YRES*PIXELSIZE); draw_line(vid_buf, 0, 219, XRES+BARSIZE-1, 219, 228, 228, 228, XRES+BARSIZE); if(pygood) @@ -3964,14 +3980,14 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) { currentcommand->command = mystrdup(ed.str); last_command = currentcommand; free(old_buf); - //SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL); + SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL); return currentcommand->command; } if (sdl_key==SDLK_ESCAPE || sdl_key==SDLK_BACKQUOTE) { console_mode = 0; free(old_buf); - //SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL); + SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL); return NULL; } if(sdl_key==SDLK_UP || sdl_key==SDLK_DOWN) @@ -4008,7 +4024,7 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) { } console_mode = 0; free(old_buf); - //SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL); + SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL); return NULL; } @@ -152,7 +152,7 @@ static const char *it_msg = "'P' will take a screenshot and save it into the current directory.\n" "\n" "\bgCopyright (c) 2008-11 Stanislaw K Skowronek (\brhttp://powder.unaligned.org\bg, \bbirc.unaligned.org #wtf\bg)\n" - "\bgCopyright (c) 2010-11 Simon Robertshaw, Skresanov Savely, cracker64, Bryan Hoyle, Nathan Cousins, jacksonmj\n" + "\bgCopyright (c) 2010-11 Simon Robertshaw, Skresanov Savely, cracker64, Bryan Hoyle, Nathan Cousins, jacksonmj, Lieuwe Mosch\n" "\n" "\bgTo use online features such as saving, you need to register at: \brhttp://powdertoy.co.uk/Register.html" ; @@ -224,7 +224,7 @@ void sdl_seticon(void) //SDL_Surface *icon = SDL_CreateRGBSurfaceFrom(app_icon_w32, 32, 32, 32, 128, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000); //SDL_WM_SetIcon(icon, NULL/*app_icon_mask*/); #else - SDL_Surface *icon = SDL_CreateRGBSurfaceFrom(app_icon, 16, 16, 32, 128, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000); + SDL_Surface *icon = SDL_CreateRGBSurfaceFrom(app_icon, 16, 16, 32, 64, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000); SDL_WM_SetIcon(icon, NULL/*app_icon_mask*/); #endif #endif @@ -310,11 +310,12 @@ void *build_thumb(int *size, int bzip2) return d; } -void *build_save(int *size, int x0, int y0, int w, int h) +void *build_save(int *size, int x0, int y0, int w, int h, unsigned char bmap[YRES/CELL][XRES/CELL], float fvx[YRES/CELL][XRES/CELL], float fvy[YRES/CELL][XRES/CELL], sign signs[MAXSIGNS], void* partsptr) { unsigned char *d=calloc(1,3*(XRES/CELL)*(YRES/CELL)+(XRES*YRES)*11+MAXSIGNS*262), *c; int i,j,x,y,p=0,*m=calloc(XRES*YRES, sizeof(int)); int bx0=x0/CELL, by0=y0/CELL, bw=(w+CELL-1)/CELL, bh=(h+CELL-1)/CELL; + particle *parts = partsptr; // normalize coordinates x0 = bx0*CELL; @@ -353,7 +354,8 @@ void *build_save(int *size, int x0, int y0, int w, int h) y = (int)(parts[i].y+0.5f); if (x>=x0 && x<x0+w && y>=y0 && y<y0+h) { if (!m[(x-x0)+(y-y0)*w] || - parts[m[(x-x0)+(y-y0)*w]-1].type == PT_PHOT) + parts[m[(x-x0)+(y-y0)*w]-1].type == PT_PHOT || + parts[m[(x-x0)+(y-y0)*w]-1].type == PT_NEUT) m[(x-x0)+(y-y0)*w] = i+1; } } @@ -479,12 +481,13 @@ void *build_save(int *size, int x0, int y0, int w, int h) return c; } -int parse_save(void *save, int size, int replace, int x0, int y0) +int parse_save(void *save, int size, int replace, int x0, int y0, unsigned char bmap[YRES/CELL][XRES/CELL], float fvx[YRES/CELL][XRES/CELL], float fvy[YRES/CELL][XRES/CELL], sign signs[MAXSIGNS], void* partsptr, unsigned pmap[YRES][XRES]) { unsigned char *d,*c=save; int q,i,j,k,x,y,p=0,*m=calloc(XRES*YRES, sizeof(int)), ver, pty, ty, legacy_beta=0; int bx0=x0/CELL, by0=y0/CELL, bw, bh, w, h; int fp[NPART], nf=0, new_format = 0, ttv = 0; + particle *parts = partsptr; //New file header uses PSv, replacing fuC. This is to detect if the client uses a new save format for temperatures //This creates a problem for old clients, that display and "corrupt" error instead of a "newer version" error @@ -564,19 +567,7 @@ int parse_save(void *save, int size, int replace, int x0, int y0) gravityMode = 0; airMode = 0; } - memset(bmap, 0, sizeof(bmap)); - memset(emap, 0, sizeof(emap)); - memset(signs, 0, sizeof(signs)); - memset(parts, 0, sizeof(particle)*NPART); - memset(pmap, 0, sizeof(pmap)); - memset(vx, 0, sizeof(vx)); - memset(vy, 0, sizeof(vy)); - memset(pv, 0, sizeof(pv)); - memset(photons, 0, sizeof(photons)); - memset(wireless, 0, sizeof(wireless)); - memset(gol2, 0, sizeof(gol2)); - memset(portal, 0, sizeof(portal)); - death = death2 = ISSPAWN1 = ISSPAWN2 = 0; + clear_sim(); } // make a catalog of free parts @@ -908,13 +899,35 @@ corrupt: if (replace) { legacy_enable = 0; - memset(signs, 0, sizeof(signs)); - memset(parts, 0, sizeof(particle)*NPART); - memset(bmap, 0, sizeof(bmap)); + clear_sim(); } return 1; } +void clear_sim(void) +{ + memset(bmap, 0, sizeof(bmap)); + memset(emap, 0, sizeof(emap)); + memset(signs, 0, sizeof(signs)); + memset(parts, 0, sizeof(particle)*NPART); + memset(pmap, 0, sizeof(pmap)); + memset(pv, 0, sizeof(pv)); + memset(vx, 0, sizeof(vx)); + memset(vy, 0, sizeof(vy)); + memset(fvx, 0, sizeof(fvx)); + memset(fvy, 0, sizeof(fvy)); + memset(photons, 0, sizeof(photons)); + memset(wireless, 0, sizeof(wireless)); + memset(gol2, 0, sizeof(gol2)); + memset(portal, 0, sizeof(portal)); + death = death2 = ISSPAWN1 = ISSPAWN2 = 0; + memset(pers_bg, 0, (XRES+BARSIZE)*YRES*PIXELSIZE); + memset(fire_bg, 0, XRES*YRES*PIXELSIZE); + memset(fire_r, 0, sizeof(fire_r)); + memset(fire_g, 0, sizeof(fire_g)); + memset(fire_b, 0, sizeof(fire_b)); +} + // stamps library stamp stamps[STAMP_MAX];//[STAMP_X*STAMP_Y]; @@ -999,7 +1012,7 @@ void stamp_save(int x, int y, int w, int h) FILE *f; int n; char fn[64], sn[16]; - void *s=build_save(&n, x, y, w, h); + void *s=build_save(&n, x, y, w, h, bmap, fvx, fvy, signs, parts); #ifdef WIN32 _mkdir("stamps"); @@ -1203,8 +1216,7 @@ char console_error[255] = ""; //functions callable from python: -static PyObject* -emb_create(PyObject *self, PyObject *args, PyObject *keywds) +static PyObject* emb_create(PyObject *self, PyObject *args, PyObject *keywds) { int x,y,t; char *name = ""; @@ -1216,9 +1228,8 @@ emb_create(PyObject *self, PyObject *args, PyObject *keywds) console_parse_type(name, &t, console_error); return Py_BuildValue("i",create_part(-1,x,y,t)); } -//sys_pause = !sys_pause -static PyObject* -emb_pause(PyObject *self, PyObject *args) + +static PyObject* emb_pause(PyObject *self, PyObject *args) { int x,y,t; if(!PyArg_ParseTuple(args, ":unpause")) @@ -1228,8 +1239,7 @@ emb_pause(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_unpause(PyObject *self, PyObject *args) +static PyObject* emb_unpause(PyObject *self, PyObject *args) { int x,y,t; if(!PyArg_ParseTuple(args, ":pause")) @@ -1239,8 +1249,7 @@ emb_unpause(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_toggle_pause(PyObject *self, PyObject *args) +static PyObject* emb_toggle_pause(PyObject *self, PyObject *args) { int x,y,t; if(!PyArg_ParseTuple(args, ":toggle_pause")) @@ -1251,9 +1260,7 @@ emb_toggle_pause(PyObject *self, PyObject *args) } //console_mode - -static PyObject* -emb_toggle_console(PyObject *self, PyObject *args) +static PyObject* emb_toggle_console(PyObject *self, PyObject *args) { int x,y,t; if(!PyArg_ParseTuple(args, ":toggle_console")) @@ -1263,8 +1270,7 @@ emb_toggle_console(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_open_console(PyObject *self, PyObject *args) +static PyObject* emb_open_console(PyObject *self, PyObject *args) { int x,y,t; if(!PyArg_ParseTuple(args, ":toggle_console")) @@ -1274,8 +1280,7 @@ emb_open_console(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_close_console(PyObject *self, PyObject *args) +static PyObject* emb_close_console(PyObject *self, PyObject *args) { int x,y,t; if(!PyArg_ParseTuple(args, ":toggle_console")) @@ -1285,8 +1290,7 @@ emb_close_console(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_log(PyObject *self, PyObject *args) +static PyObject* emb_log(PyObject *self, PyObject *args) { char *buffer; if(!PyArg_ParseTuple(args, "s:log",&buffer)) @@ -1299,8 +1303,7 @@ emb_log(PyObject *self, PyObject *args) char console_more=0; -static PyObject* -emb_console_more(PyObject *self, PyObject *args) +static PyObject* emb_console_more(PyObject *self, PyObject *args) { if(!PyArg_ParseTuple(args, ":log")) return NULL; @@ -1309,8 +1312,7 @@ emb_console_more(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_console_less(PyObject *self, PyObject *args) +static PyObject* emb_console_less(PyObject *self, PyObject *args) { if(!PyArg_ParseTuple(args, ":log")) return NULL; @@ -1319,10 +1321,7 @@ emb_console_less(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -//drawtext(vid_buf, 15, 175-(cc*12), currentcommand->command, 255, 255, 255, 255); - -static PyObject* -emb_reset_pressure(PyObject *self, PyObject *args) +static PyObject* emb_reset_pressure(PyObject *self, PyObject *args) { if(!PyArg_ParseTuple(args, ":reset_pressure")) return NULL; @@ -1335,8 +1334,7 @@ emb_reset_pressure(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_reset_velocity(PyObject *self, PyObject *args) +static PyObject* emb_reset_velocity(PyObject *self, PyObject *args) { if(!PyArg_ParseTuple(args, ":reset_velocity")) return NULL; @@ -1350,8 +1348,7 @@ emb_reset_velocity(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_reset_sparks(PyObject *self, PyObject *args) +static PyObject* emb_reset_sparks(PyObject *self, PyObject *args) { if(!PyArg_ParseTuple(args, ":reset_sparks")) return NULL; @@ -1367,8 +1364,7 @@ emb_reset_sparks(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_set_life(PyObject *self, PyObject *args, PyObject *keywds) +static PyObject* emb_set_life(PyObject *self, PyObject *args, PyObject *keywds) { int i = -1,life,j,x=-1,y=-1; char *name = ""; @@ -1408,8 +1404,7 @@ emb_set_life(PyObject *self, PyObject *args, PyObject *keywds) return Py_BuildValue("i",1); } -static PyObject* -emb_set_type(PyObject *self, PyObject *args, PyObject *keywds) +static PyObject* emb_set_type(PyObject *self, PyObject *args, PyObject *keywds) { int i = -1,life,j=-1,x=-1,y=-1; char *name = ""; @@ -1451,8 +1446,7 @@ emb_set_type(PyObject *self, PyObject *args, PyObject *keywds) return Py_BuildValue("i",1); } -static PyObject* -emb_set_temp(PyObject *self, PyObject *args, PyObject *keywds) +static PyObject* emb_set_temp(PyObject *self, PyObject *args, PyObject *keywds) { int i = -1,life,j,x=-1,y=-1; char *name = ""; @@ -1492,8 +1486,7 @@ emb_set_temp(PyObject *self, PyObject *args, PyObject *keywds) return Py_BuildValue("i",1); } -static PyObject* -emb_set_tmp(PyObject *self, PyObject *args, PyObject *keywds) +static PyObject* emb_set_tmp(PyObject *self, PyObject *args, PyObject *keywds) { int i = -1,life,j,x=-1,y=-1; char *name = ""; @@ -1533,8 +1526,7 @@ emb_set_tmp(PyObject *self, PyObject *args, PyObject *keywds) return Py_BuildValue("i",1); } -static PyObject* -emb_set_x(PyObject *self, PyObject *args, PyObject *keywds) +static PyObject* emb_set_x(PyObject *self, PyObject *args, PyObject *keywds) { int i = -1,life,j,x=-1,y=-1; char *name = ""; @@ -1575,8 +1567,7 @@ emb_set_x(PyObject *self, PyObject *args, PyObject *keywds) return Py_BuildValue("i",1); } -static PyObject* -emb_set_y(PyObject *self, PyObject *args, PyObject *keywds) +static PyObject* emb_set_y(PyObject *self, PyObject *args, PyObject *keywds) { int i = -1,life,j,x=-1,y=-1; char *name = ""; @@ -1616,8 +1607,7 @@ emb_set_y(PyObject *self, PyObject *args, PyObject *keywds) return Py_BuildValue("i",1); } -static PyObject* -emb_set_ctype(PyObject *self, PyObject *args, PyObject *keywds) +static PyObject* emb_set_ctype(PyObject *self, PyObject *args, PyObject *keywds) { int i = -1,life,j,x=-1,y=-1; char *name = ""; @@ -1660,8 +1650,7 @@ emb_set_ctype(PyObject *self, PyObject *args, PyObject *keywds) return Py_BuildValue("i",1); } -static PyObject* -emb_set_vx(PyObject *self, PyObject *args, PyObject *keywds) +static PyObject* emb_set_vx(PyObject *self, PyObject *args, PyObject *keywds) { int i = -1,life,j,x=-1,y=-1; char *name = ""; @@ -1701,8 +1690,7 @@ emb_set_vx(PyObject *self, PyObject *args, PyObject *keywds) return Py_BuildValue("i",1); } -static PyObject* -emb_set_vy(PyObject *self, PyObject *args, PyObject *keywds) +static PyObject* emb_set_vy(PyObject *self, PyObject *args, PyObject *keywds) { int i = -1,life,j,x=-1,y=-1; char *name = ""; @@ -1742,8 +1730,7 @@ emb_set_vy(PyObject *self, PyObject *args, PyObject *keywds) return Py_BuildValue("i",1); } -static PyObject* -emb_get_pmap(PyObject *self, PyObject *args) +static PyObject* emb_get_pmap(PyObject *self, PyObject *args) { int x,y; if(!PyArg_ParseTuple(args, "II:get_pmap",&x,&y)) @@ -1755,8 +1742,7 @@ emb_get_pmap(PyObject *self, PyObject *args) return Py_BuildValue("I",pmap[y][x]); } -static PyObject* -emb_get_prop(PyObject *self, PyObject *args) +static PyObject* emb_get_prop(PyObject *self, PyObject *args) { int i; char *prop = ""; @@ -1788,8 +1774,7 @@ emb_get_prop(PyObject *self, PyObject *args) return Py_BuildValue("i",-1); } -static PyObject* -emb_draw_pixel(PyObject *self, PyObject *args) +static PyObject* emb_draw_pixel(PyObject *self, PyObject *args) { int x,y,r,g,b,a; a=255; @@ -1805,9 +1790,7 @@ emb_draw_pixel(PyObject *self, PyObject *args) } -//drawtext(pixel *vid, int x, int y, const char *s, int r, int g, int b, int a) -static PyObject* -emb_draw_text(PyObject *self, PyObject *args) +static PyObject* emb_draw_text(PyObject *self, PyObject *args) { int x,y,r,g,b,a; char *txt; @@ -1822,9 +1805,7 @@ emb_draw_text(PyObject *self, PyObject *args) return Py_BuildValue("i",-1); } -//drawrect(pixel *vid, int x, int y, int w, int h, int r, int g, int b, int a) -static PyObject* -emb_draw_rect(PyObject *self, PyObject *args) +static PyObject* emb_draw_rect(PyObject *self, PyObject *args) { int x,y,w,h,r,g,b,a; a=255; @@ -1839,8 +1820,7 @@ emb_draw_rect(PyObject *self, PyObject *args) return Py_BuildValue("i",-1); } -static PyObject* -emb_draw_fillrect(PyObject *self, PyObject *args) +static PyObject* emb_draw_fillrect(PyObject *self, PyObject *args) { int x,y,w,h,r,g,b,a; a=255; @@ -1855,9 +1835,7 @@ emb_draw_fillrect(PyObject *self, PyObject *args) return Py_BuildValue("i",-1); } -//int textwidth(char *s) -static PyObject* -emb_get_width(PyObject *self, PyObject *args) +static PyObject* emb_get_width(PyObject *self, PyObject *args) { char *txt; if(!PyArg_ParseTuple(args, "s:get_width",&txt)) @@ -1865,9 +1843,7 @@ emb_get_width(PyObject *self, PyObject *args) return Py_BuildValue("i",textwidth(txt)); } -//SDL_GetMouseState(&x, &y) -static PyObject* -emb_get_mouse(PyObject *self, PyObject *args) +static PyObject* emb_get_mouse(PyObject *self, PyObject *args) { int x,y,mask,b1,b2,b3; if(!PyArg_ParseTuple(args, ":get_mouse")) @@ -1879,9 +1855,7 @@ emb_get_mouse(PyObject *self, PyObject *args) return Py_BuildValue("(ii(iii))",x,y,b1,b2,b3); } -//svf_name -static PyObject* -emb_get_name(PyObject *self, PyObject *args) +static PyObject* emb_get_name(PyObject *self, PyObject *args) { if(!PyArg_ParseTuple(args, ":get_name")) return NULL; @@ -1891,8 +1865,7 @@ emb_get_name(PyObject *self, PyObject *args) return Py_BuildValue("s",""); } -static PyObject* -emb_shortcuts_disable(PyObject *self, PyObject *args) +static PyObject* emb_shortcuts_disable(PyObject *self, PyObject *args) { if(!PyArg_ParseTuple(args, ":shortcuts_disable")) return NULL; @@ -1901,8 +1874,7 @@ emb_shortcuts_disable(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_shortcuts_enable(PyObject *self, PyObject *args) +static PyObject* emb_shortcuts_enable(PyObject *self, PyObject *args) { if(!PyArg_ParseTuple(args, ":shortcuts_enable")) return NULL; @@ -1911,17 +1883,14 @@ emb_shortcuts_enable(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_get_modifier(PyObject *self, PyObject *args) +static PyObject* emb_get_modifier(PyObject *self, PyObject *args) { if(!PyArg_ParseTuple(args, ":get_modifier")) return NULL; return Py_BuildValue("(iiiiii)",sdl_mod&KMOD_LCTRL,sdl_mod&KMOD_RCTRL,sdl_mod&KMOD_LALT,sdl_mod&KMOD_RALT,sdl_mod&KMOD_LSHIFT,sdl_mod&KMOD_RSHIFT); } -//SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); -static PyObject* -emb_set_keyrepeat(PyObject *self, PyObject *args) +static PyObject* emb_set_keyrepeat(PyObject *self, PyObject *args) { ////SDL_EnableKeyRepeat(delay,interval) int keydelay,keyinterval; @@ -1933,8 +1902,7 @@ emb_set_keyrepeat(PyObject *self, PyObject *args) } //delete_part -static PyObject* -emb_delete(PyObject *self, PyObject *args) +static PyObject* emb_delete(PyObject *self, PyObject *args) { ////SDL_EnableKeyRepeat(delay,interval) int x,y; @@ -1944,8 +1912,7 @@ emb_delete(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_set_pressure(PyObject *self, PyObject *args) +static PyObject* emb_set_pressure(PyObject *self, PyObject *args) { ////SDL_EnableKeyRepeat(delay,interval) int x,y,press; @@ -1955,8 +1922,7 @@ emb_set_pressure(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_set_velocity(PyObject *self, PyObject *args) +static PyObject* emb_set_velocity(PyObject *self, PyObject *args) { ////SDL_EnableKeyRepeat(delay,interval) int x,y,xv,yv; @@ -1967,8 +1933,7 @@ emb_set_velocity(PyObject *self, PyObject *args) return Py_BuildValue("i",1); } -static PyObject* -emb_disable_python(PyObject *self, PyObject *args) +static PyObject* emb_disable_python(PyObject *self, PyObject *args) { if(!PyArg_ParseTuple(args, ":disable_python")) return NULL; @@ -2087,7 +2052,7 @@ int main(int argc, char *argv[]) int is_beta = 0; #endif char uitext[512] = ""; - char heattext[128] = ""; + char heattext[256] = ""; char coordtext[128] = ""; int currentTime = 0; int FPS = 0; @@ -2102,8 +2067,9 @@ int main(int argc, char *argv[]) #ifdef INTERNAL int vs = 0; #endif - int x, y, b = 0, su=0, c, lb = 0, lx = 0, ly = 0, lm = 0;//, tx, ty; - int da = 0, db = 0, it = 2047, mx, my; + int wavelength_gfx = 0; + int x, y, b = 0, sl=1, sr=0, su=0, c, lb = 0, lx = 0, ly = 0, lm = 0;//, tx, ty; + int da = 0, db = 0, it = 2047, mx, my, bsx = 2, bsy = 2; float nfvx, nfvy; int load_mode=0, load_w=0, load_h=0, load_x=0, load_y=0, load_size=0; void *load_data=NULL; @@ -2111,6 +2077,7 @@ int main(int argc, char *argv[]) int save_mode=0, save_x=0, save_y=0, save_w=0, save_h=0, copy_mode=0; SDL_AudioSpec fmt; int username_flash = 0, username_flash_t = 1; + pers_bg = calloc((XRES+BARSIZE)*YRES, PIXELSIZE); GSPEED = 1; #ifdef PYCONSOLE PyObject *pname,*pmodule,*pfunc,*pvalue,*pargs,*pstep,*pkey; @@ -2124,33 +2091,25 @@ int main(int argc, char *argv[]) fmt.callback = mixaudio; fmt.userdata = NULL; - #ifdef PYCONSOLE - //dump tpt_console_stdlib to file here - /*#include "pystdlib.h" - FILE* fid; - fid=fopen("stdlib.zip","w"); - //fputs(tpt_console_stdlib,fid); - fwrite(&tpt_console_stdlib,1,tpt_console_stdlibsize,fid); - fclose(fid);*/ - //crashes gcc - +#ifdef PYCONSOLE //initialise python console Py_Initialize(); PyRun_SimpleString("print 'python present.'"); Py_InitModule("tpt", EmbMethods); + //change the path to find all the correct modules PyRun_SimpleString("import sys\nsys.path.append('./tptPython.zip')\nsys.path.append('.')"); //load the console module and whatnot - #ifdef PYEXT +#ifdef PYEXT PyRun_SimpleString(tpt_console_py); printf("using external python console file.\n"); pname=PyString_FromString("tpt_console");//create string object pmodule = PyImport_Import(pname);//import module Py_DECREF(pname);//throw away string - #else +#else PyObject *tpt_console_obj = PyMarshal_ReadObjectFromString(tpt_console_pyc+8, sizeof(tpt_console_pyc)-8); pmodule=PyImport_ExecCodeModule("tpt_console", tpt_console_obj); - #endif +#endif if(pmodule!=NULL) { pfunc=PyObject_GetAttrString(pmodule,"handle");//get the handler function @@ -2162,9 +2121,8 @@ int main(int argc, char *argv[]) { PyErr_Print(); printf("unable to find handle function, mangled console.py?\n"); - //return -1; - pyready=0; - pygood=0; + pyready = 0; + pygood = 0; } pstep=PyObject_GetAttrString(pmodule,"step");//get the handler function @@ -2192,9 +2150,8 @@ int main(int argc, char *argv[]) //sys.stderr PyErr_Print(); printf("unable to find console module, missing file or mangled console.py?\n"); - //return -1; - pyready=0; - pygood=0; + pyready = 0; + pygood = 0; } #else printf("python console disabled at compile time."); @@ -2224,8 +2181,7 @@ int main(int argc, char *argv[]) parts[NPART-1].life = -1; pfree = 0; fire_bg=calloc(XRES*YRES, PIXELSIZE); - pers_bg=calloc((XRES+BARSIZE)*YRES, PIXELSIZE); - memset(signs, 0, sizeof(signs)); + clear_sim(); //fbi_img = render_packed_rgb(fbi, FBI_W, FBI_H, FBI_CMP); @@ -2269,6 +2225,19 @@ int main(int argc, char *argv[]) { file_script = 1; } + else if (!strncmp(argv[i], "open:", 5)) + { + int size; + void *file_data; + char fn[64]; + strncpy(fn, argv[i]+5, strlen(argv[i]+5)); + file_data = file_load(fn, &size); + if(file_data) + { + it=0; + parse_save(file_data, size, 0, 0, 0, bmap, fvx, fvy, signs, parts, pmap); + } + } } @@ -2833,8 +2802,6 @@ int main(int argc, char *argv[]) pargs=NULL; if(pvalue==NULL) strcpy(console_error,"failed to execute key code."); - //Py_DECREF(pvalue); - //puts("a"); pvalue=NULL; } #endif @@ -2950,8 +2917,13 @@ int main(int argc, char *argv[]) if (DEBUG_MODE) { int tctype = parts[cr>>8].ctype; - if (tctype>=PT_NUM) + if (tctype>=PT_NUM || tctype<0 || (cr&0xFF)==PT_PHOT) tctype = 0; + if ((cr&0xFF)==PT_PIPE) + { + if (parts[cr>>8].tmp<PT_NUM) tctype = parts[cr>>8].tmp; + else tctype = 0; + } sprintf(heattext, "%s (%s), Pressure: %3.2f, Temp: %4.2f C, Life: %d", ptypes[cr&0xFF].name, ptypes[tctype].name, pv[(y/sdl_scale)/CELL][(x/sdl_scale)/CELL], parts[cr>>8].temp-273.15f, parts[cr>>8].life); sprintf(coordtext, "#%d, X:%d Y:%d", cr>>8, x/sdl_scale, y/sdl_scale); } else { @@ -2961,6 +2933,7 @@ int main(int argc, char *argv[]) sprintf(heattext, "%s, Pressure: %3.2f, Temp: %4.2f C", ptypes[cr&0xFF].name, pv[(y/sdl_scale)/CELL][(x/sdl_scale)/CELL], parts[cr>>8].temp-273.15f); #endif } + if ((cr&0xFF)==PT_PHOT) wavelength_gfx = parts[cr>>8].ctype; } else { @@ -3134,7 +3107,7 @@ int main(int argc, char *argv[]) if (load_y<0) load_y=0; if (bq==1 && !b) { - parse_save(load_data, load_size, 0, load_x, load_y); + parse_save(load_data, load_size, 0, load_x, load_y, bmap, fvx, fvy, signs, parts, pmap); free(load_data); free(load_img); load_mode = 0; @@ -3176,35 +3149,19 @@ int main(int argc, char *argv[]) { if (copy_mode==1) { - clipboard_data=build_save(&clipboard_length, save_x*CELL, save_y*CELL, save_w*CELL, save_h*CELL); + clipboard_data=build_save(&clipboard_length, save_x*CELL, save_y*CELL, save_w*CELL, save_h*CELL, bmap, fvx, fvy, signs, parts); clipboard_ready = 1; save_mode = 0; copy_mode = 0; } else if (copy_mode==2) { - clipboard_data=build_save(&clipboard_length, save_x*CELL, save_y*CELL, save_w*CELL, save_h*CELL); + clipboard_data=build_save(&clipboard_length, save_x*CELL, save_y*CELL, save_w*CELL, save_h*CELL, bmap, fvx, fvy, signs, parts); clipboard_ready = 1; save_mode = 0; copy_mode = 0; clear_area(save_x*CELL, save_y*CELL, save_w*CELL, save_h*CELL); } - else if (copy_mode==3)//rotation - { - if (save_h>save_w) - save_w = save_h; - rotate_area(save_x*CELL, save_y*CELL, save_w*CELL, save_w*CELL,0);//just do squares for now - save_mode = 0; - copy_mode = 0; - } - else if (copy_mode==4)//invertion - { - if (save_h>save_w) - save_w = save_h; - rotate_area(save_x*CELL, save_y*CELL, save_w*CELL, save_w*CELL,1);//just do squares for now - save_mode = 0; - copy_mode = 0; - } else { stamp_save(save_x*CELL, save_y*CELL, save_w*CELL, save_h*CELL); @@ -3262,19 +3219,7 @@ int main(int argc, char *argv[]) } if (x>=(XRES+BARSIZE-(510-367)) && x<=(XRES+BARSIZE-(510-383)) && !bq) { - memset(signs, 0, sizeof(signs)); - memset(pv, 0, sizeof(pv)); - memset(vx, 0, sizeof(vx)); - memset(vy, 0, sizeof(vy)); - memset(fvx, 0, sizeof(fvx)); - memset(fvy, 0, sizeof(fvy)); - memset(bmap, 0, sizeof(bmap)); - memset(emap, 0, sizeof(emap)); - memset(parts, 0, sizeof(particle)*NPART); - memset(photons, 0, sizeof(photons)); - memset(wireless, 0, sizeof(wireless)); - memset(gol2, 0, sizeof(gol2)); - memset(portal, 0, sizeof(portal)); + clear_sim(); for (i=0; i<NPART-1; i++) parts[i].life = i+1; parts[NPART-1].life = -1; @@ -3291,6 +3236,7 @@ int main(int argc, char *argv[]) svf_description[0] = 0; gravityMode = 0; airMode = 0; + death = death2 = 0; isplayer2 = 0; isplayer = 0; @@ -3315,8 +3261,14 @@ int main(int argc, char *argv[]) { if (!svf_open || !svf_own || x>51) { - if (save_name_ui(vid_buf)) + if (save_name_ui(vid_buf)){ execute_save(vid_buf); + if(svf_id[0]){ + char tmpstring[256] = ""; + sprintf(tmpstring, "Save uploaded with the ID %s", svf_id); + info_ui(vid_buf, "Uploaded new save", tmpstring); + } + } } else execute_save(vid_buf); @@ -3336,7 +3288,7 @@ int main(int argc, char *argv[]) } if (x>=19 && x<=35 && svf_last && svf_open && !bq) { //int tpval = sys_pause; - parse_save(svf_last, svf_lsize, 1, 0, 0); + parse_save(svf_last, svf_lsize, 1, 0, 0, bmap, fvx, fvy, signs, parts, pmap); //sys_pause = tpval; } if (x>=(XRES+BARSIZE-(510-476)) && x<=(XRES+BARSIZE-(510-491)) && !bq) @@ -3426,14 +3378,16 @@ int main(int argc, char *argv[]) { for (j=-bsy; j<=bsy; j++) for (i=-bsx; i<=bsx; i++) - if ((CURRENT_BRUSH==CIRCLE_BRUSH && (pow(i,2))/(pow(bsx,2))+(pow(j,2))/(pow(bsy,2))<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=bsy*bsx)) + if (x+i>0 && y+j>0 && x+i<XRES && y+j<YRES && ((CURRENT_BRUSH==CIRCLE_BRUSH && (pow(i,2))/(pow(bsx,2))+(pow(j,2))/(pow(bsy,2))<=1)||(CURRENT_BRUSH==SQUARE_BRUSH&&i*j<=bsy*bsx))) { vx[(y+j)/CELL][(x+i)/CELL] += (x-lx)*0.01f; vy[(y+j)/CELL][(x+i)/CELL] += (y-ly)*0.01f; } } else + { create_line(lx, ly, x, y, bsx, bsy, c); + } lx = x; ly = y; } @@ -3545,14 +3499,7 @@ int main(int argc, char *argv[]) if (save_mode) { - if (copy_mode==3||copy_mode==4)//special drawing for rotate, can remove once it can do rectangles - { - if (save_h>save_w) - save_w = save_h; - xor_rect(vid_buf, save_x*CELL, save_y*CELL, save_w*CELL, save_w*CELL); - } - else - xor_rect(vid_buf, save_x*CELL, save_y*CELL, save_w*CELL, save_h*CELL); + xor_rect(vid_buf, save_x*CELL, save_y*CELL, save_w*CELL, save_h*CELL); da = 51; db = 269; } @@ -3707,6 +3654,8 @@ int main(int argc, char *argv[]) fillrect(vid_buf, XRES-20-textwidth(coordtext), 280, textwidth(coordtext)+8, 13, 0, 0, 0, 140); drawtext(vid_buf, XRES-16-textwidth(coordtext), 282, coordtext, 255, 255, 255, 200); } + if (wavelength_gfx) + draw_wavelengths(vid_buf,XRES-20-textwidth(heattext),265,2,wavelength_gfx); } else { @@ -3717,6 +3666,8 @@ int main(int argc, char *argv[]) fillrect(vid_buf, 12, 280, textwidth(coordtext)+8, 13, 0, 0, 0, 140); drawtext(vid_buf, 16, 282, coordtext, 255, 255, 255, 200); } + if (wavelength_gfx) + draw_wavelengths(vid_buf,12,265,2,wavelength_gfx); } } else @@ -3728,7 +3679,10 @@ int main(int argc, char *argv[]) fillrect(vid_buf, XRES-20-textwidth(coordtext), 26, textwidth(coordtext)+8, 11, 0, 0, 0, 140); drawtext(vid_buf, XRES-16-textwidth(coordtext), 27, coordtext, 255, 255, 255, 200); } + if (wavelength_gfx) + draw_wavelengths(vid_buf,XRES-20-textwidth(heattext),11,2,wavelength_gfx); } + wavelength_gfx = 0; fillrect(vid_buf, 12, 12, textwidth(uitext)+8, 15, 0, 0, 0, 140); drawtext(vid_buf, 16, 16, uitext, 32, 216, 255, 200); @@ -3823,6 +3777,7 @@ int main(int argc, char *argv[]) } SDL_CloseAudio(); http_done(); + PyRun_SimpleString("import os,tempfile,os.path\ntry:\n os.remove(os.path.join(tempfile.gettempdir(),'tpt_console.py'))\nexcept:\n pass"); PyRun_SimpleString("import os,tempfile,os.path\ntry:\n os.remove(os.path.join(tempfile.gettempdir(),'tpt_console.pyo'))\nexcept:\n pass"); PyRun_SimpleString("import os,tempfile,os.path\ntry:\n os.remove(os.path.join(tempfile.gettempdir(),'tpt_console.pyc'))\nexcept:\n pass"); @@ -3848,26 +3803,20 @@ int process_command(pixel *vid_buf,char *console,char *console_error,PyObject *p if(strcmp(console2, "quit")==0) { return -1; - } - else - { - // sprintf(console_error, "Invalid Command", console2); - //handle them command - pargs=Py_BuildValue("(s)",console); - pvalue = PyObject_CallObject(pfunc, pargs); - Py_DECREF(pargs); - pargs=NULL; - if(pvalue==NULL) - strcpy(console_error,"failed to execute code."); - //Py_DECREF(pvalue); - //puts("a"); - pvalue=NULL; + } else { + //handle them command + pargs=Py_BuildValue("(s)",console); + pvalue = PyObject_CallObject(pfunc, pargs); + Py_DECREF(pargs); + pargs=NULL; + if(pvalue==NULL) + strcpy(console_error,"failed to execute code."); + pvalue=NULL; } } return 1; } #endif - int process_command_old(pixel *vid_buf,char *console,char *console_error) { int y,x,nx,ny,i,j,k,m; int do_next = 1; @@ -306,3 +306,152 @@ int cpu_check(void) #endif return 0; } + +matrix2d m2d_multiply_m2d(matrix2d m1, matrix2d m2) +{ + matrix2d result = { + m1.a*m2.a+m1.b*m2.c, m1.a*m2.b+m1.b*m2.d, + m1.c*m2.a+m1.d*m2.c, m1.c*m2.b+m1.d*m2.d + }; + return result; +} +vector2d m2d_multiply_v2d(matrix2d m, vector2d v) +{ + vector2d result = { + m.a*v.x+m.b*v.y, + m.c*v.x+m.d*v.y + }; + return result; +} +matrix2d m2d_multiply_float(matrix2d m, float s) +{ + matrix2d result = { + m.a*s, m.b*s, + m.c*s, m.d*s, + }; + return result; +} + +vector2d v2d_multiply_float(vector2d v, float s) +{ + vector2d result = { + v.x*s, + v.y*s + }; + return result; +} + +vector2d v2d_add(vector2d v1, vector2d v2) +{ + vector2d result = { + v1.x+v2.x, + v1.y+v2.y + }; + return result; +} +vector2d v2d_sub(vector2d v1, vector2d v2) +{ + vector2d result = { + v1.x-v2.x, + v1.y-v2.y + }; + return result; +} + +matrix2d m2d_new(float me0, float me1, float me2, float me3) +{ + matrix2d result = {me0,me1,me2,me3}; + return result; +} +vector2d v2d_new(float x, float y) +{ + vector2d result = {x, y}; + return result; +} + +void clipboard_push_text(char * text) +{ + printf("Not implemented: put text on clipboard \"%s\"\n", text); +} + +char * clipboard_pull_text() +{ + printf("Not implemented: get text from clipboard\n"); + return ""; +} + +int register_extension() +{ +#if defined WIN32 + + LONG rresult; + HKEY newkey; + char *currentfilename; + char *iconname; + char *opencommand; + currentfilename = exe_name(); + iconname = malloc(strlen(currentfilename)+3); + opencommand = malloc(strlen(currentfilename)+13); + sprintf(iconname, "%s,1", currentfilename); + sprintf(opencommand, "\"%s\" open:\"%%1\"", currentfilename); + + //Create extension entry + rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\.cps", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL); + if(rresult != ERROR_SUCCESS){ + return 0; + } + rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)"PowderToySave", strlen("PowderToySave")+1); + if(rresult != ERROR_SUCCESS){ + RegCloseKey(newkey); + return 0; + } + RegCloseKey(newkey); + + //Create program entry + rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\PowderToySave", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL); + if(rresult != ERROR_SUCCESS){ + return 0; + } + rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)"Powder Toy Save", strlen("Powder Toy Save")+1); + if(rresult != ERROR_SUCCESS){ + RegCloseKey(newkey); + return 0; + } + RegCloseKey(newkey); + + //Set DefaultIcon + rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\PowderToySave\\DefaultIcon", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL); + if(rresult != ERROR_SUCCESS){ + return 0; + } + rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)iconname, strlen(iconname)+1); + if(rresult != ERROR_SUCCESS){ + RegCloseKey(newkey); + return 0; + } + RegCloseKey(newkey); + + //Set Launch command + rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\PowderToySave\\shell\\open\\command", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL); + if(rresult != ERROR_SUCCESS){ + return 0; + } + rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)opencommand, strlen(opencommand)+1); + if(rresult != ERROR_SUCCESS){ + RegCloseKey(newkey); + return 0; + } + RegCloseKey(newkey); + + return 1; +#elif defined LIN32 + return 0; +#elif defined LIN64 + return 0; +#elif defined MACOSX + return 0; +#endif +} + +vector2d v2d_zero = {0,0}; +matrix2d m2d_identity = {1,0,0,1}; diff --git a/src/powder.c b/src/powder.c index e15565b..d7f1d8c 100644 --- a/src/powder.c +++ b/src/powder.c @@ -139,6 +139,8 @@ int try_move(int i, int x, int y, int nx, int ny) if (x==nx && y==ny) return 1; + if (nx<0 || ny<0 || nx>=XRES || ny>=YRES) + return 1; e = eval_move(parts[i].type, nx, ny, &r); @@ -253,9 +255,23 @@ int try_move(int i, int x, int y, int nx, int ny) e = r >> 8; if (r && e<NPART) { - if (parts[e].type == PT_PHOT) + if (parts[e].type == PT_PHOT||parts[e].type == PT_NEUT) return 1; + if (parts[i].type==PT_NEUT) { + // target material is NEUTPENETRATE, meaning it gets moved around when neutron passes + unsigned s = pmap[y][x]; + if ((s&0xFF) && (s&0xFF)<PT_NUM && !(ptypes[s&0xFF].properties&PROP_NEUTPENETRATE)) + return 1; // if the element currently underneath neutron isn't NEUTPENETRATE, don't move it around + if ((pmap[ny][nx]>>8)==e) pmap[ny][nx] = (s&~(0xFF))|parts[s>>8].type; + parts[e].x = x; + parts[e].y = y; + pmap[y][x] = (e<<8)|parts[e].type; + parts[s>>8].x = nx; + parts[s>>8].y = ny; + return 1; + } + if ((pmap[ny][nx]>>8)==e) pmap[ny][nx] = 0; parts[e].x += x-nx; parts[e].y += y-ny; @@ -460,7 +476,7 @@ inline void part_change_type(int i, int x, int y, int t) if (x<0 || y<0 || x>=XRES || y>=YRES || i>=NPART || t<0 || t>=PT_NUM) return; parts[i].type = t; - if (t==PT_PHOT)// || t==PT_NEUT) + if (t==PT_PHOT || t==PT_NEUT) { photons[y][x] = t|(i<<8); if ((pmap[y][x]>>8)==i) @@ -491,7 +507,7 @@ inline int create_n_parts(int n, int x, int y, float vx, float vy, int t) if (x<0 || y<0 || x>=XRES || y>=YRES || t<0 || t>=PT_NUM) return -1; - for (c; c<n; c++) { + for (c=0; c<n; c++) { float r = (rand()%128+128)/127.0f; float a = (rand()%360)*3.14159f/180.0f; if (pfree == -1) @@ -508,9 +524,9 @@ inline int create_n_parts(int n, int x, int y, float vx, float vy, int t) parts[i].ctype = 0; parts[i].temp += (n*17); parts[i].tmp = 0; - if (t!=PT_STKM&&t!=PT_STKM2 && t!=PT_PHOT && !pmap[y][x])// && t!=PT_NEUT) + if (t!=PT_STKM&&t!=PT_STKM2 && t!=PT_PHOT && t!=PT_NEUT && !pmap[y][x]) pmap[y][x] = t|(i<<8); - else if (t==PT_PHOT && !photons[y][x]) + else if ((t==PT_PHOT||t==PT_NEUT) && !photons[y][x]) photons[y][x] = t|(i<<8); pv[y/CELL][x/CELL] += 6.0f * CFDS; @@ -630,7 +646,7 @@ inline int create_part(int p, int x, int y, int t) } return -1; } - if (photons[y][x] && t==PT_PHOT) + if (photons[y][x] && (t==PT_PHOT||t==PT_NEUT)) return -1; if (pfree == -1) return -1; @@ -738,35 +754,18 @@ inline int create_part(int p, int x, int y, int t) parts[i].vx = 3.0f*cosf(a); parts[i].vy = 3.0f*sinf(a); } - if (t==PT_PHOT) - photons[y][x] = t|(i<<8); if (t==PT_STKM) { if (isplayer==0) { - if (pmap[y][x]&0xFF==PT_SPAWN) - { - parts[pmap[y][x]>>8].type = PT_STKM; - parts[pmap[y][x]>>8].vx = 0; - parts[pmap[y][x]>>8].vy = 0; - parts[pmap[y][x]>>8].life = 100; - parts[pmap[y][x]>>8].ctype = 0; - parts[pmap[y][x]>>8].temp = ptypes[t].heat; - - } - else - { - parts[i].x = (float)x; - parts[i].y = (float)y; - parts[i].type = PT_STKM; - parts[i].vx = 0; - parts[i].vy = 0; - parts[i].life = 100; - parts[i].ctype = 0; - parts[i].temp = ptypes[t].heat; - } - - + parts[i].x = (float)x; + parts[i].y = (float)y; + parts[i].type = PT_STKM; + parts[i].vx = 0; + parts[i].vy = 0; + parts[i].life = 100; + parts[i].ctype = 0; + parts[i].temp = ptypes[t].heat; player[3] = x-1; //Setting legs positions player[4] = y+6; @@ -794,7 +793,6 @@ inline int create_part(int p, int x, int y, int t) { return -1; } - //kill_part(playerspawn); create_part(-1,x,y,PT_SPAWN); ISSPAWN1 = 1; } @@ -802,29 +800,14 @@ inline int create_part(int p, int x, int y, int t) { if (isplayer2==0) { - if (pmap[y][x]&0xFF==PT_SPAWN2) - { - parts[pmap[y][x]>>8].type = PT_STKM2; - parts[pmap[y][x]>>8].vx = 0; - parts[pmap[y][x]>>8].vy = 0; - parts[pmap[y][x]>>8].life = 100; - parts[pmap[y][x]>>8].ctype = 0; - parts[pmap[y][x]>>8].temp = ptypes[t].heat; - - } - else - { - parts[i].x = (float)x; - parts[i].y = (float)y; - parts[i].type = PT_STKM2; - parts[i].vx = 0; - parts[i].vy = 0; - parts[i].life = 100; - parts[i].ctype = 0; - parts[i].temp = ptypes[t].heat; - } - - + parts[i].x = (float)x; + parts[i].y = (float)y; + parts[i].type = PT_STKM2; + parts[i].vx = 0; + parts[i].vy = 0; + parts[i].life = 100; + parts[i].ctype = 0; + parts[i].temp = ptypes[t].heat; player2[3] = x-1; //Setting legs positions player2[4] = y+6; @@ -852,13 +835,14 @@ inline int create_part(int p, int x, int y, int t) { return -1; } - //kill_part(player2spawn); create_part(-1,x,y,PT_SPAWN2); ISSPAWN2 = 1; } if (t==PT_BIZR||t==PT_BIZRG) parts[i].ctype = 0x47FFFF; - if (t!=PT_STKM&&t!=PT_STKM2 && t!=PT_PHOT)// && t!=PT_NEUT) is this needed? it breaks floodfill, Yes photons should not be placed in the PMAP + if (t==PT_PHOT||t==PT_NEUT) + photons[y][x] = t|(i<<8); + if (t!=PT_STKM&&t!=PT_STKM2 && t!=PT_PHOT && t!=PT_NEUT) // is this needed? it breaks floodfill, Yes photons should not be placed in the PMAP pmap[y][x] = t|(i<<8); return i; @@ -1342,7 +1326,7 @@ void update_particles_i(pixel *vid, int start, int inc) { r = pmap[ny][nx]; neighbors = gol2[nx][ny][0]; - if(neighbors==0 || !(ptypes[r&0xFF].properties&PROP_LIFE || !r&0xFF) || (r>>8)>=NPART) + if(neighbors==0 || !(ptypes[r&0xFF].properties&PROP_LIFE || !(r&0xFF)) || (r>>8)>=NPART) continue; for ( golnum = 1; golnum<=NGOL; golnum++) { @@ -1385,12 +1369,11 @@ void update_particles_i(pixel *vid, int start, int inc) t = parts[i].type; //printf("parts[%d].type: %d\n", i, parts[i].type); - - if (parts[i].life && t!=PT_ACID && t!=PT_COAL && t!=PT_WOOD && t!=PT_STKM && t!=PT_STKM2 && t!=PT_FUSE && t!=PT_FSEP && t!=PT_BCOL && t!=PT_GOL && t!=PT_SPNG && t!=PT_DEUT) + if (parts[i].life && t!=PT_ACID && t!=PT_COAL && t!=PT_WOOD && t!=PT_STKM && t!=PT_STKM2 && t!=PT_FUSE && t!=PT_FSEP && t!=PT_BCOL && t!=PT_GOL && t!=PT_SPNG && t!=PT_QRTZ && t!=PT_DEUT && t!=PT_PRTO && t!=PT_PRTI) { if (!(parts[i].life==10&&(t==PT_SWCH||t==PT_LCRY||t==PT_PCLN||t==PT_HSWC||t==PT_PUMP))) parts[i].life--; - if (parts[i].life<=0 && !(ptypes[t].properties&PROP_CONDUCTS) && t!=PT_ARAY && t!=PT_FIRW && t!=PT_SWCH && t!=PT_PCLN && t!=PT_HSWC && t!=PT_PUMP && t!=PT_SPRK && t!=PT_LAVA && t!=PT_LCRY && t!=PT_QRTZ && t!=PT_GLOW && t!= PT_FOG && t!=PT_PIPE && t!=PT_FRZW &&(t!=PT_ICEI&&parts[i].ctype!=PT_FRZW)&&t!=PT_INST && t!=PT_SHLD1&& t!=PT_SHLD2&& t!=PT_SHLD3&& t!=PT_SHLD4) + if (parts[i].life<=0 && !(ptypes[t].properties&PROP_CONDUCTS) && t!=PT_ARAY && t!=PT_FIRW && t!=PT_SWCH && t!=PT_PCLN && t!=PT_HSWC && t!=PT_PUMP && t!=PT_SPRK && t!=PT_LAVA && t!=PT_LCRY && t!=PT_QRTZ && t!=PT_GLOW && t!= PT_FOG && t!=PT_PIPE && t!=PT_FRZW &&(t!=PT_ICEI&&parts[i].ctype!=PT_FRZW)&&t!=PT_INST && t!=PT_SHLD1&& t!=PT_SHLD2&& t!=PT_SHLD3&& t!=PT_SHLD4 && t!=PT_SING) { kill_part(i); continue; @@ -2054,13 +2037,13 @@ killed: if (ny!=y || nx!=x) { if ((pmap[y][x]>>8)==i) pmap[y][x] = 0; - else if (t==PT_PHOT&&(photons[y][x]>>8)==i) photons[y][x] = 0; + else if ((photons[y][x]>>8)==i) photons[y][x] = 0; if (nx<CELL || nx>=XRES-CELL || ny<CELL || ny>=YRES-CELL) { kill_part(i); continue; } - if (t==PT_PHOT) + if (t==PT_PHOT||t==PT_NEUT) photons[ny][nx] = t|(i<<8); else pmap[ny][nx] = t|(i<<8); @@ -2095,12 +2078,13 @@ void update_particles(pixel *vid) t = parts[i].type; x = (int)(parts[i].x+0.5f); y = (int)(parts[i].y+0.5f); - if (x>=0 && y>=0 && x<XRES && y<YRES && t!=PT_PHOT) { - if (t!=PT_NEUT || (pmap[y][x]&0xFF)!=PT_GLAS) + if (x>=0 && y>=0 && x<XRES && y<YRES) + { + if (t==PT_PHOT||t==PT_NEUT) + photons[y][x] = t|(i<<8); + else pmap[y][x] = t|(i<<8); } - if (t==PT_PHOT) - photons[y][x] = t|(i<<8); NUM_PARTS ++; } else @@ -2610,90 +2594,6 @@ void update_particles(pixel *vid) } -void rotate_area(int area_x, int area_y, int area_w, int area_h, int invert) -{ - //TODO: MSCC doesn't like arrays who's size is determined at runtime. -#if !(defined(WIN32) && !defined(__GNUC__)) - int cx = 0; - int cy = 0; - unsigned tpmap[area_h][area_w]; - unsigned rtpmap[area_w][area_h]; - unsigned char tbmap[area_h/CELL][area_w/CELL]; - unsigned char rtbmap[area_w/CELL][area_h/CELL]; - float tfvy[area_h/CELL][area_w/CELL]; - float tfvx[area_h/CELL][area_w/CELL]; - for (cy=0; cy<area_h; cy++) - { - for (cx=0; cx<area_w; cx++)//save walls to temp - { - if (area_x + cx<XRES&&area_y + cy<YRES) - { - if (bmap[(cy+area_y)/CELL][(cx+area_x)/CELL]) { - tbmap[cy/CELL][cx/CELL] = bmap[(cy+area_y)/CELL][(cx+area_x)/CELL]; - if (bmap[(cy+area_y)/CELL][(cx+area_x)/CELL]==WL_FAN) { - tfvx[cy/CELL][cx/CELL] = fvx[(cy+area_y)/CELL][(cx+area_x)/CELL]; - tfvy[cy/CELL][cx/CELL] = fvy[(cy+area_y)/CELL][(cx+area_x)/CELL]; - } - } else { - tbmap[cy/CELL][cx/CELL] = 0; - tfvx[cy/CELL][cx/CELL] = 0; - tfvy[cy/CELL][cx/CELL] = 0; - } - } - } - } - for (cy=0; cy<area_h; cy++) - { - for (cx=0; cx<area_w; cx++)//save particles to temp - { - if ((area_x + cx<XRES&&area_y + cy<YRES)) - { - tpmap[cy][cx] = pmap[(int)(cy+area_y+0.5f)][(int)(cx+area_x+0.5f)]; - } - else - tpmap[(int)(cy+0.5f)][(int)(cx+0.5f)] = 0; - } - } - for (cy=0; cy<area_w; cy++) - { - for (cx=0; cx<area_h; cx++)//rotate temp arrays - { - if (invert) - { - rtbmap[cy/CELL][((area_h-1)-cx)/CELL] = tbmap[cy/CELL][cx/CELL]; - rtpmap[cy][(area_h-1)-cx] = tpmap[(int)(cy+0.5f)][(int)(cx+0.5f)]; - tfvx[cy/CELL][((area_h-1)-cx)/CELL] = -tfvx[cy/CELL][cx/CELL]; - tfvy[cy/CELL][((area_h-1)-cx)/CELL] = tfvy[cy/CELL][cx/CELL]; - } - else - { - rtbmap[((area_h-1)-cx)/CELL][cy/CELL] = tbmap[cy/CELL][cx/CELL]; - rtpmap[(area_h-1)-cx][cy] = tpmap[(int)(cy+0.5f)][(int)(cx+0.5f)]; - tfvy[((area_h-1)-cx)/CELL][cy/CELL] = -tfvx[cy/CELL][cx/CELL]; - tfvx[((area_h-1)-cx)/CELL][cy/CELL] = tfvy[cy/CELL][cx/CELL]; - } - } - } - for (cy=0; cy<area_w; cy++) - { - for (cx=0; cx<area_h; cx++)//move particles and walls - { - if (area_x + cx<XRES&&area_y + cy<YRES) - { - if ((rtpmap[cy][cx]>>8)<=NPART&&rtpmap[cy][cx]) - { - parts[rtpmap[(int)(cy+0.5f)][(int)(cx+0.5f)]>>8].x = area_x +cx; - parts[rtpmap[(int)(cy+0.5f)][(int)(cx+0.5f)]>>8].y = area_y +cy; - } - bmap[(area_y+cy)/CELL][(area_x+cx)/CELL] = rtbmap[cy/CELL][cx/CELL]; - fvy[(area_y+cy)/CELL][(area_x+cx)/CELL] = tfvy[cy/CELL][cx/CELL]; - fvx[(area_y+cy)/CELL][(area_x+cx)/CELL] = tfvx[cy/CELL][cx/CELL]; - } - } - } -#endif -} - void clear_area(int area_x, int area_y, int area_w, int area_h) { int cx = 0; @@ -2731,14 +2631,10 @@ void create_box(int x1, int y1, int x2, int y2, int c) int flood_parts(int x, int y, int c, int cm, int bm) { int x1, x2, dy = (c<PT_NUM)?1:CELL; - int co = c, wall; + int co = c; if (cm==PT_INST&&co==PT_SPRK) if ((pmap[y][x]&0xFF)==PT_SPRK) return 0; - if (c>=UI_WALLSTART&&c<=UI_WALLSTART+UI_WALLCOUNT) - { - wall = c-100; - } if (cm==-1) { if (c==0) @@ -2754,7 +2650,7 @@ int flood_parts(int x, int y, int c, int cm, int bm) } if (bm==-1) { - if (wall==WL_ERASE) + if (c-UI_WALLSTART+UI_ACTUALSTART==WL_ERASE) { bm = bmap[y/CELL][x/CELL]; if (!bm) @@ -2873,7 +2769,9 @@ int create_parts(int x, int y, int rx, int ry, int c) dw = 1; } if (c == PT_WIND) + { return 1; + } if (dw==1) { rx = rx/CELL; @@ -3071,3 +2969,149 @@ void create_line(int x1, int y1, int x2, int y2, int rx, int ry, int c) } } } + +void *transform_save(void *odata, int *size, matrix2d transform, vector2d translate) +{ + void *ndata; + unsigned char bmapo[YRES/CELL][XRES/CELL], bmapn[YRES/CELL][XRES/CELL]; + particle *partst; + sign signst[MAXSIGNS]; + unsigned pmapt[YRES][XRES]; + float fvxo[YRES/CELL][XRES/CELL], fvyo[YRES/CELL][XRES/CELL]; + float fvxn[YRES/CELL][XRES/CELL], fvyn[YRES/CELL][XRES/CELL]; + int i, x, y, nx, ny, w, h, nw, nh; + vector2d pos, tmp, ctl, cbr; + vector2d cornerso[4]; + unsigned char *odatac = odata; + memset(bmapo, 0, sizeof(bmapo)); + memset(bmapn, 0, sizeof(bmapn)); + memset(signst, 0, sizeof(signst)); + memset(pmapt, 0, sizeof(pmapt)); + memset(fvxo, 0, sizeof(fvxo)); + memset(fvxn, 0, sizeof(fvxn)); + memset(fvyo, 0, sizeof(fvyo)); + memset(fvyn, 0, sizeof(fvyn)); + partst = calloc(sizeof(particle), NPART); + if (parse_save(odata, *size, 0, 0, 0, bmapo, fvxo, fvyo, signst, partst, pmapt)) + { + free(partst); + return odata; + } + w = odatac[6]*CELL; + h = odatac[7]*CELL; + // undo any translation caused by rotation + cornerso[0] = v2d_new(0,0); + cornerso[1] = v2d_new(w-1,0); + cornerso[2] = v2d_new(0,h-1); + cornerso[3] = v2d_new(w-1,h-1); + for (i=0;i<4;i++) + { + tmp = m2d_multiply_v2d(transform,cornerso[i]); + if (i==0) ctl = cbr = tmp; // top left, bottom right corner + if (tmp.x<ctl.x) ctl.x = tmp.x; + if (tmp.y<ctl.y) ctl.y = tmp.y; + if (tmp.x>cbr.x) cbr.x = tmp.x; + if (tmp.y>cbr.y) cbr.y = tmp.y; + } + // casting as int doesn't quite do what we want with negative numbers, so use floor() + tmp = v2d_new(floor(ctl.x+0.5f),floor(ctl.y+0.5f)); + translate = v2d_sub(translate,tmp); + nw = floor(cbr.x+0.5f)-floor(ctl.x+0.5f)+1; + nh = floor(cbr.y+0.5f)-floor(ctl.y+0.5f)+1; + if (nw>XRES) nw = XRES; + if (nh>YRES) nh = YRES; + // rotate and translate signs, parts, walls + for (i=0; i<MAXSIGNS; i++) + { + if (!signst[i].text[0]) continue; + pos = v2d_new(signst[i].x, signst[i].y); + pos = v2d_add(m2d_multiply_v2d(transform,pos),translate); + nx = floor(pos.x+0.5f); + ny = floor(pos.y+0.5f); + if (nx<0 || nx>=nw || ny<0 || ny>=nh) + { + signst[i].text[0] = 0; + continue; + } + signst[i].x = nx; + signst[i].y = ny; + } + for (i=0; i<NPART; i++) + { + if (!partst[i].type) continue; + pos = v2d_new(partst[i].x, partst[i].y); + pos = v2d_add(m2d_multiply_v2d(transform,pos),translate); + nx = floor(pos.x+0.5f); + ny = floor(pos.y+0.5f); + if (nx<0 || nx>=nw || ny<0 || ny>=nh) + { + partst[i].type = PT_NONE; + continue; + } + partst[i].x = nx; + partst[i].y = ny; + } + for (y=0;y<YRES/CELL;y++) + for (x=0;x<XRES/CELL;x++) + { + pos = v2d_new(x*CELL+CELL*0.4f, y*CELL+CELL*0.4f); + pos = v2d_add(m2d_multiply_v2d(transform,pos),translate); + nx = pos.x/CELL; + ny = pos.y/CELL; + if (nx<0 || nx>=nw || ny<0 || ny>=nh) + continue; + if (bmapo[y][x]) + { + bmapn[ny][nx] = bmapo[y][x]; + if (bmapo[y][x]==WL_FAN) + { + fvxn[ny][nx] = fvxo[y][x]; + fvyn[ny][nx] = fvyo[y][x]; + } + } + } + ndata = build_save(size,0,0,nw,nh,bmapn,fvxn,fvyn,signst,partst); + free(partst); + return ndata; +} + +#if defined(WIN32) && !defined(__GNUC__) +_inline void orbitalparts_get(int block1, int block2, int resblock1[], int resblock2[]) +#else +inline void orbitalparts_get(int block1, int block2, int resblock1[], int resblock2[]) +#endif +{ + resblock1[0] = (block1&0x000000FF); + resblock1[1] = (block1&0x0000FF00)>>8; + resblock1[2] = (block1&0x00FF0000)>>16; + resblock1[3] = (block1&0xFF000000)>>24; + + resblock2[0] = (block2&0x000000FF); + resblock2[1] = (block2&0x0000FF00)>>8; + resblock2[2] = (block2&0x00FF0000)>>16; + resblock2[3] = (block2&0xFF000000)>>24; +} + +#if defined(WIN32) && !defined(__GNUC__) +_inline void orbitalparts_set(int *block1, int *block2, int resblock1[], int resblock2[]) +#else +inline void orbitalparts_set(int *block1, int *block2, int resblock1[], int resblock2[]) +#endif +{ + int block1tmp = 0; + int block2tmp = 0; + + block1tmp = (resblock1[0]&0xFF); + block1tmp |= (resblock1[1]&0xFF)<<8; + block1tmp |= (resblock1[2]&0xFF)<<16; + block1tmp |= (resblock1[3]&0xFF)<<24; + + block2tmp = (resblock2[0]&0xFF); + block2tmp |= (resblock2[1]&0xFF)<<8; + block2tmp |= (resblock2[2]&0xFF)<<16; + block2tmp |= (resblock2[3]&0xFF)<<24; + + *block1 = block1tmp; + *block2 = block2tmp; +} + |
