From: Toni Wilen Date: Sat, 29 May 2010 14:38:31 +0000 (+0300) Subject: 2200b6 X-Git-Tag: 2200~18 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=4f4bb518197ee78d96f58b9cdf043ff036ccfed0;p=francis%2Fwinuae.git 2200b6 --- diff --git a/akiko.cpp b/akiko.cpp index 74699581..fda832f4 100644 --- a/akiko.cpp +++ b/akiko.cpp @@ -29,8 +29,8 @@ #include "newcpu.h" #define AKIKO_DEBUG_NVRAM 0 -#define AKIKO_DEBUG_IO 1 -#define AKIKO_DEBUG_IO_CMD 1 +#define AKIKO_DEBUG_IO 0 +#define AKIKO_DEBUG_IO_CMD 0 // 43 48 49 4E 4F 4E 20 20 4F 2D 36 35 38 2D 32 20 32 34 #define FIRMWAREVERSION "CHINON O-658-2 24" @@ -1788,9 +1788,9 @@ uae_u8 *restore_akiko (uae_u8 *src) uae_u32 v; int i; - if (!currprefs.cs_cd32cd) { - changed_prefs.cs_cd32c2p = changed_prefs.cs_cd32cd = changed_prefs.cs_cd32nvram = 1; - currprefs.cs_cd32c2p = currprefs.cs_cd32cd = currprefs.cs_cd32nvram = 1; + if (!currprefs.cs_cd32cd || !cdromok) { + changed_prefs.cs_cd32c2p = changed_prefs.cs_cd32cd = changed_prefs.cs_cd32nvram = true; + currprefs.cs_cd32c2p = currprefs.cs_cd32cd = currprefs.cs_cd32nvram = true; akiko_init (); } diff --git a/audio.cpp b/audio.cpp index 844acd9a..44748566 100644 --- a/audio.cpp +++ b/audio.cpp @@ -221,10 +221,10 @@ static void do_samplerip (struct audio_channel_data *adp) { struct ripped_sample *rs = ripped_samples, *prev; int len = adp->len * 2; - uae_u8 *smp = chipmem_bank.xlateaddr (adp->pt); + uae_u8 *smp = chipmem_xlate_indirect (adp->pt); int cnt = 0, i; - if (!smp || !chipmem_bank.check (adp->pt, len)) + if (!smp || !chipmem_check_indirect (adp->pt, len)) return; for (i = 0; i < len; i++) { if (smp[i] != 0) @@ -1644,7 +1644,7 @@ void audio_hsync (int hpos) write_log (L"%d:>5: LEN=%d PT=%08X\n", nr, cdp->wlen, cdp->pt); #endif } - cdp->dat2 = last_custom_value1 = chipmem_agnus_wget (cdp->pt); + cdp->dat2 = last_custom_value1 = chipmem_wget_indirect (cdp->pt); if (cdp->request_word >= 2) handle2 = 1; if (chan_ena) { diff --git a/autoconf.cpp b/autoconf.cpp index 86af5d93..9c239d28 100644 --- a/autoconf.cpp +++ b/autoconf.cpp @@ -197,6 +197,8 @@ static uae_u32 REGPARAM2 nullfunc (TrapContext *context) static uae_u32 REGPARAM2 getchipmemsize (TrapContext *context) { + m68k_dreg (regs, 1) = allocated_z3chipmem; + m68k_areg (regs, 1) = z3chipmem_start; return allocated_chipmem; } diff --git a/blitter.cpp b/blitter.cpp index 628ef15e..b9da8f9d 100644 --- a/blitter.cpp +++ b/blitter.cpp @@ -297,10 +297,10 @@ static void blitter_interrupt (int hpos, int done) { if (blit_interrupt) return; - if (!done && (!currprefs.blitter_cycle_exact || (currprefs.chipset_mask & CSMASK_AGA))) + if (!done && (!currprefs.blitter_cycle_exact || currprefs.cpu_model >= 68020)) return; blit_interrupt = 1; - send_interrupt (6, 3); + send_interrupt (6, 3 * CYCLE_UNIT); if (debug_dma) record_dma_event (DMA_EVENT_BLITIRQ, hpos, vpos); } @@ -325,7 +325,7 @@ STATIC_INLINE void chipmem_agnus_wput2 (uaecptr addr, uae_u32 w) { last_custom_value1 = w; #ifndef BLITTER_DEBUG_NO_D - chipmem_agnus_wput (addr, w); + chipmem_wput_indirect (addr, w); #endif } @@ -372,7 +372,7 @@ static void blitter_dofast (void) uae_u32 bltadat, blitahold; uae_u16 bltbdat; if (bltadatptr) { - blt_info.bltadat = bltadat = chipmem_agnus_wget (bltadatptr); + blt_info.bltadat = bltadat = chipmem_wget_indirect (bltadatptr); bltadatptr += 2; } else bltadat = blt_info.bltadat; @@ -381,14 +381,14 @@ static void blitter_dofast (void) preva = bltadat; if (bltbdatptr) { - blt_info.bltbdat = bltbdat = chipmem_agnus_wget (bltbdatptr); + blt_info.bltbdat = bltbdat = chipmem_wget_indirect (bltbdatptr); bltbdatptr += 2; blitbhold = (((uae_u32)prevb << 16) | bltbdat) >> blt_info.blitbshift; prevb = bltbdat; } if (bltcdatptr) { - blt_info.bltcdat = chipmem_agnus_wget (bltcdatptr); + blt_info.bltcdat = chipmem_wget_indirect (bltcdatptr); bltcdatptr += 2; } if (dodst) @@ -471,7 +471,7 @@ static void blitter_dofast_desc (void) uae_u32 bltadat, blitahold; uae_u16 bltbdat; if (bltadatptr) { - bltadat = blt_info.bltadat = chipmem_agnus_wget (bltadatptr); + bltadat = blt_info.bltadat = chipmem_wget_indirect (bltadatptr); bltadatptr -= 2; } else bltadat = blt_info.bltadat; @@ -480,14 +480,14 @@ static void blitter_dofast_desc (void) preva = bltadat; if (bltbdatptr) { - blt_info.bltbdat = bltbdat = chipmem_agnus_wget (bltbdatptr); + blt_info.bltbdat = bltbdat = chipmem_wget_indirect (bltbdatptr); bltbdatptr -= 2; blitbhold = (((uae_u32)bltbdat << 16) | prevb) >> blt_info.blitdownbshift; prevb = bltbdat; } if (bltcdatptr) { - blt_info.bltcdat = blt_info.bltbdat = chipmem_agnus_wget (bltcdatptr); + blt_info.bltcdat = blt_info.bltbdat = chipmem_wget_indirect (bltcdatptr); bltcdatptr -= 2; } if (dodst) @@ -533,7 +533,7 @@ STATIC_INLINE void blitter_read (void) if (bltcon0 & 0x200) { if (!dmaen (DMA_BLITTER)) return; - blt_info.bltcdat = chipmem_bank.wget (bltcpt); + blt_info.bltcdat = chipmem_wget_indirect (bltcpt); last_custom_value1 = blt_info.bltcdat; } bltstate = BLT_work; @@ -548,7 +548,7 @@ STATIC_INLINE void blitter_write (void) if (!dmaen (DMA_BLITTER)) return; last_custom_value1 = blt_info.bltddat; - chipmem_bank.wput (bltdpt, blt_info.bltddat); + chipmem_wput_indirect (bltdpt, blt_info.bltddat); } bltstate = BLT_next; } @@ -870,14 +870,14 @@ STATIC_INLINE void blitter_dodma (int ch, int hpos) switch (ch) { case 1: - blt_info.bltadat = dat = chipmem_agnus_wget (bltapt); + blt_info.bltadat = dat = chipmem_wget_indirect (bltapt); last_custom_value1 = blt_info.bltadat; addr = bltapt; bltapt += blit_add; reg = 0x74; break; case 2: - blt_info.bltbdat = dat = chipmem_agnus_wget (bltbpt); + blt_info.bltbdat = dat = chipmem_wget_indirect (bltbpt); last_custom_value1 = blt_info.bltbdat; addr = bltbpt; bltbpt += blit_add; @@ -889,7 +889,7 @@ STATIC_INLINE void blitter_dodma (int ch, int hpos) reg = 0x72; break; case 3: - blt_info.bltcdat = dat = chipmem_agnus_wget (bltcpt); + blt_info.bltcdat = dat = chipmem_wget_indirect (bltcpt); last_custom_value1 = blt_info.bltcdat; addr = bltcpt; bltcpt += blit_add; @@ -971,7 +971,7 @@ void decide_blitter (int hpos) if (blt_delayed_irq > 0 && hsync) { blt_delayed_irq--; if (!blt_delayed_irq) - send_interrupt (6, 2); + send_interrupt (6, 2 * CYCLE_UNIT); } if (bltstate == BLT_done) diff --git a/cfgfile.cpp b/cfgfile.cpp index 0f7e8c3a..9565d641 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -801,6 +801,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_write (f, L"mbresmem_size", L"%d", p->mbresmem_high_size / 0x100000); cfgfile_write (f, L"z3mem_size", L"%d", p->z3fastmem_size / 0x100000); cfgfile_write (f, L"z3mem2_size", L"%d", p->z3fastmem2_size / 0x100000); + cfgfile_write (f, L"z3chipmem_size", L"%d", p->z3chipmem_size / 0x100000); cfgfile_write (f, L"z3mem_start", L"0x%x", p->z3fastmem_start); cfgfile_write (f, L"bogomem_size", L"%d", p->bogomem_size / 0x40000); cfgfile_write (f, L"gfxcard_size", L"%d", p->gfxmem_size / 0x100000); @@ -1766,6 +1767,7 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, TCHAR *option, TCHAR *va || cfgfile_intval (option, value, L"mbresmem_size", &p->mbresmem_high_size, 0x100000) || cfgfile_intval (option, value, L"z3mem_size", &p->z3fastmem_size, 0x100000) || cfgfile_intval (option, value, L"z3mem2_size", &p->z3fastmem2_size, 0x100000) + || cfgfile_intval (option, value, L"z3chipmem_size", &p->z3chipmem_size, 0x100000) || cfgfile_intval (option, value, L"z3mem_start", &p->z3fastmem_start, 1) || cfgfile_intval (option, value, L"bogomem_size", &p->bogomem_size, 0x40000) || cfgfile_intval (option, value, L"gfxcard_size", &p->gfxmem_size, 0x100000) @@ -3597,6 +3599,7 @@ static void buildin_default_prefs (struct uae_prefs *p) p->mbresmem_high_size = 0x00000000; p->z3fastmem_size = 0x00000000; p->z3fastmem2_size = 0x00000000; + p->z3chipmem_size = 0x00000000; p->gfxmem_size = 0x00000000; p->cs_rtc = 0; diff --git a/cia.cpp b/cia.cpp index 7dd48105..0a9060f3 100644 --- a/cia.cpp +++ b/cia.cpp @@ -92,7 +92,7 @@ static void RethinkICRA (void) { if (ciaaimask & ciaaicr) { ciaaicr |= 0x80; - send_interrupt (3, 3); + send_interrupt (3, 2 * CYCLE_UNIT + CYCLE_UNIT / 2); } } @@ -100,7 +100,7 @@ static void RethinkICRB (void) { if (ciabimask & ciabicr) { ciabicr |= 0x80; - send_interrupt (13, 3); + send_interrupt (13, 2 * CYCLE_UNIT + CYCLE_UNIT / 2); } } diff --git a/custom.cpp b/custom.cpp index 2005e7ba..7f1ef72d 100644 --- a/custom.cpp +++ b/custom.cpp @@ -472,13 +472,13 @@ static void update_mirrors (void) STATIC_INLINE uae_u8 *pfield_xlateptr (uaecptr plpt, int bytecount) { - if (!chipmem_bank.check (plpt, bytecount)) { + if (!chipmem_check_indirect (plpt, bytecount)) { static int count = 0; if (!count) count++, write_log (L"Warning: Bad playfield pointer\n"); return NULL; } - return chipmem_bank.xlateaddr (plpt); + return chipmem_xlate_indirect (plpt); } STATIC_INLINE void docols (struct color_entry *colentry) @@ -1073,21 +1073,21 @@ STATIC_INLINE void fetch (int nr, int fm, int hpos) bpl1dat_written = 1; #ifdef DEBUGGER if (debug_dma) - record_dma (0x110 + nr * 2, chipmem_agnus_wget (p), p, hpos, vpos, DMARECORD_BITPLANE); + record_dma (0x110 + nr * 2, chipmem_wget_indirect (p), p, hpos, vpos, DMARECORD_BITPLANE); #endif switch (fm) { case 0: - fetched[nr] = bplxdat[nr] = last_custom_value1 = chipmem_agnus_wget (p); + fetched[nr] = bplxdat[nr] = last_custom_value1 = chipmem_wget_indirect (p); break; #ifdef AGA case 1: - fetched_aga0[nr] = chipmem_lget (p); + fetched_aga0[nr] = chipmem_lget_indirect (p); last_custom_value1 = (uae_u16)fetched_aga0[nr]; break; case 2: - fetched_aga1[nr] = chipmem_lget (p); - fetched_aga0[nr] = chipmem_lget (p + 4); + fetched_aga1[nr] = chipmem_lget_indirect (p); + fetched_aga0[nr] = chipmem_lget_indirect (p + 4); last_custom_value1 = (uae_u16)fetched_aga0[nr]; break; #endif @@ -3119,8 +3119,8 @@ static void immediate_copper (int num) break; pos++; oldpos = pos; - cop_state.i1 = chipmem_agnus_wget (cop_state.ip); - cop_state.i2 = chipmem_agnus_wget (cop_state.ip + 2); + cop_state.i1 = chipmem_wget_indirect (cop_state.ip); + cop_state.i2 = chipmem_wget_indirect (cop_state.ip + 2); cop_state.ip += 4; if (!(cop_state.i1 & 1)) { // move cop_state.i1 &= 0x1fe; @@ -3397,7 +3397,7 @@ void send_interrupt (int num, int delay) { if (use_eventmode (0x8000) && delay > 0) { if (!(intreq & (1 << num))) - event2_newevent_xx (-1, delay * CYCLE_UNIT, num, send_interrupt_do); + event2_newevent_xx (-1, delay, num, send_interrupt_do); } else { send_interrupt_do (num); } @@ -3891,9 +3891,9 @@ static void BLTSIZH (int hpos, uae_u16 v) maybe_blit (hpos, 0); blt_info.hblitsize = v & 0x7FF; if (!blt_info.vblitsize) - blt_info.vblitsize = 32768; + blt_info.vblitsize = 0x8000; if (!blt_info.hblitsize) - blt_info.hblitsize = 0x800; + blt_info.hblitsize = 0x0800; do_blitter (hpos, copper_access); } @@ -4330,7 +4330,7 @@ static void update_copper (int until_hpos) alloc_cycle (old_hpos, CYCLE_COPPER); #ifdef DEBUGGER if (debug_dma) - record_dma (0x8c, chipmem_agnus_wget (cop_state.ip), cop_state.ip, old_hpos, vpos, DMARECORD_COPPER); + record_dma (0x8c, chipmem_wget_indirect (cop_state.ip), cop_state.ip, old_hpos, vpos, DMARECORD_COPPER); #endif cop_state.ip += 2; break; @@ -4343,7 +4343,7 @@ static void update_copper (int until_hpos) cop_state.state = COP_read1; alloc_cycle (old_hpos, CYCLE_COPPER); if (debug_dma) - record_dma (0x1fe, chipmem_agnus_wget (cop_state.ip), cop_state.ip, old_hpos, vpos, DMARECORD_COPPER); + record_dma (0x1fe, chipmem_wget_indirect (cop_state.ip), cop_state.ip, old_hpos, vpos, DMARECORD_COPPER); // next cycle finally reads from new pointer if (cop_state.strobe == 1) cop_state.ip = cop1lc; @@ -4364,7 +4364,7 @@ static void update_copper (int until_hpos) case COP_read1: if (copper_cant_read (old_hpos, 1)) continue; - cop_state.i1 = last_custom_value1 = chipmem_agnus_wget (cop_state.ip); + cop_state.i1 = last_custom_value1 = chipmem_wget_indirect (cop_state.ip); alloc_cycle (old_hpos, CYCLE_COPPER); #ifdef DEBUGGER if (debug_dma) @@ -4377,7 +4377,7 @@ static void update_copper (int until_hpos) case COP_read2: if (copper_cant_read (old_hpos, 1)) continue; - cop_state.i2 = last_custom_value1 = chipmem_agnus_wget (cop_state.ip); + cop_state.i2 = last_custom_value1 = chipmem_wget_indirect (cop_state.ip); alloc_cycle (old_hpos, CYCLE_COPPER); cop_state.ip += 2; cop_state.saved_i1 = cop_state.i1; @@ -4663,7 +4663,7 @@ STATIC_INLINE uae_u16 sprite_fetch (struct sprite *s, int dma, int hpos, int cyc if (dma) { if (cycle && currprefs.cpu_cycle_exact) s->ptxhpos = hpos; - data = last_custom_value1 = chipmem_agnus_wget (s->pt); + data = last_custom_value1 = chipmem_wget_indirect (s->pt); alloc_cycle (hpos, CYCLE_SPRITE); #ifdef DEBUGGER if (debug_dma) @@ -4675,7 +4675,7 @@ STATIC_INLINE uae_u16 sprite_fetch (struct sprite *s, int dma, int hpos, int cyc } STATIC_INLINE uae_u16 sprite_fetch2 (struct sprite *s, int hpos, int cycle, int mode) { - uae_u16 data = last_custom_value1 = chipmem_agnus_wget (s->pt); + uae_u16 data = last_custom_value1 = chipmem_wget_indirect (s->pt); s->pt += 2; return data; } @@ -5380,10 +5380,10 @@ static void hsync_handler (void) // DIP Agnus (8361): vblank interrupt is triggered on line 1! if (currprefs.cs_dipagnus) { if (vpos == 1) - send_interrupt (5, 1); + send_interrupt (5, 1 * CYCLE_UNIT); } else { if (vpos == 0) - send_interrupt (5, 1); + send_interrupt (5, 1 * CYCLE_UNIT); } #ifdef CPUEMU_12 diff --git a/debug.cpp b/debug.cpp index 01b7cee1..54ec1941 100644 --- a/debug.cpp +++ b/debug.cpp @@ -345,13 +345,13 @@ static uae_u32 readbin (TCHAR **c) return readbinx (c); } -static TCHAR next_char(TCHAR **c) +static TCHAR next_char (TCHAR **c) { ignore_ws (c); return *(*c)++; } -static TCHAR peek_next_char(TCHAR **c) +static TCHAR peek_next_char (TCHAR **c) { TCHAR *pc = *c; return pc[1]; @@ -1044,7 +1044,7 @@ static uaecptr decode_copperlist (FILE* file, uaecptr address, int nolines) { uae_u32 insn; while (nolines-- > 0) { - insn = (chipmem_agnus_wget (address) << 16) | chipmem_agnus_wget (address + 2); + insn = (chipmem_wget_indirect (address) << 16) | chipmem_wget_indirect (address + 2); decode_copper_insn (file, insn, address); address += 4; } diff --git a/disk.cpp b/disk.cpp index f0eb267b..07393ee5 100644 --- a/disk.cpp +++ b/disk.cpp @@ -2681,13 +2681,13 @@ static void disk_doupdate_write (drive * drv, int floppybits) floppy[dr].mfmpos %= drv->tracklen; } } - if ((dmacon & 0x210) == 0x210 && dskdmaen == 3 && dsklength > 0 && (!(adkcon &0x400) || dma_enable)) { + if (dmaen (DMA_DISK) && dskdmaen == 3 && dsklength > 0 && (!(adkcon &0x400) || dma_enable)) { bitoffset++; bitoffset &= 15; if (!bitoffset) { for (dr = 0; dr < MAX_FLOPPY_DRIVES ; dr++) { drive *drv2 = &floppy[dr]; - uae_u16 w = get_word (dskpt); + uae_u16 w = chipmem_wget_indirect (dskpt); #ifdef CPUEMU_12 diskdma (dskpt, w, 1); #endif @@ -2798,9 +2798,9 @@ static void disk_doupdate_read_nothing (int floppybits) while (floppybits >= get_floppy_speed()) { word <<= 1; - if (bitoffset == 15 && dma_enable && dskdmaen == 2 && dsklength >= 0) { + if (dmaen (DMA_DISK) && bitoffset == 15 && dma_enable && dskdmaen == 2 && dsklength >= 0) { if (dsklength > 0) { - put_word (dskpt, word); + chipmem_wput_indirect (dskpt, word); #ifdef CPUEMU_12 diskdma (dskpt, word, 0); #endif @@ -2820,6 +2820,31 @@ static void disk_doupdate_read_nothing (int floppybits) } } +static bool doreaddma (void) +{ + if (dmaen (DMA_DISK) && bitoffset == 15 && dma_enable && dskdmaen == 2 && dsklength >= 0) { + if (dsklength > 0) { + chipmem_wput_indirect (dskpt, word); +#ifdef CPUEMU_12 + diskdma (dskpt, word, 0); +#endif + dskpt += 2; + } +#if 0 + dma_tab[j++] = word; + if (j == MAX_DISK_WORDS_PER_LINE - 1) { + write_log (L"Bug: Disk DMA buffer overflow!\n"); + j--; + } +#endif + dsklength--; + if (dsklength <= 0) + disk_dmafinished (); + return true; + } + return false; +} + static void disk_doupdate_read (drive * drv, int floppybits) { int j = 0, k = 1, l = 0; @@ -2864,37 +2889,22 @@ static void disk_doupdate_read (drive * drv, int floppybits) drv->mfmpos += disk_jitter; drv->mfmpos %= drv->tracklen; } - if (bitoffset == 15 && dma_enable && dskdmaen == 2 && dsklength >= 0) { - if (dsklength > 0) { - put_word (dskpt, word); -#ifdef CPUEMU_12 - diskdma (dskpt, word, 0); -#endif - dskpt += 2; - } -#if 0 - dma_tab[j++] = word; - if (j == MAX_DISK_WORDS_PER_LINE - 1) { - write_log (L"Bug: Disk DMA buffer overflow!\n"); - j--; - } -#endif - dsklength--; - if (dsklength <= 0) - disk_dmafinished (); - } + bool dmadone = doreaddma (); if ((bitoffset & 7) == 7) { dskbytr_val = word & 0xff; dskbytr_val |= 0x8000; } if (word == dsksync) { - if (adkcon & 0x400) - bitoffset = 15; if (dskdmaen) { if (disk_debug_logging && dma_enable == 0) - write_log (L"Sync match, DMA started at %d\n", drv->mfmpos); + write_log (L"Sync match, DMA started at %d PC=%08x\n", drv->mfmpos, M68K_GETPC); dma_enable = 1; } + // start DMA immediately if bitoffset is already in sync instead of waiting for next word + if (!dmadone) + doreaddma (); + if (adkcon & 0x400) + bitoffset = 15; } bitoffset++; bitoffset &= 15; @@ -2940,7 +2950,7 @@ uae_u16 DSKBYTR (int hpos) dskbytr_val &= ~0x8000; if (word == dsksync) v |= 0x1000; - if (dskdmaen && (dmacon & 0x210) == 0x210) + if (dskdmaen && dmaen (DMA_DISK)) v |= 0x4000; if (dsklen & 0x4000) v |= 0x2000; @@ -3020,8 +3030,6 @@ void DISK_update (int tohpos) int didread; disk_jitter = ((uaerand () >> 4) & 3) + 1; - if (disk_jitter > 2) - disk_jitter = 1; if (cycles <= 0) return; disk_hpos += cycles; @@ -3078,6 +3086,7 @@ void DSKLEN (uae_u16 v, int hpos) int motormask; DISK_update (hpos); + if ((v & 0x8000) && (dsklen & 0x8000)) { dskdmaen = 2; DISK_start (); @@ -3211,7 +3220,7 @@ void DSKLEN (uae_u16 v, int hpos) return; } while (dsklength-- > 0) { - put_word (dskpt, drv->bigmfmbuf[pos >> 4]); + chipmem_wput_indirect (dskpt, drv->bigmfmbuf[pos >> 4]); dskpt += 2; pos += 16; pos %= drv->tracklen; @@ -3222,7 +3231,7 @@ void DSKLEN (uae_u16 v, int hpos) } else if (dskdmaen == 3) { /* TURBO write */ for (i = 0; i < dsklength; i++) { - uae_u16 w = get_word (dskpt + i * 2); + uae_u16 w = chipmem_wget_indirect (dskpt + i * 2); drv->bigmfmbuf[pos >> 4] = w; #ifdef AMAX if (currprefs.amaxromfile[0]) @@ -3238,13 +3247,13 @@ void DSKLEN (uae_u16 v, int hpos) if (!done && noselected) { while (dsklength-- > 0) { if (dskdmaen == 3) { - uae_u16 w = get_word (dskpt); + uae_u16 w = chipmem_wget_indirect (dskpt); #ifdef AMAX if (currprefs.amaxromfile[0]) amax_diskwrite (w); #endif } else { - put_word (dskpt, 0); + chipmem_wput_indirect (dskpt, 0); } dskpt += 2; } @@ -3412,10 +3421,14 @@ end: void DISK_save_custom (uae_u32 *pdskpt, uae_u16 *pdsklength, uae_u16 *pdsksync, uae_u16 *pdskbytr) { - if(pdskpt) *pdskpt = dskpt; - if(pdsklength) *pdsklength = dsklength; - if(pdsksync) *pdsksync = dsksync; - if(pdskbytr) *pdskbytr = dskbytr_val; + if (pdskpt) + *pdskpt = dskpt; + if (pdsklength) + *pdsklength = dsklength; + if (pdsksync) + *pdsksync = dsksync; + if (pdskbytr) + *pdskbytr = dskbytr_val; } #endif /* SAVESTATE || DEBUGGER */ diff --git a/expansion.cpp b/expansion.cpp index bd8e1896..5a1bdd4e 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -285,10 +285,17 @@ static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value) p1 = get_word (regs.regs[11] + 0x20); if (expamem[0] & add_memory) { // Z3 RAM expansion - if (z3num == 0) - p2 = z3fastmem_start >> 16; - else - p2 = z3fastmem2_start >> 16; + p2 = 0; + while (!p2 && z3num < 3) { + if (z3num == 0 && currprefs.z3fastmem_size) + p2 = z3fastmem_start >> 16; + else if (z3num == 1 && currprefs.z3fastmem2_size) + p2 = z3fastmem2_start >> 16; + else if (z3num == 2 && currprefs.z3chipmem_size) + p2 = z3chipmem_start >> 16; + if (!p2) + z3num++; + } z3num++; } else { // Z3 P96 RAM @@ -695,9 +702,9 @@ static addrbank filesys_bank = { * Z3fastmem Memory */ -static uae_u32 z3fastmem_mask, z3fastmem2_mask; -uaecptr z3fastmem_start, z3fastmem2_start; -static uae_u8 *z3fastmem, *z3fastmem2; +static uae_u32 z3fastmem_mask, z3fastmem2_mask, z3chipmem_mask; +uaecptr z3fastmem_start, z3fastmem2_start, z3chipmem_start; +static uae_u8 *z3fastmem, *z3fastmem2, *z3chipmem; static uae_u32 REGPARAM2 z3fastmem_lget (uaecptr addr) { @@ -813,6 +820,65 @@ static uae_u8 *REGPARAM2 z3fastmem2_xlate (uaecptr addr) addr &= z3fastmem2_mask; return z3fastmem2 + addr; } + +static uae_u32 REGPARAM2 z3chipmem_lget (uaecptr addr) +{ + uae_u8 *m; + addr -= z3chipmem_start & z3chipmem_mask; + addr &= z3chipmem_mask; + m = z3chipmem + addr; + return do_get_mem_long ((uae_u32 *)m); +} +static uae_u32 REGPARAM2 z3chipmem_wget (uaecptr addr) +{ + uae_u8 *m; + addr -= z3chipmem_start & z3chipmem_mask; + addr &= z3chipmem_mask; + m = z3chipmem + addr; + return do_get_mem_word ((uae_u16 *)m); +} +static uae_u32 REGPARAM2 z3chipmem_bget (uaecptr addr) +{ + addr -= z3chipmem_start & z3chipmem_mask; + addr &= z3chipmem_mask; + return z3chipmem[addr]; +} +static void REGPARAM2 z3chipmem_lput (uaecptr addr, uae_u32 l) +{ + uae_u8 *m; + addr -= z3chipmem_start & z3chipmem_mask; + addr &= z3chipmem_mask; + m = z3chipmem + addr; + do_put_mem_long ((uae_u32 *)m, l); +} +static void REGPARAM2 z3chipmem_wput (uaecptr addr, uae_u32 w) +{ + uae_u8 *m; + addr -= z3chipmem_start & z3chipmem_mask; + addr &= z3chipmem_mask; + m = z3chipmem + addr; + do_put_mem_word ((uae_u16 *)m, w); +} +static void REGPARAM2 z3chipmem_bput (uaecptr addr, uae_u32 b) +{ + addr -= z3chipmem_start & z3chipmem_mask; + addr &= z3chipmem_mask; + z3chipmem[addr] = b; +} +static int REGPARAM2 z3chipmem_check (uaecptr addr, uae_u32 size) +{ + addr -= z3chipmem_start & z3chipmem_mask; + addr &= z3chipmem_mask; + return (addr + size) <= allocated_z3chipmem; +} +static uae_u8 *REGPARAM2 z3chipmem_xlate (uaecptr addr) +{ + addr -= z3chipmem_start & z3chipmem_mask; + addr &= z3chipmem_mask; + return z3chipmem + addr; +} + + addrbank z3fastmem_bank = { z3fastmem_lget, z3fastmem_wget, z3fastmem_bget, z3fastmem_lput, z3fastmem_wput, z3fastmem_bput, @@ -825,6 +891,12 @@ addrbank z3fastmem2_bank = { z3fastmem2_xlate, z3fastmem2_check, NULL, L"ZorroIII Fast RAM #2", z3fastmem2_lget, z3fastmem2_wget, ABFLAG_RAM }; +addrbank z3chipmem_bank = { + z3chipmem_lget, z3chipmem_wget, z3chipmem_bget, + z3chipmem_lput, z3chipmem_wput, z3chipmem_bput, + z3chipmem_xlate, z3chipmem_check, NULL, L"ZorroIII FakeChipRAM", + z3chipmem_lget, z3chipmem_wget, ABFLAG_RAM +}; /* Z3-based UAEGFX-card */ uae_u32 gfxmem_mask; /* for memory.c */ @@ -973,6 +1045,11 @@ static void expamem_map_z3fastmem2 (void) { expamem_map_z3fastmem_2 (&z3fastmem2_bank, &z3fastmem2_start, currprefs.z3fastmem2_size, allocated_z3fastmem2); } +static void expamem_map_z3chipmem (void) +{ + expamem_map_z3fastmem_2 (&z3chipmem_bank, &z3chipmem_start, currprefs.z3chipmem_size, allocated_z3chipmem); +} + static void expamem_init_z3fastmem_2 (addrbank *bank, uae_u32 start, uae_u32 size, uae_u32 allocated) { @@ -1019,6 +1096,10 @@ static void expamem_init_z3fastmem2 (void) { expamem_init_z3fastmem_2 (&z3fastmem2_bank, z3fastmem2_start, currprefs.z3fastmem2_size, allocated_z3fastmem2); } +static void expamem_init_z3chipmem (void) +{ + expamem_init_z3fastmem_2 (&z3chipmem_bank, z3chipmem_start, currprefs.z3chipmem_size, allocated_z3chipmem); +} #ifdef PICASSO96 /* @@ -1076,7 +1157,7 @@ static void expamem_init_gfxcard (void) #ifdef SAVESTATE -static size_t fast_filepos, z3_filepos, z3_filepos2, p96_filepos; +static size_t fast_filepos, z3_filepos, z3_filepos2, z3_fileposchip, p96_filepos; #endif void free_fastmemory (void) @@ -1092,6 +1173,7 @@ static void allocate_expamem (void) currprefs.z3fastmem_size = changed_prefs.z3fastmem_size; currprefs.z3fastmem2_size = changed_prefs.z3fastmem2_size; currprefs.gfxmem_size = changed_prefs.gfxmem_size; + currprefs.z3chipmem_size = changed_prefs.z3chipmem_size; if (allocated_fastmem != currprefs.fastmem_size) { free_fastmemory (); @@ -1141,6 +1223,24 @@ static void allocate_expamem (void) } memory_hardreset (); } + if (allocated_z3chipmem != currprefs.z3chipmem_size) { + if (z3chipmem) + mapped_free (z3chipmem); + z3chipmem = 0; + + allocated_z3chipmem = currprefs.z3chipmem_size; + z3chipmem_mask = allocated_z3chipmem - 1; + + if (allocated_z3chipmem) { + z3chipmem = mapped_malloc (allocated_z3chipmem, L"z3_chip"); + if (z3chipmem == 0) { + write_log (L"Out of memory for 32 bit fake chip memory.\n"); + allocated_z3chipmem = 0; + } + } + memory_hardreset (); + } + #ifdef PICASSO96 if (allocated_gfxmem != currprefs.gfxmem_size) { if (gfxmemory) @@ -1163,6 +1263,7 @@ static void allocate_expamem (void) z3fastmem_bank.baseaddr = z3fastmem; z3fastmem2_bank.baseaddr = z3fastmem2; + z3chipmem_bank.baseaddr = z3chipmem; fastmem_bank.baseaddr = fastmemory; gfxmem_bank.baseaddr = gfxmemory; @@ -1183,6 +1284,11 @@ static void allocate_expamem (void) map_banks (&z3fastmem2_bank, z3fastmem2_start >> 16, currprefs.z3fastmem2_size >> 16, allocated_z3fastmem2); } + if (allocated_z3chipmem > 0) { + restore_ram (z3_fileposchip, z3chipmem); + map_banks (&z3chipmem_bank, z3chipmem_start >> 16, currprefs.z3chipmem_size >> 16, + allocated_z3fastmem2); + } #ifdef PICASSO96 if (allocated_gfxmem > 0 && gfxmem_start > 0) { restore_ram (p96_filepos, gfxmemory); @@ -1274,12 +1380,12 @@ static void expamem_init_a4091 (void) ncr_init (); } -void p96memstart(void) +void p96memstart (void) { /* make sure there is always empty space between Z3 and P96 RAM */ - p96ram_start = currprefs.z3fastmem_start + ((currprefs.z3fastmem_size + currprefs.z3fastmem2_size + 0xffffff) & ~0xffffff); - if (p96ram_start == currprefs.z3fastmem_start + currprefs.z3fastmem_size + currprefs.z3fastmem2_size && - (currprefs.z3fastmem_size + currprefs.z3fastmem2_size < 512 * 1024 * 1024 || currprefs.gfxmem_size < 128 * 1024 * 1024)) + p96ram_start = currprefs.z3fastmem_start + ((currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size + 0xffffff) & ~0xffffff); + if (p96ram_start == currprefs.z3fastmem_start + currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size && + (currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size < 512 * 1024 * 1024 || currprefs.gfxmem_size < 128 * 1024 * 1024)) p96ram_start += 0x1000000; } @@ -1328,6 +1434,15 @@ void expamem_reset (void) map_banks (&z3fastmem2_bank, z3fastmem2_start >> 16, currprefs.z3fastmem2_size >> 16, allocated_z3fastmem2); } } + z3chipmem_start = z3fastmem2_start + currprefs.z3fastmem2_size; + if (currprefs.z3fastmem_size || currprefs.z3fastmem2_size) + z3chipmem_start += 16 * 1024 * 1024; + if (z3chipmem != NULL) { + z3num = 0; + card_init[cardno] = expamem_init_z3chipmem; + card_map[cardno++] = expamem_map_z3chipmem; + map_banks (&z3chipmem_bank, z3chipmem_start >> 16, currprefs.z3chipmem_size >> 16, allocated_z3chipmem); + } #ifdef CDTV if (currprefs.cs_cdtvcd) { card_init[cardno] = expamem_init_cdtv; @@ -1419,6 +1534,9 @@ void expansion_init (void) allocated_z3fastmem2 = 0; z3fastmem2_mask = z3fastmem2_start = 0; z3fastmem2 = 0; + allocated_z3chipmem = 0; + z3chipmem_mask = z3chipmem_start = 0; + z3chipmem = 0; allocate_expamem (); @@ -1444,6 +1562,9 @@ void expansion_cleanup (void) if (z3fastmem2) mapped_free (z3fastmem2); z3fastmem2 = 0; + if (z3chipmem) + mapped_free (z3chipmem); + z3chipmem = 0; #ifdef PICASSO96 if (gfxmemory) @@ -1462,7 +1583,7 @@ void expansion_cleanup (void) #endif } -void expansion_clear(void) +void expansion_clear (void) { if (fastmemory) memset (fastmemory, 0, allocated_fastmem); @@ -1470,6 +1591,8 @@ void expansion_clear(void) memset (z3fastmem, 0, allocated_z3fastmem > 0x800000 ? 0x800000 : allocated_z3fastmem); if (z3fastmem2) memset (z3fastmem2, 0, allocated_z3fastmem2 > 0x800000 ? 0x800000 : allocated_z3fastmem2); + if (z3chipmem) + memset (z3chipmem, 0, allocated_z3chipmem > 0x800000 ? 0x800000 : allocated_z3chipmem); if (gfxmemory) memset (gfxmemory, 0, allocated_gfxmem); } @@ -1486,6 +1609,10 @@ uae_u8 *save_fram (int *len) uae_u8 *save_zram (int *len, int num) { + if (num < 0) { + *len = allocated_z3chipmem; + return z3chipmem; + } *len = num ? allocated_z3fastmem2 : allocated_z3fastmem; return num ? z3fastmem2 : z3fastmem; } @@ -1504,7 +1631,10 @@ void restore_fram (int len, size_t filepos) void restore_zram (int len, size_t filepos, int num) { - if (num) { + if (num == -1) { + z3_fileposchip = filepos; + changed_prefs.z3chipmem_size = len; + } else if (num == 1) { z3_filepos2 = filepos; changed_prefs.z3fastmem2_size = len; } else { diff --git a/filesys.asm b/filesys.asm index 4a218e67..6b7ebf2e 100644 --- a/filesys.asm +++ b/filesys.asm @@ -16,11 +16,12 @@ ; 2007.06.15 uninitialized variable in memory type selection fixed (stupid me) (TW) ; 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) +; 2007.09.05 full 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) ; 2008.12.11 mousehack -> tablet driver ; 2008.12.25 mousehack cursor sync ; 2009.01.20 clipboard sharing +; 2009.12.27 console hook AllocMem = -198 FreeMem = -210 @@ -46,14 +47,16 @@ NRF_MAGIC = $80000000 our_seglist: dc.l 0 ; 8 /* NextSeg */ start: - bra.w filesys_mainloop ;12 - dc.l make_dev-start ;16 - dc.l filesys_init-start ;20 - dc.l exter_server-start ;24 - dc.l bootcode-start ;28 - dc.l setup_exter-start ;32 - dc.l mh_e-start ;36 - ;40 + dc.l 9 ;0 12 + bra.w filesys_mainloop ;1 16 + dc.l make_dev-start ;2 20 + dc.l filesys_init-start ;3 24 + dc.l exter_server-start ;4 28 + dc.l bootcode-start ;5 32 + dc.l setup_exter-start ;6 36 + dc.l mh_e-start ;7 40 + dc.l clipboard_init-start ;8 44 + ;52 bootcode: lea.l doslibname(pc),a1 @@ -64,6 +67,69 @@ bootcode: jsr (a0) rts +residenthack + movem.l d0-d2/a0-a2/a6,-(sp) + move.l 4.w,a6 + cmp.w #37,20(a6) + bcs.s .rsh + moveq #residentcodeend-residentcodestart,d0 + move.l d0,d2 + moveq #1,d1 + jsr AllocMem(a6) + tst.l d0 + beq.s .rsh + move.l d0,a2 + + move.l a2,a0 + lea residentcodestart(pc),a1 +.cp1 + move.l (a1)+,(a0)+ + subq.l #4,d2 + bne.s .cp1 + + jsr -$0078(a6) ;Disable + move.l a6,a1 + move.w #-$48,a0 ;InitCode + move.l a2,d0 + jsr -$01a4(a6) ;SetFunction + move.l d0,residentcodejump2-residentcodestart+2(a2) + lea myafterdos(pc),a0 + move.l a0,residentcodejump1-residentcodestart+2(a2) + jsr -$27C(a6) ;CacheClearU + jsr -$007e(a6) ;Enable +.rsh + movem.l (sp)+,d0-d2/a0-a2/a6 + rts + +myafterdos + move.l (sp),a0 + move.l 2(a0),a0 + move.l a0,-(sp) + jsr (a0) ;jump to original InitCode + move.l (sp)+,a0 + addq.l #4,sp ;remove return address + movem.l d0-d7/a1-a6,-(sp) + move.l a6,a1 + move.l a0,d0 + move.w #-$48,a0 ;InitCode + jsr -$01a4(a6) ;SetFunction (restore original) + bsr.w clipboard_init + bsr.w consolehook + movem.l (sp)+,d0-d7/a1-a6 + rts ;return directly to caller + + cnop 0,4 +residentcodestart: + btst #2,d0 ;RTF_AFTERDOS? + beq.s resjump +residentcodejump1 + jsr $f00000 +resjump +residentcodejump2 + jmp $f00000 + cnop 0,4 +residentcodeend: + filesys_init: movem.l d0-d7/a0-a6,-(sp) move.l 4.w,a6 @@ -173,6 +239,32 @@ filesys_dev_storeinfo ; add >2MB chip RAM to memory list jsr -618(a6) ; AddMemList FSIN_chip_done + ; patch >8MB Z3 FakeChipRAM memory type to Chip + move.w #$FF80,d0 + bsr.w getrtbase + jsr (a0) ; d1 = size, a1 = start address + tst.l d1 + beq.s FSIN_fchip_done + move.l a1,a2 + jsr -$0078(a6) ; Disable + lea 322(a6),a0 ; MemHeader +FSIN_scanfchip: + move.l (a0),a0 ; first MemList + tst.l (a0) + beq.s FSIN_fchip_done + move.l 20(a0),d0 ; mh_Lower + clr.w d0 + cmp.l d0,a2 + bne.s FSIN_scanfchip + move.w 14(a0),d0 ; attributes + and.w #~4,d0 ; MEMF_FAST + or.w #2+1+256,d0 ; MEMF_CHIP | MEMF_PUBLIC | MEMF_LOCAL + move.w d0,14(a0) + lea fchipname(pc),a1 + move.l a1,10(a0) + jsr -$007e(a6) ; Enable +FSIN_fchip_done + lea fstaskname(pc),a0 lea fsmounttask(pc),a1 moveq #10,d0 @@ -307,6 +399,7 @@ exter_server_exit: setup_exter: movem.l d0-d1/a0-a1,-(sp) + bsr.w residenthack moveq.l #26,d0 move.l #$10001,d1 jsr AllocMem(a6) @@ -324,10 +417,6 @@ setup_exter: beq.s .nomh bsr.w mousehack_init .nomh - cmp.w #36,20(a6) - bcs.s .noclip - bsr.w clipboard_init -.noclip movem.l (sp)+,d0-d1/a0-a1 rts @@ -1428,6 +1517,8 @@ createtask: .f movem.l (sp)+,d2/d3/d4/a2/a3/a6 rts +; mousehack/tablet + mousehack_init: lea mhname(pc),a0 lea mousehack_task(pc),a1 @@ -1493,10 +1584,15 @@ MH_FOO_DELAY = 28 MH_FOO_DIMS_X = 32 MH_FOO_DIMS_Y = 36 MH_FOO_VPXY = 40 -MH_FOO_ALIVE = 44 -MH_FOO_DIMS = 48 +MH_FOO_MOFFSET = 44 +MH_FOO_ALIVE = 48 +MH_FOO_LIMITCNT = 52 +MH_FOO_DIMS = 56 MH_FOO_DISP = (MH_FOO_DIMS+88) -MH_FOO_SIZE = (MH_FOO_DISP+48) +MH_FOO_PREFS = (MH_FOO_DISP+48) +MH_FOO_SIZE = (MH_FOO_PREFS+102) + +PREFS_SIZE = 102 MH_IEV = (MH_FOO+MH_FOO_SIZE) ;InputEvent MH_IEH = (MH_IEV+22) ;InputHandler (Interrupt) @@ -1506,6 +1602,10 @@ MH_IO = (MH_IENTTAGS+16*4*2) MH_TM = (MH_IO+4) MH_END = (MH_TM+4) +MH_MOUSEHACK = 0 +MH_TABLET = 1 +MH_ACTIVE = 7 + TAG_USER equ $80000000 TABLETA_Dummy EQU TAG_USER+$3A000 TABLETA_TabletZ EQU TABLETA_Dummy+$01 @@ -1519,17 +1619,19 @@ TABLETA_InProximity EQU TABLETA_Dummy+$08 TABLETA_ResolutionX EQU TABLETA_Dummy+$09 TABLETA_ResolutionY EQU TABLETA_Dummy+$0A + DTAG_DISP EQU $80000000 DTAG_DIMS EQU $80001000 DTAG_MNTR EQU $80002000 DTAG_NAME EQU $80003000 getgfxlimits: - movem.l d0-d3/a0-a6,-(sp) + movem.l d0-d4/a0-a6,-(sp) move.l a0,a5 sub.l a2,a2 sub.l a3,a3 sub.l a4,a4 + moveq #0,d4 move.l MH_FOO_GFXBASE(a5),a6 move.l MH_FOO_INTBASE(a5),a0 @@ -1541,10 +1643,20 @@ getgfxlimits: move.l a0,a4 jsr -$318(a6) ;GetVPModeID moveq #-1,d1 + moveq #-1,d2 cmp.l d0,d1 beq.s .end move.l d0,d3 + ; mouse offset + move.l MH_FOO_INTBASE(a5),a6 + lea MH_FOO_PREFS(a5),a0 + moveq #PREFS_SIZE,d0 + jsr -$84(a6) ;GetPrefs + lea MH_FOO_PREFS(a5),a0 + move.w 100(a0),d4 + move.l MH_FOO_GFXBASE(a5),a6 + ; Text Overscan area needed sub.l a0,a0 lea MH_FOO_DIMS(a5),a1 @@ -1563,6 +1675,8 @@ getgfxlimits: .end move.l 28(a4),d0 + cmp.w MH_FOO_MOFFSET(a5),d4 + bne.s .dosend cmp.l MH_FOO_VPXY(a5),d0 bne.s .dosend cmp.l MH_FOO_DIMS_X(a5),d1 @@ -1573,6 +1687,7 @@ getgfxlimits: move.l d0,MH_FOO_VPXY(a5) move.l d1,MH_FOO_DIMS_X(a5) move.l d2,MH_FOO_DIMS_Y(a5) + move.w d4,MH_FOO_MOFFSET(a5) ; This only for doublescan properties bit.. sub.l a0,a0 @@ -1588,13 +1703,14 @@ getgfxlimits: .nomntr ;send updated data to native side + move.w MH_FOO_MOFFSET(a5),d2 move.w #$FF38,d0 moveq #1,d1 bsr.w getrtbase jsr (a0) .nosend - movem.l (sp)+,d0-d3/a0-a6 + movem.l (sp)+,d0-d4/a0-a6 rts mousehack_task: @@ -1658,7 +1774,7 @@ mhloop moveq #0,d0 jsr -$0228(a6) ;OpenLibrary move.l d0,MH_FOO_INTBASE(a3) - beq.w mhloop + beq.s mhloop .intyes tst.l MH_FOO_GFXBASE(a3) bne.s .gfxyes @@ -1710,19 +1826,6 @@ mhloop move.l d0,MH_TM(a5) beq.w mhend - ; add handler -; move.l MH_IO(a5),a1 -; lea MH_IEH(a5),a2 -; lea mhhandler(pc),a0 -; move.l a0,18(a2) ;is_Code -; move.b #-1,9(a2) ;ln_pri, less than Intuition -; lea mhname(pc),a0 -; move.l a0,10(a2) ;ln_Name -; move.w #9,28(a1) ;IND_ADDHANDLER -; move.l a2,40(a1) -; move.b #1,30(a1) ;IOF_QUICK -; jsr -$01c8(a6) ;DoIO - ;tell native side that mousehack is now active move.w #$FF38,d0 moveq #0,d1 @@ -1732,10 +1835,14 @@ mhloop .yestim cmp.w #36,d7 - bcs.s .old + bcs.s .nodims + subq.l #1,MH_FOO_LIMITCNT(a3) + bpl.s .nodims move.l a3,a0 bsr.w getgfxlimits -.old + moveq #50,d0 + move.l d0,MH_FOO_LIMITCNT(a3) +.nodims move.l MH_IO(a5),a1 lea MH_IEV(a5),a2 @@ -1744,13 +1851,24 @@ mhloop move.l a2,40(a1) move.b mh_e(pc),d0 - bpl.s .nomh - cmp.w #36,d7 - bcs.w mhmode - -.nomh + cmp.w #39,d7 + bcs.w .notablet + btst #MH_TABLET,d0 + beq.w .notablet + + ;IENewTablet + + lea MH_IEPT(a5),a0 + move.l a0,10(a2) ;ie_Addr + move.b #$13,4(a2) ;ie_Class=IECLASS_NEWPOINTERPOS + move.b #3,5(a2) ;ie_SubClass = IESUBCLASS_NEWTABLET + clr.l (a0) ;ient_CallBack + clr.l 4(a0) clr.w 6(a2) ;ie_Code + clr.l 8(a0) + clr.w 12(a0) + ;IEQUALIFIER_MIDBUTTON=0x1000/IEQUALIFIER_RBUTTON=0x2000/IEQUALIFIER_LEFTBUTTON=0x4000 move.l mh_buttonbits(pc),d1 and.w #7,d1 @@ -1759,22 +1877,7 @@ mhloop lsl.w #8,d0 lsl.w #4,d0 move.w d0,8(a2) ;ie_Qualifier - - lea MH_IEPT(a5),a0 - move.l a0,10(a2) ;ie_Addr - move.b mh_e(pc),d0 - bmi.w .v37mh - cmp.w #39,d7 - bcs.w .v37 - - ;IENewTablet - - move.b #3,5(a2) ;ie_SubClass = IESUBCLASS_NEWTABLET - clr.l (a0) ;ient_CallBack - clr.l 4(a0) - clr.l 8(a0) - clr.w 12(a0) move.w mh_x(pc),12+2(a0) ;ient_TabletX clr.w 16(a0) move.w mh_y(pc),16+2(a0) ;ient_TabletY @@ -1847,31 +1950,8 @@ mhloop .noproxi clr.l (a1) ;TAG_DONE - bra.s buttons - -.v37mh - clr.w 8(a2) -.v37 - cmp.w #36,d7 - bcs.w mhloop - - ;IEPointerTable - move.b #2,5(a2) ;ie_SubClass = IESUBCLASS_TABLET - move.w mh_maxx(pc),(a0) ;iept_Range.X - move.w mh_maxy(pc),2(a0) ;iept_Range.Y - move.w mh_x(pc),4(a0) ;iept_Value.X - move.w mh_y(pc),6(a0) ;iept_Value.Y - move.w mh_pressure(pc),d0 - asr.w #8,d0 - move.w d0,8(a0) ;iept_Pressure (-128 to 127) - -buttons bsr.w mhdoio - ; mhmode = buttons are handled normally - move.b mh_e(pc),d0 - bmi.w mhloop - ;create mouse button events if button state changed move.w #$68,d3 ;IECODE_LBUTTON->IECODE_RBUTTON->IECODE_MBUTTON moveq #1,d2 @@ -1903,9 +1983,12 @@ buttons cmp.w #8,d2 bne.s .nextbut move.l d4,MH_FOO_BUTTONS(a3) - bra.w mhloop -mhmode +.notablet + + move.b mh_e(pc),d0 + btst #MH_MOUSEHACK,d0 + beq.w mhloop clr.l (a2) move.w #$0400,4(a2) ;IECLASS_POINTERPOS @@ -1965,24 +2048,8 @@ mousehackint: lea $dff000,a0 moveq #0,d0 rts - -;mhhandler: -; movem.l a0/a2,-(sp) -; move.l a0,a2 -;.mhl -; cmp.b #4,4(a2) ;IECLASS_POINTERPOS -; bne.s .mhl1 -; move.w #$FF38,d0 -; moveq #3,d1 -; bsr.w getrtbase -; jsr (a0) -;.mhl1 -; move.l (a2),d0 -; move.l d0,a2 -; bne.s .mhl -; movem.l (sp)+,a0/a2 -; move.l a0,d0 -; rts + +; clipboard sharing CLIP_WRITE_SIZE = 0 CLIP_WRITE_ALLOC = (CLIP_WRITE_SIZE+4) @@ -1994,68 +2061,47 @@ CLIP_DOS = (CLIP_EXEC+4) CLIP_HOOK = (CLIP_DOS+4) CLIP_BUF = (CLIP_HOOK+20) CLIP_BUF_SIZE = 8 -CLIP_END = (CLIP_BUF+CLIP_BUF_SIZE) +CLIP_POINTER_NOTIFY = (CLIP_BUF+CLIP_BUF_SIZE) +CLIP_POINTER_PREFS = (CLIP_POINTER_NOTIFY+48) +CLIP_END = (CLIP_POINTER_PREFS+32) clipboard_init: - lea clname(pc),a0 - lea clipboard_task(pc),a1 - moveq #-10,d0 - bsr createtask - rts - -clipboard_task: - sub.l a5,a5 + movem.l a5/a6,-(sp) move.l 4.w,a6 - move.l #CLIP_END,d0 move.l #$10001,d1 jsr AllocMem(a6) tst.l d0 - beq.s clipdie + beq.w clipdie move.l d0,a5 - move.l a6,CLIP_EXEC(a5) - sub.l a1,a1 - jsr -294(a6) ; FindTask - move.l d0,CLIP_TASK(a5) - move.w #$FF38,d0 moveq #14,d1 bsr.w getrtbase move.l a5,d0 jsr (a0) -.wait - moveq #0,d0 - bset #13,d0 - jsr -$013e(a6) ;Wait - jsr -$0084(a6) ;Forbid - lea 378(a6),a0 ;LibList - lea doslibname(pc),a1 - jsr -$114(a6) ;FindName - move.l d0,d2 - jsr -$008a(a6) ;Permit - tst.l d2 - beq.s .wait - - clr.l CLIP_TASK(a5) - + ; we need to be a process, LoadLibrary() needs to call dos lea clname(pc),a0 lea clipboard_proc(pc),a1 moveq #-10,d0 - move.l #3000,d1 + move.l #10000,d1 bsr.w createproc - - ; task has done its job, process continues.. + moveq #0,d0 + movem.l (sp)+,a5/a6 rts -clipdie: +clipkill move.w #$FF38,d0 moveq #10,d1 bsr.w getrtbase jsr (a0) + rts + +clipdie: + bsr.s clipkill move.l a5,d0 beq.s .cd1 move.l CLIP_EXEC(a5),a6 @@ -2065,12 +2111,84 @@ clipdie: jsr -414(a6) ; CloseLibrary .cd2 move.l a5,a1 - moveq #CLIP_END,d0 + move.l #CLIP_END,d0 jsr FreeMem(a6) .cd1 moveq #0,d0 rts +prefsread: + movem.l d2-d4/a2-a6,-(sp) + move.l CLIP_DOS(a5),a6 + lea pointer_prefs(pc),a0 + move.l a0,d1 + move.l #1005,d2 + jsr -$001e(a6) ;Open + move.l d0,d4 + beq.s .pr1 + lea CLIP_POINTER_PREFS(a5),a2 +.pr4 + clr.l (a2) +.pr3 + move.w 2(a2),(a2) + move.l a2,d2 + addq.l #2,d2 + moveq #2,d3 + move.l d4,d1 + jsr -$002a(a6) ;Read + cmp.l d0,d3 + bne.s .pr1 + cmp.l #'PNTR',(a2) + bne.s .pr3 + move.l a2,d2 + moveq #4,d3 + move.l d4,d1 + jsr -$002a(a6) ;Read + move.l a2,d2 + moveq #32,d3 + move.l d4,d1 + jsr -$002a(a6) ;Read + cmp.l d0,d3 + bne.s .pr1 + tst.w 16(a2) ;pp_Which + bne.s .pr4 + move.w #$FF38,d0 + moveq #16,d1 + bsr.w getrtbase + jsr (a0) +.pr1 + move.l d4,d1 + beq.s .pr2 + jsr -$0024(a6) ;Close +.pr2 + movem.l (sp)+,d2-d4/a2-a6 + rts + +prefshook: + move.l CLIP_DOS(a5),a6 + lea ram_name(pc),a0 + move.l a0,d1 + moveq #-2,d2 + jsr -$0054(a6) ;Lock + move.l d0,d1 + beq.s .ph1 + jsr -$005a(a6) ;Unlock + move.l CLIP_EXEC(a5),a6 + lea CLIP_POINTER_NOTIFY(a5),a2 + moveq #-1,d0 + jsr -$014a(a6) ;AllocSignal + move.b d0,20(a2) ;nr_SignalNum + lea pointer_prefs(pc),a0 + move.l a0,(a2) ;nr_Name + move.l #NRF_SEND_SIGNAL|NRF_NOTIFY_INITIAL,12(a2) ;nr_Flags + move.l CLIP_TASK(a5),16(a2) ;nr_Task + move.l CLIP_DOS(a5),a6 + move.l a2,d1 + jsr -$378(a6) ;StartNotify +.ph1 + move.l CLIP_EXEC(a5),a6 + rts + cnop 0,4 dc.l 16 clipboard_proc: @@ -2093,7 +2211,6 @@ clipboard_proc: moveq #0,d0 jsr -$0228(a6) ; OpenLibrary move.l d0,CLIP_DOS(a5) - tst.l d0 beq.w clipdie move.l d0,a6 @@ -2133,7 +2250,7 @@ cfloop2 moveq #0,d0 bset #13,d0 jsr -$013e(a6) ;Wait - + moveq #0,d1 move.l CLIP_UNIT(a5),d0 lea clip_dev(pc),a0 @@ -2141,11 +2258,18 @@ cfloop2 jsr -$01bc(a6) ;OpenDevice tst.l d0 bne.s cfloop2 - - move.w #$FF38,d0 - moveq #15,d1 - bsr.w getrtbase - jsr (a0) + move.l 20(a4),a0 ;device node + cmp.w #37,20(a0) ;must be at least v37 + bcc.s cfversion + ;too lazy to free everything.. + bsr.w clipkill +cfloop3 + moveq #0,d0 + jsr -$013e(a6) ;Wait + bra.s cfloop3 + +cfversion + bsr.w prefshook lea CLIP_HOOK(a5),a0 move.l a0,40(a4) @@ -2158,11 +2282,26 @@ cfloop2 move.l a4,a1 jsr -$01c8(a6) ;DoIO + move.w #$FF38,d0 + moveq #15,d1 + bsr.w getrtbase + jsr (a0) + tst.l CLIP_WRITE_SIZE(a5) + bne.s clipsignal + cfloop moveq #0,d0 + moveq #0,d2 + move.b CLIP_POINTER_NOTIFY+20(a5),d2 + bset d2,d0 bset #13,d0 jsr -$013e(a6) ;Wait + btst d2,d0 + beq.s clipsignal + bsr.w prefsread + bra.s cfloop +clipsignal move.l CLIP_WRITE_SIZE(a5),d0 beq.w clipread ;allocate amiga-side space @@ -2276,12 +2415,60 @@ cliphook: moveq #0,d0 rts +consolehook: + move.l 4.w,a6 + moveq #-1,d2 + move.w #$FF38,d0 + moveq #100,d1 + bsr.w getrtbase + jsr (a0) + tst.l d0 + beq.s .ch2 + moveq #0,d2 + jsr -$0084(a6) ;Forbid + lea 350(a6),a0 ;DeviceList + lea con_dev(pc),a1 + jsr -$114(a6) ;FindName + tst.l d0 + beq.s .ch1 + move.l d0,a0 + lea chook(pc),a1 + move.l -$1e+2(a0),a2 ; BeginIO + move.l a1,-$1e+2(a0) + move.l a0,a1 + move.w #$FF38,d0 + moveq #101,d1 + bsr.w getrtbase + jsr (a0) + moveq #1,d2 +.ch1 + jsr -$008a(a6) ;Permit +.ch2 + move.l d2,d0 + rts + +chook: + subq.l #4,sp ; native code fills with original return address + movem.l d0-d1/a0,-(sp) + move.w #$FF38,d0 + moveq #102,d1 + bsr.w getrtbase + jsr (a0) + movem.l (sp)+,d0-d1/a0 + rts + + inp_dev: dc.b 'input.device',0 tim_dev: dc.b 'timer.device',0 +con_dev: dc.b 'console.device',0 +devsn_name: dc.b 'DEVS',0 devs_name: dc.b 'DEVS:',0 clip_name: dc.b 'DEVS:clipboard.device',0 +ram_name: dc.b 'RAM:',0 clip_dev: dc.b 'clipboard.device',0 + ;argghh but StartNotify()ing non-existing ENV: causes "Insert disk ENV: in any drive" dialog.. +pointer_prefs: dc.b 'RAM:Env/Sys/Pointer.prefs',0 clname: dc.b 'UAE clipboard sharing',0 mhname: dc.b 'UAE mouse driver',0 exter_name: dc.b 'UAE filesystem',0 @@ -2292,4 +2479,5 @@ intlibname: dc.b 'intuition.library',0 gfxlibname: dc.b 'graphics.library',0 explibname: dc.b 'expansion.library',0 fsresname: dc.b 'FileSystem.resource',0 +fchipname: dc.b 'z3chip memory',0 END diff --git a/filesys.cpp b/filesys.cpp index 5c152060..1154b55c 100644 --- a/filesys.cpp +++ b/filesys.cpp @@ -972,11 +972,19 @@ static struct fs_dirhandle *fs_opendir (Unit *u, const TCHAR *nname) { struct fs_dirhandle *fsd = xmalloc (struct fs_dirhandle, 1); fsd->isarch = !!(u->volflags & MYVOLUMEINFO_ARCHIVE); - if (fsd->isarch) + if (fsd->isarch) { fsd->zd = zfile_opendir_archive (nname); - else + if (!fsd->zd) + goto end; + } else { fsd->od = my_opendir (nname); + if (!fsd->od) + goto end; + } return fsd; +end: + xfree (fsd); + return NULL; } static void fs_closedir (struct fs_dirhandle *fsd) { @@ -992,11 +1000,19 @@ static struct fs_filehandle *fs_open (Unit *unit, const TCHAR *name, int flags) { struct fs_filehandle *fsf = xmalloc (struct fs_filehandle, 1); fsf->isarch = !!(unit->volflags & MYVOLUMEINFO_ARCHIVE); - if (fsf->isarch) + if (fsf->isarch) { fsf->zf = zfile_open_archive (name, flags); - else + if (!fsf->zf) + goto end; + } else { fsf->of = my_open (name, flags); + if (!fsf->of) + goto end; + } return fsf; +end: + xfree (fsf); + return NULL; } static void fs_close (struct fs_filehandle *fd) { diff --git a/filesys_bootrom.cpp b/filesys_bootrom.cpp index ce5c88ec..2cec8284 100644 --- a/filesys_bootrom.cpp +++ b/filesys_bootrom.cpp @@ -1,9 +1,9 @@ db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x00); db(0x00); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0a); db(0x22); - db(0x00); db(0x00); db(0x08); db(0x04); db(0x00); db(0x00); db(0x00); db(0xd0); - db(0x00); db(0x00); db(0x02); db(0x2c); db(0x00); db(0x00); db(0x00); db(0x24); - db(0x00); db(0x00); db(0x02); db(0xe8); db(0x00); db(0x00); db(0x0d); db(0xf4); - db(0x00); db(0x00); db(0x12); db(0x84); db(0x43); db(0xfa); db(0x17); db(0x5a); + db(0x00); db(0x00); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0a); db(0x66); + db(0x00); db(0x00); db(0x08); db(0x48); db(0x00); db(0x00); db(0x00); db(0xd0); + db(0x00); db(0x00); db(0x02); db(0x70); db(0x00); db(0x00); db(0x00); db(0x24); + db(0x00); db(0x00); db(0x03); db(0x2c); db(0x00); db(0x00); db(0x0e); db(0x38); + db(0x00); db(0x00); db(0x12); db(0xc8); db(0x43); db(0xfa); db(0x17); db(0x9e); 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(0xe0); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04); @@ -20,16 +20,16 @@ db(0x20); db(0x68); db(0x00); db(0x02); db(0x2f); db(0x08); db(0x4e); db(0x90); db(0x20); db(0x5f); db(0x58); db(0x8f); db(0x48); db(0xe7); db(0xff); db(0x7e); db(0x22); db(0x4e); db(0x20); db(0x08); db(0x30); db(0x7c); db(0xff); db(0xb8); - db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x11); db(0xd6); - db(0x61); db(0x00); db(0x15); db(0x88); db(0x4c); db(0xdf); db(0x7e); db(0xff); + db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x12); db(0x1a); + db(0x61); db(0x00); db(0x15); db(0xcc); db(0x4c); db(0xdf); db(0x7e); db(0xff); db(0x4e); db(0x75); db(0x00); db(0x00); db(0x08); db(0x00); db(0x00); db(0x02); db(0x67); db(0x06); db(0x4e); db(0xb9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x4e); db(0xf9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x00); db(0x00); 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(0x82); - db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x16); db(0xcb); db(0x70); db(0x24); + db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); db(0x0b); db(0xc6); + db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x17); db(0x0f); 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(0x16); db(0xbb); db(0x70); db(0x00); + db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x16); db(0xff); 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); @@ -37,7 +37,7 @@ db(0x27); db(0x4c); db(0x01); db(0x9c); 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(0xce); + db(0x2f); db(0x0b); db(0x20); db(0x4b); db(0x61); db(0x00); db(0x07); db(0x12); 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); @@ -45,722 +45,732 @@ 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(0xf0); db(0x4e); db(0x90); db(0x72); db(0x03); db(0x74); db(0xf6); + db(0x0b); db(0x34); 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(0x15); db(0xc6); - db(0x43); db(0xfa); db(0x00); db(0x54); db(0x70); db(0x0a); db(0x61); db(0x00); - db(0x0b); db(0xa4); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); - db(0xff); db(0x48); db(0x61); db(0x00); db(0x0a); db(0xbc); db(0x4e); db(0x90); - db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0x38); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x00); - db(0x28); db(0x01); db(0x26); db(0x09); db(0x24); db(0x48); db(0x43); db(0xfa); - db(0x15); db(0xc0); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); - db(0x4a); db(0x80); db(0x67); db(0x14); db(0x2c); db(0x40); db(0x22); db(0x0a); - db(0xe4); db(0x8b); 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(0x4c); db(0xdf); db(0x44); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); - db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa); db(0x15); db(0x71); - db(0x43); db(0xfa); db(0x00); db(0x16); db(0x70); db(0x0f); db(0x22); db(0x3c); - db(0x00); db(0x00); db(0x1f); db(0x40); db(0x61); db(0x00); db(0xff); db(0xa8); - db(0x60); db(0xdc); 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(0x44); db(0x4e); db(0x90); - db(0x22); db(0x00); db(0x6b); db(0x04); db(0x61); db(0x00); db(0x07); db(0x8a); - 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(0x2a); - 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(0x0a); db(0x14); 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); db(0xfe); db(0xbc); db(0x60); db(0xd6); - db(0x0c); db(0x40); db(0x00); db(0x03); db(0x6e); db(0x06); db(0x4e); db(0xae); - db(0xfe); db(0x86); db(0x60); db(0xca); db(0x0c); db(0x40); db(0x00); db(0x04); - db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xff); db(0x4c); db(0x60); db(0xbe); - db(0x0c); db(0x40); db(0x00); db(0x05); db(0x6e); db(0x46); db(0x48); db(0xe7); - db(0x00); db(0xc0); db(0x70); db(0x26); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4c); db(0xdf); - db(0x03); db(0x00); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); - db(0x00); db(0x08); db(0x25); db(0x48); db(0x00); db(0x0e); db(0x35); db(0x7c); - db(0x00); db(0x26); db(0x00); db(0x12); db(0x25); db(0x7c); db(0x40); db(0x00); - db(0x00); db(0x00); db(0x00); db(0x14); 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(0x86); 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(0x61); db(0x00); db(0xfd); db(0x4a); - 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(0x14); db(0x45); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); - db(0xff); db(0x24); db(0x23); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xfa); - db(0xff); db(0x1c); 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); - db(0xff); db(0x58); db(0x30); db(0x3a); db(0x0a); db(0xd0); db(0x67); db(0x04); - db(0x61); db(0x00); db(0x0a); db(0x6e); db(0x4c); db(0xdf); db(0x03); db(0x03); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xf2); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x24); db(0x48); db(0x26); db(0x49); db(0x20); db(0x3c); - db(0x00); db(0x00); db(0x00); db(0xbe); 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(0x70); db(0x00); 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(0x13); db(0xd5); 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); db(0x7f); db(0x7e); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x24); db(0x48); db(0x0c); db(0x9a); db(0x00); db(0x00); db(0x03); db(0xf3); - db(0x66); db(0x00); db(0x00); db(0xe4); db(0x50); db(0x8a); db(0x2e); db(0x2a); - db(0x00); db(0x04); db(0x9e); db(0x92); db(0x50); db(0x8a); db(0x52); db(0x87); - db(0x26); db(0x4a); db(0x20); db(0x07); db(0xd0); db(0x80); db(0xd0); db(0x80); - db(0xd7); db(0xc0); db(0x28); db(0x4a); db(0x9b); db(0xcd); db(0x7c); db(0x00); - db(0x24); db(0x12); db(0x72); db(0x01); db(0x08); db(0x02); db(0x00); db(0x1e); - db(0x67); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x01); db(0x08); db(0xc1); - db(0x00); db(0x10); db(0xe5); db(0x8a); db(0x20); db(0x02); db(0x66); db(0x04); - db(0x42); db(0x9a); db(0x60); db(0x1e); db(0x50); db(0x80); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa0); - db(0x20); db(0x40); db(0x20); db(0xc2); db(0x24); db(0xc8); db(0x22); db(0x0d); - db(0x67); db(0x06); db(0x20); db(0x08); db(0xe4); db(0x88); db(0x2a); db(0x80); - db(0x2a); db(0x48); db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0xc0); - db(0x7c); db(0x00); db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); - db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); db(0x26); db(0x1b); - db(0x28); db(0x1b); db(0xe5); db(0x8c); db(0x0c); db(0x83); db(0x00); db(0x00); - db(0x03); db(0xe9); db(0x67); db(0x08); db(0x0c); db(0x83); db(0x00); db(0x00); - db(0x03); db(0xea); db(0x66); db(0x0c); db(0x20); db(0x04); db(0x4a); db(0x80); - db(0x67); db(0x0e); db(0x10); db(0xdb); db(0x53); db(0x80); db(0x60); db(0xf6); - db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xeb); db(0x66); db(0x4e); - db(0x26); db(0x1b); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xec); - db(0x66); db(0x28); db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); - db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); db(0x20); db(0x1b); - db(0x67); db(0xe6); db(0x22); db(0x1b); db(0xd2); db(0x81); db(0xd2); db(0x81); - db(0x26); db(0x34); db(0x18); db(0x00); db(0x58); db(0x83); db(0x24); db(0x1b); - db(0xd7); db(0xb0); db(0x28); db(0x00); db(0x53); db(0x80); db(0x66); db(0xf6); - db(0x60); db(0xe4); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xf2); - db(0x66); db(0x14); db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0x00); - db(0xff); db(0x8a); db(0x7e); db(0x01); db(0x20); db(0x54); db(0x20); db(0x07); - db(0x4c); db(0xdf); db(0x7e); db(0xfe); db(0x4e); db(0x75); db(0x7e); db(0x00); - db(0x60); db(0xf4); 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(0x13); db(0x27); 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(0x12); db(0xfd); db(0x25); db(0x48); - db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x12); db(0x79); 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); db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x47); db(0x02); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x01); db(0x02); db(0x2e); db(0x00); - db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x67); db(0x7c); db(0x2c); db(0x6b); - db(0x00); db(0xa0); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); - db(0x65); db(0x3e); db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x66); - db(0x02); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x62); - db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x0a); db(0x41); db(0xeb); - db(0x00); db(0x20); db(0x22); db(0x08); db(0x4e); db(0xae); db(0xfd); db(0x5a); - db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); - db(0x00); db(0x9e); db(0x66); db(0x0c); db(0x50); db(0xeb); db(0x00); db(0x9e); - db(0x22); db(0x2b); db(0x00); db(0xb4); db(0x4e); db(0xae); db(0xfd); db(0x5a); - db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x6c); db(0x60); db(0x32); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); - db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x08); db(0x41); db(0xeb); - db(0x00); db(0x20); db(0x61); db(0x00); db(0x00); db(0xac); db(0x08); db(0x07); - db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); - db(0x66); db(0x0c); db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x20); db(0x6b); - db(0x00); db(0xb4); db(0x61); db(0x00); db(0x00); db(0x94); db(0x4e); db(0xae); - db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x40); db(0x80); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0x01); db(0x22); db(0x2e); db(0x00); db(0x2c); db(0x6b); - db(0x00); db(0xa0); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); - db(0x65); db(0x3e); db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x66); - db(0x02); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x62); - db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x0a); db(0x41); db(0xeb); - db(0x00); db(0x20); db(0x22); db(0x08); db(0x4e); db(0xae); db(0xfd); db(0x60); - db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); - db(0x00); db(0x9e); db(0x67); db(0x0c); db(0x42); db(0x2b); db(0x00); db(0x9e); - db(0x22); db(0x2b); db(0x00); db(0xb4); db(0x4e); db(0xae); db(0xfd); db(0x60); - db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x6c); db(0x60); db(0x32); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); - db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x08); db(0x41); db(0xeb); - db(0x00); db(0x20); db(0x61); db(0x00); db(0x00); db(0x44); db(0x08); db(0x07); - db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); - db(0x67); db(0x0c); db(0x42); db(0x2b); db(0x00); db(0x9e); db(0x20); db(0x6b); - db(0x00); db(0xb4); db(0x61); db(0x00); db(0x00); db(0x2c); db(0x4e); db(0xae); - db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x44); db(0x80); db(0x4e); db(0x75); - db(0x22); db(0x48); db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); - db(0x00); db(0x22); db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); - db(0xd1); db(0xc8); db(0x22); db(0xa8); db(0x00); db(0x04); db(0x20); db(0x09); - db(0xe4); db(0x88); db(0x21); db(0x40); db(0x00); db(0x04); db(0x4e); db(0x75); - db(0x24); db(0x48); db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); - db(0x00); db(0x22); db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); - db(0xd1); db(0xc8); db(0x22); db(0x68); db(0x00); db(0x04); db(0xd3); db(0xc9); - db(0xd3); db(0xc9); db(0xb3); db(0xca); db(0x66); db(0x06); db(0x21); db(0x52); - db(0x00); db(0x04); db(0x60); db(0x18); db(0x20); db(0x09); db(0x67); db(0x0e); - db(0x20); db(0x11); db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xb5); db(0xc0); - db(0x67); db(0x04); db(0x22); db(0x40); db(0x60); db(0xee); db(0x20); db(0x09); - db(0x67); db(0x02); db(0x22); db(0x92); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0x20); db(0x22); db(0x74); db(0x16); db(0x9f); db(0xc2); db(0x24); db(0x4f); - db(0x32); db(0x02); db(0x42); db(0x32); db(0x10); db(0xff); db(0x53); db(0x41); - db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x72); db(0x0f); - db(0x4a); db(0x80); db(0x67); db(0x02); db(0x72); db(0x10); db(0x15); db(0x41); - db(0x00); db(0x04); db(0x35); db(0x7c); db(0x08); db(0x00); db(0x00); db(0x08); - db(0x22); db(0x6b); db(0x00); db(0xa4); 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(0x22); db(0x6b); db(0x00); db(0xa8); - 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(0x6b); db(0x00); db(0xa8); 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(0x6b); db(0x00); db(0xa4); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0xdf); db(0xc2); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); - db(0x4a); db(0x00); db(0x67); db(0x26); db(0x4a); db(0x2b); db(0x00); db(0x4c); - db(0x66); db(0x36); db(0x70); db(0x00); db(0x4a); db(0x33); db(0x00); db(0x4d); - db(0x67); db(0x04); db(0x52); db(0x00); db(0x60); db(0xf6); db(0x17); db(0x40); - db(0x00); db(0x4c); db(0x67); db(0x24); db(0x20); db(0x01); db(0x61); db(0x00); - db(0xfd); db(0xf2); db(0x70); db(0x01); db(0x61); db(0x00); db(0xff); db(0x60); - db(0x60); db(0x16); db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x67); db(0x10); - db(0x42); db(0x2b); db(0x00); db(0x4c); db(0x20); db(0x01); db(0x61); db(0x00); - db(0xfe); db(0x68); db(0x70); db(0x00); db(0x61); db(0x00); db(0xff); db(0x48); - db(0x4e); db(0x75); db(0x4a); db(0xac); db(0x00); db(0x14); db(0x67); db(0x0a); - db(0x70); db(0x00); db(0x72); db(0x01); db(0x61); db(0x00); db(0xff); db(0xb2); - db(0x4e); db(0x75); db(0x70); db(0x01); db(0x72); db(0x03); db(0x61); db(0x00); - db(0xff); db(0xa8); db(0x4e); db(0x75); db(0x10); db(0x2b); db(0x00); db(0xac); - db(0x6b); db(0x0a); db(0x70); db(0x01); db(0x72); db(0x03); db(0x61); db(0x00); - db(0xff); db(0x98); 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(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(0x4c); db(0x2a); db(0x50); - db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x04); db(0x42); - 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(0x76); - 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(0x04); db(0x02); - 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(0xe8); 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(0xf2); - 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(0x7c); - db(0x4a); db(0x83); db(0x6b); db(0x00); db(0xf8); db(0xf0); db(0x30); db(0x3c); - db(0xff); db(0x18); db(0x61); db(0x00); db(0x03); db(0x9c); 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(0x20); 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(0x0d); db(0xf6); 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(0x0d); db(0xf1); - 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(0x0d); db(0xdf); 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(0xfe); db(0x0a); 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(0x0d); db(0x46); 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(0x41); db(0xfa); db(0x0c); db(0x2e); - db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0x84); - db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); db(0x0c); db(0x2b); - db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0x74); - 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(0xb2); - db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); db(0x70); db(0x01); - db(0x61); db(0x00); db(0xfa); db(0x38); db(0x08); db(0x02); db(0x00); db(0x01); - db(0x67); db(0x06); db(0x70); db(0x01); db(0x61); db(0x00); db(0xfb); db(0xa0); - db(0x60); db(0x00); db(0x00); db(0xf8); 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(0x4e); db(0xae); db(0xfd); db(0x96); db(0x30); db(0x3c); db(0xff); db(0x80); + db(0x61); db(0x00); db(0x0b); db(0x12); db(0x4e); db(0x90); db(0x4a); db(0x81); + db(0x67); db(0x36); db(0x24); db(0x49); db(0x4e); db(0xae); db(0xff); db(0x88); + db(0x41); db(0xee); db(0x01); db(0x42); db(0x20); db(0x50); db(0x4a); db(0x90); + db(0x67); db(0x26); db(0x20); db(0x28); db(0x00); db(0x14); db(0x42); db(0x40); + db(0xb5); db(0xc0); db(0x66); db(0xf0); db(0x30); db(0x28); db(0x00); db(0x0e); + db(0x02); db(0x40); db(0xff); db(0xfb); db(0x00); db(0x40); db(0x01); db(0x03); + db(0x31); db(0x40); db(0x00); db(0x0e); db(0x43); db(0xfa); db(0x16); db(0x53); + db(0x21); db(0x49); db(0x00); db(0x0a); db(0x4e); db(0xae); db(0xff); db(0x82); + db(0x41); db(0xfa); db(0x15); db(0xc6); db(0x43); db(0xfa); db(0x00); db(0x54); + db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0b); db(0xa4); db(0x22); db(0x40); + db(0x72); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00); + db(0x0a); db(0xbc); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x22); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x24); db(0x00); db(0x28); db(0x01); db(0x26); db(0x09); + db(0x24); db(0x48); db(0x43); db(0xfa); db(0x15); db(0xc0); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x67); db(0x14); + db(0x2c); db(0x40); db(0x22); db(0x0a); db(0xe4); db(0x8b); 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(0x4c); db(0xdf); db(0x44); db(0x1c); + db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); 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(0xd2); 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(0x8a); db(0x22); db(0x4c); db(0x70); db(0x26); db(0x4e); db(0xae); - db(0xff); db(0x2e); db(0x60); db(0x00); db(0xff); db(0x80); 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(0x62); 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(0x0c); db(0x28); db(0x43); db(0x61); db(0x04); db(0x60); db(0x00); - db(0xff); db(0x04); 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(0x12); db(0x61); db(0x00); db(0xfb); db(0x7a); 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(0xf3); db(0x92); db(0x02); db(0x80); db(0x00); db(0x00); - db(0xff); db(0xff); db(0xd1); db(0xc0); 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(0x78); 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(0xb0); - 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(0x78); - db(0x00); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x24); db(0x24); db(0x40); - db(0x24); db(0x01); db(0x66); db(0x02); db(0x74); db(0x30); db(0x20); db(0x02); + db(0x41); db(0xfa); db(0x15); db(0x71); db(0x43); db(0xfa); db(0x00); db(0x16); + db(0x70); db(0x0f); db(0x22); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40); + db(0x61); db(0x00); db(0xff); db(0xa8); db(0x60); db(0xdc); 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(0x44); db(0x4e); db(0x90); db(0x22); db(0x00); db(0x6b); db(0x04); + db(0x61); db(0x00); db(0x07); db(0x8a); 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(0x2a); 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(0x0a); db(0x14); 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); + db(0xfe); db(0xbc); db(0x60); db(0xd6); db(0x0c); db(0x40); db(0x00); db(0x03); + db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x86); db(0x60); db(0xca); + db(0x0c); db(0x40); db(0x00); db(0x04); db(0x6e); db(0x06); db(0x4e); db(0xae); + db(0xff); db(0x4c); db(0x60); db(0xbe); db(0x0c); db(0x40); db(0x00); db(0x05); + db(0x6e); db(0x46); db(0x48); db(0xe7); db(0x00); db(0xc0); db(0x70); db(0x26); 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(0x31); 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(0x30); db(0x22); db(0x24); db(0x48); - db(0x24); db(0x00); db(0x26); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x61); db(0x00); db(0xff); db(0x6a); db(0x22); db(0x03); db(0x61); db(0x00); - db(0xff); db(0xb2); db(0x67); db(0x18); db(0x20); db(0x4a); db(0x22); db(0x40); - db(0x24); db(0x40); db(0x20); db(0x02); 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(0x0c); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x32); - db(0x2c); db(0x78); 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(0xff); db(0x3a); db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x40); + db(0x15); db(0x7c); db(0x00); db(0x08); db(0x00); db(0x08); db(0x25); db(0x48); + db(0x00); db(0x0e); db(0x35); db(0x7c); db(0x00); db(0x26); db(0x00); db(0x12); + db(0x25); db(0x7c); db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); + 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(0x86); + 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(0x61); db(0x00); db(0xfd); db(0x06); 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(0x14); db(0x45); db(0x23); db(0x48); + db(0x00); db(0x0a); db(0x41); db(0xfa); db(0xff); db(0x24); db(0x23); db(0x48); + db(0x00); db(0x0e); db(0x41); db(0xfa); db(0xff); db(0x1c); 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); db(0xff); db(0x58); db(0x30); db(0x3a); + db(0x0a); db(0xd0); db(0x67); db(0x04); db(0x61); db(0x00); db(0x0a); db(0x6e); + db(0x4c); db(0xdf); db(0x03); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0xc0); db(0xf2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); + db(0x26); db(0x49); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xbe); 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(0x41); db(0xfa); db(0x09); db(0x9a); db(0x43); db(0xfa); db(0x01); db(0x5c); - db(0x70); db(0x13); db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); - db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x33); db(0x7c); db(0x00); db(0x0a); + db(0xff); db(0x3a); db(0x20); db(0x40); db(0x70); db(0x00); 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(0x13); db(0xd5); 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); db(0x7f); db(0x7e); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); db(0x0c); db(0x9a); + db(0x00); db(0x00); db(0x03); db(0xf3); db(0x66); db(0x00); db(0x00); db(0xe4); + db(0x50); db(0x8a); db(0x2e); db(0x2a); db(0x00); db(0x04); db(0x9e); db(0x92); + db(0x50); db(0x8a); db(0x52); db(0x87); db(0x26); db(0x4a); db(0x20); db(0x07); + db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xd7); db(0xc0); db(0x28); db(0x4a); + db(0x9b); db(0xcd); db(0x7c); db(0x00); db(0x24); db(0x12); db(0x72); db(0x01); + db(0x08); db(0x02); db(0x00); db(0x1e); db(0x67); db(0x04); db(0x08); db(0xc1); + db(0x00); db(0x01); db(0x08); db(0xc1); db(0x00); db(0x10); db(0xe5); db(0x8a); + db(0x20); db(0x02); db(0x66); db(0x04); db(0x42); db(0x9a); db(0x60); db(0x1e); + db(0x50); db(0x80); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); + db(0x67); db(0x00); db(0x00); db(0xa0); db(0x20); db(0x40); db(0x20); db(0xc2); + db(0x24); db(0xc8); db(0x22); db(0x0d); db(0x67); db(0x06); db(0x20); db(0x08); + db(0xe4); db(0x88); db(0x2a); db(0x80); db(0x2a); db(0x48); db(0x52); db(0x86); + db(0xbe); db(0x86); db(0x66); db(0xc0); db(0x7c); db(0x00); db(0x22); db(0x06); + db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x20); db(0x74); db(0x18); db(0x00); + db(0x58); db(0x88); db(0x26); db(0x1b); db(0x28); db(0x1b); db(0xe5); db(0x8c); + db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xe9); db(0x67); db(0x08); + db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xea); db(0x66); db(0x0c); + db(0x20); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x10); db(0xdb); + db(0x53); db(0x80); db(0x60); db(0xf6); db(0x0c); db(0x83); db(0x00); db(0x00); + db(0x03); db(0xeb); db(0x66); db(0x4e); db(0x26); db(0x1b); db(0x0c); db(0x83); + db(0x00); db(0x00); db(0x03); db(0xec); db(0x66); db(0x28); db(0x22); db(0x06); + db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x20); db(0x74); db(0x18); db(0x00); + db(0x58); db(0x88); db(0x20); db(0x1b); db(0x67); db(0xe6); db(0x22); db(0x1b); + db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x26); db(0x34); db(0x18); db(0x00); + db(0x58); db(0x83); db(0x24); db(0x1b); db(0xd7); db(0xb0); db(0x28); db(0x00); + db(0x53); db(0x80); db(0x66); db(0xf6); db(0x60); db(0xe4); db(0x0c); db(0x83); + db(0x00); db(0x00); db(0x03); db(0xf2); db(0x66); db(0x14); db(0x52); db(0x86); + db(0xbe); db(0x86); db(0x66); db(0x00); db(0xff); db(0x8a); db(0x7e); db(0x01); + db(0x20); db(0x54); db(0x20); db(0x07); db(0x4c); db(0xdf); db(0x7e); db(0xfe); + db(0x4e); db(0x75); db(0x7e); db(0x00); db(0x60); db(0xf4); 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(0x13); db(0x27); + 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(0x12); db(0xfd); db(0x25); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); + db(0x12); db(0x79); 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); db(0x20); db(0x08); + db(0x4c); db(0xdf); db(0x47); db(0x02); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x01); db(0x02); db(0x2e); db(0x00); db(0x4a); db(0x2b); db(0x00); db(0x4c); + db(0x67); db(0x7c); db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x0c); db(0x6e); + db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x3e); db(0x72); db(0x0e); + db(0x4e); db(0xae); db(0xfd); db(0x66); db(0x02); db(0x80); db(0xff); db(0xff); + db(0xff); db(0xfe); db(0x67); db(0x62); db(0x08); db(0x07); db(0x00); db(0x00); + db(0x67); db(0x0a); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x22); db(0x08); + db(0x4e); db(0xae); db(0xfd); db(0x5a); db(0x08); db(0x07); db(0x00); db(0x01); + db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x66); db(0x0c); + db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x22); db(0x2b); db(0x00); db(0xb4); + db(0x4e); db(0xae); db(0xfd); db(0x5a); db(0x72); db(0x0e); db(0x4e); db(0xae); + db(0xfd); db(0x6c); db(0x60); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x08); db(0x07); db(0x00); db(0x00); + db(0x67); db(0x08); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x61); db(0x00); + db(0x00); db(0xac); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); + db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x66); db(0x0c); db(0x50); db(0xeb); + db(0x00); db(0x9e); db(0x20); db(0x6b); db(0x00); db(0xb4); db(0x61); db(0x00); + db(0x00); db(0x94); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf); + db(0x40); db(0x80); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x01); db(0x22); + db(0x2e); db(0x00); db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x0c); db(0x6e); + db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x3e); db(0x72); db(0x0e); + db(0x4e); db(0xae); db(0xfd); db(0x66); db(0x02); db(0x80); db(0xff); db(0xff); + db(0xff); db(0xfe); db(0x67); db(0x62); db(0x08); db(0x07); db(0x00); db(0x00); + db(0x67); db(0x0a); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x22); db(0x08); + db(0x4e); db(0xae); db(0xfd); db(0x60); db(0x08); db(0x07); db(0x00); db(0x01); + db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x67); db(0x0c); + db(0x42); db(0x2b); db(0x00); db(0x9e); db(0x22); db(0x2b); db(0x00); db(0xb4); + db(0x4e); db(0xae); db(0xfd); db(0x60); db(0x72); db(0x0e); db(0x4e); db(0xae); + db(0xfd); db(0x6c); db(0x60); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x08); db(0x07); db(0x00); db(0x00); + db(0x67); db(0x08); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x61); db(0x00); + db(0x00); db(0x44); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); + db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x67); db(0x0c); db(0x42); db(0x2b); + db(0x00); db(0x9e); db(0x20); db(0x6b); db(0x00); db(0xb4); db(0x61); db(0x00); + db(0x00); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf); + db(0x44); db(0x80); db(0x4e); db(0x75); db(0x22); db(0x48); db(0x20); db(0x6b); + db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); db(0x20); db(0x68); + db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x22); db(0xa8); + db(0x00); db(0x04); db(0x20); db(0x09); db(0xe4); db(0x88); db(0x21); db(0x40); + db(0x00); db(0x04); db(0x4e); db(0x75); db(0x24); db(0x48); db(0x20); db(0x6b); + db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); db(0x20); db(0x68); + db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x22); db(0x68); + db(0x00); db(0x04); db(0xd3); db(0xc9); db(0xd3); db(0xc9); db(0xb3); db(0xca); + db(0x66); db(0x06); db(0x21); db(0x52); db(0x00); db(0x04); db(0x60); db(0x18); + db(0x20); db(0x09); db(0x67); db(0x0e); db(0x20); db(0x11); db(0xd0); db(0x80); + db(0xd0); db(0x80); db(0xb5); db(0xc0); db(0x67); db(0x04); db(0x22); db(0x40); + db(0x60); db(0xee); db(0x20); db(0x09); db(0x67); db(0x02); db(0x22); db(0x92); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x74); db(0x16); + db(0x9f); db(0xc2); db(0x24); db(0x4f); db(0x32); db(0x02); db(0x42); db(0x32); + db(0x10); db(0xff); db(0x53); db(0x41); db(0x66); db(0xf8); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x72); db(0x0f); db(0x4a); db(0x80); db(0x67); db(0x02); + db(0x72); db(0x10); db(0x15); db(0x41); db(0x00); db(0x04); db(0x35); db(0x7c); + db(0x08); db(0x00); db(0x00); db(0x08); db(0x22); db(0x6b); db(0x00); db(0xa4); + 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(0x22); db(0x6b); db(0x00); db(0xa8); 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(0x02); db(0x0c); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x22); db(0x6b); db(0x00); db(0xa8); 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(0x02); db(0x08); - db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); - db(0xfe); db(0x38); db(0x4e); db(0x75); db(0x42); db(0xaa); db(0x00); db(0x0e); - db(0x42); db(0xaa); db(0x00); db(0x12); db(0x22); db(0x6d); db(0x02); db(0x08); - db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); - db(0xfe); db(0x38); db(0x4e); db(0x75); db(0x00); db(0x00); db(0xff); db(0xff); - db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); + db(0x00); db(0x24); db(0x00); db(0x12); db(0x22); db(0x6b); db(0x00); db(0xa4); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0xdf); db(0xc2); db(0x4c); db(0xdf); + db(0x44); db(0x04); db(0x4e); db(0x75); db(0x4a); db(0x00); db(0x67); db(0x26); + db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x66); db(0x36); db(0x70); db(0x00); + db(0x4a); db(0x33); db(0x00); db(0x4d); db(0x67); db(0x04); db(0x52); db(0x00); + db(0x60); db(0xf6); db(0x17); db(0x40); db(0x00); db(0x4c); db(0x67); db(0x24); + db(0x20); db(0x01); db(0x61); db(0x00); db(0xfd); db(0xf2); db(0x70); db(0x01); + db(0x61); db(0x00); db(0xff); db(0x60); db(0x60); db(0x16); db(0x4a); db(0x2b); + db(0x00); db(0x4c); db(0x67); db(0x10); db(0x42); db(0x2b); db(0x00); db(0x4c); + db(0x20); db(0x01); db(0x61); db(0x00); db(0xfe); db(0x68); db(0x70); db(0x00); + db(0x61); db(0x00); db(0xff); db(0x48); db(0x4e); db(0x75); db(0x4a); db(0xac); + db(0x00); db(0x14); db(0x67); db(0x0a); db(0x70); db(0x00); db(0x72); db(0x01); + db(0x61); db(0x00); db(0xff); db(0xb2); db(0x4e); db(0x75); db(0x70); db(0x01); + db(0x72); db(0x03); db(0x61); db(0x00); db(0xff); db(0xa8); db(0x4e); db(0x75); + db(0x10); db(0x2b); db(0x00); db(0xac); db(0x6b); db(0x0a); db(0x70); db(0x01); + db(0x72); db(0x03); db(0x61); db(0x00); db(0xff); db(0x98); 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(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(0x4c); db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28); + db(0x61); db(0x00); db(0x04); db(0x42); 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(0x76); 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(0x04); db(0x02); 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(0xe8); 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(0xf2); 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(0x7c); db(0x4a); db(0x83); db(0x6b); db(0x00); + db(0xf8); db(0xf0); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); + db(0x03); db(0x9c); 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(0xf6); db(0xdc); 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(0x0d); db(0xf6); + 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(0x0d); db(0xf1); 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(0x0d); db(0xdf); 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(0xfe); db(0x0a); + 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(0x0d); db(0x46); + 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(0x41); db(0xfa); db(0x0c); db(0x2e); db(0x70); db(0x00); db(0x72); db(0x00); + db(0x61); db(0x00); db(0x02); db(0x84); db(0x27); db(0x40); db(0x00); db(0xa4); + db(0x41); db(0xfa); db(0x0c); db(0x2b); db(0x70); db(0x00); db(0x72); db(0x00); + db(0x61); db(0x00); db(0x02); db(0x74); 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(0xb2); db(0x70); db(0x00); db(0x4e); db(0x90); + db(0x24); db(0x00); db(0x70); db(0x01); db(0x61); db(0x00); db(0xfa); db(0x38); + db(0x08); db(0x02); db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); + db(0x61); db(0x00); db(0xfb); db(0xa0); db(0x60); db(0x00); db(0x00); db(0xf8); + 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(0x0d); + 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(0xd2); 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(0x8a); db(0x22); db(0x4c); + db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); + db(0xff); db(0x80); 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(0x62); + 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(0x0c); db(0x28); db(0x43); + db(0x61); db(0x04); db(0x60); db(0x00); db(0xff); db(0x04); 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(0x12); db(0x61); db(0x00); + db(0xfb); db(0x7a); 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(0xf3); db(0x4e); + db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff); db(0xd1); db(0xc0); + 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(0x78); 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(0xb0); 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(0x78); db(0x00); db(0x04); db(0x4a); db(0x80); + db(0x67); db(0x24); db(0x24); db(0x40); db(0x24); db(0x01); db(0x66); db(0x02); + 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(0x31); 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(0x30); db(0x22); db(0x24); db(0x48); db(0x24); db(0x00); db(0x26); db(0x01); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x6a); + db(0x22); db(0x03); db(0x61); db(0x00); db(0xff); db(0xb2); db(0x67); db(0x18); + db(0x20); db(0x4a); db(0x22); db(0x40); db(0x24); db(0x40); db(0x20); db(0x02); + 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(0x0c); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0x38); db(0x32); db(0x2c); db(0x78); 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(0x41); db(0xfa); db(0x09); db(0x9a); + db(0x43); db(0xfa); db(0x01); db(0x5c); db(0x70); db(0x13); db(0x61); db(0x00); + db(0xff); db(0x98); db(0x4e); db(0x75); db(0x22); db(0x6d); db(0x02); db(0x0c); + 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(0x02); db(0x0c); 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(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); + db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); + db(0x42); db(0xaa); db(0x00); db(0x0e); db(0x42); db(0xaa); db(0x00); db(0x12); + db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); + db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); + db(0x00); db(0x00); db(0xff); db(0xff); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x48); db(0xe7); db(0xf8); db(0xfe); db(0x2a); db(0x48); db(0x95); db(0xca); - db(0x97); db(0xcb); db(0x99); db(0xcc); db(0x78); db(0x00); db(0x2c); db(0x6d); - db(0x00); db(0x18); db(0x20); db(0x6d); db(0x00); db(0x14); db(0x20); db(0x28); - db(0x00); db(0x3c); db(0x67); db(0x5c); db(0x20); db(0x40); db(0x41); db(0xe8); - db(0x00); db(0x2c); db(0x28); db(0x48); db(0x4e); db(0xae); db(0xfc); db(0xe8); - db(0x72); db(0xff); db(0x74); db(0xff); db(0xb2); db(0x80); db(0x67); db(0x48); - db(0x26); db(0x00); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x41); db(0xed); - db(0x00); db(0xc0); db(0x70); db(0x66); db(0x4e); db(0xae); db(0xff); db(0x7c); - db(0x41); db(0xed); db(0x00); db(0xc0); db(0x38); db(0x28); db(0x00); db(0x64); - db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x91); db(0xc8); db(0x43); db(0xed); - db(0x00); db(0x38); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); - db(0x22); db(0x3c); db(0x80); db(0x00); db(0x10); db(0x00); db(0x24); db(0x03); - db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x72); db(0xff); db(0x74); db(0xff); - db(0x4a); db(0x80); db(0x6b); db(0x0c); db(0x45); db(0xed); db(0x00); db(0x38); - db(0x22); db(0x2a); db(0x00); db(0x32); db(0x24); db(0x2a); db(0x00); db(0x36); - db(0x20); db(0x2c); db(0x00); db(0x1c); db(0xb8); db(0x6d); db(0x00); db(0x2c); - db(0x66); db(0x12); db(0xb0); db(0xad); db(0x00); db(0x28); db(0x66); db(0x0c); - db(0xb2); db(0xad); db(0x00); db(0x20); db(0x66); db(0x06); db(0xb4); db(0xad); - db(0x00); db(0x24); db(0x67); db(0x40); db(0x2b); db(0x40); db(0x00); db(0x28); - db(0x2b); db(0x41); db(0x00); db(0x20); db(0x2b); db(0x42); db(0x00); db(0x24); - db(0x3b); db(0x44); db(0x00); db(0x2c); db(0x91); db(0xc8); db(0x43); db(0xed); - db(0x00); db(0x90); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); - db(0x22); db(0x3c); db(0x80); db(0x00); db(0x00); db(0x00); db(0x24); db(0x03); - db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x4a); db(0x80); db(0x6b); db(0x04); - db(0x47); db(0xed); db(0x00); db(0x90); db(0x34); db(0x2d); db(0x00); db(0x2c); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x01); db(0x61); db(0x00); - db(0xfd); db(0x70); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0x1f); - db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x3e); db(0x2e); - db(0x00); db(0x14); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); - db(0x7c); db(0x00); db(0x01); db(0xc6); 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(0x30); db(0x3c); - db(0x02); db(0x10); 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(0x47); db(0xed); - db(0x00); db(0x16); db(0x27); db(0x4e); db(0x00); db(0x10); db(0x27); db(0x4c); - db(0x00); db(0x08); db(0x27); db(0x46); db(0x00); db(0x0c); db(0x70); db(0xff); - db(0x37); db(0x40); db(0x00); db(0x00); 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(0x07); db(0xde); - db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x02); db(0xda); - db(0x23); db(0x48); db(0x00); db(0x12); db(0x23); db(0x4d); db(0x00); db(0x0e); - db(0x70); db(0x05); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x20); db(0x06); - db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x70); db(0x00); db(0x53); db(0xab); - db(0x00); db(0x1c); db(0x6a); db(0x06); db(0x70); db(0x0a); db(0x27); db(0x40); - db(0x00); db(0x1c); db(0x4a); db(0xab); db(0x00); db(0x14); db(0x66); db(0x16); - db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xe0); db(0x43); db(0xfa); - db(0x07); db(0xfc); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); - db(0x27); db(0x40); db(0x00); db(0x14); db(0x67); db(0xd0); db(0x4a); db(0xab); - db(0x00); db(0x18); db(0x66); db(0x18); db(0x4a); db(0xab); db(0x00); db(0x1c); - db(0x66); db(0xc4); db(0x43); db(0xfa); db(0x07); db(0xf2); db(0x70); db(0x00); - db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x18); - db(0x67); db(0x00); db(0xff); db(0xb4); db(0x4a); db(0xad); db(0x02); db(0x08); - db(0x66); db(0x38); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xa6); - db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); - db(0x43); db(0xfa); db(0x06); db(0xd2); db(0x4e); db(0xae); db(0xfe); db(0xec); - db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); - db(0x67); db(0x8c); db(0x41); db(0xfa); db(0x06); db(0xc0); db(0x70); db(0x00); - db(0x72); db(0x00); db(0x61); db(0x00); db(0xfd); db(0x16); db(0x2b); db(0x40); - db(0x02); db(0x08); db(0x67); db(0x00); db(0x02); db(0x42); db(0x60); db(0x00); - db(0xff); db(0x76); db(0x4a); db(0xad); db(0x02); db(0x0c); db(0x66); db(0x48); - db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0x00); db(0xff); db(0x68); - db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); - db(0x43); db(0xfa); db(0x06); db(0x9f); db(0x4e); db(0xae); db(0xfe); db(0xec); - db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); - db(0x67); db(0x00); db(0xff); db(0x4c); db(0x41); db(0xfa); db(0x06); db(0x8b); - db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0xd4); - db(0x2b); db(0x40); db(0x02); db(0x0c); db(0x67); db(0x00); db(0x02); db(0x00); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x00); db(0x61); db(0x00); - db(0xfc); db(0x20); db(0x4e); db(0x90); db(0x60); db(0x00); db(0xff); db(0x28); - db(0x0c); db(0x47); db(0x00); db(0x24); db(0x65); db(0x12); db(0x53); db(0xab); - db(0x00); db(0x34); db(0x6a); db(0x0c); db(0x20); db(0x4b); db(0x61); db(0x00); - db(0xfd); db(0xc8); db(0x70); db(0x32); db(0x27); db(0x40); db(0x00); db(0x34); - db(0x22); db(0x6d); db(0x02); db(0x08); db(0x45); db(0xed); db(0x01); db(0x3c); - 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(0x10); db(0x3a); db(0xfd); db(0x78); db(0x0c); db(0x47); - db(0x00); db(0x27); db(0x65); db(0x00); db(0x01); db(0x62); db(0x08); db(0x00); - db(0x00); db(0x01); db(0x67); db(0x00); db(0x01); db(0x5a); db(0x41); db(0xed); - db(0x01); db(0x68); db(0x25); db(0x48); db(0x00); db(0x0a); db(0x15); db(0x7c); - db(0x00); db(0x13); db(0x00); db(0x04); db(0x15); db(0x7c); db(0x00); db(0x03); - db(0x00); db(0x05); db(0x42); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); - db(0x42); db(0x6a); db(0x00); db(0x06); db(0x42); db(0xa8); db(0x00); db(0x08); - db(0x42); db(0x68); db(0x00); db(0x0c); db(0x22); db(0x3a); db(0xfd); db(0x60); - db(0x02); db(0x41); db(0x00); db(0x07); db(0x70); db(0x07); db(0x90); db(0x41); - db(0xe1); db(0x48); db(0xe9); db(0x48); db(0x35); db(0x40); db(0x00); db(0x08); - db(0x31); db(0x7a); db(0xfd); db(0x34); db(0x00); db(0x0e); db(0x42); db(0x68); - db(0x00); db(0x10); db(0x31); db(0x7a); db(0xfd); db(0x2c); db(0x00); db(0x12); - db(0x42); db(0x68); db(0x00); db(0x14); db(0x31); db(0x7a); db(0xfd); db(0x1a); - db(0x00); db(0x16); db(0x42); db(0x68); db(0x00); db(0x18); db(0x31); db(0x7a); - db(0xfd); db(0x12); db(0x00); db(0x1a); db(0x43); db(0xed); db(0x01); db(0x88); - db(0x21); db(0x49); db(0x00); db(0x1c); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x06); db(0x30); db(0x3a); db(0xfd); db(0x18); db(0x48); db(0xc0); - db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x07); db(0x22); db(0xfa); db(0xfd); db(0x0a); db(0x70); db(0x00); - db(0x30); db(0x3a); db(0xfc); db(0xf2); db(0x6b); db(0x08); db(0x22); db(0xfc); - db(0x80); db(0x03); db(0xa0); db(0x09); db(0x22); db(0xc0); db(0x30); db(0x3a); - db(0xfc); db(0xe6); db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x0a); db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xce); - db(0x6b); db(0x14); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x02); - db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xc6); db(0x22); db(0xfc); - db(0x80); db(0x03); db(0xa0); db(0x01); db(0x22); db(0xc0); db(0x30); db(0x3a); - db(0xfc); db(0xc0); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x03); db(0x30); db(0x3a); db(0xfc); db(0xba); db(0x48); db(0xc0); - db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xac); - db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x04); - db(0x30); db(0x3a); db(0xfc); db(0xa6); db(0x48); db(0xc0); db(0xe1); db(0x80); - db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0x98); db(0x6b); db(0x10); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x05); db(0x30); db(0x3a); - db(0xfc); db(0x92); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); - db(0x70); db(0x00); db(0x30); db(0x3a); db(0xfc); db(0x8e); db(0x6b); db(0x08); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x08); db(0x22); db(0xc0); - db(0x42); db(0x91); db(0x61); db(0x00); db(0xfc); db(0x40); db(0x36); db(0x3c); - db(0x00); db(0x68); db(0x74); db(0x01); db(0x28); db(0x3a); db(0xfc); db(0x70); - db(0x20); db(0x04); db(0xc0); db(0x82); db(0x22); db(0x2b); db(0x00); db(0x04); - db(0xc2); db(0x82); db(0xb2); db(0x80); db(0x67); db(0x22); db(0x42); db(0x92); - db(0x35); db(0x7c); db(0x02); db(0x00); db(0x00); db(0x04); db(0x42); db(0xaa); - db(0x00); db(0x0a); db(0x32); db(0x03); db(0x4a); db(0x00); db(0x66); db(0x04); - db(0x08); db(0xc1); db(0x00); db(0x07); db(0x35); db(0x41); db(0x00); db(0x06); - db(0x42); db(0x6a); db(0x00); db(0x08); db(0x61); db(0x00); db(0xfc); db(0x06); - db(0x52); db(0x43); db(0xd4); db(0x42); db(0x0c); db(0x42); db(0x00); db(0x08); - db(0x66); db(0xc6); db(0x27); db(0x44); db(0x00); db(0x04); db(0x10); db(0x3a); - db(0xfc); db(0x0c); db(0x08); db(0x00); db(0x00); db(0x00); db(0x67); db(0x00); - db(0xfd); db(0x7e); db(0x42); db(0x92); db(0x35); db(0x7c); db(0x04); db(0x00); - db(0x00); db(0x04); db(0x42); db(0x6a); db(0x00); db(0x06); db(0x42); db(0x6a); - db(0x00); db(0x08); db(0x20); db(0x6b); db(0x00); db(0x14); db(0x30); db(0x3a); - db(0xfc); db(0x14); db(0x32); db(0x28); db(0x00); db(0x30); db(0xd2); db(0x41); + db(0x00); db(0x00); db(0x00); db(0x00); db(0x48); db(0xe7); db(0xf8); db(0xfe); + db(0x2a); db(0x48); db(0x95); db(0xca); db(0x97); db(0xcb); db(0x99); db(0xcc); + db(0x78); db(0x00); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x20); db(0x6d); + db(0x00); db(0x14); db(0x20); db(0x28); db(0x00); db(0x3c); db(0x67); db(0x5c); + db(0x20); db(0x40); db(0x41); db(0xe8); db(0x00); db(0x2c); db(0x28); db(0x48); + db(0x4e); db(0xae); db(0xfc); db(0xe8); db(0x72); db(0xff); db(0x74); db(0xff); + db(0xb2); db(0x80); db(0x67); db(0x48); db(0x26); db(0x00); db(0x2c); db(0x6d); + db(0x00); db(0x14); db(0x41); db(0xed); db(0x00); db(0xc0); db(0x70); db(0x66); + db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xed); db(0x00); db(0xc0); + db(0x38); db(0x28); db(0x00); db(0x64); db(0x2c); db(0x6d); db(0x00); db(0x18); + db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x38); db(0x70); db(0x00); + db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); db(0x80); db(0x00); + db(0x10); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); + db(0x72); db(0xff); db(0x74); db(0xff); db(0x4a); db(0x80); db(0x6b); db(0x0c); + db(0x45); db(0xed); db(0x00); db(0x38); db(0x22); db(0x2a); db(0x00); db(0x32); + db(0x24); db(0x2a); db(0x00); db(0x36); db(0x20); db(0x2c); db(0x00); db(0x1c); + db(0xb8); db(0x6d); db(0x00); db(0x2c); db(0x66); db(0x12); db(0xb0); db(0xad); + db(0x00); db(0x28); db(0x66); db(0x0c); db(0xb2); db(0xad); db(0x00); db(0x20); + db(0x66); db(0x06); db(0xb4); db(0xad); db(0x00); db(0x24); db(0x67); db(0x40); + db(0x2b); db(0x40); db(0x00); db(0x28); db(0x2b); db(0x41); db(0x00); db(0x20); + db(0x2b); db(0x42); db(0x00); db(0x24); db(0x3b); db(0x44); db(0x00); db(0x2c); + db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x90); db(0x70); db(0x00); + db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); db(0x80); db(0x00); + db(0x00); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); + db(0x4a); db(0x80); db(0x6b); db(0x04); db(0x47); db(0xed); db(0x00); db(0x90); + db(0x34); db(0x2d); db(0x00); db(0x2c); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x01); db(0x61); db(0x00); db(0xfd); db(0x70); db(0x4e); db(0x90); + db(0x4c); db(0xdf); db(0x7f); db(0x1f); db(0x4e); db(0x75); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x3e); db(0x2e); db(0x00); db(0x14); db(0x70); db(0xff); + db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x7c); db(0x00); db(0x01); db(0xc6); + 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(0x30); db(0x3c); db(0x02); db(0x10); 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(0x47); db(0xed); db(0x00); db(0x16); db(0x27); db(0x4e); + db(0x00); db(0x10); db(0x27); db(0x4c); db(0x00); db(0x08); db(0x27); db(0x46); + db(0x00); db(0x0c); db(0x70); db(0xff); db(0x37); db(0x40); db(0x00); db(0x00); + 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(0x07); db(0xde); db(0x23); db(0x48); db(0x00); db(0x0a); + db(0x41); db(0xfa); db(0x02); db(0xda); db(0x23); db(0x48); db(0x00); db(0x12); + db(0x23); db(0x4d); db(0x00); db(0x0e); db(0x70); db(0x05); db(0x4e); db(0xae); + db(0xff); db(0x58); db(0x20); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0xc2); + db(0x70); db(0x00); db(0x53); db(0xab); db(0x00); db(0x1c); db(0x6a); db(0x06); + db(0x70); db(0x0a); db(0x27); db(0x40); db(0x00); db(0x1c); db(0x4a); db(0xab); + db(0x00); db(0x14); db(0x66); db(0x16); db(0x4a); db(0xab); db(0x00); db(0x1c); + db(0x66); db(0xe0); db(0x43); db(0xfa); db(0x07); db(0xfc); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x14); + db(0x67); db(0xd0); db(0x4a); db(0xab); db(0x00); db(0x18); db(0x66); db(0x18); + db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xc4); db(0x43); db(0xfa); + db(0x07); db(0xf2); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x27); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); db(0xff); db(0xb4); + db(0x4a); db(0xad); db(0x02); db(0x08); db(0x66); db(0x38); db(0x4a); db(0xab); + db(0x00); db(0x1c); db(0x66); db(0xa6); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x06); db(0xd2); + db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x8c); db(0x41); db(0xfa); + db(0x06); db(0xc0); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); + db(0xfd); db(0x16); db(0x2b); db(0x40); db(0x02); db(0x08); db(0x67); db(0x00); + db(0x02); db(0x42); db(0x60); db(0x00); db(0xff); db(0x76); db(0x4a); db(0xad); + db(0x02); db(0x0c); db(0x66); db(0x48); db(0x4a); db(0xab); db(0x00); db(0x1c); + db(0x66); db(0x00); db(0xff); db(0x68); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x06); db(0x9f); + db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x00); db(0xff); db(0x4c); + db(0x41); db(0xfa); db(0x06); db(0x8b); db(0x70); db(0x00); db(0x72); db(0x00); + db(0x61); db(0x00); db(0xfc); db(0xd4); db(0x2b); db(0x40); db(0x02); db(0x0c); + db(0x67); db(0x00); db(0x02); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0x20); db(0x4e); db(0x90); + db(0x60); db(0x00); db(0xff); db(0x28); db(0x0c); db(0x47); db(0x00); db(0x24); + db(0x65); db(0x12); db(0x53); db(0xab); db(0x00); db(0x34); db(0x6a); db(0x0c); + db(0x20); db(0x4b); db(0x61); db(0x00); db(0xfd); db(0xc8); db(0x70); db(0x32); + db(0x27); db(0x40); db(0x00); db(0x34); db(0x22); db(0x6d); db(0x02); db(0x08); + db(0x45); db(0xed); db(0x01); db(0x3c); 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(0x10); db(0x3a); + db(0xfd); db(0x78); db(0x0c); db(0x47); db(0x00); db(0x27); db(0x65); db(0x00); + db(0x01); db(0x62); db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x00); + db(0x01); db(0x5a); db(0x41); db(0xed); db(0x01); db(0x68); db(0x25); db(0x48); + db(0x00); db(0x0a); db(0x15); db(0x7c); db(0x00); db(0x13); db(0x00); db(0x04); + db(0x15); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x05); db(0x42); db(0x90); + db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0x6a); db(0x00); db(0x06); + db(0x42); db(0xa8); db(0x00); db(0x08); db(0x42); db(0x68); db(0x00); db(0x0c); + db(0x22); db(0x3a); db(0xfd); db(0x60); db(0x02); db(0x41); db(0x00); db(0x07); + db(0x70); db(0x07); db(0x90); db(0x41); db(0xe1); db(0x48); db(0xe9); db(0x48); + db(0x35); db(0x40); db(0x00); db(0x08); db(0x31); db(0x7a); db(0xfd); db(0x34); + db(0x00); db(0x0e); db(0x42); db(0x68); db(0x00); db(0x10); db(0x31); db(0x7a); + db(0xfd); db(0x2c); db(0x00); db(0x12); db(0x42); db(0x68); db(0x00); db(0x14); + db(0x31); db(0x7a); db(0xfd); db(0x1a); db(0x00); db(0x16); db(0x42); db(0x68); + db(0x00); db(0x18); db(0x31); db(0x7a); db(0xfd); db(0x12); db(0x00); db(0x1a); + db(0x43); db(0xed); db(0x01); db(0x88); db(0x21); db(0x49); db(0x00); db(0x1c); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x06); db(0x30); db(0x3a); + db(0xfd); db(0x18); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x07); db(0x22); db(0xfa); + db(0xfd); db(0x0a); db(0x70); db(0x00); db(0x30); db(0x3a); db(0xfc); db(0xf2); + db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x09); + db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xe6); db(0x6b); db(0x08); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x0a); db(0x22); db(0xc0); + db(0x30); db(0x3a); db(0xfc); db(0xce); db(0x6b); db(0x14); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x02); db(0x22); db(0xc0); db(0x30); db(0x3a); + db(0xfc); db(0xc6); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x01); + db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xc0); db(0x6b); db(0x10); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x03); db(0x30); db(0x3a); + db(0xfc); db(0xba); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); + db(0x30); db(0x3a); db(0xfc); db(0xac); db(0x6b); db(0x10); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x04); db(0x30); db(0x3a); db(0xfc); db(0xa6); + db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x3a); + db(0xfc); db(0x98); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x05); db(0x30); db(0x3a); db(0xfc); db(0x92); db(0x48); db(0xc0); + db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x70); db(0x00); db(0x30); db(0x3a); + db(0xfc); db(0x8e); db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x08); db(0x22); db(0xc0); db(0x42); db(0x91); db(0x61); db(0x00); + db(0xfc); db(0x40); db(0x36); db(0x3c); db(0x00); db(0x68); db(0x74); db(0x01); + db(0x28); db(0x3a); db(0xfc); db(0x70); db(0x20); db(0x04); db(0xc0); db(0x82); + db(0x22); db(0x2b); db(0x00); db(0x04); db(0xc2); db(0x82); db(0xb2); db(0x80); + db(0x67); db(0x22); db(0x42); db(0x92); db(0x35); db(0x7c); db(0x02); db(0x00); + db(0x00); db(0x04); db(0x42); db(0xaa); db(0x00); db(0x0a); db(0x32); db(0x03); + db(0x4a); db(0x00); db(0x66); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x07); + db(0x35); db(0x41); db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); + db(0x61); db(0x00); db(0xfc); db(0x06); db(0x52); db(0x43); db(0xd4); db(0x42); + db(0x0c); db(0x42); db(0x00); db(0x08); db(0x66); db(0xc6); db(0x27); db(0x44); + db(0x00); db(0x04); db(0x10); db(0x3a); db(0xfc); db(0x0c); db(0x08); db(0x00); + db(0x00); db(0x00); db(0x67); db(0x00); db(0xfd); db(0x7e); db(0x42); db(0x92); + db(0x35); db(0x7c); db(0x04); db(0x00); db(0x00); db(0x04); db(0x42); db(0x6a); + db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); db(0x20); db(0x6b); + db(0x00); db(0x14); db(0x30); db(0x3a); db(0xfc); db(0x14); db(0x32); db(0x28); + db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); + db(0x70); db(0x00); db(0x35); db(0x40); db(0x00); db(0x0a); db(0x30); db(0x3a); + db(0xfc); db(0x02); db(0x32); db(0x28); db(0x00); db(0x2e); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); db(0x70); db(0x00); db(0x35); db(0x40); - db(0x00); db(0x0a); db(0x30); db(0x3a); db(0xfc); db(0x02); db(0x32); db(0x28); - db(0x00); db(0x2e); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); - db(0x70); db(0x00); db(0x35); db(0x40); db(0x00); db(0x0c); db(0x61); db(0x00); - db(0xfb); db(0x78); db(0x60); db(0x00); db(0xfd); db(0x3a); db(0x4e); db(0x75); - db(0x4a); db(0xa9); db(0x02); db(0x08); db(0x67); db(0x14); db(0x4a); db(0xa9); - db(0x02); db(0x0c); db(0x67); db(0x0e); db(0x30); db(0x3a); db(0xfb); db(0xb0); - db(0xb0); db(0x69); db(0x00); db(0x16); db(0x67); db(0x14); db(0x33); db(0x40); - db(0x00); db(0x16); db(0x2c); db(0x69); db(0x00); db(0x26); db(0x20); db(0x29); - db(0x00); db(0x22); db(0x22); db(0x69); db(0x00); db(0x1e); db(0x4e); db(0xae); - db(0xfe); db(0xbc); db(0x53); db(0x69); db(0x00); db(0x46); db(0x6a); db(0x12); - db(0x33); db(0x7c); db(0x00); db(0x32); db(0x00); db(0x46); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x02); db(0x61); db(0x00); db(0xf9); db(0xea); - db(0x4e); db(0x90); db(0x41); db(0xf9); db(0x00); db(0xdf); db(0xf0); db(0x00); - db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x06); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x20); db(0x3c); db(0x00); db(0x00); - db(0x00); db(0x88); 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(0x40); db(0x2a); db(0x40); db(0x2b); db(0x4e); db(0x00); db(0x14); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0e); db(0x61); db(0x00); - db(0xf9); db(0xb0); db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa); - db(0x04); db(0x66); db(0x43); db(0xfa); db(0x01); db(0x14); db(0x70); db(0xf6); - db(0x22); db(0x3c); db(0x00); db(0x00); db(0x27); db(0x10); db(0x61); db(0x00); - db(0xee); db(0xe6); db(0x70); db(0x00); db(0x4c); db(0xdf); db(0x60); db(0x00); - db(0x4e); db(0x75); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0a); - db(0x61); db(0x00); db(0xf9); db(0x86); db(0x4e); db(0x90); db(0x4e); db(0x75); - db(0x61); db(0xf0); db(0x20); db(0x0d); db(0x67); db(0x1c); db(0x2c); db(0x6d); - db(0x00); db(0x14); db(0x20); db(0x2d); db(0x00); db(0x18); db(0x67); db(0x06); - db(0x22); db(0x40); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4d); - db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x88); db(0x4e); db(0xae); - db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0x38); db(0x3e); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa); - db(0x03); db(0xf4); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00); - db(0x03); db(0xed); db(0x4e); db(0xae); db(0xff); db(0xe2); db(0x28); db(0x00); - db(0x67); db(0x4c); db(0x45); db(0xed); db(0x00); db(0x68); db(0x42); db(0x92); - db(0x34); db(0xaa); db(0x00); db(0x02); db(0x24); db(0x0a); db(0x54); db(0x82); - db(0x76); db(0x02); db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); - db(0xb6); db(0x80); db(0x66); db(0x32); db(0x0c); db(0x92); db(0x50); db(0x4e); - db(0x54); db(0x52); db(0x66); db(0xe4); db(0x24); db(0x0a); db(0x76); db(0x04); - db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); db(0x24); db(0x0a); - db(0x76); db(0x20); db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); - db(0xb6); db(0x80); db(0x66); db(0x12); db(0x4a); db(0x6a); db(0x00); db(0x10); - db(0x66); db(0xc4); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x10); - db(0x61); db(0x00); db(0xf8); db(0xf6); db(0x4e); db(0x90); db(0x22); db(0x04); - db(0x67); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xdc); db(0x4c); db(0xdf); - db(0x7c); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x6d); db(0x00); db(0x18); - db(0x41); db(0xfa); db(0x03); db(0x6c); db(0x22); db(0x08); db(0x74); db(0xfe); - db(0x4e); db(0xae); db(0xff); db(0xac); db(0x22); db(0x00); db(0x67); db(0x34); - db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14); - db(0x45); db(0xed); db(0x00); db(0x38); db(0x70); db(0xff); db(0x4e); db(0xae); - db(0xfe); db(0xb6); db(0x15); db(0x40); db(0x00); db(0x14); db(0x41); db(0xfa); - db(0x03); db(0x5c); db(0x24); db(0x88); db(0x25); db(0x7c); db(0x00); db(0x00); - db(0x00); db(0x12); db(0x00); db(0x0c); db(0x25); db(0x6d); db(0x00); db(0x08); - db(0x00); db(0x10); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x22); db(0x0a); - db(0x4e); db(0xae); db(0xfc); db(0x88); db(0x2c); db(0x6d); db(0x00); db(0x14); - db(0x4e); db(0x75); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10); - db(0x00); db(0x00); db(0x00); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x0d); db(0x61); db(0x00); db(0xf8); db(0x84); db(0x4e); db(0x90); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xfc); db(0x2a); db(0x40); - db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x93); db(0xc9); db(0x4e); db(0xae); - db(0xfe); db(0xda); db(0x2b); db(0x40); db(0x00); db(0x08); db(0x43); db(0xfa); - db(0x03); db(0x88); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); - db(0x2b); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); db(0xfe); db(0xda); - db(0x2c); db(0x40); db(0x72); db(0x32); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x41); db(0xfa); db(0x02); db(0xc0); db(0x22); db(0x08); db(0x74); db(0xfe); - db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0xea); - db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x72); db(0x32); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0xaa); + db(0x00); db(0x0c); db(0x61); db(0x00); db(0xfb); db(0x78); db(0x60); db(0x00); + db(0xfd); db(0x3a); db(0x4e); db(0x75); db(0x4a); db(0xa9); db(0x02); db(0x08); + db(0x67); db(0x14); db(0x4a); db(0xa9); db(0x02); db(0x0c); db(0x67); db(0x0e); + db(0x30); db(0x3a); db(0xfb); db(0xb0); db(0xb0); db(0x69); db(0x00); db(0x16); + db(0x67); db(0x14); db(0x33); db(0x40); db(0x00); db(0x16); db(0x2c); db(0x69); + db(0x00); db(0x26); db(0x20); db(0x29); db(0x00); db(0x22); db(0x22); db(0x69); + db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x53); db(0x69); + db(0x00); db(0x46); db(0x6a); db(0x12); db(0x33); db(0x7c); db(0x00); db(0x32); + db(0x00); db(0x46); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x02); + db(0x61); db(0x00); db(0xf9); db(0xea); db(0x4e); db(0x90); db(0x41); db(0xf9); + db(0x00); db(0xdf); db(0xf0); db(0x00); db(0x70); db(0x00); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0x00); db(0x06); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x88); 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(0x40); db(0x2a); db(0x40); + db(0x2b); db(0x4e); db(0x00); db(0x14); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x0e); db(0x61); db(0x00); db(0xf9); db(0xb0); db(0x20); db(0x0d); + db(0x4e); db(0x90); db(0x41); db(0xfa); db(0x04); db(0x66); db(0x43); db(0xfa); + db(0x01); db(0x14); db(0x70); db(0xf6); db(0x22); db(0x3c); db(0x00); db(0x00); + db(0x27); db(0x10); db(0x61); db(0x00); db(0xee); db(0xe6); db(0x70); db(0x00); + db(0x4c); db(0xdf); db(0x60); db(0x00); db(0x4e); db(0x75); db(0x30); db(0x3c); + db(0xff); db(0x38); db(0x72); db(0x0a); db(0x61); db(0x00); db(0xf9); db(0x86); + db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x61); db(0xf0); db(0x20); db(0x0d); + db(0x67); db(0x1c); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x20); db(0x2d); + db(0x00); db(0x18); db(0x67); db(0x06); db(0x22); db(0x40); db(0x4e); db(0xae); + db(0xfe); db(0x62); db(0x22); db(0x4d); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x00); db(0x88); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x70); db(0x00); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x3e); db(0x2c); db(0x6d); + db(0x00); db(0x18); db(0x41); db(0xfa); db(0x03); db(0xf4); db(0x22); db(0x08); + db(0x24); db(0x3c); db(0x00); db(0x00); db(0x03); db(0xed); db(0x4e); db(0xae); + db(0xff); db(0xe2); db(0x28); db(0x00); db(0x67); db(0x4c); db(0x45); db(0xed); + db(0x00); db(0x68); db(0x42); db(0x92); db(0x34); db(0xaa); db(0x00); db(0x02); + db(0x24); db(0x0a); db(0x54); db(0x82); db(0x76); db(0x02); db(0x22); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); db(0x66); db(0x32); + db(0x0c); db(0x92); db(0x50); db(0x4e); db(0x54); db(0x52); db(0x66); db(0xe4); + db(0x24); db(0x0a); db(0x76); db(0x04); db(0x22); db(0x04); db(0x4e); db(0xae); + db(0xff); db(0xd6); db(0x24); db(0x0a); db(0x76); db(0x20); db(0x22); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); db(0x66); db(0x12); + db(0x4a); db(0x6a); db(0x00); db(0x10); db(0x66); db(0xc4); db(0x30); db(0x3c); + db(0xff); db(0x38); db(0x72); db(0x10); db(0x61); db(0x00); db(0xf8); db(0xf6); + db(0x4e); db(0x90); db(0x22); db(0x04); db(0x67); db(0x04); db(0x4e); db(0xae); + db(0xff); db(0xdc); db(0x4c); db(0xdf); db(0x7c); db(0x1c); db(0x4e); db(0x75); + db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa); db(0x03); db(0x6c); db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xa4); db(0x22); db(0x00); - db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14); - db(0x61); db(0x00); db(0xf8); db(0x32); db(0x72); db(0x00); db(0x32); db(0x3c); - db(0x00); db(0x34); db(0x61); db(0x00); db(0xf8); db(0x76); db(0x28); db(0x40); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0x84); db(0x70); db(0x00); - db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); - db(0x72); db(0x00); db(0x20); db(0x2d); db(0x00); db(0x0c); db(0x41); db(0xfa); - db(0x02); db(0x83); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x44); - db(0x4a); db(0x80); db(0x66); db(0xe2); db(0x20); db(0x6c); db(0x00); db(0x14); - db(0x0c); db(0x68); db(0x00); db(0x25); db(0x00); db(0x14); db(0x64); db(0x0c); - db(0x61); db(0x00); db(0xfe); db(0x48); db(0x70); db(0x00); db(0x4e); db(0xae); - db(0xfe); db(0xc2); db(0x60); db(0xf8); db(0x61); db(0x00); db(0xfe); db(0xe6); - db(0x41); db(0xed); db(0x00); db(0x1c); db(0x29); db(0x48); db(0x00); db(0x28); - db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x24); db(0x39); db(0x7c); - db(0x00); db(0x0c); db(0x00); db(0x1c); db(0x2b); db(0x4d); db(0x00); db(0x2c); - db(0x41); db(0xfa); db(0x01); db(0x5c); db(0x2b); db(0x48); db(0x00); db(0x24); - db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x0f); db(0x61); db(0x00); db(0xf7); db(0x9a); - db(0x4e); db(0x90); db(0x4a); db(0xad); db(0x00); db(0x00); db(0x66); db(0x1c); - db(0x70); db(0x00); db(0x74); db(0x00); db(0x14); db(0x2d); db(0x00); db(0x4c); - db(0x05); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); - db(0xfe); db(0xc2); db(0x05); db(0x00); db(0x67); db(0x06); db(0x61); db(0x00); - db(0xfe); db(0x1e); db(0x60); db(0xe4); db(0x20); db(0x2d); db(0x00); db(0x00); - db(0x67); db(0x00); db(0x00); db(0x72); db(0x72); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x2b); db(0x40); db(0x00); db(0x04); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x0c); db(0x61); db(0x00); db(0xf7); db(0x5a); - db(0x4e); db(0x90); db(0x4a); db(0xad); db(0x00); db(0x04); db(0x67); db(0x3a); - db(0x39); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x1c); db(0x42); db(0x2c); - db(0x00); db(0x1f); db(0x42); db(0xac); db(0x00); db(0x20); db(0x29); db(0x6d); - db(0x00); db(0x00); db(0x00); db(0x24); db(0x29); db(0x6d); db(0x00); db(0x04); - db(0x00); db(0x28); db(0x42); db(0xac); db(0x00); db(0x2c); db(0x42); db(0xac); - db(0x00); db(0x30); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x2b); db(0x6c); db(0x00); db(0x30); db(0x00); db(0x10); db(0x39); db(0x7c); - db(0x00); db(0x04); db(0x00); db(0x1c); db(0x22); db(0x4c); db(0x4e); db(0xae); - db(0xfe); db(0x38); db(0x20); db(0x2d); db(0x00); db(0x00); db(0x42); db(0xad); - db(0x00); db(0x00); db(0x22); db(0x2d); db(0x00); db(0x04); db(0x67); db(0x00); - db(0xff); db(0x78); db(0x22); db(0x41); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x60); db(0x00); db(0xff); db(0x6e); db(0x39); db(0x7c); db(0x00); db(0x02); - db(0x00); db(0x1c); db(0x41); db(0xed); db(0x00); db(0x30); db(0x42); db(0x90); - db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0x2c); db(0x00); db(0x1f); - db(0x42); db(0xac); db(0x00); db(0x2c); db(0x42); db(0xac); db(0x00); db(0x30); - db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x08); db(0x29); db(0x40); - db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x0c); db(0xad); db(0x46); db(0x4f); db(0x52); db(0x4d); db(0x00); db(0x30); - db(0x66); db(0x52); db(0x20); db(0x2d); db(0x00); db(0x34); db(0x67); db(0x4c); - db(0x6b); db(0x4a); db(0x2b); db(0x6c); db(0x00); db(0x30); db(0x00); db(0x10); - db(0x50); db(0x80); db(0x24); db(0x00); db(0x72); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x36); db(0x24); db(0x40); - db(0x20); db(0x4a); db(0x20); db(0xed); db(0x00); db(0x30); db(0x20); db(0xed); - db(0x00); db(0x34); db(0x29); db(0x48); db(0x00); db(0x28); db(0x20); db(0x02); - db(0x51); db(0x80); db(0x29); db(0x40); db(0x00); db(0x24); db(0x22); db(0x4c); - db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x0b); db(0x61); db(0x00); db(0xf6); db(0x84); db(0x20); db(0x2c); - db(0x00); db(0x20); db(0x4e); db(0x90); db(0x22); db(0x4a); db(0x20); db(0x02); - db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4a); db(0xac); db(0x00); db(0x20); - db(0x67); db(0x00); db(0xfe); db(0xde); db(0x41); db(0xed); db(0x00); db(0x30); + db(0x22); db(0x00); db(0x67); db(0x34); db(0x4e); db(0xae); db(0xff); db(0xa6); + db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x45); db(0xed); db(0x00); db(0x38); + db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x15); db(0x40); + db(0x00); db(0x14); db(0x41); db(0xfa); db(0x03); db(0x5c); db(0x24); db(0x88); + db(0x25); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x12); db(0x00); db(0x0c); + db(0x25); db(0x6d); db(0x00); db(0x08); db(0x00); db(0x10); db(0x2c); db(0x6d); + db(0x00); db(0x18); db(0x22); db(0x0a); db(0x4e); db(0xae); db(0xfc); db(0x88); + db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x4e); db(0x75); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0d); db(0x61); db(0x00); + db(0xf8); db(0x84); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0xfe); db(0xfc); db(0x2a); db(0x40); db(0x2c); db(0x6d); db(0x00); db(0x14); + db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x2b); db(0x40); + db(0x00); db(0x08); db(0x43); db(0xfa); db(0x03); db(0x88); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2b); db(0x40); db(0x00); db(0x18); + db(0x67); db(0x00); db(0xfe); db(0xda); db(0x2c); db(0x40); db(0x72); db(0x32); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0xc0); + db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac); + db(0x4a); db(0x80); db(0x67); db(0xea); db(0x22); db(0x00); db(0x4e); db(0xae); + db(0xff); db(0xa6); db(0x72); db(0x32); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x41); db(0xfa); db(0x02); db(0xaa); db(0x22); db(0x08); db(0x74); db(0xfe); + db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0xfe); db(0xa4); db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); + db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x61); db(0x00); db(0xf8); db(0x32); + db(0x72); db(0x00); db(0x32); db(0x3c); db(0x00); db(0x34); db(0x61); db(0x00); + db(0xf8); db(0x76); db(0x28); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0xfe); db(0x84); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); + db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x72); db(0x00); db(0x20); db(0x2d); + db(0x00); db(0x0c); db(0x41); db(0xfa); db(0x02); db(0x83); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x4a); db(0x80); db(0x66); db(0xe2); + db(0x20); db(0x6c); db(0x00); db(0x14); db(0x0c); db(0x68); db(0x00); db(0x25); + db(0x00); db(0x14); db(0x64); db(0x0c); db(0x61); db(0x00); db(0xfe); db(0x48); + db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x60); db(0xf8); + db(0x61); db(0x00); db(0xfe); db(0xe6); db(0x41); db(0xed); db(0x00); db(0x1c); db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x01); db(0x29); db(0x40); - db(0x00); db(0x24); db(0x42); db(0xac); db(0x00); db(0x20); db(0x22); db(0x4c); - db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x60); db(0xde); db(0x41); db(0xe8); - db(0xff); db(0xe4); db(0x20); db(0x29); db(0x00); db(0x08); db(0xb0); db(0xa8); - db(0x00); db(0x10); db(0x67); db(0x1a); db(0x21); db(0x40); db(0x00); db(0x10); - db(0x2f); db(0x0e); db(0x2c); db(0x68); db(0x00); db(0x14); db(0x22); db(0x68); - db(0x00); db(0x08); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); - db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x2c); db(0x5f); db(0x70); db(0x00); - db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x74); db(0xff); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x64); db(0x61); db(0x00); - db(0xf6); db(0x18); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x38); - db(0x74); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); - db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x00); db(0x62); db(0x4e); db(0xae); - db(0xfe); db(0xec); db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x20); db(0x40); - db(0x43); db(0xfa); db(0x00); db(0x22); db(0x24); db(0x68); db(0xff); db(0xe4); - db(0x21); db(0x49); db(0xff); db(0xe4); db(0x22); db(0x48); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x65); db(0x61); db(0x00); db(0xf5); db(0xe2); - db(0x4e); db(0x90); db(0x74); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x76); - db(0x20); db(0x02); db(0x4e); db(0x75); db(0x59); db(0x8f); db(0x48); db(0xe7); - db(0xc0); db(0x80); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x66); - db(0x61); db(0x00); db(0xf5); db(0xc6); db(0x4e); db(0x90); db(0x4c); db(0xdf); - db(0x01); db(0x03); 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(0x63); db(0x6f); - db(0x6e); db(0x73); db(0x6f); db(0x6c); db(0x65); db(0x2e); db(0x64); db(0x65); - db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x44); db(0x45); db(0x56); - db(0x53); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x00); - db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x63); db(0x6c); db(0x69); - db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); - db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); - db(0x4d); db(0x3a); db(0x00); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); - db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); - db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a); - db(0x45); db(0x6e); db(0x76); db(0x2f); db(0x53); db(0x79); db(0x73); db(0x2f); - db(0x50); db(0x6f); db(0x69); db(0x6e); db(0x74); db(0x65); db(0x72); db(0x2e); - db(0x70); db(0x72); db(0x65); db(0x66); db(0x73); db(0x00); db(0x55); db(0x41); - db(0x45); db(0x20); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); - db(0x61); db(0x72); db(0x64); db(0x20); db(0x73); db(0x68); db(0x61); db(0x72); - db(0x69); db(0x6e); db(0x67); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); - db(0x6d); db(0x6f); db(0x75); db(0x73); db(0x65); db(0x20); db(0x64); db(0x72); - db(0x69); db(0x76); db(0x65); db(0x72); 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(0x67); db(0x72); - db(0x61); db(0x70); db(0x68); db(0x69); db(0x63); db(0x73); 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(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(0x24); db(0x39); db(0x7c); db(0x00); db(0x0c); db(0x00); db(0x1c); + db(0x2b); db(0x4d); db(0x00); db(0x2c); db(0x41); db(0xfa); db(0x01); db(0x5c); + db(0x2b); db(0x48); db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); + db(0xfe); db(0x38); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0f); + db(0x61); db(0x00); db(0xf7); db(0x9a); db(0x4e); db(0x90); db(0x4a); db(0xad); + db(0x00); db(0x00); db(0x66); db(0x1c); db(0x70); db(0x00); db(0x74); db(0x00); + db(0x14); db(0x2d); db(0x00); db(0x4c); db(0x05); db(0xc0); db(0x08); db(0xc0); + db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x05); db(0x00); + db(0x67); db(0x06); db(0x61); db(0x00); db(0xfe); db(0x1e); db(0x60); db(0xe4); + db(0x20); db(0x2d); db(0x00); db(0x00); db(0x67); db(0x00); db(0x00); db(0x72); + db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2b); db(0x40); + db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0c); + db(0x61); db(0x00); db(0xf7); db(0x5a); db(0x4e); db(0x90); db(0x4a); db(0xad); + db(0x00); db(0x04); db(0x67); db(0x3a); db(0x39); db(0x7c); db(0x00); db(0x03); + db(0x00); db(0x1c); db(0x42); db(0x2c); db(0x00); db(0x1f); db(0x42); db(0xac); + db(0x00); db(0x20); db(0x29); db(0x6d); db(0x00); db(0x00); db(0x00); db(0x24); + db(0x29); db(0x6d); db(0x00); db(0x04); db(0x00); db(0x28); db(0x42); db(0xac); + db(0x00); db(0x2c); db(0x42); db(0xac); db(0x00); db(0x30); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x2b); db(0x6c); db(0x00); db(0x30); + db(0x00); db(0x10); db(0x39); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x1c); + db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x20); db(0x2d); + db(0x00); db(0x00); db(0x42); db(0xad); db(0x00); db(0x00); db(0x22); db(0x2d); + db(0x00); db(0x04); db(0x67); db(0x00); db(0xff); db(0x78); db(0x22); db(0x41); + db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); db(0xff); db(0x6e); + db(0x39); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x1c); db(0x41); db(0xed); + db(0x00); db(0x30); db(0x42); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); + db(0x42); db(0x2c); db(0x00); db(0x1f); db(0x42); db(0xac); db(0x00); db(0x2c); + db(0x42); db(0xac); db(0x00); db(0x30); db(0x29); db(0x48); db(0x00); db(0x28); + db(0x70); db(0x08); db(0x29); db(0x40); db(0x00); db(0x24); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x0c); db(0xad); db(0x46); db(0x4f); + db(0x52); db(0x4d); db(0x00); db(0x30); db(0x66); db(0x52); db(0x20); db(0x2d); + db(0x00); db(0x34); db(0x67); db(0x4c); db(0x6b); db(0x4a); db(0x2b); db(0x6c); + db(0x00); db(0x30); db(0x00); db(0x10); db(0x50); db(0x80); db(0x24); db(0x00); + db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); + db(0x67); db(0x36); db(0x24); db(0x40); db(0x20); db(0x4a); db(0x20); db(0xed); + db(0x00); db(0x30); db(0x20); db(0xed); db(0x00); db(0x34); db(0x29); db(0x48); + db(0x00); db(0x28); db(0x20); db(0x02); db(0x51); db(0x80); db(0x29); db(0x40); + db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0b); db(0x61); db(0x00); + db(0xf6); db(0x84); db(0x20); db(0x2c); db(0x00); db(0x20); db(0x4e); db(0x90); + db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); + db(0x4a); db(0xac); db(0x00); db(0x20); db(0x67); db(0x00); db(0xfe); db(0xde); + db(0x41); db(0xed); db(0x00); db(0x30); db(0x29); db(0x48); db(0x00); db(0x28); + db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x24); db(0x42); db(0xac); + db(0x00); db(0x20); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x60); db(0xde); db(0x41); db(0xe8); db(0xff); db(0xe4); db(0x20); db(0x29); + db(0x00); db(0x08); db(0xb0); db(0xa8); db(0x00); db(0x10); db(0x67); db(0x1a); + db(0x21); db(0x40); db(0x00); db(0x10); db(0x2f); db(0x0e); db(0x2c); db(0x68); + db(0x00); db(0x14); db(0x22); db(0x68); db(0x00); db(0x08); db(0x70); db(0x00); + db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xbc); + db(0x2c); db(0x5f); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x74); db(0xff); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x64); db(0x61); db(0x00); db(0xf6); db(0x18); db(0x4e); db(0x90); + db(0x4a); db(0x80); db(0x67); db(0x38); db(0x74); db(0x00); db(0x4e); db(0xae); + db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); + db(0x00); db(0x62); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x4a); db(0x80); + db(0x67); db(0x1e); db(0x20); db(0x40); db(0x43); db(0xfa); db(0x00); db(0x22); + db(0x24); db(0x68); db(0xff); db(0xe4); db(0x21); db(0x49); db(0xff); db(0xe4); + db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x65); + db(0x61); db(0x00); db(0xf5); db(0xe2); db(0x4e); db(0x90); db(0x74); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x76); db(0x20); db(0x02); db(0x4e); db(0x75); + db(0x59); db(0x8f); db(0x48); db(0xe7); db(0xc0); db(0x80); db(0x30); db(0x3c); + db(0xff); db(0x38); db(0x72); db(0x66); db(0x61); db(0x00); db(0xf5); db(0xc6); + db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x01); db(0x03); 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(0x63); db(0x6f); db(0x6e); db(0x73); db(0x6f); db(0x6c); + db(0x65); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); + db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x00); db(0x44); db(0x45); + db(0x56); db(0x53); db(0x3a); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); + db(0x3a); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); + db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); + db(0x65); db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a); db(0x00); db(0x63); + db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); + db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); + db(0x52); db(0x41); db(0x4d); db(0x3a); db(0x45); db(0x6e); db(0x76); db(0x2f); + db(0x53); db(0x79); db(0x73); db(0x2f); db(0x50); db(0x6f); db(0x69); db(0x6e); + db(0x74); db(0x65); db(0x72); db(0x2e); db(0x70); db(0x72); db(0x65); db(0x66); + db(0x73); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x63); db(0x6c); + db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x20); + db(0x73); db(0x68); db(0x61); db(0x72); db(0x69); db(0x6e); db(0x67); db(0x00); + db(0x55); db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73); + db(0x65); db(0x20); db(0x64); db(0x72); db(0x69); db(0x76); db(0x65); db(0x72); + 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(0x67); db(0x72); db(0x61); db(0x70); db(0x68); db(0x69); + db(0x63); db(0x73); 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(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(0x7a); db(0x33); db(0x63); db(0x68); db(0x69); db(0x70); db(0x20); + db(0x6d); db(0x65); db(0x6d); db(0x6f); db(0x72); db(0x79); db(0x00); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2); diff --git a/genblitter.cpp b/genblitter.cpp index 33a1b7db..5ba6dc63 100644 --- a/genblitter.cpp +++ b/genblitter.cpp @@ -97,15 +97,15 @@ static void generate_func(void) printf("uaecptr dstp = 0;\n"); printf("for (j = 0; j < b->vblitsize; j++) {\n"); printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 bltadat, srca;\n\n"); - if (c_is_on) printf("\t\tif (ptc) { srcc = chipmem_agnus_wget (ptc); ptc += 2; }\n"); - if (b_is_on) printf("\t\tif (ptb) {\n\t\t\tuae_u32 bltbdat = blt_info.bltbdat = chipmem_agnus_wget (ptb); ptb += 2;\n"); + if (c_is_on) printf("\t\tif (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; }\n"); + if (b_is_on) printf("\t\tif (ptb) {\n\t\t\tuae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2;\n"); if (b_is_on) printf("\t\t\tsrcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift;\n"); if (b_is_on) printf("\t\t\tprevb = bltbdat;\n\t\t}\n"); - if (a_is_on) printf("\t\tif (pta) { bltadat = blt_info.bltadat = chipmem_agnus_wget (pta); pta += 2; } else { bltadat = blt_info.bltadat; }\n"); + if (a_is_on) printf("\t\tif (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; }\n"); if (a_is_on) printf("\t\tbltadat &= blit_masktable[i];\n"); if (a_is_on) printf("\t\tsrca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift;\n"); if (a_is_on) printf("\t\tpreva = bltadat;\n"); - printf("\t\tif (dstp) chipmem_agnus_wput (dstp, dstd);\n"); + printf("\t\tif (dstp) chipmem_wput_indirect (dstp, dstd);\n"); printf("\t\tdstd = (%s) & 0xFFFF;\n", blitops[blttbl[i]].s); printf("\t\ttotald |= dstd;\n"); printf("\t\tif (ptd) { dstp = ptd; ptd += 2; }\n"); @@ -117,7 +117,7 @@ static void generate_func(void) printf("}\n"); if (b_is_on) printf("b->bltbhold = srcb;\n"); if (c_is_on) printf("b->bltcdat = srcc;\n"); - printf("\t\tif (dstp) chipmem_agnus_wput (dstp, dstd);\n"); + printf("\t\tif (dstp) chipmem_wput_indirect (dstp, dstd);\n"); #if 0 printf("}\n"); #endif @@ -174,15 +174,15 @@ static void generate_func(void) printf("uaecptr dstp = 0;\n"); printf("for (j = 0; j < b->vblitsize; j++) {\n"); printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 bltadat, srca;\n"); - if (c_is_on) printf("\t\tif (ptc) { srcc = chipmem_agnus_wget (ptc); ptc -= 2; }\n"); - if (b_is_on) printf("\t\tif (ptb) {\n\t\t\tuae_u32 bltbdat = blt_info.bltbdat = chipmem_agnus_wget (ptb); ptb -= 2;\n"); + if (c_is_on) printf("\t\tif (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; }\n"); + if (b_is_on) printf("\t\tif (ptb) {\n\t\t\tuae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2;\n"); if (b_is_on) printf("\t\t\tsrcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift;\n"); if (b_is_on) printf("\t\t\tprevb = bltbdat;\n\t\t}\n"); - if (a_is_on) printf("\t\tif (pta) { bltadat = blt_info.bltadat = chipmem_agnus_wget (pta); pta -= 2; } else { bltadat = blt_info.bltadat; }\n"); + if (a_is_on) printf("\t\tif (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; }\n"); if (a_is_on) printf("\t\tbltadat &= blit_masktable[i];\n"); if (a_is_on) printf("\t\tsrca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift;\n"); if (a_is_on) printf("\t\tpreva = bltadat;\n"); - printf("\t\tif (dstp) chipmem_agnus_wput (dstp, dstd);\n"); + printf("\t\tif (dstp) chipmem_wput_indirect (dstp, dstd);\n"); printf("\t\tdstd = (%s) & 0xFFFF;\n", blitops[blttbl[i]].s); printf("\t\ttotald |= dstd;\n"); printf("\t\tif (ptd) { dstp = ptd; ptd -= 2; }\n"); @@ -194,7 +194,7 @@ static void generate_func(void) printf("}\n"); if (b_is_on) printf("b->bltbhold = srcb;\n"); if (c_is_on) printf("b->bltcdat = srcc;\n"); - printf("\t\tif (dstp) chipmem_agnus_wput (dstp, dstd);\n"); + printf("\t\tif (dstp) chipmem_wput_indirect (dstp, dstd);\n"); #if 0 printf("}\n"); #endif diff --git a/include/memory.h b/include/memory.h index cdd898e1..b033c682 100644 --- a/include/memory.h +++ b/include/memory.h @@ -43,7 +43,8 @@ extern uae_u32 allocated_chipmem; extern uae_u32 allocated_fastmem; extern uae_u32 allocated_bogomem; extern uae_u32 allocated_gfxmem; -extern uae_u32 allocated_z3fastmem, allocated_z3fastmem2, max_z3fastmem; +extern uae_u32 allocated_z3fastmem, allocated_z3fastmem2, allocated_z3chipmem; +extern uae_u32 max_z3fastmem; extern uae_u32 allocated_a3000mem; extern uae_u32 allocated_cardmem; @@ -59,7 +60,7 @@ extern void wait_cpu_cycle_write_ce020 (uaecptr addr, int mode, uae_u32 v); #define bogomem_start 0x00C00000 #define cardmem_start 0x00E00000 #define kickmem_start 0x00F80000 -extern uaecptr z3fastmem_start, z3fastmem2_start; +extern uaecptr z3fastmem_start, z3fastmem2_start, z3chipmem_start; extern uaecptr p96ram_start; extern uaecptr fastmem_start; extern uaecptr a3000lmem_start, a3000hmem_start; @@ -325,6 +326,15 @@ extern void REGPARAM3 chipmem_lput_ce2 (uaecptr, uae_u32) REGPARAM; extern void REGPARAM3 chipmem_wput_ce2 (uaecptr, uae_u32) REGPARAM; extern void REGPARAM3 chipmem_bput_c2 (uaecptr, uae_u32) REGPARAM; +extern uae_u32 (REGPARAM3 *chipmem_lget_indirect)(uaecptr) REGPARAM; +extern uae_u32 (REGPARAM3 *chipmem_wget_indirect)(uaecptr) REGPARAM; +extern uae_u32 (REGPARAM3 *chipmem_bget_indirect)(uaecptr) REGPARAM; +extern void (REGPARAM3 *chipmem_lput_indirect)(uaecptr, uae_u32) REGPARAM; +extern void (REGPARAM3 *chipmem_wput_indirect)(uaecptr, uae_u32) REGPARAM; +extern void (REGPARAM3 *chipmem_bput_indirect)(uaecptr, uae_u32) REGPARAM; +extern int (REGPARAM2 *chipmem_check_indirect)(uaecptr, uae_u32); +extern uae_u8 *(REGPARAM2 *chipmem_xlate_indirect)(uaecptr); + #ifdef NATMEM_OFFSET typedef struct shmpiece_reg { diff --git a/include/options.h b/include/options.h index 9d801a0d..b82e6147 100644 --- a/include/options.h +++ b/include/options.h @@ -296,6 +296,8 @@ struct uae_prefs { uae_u32 z3fastmem_size, z3fastmem2_size; uae_u32 z3fastmem_start; + uae_u32 z3chipmem_size; + uae_u32 z3chipmem_start; uae_u32 fastmem_size; uae_u32 chipmem_size; uae_u32 bogomem_size; diff --git a/include/savestate.h b/include/savestate.h index ac9d3dfe..b3d6d309 100644 --- a/include/savestate.h +++ b/include/savestate.h @@ -112,6 +112,9 @@ extern uae_u8 *restore_configuration (uae_u8 *src); extern uae_u8 *save_log (int, int *len); extern uae_u8 *restore_log (uae_u8 *src); +extern uae_u8 *restore_input (uae_u8 *src); +extern uae_u8 *save_input (int *len, uae_u8 *dstptr); + extern void restore_cram (int, size_t); extern void restore_bram (int, size_t); extern void restore_fram (int, size_t); diff --git a/inputdevice.cpp b/inputdevice.cpp index 6a7d9b96..4ad381cd 100644 --- a/inputdevice.cpp +++ b/inputdevice.cpp @@ -115,6 +115,9 @@ static struct uae_input_device2 joysticks2[MAX_INPUT_DEVICES]; static struct uae_input_device2 mice2[MAX_INPUT_DEVICES]; static uae_u8 scancodeused[MAX_INPUT_DEVICES][256]; +static int mouse_pullup = 1; +static int joystick_pullup = 1; + static int input_acquired; static int testmode, testmode_read, testmode_toggle; struct teststore @@ -443,6 +446,33 @@ struct input_queue_struct { }; static struct input_queue_struct input_queue[INPUT_QUEUE_SIZE]; +uae_u8 *restore_input (uae_u8 *src) +{ + restore_u32 (); + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + pot_cap[i][j] = restore_u16 (); + } + } + return src; +} +uae_u8 *save_input (int *len, uae_u8 *dstptr) +{ + uae_u8 *dstbak, *dst; + + if (dstptr) + dstbak = dst = dstptr; + else + dstbak = dst = xmalloc (uae_u8, 1000); + save_u32 (0); + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + save_u16 (pot_cap[i][j]); + } + } + *len = dst - dstbak; + return dstbak; +} static void freejport (struct uae_prefs *dst, int num) { @@ -894,6 +924,8 @@ void read_inputdevice_config (struct uae_prefs *pr, TCHAR *option, TCHAR *value) if (joystick < 0) set_kbr_default (pr, idnum, devnum); id->enabled = iscustom; + } else { + id->enabled = false; } return; } @@ -1980,7 +2012,7 @@ static void cap_check (void) joypot = joydirpot[joy][i]; if (analog_port[joy][i] && pot_cap[joy][i] < joypot) charge = 1; // slow charge via pot variable resistor - if ((digital_port[joy][i] || mouse_port[joy])) + if (((joystick_pullup && digital_port[joy][i]) || (mouse_pullup && mouse_port[joy]))) charge = 1; // slow charge via pull-up resistor } if (!(potgo_value & pdir)) { // input? @@ -2024,13 +2056,13 @@ static void cap_check (void) } /* official Commodore mouse has pull-up resistors in button lines * NOTE: 3rd party mice may not have pullups! */ - if (dong < 0 && mouse_port[joy] && charge == 0) + if (dong < 0 && (mouse_pullup && mouse_port[joy]) && charge == 0) charge = 2; /* emulate pullup resistor if button mapped because there too many broken * programs that read second button in input-mode (and most 2+ button pads have * pullups) */ - if (dong < 0 && digital_port[joy][i] && charge == 0) + if (dong < 0 && (joystick_pullup && digital_port[joy][i]) && charge == 0) charge = 2; charge_cap (joy, i, charge); diff --git a/main.cpp b/main.cpp index c14e1f9d..6614fb1b 100644 --- a/main.cpp +++ b/main.cpp @@ -209,6 +209,16 @@ void fixup_prefs (struct uae_prefs *p) p->z3fastmem_start &= ~0xffff; if (p->z3fastmem_start < 0x1000000) p->z3fastmem_start = 0x1000000; + if ((p->z3chipmem_size & (p->z3chipmem_size - 1)) != 0 + || (p->z3chipmem_size != 0 && (p->z3chipmem_size < 0x100000 || p->z3chipmem_size > max_z3fastmem))) + { + write_log (L"Unsupported Zorro III fake chipmem size %x (%x)!\n", p->z3chipmem_size, max_z3fastmem); + if (p->z3chipmem_size > max_z3fastmem) + p->z3chipmem_size = max_z3fastmem; + else + p->z3chipmem_size = 0; + err = 1; + } if (p->address_space_24 && (p->gfxmem_size != 0 || p->z3fastmem_size != 0)) { p->z3fastmem_size = p->gfxmem_size = 0; diff --git a/memory.cpp b/memory.cpp index 7c99dad0..27e5a662 100644 --- a/memory.cpp +++ b/memory.cpp @@ -61,7 +61,7 @@ uae_u32 allocated_chipmem; uae_u32 allocated_fastmem; uae_u32 allocated_bogomem; uae_u32 allocated_gfxmem; -uae_u32 allocated_z3fastmem, allocated_z3fastmem2; +uae_u32 allocated_z3fastmem, allocated_z3fastmem2, allocated_z3chipmem; uae_u32 allocated_a3000lmem; uae_u32 allocated_a3000hmem; uae_u32 allocated_cardmem; @@ -558,6 +558,71 @@ static uae_u8 *REGPARAM2 chipmem_xlate (uaecptr addr) return chipmemory + addr; } +STATIC_INLINE void REGPARAM2 chipmem_lput_bigmem (uaecptr addr, uae_u32 v) +{ + put_long (addr, v); +} +STATIC_INLINE void REGPARAM2 chipmem_wput_bigmem (uaecptr addr, uae_u32 v) +{ + put_word (addr, v); +} +STATIC_INLINE void REGPARAM2 chipmem_bput_bigmem (uaecptr addr, uae_u32 v) +{ + put_byte (addr, v); +} +STATIC_INLINE uae_u32 REGPARAM2 chipmem_lget_bigmem (uaecptr addr) +{ + return get_long (addr); +} +STATIC_INLINE uae_u32 REGPARAM2 chipmem_wget_bigmem (uaecptr addr) +{ + return get_word (addr); +} +STATIC_INLINE uae_u32 REGPARAM2 chipmem_bget_bigmem (uaecptr addr) +{ + return get_byte (addr); +} +STATIC_INLINE int REGPARAM2 chipmem_check_bigmem (uaecptr addr, uae_u32 size) +{ + return valid_address (addr, size); +} +STATIC_INLINE uae_u8* REGPARAM2 chipmem_xlate_bigmem (uaecptr addr) +{ + return get_real_address (addr); +} + +uae_u32 (REGPARAM2 *chipmem_lget_indirect)(uaecptr); +uae_u32 (REGPARAM2 *chipmem_wget_indirect)(uaecptr); +uae_u32 (REGPARAM2 *chipmem_bget_indirect)(uaecptr); +void (REGPARAM2 *chipmem_lput_indirect)(uaecptr, uae_u32); +void (REGPARAM2 *chipmem_wput_indirect)(uaecptr, uae_u32); +void (REGPARAM2 *chipmem_bput_indirect)(uaecptr, uae_u32); +int (REGPARAM2 *chipmem_check_indirect)(uaecptr, uae_u32); +uae_u8 *(REGPARAM2 *chipmem_xlate_indirect)(uaecptr); + +static void chipmem_setindirect (void) +{ + if (currprefs.z3chipmem_size) { + chipmem_lget_indirect = chipmem_lget_bigmem; + chipmem_wget_indirect = chipmem_wget_bigmem; + chipmem_bget_indirect = chipmem_bget_bigmem; + chipmem_lput_indirect = chipmem_lput_bigmem; + chipmem_wput_indirect = chipmem_wput_bigmem; + chipmem_bput_indirect = chipmem_bput_bigmem; + chipmem_check_indirect = chipmem_check_bigmem; + chipmem_xlate_indirect = chipmem_xlate_bigmem; + } else { + chipmem_lget_indirect = chipmem_lget; + chipmem_wget_indirect = chipmem_agnus_wget; + chipmem_bget_indirect = chipmem_agnus_bget; + chipmem_lput_indirect = chipmem_lput; + chipmem_wput_indirect = chipmem_agnus_wput; + chipmem_bput_indirect = chipmem_agnus_bput; + chipmem_check_indirect = chipmem_check; + chipmem_xlate_indirect = chipmem_xlate; + } +} + /* Slow memory */ static uae_u8 *bogomemory; @@ -2291,6 +2356,7 @@ void memory_reset (void) init_mem_banks (); allocate_memory (); + chipmem_setindirect (); if (_tcscmp (currprefs.romfile, changed_prefs.romfile) != 0 || _tcscmp (currprefs.romextfile, changed_prefs.romextfile) != 0) diff --git a/newcpu.cpp b/newcpu.cpp index d0e70312..fa7b6cf7 100644 --- a/newcpu.cpp +++ b/newcpu.cpp @@ -3310,7 +3310,8 @@ void m68k_go (int may_quit) regs.spcflags |= of & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); } #endif - if (mmu_enabled && !currprefs.cachesize) { + set_x_funcs (); + if (mmu_enabled && !currprefs.cachesize) { run_func = m68k_run_mmu; } else { run_func = currprefs.cpu_cycle_exact && currprefs.cpu_model == 68000 ? m68k_run_1_ce : diff --git a/od-win32/caps/CapsAPI.h b/od-win32/caps/CapsAPI.h index 4f8820a9..4b44db24 100644 --- a/od-win32/caps/CapsAPI.h +++ b/od-win32/caps/CapsAPI.h @@ -5,16 +5,19 @@ #define CAPS_FILEPFX ".ipf" // Flags provided for locking, in order: -// 0: re-align data as index synced recording -// 1: decode track to word aligned size -// 2: generate cell density for variable density tracks -// 3: generate density for automatically sized cells -// 4: generate density for unformatted cells -// 5: generate unformatted data -// 6: generate unformatted data, that changes each revolution -// 7: directly use source memory buffer supplied with LockImageMemory -// 8: flakey data is created on one revolution, updated with each lock -// 9: ...Info.type holds the expected structure type +// 0: re-align data as index synced recording +// 1: decode track to word aligned size +// 2: generate cell density for variable density tracks +// 3: generate density for automatically sized cells +// 4: generate density for unformatted cells +// 5: generate unformatted data +// 6: generate unformatted data, that changes each revolution +// 7: directly use source memory buffer supplied with LockImageMemory +// 8: flakey data is created on one revolution, updated with each lock +// 9: ...Info.type holds the expected structure type +// 10: alternate density map as fractions +// 11: overlap position is in bits +// 12: tracklen is in bits, and the track buffer is bit sized #define DI_LOCK_INDEX DF_0 #define DI_LOCK_ALIGN DF_1 #define DI_LOCK_DENVAR DF_2 @@ -25,6 +28,9 @@ #define DI_LOCK_MEMREF DF_7 #define DI_LOCK_UPDATEFD DF_8 #define DI_LOCK_TYPE DF_9 +#define DI_LOCK_DENALT DF_10 +#define DI_LOCK_OVLBIT DF_11 +#define DI_LOCK_TRKBIT DF_12 #define CAPS_MAXPLATFORM 4 #define CAPS_MTRS 5 @@ -80,7 +86,7 @@ struct CapsTrackInfo { UDWORD sectorcnt; // available sectors UDWORD sectorsize; // sector size UDWORD trackcnt; // track variant count - PUBYTE trackbuf; // track buffer memory + PUBYTE trackbuf; // track buffer memory UDWORD tracklen; // track buffer memory length PUBYTE trackdata[CAPS_MTRS]; // track data pointer if available UDWORD tracksize[CAPS_MTRS]; // track data size @@ -97,11 +103,11 @@ struct CapsTrackInfoT1 { UDWORD head; // head# UDWORD sectorcnt; // available sectors UDWORD sectorsize; // sector size - PUBYTE trackbuf; // track buffer memory + PUBYTE trackbuf; // track buffer memory UDWORD tracklen; // track buffer memory length UDWORD timelen; // timing buffer length PUDWORD timebuf; // timing buffer - UDWORD overlap; // overlap position + SDWORD overlap; // overlap position }; typedef struct CapsTrackInfoT1 *PCAPSTRACKINFOT1; @@ -132,7 +138,7 @@ enum { // image error status enum { - imgeOk, + imgeOk=0, imgeUnsupported, imgeGeneric, imgeOutOfRange, @@ -147,7 +153,11 @@ enum { imgeDensityStream, imgeDensityData, imgeIncompatible, - imgeUnsupportedType + imgeUnsupportedType, + imgeBadBlockType, + imgeBadBlockSize, + imgeBadDataStart, + imgeBufferShort }; #endif diff --git a/od-win32/caps/caps_win32.cpp b/od-win32/caps/caps_win32.cpp index 5a0efe64..b8a458e0 100644 --- a/od-win32/caps/caps_win32.cpp +++ b/od-win32/caps/caps_win32.cpp @@ -16,8 +16,9 @@ static SDWORD caps_cont[4]= {-1, -1, -1, -1}; static int caps_locked[4]; -static int caps_flags = DI_LOCK_DENVAR|DI_LOCK_DENNOISE|DI_LOCK_NOISE|DI_LOCK_UPDATEFD|DI_LOCK_TYPE; +static int caps_flags = DI_LOCK_DENVAR|DI_LOCK_DENNOISE|DI_LOCK_NOISE|DI_LOCK_UPDATEFD|DI_LOCK_TYPE|DI_LOCK_OVLBIT; static struct CapsVersionInfo cvi; +static bool oldlib; #define LIB_TYPE 1 typedef SDWORD (__cdecl* CAPSINIT)(void); @@ -86,7 +87,10 @@ int caps_init (void) init = 1; cvi.type = LIB_TYPE; pCAPSGetVersionInfo (&cvi, 0); - write_log (L"CAPS: library version %d.%d\n", cvi.release, cvi.revision); + write_log (L"CAPS: library version %d.%d (flags=%08X)\n", cvi.release, cvi.revision, cvi.flag); + oldlib = (cvi.flag & (DI_LOCK_TRKBIT | DI_LOCK_OVLBIT)) != (DI_LOCK_TRKBIT | DI_LOCK_OVLBIT); + if (!oldlib) + caps_flags |= DI_LOCK_TRKBIT | DI_LOCK_OVLBIT; for (i = 0; i < 4; i++) caps_cont[i] = pCAPSAddImage (); return 1; @@ -180,44 +184,55 @@ static void outdisk (void) } #endif +static void mfmcopy (uae_u16 *mfm, uae_u8 *data, int len) +{ + int memlen = (len + 7) / 8; + for (int i = 0; i < memlen; i+=2) { + if (i + 1 < memlen) + *mfm++ = (data[i] << 8) + data[i + 1]; + else + *mfm++ = (data[i] << 8); + } +} + int caps_loadrevolution (uae_u16 *mfmbuf, int drv, int track, int *tracklength) { - int len, i; - uae_u16 *mfm; + int len; struct CapsTrackInfoT1 ci; ci.type = LIB_TYPE; - pCAPSLockTrack ((PCAPSTRACKINFO)&ci, caps_cont[drv], track / 2, track & 1, caps_flags); - len = ci.tracklen; - *tracklength = len * 8; - mfm = mfmbuf; - for (i = 0; i < (len + 1) / 2; i++) { - uae_u8 *data = ci.trackbuf + i * 2; - *mfm++ = 256 * *data + *(data + 1); - } + if (pCAPSLockTrack ((PCAPSTRACKINFO)&ci, caps_cont[drv], track / 2, track & 1, caps_flags) != imgeOk) + return 0; + if (oldlib) + len = ci.tracklen * 8; + else + len = ci.tracklen; + *tracklength = len; + mfmcopy (mfmbuf, ci.trackbuf, len); return 1; } int caps_loadtrack (uae_u16 *mfmbuf, uae_u16 *tracktiming, int drv, int track, int *tracklength, int *multirev, int *gapoffset) { - int i, len, type, ret; - uae_u16 *mfm; + int len; struct CapsTrackInfoT1 ci; ci.type = LIB_TYPE; if (tracktiming) *tracktiming = 0; - ret = pCAPSLockTrack ((PCAPSTRACKINFO)&ci, caps_cont[drv], track / 2, track & 1, caps_flags); - mfm = mfmbuf; + if (pCAPSLockTrack ((PCAPSTRACKINFO)&ci, caps_cont[drv], track / 2, track & 1, caps_flags) != imgeOk) + return 0; *multirev = (ci.type & CTIT_FLAG_FLAKEY) ? 1 : 0; - type = ci.type & CTIT_MASK_TYPE; - len = ci.tracklen; - *tracklength = len * 8; - *gapoffset = ci.overlap >= 0 ? ci.overlap * 8 : -1; - for (i = 0; i < (len + 1) / 2; i++) { - uae_u8 *data = ci.trackbuf + i * 2; - *mfm++ = 256 * *data + *(data + 1); + if (oldlib) { + len = ci.tracklen * 8; + *gapoffset = ci.overlap >= 0 ? ci.overlap * 8 : -1; + } else { + len = ci.tracklen; + *gapoffset = ci.overlap >= 0 ? ci.overlap : -1; } + //write_log (L"%d %d %d %d\n", track, len, ci.tracklen, ci.overlap); + *tracklength = len; + mfmcopy (mfmbuf, ci.trackbuf, len); #if 0 { FILE *f=fopen("c:\\1.txt","wb"); @@ -226,7 +241,7 @@ int caps_loadtrack (uae_u16 *mfmbuf, uae_u16 *tracktiming, int drv, int track, i } #endif if (ci.timelen > 0 && tracktiming) { - for (i = 0; i < ci.timelen; i++) + for (int i = 0; i < ci.timelen; i++) tracktiming[i] = (uae_u16)ci.timebuf[i]; } #if 0 diff --git a/od-win32/lib/prowizard_x64.lib b/od-win32/lib/prowizard_x64.lib index 925d51f2..5827edc6 100644 Binary files a/od-win32/lib/prowizard_x64.lib and b/od-win32/lib/prowizard_x64.lib differ diff --git a/od-win32/mman.cpp b/od-win32/mman.cpp index 15ba1f50..aa879cbe 100644 --- a/od-win32/mman.cpp +++ b/od-win32/mman.cpp @@ -61,25 +61,33 @@ static void setworkingset(void) static uae_u32 lowmem (void) { uae_u32 change = 0; - if (currprefs.z3fastmem_size + currprefs.z3fastmem2_size >= 8 * 1024 * 1024) { + if (currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size >= 8 * 1024 * 1024) { if (currprefs.z3fastmem2_size) { if (currprefs.z3fastmem2_size <= 128 * 1024 * 1024) { change = currprefs.z3fastmem2_size; currprefs.z3fastmem2_size = 0; } else { change = currprefs.z3fastmem2_size / 2; - currprefs.z3fastmem2_size >>= 1; + currprefs.z3fastmem2_size /= 2; changed_prefs.z3fastmem2_size = currprefs.z3fastmem2_size; } + } else if (currprefs.z3chipmem_size) { + if (currprefs.z3chipmem_size <= 16 * 1024 * 1024) { + change = currprefs.z3chipmem_size; + currprefs.z3chipmem_size = 0; + } else { + change = currprefs.z3chipmem_size / 2; + currprefs.z3chipmem_size /= 2; + } } else { change = currprefs.z3fastmem_size - currprefs.z3fastmem_size / 4; currprefs.z3fastmem2_size = changed_prefs.z3fastmem2_size = currprefs.z3fastmem_size / 4; - currprefs.z3fastmem_size >>= 1; + currprefs.z3fastmem_size /= 2; changed_prefs.z3fastmem_size = currprefs.z3fastmem_size; } } else if (currprefs.gfxmem_size >= 1 * 1024 * 1024) { change = currprefs.gfxmem_size - currprefs.gfxmem_size / 2; - currprefs.gfxmem_size >>= 1; + currprefs.gfxmem_size /= 2; changed_prefs.gfxmem_size = currprefs.gfxmem_size; } if (currprefs.z3fastmem2_size < 128 * 1024 * 1024) @@ -187,7 +195,8 @@ static void resetmem (void) int init_shm (void) { - uae_u32 size, totalsize, z3size, natmemsize, rtgbarrier, rtgextra; + uae_u32 size, totalsize, z3size, natmemsize; + uae_u32 rtgbarrier, z3chipbarrier, rtgextra; int rounds = 0; restart: @@ -206,13 +215,16 @@ restart: z3size = 0; size = 0x1000000; rtgextra = 0; + z3chipbarrier = 0; rtgbarrier = si.dwPageSize; if (currprefs.cpu_model >= 68020) size = 0x10000000; - if (currprefs.z3fastmem_size || currprefs.z3fastmem2_size) { - z3size = currprefs.z3fastmem_size + currprefs.z3fastmem2_size + (currprefs.z3fastmem_start - 0x10000000); + if (currprefs.z3fastmem_size || currprefs.z3fastmem2_size || currprefs.z3chipmem_size) { + z3size = currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size + (currprefs.z3fastmem_start - 0x10000000); if (currprefs.gfxmem_size) rtgbarrier = 16 * 1024 * 1024; + if (currprefs.z3chipmem_size && (currprefs.z3fastmem_size || currprefs.z3fastmem2_size)) + z3chipbarrier = 16 * 1024 * 1024; } else { rtgbarrier = 0; } @@ -236,13 +248,13 @@ restart: rtgbarrier = 0; rtgextra = 0; } - blah = (uae_u8*)VirtualAlloc (NULL, natmemsize + rtgbarrier + currprefs.gfxmem_size + rtgextra + 16 * si.dwPageSize, MEM_RESERVE, PAGE_READWRITE); + blah = (uae_u8*)VirtualAlloc (NULL, natmemsize + rtgbarrier + z3chipbarrier + currprefs.gfxmem_size + rtgextra + 16 * si.dwPageSize, MEM_RESERVE, PAGE_READWRITE); if (blah) { natmem_offset = blah; break; } write_log (L"NATMEM: %dM area failed to allocate, err=%d (Z3=%dM,RTG=%dM)\n", - natmemsize >> 20, GetLastError (), (currprefs.z3fastmem_size + currprefs.z3fastmem2_size) >> 20, currprefs.gfxmem_size >> 20); + natmemsize >> 20, GetLastError (), (currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size) >> 20, currprefs.gfxmem_size >> 20); if (!lowmem ()) { write_log (L"NATMEM: No special area could be allocated (2)!\n"); return 0; @@ -251,14 +263,14 @@ restart: p96mem_size = currprefs.gfxmem_size; if (p96mem_size) { VirtualFree (natmem_offset, 0, MEM_RELEASE); - if (!VirtualAlloc (natmem_offset, natmemsize + rtgbarrier, MEM_RESERVE, PAGE_READWRITE)) { + if (!VirtualAlloc (natmem_offset, natmemsize + rtgbarrier + z3chipbarrier, MEM_RESERVE, PAGE_READWRITE)) { write_log (L"VirtualAlloc() part 2 error %d. RTG disabled.\n", GetLastError ()); currprefs.gfxmem_size = changed_prefs.gfxmem_size = 0; rtgbarrier = si.dwPageSize; rtgextra = 0; goto restart; } - p96mem_offset = (uae_u8*)VirtualAlloc (natmem_offset + natmemsize + rtgbarrier, p96mem_size + rtgextra, + p96mem_offset = (uae_u8*)VirtualAlloc (natmem_offset + natmemsize + rtgbarrier + z3chipbarrier, p96mem_size + rtgextra, MEM_RESERVE | MEM_WRITE_WATCH, PAGE_READWRITE); if (!p96mem_offset) { currprefs.gfxmem_size = changed_prefs.gfxmem_size = 0; @@ -416,6 +428,14 @@ void *shmat (int shmid, void *shmaddr, int shmflg) size += BARRIER; got = TRUE; } + if(!_tcscmp (shmids[shmid].name, L"z3_chip")) { + uae_u32 l = currprefs.z3fastmem_start + currprefs.z3fastmem_size + currprefs.z3fastmem2_size; + if (currprefs.z3fastmem_size || currprefs.z3fastmem2_size) + l += 16 * 1024 * 1024; + shmaddr=natmem_offset + l; + size += BARRIER; + got = TRUE; + } if(!_tcscmp (shmids[shmid].name, L"gfx")) { got = TRUE; p96special = TRUE; diff --git a/od-win32/prowizard/prowizard.vcxproj b/od-win32/prowizard/prowizard.vcxproj index b9e8d405..f2e8ae68 100644 --- a/od-win32/prowizard/prowizard.vcxproj +++ b/od-win32/prowizard/prowizard.vcxproj @@ -113,6 +113,7 @@ + false @@ -149,7 +150,7 @@ Level3 ProgramDatabase StdCall - CompileAsC + Default 4996;%(DisableSpecificWarnings) @@ -157,6 +158,7 @@ prowizard_search;%(ExportNamedFunctions) + false diff --git a/od-win32/resources/resource b/od-win32/resources/resource index a9e63f2c..51560c3d 100644 --- a/od-win32/resources/resource +++ b/od-win32/resources/resource @@ -401,6 +401,9 @@ #define IDC_Z3FASTMEM 1049 #define IDC_MBRAM1 1050 #define IDC_MBRAM2 1051 +#define IDC_Z3CHIPMEM 1052 +#define IDC_Z3FASTRAM2 1053 +#define IDC_Z3CHIPRAM 1053 #define IDC_UAEHOME 1070 #define IDC_PICASSOHOME 1071 #define IDC_AMIGAHOME 1072 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 21cb1342..3c966501 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -152,31 +152,34 @@ BEGIN COMBOBOX IDC_DISPLAY_BUFFERCNT,187,47,87,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP END -IDD_MEMORY DIALOGEX 0, 0, 300, 158 +IDD_MEMORY DIALOGEX 0, 0, 300, 182 STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD EXSTYLE WS_EX_CONTEXTHELP FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN - GROUPBOX "Memory Settings",-1,14,7,274,69 - RTEXT "Chip:",-1,24,26,20,10,SS_CENTERIMAGE + GROUPBOX "Memory Settings",IDC_STATIC,14,7,274,97 CONTROL "Slider1",IDC_CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,22,50,20 EDITTEXT IDC_CHIPRAM,105,25,34,12,ES_CENTER | ES_READONLY - RTEXT "Slow:",-1,149,26,20,10,SS_CENTERIMAGE CONTROL "Slider1",IDC_SLOWMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,22,60,20 EDITTEXT IDC_SLOWRAM,243,25,34,12,ES_CENTER | ES_READONLY - RTEXT "Fast:",IDC_FASTTEXT,24,51,20,10,SS_CENTERIMAGE CONTROL "Slider1",IDC_FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,47,50,20 EDITTEXT IDC_FASTRAM,105,53,34,12,ES_CENTER | ES_READONLY - RTEXT "Z3 Fast:",IDC_Z3TEXT,139,51,30,10,SS_CENTERIMAGE CONTROL "Slider1",IDC_Z3FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,47,60,20 EDITTEXT IDC_Z3FASTRAM,243,50,34,12,ES_CENTER | ES_READONLY - GROUPBOX "A3000/A4000 Advanced Memory Settings",-1,14,84,274,65 - RTEXT "Motherboard Fast RAM:",-1,40,100,129,10,SS_CENTERIMAGE - CONTROL "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,96,59,20 - EDITTEXT IDC_MBRAM1,244,99,34,12,ES_CENTER | ES_READONLY - RTEXT "Processor Slot Fast RAM:",-1,40,123,129,10,SS_CENTERIMAGE - CONTROL "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,119,59,20 - EDITTEXT IDC_MBRAM2,244,122,34,12,ES_CENTER | ES_READONLY + GROUPBOX "A3000/A4000 Advanced Memory Settings",IDC_STATIC,14,110,274,65 + RTEXT "Motherboard Fast RAM:",IDC_STATIC,40,126,129,10,SS_CENTERIMAGE + CONTROL "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,122,59,20 + EDITTEXT IDC_MBRAM1,244,125,34,12,ES_CENTER | ES_READONLY + RTEXT "Processor Slot Fast RAM:",IDC_STATIC,40,149,129,10,SS_CENTERIMAGE + CONTROL "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,145,59,20 + EDITTEXT IDC_MBRAM2,244,148,34,12,ES_CENTER | ES_READONLY + RTEXT "Fast:",IDC_STATIC,19,49,32,15,SS_CENTERIMAGE + RTEXT "Chip:",IDC_STATIC,19,25,32,15,SS_CENTERIMAGE + RTEXT "Slow:",IDC_STATIC,144,25,32,15,SS_CENTERIMAGE + RTEXT "Z3 Fast:",IDC_STATIC,144,49,32,15,SS_CENTERIMAGE + RTEXT "Z3 Fake Chip:",IDC_STATIC,123,73,54,15,SS_CENTERIMAGE + CONTROL "",IDC_Z3CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,71,60,20 + EDITTEXT IDC_Z3CHIPRAM,243,76,34,12,ES_CENTER | ES_READONLY END IDD_CPU DIALOGEX 0, 0, 300, 241 @@ -1181,6 +1184,11 @@ BEGIN BEGIN END + IDD_MEMORY, DIALOG + BEGIN + BOTTOMMARGIN, 158 + END + IDD_CPU, DIALOG BEGIN END diff --git a/od-win32/win32.h b/od-win32/win32.h index c28a3310..6df2fd7f 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -18,8 +18,8 @@ #define WINUAEPUBLICBETA 1 #define LANG_DLL 1 -#define WINUAEBETA L"5" -#define WINUAEDATE MAKEBD(2010, 5, 26) +#define WINUAEBETA L"6" +#define WINUAEDATE MAKEBD(2010, 5, 29) #define WINUAEEXTRA L"" #define WINUAEREV L"" diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index 0084b08c..ab701857 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -1119,6 +1119,7 @@ static HWND cachedlist = NULL; #define MAX_SLOW_MEM 4 #define MIN_Z3_MEM 0 #define MAX_Z3_MEM ((max_z3fastmem >> 20) < 512 ? 12 : ((max_z3fastmem >> 20) < 1024 ? 13 : ((max_z3fastmem >> 20) < 2048) ? 14 : ((max_z3fastmem >> 20) < 2560) ? 15 : ((max_z3fastmem >> 20) < 3072) ? 16 : 17)) +#define MAX_Z3_CHIPMEM 7 #define MIN_P96_MEM 0 #define MAX_P96_MEM ((max_z3fastmem >> 20) < 512 ? 8 : ((max_z3fastmem >> 20) < 1024 ? 9 : ((max_z3fastmem >> 20) < 2048) ? 10 : 11)) #define MIN_MB_MEM 0 @@ -2408,6 +2409,7 @@ static int msi_chip[] = { 1, 2, 3, 14, 4, 5, 6 }; static int msi_bogo[] = { 0, 2, 3, 14, 15 }; static int msi_fast[] = { 0, 3, 4, 5, 6 }; static int msi_z3fast[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 17, 12, 18, 13, 19, 16, 20, 21 }; +static int msi_z3chip[] = { 0, 7, 8, 9, 10, 11, 12, 13 }; static int msi_gfx[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; static int CalculateHardfileSize (HWND hDlg) @@ -6111,6 +6113,8 @@ static void enable_for_memorydlg (HWND hDlg) ew (hDlg, IDC_Z3TEXT, z3); ew (hDlg, IDC_Z3FASTRAM, z3); ew (hDlg, IDC_Z3FASTMEM, z3); + ew (hDlg, IDC_Z3CHIPRAM, z3); + ew (hDlg, IDC_Z3CHIPMEM, z3); ew (hDlg, IDC_FASTMEM, fast); ew (hDlg, IDC_FASTRAM, fast); ew (hDlg, IDC_FASTTEXT, fast); @@ -6228,6 +6232,27 @@ static void values_to_memorydlg (HWND hDlg) SendDlgItemMessage (hDlg, IDC_Z3FASTMEM, TBM_SETPOS, TRUE, mem_size); SetDlgItemText (hDlg, IDC_Z3FASTRAM, memsize_names[msi_z3fast[mem_size]]); + mem_size = 0; + v = workprefs.z3chipmem_size; + if (v < 0x01000000) + mem_size = 0; + else if (v < 0x02000000) + mem_size = 1; + else if (v < 0x04000000) + mem_size = 2; + else if (v < 0x08000000) + mem_size = 3; + else if (v < 0x10000000) + mem_size = 4; + else if (v < 0x20000000) + mem_size = 5; + else if (v < 0x40000000) + mem_size = 6; + else + mem_size = 7; + SendDlgItemMessage (hDlg, IDC_Z3CHIPMEM, TBM_SETPOS, TRUE, mem_size); + SetDlgItemText (hDlg, IDC_Z3CHIPRAM, memsize_names[msi_z3chip[mem_size]]); + mem_size = 0; switch (workprefs.gfxmem_size) { case 0x00000000: mem_size = 0; break; @@ -6683,6 +6708,7 @@ static INT_PTR CALLBACK MemoryDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARA SendDlgItemMessage (hDlg, IDC_FASTMEM, TBM_SETRANGE, TRUE, MAKELONG (MIN_FAST_MEM, MAX_FAST_MEM)); SendDlgItemMessage (hDlg, IDC_SLOWMEM, TBM_SETRANGE, TRUE, MAKELONG (MIN_SLOW_MEM, MAX_SLOW_MEM)); SendDlgItemMessage (hDlg, IDC_Z3FASTMEM, TBM_SETRANGE, TRUE, MAKELONG (MIN_Z3_MEM, MAX_Z3_MEM)); + SendDlgItemMessage (hDlg, IDC_Z3CHIPMEM, TBM_SETRANGE, TRUE, MAKELONG (MIN_Z3_MEM, MAX_Z3_CHIPMEM)); SendDlgItemMessage (hDlg, IDC_MBMEM1, TBM_SETRANGE, TRUE, MAKELONG (MIN_MB_MEM, MAX_MB_MEM)); SendDlgItemMessage (hDlg, IDC_MBMEM2, TBM_SETRANGE, TRUE, MAKELONG (MIN_MB_MEM, MAX_MB_MEM)); @@ -6700,6 +6726,7 @@ static INT_PTR CALLBACK MemoryDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARA workprefs.fastmem_size = memsizes[msi_fast[SendMessage (GetDlgItem (hDlg, IDC_FASTMEM), TBM_GETPOS, 0, 0)]]; workprefs.z3fastmem_size = memsizes[msi_z3fast[SendMessage (GetDlgItem (hDlg, IDC_Z3FASTMEM), TBM_GETPOS, 0, 0)]]; updatez3 (&workprefs.z3fastmem_size, &workprefs.z3fastmem2_size); + workprefs.z3chipmem_size = memsizes[msi_z3chip[SendMessage (GetDlgItem (hDlg, IDC_Z3CHIPMEM), TBM_GETPOS, 0, 0)]]; workprefs.mbresmem_low_size = memsizes[msi_gfx[SendMessage (GetDlgItem (hDlg, IDC_MBMEM1), TBM_GETPOS, 0, 0)]]; workprefs.mbresmem_high_size = memsizes[msi_gfx[SendMessage (GetDlgItem (hDlg, IDC_MBMEM2), TBM_GETPOS, 0, 0)]]; fix_values_memorydlg (); diff --git a/od-win32/winuae_msvc10/winuae_msvc.vcxproj b/od-win32/winuae_msvc10/winuae_msvc.vcxproj index 2cc68dab..8edcf4a2 100644 --- a/od-win32/winuae_msvc10/winuae_msvc.vcxproj +++ b/od-win32/winuae_msvc10/winuae_msvc.vcxproj @@ -217,7 +217,7 @@ 0x0409 - ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;packet.lib;wpcap.lib;openal32.lib;libpng.lib;lglcd.lib;wtsapi32.lib;wntab32x.lib;enet_x64.lib;prowizard_x64.lib;%(AdditionalDependencies) + ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;packet.lib;wpcap.lib;openal32.lib;libpng.lib;lglcd.lib;wtsapi32.lib;wntab32x.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;%(AdditionalDependencies) d:\amiga\winuae64.exe true %(IgnoreSpecificDefaultLibraries) @@ -357,7 +357,7 @@ 0x0409 - ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;packet.lib;wpcap.lib;openal32.lib;libpng.lib;lglcd.lib;wtsapi32.lib;wntab32x.lib;enet_x64.lib;prowizard_x64.lib;%(AdditionalDependencies) + ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;packet.lib;wpcap.lib;openal32.lib;libpng.lib;lglcd.lib;wtsapi32.lib;wntab32x.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;%(AdditionalDependencies) NotSet d:\amiga\winuae64.exe true diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 4d5a6169..a68c9454 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,37 @@ +Beta 6: + +- CE-mode CIA interrupt delay decreased by 1 CPU clock cycle, tst.b CIAICR immediately followed + by move.w #x,INTREQ didn't clear the interrupt in some situations +- disk DMA used generic memory access routines, not chip access routines (could DMA to/from + any memory address, not just chip ram) +- "Z3 fake chip" added, "unlimited" chip ram size. (technically it adds another z3 fast ram + board that UAE boot rom changes to MEMF_CHIP|MEMF_PUBLIC|MEMF_LOCAL and removes normal chipset + DMA addressing limits) +- two directory filesystem crash fixes (related to opening non-existing files or directories, + broken during C++ conversion) +- CD32 state restore didn't work if CD32 configuration was not pre-selected +- save POT capacitors' charge status to statefile +- disk read DMA wordsync should not skip first syncword if data is already in sync +- on the fly cycle-exact switching broke few betas ago +- use early blitter finished state emulation only in 68000 cycle exact modes, 68020 "CE" can + execute blitter test and immediate blitter register near-instantly in some situations + +Beta 5: + +- autovsync was broken in b3 +- added NTSC checkbox to Quickstart panel +- use DirectInput keyboard if rawinput keyboard is not found, same with mouse. + (do not disable both if only mouse or keyboard is found like in b4) +- DirectInput keyboard and mouse didn't work in Test/Remap modes +- Gameports remap keyboard configuration was not loaded correctly +- Write Allocate 68030 data cache bit emulated +- better "too fast" 68020 CE interrupt workaround +- CD32 CD on fly media changes fixed (both internal mounter and real/virtual drives) +- CD32 CD unknown command handling modified (Last Ninja 3) + +Last Ninja 3 NOTE: game only works if CD is inserted after CD32 boot screen! (Real CD32 confirmed) + Beta 4: - keyboard input configuration didn't load correctly (was overwritten by default mappings diff --git a/savestate.cpp b/savestate.cpp index 418bb58b..74226db6 100644 --- a/savestate.cpp +++ b/savestate.cpp @@ -325,6 +325,7 @@ static uae_u8 *restore_chunk (struct zfile *f, TCHAR *name, size_t *len, size_t && _tcscmp (name, L"BRAM") != 0 && _tcscmp (name, L"FRAM") != 0 && _tcscmp (name, L"ZRAM") != 0 + && _tcscmp (name, L"ZCRM") != 0 && _tcscmp (name, L"PRAM") != 0 && _tcscmp (name, L"A3K1") != 0 && _tcscmp (name, L"A3K2") != 0) @@ -467,6 +468,9 @@ void restore_state (const TCHAR *filename) } else if (!_tcscmp (name, L"ZRAM")) { restore_zram (totallen, filepos, z3num++); continue; + } else if (!_tcscmp (name, L"ZCRM")) { + restore_zram (totallen, filepos, -1); + continue; } else if (!_tcscmp (name, L"BORO")) { restore_bootrom (totallen, filepos); continue; @@ -512,6 +516,8 @@ void restore_state (const TCHAR *filename) end = restore_cia (1, chunk); else if (!_tcscmp (name, L"CHIP")) end = restore_custom (chunk); + else if (!_tcscmp (name, L"CINP")) + end = restore_input (chunk); else if (!_tcscmp (name, L"CHPX")) end = restore_custom_extra (chunk); else if (!_tcscmp (name, L"AUD0")) @@ -647,6 +653,8 @@ static void save_rams (struct zfile *f, int comp) save_chunk (f, dst, len, L"ZRAM", comp); dst = save_zram (&len, 1); save_chunk (f, dst, len, L"ZRAM", comp); + dst = save_zram (&len, -1); + save_chunk (f, dst, len, L"ZCRM", comp); dst = save_bootrom (&len); save_chunk (f, dst, len, L"BORO", comp); #endif @@ -757,6 +765,10 @@ int save_state (const TCHAR *filename, const TCHAR *description) save_chunk (f, dst, len, L"CHPX", 0); xfree (dst); + dst = save_input (&len, 0); + save_chunk (f, dst, len, L"CINP", 0); + xfree (dst); + dst = save_custom_agacolors (&len, 0); save_chunk (f, dst, len, L"AGAC", 0); xfree (dst);