From e9d8abffee9954e0278ea0792ecc0305e3e6020a Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Wed, 9 Jan 2008 18:41:49 +0200 Subject: [PATCH] imported winuaesrc1460b5.zip --- cfgfile.c | 20 +- debug.c | 73 +++-- expansion.c | 39 ++- filesys.asm | 14 + filesys.c | 46 ++- filesys_bootrom.c | 610 ++++++++++++++++++----------------- include/memory.h | 1 + memory.c | 40 ++- od-win32/dinput.c | 14 +- od-win32/dxwrap.c | 4 +- od-win32/picasso96_win.c | 4 +- od-win32/resources/winuae.rc | 87 +++-- od-win32/win32.c | 36 ++- od-win32/win32.h | 4 +- od-win32/win32gfx.c | 13 +- od-win32/win32gui.c | 2 +- od-win32/winuaechangelog.txt | 28 +- 17 files changed, 594 insertions(+), 441 deletions(-) diff --git a/cfgfile.c b/cfgfile.c index b6ca14d1..f785e99e 100644 --- a/cfgfile.c +++ b/cfgfile.c @@ -169,6 +169,14 @@ static const char *obsolete[] = { #define UNEXPANDED "$(FILE_PATH)" +static void trimws (char *s) +{ + /* Delete trailing whitespace. */ + int len = strlen (s); + while (len > 0 && strcspn (s + len - 1, "\t \r\n") == 0) + s[--len] = '\0'; +} + static int match_string (const char *table[], const char *str) { int i; @@ -1813,10 +1821,7 @@ static int cfgfile_load_2 (struct uae_prefs *p, const char *filename, int real, #endif while (cfg_fgets (line, sizeof (line), fh) != 0) { - int len = strlen (line); - /* Delete trailing whitespace. */ - while (len > 0 && strcspn (line + len - 1, "\t \r\n") == 0) - line[--len] = '\0'; + trimws (line); if (strlen (line) > 0) { if (line[0] == '#' || line[0] == ';') continue; @@ -3111,11 +3116,12 @@ static int bip_a3000 (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[2]; - if (config) { + if (config == 2) roms[0] = 61; - } else { + else if (config == 1) + roms[0] = 71; + else roms[0] = 59; - } roms[1] = -1; p->immediate_blits = 1; p->bogomem_size = 0; diff --git a/debug.c b/debug.c index 0cce4d54..ab79b96d 100644 --- a/debug.c +++ b/debug.c @@ -54,8 +54,6 @@ static uaecptr debug_copper_pc; extern int audio_channel_mask; extern int inputdevice_logging; -static FILE *logfile; - void deactivate_debugger (void) { debugger_active = 0; @@ -68,9 +66,6 @@ void deactivate_debugger (void) void activate_debugger (void) { - if (logfile) - fclose (logfile); - logfile = 0; do_skip = 0; if (debugger_active) return; @@ -123,7 +118,7 @@ static char help[] = { " W
Write into Amiga memory\n" " w
[] (read/write/opcode/freeze)\n" " Add/remove memory watchpoints\n" - " wd Enable illegal access logger\n" + " wd [<0-1>] Enable illegal access logger. 1 = break when detected.\n" " S Save a block of Amiga memory\n" " s \"\"/ [] []\n" " Search for string/bytes\n" @@ -135,7 +130,7 @@ static char help[] = { " Also enables level 1 disk logging\n" " did Enable disk logging\n" " dj [] Enable joystick/mouse input debugging\n" - " smc Enable self-modifying code detector\n" + " smc [<0-1>] Enable self-modifying code detector. 1 = break when detected.\n" " dm Dump current address space map\n" #ifdef _WIN32 " x Close debugger.\n" @@ -1155,25 +1150,26 @@ struct smc_item { uae_u8 cnt; }; -static int smc_size; +static int smc_size, smc_mode; static struct smc_item *smc_table; -static void smc_reset(void) +static void smc_free (void) { - int i; - if (!smc_table) - return; - for (i = 0; i < smc_size; i++) { - smc_table[i].addr = 0xffffffff; - smc_table[i].cnt = 0; - } + if (smc_table) + console_out("SMCD disabled\n"); + xfree(smc_table); + smc_mode = 0; + smc_table = NULL; } static void initialize_memwatch (int mode); -static void smc_detect_init(void) +static void smc_detect_init (char **c) { - xfree(smc_table); - smc_table = NULL; + int v, i; + + ignore_ws (c); + v = readint (c); + smc_free (); smc_size = 1 << 24; if (currprefs.z3fastmem_size) smc_size = currprefs.z3fastmem_start + currprefs.z3fastmem_size; @@ -1181,14 +1177,19 @@ static void smc_detect_init(void) smc_table = (struct smc_item*)xmalloc (smc_size * sizeof (struct smc_item)); if (!smc_table) return; - smc_reset(); + for (i = 0; i < smc_size; i++) { + smc_table[i].addr = 0xffffffff; + smc_table[i].cnt = 0; + } if (!memwatch_enabled) initialize_memwatch (0); - console_out("SMCD enabled\n"); + if (v) + smc_mode = 1; + console_out("SMCD enabled. Break=%d\n", smc_mode); } #define SMC_MAXHITS 8 -static void smc_detector(uaecptr addr, int rwi, int size, uae_u32 *valp) +static void smc_detector (uaecptr addr, int rwi, int size, uae_u32 *valp) { int i, hitcnt; uaecptr hitaddr, hitpc; @@ -1228,6 +1229,8 @@ static void smc_detector(uaecptr addr, int rwi, int size, uae_u32 *valp) smc_table[hitaddr].cnt++; console_out("SMC at %08.8X - %08.8X (%d) from %08.8X\n", hitaddr, hitaddr + hitcnt, hitcnt, hitpc); + if (smc_mode) + activate_debugger (); if (smc_table[hitaddr].cnt >= SMC_MAXHITS) console_out("* hit count >= %d, future hits ignored\n", SMC_MAXHITS); } @@ -1609,11 +1612,11 @@ static void memwatch (char **c) } } else { illg_init (); - console_out ("Illegal memory access logging enabled\n"); ignore_ws (c); illgdebug_break = 0; if (more_params (c)) illgdebug_break = 1; + console_out ("Illegal memory access logging enabled. Break=%d\n", illgdebug_break); } return; } @@ -1863,9 +1866,11 @@ static void show_exec_tasks (void) } } +#if 0 static int trace_same_insn_count; static uae_u8 trace_insn_copy[10]; static struct regstruct trace_prev_regs; +#endif static uaecptr nextpc; static int instruction_breakpoint (char **c) @@ -1944,12 +1949,14 @@ static int instruction_breakpoint (char **c) return 0; } } +#if 0 if (skipaddr_start == 0xC0DEDBAD) { trace_same_insn_count = 0; logfile = fopen ("uae.trace", "w"); memcpy (trace_insn_copy, regs.pc_p, 10); memcpy (&trace_prev_regs, ®s, sizeof regs); } +#endif do_skip = 1; skipaddr_doskip = -1; return 1; @@ -2286,17 +2293,17 @@ static void debug_1 (void) screenshot (1, 1); } else if (*inptr == 'm') { if (*(inptr + 1) == 'c') { - if (!memwatch_enabled) - initialize_memwatch(0); + next_char (&inptr); + next_char (&inptr); if (!smc_table) - smc_detect_init(); + smc_detect_init (&inptr); else - smc_reset(); + smc_free (); } else { - next_char(&inptr); - if (more_params(&inptr)) - debug_sprite_mask = readint(&inptr); - console_out("sprite mask: %02.2X\n", debug_sprite_mask); + next_char (&inptr); + if (more_params (&inptr)) + debug_sprite_mask = readint (&inptr); + console_out ("sprite mask: %02.2X\n", debug_sprite_mask); } } else { searchmem (&inptr); @@ -2509,8 +2516,8 @@ void debug (void) bogusframe = 1; addhistory(); - if (do_skip && skipaddr_start == 0xC0DEDBAD) { #if 0 + if (do_skip && skipaddr_start == 0xC0DEDBAD) { if (trace_same_insn_count > 0) { if (memcmp (trace_insn_copy, regs.pc_p, 10) == 0 && memcmp (trace_prev_regs.regs, regs.regs, sizeof regs.regs) == 0) @@ -2521,12 +2528,12 @@ void debug (void) } if (trace_same_insn_count > 1) fprintf (logfile, "[ repeated %d times ]\n", trace_same_insn_count); -#endif m68k_dumpstate (logfile, &nextpc); trace_same_insn_count = 1; memcpy (trace_insn_copy, regs.pc_p, 10); memcpy (&trace_prev_regs, ®s, sizeof regs); } +#endif if (!memwatch_triggered) { if (do_skip) { diff --git a/expansion.c b/expansion.c index 4c3991fd..e9516bac 100644 --- a/expansion.c +++ b/expansion.c @@ -971,6 +971,13 @@ static void expamem_init_gfxcard (void) static size_t fast_filepos, z3_filepos, p96_filepos; #endif +void free_fastmemory (void) +{ + if (fastmemory) + mapped_free (fastmemory); + fastmemory = 0; +} + static void allocate_expamem (void) { currprefs.fastmem_size = changed_prefs.fastmem_size; @@ -978,9 +985,7 @@ static void allocate_expamem (void) currprefs.gfxmem_size = changed_prefs.gfxmem_size; if (allocated_fastmem != currprefs.fastmem_size) { - if (fastmemory) - mapped_free (fastmemory); - fastmemory = 0; + free_fastmemory (); allocated_fastmem = currprefs.fastmem_size; fastmem_mask = allocated_fastmem - 1; @@ -991,7 +996,7 @@ static void allocate_expamem (void) allocated_fastmem = 0; } } - memory_hardreset(); + memory_hardreset (); } if (allocated_z3fastmem != currprefs.z3fastmem_size) { if (z3fastmem) @@ -1008,7 +1013,7 @@ static void allocate_expamem (void) allocated_z3fastmem = 0; } } - memory_hardreset(); + memory_hardreset (); } #ifdef PICASSO96 if (allocated_gfxmem != currprefs.gfxmem_size) { @@ -1026,7 +1031,7 @@ static void allocate_expamem (void) allocated_gfxmem = 0; } } - memory_hardreset(); + memory_hardreset (); } #endif @@ -1062,12 +1067,19 @@ static void allocate_expamem (void) #endif /* SAVESTATE */ } -uaecptr need_uae_boot_rom(void) +static uaecptr check_boot_rom (void) { int i; uaecptr b = 0xf00000; + addrbank *ab; + if (currprefs.cs_cdtvcd || currprefs.cs_cdtvscsi) b = 0xe70000; + ab = &get_mem_bank (0xf00000); + if (ab) { + if (valid_address (0xf00000, 65536)) + b = 0xe70000; + } for (i = 0; i < currprefs.mountitems; i++) { struct uaedev_config_info *uci = &currprefs.mountconfig[i]; if (uci->controller == 0) @@ -1092,7 +1104,18 @@ uaecptr need_uae_boot_rom(void) return 0; } -void expamem_next(void) +uaecptr need_uae_boot_rom (void) +{ + uaecptr v; + + uae_boot_rom = 0; + v = check_boot_rom (); + if (v) + uae_boot_rom = 1; + return v; +} + +void expamem_next (void) { expamem_init_clear (); map_banks (&expamem_bank, 0xE8, 1, 0); diff --git a/filesys.asm b/filesys.asm index 7997acd4..270a1bee 100644 --- a/filesys.asm +++ b/filesys.asm @@ -17,6 +17,7 @@ ; 2007.08.09 started implementing removable drive support (TW) ; 2007.09.01 ACTION_EXAMINE_ALL (TW) ; 2007.09.05 fully filesystem device mounting on the fly (TW) +; 2008.01.09 ACTION_EXAMINE_ALL does not anymore return eac_Entries = 0 with continue (fixes some broken programs) AllocMem = -198 FreeMem = -210 @@ -723,10 +724,13 @@ diskchange ; exall is complex, need to emulate eac_MatchString and/or eac_MatchFunc action_exall move.l 36(a4),a0 ; dp_Arg5, struct ExAllControl + tst.l (a0) + beq.s .ex0 tst.l 8(a0) ; eac_MatchString bne.s .ex1 tst.l 12(a0) ; eac_MatchFunc bne.s .ex1 +.ex0 moveq #1,d0 ; no need to get more entries rts ;nothing to do here .ex1: movem.l d2-d7/a2-a6,-(sp) move.l a0,a5 @@ -785,6 +789,8 @@ action_exall subq.l #1,d7 bra.s .ex4 .ex3 movem.l (sp)+,d2-d7/a2-a6 + move.l 36(a4),a0 ; dp_Arg5, struct ExAllControl + tst.l (a0) ; eac_Entries == 0 -> get more rts @@ -1210,7 +1216,15 @@ ReplyOne: FSML_ReplyOne2: cmp.l #1033,8(a4) ;ACTION_EXAMINE_ALL bne.s FSML_ReplyOne3 +.exaretry: bsr.w action_exall + bne.s FSML_ReplyOne3 + ; Arghh.. we need more entries. (some buggy programs fail if eac_Entries = 0 with continue enabled) + move.w #$ff58,d0 + bsr.w getrtbase + jsr (a0) + bra.s .exaretry + FSML_ReplyOne3: move.l (a4),a1 ; dp_Link move.l 4(a4),a0 ; dp_Port diff --git a/filesys.c b/filesys.c index 6f5ec24d..8721a797 100644 --- a/filesys.c +++ b/filesys.c @@ -709,6 +709,7 @@ typedef struct exallkey { uae_u32 id; void *dirhandle; char *fn; + uaecptr control; } ExAllKey; /* Since ACTION_EXAMINE_NEXT is so braindamaged, we have to keep @@ -2715,15 +2716,19 @@ int get_native_path(uae_u32 lock, char *out) } #define EXALL_DEBUG 0 +#define EXALL_END 0xde1111ad -static ExAllKey *getexall (Unit *unit, int id) +static ExAllKey *getexall (Unit *unit, uaecptr control, int id) { int i; if (id < 0) { for (i = 0; i < EXALLKEYS; i++) { if (unit->exalls[i].id == 0) { unit->exallid++; + if (unit->exallid == EXALL_END) + unit->exallid++; unit->exalls[i].id = unit->exallid; + unit->exalls[i].control = control; return &unit->exalls[i]; } } @@ -2897,7 +2902,7 @@ static int action_examine_all_end (Unit *unit, dpacket packet) if (kickstart_version < 36) return 0; id = get_long (control + 4); - eak = getexall (unit, id); + eak = getexall (unit, control, id); #if EXALL_DEBUG > 0 write_log ("EXALL_END ID=%d %x\n", id, eak); #endif @@ -2958,8 +2963,12 @@ static int action_examine_all (Unit *unit, dpacket packet) PUT_PCK_RES1 (packet, DOS_TRUE); id = get_long (control + 4); + if (id == EXALL_END) { + write_log ("FILESYS: EXALL called twice with ERROR_NO_MORE_ENTRIES\n"); + goto fail; /* already ended exall() */ + } if (id) { - eak = getexall (unit, id); + eak = getexall (unit, control, id); if (!eak) { write_log ("FILESYS: EXALL non-existing ID %d\n", id); doserr = ERROR_OBJECT_WRONG_TYPE; @@ -2975,7 +2984,7 @@ static int action_examine_all (Unit *unit, dpacket packet) } else { - eak = getexall (unit, -1); + eak = getexall (unit, control, -1); if (!eak) goto fail; if (lock != 0) @@ -3028,6 +3037,31 @@ fail: xfree (eak->fn); eak->fn = NULL; } + if (doserr == ERROR_NO_MORE_ENTRIES) + put_long (control + 4, EXALL_END); + } + return 1; +} + +static uae_u32 REGPARAM2 exall_helper (TrapContext *context) +{ + int i; + Unit *u; + uaecptr packet = m68k_areg (&context->regs, 4); + uaecptr control = get_long (packet + dp_Arg5); + uae_u32 id = get_long (control + 4); + +#if EXALL_DEBUG > 0 + write_log ("FILESYS: EXALL extra round ID=%d\n", id); +#endif + if (id == EXALL_END) + return 1; + for (u = units; u; u = u->next) { + for (i = 0; i < EXALLKEYS; i++) { + if (u->exalls[i].id == id && u->exalls[i].control == control) { + action_examine_all (u, get_real_address (packet)); + } + } } return 1; } @@ -5426,6 +5460,10 @@ void filesys_install (void) calltrap (deftrap2 (exter_int_helper, 0, "exter_int_helper")); dw (RTS); + org (rtarea_base + 0xFF58); + calltrap (deftrap2 (exall_helper, 0, "exall_helper")); + dw (RTS); + org (loop); } diff --git a/filesys_bootrom.c b/filesys_bootrom.c index 142343cf..298a46ca 100644 --- a/filesys_bootrom.c +++ b/filesys_bootrom.c @@ -1,16 +1,16 @@ db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x60); db(0x00); db(0x09); db(0x6c); db(0x00); db(0x00); db(0x07); db(0x36); + db(0x60); db(0x00); db(0x09); db(0x78); db(0x00); db(0x00); db(0x07); db(0x42); db(0x00); db(0x00); db(0x00); db(0x34); db(0x00); db(0x00); db(0x01); db(0x78); db(0x00); db(0x00); db(0x00); db(0x20); db(0x00); db(0x00); db(0x02); db(0x34); - db(0x00); db(0x00); db(0x0b); db(0xa0); db(0x00); db(0x00); db(0x0d); db(0x38); - db(0x43); db(0xfa); db(0x0f); db(0x0e); db(0x4e); db(0xae); db(0xff); db(0xa0); + db(0x00); db(0x00); db(0x0b); db(0xba); db(0x00); db(0x00); db(0x0d); db(0x52); + db(0x43); db(0xfa); db(0x0f); db(0x28); db(0x4e); db(0xae); db(0xff); db(0xa0); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x16); db(0x20); db(0x40); db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xff); db(0xfe); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0xfc); - db(0x61); db(0x00); db(0x0b); db(0x4e); db(0x2a); db(0x50); db(0x43); db(0xfa); - db(0x0f); db(0x06); db(0x70); db(0x24); db(0x7a); db(0x01); db(0x4e); db(0xae); + db(0x61); db(0x00); db(0x0b); db(0x68); db(0x2a); db(0x50); db(0x43); db(0xfa); + db(0x0f); db(0x20); db(0x70); db(0x24); db(0x7a); db(0x01); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0c); db(0x43); db(0xfa); - db(0x0e); db(0xf6); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae); + db(0x0f); db(0x10); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x4a); db(0xad); db(0x01); db(0x0c); db(0x67); db(0x5a); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); @@ -18,39 +18,39 @@ db(0x7c); db(0x00); db(0xbc); db(0xad); db(0x01); db(0x0c); db(0x64); db(0x2c); db(0x2f); db(0x06); db(0x7e); db(0x01); db(0x4a); db(0x45); db(0x67); db(0x04); db(0x08); db(0xc7); db(0x00); db(0x02); db(0x2f); db(0x0b); db(0x20); db(0x4b); - db(0x61); db(0x00); db(0x06); db(0x9c); db(0x26); db(0x5f); db(0x0c); db(0x80); + db(0x61); db(0x00); db(0x06); db(0xa8); db(0x26); db(0x5f); db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46); db(0x60); db(0xdc); db(0x2c); db(0x1f); db(0x52); db(0x46); db(0x60); db(0xce); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4b); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x30); db(0x3c); - db(0xff); db(0x80); db(0x61); db(0x00); db(0x0a); db(0xbc); db(0x4e); db(0x90); + db(0xff); db(0x80); db(0x61); db(0x00); db(0x0a); db(0xd6); db(0x4e); db(0x90); db(0x72); db(0x03); db(0x74); db(0xf6); db(0x20); db(0x7c); db(0x00); db(0x20); db(0x00); db(0x00); db(0x90); db(0x88); db(0x65); db(0x0a); db(0x67); db(0x08); db(0x78); db(0x00); db(0x22); db(0x44); db(0x4e); db(0xae); db(0xfd); db(0x96); - db(0x41); db(0xfa); db(0x0e); db(0x12); db(0x43); db(0xfa); db(0x00); db(0x1c); - db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0b); db(0xdc); db(0x22); db(0x40); + db(0x41); db(0xfa); db(0x0e); db(0x2c); db(0x43); db(0xfa); db(0x00); db(0x1c); + db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0b); db(0xf6); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00); - db(0x0a); db(0x88); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff); + db(0x0a); db(0xa2); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x11); db(0x4e); db(0xae); db(0xfe); db(0xc2); - db(0x43); db(0xfa); db(0x0e); db(0x0e); db(0x70); db(0x00); db(0x4e); db(0xae); + db(0x43); db(0xfa); db(0x0e); db(0x28); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x67); db(0xe4); db(0x2c); db(0x40); - db(0x41); db(0xfa); db(0x0d); db(0xe5); db(0x22); db(0x08); db(0x74); db(0x0f); + db(0x41); db(0xfa); db(0x0d); db(0xff); db(0x22); db(0x08); db(0x74); db(0x0f); db(0x41); db(0xfa); db(0x00); db(0x22); db(0x26); db(0x08); db(0xe4); db(0x8b); db(0x28); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x60); db(0xbc); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); db(0x72); db(0x02); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00); - db(0x0a); db(0x28); db(0x4e); db(0x90); db(0x22); db(0x00); db(0x6b); db(0x04); - db(0x61); db(0x00); db(0x07); db(0x84); db(0x70); db(0x00); db(0x4e); db(0x75); + db(0x0a); db(0x42); db(0x4e); db(0x90); db(0x22); db(0x00); db(0x6b); db(0x04); + db(0x61); db(0x00); db(0x07); db(0x90); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x20); db(0x30); db(0x3c); db(0xff); db(0x50); - db(0x61); db(0x00); db(0x0a); db(0x0e); db(0x70); db(0x00); db(0x4e); db(0x90); + db(0x61); db(0x00); db(0x0a); db(0x28); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); - db(0x09); db(0xf8); db(0x70); db(0x02); db(0x4e); db(0x90); db(0x0c); db(0x40); + db(0x0a); db(0x12); db(0x70); db(0x02); db(0x4e); db(0x90); db(0x0c); db(0x40); db(0x00); db(0x01); db(0x6d); db(0x00); db(0x00); db(0x7c); db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xe4); db(0x0c); db(0x40); db(0x00); db(0x02); db(0x6e); db(0x08); db(0x20); db(0x01); db(0x4e); db(0xae); @@ -67,12 +67,12 @@ db(0x35); db(0x7c); db(0x12); db(0x34); db(0x00); db(0x18); db(0x25); db(0x49); db(0x00); db(0x1a); db(0x20); db(0x69); db(0x00); db(0x10); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x74); - db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x09); db(0x6a); + db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x09); db(0x84); db(0x70); db(0x04); db(0x4e); db(0x90); db(0x70); db(0x01); db(0x4c); db(0xdf); db(0x04); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x70); db(0x1a); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x41); db(0xfa); - db(0x0c); db(0xad); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); + db(0x0c); db(0xc7); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0xff); db(0x28); db(0x23); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xfa); db(0xff); db(0x20); db(0x23); db(0x48); db(0x00); db(0x12); db(0x33); db(0x7c); db(0x02); db(0x14); db(0x00); db(0x08); db(0x70); db(0x03); db(0x4e); db(0xae); @@ -84,7 +84,7 @@ db(0x43); db(0xeb); db(0x01); db(0xa0); db(0x11); db(0xb1); db(0x00); db(0x00); db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40); db(0x00); db(0x8c); db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88); db(0x21); db(0x40); - db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); db(0x0c); db(0x47); + db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); db(0x0c); db(0x61); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x01); db(0x98); db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae); db(0xff); db(0x10); db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); @@ -122,13 +122,13 @@ db(0x48); db(0xe7); db(0x40); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x41); db(0xee); db(0x01); db(0x50); db(0x20); db(0x50); db(0x4a); db(0x90); db(0x67); db(0x1a); db(0x22); db(0x68); db(0x00); db(0x0a); db(0x45); db(0xfa); - db(0x0b); db(0x88); db(0x10); db(0x19); db(0x12); db(0x1a); db(0xb0); db(0x01); + db(0x0b); db(0xa2); db(0x10); db(0x19); db(0x12); db(0x1a); db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00); db(0x67); db(0x42); db(0x60); db(0xf2); db(0x20); db(0x50); db(0x60); db(0xe2); db(0x70); db(0x20); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); db(0x00); db(0x08); - db(0x41); db(0xfa); db(0x0b); db(0x5e); db(0x25); db(0x48); db(0x00); db(0x0a); - db(0x41); db(0xfa); db(0x0a); db(0xeb); db(0x25); db(0x48); db(0x00); db(0x0e); + db(0x41); db(0xfa); db(0x0b); db(0x78); db(0x25); db(0x48); db(0x00); db(0x0a); + db(0x41); db(0xfa); db(0x0b); db(0x05); db(0x25); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xea); db(0x00); db(0x12); db(0x20); db(0x88); db(0x58); db(0x90); db(0x21); db(0x48); db(0x00); db(0x08); db(0x41); db(0xee); db(0x01); db(0x50); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x0a); db(0x20); db(0x4a); @@ -211,287 +211,291 @@ db(0x4e); db(0x75); db(0x72); db(0x01); db(0x0c); db(0x00); db(0x00); db(0xfe); db(0x66); db(0x02); db(0x72); db(0x03); db(0x70); db(0x00); db(0x61); db(0x00); db(0xff); db(0x86); db(0x4e); db(0x75); db(0x20); db(0x6c); db(0x00); db(0x24); - db(0x4a); db(0xa8); db(0x00); db(0x08); db(0x66); db(0x08); db(0x4a); db(0xa8); - db(0x00); db(0x0c); db(0x66); db(0x02); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0x3f); db(0x3e); db(0x2a); db(0x48); db(0x24); db(0x6c); db(0x00); db(0x18); - db(0x2e); db(0x15); db(0x7a); db(0x00); db(0x4a); db(0x87); db(0x67); db(0x70); - db(0x20); db(0x0a); db(0x67); db(0x6c); db(0x7c); db(0x00); db(0x22); db(0x2d); - db(0x00); db(0x08); db(0x67); db(0x12); db(0x24); db(0x2a); db(0x00); db(0x04); - db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x4e); db(0xae); db(0xfc); db(0x34); - db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6); db(0x22); db(0x2d); - db(0x00); db(0x0c); db(0x67); db(0x1c); db(0x20); db(0x41); db(0x22); db(0x4a); - db(0x2f); db(0x0a); db(0x45); db(0xec); db(0x00); db(0x20); db(0x48); db(0x7a); - db(0x00); db(0x08); db(0x2f); db(0x28); db(0x00); db(0x08); db(0x4e); db(0x75); - db(0x24); db(0x5f); db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6); - db(0x4a); db(0x06); db(0x67); db(0x24); db(0x20); db(0x2a); db(0x00); db(0x04); - db(0x90); db(0x8a); db(0x4a); db(0x92); db(0x66); db(0x0a); db(0x20); db(0x05); - db(0x67); db(0x10); db(0x20); db(0x40); db(0x42); db(0x90); db(0x60); db(0x0a); - db(0x20); db(0x52); db(0x22); db(0x4a); db(0x22); db(0xd8); db(0x59); db(0x80); - db(0x6a); db(0xfa); db(0x53); db(0x95); db(0x53); db(0x87); db(0x60); db(0x94); - db(0x2a); db(0x0a); db(0x24); db(0x52); db(0x53); db(0x87); db(0x60); db(0x8c); - db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x4e); db(0x75); db(0x61); db(0x00); - db(0xfc); db(0x88); db(0x21); db(0x40); db(0x01); db(0x98); db(0x2f); db(0x08); - db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); db(0x04); db(0x4a); - db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); - db(0x04); db(0x40); db(0x22); db(0x48); db(0x20); db(0x5f); db(0x42); db(0xa8); - db(0x01); db(0x90); db(0x42); db(0xa8); db(0x01); db(0x94); db(0x4e); db(0x91); - db(0x26); db(0x00); db(0x0c); db(0x43); db(0xff); db(0xfe); db(0x67); db(0x00); - db(0xf9); db(0xa8); db(0x0c); db(0x43); db(0x00); db(0x01); db(0x66); db(0x0e); - db(0x08); db(0x07); db(0x00); db(0x02); db(0x66); db(0x08); db(0x08); db(0x07); - db(0x00); db(0x01); db(0x66); db(0x00); db(0x00); db(0x02); db(0x20); db(0x28); - db(0x01); db(0x90); db(0x67); db(0x14); db(0x6b); db(0x12); db(0x2f); db(0x08); - db(0x72); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); - db(0x4a); db(0x83); db(0x6a); db(0x0e); db(0x22); db(0x48); db(0x30); db(0x3c); - db(0xff); db(0x20); db(0x61); db(0x00); db(0x03); db(0xec); db(0x4e); db(0x90); - db(0x60); db(0x26); db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x4e); db(0xae); - db(0xff); db(0x70); db(0x20); db(0x5f); db(0x22); db(0x48); db(0x26); db(0x40); - db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x03); db(0xd2); - db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x08); - db(0x27); db(0x40); db(0x00); db(0x10); db(0x27); db(0x40); db(0x00); db(0x20); - db(0x4a); db(0xa9); db(0x01); db(0x94); db(0x67); db(0x28); db(0x20); db(0x69); - db(0x01); db(0x94); db(0x61); db(0x00); db(0xfa); db(0xea); db(0x48); db(0xe7); - db(0x80); db(0xc0); db(0x20); db(0x29); db(0x01); db(0x90); db(0x22); db(0x69); - db(0x01); db(0x94); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); - db(0xff); db(0x2e); db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x4a); db(0x80); - db(0x67); db(0x04); db(0x61); db(0x00); db(0xfa); db(0x74); db(0x4a); db(0x83); - db(0x6b); db(0x00); db(0xf9); db(0x0e); db(0x30); db(0x3c); db(0xff); db(0x18); - db(0x61); db(0x00); db(0x03); db(0x86); db(0x4e); db(0x90); db(0x20); db(0x03); - db(0x16); db(0x29); db(0x00); db(0x4f); db(0x4a); db(0x80); db(0x66); db(0x1a); - db(0x27); db(0x7c); db(0x00); db(0x00); db(0x17); db(0x70); db(0x00); db(0x14); - db(0x41); db(0xfa); db(0xf7); db(0xda); db(0x20); db(0x08); db(0xe4); db(0x88); - db(0x27); db(0x40); db(0x00); db(0x20); db(0x70); db(0xff); db(0x27); db(0x40); - db(0x00); db(0x24); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x3a); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x14); db(0x72); db(0x00); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x70); db(0x00); - db(0x22); db(0x80); db(0x23); db(0x40); db(0x00); db(0x04); db(0x33); db(0x40); - db(0x00); db(0x0e); db(0x30); db(0x3c); db(0x10); db(0x00); db(0x80); db(0x03); - db(0x33); db(0x40); db(0x00); db(0x08); db(0x23); db(0x6d); db(0x01); db(0x04); - db(0x00); db(0x0a); db(0x23); db(0x4b); db(0x00); db(0x10); db(0x41); db(0xec); - db(0x00); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0xf2); db(0x70); db(0x00); - db(0x4e); db(0x75); db(0x24); db(0x49); db(0x20); db(0x4b); db(0x72); db(0x00); - db(0x22); db(0x41); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x08); - db(0x08); db(0x07); db(0x00); db(0x02); db(0x67); db(0x02); db(0x72); db(0x01); - db(0x70); db(0xec); db(0x2c); db(0x4c); db(0x4e); db(0xae); db(0xff); db(0x6a); - db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x5c); db(0x08); db(0x07); - db(0x00); db(0x02); db(0x66); db(0x56); db(0x20); db(0x52); db(0x74); db(0x02); - db(0x52); db(0x82); db(0x4a); db(0x30); db(0x28); db(0xfd); db(0x66); db(0xf8); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x20); db(0x02); db(0x72); db(0x01); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x3a); - db(0x20); db(0x52); db(0x24); db(0x40); db(0x22); db(0x4a); db(0x12); db(0xd8); - db(0x66); db(0xfc); db(0x13); db(0x7c); db(0x00); db(0x3a); db(0xff); db(0xff); - db(0x42); db(0x11); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); - db(0x06); db(0x60); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); - db(0x2c); db(0x40); db(0x22); db(0x0a); db(0x4e); db(0xae); db(0xff); db(0x52); - db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); - db(0xfe); db(0x62); db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); - db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0x3f); db(0x3e); db(0x2c); db(0x01); db(0x7e); db(0x06); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x43); db(0xfa); db(0x06); db(0x4a); db(0x70); db(0x24); - db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0e); - db(0x08); db(0x87); db(0x00); db(0x02); db(0x43); db(0xfa); db(0x06); db(0x38); - db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); - db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); - db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x20); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x2c); db(0x21); db(0x4c); - db(0x01); db(0x9c); db(0x48); db(0xe7); db(0x00); db(0x8a); db(0x61); db(0x00); - db(0xfd); db(0xf6); db(0x4c); db(0xdf); db(0x51); db(0x00); db(0x0c); db(0x80); - db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); - db(0x52); db(0x46); db(0x48); db(0x46); db(0x60); db(0xe4); db(0x22); db(0x48); - db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x4e); db(0xae); - db(0xff); db(0x2e); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x62); - db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x4e); db(0x75); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); - db(0x20); db(0x40); db(0x4b); db(0xe8); db(0x00); db(0x5c); db(0x43); db(0xfa); - db(0x05); db(0xb0); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); - db(0x24); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xb9); + db(0x4a); db(0x90); db(0x67); db(0x0c); db(0x4a); db(0xa8); db(0x00); db(0x08); + db(0x66); db(0x0a); db(0x4a); db(0xa8); db(0x00); db(0x0c); db(0x66); db(0x04); + db(0x70); db(0x01); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); + db(0x2a); db(0x48); db(0x24); db(0x6c); db(0x00); db(0x18); db(0x2e); db(0x15); + db(0x7a); db(0x00); db(0x4a); db(0x87); db(0x67); db(0x70); db(0x20); db(0x0a); + db(0x67); db(0x6c); db(0x7c); db(0x00); db(0x22); db(0x2d); db(0x00); db(0x08); + db(0x67); db(0x12); db(0x24); db(0x2a); db(0x00); db(0x04); db(0x2c); db(0x6b); + db(0x00); db(0xa0); db(0x4e); db(0xae); db(0xfc); db(0x34); db(0x4a); db(0x80); + db(0x66); db(0x02); db(0x50); db(0xc6); db(0x22); db(0x2d); db(0x00); db(0x0c); + db(0x67); db(0x1c); db(0x20); db(0x41); db(0x22); db(0x4a); db(0x2f); db(0x0a); + db(0x45); db(0xec); db(0x00); db(0x20); db(0x48); db(0x7a); db(0x00); db(0x08); + db(0x2f); db(0x28); db(0x00); db(0x08); db(0x4e); db(0x75); db(0x24); db(0x5f); + db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6); db(0x4a); db(0x06); + db(0x67); db(0x24); db(0x20); db(0x2a); db(0x00); db(0x04); db(0x90); db(0x8a); + db(0x4a); db(0x92); db(0x66); db(0x0a); db(0x20); db(0x05); db(0x67); db(0x10); + db(0x20); db(0x40); db(0x42); db(0x90); db(0x60); db(0x0a); db(0x20); db(0x52); + db(0x22); db(0x4a); db(0x22); db(0xd8); db(0x59); db(0x80); db(0x6a); db(0xfa); + db(0x53); db(0x95); db(0x53); db(0x87); db(0x60); db(0x94); db(0x2a); db(0x0a); + db(0x24); db(0x52); db(0x53); db(0x87); db(0x60); db(0x8c); db(0x4c); db(0xdf); + db(0x7c); db(0xfc); db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0x90); + db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfc); db(0x7c); db(0x21); db(0x40); + db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c); db(0xff); db(0xfc); + db(0x61); db(0x00); db(0x04); db(0x58); db(0x2a); db(0x50); db(0x30); db(0x3c); + db(0xff); db(0x28); db(0x61); db(0x00); db(0x04); db(0x4e); db(0x22); db(0x48); + db(0x20); db(0x5f); db(0x42); db(0xa8); db(0x01); db(0x90); db(0x42); db(0xa8); + db(0x01); db(0x94); db(0x4e); db(0x91); db(0x26); db(0x00); db(0x0c); db(0x43); + db(0xff); db(0xfe); db(0x67); db(0x00); db(0xf9); db(0x9c); db(0x0c); db(0x43); + db(0x00); db(0x01); db(0x66); db(0x0e); db(0x08); db(0x07); db(0x00); db(0x02); + db(0x66); db(0x08); db(0x08); db(0x07); db(0x00); db(0x01); db(0x66); db(0x00); + db(0x00); db(0x02); db(0x20); db(0x28); db(0x01); db(0x90); db(0x67); db(0x14); + db(0x6b); db(0x12); db(0x2f); db(0x08); db(0x72); db(0x01); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x5f); + db(0x21); db(0x40); db(0x01); db(0x94); db(0x4a); db(0x83); db(0x6a); db(0x0e); + db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); + db(0x03); db(0xfa); db(0x4e); db(0x90); db(0x60); db(0x26); db(0x2c); db(0x4c); + db(0x2f); db(0x08); db(0x4e); db(0xae); db(0xff); db(0x70); db(0x20); db(0x5f); + db(0x22); db(0x48); db(0x26); db(0x40); db(0x30); db(0x3c); db(0xff); db(0x20); + db(0x61); db(0x00); db(0x03); db(0xe0); db(0x4e); db(0x90); db(0x70); db(0x00); + db(0x27); db(0x40); db(0x00); db(0x08); db(0x27); db(0x40); db(0x00); db(0x10); + db(0x27); db(0x40); db(0x00); db(0x20); db(0x4a); db(0xa9); db(0x01); db(0x94); + db(0x67); db(0x28); db(0x20); db(0x69); db(0x01); db(0x94); db(0x61); db(0x00); + db(0xfa); db(0xde); db(0x48); db(0xe7); db(0x80); db(0xc0); db(0x20); db(0x29); + db(0x01); db(0x90); db(0x22); db(0x69); db(0x01); db(0x94); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4c); db(0xdf); + db(0x03); db(0x01); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); + db(0xfa); db(0x68); db(0x4a); db(0x83); db(0x6b); db(0x00); db(0xf9); db(0x02); + db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); db(0x03); db(0x94); + db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29); db(0x00); db(0x4f); + db(0x4a); db(0x80); db(0x66); db(0x1a); db(0x27); db(0x7c); db(0x00); db(0x00); + db(0x17); db(0x70); db(0x00); db(0x14); db(0x41); db(0xfa); db(0xf7); db(0xce); + db(0x20); db(0x08); db(0xe4); db(0x88); db(0x27); db(0x40); db(0x00); db(0x20); + db(0x70); db(0xff); db(0x27); db(0x40); db(0x00); db(0x24); db(0x08); db(0x07); + db(0x00); db(0x00); db(0x67); db(0x3a); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x70); db(0x14); db(0x72); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x22); db(0x40); db(0x70); db(0x00); db(0x22); db(0x80); db(0x23); db(0x40); + db(0x00); db(0x04); db(0x33); db(0x40); db(0x00); db(0x0e); db(0x30); db(0x3c); + db(0x10); db(0x00); db(0x80); db(0x03); db(0x33); db(0x40); db(0x00); db(0x08); + db(0x23); db(0x6d); db(0x01); db(0x04); db(0x00); db(0x0a); db(0x23); db(0x4b); + db(0x00); db(0x10); db(0x41); db(0xec); db(0x00); db(0x4a); db(0x4e); db(0xae); + db(0xfe); db(0xf2); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x24); db(0x49); + db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); db(0x08); db(0x07); + db(0x00); db(0x01); db(0x67); db(0x08); db(0x08); db(0x07); db(0x00); db(0x02); + db(0x67); db(0x02); db(0x72); db(0x01); db(0x70); db(0xec); db(0x2c); db(0x4c); + db(0x4e); db(0xae); db(0xff); db(0x6a); db(0x08); db(0x07); db(0x00); db(0x01); + db(0x67); db(0x5c); db(0x08); db(0x07); db(0x00); db(0x02); db(0x66); db(0x56); + db(0x20); db(0x52); db(0x74); db(0x02); db(0x52); db(0x82); db(0x4a); db(0x30); + db(0x28); db(0xfd); db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x20); db(0x02); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x4a); db(0x80); db(0x67); db(0x3a); db(0x20); db(0x52); db(0x24); db(0x40); + db(0x22); db(0x4a); db(0x12); db(0xd8); db(0x66); db(0xfc); db(0x13); db(0x7c); + db(0x00); db(0x3a); db(0xff); db(0xff); db(0x42); db(0x11); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x43); db(0xfa); db(0x06); db(0x6e); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2c); db(0x40); db(0x22); db(0x0a); + db(0x4e); db(0xae); db(0xff); db(0x52); db(0x22); db(0x4e); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4a); + db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x70); db(0x00); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2c); db(0x01); + db(0x7e); db(0x06); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); + db(0x06); db(0x58); db(0x70); db(0x24); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x4a); db(0x80); db(0x66); db(0x0e); db(0x08); db(0x87); db(0x00); db(0x02); + db(0x43); db(0xfa); db(0x06); db(0x46); db(0x70); db(0x00); db(0x4e); db(0xae); + db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x4a); db(0x80); + db(0x67); db(0x2c); db(0x21); db(0x4c); db(0x01); db(0x9c); db(0x48); db(0xe7); + db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfd); db(0xf6); db(0x4c); db(0xdf); + db(0x51); db(0x00); db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); + db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46); + db(0x60); db(0xe4); db(0x22); db(0x48); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x7c); db(0xfc); + db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x93); db(0xc9); + db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x20); db(0x40); db(0x4b); db(0xe8); + db(0x00); db(0x5c); db(0x43); db(0xfa); db(0x05); db(0xbe); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x24); db(0x40); db(0x20); db(0x3c); + db(0x00); db(0x00); db(0x00); db(0xb9); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); + db(0x7c); db(0x00); db(0x26); db(0x86); db(0x27); db(0x46); db(0x00); db(0x04); + db(0x27); db(0x46); db(0x00); db(0x08); db(0x27); db(0x4a); db(0x00); db(0xa0); + db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x93); db(0xc9); db(0x4e); db(0xae); + db(0xfe); db(0xda); db(0x27); db(0x40); db(0x00); db(0xb0); db(0x61); db(0x00); + db(0x02); db(0xc2); db(0x27); db(0x40); db(0x00); db(0xa4); db(0x61); db(0x00); + db(0x02); db(0xee); db(0x27); db(0x40); db(0x00); db(0xa8); db(0x7a); db(0x00); + db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); + db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x26); db(0x2c); + db(0x00); db(0x0a); db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00); + db(0x01); db(0xba); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); + db(0x70); db(0x01); db(0x61); db(0x00); db(0xfa); db(0x34); db(0x08); db(0x02); + db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); db(0x61); db(0x00); + db(0xfb); db(0x9c); db(0x61); db(0x00); db(0x03); db(0x4a); db(0x60); db(0x00); + db(0x00); db(0xfc); db(0x61); db(0x00); db(0x03); db(0x42); db(0x20); db(0x4d); + db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x4a); db(0x80); + db(0x66); db(0x10); db(0x70); db(0x00); db(0x12); db(0x2d); db(0x00); db(0x0f); + db(0x03); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x11); db(0x4e); db(0xae); + db(0xfe); db(0xc2); db(0x4a); db(0x2b); db(0x00); db(0xac); db(0x67); db(0x08); + db(0x61); db(0x00); db(0xfc); db(0x40); db(0x42); db(0x2b); db(0x00); db(0xac); + db(0x20); db(0x0c); db(0x67); db(0xce); db(0x0c); db(0x6c); db(0x00); db(0x26); + db(0x00); db(0x12); db(0x66); db(0x4c); db(0x0c); db(0xac); db(0x40); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x42); db(0x0c); db(0x6c); + db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3a); db(0x20); db(0x6c); + db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); db(0x02); db(0x80); + db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); db(0x80); db(0x00); + db(0x00); db(0x08); db(0x66); db(0x18); db(0x02); db(0xa8); db(0x7f); db(0xff); + db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); db(0x00); db(0x10); + db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); db(0x4e); db(0xae); + db(0xfe); db(0x92); db(0x60); db(0x86); db(0x22); db(0x4c); db(0x70); db(0x26); + db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); db(0xff); db(0x7c); + db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x3e); db(0x30); db(0x3c); + db(0xff); db(0x50); db(0x61); db(0x00); db(0x01); db(0x06); db(0x70); db(0x01); + db(0x4e); db(0x90); db(0x45); db(0xeb); db(0x00); db(0x04); db(0x20); db(0x52); + db(0x20); db(0x08); db(0x67); db(0x00); db(0xff); db(0x5e); db(0x22); db(0x50); + db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x04); db(0x6a); db(0x16); + db(0x48); db(0xe7); db(0x00); db(0xc0); db(0x28); db(0x68); db(0x00); db(0x0a); + db(0x61); db(0x4a); db(0x53); db(0x85); db(0x4c); db(0xdf); db(0x03); db(0x00); + db(0x24); db(0x89); db(0x20); db(0x49); db(0x60); db(0xda); db(0x24); db(0x48); + db(0x20); db(0x49); db(0x60); db(0xd4); db(0x0c); db(0x85); db(0x00); db(0x00); + db(0x00); db(0x14); db(0x65); db(0x00); db(0x00); db(0x0a); db(0x70); db(0x01); + db(0x29); db(0x40); db(0x00); db(0x04); db(0x60); db(0x12); db(0x61); db(0x5c); + db(0x30); db(0x3c); db(0xff); db(0x30); db(0x61); db(0x00); db(0x00); db(0xb4); + db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x52); db(0x85); + db(0x28); db(0xab); db(0x00); db(0x04); db(0x27); db(0x4c); db(0x00); db(0x04); + db(0x60); db(0x00); db(0xff); db(0x08); db(0x28); db(0x43); db(0x61); db(0x04); + db(0x60); db(0x00); db(0xff); db(0x00); db(0x0c); db(0xac); db(0x00); db(0x00); + db(0x00); db(0x1f); db(0x00); db(0x08); db(0x66); db(0x04); db(0x61); db(0x00); + db(0xfb); db(0x40); db(0x0c); db(0xac); db(0x00); db(0x00); db(0x04); db(0x09); + db(0x00); db(0x08); db(0x66); db(0x12); db(0x61); db(0x00); db(0xfb); db(0x6e); + db(0x66); db(0x0c); db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); + db(0x00); db(0x72); db(0x4e); db(0x90); db(0x60); db(0xee); db(0x22); db(0x54); + db(0x20); db(0x6c); db(0x00); db(0x04); db(0x29); db(0x4d); db(0x00); db(0x04); + db(0x4e); db(0xee); db(0xfe); db(0x92); db(0x2f); db(0x05); db(0x7a); db(0xfc); + db(0x24); db(0x53); db(0x2e); db(0x0a); db(0x22); db(0x0a); db(0x67); db(0x00); + db(0x00); db(0x0c); db(0x52); db(0x85); db(0x67); db(0x1e); db(0x22); db(0x4a); + db(0x24); db(0x52); db(0x60); db(0xf0); db(0x52); db(0x85); db(0x67); db(0x3c); + db(0x24); db(0x47); db(0x70); db(0x18); db(0x72); db(0x01); db(0x4e); db(0xae); + db(0xff); db(0x3a); db(0x52); db(0x46); db(0x24); db(0x40); db(0x24); db(0x87); + db(0x2e); db(0x0a); db(0x60); db(0xe8); db(0x20); db(0x12); db(0x67); db(0x24); + db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x1e); db(0x20); db(0x40); + db(0x20); db(0x10); db(0x67); db(0x18); db(0x70); db(0x00); db(0x22); db(0x80); + db(0x22); db(0x4a); db(0x24); db(0x51); db(0x70); db(0x18); db(0x4e); db(0xae); + db(0xff); db(0x2e); db(0x06); db(0x86); db(0x00); db(0x01); db(0x00); db(0x00); + db(0x20); db(0x0a); db(0x66); db(0xec); db(0x26); db(0x87); db(0x2a); db(0x1f); + db(0x4e); db(0x75); db(0x41); db(0xfa); db(0xf4); db(0x48); db(0x02); db(0x80); + db(0x00); db(0x00); db(0xff); db(0xff); db(0xd1); db(0xc0); db(0x4e); db(0x75); + db(0x00); db(0x00); db(0x0c); db(0xaf); db(0x00); db(0x00); db(0x00); db(0x22); + db(0x00); db(0x08); db(0x66); db(0x30); db(0x48); db(0xe7); db(0xc0); db(0xe2); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x93); db(0xc9); db(0x4e); db(0xae); + db(0xfe); db(0xda); db(0x24); db(0x40); db(0x22); db(0x4a); db(0x70); db(0xec); + db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x41); db(0xfa); db(0xff); db(0xda); + db(0x32); db(0x10); db(0xb2); db(0x50); db(0x67); db(0xfc); db(0x22); db(0x4a); + db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x72); db(0x01); db(0x4c); db(0xdf); + db(0x47); db(0x03); db(0x58); db(0x8f); db(0x4e); db(0x75); db(0x20); db(0x88); + db(0x58); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); db(0x21); db(0x48); + db(0x00); db(0x08); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); + db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04); db(0x70); db(0xff); + db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x91); db(0xc8); db(0x24); db(0x00); + db(0x6b); db(0x32); db(0x70); db(0x22); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x91); db(0xc8); + db(0x24); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x15); db(0x7c); + db(0x00); db(0x04); db(0x00); db(0x08); db(0x15); db(0x42); db(0x00); db(0x0f); + db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x25); db(0x40); + db(0x00); db(0x10); db(0x41); db(0xea); db(0x00); db(0x14); db(0x61); db(0x00); + db(0xff); db(0xae); db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); + db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); + db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04); db(0x4a); db(0x80); + db(0x67); db(0x20); db(0x24); db(0x40); db(0x74); db(0x30); db(0x20); db(0x02); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x26); db(0x40); db(0x7c); db(0x00); db(0x26); db(0x86); - db(0x27); db(0x46); db(0x00); db(0x04); db(0x27); db(0x46); db(0x00); db(0x08); - db(0x27); db(0x4a); db(0x00); db(0xa0); db(0x50); db(0xeb); db(0x00); db(0x9e); - db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x27); db(0x40); - db(0x00); db(0xb0); db(0x61); db(0x00); db(0x02); db(0xb4); db(0x27); db(0x40); - db(0x00); db(0xa4); db(0x61); db(0x00); db(0x02); db(0xe0); db(0x27); db(0x40); - db(0x00); db(0xa8); db(0x7a); db(0x00); db(0x20); db(0x4d); db(0x4e); db(0xae); - db(0xfe); db(0x80); db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x8c); - db(0x28); db(0x40); db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x30); db(0x3c); - db(0xff); db(0x40); db(0x61); db(0x00); db(0x01); db(0xac); db(0x70); db(0x00); - db(0x4e); db(0x90); db(0x24); db(0x00); db(0x70); db(0x01); db(0x61); db(0x00); - db(0xfa); db(0x40); db(0x08); db(0x02); db(0x00); db(0x01); db(0x67); db(0x06); - db(0x70); db(0x01); db(0x61); db(0x00); db(0xfb); db(0xa8); db(0x61); db(0x00); - db(0x03); db(0x3c); db(0x60); db(0x00); db(0x00); db(0xfc); db(0x61); db(0x00); - db(0x03); db(0x34); db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x8c); - db(0x28); db(0x40); db(0x4a); db(0x80); db(0x66); db(0x10); db(0x70); db(0x00); - db(0x12); db(0x2d); db(0x00); db(0x0f); db(0x03); db(0xc0); db(0x08); db(0xc0); - db(0x00); db(0x11); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x4a); db(0x2b); - db(0x00); db(0xac); db(0x67); db(0x08); db(0x61); db(0x00); db(0xfc); db(0x4c); - db(0x42); db(0x2b); db(0x00); db(0xac); db(0x20); db(0x0c); db(0x67); db(0xce); - db(0x0c); db(0x6c); db(0x00); db(0x26); db(0x00); db(0x12); db(0x66); db(0x4c); - db(0x0c); db(0xac); db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); - db(0x66); db(0x42); db(0x0c); db(0x6c); db(0x12); db(0x34); db(0x00); db(0x18); - db(0x66); db(0x3a); db(0x20); db(0x6c); db(0x00); db(0x1a); db(0x20); db(0x28); - db(0x00); db(0x0c); db(0x02); db(0x80); db(0x80); db(0x00); db(0x00); db(0x08); - db(0x0c); db(0x80); db(0x80); db(0x00); db(0x00); db(0x08); db(0x66); db(0x18); - db(0x02); db(0xa8); db(0x7f); db(0xff); db(0xff); db(0xff); db(0x00); db(0x0c); - db(0x20); db(0x68); db(0x00); db(0x10); db(0x22); db(0x4c); db(0x12); db(0xbc); - db(0x00); db(0x08); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x86); - db(0x22); db(0x4c); db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x60); db(0x00); db(0xff); db(0x7c); db(0x26); db(0x2c); db(0x00); db(0x0a); - db(0x66); db(0x3e); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); - db(0x00); db(0xf8); db(0x70); db(0x01); db(0x4e); db(0x90); db(0x45); db(0xeb); - db(0x00); db(0x04); db(0x20); db(0x52); db(0x20); db(0x08); db(0x67); db(0x00); - db(0xff); db(0x5e); db(0x22); db(0x50); db(0x20); db(0x40); db(0x20); db(0x28); - db(0x00); db(0x04); db(0x6a); db(0x16); db(0x48); db(0xe7); db(0x00); db(0xc0); - db(0x28); db(0x68); db(0x00); db(0x0a); db(0x61); db(0x4a); db(0x53); db(0x85); - db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x89); db(0x20); db(0x49); - db(0x60); db(0xda); db(0x24); db(0x48); db(0x20); db(0x49); db(0x60); db(0xd4); - db(0x0c); db(0x85); db(0x00); db(0x00); db(0x00); db(0x14); db(0x65); db(0x00); - db(0x00); db(0x0a); db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x04); - db(0x60); db(0x12); db(0x61); db(0x4e); db(0x30); db(0x3c); db(0xff); db(0x30); - db(0x61); db(0x00); db(0x00); db(0xa6); db(0x4e); db(0x90); db(0x4a); db(0x80); - db(0x67); db(0x0e); db(0x52); db(0x85); db(0x28); db(0xab); db(0x00); db(0x04); - db(0x27); db(0x4c); db(0x00); db(0x04); db(0x60); db(0x00); db(0xff); db(0x08); - db(0x28); db(0x43); db(0x61); db(0x04); db(0x60); db(0x00); db(0xff); db(0x00); - db(0x0c); db(0xac); db(0x00); db(0x00); db(0x00); db(0x1f); db(0x00); db(0x08); - db(0x66); db(0x04); db(0x61); db(0x00); db(0xfb); db(0x4c); db(0x0c); db(0xac); - db(0x00); db(0x00); db(0x04); db(0x09); db(0x00); db(0x08); db(0x66); db(0x04); - db(0x61); db(0x00); db(0xfb); db(0x7a); db(0x22); db(0x54); db(0x20); db(0x6c); - db(0x00); db(0x04); db(0x29); db(0x4d); db(0x00); db(0x04); db(0x4e); db(0xee); - db(0xfe); db(0x92); db(0x2f); db(0x05); db(0x7a); db(0xfc); db(0x24); db(0x53); - db(0x2e); db(0x0a); db(0x22); db(0x0a); db(0x67); db(0x00); db(0x00); db(0x0c); - db(0x52); db(0x85); db(0x67); db(0x1e); db(0x22); db(0x4a); db(0x24); db(0x52); - db(0x60); db(0xf0); db(0x52); db(0x85); db(0x67); db(0x3c); db(0x24); db(0x47); - db(0x70); db(0x18); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x52); db(0x46); db(0x24); db(0x40); db(0x24); db(0x87); db(0x2e); db(0x0a); - db(0x60); db(0xe8); db(0x20); db(0x12); db(0x67); db(0x24); db(0x20); db(0x40); - db(0x20); db(0x10); db(0x67); db(0x1e); db(0x20); db(0x40); db(0x20); db(0x10); - db(0x67); db(0x18); db(0x70); db(0x00); db(0x22); db(0x80); db(0x22); db(0x4a); - db(0x24); db(0x51); db(0x70); db(0x18); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x06); db(0x86); db(0x00); db(0x01); db(0x00); db(0x00); db(0x20); db(0x0a); - db(0x66); db(0xec); db(0x26); db(0x87); db(0x2a); db(0x1f); db(0x4e); db(0x75); - db(0x41); db(0xfa); db(0xf4); db(0x62); db(0x02); db(0x80); db(0x00); db(0x00); - db(0xff); db(0xff); db(0xd1); db(0xc0); db(0x4e); db(0x75); db(0x00); db(0x00); - db(0x0c); db(0xaf); db(0x00); db(0x00); db(0x00); db(0x22); db(0x00); db(0x08); - db(0x66); db(0x30); db(0x48); db(0xe7); db(0xc0); db(0xe2); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); - db(0x24); db(0x40); db(0x22); db(0x4a); db(0x70); db(0xec); db(0x4e); db(0xae); - db(0xfe); db(0xd4); db(0x41); db(0xfa); db(0xff); db(0xda); db(0x32); db(0x10); - db(0xb2); db(0x50); db(0x67); db(0xfc); db(0x22); db(0x4a); db(0x4e); db(0xae); - db(0xfe); db(0xd4); db(0x72); db(0x01); db(0x4c); db(0xdf); db(0x47); db(0x03); - db(0x58); db(0x8f); db(0x4e); db(0x75); db(0x20); db(0x88); db(0x58); db(0x90); - db(0x42); db(0xa8); db(0x00); db(0x04); db(0x21); db(0x48); db(0x00); db(0x08); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x79); - db(0x00); db(0x00); db(0x00); db(0x04); db(0x70); db(0xff); db(0x4e); db(0xae); - db(0xfe); db(0xb6); db(0x91); db(0xc8); db(0x24); db(0x00); db(0x6b); db(0x32); - db(0x70); db(0x22); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x91); db(0xc8); db(0x24); db(0x40); - db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x15); db(0x7c); db(0x00); db(0x04); - db(0x00); db(0x08); db(0x15); db(0x42); db(0x00); db(0x0f); db(0x93); db(0xc9); - db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x25); db(0x40); db(0x00); db(0x10); - db(0x41); db(0xea); db(0x00); db(0x14); db(0x61); db(0x00); db(0xff); db(0xae); - db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x44); db(0x04); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x79); - db(0x00); db(0x00); db(0x00); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x20); - db(0x24); db(0x40); db(0x74); db(0x30); db(0x20); db(0x02); db(0x22); db(0x3c); - db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x20); db(0x40); db(0x11); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x08); - db(0x21); db(0x42); db(0x00); db(0x12); db(0x21); db(0x4a); db(0x00); db(0x0e); - db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0x00); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x61); db(0x00); db(0xff); db(0x70); db(0x61); db(0x00); db(0xff); db(0xbc); - db(0x67); db(0x1a); db(0x22); db(0x40); db(0x24); db(0x40); db(0x41); db(0xfa); - db(0x02); db(0x44); db(0x70); db(0x00); db(0x72); db(0x00); db(0x4e); db(0xae); - db(0xfe); db(0x44); db(0x22); db(0x00); db(0x70); db(0x00); db(0x4a); db(0x81); - db(0x66); db(0x02); db(0x20); db(0x0a); db(0x4a); db(0x80); db(0x4c); db(0xdf); - db(0x44); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x22); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x3c); - db(0x61); db(0x00); db(0xff); db(0x88); db(0x67); db(0x1a); db(0x24); db(0x40); - db(0x22); db(0x40); db(0x41); db(0xfa); db(0x02); db(0x1d); db(0x70); db(0x00); - db(0x72); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x22); db(0x00); - db(0x70); db(0x00); db(0x4a); db(0x81); db(0x66); db(0x02); db(0x20); db(0x0a); - db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x00); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0x38); db(0x32); db(0x2c); db(0x79); db(0x00); db(0x00); - db(0x00); db(0x04); db(0x28); db(0x00); db(0x24); db(0x08); db(0x26); db(0x09); - db(0x20); db(0x3c); db(0x00); db(0x00); db(0x08); db(0x5c); db(0x22); db(0x3c); - db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x34); db(0x24); db(0x40); - db(0x15); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x08); db(0x15); db(0x44); - db(0x00); db(0x09); db(0x25); db(0x42); db(0x00); db(0x0a); db(0x47); db(0xea); - db(0x00); db(0x5c); db(0x25); db(0x4b); db(0x00); db(0x3a); db(0x47); db(0xeb); - db(0x08); db(0x00); db(0x25); db(0x4b); db(0x00); db(0x3e); db(0x25); db(0x4b); - db(0x00); db(0x36); db(0x22); db(0x4a); db(0x24); db(0x43); db(0x97); db(0xcb); - db(0x24); db(0x09); db(0x4e); db(0xae); db(0xfe); db(0xe6); db(0x20); db(0x02); - db(0x4c); db(0xdf); db(0x4c); db(0x1c); db(0x4e); db(0x75); db(0x00); db(0x00); - db(0x00); db(0x00); db(0x00); db(0x00); db(0x2f); db(0x08); db(0x4a); db(0x2b); - db(0x00); db(0x9d); db(0x66); db(0x26); db(0x41); db(0xfa); db(0xff); db(0xf0); - db(0x0c); db(0x10); db(0x00); db(0x01); db(0x66); db(0x1c); db(0x41); db(0xfa); - db(0x01); db(0x96); db(0x43); db(0xfa); db(0x00); db(0x1a); db(0x70); db(0x05); - db(0x61); db(0x00); db(0xff); db(0x7e); db(0x50); db(0xeb); db(0x00); db(0x9d); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x61); db(0x00); db(0xfe); db(0x2a); - db(0x4e); db(0x90); db(0x20); db(0x5f); db(0x4e); db(0x75); db(0x2c); db(0x79); - db(0x00); db(0x00); db(0x00); db(0x04); db(0x70); db(0xff); db(0x4e); db(0xae); - db(0xfe); db(0xb6); db(0x74); db(0x00); db(0x01); db(0xc2); db(0x93); db(0xc9); - db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x28); db(0x40); db(0x70); db(0x14); - db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x70); db(0x00); - db(0x43); db(0xfa); db(0x01); db(0xaa); db(0x4e); db(0xae); db(0xfd); db(0xd8); - db(0x2e); db(0x00); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x44); + db(0xff); db(0x3a); db(0x20); db(0x40); db(0x11); db(0x7c); db(0x00); db(0x0a); + db(0x00); db(0x08); db(0x21); db(0x42); db(0x00); db(0x12); db(0x21); db(0x4a); + db(0x00); db(0x0e); db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x04); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x22); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x70); db(0x61); db(0x00); + db(0xff); db(0xbc); db(0x67); db(0x1a); db(0x22); db(0x40); db(0x24); db(0x40); + db(0x41); db(0xfa); db(0x02); db(0x44); db(0x70); db(0x00); db(0x72); db(0x00); + db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x22); db(0x00); db(0x70); db(0x00); + db(0x4a); db(0x81); db(0x66); db(0x02); db(0x20); db(0x0a); db(0x4a); db(0x80); + db(0x4c); db(0xdf); db(0x44); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x00); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x61); db(0x00); + db(0xff); db(0x3c); db(0x61); db(0x00); db(0xff); db(0x88); db(0x67); db(0x1a); + db(0x24); db(0x40); db(0x22); db(0x40); db(0x41); db(0xfa); db(0x02); db(0x1d); + db(0x70); db(0x00); db(0x72); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0x44); + db(0x22); db(0x00); db(0x70); db(0x00); db(0x4a); db(0x81); db(0x66); db(0x02); + db(0x20); db(0x0a); db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x00); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x32); db(0x2c); db(0x79); + db(0x00); db(0x00); db(0x00); db(0x04); db(0x28); db(0x00); db(0x24); db(0x08); + db(0x26); db(0x09); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x08); db(0x5c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x2a); db(0x40); db(0x61); db(0x00); db(0xfe); db(0xc2); - db(0x2b); db(0x40); db(0x00); db(0x3c); db(0x67); db(0x00); db(0x00); db(0x4e); - db(0x61); db(0x00); db(0xfe); db(0xea); db(0x2b); db(0x40); db(0x00); db(0x40); - db(0x67); db(0x00); db(0x00); db(0x42); db(0x47); db(0xed); db(0x00); db(0x16); - db(0x27); db(0x4c); db(0x00); db(0x0c); db(0x27); db(0x42); db(0x00); db(0x08); - db(0x70); db(0xff); db(0x26); db(0x80); db(0x27); db(0x40); db(0x00); db(0x04); - db(0x43); db(0xed); db(0x00); db(0x00); db(0x13); db(0x7c); db(0x00); db(0x02); - db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x05); db(0x00); db(0x09); - db(0x41); db(0xfa); db(0x00); db(0xfc); db(0x23); db(0x48); db(0x00); db(0x0a); - db(0x41); db(0xfa); db(0x00); db(0xa0); db(0x23); db(0x48); db(0x00); db(0x12); - db(0x23); db(0x4b); db(0x00); db(0x0e); db(0x70); db(0x05); db(0x4e); db(0xae); - db(0xff); db(0x58); db(0x60); db(0x02); db(0x4e); db(0x75); db(0x20); db(0x02); - db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x22); db(0x6d); db(0x00); db(0x3c); - db(0x45); db(0xed); db(0x00); db(0x26); db(0x33); db(0x7c); db(0x00); db(0x0b); - db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x16); - db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28); db(0x13); db(0x7c); - db(0x00); db(0x01); db(0x00); db(0x1e); db(0x15); db(0x7c); db(0x00); db(0x04); - db(0x00); db(0x04); db(0x42); db(0x2a); db(0x00); db(0x05); db(0x42); db(0x6a); - db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); db(0x20); db(0x47); - db(0x20); db(0x2d); db(0x00); db(0x16); db(0x32); db(0x28); db(0x00); db(0x30); - db(0xd2); db(0x41); db(0x90); db(0x41); db(0x35); db(0x40); db(0x00); db(0x0a); - db(0x20); db(0x2d); db(0x00); db(0x1a); db(0x32); db(0x28); db(0x00); db(0x2e); - db(0xd2); db(0x41); db(0x90); db(0x41); db(0x48); db(0xc0); db(0x35); db(0x40); - db(0x00); db(0x0c); db(0x22); db(0x6d); db(0x00); db(0x40); db(0x33); db(0x7c); - db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); - db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x22); db(0x6d); - db(0x00); db(0x40); db(0x25); db(0x69); db(0x00); db(0x20); db(0x00); db(0x0e); - db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x12); db(0x22); db(0x6d); - db(0x00); db(0x3c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x60); db(0x00); - db(0xff); db(0x76); db(0x30); db(0x3a); db(0xfe); db(0xa4); db(0x48); db(0xc0); - db(0x32); db(0x3a); db(0xfe); db(0xa0); db(0x48); db(0xc1); db(0xb0); db(0x91); - db(0x66); db(0x00); db(0x00); db(0x0a); db(0xb2); db(0xa9); db(0x00); db(0x04); - db(0x67); db(0x00); db(0x00); db(0x18); db(0x23); db(0x41); db(0x00); db(0x04); - db(0x22); db(0x80); db(0x20); db(0x29); db(0x00); db(0x08); db(0x22); db(0x69); - db(0x00); db(0x0c); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); - db(0xfe); db(0xbc); db(0x41); db(0xf9); db(0x00); db(0xdf); db(0xf0); db(0x00); - db(0x70); db(0x00); db(0x4e); db(0x75); db(0x69); db(0x6e); db(0x70); db(0x75); - db(0x74); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); - db(0x00); db(0x74); db(0x69); db(0x6d); db(0x65); db(0x72); db(0x2e); db(0x64); - db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x55); db(0x41); - db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73); db(0x65); db(0x20); - db(0x68); db(0x61); db(0x63); db(0x6b); db(0x00); db(0x55); db(0x41); db(0x45); - db(0x20); db(0x66); db(0x69); db(0x6c); db(0x65); db(0x73); db(0x79); db(0x73); - db(0x74); db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); - db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); - db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x65); db(0x72); db(0x00); db(0x55); - db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); - db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x20); - db(0x70); db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73); db(0x73); db(0x00); - db(0x64); db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); - db(0x61); db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75); - db(0x69); db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); - db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x65); db(0x78); - db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e); + db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x34); + db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x08); + db(0x15); db(0x44); db(0x00); db(0x09); db(0x25); db(0x42); db(0x00); db(0x0a); + db(0x47); db(0xea); db(0x00); db(0x5c); db(0x25); db(0x4b); db(0x00); db(0x3a); + db(0x47); db(0xeb); db(0x08); db(0x00); db(0x25); db(0x4b); db(0x00); db(0x3e); + db(0x25); db(0x4b); db(0x00); db(0x36); db(0x22); db(0x4a); db(0x24); db(0x43); + db(0x97); db(0xcb); db(0x24); db(0x09); db(0x4e); db(0xae); db(0xfe); db(0xe6); + db(0x20); db(0x02); db(0x4c); db(0xdf); db(0x4c); db(0x1c); db(0x4e); db(0x75); + db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x2f); db(0x08); + db(0x4a); db(0x2b); db(0x00); db(0x9d); db(0x66); db(0x26); db(0x41); db(0xfa); + db(0xff); db(0xf0); db(0x0c); db(0x10); db(0x00); db(0x01); db(0x66); db(0x1c); + db(0x41); db(0xfa); db(0x01); db(0x96); db(0x43); db(0xfa); db(0x00); db(0x1a); + db(0x70); db(0x05); db(0x61); db(0x00); db(0xff); db(0x7e); db(0x50); db(0xeb); + db(0x00); db(0x9d); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x61); db(0x00); + db(0xfe); db(0x2a); db(0x4e); db(0x90); db(0x20); db(0x5f); db(0x4e); db(0x75); + db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04); db(0x70); db(0xff); + db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x74); db(0x00); db(0x01); db(0xc2); + db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x28); db(0x40); + db(0x70); db(0x14); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0xd4); + db(0x70); db(0x00); db(0x43); db(0xfa); db(0x01); db(0xaa); db(0x4e); db(0xae); + db(0xfd); db(0xd8); db(0x2e); db(0x00); db(0x70); db(0x00); db(0x30); db(0x3c); + db(0x00); db(0x44); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2a); db(0x40); db(0x61); db(0x00); + db(0xfe); db(0xc2); db(0x2b); db(0x40); db(0x00); db(0x3c); db(0x67); db(0x00); + db(0x00); db(0x4e); db(0x61); db(0x00); db(0xfe); db(0xea); db(0x2b); db(0x40); + db(0x00); db(0x40); db(0x67); db(0x00); db(0x00); db(0x42); db(0x47); db(0xed); + db(0x00); db(0x16); db(0x27); db(0x4c); db(0x00); db(0x0c); db(0x27); db(0x42); + db(0x00); db(0x08); db(0x70); db(0xff); db(0x26); db(0x80); db(0x27); db(0x40); + db(0x00); db(0x04); db(0x43); db(0xed); db(0x00); db(0x00); db(0x13); db(0x7c); + db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x05); + db(0x00); db(0x09); db(0x41); db(0xfa); db(0x00); db(0xfc); db(0x23); db(0x48); + db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x00); db(0xa0); db(0x23); db(0x48); + db(0x00); db(0x12); db(0x23); db(0x4b); db(0x00); db(0x0e); db(0x70); db(0x05); + db(0x4e); db(0xae); db(0xff); db(0x58); db(0x60); db(0x02); db(0x4e); db(0x75); + db(0x20); db(0x02); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x22); db(0x6d); + db(0x00); db(0x3c); db(0x45); db(0xed); db(0x00); db(0x26); db(0x33); db(0x7c); + db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00); + db(0x00); db(0x16); db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28); + db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x15); db(0x7c); + db(0x00); db(0x04); db(0x00); db(0x04); db(0x42); db(0x2a); db(0x00); db(0x05); + db(0x42); db(0x6a); db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); + db(0x20); db(0x47); db(0x20); db(0x2d); db(0x00); db(0x16); db(0x32); db(0x28); + db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x35); db(0x40); + db(0x00); db(0x0a); db(0x20); db(0x2d); db(0x00); db(0x1a); db(0x32); db(0x28); + db(0x00); db(0x2e); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x48); db(0xc0); + db(0x35); db(0x40); db(0x00); db(0x0c); db(0x22); db(0x6d); db(0x00); db(0x40); + db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); + db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x22); db(0x6d); db(0x00); db(0x40); db(0x25); db(0x69); db(0x00); db(0x20); + db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x12); + db(0x22); db(0x6d); db(0x00); db(0x3c); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x60); db(0x00); db(0xff); db(0x76); db(0x30); db(0x3a); db(0xfe); db(0xa4); + db(0x48); db(0xc0); db(0x32); db(0x3a); db(0xfe); db(0xa0); db(0x48); db(0xc1); + db(0xb0); db(0x91); db(0x66); db(0x00); db(0x00); db(0x0a); db(0xb2); db(0xa9); + db(0x00); db(0x04); db(0x67); db(0x00); db(0x00); db(0x18); db(0x23); db(0x41); + db(0x00); db(0x04); db(0x22); db(0x80); db(0x20); db(0x29); db(0x00); db(0x08); + db(0x22); db(0x69); db(0x00); db(0x0c); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x41); db(0xf9); db(0x00); db(0xdf); + db(0xf0); db(0x00); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x69); db(0x6e); + db(0x70); db(0x75); db(0x74); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); + db(0x63); db(0x65); db(0x00); db(0x74); db(0x69); db(0x6d); db(0x65); db(0x72); + db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); + db(0x55); db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73); + db(0x65); db(0x20); db(0x68); db(0x61); db(0x63); db(0x6b); db(0x00); db(0x55); + db(0x41); db(0x45); db(0x20); db(0x66); db(0x69); db(0x6c); db(0x65); db(0x73); + db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41); + db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); + db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x65); db(0x72); + db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); + db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); + db(0x74); db(0x20); db(0x70); db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73); + db(0x73); db(0x00); db(0x64); db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); + db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); + db(0x74); db(0x75); db(0x69); db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); - db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73); db(0x74); - db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f); db(0x75); - db(0x72); db(0x63); db(0x65); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2); + db(0x65); db(0x78); db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); db(0x6f); + db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); + db(0x79); db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); db(0x79); + db(0x73); db(0x74); db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); db(0x73); + db(0x6f); db(0x75); db(0x72); db(0x63); db(0x65); db(0x00); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x03); db(0xf2); diff --git a/include/memory.h b/include/memory.h index b9920667..4b41a572 100644 --- a/include/memory.h +++ b/include/memory.h @@ -165,6 +165,7 @@ extern void memory_cleanup (void); extern void map_banks (addrbank *bank, int first, int count, int realsize); extern void map_overlay (int chip); extern void memory_hardreset (void); +extern void free_fastmemory (void); #define longget(addr) (call_mem_get_func(get_mem_bank(addr).lget, addr)) #define wordget(addr) (call_mem_get_func(get_mem_bank(addr).wget, addr)) diff --git a/memory.c b/memory.c index 49410e3f..8b831527 100644 --- a/memory.c +++ b/memory.c @@ -117,7 +117,7 @@ struct romdata *getromdatabypath(char *path) return NULL; } -#define NEXT_ROM_ID 71 +#define NEXT_ROM_ID 72 static struct romheader romheaders[] = { { "Freezer Cartridges", 1 }, @@ -159,6 +159,10 @@ static struct romdata roms[] = { 0x64466c2a, 0xF72D8914,0x8DAC39C6,0x96E30B10,0x859EBC85,0x9226637B }, { "KS ROM v2.05 (A600HD)", 2, 5, 37, 350, "A600HD\0A600\0", 524288, 10, 0, 0, ROMTYPE_KICK, 0, 0, 0x43b0df7b, 0x02843C42,0x53BBD29A,0xBA535B0A,0xA3BD9A85,0x034ECDE4 }, + { "KS ROM v2.04 (A3000)", 2, 4, 37, 132, "A3000\0", 524288, 71, 3, 0, ROMTYPE_KICK, 0, 0, + 0x234a7233, 0xd82ebb59,0xafc53540,0xddf2d718,0x7ecf239b,0x7ea91590 }, + ALTROM(71, 1, 1, 262144, ROMTYPE_EVEN, 0x7db1332b,0x48f14b31,0x279da675,0x7848df6f,0xeb531881,0x8f8f576c) + ALTROM(71, 1, 2, 262144, ROMTYPE_ODD , 0xa245dbdf,0x83bab8e9,0x5d378b55,0xb0c6ae65,0x61385a96,0xf638598f) { "KS ROM v3.0 (A1200)", 3, 0, 39, 106, "A1200\0", 524288, 11, 0, 0, ROMTYPE_KICK, 0, 0, 0x6c9b07d2, 0x70033828,0x182FFFC7,0xED106E53,0x73A8B89D,0xDA76FAA5 }, @@ -839,7 +843,7 @@ __inline__ void byteput (uaecptr addr, uae_u32 b) int addr_valid(char *txt, uaecptr addr, uae_u32 len) { addrbank *ab = &get_mem_bank(addr); - if (ab == 0 || !(ab->flags & ABFLAG_RAM) || addr < 0x100 || len < 0 || len > 16777215 || !valid_address(addr, len)) { + if (ab == 0 || !(ab->flags & ABFLAG_RAM) || addr < 0x100 || len < 0 || len > 16777215 || !valid_address (addr, len)) { write_log ("corrupt %s pointer %x (%d) detected!\n", txt, addr, len); return 0; } @@ -2312,6 +2316,10 @@ static int load_kickstart (void) filesize = 262144; maxsize = 262144; } + if (filesize == 524288 + 8) { + /* GVP 0xf0 kickstart */ + zfile_fseek (f, 8, SEEK_SET); + } if (filesize >= 524288 * 2) { struct romdata *rd = getromdatabyzfile(f); if (rd && rd->id == 64) { @@ -2519,6 +2527,8 @@ static void allocate_memory (void) if (chipmemory) mapped_free (chipmemory); chipmemory = 0; + if (currprefs.chipmem_size > 2 * 1024 * 1024) + free_fastmemory (); memsize = allocated_chipmem = currprefs.chipmem_size; chipmem_full_mask = chipmem_mask = allocated_chipmem - 1; @@ -2763,11 +2773,11 @@ void memory_reset (void) /* D80000 - DDFFFF not mapped (A1000 = custom chips) */ map_banks (&dummy_bank, 0xD8, 6, 0); - /* map "nothing" to 0x200000 - 0x9FFFFF (0xBEFFFF if PCMCIA or AGA) */ + /* map "nothing" to 0x200000 - 0x9FFFFF (0xBEFFFF if Gayle) */ bnk = allocated_chipmem >> 16; if (bnk < 0x20 + (currprefs.fastmem_size >> 16)) bnk = 0x20 + (currprefs.fastmem_size >> 16); - bnk_end = (((currprefs.chipset_mask & CSMASK_AGA) || currprefs.cs_pcmcia) ? 0xBF : 0xA0); + bnk_end = (((currprefs.chipset_mask & CSMASK_AGA) || currprefs.cs_pcmcia || currprefs.cs_ide > 0) ? 0xBF : 0xA0); map_banks (&dummy_bank, bnk, bnk_end - bnk, 0); if (currprefs.chipset_mask & CSMASK_AGA) map_banks (&dummy_bank, 0xc0, 0xd8 - 0xc0, 0); @@ -2787,7 +2797,7 @@ void memory_reset (void) } if (currprefs.cs_pcmcia) { map_banks (&gayle_attr_bank, 0xA0, 8, 0); - if (currprefs.chipmem_size <= 4 * 1024 * 1024 || currprefs.fastmem_size <= 4 * 1024 * 1024) + if (currprefs.chipmem_size <= 4 * 1024 * 1024 && currprefs.fastmem_size <= 4 * 1024 * 1024) map_banks (&gayle_common_bank, PCMCIA_COMMON_START >> 16, PCMCIA_COMMON_SIZE >> 16, 0); } if (currprefs.cs_ide == 2 || currprefs.cs_mbdmac == 2) @@ -2813,23 +2823,25 @@ void memory_reset (void) if (cardmemory != 0) map_banks (&cardmem_bank, cardmem_start >> 16, allocated_cardmem >> 16, 0); -#ifdef AUTOCONFIG - if (need_uae_boot_rom ()) { - uae_boot_rom = 1; - map_banks (&rtarea_bank, rtarea_base >> 16, 1, 0); - } -#endif - map_banks (&kickmem_bank, 0xF8, 8, 0); if (currprefs.maprom) map_banks (&kickram_bank, currprefs.maprom >> 16, 8, 0); - /* map beta Kickstarts at 0x200000 */ - if (kickmemory[2] == 0x4e && kickmemory[3] == 0xf9 && kickmemory[4] == 0x00) { + /* map beta Kickstarts at 0x200000/0xC00000/0xF00000 */ + if (kickmemory[0] == 0x11 && kickmemory[2] == 0x4e && kickmemory[3] == 0xf9 && kickmemory[4] == 0x00) { uae_u32 addr = kickmemory[5]; if (addr == 0x20 && currprefs.chipmem_size <= 0x200000 && currprefs.fastmem_size == 0) map_banks (&kickmem_bank, addr, 8, 0); + if (addr == 0xC0 && currprefs.bogomem_size == 0) + map_banks (&kickmem_bank, addr, 8, 0); + if (addr == 0xF0) + map_banks (&kickmem_bank, addr, 8, 0); } +#ifdef AUTOCONFIG + if (need_uae_boot_rom ()) + map_banks (&rtarea_bank, rtarea_base >> 16, 1, 0); +#endif + if (a1000_bootrom) a1000_handle_kickstart (1); #ifdef AUTOCONFIG diff --git a/od-win32/dinput.c b/od-win32/dinput.c index 41ebae20..3bb6f492 100644 --- a/od-win32/dinput.c +++ b/od-win32/dinput.c @@ -825,6 +825,14 @@ static BOOL CALLBACK EnumObjectsCallback (const DIDEVICEOBJECTINSTANCE* pdidoi, return DIENUM_CONTINUE; } +static void trimws (char *s) +{ + /* Delete trailing whitespace. */ + int len = strlen (s); + while (len > 0 && strcspn (s + len - 1, "\t \r\n") == 0) + s[--len] = '\0'; +} + static BOOL CALLBACK di_enumcallback (LPCDIDEVICEINSTANCE lpddi, LPVOID *dd) { struct didata *did; @@ -849,7 +857,7 @@ static BOOL CALLBACK di_enumcallback (LPCDIDEVICEINSTANCE lpddi, LPVOID *dd) } #ifdef DI_DEBUG - write_log ("GUID=%08.8X-%04.8X-%04.8X-%02.2X%02.2X%02.2X%02.2X%02.2X%02.2X%02.2X%02.2X:\n", + write_log ("GUID=%08X-%04X-%04X-%02X%02X%02X%02X%02X%02X%02X%02X:\n", lpddi->guidInstance.Data1, lpddi->guidInstance.Data2, lpddi->guidInstance.Data3, lpddi->guidInstance.Data4[0], lpddi->guidInstance.Data4[1], lpddi->guidInstance.Data4[2], lpddi->guidInstance.Data4[3], lpddi->guidInstance.Data4[4], lpddi->guidInstance.Data4[5], lpddi->guidInstance.Data4[6], lpddi->guidInstance.Data4[7]); @@ -883,11 +891,13 @@ static BOOL CALLBACK di_enumcallback (LPCDIDEVICEINSTANCE lpddi, LPVOID *dd) did->name = malloc (100); sprintf(did->name, "[no name]"); } - sprintf (tmp, "%08.8X-%04.8X-%04.8X-%02.2X%02.2X%02.2X%02.2X%02.2X%02.2X%02.2X%02.2X", + trimws (did->name); + sprintf (tmp, "%08X-%04X-%04X-%02X%02X%02X%02X%02X%02X%02X%02X", lpddi->guidProduct.Data1, lpddi->guidProduct.Data2, lpddi->guidProduct.Data3, lpddi->guidProduct.Data4[0], lpddi->guidProduct.Data4[1], lpddi->guidProduct.Data4[2], lpddi->guidProduct.Data4[3], lpddi->guidProduct.Data4[4], lpddi->guidProduct.Data4[5], lpddi->guidProduct.Data4[6], lpddi->guidProduct.Data4[7]); did->configname = my_strdup (tmp); + trimws (did->configname); did->guid = lpddi->guidInstance; did->sortname = my_strdup (did->name); did->connection = DIDC_DX; diff --git a/od-win32/dxwrap.c b/od-win32/dxwrap.c index 1278f494..50b6f8ac 100644 --- a/od-win32/dxwrap.c +++ b/od-win32/dxwrap.c @@ -730,8 +730,8 @@ void DirectDraw_Release(void) releaser(DirectDrawState.lpDDP, IDirectDrawPalette_Release); if (DirectDrawState.directdraw.dd && DirectDrawState.modeset) { - IDirectDraw7_SetCooperativeLevel(DirectDrawState.directdraw.dd, hAmigaWnd, DDSCL_NORMAL); IDirectDraw7_RestoreDisplayMode(DirectDrawState.directdraw.dd); + IDirectDraw7_SetCooperativeLevel(DirectDrawState.directdraw.dd, hAmigaWnd, DDSCL_NORMAL); } DirectDrawState.modeset = 0; @@ -1923,7 +1923,7 @@ char *outGUID (GUID *guid) static char gb[64]; if (guid == NULL) return "NULL"; - sprintf(gb, "%08.8X-%04.8X-%04.8X-%02.2X%02.2X%02.2X%02.2X%02.2X%02.2X%02.2X%02.2X", + sprintf(gb, "%08X-%04X-%04X-%02X%02X%02X%02X%02X%02X%02X%02X", guid->Data1, guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]); diff --git a/od-win32/picasso96_win.c b/od-win32/picasso96_win.c index 07d170ee..fcbf03b4 100644 --- a/od-win32/picasso96_win.c +++ b/od-win32/picasso96_win.c @@ -1897,8 +1897,8 @@ uae_u32 REGPARAM2 picasso_InitCard (struct regstruct *regs) AmigaListAddTail (AmigaBoardInfo + PSSO_BoardInfo_ResolutionsList, amem); amem += PSSO_LibResolution_sizeof; } - if (amem != picasso96_amemend) - write_log ("P96: display resolution list corruption %08x<>%08x", amem, picasso96_amemend); + if (amem > picasso96_amemend) + write_log ("P96: display resolution list corruption %08x<>%08x (%d)\n", amem, picasso96_amemend, i); return -1; } diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 16e09b70..07a9d13b 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -185,7 +185,7 @@ BEGIN CONTROL "After RTG",IDC_TRUST2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,235,169,52,10 CONTROL "More compatible [] More compatible but slower FPU emulation.",IDC_COMPATIBLE_FPU, "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,210,73,10 - GROUPBOX "FPU",IDC_STATIC,6,146,81,79,BS_LEFT + GROUPBOX "FPU",IDC_STATIC,6,146,81,80,BS_LEFT CONTROL "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,100,73,8 CONTROL "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,157,63,10 CONTROL "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,14,171,63,10 @@ -426,46 +426,45 @@ BEGIN CONTROL "Magic Mouse",IDC_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,79,119,10 CONTROL "uaenet.device",IDC_SANA2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,92,94,10 END - IDD_HARDFILE DIALOGEX 0, 0, 299, 249 STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hardfile Settings" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN GROUPBOX "Settings",IDC_STATIC,10,5,280,146 - RTEXT "Path:",IDC_HARDFILE_DIR_TEXT,26,18,22,10 + RTEXT "Path:",IDC_HARDFILE_DIR_TEXT,25,18,22,10 EDITTEXT IDC_PATH_NAME,52,15,213,15,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_SELECTOR,271,15,11,15 - RTEXT "FileSys:",IDC_HARDFILE_FILESYS_TEXT,14,37,34,10 - EDITTEXT IDC_PATH_FILESYS,52,34,213,15,ES_AUTOHSCROLL - PUSHBUTTON "...",IDC_FILESYS_SELECTOR,271,34,11,15 - RTEXT "Device:",IDC_HARDFILE_DEVICE_TEXT,17,58,31,10 - EDITTEXT IDC_HARDFILE_DEVICE,52,54,66,15,ES_AUTOHSCROLL - RTEXT "Boot priority:",IDC_HARDFILE_BOOTPRI_TEXT,13,94,55,8 - EDITTEXT IDC_HARDFILE_BOOTPRI,74,90,40,15 + RTEXT "FileSys:",IDC_HARDFILE_FILESYS_TEXT,13,38,34,10 + EDITTEXT IDC_PATH_FILESYS,52,35,213,15,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_FILESYS_SELECTOR,271,35,11,15 + RTEXT "Device:",IDC_HARDFILE_DEVICE_TEXT,16,58,31,10 + EDITTEXT IDC_HARDFILE_DEVICE,52,55,66,15,ES_AUTOHSCROLL + RTEXT "Boot priority:",IDC_HARDFILE_BOOTPRI_TEXT,24,94,44,8 + EDITTEXT IDC_HARDFILE_BOOTPRI,73,90,40,15 CONTROL "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,74,64,10 PUSHBUTTON "Enable RDB mode",IDC_HDF_RDB,174,55,92,14 - RTEXT "Surfaces:",IDC_SURFACES_TEXT,120,94,30,10 - EDITTEXT IDC_HEADS,155,90,35,15,ES_NUMBER + RTEXT "Surfaces:",IDC_SURFACES_TEXT,118,94,32,10 + EDITTEXT IDC_HEADS,155,90,40,15,ES_NUMBER RTEXT "Reserved:",IDC_RESERVED_TEXT,197,94,35,10 - EDITTEXT IDC_RESERVED,237,90,35,15,ES_NUMBER - RTEXT "Sectors:",IDC_SECTORS_TEXT,120,116,30,10 - EDITTEXT IDC_SECTORS,155,111,35,15,ES_NUMBER - RTEXT "Block size:",IDC_BLOCKSIZE_TEXT,197,116,35,10 - EDITTEXT IDC_BLOCKSIZE,237,111,35,15,ES_NUMBER + EDITTEXT IDC_RESERVED,237,90,40,15,ES_NUMBER + RTEXT "Sectors:",IDC_SECTORS_TEXT,120,113,30,10 + EDITTEXT IDC_SECTORS,155,111,40,15,ES_NUMBER + RTEXT "Block size:",IDC_BLOCKSIZE_TEXT,197,113,35,10 + EDITTEXT IDC_BLOCKSIZE,237,111,40,15,ES_NUMBER GROUPBOX "New hard disk image file",IDC_STATIC,10,156,280,62 - PUSHBUTTON "Create",IDC_HF_CREATE,50,171,80,14 - EDITTEXT IDC_HF_SIZE,146,171,61,15,ES_NUMBER + PUSHBUTTON "Create",IDC_HF_CREATE,60,171,80,14 + EDITTEXT IDC_HF_SIZE,156,171,61,15,ES_NUMBER PUSHBUTTON "OK",IDOK,102,226,50,14 PUSHBUTTON "Cancel",IDCANCEL,158,226,50,14 - EDITTEXT IDC_HF_DOSTYPE,146,194,61,15 - COMBOBOX IDC_HF_TYPE,50,194,80,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_HDF_CONTROLLER,73,112,41,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - RTEXT "DOS type",IDC_STATIC,214,196,32,10,SS_CENTERIMAGE - RTEXT "MB",IDC_STATIC,214,174,13,10,SS_CENTERIMAGE - RTEXT "Type:",IDC_STATIC,18,182,25,10,SS_CENTERIMAGE - RTEXT "HD Controller:",IDC_STATIC,13,113,52,10,SS_CENTERIMAGE - CONTROL "Bootable",IDC_HDF_AUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,136,73,53,10 + EDITTEXT IDC_HF_DOSTYPE,156,194,61,15 + COMBOBOX IDC_HF_TYPE,60,195,80,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_HDF_CONTROLLER,73,112,40,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + RTEXT "DOS type",IDC_STATIC,224,196,32,10,SS_CENTERIMAGE + RTEXT "MB",IDC_STATIC,222,174,13,10,SS_CENTERIMAGE + RTEXT "Type:",IDC_STATIC,28,183,25,10,SS_CENTERIMAGE + RTEXT "HD Controller:",IDC_STATIC,16,113,52,10,SS_CENTERIMAGE + CONTROL "Bootable",IDC_HDF_AUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,136,74,53,10 CONTROL "Do not mount",IDC_HDF_DONOTMOUNT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,74,67,10 EDITTEXT IDC_HDFINFO,16,131,268,12,ES_CENTER | ES_READONLY END @@ -475,19 +474,19 @@ STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | CAPTION "Volume Settings" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - LTEXT "Device name:",-1,5,9,54,10 + LTEXT "Device name:",-1,11,7,54,10 EDITTEXT IDC_VOLUME_DEVICE,65,5,104,15,ES_AUTOHSCROLL - LTEXT "Volume label:",-1,5,31,54,10 - EDITTEXT IDC_VOLUME_NAME,65,25,103,15,ES_AUTOHSCROLL - LTEXT "Path:",-1,5,51,44,10 + LTEXT "Volume label:",-1,13,28,54,10 + EDITTEXT IDC_VOLUME_NAME,65,25,104,15,ES_AUTOHSCROLL + LTEXT "Path:",-1,38,49,44,10 EDITTEXT IDC_PATH_NAME,65,46,227,15,ES_AUTOHSCROLL - PUSHBUTTON "Select Directory",IDC_FS_SELECT_DIR,64,66,103,15 + PUSHBUTTON "Select Directory",IDC_FS_SELECT_DIR,65,66,103,15 CONTROL "Read/write",IDC_FS_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,7,55,10 RTEXT "Boot priority:",IDC_VOLUME_BOOTPRI_TEXT,178,28,49,8 - EDITTEXT IDC_VOLUME_BOOTPRI,237,24,30,15 + EDITTEXT IDC_VOLUME_BOOTPRI,236,25,30,15 PUSHBUTTON "OK",IDOK,65,91,48,15 PUSHBUTTON "Cancel",IDCANCEL,120,91,48,15 - PUSHBUTTON "Select Archive or Plain File",IDC_FS_SELECT_FILE,189,66,103,15 + PUSHBUTTON "Select Archive or Plain File",IDC_FS_SELECT_FILE,190,66,103,15 PUSHBUTTON "Eject",IDC_FS_SELECT_EJECT,230,91,62,15 CONTROL "Bootable",IDC_FS_AUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,236,7,53,10 END @@ -551,13 +550,13 @@ FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN GROUPBOX "Battery Backed Up Real Time Clock",IDC_STATIC,11,24,275,29 CONTROL "None",IDC_CS_RTC1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,19,36,55,10 - CONTROL "MSM6242B",IDC_CS_RTC2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,88,36,52,10 - CONTROL "RF5C01A",IDC_CS_RTC3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,157,36,46,10 + CONTROL "MSM6242B",IDC_CS_RTC2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,90,36,52,10 + CONTROL "RF5C01A",IDC_CS_RTC3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,159,36,46,10 EDITTEXT IDC_CS_RTCADJUST,215,34,64,13,ES_AUTOHSCROLL - GROUPBOX "CIA-A TOD Clock Source",IDC_STATIC,9,56,275,29 - CONTROL "Vertical Sync",IDC_CS_CIAA_TOD1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,22,68,63,10 - CONTROL "Power Supply 50Hz",IDC_CS_CIAA_TOD2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,93,68,85,10 - CONTROL "Power Supply 60Hz",IDC_CS_CIAA_TOD3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,189,68,88,10 + GROUPBOX "CIA-A TOD Clock Source",IDC_STATIC,11,56,275,29 + CONTROL "Vertical Sync",IDC_CS_CIAA_TOD1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,19,68,63,10 + CONTROL "Power Supply 50Hz",IDC_CS_CIAA_TOD2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,90,68,85,10 + CONTROL "Power Supply 60Hz",IDC_CS_CIAA_TOD3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,186,68,88,10 CONTROL "Boot ROM Mirror",IDC_CS_KSMIRROR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,95,80,10 CONTROL "A1000 Boot RAM/ROM",IDC_CS_A1000RAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,95,88,10 CONTROL "CD32 CD",IDC_CS_CD32CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,108,76,10 @@ -680,12 +679,12 @@ BEGIN COMBOBOX IDC_FILTERXTRA,105,130,138,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP END -IDD_HARDDRIVE DIALOGEX 0, 0, 380, 66 +IDD_HARDDRIVE DIALOGEX 0, 0, 380, 76 STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Harddrive Settings" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - LTEXT "Hard drive:",IDC_STATIC,7,11,35,10 + LTEXT "Hard drive:",IDC_STATIC,7,11,80,10 COMBOBOX IDC_HARDDRIVE,49,9,325,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP CONTROL "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,51,55,10 DEFPUSHBUTTON "Add hard drive",IDOK,231,48,65,14 @@ -693,7 +692,7 @@ BEGIN DEFPUSHBUTTON "Create hard disk image file",IDC_HARDDRIVE_IMAGE,49,30,115,14 EDITTEXT IDC_PATH_NAME,183,27,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE COMBOBOX IDC_HDF_CONTROLLER,102,50,41,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - RTEXT "HD Controller:",IDC_STATIC,42,52,52,10,SS_CENTERIMAGE + RTEXT "HD Controller:",IDC_STATIC,42,51,52,10,SS_CENTERIMAGE END IDD_MISC2 DIALOGEX 0, 0, 300, 92 @@ -1296,7 +1295,7 @@ STRINGTABLE BEGIN IDS_QS_MODEL_UAE "High-end expanded configuration" IDS_QS_MODEL_ARCADIA "Arcadia\nArcadia Multi Select system is arcade platform developed by Arcadia and Mastertronic. It is based on an A500 mainboard with ROM cage attached to expansion port. Arcadia ROM files go to ""Cartridge ROM File"" in ROM-panel." - IDS_QS_MODEL_A3000 "1.4 ROM, 2MB Chip + 8MB Fast\n\n3.1 ROM, 2MB Chip + 8MB Fast\n" + IDS_QS_MODEL_A3000 "1.4 ROM, 2MB Chip + 8MB Fast\n\n2.04 ROM, 2MB Chip + 8MB Fast\n\n3.1 ROM, 2MB Chip + 8MB Fast\n" IDS_QS_MODEL_A4000 "68030, 3.1 ROM, 2MB Chip + 8MB Fast\n\n68040, 3.1 ROM, 2MB Chip + 8MB Fast\n" IDS_QS_MODEL_A4000T "A4000T (test)\nA4000T" END diff --git a/od-win32/win32.c b/od-win32/win32.c index 59b594b7..01197b6c 100644 --- a/od-win32/win32.c +++ b/od-win32/win32.c @@ -93,7 +93,7 @@ HWND hAmigaWnd, hMainWnd, hHiddenWnd; RECT amigawin_rect; static int mouseposx, mouseposy; static UINT TaskbarRestart; -static int TaskbarRestartOk; +static HWND TaskbarRestartHWND; static int forceroms; static int start_data = 0; @@ -1228,8 +1228,10 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, break; default: - if (TaskbarRestartOk && message == TaskbarRestart) - systray (hWnd, FALSE); + if (TaskbarRestart != 0 && TaskbarRestartHWND == hWnd && message == TaskbarRestart) { + //write_log ("notif: taskbarrestart\n"); + systray (TaskbarRestartHWND, FALSE); + } break; } @@ -1346,7 +1348,7 @@ static LRESULT CALLBACK MainWindowProc (HWND hWnd, UINT message, WPARAM wParam, default: - if (TaskbarRestartOk && message == TaskbarRestart) + if (TaskbarRestart != 0 && TaskbarRestartHWND == hWnd && message == TaskbarRestart) return AmigaWindowProc (hWnd, message, wParam, lParam); break; @@ -3426,20 +3428,34 @@ void addnotifications (HWND hwnd, int remove) void systray (HWND hwnd, int remove) { NOTIFYICONDATA nid; + BOOL v; - if (hwnd == NULL) - return; - if (!TaskbarRestartOk) { + //write_log ("notif: systray(%x,%d)\n", hwnd, remove); + if (!remove) { TaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated")); - TaskbarRestartOk = 1; + TaskbarRestartHWND = hwnd; + //write_log ("notif: taskbarrestart = %d\n", TaskbarRestart); + } else { + TaskbarRestart = 0; + hwnd = TaskbarRestartHWND; } + if (!hwnd) + return; memset (&nid, 0, sizeof (nid)); nid.cbSize = sizeof (nid); nid.hWnd = hwnd; nid.hIcon = LoadIcon (hInst, (LPCSTR)MAKEINTRESOURCE(IDI_APPICON)); nid.uFlags = NIF_ICON | NIF_MESSAGE; nid.uCallbackMessage = WM_USER + 1; - Shell_NotifyIcon (remove ? NIM_DELETE : NIM_ADD, &nid); + v = Shell_NotifyIcon (remove ? NIM_DELETE : NIM_ADD, &nid); + //write_log ("notif: Shell_NotifyIcon returned %d\n", v); + if (v) { + if (remove) + TaskbarRestartHWND = NULL; + } else { + DWORD err = GetLastError (); + write_log ("Notify error code = %x (%d)\n", err, err); + } } void systraymenu (HWND hwnd) @@ -3451,7 +3467,7 @@ void systraymenu (HWND hwnd) char text[100]; winuae_inactive (hwnd, FALSE); - WIN32GUI_LoadUIString( IDS_STMENUNOFLOPPY, text, sizeof (text)); + WIN32GUI_LoadUIString (IDS_STMENUNOFLOPPY, text, sizeof (text)); GetCursorPos (&pt); menu = LoadMenu (hUIDLL ? hUIDLL : hInst, MAKEINTRESOURCE (IDM_SYSTRAY)); if (!menu) diff --git a/od-win32/win32.h b/od-win32/win32.h index dc4da8d9..811b25da 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -15,9 +15,9 @@ #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100) #define GETBDD(x) ((x) % 100) -#define WINUAEBETA 4 +#define WINUAEBETA 5 #define WINUAEPUBLICBETA 1 -#define WINUAEDATE MAKEBD(2008, 1, 1) +#define WINUAEDATE MAKEBD(2008, 1, 9) #define WINUAEEXTRA "" #define WINUAEREV "" diff --git a/od-win32/win32gfx.c b/od-win32/win32gfx.c index 2e80de25..72b58a39 100644 --- a/od-win32/win32gfx.c +++ b/od-win32/win32gfx.c @@ -346,7 +346,7 @@ static int set_ddraw (void) dd = (currentmode->flags & DM_DDRAW) ? TRUE : FALSE; overlay = (currentmode->flags & DM_OVERLAY) ? TRUE : FALSE; - ddrval = DirectDraw_SetCooperativeLevel(hAmigaWnd, dxfullscreen); + ddrval = DirectDraw_SetCooperativeLevel (hAmigaWnd, dxfullscreen); if (FAILED(ddrval)) goto oops; @@ -357,13 +357,13 @@ static int set_ddraw (void) write_log ("set_ddraw: failed, trying without forced refresh rate\n"); ddrval = DirectDraw_SetDisplayMode (width, height, bits, 0); if (FAILED(ddrval)) { - write_log ( "set_ddraw: Couldn't SetDisplayMode()\n"); + write_log ("set_ddraw: Couldn't SetDisplayMode()\n"); goto oops; } } ddrval = DirectDraw_GetDisplayMode (); if (FAILED(ddrval)) { - write_log ( "set_ddraw: Couldn't GetDisplayMode()\n" ); + write_log ("set_ddraw: Couldn't GetDisplayMode()\n" ); goto oops; } } @@ -1017,7 +1017,8 @@ static void close_hwnds( void ) } if (hAmigaWnd) { addnotifications (hAmigaWnd, TRUE); - systray (hAmigaWnd, TRUE); + //write_log ("notif: close_hwnds\n"); + systray (NULL, TRUE); #ifdef OPENGL OGL_free (); #endif @@ -1874,6 +1875,7 @@ uae_u32 OSDEP_minimize_uae( void ) void close_windows (void) { + systray (NULL, TRUE); reset_sound(); #if defined (GFXFILTER) S2X_free (); @@ -2105,7 +2107,8 @@ static int create_windows (void) close_hwnds(); return 0; } - + systray (NULL, TRUE); + //write_log ("notif: open_windows()\n"); systray (hAmigaWnd, FALSE); addnotifications (hAmigaWnd, FALSE); if (hMainWnd != hAmigaWnd) { diff --git a/od-win32/win32gui.c b/od-win32/win32gui.c index f07b965d..5f48b806 100644 --- a/od-win32/win32gui.c +++ b/od-win32/win32gui.c @@ -574,7 +574,7 @@ static void show_rom_list (void) 8, 9, 10, -1, -1, // A600 23, 24, -1, -1, // A1000 11, 31, 15, -1, -1, // A1200 - 61, 59, -1, -1, // A3000 + 59, 71, 61, -1, -1, // A3000 16, 46, 31, 13, 12, -1, -1, // A4000 18, -1, 19, -1, -1, // CD32 20, 21, 22, -1, 6, 32, -1, -1, // CDTV diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 99b867bf..14899733 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -3,13 +3,33 @@ 1.4.6 will be the last Windows 98/ME compatible version. 1.5.0 will require Windows 2000 or newer. +Beta 5: + +- fixed wrong input device GUID format in config files +- 'friendlyname' mapping didn't work if device name had trailing + whitespace (like USB ProComp 'USB 2A4K GamePad ') +- C00000 and F00000 relocated beta/special KS roms supported + (200000 already supported long time ago) +- A3000 official confirmed 2.04 ROM added (37.132 internal rom version, + 37.175 shown in "insert disk" screen..) +- possible crash when switching >2M chip setting from/to <=2M Chip + and >0M Fast RAM configuration +- removed bogus "P96: display resolution list corruption" log message + if biggest available resolution required more RTG RAM than available +- directory filesystem ACTION_EXAMINE_ALL is now "compatible" with + FFS implementation. (workaround for older Scalos ExAll bugs that + caused missing icons. Probably fixes other bad programs too..) + - eac_Entries is now always at least 1 if continuation flag is set + - keep returning ERROR_NO_MORE_ENTRIES even if previous call already + returned ERROR_NO_MORE_ENTRIES + Beta 4: - A600/A1200/A4000 IDE emulation 4G wrap around bug fixed -- "Add PC drives at startup" drive device name creation tries to - detect already mounted device, prevents ugly looking 'DHx_0' names - due to name conflicts. (note that this only affects name generation - of "Add PC drives at startup"-drives) +- "Add PC drives at startup" drive device name creation tries to detect + already mounted device names, prevents ugly looking 'DHx_0'-style + names. (note that this only affects name generation of "Add PC drives + at startup"-drives) - renamed GUI "autoboot" -> "bootable" - rom scan duplicate path detection improved -- 2.47.3