From bcf053d0e951903dac0596887008f268f5c5ad2f Mon Sep 17 00:00:00 2001 From: zeromus Date: Tue, 16 Dec 2014 05:04:55 +0000 Subject: [PATCH] psx - big update from upstream (0.9.36.5 -> 0.9.37-UNSTABLE) --- output/dll/octoshock.dll | Bin 995840 -> 838144 bytes psx/octoshock/bizhawk/octoshock.vcxproj | 13 +- .../bizhawk/octoshock.vcxproj.filters | 45 +- psx/octoshock/emuware/emuware.h | 54 + psx/octoshock/endian.cpp | 395 +- psx/octoshock/endian.h | 381 +- psx/octoshock/error.h | 150 +- psx/octoshock/git.h | 3 - psx/octoshock/masmem.h | 209 - psx/octoshock/psx/Makefile.am | 4 +- psx/octoshock/psx/Makefile.in | 39 +- psx/octoshock/psx/PSFLoader.cpp | 336 - psx/octoshock/psx/PSFLoader.h | 49 - psx/octoshock/psx/cdc.cpp | 75 +- psx/octoshock/psx/cdc.h | 4 +- psx/octoshock/psx/cpu.cpp | 194 +- psx/octoshock/psx/cpu.h | 18 +- .../{cpu_bigswitch.c => cpu_bigswitch.inc} | 9 +- ...pu_computedgoto.c => cpu_computedgoto.inc} | 9 +- psx/octoshock/psx/debug.cpp | 19 +- psx/octoshock/psx/dma.cpp | 308 +- psx/octoshock/psx/dma.h | 8 +- psx/octoshock/psx/frontio.cpp | 602 +- psx/octoshock/psx/frontio.h | 28 +- psx/octoshock/psx/gpu.cpp | 399 +- psx/octoshock/psx/gpu.h | 70 +- psx/octoshock/psx/gpu_command_table.inc | 232 - psx/octoshock/psx/gpu_common.inc | 318 + .../psx/{gpu_line.inc => gpu_line.cpp} | 70 + psx/octoshock/psx/gpu_polygon.cpp | 632 + psx/octoshock/psx/gpu_polygon.inc | 514 - .../psx/{gpu_sprite.inc => gpu_sprite.cpp} | 116 +- psx/octoshock/psx/gte.cpp | 3125 +- psx/octoshock/psx/gte.h | 6 +- psx/octoshock/psx/gte_divrecip.inc | 32768 ---------------- psx/octoshock/psx/input/dualanalog.cpp | 36 - psx/octoshock/psx/input/dualshock.cpp | 31 +- psx/octoshock/psx/input/dualshock.h | 2 +- psx/octoshock/psx/input/gamepad.cpp | 35 - psx/octoshock/psx/input/guncon.cpp | 130 +- psx/octoshock/psx/input/guncon.h | 1 - psx/octoshock/psx/input/justifier.cpp | 146 +- psx/octoshock/psx/input/justifier.h | 1 - psx/octoshock/psx/input/memcard.cpp | 140 +- psx/octoshock/psx/input/mouse.cpp | 106 +- psx/octoshock/psx/input/mouse.h | 2 - psx/octoshock/psx/input/multitap.cpp | 118 +- psx/octoshock/psx/input/multitap.h | 17 +- psx/octoshock/psx/input/negcon.cpp | 123 +- psx/octoshock/psx/input/negcon.h | 1 - psx/octoshock/psx/irq.cpp | 37 +- psx/octoshock/psx/irq.h | 3 +- psx/octoshock/psx/masmem.h | 102 + psx/octoshock/psx/mdec.cpp | 4 +- psx/octoshock/psx/mdec.h | 3 +- psx/octoshock/psx/psx.cpp | 172 +- psx/octoshock/psx/psx.h | 6 +- psx/octoshock/psx/sio.h | 2 - psx/octoshock/psx/spu.cpp | 613 +- psx/octoshock/psx/spu.h | 330 +- psx/octoshock/psx/spu_reverb.inc | 284 +- psx/octoshock/psx/timer.h | 3 +- psx/octoshock/state.cpp | 897 - psx/octoshock/state.h | 145 - psx/octoshock/video/surface.cpp | 30 +- psx/octoshock/video/surface.h | 28 +- psx/octoshock/video/video-common.h | 5 + 67 files changed, 5229 insertions(+), 39526 deletions(-) delete mode 100644 psx/octoshock/masmem.h delete mode 100644 psx/octoshock/psx/PSFLoader.cpp delete mode 100644 psx/octoshock/psx/PSFLoader.h rename psx/octoshock/psx/{cpu_bigswitch.c => cpu_bigswitch.inc} (95%) rename psx/octoshock/psx/{cpu_computedgoto.c => cpu_computedgoto.inc} (95%) delete mode 100644 psx/octoshock/psx/gpu_command_table.inc create mode 100644 psx/octoshock/psx/gpu_common.inc rename psx/octoshock/psx/{gpu_line.inc => gpu_line.cpp} (73%) create mode 100644 psx/octoshock/psx/gpu_polygon.cpp delete mode 100644 psx/octoshock/psx/gpu_polygon.inc rename psx/octoshock/psx/{gpu_sprite.inc => gpu_sprite.cpp} (64%) delete mode 100644 psx/octoshock/psx/gte_divrecip.inc create mode 100644 psx/octoshock/psx/masmem.h delete mode 100644 psx/octoshock/state.cpp delete mode 100644 psx/octoshock/state.h diff --git a/output/dll/octoshock.dll b/output/dll/octoshock.dll index 5858ec05de7e5dd213fdc6725f7adecec493cf59..2d53cb066f50b6caaf0bb8cdd53561d0d39ad85a 100644 GIT binary patch literal 838144 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 z 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%0A^CtX44W@^%{n@${r&m-7Q$$Gsz7Z(z?? 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 S0aF1}0aF1}0aJlh1^xyaAo~jd literal 995840 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%0Diwd9QZE}D{5|I_9zbxaWTTJ2e}CZ^;_vyq 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%0A6wh`x*N=Jc|SDkL(fl7<-(hxr?|U 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 bkAQy!{3GBW0sjd2N5DS<{t@{9d<6a1t< diff --git a/psx/octoshock/bizhawk/octoshock.vcxproj b/psx/octoshock/bizhawk/octoshock.vcxproj index e5bc0bd275..7c271354c3 100644 --- a/psx/octoshock/bizhawk/octoshock.vcxproj +++ b/psx/octoshock/bizhawk/octoshock.vcxproj @@ -20,7 +20,6 @@ - @@ -28,6 +27,9 @@ + + + @@ -44,7 +46,6 @@ - @@ -60,9 +61,7 @@ - - @@ -82,23 +81,25 @@ + - + + + - diff --git a/psx/octoshock/bizhawk/octoshock.vcxproj.filters b/psx/octoshock/bizhawk/octoshock.vcxproj.filters index 79b64800a8..9f00eb2a33 100644 --- a/psx/octoshock/bizhawk/octoshock.vcxproj.filters +++ b/psx/octoshock/bizhawk/octoshock.vcxproj.filters @@ -33,10 +33,6 @@ psx - - psx - - psx @@ -62,7 +58,6 @@ psx - cdrom @@ -122,6 +117,18 @@ emuware + + psx + + + psx + + + psx + + + psx + @@ -139,14 +146,8 @@ psx - - - - psx - - psx @@ -229,11 +230,26 @@ cdrom + + psx + + + psx + + + psx + + + psx + psx + + psx + psx @@ -243,13 +259,10 @@ psx - + psx - - psx - - + psx diff --git a/psx/octoshock/emuware/emuware.h b/psx/octoshock/emuware/emuware.h index 15481a1f53..45bda5db25 100644 --- a/psx/octoshock/emuware/emuware.h +++ b/psx/octoshock/emuware/emuware.h @@ -21,6 +21,51 @@ typedef unsigned __int32 uint32; typedef unsigned __int16 uint16; typedef unsigned __int8 uint8; +#define final +#define noexcept + +#ifdef _MSC_VER +#include +//http://stackoverflow.com/questions/355967/how-to-use-msvc-intrinsics-to-get-the-equivalent-of-this-gcc-code +//if needed +//uint32_t __inline ctz( uint32_t value ) +//{ +// DWORD trailing_zero = 0; +// +// if ( _BitScanForward( &trailing_zero, value ) ) +// { +// return trailing_zero; +// } +// else +// { +// // This is undefined, I better choose 32 than 0 +// return 32; +// } +//} + +uint32 __inline __builtin_clz( uint32_t value ) +{ + unsigned long leading_zero = 0; + + if ( _BitScanReverse( &leading_zero, value ) ) + { + return 31 - leading_zero; + } + else + { + // Same remarks as above + return 32; + } +} +#endif + +//#if MDFN_GCC_VERSION >= MDFN_MAKE_GCCV(4,7,0) +// #define MDFN_ASSUME_ALIGNED(p, align) __builtin_assume_aligned((p), (align)) +//#else +// #define MDFN_ASSUME_ALIGNED(p, align) (p) +//#endif +#define MDFN_ASSUME_ALIGNED(p, align) (p) + //#define MDFN_WARN_UNUSED_RESULT __attribute__ ((warn_unused_result)) #define MDFN_WARN_UNUSED_RESULT @@ -53,6 +98,15 @@ typedef unsigned __int8 uint8; #define TRUE_1 1 #define FALSE_0 0 +#ifndef ARRAY_SIZE +//taken from winnt.h +extern "C++" // templates cannot be declared to have 'C' linkage +template +char (*BLAHBLAHBLAH( UNALIGNED T (&)[N] ))[N]; + +#define ARRAY_SIZE(A) (sizeof(*BLAHBLAHBLAH(A))) +#endif + //------------alignment macros------------- //dont apply these to types without further testing. it only works portably here on declarations of variables //cant we find a pattern other people use more successfully? diff --git a/psx/octoshock/endian.cpp b/psx/octoshock/endian.cpp index f0c7bdfa25..c883b177f6 100644 --- a/psx/octoshock/endian.cpp +++ b/psx/octoshock/endian.cpp @@ -1,246 +1,151 @@ -/* Mednafen - Multi-system Emulator - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - +/* Mednafen - Multi-system Emulator + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + #include -#include "octoshock.h" -#include "endian.h" - -void Endian_A16_Swap(void *src, uint32 nelements) -{ - uint32 i; - uint8 *nsrc = (uint8 *)src; - - for(i = 0; i < nelements; i++) - { - uint8 tmp = nsrc[i * 2]; - - nsrc[i * 2] = nsrc[i * 2 + 1]; - nsrc[i * 2 + 1] = tmp; - } -} - -void Endian_A32_Swap(void *src, uint32 nelements) -{ - uint32 i; - uint8 *nsrc = (uint8 *)src; - - for(i = 0; i < nelements; i++) - { - uint8 tmp1 = nsrc[i * 4]; - uint8 tmp2 = nsrc[i * 4 + 1]; - - nsrc[i * 4] = nsrc[i * 4 + 3]; - nsrc[i * 4 + 1] = nsrc[i * 4 + 2]; - - nsrc[i * 4 + 2] = tmp2; - nsrc[i * 4 + 3] = tmp1; - } -} - -void Endian_A64_Swap(void *src, uint32 nelements) -{ - uint32 i; - uint8 *nsrc = (uint8 *)src; - - for(i = 0; i < nelements; i++) - { - uint8 *base = &nsrc[i * 8]; - - for(int z = 0; z < 4; z++) - { - uint8 tmp = base[z]; - - base[z] = base[7 - z]; - base[7 - z] = tmp; - } - } -} - -void Endian_A16_NE_to_LE(void *src, uint32 nelements) -{ - #ifdef MSB_FIRST - Endian_A16_Swap(src, nelements); - #endif -} - -void Endian_A32_NE_to_LE(void *src, uint32 nelements) -{ - #ifdef MSB_FIRST - Endian_A32_Swap(src, nelements); - #endif -} - -void Endian_A64_NE_to_LE(void *src, uint32 nelements) -{ - #ifdef MSB_FIRST - Endian_A64_Swap(src, nelements); - #endif -} - - -void Endian_A16_LE_to_NE(void *src, uint32 nelements) -{ - #ifdef MSB_FIRST - uint32 i; - uint8 *nsrc = (uint8 *)src; - - for(i = 0; i < nelements; i++) - { - uint8 tmp = nsrc[i * 2]; - - nsrc[i * 2] = nsrc[i * 2 + 1]; - nsrc[i * 2 + 1] = tmp; - } - #endif -} - -void Endian_A16_BE_to_NE(void *src, uint32 nelements) -{ - #ifdef LSB_FIRST - uint32 i; - uint8 *nsrc = (uint8 *)src; - - for(i = 0; i < nelements; i++) - { - uint8 tmp = nsrc[i * 2]; - - nsrc[i * 2] = nsrc[i * 2 + 1]; - nsrc[i * 2 + 1] = tmp; - } - #endif -} - - -void Endian_A32_LE_to_NE(void *src, uint32 nelements) -{ - #ifdef MSB_FIRST - uint32 i; - uint8 *nsrc = (uint8 *)src; - - for(i = 0; i < nelements; i++) - { - uint8 tmp1 = nsrc[i * 4]; - uint8 tmp2 = nsrc[i * 4 + 1]; - - nsrc[i * 4] = nsrc[i * 4 + 3]; - nsrc[i * 4 + 1] = nsrc[i * 4 + 2]; - - nsrc[i * 4 + 2] = tmp2; - nsrc[i * 4 + 3] = tmp1; - } - #endif -} - -void Endian_A64_LE_to_NE(void *src, uint32 nelements) -{ - #ifdef MSB_FIRST - uint32 i; - uint8 *nsrc = (uint8 *)src; - - for(i = 0; i < nelements; i++) - { - uint8 *base = &nsrc[i * 8]; - - for(int z = 0; z < 4; z++) - { - uint8 tmp = base[z]; - - base[z] = base[7 - z]; - base[7 - z] = tmp; - } - } - #endif -} - -void FlipByteOrder(uint8 *src, uint32 count) -{ - uint8 *start=src; - uint8 *end=src+count-1; - - if((count&1) || !count) return; /* This shouldn't happen. */ - - count >>= 1; - - while(count--) - { - uint8 tmp; - - tmp=*end; - *end=*start; - *start=tmp; - end--; - start++; - } -} - -void Endian_V_LE_to_NE(void *src, uint32 bytesize) -{ - #ifdef MSB_FIRST - FlipByteOrder((uint8 *)src, bytesize); - #endif -} - -void Endian_V_NE_to_LE(void *src, uint32 bytesize) -{ - #ifdef MSB_FIRST - FlipByteOrder((uint8 *)src, bytesize); - #endif -} - -int write16le(uint16 b, FILE *fp) -{ - uint8 s[2]; - s[0]=b; - s[1]=b>>8; - return((fwrite(s,1,2,fp)<2)?0:2); -} - -int write32le(uint32 b, FILE *fp) -{ - uint8 s[4]; - s[0]=b; - s[1]=b>>8; - s[2]=b>>16; - s[3]=b>>24; - return((fwrite(s,1,4,fp)<4)?0:4); -} - -int read32le(uint32 *Bufo, FILE *fp) -{ - uint32 buf; - if(fread(&buf,1,4,fp)<4) - return 0; - #ifdef LSB_FIRST - *(uint32*)Bufo=buf; - #else - *(uint32*)Bufo=((buf&0xFF)<<24)|((buf&0xFF00)<<8)|((buf&0xFF0000)>>8)|((buf&0xFF000000)>>24); - #endif - return 1; -} - -int read16le(char *d, FILE *fp) -{ - #ifdef LSB_FIRST - return((fread(d,1,2,fp)<2)?0:2); - #else - int ret; - ret=fread(d+1,1,1,fp); - ret+=fread(d,1,1,fp); - return ret<2?0:2; - #endif -} - +#include "octoshock.h" +#include "endian.h" + +void Endian_A16_Swap(void *src, uint32 nelements) +{ + uint32 i; + uint8 *nsrc = (uint8 *)src; + + for(i = 0; i < nelements; i++) + { + uint8 tmp = nsrc[i * 2]; + + nsrc[i * 2] = nsrc[i * 2 + 1]; + nsrc[i * 2 + 1] = tmp; + } +} + +void Endian_A32_Swap(void *src, uint32 nelements) +{ + uint32 i; + uint8 *nsrc = (uint8 *)src; + + for(i = 0; i < nelements; i++) + { + uint8 tmp1 = nsrc[i * 4]; + uint8 tmp2 = nsrc[i * 4 + 1]; + + nsrc[i * 4] = nsrc[i * 4 + 3]; + nsrc[i * 4 + 1] = nsrc[i * 4 + 2]; + + nsrc[i * 4 + 2] = tmp2; + nsrc[i * 4 + 3] = tmp1; + } +} + +void Endian_A64_Swap(void *src, uint32 nelements) +{ + uint32 i; + uint8 *nsrc = (uint8 *)src; + + for(i = 0; i < nelements; i++) + { + uint8 *base = &nsrc[i * 8]; + + for(int z = 0; z < 4; z++) + { + uint8 tmp = base[z]; + + base[z] = base[7 - z]; + base[7 - z] = tmp; + } + } +} + +void Endian_A16_NE_LE(void *src, uint32 nelements) +{ + #ifdef MSB_FIRST + Endian_A16_Swap(src, nelements); + #endif +} + +void Endian_A32_NE_LE(void *src, uint32 nelements) +{ + #ifdef MSB_FIRST + Endian_A32_Swap(src, nelements); + #endif +} + +void Endian_A64_NE_LE(void *src, uint32 nelements) +{ + #ifdef MSB_FIRST + Endian_A64_Swap(src, nelements); + #endif +} + +// +// +// +void Endian_A16_NE_BE(void *src, uint32 nelements) +{ + #ifdef LSB_FIRST + Endian_A16_Swap(src, nelements); + #endif +} + +void Endian_A32_NE_BE(void *src, uint32 nelements) +{ + #ifdef LSB_FIRST + Endian_A32_Swap(src, nelements); + #endif +} + +void Endian_A64_NE_BE(void *src, uint32 nelements) +{ + #ifdef LSB_FIRST + Endian_A64_Swap(src, nelements); + #endif +} + +static void FlipByteOrder(uint8 *src, uint32 count) +{ + uint8 *start=src; + uint8 *end=src+count-1; + + if((count&1) || !count) return; /* This shouldn't happen. */ + + count >>= 1; + + while(count--) + { + uint8 tmp; + + tmp=*end; + *end=*start; + *start=tmp; + end--; + start++; + } +} + +void Endian_V_NE_LE(void *src, uint32 bytesize) +{ + #ifdef MSB_FIRST + FlipByteOrder((uint8 *)src, bytesize); + #endif +} + +void Endian_V_NE_BE(void *src, uint32 bytesize) +{ + #ifdef LSB_FIRST + FlipByteOrder((uint8 *)src, bytesize); + #endif +} diff --git a/psx/octoshock/endian.h b/psx/octoshock/endian.h index 446eec45ec..f0128cdb57 100644 --- a/psx/octoshock/endian.h +++ b/psx/octoshock/endian.h @@ -1,209 +1,296 @@ #ifndef __MDFN_ENDIAN_H #define __MDFN_ENDIAN_H -#include "octoshock.h" +#pragma warning(once : 4519) +static INLINE uint32 BitsExtract(const uint8* ptr, const size_t bit_offset, const size_t bit_count) +{ + uint32 ret = 0; -#ifdef MSB_FIRST - #ifdef LSB_FIRST - #error Only define one of LSB_FIRST and MSB_FIRST - #endif + for(size_t x = 0; x < bit_count; x++) + { + size_t co = bit_offset + x; + bool b = (ptr[co >> 3] >> (co & 7)) & 1; - #ifndef le32toh - #define le32toh(l) ((((l)>>24) & 0xff) | (((l)>>8) & 0xff00) \ - | (((l)<<8) & 0xff0000) | (((l)<<24) & 0xff000000)) - #endif - #ifndef le16toh - #define le16toh(l) ((((l)>>8) & 0xff) | (((l)<<8) & 0xff00)) - #endif -#else - #ifndef le32toh - #define le32toh(l) (l) - #endif - #ifndef le16toh - #define le16toh(l) (l) - #endif -#endif + ret |= (uint64)b << x; + } -#ifndef htole32 -#define htole32 le32toh -#endif + return ret; +} -#ifndef htole16 -#define htole16 le16toh -#endif +static INLINE void BitsIntract(uint8* ptr, const size_t bit_offset, const size_t bit_count, uint32 value) +{ + for(size_t x = 0; x < bit_count; x++) + { + size_t co = bit_offset + x; + bool b = (value >> x) & 1; + uint8 tmp = ptr[co >> 3]; + tmp &= ~(1 << (co & 7)); + tmp |= b << (co & 7); -int write16le(uint16 b, FILE *fp); -int write32le(uint32 b, FILE *fp); -int read32le(uint32 *Bufo, FILE *fp); + ptr[co >> 3] = tmp; + } +} + +/* + Regarding safety of calling MDFN_*sb on dynamically-allocated memory with new uint8[], see C++ standard 3.7.3.1(i.e. it should be + safe provided the offsets into the memory are aligned/multiples of the MDFN_*sb access type). malloc()'d and calloc()'d + memory should be safe as well. + + Statically-allocated arrays/memory should be unioned with a big POD type or C++11 "alignas"'d. (May need to audit code to ensure + this is being done). +*/ void Endian_A16_Swap(void *src, uint32 nelements); void Endian_A32_Swap(void *src, uint32 nelements); void Endian_A64_Swap(void *src, uint32 nelements); -void Endian_A16_NE_to_LE(void *src, uint32 nelements); -void Endian_A32_NE_to_LE(void *src, uint32 nelements); -void Endian_A64_NE_to_LE(void *src, uint32 nelements); +void Endian_A16_NE_LE(void *src, uint32 nelements); +void Endian_A32_NE_LE(void *src, uint32 nelements); +void Endian_A64_NE_LE(void *src, uint32 nelements); -void Endian_A16_LE_to_NE(void *src, uint32 nelements); -void Endian_A16_BE_to_NE(void *src, uint32 nelements); -void Endian_A32_LE_to_NE(void *src, uint32 nelements); -void Endian_A64_LE_to_NE(void *src, uint32 nelements); +void Endian_A16_NE_BE(void *src, uint32 nelements); +void Endian_A32_NE_BE(void *src, uint32 nelements); +void Endian_A64_NE_BE(void *src, uint32 nelements); -void Endian_V_LE_to_NE(void *src, uint32 bytesize); -void Endian_V_NE_to_LE(void *src, uint32 bytesize); +void Endian_V_NE_LE(void *src, uint32 bytesize); +void Endian_V_NE_BE(void *src, uint32 bytesize); -void FlipByteOrder(uint8 *src, uint32 count); - -// The following functions can encode/decode to unaligned addresses. - -static INLINE void MDFN_en16lsb(uint8 *buf, uint16 morp) +static INLINE uint16 MDFN_bswap16(uint16 v) { - buf[0]=morp; - buf[1]=morp>>8; + return (v << 8) | (v >> 8); } -static INLINE void MDFN_en24lsb(uint8 *buf, uint32 morp) +static INLINE uint32 MDFN_bswap32(uint32 v) { - buf[0]=morp; - buf[1]=morp>>8; - buf[2]=morp>>16; + return (v << 24) | ((v & 0xFF00) << 8) | ((v >> 8) & 0xFF00) | (v >> 24); } - -static INLINE void MDFN_en32lsb(uint8 *buf, uint32 morp) +static INLINE uint64 MDFN_bswap64(uint64 v) { - buf[0]=morp; - buf[1]=morp>>8; - buf[2]=morp>>16; - buf[3]=morp>>24; + //octoshock edit + //return (v << 56) | (v >> 56) | ((v & 0xFF00) << 40) | ((v >> 40) & 0xFF00) | ((uint64)MDFN_bswap32(v >> 16) << 16); + return (v << 56) | (v >> 56) | ((v & 0xFF00) << 40) | ((v >> 40) & 0xFF00) | ((uint64)MDFN_bswap32(((uint32)v) >> 16) << 16); } -static INLINE void MDFN_en64lsb(uint8 *buf, uint64 morp) +#ifdef LSB_FIRST + #define MDFN_ENDIANH_IS_BIGENDIAN 0 +#else + #define MDFN_ENDIANH_IS_BIGENDIAN 1 +#endif + +// +// X endian. +// +template +static INLINE T MDFN_deXsb(const void* ptr) { - buf[0]=morp >> 0; - buf[1]=morp >> 8; - buf[2]=morp >> 16; - buf[3]=morp >> 24; - buf[4]=morp >> 32; - buf[5]=morp >> 40; - buf[6]=morp >> 48; - buf[7]=morp >> 56; + T tmp; + + memcpy(&tmp, MDFN_ASSUME_ALIGNED(ptr, (aligned ? sizeof(T) : 1)), sizeof(T)); + + if(isbigendian != -1 && isbigendian != MDFN_ENDIANH_IS_BIGENDIAN) + { + static_assert(sizeof(T) == 1 || sizeof(T) == 2 || sizeof(T) == 4 || sizeof(T) == 8, "Gummy penguins."); + + if(sizeof(T) == 8) + return (T)MDFN_bswap64(tmp); + else if(sizeof(T) == 4) + return (T)MDFN_bswap32(tmp); + else if(sizeof(T) == 2) + return (T)MDFN_bswap16(tmp); + } + + return tmp; } - -static INLINE void MDFN_en16msb(uint8 *buf, uint16 morp) +// +// Native endian. +// +template +static INLINE T MDFN_densb(const void* ptr) { - buf[0] = morp >> 8; - buf[1] = morp; + return MDFN_deXsb<-1, T, aligned>(ptr); } -static INLINE void MDFN_en24msb(uint8 *buf, uint32 morp) +// +// Little endian. +// +template +static INLINE T MDFN_delsb(const void* ptr) { - buf[0] = morp >> 16; - buf[1] = morp >> 8; - buf[2] = morp; + return MDFN_deXsb<0, T, aligned>(ptr); } -static INLINE void MDFN_en32msb(uint8 *buf, uint32 morp) +template +static INLINE uint16 MDFN_de16lsb(const void* ptr) { - buf[0] = morp >> 24; - buf[1] = morp >> 16; - buf[2] = morp >> 8; - buf[3] = morp; + return MDFN_delsb(ptr); } -static INLINE void MDFN_en64msb(uint8 *buf, uint64 morp) -{ - buf[0] = morp >> 56; - buf[1] = morp >> 48; - buf[2] = morp >> 40; - buf[3] = morp >> 32; - buf[4] = morp >> 24; - buf[5] = morp >> 16; - buf[6] = morp >> 8; - buf[7] = morp >> 0; -} - - -// Overloaded functions, yay. -static INLINE void MDFN_enlsb(uint16 * buf, uint16 value) -{ - MDFN_en16lsb((uint8 *)buf, value); -} - -static INLINE void MDFN_enlsb(uint32 * buf, uint32 value) -{ - MDFN_en32lsb((uint8 *)buf, value); -} - -static INLINE void MDFN_enlsb(uint64 * buf, uint64 value) -{ - MDFN_en64lsb((uint8 *)buf, value); -} - - -static INLINE uint16 MDFN_de16lsb(const uint8 *morp) -{ - return(morp[0] | (morp[1] << 8)); -} - - -static INLINE uint32 MDFN_de24lsb(const uint8 *morp) +static INLINE uint32 MDFN_de24lsb(const void* ptr) { + const uint8* morp = (const uint8*)ptr; return(morp[0]|(morp[1]<<8)|(morp[2]<<16)); } -static INLINE uint32 MDFN_de32lsb(const uint8 *morp) +template +static INLINE uint32 MDFN_de32lsb(const void* ptr) { - return(morp[0]|(morp[1]<<8)|(morp[2]<<16)|(morp[3]<<24)); + return MDFN_delsb(ptr); } -static INLINE uint64 MDFN_de64lsb(const uint8 *morp) +template +static INLINE uint64 MDFN_de64lsb(const void* ptr) { - uint64 ret = 0; - - ret |= (uint64)morp[0]; - ret |= (uint64)morp[1] << 8; - ret |= (uint64)morp[2] << 16; - ret |= (uint64)morp[3] << 24; - ret |= (uint64)morp[4] << 32; - ret |= (uint64)morp[5] << 40; - ret |= (uint64)morp[6] << 48; - ret |= (uint64)morp[7] << 56; - - return(ret); + return MDFN_delsb(ptr); } -static INLINE uint16 MDFN_delsb(const uint16 *buf) +// +// Big endian. +// +template +static INLINE T MDFN_demsb(const void* ptr) { - return(MDFN_de16lsb((uint8 *)buf)); + return MDFN_deXsb<1, T, aligned>(ptr); } -static INLINE uint32 MDFN_delsb(const uint32 *buf) +template +static INLINE uint16 MDFN_de16msb(const void* ptr) { - return(MDFN_de32lsb((uint8 *)buf)); + return MDFN_demsb(ptr); } -static INLINE uint64 MDFN_delsb(const uint64 *buf) -{ - return(MDFN_de64lsb((uint8 *)buf)); -} - -static INLINE uint16 MDFN_de16msb(const uint8 *morp) -{ - return(morp[1] | (morp[0] << 8)); -} - -static INLINE uint32 MDFN_de24msb(const uint8 *morp) +static INLINE uint32 MDFN_de24msb(const void* ptr) { + const uint8* morp = (const uint8*)ptr; return((morp[2]<<0)|(morp[1]<<8)|(morp[0]<<16)); } - -static INLINE uint32 MDFN_de32msb(const uint8 *morp) +template +static INLINE uint32 MDFN_de32msb(const void* ptr) { - return(morp[3]|(morp[2]<<8)|(morp[1]<<16)|(morp[0]<<24)); + return MDFN_demsb(ptr); +} + +template +static INLINE uint64 MDFN_de64msb(const void* ptr) +{ + return MDFN_demsb(ptr); +} + +// +// +// +// +// +// +// +// + +// +// X endian. +// +template +static INLINE void MDFN_enXsb(void* ptr, T value) +{ + T tmp = value; + + if(isbigendian != -1 && isbigendian != MDFN_ENDIANH_IS_BIGENDIAN) + { + static_assert(sizeof(T) == 1 || sizeof(T) == 2 || sizeof(T) == 4 || sizeof(T) == 8, "Gummy penguins."); + + if(sizeof(T) == 8) + tmp = (T)MDFN_bswap64(value); + else if(sizeof(T) == 4) + tmp = (T)MDFN_bswap32(value); + else if(sizeof(T) == 2) + tmp = (T)MDFN_bswap16(value); + } + + memcpy(MDFN_ASSUME_ALIGNED(ptr, (aligned ? sizeof(T) : 1)), &tmp, sizeof(T)); +} + +// +// Native endian. +// +template +static INLINE void MDFN_ennsb(void* ptr, T value) +{ + MDFN_enXsb<-1, T, aligned>(ptr, value); +} + +// +// Little endian. +// +template +static INLINE void MDFN_enlsb(void* ptr, T value) +{ + MDFN_enXsb<0, T, aligned>(ptr, value); +} + +template +static INLINE void MDFN_en16lsb(void* ptr, uint16 value) +{ + MDFN_enlsb(ptr, value); +} + +static INLINE void MDFN_en24lsb(void* ptr, uint32 value) +{ + uint8* morp = (uint8*)ptr; + + morp[0] = value; + morp[1] = value >> 8; + morp[2] = value >> 16; +} + +template +static INLINE void MDFN_en32lsb(void* ptr, uint32 value) +{ + MDFN_enlsb(ptr, value); +} + +template +static INLINE void MDFN_en64lsb(void* ptr, uint64 value) +{ + MDFN_enlsb(ptr, value); +} + + +// +// Big endian. +// +template +static INLINE void MDFN_enmsb(void* ptr, T value) +{ + MDFN_enXsb<1, T, aligned>(ptr, value); +} + +template +static INLINE void MDFN_en16msb(void* ptr, uint16 value) +{ + MDFN_enmsb(ptr, value); +} + +static INLINE void MDFN_en24msb(void* ptr, uint32 value) +{ + uint8* morp = (uint8*)ptr; + + morp[0] = value; + morp[1] = value >> 8; + morp[2] = value >> 16; +} + +template +static INLINE void MDFN_en32msb(void* ptr, uint32 value) +{ + MDFN_enmsb(ptr, value); +} + +template +static INLINE void MDFN_en64msb(void* ptr, uint64 value) +{ + MDFN_enmsb(ptr, value); } #endif diff --git a/psx/octoshock/error.h b/psx/octoshock/error.h index 6b0b7a82b2..a05259a815 100644 --- a/psx/octoshock/error.h +++ b/psx/octoshock/error.h @@ -1,75 +1,75 @@ -#ifndef __MDFN_ERROR_H -#define __MDFN_ERROR_H - -#include -#include -#include - -#ifdef __cplusplus - -class ErrnoHolder; -class MDFN_Error : public std::exception -{ - public: - - MDFN_Error() throw(); - - MDFN_Error(int errno_code_new, const char *format, ...) throw() MDFN_FORMATSTR(gnu_printf, 3, 4); - MDFN_Error(const ErrnoHolder &enh); - - ~MDFN_Error() throw(); - - MDFN_Error(const MDFN_Error &ze_error) throw(); - MDFN_Error & operator=(const MDFN_Error &ze_error) throw(); - - virtual const char *what(void) const throw(); - int GetErrno(void) const throw(); - - private: - - int errno_code; - char *error_message; -}; - -class ErrnoHolder -{ - public: - - ErrnoHolder() - { - //SetErrno(0); - local_errno = 0; - local_strerror[0] = 0; - } - - ErrnoHolder(int the_errno) - { - SetErrno(the_errno); - } - - inline int Errno(void) const - { - return(local_errno); - } - - const char *StrError(void) const - { - return(local_strerror); - } - - void operator=(int the_errno) - { - SetErrno(the_errno); - } - - private: - - void SetErrno(int the_errno); - - int local_errno; - char local_strerror[256]; -}; - -#endif - -#endif +#ifndef __MDFN_ERROR_H +#define __MDFN_ERROR_H + +#include +#include +#include + +#ifdef __cplusplus + +class ErrnoHolder; +class MDFN_Error : public std::exception +{ + public: + + MDFN_Error() noexcept; + + MDFN_Error(int errno_code_new, const char *format, ...) noexcept MDFN_FORMATSTR(gnu_printf, 3, 4); + MDFN_Error(const ErrnoHolder &enh); + + ~MDFN_Error() noexcept; + + MDFN_Error(const MDFN_Error &ze_error) noexcept; + MDFN_Error & operator=(const MDFN_Error &ze_error) noexcept; + + virtual const char *what(void) const noexcept; + int GetErrno(void) const noexcept; + + private: + + int errno_code; + char *error_message; +}; + +class ErrnoHolder +{ + public: + + ErrnoHolder() + { + //SetErrno(0); + local_errno = 0; + local_strerror[0] = 0; + } + + ErrnoHolder(int the_errno) + { + SetErrno(the_errno); + } + + inline int Errno(void) const + { + return(local_errno); + } + + const char *StrError(void) const + { + return(local_strerror); + } + + void operator=(int the_errno) + { + SetErrno(the_errno); + } + + private: + + void SetErrno(int the_errno); + + int local_errno; + char local_strerror[256]; +}; + +#endif + +#endif diff --git a/psx/octoshock/git.h b/psx/octoshock/git.h index a74cdcbcde..c6ca94b4cb 100644 --- a/psx/octoshock/git.h +++ b/psx/octoshock/git.h @@ -45,8 +45,6 @@ typedef enum GMT_PLAYER // Music player(NSF, HES, GSF) } GameMediumTypes; -#include "state.h" - #ifdef WANT_DEBUGGER // #ifdef WANT_DEBUGGER // typedef struct DebuggerInfoStruct; @@ -276,7 +274,6 @@ typedef struct // Main save state routine, called by the save state code in state.cpp. // When saving, load is set to 0. When loading, load is set to the version field of the save state being loaded. // data_only is true when the save state data is temporary, such as being saved into memory for state rewinding. - int (*StateAction)(StateMem *sm, int load, int data_only); void (*Emulate)(EmulateSpecStruct *espec); void (*SetInput)(int port, const char *type, void *ptr); diff --git a/psx/octoshock/masmem.h b/psx/octoshock/masmem.h deleted file mode 100644 index 2b6043c434..0000000000 --- a/psx/octoshock/masmem.h +++ /dev/null @@ -1,209 +0,0 @@ -#ifndef __MDFN_PSX_MASMEM_H -#define __MDFN_PSX_MASMEM_H - -// TODO, WIP (big-endian stores and loads not fully supported yet) - -#ifdef LSB_FIRST - #define MAS_NATIVE_IS_BIGENDIAN 0 -#else - #define MAS_NATIVE_IS_BIGENDIAN 1 -#endif - -static INLINE uint16 LoadU16_RBO(const uint16 *a) -{ - #ifdef ARCH_POWERPC - uint16 tmp; - - __asm__ ("lhbrx %0, %y1" : "=r"(tmp) : "Z"(*a)); - - return(tmp); - - #else - uint16 tmp = *a; - return((tmp << 8) | (tmp >> 8)); - #endif -} - -static INLINE uint32 LoadU32_RBO(const uint32 *a) -{ - #ifdef ARCH_POWERPC - uint32 tmp; - - __asm__ ("lwbrx %0, %y1" : "=r"(tmp) : "Z"(*a)); - - return(tmp); - #else - uint32 tmp = *a; - return((tmp << 24) | ((tmp & 0xFF00) << 8) | ((tmp >> 8) & 0xFF00) | (tmp >> 24)); - #endif -} - -static INLINE void StoreU16_RBO(uint16 *a, const uint16 v) -{ - #ifdef ARCH_POWERPC - __asm__ ("sthbrx %0, %y1" : : "r"(v), "Z"(*a)); - #else - uint16 tmp = (v << 8) | (v >> 8); - *a = tmp; - #endif -} - -static INLINE void StoreU32_RBO(uint32 *a, const uint32 v) -{ - #ifdef ARCH_POWERPC - __asm__ ("stwbrx %0, %y1" : : "r"(v), "Z"(*a)); - #else - uint32 tmp = (v << 24) | ((v & 0xFF00) << 8) | ((v >> 8) & 0xFF00) | (v >> 24); - *a = tmp; - #endif -} - -static INLINE uint16 LoadU16_LE(const uint16 *a) -{ -#ifdef MSB_FIRST - return LoadU16_RBO(a); -#else - return *a; -#endif -} - -static INLINE uint32 LoadU32_LE(const uint32 *a) -{ -#ifdef MSB_FIRST - return LoadU32_RBO(a); -#else - return *a; -#endif -} - -static INLINE void StoreU16_LE(uint16 *a, const uint16 v) -{ -#ifdef MSB_FIRST - StoreU16_RBO(a, v); -#else - *a = v; -#endif -} - -static INLINE void StoreU32_LE(uint32 *a, const uint32 v) -{ -#ifdef MSB_FIRST - StoreU32_RBO(a, v); -#else - *a = v; -#endif -} - - -// address must not be >= size specified by template parameter, and address must be a multiple of the byte-size of the -// unit(1,2,4) being read(except for Read/WriteU24, which only needs to be byte-aligned). -// -// max_unit_type should be uint16 or uint32 -// -// pre_padding and post_padding are specified in units of sizeof(max_unit_type). -// -template //, unsigned pre_padding_count, unsigned post_padding_count> -struct MultiAccessSizeMem -{ - //max_unit_type pre_padding[pre_padding_count ? pre_padding_count : 1]; - - union - { - uint8 data8[size]; - uint16 data16[size / sizeof(uint16)]; - uint32 data32[size / sizeof(uint32)]; - }; - - //max_unit_type post_padding[post_padding_count ? post_padding_count : 1]; - - INLINE uint8 ReadU8(uint32 address) - { - return data8[address]; - } - - INLINE uint16 ReadU16(uint32 address) - { - if(MAS_NATIVE_IS_BIGENDIAN == big_endian) - return *(uint16*)(((uint8*)data16) + address); - else - return LoadU16_RBO((uint16*)(((uint8*)data16) + address)); - } - - INLINE uint32 ReadU32(uint32 address) - { - if(MAS_NATIVE_IS_BIGENDIAN == big_endian) - return *(uint32*)(((uint8*)data32) + address); - else - return LoadU32_RBO((uint32*)(((uint8*)data32) + address)); - } - - INLINE uint32 ReadU24(uint32 address) - { - uint32 ret; - - if(!big_endian) - { - ret = ReadU8(address) | (ReadU8(address + 1) << 8) | (ReadU8(address + 2) << 16); - } - - return(ret); - } - - - INLINE void WriteU8(uint32 address, uint8 value) - { - data8[address] = value; - } - - INLINE void WriteU16(uint32 address, uint16 value) - { - if(MAS_NATIVE_IS_BIGENDIAN == big_endian) - *(uint16*)(((uint8*)data16) + address) = value; - else - StoreU16_RBO((uint16*)(((uint8*)data16) + address), value); - } - - INLINE void WriteU32(uint32 address, uint32 value) - { - if(MAS_NATIVE_IS_BIGENDIAN == big_endian) - *(uint32*)(((uint8*)data32) + address) = value; - else - StoreU32_RBO((uint32*)(((uint8*)data32) + address), value); - } - - INLINE void WriteU24(uint32 address, uint32 value) - { - if(!big_endian) - { - WriteU8(address + 0, value >> 0); - WriteU8(address + 1, value >> 8); - WriteU8(address + 2, value >> 16); - } - } - - template - INLINE T Read(uint32 address) - { - if(sizeof(T) == 4) - return(ReadU32(address)); - else if(sizeof(T) == 2) - return(ReadU16(address)); - else - return(ReadU8(address)); - } - - template - INLINE void Write(uint32 address, T value) - { - if(sizeof(T) == 4) - WriteU32(address, value); - else if(sizeof(T) == 2) - WriteU16(address, value); - else - WriteU8(address, value); - } -}; - -#undef MAS_NATIVE_IS_BIGENDIAN - -#endif diff --git a/psx/octoshock/psx/Makefile.am b/psx/octoshock/psx/Makefile.am index c5890eb3cf..8e816d778e 100644 --- a/psx/octoshock/psx/Makefile.am +++ b/psx/octoshock/psx/Makefile.am @@ -3,8 +3,8 @@ DEFS = -DLOCALEDIR=\"$(datadir)/locale\" @DEFS@ @MMX_CFLAGS@ @SSE_CFLAGS@ @SSE2 DEFAULT_INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/intl noinst_LIBRARIES = libpsx.a -libpsx_a_SOURCES = psx.cpp irq.cpp timer.cpp dma.cpp frontio.cpp sio.cpp cpu.cpp gte.cpp dis.cpp cdc.cpp spu.cpp gpu.cpp mdec.cpp - +libpsx_a_SOURCES = psx.cpp irq.cpp timer.cpp dma.cpp frontio.cpp sio.cpp cpu.cpp gte.cpp dis.cpp cdc.cpp spu.cpp mdec.cpp +libpsx_a_SOURCES += gpu.cpp gpu_polygon.cpp gpu_line.cpp gpu_sprite.cpp libpsx_a_SOURCES += input/gamepad.cpp input/dualanalog.cpp input/dualshock.cpp input/memcard.cpp input/multitap.cpp input/mouse.cpp input/negcon.cpp input/guncon.cpp input/justifier.cpp if WANT_DEBUGGER diff --git a/psx/octoshock/psx/Makefile.in b/psx/octoshock/psx/Makefile.in index d6a71d9c6b..02873f4b28 100644 --- a/psx/octoshock/psx/Makefile.in +++ b/psx/octoshock/psx/Makefile.in @@ -57,6 +57,7 @@ subdir = src/psx DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cflags_gcc_option.m4 \ + $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc2.m4 \ $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \ @@ -94,21 +95,23 @@ libpsx_a_AR = $(AR) $(ARFLAGS) libpsx_a_LIBADD = am__libpsx_a_SOURCES_DIST = psx.cpp irq.cpp timer.cpp dma.cpp \ frontio.cpp sio.cpp cpu.cpp gte.cpp dis.cpp cdc.cpp spu.cpp \ - gpu.cpp mdec.cpp input/gamepad.cpp input/dualanalog.cpp \ - input/dualshock.cpp input/memcard.cpp input/multitap.cpp \ - input/mouse.cpp input/negcon.cpp input/guncon.cpp \ - input/justifier.cpp debug.cpp + mdec.cpp gpu.cpp gpu_polygon.cpp gpu_line.cpp gpu_sprite.cpp \ + input/gamepad.cpp input/dualanalog.cpp input/dualshock.cpp \ + input/memcard.cpp input/multitap.cpp input/mouse.cpp \ + input/negcon.cpp input/guncon.cpp input/justifier.cpp \ + debug.cpp am__dirstamp = $(am__leading_dot)dirstamp @WANT_DEBUGGER_TRUE@am__objects_1 = debug.$(OBJEXT) am_libpsx_a_OBJECTS = psx.$(OBJEXT) irq.$(OBJEXT) timer.$(OBJEXT) \ dma.$(OBJEXT) frontio.$(OBJEXT) sio.$(OBJEXT) cpu.$(OBJEXT) \ gte.$(OBJEXT) dis.$(OBJEXT) cdc.$(OBJEXT) spu.$(OBJEXT) \ - gpu.$(OBJEXT) mdec.$(OBJEXT) input/gamepad.$(OBJEXT) \ - input/dualanalog.$(OBJEXT) input/dualshock.$(OBJEXT) \ - input/memcard.$(OBJEXT) input/multitap.$(OBJEXT) \ - input/mouse.$(OBJEXT) input/negcon.$(OBJEXT) \ - input/guncon.$(OBJEXT) input/justifier.$(OBJEXT) \ - $(am__objects_1) + mdec.$(OBJEXT) gpu.$(OBJEXT) gpu_polygon.$(OBJEXT) \ + gpu_line.$(OBJEXT) gpu_sprite.$(OBJEXT) \ + input/gamepad.$(OBJEXT) input/dualanalog.$(OBJEXT) \ + input/dualshock.$(OBJEXT) input/memcard.$(OBJEXT) \ + input/multitap.$(OBJEXT) input/mouse.$(OBJEXT) \ + input/negcon.$(OBJEXT) input/guncon.$(OBJEXT) \ + input/justifier.$(OBJEXT) $(am__objects_1) libpsx_a_OBJECTS = $(am_libpsx_a_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @@ -186,7 +189,6 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ -GBA_EXTRA_FLAGS = @GBA_EXTRA_FLAGS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ @@ -195,6 +197,7 @@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ +HAVE_CXX11 = @HAVE_CXX11@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ @@ -349,11 +352,12 @@ AUTOMAKE_OPTIONS = subdir-objects DEFAULT_INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/intl noinst_LIBRARIES = libpsx.a libpsx_a_SOURCES = psx.cpp irq.cpp timer.cpp dma.cpp frontio.cpp \ - sio.cpp cpu.cpp gte.cpp dis.cpp cdc.cpp spu.cpp gpu.cpp \ - mdec.cpp input/gamepad.cpp input/dualanalog.cpp \ - input/dualshock.cpp input/memcard.cpp input/multitap.cpp \ - input/mouse.cpp input/negcon.cpp input/guncon.cpp \ - input/justifier.cpp $(am__append_1) + sio.cpp cpu.cpp gte.cpp dis.cpp cdc.cpp spu.cpp mdec.cpp \ + gpu.cpp gpu_polygon.cpp gpu_line.cpp gpu_sprite.cpp \ + input/gamepad.cpp input/dualanalog.cpp input/dualshock.cpp \ + input/memcard.cpp input/multitap.cpp input/mouse.cpp \ + input/negcon.cpp input/guncon.cpp input/justifier.cpp \ + $(am__append_1) all: all-am .SUFFIXES: @@ -442,6 +446,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dma.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frontio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpu_line.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpu_polygon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpu_sprite.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gte.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/irq.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdec.Po@am__quote@ diff --git a/psx/octoshock/psx/PSFLoader.cpp b/psx/octoshock/psx/PSFLoader.cpp deleted file mode 100644 index 452166556b..0000000000 --- a/psx/octoshock/psx/PSFLoader.cpp +++ /dev/null @@ -1,336 +0,0 @@ -/* Mednafen - Multi-system Emulator - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -/* - TODO: - Time string parsing convenience functions. - - Character set autodetect heuristics and conversion for when the "utf8" tag is missing. -*/ -#include "mednafen.h" -#include "PSFLoader.h" -#include "endian.h" -#include "general.h" -#include "string/trim.h" - -#include -#include -#include -//#include - - -PSFTags::PSFTags() -{ - - -} - -PSFTags::~PSFTags() -{ - -} - -void PSFTags::AddTag(char *tag_line) -{ - char *eq; - - // Transform 0x01-0x1F -> 0x20 - for(unsigned int i = 0; i < strlen(tag_line); i++) - if((unsigned char)tag_line[i] < 0x20) - tag_line[i] = 0x20; - - eq = strchr(tag_line, '='); - - if(eq) - { - *eq = 0; - - MDFN_trim(tag_line); - MDFN_trim(eq + 1); - - for(unsigned int i = 0; i < strlen(tag_line); i++) - tag_line[i] = tolower(tag_line[i]); - - if(TagExists(tag_line)) - tags[tag_line] = tags[std::string(tag_line)] + std::string(1, '\n') + std::string(eq + 1); - else - tags[tag_line] = std::string(eq + 1); - } -} - -#if 0 -static const char *DetectCharset(const uint8 *data, const uint32 data_size) -{ - static const char *TestCharsets[] = { "UTF-8", /*"SJIS",*/ "WINDOWS-1252" }; - - for(unsigned int i = 0; i < sizeof(TestCharsets) / sizeof(TestCharsets[0]); i++) - { - iconv_t cd; - - cd = iconv_open("UTF-32", TestCharsets[i]); - if(cd != (iconv_t)-1) - { - size_t in_len = data_size; - size_t out_len = data_size * 4 + 4; - char *in_ptr = (char *)data; - char *const out_ptr_mem = new char[out_len]; - char *out_ptr = out_ptr_mem; - - if(iconv(cd, (ICONV_CONST char **)&in_ptr, &in_len, &out_ptr, &out_len) != (size_t)-1) - { - delete[] out_ptr_mem; - return(TestCharsets[i]); - } - delete[] out_ptr_mem; - } - } - - return(NULL); -} -#endif - -void PSFTags::LoadTags(const uint8 *data_in, uint32 size) -{ - std::vector tags_heap; - char *data; - char *spos; - //const char *detected_charset = DetectCharset(data_in, size); - - tags_heap.resize(size + 1); - tags_heap[size] = 0; - - memcpy(&tags_heap[0], data_in, size); - - data = &tags_heap[0]; - spos = data; - - while(size) - { - if(*data == 0x0A || *data == 0x00) - { - *data = 0; - - if(data - spos) - { - if(*(data - 1) == 0xD) // handle \r - *(data - 1) = 0; - - AddTag(spos); - } - - spos = data + 1; // Skip \n for next tag - } - - size--; - data++; - } - -} - -int64 PSFTags::GetTagI(const char *name) -{ - std::map::iterator it; - - it = tags.find(name); - if(it != tags.end()) - { - long long ret = 0; - std::string &tmp = tags[name]; - - trio_sscanf(tmp.c_str(), "%lld", &ret); - - return(ret); - } - return(0); // INT64_MIN -} - -bool PSFTags::TagExists(const char *name) -{ - if(tags.find(name) != tags.end()) - return(true); - - return(false); -} - - -std::string PSFTags::GetTag(const char *name) -{ - std::map::iterator it; - - it = tags.find(name); - - if(it != tags.end()) - return(it->second); - - return(""); -} - -void PSFTags::EraseTag(const char *name) -{ - std::map::iterator it; - - it = tags.find(name); - if(it != tags.end()) - tags.erase(it); -} - -PSFLoader::PSFLoader() -{ - - -} - -PSFLoader::~PSFLoader() -{ - - -} - -bool PSFLoader::TestMagic(uint8 version, MDFNFILE *fp) -{ - if(fp->size < (3 + 1 + 4 + 4 + 4)) - return(false); - - if(memcmp(fp->data, "PSF", 3)) - return(false); - - if(fp->data[3] != version) - return(false); - - return(true); -} - -PSFTags PSFLoader::LoadInternal(uint8 version, uint32 max_exe_size, MDFNFILE *fp, uint32 level, bool force_ignore_pcsp) -{ - uint32 reserved_size, compressed_size, compressed_crc32; - bool _lib_present = false; - PSFTags tags; - - std::vector decompress_buffer; - uLongf decompress_len; - - if(!TestMagic(version, fp)) - throw(MDFN_Error(0, _("Not a PSF(version=0x%02x) file!"), version)); - - reserved_size = MDFN_de32lsb(fp->data + 4); - compressed_size = MDFN_de32lsb(fp->data + 8); - compressed_crc32 = MDFN_de32lsb(fp->data + 12); - - if(fp->size < ((int64)16 + reserved_size + compressed_size)) - throw MDFN_Error(0, _("PSF is missing at least %lld bytes of data!"), (long long)((int64)16 + reserved_size + compressed_size - fp->size)); - - if(crc32(0, fp->data + 16 + reserved_size, compressed_size) != compressed_crc32) - throw MDFN_Error(0, _("PSF compressed CRC32 mismatch(data is corrupt)!")); - - - { - const uint8 *tag_section = fp->data + 16 + reserved_size + compressed_size; - uint32 tag_section_size = fp->size - 16 - reserved_size - compressed_size; - - if(tag_section_size > 5 && !memcmp(tag_section, "[TAG]", 5)) - tags.LoadTags(tag_section + 5, tag_section_size - 5); - } - - // - // Handle minipsf simple _lib - // - - if(level < 15) - { - if(tags.TagExists("_lib")) - { - std::string tp = tags.GetTag("_lib"); - - if(!MDFN_IsFIROPSafe(tp)) - { - throw(MDFN_Error(0, _("Referenced path \"%s\" is potentially unsafe. See \"filesys.untrusted_fip_check\" setting."), tp.c_str())); - } - - MDFNFILE subfile(MDFN_MakeFName(MDFNMKF_AUX, 0, tp.c_str()).c_str(), NULL, NULL); - - LoadInternal(version, max_exe_size, &subfile, level + 1); - - _lib_present = true; - } - } - - // - // - // - - decompress_buffer.resize(max_exe_size); - decompress_len = max_exe_size; - switch( uncompress((Bytef *)&decompress_buffer[0], &decompress_len, (const Bytef *)(fp->data + 16 + reserved_size), compressed_size) ) - { - default: - throw(MDFN_Error(0, "zlib unknown error")); - - case Z_OK: break; - - case Z_MEM_ERROR: - throw(MDFN_Error(0, "zlib Z_MEM_ERROR")); - - case Z_BUF_ERROR: - throw(MDFN_Error(0, _("PSF decompressed size exceeds maximum allowed!"))); - - case Z_DATA_ERROR: - throw(MDFN_Error(0, _("PSF compressed data is bad."))); - } - - HandleReserved(fp->data + 16, reserved_size); - HandleEXE(&decompress_buffer[0], decompress_len, force_ignore_pcsp | _lib_present); - decompress_buffer.resize(0); - - // - // handle libN - // - if(level < 15) - { - for(unsigned int n = 2; n <= INT_MAX; n++) - { - char tmpbuf[32]; - - trio_snprintf(tmpbuf, 32, "_lib%d", (int)n); - - if(tags.TagExists(tmpbuf)) - { - MDFNFILE subfile(MDFN_MakeFName(MDFNMKF_AUX, 0, tags.GetTag(tmpbuf).c_str()).c_str(), NULL, NULL); - - LoadInternal(version, max_exe_size, &subfile, level + 1, true); - } - else - break; - } - } - - return(tags); -} - -PSFTags PSFLoader::Load(uint8 version, uint32 max_exe_size, MDFNFILE *fp) -{ - return(LoadInternal(version, max_exe_size, fp, 0, false)); -} - -void PSFLoader::HandleReserved(const uint8 *data, uint32 len) -{ - -} - -void PSFLoader::HandleEXE(const uint8 *data, uint32 len, bool ignore_pcsp) -{ - -} - diff --git a/psx/octoshock/psx/PSFLoader.h b/psx/octoshock/psx/PSFLoader.h deleted file mode 100644 index 7511ef8b1a..0000000000 --- a/psx/octoshock/psx/PSFLoader.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef __MDFN_PSFLOADER_H -#define __MDFN_PSFLOADER_H - -#include -#include -#include -#include - -class PSFTags -{ - public: - - PSFTags(); - ~PSFTags(); - - int64 GetTagI(const char *name); - std::string GetTag(const char *name); - bool TagExists(const char *name); - - void LoadTags(const uint8 *data, uint32 size); - void EraseTag(const char *name); - - - private: - - void AddTag(char *tag_line); - std::map tags; -}; - -class PSFLoader -{ - public: - PSFLoader(); - ~PSFLoader(); - - static bool TestMagic(uint8 version, MDFNFILE *fp); - - PSFTags Load(uint8 version, uint32 max_exe_size, MDFNFILE *fp); - - virtual void HandleReserved(const uint8 *data, uint32 len); - virtual void HandleEXE(const uint8 *data, uint32 len, bool ignore_pcsp = false); - - private: - - PSFTags LoadInternal(uint8 version, uint32 max_exe_size, MDFNFILE *fp, uint32 level, bool force_ignore_pcsp = false); -}; - - -#endif diff --git a/psx/octoshock/psx/cdc.cpp b/psx/octoshock/psx/cdc.cpp index 2b6f5800c8..bf1b1838fd 100644 --- a/psx/octoshock/psx/cdc.cpp +++ b/psx/octoshock/psx/cdc.cpp @@ -15,6 +15,13 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* + Games to test after changing code affecting CD reading and buffering: + Bedlam + Rise 2 + +*/ + // TODO: async command counter and async command phase? /* @@ -67,7 +74,25 @@ PS_CDC::~PS_CDC() } -void PS_CDC::SetDisc(bool tray_open, ShockDiscRef *disc, const char *disc_id) +void PS_CDC::DMForceStop(void) +{ + PSRCounter = 0; + + if((DriveStatus != DS_PAUSED && DriveStatus != DS_STOPPED) || PendingCommandPhase >= 2) + { + PendingCommand = 0x00; + PendingCommandCounter = 0; + PendingCommandPhase = 0; + } + + HeaderBufValid = false; + DriveStatus = DS_STOPPED; + ClearAIP(); + SectorPipe_Pos = SectorPipe_In = 0; + SectorsRead = 0; +} + +void PS_CDC::SetDisc(bool tray_open, ShockDiscRef *disc, const char *disc_id) { if(tray_open) disc = NULL; @@ -78,19 +103,7 @@ void PS_CDC::SetDisc(bool tray_open, ShockDiscRef *disc, const char *disc_id) if(!Cur_disc) { - PSRCounter = 0; - - if((DriveStatus != DS_PAUSED && DriveStatus != DS_STOPPED) || PendingCommandPhase >= 2) - { - PendingCommand = 0x00; - PendingCommandCounter = 0; - PendingCommandPhase = 0; - } - - HeaderBufValid = false; - DriveStatus = DS_STOPPED; - ClearAIP(); - SectorPipe_Pos = SectorPipe_In = 0; + DMForceStop(); } else { @@ -118,7 +131,7 @@ int32 PS_CDC::CalcNextEvent(void) if(PendingCommandCounter > 0 && next_event > PendingCommandCounter) next_event = PendingCommandCounter; - if(!IRQBuffer) + if(!(IRQBuffer & 0xF)) { if(CDCReadyReceiveCounter > 0 && next_event > CDCReadyReceiveCounter) next_event = CDCReadyReceiveCounter; @@ -161,6 +174,7 @@ void PS_CDC::SoftReset(void) DMABuffer.Flush(); SB_In = 0; SectorPipe_Pos = SectorPipe_In = 0; + SectorsRead = 0; memset(SubQBuf, 0, sizeof(SubQBuf)); memset(SubQBuf_Safe, 0, sizeof(SubQBuf_Safe)); @@ -286,6 +300,7 @@ SYNCFUNC(PS_CDC) NSS(PSRCounter); NSS(CurSector); + NSS(SectorsRead); NSS(AsyncIRQPending); NSS(AsyncResultsPending); @@ -326,13 +341,13 @@ void PS_CDC::RecalcIRQ(void) void PS_CDC::WriteIRQ(uint8 V) { assert(CDCReadyReceiveCounter <= 0); - assert(!IRQBuffer); + assert(!(IRQBuffer & 0xF)); //PSX_WARNING("[CDC] ***IRQTHINGY: 0x%02x -- %u", V, doom_ts); CDCReadyReceiveCounter = 2000; //1024; - IRQBuffer = V; + IRQBuffer = (IRQBuffer & 0x10) | V; RecalcIRQ(); } @@ -817,8 +832,8 @@ void PS_CDC::EnbufferizeCDDASector(const uint8 *buf) { for(int i = 0; i < 588; i++) { - ab->Samples[0][i] = (int16)MDFN_de16lsb(&buf[i * sizeof(int16) * 2 + 0]); - ab->Samples[1][i] = (int16)MDFN_de16lsb(&buf[i * sizeof(int16) * 2 + 2]); + ab->Samples[0][i] = (int16)MDFN_de16lsb(&buf[i * sizeof(int16) * 2 + 0]); + ab->Samples[1][i] = (int16)MDFN_de16lsb(&buf[i * sizeof(int16) * 2 + 2]); } } @@ -837,6 +852,7 @@ void PS_CDC::HandlePlayRead(void) PSX_WARNING("[CDC] Read/Play position waaay too far out(%u), forcing STOP", CurSector); DriveStatus = DS_STOPPED; SectorPipe_Pos = SectorPipe_In = 0; + SectorsRead = 0; return; } @@ -866,6 +882,7 @@ void PS_CDC::HandlePlayRead(void) // Status in this end-of-disc context here should be generated after we're in the pause state. DriveStatus = DS_PAUSED; SectorPipe_Pos = SectorPipe_In = 0; + SectorsRead = 0; SetAIP(CDCIRQ_DATA_END, MakeStatus()); return; @@ -884,6 +901,7 @@ void PS_CDC::HandlePlayRead(void) DriveStatus = DS_PAUSED; SectorPipe_Pos = SectorPipe_In = 0; + SectorsRead = 0; PSRCounter = 0; return; } @@ -1019,6 +1037,7 @@ void PS_CDC::HandlePlayRead(void) else CurSector++; + SectorsRead++; } pscpu_timestamp_t PS_CDC::Update(const pscpu_timestamp_t timestamp) @@ -1055,7 +1074,7 @@ pscpu_timestamp_t PS_CDC::Update(const pscpu_timestamp_t timestamp) //MDFN_DispMessage("%02x %d -- %d %d -- %02x", IRQBuffer, CDCReadyReceiveCounter, PSRCounter, PendingCommandCounter, PendingCommand); - if(!IRQBuffer) + if(!(IRQBuffer & 0xF)) { if(CDCReadyReceiveCounter > 0 && chunk_clocks > CDCReadyReceiveCounter) chunk_clocks = CDCReadyReceiveCounter; @@ -1083,6 +1102,7 @@ pscpu_timestamp_t PS_CDC::Update(const pscpu_timestamp_t timestamp) SB_In = 0; SectorPipe_Pos = SectorPipe_In = 0; + SectorsRead = 0; Mode = 0; CurSector = 0; @@ -1271,7 +1291,7 @@ void PS_CDC::Write(const pscpu_timestamp_t timestamp, uint32 A, uint8 V) PendingCommandCounter, V); } - if(IRQBuffer) + if(IRQBuffer & 0xF) { PSX_WARNING("[CDC] Attempting to start command(0x%02x) while IRQBuffer(0x%02x) is not clear.", V, IRQBuffer); } @@ -1336,6 +1356,7 @@ void PS_CDC::Write(const pscpu_timestamp_t timestamp, uint32 A, uint8 V) { PSX_WARNING("[CDC] Mystery IRQ trigger bit set."); IRQBuffer |= 0x10; + RecalcIRQ(); } break; @@ -1561,10 +1582,12 @@ int32 PS_CDC::CalcSeekTime(int32 initial, int32 target, bool motor_on, bool paus ret += 1237952 * ((Mode & MODE_SPEED) ? 1 : 2); } } + //else if(target < initial) + // ret += 1000000; ret += PSX_GetRandU32(0, 25000); - PSX_DBG(PSX_DBG_SPARSE, "[CDC] CalcSeekTime() = %d\n", ret); + PSX_DBG(PSX_DBG_SPARSE, "[CDC] CalcSeekTime() %d->%d = %d\n", initial, target, ret); return(ret); } @@ -1636,6 +1659,7 @@ int32 PS_CDC::Command_Play(const int arg_count, const uint8 *args) ClearAudioBuffers(); SectorPipe_Pos = SectorPipe_In = 0; + SectorsRead = 0; PlayTrackMatch = track; @@ -1655,6 +1679,7 @@ int32 PS_CDC::Command_Play(const int arg_count, const uint8 *args) { ClearAudioBuffers(); SectorPipe_Pos = SectorPipe_In = 0; + SectorsRead = 0; if(CommandLoc_Dirty) SeekTarget = CommandLoc; @@ -1727,6 +1752,7 @@ void PS_CDC::ReadBase(void) ClearAudioBuffers(); SB_In = 0; SectorPipe_Pos = SectorPipe_In = 0; + SectorsRead = 0; // TODO: separate motor start from seek phase? @@ -1775,6 +1801,7 @@ int32 PS_CDC::Command_Stop(const int arg_count, const uint8 *args) ClearAudioBuffers(); ClearAIP(); SectorPipe_Pos = SectorPipe_In = 0; + SectorsRead = 0; DriveStatus = DS_STOPPED; HeaderBufValid = false; @@ -1812,6 +1839,7 @@ int32 PS_CDC::Command_Standby(const int arg_count, const uint8 *args) ClearAudioBuffers(); ClearAIP(); SectorPipe_Pos = SectorPipe_In = 0; + SectorsRead = 0; DriveStatus = DS_STANDBY; @@ -1842,6 +1870,9 @@ int32 PS_CDC::Command_Pause(const int arg_count, const uint8 *args) } else { + CurSector -= std::min(4, SectorsRead); // See: Bedlam, Rise 2 + SectorsRead = 0; + // "Viewpoint" flips out and crashes if reading isn't stopped (almost?) immediately. //ClearAudioBuffers(); SectorPipe_Pos = SectorPipe_In = 0; diff --git a/psx/octoshock/psx/cdc.h b/psx/octoshock/psx/cdc.h index 5774547492..511aa89073 100644 --- a/psx/octoshock/psx/cdc.h +++ b/psx/octoshock/psx/cdc.h @@ -17,7 +17,6 @@ struct CD_Audio_Buffer int32 ReadPos; }; - class PS_CDC { public: @@ -30,7 +29,6 @@ class PS_CDC void SetDisc(bool tray_open, ShockDiscRef *disc, const char disc_id[4]); void Power(void); - int StateAction(StateMem *sm, int load, int data_only); void ResetTS(void); int32 CalcNextEvent(void); // Returns in master cycles to next event. @@ -177,6 +175,7 @@ class PS_CDC int32 PSRCounter; int32 CurSector; + uint32 SectorsRead; // Reset to 0 on Read*/Play command start; used in the rough simulation of PS1 SetLoc->Read->Pause->Read behavior. unsigned AsyncIRQPending; uint8 AsyncResultsPending[16]; @@ -204,6 +203,7 @@ class PS_CDC uint8 MakeStatus(bool cmd_error = false); bool DecodeSubQ(uint8 *subpw); bool CommandCheckDiscPresent(void); + void DMForceStop(); void EnbufferizeCDDASector(const uint8 *buf); bool XA_Test(const uint8 *sdata); diff --git a/psx/octoshock/psx/cpu.cpp b/psx/octoshock/psx/cpu.cpp index c9e4ac8953..8bebe98b4a 100644 --- a/psx/octoshock/psx/cpu.cpp +++ b/psx/octoshock/psx/cpu.cpp @@ -17,6 +17,7 @@ #include "psx.h" #include "cpu.h" +#include "gte.h" /* TODO Make sure load delays are correct. @@ -48,6 +49,21 @@ PS_CPU::PS_CPU() CPUHook = NULL; ADDBT = NULL; + + GTE_Init(); + + for(unsigned i = 0; i < 24; i++) + { + uint8 v = 7; + + if(i < 12) + v += 4; + + if(i < 21) + v += 3; + + MULT_Tab24[i] = v; + } } PS_CPU::~PS_CPU() @@ -131,57 +147,9 @@ void PS_CPU::Power(void) GTE_Power(); } -int PS_CPU::StateAction(StateMem *sm, int load, int data_only) +void PS_CPU::AssertIRQ(unsigned which, bool asserted) { - SFORMAT StateRegs[] = - { - SFARRAY32(GPR, 32), - SFVAR(LO), - SFVAR(HI), - SFVAR(BACKED_PC), - SFVAR(BACKED_new_PC), - SFVAR(BACKED_new_PC_mask), - - SFVAR(IPCache), - SFVAR(Halted), - - SFVAR(BACKED_LDWhich), - SFVAR(BACKED_LDValue), - SFVAR(LDAbsorb), - - SFVAR(next_event_ts), - SFVAR(gte_ts_done), - SFVAR(muldiv_ts_done), - - SFVAR(BIU), - SFARRAY32(ICache_Bulk, 2048), - - SFARRAY32(CP0.Regs, 32), - - SFARRAY(ReadAbsorb, 0x20), - SFVAR(ReadAbsorbDummy), - SFVAR(ReadAbsorbWhich), - SFVAR(ReadFudge), - - SFARRAY(ScratchRAM.data8, 1024), - - SFEND - }; - int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "CPU"); - - ret &= GTE_StateAction(sm, load, data_only); - - if(load) - { - - } - - return(ret); -} - -void PS_CPU::AssertIRQ(int which, bool asserted) -{ - assert(which >= 0 && which <= 5); + assert(which <= 5); CP0.CAUSE &= ~(1 << (10 + which)); @@ -428,7 +396,7 @@ uint32_t PS_CPU::Exception(uint32_t code, uint32_t PC, const uint32_t NPM) #define GPR_RES(n) { unsigned tn = (n); ReadAbsorb[tn] = 0; } #define GPR_DEPRES_END ReadAbsorb[0] = back; } -template +template pscpu_timestamp_t PS_CPU::RunReal(pscpu_timestamp_t timestamp_in) { register pscpu_timestamp_t timestamp = timestamp_in; @@ -474,16 +442,28 @@ pscpu_timestamp_t PS_CPU::RunReal(pscpu_timestamp_t timestamp_in) BACKING_TO_ACTIVE; } - if(!ILHMode) - { - if(PC == 0xB0) - { - if(MDFN_UNLIKELY(GPR[9] == 0x3D)) - { - PSX_DBG(PSX_DBG_BIOS_PRINT, "%c", GPR[4]); - } - } - } + + if(BIOSPrintMode) + { + if(PC == 0xB0) + { + if(MDFN_UNLIKELY(GPR[9] == 0x3D)) + { + PSX_DBG_BIOS_PUTC(GPR[4]); + } + } + } + + // We can't fold this into the ICache[] != PC handling, since the lower 2 bits of TV + // are already used for cache management purposes and it assumes that the lower 2 bits of PC will be 0. + if(MDFN_UNLIKELY(PC & 0x3)) + { + // This will block interrupt processing, but since we're going more for keeping broken homebrew/hacks from working + // than super-duper-accurate pipeline emulation, it shouldn't be a problem. + new_PC = Exception(EXCEPTION_ADEL, PC, new_PC_mask); + new_PC_mask = 0; + goto OpDone; + } instr = ICache[(PC & 0xFFC) >> 2].Data; @@ -498,13 +478,14 @@ pscpu_timestamp_t PS_CPU::RunReal(pscpu_timestamp_t timestamp_in) // FIXME: Handle executing out of scratchpad. if(PC >= 0xA0000000 || !(BIU & 0x800)) { - instr = LoadU32_LE((uint32_t *)&FastMap[PC >> FAST_MAP_SHIFT][PC]); - timestamp += 4; // Approximate best-case cache-disabled time, per PS1 tests(executing out of 0xA0000000+); it can be 5 in *some* sequences of code(like a lot of sequential "nop"s, probably other simple instructions too). - } - else - { - __ICache *ICI = &ICache[((PC & 0xFF0) >> 2)]; - const uint32_t *FMP = (uint32_t *)&FastMap[(PC &~ 0xF) >> FAST_MAP_SHIFT][PC &~ 0xF]; + instr = MDFN_de32lsb(&FastMap[PC >> FAST_MAP_SHIFT][PC]); + timestamp += 4; // Approximate best-case cache-disabled time, per PS1 tests(executing out of 0xA0000000+); it can be 5 in *some* sequences of code(like a lot of sequential "nop"s, probably other simple instructions too). + } + else + { + __ICache *ICI = &ICache[((PC & 0xFF0) >> 2)]; + const uint8 *FMP = &FastMap[(PC &~ 0xF) >> FAST_MAP_SHIFT][PC &~ 0xF]; + // | 0x2 to simulate (in)validity bits. ICI[0x00].TV = (PC &~ 0xF) | 0x00 | 0x2; @@ -514,29 +495,30 @@ pscpu_timestamp_t PS_CPU::RunReal(pscpu_timestamp_t timestamp_in) timestamp += 3; - switch(PC & 0xC) - { - case 0x0: - timestamp++; - ICI[0x00].TV &= ~0x2; - ICI[0x00].Data = LoadU32_LE(&FMP[0]); - case 0x4: - timestamp++; - ICI[0x01].TV &= ~0x2; - ICI[0x01].Data = LoadU32_LE(&FMP[1]); - case 0x8: - timestamp++; - ICI[0x02].TV &= ~0x2; - ICI[0x02].Data = LoadU32_LE(&FMP[2]); - case 0xC: - timestamp++; - ICI[0x03].TV &= ~0x2; - ICI[0x03].Data = LoadU32_LE(&FMP[3]); - break; - } - instr = ICache[(PC & 0xFFC) >> 2].Data; - } - } + + switch(PC & 0xC) + { + case 0x0: + timestamp++; + ICI[0x00].TV &= ~0x2; + ICI[0x00].Data = MDFN_de32lsb(&FMP[0x0]); + case 0x4: + timestamp++; + ICI[0x01].TV &= ~0x2; + ICI[0x01].Data = MDFN_de32lsb(&FMP[0x4]); + case 0x8: + timestamp++; + ICI[0x02].TV &= ~0x2; + ICI[0x02].Data = MDFN_de32lsb(&FMP[0x8]); + case 0xC: + timestamp++; + ICI[0x03].TV &= ~0x2; + ICI[0x03].Data = MDFN_de32lsb(&FMP[0xC]); + break; + } + instr = ICache[(PC & 0xFFC) >> 2].Data; + } + } //printf("PC=%08x, SP=%08x - op=0x%02x - funct=0x%02x - instr=0x%08x\n", PC, GPR[29], instr >> 26, instr & 0x3F, instr); //for(int i = 0; i < 32; i++) @@ -586,7 +568,7 @@ pscpu_timestamp_t PS_CPU::RunReal(pscpu_timestamp_t timestamp_in) PC = (PC & new_PC_mask) + new_PC; \ if(old_PC == ((PC & (mask)) + (offset))) \ { \ - if(*(uint32_t *)&FastMap[PC >> FAST_MAP_SHIFT][PC] == 0) \ + if(MDFN_densb(&FastMap[PC >> FAST_MAP_SHIFT][PC]) == 0) \ { \ if(next_event_ts > timestamp) /* Necessary since next_event_ts might be set to something like "0" to force a call to the event handler. */ \ { \ @@ -608,15 +590,15 @@ pscpu_timestamp_t PS_CPU::RunReal(pscpu_timestamp_t timestamp_in) goto SkipNPCStuff; \ } -#define ITYPE uint32_t rs MDFN_NOWARN_UNUSED = (instr >> 21) & 0x1F; uint32_t rt MDFN_NOWARN_UNUSED = (instr >> 16) & 0x1F; int32_t immediate = (int16)(instr & 0xFFFF); /*printf(" rs=%02x(%08x), rt=%02x(%08x), immediate=(%08x) ", rs, GPR[rs], rt, GPR[rt], immediate);*/ +#define ITYPE uint32 rs MDFN_NOWARN_UNUSED = (instr >> 21) & 0x1F; uint32 rt MDFN_NOWARN_UNUSED = (instr >> 16) & 0x1F; uint32 immediate = (int32)(int16)(instr & 0xFFFF); /*printf(" rs=%02x(%08x), rt=%02x(%08x), immediate=(%08x) ", rs, GPR[rs], rt, GPR[rt], immediate);*/ #define ITYPE_ZE uint32_t rs MDFN_NOWARN_UNUSED = (instr >> 21) & 0x1F; uint32_t rt MDFN_NOWARN_UNUSED = (instr >> 16) & 0x1F; uint32_t immediate = instr & 0xFFFF; /*printf(" rs=%02x(%08x), rt=%02x(%08x), immediate=(%08x) ", rs, GPR[rs], rt, GPR[rt], immediate);*/ #define JTYPE uint32_t target = instr & ((1 << 26) - 1); /*printf(" target=(%08x) ", target);*/ #define RTYPE uint32_t rs MDFN_NOWARN_UNUSED = (instr >> 21) & 0x1F; uint32_t rt MDFN_NOWARN_UNUSED = (instr >> 16) & 0x1F; uint32_t rd MDFN_NOWARN_UNUSED = (instr >> 11) & 0x1F; uint32_t shamt MDFN_NOWARN_UNUSED = (instr >> 6) & 0x1F; /*printf(" rs=%02x(%08x), rt=%02x(%08x), rd=%02x(%08x) ", rs, GPR[rs], rt, GPR[rt], rd, GPR[rd]);*/ #if 1 -#include "cpu_bigswitch.c" +#include "cpu_bigswitch.inc" #else -#include "cpu_coputedgoto.c" +#include "cpu_coputedgoto.inc" #endif OpDone: ; @@ -642,15 +624,25 @@ SkipNPCStuff: ; return(timestamp); } -pscpu_timestamp_t PS_CPU::Run(pscpu_timestamp_t timestamp_in, const bool ILHMode) +pscpu_timestamp_t PS_CPU::Run(pscpu_timestamp_t timestamp_in, bool BIOSPrintMode, bool ILHMode) { - if(CPUHook || ADDBT) - return(RunReal(timestamp_in)); - if (ILHMode) - return(RunReal(timestamp_in)); - return(RunReal(timestamp_in)); + if(CPUHook || ADDBT) + return(RunReal(timestamp_in)); + else + { + if(ILHMode) + return(RunReal(timestamp_in)); + else + { + if(BIOSPrintMode) + return(RunReal(timestamp_in)); + else + return(RunReal(timestamp_in)); + } + } } + void PS_CPU::SetCPUHook(void (*cpuh)(const pscpu_timestamp_t timestamp, uint32_t pc), void (*addbt)(uint32_t from, uint32_t to, bool exception)) { ADDBT = addbt; diff --git a/psx/octoshock/psx/cpu.h b/psx/octoshock/psx/cpu.h index eac2d116d8..51d79aa01d 100644 --- a/psx/octoshock/psx/cpu.h +++ b/psx/octoshock/psx/cpu.h @@ -49,8 +49,8 @@ class PS_CPU { public: - PS_CPU(); - ~PS_CPU(); + PS_CPU() MDFN_COLD; + ~PS_CPU() MDFN_COLD; templatevoid SyncState(EW::NewState *ns); @@ -66,12 +66,13 @@ class PS_CPU next_event_ts = next_event_ts_arg; } - pscpu_timestamp_t Run(pscpu_timestamp_t timestamp_in, const bool ILHMode); + pscpu_timestamp_t Run(pscpu_timestamp_t timestamp_in, bool BIOSPrintMode, bool ILHMode); - void Power(void); + void Power(void) MDFN_COLD; // which ranges 0-5, inclusive - void AssertIRQ(int which, bool asserted); + void AssertIRQ(unsigned which, bool asserted); + void SetHalt(bool status); @@ -79,8 +80,6 @@ class PS_CPU void SetBIU(uint32_t val); uint32_t GetBIU(void); - int StateAction(StateMem *sm, int load, int data_only); - private: struct @@ -192,8 +191,9 @@ class PS_CPU //uint32_t WriteAbsorb; //uint8_t WriteAbsorbCount; //uint8_t WriteAbsorbMonkey; + uint8 MULT_Tab24[24]; - MultiAccessSizeMem<1024, uint32, false> ScratchRAM; + MultiAccessSizeMem<1024, false> ScratchRAM; //PS_GTE GTE; @@ -219,7 +219,7 @@ class PS_CPU uint32_t Exception(uint32_t code, uint32_t PC, const uint32_t NPM) MDFN_WARN_UNUSED_RESULT; - template pscpu_timestamp_t RunReal(pscpu_timestamp_t timestamp_in); + template pscpu_timestamp_t RunReal(pscpu_timestamp_t timestamp_in) NO_INLINE; template T PeekMemory(uint32_t address) MDFN_COLD; template T ReadMemory(pscpu_timestamp_t ×tamp, uint32_t address, bool DS24 = false, bool LWC_timing = false); diff --git a/psx/octoshock/psx/cpu_bigswitch.c b/psx/octoshock/psx/cpu_bigswitch.inc similarity index 95% rename from psx/octoshock/psx/cpu_bigswitch.c rename to psx/octoshock/psx/cpu_bigswitch.inc index 1f78922380..0f38075db6 100644 --- a/psx/octoshock/psx/cpu_bigswitch.c +++ b/psx/octoshock/psx/cpu_bigswitch.inc @@ -399,7 +399,7 @@ uint64 result; result = (int64)(int32)GPR[rs] * (int32)GPR[rt]; - muldiv_ts_done = timestamp + 7; + muldiv_ts_done = timestamp + MULT_Tab24[__builtin_clz((GPR[rs] ^ ((int32)GPR[rs] >> 31)) | 0x400)]; DO_LDS(); @@ -425,7 +425,7 @@ uint64 result; result = (uint64)GPR[rs] * GPR[rt]; - muldiv_ts_done = timestamp + 7; + muldiv_ts_done = timestamp + MULT_Tab24[__builtin_clz(GPR[rs] | 0x400)]; DO_LDS(); @@ -755,7 +755,7 @@ BEGIN_OPF(BCOND, 0x01, 0); const uint32_t tv = GPR[(instr >> 21) & 0x1F]; uint32_t riv = (instr >> 16) & 0x1F; - int32_t immediate = (int16)(instr & 0xFFFF); + uint32 immediate = (int32)(int16)(instr & 0xFFFF); bool result = (int32)(tv ^ (riv << 31)) < 0; GPR_DEPRES_BEGIN @@ -974,7 +974,8 @@ GPR_RES(rt); GPR_DEPRES_END - uint32_t result = (bool)((int32)GPR[rs] < immediate); + uint32 result = (bool)((int32)GPR[rs] < (int32)immediate); + DO_LDS(); diff --git a/psx/octoshock/psx/cpu_computedgoto.c b/psx/octoshock/psx/cpu_computedgoto.inc similarity index 95% rename from psx/octoshock/psx/cpu_computedgoto.c rename to psx/octoshock/psx/cpu_computedgoto.inc index 24d2122edf..6ff51e9463 100644 --- a/psx/octoshock/psx/cpu_computedgoto.c +++ b/psx/octoshock/psx/cpu_computedgoto.inc @@ -206,7 +206,7 @@ BEGIN_OPF(BCOND, 0x01, 0); const uint32_t tv = GPR[(instr >> 21) & 0x1F]; uint32_t riv = (instr >> 16) & 0x1F; - int32_t immediate = (int16)(instr & 0xFFFF); + uint32 immediate = (int32)(int16)(instr & 0xFFFF); bool result = (int32)(tv ^ (riv << 31)) < 0; GPR_DEPRES_BEGIN @@ -872,7 +872,7 @@ uint64 result; result = (int64)(int32)GPR[rs] * (int32)GPR[rt]; - muldiv_ts_done = timestamp + 7; + muldiv_ts_done = timestamp + MULT_Tab24[__builtin_clz((GPR[rs] ^ ((int32)GPR[rs] >> 31)) | 0x400)]; DO_LDS(); @@ -895,7 +895,7 @@ uint64 result; result = (uint64)GPR[rs] * GPR[rt]; - muldiv_ts_done = timestamp + 7; + muldiv_ts_done = timestamp + MULT_Tab24[__builtin_clz(GPR[rs] | 0x400)]; DO_LDS(); @@ -1038,7 +1038,8 @@ GPR_RES(rt); GPR_DEPRES_END - uint32_t result = (bool)((int32)GPR[rs] < immediate); + uint32 result = (bool)((int32)GPR[rs] < (int32)immediate); + DO_LDS(); diff --git a/psx/octoshock/psx/debug.cpp b/psx/octoshock/psx/debug.cpp index 4af853f3a4..9909855933 100644 --- a/psx/octoshock/psx/debug.cpp +++ b/psx/octoshock/psx/debug.cpp @@ -332,11 +332,6 @@ static int GfxDecode_PBN = 0; static void DoGfxDecode(void) { - unsigned tp_w, tp_h; - - tp_w = 256; - tp_h = 256; - if(GfxDecode_Buf) { for(int sy = 0; sy < GfxDecode_Buf->h; sy++) @@ -344,7 +339,7 @@ static void DoGfxDecode(void) for(int sx = 0; sx < GfxDecode_Buf->w; sx++) { unsigned fb_x = ((sx % GfxDecode_Buf->w) + ((sy + GfxDecode_Scroll) / GfxDecode_Buf->w * GfxDecode_Buf->w)) & 1023; - unsigned fb_y = (((sy + GfxDecode_Scroll) % GfxDecode_Buf->w) + ((((sx % GfxDecode_Buf->w) + ((sy + GfxDecode_Scroll) / GfxDecode_Buf->w * GfxDecode_Buf->w)) / 1024) * 256)) & 511; + unsigned fb_y = (((sy + GfxDecode_Scroll) % GfxDecode_Buf->w) + ((((sx % GfxDecode_Buf->w) + ((sy + GfxDecode_Scroll) / GfxDecode_Buf->w * GfxDecode_Buf->w)) / 1024) * GfxDecode_Buf->w)) & 511; uint16 pixel = GPU->PeekRAM(fb_y * 1024 + fb_x); @@ -467,14 +462,14 @@ static RegType Regs_SPU[] = { PS_SPU::GSREG_CDVOL_L, "CDVolL", "CD Volume Left", 2 }, { PS_SPU::GSREG_CDVOL_R, "CDVolR", "CD Volume Right", 2 }, - { PS_SPU::GSREG_DRYVOL_CTRL_L, "DryVolCL", "Dry Volume Control Left", 2 }, - { PS_SPU::GSREG_DRYVOL_CTRL_R, "DryVolCR", "Dry Volume Control Right", 2 }, + { PS_SPU::GSREG_RVBVOL_L, "RvbVolL", "Reverb Volume Left", 2 }, + { PS_SPU::GSREG_RVBVOL_R, "RvbVolR", "Reverb Volume Right", 2 }, - { PS_SPU::GSREG_DRYVOL_L, "DryVolL", "Dry Volume Left", 2 }, - { PS_SPU::GSREG_DRYVOL_R, "DryVolR", "Dry Volume Right", 2 }, + { PS_SPU::GSREG_MAINVOL_CTRL_L, "MainVolCL", "Main Volume Control Left", 2 }, + { PS_SPU::GSREG_MAINVOL_CTRL_R, "MainVolCR", "Main Volume Control Right", 2 }, - { PS_SPU::GSREG_WETVOL_L, "WetVolL", "Wet Volume Left", 2 }, - { PS_SPU::GSREG_WETVOL_R, "WetVolR", "Wet Volume Right", 2 }, + { PS_SPU::GSREG_MAINVOL_L, "MainVolL", "Dry Volume Left", 2 }, + { PS_SPU::GSREG_MAINVOL_R, "MainVolR", "Dry Volume Right", 2 }, { PS_SPU::GSREG_RWADDR, "RWAddr", "SPURAM Read/Write Address", 3 }, diff --git a/psx/octoshock/psx/dma.cpp b/psx/octoshock/psx/dma.cpp index 09d162c5a2..0d73a94492 100644 --- a/psx/octoshock/psx/dma.cpp +++ b/psx/octoshock/psx/dma.cpp @@ -96,20 +96,17 @@ void DMA_Kill(void) } -static INLINE void RecalcIRQOut(void) -{ - bool irqo; - - irqo = (bool)(DMAIntStatus & ((DMAIntControl >> 16) & 0x7F)); - irqo &= (DMAIntControl >> 23) & 1; - - // I think it's logical OR, not XOR/invert. Still kind of weird, maybe it actually does something more complicated? - //irqo ^= (DMAIntControl >> 15) & 1; - irqo |= (DMAIntControl >> 15) & 1; - - IRQOut = irqo; - IRQ_Assert(IRQ_DMA, irqo); -} +static INLINE void RecalcIRQOut(void) +{ + bool irqo; + + irqo = (bool)DMAIntStatus; + irqo &= (DMAIntControl >> 23) & 1; + irqo |= (DMAIntControl >> 15) & 1; + + IRQOut = irqo; + IRQ_Assert(IRQ_DMA, irqo); +} void DMA_ResetTS(void) { @@ -629,153 +626,144 @@ static void CheckLinkedList(uint32 addr) } #endif -void DMA_Write(const pscpu_timestamp_t timestamp, uint32 A, uint32 V) -{ - int ch = (A & 0x7F) >> 4; + +void DMA_Write(const pscpu_timestamp_t timestamp, uint32 A, uint32 V) +{ + int ch = (A & 0x7F) >> 4; + + //if(ch == 2 || ch == 7) + //PSX_WARNING("[DMA] Write: %08x %08x, DMAIntStatus=%08x", A, V, DMAIntStatus); + + // FIXME if we ever have "accurate" bus emulation + V <<= (A & 3) * 8; + + DMA_Update(timestamp); + + if(ch == 7) + { + switch(A & 0xC) + { + case 0x0: //fprintf(stderr, "Global DMA control: 0x%08x\n", V); + DMAControl = V; + RecalcHalt(); + break; + + case 0x4: + DMAIntControl = V & 0x00ff803f; + DMAIntStatus &= ~(V >> 24); + RecalcIRQOut(); + break; + + default: PSX_WARNING("[DMA] Unknown write: %08x %08x", A, V); + break; + } + return; + } + switch(A & 0xC) + { + case 0x0: DMACH[ch].BaseAddr = V & 0xFFFFFF; + break; + + case 0x4: DMACH[ch].BlockControl = V; + break; + + case 0xC: + case 0x8: + { + uint32 OldCC = DMACH[ch].ChanControl; + + //printf("CHCR: %u, %08x --- 0x%08x\n", ch, V, DMACH[ch].BlockControl); + // + // Kludge for DMA timing granularity and other issues. Needs to occur before setting all bits of ChanControl to the new value, to accommodate the + // case of a game cancelling DMA and changing the type of DMA(read/write, etc.) at the same time. + // + if((DMACH[ch].ChanControl & (1 << 24)) && !(V & (1 << 24))) + { + DMACH[ch].ChanControl &= ~(1 << 24); // Clear bit before RunChannel(), so it will only finish the block it's on at most. + RunChannel(timestamp, 128 * 16, ch); + DMACH[ch].WordCounter = 0; + +#if 0 // TODO(maybe, need to work out worst-case performance for abnormally/brokenly large block sizes) + DMACH[ch].ClockCounter = (1 << 30); + RunChannel(timestamp, 1, ch); + DMACH[ch].ClockCounter = 0; +#endif + PSX_WARNING("[DMA] Forced stop for channel %d -- scanline=%d", ch, GPU->GetScanlineNum()); + //MDFN_DispMessage("[DMA] Forced stop for channel %d", ch); + } + + if(ch == 6) + DMACH[ch].ChanControl = (V & 0x51000000) | 0x2; + else + DMACH[ch].ChanControl = V & 0x71770703; + + if(!(OldCC & (1 << 24)) && (V & (1 << 24))) + { + //if(ch == 0 || ch == 1) + // PSX_WARNING("[DMA] Started DMA for channel=%d --- CHCR=0x%08x --- BCR=0x%08x --- scanline=%d", ch, DMACH[ch].ChanControl, DMACH[ch].BlockControl, GPU->GetScanlineNum()); + + DMACH[ch].WordCounter = 0; + DMACH[ch].ClockCounter = 0; + + // + // Viewpoint starts a short MEM->GPU LL DMA and apparently has race conditions that can cause a crash if it doesn't finish almost immediately( + // or at least very quickly, which the current DMA granularity has issues with, so run the channel ahead a bit to take of this issue and potentially + // games with similar issues). + // + // Though, Viewpoint isn't exactly a good game, so maybe we shouldn't bother? ;) + // + // Also, it's needed for RecalcHalt() to work with some semblance of workiness. + // + RunChannel(timestamp, 64, ch); //std::max(128 - DMACycleCounter, 1)); //64); //1); //128 - DMACycleCounter); + } + + RecalcHalt(); + } + break; + } + PSX_SetEventNT(PSX_EVENT_DMA, timestamp + CalcNextEvent(0x10000000)); +} + +uint32 DMA_Read(const pscpu_timestamp_t timestamp, uint32 A) +{ + int ch = (A & 0x7F) >> 4; + uint32 ret = 0; + + if(ch == 7) + { + switch(A & 0xC) + { + default: PSX_WARNING("[DMA] Unknown read: %08x", A); + break; + + case 0x0: ret = DMAControl; + break; + + case 0x4: ret = DMAIntControl | (DMAIntStatus << 24) | (IRQOut << 31); + break; + } + } + else switch(A & 0xC) + { + case 0x0: ret = DMACH[ch].BaseAddr; + break; + + case 0x4: ret = DMACH[ch].BlockControl; + break; + + case 0xC: + case 0x8: ret = DMACH[ch].ChanControl; + break; + + } + + ret >>= (A & 3) * 8; + + //PSX_WARNING("[DMA] Read: %08x %08x", A, ret); + + return(ret); +} - //if(ch == 2 || ch == 7) - //PSX_WARNING("[DMA] Write: %08x %08x, DMAIntStatus=%08x", A, V, DMAIntStatus); - - // FIXME if we ever have "accurate" bus emulation - V <<= (A & 3) * 8; - - DMA_Update(timestamp); - - if(ch == 7) - { - switch(A & 0xC) - { - case 0x0: //fprintf(stderr, "Global DMA control: 0x%08x\n", V); - DMAControl = V; - RecalcHalt(); - break; - - case 0x4: - //for(int x = 0; x < 7; x++) - //{ - // if(DMACH[x].WordCounter || (DMACH[x].ChanControl & (1 << 24))) - // { - // fprintf(stderr, "Write DMAIntControl while channel %d active: 0x%08x\n", x, V); - // } - //} - DMAIntControl = V & 0x00ff803f; - DMAIntStatus &= ~(V >> 24); - - //if(DMAIntStatus ^ (DMAIntStatus & (V >> 16))) - // fprintf(stderr, "DMAINT Fudge: %02x\n", DMAIntStatus ^ (DMAIntStatus & (V >> 16))); - DMAIntStatus &= (V >> 16); // THIS IS ALMOST CERTAINLY WRONG AND A HACK. Remove when CDC emulation is better. - RecalcIRQOut(); - break; - - default: PSX_WARNING("[DMA] Unknown write: %08x %08x", A, V); - break; - } - return; - } - switch(A & 0xC) - { - case 0x0: DMACH[ch].BaseAddr = V & 0xFFFFFF; - break; - - case 0x4: DMACH[ch].BlockControl = V; - break; - - case 0xC: - case 0x8: - { - uint32 OldCC = DMACH[ch].ChanControl; - - //printf("CHCR: %u, %08x --- 0x%08x\n", ch, V, DMACH[ch].BlockControl); - // - // Kludge for DMA timing granularity and other issues. Needs to occur before setting all bits of ChanControl to the new value, to accommodate the - // case of a game cancelling DMA and changing the type of DMA(read/write, etc.) at the same time. - // - if((DMACH[ch].ChanControl & (1 << 24)) && !(V & (1 << 24))) - { - DMACH[ch].ChanControl &= ~(1 << 24); // Clear bit before RunChannel(), so it will only finish the block it's on at most. - RunChannel(timestamp, 128 * 16, ch); - DMACH[ch].WordCounter = 0; - -#if 0 // TODO(maybe, need to work out worst-case performance for abnormally/brokenly large block sizes) - DMACH[ch].ClockCounter = (1 << 30); - RunChannel(timestamp, 1, ch); - DMACH[ch].ClockCounter = 0; -#endif - PSX_WARNING("[DMA] Forced stop for channel %d -- scanline=%d", ch, GPU->GetScanlineNum()); - //MDFN_DispMessage("[DMA] Forced stop for channel %d", ch); - } - - if(ch == 6) - DMACH[ch].ChanControl = (V & 0x51000000) | 0x2; - else - DMACH[ch].ChanControl = V & 0x71770703; - - if(!(OldCC & (1 << 24)) && (V & (1 << 24))) - { - //if(ch == 0 || ch == 1) - // PSX_WARNING("[DMA] Started DMA for channel=%d --- CHCR=0x%08x --- BCR=0x%08x --- scanline=%d", ch, DMACH[ch].ChanControl, DMACH[ch].BlockControl, GPU->GetScanlineNum()); - - DMACH[ch].WordCounter = 0; - DMACH[ch].ClockCounter = 0; - - // - // Viewpoint starts a short MEM->GPU LL DMA and apparently has race conditions that can cause a crash if it doesn't finish almost immediately( - // or at least very quickly, which the current DMA granularity has issues with, so run the channel ahead a bit to take of this issue and potentially - // games with similar issues). - // - // Though, Viewpoint isn't exactly a good game, so maybe we shouldn't bother? ;) - // - // Also, it's needed for RecalcHalt() to work with some semblance of workiness. - // - RunChannel(timestamp, 64, ch); //std::max(128 - DMACycleCounter, 1)); //64); //1); //128 - DMACycleCounter); - } - - RecalcHalt(); - } - break; - } - PSX_SetEventNT(PSX_EVENT_DMA, timestamp + CalcNextEvent(0x10000000)); -} - -uint32 DMA_Read(const pscpu_timestamp_t timestamp, uint32 A) -{ - int ch = (A & 0x7F) >> 4; - uint32 ret = 0; - - if(ch == 7) - { - switch(A & 0xC) - { - default: PSX_WARNING("[DMA] Unknown read: %08x", A); - break; - - case 0x0: ret = DMAControl; - break; - - case 0x4: ret = DMAIntControl | (DMAIntStatus << 24) | (IRQOut << 31); - break; - } - } - else switch(A & 0xC) - { - case 0x0: ret = DMACH[ch].BaseAddr; - break; - - case 0x4: ret = DMACH[ch].BlockControl; - break; - - case 0xC: - case 0x8: ret = DMACH[ch].ChanControl; - break; - - } - - ret >>= (A & 3) * 8; - - //PSX_WARNING("[DMA] Read: %08x %08x", A, ret); - - return(ret); -} void DMA_SyncState(bool isReader, EW::NewState *ns) { diff --git a/psx/octoshock/psx/dma.h b/psx/octoshock/psx/dma.h index abfeeb4194..665485912d 100644 --- a/psx/octoshock/psx/dma.h +++ b/psx/octoshock/psx/dma.h @@ -12,12 +12,12 @@ uint32 DMA_Read(const pscpu_timestamp_t timestamp, uint32 A); void DMA_ResetTS(void); -void DMA_Power(void); +void DMA_Power(void) MDFN_COLD; + +void DMA_Init(void) MDFN_COLD; +void DMA_Kill(void) MDFN_COLD; -void DMA_Init(void); -void DMA_Kill(void); -int DMA_StateAction(StateMem *sm, int load, int data_only); } diff --git a/psx/octoshock/psx/frontio.cpp b/psx/octoshock/psx/frontio.cpp index 8eaae1b0cb..474f63e294 100644 --- a/psx/octoshock/psx/frontio.cpp +++ b/psx/octoshock/psx/frontio.cpp @@ -47,12 +47,6 @@ void InputDevice::Power(void) { } -int InputDevice::StateAction(StateMem* sm, int load, int data_only, const char* section_name) -{ - return(1); -} - - void InputDevice::Update(const pscpu_timestamp_t timestamp) { @@ -97,14 +91,14 @@ bool InputDevice::Clock(bool TxD, int32 &dsr_pulse_delay) return(1); } -uint32 InputDevice::GetNVSize(void) -{ - return(0); -} - -void InputDevice::ReadNV(uint8 *buffer, uint32 offset, uint32 count) -{ - +uint32 InputDevice::GetNVSize(void) const +{ + return(0); +} + +const uint8* InputDevice::ReadNV(void) const +{ + return NULL; } void InputDevice::WriteNV(const uint8 *buffer, uint32 offset, uint32 count) @@ -112,7 +106,7 @@ void InputDevice::WriteNV(const uint8 *buffer, uint32 offset, uint32 count) } -uint64 InputDevice::GetNVDirtyCount(void) +uint64 InputDevice::GetNVDirtyCount(void) const { return(0); } @@ -236,159 +230,163 @@ INLINE void FrontIO::DoDSRIRQ(void) } -void FrontIO::Write(pscpu_timestamp_t timestamp, uint32 A, uint32 V) -{ - assert(!(A & 0x1)); + +void FrontIO::Write(pscpu_timestamp_t timestamp, uint32 A, uint32 V) +{ + PSX_FIODBGINFO("[FIO] Write: %08x %08x", A, V); + + V <<= (A & 1) * 8; + + Update(timestamp); + + switch(A & 0xE) + { + case 0x0: + case 0x2: + V <<= (A & 2) * 8; + TransmitBuffer = V; + TransmitPending = true; + TransmitInProgress = false; + break; + + case 0x8: + Mode = V & 0x013F; + break; + + case 0xa: + if(ClockDivider > 0 && ((V & 0x2000) != (Control & 0x2000)) && ((Control & 0x2) == (V & 0x2)) ) + PSX_DBG(PSX_DBG_WARNING, "FIO device selection changed during comm %04x->%04x\n", Control, V); + + //printf("Control: %d, %04x\n", timestamp, V); + Control = V & 0x3F2F; + + if(V & 0x10) + { + istatus = false; + IRQ_Assert(IRQ_SIO, false); + } + + if(V & 0x40) // Reset + { + istatus = false; + IRQ_Assert(IRQ_SIO, false); + + ClockDivider = 0; + ReceivePending = false; + TransmitPending = false; + + ReceiveInProgress = false; + TransmitInProgress = false; + + ReceiveBufferAvail = false; + + TransmitBuffer = 0; + ReceiveBuffer = 0; + + ReceiveBitCounter = 0; + TransmitBitCounter = 0; + + Mode = 0; + Control = 0; + Baudrate = 0; + } + + Ports[0]->SetDTR((Control & 0x2) && !(Control & 0x2000)); + MCPorts[0]->SetDTR((Control & 0x2) && !(Control & 0x2000)); + Ports[1]->SetDTR((Control & 0x2) && (Control & 0x2000)); + MCPorts[1]->SetDTR((Control & 0x2) && (Control & 0x2000)); + +#if 1 +if(!((Control & 0x2) && !(Control & 0x2000))) +{ + dsr_pulse_delay[0] = 0; + dsr_pulse_delay[2] = 0; + dsr_active_until_ts[0] = -1; + dsr_active_until_ts[2] = -1; +} + +if(!((Control & 0x2) && (Control & 0x2000))) +{ + dsr_pulse_delay[1] = 0; + dsr_pulse_delay[3] = 0; + dsr_active_until_ts[1] = -1; + dsr_active_until_ts[3] = -1; +} + +#endif + // TODO: Uncomment out in the future once our CPU emulation is a bit more accurate with timing, to prevent causing problems with games + // that may clear the IRQ in an unsafe pattern that only works because its execution was slow enough to allow DSR to go inactive. (Whether or not + // such games even exist though is unknown!) + //if(timestamp < dsr_active_until_ts[0] || timestamp < dsr_active_until_ts[1] || timestamp < dsr_active_until_ts[2] || timestamp < dsr_active_until_ts[3]) + // DoDSRIRQ(); + + break; + + case 0xe: + Baudrate = V; + //printf("%02x\n", V); + //MDFN_DispMessage("%02x\n", V); + break; + } + + CheckStartStopPending(timestamp, false); +} - PSX_FIODBGINFO("[FIO] Write: %08x %08x", A, V); - - Update(timestamp); - - switch(A & 0xF) - { - case 0x0: - TransmitBuffer = V; - TransmitPending = true; - TransmitInProgress = false; - break; - - case 0x8: - Mode = V & 0x013F; - break; - - case 0xa: - if(ClockDivider > 0 && ((V & 0x2000) != (Control & 0x2000)) && ((Control & 0x2) == (V & 0x2)) ) - PSX_DBG(PSX_DBG_WARNING, "FIO device selection changed during comm %04x->%04x\n", Control, V); - - //printf("Control: %d, %04x\n", timestamp, V); - Control = V & 0x3F2F; - - if(V & 0x10) - { - istatus = false; - IRQ_Assert(IRQ_SIO, false); - } - - if(V & 0x40) // Reset - { - istatus = false; - IRQ_Assert(IRQ_SIO, false); - - ClockDivider = 0; - ReceivePending = false; - TransmitPending = false; - - ReceiveInProgress = false; - TransmitInProgress = false; - - ReceiveBufferAvail = false; - - TransmitBuffer = 0; - ReceiveBuffer = 0; - - ReceiveBitCounter = 0; - TransmitBitCounter = 0; - - Mode = 0; - Control = 0; - Baudrate = 0; - } - - Ports[0]->SetDTR((Control & 0x2) && !(Control & 0x2000)); - MCPorts[0]->SetDTR((Control & 0x2) && !(Control & 0x2000)); - Ports[1]->SetDTR((Control & 0x2) && (Control & 0x2000)); - MCPorts[1]->SetDTR((Control & 0x2) && (Control & 0x2000)); - -#if 1 -if(!((Control & 0x2) && !(Control & 0x2000))) -{ - dsr_pulse_delay[0] = 0; - dsr_pulse_delay[2] = 0; - dsr_active_until_ts[0] = -1; - dsr_active_until_ts[2] = -1; -} - -if(!((Control & 0x2) && (Control & 0x2000))) -{ - dsr_pulse_delay[1] = 0; - dsr_pulse_delay[3] = 0; - dsr_active_until_ts[1] = -1; - dsr_active_until_ts[3] = -1; -} - -#endif - // TODO: Uncomment out in the future once our CPU emulation is a bit more accurate with timing, to prevent causing problems with games - // that may clear the IRQ in an unsafe pattern that only works because its execution was slow enough to allow DSR to go inactive. (Whether or not - // such games even exist though is unknown!) - //if(timestamp < dsr_active_until_ts[0] || timestamp < dsr_active_until_ts[1] || timestamp < dsr_active_until_ts[2] || timestamp < dsr_active_until_ts[3]) - // DoDSRIRQ(); - - break; - - case 0xe: - Baudrate = V; - //printf("%02x\n", V); - //MDFN_DispMessage("%02x\n", V); - break; - } - - CheckStartStopPending(timestamp, false); -} - - -uint32 FrontIO::Read(pscpu_timestamp_t timestamp, uint32 A) -{ - uint32 ret = 0; - - assert(!(A & 0x1)); - - Update(timestamp); - - switch(A & 0xF) - { - case 0x0: - //printf("FIO Read: 0x%02x\n", ReceiveBuffer); - ret = ReceiveBuffer | (ReceiveBuffer << 8) | (ReceiveBuffer << 16) | (ReceiveBuffer << 24); - ReceiveBufferAvail = false; - ReceivePending = true; - ReceiveInProgress = false; - CheckStartStopPending(timestamp, false); - break; - - case 0x4: - ret = 0; - - if(!TransmitPending && !TransmitInProgress) - ret |= 0x1; - - if(ReceiveBufferAvail) - ret |= 0x2; - - if(timestamp < dsr_active_until_ts[0] || timestamp < dsr_active_until_ts[1] || timestamp < dsr_active_until_ts[2] || timestamp < dsr_active_until_ts[3]) - ret |= 0x80; - - if(istatus) - ret |= 0x200; - - break; - - case 0x8: - ret = Mode; - break; - - case 0xa: - ret = Control; - break; - - case 0xe: - ret = Baudrate; - break; - } - - if((A & 0xF) != 0x4) - PSX_FIODBGINFO("[FIO] Read: %08x %08x", A, ret); - - return(ret); +uint32 FrontIO::Read(pscpu_timestamp_t timestamp, uint32 A) +{ + uint32 ret = 0; + + Update(timestamp); + + switch(A & 0xE) + { + case 0x0: + case 0x2: + //printf("FIO Read: 0x%02x\n", ReceiveBuffer); + ret = ReceiveBuffer | (ReceiveBuffer << 8) | (ReceiveBuffer << 16) | (ReceiveBuffer << 24); + ReceiveBufferAvail = false; + ReceivePending = true; + ReceiveInProgress = false; + CheckStartStopPending(timestamp, false); + ret >>= (A & 2) * 8; + break; + + case 0x4: + ret = 0; + + if(!TransmitPending && !TransmitInProgress) + ret |= 0x1; + + if(ReceiveBufferAvail) + ret |= 0x2; + + if(timestamp < dsr_active_until_ts[0] || timestamp < dsr_active_until_ts[1] || timestamp < dsr_active_until_ts[2] || timestamp < dsr_active_until_ts[3]) + ret |= 0x80; + + if(istatus) + ret |= 0x200; + + break; + + case 0x8: + ret = Mode; + break; + + case 0xa: + ret = Control; + break; + + case 0xe: + ret = Baudrate; + break; + } + + ret >>= (A & 1) * 8; + + if((A & 0xF) != 0x4) + PSX_FIODBGINFO("[FIO] Read: %08x %08x", A, ret); + + return(ret); } pscpu_timestamp_t FrontIO::Update(pscpu_timestamp_t timestamp) @@ -526,7 +524,7 @@ void FrontIO::ResetTS(void) } -void FrontIO::Power(void) +void FrontIO::Reset(bool powering_up) { for(int i = 0; i < 4; i++) { @@ -565,10 +563,13 @@ void FrontIO::Power(void) Baudrate = 0; //power on all plugged devices (are we doing this when attaching them?) - for(int i=0;i<2;i++) + if(powering_up) { - if(Ports[i] != NULL) Ports[i]->Power(); - if(MCPorts[i] != NULL) MCPorts[i]->Power(); + for(int i=0;i<2;i++) + { + if(Ports[i] != NULL) Ports[i]->Power(); + if(MCPorts[i] != NULL) MCPorts[i]->Power(); + } } istatus = false; @@ -582,16 +583,13 @@ void FrontIO::UpdateInput(void) } } +// Take care to call ->Power() only if the device actually changed. void FrontIO::SetInput(unsigned int port, const char *type, void *ptr) { //clean up the old device delete Ports[port]; Ports[port] = NULL; - //OCTOSHOCK TODO - not sure I understand this - if(port < 2) - irq10_pulse_ts[port] = PSX_EVENT_MAXTS; - if(!strcmp(type, "gamepad") || !strcmp(type, "dancepad")) Ports[port] = Device_Gamepad_Create(); else if(!strcmp(type, "dualanalog")) @@ -599,11 +597,7 @@ void FrontIO::SetInput(unsigned int port, const char *type, void *ptr) else if(!strcmp(type, "analogjoy")) Ports[port] = Device_DualAnalog_Create(true); else if(!strcmp(type, "dualshock")) - { - char name[256]; - snprintf(name, 256, "DualShock on port %u", port + 1); - Ports[port] = Device_DualShock_Create(std::string(name)); - } + Ports[port] = Device_DualShock_Create(); else if(!strcmp(type, "mouse")) Ports[port] = Device_Mouse_Create(); else if(!strcmp(type, "negcon")) @@ -615,7 +609,14 @@ void FrontIO::SetInput(unsigned int port, const char *type, void *ptr) else Ports[port] = new InputDevice(); - //Devices[port]->SetCrosshairsColor(chair_colors[port]); + // " Take care to call ->Power() only if the device actually changed. " - TO THINK ABOUT. maybe irrelevant in octoshock + //if(Devices[port] != nd) + + //OCTOSHOCK TODO - not sure I understand this + if(port < 2) + irq10_pulse_ts[port] = PSX_EVENT_MAXTS; + + Ports[port]->Power(); PortData[port] = ptr; } @@ -688,231 +689,36 @@ SYNCFUNC(FrontIO) } -int FrontIO::StateAction(StateMem* sm, int load, int data_only) -{ - SFORMAT StateRegs[] = - { - SFVAR(ClockDivider), - - SFVAR(ReceivePending), - SFVAR(TransmitPending), - - SFVAR(ReceiveInProgress), - SFVAR(TransmitInProgress), - - SFVAR(ReceiveBufferAvail), - - SFVAR(ReceiveBuffer), - SFVAR(TransmitBuffer), - - SFVAR(ReceiveBitCounter), - SFVAR(TransmitBitCounter), - - SFVAR(Mode), - SFVAR(Control), - SFVAR(Baudrate), - - SFVAR(istatus), - - // FIXME: Step mode save states. - SFARRAY32(irq10_pulse_ts, sizeof(irq10_pulse_ts) / sizeof(irq10_pulse_ts[0])), - SFARRAY32(dsr_pulse_delay, sizeof(dsr_pulse_delay) / sizeof(dsr_pulse_delay[0])), - SFARRAY32(dsr_active_until_ts, sizeof(dsr_active_until_ts) / sizeof(dsr_active_until_ts[0])), - - SFEND - }; - - int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "FIO"); - - //TODO - SAVESTATES - - //for(unsigned i = 0; i < 8; i++) - //{ - //static const char* labels[] = { - // "FIODEV0","FIODEV1","FIODEV2","FIODEV3","FIODEV4","FIODEV5","FIODEV6","FIODEV7" - //}; - - // ret &= Devices[i]->StateAction(sm, load, data_only, labels[i]); - //} - - //for(unsigned i = 0; i < 8; i++) - //{ - //static const char* labels[] = { - // "FIOMC0","FIOMC1","FIOMC2","FIOMC3","FIOMC4","FIOMC5","FIOMC6","FIOMC7" - //}; - - - // ret &= DevicesMC[i]->StateAction(sm, load, data_only, labels[i]); - //} - - //for(unsigned i = 0; i < 2; i++) - //{ - //static const char* labels[] = { - // "FIOTAP0","FIOTAP1", - //}; - - // ret &= DevicesTap[i]->StateAction(sm, load, data_only, labels[i]); - //} - - if(load) - { - IRQ_Assert(IRQ_SIO, istatus); - } - - return(ret); -} - bool FrontIO::RequireNoFrameskip(void) { //this whole function is nonsense. frontend should know what it has attached return(false); } -void FrontIO::GPULineHook(const pscpu_timestamp_t timestamp, const pscpu_timestamp_t line_timestamp, bool vsync, uint32 *pixels, const MDFN_PixelFormat* const format, const unsigned width, const unsigned pix_clock_offset, const unsigned pix_clock, const unsigned pix_clock_divider) -{ - Update(timestamp); - - for(int i = 0; i < 2; i++) - { - //octoshock edits.. not sure how safe it is - if(Ports[i] == NULL) - continue; - - pscpu_timestamp_t plts = Ports[i]->GPULineHook(line_timestamp, vsync, pixels, format, width, pix_clock_offset, pix_clock, pix_clock_divider); - - if(i < 2) - { - irq10_pulse_ts[i] = plts; - - if(irq10_pulse_ts[i] <= timestamp) - { - irq10_pulse_ts[i] = PSX_EVENT_MAXTS; - IRQ_Assert(IRQ_PIO, true); - IRQ_Assert(IRQ_PIO, false); - } - } - } - - PSX_SetEventNT(PSX_EVENT_FIO, CalcNextEventTS(timestamp, 0x10000000)); -} - -static InputDeviceInfoStruct InputDeviceInfoPSXPort[] = -{ - // None - { - "none", - "none", - NULL, - NULL, - 0, - NULL - }, - - // Gamepad(SCPH-1080) - { - "gamepad", - "Digital Gamepad", - "PlayStation digital gamepad; SCPH-1080.", - NULL, - sizeof(Device_Gamepad_IDII) / sizeof(InputDeviceInputInfoStruct), - Device_Gamepad_IDII, - }, - - // Dual Shock Gamepad(SCPH-1200) - { - "dualshock", - "DualShock", - "DualShock gamepad; SCPH-1200. Emulation in Mednafen includes the analog mode toggle button. Rumble is emulated, but currently only supported on Linux, and MS Windows via the XInput API and XInput-compatible gamepads/joysticks. If you're having trouble getting rumble to work on Linux, see if Mednafen is printing out error messages during startup regarding /dev/input/event*, and resolve the issue(s) as necessary.", - NULL, - sizeof(Device_DualShock_IDII) / sizeof(InputDeviceInputInfoStruct), - Device_DualShock_IDII, - }, - - // Dual Analog Gamepad(SCPH-1180), forced to analog mode. - { - "dualanalog", - "Dual Analog", - "Dual Analog gamepad; SCPH-1180. It is the predecessor/prototype to the more advanced DualShock. Emulated in Mednafen as forced to analog mode, and without rumble.", - NULL, - sizeof(Device_DualAnalog_IDII) / sizeof(InputDeviceInputInfoStruct), - Device_DualAnalog_IDII, - }, + +void FrontIO::GPULineHook(const pscpu_timestamp_t timestamp, const pscpu_timestamp_t line_timestamp, bool vsync, uint32 *pixels, const MDFN_PixelFormat* const format, const unsigned width, const unsigned pix_clock_offset, const unsigned pix_clock, const unsigned pix_clock_divider) +{ + Update(timestamp); + + for(unsigned i = 0; i < 2; i++) + { + pscpu_timestamp_t plts = Ports[i]->GPULineHook(line_timestamp, vsync, pixels, format, width, pix_clock_offset, pix_clock, pix_clock_divider); + + irq10_pulse_ts[i] = plts; + + if(irq10_pulse_ts[i] <= timestamp) + { + irq10_pulse_ts[i] = PSX_EVENT_MAXTS; + IRQ_Assert(IRQ_PIO, true); + IRQ_Assert(IRQ_PIO, false); + } + } + + + PSX_SetEventNT(PSX_EVENT_FIO, CalcNextEventTS(timestamp, 0x10000000)); +} - // Analog joystick(SCPH-1110), forced to analog mode - emulated through a tweak to dual analog gamepad emulation. - { - "analogjoy", - "Analog Joystick", - "Flight-game-oriented dual-joystick controller; SCPH-1110. Emulated in Mednafen as forced to analog mode.", - NULL, - sizeof(Device_AnalogJoy_IDII) / sizeof(InputDeviceInputInfoStruct), - Device_AnalogJoy_IDII, - }, - - { - "mouse", - "Mouse", - NULL, - NULL, - sizeof(Device_Mouse_IDII) / sizeof(InputDeviceInputInfoStruct), - Device_Mouse_IDII, - }, - - { - "negcon", - "neGcon", - "Namco's unconventional twisty racing-game-oriented gamepad; NPC-101.", - NULL, - sizeof(Device_neGcon_IDII) / sizeof(InputDeviceInputInfoStruct), - Device_neGcon_IDII, - }, - - { - "guncon", - "GunCon", - "Namco's light gun; NPC-103.", - NULL, - sizeof(Device_GunCon_IDII) / sizeof(InputDeviceInputInfoStruct), - Device_GunCon_IDII, - }, - - { - "justifier", - "Konami Justifier", - "Konami's light gun; SLUH-00017. Rumored to be wrought of the coagulated rage of all who tried to shoot The Dog. If the game you want to play supports the \"GunCon\", you should use that instead. NOTE: Currently does not work properly when on any of ports 1B-1D and 2B-2D.", - NULL, - sizeof(Device_Justifier_IDII) / sizeof(InputDeviceInputInfoStruct), - Device_Justifier_IDII, - }, - - { - "dancepad", - "Dance Pad", - "Dingo Dingo Rodeo!", - NULL, - sizeof(Device_Dancepad_IDII) / sizeof(InputDeviceInputInfoStruct), - Device_Dancepad_IDII, - }, - -}; - -static const InputPortInfoStruct PortInfo[] = -{ - { "port1", "Virtual Port 1", sizeof(InputDeviceInfoPSXPort) / sizeof(InputDeviceInfoStruct), InputDeviceInfoPSXPort, "gamepad" }, - { "port2", "Virtual Port 2", sizeof(InputDeviceInfoPSXPort) / sizeof(InputDeviceInfoStruct), InputDeviceInfoPSXPort, "gamepad" }, - { "port3", "Virtual Port 3", sizeof(InputDeviceInfoPSXPort) / sizeof(InputDeviceInfoStruct), InputDeviceInfoPSXPort, "gamepad" }, - { "port4", "Virtual Port 4", sizeof(InputDeviceInfoPSXPort) / sizeof(InputDeviceInfoStruct), InputDeviceInfoPSXPort, "gamepad" }, - { "port5", "Virtual Port 5", sizeof(InputDeviceInfoPSXPort) / sizeof(InputDeviceInfoStruct), InputDeviceInfoPSXPort, "gamepad" }, - { "port6", "Virtual Port 6", sizeof(InputDeviceInfoPSXPort) / sizeof(InputDeviceInfoStruct), InputDeviceInfoPSXPort, "gamepad" }, - { "port7", "Virtual Port 7", sizeof(InputDeviceInfoPSXPort) / sizeof(InputDeviceInfoStruct), InputDeviceInfoPSXPort, "gamepad" }, - { "port8", "Virtual Port 8", sizeof(InputDeviceInfoPSXPort) / sizeof(InputDeviceInfoStruct), InputDeviceInfoPSXPort, "gamepad" }, -}; - -InputInfoStruct FIO_InputInfo = -{ - sizeof(PortInfo) / sizeof(InputPortInfoStruct), - PortInfo -}; } diff --git a/psx/octoshock/psx/frontio.h b/psx/octoshock/psx/frontio.h index 2f00b058c0..4d08377d3e 100644 --- a/psx/octoshock/psx/frontio.h +++ b/psx/octoshock/psx/frontio.h @@ -17,7 +17,6 @@ class InputDevice virtual void UpdateInput(const void *data); virtual void SyncState(bool isReader, EW::NewState *ns) {} - virtual int StateAction(StateMem* sm, int load, int data_only, const char* section_name); virtual bool RequireNoFrameskip(void); @@ -36,18 +35,19 @@ class InputDevice virtual bool Clock(bool TxD, int32 &dsr_pulse_delay); - // - // - virtual uint32 GetNVSize(void); - virtual void ReadNV(uint8 *buffer, uint32 offset, uint32 count); - virtual void WriteNV(const uint8 *buffer, uint32 offset, uint32 count); + // + // + virtual uint32 GetNVSize(void) const; + virtual const uint8* ReadNV(void) const; // Pointer returned should be considered temporary and assumed invalidated upon further calls to non-const functions on the object. + virtual void WriteNV(const uint8 *buffer, uint32 offset, uint32 count); + + // + // Dirty count should be incremented on each call to a method this class that causes at least 1 write to occur to the + // nonvolatile memory(IE Clock() in the correct command phase, and WriteNV()). + // + virtual uint64 GetNVDirtyCount(void) const; + virtual void ResetNVDirtyCount(void); - // - // Dirty count should be incremented on each call to a method this class that causes at least 1 write to occur to the - // nonvolatile memory(IE Clock() in the correct command phase, and WriteNV()). - // - virtual uint64 GetNVDirtyCount(void); - virtual void ResetNVDirtyCount(void); private: unsigned chair_r, chair_g, chair_b; @@ -65,7 +65,7 @@ class FrontIO templatevoid SyncState(EW::NewState *ns); - void Power(void); + void Reset(bool powering_up); void Write(pscpu_timestamp_t timestamp, uint32 A, uint32 V); uint32 Read(pscpu_timestamp_t timestamp, uint32 A); pscpu_timestamp_t CalcNextEventTS(pscpu_timestamp_t timestamp, int32 next_event); @@ -82,8 +82,6 @@ class FrontIO uint64 GetMemcardDirtyCount(unsigned int which); - int StateAction(StateMem* sm, int load, int data_only); - InputDevice *Ports[2]; void *PortData[2]; InputDevice *MCPorts[2]; diff --git a/psx/octoshock/psx/gpu.cpp b/psx/octoshock/psx/gpu.cpp index 85b4090f53..b9682e249b 100644 --- a/psx/octoshock/psx/gpu.cpp +++ b/psx/octoshock/psx/gpu.cpp @@ -18,21 +18,6 @@ #include "psx.h" #include "timer.h" -/* - TODO: - Test and clean up line, particularly polyline, drawing. - - "abe" transparency testing might be not correct, the transparency in regards to mask bit setting and evaluation may not be correct. - - Not everything is returned in the status port read yet(double check). - - "dfe" bit of drawing mode is probably not implemented 100% correctly. - - Initialize more stuff in the Power() function. - - Fix triangle span rendering order(it's bottom-to-up sometimes on the real thing, to avoid negative x step/increment values). -*/ - /* GPU display timing master clock is nominally 53.693182 MHz for NTSC PlayStations, and 53.203425 MHz for PAL PlayStations. @@ -58,24 +43,6 @@ */ -/* - Known problematic games to do regression testing on: - - Dukes of Hazzard: Racing For Home - Sensitive about the GPU busy status flag being set long enough; double-check if we ever make CPU emulation more timing-accurate( - the fix will likely just involve reducing the timing granularity for DMA and GPU updates). - - Final Fantasy 7 - WHERE DO I BEGIN?! (Currently broken as of Jan. 1, 2012) - - Pro Pinball (series) - Sensitive to correct interlace and draw line skipping emulation. - - Valkyrie Profile - Battle scenes will go all kaka with no graphics updates if GPU LL DMA completes too soon. - -*/ - /* November 29, 2012 notes: @@ -90,9 +57,8 @@ namespace MDFN_IEN_PSX { -//FILE *fp; -static const int32 dither_table[4][4] = +static const int8 dither_table[4][4] = { { -4, 0, -3, 1 }, { 2, -2, 3, -1 }, @@ -100,10 +66,12 @@ static const int32 dither_table[4][4] = { 3, -1, 2, -2 }, }; -PS_GPU::PS_GPU(bool pal_clock_and_tv, int sls, int sle) : BlitterFIFO(0x20) // 0x10 on actual PS1 GPU, 0x20 here(see comment at top of gpu.h) // 0x10) +PS_GPU::PS_GPU(bool pal_clock_and_tv, int sls, int sle, bool show_h_overscan) : BlitterFIFO(0x20) // 0x10 on actual PS1 GPU, 0x20 here(see comment at top of gpu.h) // 0x10) { HardwarePALType = pal_clock_and_tv; + hide_hoverscan = !show_h_overscan; + for(int y = 0; y < 4; y++) for(int x = 0; x < 4; x++) for(int v = 0; v < 512; v++) @@ -124,21 +92,23 @@ PS_GPU::PS_GPU(bool pal_clock_and_tv, int sls, int sle) : BlitterFIFO(0x20) // 0 if(HardwarePALType == false) // NTSC clock { GPUClockRatio = 103896; // 65536 * 53693181.818 / (44100 * 768) + hmc_to_visible = 520; } else // PAL clock { GPUClockRatio = 102948; // 65536 * 53203425 / (44100 * 768) + hmc_to_visible = 560; } - memset(RGB8SAT_Under, 0, sizeof(RGB8SAT_Under)); - - for(int i = 0; i < 256; i++) - RGB8SAT[i] = i; - - memset(RGB8SAT_Over, 0xFF, sizeof(RGB8SAT_Over)); - LineVisFirst = sls; LineVisLast = sle; + + + memcpy(&Commands[0x00], Commands_00_1F, sizeof(Commands_00_1F)); + memcpy(&Commands[0x20], Commands_20_3F, sizeof(Commands_20_3F)); + memcpy(&Commands[0x40], Commands_40_5F, sizeof(Commands_40_5F)); + memcpy(&Commands[0x60], Commands_60_7F, sizeof(Commands_60_7F)); + memcpy(&Commands[0x80], Commands_80_FF, sizeof(Commands_80_FF)); } PS_GPU::~PS_GPU() @@ -150,10 +120,10 @@ void PS_GPU::FillVideoParams(MDFNGI* gi) { if(HardwarePALType) { - gi->lcm_width = 2800; + gi->lcm_width = hide_hoverscan ? 2640 : 2800; gi->lcm_height = (LineVisLast + 1 - LineVisFirst) * 2; //576; - gi->nominal_width = 377; // Dunno. :( + gi->nominal_width = hide_hoverscan ? 363 : 384; // More like 385.stuff according to calculations derived from BT.601, but 384 is a nicer number. :p gi->nominal_height = LineVisLast + 1 - LineVisFirst; //288; gi->fb_width = 768; @@ -165,10 +135,10 @@ void PS_GPU::FillVideoParams(MDFNGI* gi) } else { - gi->lcm_width = 2800; + gi->lcm_width = hide_hoverscan ? 2640 : 2800; gi->lcm_height = (LineVisLast + 1 - LineVisFirst) * 2; //480; - gi->nominal_width = 320; + gi->nominal_width = (hide_hoverscan ? 302 : 320); gi->nominal_height = LineVisLast + 1 - LineVisFirst; //240; gi->fb_width = 768; @@ -195,6 +165,8 @@ void PS_GPU::SoftReset(void) // Control command 0x00 IRQPending = false; IRQ_Assert(IRQ_GPU, IRQPending); + InvalidateCache(); + DMAControl = 0; if(DrawTimeAvail < 0) @@ -247,7 +219,7 @@ void PS_GPU::SoftReset(void) // Control command 0x00 twx = 0; twy = 0; - RecalcTexWindowLUT(); + RecalcTexWindowStuff(); // ClipX0 = 0; @@ -270,6 +242,11 @@ void PS_GPU::Power(void) { memset(GPURAM, 0, sizeof(GPURAM)); + memset(CLUT_Cache, 0, sizeof(CLUT_Cache)); + CLUT_Cache_VB = ~0U; + + memset(TexCache, 0xFF, sizeof(TexCache)); + DMAControl = 0; ClipX0 = 0; @@ -291,8 +268,6 @@ void PS_GPU::Power(void) twx = 0; twy = 0; - RecalcTexWindowLUT(); - TexPageX = 0; TexPageY = 0; SpriteFlip = 0; @@ -300,6 +275,8 @@ void PS_GPU::Power(void) abr = 0; TexMode = 0; + RecalcTexWindowStuff(); + BlitterFIFO.Flush(); InCmd = INCMD_NONE; @@ -362,129 +339,7 @@ void PS_GPU::ResetTS(void) lastts = 0; } -template -INLINE void PS_GPU::PlotPixel(int32 x, int32 y, uint16 fore_pix) -{ - y &= 511; // More Y precision bits than GPU RAM installed in (non-arcade, at least) Playstation hardware. - - if(BlendMode >= 0 && (fore_pix & 0x8000)) - { - uint16 bg_pix = GPURAM[y][x]; // Don't use bg_pix for mask evaluation, it's modified in blending code paths. - uint16 pix; // = fore_pix & 0x8000; - -/* - static const int32 tab[4][2] = - { - { 2, 2 }, - { 4, 4 }, - { 4, -4 }, - { 4, 1 } - }; -*/ - // Efficient 15bpp pixel math algorithms from blargg - switch(BlendMode) - { - case 0: - bg_pix |= 0x8000; - pix = ((fore_pix + bg_pix) - ((fore_pix ^ bg_pix) & 0x0421)) >> 1; - break; - - case 1: - { - bg_pix &= ~0x8000; - - uint32 sum = fore_pix + bg_pix; - uint32 carry = (sum - ((fore_pix ^ bg_pix) & 0x8421)) & 0x8420; - - pix = (sum - carry) | (carry - (carry >> 5)); - } - break; - - case 2: - { - bg_pix |= 0x8000; - fore_pix &= ~0x8000; - - uint32 diff = bg_pix - fore_pix + 0x108420; - uint32 borrow = (diff - ((bg_pix ^ fore_pix) & 0x108420)) & 0x108420; - - pix = (diff - borrow) & (borrow - (borrow >> 5)); - } - break; - - case 3: - { - bg_pix &= ~0x8000; - fore_pix = ((fore_pix >> 2) & 0x1CE7) | 0x8000; - - uint32 sum = fore_pix + bg_pix; - uint32 carry = (sum - ((fore_pix ^ bg_pix) & 0x8421)) & 0x8420; - - pix = (sum - carry) | (carry - (carry >> 5)); - } - break; - } - - if(!MaskEval_TA || !(GPURAM[y][x] & 0x8000)) - GPURAM[y][x] = (textured ? pix : (pix & 0x7FFF)) | MaskSetOR; - } - else - { - if(!MaskEval_TA || !(GPURAM[y][x] & 0x8000)) - GPURAM[y][x] = (textured ? fore_pix : (fore_pix & 0x7FFF)) | MaskSetOR; - } -} - -INLINE uint16 PS_GPU::ModTexel(uint16 texel, int32 r, int32 g, int32 b, const int32 dither_x, const int32 dither_y) -{ - uint16 ret = texel & 0x8000; - - ret |= DitherLUT[dither_y][dither_x][(((texel & 0x1F) * r) >> (5 - 1))] << 0; - ret |= DitherLUT[dither_y][dither_x][(((texel & 0x3E0) * g) >> (10 - 1))] << 5; - ret |= DitherLUT[dither_y][dither_x][(((texel & 0x7C00) * b) >> (15 - 1))] << 10; - - return(ret); -} - -template -INLINE uint16 PS_GPU::GetTexel(const uint32 clut_offset, int32 u_arg, int32 v_arg) -{ - uint32 u = TexWindowXLUT[u_arg]; - uint32 v = TexWindowYLUT[v_arg]; - uint32 fbtex_x = TexPageX + (u >> (2 - TexMode_TA)); - uint32 fbtex_y = TexPageY + v; - uint16 fbw = GPURAM[fbtex_y][fbtex_x & 1023]; - - if(TexMode_TA != 2) - { - if(TexMode_TA == 0) - fbw = (fbw >> ((u & 3) * 4)) & 0xF; - else - fbw = (fbw >> ((u & 1) * 8)) & 0xFF; - - fbw = GPURAM[(clut_offset >> 10) & 511][(clut_offset + fbw) & 1023]; - } - - return(fbw); -} - -INLINE bool PS_GPU::LineSkipTest(unsigned y) -{ - //DisplayFB_XStart >= OffsX && DisplayFB_YStart >= OffsY && - // ((y & 1) == (DisplayFB_CurLineYReadout & 1)) - - if((DisplayMode & 0x24) != 0x24) - return false; - - if(!dfe && ((y & 1) == ((DisplayFB_YStart + field_ram_readout) & 1))/* && !DisplayOff*/) //&& (y >> 1) >= DisplayFB_YStart && (y >> 1) < (DisplayFB_YStart + (VertEnd - VertStart))) - return true; - - return false; -} - -#include "gpu_polygon.inc" -#include "gpu_sprite.inc" -#include "gpu_line.inc" +#include "gpu_common.inc" // Special RAM write mode(16 pixels at a time), does *not* appear to use mask drawing environment settings. INLINE void PS_GPU::Command_FBFill(const uint32 *cb) @@ -546,7 +401,7 @@ INLINE void PS_GPU::Command_FBCopy(const uint32 *cb) for(int32 x = 0; x < width; x += 128) { const int32 chunk_x_max = std::min(width - x, 128); - uint16 tmpbuf[128]; // TODO: Check and see if the GPU is actually (ab)using the CLUT or texture cache. + uint16 tmpbuf[128]; // TODO: Check and see if the GPU is actually (ab)using the texture cache(doesn't seem to be affecting CLUT cache...). for(int32 chunk_x = 0; chunk_x < chunk_x_max; chunk_x++) { @@ -615,35 +470,13 @@ INLINE void PS_GPU::Command_FBRead(const uint32 *cb) InCmd = INCMD_FBREAD; } - -INLINE void PS_GPU::RecalcTexWindowLUT(void) +/* +INLINE void PS_GPU::RecalcTexPageStuff(uint32 tpage) { - const unsigned TexWindowX_AND = ~(tww << 3); - const unsigned TexWindowX_OR = (twx & tww) << 3; - const unsigned TexWindowY_AND = ~(twh << 3); - const unsigned TexWindowY_OR = (twy & twh) << 3; -// printf("TWX: 0x%02x, TWW: 0x%02x\n", twx, tww); -// printf("TWY: 0x%02x, TWH: 0x%02x\n", twy, twh); - - for(unsigned x = 0; x < 256; x++) - { - TexWindowXLUT[x] = (x & TexWindowX_AND) | TexWindowX_OR; - } - - for(unsigned y = 0; y < 256; y++) - { - TexWindowYLUT[y] = (y & TexWindowY_AND) | TexWindowY_OR; - } - - memset(TexWindowXLUT_Pre, TexWindowXLUT[0], sizeof(TexWindowXLUT_Pre)); - memset(TexWindowXLUT_Post, TexWindowXLUT[255], sizeof(TexWindowXLUT_Post)); - - memset(TexWindowYLUT_Pre, TexWindowYLUT[0], sizeof(TexWindowYLUT_Pre)); - memset(TexWindowYLUT_Post, TexWindowYLUT[255], sizeof(TexWindowYLUT_Post)); } - +*/ INLINE void PS_GPU::Command_DrawMode(const uint32 *cb) { TexPageX = (*cb & 0xF) * 64; @@ -656,6 +489,8 @@ INLINE void PS_GPU::Command_DrawMode(const uint32 *cb) dtd = (*cb >> 9) & 1; dfe = (*cb >> 10) & 1; + + RecalcTexWindowStuff(); //printf("*******************DFE: %d -- scanline=%d\n", dfe, scanline); } @@ -666,19 +501,23 @@ INLINE void PS_GPU::Command_TexWindow(const uint32 *cb) twx = ((*cb >> 10) & 0x1F); twy = ((*cb >> 15) & 0x1F); - RecalcTexWindowLUT(); + RecalcTexWindowStuff(); } INLINE void PS_GPU::Command_Clip0(const uint32 *cb) { ClipX0 = *cb & 1023; ClipY0 = (*cb >> 10) & 1023; + + //fprintf(stderr, "[GPU] Clip0: x=%d y=%d, raw=0x%08x --- %d\n", ClipX0, ClipY0, *cb, scanline); } INLINE void PS_GPU::Command_Clip1(const uint32 *cb) { ClipX1 = *cb & 1023; ClipY1 = (*cb >> 10) & 1023; + + //fprintf(stderr, "[GPU] Clip1: x=%d y=%d, raw=0x%08x --- %d\n", ClipX1, ClipY1, *cb, scanline); } INLINE void PS_GPU::Command_DrawingOffset(const uint32 *cb) @@ -686,7 +525,7 @@ INLINE void PS_GPU::Command_DrawingOffset(const uint32 *cb) OffsX = sign_x_to_s32(11, (*cb & 2047)); OffsY = sign_x_to_s32(11, ((*cb >> 11) & 2047)); - //fprintf(stderr, "[GPU] Drawing offset: %d(raw=%d) %d(raw=%d) -- %d\n", OffsX, *cb, OffsY, *cb >> 11, scanline); + //fprintf(stderr, "[GPU] Drawing offset: x=%d y=%d, raw=0x%08x --- %d\n", OffsX, OffsY, *cb, scanline); } INLINE void PS_GPU::Command_MaskSetting(const uint32 *cb) @@ -696,9 +535,17 @@ INLINE void PS_GPU::Command_MaskSetting(const uint32 *cb) MaskEvalAND = (*cb & 2) ? 0x8000 : 0x0000; } +void PS_GPU::InvalidateCache(void) +{ + CLUT_Cache_VB = ~0U; + + for(int i=0;i -static void G_Command_DrawPolygon(PS_GPU* g, const uint32 *cb) -{ - g->Command_DrawPolygon(cb); -} - -template -static void G_Command_DrawSprite(PS_GPU* g, const uint32 *cb) -{ - g->Command_DrawSprite(cb); -} - -template -static void G_Command_DrawLine(PS_GPU* g, const uint32 *cb) -{ - g->Command_DrawLine(cb); -} - static void G_Command_ClearCache(PS_GPU* g, const uint32 *cb) { g->Command_ClearCache(cb); @@ -788,10 +617,53 @@ static void G_Command_MaskSetting(PS_GPU* g, const uint32 *cb) g->Command_MaskSetting(cb); } +CTEntry PS_GPU::Commands[0x100]; -CTEntry PS_GPU::Commands[256] = +const CTEntry PS_GPU::Commands_00_1F[0x20] = { - #include "gpu_command_table.inc" + /* 0x00 */ + NULLCMD(), + OTHER_HELPER(1, 2, false, G_Command_ClearCache), + OTHER_HELPER(3, 3, false, G_Command_FBFill), + + NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), + NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), + + /* 0x10 */ + NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), + NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), + + /* 0x1F */ + OTHER_HELPER(1, 1, false, G_Command_IRQ) +}; + +const CTEntry PS_GPU::Commands_80_FF[0x80] = +{ + /* 0x80 ... 0x9F */ + OTHER_HELPER_X32(4, 2, false, G_Command_FBCopy), + + /* 0xA0 ... 0xBF */ + OTHER_HELPER_X32(3, 2, false, G_Command_FBWrite), + + /* 0xC0 ... 0xDF */ + OTHER_HELPER_X32(3, 2, false, G_Command_FBRead), + + /* 0xE0 */ + + NULLCMD(), + OTHER_HELPER(1, 2, false, G_Command_DrawMode), + OTHER_HELPER(1, 2, false, G_Command_TexWindow), + OTHER_HELPER(1, 1, true, G_Command_Clip0), + OTHER_HELPER(1, 1, true, G_Command_Clip1), + OTHER_HELPER(1, 1, true, G_Command_DrawingOffset), + OTHER_HELPER(1, 2, false, G_Command_MaskSetting), + + NULLCMD(), + NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), + + /* 0xF0 */ + NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), + NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD() }; void PS_GPU::ProcessFIFO(void) @@ -932,6 +804,7 @@ void PS_GPU::ProcessFIFO(void) abr = (tpage >> 5) & 0x3; TexMode = (tpage >> 7) & 0x3; + RecalcTexWindowStuff(); } if(!command->func[abr][TexMode]) @@ -1047,6 +920,7 @@ void PS_GPU::Write(const pscpu_timestamp_t timestamp, uint32 A, uint32 V) case 0x8: DataReadBuffer = 0; break; } + //fprintf(stderr, "[GPU] CC 0x10:0x%02x, DRB=0x%02x\n", V & 0xF, DataReadBuffer); break; } @@ -1153,20 +1027,23 @@ uint32 PS_GPU::Read(const pscpu_timestamp_t timestamp, uint32 A) return(ret >> ((A & 3) * 8)); } -/* -static INLINE uint32 ShiftHelper(uint32 val, int shamt, uint32 mask) +#if 0 +static INLINE uint32 MDFN_NOWARN_UNUSED ShiftHelper(uint32 val, int shamt, uint32 mask) { if(shamt < 0) return((val >> (-shamt)) & mask); else return((val << shamt) & mask); } -*/ +#endif + +#pragma GCC push_options +#pragma GCC optimize("no-unroll-loops,no-peel-loops,no-crossjumping") INLINE void PS_GPU::ReorderRGB_Var(uint32 out_Rshift, uint32 out_Gshift, uint32 out_Bshift, bool bpp24, const uint16 *src, uint32 *dest, const int32 dx_start, const int32 dx_end, int32 fb_x) { if(bpp24) // 24bpp { - for(int32 x = dx_start; x < dx_end; x++) + for(int32 x = dx_start; MDFN_LIKELY(x < dx_end); x++) { uint32 srcpix; @@ -1181,33 +1058,37 @@ INLINE void PS_GPU::ReorderRGB_Var(uint32 out_Rshift, uint32 out_Gshift, uint32 } // 15bpp else { - for(int32 x = dx_start; x < dx_end; x++) + for(int32 x = dx_start; MDFN_LIKELY(x < dx_end); x++) { uint32 srcpix = src[fb_x >> 1]; - dest[x] = OutputLUT[srcpix & 0x7FFF]; - //dest[x] = ShiftHelper(srcpix, out_Rshift + 3 - 0, (0xF8 << out_Rshift)) | -// ShiftHelper(srcpix, out_Gshift + 3 - 5, (0xF8 << out_Gshift)) | -// ShiftHelper(srcpix, out_Bshift + 3 - 10, (0xF8 << out_Bshift)); - +#if 1 + dest[x] = OutputLUT[(uint8)srcpix] | (OutputLUT + 256)[(srcpix >> 8) & 0x7F]; +#else + dest[x] = ShiftHelper(srcpix, out_Rshift + 3 - 0, (0xF8 << out_Rshift)) | + ShiftHelper(srcpix, out_Gshift + 3 - 5, (0xF8 << out_Gshift)) | + ShiftHelper(srcpix, out_Bshift + 3 - 10, (0xF8 << out_Bshift)); +#endif fb_x = (fb_x + 2) & 0x7FF; } } } - template -void PS_GPU::ReorderRGB(bool bpp24, const uint16 *src, uint32 *dest, const int32 dx_start, const int32 dx_end, int32 fb_x) +void NO_INLINE PS_GPU::ReorderRGB(bool bpp24, const uint16 *src, uint32 *dest, const int32 dx_start, const int32 dx_end, int32 fb_x) { ReorderRGB_Var(out_Rshift, out_Gshift, out_Bshift, bpp24, src, dest, dx_start, dx_end, fb_x); } +#pragma GCC pop_options pscpu_timestamp_t PS_GPU::Update(const pscpu_timestamp_t sys_timestamp) { static const uint32 DotClockRatios[5] = { 10, 8, 5, 4, 7 }; const uint32 dmc = (DisplayMode & 0x40) ? 4 : (DisplayMode & 0x3); - const uint32 dmw = 2800 / DotClockRatios[dmc]; // Must be <= 768 + const uint32 dmw = 2800 / DotClockRatios[dmc]; // Must be <= (768 - 32) + const uint32 dmpa = (2800 - (hide_hoverscan ? 2640 : 2800)) / DotClockRatios[dmc] / 2; // Must be <= 32 + const uint32 drxbo = 32; int32 sys_clocks = sys_timestamp - lastts; int32 gpu_clocks; @@ -1357,8 +1238,8 @@ pscpu_timestamp_t PS_GPU::Update(const pscpu_timestamp_t sys_timestamp) } char buffer[256]; - // trio_snprintf(buffer, sizeof(buffer), _("VIDEO STANDARD MISMATCH")); - // DrawTextTrans(surface->pixels + ((DisplayRect->h / 2) - (13 / 2)) * surface->pitch32, surface->pitch32 << 2, DisplayRect->w, (UTF8*)buffer, + snprintf(buffer, sizeof(buffer), ("VIDEO STANDARD MISMATCH")); + //DrawTextTrans(surface->pixels + ((DisplayRect->h / 2) - (13 / 2)) * surface->pitch32, surface->pitch32 << 2, DisplayRect->w, buffer, //surface->MakeColor(0x00, 0xFF, 0x00), true, MDFN_FONT_6x13_12x13); } else @@ -1368,7 +1249,7 @@ pscpu_timestamp_t PS_GPU::Update(const pscpu_timestamp_t sys_timestamp) espec->InterlaceOn = (bool)(DisplayMode & 0x20); espec->InterlaceField = (bool)(DisplayMode & 0x20) && field; - DisplayRect->x = 0; + DisplayRect->x = drxbo; DisplayRect->y = 0; DisplayRect->w = 0; DisplayRect->h = VisibleLineCount << (bool)(DisplayMode & 0x20); @@ -1442,13 +1323,13 @@ pscpu_timestamp_t PS_GPU::Update(const pscpu_timestamp_t sys_timestamp) if((bool)(DisplayMode & 0x08) == HardwarePALType && scanline >= FirstVisibleLine && scanline < (FirstVisibleLine + VisibleLineCount) && !skip && espec) { - uint32 *dest; // = surface->pixels + (scanline - VisibleStartLine) * surface->pitch32; + uint32 *dest; int32 dest_line; int32 fb_x = DisplayFB_XStart * 2; int32 dx_start = HorizStart, dx_end = HorizEnd; dest_line = ((scanline - FirstVisibleLine) << espec->InterlaceOn) + espec->InterlaceField; - dest = surface->pixels + dest_line * surface->pitch32; + dest = surface->pixels + (drxbo - dmpa) + dest_line * surface->pitch32; if(dx_end < dx_start) dx_end = dx_start; @@ -1456,8 +1337,10 @@ pscpu_timestamp_t PS_GPU::Update(const pscpu_timestamp_t sys_timestamp) dx_start = dx_start / DotClockRatios[dmc]; dx_end = dx_end / DotClockRatios[dmc]; - dx_start -= 488 / DotClockRatios[dmc]; - dx_end -= 488 / DotClockRatios[dmc]; + dx_start -= hmc_to_visible / DotClockRatios[dmc]; + dx_end -= hmc_to_visible / DotClockRatios[dmc]; + dx_start += 7; + dx_end += 7; if(dx_start < 0) { @@ -1472,11 +1355,7 @@ pscpu_timestamp_t PS_GPU::Update(const pscpu_timestamp_t sys_timestamp) if(InVBlank || DisplayOff) dx_start = dx_end = 0; - // TODO, but there are problems with this, as not all blitter busy cycles(crudely abstracted with DrawTimeAvail) are GPU RAM access cycles. - // Also, it shouldn't be here per-se, since this code won't be all if we're frameskipping or there's a video standard mismatch - //DrawTimeAvail -= (dx_end - dx_start) + ((DisplayMode & 0x10) ? ((dx_end - dx_start + 1) >> 1) : 0); - - LineWidths[dest_line] = dmw; + LineWidths[dest_line] = dmw - dmpa * 2; { const uint16 *src = GPURAM[DisplayFB_CurLineYReadout]; @@ -1504,7 +1383,7 @@ pscpu_timestamp_t PS_GPU::Update(const pscpu_timestamp_t sys_timestamp) //if(scanline == 64) // printf("%u\n", sys_timestamp - ((uint64)gpu_clocks * 65536) / GPUClockRatio); - PSX_GPULineHook(sys_timestamp, sys_timestamp - ((uint64)gpu_clocks * 65536) / GPUClockRatio, scanline == 0, dest, &surface->format, dmw, (488 - 146) / DotClockRatios[dmc], (HardwarePALType ? 53203425 : 53693182) / DotClockRatios[dmc], DotClockRatios[dmc]); + PSX_GPULineHook(sys_timestamp, sys_timestamp - ((uint64)gpu_clocks * 65536) / GPUClockRatio, scanline == 0, dest, &surface->format, dmw, (hmc_to_visible - 220) / DotClockRatios[dmc], (HardwarePALType ? 53203425 : 53693182) / DotClockRatios[dmc], DotClockRatios[dmc]); } else { @@ -1561,14 +1440,15 @@ void PS_GPU::StartFrame(EmulateSpecStruct *espec_arg) if(espec->VideoFormatChanged) { + const auto& f = surface->format; + for(int rc = 0; rc < 0x8000; rc++) { - uint32 r, g, b; + const uint8 a = rc; + const uint8 b = rc >> 8; - r = ((rc >> 0) & 0x1F) << 3; - g = ((rc >> 5) & 0x1F) << 3; - b = ((rc >> 10) & 0x1F) << 3; - OutputLUT[rc] = espec->surface->format.MakeColor(r, g, b, 0); + (OutputLUT + 0)[a] = ((a & 0x1F) << (3 + f.Rshift)) | ((a >> 5) << (3 + f.Gshift)); + (OutputLUT + 256)[b] = ((b & 0x3) << (6 + f.Gshift)) | (((b >> 2) & 0x1F) << (3 + f.Bshift)); } } } @@ -1577,6 +1457,10 @@ SYNCFUNC(PS_GPU) { NSS(GPURAM); + NSS(CLUT_Cache); + NSS(CLUT_Cache_VB); + NSS(TexCache); + NSS(DMAControl); NSS(ClipX0); @@ -1617,8 +1501,6 @@ SYNCFUNC(PS_GPU) NSS(InQuad_F3Vertices); - NSS(InQuad_clut); - NSS(InPLine_PrevPoint); NSS(FBRW_X); @@ -1660,12 +1542,7 @@ SYNCFUNC(PS_GPU) if(isReader) { - //cached luts; safe not to sync - RecalcTexWindowLUT(); - - //what the hell is this? I dont like it at all. - HorizStart &= 0xFFF; - HorizEnd &= 0xFFF; + RecalcTexWindowStuff(); //this is kind of typical stuff, BUT: a cursory inspection reveals nothing. the IRQ and CPU modules should be handling it OK //LOOK HERE FOR BUGS diff --git a/psx/octoshock/psx/gpu.h b/psx/octoshock/psx/gpu.h index 2109318ccd..2c6444599e 100644 --- a/psx/octoshock/psx/gpu.h +++ b/psx/octoshock/psx/gpu.h @@ -39,7 +39,7 @@ class PS_GPU { public: - PS_GPU(bool pal_clock_and_tv, int sls, int sle) MDFN_COLD; + PS_GPU(bool pal_clock_and_tv, int sls, int sle, bool show_h_overscan) MDFN_COLD; ~PS_GPU() MDFN_COLD; templatevoid SyncState(EW::NewState *ns); @@ -48,8 +48,6 @@ class PS_GPU void Power(void) MDFN_COLD; - int StateAction(StateMem *sm, int load, int data_only); - void ResetTS(void); void StartFrame(EmulateSpecStruct *espec); @@ -105,6 +103,31 @@ class PS_GPU private: + uint16 CLUT_Cache[256]; + uint32 CLUT_Cache_VB; // Don't try to be clever and reduce it to 16 bits... ~0U is value for invalidated state. + + template + void Update_CLUT_Cache(uint16 raw_clut); + + struct // Speedup-cache varibles, derived from other variables; shouldn't be saved in save states. + { + // TW*_* variables derived from tww, twh, twx, twy, TexPageX, TexPageY + uint32 TWX_AND; + uint32 TWX_ADD; + + uint32 TWY_AND; + uint32 TWY_ADD; + } SUCV; + void RecalcTexWindowStuff(void); + + struct tTexCache + { + uint16 Data[4]; + uint32 Tag; + } TexCache[256]; + + void InvalidateCache(void); + void ProcessFIFO(void); void WriteCB(uint32 data); uint32 ReadData(void); @@ -135,20 +158,6 @@ class PS_GPU uint32 MaskEvalAND; uint8 tww, twh, twx, twy; - struct - { - uint8 TexWindowXLUT_Pre[16]; - uint8 TexWindowXLUT[256]; - uint8 TexWindowXLUT_Post[16]; - }; - - struct - { - uint8 TexWindowYLUT_Pre[16]; - uint8 TexWindowYLUT[256]; - uint8 TexWindowYLUT_Post[16]; - }; - void RecalcTexWindowLUT(void); int32 TexPageX; int32 TexPageY; @@ -158,33 +167,26 @@ class PS_GPU uint32 abr; uint32 TexMode; - struct - { - uint8 RGB8SAT_Under[256]; - uint8 RGB8SAT[256]; - uint8 RGB8SAT_Over[256]; - }; - uint8 DitherLUT[4][4][512]; // Y, X, 8-bit source value(256 extra for saturation) bool LineSkipTest(unsigned y); template - void PlotPixel(int32 x, int32 y, uint16 pix); + void PlotPixel(uint32 x, uint32 y, uint16 pix); template - uint16 GetTexel(uint32 clut_offset, int32 u, int32 v); + uint16 GetTexel(uint32 u, uint32 v); uint16 ModTexel(uint16 texel, int32 r, int32 g, int32 b, const int32 dither_x, const int32 dither_y); template - void DrawSpan(int y, uint32 clut_offset, const int32 x_start, const int32 x_bound, i_group ig, const i_deltas &idl); + void DrawSpan(int y, const int32 x_start, const int32 x_bound, i_group ig, const i_deltas &idl); template - void DrawTriangle(tri_vertex *vertices, uint32 clut); + void DrawTriangle(tri_vertex *vertices); template - void DrawSprite(int32 x_arg, int32 y_arg, int32 w, int32 h, uint8 u_arg, uint8 v_arg, uint32 color, uint32 clut_offset); + void DrawSprite(int32 x_arg, int32 y_arg, int32 w, int32 h, uint8 u_arg, uint8 v_arg, uint32 color); template void DrawLine(line_point *vertices); @@ -217,6 +219,11 @@ class PS_GPU private: static CTEntry Commands[256]; + static const CTEntry Commands_00_1F[0x20]; + static const CTEntry Commands_20_3F[0x20]; + static const CTEntry Commands_40_5F[0x20]; + static const CTEntry Commands_60_7F[0x20]; + static const CTEntry Commands_80_FF[0x80]; SimpleFIFO BlitterFIFO; @@ -239,7 +246,6 @@ class PS_GPU uint8 InCmd_CC; tri_vertex InQuad_F3Vertices[3]; - uint32 InQuad_clut; line_point InPLine_PrevPoint; @@ -296,6 +302,8 @@ class PS_GPU // // // + int32 hmc_to_visible; + bool hide_hoverscan; bool sl_zero_reached; // @@ -309,7 +317,7 @@ class PS_GPU bool HardwarePALType; int LineVisFirst, LineVisLast; - uint32 OutputLUT[32768]; + uint32 OutputLUT[384]; void ReorderRGB_Var(uint32 out_Rshift, uint32 out_Gshift, uint32 out_Bshift, bool bpp24, const uint16 *src, uint32 *dest, const int32 dx_start, const int32 dx_end, int32 fb_x); template diff --git a/psx/octoshock/psx/gpu_command_table.inc b/psx/octoshock/psx/gpu_command_table.inc deleted file mode 100644 index 5c3f7cbe0d..0000000000 --- a/psx/octoshock/psx/gpu_command_table.inc +++ /dev/null @@ -1,232 +0,0 @@ -//#define BM_HELPER(fg) { fg(0), fg(1), fg(2), fg(3) } - -#define POLY_HELPER_SUB(bm, cv, tm, mam) \ - G_Command_DrawPolygon<3 + ((cv & 0x8) >> 3), ((cv & 0x10) >> 4), ((cv & 0x4) >> 2), ((cv & 0x2) >> 1) ? bm : -1, ((cv & 1) ^ 1) & ((cv & 0x4) >> 2), tm, mam > - -#define POLY_HELPER_FG(bm, cv) \ - { \ - POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 0 : 0), 0), \ - POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 1 : 0), 0), \ - POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 0), \ - POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 0), \ - POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 0 : 0), 1), \ - POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 1 : 0), 1), \ - POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 1), \ - POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 1), \ - } - -#define POLY_HELPER(cv) \ - { \ - { POLY_HELPER_FG(0, cv), POLY_HELPER_FG(1, cv), POLY_HELPER_FG(2, cv), POLY_HELPER_FG(3, cv) }, \ - 1 + (3 /*+ ((cv & 0x8) >> 3)*/) * ( 1 + ((cv & 0x4) >> 2) + ((cv & 0x10) >> 4) ) - ((cv & 0x10) >> 4), \ - 1, \ - false \ - } - -// -// - -#define SPR_HELPER_SUB(bm, cv, tm, mam) G_Command_DrawSprite<(cv >> 3) & 0x3, ((cv & 0x4) >> 2), ((cv & 0x2) >> 1) ? bm : -1, ((cv & 1) ^ 1) & ((cv & 0x4) >> 2), tm, mam> - -#define SPR_HELPER_FG(bm, cv) \ - { \ - SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 0 : 0), 0), \ - SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 1 : 0), 0), \ - SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 0), \ - SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 0), \ - SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 0 : 0), 1), \ - SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 1 : 0), 1), \ - SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 1), \ - SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 1), \ - } - - -#define SPR_HELPER(cv) \ - { \ - { SPR_HELPER_FG(0, cv), SPR_HELPER_FG(1, cv), SPR_HELPER_FG(2, cv), SPR_HELPER_FG(3, cv) }, \ - 2 + ((cv & 0x4) >> 2) + ((cv & 0x18) ? 0 : 1), \ - 2 | ((cv & 0x4) >> 2) | ((cv & 0x18) ? 0 : 1), /* |, not +, for this */ \ - false \ - } - -// -// - -#define LINE_HELPER_SUB(bm, cv, mam) G_Command_DrawLine<((cv & 0x08) >> 3), ((cv & 0x10) >> 4), ((cv & 0x2) >> 1) ? bm : -1, mam> - -#define LINE_HELPER_FG(bm, cv) \ - { \ - LINE_HELPER_SUB(bm, cv, 0), \ - LINE_HELPER_SUB(bm, cv, 0), \ - LINE_HELPER_SUB(bm, cv, 0), \ - LINE_HELPER_SUB(bm, cv, 0), \ - LINE_HELPER_SUB(bm, cv, 1), \ - LINE_HELPER_SUB(bm, cv, 1), \ - LINE_HELPER_SUB(bm, cv, 1), \ - LINE_HELPER_SUB(bm, cv, 1) \ - } - -#define LINE_HELPER(cv) \ - { \ - { LINE_HELPER_FG(0, cv), LINE_HELPER_FG(1, cv), LINE_HELPER_FG(2, cv), LINE_HELPER_FG(3, cv) }, \ - 3 + ((cv & 0x10) >> 4), \ - 1, \ - false \ - } - -// -// - - -#define OTHER_HELPER_FG(bm, arg_ptr) { arg_ptr, arg_ptr, arg_ptr, arg_ptr, arg_ptr, arg_ptr, arg_ptr, arg_ptr } -#define OTHER_HELPER(arg_cs, arg_fbcs, arg_ss, arg_ptr) { { OTHER_HELPER_FG(0, arg_ptr), OTHER_HELPER_FG(1, arg_ptr), OTHER_HELPER_FG(2, arg_ptr), OTHER_HELPER_FG(3, arg_ptr) }, arg_cs, arg_fbcs, arg_ss } -#define OTHER_HELPER_X2(arg_cs, arg_fbcs, arg_ss, arg_ptr) OTHER_HELPER(arg_cs, arg_fbcs, arg_ss, arg_ptr), OTHER_HELPER(arg_cs, arg_fbcs, arg_ss, arg_ptr) -#define OTHER_HELPER_X4(arg_cs, arg_fbcs, arg_ss, arg_ptr) OTHER_HELPER_X2(arg_cs, arg_fbcs, arg_ss, arg_ptr), OTHER_HELPER_X2(arg_cs, arg_fbcs, arg_ss, arg_ptr) -#define OTHER_HELPER_X8(arg_cs, arg_fbcs, arg_ss, arg_ptr) OTHER_HELPER_X4(arg_cs, arg_fbcs, arg_ss, arg_ptr), OTHER_HELPER_X4(arg_cs, arg_fbcs, arg_ss, arg_ptr) -#define OTHER_HELPER_X16(arg_cs, arg_fbcs, arg_ss, arg_ptr) OTHER_HELPER_X8(arg_cs, arg_fbcs, arg_ss, arg_ptr), OTHER_HELPER_X8(arg_cs, arg_fbcs, arg_ss, arg_ptr) -#define OTHER_HELPER_X32(arg_cs, arg_fbcs, arg_ss, arg_ptr) OTHER_HELPER_X16(arg_cs, arg_fbcs, arg_ss, arg_ptr), OTHER_HELPER_X16(arg_cs, arg_fbcs, arg_ss, arg_ptr) - -#define NULLCMD_FG(bm) { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } -#define NULLCMD() { { NULLCMD_FG(0), NULLCMD_FG(1), NULLCMD_FG(2), NULLCMD_FG(3) }, 1, 1, true } - - - /* 0x00 */ - NULLCMD(), - OTHER_HELPER(1, 2, false, G_Command_ClearCache), - OTHER_HELPER(3, 3, false, G_Command_FBFill), - - NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), - NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), - - /* 0x10 */ - NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), - NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), - - OTHER_HELPER(1, 1, false, G_Command_IRQ), - - /* 0x20 */ - POLY_HELPER(0x20), - POLY_HELPER(0x21), - POLY_HELPER(0x22), - POLY_HELPER(0x23), - POLY_HELPER(0x24), - POLY_HELPER(0x25), - POLY_HELPER(0x26), - POLY_HELPER(0x27), - POLY_HELPER(0x28), - POLY_HELPER(0x29), - POLY_HELPER(0x2a), - POLY_HELPER(0x2b), - POLY_HELPER(0x2c), - POLY_HELPER(0x2d), - POLY_HELPER(0x2e), - POLY_HELPER(0x2f), - POLY_HELPER(0x30), - POLY_HELPER(0x31), - POLY_HELPER(0x32), - POLY_HELPER(0x33), - POLY_HELPER(0x34), - POLY_HELPER(0x35), - POLY_HELPER(0x36), - POLY_HELPER(0x37), - POLY_HELPER(0x38), - POLY_HELPER(0x39), - POLY_HELPER(0x3a), - POLY_HELPER(0x3b), - POLY_HELPER(0x3c), - POLY_HELPER(0x3d), - POLY_HELPER(0x3e), - POLY_HELPER(0x3f), - - LINE_HELPER(0x40), - LINE_HELPER(0x41), - LINE_HELPER(0x42), - LINE_HELPER(0x43), - LINE_HELPER(0x44), - LINE_HELPER(0x45), - LINE_HELPER(0x46), - LINE_HELPER(0x47), - LINE_HELPER(0x48), - LINE_HELPER(0x49), - LINE_HELPER(0x4a), - LINE_HELPER(0x4b), - LINE_HELPER(0x4c), - LINE_HELPER(0x4d), - LINE_HELPER(0x4e), - LINE_HELPER(0x4f), - LINE_HELPER(0x50), - LINE_HELPER(0x51), - LINE_HELPER(0x52), - LINE_HELPER(0x53), - LINE_HELPER(0x54), - LINE_HELPER(0x55), - LINE_HELPER(0x56), - LINE_HELPER(0x57), - LINE_HELPER(0x58), - LINE_HELPER(0x59), - LINE_HELPER(0x5a), - LINE_HELPER(0x5b), - LINE_HELPER(0x5c), - LINE_HELPER(0x5d), - LINE_HELPER(0x5e), - LINE_HELPER(0x5f), - - SPR_HELPER(0x60), - SPR_HELPER(0x61), - SPR_HELPER(0x62), - SPR_HELPER(0x63), - SPR_HELPER(0x64), - SPR_HELPER(0x65), - SPR_HELPER(0x66), - SPR_HELPER(0x67), - SPR_HELPER(0x68), - SPR_HELPER(0x69), - SPR_HELPER(0x6a), - SPR_HELPER(0x6b), - SPR_HELPER(0x6c), - SPR_HELPER(0x6d), - SPR_HELPER(0x6e), - SPR_HELPER(0x6f), - SPR_HELPER(0x70), - SPR_HELPER(0x71), - SPR_HELPER(0x72), - SPR_HELPER(0x73), - SPR_HELPER(0x74), - SPR_HELPER(0x75), - SPR_HELPER(0x76), - SPR_HELPER(0x77), - SPR_HELPER(0x78), - SPR_HELPER(0x79), - SPR_HELPER(0x7a), - SPR_HELPER(0x7b), - SPR_HELPER(0x7c), - SPR_HELPER(0x7d), - SPR_HELPER(0x7e), - SPR_HELPER(0x7f), - - /* 0x80 ... 0x9F */ - OTHER_HELPER_X32(4, 2, false, G_Command_FBCopy), - - /* 0xA0 ... 0xBF */ - OTHER_HELPER_X32(3, 2, false, G_Command_FBWrite), - - /* 0xC0 ... 0xDF */ - OTHER_HELPER_X32(3, 2, false, G_Command_FBRead), - - /* 0xE0 */ - - NULLCMD(), - OTHER_HELPER(1, 2, false, G_Command_DrawMode), - OTHER_HELPER(1, 2, false, G_Command_TexWindow), - OTHER_HELPER(1, 1, true, G_Command_Clip0), - OTHER_HELPER(1, 1, true, G_Command_Clip1), - OTHER_HELPER(1, 1, true, G_Command_DrawingOffset), - OTHER_HELPER(1, 2, false, G_Command_MaskSetting), - - NULLCMD(), - NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), - - /* 0xF0 */ - NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), - NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), NULLCMD(), - diff --git a/psx/octoshock/psx/gpu_common.inc b/psx/octoshock/psx/gpu_common.inc new file mode 100644 index 0000000000..181295a14c --- /dev/null +++ b/psx/octoshock/psx/gpu_common.inc @@ -0,0 +1,318 @@ +/* Mednafen - Multi-system Emulator + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +template +INLINE void PS_GPU::PlotPixel(uint32 x, uint32 y, uint16 fore_pix) +{ + y &= 511; // More Y precision bits than GPU RAM installed in (non-arcade, at least) Playstation hardware. + + if(BlendMode >= 0 && (fore_pix & 0x8000)) + { + uint16 bg_pix = GPURAM[y][x]; // Don't use bg_pix for mask evaluation, it's modified in blending code paths. + uint16 pix; // = fore_pix & 0x8000; + +/* + static const int32 tab[4][2] = + { + { 2, 2 }, + { 4, 4 }, + { 4, -4 }, + { 4, 1 } + }; +*/ + // Efficient 15bpp pixel math algorithms from blargg + switch(BlendMode) + { + case 0: + bg_pix |= 0x8000; + pix = ((fore_pix + bg_pix) - ((fore_pix ^ bg_pix) & 0x0421)) >> 1; + break; + + case 1: + { + bg_pix &= ~0x8000; + + uint32 sum = fore_pix + bg_pix; + uint32 carry = (sum - ((fore_pix ^ bg_pix) & 0x8421)) & 0x8420; + + pix = (sum - carry) | (carry - (carry >> 5)); + } + break; + + case 2: + { + bg_pix |= 0x8000; + fore_pix &= ~0x8000; + + uint32 diff = bg_pix - fore_pix + 0x108420; + uint32 borrow = (diff - ((bg_pix ^ fore_pix) & 0x108420)) & 0x108420; + + pix = (diff - borrow) & (borrow - (borrow >> 5)); + } + break; + + case 3: + { + bg_pix &= ~0x8000; + fore_pix = ((fore_pix >> 2) & 0x1CE7) | 0x8000; + + uint32 sum = fore_pix + bg_pix; + uint32 carry = (sum - ((fore_pix ^ bg_pix) & 0x8421)) & 0x8420; + + pix = (sum - carry) | (carry - (carry >> 5)); + } + break; + } + + if(!MaskEval_TA || !(GPURAM[y][x] & 0x8000)) + GPURAM[y][x] = (textured ? pix : (pix & 0x7FFF)) | MaskSetOR; + } + else + { + if(!MaskEval_TA || !(GPURAM[y][x] & 0x8000)) + GPURAM[y][x] = (textured ? fore_pix : (fore_pix & 0x7FFF)) | MaskSetOR; + } +} + +INLINE uint16 PS_GPU::ModTexel(uint16 texel, int32 r, int32 g, int32 b, const int32 dither_x, const int32 dither_y) +{ + uint16 ret = texel & 0x8000; + + ret |= DitherLUT[dither_y][dither_x][(((texel & 0x1F) * r) >> (5 - 1))] << 0; + ret |= DitherLUT[dither_y][dither_x][(((texel & 0x3E0) * g) >> (10 - 1))] << 5; + ret |= DitherLUT[dither_y][dither_x][(((texel & 0x7C00) * b) >> (15 - 1))] << 10; + + return(ret); +} + +template +INLINE void PS_GPU::Update_CLUT_Cache(uint16 raw_clut) +{ + if(TexMode_TA < 2) + { + const uint32 new_ccvb = ((raw_clut & 0x7FFF) | (TexMode_TA << 16)); // Confirmed upper bit of raw_clut is ignored(at least on SCPH-5501's GPU). + + if(CLUT_Cache_VB != new_ccvb) + { + uint16* const gpulp = GPURAM[(raw_clut >> 6) & 0x1FF]; + const uint32 cxo = (raw_clut & 0x3F) << 4; + const uint32 count = (TexMode_TA ? 256 : 16); + + DrawTimeAvail -= count; + + for(unsigned i = 0; i < count; i++) + { + CLUT_Cache[i] = gpulp[(cxo + i) & 0x3FF]; + } + + CLUT_Cache_VB = new_ccvb; + } + } +} + +#if 0 + TexWindowX_AND = ~(tww << 3); + TexWindowX_ADD = ((twx & tww) << 3; + + TexWindowY_AND = ~(twh << 3); + TexWindowY_OR = (twy & twh) << 3; + + uint32 u = (u_arg & TexWindowX_AND) TexWindowX_OR; + uint32 v = (v_arg & TexWindowY_AND) | TexWindowY_OR; + uint32 fbtex_x = TexPageX + (u >> (2 - TexMode_TA)); + uint32 fbtex_y = TexPageY + v; + uint16 fbw = GPURAM[fbtex_y][fbtex_x & 1023]; + + if(TexMode_TA != 2) + { + if(TexMode_TA == 0) + fbw = (fbw >> ((u & 3) * 4)) & 0xF; + else + fbw = (fbw >> ((u & 1) * 8)) & 0xFF; + + fbw = CLUT_Cache[fbw]; + } +#endif + +INLINE void PS_GPU::RecalcTexWindowStuff(void) +{ + SUCV.TWX_AND = ~(tww << 3); + SUCV.TWX_ADD = ((twx & tww) << 3) + (TexPageX << (2 - std::min(2, TexMode))); + + SUCV.TWY_AND = ~(twh << 3); + SUCV.TWY_ADD = ((twy & twh) << 3) + TexPageY; +} + +template +INLINE uint16 PS_GPU::GetTexel(uint32 u_arg, uint32 v_arg) +{ + static_assert(TexMode_TA <= 2, "TexMode_TA must be <= 2"); + + uint32 u_ext = ((u_arg & SUCV.TWX_AND) + SUCV.TWX_ADD); + uint32 fbtex_x = ((u_ext >> (2 - TexMode_TA))) & 1023; + uint32 fbtex_y = (v_arg & SUCV.TWY_AND) + SUCV.TWY_ADD; + uint32 gro = fbtex_y * 1024U + fbtex_x; + + decltype(&TexCache[0]) c; + + switch(TexMode_TA) + { + case 0: c = &TexCache[((gro >> 2) & 0x3) | ((gro >> 8) & 0xFC)]; break; // 64x64 + case 1: c = &TexCache[((gro >> 2) & 0x7) | ((gro >> 7) & 0xF8)]; break; // 64x32 (NOT 32x64!) + case 2: c = &TexCache[((gro >> 2) & 0x7) | ((gro >> 7) & 0xF8)]; break; // 32x32 + } + + if(MDFN_UNLIKELY(c->Tag != (gro &~ 0x3))) + { + // SCPH-1001 old revision GPU is like(for sprites at least): (20 + 4) + // SCPH-5501 new revision GPU is like(for sprites at least): (12 + 4) + // + // We'll be conservative and just go with 4 for now, until we can run some tests with triangles too. + // + DrawTimeAvail -= 4; + c->Data[0] = (&GPURAM[0][0])[gro &~ 0x3]; + c->Data[1] = (&GPURAM[0][1])[gro &~ 0x3]; + c->Data[2] = (&GPURAM[0][2])[gro &~ 0x3]; + c->Data[3] = (&GPURAM[0][3])[gro &~ 0x3]; + c->Tag = (gro &~ 0x3); + } + + uint16 fbw = c->Data[gro & 0x3]; + + if(TexMode_TA != 2) + { + if(TexMode_TA == 0) + fbw = (fbw >> ((u_ext & 3) * 4)) & 0xF; + else + fbw = (fbw >> ((u_ext & 1) * 8)) & 0xFF; + + fbw = CLUT_Cache[fbw]; + } + + return(fbw); +} + +INLINE bool PS_GPU::LineSkipTest(unsigned y) +{ + //DisplayFB_XStart >= OffsX && DisplayFB_YStart >= OffsY && + // ((y & 1) == (DisplayFB_CurLineYReadout & 1)) + + if((DisplayMode & 0x24) != 0x24) + return false; + + if(!dfe && ((y & 1) == ((DisplayFB_YStart + field_ram_readout) & 1))/* && !DisplayOff*/) //&& (y >> 1) >= DisplayFB_YStart && (y >> 1) < (DisplayFB_YStart + (VertEnd - VertStart))) + return true; + + return false; +} + + +// +// Command table generation macros follow: +// + +//#define BM_HELPER(fg) { fg(0), fg(1), fg(2), fg(3) } + +#define POLY_HELPER_SUB(bm, cv, tm, mam) \ + G_Command_DrawPolygon<3 + ((cv & 0x8) >> 3), ((cv & 0x10) >> 4), ((cv & 0x4) >> 2), ((cv & 0x2) >> 1) ? bm : -1, ((cv & 1) ^ 1) & ((cv & 0x4) >> 2), tm, mam > + +#define POLY_HELPER_FG(bm, cv) \ + { \ + POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 0 : 0), 0), \ + POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 1 : 0), 0), \ + POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 0), \ + POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 0), \ + POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 0 : 0), 1), \ + POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 1 : 0), 1), \ + POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 1), \ + POLY_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 1), \ + } + +#define POLY_HELPER(cv) \ + { \ + { POLY_HELPER_FG(0, cv), POLY_HELPER_FG(1, cv), POLY_HELPER_FG(2, cv), POLY_HELPER_FG(3, cv) }, \ + 1 + (3 /*+ ((cv & 0x8) >> 3)*/) * ( 1 + ((cv & 0x4) >> 2) + ((cv & 0x10) >> 4) ) - ((cv & 0x10) >> 4), \ + 1, \ + false \ + } + +// +// + +#define SPR_HELPER_SUB(bm, cv, tm, mam) G_Command_DrawSprite<(cv >> 3) & 0x3, ((cv & 0x4) >> 2), ((cv & 0x2) >> 1) ? bm : -1, ((cv & 1) ^ 1) & ((cv & 0x4) >> 2), tm, mam> + +#define SPR_HELPER_FG(bm, cv) \ + { \ + SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 0 : 0), 0), \ + SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 1 : 0), 0), \ + SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 0), \ + SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 0), \ + SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 0 : 0), 1), \ + SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 1 : 0), 1), \ + SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 1), \ + SPR_HELPER_SUB(bm, cv, ((cv & 0x4) ? 2 : 0), 1), \ + } + + +#define SPR_HELPER(cv) \ + { \ + { SPR_HELPER_FG(0, cv), SPR_HELPER_FG(1, cv), SPR_HELPER_FG(2, cv), SPR_HELPER_FG(3, cv) }, \ + 2 + ((cv & 0x4) >> 2) + ((cv & 0x18) ? 0 : 1), \ + 2 | ((cv & 0x4) >> 2) | ((cv & 0x18) ? 0 : 1), /* |, not +, for this */ \ + false \ + } + +// +// + +#define LINE_HELPER_SUB(bm, cv, mam) G_Command_DrawLine<((cv & 0x08) >> 3), ((cv & 0x10) >> 4), ((cv & 0x2) >> 1) ? bm : -1, mam> + +#define LINE_HELPER_FG(bm, cv) \ + { \ + LINE_HELPER_SUB(bm, cv, 0), \ + LINE_HELPER_SUB(bm, cv, 0), \ + LINE_HELPER_SUB(bm, cv, 0), \ + LINE_HELPER_SUB(bm, cv, 0), \ + LINE_HELPER_SUB(bm, cv, 1), \ + LINE_HELPER_SUB(bm, cv, 1), \ + LINE_HELPER_SUB(bm, cv, 1), \ + LINE_HELPER_SUB(bm, cv, 1) \ + } + +#define LINE_HELPER(cv) \ + { \ + { LINE_HELPER_FG(0, cv), LINE_HELPER_FG(1, cv), LINE_HELPER_FG(2, cv), LINE_HELPER_FG(3, cv) }, \ + 3 + ((cv & 0x10) >> 4), \ + 1, \ + false \ + } + +// +// + + +#define OTHER_HELPER_FG(bm, arg_ptr) { arg_ptr, arg_ptr, arg_ptr, arg_ptr, arg_ptr, arg_ptr, arg_ptr, arg_ptr } +#define OTHER_HELPER(arg_cs, arg_fbcs, arg_ss, arg_ptr) { { OTHER_HELPER_FG(0, arg_ptr), OTHER_HELPER_FG(1, arg_ptr), OTHER_HELPER_FG(2, arg_ptr), OTHER_HELPER_FG(3, arg_ptr) }, arg_cs, arg_fbcs, arg_ss } +#define OTHER_HELPER_X2(arg_cs, arg_fbcs, arg_ss, arg_ptr) OTHER_HELPER(arg_cs, arg_fbcs, arg_ss, arg_ptr), OTHER_HELPER(arg_cs, arg_fbcs, arg_ss, arg_ptr) +#define OTHER_HELPER_X4(arg_cs, arg_fbcs, arg_ss, arg_ptr) OTHER_HELPER_X2(arg_cs, arg_fbcs, arg_ss, arg_ptr), OTHER_HELPER_X2(arg_cs, arg_fbcs, arg_ss, arg_ptr) +#define OTHER_HELPER_X8(arg_cs, arg_fbcs, arg_ss, arg_ptr) OTHER_HELPER_X4(arg_cs, arg_fbcs, arg_ss, arg_ptr), OTHER_HELPER_X4(arg_cs, arg_fbcs, arg_ss, arg_ptr) +#define OTHER_HELPER_X16(arg_cs, arg_fbcs, arg_ss, arg_ptr) OTHER_HELPER_X8(arg_cs, arg_fbcs, arg_ss, arg_ptr), OTHER_HELPER_X8(arg_cs, arg_fbcs, arg_ss, arg_ptr) +#define OTHER_HELPER_X32(arg_cs, arg_fbcs, arg_ss, arg_ptr) OTHER_HELPER_X16(arg_cs, arg_fbcs, arg_ss, arg_ptr), OTHER_HELPER_X16(arg_cs, arg_fbcs, arg_ss, arg_ptr) + +#define NULLCMD_FG(bm) { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } +#define NULLCMD() { { NULLCMD_FG(0), NULLCMD_FG(1), NULLCMD_FG(2), NULLCMD_FG(3) }, 1, 1, true } + diff --git a/psx/octoshock/psx/gpu_line.inc b/psx/octoshock/psx/gpu_line.cpp similarity index 73% rename from psx/octoshock/psx/gpu_line.inc rename to psx/octoshock/psx/gpu_line.cpp index 3b8b88451a..ed4e52573d 100644 --- a/psx/octoshock/psx/gpu_line.inc +++ b/psx/octoshock/psx/gpu_line.cpp @@ -1,3 +1,27 @@ +/* Mednafen - Multi-system Emulator + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "psx.h" +#include "gpu.h" + +namespace MDFN_IEN_PSX +{ +#include "gpu_common.inc" + struct line_fxp_coord { int64 x, y; @@ -236,3 +260,49 @@ INLINE void PS_GPU::Command_DrawLine(const uint32 *cb) DrawLine(points); } +// +// C-style function wrappers so our command table isn't so ginormous(in memory usage). +// +template +static void G_Command_DrawLine(PS_GPU* g, const uint32 *cb) +{ + g->Command_DrawLine(cb); +} + +const CTEntry PS_GPU::Commands_40_5F[0x20] = +{ + LINE_HELPER(0x40), + LINE_HELPER(0x41), + LINE_HELPER(0x42), + LINE_HELPER(0x43), + LINE_HELPER(0x44), + LINE_HELPER(0x45), + LINE_HELPER(0x46), + LINE_HELPER(0x47), + LINE_HELPER(0x48), + LINE_HELPER(0x49), + LINE_HELPER(0x4a), + LINE_HELPER(0x4b), + LINE_HELPER(0x4c), + LINE_HELPER(0x4d), + LINE_HELPER(0x4e), + LINE_HELPER(0x4f), + LINE_HELPER(0x50), + LINE_HELPER(0x51), + LINE_HELPER(0x52), + LINE_HELPER(0x53), + LINE_HELPER(0x54), + LINE_HELPER(0x55), + LINE_HELPER(0x56), + LINE_HELPER(0x57), + LINE_HELPER(0x58), + LINE_HELPER(0x59), + LINE_HELPER(0x5a), + LINE_HELPER(0x5b), + LINE_HELPER(0x5c), + LINE_HELPER(0x5d), + LINE_HELPER(0x5e), + LINE_HELPER(0x5f) +}; + +} diff --git a/psx/octoshock/psx/gpu_polygon.cpp b/psx/octoshock/psx/gpu_polygon.cpp new file mode 100644 index 0000000000..f1504a5929 --- /dev/null +++ b/psx/octoshock/psx/gpu_polygon.cpp @@ -0,0 +1,632 @@ +/* Mednafen - Multi-system Emulator + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#pragma GCC optimize ("no-unroll-loops,no-peel-loops") + +#include "psx.h" +#include "gpu.h" + +namespace MDFN_IEN_PSX +{ +#include "gpu_common.inc" + +#define COORD_FBS 12 +#define COORD_MF_INT(n) ((n) << COORD_FBS) +#define COORD_POST_PADDING 12 + +struct i_group +{ + uint32 u, v; + uint32 r, g, b; +}; + +struct i_deltas +{ + uint32 du_dx, dv_dx; + uint32 dr_dx, dg_dx, db_dx; + + uint32 du_dy, dv_dy; + uint32 dr_dy, dg_dy, db_dy; +}; + +static INLINE int64 MakePolyXFP(uint32 x) +{ + return ((uint64)x << 32) + ((1ULL << 32) - (1 << 11)); +} + +static INLINE int64 MakePolyXFPStep(int32 dx, int32 dy) +{ + int64 ret; + int64 dx_ex = (uint64)dx << 32; + + if(dx_ex < 0) + dx_ex -= dy - 1; + + if(dx_ex > 0) + dx_ex += dy - 1; + + ret = dx_ex / dy; + + return(ret); +} + +static INLINE int32 GetPolyXFP_Int(int64 xfp) +{ + return(xfp >> 32); +} + +#define CALCIS(x,y) (((B.x - A.x) * (C.y - B.y)) - ((C.x - B.x) * (B.y - A.y))) +template +static INLINE bool CalcIDeltas(i_deltas &idl, const tri_vertex &A, const tri_vertex &B, const tri_vertex &C) +{ + int32 denom = CALCIS(x, y); + + if(!denom) + return(false); + + if(goraud) + { + idl.dr_dx = (uint32)(CALCIS(r, y) * (1 << COORD_FBS) / denom) << COORD_POST_PADDING; + idl.dr_dy = (uint32)(CALCIS(x, r) * (1 << COORD_FBS) / denom) << COORD_POST_PADDING; + + idl.dg_dx = (uint32)(CALCIS(g, y) * (1 << COORD_FBS) / denom) << COORD_POST_PADDING; + idl.dg_dy = (uint32)(CALCIS(x, g) * (1 << COORD_FBS) / denom) << COORD_POST_PADDING; + + idl.db_dx = (uint32)(CALCIS(b, y) * (1 << COORD_FBS) / denom) << COORD_POST_PADDING; + idl.db_dy = (uint32)(CALCIS(x, b) * (1 << COORD_FBS) / denom) << COORD_POST_PADDING; + } + + if(textured) + { + idl.du_dx = (uint32)(CALCIS(u, y) * (1 << COORD_FBS) / denom) << COORD_POST_PADDING; + idl.du_dy = (uint32)(CALCIS(x, u) * (1 << COORD_FBS) / denom) << COORD_POST_PADDING; + + idl.dv_dx = (uint32)(CALCIS(v, y) * (1 << COORD_FBS) / denom) << COORD_POST_PADDING; + idl.dv_dy = (uint32)(CALCIS(x, v) * (1 << COORD_FBS) / denom) << COORD_POST_PADDING; + } + + return(true); +} +#undef CALCIS + +template +static INLINE void AddIDeltas_DX(i_group &ig, const i_deltas &idl, uint32 count = 1) +{ + if(textured) + { + ig.u += idl.du_dx * count; + ig.v += idl.dv_dx * count; + } + + if(goraud) + { + ig.r += idl.dr_dx * count; + ig.g += idl.dg_dx * count; + ig.b += idl.db_dx * count; + } +} + +template +static INLINE void AddIDeltas_DY(i_group &ig, const i_deltas &idl, uint32 count = 1) +{ + if(textured) + { + ig.u += idl.du_dy * count; + ig.v += idl.dv_dy * count; + } + + if(goraud) + { + ig.r += idl.dr_dy * count; + ig.g += idl.dg_dy * count; + ig.b += idl.db_dy * count; + } +} + +template +INLINE void PS_GPU::DrawSpan(int y, const int32 x_start, const int32 x_bound, i_group ig, const i_deltas &idl) +{ + if(LineSkipTest(y)) + return; + + if(textured) + { + ig.u += (x_start * idl.du_dx) + (y * idl.du_dy); + ig.v += (x_start * idl.dv_dx) + (y * idl.dv_dy); + } + + if(goraud) + { + ig.r += (x_start * idl.dr_dx) + (y * idl.dr_dy); + ig.g += (x_start * idl.dg_dx) + (y * idl.dg_dy); + ig.b += (x_start * idl.db_dx) + (y * idl.db_dy); + } + + for(int32 xi = x_start; MDFN_LIKELY(xi < x_bound); xi++, AddIDeltas_DX(ig, idl)) + { + uint32 r, g, b; + int32 x = sign_x_to_s32(11, xi); + + if(goraud || textured) + DrawTimeAvail -= 2; + else + DrawTimeAvail--; + + if(x > ClipX1) + break; + + if(x < ClipX0) + continue; + + if(!(goraud || textured) && ((BlendMode >= 0) || MaskEval_TA)) + { + DrawTimeAvail -= (x & 1); + } + + r = ig.r >> (COORD_FBS + COORD_POST_PADDING); + g = ig.g >> (COORD_FBS + COORD_POST_PADDING); + b = ig.b >> (COORD_FBS + COORD_POST_PADDING); + + if(textured) + { + uint16 fbw = GetTexel(ig.u >> (COORD_FBS + COORD_POST_PADDING), ig.v >> (COORD_FBS + COORD_POST_PADDING)); + + if(fbw) + { + if(TexMult) + { + uint32 dither_x = x & 3; + uint32 dither_y = y & 3; + + if(!dtd) + { + dither_x = 3; + dither_y = 2; + } + + fbw = ModTexel(fbw, r, g, b, dither_x, dither_y); + } + PlotPixel(x, y, fbw); + } + } + else + { + uint16 pix = 0x8000; + + if(goraud && dtd) + { + pix |= DitherLUT[y & 3][x & 3][r] << 0; + pix |= DitherLUT[y & 3][x & 3][g] << 5; + pix |= DitherLUT[y & 3][x & 3][b] << 10; + } + else + { + pix |= (r >> 3) << 0; + pix |= (g >> 3) << 5; + pix |= (b >> 3) << 10; + } + + PlotPixel(x, y, pix); + } + } +} + +template +INLINE void PS_GPU::DrawTriangle(tri_vertex *vertices) +{ + i_deltas idl; + unsigned core_vertex; + + // + // Calculate the "core" vertex based on the unsorted input vertices, and sort vertices by Y. + // + { + unsigned cvtemp = 0; + + if(vertices[1].x <= vertices[0].x) + { + if(vertices[2].x <= vertices[1].x) + cvtemp = (1 << 2); + else + cvtemp = (1 << 1); + } + else + cvtemp = (1 << 0); + + if(vertices[2].y < vertices[1].y) + { + std::swap(vertices[2], vertices[1]); + cvtemp = ((cvtemp >> 1) & 0x2) | ((cvtemp << 1) & 0x4) | (cvtemp & 0x1); + } + + if(vertices[1].y < vertices[0].y) + { + std::swap(vertices[1], vertices[0]); + cvtemp = ((cvtemp >> 1) & 0x1) | ((cvtemp << 1) & 0x2) | (cvtemp & 0x4); + } + + if(vertices[2].y < vertices[1].y) + { + std::swap(vertices[2], vertices[1]); + cvtemp = ((cvtemp >> 1) & 0x2) | ((cvtemp << 1) & 0x4) | (cvtemp & 0x1); + } + + core_vertex = cvtemp >> 1; + } + + // + // 0-height, abort out. + // + if(vertices[0].y == vertices[2].y) + return; + + if((vertices[2].y - vertices[0].y) >= 512) + { + //PSX_WARNING("[GPU] Triangle height too large: %d", (vertices[2].y - vertices[0].y)); + return; + } + + if(abs(vertices[2].x - vertices[0].x) >= 1024 || + abs(vertices[2].x - vertices[1].x) >= 1024 || + abs(vertices[1].x - vertices[0].x) >= 1024) + { + //PSX_WARNING("[GPU] Triangle width too large: %d %d %d", abs(vertices[2].x - vertices[0].x), abs(vertices[2].x - vertices[1].x), abs(vertices[1].x - vertices[0].x)); + return; + } + + if(!CalcIDeltas(idl, vertices[0], vertices[1], vertices[2])) + return; + + // [0] should be top vertex, [2] should be bottom vertex, [1] should be off to the side vertex. + // + // + int64 base_coord; + int64 base_step; + + int64 bound_coord_us; + int64 bound_coord_ls; + + bool right_facing; + i_group ig; + + if(textured) + { + ig.u = (COORD_MF_INT(vertices[core_vertex].u) + (1 << (COORD_FBS - 1))) << COORD_POST_PADDING; + ig.v = (COORD_MF_INT(vertices[core_vertex].v) + (1 << (COORD_FBS - 1))) << COORD_POST_PADDING; + } + + ig.r = (COORD_MF_INT(vertices[core_vertex].r) + (1 << (COORD_FBS - 1))) << COORD_POST_PADDING; + ig.g = (COORD_MF_INT(vertices[core_vertex].g) + (1 << (COORD_FBS - 1))) << COORD_POST_PADDING; + ig.b = (COORD_MF_INT(vertices[core_vertex].b) + (1 << (COORD_FBS - 1))) << COORD_POST_PADDING; + + AddIDeltas_DX(ig, idl, -vertices[core_vertex].x); + AddIDeltas_DY(ig, idl, -vertices[core_vertex].y); + + base_coord = MakePolyXFP(vertices[0].x); + base_step = MakePolyXFPStep((vertices[2].x - vertices[0].x), (vertices[2].y - vertices[0].y)); + + // + // + // + + if(vertices[1].y == vertices[0].y) + { + bound_coord_us = 0; + right_facing = (bool)(vertices[1].x > vertices[0].x); + } + else + { + bound_coord_us = MakePolyXFPStep((vertices[1].x - vertices[0].x), (vertices[1].y - vertices[0].y)); + right_facing = (bool)(bound_coord_us > base_step); + } + + if(vertices[2].y == vertices[1].y) + bound_coord_ls = 0; + else + bound_coord_ls = MakePolyXFPStep((vertices[2].x - vertices[1].x), (vertices[2].y - vertices[1].y)); + + // + // Left side draw order + // + // core_vertex == 0 + // Left(base): vertices[0] -> (?vertices[1]?) -> vertices[2] + // + // core_vertex == 1: + // Left(base): vertices[1] -> vertices[2], vertices[1] -> vertices[0] + // + // core_vertex == 2: + // Left(base): vertices[2] -> (?vertices[1]?) -> vertices[0] + //printf("%d %d\n", core_vertex, right_facing); + struct + { + uint64 x_coord[2]; + uint64 x_step[2]; + + int32 y_coord; + int32 y_bound; + + bool dec_mode; + } tripart[2]; + +#if 0 + switch(core_vertex) + { + case 0: + tripart[0].dec_mode = tripart[1].dec_mode = false; + + tripart[0].y_coord = vertices[0].y; + tripart[0].y_bound = vertices[1].y; + if(vertices[0].y != vertices[1].y) + { + tripart[0].x_coord[0] = MakePolyXFP(vertices[0].x); + tripart[0].x_step[0] = + + tripart[0].x_coord[1] = MakePolyXFP(vertices[0].x); + tripart[0].x_step[1] = + } + break; + + case 1: + break; + + case 2: + break; + } +#endif + + unsigned vo = 0; + unsigned vp = 0; + + if(core_vertex) + vo = 1; + + if(core_vertex == 2) + vp = 3; + + { + auto* tp = &tripart[vo]; + + tp->y_coord = vertices[0 ^ vo].y; + tp->y_bound = vertices[1 ^ vo].y; + tp->x_coord[right_facing] = MakePolyXFP(vertices[0 ^ vo].x); + tp->x_step[right_facing] = bound_coord_us; + tp->x_coord[!right_facing] = base_coord + ((vertices[vo].y - vertices[0].y) * base_step); + tp->x_step[!right_facing] = base_step; + tp->dec_mode = !!vo; + } + + { + auto* tp = &tripart[vo ^ 1]; + + tp->y_coord = vertices[1 ^ vp].y; + tp->y_bound = vertices[2 ^ vp].y; + tp->x_coord[right_facing] = MakePolyXFP(vertices[1 ^ vp].x); + tp->x_step[right_facing] = bound_coord_ls; + tp->x_coord[!right_facing] = base_coord + ((vertices[1 ^ vp].y - vertices[0].y) * base_step); //base_coord + ((vertices[1].y - vertices[0].y) * base_step); + tp->x_step[!right_facing] = base_step; + tp->dec_mode = !!vp; + } + + for(unsigned i = 0; i < 2; i++) //2; i++) + { + int32 yi = tripart[i].y_coord; + int32 yb = tripart[i].y_bound; + + uint64 lc = tripart[i].x_coord[0]; + uint64 ls = tripart[i].x_step[0]; + + uint64 rc = tripart[i].x_coord[1]; + uint64 rs = tripart[i].x_step[1]; + + if(tripart[i].dec_mode) + { + while(MDFN_LIKELY(yi > yb)) + { + yi--; + lc -= ls; + rc -= rs; + // + // + // + int32 y = sign_x_to_s32(11, yi); + + if(y < ClipY0) + break; + + if(y > ClipY1) + { + DrawTimeAvail -= 2; + continue; + } + + DrawSpan(y, GetPolyXFP_Int(lc), GetPolyXFP_Int(rc), ig, idl); + } + } + else + { + while(MDFN_LIKELY(yi < yb)) + { + int32 y = sign_x_to_s32(11, yi); + + if(y > ClipY1) + break; + + if(y < ClipY0) + { + DrawTimeAvail -= 2; + goto skipit; + } + + DrawSpan(y, GetPolyXFP_Int(lc), GetPolyXFP_Int(rc), ig, idl); + // + // + // + skipit: ; + yi++; + lc += ls; + rc += rs; + } + } + } + +#if 0 + printf("[GPU] Vertices: %d:%d(r=%d, g=%d, b=%d) -> %d:%d(r=%d, g=%d, b=%d) -> %d:%d(r=%d, g=%d, b=%d)\n\n\n", vertices[0].x, vertices[0].y, + vertices[0].r, vertices[0].g, vertices[0].b, + vertices[1].x, vertices[1].y, + vertices[1].r, vertices[1].g, vertices[1].b, + vertices[2].x, vertices[2].y, + vertices[2].r, vertices[2].g, vertices[2].b); +#endif +} + +template +INLINE void PS_GPU::Command_DrawPolygon(const uint32 *cb) +{ + const unsigned cb0 = cb[0]; + tri_vertex vertices[3]; + unsigned sv = 0; + //uint32 tpage = 0; + + // Base timing is approximate, and could be improved. + if(numvertices == 4 && InCmd == INCMD_QUAD) + DrawTimeAvail -= (28 + 18); + else + DrawTimeAvail -= (64 + 18); + + if(goraud && textured) + DrawTimeAvail -= 150 * 3; + else if(goraud) + DrawTimeAvail -= 96 * 3; + else if(textured) + DrawTimeAvail -= 60 * 3; + + if(numvertices == 4) + { + if(InCmd == INCMD_QUAD) + { + memcpy(&vertices[0], &InQuad_F3Vertices[1], 2 * sizeof(tri_vertex)); + sv = 2; + } + } + //else + // memset(vertices, 0, sizeof(vertices)); + + for(unsigned v = sv; v < 3; v++) + { + if(v == 0 || goraud) + { + uint32 raw_color = (*cb & 0xFFFFFF); + + vertices[v].r = raw_color & 0xFF; + vertices[v].g = (raw_color >> 8) & 0xFF; + vertices[v].b = (raw_color >> 16) & 0xFF; + + cb++; + } + else + { + vertices[v].r = vertices[0].r; + vertices[v].g = vertices[0].g; + vertices[v].b = vertices[0].b; + } + + vertices[v].x = sign_x_to_s32(11, ((int16)(*cb & 0xFFFF))) + OffsX; + vertices[v].y = sign_x_to_s32(11, ((int16)(*cb >> 16))) + OffsY; + cb++; + + if(textured) + { + vertices[v].u = (*cb & 0xFF); + vertices[v].v = (*cb >> 8) & 0xFF; + + if(v == 0) + { + Update_CLUT_Cache((*cb >> 16) & 0xFFFF); + } + + cb++; + } + } + + if(numvertices == 4) + { + if(InCmd == INCMD_QUAD) + { + InCmd = INCMD_NONE; + } + else + { + InCmd = INCMD_QUAD; + InCmd_CC = cb0 >> 24; + memcpy(&InQuad_F3Vertices[0], &vertices[0], sizeof(tri_vertex) * 3); + } + } + + DrawTriangle(vertices); +} + +#undef COORD_POST_PADDING +#undef COORD_FBS +#undef COORD_MF_INT + +// +// C-style function wrappers so our command table isn't so ginormous(in memory usage). +// +template +static void G_Command_DrawPolygon(PS_GPU* g, const uint32 *cb) +{ + g->Command_DrawPolygon(cb); +} + +const CTEntry PS_GPU::Commands_20_3F[0x20] = +{ + /* 0x20 */ + POLY_HELPER(0x20), + POLY_HELPER(0x21), + POLY_HELPER(0x22), + POLY_HELPER(0x23), + POLY_HELPER(0x24), + POLY_HELPER(0x25), + POLY_HELPER(0x26), + POLY_HELPER(0x27), + POLY_HELPER(0x28), + POLY_HELPER(0x29), + POLY_HELPER(0x2a), + POLY_HELPER(0x2b), + POLY_HELPER(0x2c), + POLY_HELPER(0x2d), + POLY_HELPER(0x2e), + POLY_HELPER(0x2f), + POLY_HELPER(0x30), + POLY_HELPER(0x31), + POLY_HELPER(0x32), + POLY_HELPER(0x33), + POLY_HELPER(0x34), + POLY_HELPER(0x35), + POLY_HELPER(0x36), + POLY_HELPER(0x37), + POLY_HELPER(0x38), + POLY_HELPER(0x39), + POLY_HELPER(0x3a), + POLY_HELPER(0x3b), + POLY_HELPER(0x3c), + POLY_HELPER(0x3d), + POLY_HELPER(0x3e), + POLY_HELPER(0x3f) +}; + +} diff --git a/psx/octoshock/psx/gpu_polygon.inc b/psx/octoshock/psx/gpu_polygon.inc deleted file mode 100644 index 4f8dd28b62..0000000000 --- a/psx/octoshock/psx/gpu_polygon.inc +++ /dev/null @@ -1,514 +0,0 @@ -#define COORD_FBS 12 -#define COORD_MF_INT(n) ((n) << COORD_FBS) - -/* - Store and do most math with interpolant coordinates and deltas as unsigned to avoid violating strict overflow(due to biasing), - but when actually grabbing the coordinates, treat them as signed(with signed right shift) so we can do saturation properly. -*/ -static INLINE int32 COORD_GET_INT(int32 n) -{ - return(n >> COORD_FBS); -} - -struct i_group -{ - uint32 u, v; - uint32 r, g, b; - uint32 dummy0[3]; -}; - -struct i_deltas -{ - uint32 du_dx, dv_dx; - uint32 dr_dx, dg_dx, db_dx; - uint32 dummy0[3]; - - uint32 du_dy, dv_dy; - uint32 dr_dy, dg_dy, db_dy; - uint32 dummy1[3]; -}; - -static INLINE int64 MakePolyXFP(int32 x) -{ - return ((int64)x << 32) + ((1LL << 32) - (1 << 11)); -} - -static INLINE int64 MakePolyXFPStep(int32 dx, int32 dy) -{ - int64 ret; - int64 dx_ex = (int64)dx << 32; - - if(dx_ex < 0) - dx_ex -= dy - 1; - - if(dx_ex > 0) - dx_ex += dy - 1; - - ret = dx_ex / dy; - - return(ret); -} - -static INLINE int32 GetPolyXFP_Int(int64 xfp) -{ - return(xfp >> 32); -} - -//#define CALCIS(x,y) ( A.x * (B.y - C.y) + B.x * (C.y - A.y) + C.x * (A.y - B.y) ) -#define CALCIS(x,y) (((B.x - A.x) * (C.y - B.y)) - ((C.x - B.x) * (B.y - A.y))) -static INLINE bool CalcIDeltas(i_deltas &idl, const tri_vertex &A, const tri_vertex &B, const tri_vertex &C) -{ - const unsigned sa = 32; - int64 num = ((int64)COORD_MF_INT(1)) << sa; - int64 denom = CALCIS(x, y); - int64 one_div; - - if(!denom) - return(false); - - one_div = num / denom; - - idl.dr_dx = ((one_div * CALCIS(r, y)) + 0x00000000) >> sa; - idl.dr_dy = ((one_div * CALCIS(x, r)) + 0x00000000) >> sa; - - idl.dg_dx = ((one_div * CALCIS(g, y)) + 0x00000000) >> sa; - idl.dg_dy = ((one_div * CALCIS(x, g)) + 0x00000000) >> sa; - - idl.db_dx = ((one_div * CALCIS(b, y)) + 0x00000000) >> sa; - idl.db_dy = ((one_div * CALCIS(x, b)) + 0x00000000) >> sa; - - idl.du_dx = ((one_div * CALCIS(u, y)) + 0x00000000) >> sa; - idl.du_dy = ((one_div * CALCIS(x, u)) + 0x00000000) >> sa; - - idl.dv_dx = ((one_div * CALCIS(v, y)) + 0x00000000) >> sa; - idl.dv_dy = ((one_div * CALCIS(x, v)) + 0x00000000) >> sa; - - // idl.du_dx = ((int64)CALCIS(u, y) << COORD_FBS) / denom; - // idl.du_dy = ((int64)CALCIS(x, u) << COORD_FBS) / denom; - - // idl.dv_dx = ((int64)CALCIS(v, y) << COORD_FBS) / denom; - // idl.dv_dy = ((int64)CALCIS(x, v) << COORD_FBS) / denom; - - //printf("Denom=%lld - CIS_UY=%d, CIS_XU=%d, CIS_VY=%d, CIS_XV=%d\n", denom, CALCIS(u, y), CALCIS(x, u), CALCIS(v, y), CALCIS(x, v)); - //printf(" du_dx=0x%08x, du_dy=0x%08x --- dv_dx=0x%08x, dv_dy=0x%08x\n", idl.du_dx, idl.du_dy, idl.dv_dx, idl.dv_dy); - - return(true); -} -#undef CALCIS - -template -static INLINE void AddIDeltas_DX(i_group &ig, const i_deltas &idl, uint32 count = 1) -{ - if(textured) - { - ig.u += idl.du_dx * count; - ig.v += idl.dv_dx * count; - } - - if(goraud) - { - ig.r += idl.dr_dx * count; - ig.g += idl.dg_dx * count; - ig.b += idl.db_dx * count; - } -} - -template -static INLINE void AddIDeltas_DY(i_group &ig, const i_deltas &idl, uint32 count = 1) -{ - if(textured) - { - ig.u += idl.du_dy * count; - ig.v += idl.dv_dy * count; - } - - if(goraud) - { - ig.r += idl.dr_dy * count; - ig.g += idl.dg_dy * count; - ig.b += idl.db_dy * count; - } -} - -template -INLINE void PS_GPU::DrawSpan(int y, uint32 clut_offset, const int32 x_start, const int32 x_bound, i_group ig, const i_deltas &idl) -{ - int32 xs = x_start, xb = x_bound; - - if(LineSkipTest(y)) - return; - - if(xs < xb) // (xs != xb) - { - if(xs < ClipX0) - xs = ClipX0; - - if(xb > (ClipX1 + 1)) - xb = ClipX1 + 1; - - if(xs < xb) - { - DrawTimeAvail -= (xb - xs); - - if(goraud || textured) - { - DrawTimeAvail -= (xb - xs); - } - else if((BlendMode >= 0) || MaskEval_TA) - { - DrawTimeAvail -= (((xb + 1) & ~1) - (xs & ~1)) >> 1; - } - } - - if(textured) - { - ig.u += (xs * idl.du_dx) + (y * idl.du_dy); - ig.v += (xs * idl.dv_dx) + (y * idl.dv_dy); - } - - if(goraud) - { - ig.r += (xs * idl.dr_dx) + (y * idl.dr_dy); - ig.g += (xs * idl.dg_dx) + (y * idl.dg_dy); - ig.b += (xs * idl.db_dx) + (y * idl.db_dy); - } - - for(int32 x = xs; MDFN_LIKELY(x < xb); x++) - { - uint32 r, g, b; - - if(goraud) - { - r = RGB8SAT[COORD_GET_INT(ig.r)]; - g = RGB8SAT[COORD_GET_INT(ig.g)]; - b = RGB8SAT[COORD_GET_INT(ig.b)]; - } - else - { - r = COORD_GET_INT(ig.r); - g = COORD_GET_INT(ig.g); - b = COORD_GET_INT(ig.b); - } - - if(textured) - { - uint16 fbw = GetTexel(clut_offset, COORD_GET_INT(ig.u), COORD_GET_INT(ig.v)); - - if(fbw) - { - if(TexMult) - { - if(dtd) - fbw = ModTexel(fbw, r, g, b, x & 3, y & 3); - else - fbw = ModTexel(fbw, r, g, b, 3, 2); //x & 3, y & 3); - } - PlotPixel(x, y, fbw); - } - } - else - { - uint16 pix = 0x8000; - - if(goraud && dtd) - { - pix |= DitherLUT[y & 3][x & 3][r] << 0; - pix |= DitherLUT[y & 3][x & 3][g] << 5; - pix |= DitherLUT[y & 3][x & 3][b] << 10; - } - else - { - pix |= (r >> 3) << 0; - pix |= (g >> 3) << 5; - pix |= (b >> 3) << 10; - } - - PlotPixel(x, y, pix); - } - - AddIDeltas_DX(ig, idl); - //AddStep(perp_coord, perp_step); - } - } -} - -template -void PS_GPU::DrawTriangle(tri_vertex *vertices, uint32 clut) -{ - i_deltas idl; - - // - // Sort vertices by y. - // - if(vertices[2].y < vertices[1].y) - { - tri_vertex tmp = vertices[1]; - vertices[1] = vertices[2]; - vertices[2] = tmp; - } - - if(vertices[1].y < vertices[0].y) - { - tri_vertex tmp = vertices[0]; - vertices[0] = vertices[1]; - vertices[1] = tmp; - } - - if(vertices[2].y < vertices[1].y) - { - tri_vertex tmp = vertices[1]; - vertices[1] = vertices[2]; - vertices[2] = tmp; - } - - if(vertices[0].y == vertices[2].y) - return; - - if((vertices[2].y - vertices[0].y) >= 512) - { - //PSX_WARNING("[GPU] Triangle height too large: %d", (vertices[2].y - vertices[0].y)); - return; - } - - if(abs(vertices[2].x - vertices[0].x) >= 1024 || - abs(vertices[2].x - vertices[1].x) >= 1024 || - abs(vertices[1].x - vertices[0].x) >= 1024) - { - //PSX_WARNING("[GPU] Triangle width too large: %d %d %d", abs(vertices[2].x - vertices[0].x), abs(vertices[2].x - vertices[1].x), abs(vertices[1].x - vertices[0].x)); - return; - } - - if(!CalcIDeltas(idl, vertices[0], vertices[1], vertices[2])) - return; - - // [0] should be top vertex, [2] should be bottom vertex, [1] should be off to the side vertex. - // - // - int32 y_start = vertices[0].y; - int32 y_middle = vertices[1].y; - int32 y_bound = vertices[2].y; - - int64 base_coord; - int64 base_step; - - int64 bound_coord_ul; - int64 bound_coord_us; - - int64 bound_coord_ll; - int64 bound_coord_ls; - - bool right_facing; - //bool bottom_up; - i_group ig; - - // - // Find vertex with lowest X coordinate, and use as the base for calculating interpolants from. - // - { - unsigned iggvi = 0; - - // - // <=, not < - // - if(vertices[1].x <= vertices[iggvi].x) - iggvi = 1; - - if(vertices[2].x <= vertices[iggvi].x) - iggvi = 2; - - ig.u = COORD_MF_INT(vertices[iggvi].u) + (1 << (COORD_FBS - 1)); - ig.v = COORD_MF_INT(vertices[iggvi].v) + (1 << (COORD_FBS - 1)); - ig.r = COORD_MF_INT(vertices[iggvi].r); - ig.g = COORD_MF_INT(vertices[iggvi].g); - ig.b = COORD_MF_INT(vertices[iggvi].b); - - AddIDeltas_DX(ig, idl, -vertices[iggvi].x); - AddIDeltas_DY(ig, idl, -vertices[iggvi].y); - } - - base_coord = MakePolyXFP(vertices[0].x); - base_step = MakePolyXFPStep((vertices[2].x - vertices[0].x), (vertices[2].y - vertices[0].y)); - - bound_coord_ul = MakePolyXFP(vertices[0].x); - bound_coord_ll = MakePolyXFP(vertices[1].x); - - // - // - // - - - if(vertices[1].y == vertices[0].y) - { - bound_coord_us = 0; - right_facing = (bool)(vertices[1].x > vertices[0].x); - } - else - { - bound_coord_us = MakePolyXFPStep((vertices[1].x - vertices[0].x), (vertices[1].y - vertices[0].y)); - right_facing = (bool)(bound_coord_us > base_step); - } - - if(vertices[2].y == vertices[1].y) - bound_coord_ls = 0; - else - bound_coord_ls = MakePolyXFPStep((vertices[2].x - vertices[1].x), (vertices[2].y - vertices[1].y)); - - if(y_start < ClipY0) - { - int32 count = ClipY0 - y_start; - - y_start = ClipY0; - base_coord += base_step * count; - bound_coord_ul += bound_coord_us * count; - - if(y_middle < ClipY0) - { - int32 count_ls = ClipY0 - y_middle; - - y_middle = ClipY0; - bound_coord_ll += bound_coord_ls * count_ls; - } - } - - if(y_bound > (ClipY1 + 1)) - { - y_bound = ClipY1 + 1; - - if(y_middle > y_bound) - y_middle = y_bound; - } - - if(right_facing) - { - for(int32 y = y_start; y < y_middle; y++) - { - DrawSpan(y, clut, GetPolyXFP_Int(base_coord), GetPolyXFP_Int(bound_coord_ul), ig, idl); - base_coord += base_step; - bound_coord_ul += bound_coord_us; - } - - for(int32 y = y_middle; y < y_bound; y++) - { - DrawSpan(y, clut, GetPolyXFP_Int(base_coord), GetPolyXFP_Int(bound_coord_ll), ig, idl); - base_coord += base_step; - bound_coord_ll += bound_coord_ls; - } - } - else - { - for(int32 y = y_start; y < y_middle; y++) - { - DrawSpan(y, clut, GetPolyXFP_Int(bound_coord_ul), GetPolyXFP_Int(base_coord), ig, idl); - base_coord += base_step; - bound_coord_ul += bound_coord_us; - } - - for(int32 y = y_middle; y < y_bound; y++) - { - DrawSpan(y, clut, GetPolyXFP_Int(bound_coord_ll), GetPolyXFP_Int(base_coord), ig, idl); - base_coord += base_step; - bound_coord_ll += bound_coord_ls; - } - } - -#if 0 - printf("[GPU] Vertices: %d:%d(r=%d, g=%d, b=%d) -> %d:%d(r=%d, g=%d, b=%d) -> %d:%d(r=%d, g=%d, b=%d)\n\n\n", vertices[0].x, vertices[0].y, - vertices[0].r, vertices[0].g, vertices[0].b, - vertices[1].x, vertices[1].y, - vertices[1].r, vertices[1].g, vertices[1].b, - vertices[2].x, vertices[2].y, - vertices[2].r, vertices[2].g, vertices[2].b); -#endif -} - -template -INLINE void PS_GPU::Command_DrawPolygon(const uint32 *cb) -{ - const unsigned cb0 = cb[0]; - tri_vertex vertices[3]; - uint32 clut = 0; - unsigned sv = 0; - //uint32 tpage = 0; - - // Base timing is approximate, and could be improved. - if(numvertices == 4 && InCmd == INCMD_QUAD) - DrawTimeAvail -= (28 + 18); - else - DrawTimeAvail -= (64 + 18); - - if(goraud && textured) - DrawTimeAvail -= 150 * 3; - else if(goraud) - DrawTimeAvail -= 96 * 3; - else if(textured) - DrawTimeAvail -= 60 * 3; - - if(numvertices == 4) - { - if(InCmd == INCMD_QUAD) - { - memcpy(&vertices[0], &InQuad_F3Vertices[1], 2 * sizeof(tri_vertex)); - clut = InQuad_clut; - sv = 2; - } - } - //else - // memset(vertices, 0, sizeof(vertices)); - - for(unsigned v = sv; v < 3; v++) - { - if(v == 0 || goraud) - { - uint32 raw_color = (*cb & 0xFFFFFF); - - vertices[v].r = raw_color & 0xFF; - vertices[v].g = (raw_color >> 8) & 0xFF; - vertices[v].b = (raw_color >> 16) & 0xFF; - - cb++; - } - else - { - vertices[v].r = vertices[0].r; - vertices[v].g = vertices[0].g; - vertices[v].b = vertices[0].b; - } - - vertices[v].x = sign_x_to_s32(11, ((int16)(*cb & 0xFFFF))) + OffsX; - vertices[v].y = sign_x_to_s32(11, ((int16)(*cb >> 16))) + OffsY; - cb++; - - if(textured) - { - vertices[v].u = (*cb & 0xFF); - vertices[v].v = (*cb >> 8) & 0xFF; - - if(v == 0) - { - clut = ((*cb >> 16) & 0xFFFF) << 4; - } - - cb++; - } - } - - if(numvertices == 4) - { - if(InCmd == INCMD_QUAD) - { - InCmd = INCMD_NONE; - } - else - { - InCmd = INCMD_QUAD; - InCmd_CC = cb0 >> 24; - memcpy(&InQuad_F3Vertices[0], &vertices[0], sizeof(tri_vertex) * 3); - InQuad_clut = clut; - } - } - - DrawTriangle(vertices, clut); -} - -#undef COORD_FBS -#undef COORD_MF_INT diff --git a/psx/octoshock/psx/gpu_sprite.inc b/psx/octoshock/psx/gpu_sprite.cpp similarity index 64% rename from psx/octoshock/psx/gpu_sprite.inc rename to psx/octoshock/psx/gpu_sprite.cpp index 38e16ebe4c..5bb5343815 100644 --- a/psx/octoshock/psx/gpu_sprite.inc +++ b/psx/octoshock/psx/gpu_sprite.cpp @@ -1,5 +1,29 @@ +/* Mednafen - Multi-system Emulator + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "psx.h" +#include "gpu.h" + +namespace MDFN_IEN_PSX +{ +#include "gpu_common.inc" + template -void PS_GPU::DrawSprite(int32 x_arg, int32 y_arg, int32 w, int32 h, uint8 u_arg, uint8 v_arg, uint32 color, uint32 clut_offset) +void PS_GPU::DrawSprite(int32 x_arg, int32 y_arg, int32 w, int32 h, uint8 u_arg, uint8 v_arg, uint32 color) { const int32 r = color & 0xFF; const int32 g = (color >> 8) & 0xFF; @@ -72,30 +96,6 @@ void PS_GPU::DrawSprite(int32 x_arg, int32 y_arg, int32 w, int32 h, uint8 u_arg, // int32 suck_time = (x_bound - x_start) * (y_bound - y_start); - // Disabled until we can get it to take into account texture windowing, which can cause large sprites to be drawn entirely from cache(and not suffer from a texturing - // penalty); and disabled until we find a game that needs more accurate sprite draw timing. :b -#if 0 - if(textured) - { - // Empirically-observed approximations of time(66MHz cycles) taken to draw large textured sprites in the various texture depths, when the texture data and CLUT data - // was zero(non-zero takes longer to draw, TODO test that more): - // 4bpp - area * 2 - // 8bpp - area * 3 - // 15/16bpp - area * 5 - // (other factors come into more importance for smaller sprites) - static const int cw[4] = { 64, 32, 32, 32 }; - static const int ch[4] = { 64, 64, 32, 32 }; - static const int mm[4] = { 2 - 1, 3 - 1, 5 - 1, 5 - 1 }; - - // Parts of the first few(up to texture cache height) horizontal lines can be in cache, so assume they are. - suck_time += mm[TexMode_TA] * std::max(0, (x_bound - x_start) - cw[TexMode_TA]) * std::min(ch[TexMode_TA], y_bound - y_start); - - // The rest of the horizontal lines should not possibly have parts in the cache now. - suck_time += mm[TexMode_TA] * (x_bound - x_start) * std::max(0, (y_bound - y_start) - ch[TexMode_TA]); - } - else -#endif - if((BlendMode >= 0) || MaskEval_TA) { suck_time += ((((x_bound + 1) & ~1) - (x_start & ~1)) * (y_bound - y_start)) >> 1; @@ -121,7 +121,7 @@ void PS_GPU::DrawSprite(int32 x_arg, int32 y_arg, int32 w, int32 h, uint8 u_arg, { if(textured) { - uint16 fbw = GetTexel(clut_offset, u_r, v); + uint16 fbw = GetTexel(u_r, v); if(fbw) { @@ -151,7 +151,6 @@ INLINE void PS_GPU::Command_DrawSprite(const uint32 *cb) int32 w, h; uint8 u = 0, v = 0; uint32 color = 0; - uint32 clut = 0; DrawTimeAvail -= 16; // FIXME, correct time. @@ -166,7 +165,7 @@ INLINE void PS_GPU::Command_DrawSprite(const uint32 *cb) { u = *cb & 0xFF; v = (*cb >> 8) & 0xFF; - clut = ((*cb >> 16) & 0xFFFF) << 4; + Update_CLUT_Cache((*cb >> 16) & 0xFFFF); cb++; } @@ -204,32 +203,77 @@ INLINE void PS_GPU::Command_DrawSprite(const uint32 *cb) { case 0x0000: if(!TexMult || color == 0x808080) - DrawSprite(x, y, w, h, u, v, color, clut); + DrawSprite(x, y, w, h, u, v, color); else - DrawSprite(x, y, w, h, u, v, color, clut); + DrawSprite(x, y, w, h, u, v, color); break; case 0x1000: if(!TexMult || color == 0x808080) - DrawSprite(x, y, w, h, u, v, color, clut); + DrawSprite(x, y, w, h, u, v, color); else - DrawSprite(x, y, w, h, u, v, color, clut); + DrawSprite(x, y, w, h, u, v, color); break; case 0x2000: if(!TexMult || color == 0x808080) - DrawSprite(x, y, w, h, u, v, color, clut); + DrawSprite(x, y, w, h, u, v, color); else - DrawSprite(x, y, w, h, u, v, color, clut); + DrawSprite(x, y, w, h, u, v, color); break; case 0x3000: if(!TexMult || color == 0x808080) - DrawSprite(x, y, w, h, u, v, color, clut); + DrawSprite(x, y, w, h, u, v, color); else - DrawSprite(x, y, w, h, u, v, color, clut); + DrawSprite(x, y, w, h, u, v, color); break; } } +// +// C-style function wrappers so our command table isn't so ginormous(in memory usage). +// +template +static void G_Command_DrawSprite(PS_GPU* g, const uint32 *cb) +{ + g->Command_DrawSprite(cb); +} +const CTEntry PS_GPU::Commands_60_7F[0x20] = +{ + SPR_HELPER(0x60), + SPR_HELPER(0x61), + SPR_HELPER(0x62), + SPR_HELPER(0x63), + SPR_HELPER(0x64), + SPR_HELPER(0x65), + SPR_HELPER(0x66), + SPR_HELPER(0x67), + SPR_HELPER(0x68), + SPR_HELPER(0x69), + SPR_HELPER(0x6a), + SPR_HELPER(0x6b), + SPR_HELPER(0x6c), + SPR_HELPER(0x6d), + SPR_HELPER(0x6e), + SPR_HELPER(0x6f), + SPR_HELPER(0x70), + SPR_HELPER(0x71), + SPR_HELPER(0x72), + SPR_HELPER(0x73), + SPR_HELPER(0x74), + SPR_HELPER(0x75), + SPR_HELPER(0x76), + SPR_HELPER(0x77), + SPR_HELPER(0x78), + SPR_HELPER(0x79), + SPR_HELPER(0x7a), + SPR_HELPER(0x7b), + SPR_HELPER(0x7c), + SPR_HELPER(0x7d), + SPR_HELPER(0x7e), + SPR_HELPER(0x7f) +}; + +} diff --git a/psx/octoshock/psx/gte.cpp b/psx/octoshock/psx/gte.cpp index 32c800ae98..4cf80afb20 100644 --- a/psx/octoshock/psx/gte.cpp +++ b/psx/octoshock/psx/gte.cpp @@ -18,10 +18,10 @@ #include "psx.h" #include "gte.h" -static uint32 ReciprocalTable[0x8000] = -{ - #include "gte_divrecip.inc" -}; +#undef FALSE +#undef TRUE +#define FALSE 0 +#define TRUE 1 /* Notes: @@ -75,19 +75,6 @@ typedef struct int16 Y; } gtexy; -int16 Lm_B(unsigned int which, int32 value, int lm); -uint8 Lm_C(unsigned int which, int32 value); - - - -int32 Lm_G(unsigned int which, int32 value); -int32 Lm_H(int32 value); - -void MAC_to_RGB_FIFO(void); -void MAC_to_IR(int lm); - -void MultiplyMatrixByVector(const gtematrix *matrix, const int16 *v, const int32 *crv, uint32 sf, int lm); - static uint32 CR[32]; static uint32 FLAGS; // Temporary for instruction execution, copied into CR[31] at end of instruction execution. @@ -153,41 +140,6 @@ static uint32 LZCR; static uint32 Reg23; // end DR -int32 RTPS(uint32 instr); -int32 RTPT(uint32 instr); - -int32 NCLIP(uint32 instr); - -void NormColor(uint32 sf, int lm, uint32 v); -int32 NCS(uint32 instr); -int32 NCT(uint32 instr); - - -void NormColorColor(uint32 v, uint32 sf, int lm); -int32 NCCS(uint32 instr); -int32 NCCT(uint32 instr); - -void NormColorDepthCue(uint32 v, uint32 sf, int lm); -int32 NCDS(uint32 instr); -int32 NCDT(uint32 instr); - -int32 AVSZ3(uint32 instr); -int32 AVSZ4(uint32 instr); - -int32 OP(uint32 instr); - -int32 GPF(uint32 instr); -int32 GPL(uint32 instr); - -void DepthCue(int mult_IR123, int RGB_from_FIFO, uint32 sf, int lm); -int32 DCPL(uint32 instr); -int32 DPCS(uint32 instr); -int32 DPCT(uint32 instr); -int32 INTPL(uint32 instr); - -int32 SQR(uint32 instr); -int32 MVMVA(uint32 instr); - static INLINE uint8 Sat5(int16 cc) { if(cc < 0) @@ -197,1525 +149,1550 @@ static INLINE uint8 Sat5(int16 cc) return(cc); } - - -void GTE_Power(void) -{ - memset(CR, 0, sizeof(CR)); - //memset(DR, 0, sizeof(DR)); - - memset(Matrices.All, 0, sizeof(Matrices.All)); - memset(CRVectors.All, 0, sizeof(CRVectors.All)); - OFX = 0; - OFY = 0; - H = 0; - DQA = 0; - DQB = 0; - ZSF3 = 0; - ZSF4 = 0; - - - memset(Vectors, 0, sizeof(Vectors)); - memset(&RGB, 0, sizeof(RGB)); - OTZ = 0; - IR0 = 0; - IR1 = 0; - IR2 = 0; - IR3 = 0; - - memset(XY_FIFO, 0, sizeof(XY_FIFO)); - memset(Z_FIFO, 0, sizeof(Z_FIFO)); - memset(RGB_FIFO, 0, sizeof(RGB_FIFO)); - memset(MAC, 0, sizeof(MAC)); - LZCS = 0; - LZCR = 0; - - Reg23 = 0; -} - -int GTE_StateAction(StateMem *sm, int load, int data_only) -{ - -return 1; - -} - - -void GTE_WriteCR(unsigned int which, uint32 value) -{ - static const uint32 mask_table[32] = { - /* 0x00 */ - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - - /* 0x08 */ - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - - /* 0x10 */ - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - - /* 0x18 */ - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x0000FFFF, 0xFFFFFFFF, 0x0000FFFF, 0x0000FFFF, 0xFFFFFFFF - }; - - //PSX_WARNING("[GTE] Write CR %d, 0x%08x", which, value); - - value &= mask_table[which]; - - CR[which] = value | (CR[which] & ~mask_table[which]); - - if(which < 24) - { - int we = which >> 3; - which &= 0x7; - - if(which >= 5) - CRVectors.All[we][which - 5] = value; - else - { - #ifdef MSB_FIRST - Matrices.Raw[we][which] = (value << 16) | (value >> 16); - #else - Matrices.Raw[we][which] = value; - #endif - } - return; - } - - switch(which) - { - case 24: - OFX = value; - break; - - case 25: - OFY = value; - break; - - case 26: - H = value; - break; - - case 27: - DQA = value; - break; - - case 28: - DQB = value; - break; - - case 29: - ZSF3 = value; - break; - - case 30: - ZSF4 = value; - break; - - case 31: - CR[31] = (value & 0x7ffff000) | ((value & 0x7f87e000) ? (1 << 31) : 0); - break; - } -} - -uint32 GTE_ReadCR(unsigned int which) -{ - uint32 ret = 0; - - switch(which) - { - default: - ret = CR[which]; - if(which == 4 || which == 12 || which == 20) - ret = (int16)ret; - break; - - case 24: - ret = OFX; - break; - - case 25: - ret = OFY; - break; - - case 26: - ret = (int16)H; - break; - - case 27: - ret = (int16)DQA; - break; - - case 28: - ret = DQB; - break; - - case 29: - ret = (int16)ZSF3; - break; - - case 30: - ret = (int16)ZSF4; - break; - - case 31: - ret = CR[31]; - break; - } - - return(ret); -} - -void GTE_WriteDR(unsigned int which, uint32 value) -{ - switch(which & 0x1F) - { - case 0: - Vectors[0][0] = value; - Vectors[0][1] = value >> 16; - break; - - case 1: - Vectors[0][2] = value; - break; - - case 2: - Vectors[1][0] = value; - Vectors[1][1] = value >> 16; - break; - - case 3: - Vectors[1][2] = value; - break; - - case 4: - Vectors[2][0] = value; - Vectors[2][1] = value >> 16; - break; - - case 5: - Vectors[2][2] = value; - break; - - case 6: - RGB.R = value >> 0; - RGB.G = value >> 8; - RGB.B = value >> 16; - RGB.CD = value >> 24; - break; - - case 7: - OTZ = value; - break; - - case 8: - IR0 = value; - break; - - case 9: - IR1 = value; - break; - - case 10: - IR2 = value; - break; - - case 11: - IR3 = value; - break; - - case 12: - XY_FIFO[0].X = value; - XY_FIFO[0].Y = value >> 16; - break; - - case 13: - XY_FIFO[1].X = value; - XY_FIFO[1].Y = value >> 16; - break; - - case 14: - XY_FIFO[2].X = value; - XY_FIFO[2].Y = value >> 16; - XY_FIFO[3].X = value; - XY_FIFO[3].Y = value >> 16; - break; - - case 15: - XY_FIFO[3].X = value; - XY_FIFO[3].Y = value >> 16; - - XY_FIFO[0] = XY_FIFO[1]; - XY_FIFO[1] = XY_FIFO[2]; - XY_FIFO[2] = XY_FIFO[3]; - break; - - case 16: - Z_FIFO[0] = value; - break; - - case 17: - Z_FIFO[1] = value; - break; - - case 18: - Z_FIFO[2] = value; - break; - - case 19: - Z_FIFO[3] = value; - break; - - case 20: - RGB_FIFO[0].R = value; - RGB_FIFO[0].G = value >> 8; - RGB_FIFO[0].B = value >> 16; - RGB_FIFO[0].CD = value >> 24; - break; - - case 21: - RGB_FIFO[1].R = value; - RGB_FIFO[1].G = value >> 8; - RGB_FIFO[1].B = value >> 16; - RGB_FIFO[1].CD = value >> 24; - break; - - case 22: - RGB_FIFO[2].R = value; - RGB_FIFO[2].G = value >> 8; - RGB_FIFO[2].B = value >> 16; - RGB_FIFO[2].CD = value >> 24; - break; - - case 23: - Reg23 = value; - break; - - case 24: - MAC[0] = value; - break; - - case 25: - MAC[1] = value; - break; - - case 26: - MAC[2] = value; - break; - - case 27: - MAC[3] = value; - break; - - case 28: - IR1 = ((value >> 0) & 0x1F) << 7; - IR2 = ((value >> 5) & 0x1F) << 7; - IR3 = ((value >> 10) & 0x1F) << 7; - break; - - case 29: // Read-only - break; - - case 30: - LZCS = value; - { - uint32 test = value & 0x80000000; - LZCR = 0; - - while((value & 0x80000000) == test && LZCR < 32) - { - LZCR++; - value <<= 1; - } - } - break; - - case 31: // Read-only - break; - } -} - -uint32 GTE_ReadDR(unsigned int which) -{ - uint32 ret = 0; - - switch(which & 0x1F) - { - case 0: - ret = (uint16)Vectors[0][0] | ((uint16)Vectors[0][1] << 16); - break; - - case 1: - ret = (int16)Vectors[0][2]; - break; - - case 2: - ret = (uint16)Vectors[1][0] | ((uint16)Vectors[1][1] << 16); - break; - - case 3: - ret = (int16)Vectors[1][2]; - break; - - case 4: - ret = (uint16)Vectors[2][0] | ((uint16)Vectors[2][1] << 16); - break; - - case 5: - ret = (int16)Vectors[2][2]; - break; - - case 6: - ret = RGB.R | (RGB.G << 8) | (RGB.B << 16) | (RGB.CD << 24); - break; - - case 7: - ret = (uint16)OTZ; - break; - - case 8: - ret = (int16)IR0; - break; - - case 9: - ret = (int16)IR1; - break; - - case 10: - ret = (int16)IR2; - break; - - case 11: - ret = (int16)IR3; - break; - - case 12: - ret = (uint16)XY_FIFO[0].X | ((uint16)XY_FIFO[0].Y << 16); - break; - - case 13: - ret = (uint16)XY_FIFO[1].X | ((uint16)XY_FIFO[1].Y << 16); - break; - - case 14: - ret = (uint16)XY_FIFO[2].X | ((uint16)XY_FIFO[2].Y << 16); - break; - - case 15: - ret = (uint16)XY_FIFO[3].X | ((uint16)XY_FIFO[3].Y << 16); - break; - - case 16: - ret = (uint16)Z_FIFO[0]; - break; - - case 17: - ret = (uint16)Z_FIFO[1]; - break; - - case 18: - ret = (uint16)Z_FIFO[2]; - break; - - case 19: - ret = (uint16)Z_FIFO[3]; - break; - - case 20: - ret = RGB_FIFO[0].R | (RGB_FIFO[0].G << 8) | (RGB_FIFO[0].B << 16) | (RGB_FIFO[0].CD << 24); - break; - - case 21: - ret = RGB_FIFO[1].R | (RGB_FIFO[1].G << 8) | (RGB_FIFO[1].B << 16) | (RGB_FIFO[1].CD << 24); - break; - - case 22: - ret = RGB_FIFO[2].R | (RGB_FIFO[2].G << 8) | (RGB_FIFO[2].B << 16) | (RGB_FIFO[2].CD << 24); - break; - - case 23: - ret = Reg23; - break; - - case 24: - ret = MAC[0]; - break; - - case 25: - ret = MAC[1]; - break; - - case 26: - ret = MAC[2]; - break; - - case 27: - ret = MAC[3]; - break; - - case 28: - case 29: - ret = Sat5(IR1 >> 7) | (Sat5(IR2 >> 7) << 5) | (Sat5(IR3 >> 7) << 10); - break; - - case 30: - ret = LZCS; - break; - - case 31: - ret = LZCR; - break; - } - return(ret); -} - -#define sign_x_to_s64(_bits, _value) (((int64)((uint64)(_value) << (64 - _bits))) >> (64 - _bits)) -INLINE int64 A_MV(unsigned which, int64 value) -{ - if(value >= (1LL << 43)) - FLAGS |= 1 << (30 - which); - - if(value < -(1LL << 43)) - FLAGS |= 1 << (27 - which); - - return sign_x_to_s64(44, value); -} - -INLINE int64 F(int64 value) -{ - if(value < -2147483648LL) - { - // flag set here - FLAGS |= 1 << 15; - } - - if(value > 2147483647LL) - { - // flag set here - FLAGS |= 1 << 16; - } - return(value); -} - - -INLINE int16 Lm_B(unsigned int which, int32 value, int lm) -{ - int32 tmp = lm << 15; - - if(value < (-32768 + tmp)) - { - // set flag here - FLAGS |= 1 << (24 - which); - value = -32768 + tmp; - } - - if(value > 32767) - { - // Set flag here - FLAGS |= 1 << (24 - which); - value = 32767; - } - - return(value); -} - - -INLINE int16 Lm_B_PTZ(unsigned int which, int32 value, int32 ftv_value, int lm) -{ - int32 tmp = lm << 15; - - if(ftv_value < -32768) - { - FLAGS |= 1 << (24 - which); - } - - if(ftv_value > 32767) - { - FLAGS |= 1 << (24 - which); - } - - if(value < (-32768 + tmp)) - { - value = -32768 + tmp; - } - - if(value > 32767) - { - value = 32767; - } - - return(value); -} - -INLINE uint8 Lm_C(unsigned int which, int32 value) -{ - if(value & ~0xFF) - { - // Set flag here - FLAGS |= 1 << (21 - which); // Tested with GPF - - if(value < 0) - value = 0; - - if(value > 255) - value = 255; - } - - return(value); -} - -INLINE int32 Lm_D(int32 value, int unchained) -{ - // Not sure if we should have it as int64, or just chain on to and special case when the F flags are set. - if(!unchained) - { - if(FLAGS & (1 << 15)) - { - FLAGS |= 1 << 18; - return(0); - } - - if(FLAGS & (1 << 16)) - { - FLAGS |= 1 << 18; - return(0xFFFF); - } - } - - if(value < 0) - { - // Set flag here - value = 0; - FLAGS |= 1 << 18; // Tested with AVSZ3 - } - else if(value > 65535) - { - // Set flag here. - value = 65535; - FLAGS |= 1 << 18; // Tested with AVSZ3 - } - - return(value); -} - -INLINE int32 Lm_G(unsigned int which, int32 value) -{ - if(value < -1024) - { - // Set flag here - value = -1024; - FLAGS |= 1 << (14 - which); - } - - if(value > 1023) - { - // Set flag here. - value = 1023; - FLAGS |= 1 << (14 - which); - } - - return(value); -} - -// limit to 4096, not 4095 -INLINE int32 Lm_H(int32 value) -{ -#if 0 - if(FLAGS & (1 << 15)) - { - value = 0; - FLAGS |= 1 << 12; - return value; - } - - if(FLAGS & (1 << 16)) - { - value = 4096; - FLAGS |= 1 << 12; - return value; - } -#endif - - if(value < 0) - { - value = 0; - FLAGS |= 1 << 12; - } - - if(value > 4096) - { - value = 4096; - FLAGS |= 1 << 12; - } - - return(value); -} - -INLINE void MAC_to_RGB_FIFO(void) -{ - RGB_FIFO[0] = RGB_FIFO[1]; - RGB_FIFO[1] = RGB_FIFO[2]; - RGB_FIFO[2].R = Lm_C(0, MAC[1] >> 4); - RGB_FIFO[2].G = Lm_C(1, MAC[2] >> 4); - RGB_FIFO[2].B = Lm_C(2, MAC[3] >> 4); - RGB_FIFO[2].CD = RGB.CD; -} - - -INLINE void MAC_to_IR(int lm) -{ - IR1 = Lm_B(0, MAC[1], lm); - IR2 = Lm_B(1, MAC[2], lm); - IR3 = Lm_B(2, MAC[3], lm); -} - -INLINE void MultiplyMatrixByVector(const gtematrix *matrix, const int16 *v, const int32 *crv, uint32 sf, int lm) -{ - unsigned i; - - for(i = 0; i < 3; i++) - { - int64 tmp; - int32 mulr[3]; - - tmp = (int64)crv[i] << 12; - - if(matrix == &Matrices.AbbyNormal) - { - if(i == 0) - { - mulr[0] = -((RGB.R << 4) * v[0]); - mulr[1] = (RGB.R << 4) * v[1]; - mulr[2] = IR0 * v[2]; - } - else - { - mulr[0] = (int16)CR[i] * v[0]; - mulr[1] = (int16)CR[i] * v[1]; - mulr[2] = (int16)CR[i] * v[2]; - } - } - else - { - mulr[0] = matrix->MX[i][0] * v[0]; - mulr[1] = matrix->MX[i][1] * v[1]; - mulr[2] = matrix->MX[i][2] * v[2]; - } - - tmp = A_MV(i, tmp + mulr[0]); - if(crv == CRVectors.FC) - { - Lm_B(i, tmp >> sf, FALSE_0); - tmp = 0; - } - - tmp = A_MV(i, tmp + mulr[1]); - tmp = A_MV(i, tmp + mulr[2]); - - MAC[1 + i] = tmp >> sf; - } - - - MAC_to_IR(lm); -} - - -INLINE void MultiplyMatrixByVector_PT(const gtematrix *matrix, const int16 *v, const int32 *crv, uint32 sf, int lm) -{ - int64 tmp[3]; - unsigned i; - - for(i = 0; i < 3; i++) - { - int32 mulr[3]; - - tmp[i] = (int64)crv[i] << 12; - - mulr[0] = matrix->MX[i][0] * v[0]; - mulr[1] = matrix->MX[i][1] * v[1]; - mulr[2] = matrix->MX[i][2] * v[2]; - - tmp[i] = A_MV(i, tmp[i] + mulr[0]); - tmp[i] = A_MV(i, tmp[i] + mulr[1]); - tmp[i] = A_MV(i, tmp[i] + mulr[2]); - - MAC[1 + i] = tmp[i] >> sf; - } - - IR1 = Lm_B(0, MAC[1], lm); - IR2 = Lm_B(1, MAC[2], lm); - //printf("FTV: %08x %08x\n", crv[2], (uint32)(tmp[2] >> 12)); - IR3 = Lm_B_PTZ(2, MAC[3], tmp[2] >> 12, lm); - - Z_FIFO[0] = Z_FIFO[1]; - Z_FIFO[1] = Z_FIFO[2]; - Z_FIFO[2] = Z_FIFO[3]; - Z_FIFO[3] = Lm_D(tmp[2] >> 12, TRUE_1); -} - - -#define DECODE_FIELDS \ - const uint32 sf MDFN_NOWARN_UNUSED = (instr & (1 << 19)) ? 12 : 0; \ - const uint32 mx MDFN_NOWARN_UNUSED = (instr >> 17) & 0x3; \ - const uint32 v_i = (instr >> 15) & 0x3; \ - const int32* cv MDFN_NOWARN_UNUSED = CRVectors.All[(instr >> 13) & 0x3]; \ - const int lm MDFN_NOWARN_UNUSED = (instr >> 10) & 1; \ - int16 v[3] MDFN_NOWARN_UNUSED; \ - if(v_i == 3) \ - { \ - v[0] = IR1; \ - v[1] = IR2; \ - v[2] = IR3; \ - } \ - else \ - { \ - v[0] = Vectors[v_i][0]; \ - v[1] = Vectors[v_i][1]; \ - v[2] = Vectors[v_i][2]; \ - } - - -int32 SQR(uint32 instr) -{ - DECODE_FIELDS; - - MAC[1] = ((IR1 * IR1) >> sf); - MAC[2] = ((IR2 * IR2) >> sf); - MAC[3] = ((IR3 * IR3) >> sf); - - MAC_to_IR(lm); - - return(5); -} - - -int32 MVMVA(uint32 instr) -{ - DECODE_FIELDS; - - MultiplyMatrixByVector(&Matrices.All[mx], v, cv, sf, lm); - - return(8); -} - -static INLINE unsigned CountLeadingZeroU16(uint16 val) -{ - unsigned ret = 0; - - while(!(val & 0x8000) && ret < 16) - { - val <<= 1; - ret++; - } - - return ret; -} - -static INLINE uint32 Divide(uint32 dividend, uint32 divisor) -{ - //if((Z_FIFO[3] * 2) > H) - if((divisor * 2) > dividend) - { - unsigned shift_bias = CountLeadingZeroU16(divisor); - - dividend <<= shift_bias; - divisor <<= shift_bias; - - return ((int64)dividend * ReciprocalTable[divisor & 0x7FFF] + 32768) >> 16; - } - else - { - FLAGS |= 1 << 17; - return 0x1FFFF; - } -} - -static INLINE void TransformXY(int64 h_div_sz) -{ - MAC[0] = F((int64)OFX + IR1 * h_div_sz) >> 16; - XY_FIFO[3].X = Lm_G(0, MAC[0]); - - MAC[0] = F((int64)OFY + IR2 * h_div_sz) >> 16; - XY_FIFO[3].Y = Lm_G(1, MAC[0]); - - XY_FIFO[0] = XY_FIFO[1]; - XY_FIFO[1] = XY_FIFO[2]; - XY_FIFO[2] = XY_FIFO[3]; -} - -static INLINE void TransformDQ(int64 h_div_sz) -{ - MAC[0] = F((int64)DQB + DQA * h_div_sz); - IR0 = Lm_H(((int64)DQB + DQA * h_div_sz) >> 12); -} - -int32 RTPS(uint32 instr) -{ - DECODE_FIELDS; - int64 h_div_sz; - - MultiplyMatrixByVector_PT(&Matrices.Rot, Vectors[0], CRVectors.T, sf, lm); - h_div_sz = Divide(H, Z_FIFO[3]); - - TransformXY(h_div_sz); - TransformDQ(h_div_sz); - - return(15); -} - -int32 RTPT(uint32 instr) -{ - DECODE_FIELDS; - int i; - - for(i = 0; i < 3; i++) - { - int64 h_div_sz; - - MultiplyMatrixByVector_PT(&Matrices.Rot, Vectors[i], CRVectors.T, sf, lm); - h_div_sz = Divide(H, Z_FIFO[3]); - - TransformXY(h_div_sz); - - if(i == 2) - TransformDQ(h_div_sz); - } - - return(23); -} - -INLINE void NormColor(uint32 sf, int lm, uint32 v) -{ - int16 tmp_vector[3]; - - MultiplyMatrixByVector(&Matrices.Light, Vectors[v], CRVectors.Null, sf, lm); - - tmp_vector[0] = IR1; tmp_vector[1] = IR2; tmp_vector[2] = IR3; - MultiplyMatrixByVector(&Matrices.Color, tmp_vector, CRVectors.B, sf, lm); - - MAC_to_RGB_FIFO(); -} - -int32 NCS(uint32 instr) -{ - DECODE_FIELDS; - - NormColor(sf, lm, 0); - - return(14); -} - -int32 NCT(uint32 instr) -{ - DECODE_FIELDS; - int i; - - for(i = 0; i < 3; i++) - NormColor(sf, lm, i); - - return(30); -} - -INLINE void NormColorColor(uint32 v, uint32 sf, int lm) -{ - int16 tmp_vector[3]; - - MultiplyMatrixByVector(&Matrices.Light, Vectors[v], CRVectors.Null, sf, lm); - - tmp_vector[0] = IR1; tmp_vector[1] = IR2; tmp_vector[2] = IR3; - MultiplyMatrixByVector(&Matrices.Color, tmp_vector, CRVectors.B, sf, lm); - - MAC[1] = ((RGB.R << 4) * IR1) >> sf; - MAC[2] = ((RGB.G << 4) * IR2) >> sf; - MAC[3] = ((RGB.B << 4) * IR3) >> sf; - - MAC_to_IR(lm); - - MAC_to_RGB_FIFO(); -} - -int32 NCCS(uint32 instr) -{ - DECODE_FIELDS; - - NormColorColor(0, sf, lm); - return(17); -} - - -int32 NCCT(uint32 instr) -{ - int i; - DECODE_FIELDS; - - for(i = 0; i < 3; i++) - NormColorColor(i, sf, lm); - - return(39); -} - -INLINE void DepthCue(int mult_IR123, int RGB_from_FIFO, uint32 sf, int lm) -{ - int32 RGB_temp[3]; - int32 IR_temp[3] = { IR1, IR2, IR3 }; - int i; - - //assert(sf); - - if(RGB_from_FIFO) - { - RGB_temp[0] = RGB_FIFO[0].R << 4; - RGB_temp[1] = RGB_FIFO[0].G << 4; - RGB_temp[2] = RGB_FIFO[0].B << 4; - } - else - { - RGB_temp[0] = RGB.R << 4; - RGB_temp[1] = RGB.G << 4; - RGB_temp[2] = RGB.B << 4; - } - - if(mult_IR123) - { - for(i = 0; i < 3; i++) - { - MAC[1 + i] = A_MV(i, (((int64)CRVectors.FC[i] << 12) - RGB_temp[i] * IR_temp[i])) >> sf; - MAC[1 + i] = A_MV(i, (RGB_temp[i] * IR_temp[i] + IR0 * Lm_B(i, MAC[1 + i], FALSE_0))) >> sf; - } - } - else - { - for(i = 0; i < 3; i++) - { - MAC[1 + i] = A_MV(i, (((int64)CRVectors.FC[i] << 12) - (RGB_temp[i] << 12))) >> sf; - MAC[1 + i] = A_MV(i, (((int64)RGB_temp[i] << 12) + IR0 * Lm_B(i, MAC[1 + i], FALSE_0))) >> sf; - } - } - - MAC_to_IR(lm); - - MAC_to_RGB_FIFO(); -} - - -int32 DCPL(uint32 instr) -{ - DECODE_FIELDS; - - DepthCue(TRUE_1, FALSE_0, sf, lm); - - return(8); -} - - -int32 DPCS(uint32 instr) -{ - DECODE_FIELDS; - - DepthCue(FALSE_0, FALSE_0, sf, lm); - - return(8); -} - -int32 DPCT(uint32 instr) -{ - int i; - DECODE_FIELDS; - - for(i = 0; i < 3; i++) - { - DepthCue(FALSE_0, TRUE_1, sf, lm); - } - - return(17); -} - -int32 INTPL(uint32 instr) -{ - DECODE_FIELDS; - - MAC[1] = A_MV(0, (((int64)CRVectors.FC[0] << 12) - (IR1 << 12))) >> sf; - MAC[2] = A_MV(1, (((int64)CRVectors.FC[1] << 12) - (IR2 << 12))) >> sf; - MAC[3] = A_MV(2, (((int64)CRVectors.FC[2] << 12) - (IR3 << 12))) >> sf; - - MAC[1] = A_MV(0, (((int64)IR1 << 12) + IR0 * Lm_B(0, MAC[1], FALSE_0)) >> sf); - MAC[2] = A_MV(1, (((int64)IR2 << 12) + IR0 * Lm_B(1, MAC[2], FALSE_0)) >> sf); - MAC[3] = A_MV(2, (((int64)IR3 << 12) + IR0 * Lm_B(2, MAC[3], FALSE_0)) >> sf); - - MAC_to_IR(lm); - - MAC_to_RGB_FIFO(); - - return(8); -} - - -INLINE void NormColorDepthCue(uint32 v, uint32 sf, int lm) -{ - int16 tmp_vector[3]; - - MultiplyMatrixByVector(&Matrices.Light, Vectors[v], CRVectors.Null, sf, lm); - - tmp_vector[0] = IR1; tmp_vector[1] = IR2; tmp_vector[2] = IR3; - MultiplyMatrixByVector(&Matrices.Color, tmp_vector, CRVectors.B, sf, lm); - - DepthCue(TRUE_1, FALSE_0, sf, lm); -} - -int32 NCDS(uint32 instr) -{ - DECODE_FIELDS; - - NormColorDepthCue(0, sf, lm); - - return(19); -} - -int32 NCDT(uint32 instr) -{ - int i; - DECODE_FIELDS; - - for(i = 0; i < 3; i++) - { - NormColorDepthCue(i, sf, lm); - } - - return(44); -} - -int32 CC(uint32 instr) -{ - DECODE_FIELDS; - int16 tmp_vector[3]; - - tmp_vector[0] = IR1; tmp_vector[1] = IR2; tmp_vector[2] = IR3; - MultiplyMatrixByVector(&Matrices.Color, tmp_vector, CRVectors.B, sf, lm); - - MAC[1] = ((RGB.R << 4) * IR1) >> sf; - MAC[2] = ((RGB.G << 4) * IR2) >> sf; - MAC[3] = ((RGB.B << 4) * IR3) >> sf; - - MAC_to_IR(lm); - - MAC_to_RGB_FIFO(); - - return(11); -} - -int32 CDP(uint32 instr) -{ - DECODE_FIELDS; - int16 tmp_vector[3]; - - tmp_vector[0] = IR1; tmp_vector[1] = IR2; tmp_vector[2] = IR3; - MultiplyMatrixByVector(&Matrices.Color, tmp_vector, CRVectors.B, sf, lm); - - DepthCue(TRUE_1, FALSE_0, sf, lm); - - return(13); -} - -int32 NCLIP(uint32 instr) -{ - DECODE_FIELDS; - - MAC[0] = F( (int64)(XY_FIFO[0].X * (XY_FIFO[1].Y - XY_FIFO[2].Y)) + (XY_FIFO[1].X * (XY_FIFO[2].Y - XY_FIFO[0].Y)) + (XY_FIFO[2].X * (XY_FIFO[0].Y - XY_FIFO[1].Y)) - ); - - return(8); -} - -int32 AVSZ3(uint32 instr) -{ - DECODE_FIELDS; - - MAC[0] = F(((int64)ZSF3 * (Z_FIFO[1] + Z_FIFO[2] + Z_FIFO[3]))); - - OTZ = Lm_D(MAC[0] >> 12, FALSE_0); - - return(5); -} - -int32 AVSZ4(uint32 instr) -{ - DECODE_FIELDS; - - MAC[0] = F(((int64)ZSF4 * (Z_FIFO[0] + Z_FIFO[1] + Z_FIFO[2] + Z_FIFO[3]))); - - OTZ = Lm_D(MAC[0] >> 12, FALSE_0); - - return(5); -} - - -// -32768 * -32768 - 32767 * -32768 = 2147450880 -// (2 ^ 31) - 1 = 2147483647 -int32 OP(uint32 instr) -{ - DECODE_FIELDS; - - MAC[1] = ((Matrices.Rot.MX[1][1] * IR3) - (Matrices.Rot.MX[2][2] * IR2)) >> sf; - MAC[2] = ((Matrices.Rot.MX[2][2] * IR1) - (Matrices.Rot.MX[0][0] * IR3)) >> sf; - MAC[3] = ((Matrices.Rot.MX[0][0] * IR2) - (Matrices.Rot.MX[1][1] * IR1)) >> sf; - - MAC_to_IR(lm); - - return(6); -} - -int32 GPF(uint32 instr) -{ - DECODE_FIELDS; - - MAC[1] = (IR0 * IR1) >> sf; - MAC[2] = (IR0 * IR2) >> sf; - MAC[3] = (IR0 * IR3) >> sf; - - MAC_to_IR(lm); - - MAC_to_RGB_FIFO(); - - return(5); -} - -int32 GPL(uint32 instr) -{ - DECODE_FIELDS; - - MAC[1] = A_MV(0, ((int64)MAC[1] << sf) + (IR0 * IR1)) >> sf; - MAC[2] = A_MV(1, ((int64)MAC[2] << sf) + (IR0 * IR2)) >> sf; - MAC[3] = A_MV(2, ((int64)MAC[3] << sf) + (IR0 * IR3)) >> sf; - - MAC_to_IR(lm); - - MAC_to_RGB_FIFO(); - - return(5); -} - -/* - ---------------------------------------------------------------------------------------------- -| 24 23 22 21 20 | 19 | 18 17 | 16 15 | 14 13 | 12 11 | 10 | 9 8 7 6 | 5 4 3 2 1 0 | -|-------------------------------------------------------------------------------------------| -| (unused) | sf | mx | v | cv |(unused)| lm | (unused) | opcode | ---------------------------------------------------------------------------------------------- - (unused) = unused, ignored - - sf = shift 12 - - mx = matrix selection - - v = source vector - - cv = add vector(translation/back/far color(bugged)/none) - - (unused) = unused, ignored - - lm = limit negative results to 0 - - (unused) = unused, ignored - - opcode = operation code -*/ - -int32 GTE_Instruction(uint32 instr) -{ - const unsigned code = instr & 0x3F; - int32 ret = 1; - - FLAGS = 0; - - switch(code) - { - default: -#ifndef PSXDEV_GTE_TESTING - PSX_WARNING("[GTE] Unknown instruction code: 0x%02x", code); -#endif - break; - - case 0x00: // alternate? - case 0x01: - ret = RTPS(instr); - break; - -/* - case 0x02: // UNSTABLE? - break; - - case 0x03: // UNSTABLE? - break; - - case 0x04: // Probably simple with v,cv,sf,mx,lm ignored. Same calculation as 0x3B? - break; - - case 0x05: // UNSTABLE? - break; -*/ - - case 0x06: - ret = NCLIP(instr); - break; - -/* - case 0x07: // UNSTABLE? - break; - - case 0x08: // UNSTABLE? - break; - - case 0x09: // UNSTABLE? - break; - - case 0x0A: // UNSTABLE? - break; - - case 0x0B: // UNSTABLE? - break; - -*/ - - case 0x0C: - ret = OP(instr); - break; - -/* - case 0x0D: // UNSTABLE? - break; - - case 0x0E: // UNSTABLE? - break; - - case 0x0F: // UNSTABLE? - break; -*/ - - case 0x10: - ret = DPCS(instr); - break; - - case 0x11: - ret = INTPL(instr); - break; - - case 0x12: - ret = MVMVA(instr); - break; - - case 0x13: - ret = NCDS(instr); - break; - - case 0x14: - ret = CDP(instr); - break; - - -/* - case 0x15: // does one push on RGB FIFO, what else... - break; -*/ - - case 0x16: - ret = NCDT(instr); - break; - -/* - case 0x17: // PARTIALLY UNSTABLE(depending on sf or v or cv or mx or lm???), similar behavior under some conditions to 0x16? - break; - - case 0x18: - break; - - case 0x19: - break; -*/ - - case 0x1A: // Alternate for 0x29? - ret = DCPL(instr); - break; - - case 0x1B: - ret = NCCS(instr); - break; - - case 0x1C: - ret = CC(instr); - break; - -/* - case 0x1D: - break; -*/ - - case 0x1E: - ret = NCS(instr); - break; - -/* - case 0x1F: - break; -*/ - - case 0x20: - ret = NCT(instr); - break; -/* - case 0x21: - break; - - case 0x22: // UNSTABLE? - break; - - case 0x23: - break; - - case 0x24: - break; - - case 0x25: - break; - - case 0x26: - break; - - case 0x27: - break; -*/ - - case 0x28: - ret = SQR(instr); - break; - - case 0x29: - ret = DCPL(instr); - break; - - case 0x2A: - ret = DPCT(instr); - break; - -/* - case 0x2B: - break; - - case 0x2C: - break; -*/ - - case 0x2D: - ret = AVSZ3(instr); - break; - - case 0x2E: - ret = AVSZ4(instr); - break; - -/* - case 0x2F: // UNSTABLE? - break; -*/ - - case 0x30: - ret = RTPT(instr); - break; - -/* - case 0x31: // UNSTABLE? - break; - - case 0x32: // UNSTABLE? - break; - - case 0x33: // UNSTABLE? - break; - - case 0x34: // UNSTABLE? - break; - - case 0x35: // UNSTABLE? - break; - - case 0x36: // UNSTABLE? - break; - - case 0x37: // UNSTABLE? - break; - - case 0x38: - break; - - case 0x39: // Probably simple with v,cv,sf,mx,lm ignored. - break; - - case 0x3A: // Probably simple with v,cv,sf,mx,lm ignored. - break; - - case 0x3B: // Probably simple with v,cv,sf,mx,lm ignored. Same calculation as 0x04? - break; - - case 0x3C: // UNSTABLE? - break; -*/ - - case 0x3D: - ret = GPF(instr); - break; - - case 0x3E: - ret = GPL(instr); - break; - - case 0x3F: - ret = NCCT(instr); - break; - } - - if(FLAGS & 0x7f87e000) - FLAGS |= 1 << 31; - - CR[31] = FLAGS; - - return(ret - 1); -} - -void GTE_SyncState(bool isReader, EW::NewState *ns) -{ - NSS(CR); - NSS(FLAGS); - - NSS(Matrices); - - NSS(CRVectors); - - NSS(OFX); - NSS(OFY); - NSS(H); - NSS(DQA); - NSS(DQB); - - NSS(ZSF3); - NSS(ZSF4); - NSS(Vectors); - - NSS(RGB); - NSS(OTZ); - NSS(IR); - - NSS(XY_FIFO); - - NSS(Z_FIFO); - - NSS(RGB_FIFO); - - NSS(MAC); - - NSS(LZCS); - NSS(LZCR); - NSS(Reg23); -} - -#ifndef PSXDEV_GTE_TESTING -} -#endif - + +// +// Newton-Raphson division table. (Initialized at startup; do NOT save in save states!) +// +static uint8 DivTable[0x100 + 1]; +static INLINE int32 CalcRecip(uint16 divisor) +{ + int32 x = (0x101 + DivTable[(((divisor & 0x7FFF) + 0x40) >> 7)]); + int32 tmp = (((int32)divisor * -x) + 0x80) >> 8; + int32 tmp2 = ((x * (131072 + tmp)) + 0x80) >> 8; + + return(tmp2); +} + +void GTE_Init(void) +{ + for(uint32_t divisor = 0x8000; divisor < 0x10000; divisor += 0x80) + { + uint32_t xa = 512; + + for(unsigned i = 1; i < 5; i++) + { + xa = (xa * (1024 * 512 - ((divisor >> 7) * xa))) >> 18; + } + + DivTable[(divisor >> 7) & 0xFF] = ((xa + 1) >> 1) - 0x101; + //printf("%04x, %02x\n", divisor, ((xa + 1) >> 1) - 0x101); + } + + // + // To avoid a bounds limiting if statement in the emulation code: + DivTable[0x100] = DivTable[0xFF]; +} + +void GTE_Power(void) +{ + memset(CR, 0, sizeof(CR)); + //memset(DR, 0, sizeof(DR)); + const int x = 5; + char v[x]; + + memset(Matrices.All, 0, sizeof(Matrices.All)); + memset(CRVectors.All, 0, sizeof(CRVectors.All)); + OFX = 0; + OFY = 0; + H = 0; + DQA = 0; + DQB = 0; + ZSF3 = 0; + ZSF4 = 0; + + + memset(Vectors, 0, sizeof(Vectors)); + memset(&RGB, 0, sizeof(RGB)); + OTZ = 0; + IR0 = 0; + IR1 = 0; + IR2 = 0; + IR3 = 0; + + memset(XY_FIFO, 0, sizeof(XY_FIFO)); + memset(Z_FIFO, 0, sizeof(Z_FIFO)); + memset(RGB_FIFO, 0, sizeof(RGB_FIFO)); + memset(MAC, 0, sizeof(MAC)); + LZCS = 0; + LZCR = 0; + + Reg23 = 0; +} + +void GTE_WriteCR(unsigned int which, uint32 value) +{ + static const uint32 mask_table[32] = { + /* 0x00 */ + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + + /* 0x08 */ + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + + /* 0x10 */ + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + + /* 0x18 */ + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x0000FFFF, 0xFFFFFFFF, 0x0000FFFF, 0x0000FFFF, 0xFFFFFFFF + }; + + //PSX_WARNING("[GTE] Write CR %d, 0x%08x", which, value); + + value &= mask_table[which]; + + CR[which] = value | (CR[which] & ~mask_table[which]); + + if(which < 24) + { + int we = which >> 3; + which &= 0x7; + + if(which >= 5) + CRVectors.All[we][which - 5] = value; + else + { + #ifdef MSB_FIRST + Matrices.Raw[we][which] = (value << 16) | (value >> 16); + #else + Matrices.Raw[we][which] = value; + #endif + } + return; + } + + switch(which) + { + case 24: + OFX = value; + break; + + case 25: + OFY = value; + break; + + case 26: + H = value; + break; + + case 27: + DQA = value; + break; + + case 28: + DQB = value; + break; + + case 29: + ZSF3 = value; + break; + + case 30: + ZSF4 = value; + break; + + case 31: + CR[31] = (value & 0x7ffff000) | ((value & 0x7f87e000) ? (1 << 31) : 0); + break; + } +} + +uint32 GTE_ReadCR(unsigned int which) +{ + uint32 ret = 0; + + switch(which) + { + default: + ret = CR[which]; + if(which == 4 || which == 12 || which == 20) + ret = (int16)ret; + break; + + case 24: + ret = OFX; + break; + + case 25: + ret = OFY; + break; + + case 26: + ret = (int16)H; + break; + + case 27: + ret = (int16)DQA; + break; + + case 28: + ret = DQB; + break; + + case 29: + ret = (int16)ZSF3; + break; + + case 30: + ret = (int16)ZSF4; + break; + + case 31: + ret = CR[31]; + break; + } + + return(ret); +} + +void GTE_WriteDR(unsigned int which, uint32 value) +{ + switch(which & 0x1F) + { + case 0: + Vectors[0][0] = value; + Vectors[0][1] = value >> 16; + break; + + case 1: + Vectors[0][2] = value; + break; + + case 2: + Vectors[1][0] = value; + Vectors[1][1] = value >> 16; + break; + + case 3: + Vectors[1][2] = value; + break; + + case 4: + Vectors[2][0] = value; + Vectors[2][1] = value >> 16; + break; + + case 5: + Vectors[2][2] = value; + break; + + case 6: + RGB.R = value >> 0; + RGB.G = value >> 8; + RGB.B = value >> 16; + RGB.CD = value >> 24; + break; + + case 7: + OTZ = value; + break; + + case 8: + IR0 = value; + break; + + case 9: + IR1 = value; + break; + + case 10: + IR2 = value; + break; + + case 11: + IR3 = value; + break; + + case 12: + XY_FIFO[0].X = value; + XY_FIFO[0].Y = value >> 16; + break; + + case 13: + XY_FIFO[1].X = value; + XY_FIFO[1].Y = value >> 16; + break; + + case 14: + XY_FIFO[2].X = value; + XY_FIFO[2].Y = value >> 16; + XY_FIFO[3].X = value; + XY_FIFO[3].Y = value >> 16; + break; + + case 15: + XY_FIFO[3].X = value; + XY_FIFO[3].Y = value >> 16; + + XY_FIFO[0] = XY_FIFO[1]; + XY_FIFO[1] = XY_FIFO[2]; + XY_FIFO[2] = XY_FIFO[3]; + break; + + case 16: + Z_FIFO[0] = value; + break; + + case 17: + Z_FIFO[1] = value; + break; + + case 18: + Z_FIFO[2] = value; + break; + + case 19: + Z_FIFO[3] = value; + break; + + case 20: + RGB_FIFO[0].R = value; + RGB_FIFO[0].G = value >> 8; + RGB_FIFO[0].B = value >> 16; + RGB_FIFO[0].CD = value >> 24; + break; + + case 21: + RGB_FIFO[1].R = value; + RGB_FIFO[1].G = value >> 8; + RGB_FIFO[1].B = value >> 16; + RGB_FIFO[1].CD = value >> 24; + break; + + case 22: + RGB_FIFO[2].R = value; + RGB_FIFO[2].G = value >> 8; + RGB_FIFO[2].B = value >> 16; + RGB_FIFO[2].CD = value >> 24; + break; + + case 23: + Reg23 = value; + break; + + case 24: + MAC[0] = value; + break; + + case 25: + MAC[1] = value; + break; + + case 26: + MAC[2] = value; + break; + + case 27: + MAC[3] = value; + break; + + case 28: + IR1 = ((value >> 0) & 0x1F) << 7; + IR2 = ((value >> 5) & 0x1F) << 7; + IR3 = ((value >> 10) & 0x1F) << 7; + break; + + case 29: // Read-only + break; + + case 30: + LZCS = value; + { + uint32 test = value & 0x80000000; + LZCR = 0; + + while((value & 0x80000000) == test && LZCR < 32) + { + LZCR++; + value <<= 1; + } + } + break; + + case 31: // Read-only + break; + } +} + +uint32 GTE_ReadDR(unsigned int which) +{ + uint32 ret = 0; + + switch(which & 0x1F) + { + case 0: + ret = (uint16)Vectors[0][0] | ((uint16)Vectors[0][1] << 16); + break; + + case 1: + ret = (int16)Vectors[0][2]; + break; + + case 2: + ret = (uint16)Vectors[1][0] | ((uint16)Vectors[1][1] << 16); + break; + + case 3: + ret = (int16)Vectors[1][2]; + break; + + case 4: + ret = (uint16)Vectors[2][0] | ((uint16)Vectors[2][1] << 16); + break; + + case 5: + ret = (int16)Vectors[2][2]; + break; + + case 6: + ret = RGB.R | (RGB.G << 8) | (RGB.B << 16) | (RGB.CD << 24); + break; + + case 7: + ret = (uint16)OTZ; + break; + + case 8: + ret = (int16)IR0; + break; + + case 9: + ret = (int16)IR1; + break; + + case 10: + ret = (int16)IR2; + break; + + case 11: + ret = (int16)IR3; + break; + + case 12: + ret = (uint16)XY_FIFO[0].X | ((uint16)XY_FIFO[0].Y << 16); + break; + + case 13: + ret = (uint16)XY_FIFO[1].X | ((uint16)XY_FIFO[1].Y << 16); + break; + + case 14: + ret = (uint16)XY_FIFO[2].X | ((uint16)XY_FIFO[2].Y << 16); + break; + + case 15: + ret = (uint16)XY_FIFO[3].X | ((uint16)XY_FIFO[3].Y << 16); + break; + + case 16: + ret = (uint16)Z_FIFO[0]; + break; + + case 17: + ret = (uint16)Z_FIFO[1]; + break; + + case 18: + ret = (uint16)Z_FIFO[2]; + break; + + case 19: + ret = (uint16)Z_FIFO[3]; + break; + + case 20: + ret = RGB_FIFO[0].R | (RGB_FIFO[0].G << 8) | (RGB_FIFO[0].B << 16) | (RGB_FIFO[0].CD << 24); + break; + + case 21: + ret = RGB_FIFO[1].R | (RGB_FIFO[1].G << 8) | (RGB_FIFO[1].B << 16) | (RGB_FIFO[1].CD << 24); + break; + + case 22: + ret = RGB_FIFO[2].R | (RGB_FIFO[2].G << 8) | (RGB_FIFO[2].B << 16) | (RGB_FIFO[2].CD << 24); + break; + + case 23: + ret = Reg23; + break; + + case 24: + ret = MAC[0]; + break; + + case 25: + ret = MAC[1]; + break; + + case 26: + ret = MAC[2]; + break; + + case 27: + ret = MAC[3]; + break; + + case 28: + case 29: + ret = Sat5(IR1 >> 7) | (Sat5(IR2 >> 7) << 5) | (Sat5(IR3 >> 7) << 10); + break; + + case 30: + ret = LZCS; + break; + + case 31: + ret = LZCR; + break; + } + return(ret); +} + +#define sign_x_to_s64(_bits, _value) (((int64)((uint64)(_value) << (64 - _bits))) >> (64 - _bits)) +static INLINE int64 A_MV(unsigned which, int64 value) +{ + if(value >= (1LL << 43)) + FLAGS |= 1 << (30 - which); + + if(value < -(1LL << 43)) + FLAGS |= 1 << (27 - which); + + return sign_x_to_s64(44, value); +} + +static INLINE int64 F(int64 value) +{ + if(value < -2147483648LL) + { + // flag set here + FLAGS |= 1 << 15; + } + + if(value > 2147483647LL) + { + // flag set here + FLAGS |= 1 << 16; + } + return(value); +} + + +static INLINE int16 Lm_B(unsigned int which, int32 value, int lm) +{ + int32 tmp = lm << 15; + + if(value < (-32768 + tmp)) + { + // set flag here + FLAGS |= 1 << (24 - which); + value = -32768 + tmp; + } + + if(value > 32767) + { + // Set flag here + FLAGS |= 1 << (24 - which); + value = 32767; + } + + return(value); +} + + +static INLINE int16 Lm_B_PTZ(unsigned int which, int32 value, int32 ftv_value, int lm) +{ + int32 tmp = lm << 15; + + if(ftv_value < -32768) + { + FLAGS |= 1 << (24 - which); + } + + if(ftv_value > 32767) + { + FLAGS |= 1 << (24 - which); + } + + if(value < (-32768 + tmp)) + { + value = -32768 + tmp; + } + + if(value > 32767) + { + value = 32767; + } + + return(value); +} + +static INLINE uint8 Lm_C(unsigned int which, int32 value) +{ + if(value & ~0xFF) + { + // Set flag here + FLAGS |= 1 << (21 - which); // Tested with GPF + + if(value < 0) + value = 0; + + if(value > 255) + value = 255; + } + + return(value); +} + +static INLINE int32 Lm_D(int32 value, int unchained) +{ + // Not sure if we should have it as int64, or just chain on to and special case when the F flags are set. + if(!unchained) + { + if(FLAGS & (1 << 15)) + { + FLAGS |= 1 << 18; + return(0); + } + + if(FLAGS & (1 << 16)) + { + FLAGS |= 1 << 18; + return(0xFFFF); + } + } + + if(value < 0) + { + // Set flag here + value = 0; + FLAGS |= 1 << 18; // Tested with AVSZ3 + } + else if(value > 65535) + { + // Set flag here. + value = 65535; + FLAGS |= 1 << 18; // Tested with AVSZ3 + } + + return(value); +} + +static INLINE int32 Lm_G(unsigned int which, int32 value) +{ + if(value < -1024) + { + // Set flag here + value = -1024; + FLAGS |= 1 << (14 - which); + } + + if(value > 1023) + { + // Set flag here. + value = 1023; + FLAGS |= 1 << (14 - which); + } + + return(value); +} + +// limit to 4096, not 4095 +static INLINE int32 Lm_H(int32 value) +{ +#if 0 + if(FLAGS & (1 << 15)) + { + value = 0; + FLAGS |= 1 << 12; + return value; + } + + if(FLAGS & (1 << 16)) + { + value = 4096; + FLAGS |= 1 << 12; + return value; + } +#endif + + if(value < 0) + { + value = 0; + FLAGS |= 1 << 12; + } + + if(value > 4096) + { + value = 4096; + FLAGS |= 1 << 12; + } + + return(value); +} + +static INLINE void MAC_to_RGB_FIFO(void) +{ + RGB_FIFO[0] = RGB_FIFO[1]; + RGB_FIFO[1] = RGB_FIFO[2]; + RGB_FIFO[2].R = Lm_C(0, MAC[1] >> 4); + RGB_FIFO[2].G = Lm_C(1, MAC[2] >> 4); + RGB_FIFO[2].B = Lm_C(2, MAC[3] >> 4); + RGB_FIFO[2].CD = RGB.CD; +} + + +static INLINE void MAC_to_IR(int lm) +{ + IR1 = Lm_B(0, MAC[1], lm); + IR2 = Lm_B(1, MAC[2], lm); + IR3 = Lm_B(2, MAC[3], lm); +} + +static INLINE void MultiplyMatrixByVector(const gtematrix *matrix, const int16 *v, const int32 *crv, uint32 sf, int lm) +{ + unsigned i; + + for(i = 0; i < 3; i++) + { + int64 tmp; + int32 mulr[3]; + + tmp = (uint64)(int64)crv[i] << 12; + + if(matrix == &Matrices.AbbyNormal) + { + if(i == 0) + { + mulr[0] = -((RGB.R << 4) * v[0]); + mulr[1] = (RGB.R << 4) * v[1]; + mulr[2] = IR0 * v[2]; + } + else + { + mulr[0] = (int16)CR[i] * v[0]; + mulr[1] = (int16)CR[i] * v[1]; + mulr[2] = (int16)CR[i] * v[2]; + } + } + else + { + mulr[0] = matrix->MX[i][0] * v[0]; + mulr[1] = matrix->MX[i][1] * v[1]; + mulr[2] = matrix->MX[i][2] * v[2]; + } + + tmp = A_MV(i, tmp + mulr[0]); + if(crv == CRVectors.FC) + { + Lm_B(i, tmp >> sf, FALSE); + tmp = 0; + } + + tmp = A_MV(i, tmp + mulr[1]); + tmp = A_MV(i, tmp + mulr[2]); + + MAC[1 + i] = tmp >> sf; + } + + + MAC_to_IR(lm); +} + + +static INLINE void MultiplyMatrixByVector_PT(const gtematrix *matrix, const int16 *v, const int32 *crv, uint32 sf, int lm) +{ + int64 tmp[3]; + unsigned i; + + for(i = 0; i < 3; i++) + { + int32 mulr[3]; + + tmp[i] = (uint64)(int64)crv[i] << 12; + + mulr[0] = matrix->MX[i][0] * v[0]; + mulr[1] = matrix->MX[i][1] * v[1]; + mulr[2] = matrix->MX[i][2] * v[2]; + + tmp[i] = A_MV(i, tmp[i] + mulr[0]); + tmp[i] = A_MV(i, tmp[i] + mulr[1]); + tmp[i] = A_MV(i, tmp[i] + mulr[2]); + + MAC[1 + i] = tmp[i] >> sf; + } + + IR1 = Lm_B(0, MAC[1], lm); + IR2 = Lm_B(1, MAC[2], lm); + //printf("FTV: %08x %08x\n", crv[2], (uint32)(tmp[2] >> 12)); + IR3 = Lm_B_PTZ(2, MAC[3], tmp[2] >> 12, lm); + + Z_FIFO[0] = Z_FIFO[1]; + Z_FIFO[1] = Z_FIFO[2]; + Z_FIFO[2] = Z_FIFO[3]; + Z_FIFO[3] = Lm_D(tmp[2] >> 12, TRUE); +} + + +#define DECODE_FIELDS \ + const uint32 sf MDFN_NOWARN_UNUSED = (instr & (1 << 19)) ? 12 : 0; \ + const uint32 mx MDFN_NOWARN_UNUSED = (instr >> 17) & 0x3; \ + const uint32 v_i = (instr >> 15) & 0x3; \ + const int32* cv MDFN_NOWARN_UNUSED = CRVectors.All[(instr >> 13) & 0x3]; \ + const int lm MDFN_NOWARN_UNUSED = (instr >> 10) & 1; \ + int16 v[3] MDFN_NOWARN_UNUSED; \ + if(v_i == 3) \ + { \ + v[0] = IR1; \ + v[1] = IR2; \ + v[2] = IR3; \ + } \ + else \ + { \ + v[0] = Vectors[v_i][0]; \ + v[1] = Vectors[v_i][1]; \ + v[2] = Vectors[v_i][2]; \ + } + + +static int32 SQR(uint32 instr) +{ + DECODE_FIELDS; + + MAC[1] = ((IR1 * IR1) >> sf); + MAC[2] = ((IR2 * IR2) >> sf); + MAC[3] = ((IR3 * IR3) >> sf); + + MAC_to_IR(lm); + + return(5); +} + + +static int32 MVMVA(uint32 instr) +{ + DECODE_FIELDS; + + MultiplyMatrixByVector(&Matrices.All[mx], v, cv, sf, lm); + + return(8); +} + +static INLINE unsigned CountLeadingZeroU16(uint16 val) +{ + unsigned ret = 0; + + while(!(val & 0x8000) && ret < 16) + { + val <<= 1; + ret++; + } + + return ret; +} + +static INLINE uint32 Divide(uint32 dividend, uint32 divisor) +{ + //if((Z_FIFO[3] * 2) > H) + if((divisor * 2) > dividend) + { + unsigned shift_bias = CountLeadingZeroU16(divisor); + + dividend <<= shift_bias; + divisor <<= shift_bias; + + return ((int64)dividend * CalcRecip(divisor | 0x8000) + 32768) >> 16; + } + else + { + FLAGS |= 1 << 17; + return 0x1FFFF; + } +} + +static INLINE void TransformXY(int64 h_div_sz) +{ + MAC[0] = F((int64)OFX + IR1 * h_div_sz) >> 16; + XY_FIFO[3].X = Lm_G(0, MAC[0]); + + MAC[0] = F((int64)OFY + IR2 * h_div_sz) >> 16; + XY_FIFO[3].Y = Lm_G(1, MAC[0]); + + XY_FIFO[0] = XY_FIFO[1]; + XY_FIFO[1] = XY_FIFO[2]; + XY_FIFO[2] = XY_FIFO[3]; +} + +static INLINE void TransformDQ(int64 h_div_sz) +{ + MAC[0] = F((int64)DQB + DQA * h_div_sz); + IR0 = Lm_H(((int64)DQB + DQA * h_div_sz) >> 12); +} + +static int32 RTPS(uint32 instr) +{ + DECODE_FIELDS; + int64 h_div_sz; + + MultiplyMatrixByVector_PT(&Matrices.Rot, Vectors[0], CRVectors.T, sf, lm); + h_div_sz = Divide(H, Z_FIFO[3]); + + TransformXY(h_div_sz); + TransformDQ(h_div_sz); + + return(15); +} + +static int32 RTPT(uint32 instr) +{ + DECODE_FIELDS; + int i; + + for(i = 0; i < 3; i++) + { + int64 h_div_sz; + + MultiplyMatrixByVector_PT(&Matrices.Rot, Vectors[i], CRVectors.T, sf, lm); + h_div_sz = Divide(H, Z_FIFO[3]); + + TransformXY(h_div_sz); + + if(i == 2) + TransformDQ(h_div_sz); + } + + return(23); +} + +static INLINE void NormColor(uint32 sf, int lm, uint32 v) +{ + int16 tmp_vector[3]; + + MultiplyMatrixByVector(&Matrices.Light, Vectors[v], CRVectors.Null, sf, lm); + + tmp_vector[0] = IR1; tmp_vector[1] = IR2; tmp_vector[2] = IR3; + MultiplyMatrixByVector(&Matrices.Color, tmp_vector, CRVectors.B, sf, lm); + + MAC_to_RGB_FIFO(); +} + +static int32 NCS(uint32 instr) +{ + DECODE_FIELDS; + + NormColor(sf, lm, 0); + + return(14); +} + +static int32 NCT(uint32 instr) +{ + DECODE_FIELDS; + int i; + + for(i = 0; i < 3; i++) + NormColor(sf, lm, i); + + return(30); +} + +static INLINE void NormColorColor(uint32 v, uint32 sf, int lm) +{ + int16 tmp_vector[3]; + + MultiplyMatrixByVector(&Matrices.Light, Vectors[v], CRVectors.Null, sf, lm); + + tmp_vector[0] = IR1; tmp_vector[1] = IR2; tmp_vector[2] = IR3; + MultiplyMatrixByVector(&Matrices.Color, tmp_vector, CRVectors.B, sf, lm); + + MAC[1] = ((RGB.R << 4) * IR1) >> sf; + MAC[2] = ((RGB.G << 4) * IR2) >> sf; + MAC[3] = ((RGB.B << 4) * IR3) >> sf; + + MAC_to_IR(lm); + + MAC_to_RGB_FIFO(); +} + +static int32 NCCS(uint32 instr) +{ + DECODE_FIELDS; + + NormColorColor(0, sf, lm); + return(17); +} + + +static int32 NCCT(uint32 instr) +{ + int i; + DECODE_FIELDS; + + for(i = 0; i < 3; i++) + NormColorColor(i, sf, lm); + + return(39); +} + +static INLINE void DepthCue(int mult_IR123, int RGB_from_FIFO, uint32 sf, int lm) +{ + int32 RGB_temp[3]; + int32 IR_temp[3] = { IR1, IR2, IR3 }; + int i; + + //assert(sf); + + if(RGB_from_FIFO) + { + RGB_temp[0] = RGB_FIFO[0].R << 4; + RGB_temp[1] = RGB_FIFO[0].G << 4; + RGB_temp[2] = RGB_FIFO[0].B << 4; + } + else + { + RGB_temp[0] = RGB.R << 4; + RGB_temp[1] = RGB.G << 4; + RGB_temp[2] = RGB.B << 4; + } + + if(mult_IR123) + { + for(i = 0; i < 3; i++) + { + MAC[1 + i] = A_MV(i, ((int64)((uint64)(int64)CRVectors.FC[i] << 12) - RGB_temp[i] * IR_temp[i])) >> sf; + MAC[1 + i] = A_MV(i, (RGB_temp[i] * IR_temp[i] + IR0 * Lm_B(i, MAC[1 + i], FALSE))) >> sf; + } + } + else + { + for(i = 0; i < 3; i++) + { + MAC[1 + i] = A_MV(i, ((int64)((uint64)(int64)CRVectors.FC[i] << 12) - (int32)((uint32)RGB_temp[i] << 12))) >> sf; + MAC[1 + i] = A_MV(i, ((int64)((uint64)(int64)RGB_temp[i] << 12) + IR0 * Lm_B(i, MAC[1 + i], FALSE))) >> sf; + } + } + + MAC_to_IR(lm); + + MAC_to_RGB_FIFO(); +} + + +static int32 DCPL(uint32 instr) +{ + DECODE_FIELDS; + + DepthCue(TRUE, FALSE, sf, lm); + + return(8); +} + + +static int32 DPCS(uint32 instr) +{ + DECODE_FIELDS; + + DepthCue(FALSE, FALSE, sf, lm); + + return(8); +} + +static int32 DPCT(uint32 instr) +{ + int i; + DECODE_FIELDS; + + for(i = 0; i < 3; i++) + { + DepthCue(FALSE, TRUE, sf, lm); + } + + return(17); +} + +static int32 INTPL(uint32 instr) +{ + DECODE_FIELDS; + + MAC[1] = A_MV(0, ((int64)((uint64)(int64)CRVectors.FC[0] << 12) - (int32)((uint32)(int32)IR1 << 12))) >> sf; + MAC[2] = A_MV(1, ((int64)((uint64)(int64)CRVectors.FC[1] << 12) - (int32)((uint32)(int32)IR2 << 12))) >> sf; + MAC[3] = A_MV(2, ((int64)((uint64)(int64)CRVectors.FC[2] << 12) - (int32)((uint32)(int32)IR3 << 12))) >> sf; + + MAC[1] = A_MV(0, ((int64)((uint64)(int64)IR1 << 12) + IR0 * Lm_B(0, MAC[1], FALSE)) >> sf); + MAC[2] = A_MV(1, ((int64)((uint64)(int64)IR2 << 12) + IR0 * Lm_B(1, MAC[2], FALSE)) >> sf); + MAC[3] = A_MV(2, ((int64)((uint64)(int64)IR3 << 12) + IR0 * Lm_B(2, MAC[3], FALSE)) >> sf); + + MAC_to_IR(lm); + + MAC_to_RGB_FIFO(); + + return(8); +} + + +static INLINE void NormColorDepthCue(uint32 v, uint32 sf, int lm) +{ + int16 tmp_vector[3]; + + MultiplyMatrixByVector(&Matrices.Light, Vectors[v], CRVectors.Null, sf, lm); + + tmp_vector[0] = IR1; tmp_vector[1] = IR2; tmp_vector[2] = IR3; + MultiplyMatrixByVector(&Matrices.Color, tmp_vector, CRVectors.B, sf, lm); + + DepthCue(TRUE, FALSE, sf, lm); +} + +static int32 NCDS(uint32 instr) +{ + DECODE_FIELDS; + + NormColorDepthCue(0, sf, lm); + + return(19); +} + +static int32 NCDT(uint32 instr) +{ + int i; + DECODE_FIELDS; + + for(i = 0; i < 3; i++) + { + NormColorDepthCue(i, sf, lm); + } + + return(44); +} + +static int32 CC(uint32 instr) +{ + DECODE_FIELDS; + int16 tmp_vector[3]; + + tmp_vector[0] = IR1; tmp_vector[1] = IR2; tmp_vector[2] = IR3; + MultiplyMatrixByVector(&Matrices.Color, tmp_vector, CRVectors.B, sf, lm); + + MAC[1] = ((RGB.R << 4) * IR1) >> sf; + MAC[2] = ((RGB.G << 4) * IR2) >> sf; + MAC[3] = ((RGB.B << 4) * IR3) >> sf; + + MAC_to_IR(lm); + + MAC_to_RGB_FIFO(); + + return(11); +} + +static int32 CDP(uint32 instr) +{ + DECODE_FIELDS; + int16 tmp_vector[3]; + + tmp_vector[0] = IR1; tmp_vector[1] = IR2; tmp_vector[2] = IR3; + MultiplyMatrixByVector(&Matrices.Color, tmp_vector, CRVectors.B, sf, lm); + + DepthCue(TRUE, FALSE, sf, lm); + + return(13); +} + +static int32 NCLIP(uint32 instr) +{ + DECODE_FIELDS; + + MAC[0] = F( (int64)(XY_FIFO[0].X * (XY_FIFO[1].Y - XY_FIFO[2].Y)) + (XY_FIFO[1].X * (XY_FIFO[2].Y - XY_FIFO[0].Y)) + (XY_FIFO[2].X * (XY_FIFO[0].Y - XY_FIFO[1].Y)) + ); + + return(8); +} + +static int32 AVSZ3(uint32 instr) +{ + DECODE_FIELDS; + + MAC[0] = F(((int64)ZSF3 * (Z_FIFO[1] + Z_FIFO[2] + Z_FIFO[3]))); + + OTZ = Lm_D(MAC[0] >> 12, FALSE); + + return(5); +} + +static int32 AVSZ4(uint32 instr) +{ + DECODE_FIELDS; + + MAC[0] = F(((int64)ZSF4 * (Z_FIFO[0] + Z_FIFO[1] + Z_FIFO[2] + Z_FIFO[3]))); + + OTZ = Lm_D(MAC[0] >> 12, FALSE); + + return(5); +} + + +// -32768 * -32768 - 32767 * -32768 = 2147450880 +// (2 ^ 31) - 1 = 2147483647 +static int32 OP(uint32 instr) +{ + DECODE_FIELDS; + + MAC[1] = ((Matrices.Rot.MX[1][1] * IR3) - (Matrices.Rot.MX[2][2] * IR2)) >> sf; + MAC[2] = ((Matrices.Rot.MX[2][2] * IR1) - (Matrices.Rot.MX[0][0] * IR3)) >> sf; + MAC[3] = ((Matrices.Rot.MX[0][0] * IR2) - (Matrices.Rot.MX[1][1] * IR1)) >> sf; + + MAC_to_IR(lm); + + return(6); +} + +static int32 GPF(uint32 instr) +{ + DECODE_FIELDS; + + MAC[1] = (IR0 * IR1) >> sf; + MAC[2] = (IR0 * IR2) >> sf; + MAC[3] = (IR0 * IR3) >> sf; + + MAC_to_IR(lm); + + MAC_to_RGB_FIFO(); + + return(5); +} + +static int32 GPL(uint32 instr) +{ + DECODE_FIELDS; + + MAC[1] = A_MV(0, (int64)((uint64)(int64)MAC[1] << sf) + (IR0 * IR1)) >> sf; + MAC[2] = A_MV(1, (int64)((uint64)(int64)MAC[2] << sf) + (IR0 * IR2)) >> sf; + MAC[3] = A_MV(2, (int64)((uint64)(int64)MAC[3] << sf) + (IR0 * IR3)) >> sf; + + MAC_to_IR(lm); + + MAC_to_RGB_FIFO(); + + return(5); +} + +/* + +--------------------------------------------------------------------------------------------- +| 24 23 22 21 20 | 19 | 18 17 | 16 15 | 14 13 | 12 11 | 10 | 9 8 7 6 | 5 4 3 2 1 0 | +|-------------------------------------------------------------------------------------------| +| (unused) | sf | mx | v | cv |(unused)| lm | (unused) | opcode | +--------------------------------------------------------------------------------------------- + (unused) = unused, ignored + + sf = shift 12 + + mx = matrix selection + + v = source vector + + cv = add vector(translation/back/far color(bugged)/none) + + (unused) = unused, ignored + + lm = limit negative results to 0 + + (unused) = unused, ignored + + opcode = operation code +*/ + +int32 GTE_Instruction(uint32 instr) +{ + const unsigned code = instr & 0x3F; + int32 ret = 1; + + FLAGS = 0; + + switch(code) + { + default: +#ifndef PSXDEV_GTE_TESTING + PSX_WARNING("[GTE] Unknown instruction code: 0x%02x", code); +#endif + break; + + case 0x00: // alternate? + case 0x01: + ret = RTPS(instr); + break; + +/* + case 0x02: // UNSTABLE? + break; + + case 0x03: // UNSTABLE? + break; + + case 0x04: // Probably simple with v,cv,sf,mx,lm ignored. Same calculation as 0x3B? + break; + + case 0x05: // UNSTABLE? + break; +*/ + + case 0x06: + ret = NCLIP(instr); + break; + +/* + case 0x07: // UNSTABLE? + break; + + case 0x08: // UNSTABLE? + break; + + case 0x09: // UNSTABLE? + break; + + case 0x0A: // UNSTABLE? + break; + + case 0x0B: // UNSTABLE? + break; + +*/ + + case 0x0C: + ret = OP(instr); + break; + +/* + case 0x0D: // UNSTABLE? + break; + + case 0x0E: // UNSTABLE? + break; + + case 0x0F: // UNSTABLE? + break; +*/ + + case 0x10: + ret = DPCS(instr); + break; + + case 0x11: + ret = INTPL(instr); + break; + + case 0x12: + ret = MVMVA(instr); + break; + + case 0x13: + ret = NCDS(instr); + break; + + case 0x14: + ret = CDP(instr); + break; + + +/* + case 0x15: // does one push on RGB FIFO, what else... + break; +*/ + + case 0x16: + ret = NCDT(instr); + break; + +/* + case 0x17: // PARTIALLY UNSTABLE(depending on sf or v or cv or mx or lm???), similar behavior under some conditions to 0x16? + break; + + case 0x18: + break; + + case 0x19: + break; +*/ + + case 0x1A: // Alternate for 0x29? + ret = DCPL(instr); + break; + + case 0x1B: + ret = NCCS(instr); + break; + + case 0x1C: + ret = CC(instr); + break; + +/* + case 0x1D: + break; +*/ + + case 0x1E: + ret = NCS(instr); + break; + +/* + case 0x1F: + break; +*/ + + case 0x20: + ret = NCT(instr); + break; +/* + case 0x21: + break; + + case 0x22: // UNSTABLE? + break; + + case 0x23: + break; + + case 0x24: + break; + + case 0x25: + break; + + case 0x26: + break; + + case 0x27: + break; +*/ + + case 0x28: + ret = SQR(instr); + break; + + case 0x29: + ret = DCPL(instr); + break; + + case 0x2A: + ret = DPCT(instr); + break; + +/* + case 0x2B: + break; + + case 0x2C: + break; +*/ + + case 0x2D: + ret = AVSZ3(instr); + break; + + case 0x2E: + ret = AVSZ4(instr); + break; + +/* + case 0x2F: // UNSTABLE? + break; +*/ + + case 0x30: + ret = RTPT(instr); + break; + +/* + case 0x31: // UNSTABLE? + break; + + case 0x32: // UNSTABLE? + break; + + case 0x33: // UNSTABLE? + break; + + case 0x34: // UNSTABLE? + break; + + case 0x35: // UNSTABLE? + break; + + case 0x36: // UNSTABLE? + break; + + case 0x37: // UNSTABLE? + break; + + case 0x38: + break; + + case 0x39: // Probably simple with v,cv,sf,mx,lm ignored. + break; + + case 0x3A: // Probably simple with v,cv,sf,mx,lm ignored. + break; + + case 0x3B: // Probably simple with v,cv,sf,mx,lm ignored. Same calculation as 0x04? + break; + + case 0x3C: // UNSTABLE? + break; +*/ + + case 0x3D: + ret = GPF(instr); + break; + + case 0x3E: + ret = GPL(instr); + break; + + case 0x3F: + ret = NCCT(instr); + break; + } + + if(FLAGS & 0x7f87e000) + FLAGS |= 1 << 31; + + CR[31] = FLAGS; + + return(ret - 1); +} + +void GTE_SyncState(bool isReader, EW::NewState *ns) +{ + NSS(CR); + NSS(FLAGS); + + NSS(Matrices); + + NSS(CRVectors); + + NSS(OFX); + NSS(OFY); + NSS(H); + NSS(DQA); + NSS(DQB); + + NSS(ZSF3); + NSS(ZSF4); + NSS(Vectors); + + NSS(RGB); + NSS(OTZ); + NSS(IR); + + NSS(XY_FIFO); + + NSS(Z_FIFO); + + NSS(RGB_FIFO); + + NSS(MAC); + + NSS(LZCS); + NSS(LZCR); + NSS(Reg23); +} + +#ifndef PSXDEV_GTE_TESTING +} +#endif diff --git a/psx/octoshock/psx/gte.h b/psx/octoshock/psx/gte.h index 7e5aa0869b..44eedbfe7e 100644 --- a/psx/octoshock/psx/gte.h +++ b/psx/octoshock/psx/gte.h @@ -1,12 +1,10 @@ #pragma once -#include "state.h" - namespace MDFN_IEN_PSX { -void GTE_Power(void); -int GTE_StateAction(StateMem *sm, int load, int data_only); +void GTE_Init(void) MDFN_COLD; +void GTE_Power(void) MDFN_COLD; int32 GTE_Instruction(uint32 instr); diff --git a/psx/octoshock/psx/gte_divrecip.inc b/psx/octoshock/psx/gte_divrecip.inc deleted file mode 100644 index 25e7b1e774..0000000000 --- a/psx/octoshock/psx/gte_divrecip.inc +++ /dev/null @@ -1,32768 +0,0 @@ -0x00020000, -0x0001fffc, -0x0001fff8, -0x0001fff4, -0x0001fff0, -0x0001ffec, -0x0001ffe8, -0x0001ffe4, -0x0001ffe0, -0x0001ffdc, -0x0001ffd8, -0x0001ffd4, -0x0001ffd0, -0x0001ffcc, -0x0001ffc8, -0x0001ffc4, -0x0001ffc0, -0x0001ffbc, -0x0001ffb8, -0x0001ffb4, -0x0001ffb0, -0x0001ffac, -0x0001ffa8, -0x0001ffa4, -0x0001ffa0, -0x0001ff9c, -0x0001ff98, -0x0001ff94, -0x0001ff90, -0x0001ff8c, -0x0001ff88, -0x0001ff84, -0x0001ff80, -0x0001ff7c, -0x0001ff78, -0x0001ff74, -0x0001ff70, -0x0001ff6c, -0x0001ff68, -0x0001ff64, -0x0001ff60, -0x0001ff5c, -0x0001ff58, -0x0001ff54, -0x0001ff50, -0x0001ff4c, -0x0001ff48, -0x0001ff44, -0x0001ff40, -0x0001ff3c, -0x0001ff38, -0x0001ff34, -0x0001ff30, -0x0001ff2c, -0x0001ff28, -0x0001ff24, -0x0001ff20, -0x0001ff1c, -0x0001ff18, -0x0001ff14, -0x0001ff10, -0x0001ff0c, -0x0001ff08, -0x0001ff04, -0x0001ff01, -0x0001fefd, -0x0001fef9, -0x0001fef5, -0x0001fef1, -0x0001feed, -0x0001fee9, -0x0001fee5, -0x0001fee1, -0x0001fedd, -0x0001fed9, -0x0001fed5, -0x0001fed1, -0x0001fecd, -0x0001fec9, -0x0001fec5, -0x0001fec1, -0x0001febd, -0x0001feb9, -0x0001feb5, -0x0001feb1, -0x0001fead, -0x0001fea9, -0x0001fea5, -0x0001fea1, -0x0001fe9d, -0x0001fe99, -0x0001fe95, -0x0001fe91, -0x0001fe8d, -0x0001fe89, -0x0001fe85, -0x0001fe81, -0x0001fe7e, -0x0001fe7a, -0x0001fe76, -0x0001fe72, -0x0001fe6e, -0x0001fe6a, -0x0001fe66, -0x0001fe62, -0x0001fe5e, -0x0001fe5a, -0x0001fe56, -0x0001fe52, -0x0001fe4e, -0x0001fe4a, -0x0001fe46, -0x0001fe42, -0x0001fe3e, -0x0001fe3a, -0x0001fe36, -0x0001fe32, -0x0001fe2e, -0x0001fe2a, -0x0001fe26, -0x0001fe22, -0x0001fe1e, -0x0001fe1a, -0x0001fe16, -0x0001fe12, -0x0001fe0e, -0x0001fe0a, -0x0001fe06, -0x0001fe02, -0x0001fdfe, -0x0001fdfa, -0x0001fdf6, -0x0001fdf2, -0x0001fdee, -0x0001fdea, -0x0001fde6, -0x0001fde2, -0x0001fdde, -0x0001fdda, -0x0001fdd6, -0x0001fdd2, -0x0001fdce, -0x0001fdca, -0x0001fdc6, -0x0001fdc2, -0x0001fdbe, -0x0001fdba, -0x0001fdb6, -0x0001fdb2, -0x0001fdae, -0x0001fdaa, -0x0001fda6, -0x0001fda2, -0x0001fd9e, -0x0001fd9a, -0x0001fd96, -0x0001fd92, -0x0001fd8e, -0x0001fd8a, -0x0001fd86, -0x0001fd82, -0x0001fd7f, -0x0001fd7b, -0x0001fd77, -0x0001fd73, -0x0001fd6f, -0x0001fd6b, -0x0001fd67, -0x0001fd63, -0x0001fd5f, -0x0001fd5b, -0x0001fd57, -0x0001fd53, -0x0001fd4f, -0x0001fd4b, -0x0001fd47, -0x0001fd43, -0x0001fd3f, -0x0001fd3b, -0x0001fd37, -0x0001fd33, -0x0001fd2f, -0x0001fd2b, -0x0001fd27, -0x0001fd23, -0x0001fd1f, -0x0001fd1b, -0x0001fd17, -0x0001fd13, -0x0001fd0f, -0x0001fd0b, -0x0001fd07, -0x0001fd04, -0x0001fd00, -0x0001fcfc, -0x0001fcf8, -0x0001fcf4, -0x0001fcf0, -0x0001fcec, -0x0001fce8, -0x0001fce4, -0x0001fce0, -0x0001fcdc, -0x0001fcd8, -0x0001fcd4, -0x0001fcd0, -0x0001fccc, -0x0001fcc8, -0x0001fcc4, -0x0001fcc0, -0x0001fcbd, -0x0001fcb9, -0x0001fcb5, -0x0001fcb1, -0x0001fcad, -0x0001fca9, -0x0001fca5, -0x0001fca1, -0x0001fc9d, -0x0001fc99, -0x0001fc95, -0x0001fc91, -0x0001fc8d, -0x0001fc89, -0x0001fc87, -0x0001fc83, -0x0001fc7f, -0x0001fc7b, -0x0001fc77, -0x0001fc73, -0x0001fc6f, -0x0001fc6b, -0x0001fc67, -0x0001fc63, -0x0001fc5f, -0x0001fc5b, -0x0001fc57, -0x0001fc53, -0x0001fc4f, -0x0001fc4b, -0x0001fc47, -0x0001fc43, -0x0001fc40, -0x0001fc3c, -0x0001fc38, -0x0001fc34, -0x0001fc30, -0x0001fc2c, -0x0001fc28, -0x0001fc24, -0x0001fc20, -0x0001fc1c, -0x0001fc18, -0x0001fc14, -0x0001fc10, -0x0001fc0c, -0x0001fc08, -0x0001fc04, -0x0001fc00, -0x0001fbfc, -0x0001fbf8, -0x0001fbf4, -0x0001fbf0, -0x0001fbec, -0x0001fbe8, -0x0001fbe4, -0x0001fbe0, -0x0001fbdc, -0x0001fbd8, -0x0001fbd4, -0x0001fbd0, -0x0001fbcc, -0x0001fbc8, -0x0001fbc4, -0x0001fbc1, -0x0001fbbd, -0x0001fbb9, -0x0001fbb5, -0x0001fbb1, -0x0001fbad, -0x0001fba9, -0x0001fba5, -0x0001fba1, -0x0001fb9d, -0x0001fb99, -0x0001fb95, -0x0001fb91, -0x0001fb8d, -0x0001fb8b, -0x0001fb87, -0x0001fb83, -0x0001fb7f, -0x0001fb7b, -0x0001fb77, -0x0001fb73, -0x0001fb6f, -0x0001fb6b, -0x0001fb67, -0x0001fb63, -0x0001fb5f, -0x0001fb5b, -0x0001fb57, -0x0001fb53, -0x0001fb4f, -0x0001fb4b, -0x0001fb47, -0x0001fb43, -0x0001fb40, -0x0001fb3c, -0x0001fb38, -0x0001fb34, -0x0001fb30, -0x0001fb2c, -0x0001fb28, -0x0001fb24, -0x0001fb20, -0x0001fb1c, -0x0001fb18, -0x0001fb14, -0x0001fb10, -0x0001fb0d, -0x0001fb09, -0x0001fb05, -0x0001fb01, -0x0001fafd, -0x0001faf9, -0x0001faf5, -0x0001faf1, -0x0001faed, -0x0001fae9, -0x0001fae5, -0x0001fae1, -0x0001fadd, -0x0001fad9, -0x0001fad5, -0x0001fad2, -0x0001face, -0x0001faca, -0x0001fac6, -0x0001fac2, -0x0001fabe, -0x0001faba, -0x0001fab6, -0x0001fab2, -0x0001faae, -0x0001faaa, -0x0001faa6, -0x0001faa2, -0x0001fa9e, -0x0001fa9a, -0x0001fa96, -0x0001fa92, -0x0001fa8e, -0x0001fa8a, -0x0001fa86, -0x0001fa82, -0x0001fa7f, -0x0001fa7b, -0x0001fa77, -0x0001fa73, -0x0001fa6f, -0x0001fa6b, -0x0001fa67, -0x0001fa65, -0x0001fa61, -0x0001fa5d, -0x0001fa59, -0x0001fa55, -0x0001fa51, -0x0001fa4d, -0x0001fa49, -0x0001fa45, -0x0001fa41, -0x0001fa3d, -0x0001fa39, -0x0001fa35, -0x0001fa31, -0x0001fa2d, -0x0001fa2a, -0x0001fa26, -0x0001fa22, -0x0001fa1e, -0x0001fa1a, -0x0001fa16, -0x0001fa12, -0x0001fa0e, -0x0001fa0a, -0x0001fa06, -0x0001fa02, -0x0001f9fe, -0x0001f9fa, -0x0001f9f6, -0x0001f9f2, -0x0001f9ee, -0x0001f9ea, -0x0001f9e6, -0x0001f9e2, -0x0001f9de, -0x0001f9da, -0x0001f9d6, -0x0001f9d3, -0x0001f9cf, -0x0001f9cb, -0x0001f9c7, -0x0001f9c3, -0x0001f9bf, -0x0001f9bd, -0x0001f9b9, -0x0001f9b5, -0x0001f9b1, -0x0001f9ad, -0x0001f9a9, -0x0001f9a5, -0x0001f9a1, -0x0001f99d, -0x0001f999, -0x0001f995, -0x0001f991, -0x0001f98d, -0x0001f989, -0x0001f985, -0x0001f982, -0x0001f97e, -0x0001f97a, -0x0001f976, -0x0001f972, -0x0001f96e, -0x0001f96a, -0x0001f966, -0x0001f962, -0x0001f95e, -0x0001f95a, -0x0001f956, -0x0001f952, -0x0001f94e, -0x0001f94a, -0x0001f946, -0x0001f942, -0x0001f93e, -0x0001f93a, -0x0001f936, -0x0001f932, -0x0001f92e, -0x0001f92b, -0x0001f927, -0x0001f923, -0x0001f91f, -0x0001f91b, -0x0001f918, -0x0001f914, -0x0001f910, -0x0001f90c, -0x0001f908, -0x0001f904, -0x0001f900, -0x0001f8fc, -0x0001f8f8, -0x0001f8f4, -0x0001f8f0, -0x0001f8ec, -0x0001f8e8, -0x0001f8e4, -0x0001f8e0, -0x0001f8dd, -0x0001f8db, -0x0001f8d7, -0x0001f8d3, -0x0001f8cf, -0x0001f8cb, -0x0001f8c7, -0x0001f8c3, -0x0001f8bf, -0x0001f8bb, -0x0001f8b7, -0x0001f8b3, -0x0001f8af, -0x0001f8ab, -0x0001f8a7, -0x0001f8a3, -0x0001f89f, -0x0001f89c, -0x0001f898, -0x0001f894, -0x0001f890, -0x0001f88c, -0x0001f888, -0x0001f884, -0x0001f880, -0x0001f87c, -0x0001f878, -0x0001f874, -0x0001f870, -0x0001f86c, -0x0001f868, -0x0001f864, -0x0001f860, -0x0001f85f, -0x0001f85b, -0x0001f857, -0x0001f853, -0x0001f84f, -0x0001f84b, -0x0001f847, -0x0001f843, -0x0001f83f, -0x0001f83b, -0x0001f837, -0x0001f833, -0x0001f82f, -0x0001f82b, -0x0001f827, -0x0001f823, -0x0001f820, -0x0001f81c, -0x0001f818, -0x0001f814, -0x0001f810, -0x0001f80c, -0x0001f808, -0x0001f804, -0x0001f800, -0x0001f7fc, -0x0001f7f8, -0x0001f7f4, -0x0001f7f0, -0x0001f7ec, -0x0001f7e8, -0x0001f7e4, -0x0001f7e2, -0x0001f7df, -0x0001f7db, -0x0001f7d7, -0x0001f7d3, -0x0001f7cf, -0x0001f7cb, -0x0001f7c7, -0x0001f7c3, -0x0001f7bf, -0x0001f7bb, -0x0001f7b7, -0x0001f7b3, -0x0001f7af, -0x0001f7ab, -0x0001f7a7, -0x0001f7a3, -0x0001f7a0, -0x0001f79c, -0x0001f798, -0x0001f794, -0x0001f790, -0x0001f78c, -0x0001f788, -0x0001f784, -0x0001f780, -0x0001f77c, -0x0001f778, -0x0001f774, -0x0001f770, -0x0001f76c, -0x0001f768, -0x0001f766, -0x0001f763, -0x0001f75f, -0x0001f75b, -0x0001f757, -0x0001f753, -0x0001f74f, -0x0001f74b, -0x0001f747, -0x0001f743, -0x0001f73f, -0x0001f73b, -0x0001f737, -0x0001f733, -0x0001f72f, -0x0001f72b, -0x0001f728, -0x0001f724, -0x0001f720, -0x0001f71c, -0x0001f718, -0x0001f714, -0x0001f711, -0x0001f70d, -0x0001f709, -0x0001f705, -0x0001f701, -0x0001f6fd, -0x0001f6f9, -0x0001f6f5, -0x0001f6f1, -0x0001f6ed, -0x0001f6e9, -0x0001f6e5, -0x0001f6e2, -0x0001f6de, -0x0001f6da, -0x0001f6d6, -0x0001f6d2, -0x0001f6ce, -0x0001f6ca, -0x0001f6c6, -0x0001f6c4, -0x0001f6c0, -0x0001f6bc, -0x0001f6b8, -0x0001f6b4, -0x0001f6b0, -0x0001f6ad, -0x0001f6a9, -0x0001f6a5, -0x0001f6a1, -0x0001f69d, -0x0001f699, -0x0001f695, -0x0001f691, -0x0001f68d, -0x0001f689, -0x0001f685, -0x0001f681, -0x0001f67e, -0x0001f67a, -0x0001f676, -0x0001f672, -0x0001f66e, -0x0001f66a, -0x0001f666, -0x0001f662, -0x0001f660, -0x0001f65c, -0x0001f658, -0x0001f654, -0x0001f650, -0x0001f64c, -0x0001f649, -0x0001f645, -0x0001f641, -0x0001f63d, -0x0001f639, -0x0001f635, -0x0001f631, -0x0001f62d, -0x0001f629, -0x0001f625, -0x0001f621, -0x0001f61d, -0x0001f619, -0x0001f616, -0x0001f612, -0x0001f60e, -0x0001f60a, -0x0001f606, -0x0001f602, -0x0001f600, -0x0001f5fc, -0x0001f5f8, -0x0001f5f4, -0x0001f5f0, -0x0001f5ec, -0x0001f5e8, -0x0001f5e5, -0x0001f5e1, -0x0001f5dd, -0x0001f5d9, -0x0001f5d5, -0x0001f5d1, -0x0001f5cd, -0x0001f5c9, -0x0001f5c5, -0x0001f5c1, -0x0001f5bd, -0x0001f5b9, -0x0001f5b5, -0x0001f5b2, -0x0001f5ae, -0x0001f5aa, -0x0001f5a6, -0x0001f5a2, -0x0001f59e, -0x0001f59c, -0x0001f598, -0x0001f594, -0x0001f590, -0x0001f58c, -0x0001f588, -0x0001f584, -0x0001f581, -0x0001f57d, -0x0001f579, -0x0001f575, -0x0001f571, -0x0001f56d, -0x0001f569, -0x0001f565, -0x0001f561, -0x0001f55d, -0x0001f559, -0x0001f555, -0x0001f551, -0x0001f54e, -0x0001f54a, -0x0001f546, -0x0001f542, -0x0001f53e, -0x0001f53a, -0x0001f537, -0x0001f533, -0x0001f52f, -0x0001f52b, -0x0001f527, -0x0001f523, -0x0001f51f, -0x0001f51b, -0x0001f517, -0x0001f513, -0x0001f511, -0x0001f50e, -0x0001f50a, -0x0001f506, -0x0001f502, -0x0001f4fe, -0x0001f4fa, -0x0001f4f6, -0x0001f4f2, -0x0001f4ee, -0x0001f4ea, -0x0001f4e6, -0x0001f4e3, -0x0001f4df, -0x0001f4db, -0x0001f4d7, -0x0001f4d3, -0x0001f4cf, -0x0001f4cb, -0x0001f4c7, -0x0001f4c3, -0x0001f4c1, -0x0001f4bd, -0x0001f4ba, -0x0001f4b6, -0x0001f4b2, -0x0001f4ae, -0x0001f4aa, -0x0001f4a6, -0x0001f4a2, -0x0001f49e, -0x0001f49a, -0x0001f496, -0x0001f492, -0x0001f48f, -0x0001f48b, -0x0001f487, -0x0001f483, -0x0001f47f, -0x0001f47b, -0x0001f477, -0x0001f473, -0x0001f46f, -0x0001f46d, -0x0001f469, -0x0001f466, -0x0001f462, -0x0001f45e, -0x0001f45a, -0x0001f456, -0x0001f452, -0x0001f44e, -0x0001f44a, -0x0001f446, -0x0001f442, -0x0001f43f, -0x0001f43b, -0x0001f437, -0x0001f433, -0x0001f42f, -0x0001f42b, -0x0001f427, -0x0001f423, -0x0001f41f, -0x0001f41d, -0x0001f419, -0x0001f415, -0x0001f412, -0x0001f40e, -0x0001f40a, -0x0001f406, -0x0001f402, -0x0001f3fe, -0x0001f3fa, -0x0001f3f6, -0x0001f3f2, -0x0001f3ee, -0x0001f3eb, -0x0001f3e7, -0x0001f3e3, -0x0001f3df, -0x0001f3db, -0x0001f3d7, -0x0001f3d3, -0x0001f3cf, -0x0001f3cd, -0x0001f3c9, -0x0001f3c5, -0x0001f3c2, -0x0001f3be, -0x0001f3ba, -0x0001f3b6, -0x0001f3b2, -0x0001f3ae, -0x0001f3aa, -0x0001f3a6, -0x0001f3a2, -0x0001f39e, -0x0001f39a, -0x0001f397, -0x0001f393, -0x0001f38f, -0x0001f38b, -0x0001f387, -0x0001f383, -0x0001f37f, -0x0001f37b, -0x0001f379, -0x0001f375, -0x0001f371, -0x0001f36e, -0x0001f36a, -0x0001f366, -0x0001f362, -0x0001f35e, -0x0001f35a, -0x0001f356, -0x0001f352, -0x0001f34f, -0x0001f34b, -0x0001f347, -0x0001f343, -0x0001f33f, -0x0001f33b, -0x0001f337, -0x0001f333, -0x0001f32f, -0x0001f32c, -0x0001f328, -0x0001f324, -0x0001f320, -0x0001f31c, -0x0001f318, -0x0001f314, -0x0001f310, -0x0001f30c, -0x0001f30b, -0x0001f307, -0x0001f303, -0x0001f2ff, -0x0001f2fb, -0x0001f2f7, -0x0001f2f3, -0x0001f2ef, -0x0001f2eb, -0x0001f2e7, -0x0001f2e4, -0x0001f2e0, -0x0001f2dc, -0x0001f2d8, -0x0001f2d4, -0x0001f2d0, -0x0001f2cc, -0x0001f2c8, -0x0001f2c6, -0x0001f2c3, -0x0001f2bf, -0x0001f2bb, -0x0001f2b7, -0x0001f2b3, -0x0001f2af, -0x0001f2ab, -0x0001f2a7, -0x0001f2a3, -0x0001f2a0, -0x0001f29c, -0x0001f298, -0x0001f294, -0x0001f290, -0x0001f28c, -0x0001f288, -0x0001f284, -0x0001f282, -0x0001f27e, -0x0001f27b, -0x0001f277, -0x0001f273, -0x0001f26f, -0x0001f26b, -0x0001f267, -0x0001f263, -0x0001f25f, -0x0001f25b, -0x0001f258, -0x0001f254, -0x0001f250, -0x0001f24c, -0x0001f248, -0x0001f244, -0x0001f240, -0x0001f23c, -0x0001f23a, -0x0001f236, -0x0001f233, -0x0001f22f, -0x0001f22b, -0x0001f227, -0x0001f223, -0x0001f21f, -0x0001f21b, -0x0001f217, -0x0001f213, -0x0001f210, -0x0001f20c, -0x0001f208, -0x0001f204, -0x0001f200, -0x0001f1fc, -0x0001f1f8, -0x0001f1f6, -0x0001f1f2, -0x0001f1ee, -0x0001f1eb, -0x0001f1e7, -0x0001f1e3, -0x0001f1df, -0x0001f1db, -0x0001f1d7, -0x0001f1d3, -0x0001f1cf, -0x0001f1cb, -0x0001f1c8, -0x0001f1c4, -0x0001f1c0, -0x0001f1bc, -0x0001f1b8, -0x0001f1b4, -0x0001f1b2, -0x0001f1ae, -0x0001f1aa, -0x0001f1a7, -0x0001f1a3, -0x0001f19f, -0x0001f19b, -0x0001f197, -0x0001f193, -0x0001f18f, -0x0001f18b, -0x0001f187, -0x0001f184, -0x0001f180, -0x0001f17c, -0x0001f178, -0x0001f174, -0x0001f170, -0x0001f16c, -0x0001f168, -0x0001f165, -0x0001f161, -0x0001f15d, -0x0001f159, -0x0001f155, -0x0001f151, -0x0001f14f, -0x0001f14b, -0x0001f147, -0x0001f144, -0x0001f140, -0x0001f13c, -0x0001f138, -0x0001f134, -0x0001f130, -0x0001f12c, -0x0001f128, -0x0001f125, -0x0001f121, -0x0001f11d, -0x0001f119, -0x0001f115, -0x0001f113, -0x0001f10f, -0x0001f10b, -0x0001f108, -0x0001f104, -0x0001f100, -0x0001f0fc, -0x0001f0f8, -0x0001f0f4, -0x0001f0f0, -0x0001f0ec, -0x0001f0e9, -0x0001f0e5, -0x0001f0e1, -0x0001f0dd, -0x0001f0d9, -0x0001f0d7, -0x0001f0d3, -0x0001f0cf, -0x0001f0cb, -0x0001f0c8, -0x0001f0c4, -0x0001f0c0, -0x0001f0bc, -0x0001f0b8, -0x0001f0b4, -0x0001f0b0, -0x0001f0ac, -0x0001f0a9, -0x0001f0a5, -0x0001f0a1, -0x0001f09d, -0x0001f09b, -0x0001f097, -0x0001f093, -0x0001f08f, -0x0001f08c, -0x0001f088, -0x0001f084, -0x0001f080, -0x0001f07c, -0x0001f078, -0x0001f074, -0x0001f070, -0x0001f06d, -0x0001f069, -0x0001f065, -0x0001f061, -0x0001f05f, -0x0001f05b, -0x0001f057, -0x0001f053, -0x0001f04f, -0x0001f04c, -0x0001f048, -0x0001f044, -0x0001f040, -0x0001f03c, -0x0001f038, -0x0001f034, -0x0001f030, -0x0001f02d, -0x0001f029, -0x0001f025, -0x0001f023, -0x0001f01f, -0x0001f01b, -0x0001f017, -0x0001f013, -0x0001f010, -0x0001f00c, -0x0001f008, -0x0001f004, -0x0001f000, -0x0001effc, -0x0001eff8, -0x0001eff4, -0x0001eff1, -0x0001efed, -0x0001efe9, -0x0001efe7, -0x0001efe3, -0x0001efdf, -0x0001efdb, -0x0001efd7, -0x0001efd3, -0x0001efd0, -0x0001efcc, -0x0001efc8, -0x0001efc4, -0x0001efc0, -0x0001efbc, -0x0001efb8, -0x0001efb4, -0x0001efb1, -0x0001efad, -0x0001efab, -0x0001efa7, -0x0001efa3, -0x0001ef9f, -0x0001ef9b, -0x0001ef97, -0x0001ef94, -0x0001ef90, -0x0001ef8b, -0x0001ef87, -0x0001ef83, -0x0001ef80, -0x0001ef7e, -0x0001ef7a, -0x0001ef76, -0x0001ef72, -0x0001ef6e, -0x0001ef6a, -0x0001ef66, -0x0001ef63, -0x0001ef5f, -0x0001ef5b, -0x0001ef57, -0x0001ef53, -0x0001ef4f, -0x0001ef4b, -0x0001ef48, -0x0001ef46, -0x0001ef42, -0x0001ef3e, -0x0001ef3a, -0x0001ef36, -0x0001ef32, -0x0001ef2e, -0x0001ef2b, -0x0001ef27, -0x0001ef23, -0x0001ef1f, -0x0001ef1b, -0x0001ef17, -0x0001ef13, -0x0001ef0f, -0x0001ef0e, -0x0001ef0a, -0x0001ef06, -0x0001ef02, -0x0001eefe, -0x0001eefa, -0x0001eef6, -0x0001eef2, -0x0001eeef, -0x0001eeeb, -0x0001eee7, -0x0001eee3, -0x0001eedf, -0x0001eedb, -0x0001eed7, -0x0001eed5, -0x0001eed2, -0x0001eece, -0x0001eeca, -0x0001eec6, -0x0001eec2, -0x0001eebe, -0x0001eeba, -0x0001eeb7, -0x0001eeb3, -0x0001eeaf, -0x0001eeab, -0x0001eea7, -0x0001eea3, -0x0001ee9f, -0x0001ee9d, -0x0001ee9a, -0x0001ee96, -0x0001ee92, -0x0001ee8e, -0x0001ee8a, -0x0001ee86, -0x0001ee82, -0x0001ee7e, -0x0001ee7b, -0x0001ee77, -0x0001ee73, -0x0001ee6f, -0x0001ee6b, -0x0001ee67, -0x0001ee63, -0x0001ee61, -0x0001ee5e, -0x0001ee5a, -0x0001ee56, -0x0001ee52, -0x0001ee4e, -0x0001ee4a, -0x0001ee46, -0x0001ee43, -0x0001ee3f, -0x0001ee3b, -0x0001ee37, -0x0001ee33, -0x0001ee2f, -0x0001ee2b, -0x0001ee29, -0x0001ee26, -0x0001ee22, -0x0001ee1e, -0x0001ee1a, -0x0001ee16, -0x0001ee12, -0x0001ee0e, -0x0001ee0a, -0x0001ee07, -0x0001ee03, -0x0001edff, -0x0001edfb, -0x0001edf7, -0x0001edf3, -0x0001edf1, -0x0001eded, -0x0001edea, -0x0001ede6, -0x0001ede2, -0x0001edde, -0x0001edda, -0x0001edd6, -0x0001edd2, -0x0001edce, -0x0001edcb, -0x0001edc7, -0x0001edc3, -0x0001edbf, -0x0001edbb, -0x0001edb9, -0x0001edb5, -0x0001edb1, -0x0001edad, -0x0001eda9, -0x0001eda6, -0x0001eda2, -0x0001eda0, -0x0001ed9c, -0x0001ed98, -0x0001ed94, -0x0001ed90, -0x0001ed8d, -0x0001ed89, -0x0001ed85, -0x0001ed81, -0x0001ed7d, -0x0001ed79, -0x0001ed75, -0x0001ed72, -0x0001ed70, -0x0001ed6c, -0x0001ed68, -0x0001ed64, -0x0001ed60, -0x0001ed5c, -0x0001ed59, -0x0001ed55, -0x0001ed51, -0x0001ed4d, -0x0001ed49, -0x0001ed45, -0x0001ed41, -0x0001ed3e, -0x0001ed3c, -0x0001ed38, -0x0001ed34, -0x0001ed30, -0x0001ed2c, -0x0001ed28, -0x0001ed25, -0x0001ed21, -0x0001ed1d, -0x0001ed19, -0x0001ed15, -0x0001ed11, -0x0001ed0d, -0x0001ed0c, -0x0001ed08, -0x0001ed04, -0x0001ed00, -0x0001ecfc, -0x0001ecf8, -0x0001ecf4, -0x0001ecf1, -0x0001eced, -0x0001ece9, -0x0001ece5, -0x0001ece1, -0x0001ecdd, -0x0001ecd9, -0x0001ecd8, -0x0001ecd4, -0x0001ecd0, -0x0001eccc, -0x0001ecc8, -0x0001ecc4, -0x0001ecc0, -0x0001ecbd, -0x0001ecb9, -0x0001ecb5, -0x0001ecb1, -0x0001ecad, -0x0001eca9, -0x0001eca7, -0x0001eca4, -0x0001eca0, -0x0001ec9c, -0x0001ec98, -0x0001ec94, -0x0001ec90, -0x0001ec8c, -0x0001ec89, -0x0001ec85, -0x0001ec81, -0x0001ec7d, -0x0001ec79, -0x0001ec75, -0x0001ec73, -0x0001ec70, -0x0001ec6c, -0x0001ec68, -0x0001ec64, -0x0001ec60, -0x0001ec5c, -0x0001ec58, -0x0001ec55, -0x0001ec51, -0x0001ec4d, -0x0001ec49, -0x0001ec45, -0x0001ec43, -0x0001ec3f, -0x0001ec3c, -0x0001ec38, -0x0001ec34, -0x0001ec30, -0x0001ec2c, -0x0001ec28, -0x0001ec24, -0x0001ec21, -0x0001ec1d, -0x0001ec19, -0x0001ec15, -0x0001ec11, -0x0001ec0f, -0x0001ec0b, -0x0001ec08, -0x0001ec04, -0x0001ec00, -0x0001ebfc, -0x0001ebf8, -0x0001ebf4, -0x0001ebf0, -0x0001ebed, -0x0001ebe9, -0x0001ebe5, -0x0001ebe1, -0x0001ebdf, -0x0001ebdb, -0x0001ebd7, -0x0001ebd3, -0x0001ebcf, -0x0001ebcb, -0x0001ebc7, -0x0001ebc6, -0x0001ebc2, -0x0001ebbe, -0x0001ebba, -0x0001ebb6, -0x0001ebb2, -0x0001ebaf, -0x0001ebab, -0x0001eba7, -0x0001eba3, -0x0001eb9f, -0x0001eb9b, -0x0001eb99, -0x0001eb96, -0x0001eb92, -0x0001eb8e, -0x0001eb8a, -0x0001eb86, -0x0001eb82, -0x0001eb7f, -0x0001eb7b, -0x0001eb77, -0x0001eb73, -0x0001eb6f, -0x0001eb6d, -0x0001eb69, -0x0001eb66, -0x0001eb62, -0x0001eb5e, -0x0001eb5a, -0x0001eb56, -0x0001eb52, -0x0001eb4f, -0x0001eb4b, -0x0001eb47, -0x0001eb43, -0x0001eb41, -0x0001eb3d, -0x0001eb3a, -0x0001eb36, -0x0001eb32, -0x0001eb2e, -0x0001eb2a, -0x0001eb26, -0x0001eb23, -0x0001eb1f, -0x0001eb1b, -0x0001eb17, -0x0001eb15, -0x0001eb11, -0x0001eb0d, -0x0001eb0a, -0x0001eb06, -0x0001eb02, -0x0001eafe, -0x0001eafa, -0x0001eaf6, -0x0001eaf3, -0x0001eaef, -0x0001eaeb, -0x0001eae9, -0x0001eae5, -0x0001eae1, -0x0001eadd, -0x0001eada, -0x0001ead6, -0x0001ead2, -0x0001eace, -0x0001eaca, -0x0001eac6, -0x0001eac3, -0x0001eabf, -0x0001eabb, -0x0001eab9, -0x0001eab5, -0x0001eab1, -0x0001eaae, -0x0001eaaa, -0x0001eaa6, -0x0001eaa2, -0x0001ea9e, -0x0001ea9a, -0x0001ea97, -0x0001ea93, -0x0001ea8f, -0x0001ea8d, -0x0001ea89, -0x0001ea85, -0x0001ea81, -0x0001ea7e, -0x0001ea7a, -0x0001ea76, -0x0001ea72, -0x0001ea6e, -0x0001ea6a, -0x0001ea67, -0x0001ea63, -0x0001ea61, -0x0001ea5d, -0x0001ea59, -0x0001ea55, -0x0001ea51, -0x0001ea4e, -0x0001ea4a, -0x0001ea46, -0x0001ea42, -0x0001ea3e, -0x0001ea3a, -0x0001ea37, -0x0001ea35, -0x0001ea31, -0x0001ea2d, -0x0001ea29, -0x0001ea25, -0x0001ea22, -0x0001ea1e, -0x0001ea1a, -0x0001ea16, -0x0001ea12, -0x0001ea0e, -0x0001ea0b, -0x0001ea09, -0x0001ea05, -0x0001ea01, -0x0001e9fc, -0x0001e9f8, -0x0001e9f5, -0x0001e9f3, -0x0001e9ef, -0x0001e9eb, -0x0001e9e7, -0x0001e9e3, -0x0001e9df, -0x0001e9dc, -0x0001e9d8, -0x0001e9d4, -0x0001e9d0, -0x0001e9cc, -0x0001e9ca, -0x0001e9c7, -0x0001e9c3, -0x0001e9bf, -0x0001e9bb, -0x0001e9b7, -0x0001e9b4, -0x0001e9b0, -0x0001e9ac, -0x0001e9a8, -0x0001e9a4, -0x0001e9a0, -0x0001e99f, -0x0001e99b, -0x0001e997, -0x0001e993, -0x0001e98f, -0x0001e98b, -0x0001e988, -0x0001e984, -0x0001e980, -0x0001e97c, -0x0001e978, -0x0001e976, -0x0001e973, -0x0001e96f, -0x0001e96b, -0x0001e967, -0x0001e963, -0x0001e960, -0x0001e95c, -0x0001e958, -0x0001e954, -0x0001e950, -0x0001e94e, -0x0001e94a, -0x0001e947, -0x0001e943, -0x0001e93f, -0x0001e93b, -0x0001e937, -0x0001e934, -0x0001e930, -0x0001e92c, -0x0001e928, -0x0001e926, -0x0001e922, -0x0001e91f, -0x0001e91b, -0x0001e917, -0x0001e913, -0x0001e90f, -0x0001e90b, -0x0001e908, -0x0001e904, -0x0001e900, -0x0001e8fe, -0x0001e8fa, -0x0001e8f6, -0x0001e8f3, -0x0001e8ef, -0x0001e8eb, -0x0001e8e7, -0x0001e8e3, -0x0001e8e0, -0x0001e8dc, -0x0001e8d8, -0x0001e8d6, -0x0001e8d2, -0x0001e8ce, -0x0001e8cb, -0x0001e8c7, -0x0001e8c3, -0x0001e8bf, -0x0001e8bb, -0x0001e8b7, -0x0001e8b4, -0x0001e8b0, -0x0001e8ae, -0x0001e8aa, -0x0001e8a6, -0x0001e8a2, -0x0001e89f, -0x0001e89b, -0x0001e897, -0x0001e893, -0x0001e88f, -0x0001e88b, -0x0001e888, -0x0001e886, -0x0001e882, -0x0001e87e, -0x0001e87a, -0x0001e876, -0x0001e873, -0x0001e86f, -0x0001e86b, -0x0001e867, -0x0001e863, -0x0001e860, -0x0001e85c, -0x0001e85a, -0x0001e856, -0x0001e852, -0x0001e84e, -0x0001e84b, -0x0001e847, -0x0001e843, -0x0001e83f, -0x0001e83b, -0x0001e837, -0x0001e834, -0x0001e832, -0x0001e82e, -0x0001e829, -0x0001e825, -0x0001e821, -0x0001e81f, -0x0001e81b, -0x0001e818, -0x0001e814, -0x0001e810, -0x0001e80c, -0x0001e808, -0x0001e805, -0x0001e801, -0x0001e7fd, -0x0001e7fb, -0x0001e7f7, -0x0001e7f4, -0x0001e7f0, -0x0001e7ec, -0x0001e7e8, -0x0001e7e4, -0x0001e7e0, -0x0001e7dd, -0x0001e7d9, -0x0001e7d5, -0x0001e7d3, -0x0001e7cf, -0x0001e7cc, -0x0001e7c8, -0x0001e7c4, -0x0001e7c0, -0x0001e7bc, -0x0001e7b9, -0x0001e7b5, -0x0001e7b1, -0x0001e7af, -0x0001e7ab, -0x0001e7a7, -0x0001e7a4, -0x0001e7a0, -0x0001e79c, -0x0001e798, -0x0001e794, -0x0001e791, -0x0001e78d, -0x0001e78b, -0x0001e787, -0x0001e783, -0x0001e77f, -0x0001e77c, -0x0001e778, -0x0001e774, -0x0001e770, -0x0001e76c, -0x0001e769, -0x0001e767, -0x0001e763, -0x0001e75f, -0x0001e75b, -0x0001e758, -0x0001e754, -0x0001e750, -0x0001e74c, -0x0001e748, -0x0001e744, -0x0001e743, -0x0001e73f, -0x0001e73b, -0x0001e737, -0x0001e733, -0x0001e730, -0x0001e72c, -0x0001e728, -0x0001e724, -0x0001e720, -0x0001e71d, -0x0001e71b, -0x0001e717, -0x0001e713, -0x0001e70f, -0x0001e70b, -0x0001e708, -0x0001e704, -0x0001e700, -0x0001e6fc, -0x0001e6f8, -0x0001e6f6, -0x0001e6f3, -0x0001e6ef, -0x0001e6eb, -0x0001e6e7, -0x0001e6e3, -0x0001e6e0, -0x0001e6dc, -0x0001e6d8, -0x0001e6d4, -0x0001e6d2, -0x0001e6cf, -0x0001e6cb, -0x0001e6c7, -0x0001e6c3, -0x0001e6bf, -0x0001e6bc, -0x0001e6b8, -0x0001e6b4, -0x0001e6b0, -0x0001e6ae, -0x0001e6aa, -0x0001e6a7, -0x0001e6a3, -0x0001e69f, -0x0001e69b, -0x0001e697, -0x0001e694, -0x0001e690, -0x0001e68c, -0x0001e688, -0x0001e686, -0x0001e682, -0x0001e67f, -0x0001e67b, -0x0001e677, -0x0001e673, -0x0001e66f, -0x0001e66c, -0x0001e668, -0x0001e664, -0x0001e662, -0x0001e65e, -0x0001e659, -0x0001e655, -0x0001e651, -0x0001e64f, -0x0001e64c, -0x0001e648, -0x0001e644, -0x0001e640, -0x0001e63c, -0x0001e639, -0x0001e635, -0x0001e631, -0x0001e62f, -0x0001e62b, -0x0001e628, -0x0001e624, -0x0001e620, -0x0001e61c, -0x0001e618, -0x0001e615, -0x0001e611, -0x0001e60d, -0x0001e60b, -0x0001e607, -0x0001e604, -0x0001e600, -0x0001e5fc, -0x0001e5f8, -0x0001e5f4, -0x0001e5f1, -0x0001e5ed, -0x0001e5eb, -0x0001e5e7, -0x0001e5e3, -0x0001e5e0, -0x0001e5dc, -0x0001e5d8, -0x0001e5d4, -0x0001e5d0, -0x0001e5cd, -0x0001e5c9, -0x0001e5c7, -0x0001e5c3, -0x0001e5bf, -0x0001e5bc, -0x0001e5b8, -0x0001e5b4, -0x0001e5b0, -0x0001e5ac, -0x0001e5a9, -0x0001e5a7, -0x0001e5a3, -0x0001e59f, -0x0001e59b, -0x0001e598, -0x0001e594, -0x0001e590, -0x0001e58c, -0x0001e588, -0x0001e585, -0x0001e583, -0x0001e57f, -0x0001e57b, -0x0001e577, -0x0001e574, -0x0001e570, -0x0001e56c, -0x0001e568, -0x0001e564, -0x0001e563, -0x0001e55f, -0x0001e55b, -0x0001e557, -0x0001e553, -0x0001e550, -0x0001e54c, -0x0001e548, -0x0001e544, -0x0001e540, -0x0001e53f, -0x0001e53b, -0x0001e537, -0x0001e533, -0x0001e52f, -0x0001e52c, -0x0001e528, -0x0001e524, -0x0001e520, -0x0001e51e, -0x0001e51b, -0x0001e517, -0x0001e513, -0x0001e50f, -0x0001e50b, -0x0001e508, -0x0001e504, -0x0001e500, -0x0001e4fc, -0x0001e4fa, -0x0001e4f7, -0x0001e4f3, -0x0001e4ef, -0x0001e4eb, -0x0001e4e7, -0x0001e4e4, -0x0001e4e0, -0x0001e4dc, -0x0001e4da, -0x0001e4d6, -0x0001e4d3, -0x0001e4cf, -0x0001e4cb, -0x0001e4c7, -0x0001e4c3, -0x0001e4c0, -0x0001e4bc, -0x0001e4b8, -0x0001e4b6, -0x0001e4b2, -0x0001e4af, -0x0001e4ab, -0x0001e4a7, -0x0001e4a3, -0x0001e49f, -0x0001e49c, -0x0001e498, -0x0001e496, -0x0001e492, -0x0001e48e, -0x0001e48a, -0x0001e486, -0x0001e482, -0x0001e47f, -0x0001e47d, -0x0001e479, -0x0001e475, -0x0001e471, -0x0001e46e, -0x0001e46a, -0x0001e466, -0x0001e462, -0x0001e45f, -0x0001e45d, -0x0001e459, -0x0001e455, -0x0001e451, -0x0001e44e, -0x0001e44a, -0x0001e446, -0x0001e442, -0x0001e43e, -0x0001e43d, -0x0001e439, -0x0001e435, -0x0001e431, -0x0001e42d, -0x0001e42a, -0x0001e426, -0x0001e422, -0x0001e41e, -0x0001e41c, -0x0001e419, -0x0001e415, -0x0001e411, -0x0001e40d, -0x0001e409, -0x0001e406, -0x0001e402, -0x0001e3fe, -0x0001e3fa, -0x0001e3f8, -0x0001e3f5, -0x0001e3f1, -0x0001e3ed, -0x0001e3e9, -0x0001e3e6, -0x0001e3e2, -0x0001e3de, -0x0001e3da, -0x0001e3d8, -0x0001e3d5, -0x0001e3d1, -0x0001e3cd, -0x0001e3c9, -0x0001e3c5, -0x0001e3c2, -0x0001e3be, -0x0001e3ba, -0x0001e3b8, -0x0001e3b4, -0x0001e3b1, -0x0001e3ad, -0x0001e3a9, -0x0001e3a5, -0x0001e3a1, -0x0001e39e, -0x0001e39a, -0x0001e398, -0x0001e394, -0x0001e390, -0x0001e38d, -0x0001e389, -0x0001e385, -0x0001e381, -0x0001e37e, -0x0001e37a, -0x0001e378, -0x0001e374, -0x0001e370, -0x0001e36d, -0x0001e369, -0x0001e365, -0x0001e361, -0x0001e35d, -0x0001e35a, -0x0001e358, -0x0001e354, -0x0001e350, -0x0001e34c, -0x0001e349, -0x0001e345, -0x0001e341, -0x0001e33d, -0x0001e339, -0x0001e338, -0x0001e334, -0x0001e330, -0x0001e32c, -0x0001e328, -0x0001e325, -0x0001e321, -0x0001e31d, -0x0001e319, -0x0001e316, -0x0001e314, -0x0001e310, -0x0001e30c, -0x0001e308, -0x0001e305, -0x0001e301, -0x0001e2fd, -0x0001e2f9, -0x0001e2f5, -0x0001e2f4, -0x0001e2f0, -0x0001e2ec, -0x0001e2e8, -0x0001e2e4, -0x0001e2e1, -0x0001e2dd, -0x0001e2d9, -0x0001e2d5, -0x0001e2d3, -0x0001e2d0, -0x0001e2cc, -0x0001e2c8, -0x0001e2c6, -0x0001e2c2, -0x0001e2be, -0x0001e2ba, -0x0001e2b7, -0x0001e2b3, -0x0001e2af, -0x0001e2ab, -0x0001e2a8, -0x0001e2a6, -0x0001e2a2, -0x0001e29e, -0x0001e29a, -0x0001e297, -0x0001e293, -0x0001e28f, -0x0001e28b, -0x0001e288, -0x0001e286, -0x0001e282, -0x0001e27e, -0x0001e27a, -0x0001e277, -0x0001e273, -0x0001e26f, -0x0001e26b, -0x0001e269, -0x0001e266, -0x0001e262, -0x0001e25e, -0x0001e25a, -0x0001e257, -0x0001e253, -0x0001e24f, -0x0001e24b, -0x0001e249, -0x0001e246, -0x0001e242, -0x0001e23e, -0x0001e23a, -0x0001e237, -0x0001e233, -0x0001e22f, -0x0001e22d, -0x0001e229, -0x0001e226, -0x0001e222, -0x0001e21e, -0x0001e21a, -0x0001e217, -0x0001e213, -0x0001e20f, -0x0001e20d, -0x0001e209, -0x0001e206, -0x0001e202, -0x0001e1fe, -0x0001e1fa, -0x0001e1f7, -0x0001e1f3, -0x0001e1f1, -0x0001e1ed, -0x0001e1e9, -0x0001e1e6, -0x0001e1e2, -0x0001e1de, -0x0001e1da, -0x0001e1d7, -0x0001e1d3, -0x0001e1d1, -0x0001e1cd, -0x0001e1c9, -0x0001e1c6, -0x0001e1c2, -0x0001e1be, -0x0001e1ba, -0x0001e1b7, -0x0001e1b5, -0x0001e1b1, -0x0001e1ad, -0x0001e1a9, -0x0001e1a6, -0x0001e1a2, -0x0001e19e, -0x0001e19a, -0x0001e197, -0x0001e195, -0x0001e191, -0x0001e18d, -0x0001e189, -0x0001e186, -0x0001e182, -0x0001e17e, -0x0001e17a, -0x0001e178, -0x0001e175, -0x0001e171, -0x0001e16d, -0x0001e169, -0x0001e166, -0x0001e162, -0x0001e15e, -0x0001e15a, -0x0001e158, -0x0001e155, -0x0001e151, -0x0001e14d, -0x0001e149, -0x0001e146, -0x0001e142, -0x0001e13e, -0x0001e13c, -0x0001e138, -0x0001e135, -0x0001e131, -0x0001e12d, -0x0001e129, -0x0001e126, -0x0001e122, -0x0001e11e, -0x0001e11c, -0x0001e118, -0x0001e115, -0x0001e111, -0x0001e10d, -0x0001e109, -0x0001e106, -0x0001e102, -0x0001e0ff, -0x0001e0fb, -0x0001e0f8, -0x0001e0f4, -0x0001e0f2, -0x0001e0ee, -0x0001e0ea, -0x0001e0e7, -0x0001e0e3, -0x0001e0df, -0x0001e0db, -0x0001e0d8, -0x0001e0d6, -0x0001e0d2, -0x0001e0ce, -0x0001e0cb, -0x0001e0c7, -0x0001e0c3, -0x0001e0bf, -0x0001e0bc, -0x0001e0ba, -0x0001e0b6, -0x0001e0b2, -0x0001e0ae, -0x0001e0ab, -0x0001e0a7, -0x0001e0a3, -0x0001e09f, -0x0001e09e, -0x0001e09a, -0x0001e096, -0x0001e092, -0x0001e08f, -0x0001e08b, -0x0001e087, -0x0001e083, -0x0001e081, -0x0001e07e, -0x0001e07a, -0x0001e076, -0x0001e072, -0x0001e06f, -0x0001e06b, -0x0001e067, -0x0001e065, -0x0001e062, -0x0001e05e, -0x0001e05a, -0x0001e056, -0x0001e053, -0x0001e04f, -0x0001e04b, -0x0001e049, -0x0001e045, -0x0001e042, -0x0001e03e, -0x0001e03a, -0x0001e036, -0x0001e033, -0x0001e02f, -0x0001e02d, -0x0001e029, -0x0001e026, -0x0001e022, -0x0001e01e, -0x0001e01a, -0x0001e017, -0x0001e013, -0x0001e011, -0x0001e00d, -0x0001e009, -0x0001e006, -0x0001e002, -0x0001dffe, -0x0001dffa, -0x0001dff7, -0x0001dff5, -0x0001dff1, -0x0001dfed, -0x0001dfea, -0x0001dfe6, -0x0001dfe2, -0x0001dfde, -0x0001dfdb, -0x0001dfd9, -0x0001dfd5, -0x0001dfd1, -0x0001dfcd, -0x0001dfca, -0x0001dfc6, -0x0001dfc2, -0x0001dfbe, -0x0001dfbd, -0x0001dfb9, -0x0001dfb5, -0x0001dfb1, -0x0001dfae, -0x0001dfaa, -0x0001dfa6, -0x0001dfa2, -0x0001dfa0, -0x0001df9d, -0x0001df99, -0x0001df95, -0x0001df91, -0x0001df8e, -0x0001df8a, -0x0001df86, -0x0001df84, -0x0001df81, -0x0001df7d, -0x0001df79, -0x0001df75, -0x0001df72, -0x0001df6e, -0x0001df6a, -0x0001df68, -0x0001df64, -0x0001df61, -0x0001df5d, -0x0001df59, -0x0001df55, -0x0001df52, -0x0001df4e, -0x0001df4c, -0x0001df48, -0x0001df45, -0x0001df41, -0x0001df3d, -0x0001df3a, -0x0001df36, -0x0001df32, -0x0001df2e, -0x0001df2b, -0x0001df27, -0x0001df23, -0x0001df21, -0x0001df1e, -0x0001df1a, -0x0001df16, -0x0001df12, -0x0001df0f, -0x0001df0b, -0x0001df07, -0x0001df05, -0x0001df02, -0x0001defe, -0x0001defa, -0x0001def6, -0x0001def3, -0x0001deef, -0x0001deed, -0x0001dee9, -0x0001dee6, -0x0001dee2, -0x0001dede, -0x0001deda, -0x0001ded7, -0x0001ded3, -0x0001ded1, -0x0001decd, -0x0001deca, -0x0001dec6, -0x0001dec2, -0x0001debe, -0x0001debb, -0x0001deb9, -0x0001deb5, -0x0001deb1, -0x0001deae, -0x0001deaa, -0x0001dea6, -0x0001dea2, -0x0001de9f, -0x0001de9d, -0x0001de99, -0x0001de95, -0x0001de92, -0x0001de8e, -0x0001de8a, -0x0001de86, -0x0001de85, -0x0001de81, -0x0001de7d, -0x0001de79, -0x0001de76, -0x0001de72, -0x0001de6e, -0x0001de6a, -0x0001de69, -0x0001de65, -0x0001de61, -0x0001de5d, -0x0001de5a, -0x0001de56, -0x0001de52, -0x0001de50, -0x0001de4d, -0x0001de49, -0x0001de45, -0x0001de41, -0x0001de3e, -0x0001de3a, -0x0001de36, -0x0001de34, -0x0001de31, -0x0001de2d, -0x0001de29, -0x0001de25, -0x0001de22, -0x0001de1e, -0x0001de1c, -0x0001de18, -0x0001de15, -0x0001de11, -0x0001de0d, -0x0001de09, -0x0001de06, -0x0001de02, -0x0001de00, -0x0001ddfc, -0x0001ddf9, -0x0001ddf5, -0x0001ddf1, -0x0001dded, -0x0001ddea, -0x0001dde8, -0x0001dde4, -0x0001dde0, -0x0001dddd, -0x0001ddd9, -0x0001ddd5, -0x0001ddd1, -0x0001ddce, -0x0001ddcc, -0x0001ddc8, -0x0001ddc4, -0x0001ddc1, -0x0001ddbd, -0x0001ddb9, -0x0001ddb5, -0x0001ddb3, -0x0001ddb0, -0x0001ddac, -0x0001dda8, -0x0001dda5, -0x0001dda1, -0x0001dd9d, -0x0001dd99, -0x0001dd97, -0x0001dd94, -0x0001dd90, -0x0001dd8c, -0x0001dd89, -0x0001dd85, -0x0001dd81, -0x0001dd7f, -0x0001dd7b, -0x0001dd77, -0x0001dd74, -0x0001dd70, -0x0001dd6c, -0x0001dd6a, -0x0001dd66, -0x0001dd63, -0x0001dd5f, -0x0001dd5b, -0x0001dd58, -0x0001dd54, -0x0001dd52, -0x0001dd4e, -0x0001dd4b, -0x0001dd47, -0x0001dd43, -0x0001dd3f, -0x0001dd3c, -0x0001dd38, -0x0001dd36, -0x0001dd32, -0x0001dd2f, -0x0001dd2b, -0x0001dd27, -0x0001dd23, -0x0001dd20, -0x0001dd1e, -0x0001dd1a, -0x0001dd16, -0x0001dd13, -0x0001dd0f, -0x0001dd0b, -0x0001dd07, -0x0001dd06, -0x0001dd02, -0x0001dcfe, -0x0001dcfa, -0x0001dcf7, -0x0001dcf3, -0x0001dcef, -0x0001dcec, -0x0001dcea, -0x0001dce6, -0x0001dce2, -0x0001dcde, -0x0001dcdb, -0x0001dcd7, -0x0001dcd3, -0x0001dcd1, -0x0001dcce, -0x0001dcca, -0x0001dcc6, -0x0001dcc3, -0x0001dcbf, -0x0001dcbb, -0x0001dcb9, -0x0001dcb5, -0x0001dcb2, -0x0001dcae, -0x0001dcaa, -0x0001dca7, -0x0001dca3, -0x0001dca1, -0x0001dc9d, -0x0001dc9a, -0x0001dc96, -0x0001dc92, -0x0001dc8e, -0x0001dc8b, -0x0001dc87, -0x0001dc85, -0x0001dc81, -0x0001dc7e, -0x0001dc7a, -0x0001dc76, -0x0001dc72, -0x0001dc6f, -0x0001dc6d, -0x0001dc69, -0x0001dc65, -0x0001dc62, -0x0001dc5e, -0x0001dc5a, -0x0001dc56, -0x0001dc55, -0x0001dc51, -0x0001dc4d, -0x0001dc49, -0x0001dc46, -0x0001dc42, -0x0001dc3e, -0x0001dc3a, -0x0001dc39, -0x0001dc35, -0x0001dc31, -0x0001dc2d, -0x0001dc2a, -0x0001dc26, -0x0001dc22, -0x0001dc20, -0x0001dc1d, -0x0001dc19, -0x0001dc15, -0x0001dc12, -0x0001dc0e, -0x0001dc0a, -0x0001dc08, -0x0001dc04, -0x0001dc01, -0x0001dbfd, -0x0001dbf9, -0x0001dbf6, -0x0001dbf2, -0x0001dbee, -0x0001dbec, -0x0001dbe9, -0x0001dbe5, -0x0001dbe1, -0x0001dbdd, -0x0001dbda, -0x0001dbd6, -0x0001dbd4, -0x0001dbd0, -0x0001dbcd, -0x0001dbc9, -0x0001dbc5, -0x0001dbc3, -0x0001dbbf, -0x0001dbbb, -0x0001dbb8, -0x0001dbb4, -0x0001dbb0, -0x0001dbae, -0x0001dbab, -0x0001dba7, -0x0001dba3, -0x0001dba0, -0x0001db9c, -0x0001db98, -0x0001db96, -0x0001db93, -0x0001db8f, -0x0001db8b, -0x0001db87, -0x0001db84, -0x0001db80, -0x0001db7e, -0x0001db7a, -0x0001db77, -0x0001db73, -0x0001db6f, -0x0001db6c, -0x0001db6a, -0x0001db66, -0x0001db62, -0x0001db5f, -0x0001db5b, -0x0001db57, -0x0001db53, -0x0001db52, -0x0001db4e, -0x0001db4a, -0x0001db47, -0x0001db43, -0x0001db3f, -0x0001db3b, -0x0001db3a, -0x0001db36, -0x0001db32, -0x0001db2e, -0x0001db2b, -0x0001db27, -0x0001db23, -0x0001db21, -0x0001db1e, -0x0001db1a, -0x0001db16, -0x0001db13, -0x0001db0f, -0x0001db0b, -0x0001db09, -0x0001db06, -0x0001db02, -0x0001dafe, -0x0001dafa, -0x0001daf7, -0x0001daf3, -0x0001daf1, -0x0001daed, -0x0001daea, -0x0001dae6, -0x0001dae2, -0x0001dadf, -0x0001dadb, -0x0001dad9, -0x0001dad5, -0x0001dad2, -0x0001dace, -0x0001daca, -0x0001dac6, -0x0001dac3, -0x0001dac1, -0x0001dabd, -0x0001dab9, -0x0001dab6, -0x0001dab2, -0x0001daae, -0x0001daab, -0x0001daa9, -0x0001daa5, -0x0001daa1, -0x0001da9e, -0x0001da9a, -0x0001da96, -0x0001da93, -0x0001da91, -0x0001da8d, -0x0001da89, -0x0001da86, -0x0001da82, -0x0001da7e, -0x0001da7a, -0x0001da79, -0x0001da75, -0x0001da71, -0x0001da6d, -0x0001da6a, -0x0001da66, -0x0001da62, -0x0001da60, -0x0001da5d, -0x0001da59, -0x0001da55, -0x0001da52, -0x0001da4e, -0x0001da4c, -0x0001da48, -0x0001da45, -0x0001da41, -0x0001da3d, -0x0001da39, -0x0001da36, -0x0001da34, -0x0001da30, -0x0001da2c, -0x0001da29, -0x0001da25, -0x0001da21, -0x0001da1e, -0x0001da1c, -0x0001da18, -0x0001da14, -0x0001da11, -0x0001da0d, -0x0001da0a, -0x0001da06, -0x0001da03, -0x0001d9ff, -0x0001d9fb, -0x0001d9f9, -0x0001d9f6, -0x0001d9f2, -0x0001d9ee, -0x0001d9eb, -0x0001d9e7, -0x0001d9e3, -0x0001d9e1, -0x0001d9de, -0x0001d9da, -0x0001d9d6, -0x0001d9d3, -0x0001d9cf, -0x0001d9cb, -0x0001d9c9, -0x0001d9c6, -0x0001d9c2, -0x0001d9be, -0x0001d9bb, -0x0001d9b7, -0x0001d9b5, -0x0001d9b1, -0x0001d9ae, -0x0001d9aa, -0x0001d9a6, -0x0001d9a3, -0x0001d99f, -0x0001d99d, -0x0001d999, -0x0001d996, -0x0001d992, -0x0001d98e, -0x0001d98b, -0x0001d989, -0x0001d985, -0x0001d981, -0x0001d97e, -0x0001d97a, -0x0001d976, -0x0001d973, -0x0001d971, -0x0001d96d, -0x0001d969, -0x0001d966, -0x0001d962, -0x0001d95e, -0x0001d95c, -0x0001d959, -0x0001d955, -0x0001d951, -0x0001d94e, -0x0001d94a, -0x0001d946, -0x0001d944, -0x0001d941, -0x0001d93d, -0x0001d939, -0x0001d936, -0x0001d932, -0x0001d930, -0x0001d92c, -0x0001d929, -0x0001d925, -0x0001d921, -0x0001d91e, -0x0001d91a, -0x0001d918, -0x0001d914, -0x0001d911, -0x0001d90d, -0x0001d909, -0x0001d906, -0x0001d902, -0x0001d900, -0x0001d8fc, -0x0001d8f9, -0x0001d8f5, -0x0001d8f1, -0x0001d8ee, -0x0001d8ec, -0x0001d8e8, -0x0001d8e4, -0x0001d8e1, -0x0001d8dd, -0x0001d8d9, -0x0001d8d6, -0x0001d8d4, -0x0001d8d0, -0x0001d8cc, -0x0001d8c9, -0x0001d8c5, -0x0001d8c1, -0x0001d8bf, -0x0001d8bc, -0x0001d8b8, -0x0001d8b4, -0x0001d8b1, -0x0001d8ad, -0x0001d8a9, -0x0001d8a7, -0x0001d8a4, -0x0001d8a0, -0x0001d89c, -0x0001d899, -0x0001d895, -0x0001d893, -0x0001d88f, -0x0001d88c, -0x0001d888, -0x0001d884, -0x0001d881, -0x0001d87d, -0x0001d87b, -0x0001d877, -0x0001d874, -0x0001d870, -0x0001d86c, -0x0001d868, -0x0001d865, -0x0001d863, -0x0001d85f, -0x0001d85c, -0x0001d858, -0x0001d854, -0x0001d851, -0x0001d84d, -0x0001d849, -0x0001d846, -0x0001d844, -0x0001d840, -0x0001d83c, -0x0001d839, -0x0001d835, -0x0001d831, -0x0001d830, -0x0001d82c, -0x0001d828, -0x0001d825, -0x0001d821, -0x0001d81d, -0x0001d819, -0x0001d818, -0x0001d814, -0x0001d810, -0x0001d80d, -0x0001d809, -0x0001d805, -0x0001d803, -0x0001d800, -0x0001d7fc, -0x0001d7f8, -0x0001d7f5, -0x0001d7f1, -0x0001d7ef, -0x0001d7ec, -0x0001d7e8, -0x0001d7e4, -0x0001d7e0, -0x0001d7dd, -0x0001d7db, -0x0001d7d7, -0x0001d7d4, -0x0001d7d0, -0x0001d7cc, -0x0001d7c9, -0x0001d7c5, -0x0001d7c3, -0x0001d7bf, -0x0001d7bc, -0x0001d7b8, -0x0001d7b4, -0x0001d7b1, -0x0001d7af, -0x0001d7ab, -0x0001d7a7, -0x0001d7a4, -0x0001d7a0, -0x0001d79c, -0x0001d79b, -0x0001d797, -0x0001d793, -0x0001d790, -0x0001d78c, -0x0001d788, -0x0001d786, -0x0001d783, -0x0001d77f, -0x0001d77b, -0x0001d778, -0x0001d774, -0x0001d770, -0x0001d76e, -0x0001d76b, -0x0001d767, -0x0001d763, -0x0001d760, -0x0001d75c, -0x0001d75a, -0x0001d756, -0x0001d753, -0x0001d74f, -0x0001d74b, -0x0001d748, -0x0001d746, -0x0001d742, -0x0001d73f, -0x0001d73b, -0x0001d737, -0x0001d734, -0x0001d732, -0x0001d72e, -0x0001d72a, -0x0001d727, -0x0001d723, -0x0001d71f, -0x0001d71c, -0x0001d71a, -0x0001d716, -0x0001d712, -0x0001d70f, -0x0001d70b, -0x0001d707, -0x0001d706, -0x0001d702, -0x0001d6fe, -0x0001d6fa, -0x0001d6f7, -0x0001d6f3, -0x0001d6f1, -0x0001d6ee, -0x0001d6ea, -0x0001d6e6, -0x0001d6e3, -0x0001d6df, -0x0001d6dd, -0x0001d6d9, -0x0001d6d6, -0x0001d6d2, -0x0001d6ce, -0x0001d6cb, -0x0001d6c7, -0x0001d6c5, -0x0001d6c1, -0x0001d6be, -0x0001d6ba, -0x0001d6b6, -0x0001d6b3, -0x0001d6b1, -0x0001d6ad, -0x0001d6aa, -0x0001d6a6, -0x0001d6a3, -0x0001d6a0, -0x0001d69c, -0x0001d698, -0x0001d695, -0x0001d691, -0x0001d68d, -0x0001d68c, -0x0001d688, -0x0001d684, -0x0001d681, -0x0001d67d, -0x0001d679, -0x0001d677, -0x0001d674, -0x0001d670, -0x0001d66c, -0x0001d669, -0x0001d665, -0x0001d663, -0x0001d65f, -0x0001d65c, -0x0001d658, -0x0001d654, -0x0001d651, -0x0001d64f, -0x0001d64b, -0x0001d648, -0x0001d644, -0x0001d640, -0x0001d63d, -0x0001d63b, -0x0001d637, -0x0001d633, -0x0001d630, -0x0001d62c, -0x0001d628, -0x0001d627, -0x0001d623, -0x0001d61f, -0x0001d61c, -0x0001d618, -0x0001d614, -0x0001d612, -0x0001d60f, -0x0001d60b, -0x0001d607, -0x0001d604, -0x0001d600, -0x0001d5fe, -0x0001d5fa, -0x0001d5f7, -0x0001d5f3, -0x0001d5ef, -0x0001d5ec, -0x0001d5ea, -0x0001d5e6, -0x0001d5e3, -0x0001d5df, -0x0001d5db, -0x0001d5d8, -0x0001d5d6, -0x0001d5d2, -0x0001d5ce, -0x0001d5cb, -0x0001d5c7, -0x0001d5c3, -0x0001d5c0, -0x0001d5be, -0x0001d5ba, -0x0001d5b7, -0x0001d5b3, -0x0001d5af, -0x0001d5ac, -0x0001d5aa, -0x0001d5a6, -0x0001d5a2, -0x0001d59f, -0x0001d59b, -0x0001d597, -0x0001d596, -0x0001d592, -0x0001d58e, -0x0001d58b, -0x0001d587, -0x0001d583, -0x0001d581, -0x0001d57e, -0x0001d57a, -0x0001d576, -0x0001d573, -0x0001d56f, -0x0001d56d, -0x0001d569, -0x0001d566, -0x0001d562, -0x0001d55e, -0x0001d55b, -0x0001d559, -0x0001d555, -0x0001d552, -0x0001d54e, -0x0001d54a, -0x0001d547, -0x0001d545, -0x0001d541, -0x0001d53d, -0x0001d53a, -0x0001d536, -0x0001d532, -0x0001d531, -0x0001d52d, -0x0001d529, -0x0001d526, -0x0001d522, -0x0001d51e, -0x0001d51c, -0x0001d519, -0x0001d515, -0x0001d511, -0x0001d50e, -0x0001d50a, -0x0001d508, -0x0001d504, -0x0001d501, -0x0001d4fd, -0x0001d4f9, -0x0001d4f6, -0x0001d4f3, -0x0001d4ef, -0x0001d4ec, -0x0001d4ea, -0x0001d4e6, -0x0001d4e3, -0x0001d4df, -0x0001d4db, -0x0001d4d8, -0x0001d4d6, -0x0001d4d2, -0x0001d4cf, -0x0001d4cb, -0x0001d4c7, -0x0001d4c4, -0x0001d4c2, -0x0001d4be, -0x0001d4ba, -0x0001d4b7, -0x0001d4b3, -0x0001d4b0, -0x0001d4ae, -0x0001d4aa, -0x0001d4a6, -0x0001d4a3, -0x0001d49f, -0x0001d49b, -0x0001d49a, -0x0001d496, -0x0001d492, -0x0001d48f, -0x0001d48b, -0x0001d489, -0x0001d485, -0x0001d482, -0x0001d47e, -0x0001d47a, -0x0001d477, -0x0001d475, -0x0001d471, -0x0001d46e, -0x0001d46a, -0x0001d466, -0x0001d463, -0x0001d461, -0x0001d45d, -0x0001d45a, -0x0001d456, -0x0001d452, -0x0001d44f, -0x0001d44d, -0x0001d449, -0x0001d445, -0x0001d442, -0x0001d43e, -0x0001d43b, -0x0001d439, -0x0001d435, -0x0001d431, -0x0001d42e, -0x0001d42a, -0x0001d426, -0x0001d425, -0x0001d421, -0x0001d41d, -0x0001d41a, -0x0001d416, -0x0001d414, -0x0001d410, -0x0001d40d, -0x0001d409, -0x0001d405, -0x0001d402, -0x0001d400, -0x0001d3fc, -0x0001d3f9, -0x0001d3f5, -0x0001d3f1, -0x0001d3ee, -0x0001d3ec, -0x0001d3e8, -0x0001d3e5, -0x0001d3e1, -0x0001d3dd, -0x0001d3da, -0x0001d3d8, -0x0001d3d4, -0x0001d3d0, -0x0001d3cd, -0x0001d3c9, -0x0001d3c6, -0x0001d3c4, -0x0001d3c0, -0x0001d3bc, -0x0001d3b9, -0x0001d3b5, -0x0001d3b3, -0x0001d3b0, -0x0001d3ac, -0x0001d3a8, -0x0001d3a5, -0x0001d3a1, -0x0001d39f, -0x0001d39b, -0x0001d398, -0x0001d394, -0x0001d390, -0x0001d38d, -0x0001d38b, -0x0001d387, -0x0001d384, -0x0001d380, -0x0001d37c, -0x0001d379, -0x0001d377, -0x0001d373, -0x0001d370, -0x0001d36c, -0x0001d368, -0x0001d365, -0x0001d363, -0x0001d35f, -0x0001d35b, -0x0001d358, -0x0001d354, -0x0001d351, -0x0001d34f, -0x0001d34b, -0x0001d348, -0x0001d344, -0x0001d340, -0x0001d33d, -0x0001d339, -0x0001d335, -0x0001d334, -0x0001d330, -0x0001d32c, -0x0001d329, -0x0001d325, -0x0001d321, -0x0001d320, -0x0001d31c, -0x0001d318, -0x0001d315, -0x0001d311, -0x0001d30f, -0x0001d30c, -0x0001d308, -0x0001d304, -0x0001d301, -0x0001d2fd, -0x0001d2fb, -0x0001d2f8, -0x0001d2f4, -0x0001d2f0, -0x0001d2ed, -0x0001d2eb, -0x0001d2e7, -0x0001d2e4, -0x0001d2e0, -0x0001d2dc, -0x0001d2d9, -0x0001d2d7, -0x0001d2d3, -0x0001d2d0, -0x0001d2cc, -0x0001d2c8, -0x0001d2c6, -0x0001d2c3, -0x0001d2bf, -0x0001d2bb, -0x0001d2b8, -0x0001d2b4, -0x0001d2b2, -0x0001d2af, -0x0001d2ab, -0x0001d2a7, -0x0001d2a4, -0x0001d2a0, -0x0001d29e, -0x0001d29b, -0x0001d297, -0x0001d293, -0x0001d290, -0x0001d28e, -0x0001d28a, -0x0001d287, -0x0001d283, -0x0001d27f, -0x0001d27c, -0x0001d27a, -0x0001d276, -0x0001d273, -0x0001d26f, -0x0001d26b, -0x0001d26a, -0x0001d266, -0x0001d262, -0x0001d25f, -0x0001d25b, -0x0001d257, -0x0001d256, -0x0001d252, -0x0001d24e, -0x0001d24b, -0x0001d247, -0x0001d245, -0x0001d242, -0x0001d23e, -0x0001d23a, -0x0001d237, -0x0001d233, -0x0001d231, -0x0001d22e, -0x0001d22a, -0x0001d226, -0x0001d223, -0x0001d21f, -0x0001d21d, -0x0001d219, -0x0001d216, -0x0001d212, -0x0001d20f, -0x0001d20d, -0x0001d209, -0x0001d205, -0x0001d202, -0x0001d1fe, -0x0001d1fb, -0x0001d1f9, -0x0001d1f5, -0x0001d1f1, -0x0001d1ee, -0x0001d1ea, -0x0001d1e8, -0x0001d1e5, -0x0001d1e1, -0x0001d1dd, -0x0001d1da, -0x0001d1d6, -0x0001d1d4, -0x0001d1d1, -0x0001d1cd, -0x0001d1c9, -0x0001d1c6, -0x0001d1c4, -0x0001d1c0, -0x0001d1bd, -0x0001d1b9, -0x0001d1b5, -0x0001d1b2, -0x0001d1b0, -0x0001d1ac, -0x0001d1a9, -0x0001d1a5, -0x0001d1a1, -0x0001d19e, -0x0001d19a, -0x0001d199, -0x0001d195, -0x0001d191, -0x0001d18e, -0x0001d18a, -0x0001d188, -0x0001d185, -0x0001d181, -0x0001d17d, -0x0001d17a, -0x0001d176, -0x0001d174, -0x0001d171, -0x0001d16d, -0x0001d169, -0x0001d166, -0x0001d164, -0x0001d160, -0x0001d15d, -0x0001d159, -0x0001d155, -0x0001d152, -0x0001d150, -0x0001d14c, -0x0001d149, -0x0001d145, -0x0001d141, -0x0001d140, -0x0001d13c, -0x0001d138, -0x0001d135, -0x0001d131, -0x0001d12d, -0x0001d12c, -0x0001d128, -0x0001d124, -0x0001d121, -0x0001d11d, -0x0001d11b, -0x0001d118, -0x0001d114, -0x0001d110, -0x0001d10d, -0x0001d10b, -0x0001d107, -0x0001d104, -0x0001d100, -0x0001d0fc, -0x0001d0f9, -0x0001d0f7, -0x0001d0f3, -0x0001d0f0, -0x0001d0ec, -0x0001d0e8, -0x0001d0e7, -0x0001d0e3, -0x0001d0df, -0x0001d0dc, -0x0001d0d8, -0x0001d0d4, -0x0001d0d3, -0x0001d0cf, -0x0001d0cb, -0x0001d0c8, -0x0001d0c4, -0x0001d0c2, -0x0001d0bf, -0x0001d0bb, -0x0001d0b7, -0x0001d0b4, -0x0001d0b0, -0x0001d0ae, -0x0001d0ab, -0x0001d0a7, -0x0001d0a3, -0x0001d0a0, -0x0001d09e, -0x0001d09a, -0x0001d097, -0x0001d093, -0x0001d08f, -0x0001d08c, -0x0001d08a, -0x0001d086, -0x0001d083, -0x0001d07f, -0x0001d07b, -0x0001d07a, -0x0001d076, -0x0001d072, -0x0001d06f, -0x0001d06b, -0x0001d069, -0x0001d066, -0x0001d062, -0x0001d05e, -0x0001d05b, -0x0001d057, -0x0001d055, -0x0001d052, -0x0001d04e, -0x0001d04a, -0x0001d047, -0x0001d045, -0x0001d041, -0x0001d03e, -0x0001d03a, -0x0001d036, -0x0001d033, -0x0001d031, -0x0001d02d, -0x0001d02a, -0x0001d026, -0x0001d022, -0x0001d021, -0x0001d01d, -0x0001d019, -0x0001d016, -0x0001d012, -0x0001d00e, -0x0001d00d, -0x0001d009, -0x0001d005, -0x0001d002, -0x0001cffe, -0x0001cffc, -0x0001cff8, -0x0001cff4, -0x0001cff2, -0x0001cfef, -0x0001cfeb, -0x0001cfe8, -0x0001cfe4, -0x0001cfe2, -0x0001cfde, -0x0001cfdb, -0x0001cfd7, -0x0001cfd4, -0x0001cfd2, -0x0001cfce, -0x0001cfcb, -0x0001cfc7, -0x0001cfc3, -0x0001cfc2, -0x0001cfbe, -0x0001cfba, -0x0001cfb7, -0x0001cfb3, -0x0001cfaf, -0x0001cfae, -0x0001cfaa, -0x0001cfa6, -0x0001cfa3, -0x0001cf9f, -0x0001cf9d, -0x0001cf9a, -0x0001cf96, -0x0001cf92, -0x0001cf8f, -0x0001cf8d, -0x0001cf89, -0x0001cf86, -0x0001cf82, -0x0001cf7f, -0x0001cf7d, -0x0001cf79, -0x0001cf76, -0x0001cf72, -0x0001cf6e, -0x0001cf6b, -0x0001cf69, -0x0001cf65, -0x0001cf62, -0x0001cf5e, -0x0001cf5a, -0x0001cf59, -0x0001cf55, -0x0001cf51, -0x0001cf4e, -0x0001cf4a, -0x0001cf48, -0x0001cf45, -0x0001cf41, -0x0001cf3d, -0x0001cf3a, -0x0001cf38, -0x0001cf34, -0x0001cf31, -0x0001cf2d, -0x0001cf2a, -0x0001cf28, -0x0001cf24, -0x0001cf21, -0x0001cf1d, -0x0001cf19, -0x0001cf16, -0x0001cf14, -0x0001cf10, -0x0001cf0d, -0x0001cf09, -0x0001cf05, -0x0001cf04, -0x0001cf00, -0x0001cefc, -0x0001cef9, -0x0001cef5, -0x0001cef3, -0x0001cef0, -0x0001ceec, -0x0001cee8, -0x0001cee5, -0x0001cee3, -0x0001cedf, -0x0001cedc, -0x0001ced8, -0x0001ced5, -0x0001ced1, -0x0001cecf, -0x0001cecc, -0x0001cec8, -0x0001cec4, -0x0001cec1, -0x0001cebf, -0x0001cebb, -0x0001ceb8, -0x0001ceb4, -0x0001ceb0, -0x0001ceaf, -0x0001ceab, -0x0001cea7, -0x0001cea4, -0x0001cea0, -0x0001ce9e, -0x0001ce9b, -0x0001ce97, -0x0001ce93, -0x0001ce90, -0x0001ce8c, -0x0001ce8a, -0x0001ce87, -0x0001ce83, -0x0001ce80, -0x0001ce7c, -0x0001ce7a, -0x0001ce77, -0x0001ce73, -0x0001ce6f, -0x0001ce6c, -0x0001ce6a, -0x0001ce66, -0x0001ce63, -0x0001ce5f, -0x0001ce5b, -0x0001ce5a, -0x0001ce57, -0x0001ce53, -0x0001ce4f, -0x0001ce4c, -0x0001ce48, -0x0001ce45, -0x0001ce43, -0x0001ce3f, -0x0001ce3c, -0x0001ce38, -0x0001ce34, -0x0001ce33, -0x0001ce2f, -0x0001ce2b, -0x0001ce28, -0x0001ce24, -0x0001ce22, -0x0001ce1f, -0x0001ce1b, -0x0001ce17, -0x0001ce14, -0x0001ce12, -0x0001ce0e, -0x0001ce0b, -0x0001ce07, -0x0001ce04, -0x0001ce02, -0x0001cdfe, -0x0001cdfb, -0x0001cdf7, -0x0001cdf3, -0x0001cdf2, -0x0001cdee, -0x0001cdea, -0x0001cde7, -0x0001cde3, -0x0001cde1, -0x0001cdde, -0x0001cdda, -0x0001cdd6, -0x0001cdd3, -0x0001cdd1, -0x0001cdcd, -0x0001cdca, -0x0001cdc6, -0x0001cdc3, -0x0001cdbf, -0x0001cdbd, -0x0001cdba, -0x0001cdb6, -0x0001cdb2, -0x0001cdaf, -0x0001cdad, -0x0001cda9, -0x0001cda6, -0x0001cda2, -0x0001cd9f, -0x0001cd9d, -0x0001cd99, -0x0001cd96, -0x0001cd92, -0x0001cd8e, -0x0001cd8d, -0x0001cd89, -0x0001cd85, -0x0001cd82, -0x0001cd7e, -0x0001cd7c, -0x0001cd79, -0x0001cd75, -0x0001cd71, -0x0001cd6e, -0x0001cd6c, -0x0001cd68, -0x0001cd65, -0x0001cd61, -0x0001cd5e, -0x0001cd5c, -0x0001cd58, -0x0001cd55, -0x0001cd51, -0x0001cd4d, -0x0001cd4c, -0x0001cd48, -0x0001cd44, -0x0001cd41, -0x0001cd3d, -0x0001cd39, -0x0001cd38, -0x0001cd34, -0x0001cd30, -0x0001cd2d, -0x0001cd29, -0x0001cd27, -0x0001cd24, -0x0001cd20, -0x0001cd1d, -0x0001cd19, -0x0001cd17, -0x0001cd14, -0x0001cd10, -0x0001cd0c, -0x0001cd09, -0x0001cd07, -0x0001cd03, -0x0001cd00, -0x0001ccfc, -0x0001ccf9, -0x0001ccf7, -0x0001ccf3, -0x0001ccef, -0x0001ccec, -0x0001cce8, -0x0001cce6, -0x0001cce3, -0x0001ccdf, -0x0001ccdc, -0x0001ccd8, -0x0001ccd6, -0x0001ccd3, -0x0001cccf, -0x0001cccb, -0x0001ccc8, -0x0001ccc6, -0x0001ccc2, -0x0001ccbf, -0x0001ccbb, -0x0001ccb8, -0x0001ccb5, -0x0001ccb2, -0x0001ccae, -0x0001ccad, -0x0001cca9, -0x0001cca5, -0x0001cca2, -0x0001cc9e, -0x0001cc9c, -0x0001cc99, -0x0001cc95, -0x0001cc92, -0x0001cc8e, -0x0001cc8c, -0x0001cc89, -0x0001cc85, -0x0001cc81, -0x0001cc7e, -0x0001cc7c, -0x0001cc78, -0x0001cc75, -0x0001cc71, -0x0001cc6e, -0x0001cc6c, -0x0001cc68, -0x0001cc65, -0x0001cc61, -0x0001cc5d, -0x0001cc5c, -0x0001cc58, -0x0001cc54, -0x0001cc51, -0x0001cc4f, -0x0001cc4b, -0x0001cc48, -0x0001cc44, -0x0001cc41, -0x0001cc3f, -0x0001cc3b, -0x0001cc38, -0x0001cc34, -0x0001cc31, -0x0001cc2f, -0x0001cc2b, -0x0001cc28, -0x0001cc24, -0x0001cc20, -0x0001cc1f, -0x0001cc1b, -0x0001cc17, -0x0001cc14, -0x0001cc10, -0x0001cc0e, -0x0001cc0b, -0x0001cc07, -0x0001cc04, -0x0001cc00, -0x0001cbfe, -0x0001cbfb, -0x0001cbf7, -0x0001cbf3, -0x0001cbf0, -0x0001cbee, -0x0001cbea, -0x0001cbe7, -0x0001cbe3, -0x0001cbe0, -0x0001cbde, -0x0001cbda, -0x0001cbd7, -0x0001cbd3, -0x0001cbcf, -0x0001cbce, -0x0001cbca, -0x0001cbc7, -0x0001cbc3, -0x0001cbbf, -0x0001cbbe, -0x0001cbba, -0x0001cbb6, -0x0001cbb3, -0x0001cbaf, -0x0001cbad, -0x0001cbaa, -0x0001cba6, -0x0001cba3, -0x0001cb9f, -0x0001cb9d, -0x0001cb9a, -0x0001cb96, -0x0001cb92, -0x0001cb8f, -0x0001cb8d, -0x0001cb89, -0x0001cb86, -0x0001cb82, -0x0001cb80, -0x0001cb7d, -0x0001cb79, -0x0001cb76, -0x0001cb72, -0x0001cb70, -0x0001cb6d, -0x0001cb69, -0x0001cb65, -0x0001cb62, -0x0001cb60, -0x0001cb5c, -0x0001cb59, -0x0001cb55, -0x0001cb52, -0x0001cb50, -0x0001cb4c, -0x0001cb49, -0x0001cb45, -0x0001cb42, -0x0001cb40, -0x0001cb3c, -0x0001cb39, -0x0001cb35, -0x0001cb31, -0x0001cb30, -0x0001cb2c, -0x0001cb28, -0x0001cb25, -0x0001cb21, -0x0001cb1f, -0x0001cb1c, -0x0001cb19, -0x0001cb15, -0x0001cb12, -0x0001cb0e, -0x0001cb0b, -0x0001cb09, -0x0001cb05, -0x0001cb02, -0x0001cafe, -0x0001cafa, -0x0001caf9, -0x0001caf5, -0x0001caf2, -0x0001caee, -0x0001caea, -0x0001cae9, -0x0001cae5, -0x0001cae1, -0x0001cade, -0x0001cadc, -0x0001cad8, -0x0001cad5, -0x0001cad1, -0x0001cace, -0x0001cacc, -0x0001cac8, -0x0001cac5, -0x0001cac1, -0x0001cabe, -0x0001cabc, -0x0001cab8, -0x0001cab5, -0x0001cab1, -0x0001caae, -0x0001caac, -0x0001caa8, -0x0001caa5, -0x0001caa1, -0x0001ca9f, -0x0001ca9c, -0x0001ca98, -0x0001ca94, -0x0001ca91, -0x0001ca8f, -0x0001ca8c, -0x0001ca88, -0x0001ca84, -0x0001ca81, -0x0001ca7f, -0x0001ca7b, -0x0001ca78, -0x0001ca74, -0x0001ca71, -0x0001ca6f, -0x0001ca6b, -0x0001ca68, -0x0001ca64, -0x0001ca62, -0x0001ca5f, -0x0001ca5b, -0x0001ca58, -0x0001ca54, -0x0001ca52, -0x0001ca4f, -0x0001ca4b, -0x0001ca48, -0x0001ca44, -0x0001ca42, -0x0001ca3f, -0x0001ca3b, -0x0001ca37, -0x0001ca34, -0x0001ca32, -0x0001ca2f, -0x0001ca2b, -0x0001ca27, -0x0001ca26, -0x0001ca22, -0x0001ca1e, -0x0001ca1b, -0x0001ca17, -0x0001ca15, -0x0001ca12, -0x0001ca0e, -0x0001ca0b, -0x0001ca07, -0x0001ca05, -0x0001ca02, -0x0001c9fe, -0x0001c9fb, -0x0001c9f7, -0x0001c9f5, -0x0001c9f2, -0x0001c9ee, -0x0001c9eb, -0x0001c9e9, -0x0001c9e5, -0x0001c9e2, -0x0001c9de, -0x0001c9da, -0x0001c9d9, -0x0001c9d5, -0x0001c9d1, -0x0001c9ce, -0x0001c9ca, -0x0001c9c9, -0x0001c9c5, -0x0001c9c1, -0x0001c9be, -0x0001c9ba, -0x0001c9b8, -0x0001c9b5, -0x0001c9b1, -0x0001c9ae, -0x0001c9ac, -0x0001c9a8, -0x0001c9a5, -0x0001c9a1, -0x0001c99e, -0x0001c99c, -0x0001c998, -0x0001c995, -0x0001c991, -0x0001c98e, -0x0001c98c, -0x0001c988, -0x0001c985, -0x0001c981, -0x0001c97f, -0x0001c97b, -0x0001c978, -0x0001c974, -0x0001c972, -0x0001c96f, -0x0001c96b, -0x0001c968, -0x0001c964, -0x0001c962, -0x0001c95f, -0x0001c95b, -0x0001c957, -0x0001c956, -0x0001c952, -0x0001c94f, -0x0001c94b, -0x0001c947, -0x0001c946, -0x0001c942, -0x0001c93e, -0x0001c93b, -0x0001c937, -0x0001c936, -0x0001c932, -0x0001c92e, -0x0001c92b, -0x0001c929, -0x0001c925, -0x0001c922, -0x0001c91e, -0x0001c91b, -0x0001c919, -0x0001c915, -0x0001c912, -0x0001c90e, -0x0001c90b, -0x0001c909, -0x0001c905, -0x0001c902, -0x0001c8fe, -0x0001c8fc, -0x0001c8f9, -0x0001c8f5, -0x0001c8f2, -0x0001c8ee, -0x0001c8ec, -0x0001c8e9, -0x0001c8e5, -0x0001c8e2, -0x0001c8de, -0x0001c8dc, -0x0001c8d9, -0x0001c8d5, -0x0001c8d2, -0x0001c8d0, -0x0001c8cc, -0x0001c8c9, -0x0001c8c5, -0x0001c8c2, -0x0001c8c0, -0x0001c8bc, -0x0001c8b9, -0x0001c8b5, -0x0001c8b3, -0x0001c8b0, -0x0001c8ac, -0x0001c8a9, -0x0001c8a5, -0x0001c8a3, -0x0001c8a0, -0x0001c89c, -0x0001c898, -0x0001c895, -0x0001c893, -0x0001c890, -0x0001c88c, -0x0001c888, -0x0001c887, -0x0001c883, -0x0001c87f, -0x0001c87c, -0x0001c878, -0x0001c877, -0x0001c873, -0x0001c86f, -0x0001c86c, -0x0001c868, -0x0001c866, -0x0001c863, -0x0001c85f, -0x0001c85c, -0x0001c85a, -0x0001c856, -0x0001c853, -0x0001c84f, -0x0001c84c, -0x0001c84a, -0x0001c846, -0x0001c843, -0x0001c83f, -0x0001c83c, -0x0001c83a, -0x0001c836, -0x0001c833, -0x0001c82f, -0x0001c82d, -0x0001c82a, -0x0001c826, -0x0001c823, -0x0001c81f, -0x0001c81d, -0x0001c81a, -0x0001c816, -0x0001c813, -0x0001c80f, -0x0001c80d, -0x0001c80a, -0x0001c806, -0x0001c803, -0x0001c801, -0x0001c7fd, -0x0001c7fa, -0x0001c7f6, -0x0001c7f2, -0x0001c7f1, -0x0001c7ed, -0x0001c7ea, -0x0001c7e7, -0x0001c7e4, -0x0001c7e0, -0x0001c7dc, -0x0001c7db, -0x0001c7d7, -0x0001c7d4, -0x0001c7d0, -0x0001c7ce, -0x0001c7cb, -0x0001c7c7, -0x0001c7c4, -0x0001c7c0, -0x0001c7be, -0x0001c7bb, -0x0001c7b7, -0x0001c7b4, -0x0001c7b2, -0x0001c7ae, -0x0001c7ab, -0x0001c7a7, -0x0001c7a4, -0x0001c7a2, -0x0001c79e, -0x0001c79b, -0x0001c797, -0x0001c795, -0x0001c792, -0x0001c78e, -0x0001c78b, -0x0001c787, -0x0001c785, -0x0001c782, -0x0001c77e, -0x0001c77b, -0x0001c779, -0x0001c775, -0x0001c772, -0x0001c76e, -0x0001c76b, -0x0001c769, -0x0001c765, -0x0001c762, -0x0001c75e, -0x0001c75c, -0x0001c759, -0x0001c755, -0x0001c752, -0x0001c74e, -0x0001c74c, -0x0001c749, -0x0001c745, -0x0001c742, -0x0001c740, -0x0001c73c, -0x0001c739, -0x0001c735, -0x0001c732, -0x0001c730, -0x0001c72c, -0x0001c729, -0x0001c725, -0x0001c724, -0x0001c720, -0x0001c71c, -0x0001c719, -0x0001c715, -0x0001c714, -0x0001c710, -0x0001c70c, -0x0001c709, -0x0001c707, -0x0001c704, -0x0001c700, -0x0001c6fc, -0x0001c6f9, -0x0001c6f7, -0x0001c6f4, -0x0001c6f0, -0x0001c6ec, -0x0001c6eb, -0x0001c6e7, -0x0001c6e4, -0x0001c6e0, -0x0001c6dc, -0x0001c6db, -0x0001c6d7, -0x0001c6d4, -0x0001c6d0, -0x0001c6ce, -0x0001c6cb, -0x0001c6c7, -0x0001c6c4, -0x0001c6c0, -0x0001c6be, -0x0001c6bb, -0x0001c6b7, -0x0001c6b4, -0x0001c6b2, -0x0001c6ae, -0x0001c6ab, -0x0001c6a7, -0x0001c6a4, -0x0001c6a2, -0x0001c69e, -0x0001c69b, -0x0001c697, -0x0001c695, -0x0001c692, -0x0001c68e, -0x0001c68b, -0x0001c687, -0x0001c685, -0x0001c682, -0x0001c67e, -0x0001c67b, -0x0001c679, -0x0001c675, -0x0001c672, -0x0001c66e, -0x0001c66b, -0x0001c669, -0x0001c665, -0x0001c662, -0x0001c65e, -0x0001c65c, -0x0001c659, -0x0001c655, -0x0001c653, -0x0001c650, -0x0001c64c, -0x0001c649, -0x0001c645, -0x0001c643, -0x0001c640, -0x0001c63c, -0x0001c639, -0x0001c637, -0x0001c633, -0x0001c630, -0x0001c62c, -0x0001c629, -0x0001c627, -0x0001c623, -0x0001c620, -0x0001c61c, -0x0001c61b, -0x0001c617, -0x0001c614, -0x0001c610, -0x0001c60c, -0x0001c60b, -0x0001c607, -0x0001c604, -0x0001c600, -0x0001c5fe, -0x0001c5fb, -0x0001c5f7, -0x0001c5f4, -0x0001c5f2, -0x0001c5ee, -0x0001c5eb, -0x0001c5e7, -0x0001c5e4, -0x0001c5e2, -0x0001c5de, -0x0001c5db, -0x0001c5d7, -0x0001c5d5, -0x0001c5d2, -0x0001c5ce, -0x0001c5cb, -0x0001c5c7, -0x0001c5c5, -0x0001c5c2, -0x0001c5be, -0x0001c5bb, -0x0001c5b9, -0x0001c5b6, -0x0001c5b2, -0x0001c5ae, -0x0001c5ad, -0x0001c5a9, -0x0001c5a6, -0x0001c5a2, -0x0001c59e, -0x0001c59d, -0x0001c599, -0x0001c596, -0x0001c592, -0x0001c590, -0x0001c58d, -0x0001c589, -0x0001c586, -0x0001c582, -0x0001c580, -0x0001c57d, -0x0001c579, -0x0001c576, -0x0001c574, -0x0001c570, -0x0001c56d, -0x0001c569, -0x0001c566, -0x0001c564, -0x0001c560, -0x0001c55d, -0x0001c559, -0x0001c558, -0x0001c554, -0x0001c550, -0x0001c54d, -0x0001c54b, -0x0001c548, -0x0001c544, -0x0001c540, -0x0001c53d, -0x0001c53b, -0x0001c538, -0x0001c534, -0x0001c531, -0x0001c52f, -0x0001c52b, -0x0001c528, -0x0001c524, -0x0001c521, -0x0001c51f, -0x0001c51b, -0x0001c518, -0x0001c514, -0x0001c512, -0x0001c50f, -0x0001c50b, -0x0001c508, -0x0001c506, -0x0001c502, -0x0001c4ff, -0x0001c4fb, -0x0001c4f8, -0x0001c4f6, -0x0001c4f2, -0x0001c4ef, -0x0001c4eb, -0x0001c4ea, -0x0001c4e6, -0x0001c4e2, -0x0001c4df, -0x0001c4db, -0x0001c4da, -0x0001c4d6, -0x0001c4d3, -0x0001c4cf, -0x0001c4cd, -0x0001c4ca, -0x0001c4c6, -0x0001c4c3, -0x0001c4c0, -0x0001c4bd, -0x0001c4b9, -0x0001c4b8, -0x0001c4b4, -0x0001c4b1, -0x0001c4ad, -0x0001c4ab, -0x0001c4a8, -0x0001c4a4, -0x0001c4a1, -0x0001c49f, -0x0001c49b, -0x0001c498, -0x0001c494, -0x0001c493, -0x0001c48f, -0x0001c48b, -0x0001c488, -0x0001c484, -0x0001c483, -0x0001c47f, -0x0001c47c, -0x0001c478, -0x0001c476, -0x0001c473, -0x0001c46f, -0x0001c46c, -0x0001c46a, -0x0001c466, -0x0001c463, -0x0001c45f, -0x0001c45e, -0x0001c45a, -0x0001c457, -0x0001c453, -0x0001c44f, -0x0001c44e, -0x0001c44a, -0x0001c447, -0x0001c443, -0x0001c441, -0x0001c43e, -0x0001c43a, -0x0001c437, -0x0001c435, -0x0001c431, -0x0001c42e, -0x0001c42a, -0x0001c427, -0x0001c425, -0x0001c422, -0x0001c41e, -0x0001c41a, -0x0001c419, -0x0001c415, -0x0001c412, -0x0001c40e, -0x0001c40c, -0x0001c409, -0x0001c405, -0x0001c402, -0x0001c400, -0x0001c3fc, -0x0001c3f9, -0x0001c3f5, -0x0001c3f2, -0x0001c3f0, -0x0001c3ed, -0x0001c3e9, -0x0001c3e6, -0x0001c3e4, -0x0001c3e0, -0x0001c3dd, -0x0001c3d9, -0x0001c3d7, -0x0001c3d4, -0x0001c3d0, -0x0001c3cd, -0x0001c3cb, -0x0001c3c8, -0x0001c3c4, -0x0001c3c0, -0x0001c3bd, -0x0001c3bb, -0x0001c3b8, -0x0001c3b4, -0x0001c3b1, -0x0001c3af, -0x0001c3ab, -0x0001c3a8, -0x0001c3a4, -0x0001c3a2, -0x0001c39f, -0x0001c39b, -0x0001c398, -0x0001c396, -0x0001c393, -0x0001c38f, -0x0001c38b, -0x0001c388, -0x0001c386, -0x0001c383, -0x0001c37f, -0x0001c37c, -0x0001c37a, -0x0001c376, -0x0001c373, -0x0001c36f, -0x0001c36d, -0x0001c36a, -0x0001c366, -0x0001c363, -0x0001c35f, -0x0001c35e, -0x0001c35a, -0x0001c357, -0x0001c353, -0x0001c351, -0x0001c34e, -0x0001c34a, -0x0001c347, -0x0001c345, -0x0001c341, -0x0001c33e, -0x0001c33a, -0x0001c338, -0x0001c335, -0x0001c332, -0x0001c32e, -0x0001c32b, -0x0001c327, -0x0001c324, -0x0001c322, -0x0001c31f, -0x0001c31b, -0x0001c317, -0x0001c316, -0x0001c312, -0x0001c30f, -0x0001c30b, -0x0001c309, -0x0001c306, -0x0001c302, -0x0001c2ff, -0x0001c2fd, -0x0001c2fa, -0x0001c2f6, -0x0001c2f3, -0x0001c2f1, -0x0001c2ed, -0x0001c2ea, -0x0001c2e6, -0x0001c2e5, -0x0001c2e1, -0x0001c2dd, -0x0001c2da, -0x0001c2d8, -0x0001c2d5, -0x0001c2d1, -0x0001c2ce, -0x0001c2ca, -0x0001c2c8, -0x0001c2c5, -0x0001c2c1, -0x0001c2be, -0x0001c2bc, -0x0001c2b9, -0x0001c2b5, -0x0001c2b2, -0x0001c2b0, -0x0001c2ac, -0x0001c2a9, -0x0001c2a5, -0x0001c2a3, -0x0001c2a0, -0x0001c29c, -0x0001c299, -0x0001c297, -0x0001c294, -0x0001c290, -0x0001c28d, -0x0001c28b, -0x0001c287, -0x0001c284, -0x0001c280, -0x0001c27f, -0x0001c27b, -0x0001c278, -0x0001c274, -0x0001c272, -0x0001c26f, -0x0001c26b, -0x0001c268, -0x0001c264, -0x0001c262, -0x0001c25f, -0x0001c25b, -0x0001c258, -0x0001c256, -0x0001c253, -0x0001c24f, -0x0001c24c, -0x0001c24a, -0x0001c246, -0x0001c243, -0x0001c23f, -0x0001c23e, -0x0001c23a, -0x0001c236, -0x0001c233, -0x0001c231, -0x0001c22e, -0x0001c22a, -0x0001c227, -0x0001c225, -0x0001c221, -0x0001c21e, -0x0001c21a, -0x0001c219, -0x0001c215, -0x0001c212, -0x0001c20e, -0x0001c20c, -0x0001c209, -0x0001c205, -0x0001c202, -0x0001c1fe, -0x0001c1fc, -0x0001c1f9, -0x0001c1f5, -0x0001c1f2, -0x0001c1f0, -0x0001c1ed, -0x0001c1e9, -0x0001c1e6, -0x0001c1e4, -0x0001c1e0, -0x0001c1dd, -0x0001c1d9, -0x0001c1d8, -0x0001c1d4, -0x0001c1d1, -0x0001c1cd, -0x0001c1cb, -0x0001c1c8, -0x0001c1c4, -0x0001c1c1, -0x0001c1bf, -0x0001c1bb, -0x0001c1b8, -0x0001c1b4, -0x0001c1b3, -0x0001c1af, -0x0001c1ac, -0x0001c1a8, -0x0001c1a5, -0x0001c1a1, -0x0001c1a0, -0x0001c19c, -0x0001c199, -0x0001c195, -0x0001c193, -0x0001c190, -0x0001c18c, -0x0001c189, -0x0001c187, -0x0001c184, -0x0001c180, -0x0001c17d, -0x0001c17b, -0x0001c177, -0x0001c174, -0x0001c170, -0x0001c16e, -0x0001c16b, -0x0001c167, -0x0001c164, -0x0001c162, -0x0001c15f, -0x0001c15b, -0x0001c158, -0x0001c156, -0x0001c152, -0x0001c14f, -0x0001c14b, -0x0001c14a, -0x0001c146, -0x0001c143, -0x0001c13f, -0x0001c13d, -0x0001c13a, -0x0001c136, -0x0001c133, -0x0001c131, -0x0001c12e, -0x0001c12a, -0x0001c127, -0x0001c125, -0x0001c121, -0x0001c11e, -0x0001c11a, -0x0001c119, -0x0001c115, -0x0001c112, -0x0001c10e, -0x0001c10c, -0x0001c109, -0x0001c105, -0x0001c102, -0x0001c100, -0x0001c0fc, -0x0001c0f9, -0x0001c0f5, -0x0001c0f4, -0x0001c0f0, -0x0001c0ed, -0x0001c0e9, -0x0001c0e7, -0x0001c0e4, -0x0001c0e0, -0x0001c0dd, -0x0001c0d9, -0x0001c0d8, -0x0001c0d4, -0x0001c0d1, -0x0001c0cd, -0x0001c0cb, -0x0001c0c8, -0x0001c0c4, -0x0001c0c1, -0x0001c0bf, -0x0001c0bc, -0x0001c0b8, -0x0001c0b5, -0x0001c0b3, -0x0001c0af, -0x0001c0ac, -0x0001c0a8, -0x0001c0a7, -0x0001c0a3, -0x0001c0a0, -0x0001c09c, -0x0001c09a, -0x0001c097, -0x0001c093, -0x0001c090, -0x0001c08e, -0x0001c08a, -0x0001c087, -0x0001c083, -0x0001c082, -0x0001c07e, -0x0001c07b, -0x0001c077, -0x0001c075, -0x0001c072, -0x0001c06e, -0x0001c06b, -0x0001c069, -0x0001c066, -0x0001c062, -0x0001c05f, -0x0001c05d, -0x0001c059, -0x0001c056, -0x0001c052, -0x0001c051, -0x0001c04d, -0x0001c04a, -0x0001c046, -0x0001c044, -0x0001c041, -0x0001c03d, -0x0001c03a, -0x0001c038, -0x0001c035, -0x0001c031, -0x0001c02e, -0x0001c02c, -0x0001c028, -0x0001c025, -0x0001c021, -0x0001c020, -0x0001c01b, -0x0001c019, -0x0001c016, -0x0001c012, -0x0001c00f, -0x0001c00d, -0x0001c009, -0x0001c006, -0x0001c002, -0x0001c001, -0x0001bffd, -0x0001bffa, -0x0001bff6, -0x0001bff4, -0x0001bff1, -0x0001bfed, -0x0001bfea, -0x0001bfe8, -0x0001bfe5, -0x0001bfe1, -0x0001bfde, -0x0001bfdc, -0x0001bfd9, -0x0001bfd5, -0x0001bfd2, -0x0001bfd0, -0x0001bfcc, -0x0001bfc9, -0x0001bfc5, -0x0001bfc4, -0x0001bfc0, -0x0001bfbd, -0x0001bfb9, -0x0001bfb7, -0x0001bfb4, -0x0001bfb0, -0x0001bfad, -0x0001bfab, -0x0001bfa8, -0x0001bfa4, -0x0001bfa1, -0x0001bf9f, -0x0001bf9b, -0x0001bf98, -0x0001bf94, -0x0001bf93, -0x0001bf8f, -0x0001bf8c, -0x0001bf88, -0x0001bf86, -0x0001bf83, -0x0001bf7f, -0x0001bf7c, -0x0001bf7a, -0x0001bf77, -0x0001bf73, -0x0001bf70, -0x0001bf6e, -0x0001bf6b, -0x0001bf67, -0x0001bf64, -0x0001bf62, -0x0001bf5e, -0x0001bf5b, -0x0001bf59, -0x0001bf56, -0x0001bf52, -0x0001bf4f, -0x0001bf4d, -0x0001bf49, -0x0001bf46, -0x0001bf42, -0x0001bf41, -0x0001bf3d, -0x0001bf3a, -0x0001bf36, -0x0001bf34, -0x0001bf31, -0x0001bf2d, -0x0001bf2a, -0x0001bf28, -0x0001bf25, -0x0001bf21, -0x0001bf1e, -0x0001bf1c, -0x0001bf18, -0x0001bf15, -0x0001bf11, -0x0001bf10, -0x0001bf0c, -0x0001bf09, -0x0001bf05, -0x0001bf03, -0x0001bf00, -0x0001befd, -0x0001bef9, -0x0001bef7, -0x0001bef4, -0x0001bef0, -0x0001beed, -0x0001beeb, -0x0001bee8, -0x0001bee4, -0x0001bee1, -0x0001bedf, -0x0001bedb, -0x0001bed8, -0x0001bed4, -0x0001bed3, -0x0001becf, -0x0001becc, -0x0001bec8, -0x0001bec6, -0x0001bec3, -0x0001bebf, -0x0001bebc, -0x0001beba, -0x0001beb7, -0x0001beb3, -0x0001beb0, -0x0001beae, -0x0001beaa, -0x0001bea7, -0x0001bea3, -0x0001bea2, -0x0001be9e, -0x0001be9b, -0x0001be97, -0x0001be96, -0x0001be92, -0x0001be8f, -0x0001be8b, -0x0001be8a, -0x0001be86, -0x0001be83, -0x0001be7f, -0x0001be7d, -0x0001be7a, -0x0001be76, -0x0001be73, -0x0001be71, -0x0001be6e, -0x0001be6a, -0x0001be67, -0x0001be65, -0x0001be62, -0x0001be5e, -0x0001be5b, -0x0001be59, -0x0001be55, -0x0001be52, -0x0001be4e, -0x0001be4d, -0x0001be49, -0x0001be46, -0x0001be42, -0x0001be40, -0x0001be3d, -0x0001be39, -0x0001be36, -0x0001be34, -0x0001be31, -0x0001be2d, -0x0001be2c, -0x0001be28, -0x0001be25, -0x0001be21, -0x0001be1f, -0x0001be1c, -0x0001be18, -0x0001be15, -0x0001be13, -0x0001be10, -0x0001be0c, -0x0001be09, -0x0001be07, -0x0001be03, -0x0001be00, -0x0001bdfd, -0x0001bdfb, -0x0001bdf7, -0x0001bdf4, -0x0001bdf0, -0x0001bdef, -0x0001bdeb, -0x0001bde8, -0x0001bde4, -0x0001bde2, -0x0001bddf, -0x0001bddb, -0x0001bdd8, -0x0001bdd6, -0x0001bdd3, -0x0001bdcf, -0x0001bdcd, -0x0001bdca, -0x0001bdc7, -0x0001bdc3, -0x0001bdc1, -0x0001bdbe, -0x0001bdba, -0x0001bdb7, -0x0001bdb5, -0x0001bdb2, -0x0001bdae, -0x0001bdab, -0x0001bda9, -0x0001bda5, -0x0001bda2, -0x0001bd9e, -0x0001bd9d, -0x0001bd99, -0x0001bd96, -0x0001bd92, -0x0001bd91, -0x0001bd8d, -0x0001bd8a, -0x0001bd86, -0x0001bd84, -0x0001bd81, -0x0001bd7d, -0x0001bd7a, -0x0001bd78, -0x0001bd75, -0x0001bd71, -0x0001bd6f, -0x0001bd6c, -0x0001bd68, -0x0001bd65, -0x0001bd63, -0x0001bd60, -0x0001bd5c, -0x0001bd59, -0x0001bd57, -0x0001bd54, -0x0001bd50, -0x0001bd4d, -0x0001bd4b, -0x0001bd47, -0x0001bd44, -0x0001bd40, -0x0001bd3f, -0x0001bd3b, -0x0001bd38, -0x0001bd34, -0x0001bd32, -0x0001bd2f, -0x0001bd2b, -0x0001bd28, -0x0001bd26, -0x0001bd23, -0x0001bd1f, -0x0001bd1c, -0x0001bd1a, -0x0001bd17, -0x0001bd13, -0x0001bd10, -0x0001bd0d, -0x0001bd0b, -0x0001bd08, -0x0001bd04, -0x0001bd01, -0x0001bcff, -0x0001bcfb, -0x0001bcf8, -0x0001bcf5, -0x0001bcf3, -0x0001bcef, -0x0001bcec, -0x0001bce8, -0x0001bce7, -0x0001bce3, -0x0001bce0, -0x0001bcde, -0x0001bcdb, -0x0001bcd7, -0x0001bcd4, -0x0001bcd2, -0x0001bcce, -0x0001bccb, -0x0001bcc7, -0x0001bcc6, -0x0001bcc2, -0x0001bcbf, -0x0001bcbb, -0x0001bcba, -0x0001bcb6, -0x0001bcb3, -0x0001bcb1, -0x0001bcad, -0x0001bcaa, -0x0001bca7, -0x0001bca5, -0x0001bca1, -0x0001bc9e, -0x0001bc9a, -0x0001bc99, -0x0001bc95, -0x0001bc92, -0x0001bc8e, -0x0001bc8c, -0x0001bc89, -0x0001bc86, -0x0001bc82, -0x0001bc80, -0x0001bc7d, -0x0001bc79, -0x0001bc78, -0x0001bc74, -0x0001bc71, -0x0001bc6d, -0x0001bc6c, -0x0001bc68, -0x0001bc65, -0x0001bc61, -0x0001bc5f, -0x0001bc5c, -0x0001bc58, -0x0001bc55, -0x0001bc53, -0x0001bc50, -0x0001bc4c, -0x0001bc4b, -0x0001bc47, -0x0001bc44, -0x0001bc40, -0x0001bc3e, -0x0001bc3b, -0x0001bc38, -0x0001bc34, -0x0001bc32, -0x0001bc2f, -0x0001bc2b, -0x0001bc28, -0x0001bc26, -0x0001bc23, -0x0001bc1f, -0x0001bc1d, -0x0001bc1a, -0x0001bc17, -0x0001bc13, -0x0001bc11, -0x0001bc0e, -0x0001bc0a, -0x0001bc07, -0x0001bc05, -0x0001bc02, -0x0001bbfe, -0x0001bbfb, -0x0001bbf9, -0x0001bbf6, -0x0001bbf2, -0x0001bbf0, -0x0001bbed, -0x0001bbe9, -0x0001bbe6, -0x0001bbe4, -0x0001bbe1, -0x0001bbdd, -0x0001bbda, -0x0001bbd8, -0x0001bbd5, -0x0001bbd1, -0x0001bbce, -0x0001bbcc, -0x0001bbc9, -0x0001bbc5, -0x0001bbc2, -0x0001bbc0, -0x0001bbbc, -0x0001bbb9, -0x0001bbb7, -0x0001bbb4, -0x0001bbb0, -0x0001bbad, -0x0001bbab, -0x0001bba8, -0x0001bba4, -0x0001bba1, -0x0001bb9f, -0x0001bb9b, -0x0001bb98, -0x0001bb94, -0x0001bb93, -0x0001bb90, -0x0001bb8c, -0x0001bb89, -0x0001bb87, -0x0001bb84, -0x0001bb80, -0x0001bb7d, -0x0001bb7b, -0x0001bb77, -0x0001bb74, -0x0001bb70, -0x0001bb6f, -0x0001bb6b, -0x0001bb68, -0x0001bb66, -0x0001bb63, -0x0001bb5f, -0x0001bb5c, -0x0001bb5a, -0x0001bb57, -0x0001bb53, -0x0001bb50, -0x0001bb4e, -0x0001bb4a, -0x0001bb47, -0x0001bb43, -0x0001bb42, -0x0001bb3e, -0x0001bb3b, -0x0001bb39, -0x0001bb36, -0x0001bb32, -0x0001bb2f, -0x0001bb2d, -0x0001bb2a, -0x0001bb26, -0x0001bb23, -0x0001bb21, -0x0001bb1d, -0x0001bb1a, -0x0001bb18, -0x0001bb15, -0x0001bb11, -0x0001bb0e, -0x0001bb0c, -0x0001bb09, -0x0001bb05, -0x0001bb02, -0x0001bb00, -0x0001bafd, -0x0001baf9, -0x0001baf6, -0x0001baf4, -0x0001baf0, -0x0001baed, -0x0001baeb, -0x0001bae8, -0x0001bae4, -0x0001bae1, -0x0001badf, -0x0001badc, -0x0001bad8, -0x0001bad5, -0x0001bad3, -0x0001bad0, -0x0001bacc, -0x0001baca, -0x0001bac7, -0x0001bac3, -0x0001bac0, -0x0001babe, -0x0001babb, -0x0001bab7, -0x0001bab4, -0x0001bab2, -0x0001baaf, -0x0001baab, -0x0001baa9, -0x0001baa6, -0x0001baa3, -0x0001ba9f, -0x0001ba9d, -0x0001ba9a, -0x0001ba96, -0x0001ba93, -0x0001ba91, -0x0001ba8e, -0x0001ba8a, -0x0001ba87, -0x0001ba85, -0x0001ba82, -0x0001ba7e, -0x0001ba7c, -0x0001ba79, -0x0001ba76, -0x0001ba72, -0x0001ba70, -0x0001ba6d, -0x0001ba69, -0x0001ba66, -0x0001ba64, -0x0001ba61, -0x0001ba5d, -0x0001ba5c, -0x0001ba58, -0x0001ba55, -0x0001ba51, -0x0001ba4f, -0x0001ba4c, -0x0001ba49, -0x0001ba45, -0x0001ba43, -0x0001ba40, -0x0001ba3c, -0x0001ba39, -0x0001ba37, -0x0001ba34, -0x0001ba30, -0x0001ba2f, -0x0001ba2b, -0x0001ba28, -0x0001ba24, -0x0001ba23, -0x0001ba1f, -0x0001ba1c, -0x0001ba18, -0x0001ba16, -0x0001ba13, -0x0001ba10, -0x0001ba0d, -0x0001ba09, -0x0001ba08, -0x0001ba04, -0x0001ba01, -0x0001b9fd, -0x0001b9fc, -0x0001b9f8, -0x0001b9f5, -0x0001b9f3, -0x0001b9ef, -0x0001b9ec, -0x0001b9e9, -0x0001b9e7, -0x0001b9e3, -0x0001b9e0, -0x0001b9dd, -0x0001b9db, -0x0001b9d7, -0x0001b9d4, -0x0001b9d2, -0x0001b9cf, -0x0001b9cb, -0x0001b9c8, -0x0001b9c6, -0x0001b9c3, -0x0001b9bf, -0x0001b9bd, -0x0001b9ba, -0x0001b9b7, -0x0001b9b3, -0x0001b9b1, -0x0001b9ae, -0x0001b9ab, -0x0001b9a7, -0x0001b9a5, -0x0001b9a2, -0x0001b99e, -0x0001b99d, -0x0001b999, -0x0001b996, -0x0001b992, -0x0001b991, -0x0001b98d, -0x0001b98a, -0x0001b988, -0x0001b985, -0x0001b981, -0x0001b97e, -0x0001b97c, -0x0001b979, -0x0001b975, -0x0001b972, -0x0001b970, -0x0001b96d, -0x0001b969, -0x0001b967, -0x0001b964, -0x0001b960, -0x0001b95d, -0x0001b95b, -0x0001b958, -0x0001b954, -0x0001b953, -0x0001b94f, -0x0001b94c, -0x0001b948, -0x0001b947, -0x0001b943, -0x0001b940, -0x0001b93c, -0x0001b93b, -0x0001b937, -0x0001b934, -0x0001b932, -0x0001b92f, -0x0001b92b, -0x0001b928, -0x0001b926, -0x0001b922, -0x0001b91f, -0x0001b91c, -0x0001b91a, -0x0001b916, -0x0001b913, -0x0001b911, -0x0001b90e, -0x0001b90a, -0x0001b907, -0x0001b905, -0x0001b902, -0x0001b8fe, -0x0001b8fd, -0x0001b8f9, -0x0001b8f6, -0x0001b8f2, -0x0001b8f0, -0x0001b8ed, -0x0001b8ea, -0x0001b8e6, -0x0001b8e4, -0x0001b8e1, -0x0001b8de, -0x0001b8dc, -0x0001b8d8, -0x0001b8d5, -0x0001b8d1, -0x0001b8d0, -0x0001b8cc, -0x0001b8c9, -0x0001b8c7, -0x0001b8c4, -0x0001b8c0, -0x0001b8bd, -0x0001b8bb, -0x0001b8b8, -0x0001b8b4, -0x0001b8b1, -0x0001b8af, -0x0001b8ac, -0x0001b8a8, -0x0001b8a6, -0x0001b8a3, -0x0001b8a0, -0x0001b89c, -0x0001b89a, -0x0001b897, -0x0001b894, -0x0001b890, -0x0001b88f, -0x0001b88b, -0x0001b888, -0x0001b884, -0x0001b883, -0x0001b87f, -0x0001b87c, -0x0001b87a, -0x0001b877, -0x0001b873, -0x0001b870, -0x0001b86e, -0x0001b86b, -0x0001b867, -0x0001b865, -0x0001b862, -0x0001b85f, -0x0001b85b, -0x0001b859, -0x0001b856, -0x0001b853, -0x0001b84f, -0x0001b84d, -0x0001b84a, -0x0001b846, -0x0001b845, -0x0001b841, -0x0001b83e, -0x0001b83a, -0x0001b839, -0x0001b835, -0x0001b832, -0x0001b830, -0x0001b82d, -0x0001b829, -0x0001b826, -0x0001b824, -0x0001b821, -0x0001b81d, -0x0001b81c, -0x0001b818, -0x0001b815, -0x0001b811, -0x0001b80f, -0x0001b80c, -0x0001b809, -0x0001b807, -0x0001b803, -0x0001b800, -0x0001b7fd, -0x0001b7fb, -0x0001b7f7, -0x0001b7f4, -0x0001b7f1, -0x0001b7ef, -0x0001b7eb, -0x0001b7e8, -0x0001b7e6, -0x0001b7e3, -0x0001b7df, -0x0001b7dc, -0x0001b7da, -0x0001b7d7, -0x0001b7d3, -0x0001b7d2, -0x0001b7ce, -0x0001b7cb, -0x0001b7c7, -0x0001b7c6, -0x0001b7c2, -0x0001b7bf, -0x0001b7bd, -0x0001b7ba, -0x0001b7b6, -0x0001b7b3, -0x0001b7b1, -0x0001b7ae, -0x0001b7aa, -0x0001b7a8, -0x0001b7a5, -0x0001b7a1, -0x0001b79e, -0x0001b79c, -0x0001b799, -0x0001b795, -0x0001b792, -0x0001b790, -0x0001b78d, -0x0001b789, -0x0001b788, -0x0001b784, -0x0001b781, -0x0001b77d, -0x0001b77c, -0x0001b778, -0x0001b775, -0x0001b773, -0x0001b770, -0x0001b76c, -0x0001b769, -0x0001b767, -0x0001b764, -0x0001b760, -0x0001b75e, -0x0001b75b, -0x0001b758, -0x0001b754, -0x0001b752, -0x0001b74f, -0x0001b74c, -0x0001b74a, -0x0001b746, -0x0001b743, -0x0001b740, -0x0001b73e, -0x0001b73a, -0x0001b737, -0x0001b733, -0x0001b732, -0x0001b72e, -0x0001b72b, -0x0001b729, -0x0001b726, -0x0001b722, -0x0001b71f, -0x0001b71d, -0x0001b71a, -0x0001b717, -0x0001b713, -0x0001b710, -0x0001b70e, -0x0001b70b, -0x0001b707, -0x0001b706, -0x0001b702, -0x0001b6ff, -0x0001b6fc, -0x0001b6fa, -0x0001b6f6, -0x0001b6f3, -0x0001b6f1, -0x0001b6ee, -0x0001b6ea, -0x0001b6e7, -0x0001b6e5, -0x0001b6e2, -0x0001b6de, -0x0001b6dd, -0x0001b6d9, -0x0001b6d6, -0x0001b6d2, -0x0001b6d1, -0x0001b6cd, -0x0001b6ca, -0x0001b6c8, -0x0001b6c5, -0x0001b6c1, -0x0001b6be, -0x0001b6bc, -0x0001b6b9, -0x0001b6b5, -0x0001b6b4, -0x0001b6b0, -0x0001b6ad, -0x0001b6a9, -0x0001b6a8, -0x0001b6a4, -0x0001b6a1, -0x0001b69f, -0x0001b69c, -0x0001b698, -0x0001b697, -0x0001b693, -0x0001b690, -0x0001b68c, -0x0001b68b, -0x0001b687, -0x0001b684, -0x0001b682, -0x0001b67f, -0x0001b67b, -0x0001b678, -0x0001b676, -0x0001b673, -0x0001b66f, -0x0001b66e, -0x0001b66a, -0x0001b667, -0x0001b663, -0x0001b662, -0x0001b65e, -0x0001b65b, -0x0001b659, -0x0001b656, -0x0001b652, -0x0001b64f, -0x0001b64d, -0x0001b64a, -0x0001b646, -0x0001b644, -0x0001b641, -0x0001b63e, -0x0001b63a, -0x0001b638, -0x0001b635, -0x0001b632, -0x0001b630, -0x0001b62c, -0x0001b629, -0x0001b626, -0x0001b624, -0x0001b621, -0x0001b61d, -0x0001b61b, -0x0001b618, -0x0001b615, -0x0001b613, -0x0001b60f, -0x0001b60c, -0x0001b609, -0x0001b607, -0x0001b603, -0x0001b600, -0x0001b5fe, -0x0001b5fb, -0x0001b5f7, -0x0001b5f4, -0x0001b5f2, -0x0001b5ef, -0x0001b5eb, -0x0001b5ea, -0x0001b5e6, -0x0001b5e3, -0x0001b5df, -0x0001b5de, -0x0001b5da, -0x0001b5d7, -0x0001b5d5, -0x0001b5d2, -0x0001b5ce, -0x0001b5cb, -0x0001b5c9, -0x0001b5c6, -0x0001b5c2, -0x0001b5c1, -0x0001b5bd, -0x0001b5ba, -0x0001b5b6, -0x0001b5b5, -0x0001b5b1, -0x0001b5ae, -0x0001b5ac, -0x0001b5a9, -0x0001b5a5, -0x0001b5a2, -0x0001b5a0, -0x0001b59d, -0x0001b59a, -0x0001b596, -0x0001b595, -0x0001b591, -0x0001b58e, -0x0001b58c, -0x0001b589, -0x0001b585, -0x0001b582, -0x0001b580, -0x0001b57d, -0x0001b579, -0x0001b577, -0x0001b574, -0x0001b571, -0x0001b56f, -0x0001b56c, -0x0001b568, -0x0001b565, -0x0001b563, -0x0001b560, -0x0001b55c, -0x0001b55a, -0x0001b557, -0x0001b554, -0x0001b550, -0x0001b54f, -0x0001b54b, -0x0001b548, -0x0001b546, -0x0001b543, -0x0001b53f, -0x0001b53d, -0x0001b53a, -0x0001b537, -0x0001b533, -0x0001b532, -0x0001b52e, -0x0001b52b, -0x0001b529, -0x0001b526, -0x0001b522, -0x0001b51f, -0x0001b51d, -0x0001b51a, -0x0001b516, -0x0001b514, -0x0001b511, -0x0001b50e, -0x0001b50a, -0x0001b509, -0x0001b505, -0x0001b502, -0x0001b500, -0x0001b4fd, -0x0001b4f9, -0x0001b4f7, -0x0001b4f4, -0x0001b4f1, -0x0001b4ed, -0x0001b4ec, -0x0001b4e8, -0x0001b4e5, -0x0001b4e3, -0x0001b4e0, -0x0001b4dc, -0x0001b4d9, -0x0001b4d7, -0x0001b4d4, -0x0001b4d0, -0x0001b4ce, -0x0001b4cb, -0x0001b4c8, -0x0001b4c6, -0x0001b4c3, -0x0001b4bf, -0x0001b4bc, -0x0001b4ba, -0x0001b4b7, -0x0001b4b3, -0x0001b4b1, -0x0001b4ae, -0x0001b4ab, -0x0001b4a7, -0x0001b4a6, -0x0001b4a2, -0x0001b49f, -0x0001b49d, -0x0001b49a, -0x0001b496, -0x0001b493, -0x0001b491, -0x0001b48e, -0x0001b48a, -0x0001b489, -0x0001b485, -0x0001b482, -0x0001b480, -0x0001b47d, -0x0001b479, -0x0001b476, -0x0001b474, -0x0001b471, -0x0001b46d, -0x0001b46b, -0x0001b468, -0x0001b465, -0x0001b461, -0x0001b460, -0x0001b45c, -0x0001b459, -0x0001b457, -0x0001b454, -0x0001b450, -0x0001b44e, -0x0001b44b, -0x0001b448, -0x0001b444, -0x0001b443, -0x0001b43f, -0x0001b43c, -0x0001b43a, -0x0001b437, -0x0001b433, -0x0001b430, -0x0001b42d, -0x0001b42b, -0x0001b428, -0x0001b424, -0x0001b421, -0x0001b41f, -0x0001b41c, -0x0001b418, -0x0001b417, -0x0001b413, -0x0001b410, -0x0001b40e, -0x0001b40b, -0x0001b407, -0x0001b404, -0x0001b402, -0x0001b3ff, -0x0001b3fb, -0x0001b3fa, -0x0001b3f6, -0x0001b3f3, -0x0001b3f1, -0x0001b3ee, -0x0001b3ea, -0x0001b3e7, -0x0001b3e5, -0x0001b3e2, -0x0001b3df, -0x0001b3dd, -0x0001b3da, -0x0001b3d6, -0x0001b3d4, -0x0001b3d1, -0x0001b3ce, -0x0001b3ca, -0x0001b3c9, -0x0001b3c5, -0x0001b3c2, -0x0001b3c0, -0x0001b3bd, -0x0001b3b9, -0x0001b3b8, -0x0001b3b4, -0x0001b3b1, -0x0001b3ad, -0x0001b3ac, -0x0001b3a8, -0x0001b3a5, -0x0001b3a3, -0x0001b3a0, -0x0001b39c, -0x0001b39b, -0x0001b397, -0x0001b394, -0x0001b390, -0x0001b38f, -0x0001b38b, -0x0001b388, -0x0001b386, -0x0001b383, -0x0001b37f, -0x0001b37e, -0x0001b37a, -0x0001b377, -0x0001b375, -0x0001b372, -0x0001b36e, -0x0001b36b, -0x0001b369, -0x0001b366, -0x0001b363, -0x0001b361, -0x0001b35d, -0x0001b35a, -0x0001b358, -0x0001b355, -0x0001b352, -0x0001b34e, -0x0001b34c, -0x0001b349, -0x0001b346, -0x0001b344, -0x0001b341, -0x0001b33d, -0x0001b33b, -0x0001b338, -0x0001b335, -0x0001b331, -0x0001b330, -0x0001b32c, -0x0001b329, -0x0001b327, -0x0001b324, -0x0001b320, -0x0001b31f, -0x0001b31b, -0x0001b318, -0x0001b314, -0x0001b313, -0x0001b30f, -0x0001b30c, -0x0001b30a, -0x0001b307, -0x0001b303, -0x0001b302, -0x0001b2fe, -0x0001b2fb, -0x0001b2f8, -0x0001b2f6, -0x0001b2f2, -0x0001b2ef, -0x0001b2ed, -0x0001b2ea, -0x0001b2e7, -0x0001b2e5, -0x0001b2e1, -0x0001b2de, -0x0001b2db, -0x0001b2d9, -0x0001b2d6, -0x0001b2d2, -0x0001b2d0, -0x0001b2cd, -0x0001b2ca, -0x0001b2c8, -0x0001b2c5, -0x0001b2c1, -0x0001b2be, -0x0001b2bc, -0x0001b2b9, -0x0001b2b5, -0x0001b2b2, -0x0001b2b0, -0x0001b2ad, -0x0001b2aa, -0x0001b2a8, -0x0001b2a4, -0x0001b2a1, -0x0001b29f, -0x0001b29c, -0x0001b299, -0x0001b295, -0x0001b293, -0x0001b290, -0x0001b28d, -0x0001b28b, -0x0001b288, -0x0001b284, -0x0001b283, -0x0001b27f, -0x0001b27c, -0x0001b27a, -0x0001b277, -0x0001b273, -0x0001b270, -0x0001b26e, -0x0001b26b, -0x0001b267, -0x0001b266, -0x0001b262, -0x0001b25f, -0x0001b25d, -0x0001b25a, -0x0001b256, -0x0001b253, -0x0001b251, -0x0001b24e, -0x0001b24b, -0x0001b249, -0x0001b246, -0x0001b242, -0x0001b240, -0x0001b23d, -0x0001b23a, -0x0001b238, -0x0001b235, -0x0001b231, -0x0001b22e, -0x0001b22c, -0x0001b229, -0x0001b225, -0x0001b224, -0x0001b220, -0x0001b21d, -0x0001b21b, -0x0001b218, -0x0001b214, -0x0001b211, -0x0001b20f, -0x0001b20c, -0x0001b208, -0x0001b207, -0x0001b203, -0x0001b200, -0x0001b1fe, -0x0001b1fb, -0x0001b1f8, -0x0001b1f6, -0x0001b1f2, -0x0001b1ef, -0x0001b1ec, -0x0001b1ea, -0x0001b1e7, -0x0001b1e3, -0x0001b1e1, -0x0001b1de, -0x0001b1db, -0x0001b1d9, -0x0001b1d6, -0x0001b1d2, -0x0001b1cf, -0x0001b1cd, -0x0001b1ca, -0x0001b1c6, -0x0001b1c5, -0x0001b1c1, -0x0001b1be, -0x0001b1bc, -0x0001b1b9, -0x0001b1b5, -0x0001b1b4, -0x0001b1b0, -0x0001b1ad, -0x0001b1aa, -0x0001b1a8, -0x0001b1a4, -0x0001b1a1, -0x0001b19f, -0x0001b19c, -0x0001b199, -0x0001b197, -0x0001b194, -0x0001b190, -0x0001b18d, -0x0001b18b, -0x0001b188, -0x0001b184, -0x0001b183, -0x0001b17f, -0x0001b17c, -0x0001b17a, -0x0001b177, -0x0001b173, -0x0001b172, -0x0001b16e, -0x0001b16b, -0x0001b167, -0x0001b166, -0x0001b162, -0x0001b15f, -0x0001b15d, -0x0001b15a, -0x0001b156, -0x0001b155, -0x0001b151, -0x0001b14e, -0x0001b14c, -0x0001b149, -0x0001b145, -0x0001b144, -0x0001b140, -0x0001b13d, -0x0001b13b, -0x0001b138, -0x0001b134, -0x0001b133, -0x0001b12f, -0x0001b12c, -0x0001b129, -0x0001b127, -0x0001b124, -0x0001b120, -0x0001b11e, -0x0001b11b, -0x0001b118, -0x0001b116, -0x0001b113, -0x0001b10f, -0x0001b10e, -0x0001b10a, -0x0001b107, -0x0001b103, -0x0001b102, -0x0001b0fe, -0x0001b0fb, -0x0001b0f9, -0x0001b0f6, -0x0001b0f2, -0x0001b0f1, -0x0001b0ed, -0x0001b0ea, -0x0001b0e8, -0x0001b0e5, -0x0001b0e2, -0x0001b0de, -0x0001b0dc, -0x0001b0d9, -0x0001b0d6, -0x0001b0d4, -0x0001b0d1, -0x0001b0cd, -0x0001b0cc, -0x0001b0c8, -0x0001b0c5, -0x0001b0c3, -0x0001b0c0, -0x0001b0bc, -0x0001b0b9, -0x0001b0b7, -0x0001b0b4, -0x0001b0b1, -0x0001b0af, -0x0001b0ab, -0x0001b0a8, -0x0001b0a6, -0x0001b0a3, -0x0001b0a0, -0x0001b09e, -0x0001b09b, -0x0001b097, -0x0001b095, -0x0001b092, -0x0001b08f, -0x0001b08b, -0x0001b08a, -0x0001b086, -0x0001b083, -0x0001b081, -0x0001b07e, -0x0001b07a, -0x0001b079, -0x0001b075, -0x0001b072, -0x0001b070, -0x0001b06d, -0x0001b069, -0x0001b066, -0x0001b064, -0x0001b061, -0x0001b05e, -0x0001b05c, -0x0001b059, -0x0001b055, -0x0001b053, -0x0001b050, -0x0001b04d, -0x0001b04b, -0x0001b048, -0x0001b044, -0x0001b041, -0x0001b03f, -0x0001b03c, -0x0001b038, -0x0001b037, -0x0001b033, -0x0001b030, -0x0001b02e, -0x0001b02b, -0x0001b028, -0x0001b026, -0x0001b022, -0x0001b01f, -0x0001b01c, -0x0001b01a, -0x0001b017, -0x0001b013, -0x0001b012, -0x0001b00e, -0x0001b00b, -0x0001b009, -0x0001b006, -0x0001b002, -0x0001b001, -0x0001affd, -0x0001affa, -0x0001aff6, -0x0001aff5, -0x0001aff1, -0x0001afee, -0x0001afec, -0x0001afe9, -0x0001afe6, -0x0001afe4, -0x0001afe0, -0x0001afde, -0x0001afdb, -0x0001afd8, -0x0001afd6, -0x0001afd2, -0x0001afcf, -0x0001afcd, -0x0001afca, -0x0001afc7, -0x0001afc5, -0x0001afc2, -0x0001afbe, -0x0001afbd, -0x0001afb9, -0x0001afb6, -0x0001afb2, -0x0001afb1, -0x0001afad, -0x0001afaa, -0x0001afa8, -0x0001afa5, -0x0001afa2, -0x0001afa0, -0x0001af9d, -0x0001af99, -0x0001af98, -0x0001af94, -0x0001af91, -0x0001af8f, -0x0001af8c, -0x0001af88, -0x0001af87, -0x0001af83, -0x0001af80, -0x0001af7e, -0x0001af7b, -0x0001af78, -0x0001af74, -0x0001af72, -0x0001af6f, -0x0001af6c, -0x0001af6a, -0x0001af67, -0x0001af63, -0x0001af62, -0x0001af5e, -0x0001af5b, -0x0001af59, -0x0001af56, -0x0001af52, -0x0001af51, -0x0001af4d, -0x0001af4a, -0x0001af48, -0x0001af45, -0x0001af42, -0x0001af3e, -0x0001af3d, -0x0001af39, -0x0001af36, -0x0001af34, -0x0001af31, -0x0001af2d, -0x0001af2c, -0x0001af28, -0x0001af25, -0x0001af23, -0x0001af20, -0x0001af1d, -0x0001af1b, -0x0001af18, -0x0001af14, -0x0001af13, -0x0001af0f, -0x0001af0c, -0x0001af08, -0x0001af07, -0x0001af03, -0x0001af00, -0x0001aefe, -0x0001aefb, -0x0001aef8, -0x0001aef6, -0x0001aef3, -0x0001aeef, -0x0001aeed, -0x0001aeea, -0x0001aee7, -0x0001aee5, -0x0001aee2, -0x0001aede, -0x0001aedd, -0x0001aed9, -0x0001aed6, -0x0001aed3, -0x0001aed1, -0x0001aecd, -0x0001aeca, -0x0001aec8, -0x0001aec5, -0x0001aec2, -0x0001aec0, -0x0001aebd, -0x0001aeb9, -0x0001aeb8, -0x0001aeb4, -0x0001aeb1, -0x0001aeaf, -0x0001aeac, -0x0001aea8, -0x0001aea7, -0x0001aea3, -0x0001aea0, -0x0001ae9e, -0x0001ae9b, -0x0001ae98, -0x0001ae94, -0x0001ae93, -0x0001ae8f, -0x0001ae8c, -0x0001ae8a, -0x0001ae87, -0x0001ae83, -0x0001ae82, -0x0001ae7e, -0x0001ae7b, -0x0001ae79, -0x0001ae76, -0x0001ae74, -0x0001ae71, -0x0001ae6d, -0x0001ae6a, -0x0001ae68, -0x0001ae65, -0x0001ae61, -0x0001ae60, -0x0001ae5c, -0x0001ae59, -0x0001ae57, -0x0001ae54, -0x0001ae51, -0x0001ae4f, -0x0001ae4c, -0x0001ae48, -0x0001ae47, -0x0001ae43, -0x0001ae40, -0x0001ae3e, -0x0001ae3b, -0x0001ae37, -0x0001ae36, -0x0001ae32, -0x0001ae2f, -0x0001ae2d, -0x0001ae2a, -0x0001ae27, -0x0001ae23, -0x0001ae22, -0x0001ae1e, -0x0001ae1b, -0x0001ae19, -0x0001ae16, -0x0001ae12, -0x0001ae11, -0x0001ae0d, -0x0001ae0a, -0x0001ae08, -0x0001ae05, -0x0001ae02, -0x0001ae00, -0x0001adfd, -0x0001adf9, -0x0001adf8, -0x0001adf4, -0x0001adf1, -0x0001adef, -0x0001adec, -0x0001ade8, -0x0001ade7, -0x0001ade3, -0x0001ade0, -0x0001addd, -0x0001addb, -0x0001add8, -0x0001add4, -0x0001add3, -0x0001adcf, -0x0001adcc, -0x0001adca, -0x0001adc7, -0x0001adc4, -0x0001adc2, -0x0001adbe, -0x0001adbb, -0x0001adb9, -0x0001adb6, -0x0001adb3, -0x0001adb1, -0x0001adae, -0x0001adaa, -0x0001ada9, -0x0001ada5, -0x0001ada2, -0x0001ada0, -0x0001ad9d, -0x0001ad9a, -0x0001ad96, -0x0001ad95, -0x0001ad91, -0x0001ad8e, -0x0001ad8c, -0x0001ad89, -0x0001ad85, -0x0001ad84, -0x0001ad80, -0x0001ad7d, -0x0001ad7b, -0x0001ad78, -0x0001ad75, -0x0001ad73, -0x0001ad70, -0x0001ad6c, -0x0001ad6b, -0x0001ad67, -0x0001ad64, -0x0001ad62, -0x0001ad5f, -0x0001ad5b, -0x0001ad5a, -0x0001ad56, -0x0001ad53, -0x0001ad50, -0x0001ad4e, -0x0001ad4b, -0x0001ad47, -0x0001ad46, -0x0001ad42, -0x0001ad3f, -0x0001ad3d, -0x0001ad3a, -0x0001ad36, -0x0001ad35, -0x0001ad31, -0x0001ad2e, -0x0001ad2c, -0x0001ad29, -0x0001ad26, -0x0001ad24, -0x0001ad21, -0x0001ad1d, -0x0001ad1c, -0x0001ad18, -0x0001ad15, -0x0001ad13, -0x0001ad10, -0x0001ad0c, -0x0001ad0a, -0x0001ad06, -0x0001ad05, -0x0001ad01, -0x0001acfe, -0x0001acfc, -0x0001acf9, -0x0001acf6, -0x0001acf4, -0x0001acf1, -0x0001aced, -0x0001acec, -0x0001ace8, -0x0001ace5, -0x0001ace3, -0x0001ace0, -0x0001acdd, -0x0001acdb, -0x0001acd8, -0x0001acd4, -0x0001acd3, -0x0001accf, -0x0001accc, -0x0001acca, -0x0001acc7, -0x0001acc4, -0x0001acc2, -0x0001acbf, -0x0001acbb, -0x0001acba, -0x0001acb6, -0x0001acb3, -0x0001acb1, -0x0001acae, -0x0001acab, -0x0001aca7, -0x0001aca6, -0x0001aca2, -0x0001ac9f, -0x0001ac9d, -0x0001ac9a, -0x0001ac96, -0x0001ac95, -0x0001ac91, -0x0001ac8e, -0x0001ac8c, -0x0001ac89, -0x0001ac86, -0x0001ac84, -0x0001ac81, -0x0001ac7d, -0x0001ac7c, -0x0001ac78, -0x0001ac75, -0x0001ac73, -0x0001ac70, -0x0001ac6d, -0x0001ac6b, -0x0001ac68, -0x0001ac64, -0x0001ac63, -0x0001ac5f, -0x0001ac5c, -0x0001ac5a, -0x0001ac57, -0x0001ac54, -0x0001ac52, -0x0001ac4f, -0x0001ac4b, -0x0001ac4a, -0x0001ac46, -0x0001ac43, -0x0001ac41, -0x0001ac3e, -0x0001ac3b, -0x0001ac39, -0x0001ac36, -0x0001ac32, -0x0001ac30, -0x0001ac2d, -0x0001ac2a, -0x0001ac28, -0x0001ac25, -0x0001ac21, -0x0001ac20, -0x0001ac1c, -0x0001ac19, -0x0001ac17, -0x0001ac14, -0x0001ac11, -0x0001ac0f, -0x0001ac0c, -0x0001ac08, -0x0001ac07, -0x0001ac03, -0x0001ac00, -0x0001abfe, -0x0001abfb, -0x0001abf8, -0x0001abf4, -0x0001abf3, -0x0001abef, -0x0001abec, -0x0001abea, -0x0001abe7, -0x0001abe4, -0x0001abe2, -0x0001abdf, -0x0001abdb, -0x0001abda, -0x0001abd6, -0x0001abd3, -0x0001abd1, -0x0001abce, -0x0001abcb, -0x0001abc9, -0x0001abc5, -0x0001abc2, -0x0001abc0, -0x0001abbd, -0x0001abba, -0x0001abb8, -0x0001abb5, -0x0001abb1, -0x0001abb0, -0x0001abac, -0x0001aba9, -0x0001aba7, -0x0001aba3, -0x0001aba2, -0x0001ab9e, -0x0001ab9b, -0x0001ab99, -0x0001ab96, -0x0001ab93, -0x0001ab91, -0x0001ab8e, -0x0001ab8a, -0x0001ab89, -0x0001ab85, -0x0001ab82, -0x0001ab80, -0x0001ab7d, -0x0001ab7a, -0x0001ab78, -0x0001ab75, -0x0001ab71, -0x0001ab70, -0x0001ab6c, -0x0001ab69, -0x0001ab67, -0x0001ab64, -0x0001ab61, -0x0001ab5f, -0x0001ab5c, -0x0001ab58, -0x0001ab57, -0x0001ab53, -0x0001ab50, -0x0001ab4e, -0x0001ab4b, -0x0001ab48, -0x0001ab46, -0x0001ab43, -0x0001ab3f, -0x0001ab3e, -0x0001ab3a, -0x0001ab37, -0x0001ab35, -0x0001ab32, -0x0001ab2f, -0x0001ab2d, -0x0001ab2a, -0x0001ab26, -0x0001ab25, -0x0001ab21, -0x0001ab1e, -0x0001ab1c, -0x0001ab19, -0x0001ab16, -0x0001ab14, -0x0001ab11, -0x0001ab0d, -0x0001ab0c, -0x0001ab08, -0x0001ab05, -0x0001ab03, -0x0001ab00, -0x0001aafd, -0x0001aafb, -0x0001aaf8, -0x0001aaf4, -0x0001aaf3, -0x0001aaef, -0x0001aaec, -0x0001aae9, -0x0001aae7, -0x0001aae4, -0x0001aae0, -0x0001aadf, -0x0001aadb, -0x0001aad8, -0x0001aad6, -0x0001aad3, -0x0001aad0, -0x0001aace, -0x0001aacb, -0x0001aac7, -0x0001aac6, -0x0001aac2, -0x0001aabf, -0x0001aabd, -0x0001aaba, -0x0001aab7, -0x0001aab5, -0x0001aab2, -0x0001aaae, -0x0001aaad, -0x0001aaa9, -0x0001aaa6, -0x0001aaa4, -0x0001aaa1, -0x0001aa9e, -0x0001aa9c, -0x0001aa99, -0x0001aa95, -0x0001aa94, -0x0001aa90, -0x0001aa8d, -0x0001aa8b, -0x0001aa88, -0x0001aa85, -0x0001aa83, -0x0001aa80, -0x0001aa7c, -0x0001aa7b, -0x0001aa77, -0x0001aa74, -0x0001aa72, -0x0001aa6f, -0x0001aa6c, -0x0001aa6a, -0x0001aa67, -0x0001aa63, -0x0001aa62, -0x0001aa5e, -0x0001aa5b, -0x0001aa59, -0x0001aa56, -0x0001aa53, -0x0001aa51, -0x0001aa4e, -0x0001aa4a, -0x0001aa49, -0x0001aa45, -0x0001aa42, -0x0001aa41, -0x0001aa3e, -0x0001aa3a, -0x0001aa39, -0x0001aa35, -0x0001aa32, -0x0001aa30, -0x0001aa2d, -0x0001aa2a, -0x0001aa28, -0x0001aa25, -0x0001aa21, -0x0001aa20, -0x0001aa1c, -0x0001aa19, -0x0001aa17, -0x0001aa14, -0x0001aa11, -0x0001aa0f, -0x0001aa0c, -0x0001aa08, -0x0001aa07, -0x0001aa03, -0x0001aa00, -0x0001a9fe, -0x0001a9fb, -0x0001a9f8, -0x0001a9f6, -0x0001a9f3, -0x0001a9ef, -0x0001a9ee, -0x0001a9ea, -0x0001a9e7, -0x0001a9e5, -0x0001a9e2, -0x0001a9df, -0x0001a9dd, -0x0001a9da, -0x0001a9d6, -0x0001a9d5, -0x0001a9d1, -0x0001a9ce, -0x0001a9cc, -0x0001a9c9, -0x0001a9c6, -0x0001a9c4, -0x0001a9c1, -0x0001a9bd, -0x0001a9bc, -0x0001a9b8, -0x0001a9b5, -0x0001a9b3, -0x0001a9b0, -0x0001a9ad, -0x0001a9ab, -0x0001a9a8, -0x0001a9a4, -0x0001a9a3, -0x0001a99f, -0x0001a99c, -0x0001a99a, -0x0001a997, -0x0001a994, -0x0001a992, -0x0001a98f, -0x0001a98c, -0x0001a98a, -0x0001a987, -0x0001a983, -0x0001a982, -0x0001a97e, -0x0001a97b, -0x0001a979, -0x0001a976, -0x0001a973, -0x0001a971, -0x0001a96e, -0x0001a96a, -0x0001a969, -0x0001a965, -0x0001a962, -0x0001a960, -0x0001a95d, -0x0001a95a, -0x0001a958, -0x0001a955, -0x0001a951, -0x0001a950, -0x0001a94c, -0x0001a949, -0x0001a947, -0x0001a944, -0x0001a941, -0x0001a93f, -0x0001a93c, -0x0001a938, -0x0001a937, -0x0001a933, -0x0001a930, -0x0001a92e, -0x0001a92b, -0x0001a928, -0x0001a926, -0x0001a923, -0x0001a91f, -0x0001a91e, -0x0001a91a, -0x0001a917, -0x0001a915, -0x0001a912, -0x0001a90f, -0x0001a90d, -0x0001a90a, -0x0001a906, -0x0001a905, -0x0001a901, -0x0001a8fe, -0x0001a8fc, -0x0001a8f9, -0x0001a8f6, -0x0001a8f4, -0x0001a8f1, -0x0001a8ed, -0x0001a8ec, -0x0001a8e8, -0x0001a8e5, -0x0001a8e3, -0x0001a8e0, -0x0001a8de, -0x0001a8db, -0x0001a8d9, -0x0001a8d6, -0x0001a8d2, -0x0001a8d1, -0x0001a8cd, -0x0001a8ca, -0x0001a8c8, -0x0001a8c5, -0x0001a8c2, -0x0001a8c0, -0x0001a8bd, -0x0001a8ba, -0x0001a8b8, -0x0001a8b5, -0x0001a8b3, -0x0001a8b0, -0x0001a8ac, -0x0001a8ab, -0x0001a8a7, -0x0001a8a4, -0x0001a8a2, -0x0001a89f, -0x0001a89c, -0x0001a89a, -0x0001a897, -0x0001a893, -0x0001a892, -0x0001a88e, -0x0001a88b, -0x0001a889, -0x0001a886, -0x0001a883, -0x0001a881, -0x0001a87e, -0x0001a87b, -0x0001a879, -0x0001a876, -0x0001a872, -0x0001a871, -0x0001a86d, -0x0001a86a, -0x0001a868, -0x0001a865, -0x0001a862, -0x0001a860, -0x0001a85d, -0x0001a85b, -0x0001a858, -0x0001a854, -0x0001a853, -0x0001a850, -0x0001a84c, -0x0001a84b, -0x0001a847, -0x0001a844, -0x0001a842, -0x0001a83f, -0x0001a83c, -0x0001a83a, -0x0001a837, -0x0001a833, -0x0001a832, -0x0001a82e, -0x0001a82b, -0x0001a829, -0x0001a826, -0x0001a823, -0x0001a821, -0x0001a81e, -0x0001a81b, -0x0001a819, -0x0001a816, -0x0001a812, -0x0001a811, -0x0001a80d, -0x0001a80a, -0x0001a808, -0x0001a805, -0x0001a803, -0x0001a800, -0x0001a7fd, -0x0001a7fb, -0x0001a7f8, -0x0001a7f4, -0x0001a7f3, -0x0001a7ef, -0x0001a7ec, -0x0001a7ea, -0x0001a7e7, -0x0001a7e4, -0x0001a7e2, -0x0001a7df, -0x0001a7dc, -0x0001a7da, -0x0001a7d7, -0x0001a7d3, -0x0001a7d2, -0x0001a7ce, -0x0001a7cb, -0x0001a7c9, -0x0001a7c6, -0x0001a7c3, -0x0001a7c1, -0x0001a7be, -0x0001a7ba, -0x0001a7b9, -0x0001a7b5, -0x0001a7b2, -0x0001a7b1, -0x0001a7ad, -0x0001a7ac, -0x0001a7a8, -0x0001a7a5, -0x0001a7a3, -0x0001a7a0, -0x0001a79d, -0x0001a79b, -0x0001a798, -0x0001a794, -0x0001a793, -0x0001a78f, -0x0001a78c, -0x0001a78a, -0x0001a787, -0x0001a784, -0x0001a782, -0x0001a77f, -0x0001a77c, -0x0001a779, -0x0001a777, -0x0001a774, -0x0001a770, -0x0001a76f, -0x0001a76b, -0x0001a76a, -0x0001a766, -0x0001a763, -0x0001a761, -0x0001a75e, -0x0001a75b, -0x0001a759, -0x0001a756, -0x0001a753, -0x0001a751, -0x0001a74e, -0x0001a74a, -0x0001a749, -0x0001a745, -0x0001a742, -0x0001a740, -0x0001a73d, -0x0001a73a, -0x0001a738, -0x0001a735, -0x0001a732, -0x0001a730, -0x0001a72d, -0x0001a72b, -0x0001a728, -0x0001a724, -0x0001a723, -0x0001a71f, -0x0001a71c, -0x0001a71a, -0x0001a717, -0x0001a714, -0x0001a712, -0x0001a70f, -0x0001a70c, -0x0001a70a, -0x0001a707, -0x0001a703, -0x0001a702, -0x0001a6fe, -0x0001a6fb, -0x0001a6f9, -0x0001a6f6, -0x0001a6f3, -0x0001a6f1, -0x0001a6ee, -0x0001a6ec, -0x0001a6e9, -0x0001a6e6, -0x0001a6e4, -0x0001a6e1, -0x0001a6dd, -0x0001a6dc, -0x0001a6d8, -0x0001a6d5, -0x0001a6d3, -0x0001a6d0, -0x0001a6cd, -0x0001a6cb, -0x0001a6c8, -0x0001a6c5, -0x0001a6c3, -0x0001a6c0, -0x0001a6bc, -0x0001a6bb, -0x0001a6b7, -0x0001a6b4, -0x0001a6b2, -0x0001a6af, -0x0001a6ad, -0x0001a6aa, -0x0001a6a7, -0x0001a6a5, -0x0001a6a2, -0x0001a69f, -0x0001a69d, -0x0001a69a, -0x0001a696, -0x0001a695, -0x0001a691, -0x0001a68e, -0x0001a68c, -0x0001a689, -0x0001a686, -0x0001a684, -0x0001a681, -0x0001a67d, -0x0001a67c, -0x0001a679, -0x0001a675, -0x0001a674, -0x0001a670, -0x0001a66f, -0x0001a66b, -0x0001a668, -0x0001a666, -0x0001a663, -0x0001a660, -0x0001a65e, -0x0001a65b, -0x0001a657, -0x0001a656, -0x0001a653, -0x0001a64f, -0x0001a64e, -0x0001a64a, -0x0001a647, -0x0001a645, -0x0001a642, -0x0001a63f, -0x0001a63d, -0x0001a63a, -0x0001a636, -0x0001a635, -0x0001a631, -0x0001a630, -0x0001a62d, -0x0001a629, -0x0001a628, -0x0001a624, -0x0001a621, -0x0001a61e, -0x0001a61b, -0x0001a619, -0x0001a616, -0x0001a614, -0x0001a611, -0x0001a60e, -0x0001a60c, -0x0001a609, -0x0001a605, -0x0001a604, -0x0001a601, -0x0001a5fd, -0x0001a5fc, -0x0001a5f8, -0x0001a5f5, -0x0001a5f3, -0x0001a5f0, -0x0001a5ee, -0x0001a5eb, -0x0001a5e8, -0x0001a5e6, -0x0001a5e3, -0x0001a5e0, -0x0001a5de, -0x0001a5db, -0x0001a5d7, -0x0001a5d6, -0x0001a5d3, -0x0001a5cf, -0x0001a5ce, -0x0001a5ca, -0x0001a5c7, -0x0001a5c5, -0x0001a5c2, -0x0001a5c0, -0x0001a5bd, -0x0001a5ba, -0x0001a5b8, -0x0001a5b5, -0x0001a5b2, -0x0001a5b0, -0x0001a5ad, -0x0001a5a9, -0x0001a5a8, -0x0001a5a4, -0x0001a5a1, -0x0001a5a0, -0x0001a59c, -0x0001a59b, -0x0001a597, -0x0001a594, -0x0001a592, -0x0001a58f, -0x0001a58c, -0x0001a58a, -0x0001a587, -0x0001a584, -0x0001a582, -0x0001a57f, -0x0001a57b, -0x0001a57a, -0x0001a576, -0x0001a575, -0x0001a571, -0x0001a56e, -0x0001a56d, -0x0001a569, -0x0001a566, -0x0001a564, -0x0001a561, -0x0001a55e, -0x0001a55c, -0x0001a559, -0x0001a556, -0x0001a554, -0x0001a551, -0x0001a54d, -0x0001a54c, -0x0001a548, -0x0001a547, -0x0001a543, -0x0001a540, -0x0001a53e, -0x0001a53b, -0x0001a538, -0x0001a536, -0x0001a533, -0x0001a530, -0x0001a52e, -0x0001a52b, -0x0001a527, -0x0001a526, -0x0001a523, -0x0001a521, -0x0001a51e, -0x0001a51a, -0x0001a519, -0x0001a515, -0x0001a512, -0x0001a510, -0x0001a50d, -0x0001a50a, -0x0001a508, -0x0001a505, -0x0001a502, -0x0001a500, -0x0001a4fd, -0x0001a4f9, -0x0001a4f8, -0x0001a4f4, -0x0001a4f3, -0x0001a4f0, -0x0001a4ec, -0x0001a4eb, -0x0001a4e7, -0x0001a4e4, -0x0001a4e2, -0x0001a4df, -0x0001a4dc, -0x0001a4da, -0x0001a4d7, -0x0001a4d4, -0x0001a4d2, -0x0001a4cf, -0x0001a4cd, -0x0001a4ca, -0x0001a4c7, -0x0001a4c3, -0x0001a4c2, -0x0001a4be, -0x0001a4bb, -0x0001a4b9, -0x0001a4b6, -0x0001a4b4, -0x0001a4b1, -0x0001a4ae, -0x0001a4ac, -0x0001a4a9, -0x0001a4a6, -0x0001a4a4, -0x0001a4a1, -0x0001a49e, -0x0001a49c, -0x0001a499, -0x0001a495, -0x0001a494, -0x0001a490, -0x0001a48f, -0x0001a48b, -0x0001a488, -0x0001a487, -0x0001a483, -0x0001a480, -0x0001a47e, -0x0001a47b, -0x0001a478, -0x0001a476, -0x0001a473, -0x0001a471, -0x0001a46e, -0x0001a46b, -0x0001a469, -0x0001a466, -0x0001a462, -0x0001a461, -0x0001a45e, -0x0001a45a, -0x0001a459, -0x0001a455, -0x0001a452, -0x0001a450, -0x0001a44d, -0x0001a44b, -0x0001a448, -0x0001a445, -0x0001a443, -0x0001a440, -0x0001a43d, -0x0001a43b, -0x0001a438, -0x0001a435, -0x0001a433, -0x0001a430, -0x0001a42c, -0x0001a42b, -0x0001a427, -0x0001a426, -0x0001a422, -0x0001a41f, -0x0001a41e, -0x0001a41a, -0x0001a417, -0x0001a415, -0x0001a412, -0x0001a40f, -0x0001a40d, -0x0001a40a, -0x0001a408, -0x0001a405, -0x0001a402, -0x0001a400, -0x0001a3fd, -0x0001a3f9, -0x0001a3f8, -0x0001a3f5, -0x0001a3f1, -0x0001a3f0, -0x0001a3ec, -0x0001a3e9, -0x0001a3e7, -0x0001a3e4, -0x0001a3e2, -0x0001a3df, -0x0001a3dc, -0x0001a3da, -0x0001a3d7, -0x0001a3d4, -0x0001a3d2, -0x0001a3cf, -0x0001a3cc, -0x0001a3ca, -0x0001a3c7, -0x0001a3c5, -0x0001a3c2, -0x0001a3be, -0x0001a3bd, -0x0001a3b9, -0x0001a3b6, -0x0001a3b5, -0x0001a3b1, -0x0001a3ae, -0x0001a3ac, -0x0001a3a9, -0x0001a3a6, -0x0001a3a4, -0x0001a3a1, -0x0001a39f, -0x0001a39c, -0x0001a399, -0x0001a397, -0x0001a394, -0x0001a390, -0x0001a38f, -0x0001a38c, -0x0001a388, -0x0001a387, -0x0001a383, -0x0001a380, -0x0001a37e, -0x0001a37b, -0x0001a379, -0x0001a376, -0x0001a373, -0x0001a371, -0x0001a36e, -0x0001a36c, -0x0001a369, -0x0001a365, -0x0001a364, -0x0001a361, -0x0001a35d, -0x0001a35c, -0x0001a358, -0x0001a357, -0x0001a353, -0x0001a350, -0x0001a34f, -0x0001a34b, -0x0001a348, -0x0001a346, -0x0001a343, -0x0001a340, -0x0001a33e, -0x0001a33b, -0x0001a339, -0x0001a336, -0x0001a333, -0x0001a331, -0x0001a32e, -0x0001a32b, -0x0001a329, -0x0001a326, -0x0001a322, -0x0001a321, -0x0001a31d, -0x0001a31c, -0x0001a319, -0x0001a315, -0x0001a314, -0x0001a310, -0x0001a30d, -0x0001a30b, -0x0001a308, -0x0001a305, -0x0001a303, -0x0001a300, -0x0001a2fe, -0x0001a2fb, -0x0001a2f8, -0x0001a2f6, -0x0001a2f3, -0x0001a2f0, -0x0001a2ee, -0x0001a2eb, -0x0001a2e7, -0x0001a2e6, -0x0001a2e3, -0x0001a2e1, -0x0001a2de, -0x0001a2da, -0x0001a2d9, -0x0001a2d5, -0x0001a2d2, -0x0001a2d1, -0x0001a2cd, -0x0001a2ca, -0x0001a2c8, -0x0001a2c5, -0x0001a2c3, -0x0001a2c0, -0x0001a2bd, -0x0001a2bb, -0x0001a2b8, -0x0001a2b5, -0x0001a2b3, -0x0001a2b0, -0x0001a2ad, -0x0001a2ab, -0x0001a2a8, -0x0001a2a4, -0x0001a2a3, -0x0001a29f, -0x0001a29e, -0x0001a29b, -0x0001a297, -0x0001a296, -0x0001a292, -0x0001a28f, -0x0001a28d, -0x0001a28a, -0x0001a287, -0x0001a285, -0x0001a282, -0x0001a280, -0x0001a27d, -0x0001a27a, -0x0001a278, -0x0001a275, -0x0001a272, -0x0001a270, -0x0001a26d, -0x0001a269, -0x0001a268, -0x0001a265, -0x0001a263, -0x0001a260, -0x0001a25c, -0x0001a25b, -0x0001a257, -0x0001a254, -0x0001a253, -0x0001a24f, -0x0001a24c, -0x0001a24a, -0x0001a247, -0x0001a245, -0x0001a242, -0x0001a23f, -0x0001a23d, -0x0001a23a, -0x0001a237, -0x0001a235, -0x0001a232, -0x0001a22f, -0x0001a22d, -0x0001a22a, -0x0001a228, -0x0001a225, -0x0001a221, -0x0001a220, -0x0001a21c, -0x0001a219, -0x0001a217, -0x0001a215, -0x0001a212, -0x0001a20e, -0x0001a20d, -0x0001a20a, -0x0001a206, -0x0001a205, -0x0001a201, -0x0001a200, -0x0001a1fc, -0x0001a1f9, -0x0001a1f8, -0x0001a1f4, -0x0001a1f1, -0x0001a1ef, -0x0001a1ec, -0x0001a1eb, -0x0001a1e7, -0x0001a1e4, -0x0001a1e2, -0x0001a1df, -0x0001a1dc, -0x0001a1da, -0x0001a1d7, -0x0001a1d5, -0x0001a1d2, -0x0001a1cf, -0x0001a1cd, -0x0001a1ca, -0x0001a1c7, -0x0001a1c5, -0x0001a1c2, -0x0001a1bf, -0x0001a1bd, -0x0001a1ba, -0x0001a1b8, -0x0001a1b5, -0x0001a1b2, -0x0001a1b0, -0x0001a1ad, -0x0001a1a9, -0x0001a1a8, -0x0001a1a5, -0x0001a1a3, -0x0001a1a0, -0x0001a19c, -0x0001a19b, -0x0001a197, -0x0001a194, -0x0001a193, -0x0001a18f, -0x0001a18e, -0x0001a18a, -0x0001a187, -0x0001a186, -0x0001a182, -0x0001a17f, -0x0001a17d, -0x0001a17a, -0x0001a179, -0x0001a175, -0x0001a172, -0x0001a170, -0x0001a16d, -0x0001a16a, -0x0001a168, -0x0001a165, -0x0001a162, -0x0001a160, -0x0001a15d, -0x0001a15b, -0x0001a158, -0x0001a155, -0x0001a153, -0x0001a150, -0x0001a14d, -0x0001a14b, -0x0001a148, -0x0001a146, -0x0001a143, -0x0001a140, -0x0001a13e, -0x0001a13b, -0x0001a137, -0x0001a136, -0x0001a132, -0x0001a131, -0x0001a12e, -0x0001a12a, -0x0001a129, -0x0001a125, -0x0001a122, -0x0001a121, -0x0001a11d, -0x0001a11c, -0x0001a118, -0x0001a115, -0x0001a114, -0x0001a110, -0x0001a10d, -0x0001a10b, -0x0001a108, -0x0001a105, -0x0001a103, -0x0001a100, -0x0001a0fe, -0x0001a0fb, -0x0001a0f8, -0x0001a0f6, -0x0001a0f3, -0x0001a0f0, -0x0001a0ee, -0x0001a0eb, -0x0001a0e9, -0x0001a0e6, -0x0001a0e3, -0x0001a0e1, -0x0001a0de, -0x0001a0db, -0x0001a0d9, -0x0001a0d6, -0x0001a0d4, -0x0001a0d1, -0x0001a0ce, -0x0001a0cc, -0x0001a0c9, -0x0001a0c5, -0x0001a0c3, -0x0001a0c0, -0x0001a0be, -0x0001a0bb, -0x0001a0b9, -0x0001a0b6, -0x0001a0b3, -0x0001a0b1, -0x0001a0ae, -0x0001a0ab, -0x0001a0a9, -0x0001a0a6, -0x0001a0a4, -0x0001a0a1, -0x0001a09e, -0x0001a09c, -0x0001a099, -0x0001a096, -0x0001a094, -0x0001a091, -0x0001a08f, -0x0001a08c, -0x0001a089, -0x0001a087, -0x0001a084, -0x0001a080, -0x0001a07f, -0x0001a07c, -0x0001a07a, -0x0001a077, -0x0001a073, -0x0001a072, -0x0001a06f, -0x0001a06b, -0x0001a06a, -0x0001a066, -0x0001a065, -0x0001a062, -0x0001a05e, -0x0001a05d, -0x0001a059, -0x0001a056, -0x0001a055, -0x0001a051, -0x0001a050, -0x0001a04c, -0x0001a049, -0x0001a048, -0x0001a044, -0x0001a041, -0x0001a03f, -0x0001a03c, -0x0001a03b, -0x0001a037, -0x0001a034, -0x0001a032, -0x0001a02f, -0x0001a02c, -0x0001a02a, -0x0001a027, -0x0001a025, -0x0001a022, -0x0001a01f, -0x0001a01d, -0x0001a01a, -0x0001a017, -0x0001a015, -0x0001a012, -0x0001a010, -0x0001a00d, -0x0001a00a, -0x0001a008, -0x0001a005, -0x0001a002, -0x0001a000, -0x00019ffd, -0x00019ffb, -0x00019ff8, -0x00019ff5, -0x00019ff3, -0x00019ff0, -0x00019fed, -0x00019feb, -0x00019fe8, -0x00019fe6, -0x00019fe3, -0x00019fe0, -0x00019fde, -0x00019fdb, -0x00019fd7, -0x00019fd6, -0x00019fd3, -0x00019fd1, -0x00019fce, -0x00019fca, -0x00019fc9, -0x00019fc6, -0x00019fc2, -0x00019fc1, -0x00019fbd, -0x00019fbc, -0x00019fb9, -0x00019fb5, -0x00019fb4, -0x00019fb0, -0x00019fad, -0x00019fac, -0x00019fa8, -0x00019fa7, -0x00019fa3, -0x00019fa0, -0x00019f9f, -0x00019f9b, -0x00019f98, -0x00019f96, -0x00019f93, -0x00019f92, -0x00019f8e, -0x00019f8b, -0x00019f89, -0x00019f86, -0x00019f83, -0x00019f81, -0x00019f7e, -0x00019f7c, -0x00019f79, -0x00019f76, -0x00019f74, -0x00019f71, -0x00019f6e, -0x00019f6d, -0x00019f69, -0x00019f66, -0x00019f65, -0x00019f61, -0x00019f5e, -0x00019f5c, -0x00019f59, -0x00019f58, -0x00019f54, -0x00019f51, -0x00019f4f, -0x00019f4c, -0x00019f49, -0x00019f47, -0x00019f44, -0x00019f42, -0x00019f3f, -0x00019f3c, -0x00019f3a, -0x00019f37, -0x00019f34, -0x00019f32, -0x00019f2f, -0x00019f2d, -0x00019f2a, -0x00019f27, -0x00019f25, -0x00019f22, -0x00019f1f, -0x00019f1d, -0x00019f1a, -0x00019f18, -0x00019f15, -0x00019f12, -0x00019f10, -0x00019f0d, -0x00019f0b, -0x00019f08, -0x00019f05, -0x00019f03, -0x00019f00, -0x00019efd, -0x00019efb, -0x00019ef8, -0x00019ef6, -0x00019ef3, -0x00019ef0, -0x00019eee, -0x00019eeb, -0x00019ee8, -0x00019ee6, -0x00019ee3, -0x00019ee1, -0x00019ede, -0x00019edb, -0x00019ed9, -0x00019ed6, -0x00019ed3, -0x00019ed1, -0x00019ece, -0x00019ecc, -0x00019ec9, -0x00019ec6, -0x00019ec4, -0x00019ec1, -0x00019ebf, -0x00019ebc, -0x00019eb9, -0x00019eb7, -0x00019eb4, -0x00019eb1, -0x00019eaf, -0x00019eac, -0x00019eaa, -0x00019ea7, -0x00019ea4, -0x00019ea2, -0x00019e9f, -0x00019e9b, -0x00019e9a, -0x00019e97, -0x00019e95, -0x00019e92, -0x00019e8f, -0x00019e8d, -0x00019e8a, -0x00019e86, -0x00019e85, -0x00019e82, -0x00019e80, -0x00019e7d, -0x00019e79, -0x00019e78, -0x00019e75, -0x00019e73, -0x00019e70, -0x00019e6c, -0x00019e6b, -0x00019e68, -0x00019e64, -0x00019e63, -0x00019e60, -0x00019e5e, -0x00019e5b, -0x00019e57, -0x00019e56, -0x00019e53, -0x00019e4f, -0x00019e4e, -0x00019e4a, -0x00019e49, -0x00019e46, -0x00019e42, -0x00019e41, -0x00019e3d, -0x00019e3a, -0x00019e39, -0x00019e35, -0x00019e34, -0x00019e31, -0x00019e2d, -0x00019e2c, -0x00019e28, -0x00019e25, -0x00019e24, -0x00019e21, -0x00019e1e, -0x00019e1c, -0x00019e19, -0x00019e15, -0x00019e14, -0x00019e11, -0x00019e0d, -0x00019e0c, -0x00019e09, -0x00019e07, -0x00019e04, -0x00019e01, -0x00019dff, -0x00019dfc, -0x00019dfa, -0x00019df7, -0x00019df4, -0x00019df2, -0x00019def, -0x00019dec, -0x00019dea, -0x00019de7, -0x00019de5, -0x00019de2, -0x00019ddf, -0x00019ddd, -0x00019dda, -0x00019dd8, -0x00019dd5, -0x00019dd2, -0x00019dd0, -0x00019dcd, -0x00019dcb, -0x00019dc8, -0x00019dc5, -0x00019dc3, -0x00019dc0, -0x00019dbd, -0x00019dbb, -0x00019db8, -0x00019db6, -0x00019db3, -0x00019db0, -0x00019dae, -0x00019dab, -0x00019da9, -0x00019da6, -0x00019da3, -0x00019da1, -0x00019d9e, -0x00019d9b, -0x00019d99, -0x00019d96, -0x00019d94, -0x00019d91, -0x00019d8e, -0x00019d8c, -0x00019d89, -0x00019d88, -0x00019d84, -0x00019d81, -0x00019d7f, -0x00019d7c, -0x00019d7b, -0x00019d77, -0x00019d74, -0x00019d73, -0x00019d6f, -0x00019d6c, -0x00019d6a, -0x00019d67, -0x00019d66, -0x00019d62, -0x00019d5f, -0x00019d5e, -0x00019d5a, -0x00019d59, -0x00019d56, -0x00019d52, -0x00019d51, -0x00019d4d, -0x00019d4a, -0x00019d49, -0x00019d45, -0x00019d44, -0x00019d41, -0x00019d3d, -0x00019d3c, -0x00019d38, -0x00019d37, -0x00019d34, -0x00019d30, -0x00019d2f, -0x00019d2c, -0x00019d28, -0x00019d27, -0x00019d23, -0x00019d22, -0x00019d1f, -0x00019d1b, -0x00019d1a, -0x00019d17, -0x00019d15, -0x00019d12, -0x00019d0f, -0x00019d0d, -0x00019d0a, -0x00019d08, -0x00019d05, -0x00019d02, -0x00019d00, -0x00019cfd, -0x00019cfa, -0x00019cf8, -0x00019cf5, -0x00019cf3, -0x00019cf0, -0x00019ced, -0x00019ceb, -0x00019ce8, -0x00019ce6, -0x00019ce3, -0x00019ce0, -0x00019cde, -0x00019cdb, -0x00019cd8, -0x00019cd6, -0x00019cd3, -0x00019cd0, -0x00019cce, -0x00019ccb, -0x00019cc9, -0x00019cc6, -0x00019cc3, -0x00019cc1, -0x00019cbe, -0x00019cbc, -0x00019cb9, -0x00019cb6, -0x00019cb4, -0x00019cb1, -0x00019cae, -0x00019cac, -0x00019ca9, -0x00019ca7, -0x00019ca4, -0x00019ca1, -0x00019c9f, -0x00019c9c, -0x00019c9b, -0x00019c97, -0x00019c94, -0x00019c92, -0x00019c8f, -0x00019c8e, -0x00019c8a, -0x00019c87, -0x00019c86, -0x00019c82, -0x00019c81, -0x00019c7e, -0x00019c7a, -0x00019c79, -0x00019c75, -0x00019c72, -0x00019c71, -0x00019c6d, -0x00019c6c, -0x00019c69, -0x00019c65, -0x00019c64, -0x00019c61, -0x00019c5f, -0x00019c5c, -0x00019c59, -0x00019c57, -0x00019c54, -0x00019c52, -0x00019c4f, -0x00019c4c, -0x00019c4a, -0x00019c47, -0x00019c44, -0x00019c42, -0x00019c3f, -0x00019c3d, -0x00019c3a, -0x00019c37, -0x00019c35, -0x00019c32, -0x00019c30, -0x00019c2d, -0x00019c2a, -0x00019c28, -0x00019c25, -0x00019c23, -0x00019c20, -0x00019c1d, -0x00019c1b, -0x00019c18, -0x00019c17, -0x00019c13, -0x00019c10, -0x00019c0e, -0x00019c0b, -0x00019c08, -0x00019c06, -0x00019c03, -0x00019c02, -0x00019bfe, -0x00019bfb, -0x00019bfa, -0x00019bf6, -0x00019bf5, -0x00019bf2, -0x00019bee, -0x00019bed, -0x00019be9, -0x00019be8, -0x00019be5, -0x00019be1, -0x00019be0, -0x00019bdd, -0x00019bdb, -0x00019bd8, -0x00019bd5, -0x00019bd3, -0x00019bd0, -0x00019bcd, -0x00019bcb, -0x00019bc8, -0x00019bc6, -0x00019bc3, -0x00019bc0, -0x00019bbe, -0x00019bbb, -0x00019bb9, -0x00019bb6, -0x00019bb3, -0x00019bb1, -0x00019bae, -0x00019bac, -0x00019ba9, -0x00019ba6, -0x00019ba4, -0x00019ba1, -0x00019b9e, -0x00019b9c, -0x00019b99, -0x00019b97, -0x00019b94, -0x00019b91, -0x00019b8f, -0x00019b8c, -0x00019b8b, -0x00019b87, -0x00019b85, -0x00019b82, -0x00019b7f, -0x00019b7d, -0x00019b7a, -0x00019b78, -0x00019b75, -0x00019b72, -0x00019b70, -0x00019b6d, -0x00019b6c, -0x00019b68, -0x00019b65, -0x00019b64, -0x00019b60, -0x00019b5f, -0x00019b5c, -0x00019b58, -0x00019b57, -0x00019b53, -0x00019b52, -0x00019b4f, -0x00019b4b, -0x00019b4a, -0x00019b47, -0x00019b45, -0x00019b42, -0x00019b3f, -0x00019b3d, -0x00019b3a, -0x00019b37, -0x00019b35, -0x00019b32, -0x00019b30, -0x00019b2d, -0x00019b2a, -0x00019b28, -0x00019b25, -0x00019b23, -0x00019b20, -0x00019b1d, -0x00019b1b, -0x00019b18, -0x00019b16, -0x00019b13, -0x00019b10, -0x00019b0e, -0x00019b0b, -0x00019b0a, -0x00019b06, -0x00019b03, -0x00019b02, -0x00019afe, -0x00019afd, -0x00019afa, -0x00019af6, -0x00019af5, -0x00019af2, -0x00019af0, -0x00019aed, -0x00019aea, -0x00019ae8, -0x00019ae5, -0x00019ae3, -0x00019ae0, -0x00019add, -0x00019adb, -0x00019ad8, -0x00019ad5, -0x00019ad3, -0x00019ad0, -0x00019ace, -0x00019acb, -0x00019ac8, -0x00019ac6, -0x00019ac3, -0x00019ac1, -0x00019abe, -0x00019abb, -0x00019ab9, -0x00019ab6, -0x00019ab5, -0x00019ab1, -0x00019aae, -0x00019aad, -0x00019aa9, -0x00019aa8, -0x00019aa4, -0x00019aa1, -0x00019aa0, -0x00019a9c, -0x00019a9b, -0x00019a98, -0x00019a94, -0x00019a93, -0x00019a90, -0x00019a8e, -0x00019a8b, -0x00019a88, -0x00019a86, -0x00019a83, -0x00019a80, -0x00019a7e, -0x00019a7b, -0x00019a79, -0x00019a76, -0x00019a73, -0x00019a71, -0x00019a6e, -0x00019a6c, -0x00019a69, -0x00019a66, -0x00019a64, -0x00019a61, -0x00019a5f, -0x00019a5c, -0x00019a59, -0x00019a57, -0x00019a54, -0x00019a53, -0x00019a4f, -0x00019a4c, -0x00019a4b, -0x00019a47, -0x00019a46, -0x00019a43, -0x00019a3f, -0x00019a3e, -0x00019a3b, -0x00019a38, -0x00019a36, -0x00019a33, -0x00019a30, -0x00019a2e, -0x00019a2b, -0x00019a2a, -0x00019a26, -0x00019a23, -0x00019a22, -0x00019a1e, -0x00019a1d, -0x00019a1a, -0x00019a16, -0x00019a15, -0x00019a12, -0x00019a10, -0x00019a0d, -0x00019a0a, -0x00019a08, -0x00019a05, -0x00019a03, -0x00019a00, -0x000199fd, -0x000199fb, -0x000199f8, -0x000199f6, -0x000199f3, -0x000199f0, -0x000199ee, -0x000199eb, -0x000199ea, -0x000199e6, -0x000199e3, -0x000199e2, -0x000199de, -0x000199dd, -0x000199da, -0x000199d6, -0x000199d5, -0x000199d2, -0x000199d0, -0x000199cd, -0x000199ca, -0x000199c8, -0x000199c5, -0x000199c3, -0x000199c0, -0x000199bd, -0x000199bb, -0x000199b8, -0x000199b6, -0x000199b3, -0x000199b0, -0x000199ae, -0x000199ab, -0x000199aa, -0x000199a6, -0x000199a3, -0x000199a2, -0x0001999e, -0x0001999d, -0x0001999a, -0x00019996, -0x00019995, -0x00019991, -0x00019990, -0x0001998d, -0x00019989, -0x00019988, -0x00019985, -0x00019983, -0x00019980, -0x0001997d, -0x0001997b, -0x00019978, -0x00019976, -0x00019973, -0x00019970, -0x0001996e, -0x0001996b, -0x00019969, -0x00019966, -0x00019963, -0x00019961, -0x0001995e, -0x0001995d, -0x00019959, -0x00019956, -0x00019955, -0x00019951, -0x00019950, -0x0001994d, -0x00019949, -0x00019948, -0x00019945, -0x00019943, -0x00019940, -0x0001993d, -0x0001993b, -0x00019938, -0x00019936, -0x00019933, -0x00019930, -0x0001992e, -0x0001992b, -0x00019929, -0x00019926, -0x00019923, -0x00019921, -0x0001991e, -0x0001991d, -0x00019919, -0x00019916, -0x00019915, -0x00019911, -0x00019910, -0x0001990d, -0x00019909, -0x00019908, -0x00019905, -0x00019903, -0x00019900, -0x000198fd, -0x000198fb, -0x000198f8, -0x000198f5, -0x000198f2, -0x000198f1, -0x000198ed, -0x000198ec, -0x000198e9, -0x000198e6, -0x000198e4, -0x000198e1, -0x000198df, -0x000198dc, -0x000198d9, -0x000198d7, -0x000198d4, -0x000198d2, -0x000198cf, -0x000198ce, -0x000198ca, -0x000198c7, -0x000198c6, -0x000198c2, -0x000198c1, -0x000198be, -0x000198ba, -0x000198b9, -0x000198b6, -0x000198b4, -0x000198b1, -0x000198ae, -0x000198ac, -0x000198a9, -0x000198a7, -0x000198a4, -0x000198a1, -0x0001989f, -0x0001989c, -0x0001989b, -0x00019897, -0x00019894, -0x00019893, -0x0001988f, -0x0001988e, -0x0001988b, -0x00019887, -0x00019886, -0x00019883, -0x00019881, -0x0001987e, -0x0001987c, -0x00019879, -0x00019876, -0x00019874, -0x00019871, -0x00019870, -0x0001986c, -0x00019869, -0x00019868, -0x00019864, -0x00019863, -0x00019860, -0x0001985c, -0x0001985b, -0x00019858, -0x00019856, -0x00019853, -0x00019850, -0x0001984e, -0x0001984b, -0x00019849, -0x00019846, -0x00019843, -0x00019841, -0x0001983e, -0x0001983d, -0x00019839, -0x00019836, -0x00019835, -0x00019831, -0x00019830, -0x0001982d, -0x0001982b, -0x00019828, -0x00019825, -0x00019823, -0x00019820, -0x0001981e, -0x0001981b, -0x00019818, -0x00019816, -0x00019813, -0x00019812, -0x0001980e, -0x0001980b, -0x0001980a, -0x00019806, -0x00019805, -0x00019802, -0x000197fe, -0x000197fd, -0x000197fa, -0x000197f8, -0x000197f5, -0x000197f2, -0x000197f0, -0x000197ed, -0x000197eb, -0x000197e8, -0x000197e5, -0x000197e3, -0x000197e0, -0x000197df, -0x000197db, -0x000197da, -0x000197d7, -0x000197d3, -0x000197d2, -0x000197cf, -0x000197cd, -0x000197ca, -0x000197c7, -0x000197c5, -0x000197c2, -0x000197c0, -0x000197bd, -0x000197ba, -0x000197b8, -0x000197b5, -0x000197b4, -0x000197b0, -0x000197ad, -0x000197ac, -0x000197a9, -0x000197a5, -0x000197a4, -0x000197a1, -0x0001979f, -0x0001979c, -0x00019799, -0x00019797, -0x00019794, -0x00019792, -0x0001978f, -0x0001978c, -0x0001978a, -0x00019787, -0x00019786, -0x00019782, -0x00019781, -0x0001977e, -0x0001977a, -0x00019779, -0x00019776, -0x00019774, -0x00019771, -0x0001976e, -0x0001976c, -0x00019769, -0x00019767, -0x00019764, -0x00019761, -0x0001975f, -0x0001975c, -0x0001975b, -0x00019757, -0x00019756, -0x00019753, -0x0001974f, -0x0001974e, -0x0001974b, -0x00019749, -0x00019746, -0x00019743, -0x00019741, -0x0001973e, -0x0001973c, -0x00019739, -0x00019736, -0x00019734, -0x00019731, -0x00019730, -0x0001972d, -0x00019729, -0x00019728, -0x00019725, -0x00019723, -0x00019720, -0x0001971e, -0x0001971b, -0x00019718, -0x00019716, -0x00019713, -0x00019711, -0x0001970e, -0x0001970b, -0x0001970a, -0x00019706, -0x00019705, -0x00019702, -0x000196fe, -0x000196fd, -0x000196fa, -0x000196f8, -0x000196f5, -0x000196f3, -0x000196f0, -0x000196ed, -0x000196eb, -0x000196e8, -0x000196e7, -0x000196e3, -0x000196e0, -0x000196df, -0x000196db, -0x000196da, -0x000196d7, -0x000196d3, -0x000196d2, -0x000196cf, -0x000196cd, -0x000196ca, -0x000196c7, -0x000196c5, -0x000196c2, -0x000196c0, -0x000196bd, -0x000196bc, -0x000196b8, -0x000196b5, -0x000196b4, -0x000196b1, -0x000196af, -0x000196ac, -0x000196a9, -0x000196a7, -0x000196a4, -0x000196a2, -0x0001969f, -0x0001969c, -0x0001969a, -0x00019697, -0x00019695, -0x00019692, -0x00019691, -0x0001968e, -0x0001968a, -0x00019689, -0x00019686, -0x00019684, -0x00019681, -0x0001967e, -0x0001967c, -0x00019679, -0x00019677, -0x00019674, -0x00019671, -0x0001966f, -0x0001966d, -0x0001966a, -0x00019667, -0x00019666, -0x00019662, -0x00019661, -0x0001965e, -0x0001965a, -0x00019659, -0x00019656, -0x00019654, -0x00019651, -0x0001964e, -0x0001964c, -0x00019649, -0x00019647, -0x00019644, -0x00019643, -0x0001963f, -0x0001963c, -0x0001963b, -0x00019638, -0x00019636, -0x00019633, -0x00019630, -0x0001962e, -0x0001962b, -0x00019629, -0x00019626, -0x00019624, -0x00019621, -0x0001961e, -0x0001961d, -0x00019619, -0x00019618, -0x00019615, -0x00019611, -0x00019610, -0x0001960d, -0x0001960b, -0x00019608, -0x00019605, -0x00019603, -0x00019600, -0x000195fe, -0x000195fb, -0x000195fa, -0x000195f6, -0x000195f3, -0x000195f2, -0x000195ef, -0x000195ed, -0x000195ea, -0x000195e7, -0x000195e5, -0x000195e2, -0x000195e0, -0x000195dd, -0x000195dc, -0x000195d8, -0x000195d5, -0x000195d4, -0x000195d0, -0x000195cf, -0x000195cc, -0x000195c8, -0x000195c7, -0x000195c4, -0x000195c2, -0x000195bf, -0x000195bc, -0x000195ba, -0x000195b7, -0x000195b5, -0x000195b2, -0x000195b1, -0x000195ae, -0x000195aa, -0x000195a9, -0x000195a6, -0x000195a4, -0x000195a1, -0x0001959e, -0x0001959c, -0x00019599, -0x00019597, -0x00019594, -0x00019593, -0x0001958f, -0x0001958c, -0x0001958b, -0x00019587, -0x00019586, -0x00019583, -0x00019580, -0x0001957e, -0x0001957b, -0x00019579, -0x00019576, -0x00019573, -0x00019571, -0x0001956e, -0x0001956d, -0x00019569, -0x00019568, -0x00019565, -0x00019561, -0x00019560, -0x0001955d, -0x0001955b, -0x00019558, -0x00019555, -0x00019553, -0x00019550, -0x0001954e, -0x0001954b, -0x0001954a, -0x00019546, -0x00019543, -0x00019542, -0x0001953f, -0x0001953d, -0x0001953a, -0x00019537, -0x00019535, -0x00019532, -0x00019530, -0x0001952d, -0x0001952b, -0x00019529, -0x00019526, -0x00019524, -0x00019521, -0x0001951e, -0x0001951c, -0x00019519, -0x00019518, -0x00019515, -0x00019511, -0x00019510, -0x0001950d, -0x0001950b, -0x00019508, -0x00019506, -0x00019503, -0x00019500, -0x000194fe, -0x000194fb, -0x000194fa, -0x000194f7, -0x000194f3, -0x000194f2, -0x000194ef, -0x000194ed, -0x000194ea, -0x000194e8, -0x000194e5, -0x000194e2, -0x000194e0, -0x000194dd, -0x000194dc, -0x000194d8, -0x000194d5, -0x000194d4, -0x000194d1, -0x000194cf, -0x000194cc, -0x000194ca, -0x000194c7, -0x000194c4, -0x000194c2, -0x000194bf, -0x000194be, -0x000194ba, -0x000194b7, -0x000194b6, -0x000194b2, -0x000194b1, -0x000194ae, -0x000194ac, -0x000194a9, -0x000194a6, -0x000194a4, -0x000194a1, -0x0001949f, -0x0001949c, -0x00019499, -0x00019498, -0x00019494, -0x00019493, -0x00019490, -0x0001948e, -0x0001948b, -0x00019488, -0x00019486, -0x00019483, -0x00019481, -0x0001947e, -0x0001947d, -0x0001947a, -0x00019476, -0x00019475, -0x00019472, -0x00019470, -0x0001946d, -0x0001946a, -0x00019468, -0x00019465, -0x00019463, -0x00019460, -0x0001945f, -0x0001945b, -0x00019458, -0x00019457, -0x00019454, -0x00019452, -0x0001944f, -0x0001944c, -0x0001944a, -0x00019447, -0x00019445, -0x00019442, -0x00019441, -0x0001943d, -0x0001943a, -0x00019439, -0x00019436, -0x00019434, -0x00019431, -0x0001942e, -0x0001942c, -0x00019429, -0x00019427, -0x00019424, -0x00019423, -0x0001941f, -0x0001941c, -0x0001941b, -0x00019417, -0x00019416, -0x00019413, -0x00019410, -0x0001940e, -0x0001940b, -0x00019409, -0x00019406, -0x00019404, -0x00019401, -0x000193fe, -0x000193fd, -0x000193f9, -0x000193f8, -0x000193f5, -0x000193f1, -0x000193f0, -0x000193ed, -0x000193eb, -0x000193e9, -0x000193e6, -0x000193e4, -0x000193e1, -0x000193de, -0x000193dc, -0x000193d9, -0x000193d8, -0x000193d5, -0x000193d3, -0x000193d0, -0x000193cd, -0x000193cb, -0x000193c8, -0x000193c6, -0x000193c3, -0x000193c0, -0x000193be, -0x000193bb, -0x000193ba, -0x000193b7, -0x000193b5, -0x000193b2, -0x000193af, -0x000193ad, -0x000193aa, -0x000193a8, -0x000193a5, -0x000193a4, -0x000193a1, -0x0001939d, -0x0001939c, -0x00019399, -0x00019397, -0x00019394, -0x00019392, -0x0001938f, -0x0001938c, -0x0001938b, -0x00019387, -0x00019386, -0x00019383, -0x00019381, -0x0001937e, -0x0001937b, -0x00019379, -0x00019376, -0x00019374, -0x00019371, -0x00019370, -0x0001936d, -0x00019369, -0x00019368, -0x00019365, -0x00019363, -0x00019360, -0x0001935e, -0x0001935b, -0x00019358, -0x00019357, -0x00019353, -0x00019352, -0x0001934f, -0x0001934d, -0x0001934a, -0x00019347, -0x00019345, -0x00019342, -0x00019341, -0x0001933d, -0x0001933a, -0x00019339, -0x00019336, -0x00019334, -0x00019331, -0x0001932f, -0x0001932c, -0x00019329, -0x00019327, -0x00019324, -0x00019323, -0x0001931f, -0x0001931e, -0x0001931b, -0x00019318, -0x00019316, -0x00019313, -0x00019311, -0x0001930e, -0x0001930d, -0x00019309, -0x00019306, -0x00019305, -0x00019302, -0x00019300, -0x000192fd, -0x000192fb, -0x000192f8, -0x000192f5, -0x000192f3, -0x000192f0, -0x000192ef, -0x000192ec, -0x000192ea, -0x000192e7, -0x000192e4, -0x000192e2, -0x000192df, -0x000192dd, -0x000192da, -0x000192d9, -0x000192d5, -0x000192d2, -0x000192d1, -0x000192ce, -0x000192cc, -0x000192c9, -0x000192c6, -0x000192c4, -0x000192c1, -0x000192bf, -0x000192bc, -0x000192bb, -0x000192b8, -0x000192b4, -0x000192b3, -0x000192b0, -0x000192ae, -0x000192ab, -0x000192a8, -0x000192a6, -0x000192a3, -0x000192a2, -0x0001929f, -0x0001929d, -0x0001929a, -0x00019297, -0x00019295, -0x00019292, -0x00019290, -0x0001928d, -0x0001928c, -0x00019289, -0x00019285, -0x00019284, -0x00019281, -0x0001927f, -0x0001927c, -0x0001927a, -0x00019277, -0x00019274, -0x00019273, -0x0001926f, -0x0001926e, -0x0001926b, -0x00019269, -0x00019266, -0x00019263, -0x00019261, -0x0001925e, -0x0001925d, -0x0001925a, -0x00019258, -0x00019255, -0x00019252, -0x00019250, -0x0001924d, -0x0001924b, -0x00019248, -0x00019247, -0x00019244, -0x00019240, -0x0001923f, -0x0001923c, -0x0001923a, -0x00019237, -0x00019235, -0x00019232, -0x0001922f, -0x0001922e, -0x0001922a, -0x00019229, -0x00019226, -0x00019224, -0x00019221, -0x0001921e, -0x0001921c, -0x00019219, -0x00019218, -0x00019214, -0x00019213, -0x00019210, -0x0001920d, -0x0001920b, -0x00019208, -0x00019206, -0x00019203, -0x00019202, -0x000191fe, -0x000191fb, -0x000191fa, -0x000191f7, -0x000191f5, -0x000191f2, -0x000191f0, -0x000191ed, -0x000191ea, -0x000191e8, -0x000191e5, -0x000191e4, -0x000191e1, -0x000191df, -0x000191dc, -0x000191d9, -0x000191d7, -0x000191d4, -0x000191d2, -0x000191cf, -0x000191ce, -0x000191cb, -0x000191c7, -0x000191c6, -0x000191c3, -0x000191c1, -0x000191be, -0x000191bc, -0x000191b9, -0x000191b6, -0x000191b5, -0x000191b1, -0x000191b0, -0x000191ad, -0x000191ab, -0x000191a8, -0x000191a5, -0x000191a3, -0x000191a0, -0x0001919f, -0x0001919c, -0x0001919a, -0x00019197, -0x00019194, -0x00019192, -0x0001918f, -0x0001918d, -0x0001918a, -0x00019189, -0x00019186, -0x00019182, -0x00019181, -0x0001917e, -0x0001917c, -0x00019179, -0x00019177, -0x00019174, -0x00019172, -0x0001916f, -0x0001916e, -0x0001916b, -0x00019167, -0x00019166, -0x00019163, -0x00019161, -0x0001915e, -0x0001915c, -0x00019159, -0x00019158, -0x00019155, -0x00019151, -0x00019150, -0x0001914d, -0x0001914b, -0x00019148, -0x00019146, -0x00019143, -0x00019140, -0x0001913f, -0x0001913c, -0x0001913a, -0x00019137, -0x00019135, -0x00019132, -0x0001912f, -0x0001912d, -0x0001912a, -0x00019129, -0x00019126, -0x00019124, -0x00019121, -0x0001911e, -0x0001911c, -0x00019119, -0x00019117, -0x00019114, -0x00019113, -0x00019110, -0x0001910e, -0x0001910b, -0x00019108, -0x00019106, -0x00019103, -0x00019102, -0x000190fe, -0x000190fd, -0x000190fa, -0x000190f7, -0x000190f5, -0x000190f2, -0x000190f0, -0x000190ed, -0x000190ec, -0x000190e9, -0x000190e5, -0x000190e4, -0x000190e1, -0x000190df, -0x000190dc, -0x000190da, -0x000190d7, -0x000190d6, -0x000190d3, -0x000190cf, -0x000190ce, -0x000190cb, -0x000190c9, -0x000190c6, -0x000190c4, -0x000190c1, -0x000190be, -0x000190bd, -0x000190ba, -0x000190b8, -0x000190b5, -0x000190b3, -0x000190b0, -0x000190ad, -0x000190ab, -0x000190a8, -0x000190a7, -0x000190a4, -0x000190a2, -0x0001909f, -0x0001909c, -0x0001909a, -0x00019097, -0x00019095, -0x00019092, -0x00019091, -0x0001908e, -0x0001908c, -0x00019089, -0x00019086, -0x00019084, -0x00019081, -0x00019080, -0x0001907c, -0x0001907b, -0x00019078, -0x00019075, -0x00019073, -0x00019070, -0x0001906e, -0x0001906b, -0x0001906a, -0x00019066, -0x00019063, -0x00019062, -0x0001905f, -0x0001905d, -0x0001905a, -0x00019058, -0x00019055, -0x00019052, -0x00019051, -0x0001904d, -0x0001904c, -0x00019049, -0x00019047, -0x00019044, -0x00019042, -0x0001903f, -0x0001903c, -0x0001903b, -0x00019038, -0x00019035, -0x00019034, -0x00019030, -0x0001902f, -0x0001902c, -0x0001902a, -0x00019027, -0x00019026, -0x00019022, -0x0001901f, -0x0001901e, -0x0001901b, -0x00019019, -0x00019016, -0x00019014, -0x00019011, -0x0001900e, -0x0001900d, -0x00019009, -0x00019008, -0x00019005, -0x00019003, -0x00019000, -0x00018ffe, -0x00018ffb, -0x00018ff8, -0x00018ff7, -0x00018ff4, -0x00018ff2, -0x00018fef, -0x00018fed, -0x00018fea, -0x00018fe7, -0x00018fe5, -0x00018fe2, -0x00018fe1, -0x00018fde, -0x00018fdc, -0x00018fd9, -0x00018fd7, -0x00018fd4, -0x00018fd1, -0x00018fd0, -0x00018fcc, -0x00018fcb, -0x00018fc8, -0x00018fc6, -0x00018fc3, -0x00018fc0, -0x00018fbe, -0x00018fbb, -0x00018fba, -0x00018fb7, -0x00018fb5, -0x00018fb2, -0x00018fb0, -0x00018fad, -0x00018faa, -0x00018fa9, -0x00018fa5, -0x00018fa4, -0x00018fa1, -0x00018f9f, -0x00018f9c, -0x00018f99, -0x00018f97, -0x00018f94, -0x00018f93, -0x00018f90, -0x00018f8e, -0x00018f8b, -0x00018f89, -0x00018f86, -0x00018f83, -0x00018f81, -0x00018f7e, -0x00018f7d, -0x00018f7a, -0x00018f78, -0x00018f75, -0x00018f72, -0x00018f70, -0x00018f6d, -0x00018f6c, -0x00018f68, -0x00018f67, -0x00018f64, -0x00018f62, -0x00018f5f, -0x00018f5c, -0x00018f5a, -0x00018f57, -0x00018f56, -0x00018f53, -0x00018f51, -0x00018f4e, -0x00018f4b, -0x00018f49, -0x00018f46, -0x00018f45, -0x00018f41, -0x00018f40, -0x00018f3d, -0x00018f3b, -0x00018f38, -0x00018f35, -0x00018f33, -0x00018f30, -0x00018f2f, -0x00018f2c, -0x00018f2a, -0x00018f27, -0x00018f24, -0x00018f22, -0x00018f1f, -0x00018f1d, -0x00018f1a, -0x00018f19, -0x00018f16, -0x00018f14, -0x00018f11, -0x00018f0e, -0x00018f0c, -0x00018f09, -0x00018f08, -0x00018f04, -0x00018f03, -0x00018f01, -0x00018efd, -0x00018efa, -0x00018ef9, -0x00018ef6, -0x00018ef4, -0x00018ef1, -0x00018eef, -0x00018eec, -0x00018eeb, -0x00018ee8, -0x00018ee5, -0x00018ee3, -0x00018ee0, -0x00018ede, -0x00018edb, -0x00018eda, -0x00018ed7, -0x00018ed5, -0x00018ed2, -0x00018ecf, -0x00018ecd, -0x00018eca, -0x00018ec9, -0x00018ec5, -0x00018ec4, -0x00018ec1, -0x00018ebf, -0x00018ebc, -0x00018eb9, -0x00018eb7, -0x00018eb4, -0x00018eb3, -0x00018eb0, -0x00018eae, -0x00018eab, -0x00018ea9, -0x00018ea6, -0x00018ea3, -0x00018ea2, -0x00018e9f, -0x00018e9d, -0x00018e9a, -0x00018e98, -0x00018e95, -0x00018e94, -0x00018e91, -0x00018e8d, -0x00018e8c, -0x00018e89, -0x00018e87, -0x00018e84, -0x00018e83, -0x00018e7f, -0x00018e7e, -0x00018e7b, -0x00018e78, -0x00018e76, -0x00018e73, -0x00018e71, -0x00018e6e, -0x00018e6d, -0x00018e6a, -0x00018e68, -0x00018e65, -0x00018e62, -0x00018e60, -0x00018e5d, -0x00018e5c, -0x00018e59, -0x00018e57, -0x00018e54, -0x00018e52, -0x00018e4f, -0x00018e4c, -0x00018e4b, -0x00018e48, -0x00018e46, -0x00018e43, -0x00018e41, -0x00018e3e, -0x00018e3d, -0x00018e3a, -0x00018e36, -0x00018e35, -0x00018e32, -0x00018e30, -0x00018e2d, -0x00018e2c, -0x00018e28, -0x00018e27, -0x00018e24, -0x00018e21, -0x00018e1f, -0x00018e1c, -0x00018e1a, -0x00018e17, -0x00018e16, -0x00018e13, -0x00018e11, -0x00018e0e, -0x00018e0b, -0x00018e09, -0x00018e06, -0x00018e05, -0x00018e02, -0x00018e00, -0x00018dfd, -0x00018dfb, -0x00018df8, -0x00018df5, -0x00018df4, -0x00018df0, -0x00018def, -0x00018dec, -0x00018dea, -0x00018de7, -0x00018de6, -0x00018de2, -0x00018ddf, -0x00018dde, -0x00018ddb, -0x00018dd9, -0x00018dd6, -0x00018dd4, -0x00018dd1, -0x00018dd0, -0x00018dcd, -0x00018dca, -0x00018dc8, -0x00018dc5, -0x00018dc3, -0x00018dc0, -0x00018dbd, -0x00018dbc, -0x00018db9, -0x00018db7, -0x00018db4, -0x00018db2, -0x00018daf, -0x00018dae, -0x00018dab, -0x00018da9, -0x00018da6, -0x00018da3, -0x00018da1, -0x00018d9e, -0x00018d9d, -0x00018d9a, -0x00018d98, -0x00018d95, -0x00018d93, -0x00018d90, -0x00018d8d, -0x00018d8c, -0x00018d88, -0x00018d87, -0x00018d84, -0x00018d82, -0x00018d7f, -0x00018d7e, -0x00018d7b, -0x00018d79, -0x00018d76, -0x00018d73, -0x00018d71, -0x00018d6e, -0x00018d6d, -0x00018d69, -0x00018d68, -0x00018d65, -0x00018d63, -0x00018d60, -0x00018d5d, -0x00018d5b, -0x00018d58, -0x00018d57, -0x00018d54, -0x00018d52, -0x00018d4f, -0x00018d4e, -0x00018d4a, -0x00018d49, -0x00018d46, -0x00018d43, -0x00018d41, -0x00018d3e, -0x00018d3c, -0x00018d39, -0x00018d38, -0x00018d35, -0x00018d33, -0x00018d30, -0x00018d2d, -0x00018d2b, -0x00018d28, -0x00018d27, -0x00018d24, -0x00018d22, -0x00018d1f, -0x00018d1d, -0x00018d1a, -0x00018d17, -0x00018d16, -0x00018d13, -0x00018d11, -0x00018d0e, -0x00018d0c, -0x00018d09, -0x00018d08, -0x00018d05, -0x00018d03, -0x00018d00, -0x00018cfd, -0x00018cfb, -0x00018cf8, -0x00018cf7, -0x00018cf4, -0x00018cf2, -0x00018cef, -0x00018ced, -0x00018cea, -0x00018ce7, -0x00018ce6, -0x00018ce3, -0x00018ce1, -0x00018cde, -0x00018cdc, -0x00018cd9, -0x00018cd8, -0x00018cd5, -0x00018cd3, -0x00018cd0, -0x00018ccd, -0x00018ccb, -0x00018cc8, -0x00018cc7, -0x00018cc4, -0x00018cc2, -0x00018cbf, -0x00018cbd, -0x00018cba, -0x00018cb7, -0x00018cb6, -0x00018cb2, -0x00018cb1, -0x00018cae, -0x00018cac, -0x00018ca9, -0x00018ca8, -0x00018ca5, -0x00018ca3, -0x00018ca0, -0x00018c9d, -0x00018c9b, -0x00018c98, -0x00018c96, -0x00018c93, -0x00018c91, -0x00018c8e, -0x00018c8d, -0x00018c8a, -0x00018c88, -0x00018c85, -0x00018c83, -0x00018c80, -0x00018c7f, -0x00018c7c, -0x00018c79, -0x00018c77, -0x00018c74, -0x00018c72, -0x00018c6f, -0x00018c6e, -0x00018c6b, -0x00018c69, -0x00018c66, -0x00018c65, -0x00018c61, -0x00018c5e, -0x00018c5d, -0x00018c5a, -0x00018c58, -0x00018c55, -0x00018c54, -0x00018c50, -0x00018c4f, -0x00018c4c, -0x00018c4a, -0x00018c47, -0x00018c44, -0x00018c43, -0x00018c3f, -0x00018c3e, -0x00018c3b, -0x00018c39, -0x00018c36, -0x00018c35, -0x00018c32, -0x00018c2e, -0x00018c2d, -0x00018c2a, -0x00018c28, -0x00018c25, -0x00018c24, -0x00018c20, -0x00018c1f, -0x00018c1c, -0x00018c1a, -0x00018c17, -0x00018c14, -0x00018c13, -0x00018c0f, -0x00018c0e, -0x00018c0b, -0x00018c09, -0x00018c06, -0x00018c05, -0x00018c02, -0x00018c00, -0x00018bfd, -0x00018bfa, -0x00018bf8, -0x00018bf5, -0x00018bf4, -0x00018bf1, -0x00018bef, -0x00018bec, -0x00018bea, -0x00018be7, -0x00018be6, -0x00018be3, -0x00018be0, -0x00018bde, -0x00018bdb, -0x00018bd9, -0x00018bd6, -0x00018bd5, -0x00018bd2, -0x00018bd0, -0x00018bcd, -0x00018bcb, -0x00018bc8, -0x00018bc5, -0x00018bc4, -0x00018bc1, -0x00018bbf, -0x00018bbc, -0x00018bba, -0x00018bb7, -0x00018bb6, -0x00018bb3, -0x00018bb1, -0x00018bae, -0x00018bab, -0x00018ba9, -0x00018ba6, -0x00018ba5, -0x00018ba2, -0x00018ba0, -0x00018b9d, -0x00018b9b, -0x00018b98, -0x00018b95, -0x00018b94, -0x00018b91, -0x00018b8f, -0x00018b8c, -0x00018b8a, -0x00018b87, -0x00018b86, -0x00018b83, -0x00018b81, -0x00018b7e, -0x00018b7b, -0x00018b79, -0x00018b76, -0x00018b75, -0x00018b72, -0x00018b70, -0x00018b6d, -0x00018b6c, -0x00018b68, -0x00018b67, -0x00018b64, -0x00018b61, -0x00018b60, -0x00018b5d, -0x00018b5b, -0x00018b58, -0x00018b55, -0x00018b53, -0x00018b50, -0x00018b4f, -0x00018b4c, -0x00018b4a, -0x00018b47, -0x00018b45, -0x00018b42, -0x00018b41, -0x00018b3e, -0x00018b3c, -0x00018b39, -0x00018b36, -0x00018b34, -0x00018b31, -0x00018b30, -0x00018b2d, -0x00018b2b, -0x00018b28, -0x00018b27, -0x00018b23, -0x00018b22, -0x00018b1f, -0x00018b1c, -0x00018b1a, -0x00018b17, -0x00018b16, -0x00018b13, -0x00018b11, -0x00018b0e, -0x00018b0c, -0x00018b09, -0x00018b08, -0x00018b05, -0x00018b02, -0x00018b00, -0x00018afd, -0x00018afb, -0x00018af8, -0x00018af7, -0x00018af4, -0x00018af2, -0x00018aef, -0x00018aed, -0x00018aea, -0x00018ae9, -0x00018ae6, -0x00018ae3, -0x00018ae1, -0x00018ade, -0x00018add, -0x00018ad9, -0x00018ad8, -0x00018ad5, -0x00018ad3, -0x00018ad0, -0x00018acf, -0x00018acc, -0x00018ac8, -0x00018ac7, -0x00018ac4, -0x00018ac2, -0x00018abf, -0x00018abe, -0x00018abb, -0x00018ab9, -0x00018ab6, -0x00018ab4, -0x00018ab1, -0x00018aae, -0x00018aad, -0x00018aaa, -0x00018aa8, -0x00018aa5, -0x00018aa3, -0x00018aa0, -0x00018a9f, -0x00018a9c, -0x00018a9a, -0x00018a97, -0x00018a96, -0x00018a92, -0x00018a8f, -0x00018a8e, -0x00018a8b, -0x00018a89, -0x00018a86, -0x00018a85, -0x00018a81, -0x00018a80, -0x00018a7d, -0x00018a7b, -0x00018a78, -0x00018a75, -0x00018a74, -0x00018a71, -0x00018a6f, -0x00018a6c, -0x00018a6a, -0x00018a67, -0x00018a66, -0x00018a63, -0x00018a61, -0x00018a5e, -0x00018a5b, -0x00018a59, -0x00018a56, -0x00018a55, -0x00018a52, -0x00018a50, -0x00018a4d, -0x00018a4b, -0x00018a48, -0x00018a47, -0x00018a44, -0x00018a42, -0x00018a3f, -0x00018a3c, -0x00018a3b, -0x00018a37, -0x00018a36, -0x00018a34, -0x00018a31, -0x00018a2e, -0x00018a2d, -0x00018a2a, -0x00018a28, -0x00018a25, -0x00018a23, -0x00018a20, -0x00018a1f, -0x00018a1c, -0x00018a1a, -0x00018a17, -0x00018a14, -0x00018a12, -0x00018a0f, -0x00018a0e, -0x00018a0b, -0x00018a09, -0x00018a06, -0x00018a05, -0x00018a02, -0x00018a00, -0x000189fd, -0x000189fb, -0x000189f8, -0x000189f5, -0x000189f4, -0x000189f1, -0x000189ef, -0x000189ec, -0x000189ea, -0x000189e7, -0x000189e6, -0x000189e3, -0x000189e1, -0x000189de, -0x000189dd, -0x000189da, -0x000189d6, -0x000189d5, -0x000189d2, -0x000189d0, -0x000189cd, -0x000189cc, -0x000189c9, -0x000189c7, -0x000189c4, -0x000189c2, -0x000189bf, -0x000189be, -0x000189bb, -0x000189b8, -0x000189b6, -0x000189b3, -0x000189b2, -0x000189ae, -0x000189ad, -0x000189aa, -0x000189a8, -0x000189a5, -0x000189a4, -0x000189a1, -0x0001899f, -0x0001899c, -0x00018999, -0x00018997, -0x00018994, -0x00018993, -0x00018990, -0x0001898e, -0x0001898b, -0x00018989, -0x00018986, -0x00018985, -0x00018982, -0x00018980, -0x0001897d, -0x0001897a, -0x00018979, -0x00018975, -0x00018974, -0x00018971, -0x0001896f, -0x0001896c, -0x0001896b, -0x00018968, -0x00018966, -0x00018963, -0x00018961, -0x0001895e, -0x0001895b, -0x0001895a, -0x00018957, -0x00018955, -0x00018952, -0x00018951, -0x0001894d, -0x0001894c, -0x00018949, -0x00018947, -0x00018944, -0x00018943, -0x00018940, -0x0001893d, -0x0001893b, -0x00018938, -0x00018936, -0x00018933, -0x00018932, -0x0001892f, -0x0001892d, -0x0001892a, -0x00018929, -0x00018925, -0x00018924, -0x00018921, -0x0001891e, -0x0001891c, -0x00018919, -0x00018918, -0x00018915, -0x00018913, -0x00018910, -0x0001890e, -0x0001890b, -0x0001890a, -0x00018907, -0x00018904, -0x00018901, -0x00018900, -0x000188fd, -0x000188fb, -0x000188f8, -0x000188f7, -0x000188f3, -0x000188f2, -0x000188ef, -0x000188ed, -0x000188ea, -0x000188e9, -0x000188e6, -0x000188e4, -0x000188e1, -0x000188e0, -0x000188dd, -0x000188d9, -0x000188d8, -0x000188d5, -0x000188d3, -0x000188d0, -0x000188cf, -0x000188cc, -0x000188ca, -0x000188c7, -0x000188c6, -0x000188c2, -0x000188c1, -0x000188be, -0x000188bc, -0x000188b9, -0x000188b6, -0x000188b5, -0x000188b2, -0x000188b0, -0x000188ad, -0x000188ac, -0x000188a8, -0x000188a7, -0x000188a4, -0x000188a2, -0x0001889f, -0x0001889e, -0x0001889b, -0x00018899, -0x00018896, -0x00018895, -0x00018891, -0x0001888e, -0x0001888d, -0x0001888a, -0x00018888, -0x00018885, -0x00018884, -0x00018881, -0x0001887f, -0x0001887c, -0x0001887b, -0x00018877, -0x00018876, -0x00018873, -0x00018871, -0x0001886e, -0x0001886b, -0x0001886a, -0x00018867, -0x00018865, -0x00018862, -0x00018860, -0x0001885d, -0x0001885c, -0x00018859, -0x00018857, -0x00018854, -0x00018853, -0x00018850, -0x0001884e, -0x0001884b, -0x0001884a, -0x00018846, -0x00018843, -0x00018842, -0x0001883f, -0x0001883d, -0x0001883a, -0x00018839, -0x00018836, -0x00018834, -0x00018831, -0x0001882f, -0x0001882c, -0x0001882b, -0x00018828, -0x00018826, -0x00018823, -0x00018820, -0x0001881f, -0x0001881c, -0x0001881a, -0x00018817, -0x00018815, -0x00018812, -0x00018811, -0x0001880e, -0x0001880c, -0x00018809, -0x00018808, -0x00018805, -0x00018803, -0x00018800, -0x000187fe, -0x000187fb, -0x000187f8, -0x000187f7, -0x000187f4, -0x000187f2, -0x000187ef, -0x000187ee, -0x000187eb, -0x000187e9, -0x000187e6, -0x000187e4, -0x000187e1, -0x000187e0, -0x000187dd, -0x000187db, -0x000187d7, -0x000187d6, -0x000187d3, -0x000187d1, -0x000187ce, -0x000187cd, -0x000187ca, -0x000187c8, -0x000187c5, -0x000187c4, -0x000187c0, -0x000187bd, -0x000187bc, -0x000187b9, -0x000187b7, -0x000187b4, -0x000187b3, -0x000187b0, -0x000187ae, -0x000187ab, -0x000187aa, -0x000187a6, -0x000187a5, -0x000187a2, -0x000187a0, -0x0001879d, -0x0001879c, -0x00018799, -0x00018796, -0x00018794, -0x00018791, -0x00018790, -0x0001878d, -0x0001878b, -0x00018788, -0x00018786, -0x00018783, -0x00018782, -0x0001877f, -0x0001877d, -0x0001877a, -0x00018779, -0x00018776, -0x00018774, -0x00018771, -0x0001876f, -0x0001876c, -0x00018769, -0x00018768, -0x00018765, -0x00018763, -0x00018760, -0x0001875f, -0x0001875c, -0x0001875a, -0x00018757, -0x00018756, -0x00018752, -0x00018751, -0x0001874e, -0x0001874c, -0x00018749, -0x00018748, -0x00018745, -0x00018743, -0x00018740, -0x0001873d, -0x0001873c, -0x00018739, -0x00018737, -0x00018734, -0x00018732, -0x0001872f, -0x0001872e, -0x0001872b, -0x00018729, -0x00018726, -0x00018725, -0x00018722, -0x00018720, -0x0001871d, -0x0001871b, -0x00018718, -0x00018715, -0x00018714, -0x00018711, -0x0001870f, -0x0001870c, -0x0001870b, -0x00018708, -0x00018706, -0x00018703, -0x00018702, -0x000186fe, -0x000186fd, -0x000186fa, -0x000186f8, -0x000186f5, -0x000186f4, -0x000186f1, -0x000186ef, -0x000186ec, -0x000186e9, -0x000186e8, -0x000186e5, -0x000186e3, -0x000186e0, -0x000186de, -0x000186db, -0x000186da, -0x000186d7, -0x000186d5, -0x000186d2, -0x000186d1, -0x000186ce, -0x000186cc, -0x000186c9, -0x000186c7, -0x000186c4, -0x000186c1, -0x000186c0, -0x000186bd, -0x000186bb, -0x000186b8, -0x000186b7, -0x000186b4, -0x000186b2, -0x000186af, -0x000186ae, -0x000186ab, -0x000186a8, -0x000186a6, -0x000186a3, -0x000186a1, -0x0001869e, -0x0001869d, -0x0001869a, -0x00018698, -0x00018695, -0x00018694, -0x00018691, -0x0001868f, -0x0001868c, -0x0001868b, -0x00018688, -0x00018686, -0x00018683, -0x00018681, -0x0001867e, -0x0001867d, -0x0001867a, -0x00018677, -0x00018675, -0x00018672, -0x00018671, -0x0001866e, -0x0001866c, -0x00018669, -0x00018668, -0x00018665, -0x00018663, -0x00018660, -0x0001865e, -0x0001865b, -0x0001865a, -0x00018657, -0x00018655, -0x00018652, -0x00018651, -0x0001864e, -0x0001864c, -0x00018649, -0x00018646, -0x00018645, -0x00018642, -0x00018640, -0x0001863d, -0x0001863b, -0x00018638, -0x00018637, -0x00018634, -0x00018632, -0x0001862f, -0x0001862e, -0x0001862b, -0x00018629, -0x00018626, -0x00018625, -0x00018622, -0x00018620, -0x0001861d, -0x0001861b, -0x00018618, -0x00018615, -0x00018614, -0x00018611, -0x0001860f, -0x0001860c, -0x0001860b, -0x00018608, -0x00018606, -0x00018603, -0x00018602, -0x000185fe, -0x000185fd, -0x000185fa, -0x000185f8, -0x000185f5, -0x000185f4, -0x000185f1, -0x000185ef, -0x000185ec, -0x000185eb, -0x000185e8, -0x000185e5, -0x000185e3, -0x000185e0, -0x000185de, -0x000185db, -0x000185da, -0x000185d7, -0x000185d5, -0x000185d2, -0x000185d1, -0x000185ce, -0x000185cc, -0x000185c9, -0x000185c8, -0x000185c5, -0x000185c3, -0x000185c0, -0x000185be, -0x000185bb, -0x000185ba, -0x000185b7, -0x000185b4, -0x000185b2, -0x000185af, -0x000185ae, -0x000185ab, -0x000185a9, -0x000185a6, -0x000185a5, -0x000185a2, -0x000185a0, -0x0001859d, -0x0001859b, -0x00018598, -0x00018597, -0x00018594, -0x00018592, -0x0001858f, -0x0001858e, -0x0001858b, -0x00018589, -0x00018586, -0x00018584, -0x00018581, -0x00018580, -0x0001857d, -0x0001857b, -0x00018578, -0x00018577, -0x00018573, -0x00018572, -0x0001856f, -0x0001856d, -0x0001856a, -0x00018569, -0x00018566, -0x00018563, -0x00018561, -0x0001855e, -0x0001855d, -0x0001855a, -0x00018558, -0x00018555, -0x00018554, -0x00018551, -0x0001854f, -0x0001854c, -0x0001854a, -0x00018547, -0x00018546, -0x00018543, -0x00018541, -0x0001853e, -0x0001853d, -0x0001853a, -0x00018538, -0x00018535, -0x00018534, -0x00018531, -0x0001852f, -0x0001852c, -0x00018529, -0x00018528, -0x00018524, -0x00018523, -0x00018520, -0x0001851e, -0x0001851b, -0x0001851a, -0x00018517, -0x00018515, -0x00018512, -0x00018511, -0x0001850e, -0x0001850c, -0x00018509, -0x00018508, -0x00018505, -0x00018503, -0x00018500, -0x000184fe, -0x000184fb, -0x000184fa, -0x000184f7, -0x000184f5, -0x000184f2, -0x000184f1, -0x000184ee, -0x000184eb, -0x000184e9, -0x000184e6, -0x000184e5, -0x000184e2, -0x000184e0, -0x000184dd, -0x000184dc, -0x000184d8, -0x000184d7, -0x000184d4, -0x000184d2, -0x000184cf, -0x000184ce, -0x000184cb, -0x000184c9, -0x000184c6, -0x000184c5, -0x000184c2, -0x000184c0, -0x000184bd, -0x000184bc, -0x000184b9, -0x000184b7, -0x000184b4, -0x000184b1, -0x000184af, -0x000184ac, -0x000184ab, -0x000184a8, -0x000184a6, -0x000184a3, -0x000184a2, -0x0001849f, -0x0001849d, -0x0001849a, -0x00018499, -0x00018496, -0x00018494, -0x00018491, -0x00018490, -0x0001848d, -0x0001848b, -0x00018488, -0x00018486, -0x00018483, -0x00018482, -0x0001847f, -0x0001847d, -0x0001847a, -0x00018477, -0x00018476, -0x00018473, -0x00018471, -0x0001846e, -0x0001846d, -0x0001846a, -0x00018468, -0x00018465, -0x00018463, -0x00018460, -0x0001845f, -0x0001845c, -0x00018459, -0x00018458, -0x00018455, -0x00018453, -0x00018450, -0x0001844f, -0x0001844c, -0x0001844a, -0x00018447, -0x00018446, -0x00018443, -0x00018441, -0x0001843e, -0x0001843d, -0x0001843a, -0x00018438, -0x00018435, -0x00018434, -0x00018431, -0x0001842f, -0x0001842c, -0x0001842a, -0x00018427, -0x00018426, -0x00018423, -0x00018421, -0x0001841e, -0x0001841d, -0x0001841a, -0x00018418, -0x00018415, -0x00018414, -0x00018411, -0x0001840e, -0x0001840c, -0x00018409, -0x00018408, -0x00018405, -0x00018403, -0x00018400, -0x000183fe, -0x000183fb, -0x000183fa, -0x000183f7, -0x000183f5, -0x000183f2, -0x000183f1, -0x000183ee, -0x000183ec, -0x000183e9, -0x000183e8, -0x000183e5, -0x000183e3, -0x000183e0, -0x000183df, -0x000183dc, -0x000183da, -0x000183d7, -0x000183d6, -0x000183d3, -0x000183d1, -0x000183ce, -0x000183cc, -0x000183c9, -0x000183c6, -0x000183c5, -0x000183c2, -0x000183c0, -0x000183bd, -0x000183bc, -0x000183b9, -0x000183b7, -0x000183b4, -0x000183b3, -0x000183b0, -0x000183ae, -0x000183ab, -0x000183aa, -0x000183a7, -0x000183a5, -0x000183a2, -0x000183a1, -0x0001839d, -0x0001839c, -0x00018399, -0x00018397, -0x00018394, -0x00018393, -0x00018390, -0x0001838e, -0x0001838b, -0x0001838a, -0x00018387, -0x00018385, -0x00018382, -0x00018381, -0x0001837e, -0x0001837b, -0x00018379, -0x00018376, -0x00018375, -0x00018372, -0x00018370, -0x0001836d, -0x0001836b, -0x00018368, -0x00018367, -0x00018364, -0x00018362, -0x0001835f, -0x0001835e, -0x0001835b, -0x00018359, -0x00018356, -0x00018355, -0x00018352, -0x00018350, -0x0001834d, -0x0001834c, -0x00018349, -0x00018347, -0x00018344, -0x00018343, -0x00018340, -0x0001833e, -0x0001833b, -0x00018339, -0x00018336, -0x00018335, -0x00018332, -0x00018330, -0x0001832d, -0x0001832c, -0x00018329, -0x00018327, -0x00018324, -0x00018323, -0x00018320, -0x0001831e, -0x0001831b, -0x0001831a, -0x00018317, -0x00018315, -0x00018312, -0x00018311, -0x0001830e, -0x0001830c, -0x00018309, -0x00018308, -0x00018305, -0x00018302, -0x00018300, -0x000182fd, -0x000182fb, -0x000182f8, -0x000182f7, -0x000182f4, -0x000182f2, -0x000182ef, -0x000182ee, -0x000182eb, -0x000182e9, -0x000182e6, -0x000182e5, -0x000182e2, -0x000182e0, -0x000182dd, -0x000182dc, -0x000182d9, -0x000182d7, -0x000182d4, -0x000182d3, -0x000182d0, -0x000182ce, -0x000182cb, -0x000182ca, -0x000182c7, -0x000182c5, -0x000182c2, -0x000182c1, -0x000182bd, -0x000182bc, -0x000182b9, -0x000182b7, -0x000182b4, -0x000182b3, -0x000182b0, -0x000182ae, -0x000182ab, -0x000182aa, -0x000182a7, -0x000182a5, -0x000182a2, -0x0001829f, -0x0001829e, -0x0001829b, -0x00018299, -0x00018296, -0x00018295, -0x00018292, -0x00018290, -0x0001828d, -0x0001828c, -0x00018289, -0x00018287, -0x00018284, -0x00018283, -0x00018280, -0x0001827e, -0x0001827b, -0x00018279, -0x00018276, -0x00018275, -0x00018272, -0x00018270, -0x0001826d, -0x0001826c, -0x00018269, -0x00018267, -0x00018264, -0x00018263, -0x00018260, -0x0001825e, -0x0001825b, -0x0001825a, -0x00018257, -0x00018255, -0x00018252, -0x00018251, -0x0001824e, -0x0001824c, -0x00018249, -0x00018248, -0x00018245, -0x00018242, -0x00018240, -0x0001823d, -0x0001823b, -0x00018238, -0x00018237, -0x00018234, -0x00018232, -0x0001822f, -0x0001822e, -0x0001822b, -0x00018229, -0x00018226, -0x00018225, -0x00018222, -0x00018220, -0x0001821d, -0x0001821c, -0x00018219, -0x00018217, -0x00018214, -0x00018214, -0x00018211, -0x0001820e, -0x0001820c, -0x00018209, -0x00018208, -0x00018205, -0x00018203, -0x00018200, -0x000181fe, -0x000181fb, -0x000181fa, -0x000181f7, -0x000181f5, -0x000181f2, -0x000181f1, -0x000181ee, -0x000181ec, -0x000181e9, -0x000181e8, -0x000181e5, -0x000181e3, -0x000181e0, -0x000181df, -0x000181dc, -0x000181da, -0x000181d7, -0x000181d6, -0x000181d3, -0x000181d1, -0x000181ce, -0x000181cd, -0x000181ca, -0x000181c8, -0x000181c5, -0x000181c4, -0x000181c1, -0x000181bf, -0x000181bc, -0x000181bb, -0x000181b8, -0x000181b6, -0x000181b3, -0x000181b2, -0x000181af, -0x000181ad, -0x000181aa, -0x000181a9, -0x000181a6, -0x000181a4, -0x000181a1, -0x000181a0, -0x0001819c, -0x0001819b, -0x00018198, -0x00018196, -0x00018193, -0x00018192, -0x0001818f, -0x0001818d, -0x0001818a, -0x00018189, -0x00018186, -0x00018184, -0x00018181, -0x0001817e, -0x0001817d, -0x0001817a, -0x00018178, -0x00018175, -0x00018174, -0x00018171, -0x0001816f, -0x0001816c, -0x0001816b, -0x00018168, -0x00018166, -0x00018163, -0x00018162, -0x0001815f, -0x0001815d, -0x0001815a, -0x00018159, -0x00018156, -0x00018154, -0x00018151, -0x00018150, -0x0001814d, -0x0001814b, -0x00018148, -0x00018147, -0x00018144, -0x00018142, -0x0001813f, -0x0001813d, -0x0001813a, -0x00018139, -0x00018136, -0x00018134, -0x00018131, -0x00018130, -0x0001812d, -0x0001812b, -0x00018128, -0x00018127, -0x00018124, -0x00018122, -0x0001811f, -0x0001811e, -0x0001811b, -0x00018119, -0x00018116, -0x00018115, -0x00018112, -0x00018110, -0x0001810d, -0x0001810c, -0x00018109, -0x00018107, -0x00018104, -0x00018103, -0x00018100, -0x000180fe, -0x000180fb, -0x000180fa, -0x000180f7, -0x000180f5, -0x000180f2, -0x000180f0, -0x000180ef, -0x000180ec, -0x000180ea, -0x000180e7, -0x000180e6, -0x000180e3, -0x000180e1, -0x000180de, -0x000180dd, -0x000180da, -0x000180d8, -0x000180d5, -0x000180d4, -0x000180d1, -0x000180cf, -0x000180cc, -0x000180cb, -0x000180c8, -0x000180c6, -0x000180c3, -0x000180c2, -0x000180bf, -0x000180bd, -0x000180ba, -0x000180b9, -0x000180b6, -0x000180b4, -0x000180b1, -0x000180b0, -0x000180ad, -0x000180ab, -0x000180a8, -0x000180a7, -0x000180a4, -0x000180a2, -0x0001809f, -0x0001809e, -0x0001809b, -0x00018099, -0x00018096, -0x00018095, -0x00018092, -0x00018090, -0x0001808d, -0x0001808c, -0x00018089, -0x00018087, -0x00018084, -0x00018083, -0x00018080, -0x0001807e, -0x0001807b, -0x0001807a, -0x00018077, -0x00018075, -0x00018072, -0x00018071, -0x0001806e, -0x0001806c, -0x00018069, -0x00018068, -0x00018065, -0x00018063, -0x00018060, -0x0001805f, -0x0001805c, -0x0001805a, -0x00018057, -0x00018056, -0x00018053, -0x00018051, -0x0001804e, -0x0001804d, -0x0001804a, -0x00018048, -0x00018045, -0x00018044, -0x00018041, -0x0001803f, -0x0001803c, -0x0001803b, -0x00018038, -0x00018036, -0x00018033, -0x00018032, -0x0001802f, -0x0001802d, -0x0001802a, -0x00018029, -0x00018026, -0x00018024, -0x00018021, -0x00018020, -0x0001801d, -0x0001801b, -0x00018018, -0x00018017, -0x00018014, -0x00018012, -0x0001800f, -0x0001800e, -0x0001800b, -0x00018009, -0x00018006, -0x00018005, -0x00018002, -0x00018000, -0x00017ffd, -0x00017ffc, -0x00017ff9, -0x00017ff7, -0x00017ff4, -0x00017ff3, -0x00017ff0, -0x00017fee, -0x00017feb, -0x00017fea, -0x00017fe7, -0x00017fe5, -0x00017fe2, -0x00017fe1, -0x00017fde, -0x00017fdc, -0x00017fd9, -0x00017fd8, -0x00017fd5, -0x00017fd3, -0x00017fd0, -0x00017fcd, -0x00017fcb, -0x00017fc8, -0x00017fc7, -0x00017fc4, -0x00017fc2, -0x00017fc0, -0x00017fbe, -0x00017fbb, -0x00017fba, -0x00017fb7, -0x00017fb5, -0x00017fb2, -0x00017fb1, -0x00017fae, -0x00017fac, -0x00017fa9, -0x00017fa8, -0x00017fa5, -0x00017fa3, -0x00017fa0, -0x00017f9f, -0x00017f9c, -0x00017f9a, -0x00017f97, -0x00017f96, -0x00017f93, -0x00017f91, -0x00017f8e, -0x00017f8d, -0x00017f8a, -0x00017f88, -0x00017f85, -0x00017f84, -0x00017f81, -0x00017f7f, -0x00017f7c, -0x00017f7b, -0x00017f78, -0x00017f76, -0x00017f73, -0x00017f72, -0x00017f6f, -0x00017f6d, -0x00017f6a, -0x00017f69, -0x00017f66, -0x00017f64, -0x00017f61, -0x00017f60, -0x00017f5d, -0x00017f5b, -0x00017f58, -0x00017f57, -0x00017f54, -0x00017f52, -0x00017f4f, -0x00017f4e, -0x00017f4b, -0x00017f49, -0x00017f46, -0x00017f45, -0x00017f42, -0x00017f40, -0x00017f3f, -0x00017f3c, -0x00017f3a, -0x00017f37, -0x00017f36, -0x00017f33, -0x00017f31, -0x00017f2e, -0x00017f2d, -0x00017f2a, -0x00017f28, -0x00017f25, -0x00017f24, -0x00017f21, -0x00017f1f, -0x00017f1c, -0x00017f1b, -0x00017f18, -0x00017f16, -0x00017f13, -0x00017f12, -0x00017f0f, -0x00017f0d, -0x00017f0a, -0x00017f09, -0x00017f06, -0x00017f04, -0x00017f01, -0x00017f00, -0x00017efd, -0x00017efc, -0x00017ef9, -0x00017ef7, -0x00017ef4, -0x00017ef3, -0x00017ef0, -0x00017eee, -0x00017eeb, -0x00017eea, -0x00017ee7, -0x00017ee5, -0x00017ee2, -0x00017ee1, -0x00017ede, -0x00017edc, -0x00017ed9, -0x00017ed8, -0x00017ed5, -0x00017ed3, -0x00017ed0, -0x00017ecf, -0x00017ecc, -0x00017eca, -0x00017ec7, -0x00017ec6, -0x00017ec3, -0x00017ec1, -0x00017ebe, -0x00017ebd, -0x00017eba, -0x00017eb8, -0x00017eb5, -0x00017eb4, -0x00017eb2, -0x00017eaf, -0x00017ead, -0x00017eaa, -0x00017ea9, -0x00017ea6, -0x00017ea4, -0x00017ea1, -0x00017ea0, -0x00017e9d, -0x00017e9b, -0x00017e98, -0x00017e97, -0x00017e94, -0x00017e92, -0x00017e8f, -0x00017e8e, -0x00017e8b, -0x00017e89, -0x00017e86, -0x00017e85, -0x00017e82, -0x00017e80, -0x00017e7d, -0x00017e7c, -0x00017e79, -0x00017e77, -0x00017e74, -0x00017e73, -0x00017e70, -0x00017e6e, -0x00017e6b, -0x00017e6a, -0x00017e67, -0x00017e65, -0x00017e62, -0x00017e61, -0x00017e5e, -0x00017e5d, -0x00017e5a, -0x00017e58, -0x00017e55, -0x00017e54, -0x00017e51, -0x00017e4f, -0x00017e4c, -0x00017e4b, -0x00017e48, -0x00017e46, -0x00017e43, -0x00017e42, -0x00017e3f, -0x00017e3d, -0x00017e3a, -0x00017e39, -0x00017e36, -0x00017e34, -0x00017e31, -0x00017e30, -0x00017e2d, -0x00017e2b, -0x00017e28, -0x00017e27, -0x00017e24, -0x00017e22, -0x00017e21, -0x00017e1e, -0x00017e1c, -0x00017e19, -0x00017e18, -0x00017e15, -0x00017e13, -0x00017e10, -0x00017e0f, -0x00017e0c, -0x00017e0a, -0x00017e07, -0x00017e06, -0x00017e03, -0x00017e01, -0x00017dff, -0x00017dfd, -0x00017dfa, -0x00017df9, -0x00017df6, -0x00017df4, -0x00017df1, -0x00017df0, -0x00017ded, -0x00017deb, -0x00017de8, -0x00017de7, -0x00017de4, -0x00017de2, -0x00017ddf, -0x00017dde, -0x00017ddb, -0x00017dd9, -0x00017dd6, -0x00017dd5, -0x00017dd2, -0x00017dd0, -0x00017dcd, -0x00017dcc, -0x00017dc9, -0x00017dc7, -0x00017dc4, -0x00017dc3, -0x00017dc0, -0x00017dbe, -0x00017dbb, -0x00017dba, -0x00017db7, -0x00017db5, -0x00017db2, -0x00017db1, -0x00017dae, -0x00017dac, -0x00017da9, -0x00017da8, -0x00017da5, -0x00017da3, -0x00017da1, -0x00017d9f, -0x00017d9c, -0x00017d9b, -0x00017d98, -0x00017d96, -0x00017d93, -0x00017d92, -0x00017d8f, -0x00017d8d, -0x00017d8a, -0x00017d89, -0x00017d86, -0x00017d84, -0x00017d81, -0x00017d80, -0x00017d7d, -0x00017d7c, -0x00017d79, -0x00017d77, -0x00017d74, -0x00017d73, -0x00017d70, -0x00017d6e, -0x00017d6b, -0x00017d6a, -0x00017d67, -0x00017d65, -0x00017d64, -0x00017d61, -0x00017d5f, -0x00017d5c, -0x00017d5b, -0x00017d58, -0x00017d56, -0x00017d53, -0x00017d52, -0x00017d4f, -0x00017d4d, -0x00017d4a, -0x00017d49, -0x00017d46, -0x00017d44, -0x00017d41, -0x00017d40, -0x00017d3d, -0x00017d3c, -0x00017d39, -0x00017d37, -0x00017d34, -0x00017d33, -0x00017d30, -0x00017d2e, -0x00017d2b, -0x00017d2a, -0x00017d27, -0x00017d25, -0x00017d22, -0x00017d21, -0x00017d1e, -0x00017d1c, -0x00017d19, -0x00017d18, -0x00017d15, -0x00017d13, -0x00017d10, -0x00017d0f, -0x00017d0c, -0x00017d0a, -0x00017d07, -0x00017d06, -0x00017d04, -0x00017d01, -0x00017d00, -0x00017cfd, -0x00017cfc, -0x00017cf9, -0x00017cf7, -0x00017cf4, -0x00017cf3, -0x00017cf0, -0x00017cee, -0x00017ceb, -0x00017cea, -0x00017ce7, -0x00017ce5, -0x00017ce2, -0x00017ce1, -0x00017cde, -0x00017cdc, -0x00017cd9, -0x00017cd8, -0x00017cd5, -0x00017cd3, -0x00017cd0, -0x00017ccf, -0x00017ccc, -0x00017cca, -0x00017cc7, -0x00017cc6, -0x00017cc3, -0x00017cc1, -0x00017cbf, -0x00017cbd, -0x00017cba, -0x00017cb9, -0x00017cb6, -0x00017cb4, -0x00017cb1, -0x00017cb0, -0x00017cad, -0x00017cab, -0x00017ca8, -0x00017ca7, -0x00017ca5, -0x00017ca2, -0x00017ca1, -0x00017c9e, -0x00017c9c, -0x00017c99, -0x00017c98, -0x00017c95, -0x00017c93, -0x00017c90, -0x00017c8f, -0x00017c8c, -0x00017c8a, -0x00017c87, -0x00017c86, -0x00017c83, -0x00017c81, -0x00017c7f, -0x00017c7d, -0x00017c7a, -0x00017c78, -0x00017c77, -0x00017c74, -0x00017c72, -0x00017c6f, -0x00017c6e, -0x00017c6b, -0x00017c69, -0x00017c66, -0x00017c65, -0x00017c62, -0x00017c60, -0x00017c5e, -0x00017c5c, -0x00017c59, -0x00017c58, -0x00017c55, -0x00017c53, -0x00017c50, -0x00017c4f, -0x00017c4c, -0x00017c4a, -0x00017c47, -0x00017c46, -0x00017c43, -0x00017c41, -0x00017c3e, -0x00017c3d, -0x00017c3a, -0x00017c38, -0x00017c35, -0x00017c34, -0x00017c32, -0x00017c30, -0x00017c2e, -0x00017c2b, -0x00017c2a, -0x00017c27, -0x00017c25, -0x00017c22, -0x00017c21, -0x00017c1e, -0x00017c1c, -0x00017c19, -0x00017c18, -0x00017c15, -0x00017c13, -0x00017c10, -0x00017c0f, -0x00017c0c, -0x00017c0a, -0x00017c07, -0x00017c06, -0x00017c03, -0x00017c01, -0x00017bff, -0x00017bfd, -0x00017bfa, -0x00017bf9, -0x00017bf6, -0x00017bf4, -0x00017bf1, -0x00017bf0, -0x00017bed, -0x00017beb, -0x00017bea, -0x00017be7, -0x00017be5, -0x00017be2, -0x00017be1, -0x00017bde, -0x00017bdc, -0x00017bd9, -0x00017bd8, -0x00017bd5, -0x00017bd3, -0x00017bd1, -0x00017bcf, -0x00017bcc, -0x00017bcb, -0x00017bc8, -0x00017bc6, -0x00017bc3, -0x00017bc2, -0x00017bbf, -0x00017bbd, -0x00017bba, -0x00017bb9, -0x00017bb6, -0x00017bb4, -0x00017bb1, -0x00017bb0, -0x00017bad, -0x00017bab, -0x00017ba8, -0x00017ba7, -0x00017ba5, -0x00017ba2, -0x00017ba1, -0x00017b9e, -0x00017b9d, -0x00017b9a, -0x00017b98, -0x00017b95, -0x00017b94, -0x00017b91, -0x00017b8f, -0x00017b8c, -0x00017b8b, -0x00017b88, -0x00017b86, -0x00017b83, -0x00017b82, -0x00017b7f, -0x00017b7d, -0x00017b7a, -0x00017b79, -0x00017b76, -0x00017b74, -0x00017b72, -0x00017b70, -0x00017b6d, -0x00017b6c, -0x00017b69, -0x00017b67, -0x00017b64, -0x00017b63, -0x00017b60, -0x00017b5f, -0x00017b5c, -0x00017b5a, -0x00017b57, -0x00017b56, -0x00017b53, -0x00017b51, -0x00017b4e, -0x00017b4d, -0x00017b4a, -0x00017b49, -0x00017b46, -0x00017b44, -0x00017b43, -0x00017b40, -0x00017b3e, -0x00017b3b, -0x00017b3a, -0x00017b37, -0x00017b35, -0x00017b32, -0x00017b31, -0x00017b2e, -0x00017b2c, -0x00017b29, -0x00017b28, -0x00017b25, -0x00017b24, -0x00017b21, -0x00017b1f, -0x00017b1c, -0x00017b1b, -0x00017b18, -0x00017b16, -0x00017b13, -0x00017b12, -0x00017b0f, -0x00017b0d, -0x00017b0a, -0x00017b09, -0x00017b07, -0x00017b04, -0x00017b03, -0x00017b00, -0x00017aff, -0x00017afc, -0x00017afa, -0x00017af7, -0x00017af6, -0x00017af3, -0x00017af1, -0x00017aee, -0x00017aed, -0x00017aea, -0x00017ae8, -0x00017ae5, -0x00017ae4, -0x00017ae1, -0x00017adf, -0x00017adc, -0x00017adb, -0x00017ad8, -0x00017ad7, -0x00017ad4, -0x00017ad2, -0x00017ad1, -0x00017ace, -0x00017acc, -0x00017ac9, -0x00017ac8, -0x00017ac5, -0x00017ac3, -0x00017ac0, -0x00017abf, -0x00017abc, -0x00017aba, -0x00017ab7, -0x00017ab6, -0x00017ab3, -0x00017ab2, -0x00017aaf, -0x00017aad, -0x00017aaa, -0x00017aa9, -0x00017aa6, -0x00017aa4, -0x00017aa1, -0x00017aa0, -0x00017a9d, -0x00017a9b, -0x00017a9a, -0x00017a97, -0x00017a95, -0x00017a92, -0x00017a91, -0x00017a8e, -0x00017a8d, -0x00017a8a, -0x00017a88, -0x00017a85, -0x00017a84, -0x00017a81, -0x00017a7f, -0x00017a7c, -0x00017a7b, -0x00017a78, -0x00017a76, -0x00017a73, -0x00017a72, -0x00017a6f, -0x00017a6d, -0x00017a6a, -0x00017a69, -0x00017a66, -0x00017a65, -0x00017a62, -0x00017a60, -0x00017a5f, -0x00017a5c, -0x00017a5a, -0x00017a57, -0x00017a56, -0x00017a53, -0x00017a51, -0x00017a4e, -0x00017a4d, -0x00017a4a, -0x00017a48, -0x00017a47, -0x00017a44, -0x00017a42, -0x00017a3f, -0x00017a3e, -0x00017a3b, -0x00017a3a, -0x00017a37, -0x00017a35, -0x00017a32, -0x00017a31, -0x00017a2e, -0x00017a2c, -0x00017a29, -0x00017a28, -0x00017a25, -0x00017a23, -0x00017a20, -0x00017a1f, -0x00017a1c, -0x00017a1b, -0x00017a18, -0x00017a16, -0x00017a15, -0x00017a12, -0x00017a10, -0x00017a0d, -0x00017a0c, -0x00017a09, -0x00017a07, -0x00017a04, -0x00017a03, -0x00017a00, -0x000179ff, -0x000179fc, -0x000179fa, -0x000179f7, -0x000179f6, -0x000179f3, -0x000179f1, -0x000179ee, -0x000179ed, -0x000179ea, -0x000179e8, -0x000179e7, -0x000179e4, -0x000179e2, -0x000179e0, -0x000179de, -0x000179db, -0x000179da, -0x000179d7, -0x000179d5, -0x000179d2, -0x000179d1, -0x000179ce, -0x000179cc, -0x000179c9, -0x000179c8, -0x000179c5, -0x000179c3, -0x000179c1, -0x000179bf, -0x000179bc, -0x000179bb, -0x000179b9, -0x000179b6, -0x000179b5, -0x000179b2, -0x000179b0, -0x000179ad, -0x000179ac, -0x000179a9, -0x000179a7, -0x000179a4, -0x000179a3, -0x000179a0, -0x0001799f, -0x0001799c, -0x0001799a, -0x00017997, -0x00017996, -0x00017993, -0x00017991, -0x0001798e, -0x0001798d, -0x0001798b, -0x00017988, -0x00017987, -0x00017984, -0x00017982, -0x00017980, -0x0001797e, -0x0001797b, -0x0001797a, -0x00017977, -0x00017975, -0x00017972, -0x00017971, -0x0001796e, -0x0001796c, -0x00017969, -0x00017968, -0x00017965, -0x00017963, -0x00017961, -0x0001795f, -0x0001795e, -0x0001795b, -0x00017959, -0x00017956, -0x00017955, -0x00017952, -0x00017950, -0x0001794d, -0x0001794c, -0x00017949, -0x00017947, -0x00017944, -0x00017943, -0x00017940, -0x0001793f, -0x0001793c, -0x0001793a, -0x00017937, -0x00017936, -0x00017933, -0x00017931, -0x0001792f, -0x0001792e, -0x0001792b, -0x00017929, -0x00017926, -0x00017925, -0x00017922, -0x00017920, -0x0001791d, -0x0001791c, -0x0001791b, -0x00017918, -0x00017916, -0x00017913, -0x00017912, -0x0001790f, -0x0001790d, -0x0001790a, -0x00017909, -0x00017906, -0x00017904, -0x00017901, -0x00017900, -0x000178fd, -0x000178fc, -0x000178f9, -0x000178f7, -0x000178f4, -0x000178f3, -0x000178f1, -0x000178ee, -0x000178ed, -0x000178ea, -0x000178e8, -0x000178e5, -0x000178e4, -0x000178e1, -0x000178e0, -0x000178dd, -0x000178db, -0x000178d8, -0x000178d7, -0x000178d4, -0x000178d2, -0x000178cf, -0x000178ce, -0x000178cc, -0x000178ca, -0x000178c8, -0x000178c5, -0x000178c4, -0x000178c1, -0x000178bf, -0x000178bc, -0x000178bb, -0x000178b8, -0x000178b6, -0x000178b3, -0x000178b2, -0x000178af, -0x000178ae, -0x000178ab, -0x000178a9, -0x000178a6, -0x000178a5, -0x000178a3, -0x000178a0, -0x0001789f, -0x0001789c, -0x0001789a, -0x00017897, -0x00017896, -0x00017893, -0x00017892, -0x0001788f, -0x0001788d, -0x0001788a, -0x00017889, -0x00017886, -0x00017884, -0x00017881, -0x00017880, -0x0001787d, -0x0001787b, -0x0001787a, -0x00017877, -0x00017876, -0x00017873, -0x00017871, -0x0001786e, -0x0001786d, -0x0001786a, -0x00017868, -0x00017865, -0x00017864, -0x00017861, -0x0001785f, -0x0001785d, -0x0001785b, -0x00017858, -0x00017857, -0x00017855, -0x00017852, -0x00017851, -0x0001784e, -0x0001784c, -0x00017849, -0x00017848, -0x00017845, -0x00017844, -0x00017841, -0x0001783f, -0x0001783c, -0x0001783b, -0x00017838, -0x00017836, -0x00017833, -0x00017832, -0x0001782f, -0x0001782d, -0x0001782c, -0x00017829, -0x00017828, -0x00017825, -0x00017823, -0x00017820, -0x0001781f, -0x0001781c, -0x0001781a, -0x00017819, -0x00017816, -0x00017815, -0x00017812, -0x00017810, -0x0001780d, -0x0001780c, -0x00017809, -0x00017807, -0x00017804, -0x00017803, -0x00017800, -0x000177ff, -0x000177fc, -0x000177fa, -0x000177f9, -0x000177f6, -0x000177f4, -0x000177f1, -0x000177f0, -0x000177ed, -0x000177eb, -0x000177e9, -0x000177e7, -0x000177e4, -0x000177e3, -0x000177e0, -0x000177de, -0x000177db, -0x000177da, -0x000177d7, -0x000177d5, -0x000177d4, -0x000177d1, -0x000177d0, -0x000177cd, -0x000177cb, -0x000177c8, -0x000177c7, -0x000177c4, -0x000177c2, -0x000177bf, -0x000177be, -0x000177bb, -0x000177ba, -0x000177b7, -0x000177b5, -0x000177b4, -0x000177b1, -0x000177af, -0x000177ac, -0x000177ab, -0x000177a8, -0x000177a6, -0x000177a3, -0x000177a2, -0x0001779f, -0x0001779e, -0x0001779b, -0x00017799, -0x00017796, -0x00017795, -0x00017792, -0x00017790, -0x0001778f, -0x0001778c, -0x0001778b, -0x00017788, -0x00017786, -0x00017783, -0x00017782, -0x0001777f, -0x0001777d, -0x0001777a, -0x00017779, -0x00017776, -0x00017774, -0x00017772, -0x00017770, -0x0001776f, -0x0001776c, -0x0001776a, -0x00017767, -0x00017766, -0x00017763, -0x00017761, -0x0001775e, -0x0001775d, -0x0001775a, -0x00017759, -0x00017756, -0x00017754, -0x00017751, -0x00017750, -0x0001774d, -0x0001774b, -0x0001774a, -0x00017747, -0x00017745, -0x00017743, -0x00017741, -0x0001773e, -0x0001773d, -0x0001773a, -0x00017738, -0x00017735, -0x00017734, -0x00017731, -0x0001772f, -0x0001772d, -0x0001772b, -0x0001772a, -0x00017727, -0x00017725, -0x00017722, -0x00017721, -0x0001771e, -0x0001771c, -0x00017719, -0x00017718, -0x00017715, -0x00017714, -0x00017711, -0x0001770f, -0x0001770c, -0x0001770b, -0x00017708, -0x00017707, -0x00017704, -0x00017703, -0x00017700, -0x000176fe, -0x000176fb, -0x000176fa, -0x000176f7, -0x000176f5, -0x000176f3, -0x000176f1, -0x000176ee, -0x000176ed, -0x000176eb, -0x000176e8, -0x000176e7, -0x000176e4, -0x000176e2, -0x000176e0, -0x000176de, -0x000176db, -0x000176da, -0x000176d7, -0x000176d5, -0x000176d2, -0x000176d1, -0x000176cf, -0x000176cd, -0x000176cb, -0x000176c8, -0x000176c7, -0x000176c4, -0x000176c2, -0x000176bf, -0x000176be, -0x000176bb, -0x000176ba, -0x000176b7, -0x000176b5, -0x000176b4, -0x000176b1, -0x000176af, -0x000176ac, -0x000176ab, -0x000176a8, -0x000176a7, -0x000176a4, -0x000176a2, -0x0001769f, -0x0001769e, -0x0001769b, -0x00017699, -0x00017698, -0x00017695, -0x00017694, -0x00017691, -0x0001768f, -0x0001768c, -0x0001768b, -0x00017688, -0x00017686, -0x00017683, -0x00017682, -0x0001767f, -0x0001767e, -0x0001767c, -0x00017679, -0x00017678, -0x00017675, -0x00017673, -0x00017670, -0x0001766f, -0x0001766c, -0x0001766b, -0x00017668, -0x00017666, -0x00017663, -0x00017662, -0x00017660, -0x0001765e, -0x0001765c, -0x00017659, -0x00017658, -0x00017655, -0x00017653, -0x00017650, -0x0001764f, -0x0001764c, -0x0001764b, -0x00017648, -0x00017646, -0x00017645, -0x00017642, -0x00017640, -0x0001763d, -0x0001763c, -0x00017639, -0x00017638, -0x00017635, -0x00017633, -0x00017630, -0x0001762f, -0x0001762c, -0x0001762a, -0x00017629, -0x00017626, -0x00017625, -0x00017622, -0x00017620, -0x0001761d, -0x0001761c, -0x00017619, -0x00017617, -0x00017614, -0x00017613, -0x00017610, -0x0001760f, -0x0001760d, -0x0001760a, -0x00017609, -0x00017606, -0x00017604, -0x00017601, -0x00017600, -0x000175fd, -0x000175fc, -0x000175f9, -0x000175f7, -0x000175f5, -0x000175f2, -0x000175f0, -0x000175ed, -0x000175ec, -0x000175e9, -0x000175e8, -0x000175e6, -0x000175e3, -0x000175e2, -0x000175df, -0x000175dd, -0x000175db, -0x000175d9, -0x000175d6, -0x000175d5, -0x000175d2, -0x000175d0, -0x000175cf, -0x000175cc, -0x000175cb, -0x000175c8, -0x000175c6, -0x000175c3, -0x000175c2, -0x000175bf, -0x000175bd, -0x000175bb, -0x000175b9, -0x000175b6, -0x000175b5, -0x000175b3, -0x000175b0, -0x000175af, -0x000175ac, -0x000175aa, -0x000175a8, -0x000175a6, -0x000175a3, -0x000175a2, -0x0001759f, -0x0001759d, -0x0001759c, -0x00017599, -0x00017598, -0x00017595, -0x00017593, -0x00017590, -0x0001758f, -0x0001758c, -0x0001758a, -0x00017588, -0x00017586, -0x00017585, -0x00017582, -0x00017580, -0x0001757d, -0x0001757c, -0x00017579, -0x00017577, -0x00017575, -0x00017573, -0x00017570, -0x0001756f, -0x0001756d, -0x0001756a, -0x00017569, -0x00017566, -0x00017565, -0x00017562, -0x00017560, -0x0001755d, -0x0001755c, -0x00017559, -0x00017557, -0x00017555, -0x00017553, -0x00017552, -0x0001754f, -0x0001754d, -0x0001754a, -0x00017549, -0x00017546, -0x00017544, -0x00017542, -0x00017540, -0x0001753d, -0x0001753c, -0x0001753a, -0x00017537, -0x00017536, -0x00017533, -0x00017532, -0x0001752f, -0x0001752d, -0x0001752a, -0x00017529, -0x00017526, -0x00017524, -0x00017523, -0x00017520, -0x0001751f, -0x0001751c, -0x0001751a, -0x00017517, -0x00017516, -0x00017513, -0x00017511, -0x0001750f, -0x0001750d, -0x0001750a, -0x00017509, -0x00017507, -0x00017504, -0x00017503, -0x00017500, -0x000174ff, -0x000174fc, -0x000174fa, -0x000174f7, -0x000174f6, -0x000174f3, -0x000174f1, -0x000174f0, -0x000174ed, -0x000174ec, -0x000174e9, -0x000174e7, -0x000174e4, -0x000174e3, -0x000174e0, -0x000174de, -0x000174db, -0x000174da, -0x000174d7, -0x000174d6, -0x000174d3, -0x000174d1, -0x000174ce, -0x000174cd, -0x000174cb, -0x000174c9, -0x000174c7, -0x000174c4, -0x000174c3, -0x000174c0, -0x000174be, -0x000174bb, -0x000174ba, -0x000174b7, -0x000174b6, -0x000174b4, -0x000174b1, -0x000174b0, -0x000174ad, -0x000174ab, -0x000174a9, -0x000174a7, -0x000174a4, -0x000174a3, -0x000174a1, -0x0001749e, -0x0001749d, -0x0001749a, -0x00017499, -0x00017496, -0x00017494, -0x00017491, -0x00017490, -0x0001748d, -0x0001748c, -0x0001748a, -0x00017487, -0x00017486, -0x00017483, -0x00017481, -0x0001747e, -0x0001747d, -0x0001747a, -0x00017479, -0x00017476, -0x00017474, -0x00017473, -0x00017470, -0x0001746e, -0x0001746c, -0x0001746a, -0x00017467, -0x00017466, -0x00017463, -0x00017461, -0x0001745e, -0x0001745d, -0x0001745c, -0x00017459, -0x00017457, -0x00017454, -0x00017453, -0x00017450, -0x0001744e, -0x0001744c, -0x0001744a, -0x00017447, -0x00017446, -0x00017444, -0x00017441, -0x00017440, -0x0001743d, -0x0001743c, -0x00017439, -0x00017437, -0x00017434, -0x00017433, -0x00017430, -0x0001742f, -0x0001742d, -0x0001742a, -0x00017429, -0x00017426, -0x00017424, -0x00017421, -0x00017420, -0x0001741d, -0x0001741c, -0x0001741a, -0x00017417, -0x00017416, -0x00017413, -0x00017411, -0x0001740f, -0x0001740d, -0x0001740a, -0x00017409, -0x00017406, -0x00017404, -0x00017403, -0x00017400, -0x000173ff, -0x000173fc, -0x000173fa, -0x000173f7, -0x000173f6, -0x000173f3, -0x000173f1, -0x000173ef, -0x000173ed, -0x000173ec, -0x000173e9, -0x000173e7, -0x000173e4, -0x000173e3, -0x000173e0, -0x000173df, -0x000173dc, -0x000173da, -0x000173d7, -0x000173d5, -0x000173d4, -0x000173d1, -0x000173cf, -0x000173cc, -0x000173cb, -0x000173c9, -0x000173c7, -0x000173c5, -0x000173c2, -0x000173c1, -0x000173be, -0x000173bc, -0x000173ba, -0x000173b8, -0x000173b7, -0x000173b4, -0x000173b2, -0x000173af, -0x000173ae, -0x000173ab, -0x000173aa, -0x000173a7, -0x000173a5, -0x000173a2, -0x000173a1, -0x0001739f, -0x0001739d, -0x0001739b, -0x00017398, -0x00017397, -0x00017394, -0x00017392, -0x0001738f, -0x0001738e, -0x0001738d, -0x0001738a, -0x00017388, -0x00017385, -0x00017384, -0x00017381, -0x00017380, -0x0001737d, -0x0001737b, -0x00017378, -0x00017377, -0x00017375, -0x00017372, -0x00017371, -0x0001736e, -0x0001736d, -0x0001736a, -0x00017368, -0x00017365, -0x00017364, -0x00017363, -0x00017360, -0x0001735e, -0x0001735b, -0x0001735a, -0x00017357, -0x00017356, -0x00017353, -0x00017351, -0x00017350, -0x0001734d, -0x0001734b, -0x00017348, -0x00017347, -0x00017344, -0x00017343, -0x00017340, -0x0001733e, -0x0001733b, -0x0001733a, -0x00017339, -0x00017336, -0x00017334, -0x00017331, -0x00017330, -0x0001732d, -0x0001732b, -0x00017329, -0x00017327, -0x00017326, -0x00017323, -0x00017321, -0x0001731e, -0x0001731d, -0x0001731a, -0x00017319, -0x00017316, -0x00017314, -0x00017311, -0x00017310, -0x0001730e, -0x0001730c, -0x0001730a, -0x00017307, -0x00017306, -0x00017303, -0x00017301, -0x000172ff, -0x000172fd, -0x000172fc, -0x000172f9, -0x000172f7, -0x000172f4, -0x000172f3, -0x000172f0, -0x000172ef, -0x000172ec, -0x000172ea, -0x000172e7, -0x000172e6, -0x000172e4, -0x000172e2, -0x000172e0, -0x000172dd, -0x000172dc, -0x000172d9, -0x000172d7, -0x000172d5, -0x000172d3, -0x000172d2, -0x000172cf, -0x000172cd, -0x000172ca, -0x000172c9, -0x000172c6, -0x000172c5, -0x000172c2, -0x000172c0, -0x000172bd, -0x000172bc, -0x000172b9, -0x000172b8, -0x000172b5, -0x000172b3, -0x000172b2, -0x000172af, -0x000172ad, -0x000172ab, -0x000172a9, -0x000172a6, -0x000172a5, -0x000172a2, -0x000172a0, -0x0001729f, -0x0001729c, -0x0001729b, -0x00017298, -0x00017296, -0x00017293, -0x00017292, -0x0001728f, -0x0001728e, -0x0001728c, -0x00017289, -0x00017288, -0x00017285, -0x00017284, -0x00017281, -0x0001727f, -0x0001727c, -0x0001727b, -0x00017279, -0x00017277, -0x00017275, -0x00017272, -0x00017271, -0x0001726e, -0x0001726c, -0x0001726a, -0x00017268, -0x00017267, -0x00017264, -0x00017262, -0x0001725f, -0x0001725e, -0x0001725b, -0x0001725a, -0x00017257, -0x00017255, -0x00017254, -0x00017251, -0x0001724f, -0x0001724d, -0x0001724b, -0x00017248, -0x00017247, -0x00017244, -0x00017242, -0x00017241, -0x0001723e, -0x0001723d, -0x0001723a, -0x00017238, -0x00017235, -0x00017234, -0x00017231, -0x00017230, -0x0001722e, -0x0001722b, -0x0001722a, -0x00017227, -0x00017226, -0x00017223, -0x00017221, -0x0001721e, -0x0001721d, -0x0001721b, -0x00017219, -0x00017217, -0x00017214, -0x00017213, -0x00017210, -0x0001720e, -0x0001720c, -0x0001720a, -0x00017209, -0x00017206, -0x00017204, -0x00017201, -0x00017200, -0x000171fd, -0x000171fc, -0x000171f9, -0x000171f7, -0x000171f6, -0x000171f3, -0x000171f2, -0x000171ef, -0x000171ed, -0x000171ea, -0x000171e9, -0x000171e6, -0x000171e5, -0x000171e3, -0x000171e0, -0x000171df, -0x000171dc, -0x000171da, -0x000171d8, -0x000171d6, -0x000171d3, -0x000171d2, -0x000171d0, -0x000171cd, -0x000171cc, -0x000171c9, -0x000171c8, -0x000171c5, -0x000171c3, -0x000171c0, -0x000171bf, -0x000171bd, -0x000171ba, -0x000171b9, -0x000171b6, -0x000171b4, -0x000171b3, -0x000171b0, -0x000171ae, -0x000171ac, -0x000171aa, -0x000171a7, -0x000171a6, -0x000171a3, -0x000171a1, -0x000171a0, -0x0001719d, -0x0001719c, -0x00017199, -0x00017197, -0x00017194, -0x00017193, -0x00017190, -0x0001718f, -0x0001718d, -0x0001718a, -0x00017189, -0x00017186, -0x00017185, -0x00017182, -0x00017180, -0x0001717f, -0x0001717c, -0x0001717b, -0x00017178, -0x00017176, -0x00017173, -0x00017172, -0x0001716f, -0x0001716e, -0x0001716c, -0x00017169, -0x00017168, -0x00017165, -0x00017163, -0x00017161, -0x0001715f, -0x0001715c, -0x0001715b, -0x00017159, -0x00017156, -0x00017155, -0x00017152, -0x00017151, -0x0001714e, -0x0001714c, -0x0001714a, -0x00017148, -0x00017147, -0x00017144, -0x00017142, -0x0001713f, -0x0001713e, -0x0001713b, -0x0001713a, -0x00017138, -0x00017135, -0x00017134, -0x00017131, -0x00017130, -0x0001712d, -0x0001712b, -0x00017128, -0x00017127, -0x00017125, -0x00017123, -0x00017121, -0x0001711e, -0x0001711d, -0x0001711a, -0x00017119, -0x00017116, -0x00017114, -0x00017113, -0x00017110, -0x0001710e, -0x0001710c, -0x0001710a, -0x00017107, -0x00017106, -0x00017103, -0x00017101, -0x00017100, -0x000170fd, -0x000170fc, -0x000170f9, -0x000170f7, -0x000170f4, -0x000170f3, -0x000170f0, -0x000170ef, -0x000170ed, -0x000170ea, -0x000170e9, -0x000170e6, -0x000170e5, -0x000170e2, -0x000170e0, -0x000170df, -0x000170dc, -0x000170db, -0x000170d8, -0x000170d6, -0x000170d3, -0x000170d2, -0x000170cf, -0x000170ce, -0x000170cc, -0x000170c9, -0x000170c8, -0x000170c5, -0x000170c3, -0x000170c1, -0x000170bf, -0x000170bc, -0x000170bb, -0x000170b9, -0x000170b6, -0x000170b5, -0x000170b2, -0x000170b1, -0x000170ae, -0x000170ad, -0x000170aa, -0x000170a8, -0x000170a5, -0x000170a4, -0x000170a2, -0x000170a0, -0x0001709e, -0x0001709b, -0x0001709a, -0x00017097, -0x00017096, -0x00017093, -0x00017091, -0x00017090, -0x0001708d, -0x0001708b, -0x00017089, -0x00017087, -0x00017084, -0x00017083, -0x00017081, -0x0001707f, -0x0001707d, -0x0001707a, -0x00017079, -0x00017076, -0x00017074, -0x00017072, -0x00017070, -0x0001706f, -0x0001706c, -0x0001706a, -0x00017068, -0x00017066, -0x00017063, -0x00017062, -0x00017060, -0x0001705d, -0x0001705c, -0x00017059, -0x00017058, -0x00017055, -0x00017053, -0x00017051, -0x0001704f, -0x0001704e, -0x0001704b, -0x00017049, -0x00017046, -0x00017045, -0x00017042, -0x00017041, -0x0001703f, -0x0001703c, -0x0001703b, -0x00017038, -0x00017037, -0x00017034, -0x00017032, -0x0001702f, -0x0001702e, -0x0001702d, -0x0001702a, -0x00017028, -0x00017025, -0x00017024, -0x00017021, -0x00017020, -0x0001701e, -0x0001701b, -0x0001701a, -0x00017017, -0x00017016, -0x00017013, -0x00017011, -0x0001700e, -0x0001700d, -0x0001700c, -0x00017009, -0x00017007, -0x00017004, -0x00017003, -0x00017000, -0x00016fff, -0x00016ffd, -0x00016ffa, -0x00016ff9, -0x00016ff6, -0x00016ff5, -0x00016ff2, -0x00016ff0, -0x00016fed, -0x00016fec, -0x00016fea, -0x00016fe8, -0x00016fe6, -0x00016fe3, -0x00016fe2, -0x00016fdf, -0x00016fde, -0x00016fdc, -0x00016fd9, -0x00016fd8, -0x00016fd5, -0x00016fd3, -0x00016fd1, -0x00016fcf, -0x00016fcc, -0x00016fcb, -0x00016fc9, -0x00016fc7, -0x00016fc5, -0x00016fc2, -0x00016fc1, -0x00016fbe, -0x00016fbc, -0x00016fbb, -0x00016fb8, -0x00016fb7, -0x00016fb4, -0x00016fb2, -0x00016fb0, -0x00016fae, -0x00016fab, -0x00016fa9, -0x00016fa8, -0x00016fa5, -0x00016fa3, -0x00016fa2, -0x00016f9f, -0x00016f9e, -0x00016f9b, -0x00016f99, -0x00016f97, -0x00016f95, -0x00016f92, -0x00016f91, -0x00016f8f, -0x00016f8c, -0x00016f8b, -0x00016f88, -0x00016f87, -0x00016f84, -0x00016f82, -0x00016f81, -0x00016f7e, -0x00016f7d, -0x00016f7a, -0x00016f78, -0x00016f76, -0x00016f74, -0x00016f73, -0x00016f70, -0x00016f6e, -0x00016f6c, -0x00016f6a, -0x00016f67, -0x00016f66, -0x00016f64, -0x00016f61, -0x00016f60, -0x00016f5d, -0x00016f5c, -0x00016f59, -0x00016f57, -0x00016f55, -0x00016f53, -0x00016f52, -0x00016f4f, -0x00016f4d, -0x00016f4b, -0x00016f49, -0x00016f46, -0x00016f45, -0x00016f43, -0x00016f41, -0x00016f3f, -0x00016f3c, -0x00016f3b, -0x00016f38, -0x00016f36, -0x00016f35, -0x00016f32, -0x00016f31, -0x00016f2e, -0x00016f2c, -0x00016f2a, -0x00016f28, -0x00016f27, -0x00016f24, -0x00016f22, -0x00016f20, -0x00016f1e, -0x00016f1b, -0x00016f1a, -0x00016f17, -0x00016f16, -0x00016f14, -0x00016f11, -0x00016f10, -0x00016f0d, -0x00016f0b, -0x00016f09, -0x00016f07, -0x00016f06, -0x00016f03, -0x00016f01, -0x00016eff, -0x00016efd, -0x00016efa, -0x00016ef9, -0x00016ef7, -0x00016ef5, -0x00016ef3, -0x00016ef0, -0x00016eef, -0x00016eec, -0x00016eea, -0x00016ee8, -0x00016ee6, -0x00016ee5, -0x00016ee2, -0x00016ee0, -0x00016ede, -0x00016edc, -0x00016ed9, -0x00016ed8, -0x00016ed6, -0x00016ed4, -0x00016ed2, -0x00016ecf, -0x00016ece, -0x00016ecb, -0x00016eca, -0x00016ec8, -0x00016ec5, -0x00016ec4, -0x00016ec1, -0x00016ebf, -0x00016ebd, -0x00016ebb, -0x00016eba, -0x00016eb7, -0x00016eb5, -0x00016eb3, -0x00016eb1, -0x00016eae, -0x00016ead, -0x00016eaa, -0x00016ea9, -0x00016ea7, -0x00016ea4, -0x00016ea3, -0x00016ea0, -0x00016e9f, -0x00016e9c, -0x00016e9a, -0x00016e98, -0x00016e96, -0x00016e93, -0x00016e92, -0x00016e90, -0x00016e8e, -0x00016e8c, -0x00016e89, -0x00016e88, -0x00016e85, -0x00016e84, -0x00016e82, -0x00016e7f, -0x00016e7e, -0x00016e7b, -0x00016e7a, -0x00016e77, -0x00016e75, -0x00016e74, -0x00016e71, -0x00016e70, -0x00016e6d, -0x00016e6b, -0x00016e68, -0x00016e67, -0x00016e66, -0x00016e63, -0x00016e61, -0x00016e5e, -0x00016e5d, -0x00016e5a, -0x00016e59, -0x00016e57, -0x00016e54, -0x00016e53, -0x00016e50, -0x00016e4f, -0x00016e4c, -0x00016e4a, -0x00016e49, -0x00016e46, -0x00016e45, -0x00016e42, -0x00016e40, -0x00016e3d, -0x00016e3c, -0x00016e3b, -0x00016e38, -0x00016e36, -0x00016e33, -0x00016e32, -0x00016e2f, -0x00016e2e, -0x00016e2c, -0x00016e29, -0x00016e28, -0x00016e25, -0x00016e24, -0x00016e21, -0x00016e1f, -0x00016e1e, -0x00016e1b, -0x00016e1a, -0x00016e17, -0x00016e15, -0x00016e13, -0x00016e11, -0x00016e10, -0x00016e0d, -0x00016e0b, -0x00016e09, -0x00016e07, -0x00016e04, -0x00016e03, -0x00016e01, -0x00016dff, -0x00016dfd, -0x00016dfa, -0x00016df9, -0x00016df6, -0x00016df5, -0x00016df3, -0x00016df0, -0x00016def, -0x00016dec, -0x00016deb, -0x00016de8, -0x00016de6, -0x00016de5, -0x00016de2, -0x00016de1, -0x00016dde, -0x00016ddc, -0x00016dd9, -0x00016dd8, -0x00016dd7, -0x00016dd4, -0x00016dd2, -0x00016dcf, -0x00016dce, -0x00016dcb, -0x00016dca, -0x00016dc8, -0x00016dc5, -0x00016dc4, -0x00016dc1, -0x00016dc0, -0x00016dbd, -0x00016dbb, -0x00016dba, -0x00016db7, -0x00016db6, -0x00016db3, -0x00016db1, -0x00016daf, -0x00016dad, -0x00016dac, -0x00016da9, -0x00016da7, -0x00016da5, -0x00016da3, -0x00016da0, -0x00016d9f, -0x00016d9d, -0x00016d9a, -0x00016d99, -0x00016d96, -0x00016d94, -0x00016d93, -0x00016d90, -0x00016d8f, -0x00016d8c, -0x00016d8a, -0x00016d87, -0x00016d86, -0x00016d85, -0x00016d82, -0x00016d80, -0x00016d7d, -0x00016d7c, -0x00016d7b, -0x00016d78, -0x00016d76, -0x00016d73, -0x00016d72, -0x00016d6f, -0x00016d6e, -0x00016d6c, -0x00016d6a, -0x00016d68, -0x00016d65, -0x00016d64, -0x00016d61, -0x00016d60, -0x00016d5e, -0x00016d5b, -0x00016d5a, -0x00016d57, -0x00016d56, -0x00016d53, -0x00016d51, -0x00016d50, -0x00016d4d, -0x00016d4c, -0x00016d49, -0x00016d47, -0x00016d44, -0x00016d43, -0x00016d42, -0x00016d3f, -0x00016d3d, -0x00016d3a, -0x00016d39, -0x00016d36, -0x00016d35, -0x00016d33, -0x00016d30, -0x00016d2f, -0x00016d2c, -0x00016d2b, -0x00016d28, -0x00016d26, -0x00016d25, -0x00016d22, -0x00016d21, -0x00016d1e, -0x00016d1d, -0x00016d1b, -0x00016d18, -0x00016d17, -0x00016d14, -0x00016d13, -0x00016d10, -0x00016d0e, -0x00016d0d, -0x00016d0a, -0x00016d09, -0x00016d06, -0x00016d04, -0x00016d01, -0x00016d00, -0x00016cff, -0x00016cfc, -0x00016cfa, -0x00016cf7, -0x00016cf6, -0x00016cf3, -0x00016cf2, -0x00016cf0, -0x00016ced, -0x00016cec, -0x00016ce9, -0x00016ce8, -0x00016ce5, -0x00016ce3, -0x00016ce2, -0x00016cdf, -0x00016cde, -0x00016cdb, -0x00016cda, -0x00016cd7, -0x00016cd5, -0x00016cd4, -0x00016cd1, -0x00016cd0, -0x00016ccd, -0x00016ccb, -0x00016cc8, -0x00016cc7, -0x00016cc6, -0x00016cc3, -0x00016cc1, -0x00016cbe, -0x00016cbd, -0x00016cba, -0x00016cb9, -0x00016cb7, -0x00016cb4, -0x00016cb3, -0x00016cb0, -0x00016caf, -0x00016cad, -0x00016caa, -0x00016ca9, -0x00016ca6, -0x00016ca5, -0x00016ca2, -0x00016ca0, -0x00016c9f, -0x00016c9c, -0x00016c9b, -0x00016c98, -0x00016c97, -0x00016c94, -0x00016c92, -0x00016c90, -0x00016c8e, -0x00016c8b, -0x00016c8a, -0x00016c89, -0x00016c86, -0x00016c84, -0x00016c81, -0x00016c80, -0x00016c7f, -0x00016c7c, -0x00016c7a, -0x00016c77, -0x00016c76, -0x00016c73, -0x00016c72, -0x00016c70, -0x00016c6d, -0x00016c6c, -0x00016c69, -0x00016c68, -0x00016c65, -0x00016c64, -0x00016c62, -0x00016c5f, -0x00016c5e, -0x00016c5b, -0x00016c5a, -0x00016c58, -0x00016c55, -0x00016c54, -0x00016c51, -0x00016c50, -0x00016c4d, -0x00016c4b, -0x00016c4a, -0x00016c47, -0x00016c46, -0x00016c43, -0x00016c41, -0x00016c3f, -0x00016c3d, -0x00016c3c, -0x00016c39, -0x00016c37, -0x00016c35, -0x00016c33, -0x00016c30, -0x00016c2f, -0x00016c2e, -0x00016c2b, -0x00016c29, -0x00016c26, -0x00016c25, -0x00016c24, -0x00016c21, -0x00016c1f, -0x00016c1c, -0x00016c1b, -0x00016c18, -0x00016c17, -0x00016c15, -0x00016c12, -0x00016c11, -0x00016c0e, -0x00016c0d, -0x00016c0a, -0x00016c09, -0x00016c07, -0x00016c04, -0x00016c03, -0x00016c00, -0x00016bff, -0x00016bfd, -0x00016bfa, -0x00016bf9, -0x00016bf6, -0x00016bf5, -0x00016bf2, -0x00016bf0, -0x00016bef, -0x00016bec, -0x00016beb, -0x00016be8, -0x00016be6, -0x00016be4, -0x00016be2, -0x00016be1, -0x00016bde, -0x00016bdc, -0x00016bda, -0x00016bd8, -0x00016bd7, -0x00016bd4, -0x00016bd3, -0x00016bd0, -0x00016bce, -0x00016bcb, -0x00016bca, -0x00016bc9, -0x00016bc6, -0x00016bc4, -0x00016bc1, -0x00016bc0, -0x00016bbd, -0x00016bbc, -0x00016bba, -0x00016bb7, -0x00016bb6, -0x00016bb3, -0x00016bb2, -0x00016baf, -0x00016bae, -0x00016bac, -0x00016ba9, -0x00016ba8, -0x00016ba5, -0x00016ba4, -0x00016ba2, -0x00016b9f, -0x00016b9e, -0x00016b9b, -0x00016b9a, -0x00016b97, -0x00016b95, -0x00016b93, -0x00016b91, -0x00016b8f, -0x00016b8e, -0x00016b8b, -0x00016b8a, -0x00016b87, -0x00016b85, -0x00016b82, -0x00016b81, -0x00016b80, -0x00016b7d, -0x00016b7b, -0x00016b79, -0x00016b77, -0x00016b76, -0x00016b73, -0x00016b71, -0x00016b6f, -0x00016b6d, -0x00016b6a, -0x00016b69, -0x00016b68, -0x00016b65, -0x00016b63, -0x00016b60, -0x00016b5f, -0x00016b5e, -0x00016b5b, -0x00016b59, -0x00016b56, -0x00016b55, -0x00016b52, -0x00016b51, -0x00016b4f, -0x00016b4d, -0x00016b4b, -0x00016b48, -0x00016b47, -0x00016b45, -0x00016b43, -0x00016b41, -0x00016b3e, -0x00016b3d, -0x00016b3a, -0x00016b39, -0x00016b37, -0x00016b34, -0x00016b33, -0x00016b30, -0x00016b2f, -0x00016b2d, -0x00016b2b, -0x00016b29, -0x00016b26, -0x00016b25, -0x00016b22, -0x00016b21, -0x00016b1f, -0x00016b1c, -0x00016b1b, -0x00016b18, -0x00016b17, -0x00016b15, -0x00016b12, -0x00016b11, -0x00016b0e, -0x00016b0d, -0x00016b0a, -0x00016b09, -0x00016b07, -0x00016b04, -0x00016b03, -0x00016b00, -0x00016aff, -0x00016afc, -0x00016afa, -0x00016af9, -0x00016af6, -0x00016af5, -0x00016af2, -0x00016af0, -0x00016aef, -0x00016aec, -0x00016aeb, -0x00016ae8, -0x00016ae6, -0x00016ae4, -0x00016ae2, -0x00016ae1, -0x00016ade, -0x00016add, -0x00016ada, -0x00016ad8, -0x00016ad7, -0x00016ad4, -0x00016ad3, -0x00016ad0, -0x00016ace, -0x00016acc, -0x00016aca, -0x00016ac9, -0x00016ac6, -0x00016ac4, -0x00016ac2, -0x00016ac0, -0x00016abf, -0x00016abc, -0x00016abb, -0x00016ab8, -0x00016ab6, -0x00016ab3, -0x00016ab2, -0x00016ab1, -0x00016aae, -0x00016aac, -0x00016aaa, -0x00016aa8, -0x00016aa7, -0x00016aa4, -0x00016aa2, -0x00016aa0, -0x00016a9e, -0x00016a9b, -0x00016a9a, -0x00016a98, -0x00016a96, -0x00016a94, -0x00016a92, -0x00016a90, -0x00016a8d, -0x00016a8c, -0x00016a89, -0x00016a88, -0x00016a86, -0x00016a84, -0x00016a82, -0x00016a7f, -0x00016a7e, -0x00016a7c, -0x00016a7a, -0x00016a78, -0x00016a75, -0x00016a74, -0x00016a71, -0x00016a70, -0x00016a6e, -0x00016a6b, -0x00016a6a, -0x00016a67, -0x00016a66, -0x00016a64, -0x00016a62, -0x00016a60, -0x00016a5d, -0x00016a5c, -0x00016a59, -0x00016a58, -0x00016a56, -0x00016a53, -0x00016a52, -0x00016a4f, -0x00016a4e, -0x00016a4c, -0x00016a4a, -0x00016a48, -0x00016a45, -0x00016a44, -0x00016a42, -0x00016a40, -0x00016a3e, -0x00016a3b, -0x00016a3a, -0x00016a37, -0x00016a36, -0x00016a34, -0x00016a31, -0x00016a30, -0x00016a2d, -0x00016a2c, -0x00016a2a, -0x00016a28, -0x00016a26, -0x00016a23, -0x00016a22, -0x00016a1f, -0x00016a1e, -0x00016a1c, -0x00016a19, -0x00016a18, -0x00016a15, -0x00016a14, -0x00016a12, -0x00016a10, -0x00016a0e, -0x00016a0b, -0x00016a0a, -0x00016a08, -0x00016a06, -0x00016a04, -0x00016a01, -0x00016a00, -0x000169fd, -0x000169fc, -0x000169fa, -0x000169f8, -0x000169f6, -0x000169f3, -0x000169f2, -0x000169f0, -0x000169ee, -0x000169ec, -0x000169e9, -0x000169e8, -0x000169e5, -0x000169e4, -0x000169e2, -0x000169df, -0x000169de, -0x000169db, -0x000169da, -0x000169d8, -0x000169d6, -0x000169d4, -0x000169d1, -0x000169d0, -0x000169cf, -0x000169cc, -0x000169ca, -0x000169c7, -0x000169c6, -0x000169c3, -0x000169c2, -0x000169c0, -0x000169be, -0x000169bc, -0x000169b9, -0x000169b8, -0x000169b6, -0x000169b4, -0x000169b2, -0x000169af, -0x000169ae, -0x000169ab, -0x000169aa, -0x000169a8, -0x000169a6, -0x000169a4, -0x000169a1, -0x000169a0, -0x0001699e, -0x0001699c, -0x0001699a, -0x00016997, -0x00016996, -0x00016994, -0x00016991, -0x00016990, -0x0001698e, -0x0001698c, -0x0001698a, -0x00016987, -0x00016986, -0x00016983, -0x00016982, -0x00016980, -0x0001697e, -0x0001697c, -0x00016979, -0x00016978, -0x00016976, -0x00016974, -0x00016972, -0x0001696f, -0x0001696e, -0x0001696d, -0x0001696a, -0x00016968, -0x00016966, -0x00016964, -0x00016961, -0x00016960, -0x0001695e, -0x0001695c, -0x0001695a, -0x00016957, -0x00016956, -0x00016955, -0x00016952, -0x00016950, -0x0001694e, -0x0001694c, -0x0001694b, -0x00016948, -0x00016947, -0x00016944, -0x00016942, -0x00016941, -0x0001693e, -0x0001693d, -0x0001693a, -0x00016938, -0x00016936, -0x00016934, -0x00016933, -0x00016930, -0x0001692f, -0x0001692c, -0x0001692a, -0x00016929, -0x00016926, -0x00016925, -0x00016922, -0x00016920, -0x0001691f, -0x0001691c, -0x0001691b, -0x00016918, -0x00016917, -0x00016915, -0x00016912, -0x00016911, -0x0001690e, -0x0001690d, -0x0001690a, -0x00016908, -0x00016907, -0x00016904, -0x00016903, -0x00016900, -0x000168ff, -0x000168fd, -0x000168fa, -0x000168f9, -0x000168f6, -0x000168f5, -0x000168f3, -0x000168f0, -0x000168ef, -0x000168ec, -0x000168eb, -0x000168e8, -0x000168e7, -0x000168e5, -0x000168e2, -0x000168e1, -0x000168de, -0x000168dd, -0x000168db, -0x000168d9, -0x000168d7, -0x000168d4, -0x000168d3, -0x000168d1, -0x000168cf, -0x000168cd, -0x000168ca, -0x000168c9, -0x000168c8, -0x000168c5, -0x000168c3, -0x000168c1, -0x000168bf, -0x000168bc, -0x000168bb, -0x000168b9, -0x000168b7, -0x000168b5, -0x000168b2, -0x000168b1, -0x000168b0, -0x000168ad, -0x000168ab, -0x000168a9, -0x000168a7, -0x000168a6, -0x000168a3, -0x000168a2, -0x0001689f, -0x0001689d, -0x0001689a, -0x00016899, -0x00016898, -0x00016895, -0x00016894, -0x00016891, -0x0001688f, -0x0001688d, -0x0001688b, -0x0001688a, -0x00016887, -0x00016886, -0x00016883, -0x00016881, -0x00016880, -0x0001687d, -0x0001687c, -0x00016879, -0x00016878, -0x00016876, -0x00016873, -0x00016872, -0x0001686f, -0x0001686e, -0x0001686b, -0x00016869, -0x00016868, -0x00016865, -0x00016864, -0x00016861, -0x00016860, -0x0001685e, -0x0001685b, -0x0001685a, -0x00016857, -0x00016856, -0x00016854, -0x00016852, -0x00016850, -0x0001684d, -0x0001684c, -0x0001684b, -0x00016848, -0x00016846, -0x00016844, -0x00016842, -0x00016841, -0x0001683e, -0x0001683c, -0x0001683a, -0x00016838, -0x00016837, -0x00016834, -0x00016833, -0x00016830, -0x0001682e, -0x0001682c, -0x0001682a, -0x00016829, -0x00016826, -0x00016825, -0x00016822, -0x00016820, -0x0001681f, -0x0001681c, -0x0001681b, -0x00016818, -0x00016817, -0x00016815, -0x00016812, -0x00016811, -0x0001680e, -0x0001680d, -0x0001680b, -0x00016808, -0x00016807, -0x00016804, -0x00016803, -0x00016801, -0x000167ff, -0x000167fd, -0x000167fa, -0x000167f9, -0x000167f8, -0x000167f5, -0x000167f3, -0x000167f1, -0x000167ef, -0x000167ec, -0x000167eb, -0x000167ea, -0x000167e7, -0x000167e5, -0x000167e2, -0x000167e1, -0x000167e0, -0x000167dd, -0x000167db, -0x000167d9, -0x000167d7, -0x000167d6, -0x000167d3, -0x000167d2, -0x000167cf, -0x000167cd, -0x000167cc, -0x000167c9, -0x000167c8, -0x000167c5, -0x000167c4, -0x000167c2, -0x000167bf, -0x000167be, -0x000167bb, -0x000167ba, -0x000167b8, -0x000167b5, -0x000167b4, -0x000167b1, -0x000167b0, -0x000167ad, -0x000167ac, -0x000167aa, -0x000167a7, -0x000167a6, -0x000167a3, -0x000167a2, -0x000167a0, -0x0001679e, -0x0001679c, -0x00016799, -0x00016797, -0x00016796, -0x00016793, -0x00016792, -0x00016790, -0x0001678e, -0x0001678c, -0x00016789, -0x00016788, -0x00016787, -0x00016784, -0x00016782, -0x00016780, -0x0001677e, -0x0001677d, -0x0001677a, -0x00016779, -0x00016776, -0x00016774, -0x00016773, -0x00016770, -0x0001676f, -0x0001676c, -0x0001676b, -0x00016769, -0x00016766, -0x00016765, -0x00016762, -0x00016761, -0x0001675f, -0x0001675d, -0x0001675b, -0x00016758, -0x00016757, -0x00016756, -0x00016753, -0x00016751, -0x0001674f, -0x0001674d, -0x0001674c, -0x00016749, -0x00016748, -0x00016745, -0x00016743, -0x00016742, -0x0001673f, -0x0001673e, -0x0001673b, -0x00016739, -0x00016738, -0x00016735, -0x00016734, -0x00016731, -0x00016730, -0x0001672e, -0x0001672b, -0x0001672a, -0x00016727, -0x00016726, -0x00016724, -0x00016722, -0x00016720, -0x0001671d, -0x0001671c, -0x0001671b, -0x00016718, -0x00016716, -0x00016714, -0x00016712, -0x0001670f, -0x0001670e, -0x0001670d, -0x0001670a, -0x00016708, -0x00016706, -0x00016704, -0x00016703, -0x00016700, -0x000166ff, -0x000166fc, -0x000166fa, -0x000166f9, -0x000166f6, -0x000166f5, -0x000166f2, -0x000166f1, -0x000166ef, -0x000166ec, -0x000166eb, -0x000166e8, -0x000166e7, -0x000166e5, -0x000166e3, -0x000166e1, -0x000166de, -0x000166dd, -0x000166dc, -0x000166d9, -0x000166d7, -0x000166d5, -0x000166d3, -0x000166d2, -0x000166cf, -0x000166ce, -0x000166cb, -0x000166c9, -0x000166c8, -0x000166c5, -0x000166c4, -0x000166c1, -0x000166bf, -0x000166be, -0x000166bb, -0x000166ba, -0x000166b7, -0x000166b6, -0x000166b4, -0x000166b1, -0x000166b0, -0x000166ad, -0x000166ac, -0x000166aa, -0x000166a8, -0x000166a6, -0x000166a3, -0x000166a2, -0x000166a1, -0x0001669e, -0x0001669d, -0x0001669a, -0x00016698, -0x00016696, -0x00016694, -0x00016693, -0x00016690, -0x0001668f, -0x0001668c, -0x0001668a, -0x00016689, -0x00016686, -0x00016685, -0x00016682, -0x00016681, -0x0001667f, -0x0001667c, -0x0001667b, -0x00016678, -0x00016677, -0x00016675, -0x00016673, -0x00016671, -0x0001666e, -0x0001666d, -0x0001666c, -0x00016669, -0x00016667, -0x00016665, -0x00016663, -0x00016662, -0x0001665f, -0x0001665e, -0x0001665b, -0x0001665a, -0x00016658, -0x00016655, -0x00016654, -0x00016651, -0x00016650, -0x0001664e, -0x0001664c, -0x0001664a, -0x00016647, -0x00016646, -0x00016645, -0x00016642, -0x00016640, -0x0001663e, -0x0001663c, -0x0001663b, -0x00016638, -0x00016637, -0x00016634, -0x00016632, -0x00016631, -0x0001662e, -0x0001662d, -0x0001662a, -0x00016629, -0x00016627, -0x00016624, -0x00016623, -0x00016620, -0x0001661f, -0x0001661d, -0x0001661b, -0x00016619, -0x00016616, -0x00016615, -0x00016614, -0x00016611, -0x0001660f, -0x0001660d, -0x0001660b, -0x0001660a, -0x00016607, -0x00016606, -0x00016603, -0x00016601, -0x00016600, -0x000165fd, -0x000165fc, -0x000165f9, -0x000165f8, -0x000165f6, -0x000165f3, -0x000165f2, -0x000165ef, -0x000165ee, -0x000165ec, -0x000165ea, -0x000165e8, -0x000165e5, -0x000165e4, -0x000165e3, -0x000165e0, -0x000165de, -0x000165dc, -0x000165da, -0x000165d9, -0x000165d6, -0x000165d5, -0x000165d2, -0x000165d0, -0x000165cf, -0x000165cc, -0x000165cb, -0x000165c8, -0x000165c7, -0x000165c5, -0x000165c2, -0x000165c1, -0x000165be, -0x000165bd, -0x000165bb, -0x000165b9, -0x000165b7, -0x000165b4, -0x000165b3, -0x000165b2, -0x000165af, -0x000165ad, -0x000165ab, -0x000165a9, -0x000165a8, -0x000165a5, -0x000165a4, -0x000165a2, -0x0001659f, -0x0001659e, -0x0001659c, -0x00016599, -0x00016598, -0x00016595, -0x00016594, -0x00016592, -0x00016590, -0x0001658e, -0x0001658b, -0x0001658a, -0x00016589, -0x00016586, -0x00016584, -0x00016582, -0x00016580, -0x0001657f, -0x0001657c, -0x0001657b, -0x00016578, -0x00016577, -0x00016575, -0x00016572, -0x00016571, -0x0001656e, -0x0001656d, -0x0001656b, -0x00016569, -0x00016567, -0x00016566, -0x00016563, -0x00016562, -0x0001655f, -0x0001655d, -0x0001655c, -0x00016559, -0x00016558, -0x00016555, -0x00016554, -0x00016552, -0x0001654f, -0x0001654e, -0x0001654b, -0x0001654a, -0x00016549, -0x00016546, -0x00016544, -0x00016542, -0x00016540, -0x0001653f, -0x0001653c, -0x0001653b, -0x00016538, -0x00016536, -0x00016535, -0x00016532, -0x00016531, -0x0001652e, -0x0001652d, -0x0001652b, -0x00016528, -0x00016527, -0x00016526, -0x00016523, -0x00016521, -0x0001651f, -0x0001651d, -0x0001651c, -0x00016519, -0x00016518, -0x00016515, -0x00016514, -0x00016512, -0x0001650f, -0x0001650e, -0x0001650b, -0x0001650a, -0x00016508, -0x00016506, -0x00016504, -0x00016501, -0x00016500, -0x000164ff, -0x000164fc, -0x000164fa, -0x000164f8, -0x000164f6, -0x000164f5, -0x000164f2, -0x000164f1, -0x000164ee, -0x000164ec, -0x000164eb, -0x000164e8, -0x000164e7, -0x000164e4, -0x000164e3, -0x000164e1, -0x000164df, -0x000164dd, -0x000164dc, -0x000164d9, -0x000164d8, -0x000164d5, -0x000164d3, -0x000164d2, -0x000164cf, -0x000164ce, -0x000164cb, -0x000164ca, -0x000164c8, -0x000164c5, -0x000164c4, -0x000164c1, -0x000164c0, -0x000164be, -0x000164bc, -0x000164ba, -0x000164b7, -0x000164b6, -0x000164b5, -0x000164b2, -0x000164b1, -0x000164ae, -0x000164ac, -0x000164ab, -0x000164a8, -0x000164a7, -0x000164a4, -0x000164a3, -0x000164a0, -0x0001649f, -0x0001649d, -0x0001649a, -0x00016499, -0x00016496, -0x00016495, -0x00016493, -0x00016491, -0x0001648f, -0x0001648e, -0x0001648b, -0x0001648a, -0x00016487, -0x00016486, -0x00016484, -0x00016481, -0x00016480, -0x0001647d, -0x0001647c, -0x0001647a, -0x00016478, -0x00016476, -0x00016473, -0x00016472, -0x00016471, -0x0001646e, -0x0001646c, -0x0001646b, -0x00016468, -0x00016467, -0x00016464, -0x00016463, -0x00016461, -0x0001645f, -0x0001645d, -0x0001645a, -0x00016459, -0x00016458, -0x00016455, -0x00016453, -0x00016451, -0x0001644f, -0x0001644e, -0x0001644b, -0x0001644a, -0x00016447, -0x00016446, -0x00016444, -0x00016441, -0x00016440, -0x0001643f, -0x0001643c, -0x0001643a, -0x00016438, -0x00016436, -0x00016435, -0x00016432, -0x00016431, -0x0001642e, -0x0001642d, -0x0001642b, -0x00016428, -0x00016427, -0x00016424, -0x00016423, -0x00016421, -0x0001641f, -0x0001641d, -0x0001641a, -0x00016419, -0x00016418, -0x00016415, -0x00016413, -0x00016412, -0x0001640f, -0x0001640e, -0x0001640b, -0x0001640a, -0x00016408, -0x00016406, -0x00016404, -0x00016401, -0x00016400, -0x000163ff, -0x000163fc, -0x000163fa, -0x000163f8, -0x000163f6, -0x000163f5, -0x000163f2, -0x000163f1, -0x000163ef, -0x000163ed, -0x000163eb, -0x000163e8, -0x000163e7, -0x000163e6, -0x000163e3, -0x000163e1, -0x000163df, -0x000163dd, -0x000163dc, -0x000163d9, -0x000163d8, -0x000163d5, -0x000163d4, -0x000163d2, -0x000163cf, -0x000163ce, -0x000163cb, -0x000163ca, -0x000163c8, -0x000163c6, -0x000163c4, -0x000163c3, -0x000163c0, -0x000163bf, -0x000163bc, -0x000163ba, -0x000163b9, -0x000163b6, -0x000163b5, -0x000163b2, -0x000163b0, -0x000163af, -0x000163ac, -0x000163ab, -0x000163a9, -0x000163a6, -0x000163a5, -0x000163a4, -0x000163a1, -0x0001639f, -0x0001639d, -0x0001639b, -0x0001639a, -0x00016397, -0x00016396, -0x00016393, -0x00016392, -0x00016390, -0x0001638d, -0x0001638c, -0x0001638b, -0x00016388, -0x00016387, -0x00016384, -0x00016382, -0x00016381, -0x0001637e, -0x0001637d, -0x0001637a, -0x00016379, -0x00016377, -0x00016374, -0x00016373, -0x00016370, -0x0001636f, -0x0001636e, -0x0001636b, -0x00016369, -0x00016368, -0x00016365, -0x00016364, -0x00016361, -0x00016360, -0x0001635e, -0x0001635c, -0x0001635a, -0x00016357, -0x00016356, -0x00016355, -0x00016352, -0x00016350, -0x0001634f, -0x0001634c, -0x0001634b, -0x00016348, -0x00016347, -0x00016345, -0x00016343, -0x00016341, -0x0001633e, -0x0001633d, -0x0001633c, -0x00016339, -0x00016337, -0x00016336, -0x00016333, -0x00016332, -0x0001632f, -0x0001632e, -0x0001632c, -0x0001632a, -0x00016328, -0x00016325, -0x00016324, -0x00016323, -0x00016320, -0x0001631f, -0x0001631c, -0x0001631a, -0x00016319, -0x00016316, -0x00016315, -0x00016313, -0x00016311, -0x0001630f, -0x0001630c, -0x0001630b, -0x0001630a, -0x00016307, -0x00016306, -0x00016303, -0x00016301, -0x00016300, -0x000162fd, -0x000162fc, -0x000162fa, -0x000162f8, -0x000162f6, -0x000162f4, -0x000162f2, -0x000162f1, -0x000162ee, -0x000162ed, -0x000162ea, -0x000162e8, -0x000162e7, -0x000162e4, -0x000162e3, -0x000162e0, -0x000162df, -0x000162dd, -0x000162db, -0x000162d9, -0x000162d8, -0x000162d5, -0x000162d4, -0x000162d1, -0x000162cf, -0x000162ce, -0x000162cb, -0x000162ca, -0x000162c7, -0x000162c6, -0x000162c4, -0x000162c2, -0x000162c0, -0x000162bf, -0x000162bc, -0x000162bb, -0x000162b8, -0x000162b7, -0x000162b4, -0x000162b2, -0x000162b1, -0x000162ae, -0x000162ad, -0x000162aa, -0x000162a9, -0x000162a7, -0x000162a5, -0x000162a3, -0x000162a2, -0x0001629f, -0x0001629e, -0x0001629b, -0x00016299, -0x00016298, -0x00016295, -0x00016294, -0x00016291, -0x00016290, -0x0001628e, -0x0001628c, -0x0001628a, -0x00016289, -0x00016286, -0x00016285, -0x00016282, -0x00016281, -0x0001627f, -0x0001627c, -0x0001627b, -0x00016278, -0x00016277, -0x00016276, -0x00016273, -0x00016271, -0x00016270, -0x0001626d, -0x0001626c, -0x00016269, -0x00016268, -0x00016266, -0x00016264, -0x00016262, -0x00016261, -0x0001625e, -0x0001625d, -0x0001625a, -0x00016259, -0x00016257, -0x00016254, -0x00016253, -0x00016250, -0x0001624f, -0x0001624d, -0x0001624b, -0x00016249, -0x00016248, -0x00016245, -0x00016244, -0x00016241, -0x00016240, -0x0001623e, -0x0001623b, -0x0001623a, -0x00016237, -0x00016236, -0x00016235, -0x00016232, -0x00016230, -0x0001622f, -0x0001622c, -0x0001622b, -0x00016228, -0x00016227, -0x00016225, -0x00016223, -0x00016221, -0x0001621e, -0x0001621d, -0x0001621c, -0x00016219, -0x00016218, -0x00016216, -0x00016213, -0x00016212, -0x0001620f, -0x0001620e, -0x0001620c, -0x0001620a, -0x00016208, -0x00016207, -0x00016204, -0x00016203, -0x00016200, -0x000161ff, -0x000161fd, -0x000161fa, -0x000161f9, -0x000161f6, -0x000161f5, -0x000161f4, -0x000161f1, -0x000161ef, -0x000161ee, -0x000161eb, -0x000161ea, -0x000161e7, -0x000161e6, -0x000161e4, -0x000161e2, -0x000161e0, -0x000161dd, -0x000161dc, -0x000161db, -0x000161d8, -0x000161d7, -0x000161d5, -0x000161d2, -0x000161d1, -0x000161ce, -0x000161cd, -0x000161cb, -0x000161c9, -0x000161c7, -0x000161c5, -0x000161c2, -0x000161c1, -0x000161c0, -0x000161bd, -0x000161bc, -0x000161b9, -0x000161b7, -0x000161b6, -0x000161b3, -0x000161b2, -0x000161b1, -0x000161ae, -0x000161ac, -0x000161aa, -0x000161a8, -0x000161a7, -0x000161a4, -0x000161a3, -0x000161a1, -0x0001619f, -0x0001619d, -0x0001619a, -0x00016199, -0x00016198, -0x00016195, -0x00016194, -0x00016192, -0x0001618f, -0x0001618e, -0x0001618b, -0x0001618a, -0x00016189, -0x00016186, -0x00016184, -0x00016182, -0x00016180, -0x0001617f, -0x0001617c, -0x0001617b, -0x00016179, -0x00016177, -0x00016175, -0x00016172, -0x00016171, -0x00016170, -0x0001616d, -0x0001616c, -0x0001616a, -0x00016167, -0x00016166, -0x00016163, -0x00016162, -0x00016161, -0x0001615e, -0x0001615c, -0x0001615b, -0x00016158, -0x00016157, -0x00016154, -0x00016153, -0x00016151, -0x0001614f, -0x0001614d, -0x0001614c, -0x00016149, -0x00016148, -0x00016145, -0x00016144, -0x00016142, -0x0001613f, -0x0001613e, -0x0001613b, -0x0001613a, -0x00016139, -0x00016136, -0x00016134, -0x00016133, -0x00016130, -0x0001612f, -0x0001612c, -0x0001612b, -0x00016129, -0x00016127, -0x00016125, -0x00016124, -0x00016121, -0x00016120, -0x0001611d, -0x0001611c, -0x0001611a, -0x00016117, -0x00016116, -0x00016115, -0x00016112, -0x00016111, -0x0001610e, -0x0001610c, -0x0001610b, -0x00016108, -0x00016107, -0x00016104, -0x00016103, -0x00016101, -0x000160ff, -0x000160fd, -0x000160fc, -0x000160f9, -0x000160f8, -0x000160f5, -0x000160f4, -0x000160f2, -0x000160ef, -0x000160ee, -0x000160ed, -0x000160ea, -0x000160e9, -0x000160e6, -0x000160e4, -0x000160e3, -0x000160e0, -0x000160df, -0x000160de, -0x000160db, -0x000160d9, -0x000160d7, -0x000160d5, -0x000160d4, -0x000160d1, -0x000160d0, -0x000160cd, -0x000160cc, -0x000160ca, -0x000160c7, -0x000160c6, -0x000160c3, -0x000160c2, -0x000160c1, -0x000160be, -0x000160bc, -0x000160bb, -0x000160b8, -0x000160b7, -0x000160b4, -0x000160b3, -0x000160b1, -0x000160af, -0x000160ad, -0x000160ac, -0x000160a9, -0x000160a8, -0x000160a5, -0x000160a4, -0x000160a2, -0x000160a0, -0x0001609e, -0x0001609d, -0x0001609a, -0x00016099, -0x00016096, -0x00016095, -0x00016093, -0x00016090, -0x0001608f, -0x0001608e, -0x0001608b, -0x0001608a, -0x00016087, -0x00016085, -0x00016084, -0x00016081, -0x00016080, -0x0001607f, -0x0001607c, -0x0001607a, -0x00016078, -0x00016076, -0x00016075, -0x00016072, -0x00016071, -0x0001606f, -0x0001606d, -0x0001606b, -0x00016069, -0x00016067, -0x00016066, -0x00016063, -0x00016062, -0x00016060, -0x0001605e, -0x0001605c, -0x00016059, -0x00016058, -0x00016057, -0x00016054, -0x00016053, -0x00016051, -0x0001604e, -0x0001604d, -0x0001604a, -0x00016049, -0x00016048, -0x00016045, -0x00016043, -0x00016042, -0x0001603f, -0x0001603e, -0x0001603b, -0x0001603a, -0x00016038, -0x00016036, -0x00016034, -0x00016033, -0x00016030, -0x0001602f, -0x0001602c, -0x0001602b, -0x00016029, -0x00016027, -0x00016025, -0x00016024, -0x00016021, -0x00016020, -0x0001601d, -0x0001601c, -0x0001601a, -0x00016017, -0x00016016, -0x00016015, -0x00016012, -0x00016011, -0x0001600e, -0x0001600c, -0x0001600b, -0x00016008, -0x00016007, -0x00016006, -0x00016003, -0x00016001, -0x00015fff, -0x00015ffd, -0x00015ffc, -0x00015ff9, -0x00015ff8, -0x00015ff6, -0x00015ff4, -0x00015ff2, -0x00015ff0, -0x00015fee, -0x00015fed, -0x00015fea, -0x00015fe9, -0x00015fe7, -0x00015fe5, -0x00015fe3, -0x00015fe0, -0x00015fde, -0x00015fdd, -0x00015fdb, -0x00015fd9, -0x00015fd7, -0x00015fd5, -0x00015fd3, -0x00015fd2, -0x00015fcf, -0x00015fce, -0x00015fcc, -0x00015fca, -0x00015fc8, -0x00015fc5, -0x00015fc4, -0x00015fc3, -0x00015fc0, -0x00015fbf, -0x00015fbd, -0x00015fba, -0x00015fb9, -0x00015fb6, -0x00015fb5, -0x00015fb4, -0x00015fb1, -0x00015fb0, -0x00015fae, -0x00015fab, -0x00015faa, -0x00015fa7, -0x00015fa6, -0x00015fa5, -0x00015fa2, -0x00015fa0, -0x00015f9f, -0x00015f9c, -0x00015f9b, -0x00015f9a, -0x00015f97, -0x00015f95, -0x00015f93, -0x00015f91, -0x00015f90, -0x00015f8d, -0x00015f8c, -0x00015f8a, -0x00015f88, -0x00015f86, -0x00015f84, -0x00015f82, -0x00015f81, -0x00015f7e, -0x00015f7d, -0x00015f7b, -0x00015f79, -0x00015f77, -0x00015f75, -0x00015f73, -0x00015f72, -0x00015f6f, -0x00015f6e, -0x00015f6c, -0x00015f6a, -0x00015f68, -0x00015f67, -0x00015f64, -0x00015f63, -0x00015f60, -0x00015f5f, -0x00015f5d, -0x00015f5a, -0x00015f59, -0x00015f58, -0x00015f55, -0x00015f54, -0x00015f51, -0x00015f50, -0x00015f4e, -0x00015f4b, -0x00015f4a, -0x00015f49, -0x00015f46, -0x00015f45, -0x00015f42, -0x00015f40, -0x00015f3f, -0x00015f3c, -0x00015f3b, -0x00015f3a, -0x00015f37, -0x00015f35, -0x00015f33, -0x00015f31, -0x00015f30, -0x00015f2d, -0x00015f2c, -0x00015f2b, -0x00015f28, -0x00015f26, -0x00015f25, -0x00015f22, -0x00015f21, -0x00015f1e, -0x00015f1d, -0x00015f1b, -0x00015f19, -0x00015f17, -0x00015f16, -0x00015f13, -0x00015f12, -0x00015f0f, -0x00015f0e, -0x00015f0c, -0x00015f0a, -0x00015f08, -0x00015f07, -0x00015f04, -0x00015f03, -0x00015f00, -0x00015eff, -0x00015efd, -0x00015efb, -0x00015ef9, -0x00015ef8, -0x00015ef5, -0x00015ef4, -0x00015ef1, -0x00015ef0, -0x00015eee, -0x00015eeb, -0x00015eea, -0x00015ee7, -0x00015ee6, -0x00015ee4, -0x00015ee2, -0x00015ee0, -0x00015edf, -0x00015edc, -0x00015edb, -0x00015ed8, -0x00015ed7, -0x00015ed5, -0x00015ed3, -0x00015ed1, -0x00015ed0, -0x00015ecd, -0x00015ecc, -0x00015eca, -0x00015ec8, -0x00015ec6, -0x00015ec4, -0x00015ec2, -0x00015ec1, -0x00015ebe, -0x00015ebd, -0x00015ebb, -0x00015eb9, -0x00015eb7, -0x00015eb4, -0x00015eb3, -0x00015eb2, -0x00015eaf, -0x00015eae, -0x00015eac, -0x00015eaa, -0x00015ea8, -0x00015ea7, -0x00015ea4, -0x00015ea3, -0x00015ea0, -0x00015e9f, -0x00015e9d, -0x00015e9a, -0x00015e99, -0x00015e98, -0x00015e95, -0x00015e94, -0x00015e92, -0x00015e90, -0x00015e8e, -0x00015e8b, -0x00015e8a, -0x00015e89, -0x00015e86, -0x00015e85, -0x00015e83, -0x00015e81, -0x00015e7f, -0x00015e7c, -0x00015e7b, -0x00015e7a, -0x00015e77, -0x00015e76, -0x00015e74, -0x00015e71, -0x00015e70, -0x00015e6f, -0x00015e6c, -0x00015e6b, -0x00015e68, -0x00015e67, -0x00015e65, -0x00015e62, -0x00015e61, -0x00015e60, -0x00015e5d, -0x00015e5c, -0x00015e59, -0x00015e58, -0x00015e56, -0x00015e53, -0x00015e52, -0x00015e51, -0x00015e4e, -0x00015e4d, -0x00015e4b, -0x00015e48, -0x00015e47, -0x00015e44, -0x00015e43, -0x00015e42, -0x00015e3f, -0x00015e3e, -0x00015e3c, -0x00015e39, -0x00015e38, -0x00015e37, -0x00015e34, -0x00015e33, -0x00015e30, -0x00015e2e, -0x00015e2d, -0x00015e2a, -0x00015e29, -0x00015e28, -0x00015e25, -0x00015e24, -0x00015e21, -0x00015e1f, -0x00015e1e, -0x00015e1b, -0x00015e1a, -0x00015e19, -0x00015e16, -0x00015e15, -0x00015e13, -0x00015e10, -0x00015e0f, -0x00015e0c, -0x00015e0b, -0x00015e0a, -0x00015e07, -0x00015e05, -0x00015e04, -0x00015e01, -0x00015e00, -0x00015dff, -0x00015dfc, -0x00015dfb, -0x00015df8, -0x00015df6, -0x00015df5, -0x00015df2, -0x00015df1, -0x00015df0, -0x00015ded, -0x00015deb, -0x00015de9, -0x00015de7, -0x00015de6, -0x00015de3, -0x00015de2, -0x00015de1, -0x00015dde, -0x00015ddc, -0x00015ddb, -0x00015dd8, -0x00015dd7, -0x00015dd4, -0x00015dd3, -0x00015dd2, -0x00015dcf, -0x00015dcd, -0x00015dcc, -0x00015dc9, -0x00015dc8, -0x00015dc5, -0x00015dc4, -0x00015dc2, -0x00015dc0, -0x00015dbe, -0x00015dbd, -0x00015dba, -0x00015db9, -0x00015db8, -0x00015db5, -0x00015db3, -0x00015db1, -0x00015daf, -0x00015dae, -0x00015dab, -0x00015daa, -0x00015da9, -0x00015da6, -0x00015da4, -0x00015da3, -0x00015da0, -0x00015d9f, -0x00015d9c, -0x00015d9b, -0x00015d99, -0x00015d97, -0x00015d95, -0x00015d94, -0x00015d91, -0x00015d90, -0x00015d8d, -0x00015d8c, -0x00015d8a, -0x00015d88, -0x00015d86, -0x00015d85, -0x00015d82, -0x00015d81, -0x00015d7f, -0x00015d7d, -0x00015d7b, -0x00015d79, -0x00015d77, -0x00015d76, -0x00015d73, -0x00015d72, -0x00015d70, -0x00015d6e, -0x00015d6c, -0x00015d6a, -0x00015d68, -0x00015d67, -0x00015d64, -0x00015d63, -0x00015d61, -0x00015d5f, -0x00015d5d, -0x00015d5c, -0x00015d59, -0x00015d58, -0x00015d55, -0x00015d54, -0x00015d52, -0x00015d50, -0x00015d4e, -0x00015d4d, -0x00015d4a, -0x00015d49, -0x00015d47, -0x00015d45, -0x00015d43, -0x00015d41, -0x00015d3f, -0x00015d3e, -0x00015d3b, -0x00015d3a, -0x00015d38, -0x00015d36, -0x00015d34, -0x00015d32, -0x00015d30, -0x00015d2f, -0x00015d2c, -0x00015d2b, -0x00015d29, -0x00015d27, -0x00015d25, -0x00015d24, -0x00015d21, -0x00015d20, -0x00015d1d, -0x00015d1c, -0x00015d1a, -0x00015d18, -0x00015d16, -0x00015d15, -0x00015d12, -0x00015d11, -0x00015d0f, -0x00015d0e, -0x00015d0c, -0x00015d0a, -0x00015d08, -0x00015d05, -0x00015d04, -0x00015d03, -0x00015d00, -0x00015cff, -0x00015cfd, -0x00015cfb, -0x00015cf9, -0x00015cf8, -0x00015cf5, -0x00015cf4, -0x00015cf1, -0x00015cf0, -0x00015cee, -0x00015cec, -0x00015cea, -0x00015ce9, -0x00015ce6, -0x00015ce5, -0x00015ce3, -0x00015ce1, -0x00015cdf, -0x00015cdd, -0x00015cdb, -0x00015cda, -0x00015cd7, -0x00015cd6, -0x00015cd4, -0x00015cd2, -0x00015cd0, -0x00015ccf, -0x00015ccc, -0x00015ccb, -0x00015cc8, -0x00015cc7, -0x00015cc5, -0x00015cc3, -0x00015cc1, -0x00015cc0, -0x00015cbd, -0x00015cbc, -0x00015cba, -0x00015cb8, -0x00015cb6, -0x00015cb4, -0x00015cb2, -0x00015cb1, -0x00015cae, -0x00015cad, -0x00015cab, -0x00015ca9, -0x00015ca7, -0x00015ca6, -0x00015ca3, -0x00015ca2, -0x00015c9f, -0x00015c9e, -0x00015c9c, -0x00015c9a, -0x00015c98, -0x00015c97, -0x00015c94, -0x00015c93, -0x00015c92, -0x00015c8f, -0x00015c8d, -0x00015c8b, -0x00015c89, -0x00015c88, -0x00015c85, -0x00015c84, -0x00015c83, -0x00015c80, -0x00015c7e, -0x00015c7d, -0x00015c7a, -0x00015c79, -0x00015c76, -0x00015c75, -0x00015c74, -0x00015c71, -0x00015c6f, -0x00015c6e, -0x00015c6b, -0x00015c6a, -0x00015c69, -0x00015c66, -0x00015c65, -0x00015c62, -0x00015c60, -0x00015c5f, -0x00015c5c, -0x00015c5b, -0x00015c5a, -0x00015c57, -0x00015c56, -0x00015c54, -0x00015c52, -0x00015c50, -0x00015c4d, -0x00015c4c, -0x00015c4b, -0x00015c48, -0x00015c47, -0x00015c45, -0x00015c43, -0x00015c41, -0x00015c40, -0x00015c3d, -0x00015c3c, -0x00015c39, -0x00015c38, -0x00015c36, -0x00015c34, -0x00015c32, -0x00015c31, -0x00015c2e, -0x00015c2d, -0x00015c2b, -0x00015c29, -0x00015c27, -0x00015c25, -0x00015c23, -0x00015c22, -0x00015c21, -0x00015c1e, -0x00015c1d, -0x00015c1b, -0x00015c18, -0x00015c17, -0x00015c14, -0x00015c13, -0x00015c12, -0x00015c0f, -0x00015c0e, -0x00015c0c, -0x00015c0a, -0x00015c08, -0x00015c07, -0x00015c04, -0x00015c03, -0x00015c01, -0x00015bff, -0x00015bfd, -0x00015bfb, -0x00015bf9, -0x00015bf8, -0x00015bf5, -0x00015bf4, -0x00015bf2, -0x00015bf0, -0x00015bee, -0x00015bed, -0x00015bea, -0x00015be9, -0x00015be8, -0x00015be5, -0x00015be3, -0x00015be1, -0x00015bdf, -0x00015bde, -0x00015bdb, -0x00015bda, -0x00015bd9, -0x00015bd6, -0x00015bd5, -0x00015bd3, -0x00015bd0, -0x00015bcf, -0x00015bcc, -0x00015bcb, -0x00015bca, -0x00015bc7, -0x00015bc6, -0x00015bc4, -0x00015bc1, -0x00015bc0, -0x00015bbf, -0x00015bbc, -0x00015bbb, -0x00015bb9, -0x00015bb7, -0x00015bb5, -0x00015bb3, -0x00015bb1, -0x00015bb0, -0x00015bad, -0x00015bac, -0x00015baa, -0x00015ba8, -0x00015ba6, -0x00015ba5, -0x00015ba2, -0x00015ba1, -0x00015b9e, -0x00015b9d, -0x00015b9b, -0x00015b99, -0x00015b97, -0x00015b96, -0x00015b93, -0x00015b92, -0x00015b91, -0x00015b8e, -0x00015b8c, -0x00015b8b, -0x00015b88, -0x00015b87, -0x00015b84, -0x00015b83, -0x00015b82, -0x00015b7f, -0x00015b7e, -0x00015b7c, -0x00015b79, -0x00015b78, -0x00015b77, -0x00015b74, -0x00015b73, -0x00015b71, -0x00015b6f, -0x00015b6d, -0x00015b6a, -0x00015b69, -0x00015b68, -0x00015b65, -0x00015b64, -0x00015b62, -0x00015b60, -0x00015b5e, -0x00015b5d, -0x00015b5a, -0x00015b59, -0x00015b56, -0x00015b55, -0x00015b53, -0x00015b51, -0x00015b4f, -0x00015b4e, -0x00015b4b, -0x00015b4a, -0x00015b48, -0x00015b46, -0x00015b44, -0x00015b43, -0x00015b40, -0x00015b3f, -0x00015b3c, -0x00015b3b, -0x00015b3a, -0x00015b37, -0x00015b36, -0x00015b34, -0x00015b32, -0x00015b31, -0x00015b2e, -0x00015b2d, -0x00015b2b, -0x00015b29, -0x00015b27, -0x00015b26, -0x00015b23, -0x00015b22, -0x00015b1f, -0x00015b1e, -0x00015b1c, -0x00015b1a, -0x00015b18, -0x00015b17, -0x00015b14, -0x00015b13, -0x00015b12, -0x00015b0f, -0x00015b0e, -0x00015b0c, -0x00015b09, -0x00015b08, -0x00015b07, -0x00015b04, -0x00015b03, -0x00015b00, -0x00015aff, -0x00015afd, -0x00015afb, -0x00015af9, -0x00015af8, -0x00015af5, -0x00015af4, -0x00015af2, -0x00015af0, -0x00015aee, -0x00015aed, -0x00015aea, -0x00015ae9, -0x00015ae6, -0x00015ae5, -0x00015ae4, -0x00015ae1, -0x00015adf, -0x00015ade, -0x00015adb, -0x00015ada, -0x00015ad9, -0x00015ad6, -0x00015ad5, -0x00015ad3, -0x00015ad1, -0x00015acf, -0x00015acc, -0x00015acb, -0x00015aca, -0x00015ac7, -0x00015ac6, -0x00015ac4, -0x00015ac2, -0x00015ac0, -0x00015abf, -0x00015abc, -0x00015abb, -0x00015aba, -0x00015ab7, -0x00015ab5, -0x00015ab4, -0x00015ab1, -0x00015ab0, -0x00015aad, -0x00015aac, -0x00015aab, -0x00015aa8, -0x00015aa7, -0x00015aa5, -0x00015aa2, -0x00015aa1, -0x00015aa0, -0x00015a9d, -0x00015a9c, -0x00015a9a, -0x00015a98, -0x00015a96, -0x00015a94, -0x00015a92, -0x00015a91, -0x00015a8e, -0x00015a8d, -0x00015a8b, -0x00015a89, -0x00015a87, -0x00015a86, -0x00015a83, -0x00015a82, -0x00015a81, -0x00015a7e, -0x00015a7d, -0x00015a7a, -0x00015a78, -0x00015a77, -0x00015a74, -0x00015a73, -0x00015a72, -0x00015a6f, -0x00015a6e, -0x00015a6c, -0x00015a6a, -0x00015a68, -0x00015a67, -0x00015a64, -0x00015a63, -0x00015a61, -0x00015a5f, -0x00015a5d, -0x00015a5b, -0x00015a59, -0x00015a58, -0x00015a55, -0x00015a54, -0x00015a53, -0x00015a50, -0x00015a4e, -0x00015a4d, -0x00015a4c, -0x00015a49, -0x00015a48, -0x00015a45, -0x00015a44, -0x00015a42, -0x00015a40, -0x00015a3e, -0x00015a3d, -0x00015a3a, -0x00015a39, -0x00015a37, -0x00015a35, -0x00015a33, -0x00015a32, -0x00015a2f, -0x00015a2e, -0x00015a2d, -0x00015a2a, -0x00015a29, -0x00015a26, -0x00015a24, -0x00015a23, -0x00015a20, -0x00015a1f, -0x00015a1e, -0x00015a1b, -0x00015a1a, -0x00015a18, -0x00015a16, -0x00015a14, -0x00015a13, -0x00015a10, -0x00015a0f, -0x00015a0e, -0x00015a0b, -0x00015a09, -0x00015a07, -0x00015a05, -0x00015a04, -0x00015a01, -0x00015a00, -0x000159ff, -0x000159fc, -0x000159fb, -0x000159f9, -0x000159f7, -0x000159f5, -0x000159f4, -0x000159f1, -0x000159f0, -0x000159ee, -0x000159ec, -0x000159ea, -0x000159e9, -0x000159e6, -0x000159e5, -0x000159e2, -0x000159e1, -0x000159e0, -0x000159dd, -0x000159dc, -0x000159da, -0x000159d7, -0x000159d6, -0x000159d5, -0x000159d2, -0x000159d1, -0x000159cf, -0x000159cd, -0x000159cb, -0x000159ca, -0x000159c7, -0x000159c6, -0x000159c3, -0x000159c2, -0x000159c0, -0x000159be, -0x000159bc, -0x000159bb, -0x000159b8, -0x000159b7, -0x000159b6, -0x000159b3, -0x000159b2, -0x000159b0, -0x000159ae, -0x000159ac, -0x000159ab, -0x000159a8, -0x000159a7, -0x000159a5, -0x000159a3, -0x000159a1, -0x0001599f, -0x0001599d, -0x0001599c, -0x00015999, -0x00015998, -0x00015997, -0x00015994, -0x00015993, -0x00015991, -0x0001598e, -0x0001598d, -0x0001598c, -0x00015989, -0x00015988, -0x00015986, -0x00015984, -0x00015982, -0x00015980, -0x0001597e, -0x0001597d, -0x0001597a, -0x00015979, -0x00015977, -0x00015975, -0x00015973, -0x00015972, -0x0001596f, -0x0001596e, -0x0001596d, -0x0001596a, -0x00015969, -0x00015967, -0x00015965, -0x00015963, -0x00015961, -0x00015960, -0x0001595e, -0x0001595c, -0x0001595a, -0x00015959, -0x00015956, -0x00015955, -0x00015952, -0x00015951, -0x00015950, -0x0001594d, -0x0001594b, -0x0001594a, -0x00015947, -0x00015946, -0x00015945, -0x00015942, -0x00015941, -0x0001593f, -0x0001593d, -0x0001593b, -0x0001593a, -0x00015937, -0x00015936, -0x00015935, -0x00015932, -0x00015931, -0x0001592f, -0x0001592c, -0x0001592b, -0x00015928, -0x00015927, -0x00015926, -0x00015923, -0x00015922, -0x00015920, -0x0001591e, -0x0001591c, -0x0001591b, -0x00015918, -0x00015917, -0x00015916, -0x00015913, -0x00015912, -0x00015910, -0x0001590d, -0x0001590c, -0x0001590b, -0x00015908, -0x00015907, -0x00015905, -0x00015903, -0x00015901, -0x000158ff, -0x000158fd, -0x000158fc, -0x000158f9, -0x000158f8, -0x000158f7, -0x000158f4, -0x000158f3, -0x000158f1, -0x000158ee, -0x000158ed, -0x000158ec, -0x000158e9, -0x000158e8, -0x000158e6, -0x000158e4, -0x000158e2, -0x000158e1, -0x000158de, -0x000158dd, -0x000158dc, -0x000158d9, -0x000158d8, -0x000158d5, -0x000158d4, -0x000158d2, -0x000158cf, -0x000158ce, -0x000158cd, -0x000158ca, -0x000158c9, -0x000158c7, -0x000158c5, -0x000158c3, -0x000158c2, -0x000158bf, -0x000158be, -0x000158bd, -0x000158ba, -0x000158b9, -0x000158b7, -0x000158b5, -0x000158b3, -0x000158b2, -0x000158af, -0x000158ae, -0x000158ab, -0x000158aa, -0x000158a8, -0x000158a6, -0x000158a4, -0x000158a3, -0x000158a0, -0x0001589f, -0x0001589e, -0x0001589b, -0x0001589a, -0x00015898, -0x00015896, -0x00015894, -0x00015893, -0x00015890, -0x0001588f, -0x0001588d, -0x0001588b, -0x00015889, -0x00015888, -0x00015885, -0x00015884, -0x00015881, -0x00015880, -0x0001587f, -0x0001587c, -0x0001587b, -0x00015879, -0x00015878, -0x00015875, -0x00015874, -0x00015872, -0x00015870, -0x0001586e, -0x0001586d, -0x0001586a, -0x00015869, -0x00015867, -0x00015865, -0x00015863, -0x00015862, -0x0001585f, -0x0001585e, -0x0001585d, -0x0001585a, -0x00015859, -0x00015856, -0x00015855, -0x00015853, -0x00015851, -0x0001584f, -0x0001584e, -0x0001584b, -0x0001584a, -0x00015849, -0x00015846, -0x00015845, -0x00015843, -0x00015841, -0x0001583f, -0x0001583e, -0x0001583b, -0x0001583a, -0x00015838, -0x00015836, -0x00015834, -0x00015833, -0x00015830, -0x0001582f, -0x0001582e, -0x0001582b, -0x0001582a, -0x00015828, -0x00015826, -0x00015824, -0x00015823, -0x00015820, -0x0001581f, -0x0001581c, -0x0001581b, -0x0001581a, -0x00015817, -0x00015816, -0x00015814, -0x00015811, -0x00015810, -0x0001580f, -0x0001580c, -0x0001580b, -0x00015809, -0x00015807, -0x00015805, -0x00015804, -0x00015801, -0x00015800, -0x000157ff, -0x000157fc, -0x000157fb, -0x000157f9, -0x000157f7, -0x000157f5, -0x000157f4, -0x000157f1, -0x000157f0, -0x000157ef, -0x000157ec, -0x000157eb, -0x000157e9, -0x000157e6, -0x000157e5, -0x000157e2, -0x000157e1, -0x000157e0, -0x000157dd, -0x000157dc, -0x000157da, -0x000157d8, -0x000157d6, -0x000157d5, -0x000157d2, -0x000157d1, -0x000157d0, -0x000157cd, -0x000157cc, -0x000157ca, -0x000157c8, -0x000157c6, -0x000157c5, -0x000157c2, -0x000157c1, -0x000157c0, -0x000157bd, -0x000157bb, -0x000157ba, -0x000157b7, -0x000157b6, -0x000157b5, -0x000157b2, -0x000157b1, -0x000157af, -0x000157ad, -0x000157ab, -0x000157a9, -0x000157a7, -0x000157a6, -0x000157a3, -0x000157a2, -0x000157a1, -0x0001579e, -0x0001579d, -0x0001579b, -0x00015799, -0x00015797, -0x00015796, -0x00015793, -0x00015792, -0x0001578f, -0x0001578e, -0x0001578d, -0x0001578a, -0x00015789, -0x00015787, -0x00015785, -0x00015783, -0x00015782, -0x0001577f, -0x0001577e, -0x0001577d, -0x0001577a, -0x00015779, -0x00015777, -0x00015775, -0x00015773, -0x00015772, -0x0001576f, -0x0001576e, -0x0001576d, -0x0001576a, -0x00015769, -0x00015767, -0x00015764, -0x00015763, -0x00015762, -0x0001575f, -0x0001575e, -0x0001575c, -0x0001575a, -0x00015758, -0x00015757, -0x00015754, -0x00015753, -0x00015752, -0x0001574f, -0x0001574e, -0x0001574b, -0x0001574a, -0x00015748, -0x00015746, -0x00015744, -0x00015743, -0x00015740, -0x0001573f, -0x0001573e, -0x0001573b, -0x0001573a, -0x00015738, -0x00015736, -0x00015734, -0x00015733, -0x00015730, -0x0001572f, -0x0001572e, -0x0001572b, -0x0001572a, -0x00015728, -0x00015726, -0x00015724, -0x00015723, -0x00015720, -0x0001571f, -0x0001571d, -0x0001571b, -0x00015719, -0x00015718, -0x00015715, -0x00015714, -0x00015713, -0x00015710, -0x0001570f, -0x0001570d, -0x0001570b, -0x00015709, -0x00015708, -0x00015705, -0x00015704, -0x00015703, -0x00015700, -0x000156ff, -0x000156fd, -0x000156fb, -0x000156f9, -0x000156f8, -0x000156f5, -0x000156f4, -0x000156f3, -0x000156f0, -0x000156ef, -0x000156ec, -0x000156eb, -0x000156e9, -0x000156e7, -0x000156e5, -0x000156e4, -0x000156e1, -0x000156e0, -0x000156df, -0x000156dc, -0x000156da, -0x000156d9, -0x000156d6, -0x000156d5, -0x000156d4, -0x000156d1, -0x000156d0, -0x000156ce, -0x000156cc, -0x000156ca, -0x000156c9, -0x000156c6, -0x000156c5, -0x000156c4, -0x000156c1, -0x000156c0, -0x000156be, -0x000156bc, -0x000156ba, -0x000156b9, -0x000156b6, -0x000156b5, -0x000156b4, -0x000156b1, -0x000156b0, -0x000156ae, -0x000156ac, -0x000156aa, -0x000156a8, -0x000156a6, -0x000156a4, -0x000156a3, -0x000156a0, -0x0001569f, -0x0001569e, -0x0001569b, -0x0001569a, -0x00015698, -0x00015696, -0x00015694, -0x00015693, -0x00015690, -0x0001568f, -0x0001568e, -0x0001568b, -0x0001568a, -0x00015688, -0x00015686, -0x00015684, -0x00015683, -0x00015680, -0x0001567f, -0x0001567e, -0x0001567b, -0x0001567a, -0x00015678, -0x00015676, -0x00015674, -0x00015673, -0x00015670, -0x0001566f, -0x0001566e, -0x0001566b, -0x0001566a, -0x00015668, -0x00015666, -0x00015664, -0x00015663, -0x00015660, -0x0001565f, -0x0001565e, -0x0001565b, -0x0001565a, -0x00015658, -0x00015656, -0x00015654, -0x00015653, -0x00015650, -0x0001564f, -0x0001564d, -0x0001564b, -0x00015649, -0x00015648, -0x00015645, -0x00015644, -0x00015643, -0x00015640, -0x0001563f, -0x0001563d, -0x0001563b, -0x00015639, -0x00015638, -0x00015635, -0x00015634, -0x00015633, -0x00015630, -0x0001562f, -0x0001562d, -0x0001562b, -0x00015629, -0x00015628, -0x00015625, -0x00015624, -0x00015623, -0x00015620, -0x0001561f, -0x0001561d, -0x0001561b, -0x00015619, -0x00015618, -0x00015615, -0x00015614, -0x00015613, -0x00015610, -0x0001560f, -0x0001560d, -0x0001560b, -0x00015609, -0x00015608, -0x00015605, -0x00015604, -0x00015603, -0x00015600, -0x000155ff, -0x000155fd, -0x000155fb, -0x000155f9, -0x000155f8, -0x000155f5, -0x000155f4, -0x000155f3, -0x000155f0, -0x000155ef, -0x000155ed, -0x000155eb, -0x000155e9, -0x000155e8, -0x000155e5, -0x000155e4, -0x000155e3, -0x000155e0, -0x000155df, -0x000155dd, -0x000155db, -0x000155d9, -0x000155d8, -0x000155d5, -0x000155d4, -0x000155d3, -0x000155d0, -0x000155cf, -0x000155cd, -0x000155cb, -0x000155c9, -0x000155c6, -0x000155c5, -0x000155c4, -0x000155c1, -0x000155c0, -0x000155be, -0x000155bc, -0x000155ba, -0x000155b9, -0x000155b6, -0x000155b5, -0x000155b4, -0x000155b1, -0x000155b0, -0x000155ae, -0x000155ac, -0x000155ab, -0x000155a9, -0x000155a7, -0x000155a5, -0x000155a4, -0x000155a1, -0x000155a0, -0x0001559f, -0x0001559c, -0x0001559b, -0x00015599, -0x00015597, -0x00015595, -0x00015594, -0x00015591, -0x00015590, -0x0001558f, -0x0001558c, -0x0001558b, -0x00015589, -0x00015587, -0x00015585, -0x00015584, -0x00015581, -0x00015580, -0x0001557f, -0x0001557c, -0x0001557b, -0x00015579, -0x00015577, -0x00015575, -0x00015574, -0x00015571, -0x00015570, -0x0001556f, -0x0001556c, -0x0001556b, -0x00015569, -0x00015567, -0x00015565, -0x00015564, -0x00015561, -0x00015560, -0x0001555f, -0x0001555c, -0x0001555b, -0x00015559, -0x00015557, -0x00015555, -0x00015554, -0x00015551, -0x00015550, -0x0001554f, -0x0001554c, -0x0001554b, -0x00015549, -0x00015547, -0x00015545, -0x00015544, -0x00015541, -0x00015540, -0x0001553f, -0x0001553c, -0x0001553b, -0x00015539, -0x00015537, -0x00015535, -0x00015534, -0x00015531, -0x00015530, -0x0001552f, -0x0001552c, -0x0001552b, -0x00015529, -0x00015527, -0x00015525, -0x00015524, -0x00015521, -0x00015520, -0x0001551f, -0x0001551c, -0x0001551b, -0x00015519, -0x00015517, -0x00015515, -0x00015514, -0x00015511, -0x00015510, -0x0001550f, -0x0001550c, -0x0001550b, -0x00015509, -0x00015507, -0x00015505, -0x00015504, -0x00015501, -0x00015500, -0x000154ff, -0x000154fc, -0x000154fb, -0x000154f9, -0x000154f7, -0x000154f5, -0x000154f4, -0x000154f1, -0x000154f0, -0x000154ef, -0x000154ec, -0x000154eb, -0x000154e9, -0x000154e7, -0x000154e5, -0x000154e3, -0x000154e2, -0x000154df, -0x000154de, -0x000154dc, -0x000154da, -0x000154d8, -0x000154d7, -0x000154d5, -0x000154d3, -0x000154d2, -0x000154cf, -0x000154ce, -0x000154cd, -0x000154ca, -0x000154c9, -0x000154c7, -0x000154c5, -0x000154c3, -0x000154c2, -0x000154bf, -0x000154be, -0x000154bd, -0x000154ba, -0x000154b9, -0x000154b7, -0x000154b5, -0x000154b3, -0x000154b2, -0x000154af, -0x000154ae, -0x000154ad, -0x000154ab, -0x000154a9, -0x000154a7, -0x000154a6, -0x000154a3, -0x000154a2, -0x000154a1, -0x0001549e, -0x0001549d, -0x0001549b, -0x00015499, -0x00015497, -0x00015496, -0x00015493, -0x00015492, -0x00015491, -0x0001548e, -0x0001548d, -0x0001548b, -0x00015489, -0x00015487, -0x00015486, -0x00015483, -0x00015482, -0x00015481, -0x0001547e, -0x0001547d, -0x0001547c, -0x00015479, -0x00015478, -0x00015476, -0x00015474, -0x00015472, -0x00015471, -0x0001546e, -0x0001546d, -0x0001546c, -0x00015469, -0x00015468, -0x00015466, -0x00015464, -0x00015462, -0x00015461, -0x0001545e, -0x0001545d, -0x0001545c, -0x00015459, -0x00015458, -0x00015456, -0x00015454, -0x00015452, -0x00015451, -0x0001544e, -0x0001544d, -0x0001544c, -0x00015449, -0x00015448, -0x00015446, -0x00015444, -0x00015442, -0x00015441, -0x0001543e, -0x0001543d, -0x0001543c, -0x0001543a, -0x00015438, -0x00015436, -0x00015435, -0x00015432, -0x00015431, -0x00015430, -0x0001542d, -0x0001542c, -0x0001542b, -0x00015428, -0x00015427, -0x00015425, -0x00015423, -0x00015421, -0x00015420, -0x0001541d, -0x0001541c, -0x0001541b, -0x00015418, -0x00015417, -0x00015415, -0x00015413, -0x00015411, -0x00015410, -0x0001540d, -0x0001540c, -0x0001540b, -0x00015408, -0x00015407, -0x00015405, -0x00015403, -0x00015401, -0x00015400, -0x000153fd, -0x000153fc, -0x000153fb, -0x000153f8, -0x000153f7, -0x000153f5, -0x000153f3, -0x000153f1, -0x000153f0, -0x000153ed, -0x000153ec, -0x000153eb, -0x000153e8, -0x000153e7, -0x000153e5, -0x000153e3, -0x000153e1, -0x000153e0, -0x000153dd, -0x000153dc, -0x000153db, -0x000153d8, -0x000153d7, -0x000153d6, -0x000153d3, -0x000153d2, -0x000153d0, -0x000153ce, -0x000153cc, -0x000153cb, -0x000153ca, -0x000153c7, -0x000153c6, -0x000153c4, -0x000153c2, -0x000153c0, -0x000153bf, -0x000153bc, -0x000153bb, -0x000153ba, -0x000153b7, -0x000153b6, -0x000153b4, -0x000153b2, -0x000153b0, -0x000153af, -0x000153ac, -0x000153ab, -0x000153aa, -0x000153a7, -0x000153a6, -0x000153a4, -0x000153a2, -0x000153a0, -0x0001539f, -0x0001539c, -0x0001539b, -0x0001539a, -0x00015397, -0x00015396, -0x00015394, -0x00015392, -0x00015390, -0x0001538f, -0x0001538c, -0x0001538b, -0x0001538a, -0x00015387, -0x00015386, -0x00015384, -0x00015382, -0x00015381, -0x0001537f, -0x0001537d, -0x0001537b, -0x0001537a, -0x00015377, -0x00015376, -0x00015375, -0x00015372, -0x00015371, -0x0001536f, -0x0001536d, -0x0001536b, -0x0001536a, -0x00015367, -0x00015366, -0x00015365, -0x00015362, -0x00015361, -0x0001535f, -0x0001535d, -0x0001535b, -0x0001535a, -0x00015359, -0x00015356, -0x00015355, -0x00015353, -0x00015351, -0x0001534f, -0x0001534e, -0x0001534b, -0x0001534a, -0x00015349, -0x00015346, -0x00015345, -0x00015343, -0x00015341, -0x0001533f, -0x0001533e, -0x0001533b, -0x0001533a, -0x00015339, -0x00015336, -0x00015335, -0x00015333, -0x00015331, -0x0001532f, -0x0001532e, -0x0001532c, -0x0001532a, -0x00015329, -0x00015326, -0x00015325, -0x00015324, -0x00015321, -0x00015320, -0x0001531e, -0x0001531d, -0x0001531a, -0x00015319, -0x00015318, -0x00015315, -0x00015314, -0x00015313, -0x00015310, -0x0001530f, -0x0001530d, -0x0001530b, -0x00015309, -0x00015308, -0x00015305, -0x00015304, -0x00015303, -0x00015300, -0x000152ff, -0x000152fd, -0x000152fb, -0x000152f9, -0x000152f8, -0x000152f5, -0x000152f4, -0x000152f3, -0x000152f0, -0x000152ef, -0x000152ed, -0x000152ec, -0x000152e9, -0x000152e8, -0x000152e7, -0x000152e4, -0x000152e3, -0x000152e2, -0x000152df, -0x000152de, -0x000152dc, -0x000152da, -0x000152d8, -0x000152d7, -0x000152d4, -0x000152d3, -0x000152d2, -0x000152cf, -0x000152ce, -0x000152cc, -0x000152ca, -0x000152c8, -0x000152c7, -0x000152c4, -0x000152c3, -0x000152c2, -0x000152bf, -0x000152be, -0x000152bc, -0x000152ba, -0x000152b8, -0x000152b7, -0x000152b5, -0x000152b3, -0x000152b2, -0x000152b1, -0x000152ae, -0x000152ad, -0x000152ab, -0x000152a9, -0x000152a7, -0x000152a6, -0x000152a3, -0x000152a2, -0x000152a1, -0x0001529e, -0x0001529d, -0x0001529b, -0x00015299, -0x00015297, -0x00015296, -0x00015293, -0x00015292, -0x00015291, -0x0001528e, -0x0001528d, -0x0001528b, -0x00015289, -0x00015287, -0x00015286, -0x00015284, -0x00015282, -0x00015281, -0x0001527e, -0x0001527d, -0x0001527c, -0x00015279, -0x00015278, -0x00015276, -0x00015274, -0x00015272, -0x00015271, -0x00015270, -0x0001526d, -0x0001526c, -0x0001526a, -0x00015268, -0x00015266, -0x00015265, -0x00015262, -0x00015261, -0x00015260, -0x0001525d, -0x0001525c, -0x0001525a, -0x00015258, -0x00015257, -0x00015255, -0x00015253, -0x00015251, -0x00015250, -0x0001524d, -0x0001524c, -0x0001524b, -0x00015248, -0x00015247, -0x00015245, -0x00015243, -0x00015241, -0x00015241, -0x0001523e, -0x0001523d, -0x0001523b, -0x00015239, -0x00015237, -0x00015236, -0x00015233, -0x00015232, -0x00015231, -0x0001522e, -0x0001522d, -0x0001522c, -0x00015229, -0x00015228, -0x00015226, -0x00015224, -0x00015222, -0x00015221, -0x0001521e, -0x0001521d, -0x0001521c, -0x00015219, -0x00015218, -0x00015216, -0x00015214, -0x00015212, -0x00015211, -0x00015210, -0x0001520d, -0x0001520c, -0x0001520b, -0x00015208, -0x00015207, -0x00015205, -0x00015203, -0x00015201, -0x00015200, -0x000151fd, -0x000151fc, -0x000151fb, -0x000151f8, -0x000151f7, -0x000151f5, -0x000151f3, -0x000151f1, -0x000151f0, -0x000151ee, -0x000151ec, -0x000151eb, -0x000151e8, -0x000151e7, -0x000151e6, -0x000151e4, -0x000151e2, -0x000151e0, -0x000151df, -0x000151dc, -0x000151db, -0x000151da, -0x000151d7, -0x000151d6, -0x000151d4, -0x000151d2, -0x000151d0, -0x000151cf, -0x000151cd, -0x000151cb, -0x000151ca, -0x000151c7, -0x000151c6, -0x000151c5, -0x000151c2, -0x000151c1, -0x000151bf, -0x000151bd, -0x000151bb, -0x000151ba, -0x000151b9, -0x000151b6, -0x000151b5, -0x000151b3, -0x000151b1, -0x000151af, -0x000151ae, -0x000151ac, -0x000151aa, -0x000151a9, -0x000151a6, -0x000151a5, -0x000151a4, -0x000151a1, -0x000151a0, -0x0001519e, -0x0001519c, -0x0001519a, -0x00015199, -0x00015196, -0x00015195, -0x00015194, -0x00015191, -0x00015190, -0x0001518e, -0x0001518d, -0x0001518a, -0x00015189, -0x00015188, -0x00015185, -0x00015184, -0x00015183, -0x00015180, -0x0001517f, -0x0001517d, -0x0001517b, -0x00015179, -0x00015178, -0x00015175, -0x00015174, -0x00015173, -0x00015170, -0x0001516f, -0x0001516d, -0x0001516b, -0x00015169, -0x00015168, -0x00015166, -0x00015164, -0x00015163, -0x00015161, -0x0001515f, -0x0001515d, -0x0001515c, -0x0001515a, -0x00015158, -0x00015157, -0x00015156, -0x00015153, -0x00015152, -0x00015150, -0x0001514e, -0x0001514c, -0x0001514b, -0x00015148, -0x00015147, -0x00015146, -0x00015143, -0x00015142, -0x00015141, -0x0001513e, -0x0001513d, -0x0001513b, -0x00015139, -0x00015137, -0x00015136, -0x00015135, -0x00015132, -0x00015131, -0x0001512f, -0x0001512d, -0x0001512b, -0x0001512a, -0x00015127, -0x00015126, -0x00015125, -0x00015122, -0x00015121, -0x00015120, -0x0001511d, -0x0001511c, -0x0001511a, -0x00015118, -0x00015116, -0x00015115, -0x00015114, -0x00015111, -0x00015110, -0x0001510e, -0x0001510c, -0x0001510b, -0x00015109, -0x00015107, -0x00015105, -0x00015104, -0x00015101, -0x00015100, -0x000150ff, -0x000150fc, -0x000150fb, -0x000150f9, -0x000150f7, -0x000150f5, -0x000150f4, -0x000150f3, -0x000150f0, -0x000150ef, -0x000150ee, -0x000150eb, -0x000150ea, -0x000150e8, -0x000150e6, -0x000150e4, -0x000150e3, -0x000150e0, -0x000150df, -0x000150de, -0x000150db, -0x000150da, -0x000150d9, -0x000150d6, -0x000150d5, -0x000150d3, -0x000150d1, -0x000150cf, -0x000150ce, -0x000150cd, -0x000150ca, -0x000150c9, -0x000150c7, -0x000150c5, -0x000150c3, -0x000150c2, -0x000150bf, -0x000150be, -0x000150bd, -0x000150ba, -0x000150b9, -0x000150b8, -0x000150b5, -0x000150b4, -0x000150b2, -0x000150b0, -0x000150ae, -0x000150ad, -0x000150ac, -0x000150a9, -0x000150a8, -0x000150a6, -0x000150a4, -0x000150a3, -0x000150a1, -0x0001509f, -0x0001509d, -0x0001509c, -0x00015099, -0x00015098, -0x00015097, -0x00015094, -0x00015093, -0x00015091, -0x0001508f, -0x0001508d, -0x0001508c, -0x0001508b, -0x00015088, -0x00015087, -0x00015086, -0x00015083, -0x00015082, -0x0001507f, -0x0001507e, -0x0001507d, -0x0001507a, -0x00015079, -0x00015077, -0x00015076, -0x00015074, -0x00015072, -0x00015071, -0x0001506e, -0x0001506d, -0x0001506c, -0x00015069, -0x00015068, -0x00015066, -0x00015064, -0x00015062, -0x00015061, -0x0001505f, -0x0001505d, -0x0001505c, -0x0001505b, -0x00015058, -0x00015057, -0x00015055, -0x00015053, -0x00015051, -0x00015050, -0x0001504d, -0x0001504c, -0x0001504b, -0x00015048, -0x00015047, -0x00015046, -0x00015043, -0x00015042, -0x00015040, -0x0001503f, -0x0001503c, -0x0001503b, -0x0001503a, -0x00015037, -0x00015036, -0x00015035, -0x00015032, -0x00015031, -0x0001502f, -0x0001502d, -0x0001502b, -0x0001502a, -0x00015027, -0x00015026, -0x00015025, -0x00015023, -0x00015021, -0x00015020, -0x0001501e, -0x0001501c, -0x0001501a, -0x00015019, -0x00015016, -0x00015015, -0x00015014, -0x00015011, -0x00015010, -0x0001500e, -0x0001500c, -0x0001500b, -0x00015009, -0x00015008, -0x00015005, -0x00015004, -0x00015003, -0x00015000, -0x00014fff, -0x00014ffd, -0x00014ffb, -0x00014ff9, -0x00014ff8, -0x00014ff6, -0x00014ff4, -0x00014ff3, -0x00014ff0, -0x00014fef, -0x00014fee, -0x00014fec, -0x00014fea, -0x00014fe8, -0x00014fe7, -0x00014fe4, -0x00014fe3, -0x00014fe2, -0x00014fdf, -0x00014fde, -0x00014fdd, -0x00014fda, -0x00014fd9, -0x00014fd7, -0x00014fd5, -0x00014fd3, -0x00014fd2, -0x00014fd1, -0x00014fce, -0x00014fcd, -0x00014fcc, -0x00014fc9, -0x00014fc8, -0x00014fc6, -0x00014fc4, -0x00014fc2, -0x00014fc1, -0x00014fbe, -0x00014fbd, -0x00014fbc, -0x00014fb9, -0x00014fb8, -0x00014fb7, -0x00014fb5, -0x00014fb3, -0x00014fb1, -0x00014fb0, -0x00014fad, -0x00014fac, -0x00014fab, -0x00014fa8, -0x00014fa6, -0x00014fa5, -0x00014fa4, -0x00014fa1, -0x00014fa0, -0x00014f9e, -0x00014f9c, -0x00014f9a, -0x00014f99, -0x00014f96, -0x00014f95, -0x00014f94, -0x00014f93, -0x00014f90, -0x00014f8f, -0x00014f8d, -0x00014f8b, -0x00014f89, -0x00014f88, -0x00014f85, -0x00014f84, -0x00014f83, -0x00014f80, -0x00014f7f, -0x00014f7e, -0x00014f7c, -0x00014f7a, -0x00014f78, -0x00014f77, -0x00014f74, -0x00014f73, -0x00014f72, -0x00014f6f, -0x00014f6e, -0x00014f6d, -0x00014f6a, -0x00014f69, -0x00014f67, -0x00014f66, -0x00014f63, -0x00014f62, -0x00014f61, -0x00014f5e, -0x00014f5d, -0x00014f5c, -0x00014f59, -0x00014f58, -0x00014f56, -0x00014f54, -0x00014f52, -0x00014f51, -0x00014f50, -0x00014f4d, -0x00014f4c, -0x00014f4b, -0x00014f48, -0x00014f47, -0x00014f45, -0x00014f43, -0x00014f41, -0x00014f40, -0x00014f3e, -0x00014f3c, -0x00014f3b, -0x00014f3a, -0x00014f37, -0x00014f36, -0x00014f34, -0x00014f32, -0x00014f30, -0x00014f2f, -0x00014f2c, -0x00014f2b, -0x00014f2a, -0x00014f27, -0x00014f26, -0x00014f25, -0x00014f22, -0x00014f21, -0x00014f1f, -0x00014f1e, -0x00014f1b, -0x00014f1a, -0x00014f19, -0x00014f16, -0x00014f15, -0x00014f14, -0x00014f11, -0x00014f10, -0x00014f0e, -0x00014f0c, -0x00014f0a, -0x00014f09, -0x00014f08, -0x00014f05, -0x00014f04, -0x00014f03, -0x00014f00, -0x00014eff, -0x00014efd, -0x00014efb, -0x00014ef9, -0x00014ef8, -0x00014ef6, -0x00014ef4, -0x00014ef3, -0x00014ef2, -0x00014eef, -0x00014eee, -0x00014eec, -0x00014eea, -0x00014ee8, -0x00014ee7, -0x00014ee5, -0x00014ee3, -0x00014ee2, -0x00014edf, -0x00014ede, -0x00014edd, -0x00014edb, -0x00014ed9, -0x00014ed7, -0x00014ed6, -0x00014ed4, -0x00014ed2, -0x00014ed1, -0x00014ece, -0x00014ecd, -0x00014ecc, -0x00014ec9, -0x00014ec8, -0x00014ec6, -0x00014ec4, -0x00014ec2, -0x00014ec1, -0x00014ebe, -0x00014ebd, -0x00014ebc, -0x00014eb9, -0x00014eb8, -0x00014eb7, -0x00014eb5, -0x00014eb3, -0x00014eb1, -0x00014eb0, -0x00014eae, -0x00014eac, -0x00014eab, -0x00014ea8, -0x00014ea7, -0x00014ea6, -0x00014ea3, -0x00014ea2, -0x00014ea0, -0x00014e9f, -0x00014e9d, -0x00014e9b, -0x00014e9a, -0x00014e97, -0x00014e96, -0x00014e95, -0x00014e92, -0x00014e91, -0x00014e90, -0x00014e8e, -0x00014e8c, -0x00014e8a, -0x00014e89, -0x00014e86, -0x00014e85, -0x00014e84, -0x00014e81, -0x00014e80, -0x00014e7f, -0x00014e7c, -0x00014e7b, -0x00014e79, -0x00014e78, -0x00014e75, -0x00014e74, -0x00014e73, -0x00014e70, -0x00014e6f, -0x00014e6e, -0x00014e6b, -0x00014e6a, -0x00014e68, -0x00014e67, -0x00014e64, -0x00014e63, -0x00014e62, -0x00014e5f, -0x00014e5e, -0x00014e5d, -0x00014e5a, -0x00014e59, -0x00014e57, -0x00014e55, -0x00014e54, -0x00014e52, -0x00014e51, -0x00014e4e, -0x00014e4d, -0x00014e4c, -0x00014e49, -0x00014e48, -0x00014e46, -0x00014e44, -0x00014e43, -0x00014e41, -0x00014e40, -0x00014e3d, -0x00014e3c, -0x00014e3b, -0x00014e38, -0x00014e37, -0x00014e35, -0x00014e33, -0x00014e32, -0x00014e30, -0x00014e2e, -0x00014e2c, -0x00014e2b, -0x00014e2a, -0x00014e27, -0x00014e26, -0x00014e25, -0x00014e22, -0x00014e21, -0x00014e1f, -0x00014e1d, -0x00014e1b, -0x00014e1a, -0x00014e19, -0x00014e16, -0x00014e15, -0x00014e14, -0x00014e11, -0x00014e10, -0x00014e0e, -0x00014e0c, -0x00014e0a, -0x00014e09, -0x00014e07, -0x00014e05, -0x00014e04, -0x00014e03, -0x00014e00, -0x00014dff, -0x00014dfd, -0x00014dfb, -0x00014df9, -0x00014df8, -0x00014df6, -0x00014df4, -0x00014df3, -0x00014df2, -0x00014def, -0x00014dee, -0x00014dec, -0x00014dea, -0x00014de9, -0x00014de7, -0x00014de5, -0x00014de3, -0x00014de2, -0x00014ddf, -0x00014dde, -0x00014ddd, -0x00014ddb, -0x00014dd9, -0x00014dd8, -0x00014dd6, -0x00014dd4, -0x00014dd2, -0x00014dd1, -0x00014dce, -0x00014dcd, -0x00014dcc, -0x00014dc9, -0x00014dc8, -0x00014dc7, -0x00014dc5, -0x00014dc3, -0x00014dc1, -0x00014dc0, -0x00014dbd, -0x00014dbc, -0x00014dbb, -0x00014db8, -0x00014db7, -0x00014db6, -0x00014db4, -0x00014db2, -0x00014db0, -0x00014daf, -0x00014dad, -0x00014dab, -0x00014daa, -0x00014da7, -0x00014da6, -0x00014da5, -0x00014da2, -0x00014da1, -0x00014d9f, -0x00014d9e, -0x00014d9c, -0x00014d9a, -0x00014d99, -0x00014d96, -0x00014d95, -0x00014d94, -0x00014d91, -0x00014d90, -0x00014d8e, -0x00014d8d, -0x00014d8b, -0x00014d89, -0x00014d88, -0x00014d85, -0x00014d84, -0x00014d83, -0x00014d80, -0x00014d7f, -0x00014d7e, -0x00014d7b, -0x00014d7a, -0x00014d78, -0x00014d77, -0x00014d74, -0x00014d73, -0x00014d72, -0x00014d6f, -0x00014d6e, -0x00014d6d, -0x00014d6a, -0x00014d69, -0x00014d67, -0x00014d66, -0x00014d63, -0x00014d62, -0x00014d61, -0x00014d5e, -0x00014d5d, -0x00014d5c, -0x00014d59, -0x00014d58, -0x00014d56, -0x00014d54, -0x00014d52, -0x00014d51, -0x00014d50, -0x00014d4d, -0x00014d4c, -0x00014d4b, -0x00014d48, -0x00014d47, -0x00014d45, -0x00014d43, -0x00014d42, -0x00014d40, -0x00014d3f, -0x00014d3c, -0x00014d3b, -0x00014d3a, -0x00014d37, -0x00014d36, -0x00014d34, -0x00014d32, -0x00014d31, -0x00014d2f, -0x00014d2d, -0x00014d2b, -0x00014d2a, -0x00014d29, -0x00014d26, -0x00014d25, -0x00014d24, -0x00014d21, -0x00014d20, -0x00014d1e, -0x00014d1c, -0x00014d1a, -0x00014d19, -0x00014d17, -0x00014d16, -0x00014d15, -0x00014d12, -0x00014d11, -0x00014d10, -0x00014d0d, -0x00014d0c, -0x00014d0a, -0x00014d09, -0x00014d07, -0x00014d05, -0x00014d04, -0x00014d01, -0x00014d00, -0x00014cff, -0x00014cfc, -0x00014cfb, -0x00014cf9, -0x00014cf8, -0x00014cf6, -0x00014cf4, -0x00014cf3, -0x00014cf0, -0x00014cef, -0x00014cee, -0x00014ceb, -0x00014cea, -0x00014ce9, -0x00014ce7, -0x00014ce5, -0x00014ce3, -0x00014ce2, -0x00014cdf, -0x00014cde, -0x00014cdd, -0x00014cda, -0x00014cd9, -0x00014cd8, -0x00014cd6, -0x00014cd4, -0x00014cd2, -0x00014cd1, -0x00014ccf, -0x00014ccd, -0x00014ccc, -0x00014cc9, -0x00014cc8, -0x00014cc7, -0x00014cc5, -0x00014cc3, -0x00014cc2, -0x00014cc0, -0x00014cbe, -0x00014cbc, -0x00014cbb, -0x00014cb8, -0x00014cb7, -0x00014cb6, -0x00014cb5, -0x00014cb2, -0x00014cb1, -0x00014caf, -0x00014cad, -0x00014cab, -0x00014caa, -0x00014ca8, -0x00014ca6, -0x00014ca5, -0x00014ca2, -0x00014ca1, -0x00014ca0, -0x00014c9e, -0x00014c9c, -0x00014c9b, -0x00014c99, -0x00014c97, -0x00014c95, -0x00014c94, -0x00014c91, -0x00014c90, -0x00014c8f, -0x00014c8e, -0x00014c8b, -0x00014c8a, -0x00014c88, -0x00014c86, -0x00014c84, -0x00014c83, -0x00014c81, -0x00014c7f, -0x00014c7e, -0x00014c7d, -0x00014c7a, -0x00014c79, -0x00014c77, -0x00014c75, -0x00014c74, -0x00014c72, -0x00014c70, -0x00014c6e, -0x00014c6d, -0x00014c6c, -0x00014c69, -0x00014c68, -0x00014c67, -0x00014c64, -0x00014c63, -0x00014c61, -0x00014c5f, -0x00014c5d, -0x00014c5c, -0x00014c5b, -0x00014c58, -0x00014c57, -0x00014c56, -0x00014c53, -0x00014c52, -0x00014c50, -0x00014c4e, -0x00014c4c, -0x00014c4b, -0x00014c4a, -0x00014c47, -0x00014c46, -0x00014c45, -0x00014c42, -0x00014c41, -0x00014c40, -0x00014c3e, -0x00014c3c, -0x00014c3a, -0x00014c39, -0x00014c38, -0x00014c35, -0x00014c34, -0x00014c33, -0x00014c30, -0x00014c2f, -0x00014c2d, -0x00014c2b, -0x00014c2a, -0x00014c28, -0x00014c27, -0x00014c24, -0x00014c23, -0x00014c22, -0x00014c1f, -0x00014c1e, -0x00014c1d, -0x00014c1a, -0x00014c19, -0x00014c17, -0x00014c16, -0x00014c13, -0x00014c12, -0x00014c11, -0x00014c0e, -0x00014c0d, -0x00014c0c, -0x00014c0a, -0x00014c08, -0x00014c06, -0x00014c05, -0x00014c03, -0x00014c01, -0x00014c00, -0x00014bfd, -0x00014bfc, -0x00014bfb, -0x00014bfa, -0x00014bf7, -0x00014bf6, -0x00014bf4, -0x00014bf2, -0x00014bf0, -0x00014bef, -0x00014bed, -0x00014beb, -0x00014bea, -0x00014be9, -0x00014be6, -0x00014be5, -0x00014be3, -0x00014be1, -0x00014be0, -0x00014bde, -0x00014bdc, -0x00014bda, -0x00014bd9, -0x00014bd8, -0x00014bd5, -0x00014bd4, -0x00014bd3, -0x00014bd0, -0x00014bcf, -0x00014bcd, -0x00014bcc, -0x00014bca, -0x00014bc8, -0x00014bc7, -0x00014bc4, -0x00014bc3, -0x00014bc2, -0x00014bbf, -0x00014bbe, -0x00014bbd, -0x00014bbb, -0x00014bb9, -0x00014bb7, -0x00014bb6, -0x00014bb3, -0x00014bb2, -0x00014bb1, -0x00014bae, -0x00014bad, -0x00014bac, -0x00014baa, -0x00014ba8, -0x00014ba7, -0x00014ba5, -0x00014ba3, -0x00014ba1, -0x00014ba0, -0x00014b9f, -0x00014b9c, -0x00014b9b, -0x00014b9a, -0x00014b97, -0x00014b96, -0x00014b94, -0x00014b92, -0x00014b90, -0x00014b8f, -0x00014b8e, -0x00014b8b, -0x00014b8a, -0x00014b89, -0x00014b86, -0x00014b85, -0x00014b84, -0x00014b81, -0x00014b80, -0x00014b7e, -0x00014b7d, -0x00014b7a, -0x00014b79, -0x00014b78, -0x00014b75, -0x00014b74, -0x00014b73, -0x00014b70, -0x00014b6f, -0x00014b6d, -0x00014b6c, -0x00014b6a, -0x00014b69, -0x00014b66, -0x00014b65, -0x00014b64, -0x00014b62, -0x00014b60, -0x00014b5e, -0x00014b5d, -0x00014b5b, -0x00014b59, -0x00014b58, -0x00014b57, -0x00014b54, -0x00014b53, -0x00014b51, -0x00014b4f, -0x00014b4e, -0x00014b4c, -0x00014b4a, -0x00014b48, -0x00014b47, -0x00014b46, -0x00014b43, -0x00014b42, -0x00014b41, -0x00014b3e, -0x00014b3d, -0x00014b3b, -0x00014b3a, -0x00014b38, -0x00014b36, -0x00014b35, -0x00014b32, -0x00014b31, -0x00014b30, -0x00014b2d, -0x00014b2c, -0x00014b2b, -0x00014b29, -0x00014b27, -0x00014b25, -0x00014b24, -0x00014b22, -0x00014b20, -0x00014b1f, -0x00014b1e, -0x00014b1b, -0x00014b1a, -0x00014b19, -0x00014b16, -0x00014b15, -0x00014b13, -0x00014b12, -0x00014b10, -0x00014b0e, -0x00014b0d, -0x00014b0a, -0x00014b09, -0x00014b08, -0x00014b05, -0x00014b04, -0x00014b03, -0x00014b01, -0x00014aff, -0x00014afd, -0x00014afc, -0x00014afa, -0x00014af8, -0x00014af7, -0x00014af6, -0x00014af3, -0x00014af2, -0x00014af0, -0x00014aee, -0x00014aed, -0x00014aeb, -0x00014ae9, -0x00014ae7, -0x00014ae6, -0x00014ae5, -0x00014ae2, -0x00014ae1, -0x00014ae0, -0x00014add, -0x00014adc, -0x00014adb, -0x00014ad9, -0x00014ad7, -0x00014ad5, -0x00014ad4, -0x00014ad1, -0x00014ad0, -0x00014acf, -0x00014ace, -0x00014acb, -0x00014aca, -0x00014ac8, -0x00014ac6, -0x00014ac5, -0x00014ac3, -0x00014ac1, -0x00014abf, -0x00014abe, -0x00014abd, -0x00014aba, -0x00014ab9, -0x00014ab8, -0x00014ab5, -0x00014ab4, -0x00014ab2, -0x00014ab1, -0x00014aaf, -0x00014aad, -0x00014aac, -0x00014aa9, -0x00014aa8, -0x00014aa7, -0x00014aa4, -0x00014aa3, -0x00014aa2, -0x00014aa0, -0x00014a9e, -0x00014a9c, -0x00014a9b, -0x00014a99, -0x00014a97, -0x00014a96, -0x00014a95, -0x00014a93, -0x00014a90, -0x00014a8f, -0x00014a8e, -0x00014a8b, -0x00014a8a, -0x00014a89, -0x00014a86, -0x00014a85, -0x00014a83, -0x00014a82, -0x00014a80, -0x00014a7e, -0x00014a7d, -0x00014a7a, -0x00014a79, -0x00014a78, -0x00014a77, -0x00014a74, -0x00014a73, -0x00014a71, -0x00014a6f, -0x00014a6e, -0x00014a6c, -0x00014a6b, -0x00014a68, -0x00014a67, -0x00014a66, -0x00014a63, -0x00014a62, -0x00014a61, -0x00014a5f, -0x00014a5d, -0x00014a5c, -0x00014a5a, -0x00014a58, -0x00014a56, -0x00014a55, -0x00014a54, -0x00014a51, -0x00014a50, -0x00014a4f, -0x00014a4c, -0x00014a4b, -0x00014a49, -0x00014a47, -0x00014a46, -0x00014a44, -0x00014a43, -0x00014a40, -0x00014a3f, -0x00014a3e, -0x00014a3b, -0x00014a3a, -0x00014a39, -0x00014a37, -0x00014a35, -0x00014a34, -0x00014a32, -0x00014a30, -0x00014a2e, -0x00014a2d, -0x00014a2c, -0x00014a29, -0x00014a28, -0x00014a27, -0x00014a24, -0x00014a23, -0x00014a22, -0x00014a20, -0x00014a1e, -0x00014a1c, -0x00014a1b, -0x00014a18, -0x00014a17, -0x00014a16, -0x00014a15, -0x00014a12, -0x00014a11, -0x00014a0f, -0x00014a0d, -0x00014a0c, -0x00014a0a, -0x00014a09, -0x00014a06, -0x00014a05, -0x00014a04, -0x00014a01, -0x00014a00, -0x000149ff, -0x000149fc, -0x000149fb, -0x000149fa, -0x000149f8, -0x000149f6, -0x000149f4, -0x000149f3, -0x000149f1, -0x000149ef, -0x000149ee, -0x000149ed, -0x000149ea, -0x000149e9, -0x000149e8, -0x000149e5, -0x000149e4, -0x000149e2, -0x000149e1, -0x000149de, -0x000149dd, -0x000149dc, -0x000149d9, -0x000149d8, -0x000149d7, -0x000149d5, -0x000149d3, -0x000149d2, -0x000149d0, -0x000149ce, -0x000149cc, -0x000149cb, -0x000149ca, -0x000149c7, -0x000149c6, -0x000149c5, -0x000149c2, -0x000149c1, -0x000149c0, -0x000149bd, -0x000149bc, -0x000149ba, -0x000149b8, -0x000149b6, -0x000149b5, -0x000149b4, -0x000149b1, -0x000149b0, -0x000149af, -0x000149ac, -0x000149ab, -0x000149aa, -0x000149a8, -0x000149a6, -0x000149a5, -0x000149a3, -0x000149a1, -0x0001499f, -0x0001499e, -0x0001499d, -0x0001499a, -0x00014999, -0x00014998, -0x00014995, -0x00014994, -0x00014993, -0x00014991, -0x0001498f, -0x0001498d, -0x0001498c, -0x0001498a, -0x00014988, -0x00014987, -0x00014986, -0x00014983, -0x00014982, -0x00014981, -0x0001497e, -0x0001497d, -0x0001497b, -0x0001497a, -0x00014978, -0x00014976, -0x00014975, -0x00014972, -0x00014971, -0x00014970, -0x0001496f, -0x0001496c, -0x0001496b, -0x00014969, -0x00014967, -0x00014966, -0x00014964, -0x00014963, -0x00014960, -0x0001495f, -0x0001495e, -0x0001495b, -0x0001495a, -0x00014959, -0x00014957, -0x00014955, -0x00014954, -0x00014952, -0x00014950, -0x0001494e, -0x0001494d, -0x0001494c, -0x00014949, -0x00014948, -0x00014947, -0x00014944, -0x00014943, -0x00014942, -0x00014940, -0x0001493e, -0x0001493c, -0x0001493b, -0x00014939, -0x00014937, -0x00014936, -0x00014935, -0x00014932, -0x00014931, -0x00014930, -0x0001492d, -0x0001492c, -0x0001492a, -0x00014929, -0x00014927, -0x00014925, -0x00014924, -0x00014921, -0x00014920, -0x0001491f, -0x0001491e, -0x0001491b, -0x0001491a, -0x00014918, -0x00014916, -0x00014915, -0x00014913, -0x00014912, -0x0001490f, -0x0001490e, -0x0001490d, -0x0001490a, -0x00014909, -0x00014908, -0x00014906, -0x00014904, -0x00014903, -0x00014901, -0x000148ff, -0x000148fd, -0x000148fc, -0x000148fb, -0x000148f8, -0x000148f7, -0x000148f6, -0x000148f3, -0x000148f2, -0x000148f1, -0x000148ef, -0x000148ed, -0x000148eb, -0x000148ea, -0x000148e8, -0x000148e6, -0x000148e5, -0x000148e4, -0x000148e1, -0x000148e0, -0x000148df, -0x000148dc, -0x000148db, -0x000148d9, -0x000148d8, -0x000148d6, -0x000148d4, -0x000148d3, -0x000148d0, -0x000148cf, -0x000148ce, -0x000148cd, -0x000148ca, -0x000148c9, -0x000148c7, -0x000148c5, -0x000148c4, -0x000148c2, -0x000148c1, -0x000148be, -0x000148bd, -0x000148bc, -0x000148b9, -0x000148b8, -0x000148b7, -0x000148b5, -0x000148b3, -0x000148b2, -0x000148b0, -0x000148ae, -0x000148ac, -0x000148ab, -0x000148aa, -0x000148a7, -0x000148a6, -0x000148a5, -0x000148a2, -0x000148a1, -0x000148a0, -0x0001489e, -0x0001489c, -0x0001489a, -0x00014899, -0x00014897, -0x00014895, -0x00014894, -0x00014893, -0x00014890, -0x0001488f, -0x0001488e, -0x0001488b, -0x0001488a, -0x00014888, -0x00014887, -0x00014885, -0x00014883, -0x00014882, -0x00014881, -0x0001487e, -0x0001487d, -0x0001487c, -0x00014879, -0x00014878, -0x00014876, -0x00014875, -0x00014873, -0x00014871, -0x00014870, -0x0001486d, -0x0001486c, -0x0001486b, -0x0001486a, -0x00014867, -0x00014866, -0x00014864, -0x00014862, -0x00014861, -0x0001485f, -0x0001485e, -0x0001485c, -0x0001485a, -0x00014859, -0x00014856, -0x00014855, -0x00014854, -0x00014853, -0x00014850, -0x0001484f, -0x0001484d, -0x0001484b, -0x0001484a, -0x00014848, -0x00014847, -0x00014844, -0x00014843, -0x00014842, -0x0001483f, -0x0001483e, -0x0001483d, -0x0001483b, -0x00014839, -0x00014838, -0x00014836, -0x00014834, -0x00014832, -0x00014831, -0x00014830, -0x0001482d, -0x0001482c, -0x0001482b, -0x00014828, -0x00014827, -0x00014826, -0x00014824, -0x00014822, -0x00014820, -0x0001481f, -0x0001481d, -0x0001481b, -0x0001481a, -0x00014819, -0x00014817, -0x00014816, -0x00014813, -0x00014812, -0x00014811, -0x0001480f, -0x0001480d, -0x0001480c, -0x0001480a, -0x00014808, -0x00014806, -0x00014805, -0x00014804, -0x00014801, -0x00014800, -0x000147ff, -0x000147fd, -0x000147fb, -0x000147fa, -0x000147f8, -0x000147f6, -0x000147f4, -0x000147f3, -0x000147f2, -0x000147ef, -0x000147ee, -0x000147ed, -0x000147ea, -0x000147e9, -0x000147e8, -0x000147e6, -0x000147e4, -0x000147e3, -0x000147e1, -0x000147df, -0x000147dd, -0x000147dc, -0x000147db, -0x000147d8, -0x000147d7, -0x000147d6, -0x000147d3, -0x000147d2, -0x000147d1, -0x000147cf, -0x000147cd, -0x000147cb, -0x000147ca, -0x000147c9, -0x000147c6, -0x000147c5, -0x000147c4, -0x000147c1, -0x000147c0, -0x000147bf, -0x000147bd, -0x000147bb, -0x000147ba, -0x000147b8, -0x000147b6, -0x000147b4, -0x000147b3, -0x000147b2, -0x000147af, -0x000147ae, -0x000147ad, -0x000147aa, -0x000147a9, -0x000147a8, -0x000147a6, -0x000147a4, -0x000147a2, -0x000147a1, -0x0001479f, -0x0001479d, -0x0001479c, -0x0001479b, -0x00014798, -0x00014797, -0x00014796, -0x00014794, -0x00014792, -0x00014791, -0x0001478f, -0x0001478d, -0x0001478b, -0x0001478a, -0x00014789, -0x00014786, -0x00014785, -0x00014784, -0x00014781, -0x00014780, -0x0001477f, -0x0001477d, -0x0001477b, -0x00014779, -0x00014778, -0x00014776, -0x00014774, -0x00014773, -0x00014772, -0x0001476f, -0x0001476e, -0x0001476d, -0x0001476a, -0x00014769, -0x00014768, -0x00014766, -0x00014764, -0x00014762, -0x00014761, -0x00014760, -0x0001475d, -0x0001475c, -0x0001475b, -0x00014758, -0x00014757, -0x00014756, -0x00014754, -0x00014752, -0x00014750, -0x0001474f, -0x0001474d, -0x0001474b, -0x0001474a, -0x00014749, -0x00014746, -0x00014745, -0x00014744, -0x00014742, -0x00014740, -0x0001473f, -0x0001473d, -0x0001473c, -0x00014739, -0x00014738, -0x00014737, -0x00014734, -0x00014733, -0x00014732, -0x00014731, -0x0001472e, -0x0001472d, -0x0001472b, -0x0001472a, -0x00014728, -0x00014726, -0x00014725, -0x00014722, -0x00014721, -0x00014720, -0x0001471f, -0x0001471c, -0x0001471b, -0x0001471a, -0x00014717, -0x00014716, -0x00014714, -0x00014713, -0x00014711, -0x0001470f, -0x0001470e, -0x0001470d, -0x0001470a, -0x00014709, -0x00014708, -0x00014705, -0x00014704, -0x00014703, -0x00014701, -0x000146ff, -0x000146fd, -0x000146fc, -0x000146fa, -0x000146f8, -0x000146f7, -0x000146f6, -0x000146f3, -0x000146f2, -0x000146f1, -0x000146ef, -0x000146ed, -0x000146ec, -0x000146ea, -0x000146e8, -0x000146e6, -0x000146e5, -0x000146e4, -0x000146e1, -0x000146e0, -0x000146df, -0x000146de, -0x000146db, -0x000146da, -0x000146d8, -0x000146d6, -0x000146d5, -0x000146d3, -0x000146d2, -0x000146cf, -0x000146ce, -0x000146cd, -0x000146ca, -0x000146c9, -0x000146c8, -0x000146c7, -0x000146c4, -0x000146c3, -0x000146c1, -0x000146c0, -0x000146be, -0x000146bc, -0x000146bb, -0x000146b8, -0x000146b7, -0x000146b6, -0x000146b5, -0x000146b2, -0x000146b1, -0x000146b0, -0x000146ad, -0x000146ac, -0x000146aa, -0x000146a9, -0x000146a7, -0x000146a5, -0x000146a4, -0x000146a3, -0x000146a0, -0x0001469f, -0x0001469e, -0x0001469b, -0x0001469a, -0x00014699, -0x00014697, -0x00014695, -0x00014693, -0x00014692, -0x00014690, -0x0001468e, -0x0001468d, -0x0001468c, -0x00014689, -0x00014688, -0x00014687, -0x00014685, -0x00014683, -0x00014682, -0x00014680, -0x0001467e, -0x0001467c, -0x0001467b, -0x0001467a, -0x00014677, -0x00014676, -0x00014675, -0x00014673, -0x00014671, -0x00014670, -0x0001466e, -0x0001466c, -0x0001466b, -0x0001466a, -0x00014667, -0x00014666, -0x00014665, -0x00014662, -0x00014661, -0x00014660, -0x0001465e, -0x0001465c, -0x0001465a, -0x00014659, -0x00014658, -0x00014655, -0x00014654, -0x00014653, -0x00014650, -0x0001464f, -0x0001464e, -0x0001464c, -0x0001464a, -0x00014649, -0x00014647, -0x00014646, -0x00014643, -0x00014642, -0x00014641, -0x0001463e, -0x0001463d, -0x0001463c, -0x0001463b, -0x00014638, -0x00014637, -0x00014635, -0x00014634, -0x00014632, -0x00014630, -0x0001462f, -0x0001462d, -0x0001462b, -0x0001462a, -0x00014629, -0x00014626, -0x00014625, -0x00014624, -0x00014622, -0x00014620, -0x0001461f, -0x0001461d, -0x0001461b, -0x00014619, -0x00014618, -0x00014617, -0x00014614, -0x00014613, -0x00014612, -0x00014611, -0x0001460e, -0x0001460d, -0x0001460b, -0x00014609, -0x00014608, -0x00014606, -0x00014605, -0x00014603, -0x00014601, -0x00014600, -0x000145ff, -0x000145fc, -0x000145fb, -0x000145fa, -0x000145f7, -0x000145f6, -0x000145f5, -0x000145f3, -0x000145f1, -0x000145ef, -0x000145ee, -0x000145ed, -0x000145ea, -0x000145e9, -0x000145e8, -0x000145e5, -0x000145e4, -0x000145e3, -0x000145e1, -0x000145df, -0x000145de, -0x000145dc, -0x000145db, -0x000145d9, -0x000145d7, -0x000145d6, -0x000145d3, -0x000145d2, -0x000145d1, -0x000145d0, -0x000145cd, -0x000145cc, -0x000145cb, -0x000145c9, -0x000145c7, -0x000145c5, -0x000145c4, -0x000145c2, -0x000145c0, -0x000145bf, -0x000145be, -0x000145bb, -0x000145ba, -0x000145b9, -0x000145b7, -0x000145b5, -0x000145b4, -0x000145b2, -0x000145b0, -0x000145af, -0x000145ad, -0x000145ac, -0x000145a9, -0x000145a8, -0x000145a7, -0x000145a5, -0x000145a3, -0x000145a1, -0x000145a0, -0x0001459f, -0x0001459c, -0x0001459b, -0x0001459a, -0x00014598, -0x00014596, -0x00014595, -0x00014593, -0x00014592, -0x0001458f, -0x0001458e, -0x0001458d, -0x0001458a, -0x00014589, -0x00014588, -0x00014587, -0x00014584, -0x00014583, -0x00014581, -0x00014580, -0x0001457e, -0x0001457c, -0x0001457b, -0x00014579, -0x00014577, -0x00014576, -0x00014575, -0x00014572, -0x00014571, -0x00014570, -0x0001456e, -0x0001456c, -0x0001456b, -0x00014569, -0x00014568, -0x00014566, -0x00014564, -0x00014563, -0x00014560, -0x0001455f, -0x0001455e, -0x0001455d, -0x0001455a, -0x00014559, -0x00014558, -0x00014556, -0x00014554, -0x00014553, -0x00014551, -0x0001454f, -0x0001454d, -0x0001454c, -0x0001454b, -0x00014548, -0x00014547, -0x00014546, -0x00014545, -0x00014542, -0x00014541, -0x0001453f, -0x0001453e, -0x0001453c, -0x0001453a, -0x00014539, -0x00014537, -0x00014535, -0x00014534, -0x00014533, -0x00014530, -0x0001452f, -0x0001452e, -0x0001452c, -0x0001452a, -0x00014529, -0x00014527, -0x00014525, -0x00014524, -0x00014522, -0x00014521, -0x0001451e, -0x0001451d, -0x0001451c, -0x0001451b, -0x00014518, -0x00014517, -0x00014516, -0x00014513, -0x00014512, -0x00014511, -0x0001450f, -0x0001450d, -0x0001450b, -0x0001450a, -0x00014509, -0x00014506, -0x00014505, -0x00014504, -0x00014503, -0x00014500, -0x000144ff, -0x000144fd, -0x000144fb, -0x000144fa, -0x000144f8, -0x000144f7, -0x000144f5, -0x000144f3, -0x000144f2, -0x000144f1, -0x000144ee, -0x000144ed, -0x000144ec, -0x000144e9, -0x000144e8, -0x000144e7, -0x000144e5, -0x000144e3, -0x000144e2, -0x000144e0, -0x000144df, -0x000144dc, -0x000144db, -0x000144da, -0x000144d9, -0x000144d6, -0x000144d5, -0x000144d2, -0x000144d1, -0x000144d0, -0x000144ce, -0x000144cc, -0x000144cb, -0x000144c9, -0x000144c8, -0x000144c5, -0x000144c4, -0x000144c3, -0x000144c2, -0x000144bf, -0x000144be, -0x000144bd, -0x000144ba, -0x000144b9, -0x000144b8, -0x000144b6, -0x000144b4, -0x000144b2, -0x000144b1, -0x000144b0, -0x000144ad, -0x000144ac, -0x000144ab, -0x000144aa, -0x000144a7, -0x000144a6, -0x000144a5, -0x000144a3, -0x000144a1, -0x0001449f, -0x0001449e, -0x0001449c, -0x0001449a, -0x00014499, -0x00014498, -0x00014495, -0x00014494, -0x00014493, -0x00014492, -0x0001448f, -0x0001448e, -0x0001448c, -0x0001448b, -0x00014489, -0x00014487, -0x00014486, -0x00014484, -0x00014482, -0x00014481, -0x00014480, -0x0001447d, -0x0001447c, -0x0001447b, -0x0001447a, -0x00014477, -0x00014476, -0x00014474, -0x00014473, -0x00014471, -0x0001446f, -0x0001446e, -0x0001446c, -0x0001446a, -0x00014469, -0x00014468, -0x00014465, -0x00014464, -0x00014463, -0x00014461, -0x0001445f, -0x0001445e, -0x0001445c, -0x0001445b, -0x00014459, -0x00014457, -0x00014456, -0x00014454, -0x00014452, -0x00014451, -0x00014450, -0x0001444d, -0x0001444c, -0x0001444b, -0x00014449, -0x00014447, -0x00014446, -0x00014444, -0x00014443, -0x00014441, -0x0001443f, -0x0001443e, -0x0001443d, -0x0001443a, -0x00014439, -0x00014438, -0x00014435, -0x00014434, -0x00014433, -0x00014431, -0x0001442f, -0x0001442e, -0x0001442c, -0x0001442b, -0x00014429, -0x00014427, -0x00014426, -0x00014425, -0x00014422, -0x00014421, -0x00014420, -0x0001441d, -0x0001441c, -0x0001441b, -0x00014419, -0x00014417, -0x00014416, -0x00014414, -0x00014413, -0x00014410, -0x0001440f, -0x0001440e, -0x0001440d, -0x0001440a, -0x00014409, -0x00014408, -0x00014405, -0x00014404, -0x00014403, -0x00014401, -0x000143ff, -0x000143fd, -0x000143fc, -0x000143fb, -0x000143f8, -0x000143f7, -0x000143f6, -0x000143f5, -0x000143f2, -0x000143f1, -0x000143f0, -0x000143ed, -0x000143ec, -0x000143ea, -0x000143e9, -0x000143e7, -0x000143e5, -0x000143e4, -0x000143e3, -0x000143e0, -0x000143df, -0x000143de, -0x000143dd, -0x000143da, -0x000143d9, -0x000143d8, -0x000143d6, -0x000143d4, -0x000143d2, -0x000143d1, -0x000143cf, -0x000143cd, -0x000143cc, -0x000143cb, -0x000143c8, -0x000143c7, -0x000143c6, -0x000143c5, -0x000143c2, -0x000143c1, -0x000143bf, -0x000143be, -0x000143bc, -0x000143ba, -0x000143b9, -0x000143b7, -0x000143b5, -0x000143b4, -0x000143b3, -0x000143b0, -0x000143af, -0x000143ae, -0x000143ac, -0x000143aa, -0x000143a9, -0x000143a7, -0x000143a6, -0x000143a4, -0x000143a2, -0x000143a1, -0x0001439f, -0x0001439d, -0x0001439c, -0x0001439b, -0x00014398, -0x00014397, -0x00014396, -0x00014394, -0x00014392, -0x00014391, -0x0001438f, -0x0001438e, -0x0001438c, -0x0001438a, -0x00014389, -0x00014387, -0x00014385, -0x00014384, -0x00014383, -0x00014380, -0x0001437f, -0x0001437e, -0x0001437c, -0x0001437a, -0x00014379, -0x00014377, -0x00014376, -0x00014374, -0x00014372, -0x00014371, -0x00014370, -0x0001436d, -0x0001436c, -0x0001436b, -0x00014368, -0x00014367, -0x00014366, -0x00014364, -0x00014362, -0x00014361, -0x0001435f, -0x0001435e, -0x0001435b, -0x0001435a, -0x00014359, -0x00014358, -0x00014355, -0x00014354, -0x00014353, -0x00014350, -0x0001434f, -0x0001434e, -0x0001434c, -0x0001434a, -0x00014348, -0x00014347, -0x00014346, -0x00014343, -0x00014342, -0x00014341, -0x00014340, -0x0001433d, -0x0001433d, -0x0001433a, -0x00014339, -0x00014338, -0x00014336, -0x00014334, -0x00014332, -0x00014331, -0x00014330, -0x0001432d, -0x0001432c, -0x0001432b, -0x0001432a, -0x00014327, -0x00014326, -0x00014325, -0x00014323, -0x00014321, -0x00014320, -0x0001431e, -0x0001431d, -0x0001431a, -0x00014319, -0x00014318, -0x00014315, -0x00014314, -0x00014313, -0x00014312, -0x0001430f, -0x0001430e, -0x0001430d, -0x0001430b, -0x00014309, -0x00014308, -0x00014306, -0x00014305, -0x00014303, -0x00014301, -0x00014300, -0x000142ff, -0x000142fc, -0x000142fb, -0x000142fa, -0x000142f7, -0x000142f6, -0x000142f5, -0x000142f3, -0x000142f1, -0x000142f0, -0x000142ee, -0x000142ed, -0x000142eb, -0x000142e9, -0x000142e8, -0x000142e7, -0x000142e4, -0x000142e3, -0x000142e2, -0x000142e0, -0x000142de, -0x000142dd, -0x000142db, -0x000142da, -0x000142d8, -0x000142d6, -0x000142d5, -0x000142d3, -0x000142d1, -0x000142d0, -0x000142cf, -0x000142cc, -0x000142cb, -0x000142ca, -0x000142c8, -0x000142c6, -0x000142c5, -0x000142c3, -0x000142c2, -0x000142c0, -0x000142be, -0x000142bd, -0x000142bc, -0x000142b9, -0x000142b8, -0x000142b7, -0x000142b6, -0x000142b3, -0x000142b2, -0x000142b1, -0x000142ae, -0x000142ad, -0x000142ab, -0x000142aa, -0x000142a8, -0x000142a6, -0x000142a5, -0x000142a4, -0x000142a1, -0x000142a0, -0x0001429f, -0x0001429e, -0x0001429b, -0x0001429a, -0x00014299, -0x00014297, -0x00014295, -0x00014293, -0x00014292, -0x00014290, -0x0001428e, -0x0001428d, -0x0001428c, -0x00014289, -0x00014288, -0x00014287, -0x00014286, -0x00014283, -0x00014282, -0x00014281, -0x0001427f, -0x0001427d, -0x0001427c, -0x0001427a, -0x00014279, -0x00014276, -0x00014275, -0x00014274, -0x00014273, -0x00014271, -0x0001426f, -0x0001426d, -0x0001426c, -0x0001426a, -0x00014268, -0x00014267, -0x00014266, -0x00014263, -0x00014262, -0x00014261, -0x00014260, -0x0001425d, -0x0001425c, -0x0001425b, -0x00014259, -0x00014257, -0x00014256, -0x00014254, -0x00014253, -0x00014251, -0x0001424f, -0x0001424e, -0x0001424d, -0x0001424a, -0x00014249, -0x00014248, -0x00014246, -0x00014244, -0x00014243, -0x00014241, -0x00014240, -0x0001423e, -0x0001423c, -0x0001423b, -0x00014239, -0x00014237, -0x00014236, -0x00014235, -0x00014232, -0x00014231, -0x00014230, -0x0001422f, -0x0001422c, -0x0001422b, -0x0001422a, -0x00014228, -0x00014226, -0x00014224, -0x00014223, -0x00014222, -0x0001421f, -0x0001421e, -0x0001421d, -0x0001421c, -0x00014219, -0x00014218, -0x00014217, -0x00014215, -0x00014213, -0x00014212, -0x00014210, -0x0001420f, -0x0001420d, -0x0001420b, -0x0001420a, -0x00014208, -0x00014206, -0x00014205, -0x00014204, -0x00014201, -0x00014200, -0x000141ff, -0x000141fd, -0x000141fb, -0x000141fa, -0x000141f8, -0x000141f7, -0x000141f5, -0x000141f3, -0x000141f2, -0x000141f1, -0x000141ee, -0x000141ed, -0x000141ec, -0x000141eb, -0x000141e8, -0x000141e7, -0x000141e6, -0x000141e4, -0x000141e2, -0x000141e1, -0x000141df, -0x000141de, -0x000141dc, -0x000141da, -0x000141d9, -0x000141d6, -0x000141d5, -0x000141d4, -0x000141d3, -0x000141d0, -0x000141cf, -0x000141ce, -0x000141cc, -0x000141ca, -0x000141c9, -0x000141c7, -0x000141c6, -0x000141c4, -0x000141c2, -0x000141c1, -0x000141c0, -0x000141bd, -0x000141bc, -0x000141bb, -0x000141ba, -0x000141b7, -0x000141b6, -0x000141b5, -0x000141b3, -0x000141b1, -0x000141b0, -0x000141ae, -0x000141ad, -0x000141aa, -0x000141a9, -0x000141a8, -0x000141a6, -0x000141a4, -0x000141a3, -0x000141a1, -0x0001419f, -0x0001419e, -0x0001419d, -0x0001419a, -0x00014199, -0x00014198, -0x00014196, -0x00014194, -0x00014193, -0x00014191, -0x00014190, -0x0001418e, -0x0001418c, -0x0001418b, -0x0001418a, -0x00014187, -0x00014186, -0x00014185, -0x00014184, -0x00014181, -0x00014180, -0x0001417f, -0x0001417d, -0x0001417b, -0x0001417a, -0x00014178, -0x00014177, -0x00014175, -0x00014173, -0x00014172, -0x00014171, -0x0001416e, -0x0001416d, -0x0001416c, -0x0001416b, -0x00014168, -0x00014167, -0x00014166, -0x00014164, -0x00014162, -0x00014161, -0x0001415f, -0x0001415e, -0x0001415c, -0x0001415a, -0x00014159, -0x00014158, -0x00014155, -0x00014154, -0x00014153, -0x00014152, -0x0001414f, -0x0001414e, -0x0001414c, -0x0001414b, -0x00014149, -0x00014147, -0x00014146, -0x00014145, -0x00014142, -0x00014141, -0x00014140, -0x0001413d, -0x0001413c, -0x0001413b, -0x0001413a, -0x00014137, -0x00014136, -0x00014135, -0x00014133, -0x00014131, -0x00014130, -0x0001412e, -0x0001412d, -0x0001412b, -0x00014129, -0x00014128, -0x00014127, -0x00014124, -0x00014123, -0x00014122, -0x00014121, -0x0001411e, -0x0001411d, -0x0001411c, -0x0001411a, -0x00014118, -0x00014117, -0x00014115, -0x00014114, -0x00014112, -0x00014110, -0x0001410f, -0x0001410e, -0x0001410b, -0x0001410a, -0x00014109, -0x00014108, -0x00014105, -0x00014104, -0x00014103, -0x00014101, -0x000140ff, -0x000140fd, -0x000140fc, -0x000140fb, -0x000140f8, -0x000140f7, -0x000140f6, -0x000140f5, -0x000140f2, -0x000140f1, -0x000140f0, -0x000140ee, -0x000140ec, -0x000140eb, -0x000140e9, -0x000140e8, -0x000140e6, -0x000140e4, -0x000140e3, -0x000140e2, -0x000140df, -0x000140de, -0x000140dc, -0x000140db, -0x000140da, -0x000140d7, -0x000140d6, -0x000140d5, -0x000140d3, -0x000140d1, -0x000140d0, -0x000140ce, -0x000140cd, -0x000140cb, -0x000140c9, -0x000140c8, -0x000140c7, -0x000140c4, -0x000140c3, -0x000140c2, -0x000140c1, -0x000140be, -0x000140bd, -0x000140bc, -0x000140ba, -0x000140b8, -0x000140b7, -0x000140b5, -0x000140b4, -0x000140b2, -0x000140b0, -0x000140af, -0x000140ae, -0x000140ab, -0x000140aa, -0x000140a9, -0x000140a8, -0x000140a5, -0x000140a4, -0x000140a3, -0x000140a1, -0x0001409f, -0x0001409e, -0x0001409c, -0x0001409b, -0x00014099, -0x00014097, -0x00014096, -0x00014095, -0x00014092, -0x00014091, -0x00014090, -0x0001408f, -0x0001408c, -0x0001408b, -0x0001408a, -0x00014088, -0x00014086, -0x00014085, -0x00014083, -0x00014082, -0x00014080, -0x0001407e, -0x0001407d, -0x0001407c, -0x00014079, -0x00014078, -0x00014077, -0x00014076, -0x00014073, -0x00014072, -0x00014071, -0x0001406f, -0x0001406d, -0x0001406c, -0x0001406a, -0x00014069, -0x00014067, -0x00014065, -0x00014064, -0x00014063, -0x00014060, -0x0001405f, -0x0001405e, -0x0001405d, -0x0001405a, -0x00014059, -0x00014058, -0x00014056, -0x00014054, -0x00014053, -0x00014051, -0x00014050, -0x0001404e, -0x0001404c, -0x0001404b, -0x0001404a, -0x00014047, -0x00014046, -0x00014045, -0x00014044, -0x00014041, -0x00014040, -0x0001403f, -0x0001403d, -0x0001403b, -0x0001403a, -0x00014038, -0x00014037, -0x00014035, -0x00014033, -0x00014032, -0x00014031, -0x0001402e, -0x0001402d, -0x0001402c, -0x0001402b, -0x00014028, -0x00014027, -0x00014026, -0x00014024, -0x00014022, -0x00014021, -0x0001401f, -0x0001401e, -0x0001401c, -0x0001401a, -0x00014019, -0x00014018, -0x00014015, -0x00014014, -0x00014013, -0x00014012, -0x0001400f, -0x0001400e, -0x0001400d, -0x0001400b, -0x00014009, -0x00014008, -0x00014006, -0x00014005, -0x00014003, -0x00014001, -0x00014000, -0x00013fff, -0x00013ffc, -0x00013ffb, -0x00013ffa, -0x00013ff9, -0x00013ff6, -0x00013ff5, -0x00013ff4, -0x00013ff2, -0x00013ff0, -0x00013fef, -0x00013fed, -0x00013fec, -0x00013fea, -0x00013fe8, -0x00013fe7, -0x00013fe6, -0x00013fe3, -0x00013fe2, -0x00013fe1, -0x00013fe0, -0x00013fdd, -0x00013fdc, -0x00013fdb, -0x00013fd9, -0x00013fd7, -0x00013fd6, -0x00013fd4, -0x00013fd3, -0x00013fd1, -0x00013fcf, -0x00013fce, -0x00013fcd, -0x00013fca, -0x00013fc9, -0x00013fc8, -0x00013fc7, -0x00013fc4, -0x00013fc3, -0x00013fc2, -0x00013fc0, -0x00013fbe, -0x00013fbd, -0x00013fbb, -0x00013fba, -0x00013fb8, -0x00013fb6, -0x00013fb5, -0x00013fb4, -0x00013fb1, -0x00013fb0, -0x00013faf, -0x00013fae, -0x00013fab, -0x00013faa, -0x00013fa9, -0x00013fa7, -0x00013fa5, -0x00013fa4, -0x00013fa2, -0x00013fa1, -0x00013f9f, -0x00013f9d, -0x00013f9c, -0x00013f9b, -0x00013f98, -0x00013f97, -0x00013f96, -0x00013f95, -0x00013f92, -0x00013f91, -0x00013f90, -0x00013f8e, -0x00013f8c, -0x00013f8b, -0x00013f89, -0x00013f88, -0x00013f86, -0x00013f84, -0x00013f83, -0x00013f82, -0x00013f7f, -0x00013f7e, -0x00013f7d, -0x00013f7c, -0x00013f79, -0x00013f78, -0x00013f77, -0x00013f75, -0x00013f73, -0x00013f72, -0x00013f70, -0x00013f6f, -0x00013f6d, -0x00013f6b, -0x00013f6a, -0x00013f69, -0x00013f66, -0x00013f65, -0x00013f64, -0x00013f63, -0x00013f60, -0x00013f5f, -0x00013f5e, -0x00013f5c, -0x00013f5a, -0x00013f59, -0x00013f57, -0x00013f56, -0x00013f54, -0x00013f52, -0x00013f51, -0x00013f50, -0x00013f4d, -0x00013f4c, -0x00013f4b, -0x00013f4a, -0x00013f48, -0x00013f46, -0x00013f45, -0x00013f43, -0x00013f42, -0x00013f40, -0x00013f3e, -0x00013f3d, -0x00013f3c, -0x00013f39, -0x00013f38, -0x00013f37, -0x00013f36, -0x00013f33, -0x00013f32, -0x00013f31, -0x00013f2f, -0x00013f2d, -0x00013f2c, -0x00013f2a, -0x00013f29, -0x00013f27, -0x00013f25, -0x00013f24, -0x00013f23, -0x00013f20, -0x00013f1f, -0x00013f1e, -0x00013f1d, -0x00013f1a, -0x00013f19, -0x00013f18, -0x00013f16, -0x00013f14, -0x00013f13, -0x00013f11, -0x00013f10, -0x00013f0e, -0x00013f0c, -0x00013f0b, -0x00013f0a, -0x00013f07, -0x00013f06, -0x00013f05, -0x00013f04, -0x00013f01, -0x00013f00, -0x00013eff, -0x00013efe, -0x00013efb, -0x00013efa, -0x00013ef9, -0x00013ef7, -0x00013ef5, -0x00013ef4, -0x00013ef2, -0x00013ef1, -0x00013eef, -0x00013eed, -0x00013eec, -0x00013eeb, -0x00013eea, -0x00013ee7, -0x00013ee6, -0x00013ee5, -0x00013ee3, -0x00013ee1, -0x00013ee0, -0x00013ede, -0x00013edd, -0x00013edb, -0x00013ed9, -0x00013ed8, -0x00013ed7, -0x00013ed4, -0x00013ed3, -0x00013ed2, -0x00013ed1, -0x00013ece, -0x00013ecd, -0x00013ecc, -0x00013eca, -0x00013ec8, -0x00013ec7, -0x00013ec5, -0x00013ec4, -0x00013ec2, -0x00013ec0, -0x00013ebf, -0x00013ebe, -0x00013ebb, -0x00013eba, -0x00013eb9, -0x00013eb8, -0x00013eb5, -0x00013eb4, -0x00013eb3, -0x00013eb1, -0x00013eaf, -0x00013eae, -0x00013ead, -0x00013eab, -0x00013ea9, -0x00013ea8, -0x00013ea6, -0x00013ea5, -0x00013ea3, -0x00013ea1, -0x00013ea0, -0x00013e9f, -0x00013e9c, -0x00013e9b, -0x00013e9a, -0x00013e99, -0x00013e96, -0x00013e95, -0x00013e94, -0x00013e92, -0x00013e90, -0x00013e8f, -0x00013e8d, -0x00013e8c, -0x00013e8a, -0x00013e88, -0x00013e87, -0x00013e86, -0x00013e84, -0x00013e82, -0x00013e81, -0x00013e80, -0x00013e7d, -0x00013e7c, -0x00013e7b, -0x00013e7a, -0x00013e77, -0x00013e76, -0x00013e75, -0x00013e74, -0x00013e71, -0x00013e70, -0x00013e6f, -0x00013e6d, -0x00013e6b, -0x00013e6a, -0x00013e68, -0x00013e67, -0x00013e65, -0x00013e63, -0x00013e62, -0x00013e61, -0x00013e5e, -0x00013e5d, -0x00013e5c, -0x00013e5b, -0x00013e58, -0x00013e57, -0x00013e56, -0x00013e54, -0x00013e53, -0x00013e51, -0x00013e50, -0x00013e4e, -0x00013e4d, -0x00013e4b, -0x00013e49, -0x00013e48, -0x00013e47, -0x00013e44, -0x00013e43, -0x00013e42, -0x00013e41, -0x00013e3e, -0x00013e3d, -0x00013e3c, -0x00013e3a, -0x00013e38, -0x00013e37, -0x00013e35, -0x00013e34, -0x00013e32, -0x00013e30, -0x00013e2f, -0x00013e2e, -0x00013e2b, -0x00013e2a, -0x00013e29, -0x00013e28, -0x00013e25, -0x00013e24, -0x00013e23, -0x00013e22, -0x00013e20, -0x00013e1e, -0x00013e1d, -0x00013e1b, -0x00013e1a, -0x00013e18, -0x00013e16, -0x00013e15, -0x00013e14, -0x00013e11, -0x00013e10, -0x00013e0f, -0x00013e0e, -0x00013e0b, -0x00013e0a, -0x00013e09, -0x00013e07, -0x00013e05, -0x00013e04, -0x00013e02, -0x00013e01, -0x00013dff, -0x00013dfe, -0x00013dfc, -0x00013dfb, -0x00013df9, -0x00013df7, -0x00013df6, -0x00013df5, -0x00013df2, -0x00013df1, -0x00013df0, -0x00013def, -0x00013ded, -0x00013deb, -0x00013dea, -0x00013de8, -0x00013de7, -0x00013de5, -0x00013de3, -0x00013de2, -0x00013de1, -0x00013dde, -0x00013ddd, -0x00013ddc, -0x00013ddb, -0x00013dd8, -0x00013dd7, -0x00013dd6, -0x00013dd5, -0x00013dd2, -0x00013dd1, -0x00013dd0, -0x00013dce, -0x00013dcc, -0x00013dcb, -0x00013dc9, -0x00013dc8, -0x00013dc6, -0x00013dc4, -0x00013dc3, -0x00013dc2, -0x00013dc0, -0x00013dbf, -0x00013dbc, -0x00013dbb, -0x00013dba, -0x00013db9, -0x00013db6, -0x00013db5, -0x00013db4, -0x00013db2, -0x00013db0, -0x00013daf, -0x00013dad, -0x00013dac, -0x00013daa, -0x00013da8, -0x00013da7, -0x00013da6, -0x00013da3, -0x00013da2, -0x00013da1, -0x00013da0, -0x00013d9f, -0x00013d9c, -0x00013d9b, -0x00013d9a, -0x00013d98, -0x00013d96, -0x00013d95, -0x00013d93, -0x00013d92, -0x00013d90, -0x00013d8e, -0x00013d8d, -0x00013d8c, -0x00013d89, -0x00013d88, -0x00013d87, -0x00013d86, -0x00013d83, -0x00013d82, -0x00013d81, -0x00013d80, -0x00013d7e, -0x00013d7c, -0x00013d7b, -0x00013d79, -0x00013d78, -0x00013d76, -0x00013d74, -0x00013d73, -0x00013d72, -0x00013d6f, -0x00013d6e, -0x00013d6d, -0x00013d6c, -0x00013d69, -0x00013d68, -0x00013d67, -0x00013d66, -0x00013d63, -0x00013d62, -0x00013d61, -0x00013d5f, -0x00013d5e, -0x00013d5c, -0x00013d5a, -0x00013d59, -0x00013d58, -0x00013d55, -0x00013d54, -0x00013d53, -0x00013d52, -0x00013d4f, -0x00013d4e, -0x00013d4d, -0x00013d4c, -0x00013d49, -0x00013d48, -0x00013d47, -0x00013d45, -0x00013d43, -0x00013d42, -0x00013d40, -0x00013d3f, -0x00013d3d, -0x00013d3b, -0x00013d3a, -0x00013d39, -0x00013d38, -0x00013d35, -0x00013d34, -0x00013d33, -0x00013d32, -0x00013d2f, -0x00013d2e, -0x00013d2d, -0x00013d2b, -0x00013d29, -0x00013d28, -0x00013d26, -0x00013d25, -0x00013d23, -0x00013d21, -0x00013d20, -0x00013d1f, -0x00013d1c, -0x00013d1b, -0x00013d1a, -0x00013d19, -0x00013d18, -0x00013d15, -0x00013d14, -0x00013d13, -0x00013d11, -0x00013d0f, -0x00013d0e, -0x00013d0c, -0x00013d0b, -0x00013d09, -0x00013d07, -0x00013d06, -0x00013d05, -0x00013d02, -0x00013d01, -0x00013d00, -0x00013cff, -0x00013cfc, -0x00013cfb, -0x00013cfa, -0x00013cf9, -0x00013cf7, -0x00013cf5, -0x00013cf4, -0x00013cf2, -0x00013cf1, -0x00013cef, -0x00013ced, -0x00013cec, -0x00013ceb, -0x00013ce8, -0x00013ce7, -0x00013ce6, -0x00013ce5, -0x00013ce2, -0x00013ce1, -0x00013ce0, -0x00013cdf, -0x00013cdc, -0x00013cdb, -0x00013cda, -0x00013cd8, -0x00013cd7, -0x00013cd5, -0x00013cd3, -0x00013cd2, -0x00013cd1, -0x00013cce, -0x00013ccd, -0x00013ccc, -0x00013ccb, -0x00013cc8, -0x00013cc7, -0x00013cc6, -0x00013cc5, -0x00013cc2, -0x00013cc1, -0x00013cc0, -0x00013cbe, -0x00013cbc, -0x00013cbb, -0x00013cb9, -0x00013cb8, -0x00013cb7, -0x00013cb4, -0x00013cb3, -0x00013cb2, -0x00013cb1, -0x00013cae, -0x00013cad, -0x00013cac, -0x00013cab, -0x00013ca8, -0x00013ca7, -0x00013ca6, -0x00013ca4, -0x00013ca2, -0x00013ca1, -0x00013c9f, -0x00013c9e, -0x00013c9c, -0x00013c9a, -0x00013c99, -0x00013c98, -0x00013c97, -0x00013c94, -0x00013c93, -0x00013c92, -0x00013c91, -0x00013c8e, -0x00013c8d, -0x00013c8c, -0x00013c8a, -0x00013c88, -0x00013c87, -0x00013c85, -0x00013c84, -0x00013c82, -0x00013c80, -0x00013c7f, -0x00013c7e, -0x00013c7c, -0x00013c7a, -0x00013c79, -0x00013c78, -0x00013c77, -0x00013c74, -0x00013c73, -0x00013c72, -0x00013c70, -0x00013c6e, -0x00013c6d, -0x00013c6b, -0x00013c6a, -0x00013c68, -0x00013c66, -0x00013c65, -0x00013c64, -0x00013c62, -0x00013c60, -0x00013c5f, -0x00013c5e, -0x00013c5b, -0x00013c5a, -0x00013c59, -0x00013c58, -0x00013c56, -0x00013c54, -0x00013c53, -0x00013c51, -0x00013c50, -0x00013c4e, -0x00013c4c, -0x00013c4b, -0x00013c4a, -0x00013c47, -0x00013c46, -0x00013c45, -0x00013c44, -0x00013c41, -0x00013c40, -0x00013c3f, -0x00013c3e, -0x00013c3b, -0x00013c3a, -0x00013c39, -0x00013c38, -0x00013c36, -0x00013c35, -0x00013c33, -0x00013c31, -0x00013c30, -0x00013c2f, -0x00013c2c, -0x00013c2b, -0x00013c2a, -0x00013c29, -0x00013c26, -0x00013c25, -0x00013c24, -0x00013c23, -0x00013c20, -0x00013c1f, -0x00013c1e, -0x00013c1c, -0x00013c1b, -0x00013c19, -0x00013c17, -0x00013c16, -0x00013c15, -0x00013c13, -0x00013c11, -0x00013c10, -0x00013c0f, -0x00013c0c, -0x00013c0b, -0x00013c0a, -0x00013c09, -0x00013c07, -0x00013c05, -0x00013c04, -0x00013c02, -0x00013c01, -0x00013bff, -0x00013bfe, -0x00013bfc, -0x00013bfb, -0x00013bf9, -0x00013bf7, -0x00013bf6, -0x00013bf5, -0x00013bf2, -0x00013bf1, -0x00013bf0, -0x00013bef, -0x00013bed, -0x00013beb, -0x00013bea, -0x00013be9, -0x00013be7, -0x00013be5, -0x00013be4, -0x00013be2, -0x00013be1, -0x00013bdf, -0x00013bdd, -0x00013bdc, -0x00013bdb, -0x00013bd9, -0x00013bd7, -0x00013bd6, -0x00013bd5, -0x00013bd4, -0x00013bd1, -0x00013bd0, -0x00013bcf, -0x00013bcd, -0x00013bcb, -0x00013bca, -0x00013bc8, -0x00013bc7, -0x00013bc5, -0x00013bc4, -0x00013bc2, -0x00013bc1, -0x00013bbf, -0x00013bbd, -0x00013bbc, -0x00013bbb, -0x00013bba, -0x00013bb7, -0x00013bb6, -0x00013bb5, -0x00013bb3, -0x00013bb1, -0x00013bb0, -0x00013baf, -0x00013bad, -0x00013bab, -0x00013baa, -0x00013ba8, -0x00013ba7, -0x00013ba6, -0x00013ba3, -0x00013ba2, -0x00013ba1, -0x00013ba0, -0x00013b9d, -0x00013b9c, -0x00013b9b, -0x00013b9a, -0x00013b97, -0x00013b96, -0x00013b95, -0x00013b93, -0x00013b91, -0x00013b90, -0x00013b8e, -0x00013b8d, -0x00013b8c, -0x00013b8a, -0x00013b88, -0x00013b87, -0x00013b86, -0x00013b83, -0x00013b82, -0x00013b81, -0x00013b80, -0x00013b7d, -0x00013b7c, -0x00013b7b, -0x00013b79, -0x00013b77, -0x00013b76, -0x00013b75, -0x00013b74, -0x00013b71, -0x00013b70, -0x00013b6f, -0x00013b6e, -0x00013b6b, -0x00013b6a, -0x00013b69, -0x00013b67, -0x00013b65, -0x00013b64, -0x00013b62, -0x00013b61, -0x00013b60, -0x00013b5e, -0x00013b5c, -0x00013b5b, -0x00013b5a, -0x00013b57, -0x00013b56, -0x00013b55, -0x00013b54, -0x00013b51, -0x00013b50, -0x00013b4f, -0x00013b4e, -0x00013b4c, -0x00013b4a, -0x00013b49, -0x00013b47, -0x00013b46, -0x00013b44, -0x00013b42, -0x00013b41, -0x00013b40, -0x00013b3e, -0x00013b3c, -0x00013b3b, -0x00013b3a, -0x00013b39, -0x00013b36, -0x00013b35, -0x00013b34, -0x00013b32, -0x00013b30, -0x00013b2f, -0x00013b2e, -0x00013b2c, -0x00013b2a, -0x00013b29, -0x00013b27, -0x00013b26, -0x00013b25, -0x00013b22, -0x00013b21, -0x00013b20, -0x00013b1f, -0x00013b1c, -0x00013b1b, -0x00013b1a, -0x00013b19, -0x00013b16, -0x00013b15, -0x00013b14, -0x00013b12, -0x00013b11, -0x00013b0f, -0x00013b0e, -0x00013b0c, -0x00013b0b, -0x00013b09, -0x00013b07, -0x00013b06, -0x00013b05, -0x00013b02, -0x00013b01, -0x00013b00, -0x00013aff, -0x00013afe, -0x00013afb, -0x00013afa, -0x00013af9, -0x00013af7, -0x00013af5, -0x00013af4, -0x00013af2, -0x00013af1, -0x00013aef, -0x00013aee, -0x00013aec, -0x00013aeb, -0x00013aea, -0x00013ae7, -0x00013ae6, -0x00013ae5, -0x00013ae4, -0x00013ae1, -0x00013ae0, -0x00013adf, -0x00013ade, -0x00013adb, -0x00013ada, -0x00013ad9, -0x00013ad7, -0x00013ad6, -0x00013ad4, -0x00013ad2, -0x00013ad1, -0x00013ad0, -0x00013ace, -0x00013acc, -0x00013acb, -0x00013aca, -0x00013ac7, -0x00013ac6, -0x00013ac5, -0x00013ac4, -0x00013ac2, -0x00013ac0, -0x00013abf, -0x00013abe, -0x00013abc, -0x00013aba, -0x00013ab9, -0x00013ab7, -0x00013ab6, -0x00013ab4, -0x00013ab3, -0x00013ab1, -0x00013aaf, -0x00013aae, -0x00013aad, -0x00013aaa, -0x00013aa9, -0x00013aa8, -0x00013aa7, -0x00013aa4, -0x00013aa3, -0x00013aa2, -0x00013aa1, -0x00013a9f, -0x00013a9d, -0x00013a9c, -0x00013a9b, -0x00013a99, -0x00013a97, -0x00013a96, -0x00013a94, -0x00013a93, -0x00013a92, -0x00013a90, -0x00013a8e, -0x00013a8d, -0x00013a8c, -0x00013a89, -0x00013a88, -0x00013a87, -0x00013a86, -0x00013a83, -0x00013a82, -0x00013a81, -0x00013a80, -0x00013a7e, -0x00013a7c, -0x00013a7b, -0x00013a79, -0x00013a78, -0x00013a76, -0x00013a75, -0x00013a73, -0x00013a72, -0x00013a71, -0x00013a6e, -0x00013a6d, -0x00013a6c, -0x00013a6b, -0x00013a68, -0x00013a67, -0x00013a66, -0x00013a65, -0x00013a62, -0x00013a61, -0x00013a60, -0x00013a5e, -0x00013a5d, -0x00013a5b, -0x00013a5a, -0x00013a58, -0x00013a57, -0x00013a55, -0x00013a53, -0x00013a52, -0x00013a51, -0x00013a50, -0x00013a4d, -0x00013a4c, -0x00013a4b, -0x00013a4a, -0x00013a47, -0x00013a46, -0x00013a45, -0x00013a43, -0x00013a42, -0x00013a40, -0x00013a3f, -0x00013a3d, -0x00013a3c, -0x00013a3a, -0x00013a38, -0x00013a37, -0x00013a36, -0x00013a34, -0x00013a32, -0x00013a31, -0x00013a30, -0x00013a2f, -0x00013a2c, -0x00013a2b, -0x00013a2a, -0x00013a28, -0x00013a26, -0x00013a25, -0x00013a24, -0x00013a22, -0x00013a21, -0x00013a1f, -0x00013a1d, -0x00013a1c, -0x00013a1b, -0x00013a19, -0x00013a17, -0x00013a16, -0x00013a15, -0x00013a12, -0x00013a11, -0x00013a10, -0x00013a0f, -0x00013a0d, -0x00013a0b, -0x00013a0a, -0x00013a09, -0x00013a07, -0x00013a05, -0x00013a04, -0x00013a02, -0x00013a01, -0x00013a00, -0x000139fe, -0x000139fc, -0x000139fb, -0x000139fa, -0x000139f7, -0x000139f6, -0x000139f5, -0x000139f4, -0x000139f3, -0x000139f0, -0x000139ef, -0x000139ee, -0x000139ec, -0x000139ea, -0x000139e9, -0x000139e7, -0x000139e6, -0x000139e4, -0x000139e3, -0x000139e1, -0x000139e0, -0x000139df, -0x000139dc, -0x000139db, -0x000139da, -0x000139d9, -0x000139d6, -0x000139d5, -0x000139d4, -0x000139d3, -0x000139d1, -0x000139cf, -0x000139ce, -0x000139cc, -0x000139cb, -0x000139c9, -0x000139c8, -0x000139c6, -0x000139c5, -0x000139c3, -0x000139c1, -0x000139c0, -0x000139bf, -0x000139be, -0x000139bb, -0x000139ba, -0x000139b9, -0x000139b8, -0x000139b5, -0x000139b4, -0x000139b3, -0x000139b2, -0x000139b0, -0x000139ae, -0x000139ad, -0x000139ab, -0x000139aa, -0x000139a8, -0x000139a6, -0x000139a5, -0x000139a4, -0x000139a2, -0x000139a0, -0x0001399f, -0x0001399e, -0x0001399d, -0x0001399a, -0x00013999, -0x00013998, -0x00013997, -0x00013994, -0x00013993, -0x00013992, -0x00013990, -0x0001398f, -0x0001398d, -0x0001398b, -0x0001398a, -0x00013989, -0x00013987, -0x00013985, -0x00013984, -0x00013983, -0x00013982, -0x0001397f, -0x0001397e, -0x0001397d, -0x0001397c, -0x00013979, -0x00013978, -0x00013977, -0x00013975, -0x00013973, -0x00013972, -0x00013970, -0x0001396f, -0x0001396e, -0x0001396c, -0x0001396a, -0x00013969, -0x00013968, -0x00013965, -0x00013964, -0x00013963, -0x00013962, -0x00013961, -0x0001395e, -0x0001395d, -0x0001395c, -0x0001395a, -0x00013958, -0x00013957, -0x00013956, -0x00013954, -0x00013952, -0x00013951, -0x0001394f, -0x0001394e, -0x0001394d, -0x0001394a, -0x00013949, -0x00013948, -0x00013947, -0x00013944, -0x00013943, -0x00013942, -0x00013941, -0x0001393f, -0x0001393d, -0x0001393c, -0x0001393b, -0x00013939, -0x00013937, -0x00013936, -0x00013934, -0x00013933, -0x00013932, -0x00013931, -0x0001392e, -0x0001392d, -0x0001392c, -0x0001392b, -0x00013928, -0x00013927, -0x00013926, -0x00013925, -0x00013923, -0x00013921, -0x00013920, -0x0001391f, -0x0001391d, -0x0001391b, -0x0001391a, -0x00013918, -0x00013917, -0x00013916, -0x00013914, -0x00013912, -0x00013911, -0x00013910, -0x0001390d, -0x0001390c, -0x0001390b, -0x0001390a, -0x00013909, -0x00013906, -0x00013905, -0x00013904, -0x00013902, -0x00013900, -0x000138ff, -0x000138fe, -0x000138fc, -0x000138fb, -0x000138f9, -0x000138f7, -0x000138f6, -0x000138f5, -0x000138f3, -0x000138f1, -0x000138f0, -0x000138ef, -0x000138ee, -0x000138eb, -0x000138ea, -0x000138e9, -0x000138e8, -0x000138e5, -0x000138e4, -0x000138e3, -0x000138e1, -0x000138e0, -0x000138de, -0x000138dd, -0x000138db, -0x000138da, -0x000138d8, -0x000138d6, -0x000138d5, -0x000138d4, -0x000138d3, -0x000138d0, -0x000138cf, -0x000138ce, -0x000138cd, -0x000138ca, -0x000138c9, -0x000138c8, -0x000138c7, -0x000138c4, -0x000138c3, -0x000138c2, -0x000138c0, -0x000138bf, -0x000138bd, -0x000138bc, -0x000138ba, -0x000138b9, -0x000138b7, -0x000138b5, -0x000138b4, -0x000138b3, -0x000138b2, -0x000138af, -0x000138ae, -0x000138ad, -0x000138ac, -0x000138a9, -0x000138a8, -0x000138a7, -0x000138a6, -0x000138a4, -0x000138a2, -0x000138a1, -0x0001389f, -0x0001389e, -0x0001389c, -0x0001389b, -0x00013899, -0x00013898, -0x00013897, -0x00013894, -0x00013893, -0x00013892, -0x00013891, -0x0001388e, -0x0001388d, -0x0001388c, -0x0001388b, -0x00013889, -0x00013887, -0x00013886, -0x00013885, -0x00013883, -0x00013881, -0x00013880, -0x0001387e, -0x0001387d, -0x0001387c, -0x0001387a, -0x00013878, -0x00013877, -0x00013876, -0x00013873, -0x00013873, -0x00013871, -0x00013870, -0x0001386e, -0x0001386c, -0x0001386b, -0x0001386a, -0x00013868, -0x00013866, -0x00013865, -0x00013864, -0x00013863, -0x00013860, -0x0001385f, -0x0001385e, -0x0001385d, -0x0001385b, -0x00013859, -0x00013858, -0x00013857, -0x00013855, -0x00013853, -0x00013852, -0x00013850, -0x0001384f, -0x0001384e, -0x0001384c, -0x0001384a, -0x00013849, -0x00013848, -0x00013845, -0x00013844, -0x00013843, -0x00013842, -0x00013841, -0x0001383e, -0x0001383d, -0x0001383c, -0x0001383b, -0x00013838, -0x00013837, -0x00013836, -0x00013834, -0x00013833, -0x00013831, -0x00013830, -0x0001382e, -0x0001382d, -0x0001382c, -0x00013829, -0x00013828, -0x00013827, -0x00013826, -0x00013823, -0x00013822, -0x00013821, -0x00013820, -0x0001381e, -0x0001381c, -0x0001381b, -0x0001381a, -0x00013818, -0x00013816, -0x00013815, -0x00013814, -0x00013812, -0x00013811, -0x0001380f, -0x0001380d, -0x0001380c, -0x0001380b, -0x00013809, -0x00013807, -0x00013806, -0x00013805, -0x00013804, -0x00013801, -0x00013800, -0x000137ff, -0x000137fe, -0x000137fc, -0x000137fa, -0x000137f9, -0x000137f7, -0x000137f6, -0x000137f4, -0x000137f3, -0x000137f1, -0x000137f0, -0x000137ef, -0x000137ed, -0x000137eb, -0x000137ea, -0x000137e9, -0x000137e6, -0x000137e5, -0x000137e4, -0x000137e3, -0x000137e2, -0x000137df, -0x000137de, -0x000137dd, -0x000137db, -0x000137d9, -0x000137d8, -0x000137d7, -0x000137d5, -0x000137d4, -0x000137d2, -0x000137d0, -0x000137cf, -0x000137ce, -0x000137cd, -0x000137ca, -0x000137c9, -0x000137c8, -0x000137c7, -0x000137c4, -0x000137c3, -0x000137c2, -0x000137c1, -0x000137bf, -0x000137bd, -0x000137bc, -0x000137bb, -0x000137b9, -0x000137b7, -0x000137b6, -0x000137b4, -0x000137b3, -0x000137b1, -0x000137b0, -0x000137ae, -0x000137ad, -0x000137ab, -0x000137aa, -0x000137a9, -0x000137a6, -0x000137a5, -0x000137a4, -0x000137a3, -0x000137a0, -0x0001379f, -0x0001379e, -0x0001379d, -0x0001379c, -0x00013799, -0x00013798, -0x00013797, -0x00013795, -0x00013794, -0x00013792, -0x00013791, -0x0001378f, -0x0001378e, -0x0001378c, -0x0001378a, -0x00013789, -0x00013788, -0x00013787, -0x00013784, -0x00013783, -0x00013782, -0x00013781, -0x00013780, -0x0001377d, -0x0001377c, -0x0001377b, -0x00013779, -0x00013777, -0x00013776, -0x00013775, -0x00013773, -0x00013772, -0x00013770, -0x0001376f, -0x0001376d, -0x0001376c, -0x0001376b, -0x00013768, -0x00013767, -0x00013766, -0x00013765, -0x00013762, -0x00013761, -0x00013760, -0x0001375f, -0x0001375e, -0x0001375b, -0x0001375a, -0x00013759, -0x00013757, -0x00013756, -0x00013754, -0x00013753, -0x00013751, -0x00013750, -0x0001374e, -0x0001374d, -0x0001374b, -0x0001374a, -0x00013749, -0x00013746, -0x00013745, -0x00013744, -0x00013743, -0x00013740, -0x0001373f, -0x0001373e, -0x0001373d, -0x0001373c, -0x00013739, -0x00013738, -0x00013737, -0x00013735, -0x00013734, -0x00013732, -0x00013731, -0x0001372f, -0x0001372e, -0x0001372c, -0x0001372b, -0x00013729, -0x00013728, -0x00013727, -0x00013724, -0x00013723, -0x00013722, -0x00013721, -0x00013720, -0x0001371d, -0x0001371c, -0x0001371b, -0x0001371a, -0x00013717, -0x00013716, -0x00013715, -0x00013713, -0x00013712, -0x00013710, -0x0001370f, -0x0001370d, -0x0001370c, -0x0001370b, -0x00013709, -0x00013707, -0x00013706, -0x00013705, -0x00013702, -0x00013701, -0x00013700, -0x000136ff, -0x000136fe, -0x000136fb, -0x000136fa, -0x000136f9, -0x000136f7, -0x000136f6, -0x000136f4, -0x000136f3, -0x000136f1, -0x000136f0, -0x000136ee, -0x000136ed, -0x000136eb, -0x000136ea, -0x000136e9, -0x000136e6, -0x000136e5, -0x000136e4, -0x000136e3, -0x000136e2, -0x000136df, -0x000136de, -0x000136dd, -0x000136dc, -0x000136d9, -0x000136d8, -0x000136d7, -0x000136d5, -0x000136d4, -0x000136d2, -0x000136d1, -0x000136cf, -0x000136ce, -0x000136cd, -0x000136cb, -0x000136c9, -0x000136c8, -0x000136c7, -0x000136c4, -0x000136c3, -0x000136c2, -0x000136c1, -0x000136c0, -0x000136bd, -0x000136bc, -0x000136bb, -0x000136ba, -0x000136b8, -0x000136b6, -0x000136b5, -0x000136b3, -0x000136b2, -0x000136b0, -0x000136af, -0x000136ad, -0x000136ac, -0x000136ab, -0x000136a9, -0x000136a7, -0x000136a6, -0x000136a5, -0x000136a4, -0x000136a1, -0x000136a0, -0x0001369f, -0x0001369e, -0x0001369b, -0x0001369a, -0x00013699, -0x00013698, -0x00013696, -0x00013694, -0x00013693, -0x00013691, -0x00013690, -0x0001368e, -0x0001368d, -0x0001368b, -0x0001368a, -0x00013689, -0x00013687, -0x00013685, -0x00013684, -0x00013683, -0x00013682, -0x0001367f, -0x0001367e, -0x0001367d, -0x0001367c, -0x00013679, -0x00013678, -0x00013677, -0x00013676, -0x00013674, -0x00013672, -0x00013671, -0x0001366f, -0x0001366e, -0x0001366d, -0x0001366b, -0x00013669, -0x00013668, -0x00013667, -0x00013665, -0x00013663, -0x00013662, -0x00013661, -0x00013660, -0x0001365d, -0x0001365c, -0x0001365b, -0x0001365a, -0x00013658, -0x00013656, -0x00013655, -0x00013653, -0x00013652, -0x00013650, -0x0001364f, -0x0001364d, -0x0001364c, -0x0001364b, -0x00013649, -0x00013647, -0x00013646, -0x00013645, -0x00013644, -0x00013641, -0x00013640, -0x0001363f, -0x0001363e, -0x0001363b, -0x0001363b, -0x00013639, -0x00013638, -0x00013636, -0x00013635, -0x00013633, -0x00013632, -0x00013630, -0x0001362f, -0x0001362e, -0x0001362c, -0x0001362a, -0x00013629, -0x00013628, -0x00013627, -0x00013624, -0x00013623, -0x00013622, -0x00013621, -0x0001361e, -0x0001361d, -0x0001361c, -0x0001361b, -0x00013619, -0x00013617, -0x00013616, -0x00013615, -0x00013613, -0x00013612, -0x00013610, -0x0001360f, -0x0001360d, -0x0001360c, -0x0001360b, -0x00013608, -0x00013607, -0x00013606, -0x00013605, -0x00013602, -0x00013601, -0x00013600, -0x000135ff, -0x000135fe, -0x000135fb, -0x000135fa, -0x000135f9, -0x000135f8, -0x000135f6, -0x000135f4, -0x000135f3, -0x000135f1, -0x000135f0, -0x000135ef, -0x000135ed, -0x000135eb, -0x000135ea, -0x000135e9, -0x000135e7, -0x000135e5, -0x000135e4, -0x000135e3, -0x000135e2, -0x000135df, -0x000135de, -0x000135dd, -0x000135dc, -0x000135da, -0x000135d8, -0x000135d7, -0x000135d6, -0x000135d4, -0x000135d3, -0x000135d1, -0x000135d0, -0x000135ce, -0x000135cd, -0x000135cb, -0x000135ca, -0x000135c8, -0x000135c7, -0x000135c6, -0x000135c3, -0x000135c2, -0x000135c1, -0x000135c0, -0x000135bf, -0x000135bc, -0x000135bb, -0x000135ba, -0x000135b9, -0x000135b7, -0x000135b5, -0x000135b4, -0x000135b3, -0x000135b1, -0x000135af, -0x000135ae, -0x000135ac, -0x000135ab, -0x000135aa, -0x000135a8, -0x000135a6, -0x000135a5, -0x000135a4, -0x000135a3, -0x000135a0, -0x0001359f, -0x0001359e, -0x0001359d, -0x0001359b, -0x00013599, -0x00013598, -0x00013597, -0x00013595, -0x00013593, -0x00013592, -0x00013591, -0x0001358f, -0x0001358e, -0x0001358c, -0x0001358b, -0x00013589, -0x00013588, -0x00013587, -0x00013584, -0x00013583, -0x00013582, -0x00013581, -0x0001357f, -0x0001357e, -0x0001357c, -0x0001357b, -0x00013579, -0x00013577, -0x00013576, -0x00013575, -0x00013574, -0x00013571, -0x00013570, -0x0001356f, -0x0001356e, -0x0001356d, -0x0001356a, -0x00013569, -0x00013568, -0x00013567, -0x00013565, -0x00013563, -0x00013562, -0x00013561, -0x0001355f, -0x0001355d, -0x0001355c, -0x0001355b, -0x00013559, -0x00013558, -0x00013556, -0x00013554, -0x00013553, -0x00013552, -0x00013551, -0x0001354e, -0x0001354d, -0x0001354c, -0x0001354b, -0x0001354a, -0x00013547, -0x00013546, -0x00013545, -0x00013544, -0x00013542, -0x00013540, -0x0001353f, -0x0001353e, -0x0001353c, -0x0001353b, -0x00013539, -0x00013538, -0x00013536, -0x00013535, -0x00013533, -0x00013531, -0x00013530, -0x0001352f, -0x0001352e, -0x0001352b, -0x0001352a, -0x00013529, -0x00013528, -0x00013527, -0x00013524, -0x00013523, -0x00013522, -0x00013521, -0x0001351f, -0x0001351d, -0x0001351c, -0x0001351b, -0x00013519, -0x00013518, -0x00013516, -0x00013515, -0x00013513, -0x00013512, -0x00013511, -0x0001350e, -0x0001350d, -0x0001350c, -0x0001350b, -0x00013508, -0x00013507, -0x00013506, -0x00013505, -0x00013504, -0x00013501, -0x00013500, -0x000134ff, -0x000134fe, -0x000134fc, -0x000134fa, -0x000134f9, -0x000134f8, -0x000134f6, -0x000134f5, -0x000134f3, -0x000134f2, -0x000134f0, -0x000134ef, -0x000134ee, -0x000134eb, -0x000134ea, -0x000134e9, -0x000134e8, -0x000134e7, -0x000134e4, -0x000134e3, -0x000134e2, -0x000134e1, -0x000134de, -0x000134dd, -0x000134dc, -0x000134db, -0x000134d9, -0x000134d7, -0x000134d6, -0x000134d5, -0x000134d3, -0x000134d2, -0x000134d0, -0x000134cf, -0x000134cd, -0x000134cc, -0x000134cb, -0x000134c8, -0x000134c7, -0x000134c6, -0x000134c4, -0x000134c3, -0x000134c2, -0x000134bf, -0x000134be, -0x000134bd, -0x000134bc, -0x000134ba, -0x000134b8, -0x000134b7, -0x000134b6, -0x000134b4, -0x000134b3, -0x000134b1, -0x000134b0, -0x000134ae, -0x000134ad, -0x000134ac, -0x000134aa, -0x000134a8, -0x000134a7, -0x000134a6, -0x000134a5, -0x000134a2, -0x000134a1, -0x000134a0, -0x0001349f, -0x0001349e, -0x0001349b, -0x0001349a, -0x00013499, -0x00013498, -0x00013496, -0x00013494, -0x00013493, -0x00013492, -0x00013490, -0x0001348e, -0x0001348d, -0x0001348c, -0x0001348a, -0x00013489, -0x00013487, -0x00013486, -0x00013484, -0x00013483, -0x00013482, -0x00013480, -0x0001347e, -0x0001347d, -0x0001347c, -0x0001347b, -0x00013478, -0x00013477, -0x00013476, -0x00013475, -0x00013474, -0x00013471, -0x00013470, -0x0001346f, -0x0001346d, -0x0001346c, -0x0001346a, -0x00013469, -0x00013467, -0x00013466, -0x00013465, -0x00013463, -0x00013461, -0x00013460, -0x0001345f, -0x0001345e, -0x0001345b, -0x0001345a, -0x00013459, -0x00013458, -0x00013457, -0x00013454, -0x00013453, -0x00013452, -0x00013451, -0x0001344f, -0x0001344d, -0x0001344c, -0x0001344b, -0x00013449, -0x00013448, -0x00013446, -0x00013445, -0x00013443, -0x00013442, -0x00013441, -0x0001343f, -0x0001343d, -0x0001343c, -0x0001343b, -0x0001343a, -0x00013437, -0x00013436, -0x00013435, -0x00013434, -0x00013431, -0x00013430, -0x0001342f, -0x0001342e, -0x0001342d, -0x0001342a, -0x00013429, -0x00013428, -0x00013427, -0x00013425, -0x00013423, -0x00013422, -0x00013420, -0x0001341f, -0x0001341e, -0x0001341c, -0x0001341a, -0x00013419, -0x00013418, -0x00013417, -0x00013414, -0x00013413, -0x00013412, -0x00013411, -0x00013410, -0x0001340d, -0x0001340c, -0x0001340b, -0x0001340a, -0x00013408, -0x00013406, -0x00013405, -0x00013404, -0x00013402, -0x00013401, -0x000133ff, -0x000133fe, -0x000133fc, -0x000133fb, -0x000133fa, -0x000133f8, -0x000133f6, -0x000133f5, -0x000133f4, -0x000133f3, -0x000133f0, -0x000133ef, -0x000133ee, -0x000133ed, -0x000133ec, -0x000133e9, -0x000133e8, -0x000133e7, -0x000133e6, -0x000133e4, -0x000133e2, -0x000133e1, -0x000133e0, -0x000133de, -0x000133dd, -0x000133db, -0x000133da, -0x000133d8, -0x000133d7, -0x000133d5, -0x000133d3, -0x000133d2, -0x000133d1, -0x000133d0, -0x000133cd, -0x000133cc, -0x000133cb, -0x000133ca, -0x000133c9, -0x000133c6, -0x000133c5, -0x000133c4, -0x000133c3, -0x000133c1, -0x000133bf, -0x000133be, -0x000133bd, -0x000133bb, -0x000133ba, -0x000133b8, -0x000133b7, -0x000133b5, -0x000133b4, -0x000133b3, -0x000133b1, -0x000133af, -0x000133ae, -0x000133ad, -0x000133ac, -0x000133a9, -0x000133a8, -0x000133a7, -0x000133a6, -0x000133a5, -0x000133a2, -0x000133a1, -0x000133a0, -0x0001339f, -0x0001339d, -0x0001339b, -0x0001339a, -0x00013399, -0x00013397, -0x00013396, -0x00013394, -0x00013393, -0x00013391, -0x00013390, -0x0001338f, -0x0001338d, -0x0001338b, -0x0001338a, -0x00013389, -0x00013388, -0x00013385, -0x00013384, -0x00013383, -0x00013382, -0x00013380, -0x0001337e, -0x0001337d, -0x0001337c, -0x0001337a, -0x00013378, -0x00013377, -0x00013376, -0x00013374, -0x00013373, -0x00013371, -0x00013370, -0x0001336e, -0x0001336d, -0x0001336c, -0x0001336a, -0x00013368, -0x00013367, -0x00013366, -0x00013365, -0x00013362, -0x00013361, -0x00013360, -0x0001335f, -0x0001335e, -0x0001335b, -0x0001335a, -0x00013359, -0x00013358, -0x00013356, -0x00013354, -0x00013353, -0x00013352, -0x00013350, -0x0001334f, -0x0001334e, -0x0001334c, -0x0001334a, -0x00013349, -0x00013348, -0x00013347, -0x00013344, -0x00013343, -0x00013342, -0x00013341, -0x00013340, -0x0001333d, -0x0001333c, -0x0001333b, -0x0001333a, -0x00013338, -0x00013336, -0x00013335, -0x00013334, -0x00013332, -0x00013331, -0x0001332f, -0x0001332e, -0x0001332c, -0x0001332b, -0x0001332a, -0x00013328, -0x00013326, -0x00013325, -0x00013324, -0x00013323, -0x00013320, -0x0001331f, -0x0001331e, -0x0001331d, -0x0001331c, -0x00013319, -0x00013318, -0x00013317, -0x00013316, -0x00013314, -0x00013312, -0x00013311, -0x00013310, -0x0001330e, -0x0001330d, -0x0001330b, -0x0001330a, -0x00013308, -0x00013307, -0x00013306, -0x00013304, -0x00013302, -0x00013301, -0x00013300, -0x000132ff, -0x000132fc, -0x000132fb, -0x000132fa, -0x000132f9, -0x000132f8, -0x000132f6, -0x000132f4, -0x000132f3, -0x000132f2, -0x000132f0, -0x000132ef, -0x000132ed, -0x000132ec, -0x000132ea, -0x000132e9, -0x000132e8, -0x000132e6, -0x000132e4, -0x000132e3, -0x000132e2, -0x000132e1, -0x000132de, -0x000132dd, -0x000132dc, -0x000132db, -0x000132da, -0x000132d7, -0x000132d6, -0x000132d5, -0x000132d4, -0x000132d2, -0x000132d0, -0x000132cf, -0x000132ce, -0x000132cc, -0x000132cb, -0x000132c9, -0x000132c8, -0x000132c6, -0x000132c5, -0x000132c4, -0x000132c2, -0x000132c0, -0x000132bf, -0x000132be, -0x000132bd, -0x000132ba, -0x000132b9, -0x000132b8, -0x000132b7, -0x000132b6, -0x000132b3, -0x000132b2, -0x000132b1, -0x000132b0, -0x000132ae, -0x000132ac, -0x000132ab, -0x000132aa, -0x000132a8, -0x000132a7, -0x000132a5, -0x000132a4, -0x000132a2, -0x000132a1, -0x000132a0, -0x0001329e, -0x0001329c, -0x0001329b, -0x0001329a, -0x00013298, -0x00013297, -0x00013295, -0x00013294, -0x00013293, -0x00013291, -0x0001328f, -0x0001328e, -0x0001328d, -0x0001328c, -0x00013289, -0x00013288, -0x00013287, -0x00013286, -0x00013285, -0x00013282, -0x00013281, -0x00013280, -0x0001327f, -0x0001327e, -0x0001327b, -0x0001327a, -0x00013279, -0x00013278, -0x00013276, -0x00013274, -0x00013273, -0x00013272, -0x00013270, -0x0001326f, -0x0001326d, -0x0001326c, -0x0001326a, -0x00013269, -0x00013268, -0x00013266, -0x00013264, -0x00013263, -0x00013262, -0x00013261, -0x0001325e, -0x0001325d, -0x0001325c, -0x0001325b, -0x0001325a, -0x00013258, -0x00013256, -0x00013255, -0x00013254, -0x00013252, -0x00013251, -0x0001324f, -0x0001324e, -0x0001324d, -0x0001324b, -0x0001324a, -0x00013248, -0x00013247, -0x00013245, -0x00013244, -0x00013243, -0x00013241, -0x0001323f, -0x0001323e, -0x0001323d, -0x0001323c, -0x00013239, -0x00013238, -0x00013237, -0x00013236, -0x00013235, -0x00013232, -0x00013231, -0x00013230, -0x0001322f, -0x0001322d, -0x0001322b, -0x0001322a, -0x00013229, -0x00013227, -0x00013226, -0x00013224, -0x00013223, -0x00013221, -0x00013220, -0x0001321f, -0x0001321e, -0x0001321b, -0x0001321a, -0x00013219, -0x00013218, -0x00013217, -0x00013214, -0x00013213, -0x00013212, -0x00013211, -0x00013210, -0x0001320d, -0x0001320c, -0x0001320b, -0x0001320a, -0x00013208, -0x00013206, -0x00013205, -0x00013204, -0x00013202, -0x00013201, -0x000131ff, -0x000131fe, -0x000131fc, -0x000131fb, -0x000131fa, -0x000131f8, -0x000131f6, -0x000131f5, -0x000131f4, -0x000131f3, -0x000131f0, -0x000131ef, -0x000131ee, -0x000131ed, -0x000131ec, -0x000131e9, -0x000131e8, -0x000131e7, -0x000131e6, -0x000131e5, -0x000131e3, -0x000131e1, -0x000131e0, -0x000131df, -0x000131dd, -0x000131dc, -0x000131da, -0x000131d9, -0x000131d7, -0x000131d6, -0x000131d5, -0x000131d3, -0x000131d1, -0x000131d0, -0x000131cf, -0x000131ce, -0x000131cb, -0x000131ca, -0x000131c9, -0x000131c8, -0x000131c7, -0x000131c4, -0x000131c3, -0x000131c2, -0x000131c1, -0x000131bf, -0x000131bd, -0x000131bc, -0x000131bb, -0x000131b9, -0x000131b8, -0x000131b6, -0x000131b5, -0x000131b4, -0x000131b2, -0x000131b1, -0x000131af, -0x000131ae, -0x000131ac, -0x000131ab, -0x000131aa, -0x000131a8, -0x000131a6, -0x000131a5, -0x000131a4, -0x000131a3, -0x000131a2, -0x0001319f, -0x0001319e, -0x0001319d, -0x0001319c, -0x0001319a, -0x00013198, -0x00013197, -0x00013196, -0x00013194, -0x00013193, -0x00013191, -0x00013190, -0x0001318e, -0x0001318d, -0x0001318c, -0x0001318a, -0x00013188, -0x00013187, -0x00013186, -0x00013185, -0x00013182, -0x00013181, -0x00013180, -0x0001317f, -0x0001317e, -0x0001317b, -0x0001317a, -0x00013179, -0x00013178, -0x00013177, -0x00013174, -0x00013173, -0x00013172, -0x00013171, -0x0001316f, -0x0001316d, -0x0001316c, -0x0001316b, -0x00013169, -0x00013168, -0x00013167, -0x00013165, -0x00013163, -0x00013162, -0x00013161, -0x00013160, -0x0001315d, -0x0001315c, -0x0001315b, -0x0001315a, -0x00013159, -0x00013156, -0x00013155, -0x00013154, -0x00013153, -0x00013151, -0x0001314f, -0x0001314e, -0x0001314d, -0x0001314c, -0x0001314a, -0x00013148, -0x00013147, -0x00013146, -0x00013144, -0x00013143, -0x00013141, -0x00013140, -0x0001313e, -0x0001313d, -0x0001313c, -0x0001313a, -0x00013138, -0x00013137, -0x00013136, -0x00013135, -0x00013132, -0x00013131, -0x00013130, -0x0001312f, -0x0001312e, -0x0001312c, -0x0001312b, -0x0001312a, -0x00013129, -0x00013126, -0x00013125, -0x00013124, -0x00013123, -0x00013121, -0x00013120, -0x0001311e, -0x0001311d, -0x0001311b, -0x0001311a, -0x00013119, -0x00013117, -0x00013115, -0x00013114, -0x00013113, -0x00013112, -0x0001310f, -0x0001310e, -0x0001310d, -0x0001310c, -0x0001310b, -0x00013108, -0x00013107, -0x00013106, -0x00013105, -0x00013104, -0x00013102, -0x00013100, -0x000130ff, -0x000130fe, -0x000130fc, -0x000130fb, -0x000130f9, -0x000130f8, -0x000130f6, -0x000130f5, -0x000130f4, -0x000130f2, -0x000130f1, -0x000130ef, -0x000130ee, -0x000130ed, -0x000130eb, -0x000130e9, -0x000130e8, -0x000130e7, -0x000130e6, -0x000130e3, -0x000130e2, -0x000130e1, -0x000130e0, -0x000130df, -0x000130dd, -0x000130db, -0x000130da, -0x000130d9, -0x000130d7, -0x000130d6, -0x000130d4, -0x000130d3, -0x000130d2, -0x000130d0, -0x000130cf, -0x000130cd, -0x000130cc, -0x000130ca, -0x000130c9, -0x000130c8, -0x000130c6, -0x000130c4, -0x000130c3, -0x000130c2, -0x000130c1, -0x000130c0, -0x000130bd, -0x000130bc, -0x000130bb, -0x000130ba, -0x000130b9, -0x000130b6, -0x000130b5, -0x000130b4, -0x000130b3, -0x000130b1, -0x000130af, -0x000130ae, -0x000130ad, -0x000130ab, -0x000130aa, -0x000130a8, -0x000130a7, -0x000130a5, -0x000130a4, -0x000130a3, -0x000130a1, -0x0001309f, -0x0001309e, -0x0001309d, -0x0001309c, -0x0001309b, -0x00013098, -0x00013097, -0x00013096, -0x00013095, -0x00013094, -0x00013091, -0x00013090, -0x0001308f, -0x0001308e, -0x0001308c, -0x0001308a, -0x00013089, -0x00013088, -0x00013086, -0x00013085, -0x00013083, -0x00013082, -0x00013081, -0x0001307f, -0x0001307e, -0x0001307d, -0x0001307b, -0x00013079, -0x00013078, -0x00013077, -0x00013076, -0x00013074, -0x00013072, -0x00013071, -0x00013070, -0x0001306e, -0x0001306d, -0x0001306c, -0x0001306a, -0x00013069, -0x00013067, -0x00013066, -0x00013065, -0x00013063, -0x00013061, -0x00013060, -0x0001305f, -0x0001305e, -0x0001305b, -0x0001305a, -0x00013059, -0x00013058, -0x00013057, -0x00013056, -0x00013053, -0x00013052, -0x00013051, -0x00013050, -0x0001304e, -0x0001304c, -0x0001304b, -0x0001304a, -0x00013048, -0x00013047, -0x00013045, -0x00013044, -0x00013043, -0x00013041, -0x00013040, -0x0001303f, -0x0001303d, -0x0001303b, -0x0001303a, -0x00013039, -0x00013038, -0x00013035, -0x00013034, -0x00013033, -0x00013032, -0x00013031, -0x0001302e, -0x0001302d, -0x0001302c, -0x0001302b, -0x0001302a, -0x00013028, -0x00013026, -0x00013025, -0x00013024, -0x00013022, -0x00013021, -0x0001301f, -0x0001301e, -0x0001301d, -0x0001301b, -0x0001301a, -0x00013018, -0x00013017, -0x00013015, -0x00013014, -0x00013013, -0x00013012, -0x0001300f, -0x0001300e, -0x0001300d, -0x0001300c, -0x0001300b, -0x00013008, -0x00013007, -0x00013006, -0x00013005, -0x00013004, -0x00013001, -0x00013000, -0x00012fff, -0x00012ffe, -0x00012ffc, -0x00012ffb, -0x00012ff9, -0x00012ff8, -0x00012ff7, -0x00012ff5, -0x00012ff4, -0x00012ff2, -0x00012ff1, -0x00012fef, -0x00012fee, -0x00012fed, -0x00012feb, -0x00012fe9, -0x00012fe8, -0x00012fe7, -0x00012fe6, -0x00012fe5, -0x00012fe2, -0x00012fe1, -0x00012fe0, -0x00012fdf, -0x00012fde, -0x00012fdb, -0x00012fda, -0x00012fd9, -0x00012fd8, -0x00012fd6, -0x00012fd4, -0x00012fd3, -0x00012fd2, -0x00012fd1, -0x00012fcf, -0x00012fce, -0x00012fcc, -0x00012fcb, -0x00012fc9, -0x00012fc8, -0x00012fc7, -0x00012fc5, -0x00012fc3, -0x00012fc2, -0x00012fc1, -0x00012fbf, -0x00012fbd, -0x00012fbc, -0x00012fbb, -0x00012fba, -0x00012fb7, -0x00012fb6, -0x00012fb5, -0x00012fb4, -0x00012fb3, -0x00012fb2, -0x00012faf, -0x00012fae, -0x00012fad, -0x00012fac, -0x00012faa, -0x00012fa8, -0x00012fa7, -0x00012fa6, -0x00012fa5, -0x00012fa3, -0x00012fa2, -0x00012fa0, -0x00012f9f, -0x00012f9d, -0x00012f9c, -0x00012f9b, -0x00012f99, -0x00012f98, -0x00012f96, -0x00012f95, -0x00012f94, -0x00012f93, -0x00012f90, -0x00012f8f, -0x00012f8e, -0x00012f8d, -0x00012f8c, -0x00012f89, -0x00012f88, -0x00012f87, -0x00012f86, -0x00012f85, -0x00012f82, -0x00012f81, -0x00012f80, -0x00012f7f, -0x00012f7d, -0x00012f7c, -0x00012f7a, -0x00012f79, -0x00012f78, -0x00012f76, -0x00012f75, -0x00012f73, -0x00012f72, -0x00012f70, -0x00012f6f, -0x00012f6e, -0x00012f6d, -0x00012f6b, -0x00012f69, -0x00012f68, -0x00012f67, -0x00012f66, -0x00012f63, -0x00012f62, -0x00012f61, -0x00012f60, -0x00012f5f, -0x00012f5e, -0x00012f5b, -0x00012f5a, -0x00012f59, -0x00012f58, -0x00012f56, -0x00012f54, -0x00012f53, -0x00012f52, -0x00012f50, -0x00012f4f, -0x00012f4e, -0x00012f4c, -0x00012f4b, -0x00012f49, -0x00012f48, -0x00012f47, -0x00012f45, -0x00012f43, -0x00012f42, -0x00012f41, -0x00012f40, -0x00012f3e, -0x00012f3c, -0x00012f3b, -0x00012f3a, -0x00012f39, -0x00012f38, -0x00012f35, -0x00012f34, -0x00012f33, -0x00012f32, -0x00012f31, -0x00012f2e, -0x00012f2d, -0x00012f2c, -0x00012f2b, -0x00012f29, -0x00012f28, -0x00012f26, -0x00012f25, -0x00012f24, -0x00012f22, -0x00012f21, -0x00012f1f, -0x00012f1e, -0x00012f1c, -0x00012f1b, -0x00012f1a, -0x00012f19, -0x00012f16, -0x00012f15, -0x00012f14, -0x00012f13, -0x00012f12, -0x00012f0f, -0x00012f0e, -0x00012f0d, -0x00012f0c, -0x00012f0b, -0x00012f09, -0x00012f07, -0x00012f06, -0x00012f05, -0x00012f04, -0x00012f02, -0x00012f00, -0x00012eff, -0x00012efe, -0x00012efc, -0x00012efb, -0x00012ef9, -0x00012ef8, -0x00012ef7, -0x00012ef5, -0x00012ef4, -0x00012ef3, -0x00012ef1, -0x00012eef, -0x00012eee, -0x00012eed, -0x00012eec, -0x00012eea, -0x00012ee8, -0x00012ee7, -0x00012ee6, -0x00012ee5, -0x00012ee4, -0x00012ee1, -0x00012ee0, -0x00012edf, -0x00012ede, -0x00012edc, -0x00012eda, -0x00012ed9, -0x00012ed8, -0x00012ed7, -0x00012ed5, -0x00012ed4, -0x00012ed2, -0x00012ed1, -0x00012ecf, -0x00012ece, -0x00012ecd, -0x00012ecb, -0x00012eca, -0x00012ec8, -0x00012ec7, -0x00012ec6, -0x00012ec5, -0x00012ec2, -0x00012ec1, -0x00012ec0, -0x00012ebf, -0x00012ebe, -0x00012ebb, -0x00012eba, -0x00012eb9, -0x00012eb8, -0x00012eb7, -0x00012eb5, -0x00012eb3, -0x00012eb2, -0x00012eb1, -0x00012eb0, -0x00012eae, -0x00012eac, -0x00012eab, -0x00012eaa, -0x00012ea8, -0x00012ea7, -0x00012ea5, -0x00012ea4, -0x00012ea2, -0x00012ea1, -0x00012ea0, -0x00012e9f, -0x00012e9d, -0x00012e9b, -0x00012e9a, -0x00012e99, -0x00012e98, -0x00012e95, -0x00012e94, -0x00012e93, -0x00012e92, -0x00012e91, -0x00012e90, -0x00012e8d, -0x00012e8c, -0x00012e8b, -0x00012e8a, -0x00012e88, -0x00012e86, -0x00012e85, -0x00012e84, -0x00012e83, -0x00012e81, -0x00012e80, -0x00012e7e, -0x00012e7d, -0x00012e7b, -0x00012e7a, -0x00012e79, -0x00012e77, -0x00012e76, -0x00012e74, -0x00012e73, -0x00012e72, -0x00012e71, -0x00012e6e, -0x00012e6d, -0x00012e6c, -0x00012e6b, -0x00012e6a, -0x00012e67, -0x00012e66, -0x00012e65, -0x00012e64, -0x00012e63, -0x00012e60, -0x00012e5f, -0x00012e5e, -0x00012e5d, -0x00012e5c, -0x00012e5a, -0x00012e58, -0x00012e57, -0x00012e56, -0x00012e55, -0x00012e53, -0x00012e51, -0x00012e50, -0x00012e4f, -0x00012e4e, -0x00012e4d, -0x00012e4a, -0x00012e49, -0x00012e48, -0x00012e47, -0x00012e46, -0x00012e43, -0x00012e42, -0x00012e41, -0x00012e40, -0x00012e3f, -0x00012e3d, -0x00012e3b, -0x00012e3a, -0x00012e39, -0x00012e37, -0x00012e36, -0x00012e34, -0x00012e33, -0x00012e32, -0x00012e30, -0x00012e2f, -0x00012e2e, -0x00012e2c, -0x00012e2a, -0x00012e29, -0x00012e28, -0x00012e27, -0x00012e25, -0x00012e23, -0x00012e22, -0x00012e21, -0x00012e20, -0x00012e1f, -0x00012e1c, -0x00012e1b, -0x00012e1a, -0x00012e19, -0x00012e18, -0x00012e16, -0x00012e14, -0x00012e13, -0x00012e12, -0x00012e11, -0x00012e0f, -0x00012e0d, -0x00012e0c, -0x00012e0b, -0x00012e09, -0x00012e08, -0x00012e07, -0x00012e05, -0x00012e04, -0x00012e02, -0x00012e01, -0x00012e00, -0x00012dfe, -0x00012dfc, -0x00012dfb, -0x00012dfa, -0x00012df9, -0x00012df8, -0x00012df5, -0x00012df4, -0x00012df3, -0x00012df2, -0x00012df1, -0x00012dee, -0x00012ded, -0x00012dec, -0x00012deb, -0x00012dea, -0x00012de8, -0x00012de6, -0x00012de5, -0x00012de4, -0x00012de3, -0x00012de1, -0x00012de0, -0x00012dde, -0x00012ddd, -0x00012ddb, -0x00012dda, -0x00012dd9, -0x00012dd7, -0x00012dd6, -0x00012dd4, -0x00012dd3, -0x00012dd2, -0x00012dd1, -0x00012dce, -0x00012dcd, -0x00012dcc, -0x00012dcb, -0x00012dca, -0x00012dc7, -0x00012dc6, -0x00012dc5, -0x00012dc4, -0x00012dc3, -0x00012dc1, -0x00012dbf, -0x00012dbe, -0x00012dbd, -0x00012dbc, -0x00012dba, -0x00012db8, -0x00012db7, -0x00012db6, -0x00012db5, -0x00012db3, -0x00012db2, -0x00012db0, -0x00012daf, -0x00012dad, -0x00012dac, -0x00012dab, -0x00012da9, -0x00012da8, -0x00012da6, -0x00012da5, -0x00012da3, -0x00012da2, -0x00012da1, -0x00012da0, -0x00012d9e, -0x00012d9c, -0x00012d9b, -0x00012d9a, -0x00012d99, -0x00012d97, -0x00012d95, -0x00012d94, -0x00012d93, -0x00012d92, -0x00012d91, -0x00012d8e, -0x00012d8d, -0x00012d8c, -0x00012d8b, -0x00012d8a, -0x00012d88, -0x00012d86, -0x00012d85, -0x00012d84, -0x00012d83, -0x00012d81, -0x00012d7f, -0x00012d7e, -0x00012d7d, -0x00012d7b, -0x00012d7a, -0x00012d79, -0x00012d77, -0x00012d76, -0x00012d74, -0x00012d73, -0x00012d72, -0x00012d71, -0x00012d6f, -0x00012d6d, -0x00012d6c, -0x00012d6b, -0x00012d6a, -0x00012d67, -0x00012d66, -0x00012d65, -0x00012d64, -0x00012d63, -0x00012d62, -0x00012d5f, -0x00012d5e, -0x00012d5d, -0x00012d5c, -0x00012d5b, -0x00012d59, -0x00012d57, -0x00012d56, -0x00012d55, -0x00012d53, -0x00012d52, -0x00012d51, -0x00012d4f, -0x00012d4e, -0x00012d4c, -0x00012d4b, -0x00012d4a, -0x00012d48, -0x00012d47, -0x00012d45, -0x00012d44, -0x00012d43, -0x00012d42, -0x00012d3f, -0x00012d3e, -0x00012d3d, -0x00012d3c, -0x00012d3b, -0x00012d3a, -0x00012d37, -0x00012d36, -0x00012d35, -0x00012d34, -0x00012d33, -0x00012d30, -0x00012d2f, -0x00012d2e, -0x00012d2d, -0x00012d2c, -0x00012d2a, -0x00012d28, -0x00012d27, -0x00012d26, -0x00012d24, -0x00012d23, -0x00012d22, -0x00012d20, -0x00012d1f, -0x00012d1d, -0x00012d1c, -0x00012d1b, -0x00012d19, -0x00012d18, -0x00012d16, -0x00012d15, -0x00012d14, -0x00012d13, -0x00012d10, -0x00012d0f, -0x00012d0e, -0x00012d0d, -0x00012d0c, -0x00012d0b, -0x00012d08, -0x00012d07, -0x00012d06, -0x00012d05, -0x00012d04, -0x00012d01, -0x00012d00, -0x00012cff, -0x00012cfe, -0x00012cfc, -0x00012cfb, -0x00012cf9, -0x00012cf8, -0x00012cf7, -0x00012cf5, -0x00012cf4, -0x00012cf3, -0x00012cf1, -0x00012cf0, -0x00012cee, -0x00012ced, -0x00012cec, -0x00012cea, -0x00012ce8, -0x00012ce7, -0x00012ce6, -0x00012ce5, -0x00012ce4, -0x00012ce1, -0x00012ce0, -0x00012cdf, -0x00012cde, -0x00012cdd, -0x00012cdc, -0x00012cd9, -0x00012cd8, -0x00012cd7, -0x00012cd6, -0x00012cd4, -0x00012cd3, -0x00012cd1, -0x00012cd0, -0x00012ccf, -0x00012ccd, -0x00012ccc, -0x00012cca, -0x00012cc9, -0x00012cc8, -0x00012cc6, -0x00012cc5, -0x00012cc4, -0x00012cc2, -0x00012cc1, -0x00012cbf, -0x00012cbe, -0x00012cbd, -0x00012cbc, -0x00012cb9, -0x00012cb8, -0x00012cb7, -0x00012cb6, -0x00012cb5, -0x00012cb2, -0x00012cb1, -0x00012cb0, -0x00012caf, -0x00012cae, -0x00012cad, -0x00012caa, -0x00012ca9, -0x00012ca8, -0x00012ca7, -0x00012ca5, -0x00012ca4, -0x00012ca2, -0x00012ca1, -0x00012ca0, -0x00012c9e, -0x00012c9d, -0x00012c9b, -0x00012c9a, -0x00012c99, -0x00012c97, -0x00012c96, -0x00012c95, -0x00012c93, -0x00012c91, -0x00012c90, -0x00012c8f, -0x00012c8e, -0x00012c8d, -0x00012c8a, -0x00012c89, -0x00012c88, -0x00012c87, -0x00012c86, -0x00012c83, -0x00012c82, -0x00012c81, -0x00012c80, -0x00012c7f, -0x00012c7d, -0x00012c7b, -0x00012c7a, -0x00012c79, -0x00012c78, -0x00012c76, -0x00012c75, -0x00012c73, -0x00012c72, -0x00012c71, -0x00012c6f, -0x00012c6e, -0x00012c6c, -0x00012c6b, -0x00012c6a, -0x00012c68, -0x00012c67, -0x00012c66, -0x00012c64, -0x00012c62, -0x00012c61, -0x00012c60, -0x00012c5f, -0x00012c5e, -0x00012c5b, -0x00012c5a, -0x00012c59, -0x00012c58, -0x00012c57, -0x00012c56, -0x00012c53, -0x00012c52, -0x00012c51, -0x00012c50, -0x00012c4e, -0x00012c4c, -0x00012c4b, -0x00012c4a, -0x00012c49, -0x00012c47, -0x00012c46, -0x00012c45, -0x00012c43, -0x00012c42, -0x00012c40, -0x00012c3f, -0x00012c3e, -0x00012c3d, -0x00012c3b, -0x00012c39, -0x00012c38, -0x00012c37, -0x00012c36, -0x00012c35, -0x00012c32, -0x00012c31, -0x00012c30, -0x00012c2f, -0x00012c2e, -0x00012c2d, -0x00012c2a, -0x00012c29, -0x00012c28, -0x00012c27, -0x00012c26, -0x00012c24, -0x00012c22, -0x00012c21, -0x00012c20, -0x00012c1e, -0x00012c1d, -0x00012c1c, -0x00012c1a, -0x00012c19, -0x00012c17, -0x00012c16, -0x00012c15, -0x00012c13, -0x00012c12, -0x00012c10, -0x00012c0f, -0x00012c0e, -0x00012c0d, -0x00012c0b, -0x00012c09, -0x00012c08, -0x00012c07, -0x00012c06, -0x00012c05, -0x00012c02, -0x00012c01, -0x00012c00, -0x00012bff, -0x00012bfe, -0x00012bfc, -0x00012bfa, -0x00012bf9, -0x00012bf8, -0x00012bf7, -0x00012bf5, -0x00012bf4, -0x00012bf2, -0x00012bf1, -0x00012bf0, -0x00012bee, -0x00012bed, -0x00012beb, -0x00012bea, -0x00012be9, -0x00012be7, -0x00012be6, -0x00012be5, -0x00012be3, -0x00012be2, -0x00012be0, -0x00012bdf, -0x00012bde, -0x00012bdd, -0x00012bdb, -0x00012bd9, -0x00012bd8, -0x00012bd7, -0x00012bd6, -0x00012bd5, -0x00012bd2, -0x00012bd1, -0x00012bd0, -0x00012bcf, -0x00012bce, -0x00012bcc, -0x00012bca, -0x00012bc9, -0x00012bc8, -0x00012bc7, -0x00012bc5, -0x00012bc4, -0x00012bc2, -0x00012bc1, -0x00012bc0, -0x00012bbe, -0x00012bbd, -0x00012bbb, -0x00012bba, -0x00012bb9, -0x00012bb7, -0x00012bb6, -0x00012bb5, -0x00012bb3, -0x00012bb1, -0x00012bb0, -0x00012baf, -0x00012bae, -0x00012bad, -0x00012baa, -0x00012ba9, -0x00012ba8, -0x00012ba7, -0x00012ba6, -0x00012ba5, -0x00012ba2, -0x00012ba1, -0x00012ba0, -0x00012b9f, -0x00012b9e, -0x00012b9c, -0x00012b9a, -0x00012b99, -0x00012b98, -0x00012b97, -0x00012b94, -0x00012b93, -0x00012b92, -0x00012b91, -0x00012b90, -0x00012b8e, -0x00012b8c, -0x00012b8b, -0x00012b8a, -0x00012b89, -0x00012b87, -0x00012b86, -0x00012b84, -0x00012b83, -0x00012b82, -0x00012b80, -0x00012b7f, -0x00012b7e, -0x00012b7c, -0x00012b7b, -0x00012b79, -0x00012b78, -0x00012b77, -0x00012b76, -0x00012b74, -0x00012b72, -0x00012b71, -0x00012b70, -0x00012b6f, -0x00012b6e, -0x00012b6b, -0x00012b6a, -0x00012b69, -0x00012b68, -0x00012b67, -0x00012b66, -0x00012b63, -0x00012b62, -0x00012b61, -0x00012b60, -0x00012b5f, -0x00012b5d, -0x00012b5b, -0x00012b5a, -0x00012b59, -0x00012b58, -0x00012b56, -0x00012b55, -0x00012b53, -0x00012b52, -0x00012b51, -0x00012b4f, -0x00012b4e, -0x00012b4d, -0x00012b4b, -0x00012b4a, -0x00012b48, -0x00012b47, -0x00012b46, -0x00012b45, -0x00012b43, -0x00012b41, -0x00012b40, -0x00012b3f, -0x00012b3e, -0x00012b3c, -0x00012b3a, -0x00012b39, -0x00012b38, -0x00012b37, -0x00012b36, -0x00012b33, -0x00012b32, -0x00012b31, -0x00012b30, -0x00012b2f, -0x00012b2e, -0x00012b2b, -0x00012b2a, -0x00012b29, -0x00012b28, -0x00012b27, -0x00012b25, -0x00012b23, -0x00012b22, -0x00012b21, -0x00012b20, -0x00012b1e, -0x00012b1d, -0x00012b1b, -0x00012b1a, -0x00012b19, -0x00012b17, -0x00012b16, -0x00012b15, -0x00012b13, -0x00012b12, -0x00012b10, -0x00012b0f, -0x00012b0e, -0x00012b0d, -0x00012b0b, -0x00012b09, -0x00012b08, -0x00012b07, -0x00012b06, -0x00012b05, -0x00012b02, -0x00012b01, -0x00012b00, -0x00012aff, -0x00012afe, -0x00012afc, -0x00012afa, -0x00012af9, -0x00012af8, -0x00012af7, -0x00012af5, -0x00012af4, -0x00012af2, -0x00012af1, -0x00012af0, -0x00012aee, -0x00012aed, -0x00012aec, -0x00012aea, -0x00012ae9, -0x00012ae7, -0x00012ae6, -0x00012ae5, -0x00012ae4, -0x00012ae2, -0x00012ae0, -0x00012adf, -0x00012ade, -0x00012add, -0x00012adc, -0x00012ad9, -0x00012ad8, -0x00012ad7, -0x00012ad6, -0x00012ad5, -0x00012ad4, -0x00012ad1, -0x00012ad0, -0x00012acf, -0x00012ace, -0x00012acd, -0x00012acb, -0x00012ac9, -0x00012ac8, -0x00012ac7, -0x00012ac6, -0x00012ac4, -0x00012ac3, -0x00012ac1, -0x00012ac0, -0x00012abf, -0x00012abd, -0x00012abc, -0x00012abb, -0x00012ab9, -0x00012ab8, -0x00012ab6, -0x00012ab5, -0x00012ab4, -0x00012ab3, -0x00012ab1, -0x00012aaf, -0x00012aae, -0x00012aad, -0x00012aac, -0x00012aab, -0x00012aa8, -0x00012aa7, -0x00012aa6, -0x00012aa5, -0x00012aa4, -0x00012aa3, -0x00012aa0, -0x00012a9f, -0x00012a9e, -0x00012a9d, -0x00012a9c, -0x00012a9a, -0x00012a98, -0x00012a97, -0x00012a96, -0x00012a95, -0x00012a93, -0x00012a92, -0x00012a90, -0x00012a8f, -0x00012a8e, -0x00012a8c, -0x00012a8b, -0x00012a89, -0x00012a88, -0x00012a87, -0x00012a85, -0x00012a84, -0x00012a83, -0x00012a81, -0x00012a80, -0x00012a7e, -0x00012a7d, -0x00012a7c, -0x00012a7b, -0x00012a79, -0x00012a77, -0x00012a76, -0x00012a75, -0x00012a74, -0x00012a73, -0x00012a70, -0x00012a6f, -0x00012a6e, -0x00012a6d, -0x00012a6c, -0x00012a6b, -0x00012a68, -0x00012a67, -0x00012a66, -0x00012a65, -0x00012a63, -0x00012a62, -0x00012a60, -0x00012a5f, -0x00012a5e, -0x00012a5c, -0x00012a5b, -0x00012a5a, -0x00012a58, -0x00012a57, -0x00012a55, -0x00012a54, -0x00012a53, -0x00012a52, -0x00012a50, -0x00012a4e, -0x00012a4d, -0x00012a4c, -0x00012a4b, -0x00012a4a, -0x00012a47, -0x00012a46, -0x00012a45, -0x00012a44, -0x00012a43, -0x00012a42, -0x00012a3f, -0x00012a3e, -0x00012a3d, -0x00012a3c, -0x00012a3b, -0x00012a39, -0x00012a38, -0x00012a37, -0x00012a36, -0x00012a34, -0x00012a33, -0x00012a31, -0x00012a30, -0x00012a2f, -0x00012a2d, -0x00012a2c, -0x00012a2b, -0x00012a29, -0x00012a28, -0x00012a26, -0x00012a25, -0x00012a24, -0x00012a23, -0x00012a21, -0x00012a1f, -0x00012a1e, -0x00012a1d, -0x00012a1c, -0x00012a1b, -0x00012a18, -0x00012a17, -0x00012a16, -0x00012a15, -0x00012a14, -0x00012a13, -0x00012a10, -0x00012a0f, -0x00012a0e, -0x00012a0d, -0x00012a0c, -0x00012a0a, -0x00012a08, -0x00012a07, -0x00012a06, -0x00012a05, -0x00012a03, -0x00012a02, -0x00012a00, -0x000129ff, -0x000129fe, -0x000129fd, -0x000129fb, -0x000129fa, -0x000129f8, -0x000129f7, -0x000129f6, -0x000129f4, -0x000129f3, -0x000129f2, -0x000129f0, -0x000129ef, -0x000129ed, -0x000129ec, -0x000129eb, -0x000129ea, -0x000129e8, -0x000129e6, -0x000129e5, -0x000129e4, -0x000129e3, -0x000129e2, -0x000129e1, -0x000129de, -0x000129dd, -0x000129dc, -0x000129db, -0x000129da, -0x000129d8, -0x000129d6, -0x000129d5, -0x000129d4, -0x000129d3, -0x000129d1, -0x000129d0, -0x000129ce, -0x000129cd, -0x000129cc, -0x000129ca, -0x000129c9, -0x000129c8, -0x000129c6, -0x000129c5, -0x000129c3, -0x000129c2, -0x000129c1, -0x000129c0, -0x000129be, -0x000129bc, -0x000129bb, -0x000129ba, -0x000129b9, -0x000129b8, -0x000129b6, -0x000129b4, -0x000129b3, -0x000129b2, -0x000129b1, -0x000129b0, -0x000129ad, -0x000129ac, -0x000129ab, -0x000129aa, -0x000129a9, -0x000129a8, -0x000129a5, -0x000129a4, -0x000129a3, -0x000129a2, -0x000129a1, -0x0001299f, -0x0001299d, -0x0001299c, -0x0001299b, -0x0001299a, -0x00012998, -0x00012997, -0x00012995, -0x00012994, -0x00012993, -0x00012991, -0x00012990, -0x0001298f, -0x0001298e, -0x0001298c, -0x0001298a, -0x00012989, -0x00012988, -0x00012987, -0x00012985, -0x00012984, -0x00012982, -0x00012981, -0x00012980, -0x0001297e, -0x0001297d, -0x0001297c, -0x0001297b, -0x00012979, -0x00012977, -0x00012976, -0x00012975, -0x00012974, -0x00012973, -0x00012971, -0x0001296f, -0x0001296e, -0x0001296d, -0x0001296c, -0x0001296b, -0x00012968, -0x00012967, -0x00012966, -0x00012965, -0x00012964, -0x00012963, -0x00012960, -0x0001295f, -0x0001295e, -0x0001295d, -0x0001295c, -0x0001295a, -0x00012959, -0x00012957, -0x00012956, -0x00012955, -0x00012954, -0x00012952, -0x00012951, -0x0001294f, -0x0001294e, -0x0001294d, -0x0001294b, -0x0001294a, -0x00012949, -0x00012947, -0x00012946, -0x00012944, -0x00012943, -0x00012942, -0x00012941, -0x0001293f, -0x0001293d, -0x0001293c, -0x0001293b, -0x0001293a, -0x00012939, -0x00012938, -0x00012935, -0x00012934, -0x00012933, -0x00012932, -0x00012931, -0x00012930, -0x0001292d, -0x0001292c, -0x0001292b, -0x0001292a, -0x00012929, -0x00012927, -0x00012925, -0x00012924, -0x00012923, -0x00012922, -0x00012920, -0x0001291f, -0x0001291d, -0x0001291c, -0x0001291b, -0x0001291a, -0x00012918, -0x00012917, -0x00012915, -0x00012914, -0x00012913, -0x00012911, -0x00012910, -0x0001290f, -0x0001290e, -0x0001290c, -0x0001290a, -0x00012909, -0x00012908, -0x00012907, -0x00012906, -0x00012903, -0x00012902, -0x00012901, -0x00012900, -0x000128ff, -0x000128fe, -0x000128fb, -0x000128fa, -0x000128f9, -0x000128f8, -0x000128f7, -0x000128f6, -0x000128f3, -0x000128f2, -0x000128f1, -0x000128f0, -0x000128ef, -0x000128ed, -0x000128ec, -0x000128ea, -0x000128e9, -0x000128e8, -0x000128e6, -0x000128e5, -0x000128e4, -0x000128e2, -0x000128e1, -0x000128e0, -0x000128de, -0x000128dd, -0x000128dc, -0x000128da, -0x000128d9, -0x000128d7, -0x000128d6, -0x000128d5, -0x000128d4, -0x000128d2, -0x000128d0, -0x000128cf, -0x000128ce, -0x000128cd, -0x000128cc, -0x000128cb, -0x000128c8, -0x000128c7, -0x000128c6, -0x000128c5, -0x000128c4, -0x000128c3, -0x000128c0, -0x000128bf, -0x000128be, -0x000128bd, -0x000128bc, -0x000128ba, -0x000128b8, -0x000128b7, -0x000128b6, -0x000128b5, -0x000128b3, -0x000128b2, -0x000128b0, -0x000128af, -0x000128ae, -0x000128ac, -0x000128ab, -0x000128aa, -0x000128a9, -0x000128a7, -0x000128a6, -0x000128a4, -0x000128a3, -0x000128a2, -0x000128a1, -0x0001289f, -0x0001289d, -0x0001289c, -0x0001289b, -0x0001289a, -0x00012899, -0x00012896, -0x00012895, -0x00012894, -0x00012893, -0x00012892, -0x00012891, -0x0001288e, -0x0001288d, -0x0001288c, -0x0001288b, -0x0001288a, -0x00012889, -0x00012887, -0x00012885, -0x00012884, -0x00012883, -0x00012882, -0x00012880, -0x0001287f, -0x0001287d, -0x0001287c, -0x0001287b, -0x00012879, -0x00012878, -0x00012877, -0x00012875, -0x00012874, -0x00012872, -0x00012871, -0x00012870, -0x0001286f, -0x0001286d, -0x0001286c, -0x0001286a, -0x00012869, -0x00012868, -0x00012867, -0x00012866, -0x00012863, -0x00012862, -0x00012861, -0x00012860, -0x0001285f, -0x0001285e, -0x0001285b, -0x0001285a, -0x00012859, -0x00012858, -0x00012857, -0x00012855, -0x00012853, -0x00012852, -0x00012851, -0x00012850, -0x0001284e, -0x0001284d, -0x0001284b, -0x0001284a, -0x00012849, -0x00012848, -0x00012846, -0x00012845, -0x00012844, -0x00012842, -0x00012841, -0x0001283f, -0x0001283e, -0x0001283d, -0x0001283c, -0x0001283a, -0x00012838, -0x00012837, -0x00012836, -0x00012835, -0x00012834, -0x00012833, -0x00012832, -0x0001282f, -0x0001282e, -0x0001282d, -0x0001282c, -0x0001282b, -0x0001282a, -0x00012827, -0x00012826, -0x00012825, -0x00012824, -0x00012823, -0x00012822, -0x00012820, -0x0001281e, -0x0001281d, -0x0001281c, -0x0001281b, -0x00012819, -0x00012818, -0x00012816, -0x00012815, -0x00012814, -0x00012813, -0x00012811, -0x00012810, -0x0001280e, -0x0001280d, -0x0001280c, -0x0001280a, -0x00012809, -0x00012808, -0x00012807, -0x00012805, -0x00012803, -0x00012802, -0x00012801, -0x00012800, -0x000127ff, -0x000127fd, -0x000127fb, -0x000127fa, -0x000127f9, -0x000127f8, -0x000127f7, -0x000127f6, -0x000127f3, -0x000127f2, -0x000127f1, -0x000127f0, -0x000127ef, -0x000127ee, -0x000127eb, -0x000127ea, -0x000127e9, -0x000127e8, -0x000127e7, -0x000127e5, -0x000127e3, -0x000127e2, -0x000127e1, -0x000127e0, -0x000127de, -0x000127dd, -0x000127dc, -0x000127da, -0x000127d9, -0x000127d8, -0x000127d6, -0x000127d5, -0x000127d4, -0x000127d2, -0x000127d1, -0x000127cf, -0x000127ce, -0x000127cd, -0x000127cc, -0x000127cb, -0x000127c9, -0x000127c7, -0x000127c6, -0x000127c5, -0x000127c4, -0x000127c3, -0x000127c0, -0x000127bf, -0x000127be, -0x000127bd, -0x000127bc, -0x000127bb, -0x000127b8, -0x000127b7, -0x000127b6, -0x000127b5, -0x000127b4, -0x000127b3, -0x000127b1, -0x000127af, -0x000127ae, -0x000127ad, -0x000127ac, -0x000127aa, -0x000127a9, -0x000127a7, -0x000127a6, -0x000127a5, -0x000127a4, -0x000127a2, -0x000127a1, -0x000127a0, -0x0001279e, -0x0001279d, -0x0001279b, -0x0001279a, -0x00012799, -0x00012798, -0x00012796, -0x00012794, -0x00012793, -0x00012792, -0x00012791, -0x00012790, -0x0001278e, -0x0001278c, -0x0001278b, -0x0001278a, -0x00012789, -0x00012787, -0x00012786, -0x00012785, -0x00012783, -0x00012782, -0x00012781, -0x00012780, -0x0001277e, -0x0001277c, -0x0001277b, -0x0001277a, -0x00012779, -0x00012778, -0x00012776, -0x00012774, -0x00012773, -0x00012772, -0x00012771, -0x00012770, -0x0001276f, -0x0001276c, -0x0001276b, -0x0001276a, -0x00012769, -0x00012768, -0x00012767, -0x00012764, -0x00012763, -0x00012762, -0x00012761, -0x00012760, -0x0001275e, -0x0001275d, -0x0001275b, -0x0001275a, -0x00012759, -0x00012758, -0x00012756, -0x00012755, -0x00012754, -0x00012752, -0x00012751, -0x00012750, -0x0001274e, -0x0001274d, -0x0001274c, -0x0001274a, -0x00012749, -0x00012747, -0x00012746, -0x00012745, -0x00012744, -0x00012743, -0x00012741, -0x0001273f, -0x0001273e, -0x0001273d, -0x0001273c, -0x0001273b, -0x00012738, -0x00012737, -0x00012736, -0x00012735, -0x00012734, -0x00012733, -0x00012732, -0x0001272f, -0x0001272e, -0x0001272d, -0x0001272c, -0x0001272b, -0x00012729, -0x00012727, -0x00012726, -0x00012725, -0x00012724, -0x00012723, -0x00012721, -0x00012720, -0x0001271e, -0x0001271d, -0x0001271c, -0x0001271b, -0x00012719, -0x00012718, -0x00012716, -0x00012715, -0x00012714, -0x00012712, -0x00012711, -0x00012710, -0x0001270f, -0x0001270d, -0x0001270c, -0x0001270a, -0x00012709, -0x00012708, -0x00012707, -0x00012706, -0x00012703, -0x00012702, -0x00012701, -0x00012700, -0x000126ff, -0x000126fe, -0x000126fb, -0x000126fa, -0x000126f9, -0x000126f8, -0x000126f7, -0x000126f6, -0x000126f4, -0x000126f2, -0x000126f1, -0x000126f0, -0x000126ef, -0x000126ee, -0x000126ec, -0x000126ea, -0x000126e9, -0x000126e8, -0x000126e7, -0x000126e5, -0x000126e4, -0x000126e3, -0x000126e1, -0x000126e0, -0x000126df, -0x000126dd, -0x000126dc, -0x000126db, -0x000126d9, -0x000126d8, -0x000126d7, -0x000126d5, -0x000126d4, -0x000126d3, -0x000126d2, -0x000126d0, -0x000126ce, -0x000126cd, -0x000126cc, -0x000126cb, -0x000126ca, -0x000126c9, -0x000126c6, -0x000126c5, -0x000126c4, -0x000126c3, -0x000126c2, -0x000126c1, -0x000126be, -0x000126bd, -0x000126bc, -0x000126bb, -0x000126ba, -0x000126b9, -0x000126b7, -0x000126b5, -0x000126b4, -0x000126b3, -0x000126b2, -0x000126b0, -0x000126af, -0x000126ad, -0x000126ac, -0x000126ab, -0x000126aa, -0x000126a8, -0x000126a7, -0x000126a6, -0x000126a4, -0x000126a3, -0x000126a2, -0x000126a0, -0x0001269f, -0x0001269e, -0x0001269c, -0x0001269b, -0x00012699, -0x00012698, -0x00012697, -0x00012696, -0x00012695, -0x00012693, -0x00012691, -0x00012690, -0x0001268f, -0x0001268e, -0x0001268d, -0x0001268c, -0x00012689, -0x00012688, -0x00012687, -0x00012686, -0x00012685, -0x00012684, -0x00012681, -0x00012680, -0x0001267f, -0x0001267e, -0x0001267d, -0x0001267b, -0x0001267a, -0x00012678, -0x00012677, -0x00012676, -0x00012675, -0x00012673, -0x00012672, -0x00012670, -0x0001266f, -0x0001266e, -0x0001266d, -0x0001266b, -0x0001266a, -0x00012669, -0x00012667, -0x00012666, -0x00012664, -0x00012663, -0x00012662, -0x00012661, -0x0001265f, -0x0001265e, -0x0001265c, -0x0001265b, -0x0001265a, -0x00012659, -0x00012658, -0x00012655, -0x00012654, -0x00012653, -0x00012652, -0x00012651, -0x00012650, -0x0001264d, -0x0001264c, -0x0001264b, -0x0001264a, -0x00012649, -0x00012648, -0x00012646, -0x00012644, -0x00012643, -0x00012642, -0x00012641, -0x00012640, -0x0001263e, -0x0001263d, -0x0001263b, -0x0001263a, -0x00012639, -0x00012637, -0x00012637, -0x00012635, -0x00012634, -0x00012633, -0x00012631, -0x00012630, -0x0001262f, -0x0001262d, -0x0001262c, -0x0001262a, -0x00012629, -0x00012628, -0x00012627, -0x00012626, -0x00012624, -0x00012622, -0x00012621, -0x00012620, -0x0001261f, -0x0001261e, -0x0001261d, -0x0001261a, -0x00012619, -0x00012618, -0x00012617, -0x00012616, -0x00012615, -0x00012612, -0x00012611, -0x00012610, -0x0001260f, -0x0001260e, -0x0001260d, -0x0001260b, -0x00012609, -0x00012608, -0x00012607, -0x00012606, -0x00012605, -0x00012603, -0x00012602, -0x00012600, -0x000125ff, -0x000125fe, -0x000125fd, -0x000125fb, -0x000125fa, -0x000125f9, -0x000125f7, -0x000125f6, -0x000125f5, -0x000125f3, -0x000125f2, -0x000125f1, -0x000125ef, -0x000125ee, -0x000125ec, -0x000125eb, -0x000125ea, -0x000125e9, -0x000125e8, -0x000125e6, -0x000125e4, -0x000125e3, -0x000125e2, -0x000125e1, -0x000125e0, -0x000125df, -0x000125dc, -0x000125db, -0x000125da, -0x000125d9, -0x000125d8, -0x000125d7, -0x000125d6, -0x000125d3, -0x000125d2, -0x000125d1, -0x000125d0, -0x000125cf, -0x000125cd, -0x000125cb, -0x000125ca, -0x000125c9, -0x000125c8, -0x000125c7, -0x000125c5, -0x000125c4, -0x000125c2, -0x000125c1, -0x000125c0, -0x000125bf, -0x000125bd, -0x000125bc, -0x000125bb, -0x000125b9, -0x000125b8, -0x000125b7, -0x000125b5, -0x000125b4, -0x000125b3, -0x000125b2, -0x000125b0, -0x000125ae, -0x000125ad, -0x000125ac, -0x000125ab, -0x000125aa, -0x000125a8, -0x000125a6, -0x000125a5, -0x000125a4, -0x000125a3, -0x000125a2, -0x000125a1, -0x0001259e, -0x0001259d, -0x0001259c, -0x0001259b, -0x0001259a, -0x00012599, -0x00012597, -0x00012595, -0x00012594, -0x00012593, -0x00012592, -0x00012591, -0x0001258f, -0x0001258e, -0x0001258d, -0x0001258a, -0x00012589, -0x00012588, -0x00012587, -0x00012586, -0x00012585, -0x00012584, -0x00012581, -0x00012580, -0x0001257f, -0x0001257e, -0x0001257d, -0x0001257c, -0x0001257a, -0x00012578, -0x00012577, -0x00012576, -0x00012575, -0x00012574, -0x00012572, -0x00012571, -0x0001256f, -0x0001256e, -0x0001256d, -0x0001256c, -0x0001256a, -0x00012569, -0x00012568, -0x00012566, -0x00012565, -0x00012564, -0x00012562, -0x00012561, -0x00012560, -0x0001255f, -0x0001255d, -0x0001255c, -0x0001255a, -0x00012559, -0x00012558, -0x00012557, -0x00012556, -0x00012554, -0x00012552, -0x00012551, -0x00012550, -0x0001254f, -0x0001254e, -0x0001254d, -0x0001254a, -0x00012549, -0x00012548, -0x00012547, -0x00012546, -0x00012545, -0x00012544, -0x00012541, -0x00012540, -0x0001253f, -0x0001253e, -0x0001253d, -0x0001253c, -0x0001253a, -0x00012538, -0x00012537, -0x00012536, -0x00012535, -0x00012534, -0x00012532, -0x00012530, -0x0001252f, -0x0001252e, -0x0001252d, -0x0001252b, -0x0001252a, -0x00012529, -0x00012527, -0x00012526, -0x00012525, -0x00012523, -0x00012522, -0x00012521, -0x00012520, -0x0001251e, -0x0001251d, -0x0001251b, -0x0001251a, -0x00012519, -0x00012518, -0x00012517, -0x00012515, -0x00012513, -0x00012512, -0x00012511, -0x00012510, -0x0001250f, -0x0001250e, -0x0001250b, -0x0001250a, -0x00012509, -0x00012508, -0x00012507, -0x00012506, -0x00012505, -0x00012502, -0x00012501, -0x00012500, -0x000124ff, -0x000124fe, -0x000124fd, -0x000124fb, -0x000124f9, -0x000124f8, -0x000124f7, -0x000124f6, -0x000124f5, -0x000124f3, -0x000124f2, -0x000124f0, -0x000124ef, -0x000124ee, -0x000124ed, -0x000124eb, -0x000124ea, -0x000124e9, -0x000124e7, -0x000124e6, -0x000124e5, -0x000124e3, -0x000124e2, -0x000124e1, -0x000124e0, -0x000124de, -0x000124dd, -0x000124db, -0x000124da, -0x000124d9, -0x000124d8, -0x000124d7, -0x000124d5, -0x000124d3, -0x000124d2, -0x000124d1, -0x000124d0, -0x000124cf, -0x000124ce, -0x000124cb, -0x000124ca, -0x000124c9, -0x000124c8, -0x000124c7, -0x000124c6, -0x000124c3, -0x000124c2, -0x000124c1, -0x000124c0, -0x000124bf, -0x000124be, -0x000124bc, -0x000124ba, -0x000124b9, -0x000124b8, -0x000124b7, -0x000124b6, -0x000124b4, -0x000124b3, -0x000124b1, -0x000124b0, -0x000124af, -0x000124ae, -0x000124ac, -0x000124ab, -0x000124aa, -0x000124a8, -0x000124a7, -0x000124a6, -0x000124a4, -0x000124a3, -0x000124a2, -0x000124a1, -0x0001249f, -0x0001249e, -0x0001249c, -0x0001249b, -0x0001249a, -0x00012499, -0x00012498, -0x00012496, -0x00012494, -0x00012493, -0x00012492, -0x00012491, -0x00012490, -0x0001248f, -0x0001248c, -0x0001248b, -0x0001248a, -0x00012489, -0x00012488, -0x00012487, -0x00012486, -0x00012483, -0x00012482, -0x00012481, -0x00012480, -0x0001247f, -0x0001247e, -0x0001247c, -0x0001247a, -0x00012479, -0x00012478, -0x00012477, -0x00012476, -0x00012474, -0x00012473, -0x00012471, -0x00012470, -0x0001246f, -0x0001246e, -0x0001246c, -0x0001246b, -0x0001246a, -0x00012468, -0x00012467, -0x00012465, -0x00012464, -0x00012463, -0x00012462, -0x00012461, -0x0001245f, -0x0001245d, -0x0001245c, -0x0001245b, -0x0001245a, -0x00012459, -0x00012457, -0x00012455, -0x00012454, -0x00012453, -0x00012452, -0x00012451, -0x00012450, -0x0001244d, -0x0001244c, -0x0001244b, -0x0001244a, -0x00012449, -0x00012448, -0x00012447, -0x00012444, -0x00012443, -0x00012442, -0x00012441, -0x00012440, -0x0001243f, -0x0001243e, -0x0001243c, -0x0001243b, -0x00012439, -0x00012438, -0x00012437, -0x00012436, -0x00012434, -0x00012433, -0x00012432, -0x00012430, -0x0001242f, -0x0001242e, -0x0001242c, -0x0001242b, -0x0001242a, -0x00012429, -0x00012427, -0x00012426, -0x00012425, -0x00012423, -0x00012422, -0x00012421, -0x00012420, -0x0001241e, -0x0001241d, -0x0001241b, -0x0001241a, -0x00012419, -0x00012418, -0x00012417, -0x00012416, -0x00012413, -0x00012412, -0x00012411, -0x00012410, -0x0001240f, -0x0001240e, -0x0001240d, -0x0001240a, -0x00012409, -0x00012408, -0x00012407, -0x00012406, -0x00012405, -0x00012403, -0x00012401, -0x00012400, -0x000123ff, -0x000123fe, -0x000123fd, -0x000123fb, -0x000123fa, -0x000123f8, -0x000123f7, -0x000123f6, -0x000123f5, -0x000123f3, -0x000123f2, -0x000123f1, -0x000123ef, -0x000123ee, -0x000123ed, -0x000123eb, -0x000123ea, -0x000123e9, -0x000123e8, -0x000123e6, -0x000123e5, -0x000123e3, -0x000123e2, -0x000123e1, -0x000123e0, -0x000123df, -0x000123dd, -0x000123dc, -0x000123da, -0x000123d9, -0x000123d8, -0x000123d7, -0x000123d6, -0x000123d4, -0x000123d2, -0x000123d1, -0x000123d0, -0x000123cf, -0x000123ce, -0x000123cd, -0x000123ca, -0x000123c9, -0x000123c8, -0x000123c7, -0x000123c6, -0x000123c5, -0x000123c4, -0x000123c2, -0x000123c0, -0x000123bf, -0x000123be, -0x000123bd, -0x000123bc, -0x000123ba, -0x000123b9, -0x000123b7, -0x000123b6, -0x000123b5, -0x000123b4, -0x000123b2, -0x000123b1, -0x000123b0, -0x000123ae, -0x000123ad, -0x000123ac, -0x000123aa, -0x000123a9, -0x000123a8, -0x000123a7, -0x000123a5, -0x000123a4, -0x000123a2, -0x000123a1, -0x000123a0, -0x0001239f, -0x0001239e, -0x0001239c, -0x0001239a, -0x00012399, -0x00012398, -0x00012397, -0x00012395, -0x00012394, -0x00012393, -0x00012392, -0x00012390, -0x0001238f, -0x0001238e, -0x0001238d, -0x0001238b, -0x0001238a, -0x00012388, -0x00012387, -0x00012386, -0x00012385, -0x00012384, -0x00012382, -0x00012380, -0x0001237f, -0x0001237e, -0x0001237d, -0x0001237c, -0x0001237b, -0x00012378, -0x00012377, -0x00012376, -0x00012375, -0x00012374, -0x00012373, -0x00012372, -0x00012371, -0x0001236e, -0x0001236d, -0x0001236c, -0x0001236b, -0x0001236a, -0x00012369, -0x00012367, -0x00012365, -0x00012364, -0x00012363, -0x00012362, -0x00012361, -0x0001235f, -0x0001235e, -0x0001235c, -0x0001235b, -0x0001235a, -0x00012359, -0x00012358, -0x00012356, -0x00012355, -0x00012354, -0x00012352, -0x00012351, -0x00012350, -0x0001234e, -0x0001234d, -0x0001234c, -0x0001234b, -0x00012349, -0x00012348, -0x00012346, -0x00012345, -0x00012344, -0x00012343, -0x00012342, -0x00012340, -0x0001233f, -0x0001233d, -0x0001233c, -0x0001233b, -0x0001233a, -0x00012339, -0x00012337, -0x00012335, -0x00012334, -0x00012333, -0x00012332, -0x00012331, -0x00012330, -0x0001232f, -0x0001232c, -0x0001232b, -0x0001232a, -0x00012329, -0x00012328, -0x00012327, -0x00012326, -0x00012323, -0x00012322, -0x00012321, -0x00012320, -0x0001231f, -0x0001231e, -0x0001231c, -0x0001231a, -0x00012319, -0x00012318, -0x00012317, -0x00012316, -0x00012314, -0x00012313, -0x00012312, -0x00012310, -0x0001230f, -0x0001230e, -0x0001230d, -0x0001230b, -0x0001230a, -0x00012309, -0x00012307, -0x00012306, -0x00012305, -0x00012303, -0x00012302, -0x00012301, -0x00012300, -0x000122fe, -0x000122fd, -0x000122fb, -0x000122fa, -0x000122f9, -0x000122f8, -0x000122f7, -0x000122f6, -0x000122f3, -0x000122f2, -0x000122f1, -0x000122f0, -0x000122ef, -0x000122ee, -0x000122ed, -0x000122ea, -0x000122e9, -0x000122e8, -0x000122e7, -0x000122e6, -0x000122e5, -0x000122e4, -0x000122e1, -0x000122e0, -0x000122df, -0x000122de, -0x000122dd, -0x000122dc, -0x000122da, -0x000122d9, -0x000122d7, -0x000122d6, -0x000122d5, -0x000122d4, -0x000122d3, -0x000122d1, -0x000122d0, -0x000122ce, -0x000122cd, -0x000122cc, -0x000122cb, -0x000122c9, -0x000122c8, -0x000122c7, -0x000122c5, -0x000122c4, -0x000122c3, -0x000122c1, -0x000122c0, -0x000122bf, -0x000122be, -0x000122bd, -0x000122bb, -0x000122ba, -0x000122b8, -0x000122b7, -0x000122b6, -0x000122b5, -0x000122b4, -0x000122b2, -0x000122b0, -0x000122af, -0x000122ae, -0x000122ad, -0x000122ac, -0x000122ab, -0x000122a8, -0x000122a7, -0x000122a6, -0x000122a5, -0x000122a4, -0x000122a3, -0x000122a2, -0x000122a1, -0x0001229e, -0x0001229d, -0x0001229c, -0x0001229b, -0x0001229a, -0x00012299, -0x00012297, -0x00012295, -0x00012294, -0x00012293, -0x00012292, -0x00012291, -0x0001228f, -0x0001228e, -0x0001228c, -0x0001228b, -0x0001228a, -0x00012289, -0x00012288, -0x00012286, -0x00012285, -0x00012283, -0x00012282, -0x00012281, -0x00012280, -0x0001227e, -0x0001227d, -0x0001227c, -0x0001227b, -0x00012279, -0x00012278, -0x00012276, -0x00012275, -0x00012274, -0x00012273, -0x00012272, -0x00012270, -0x0001226f, -0x0001226d, -0x0001226c, -0x0001226b, -0x0001226a, -0x00012269, -0x00012267, -0x00012265, -0x00012264, -0x00012263, -0x00012262, -0x00012261, -0x00012260, -0x0001225f, -0x0001225c, -0x0001225b, -0x0001225a, -0x00012259, -0x00012258, -0x00012257, -0x00012255, -0x00012253, -0x00012252, -0x00012251, -0x00012250, -0x0001224f, -0x0001224e, -0x0001224c, -0x0001224b, -0x0001224a, -0x00012249, -0x00012247, -0x00012246, -0x00012245, -0x00012243, -0x00012242, -0x00012241, -0x0001223f, -0x0001223e, -0x0001223d, -0x0001223c, -0x0001223b, -0x00012239, -0x00012238, -0x00012236, -0x00012235, -0x00012234, -0x00012233, -0x00012232, -0x00012230, -0x0001222e, -0x0001222d, -0x0001222c, -0x0001222b, -0x0001222a, -0x00012229, -0x00012228, -0x00012225, -0x00012224, -0x00012223, -0x00012222, -0x00012221, -0x00012220, -0x0001221f, -0x0001221c, -0x0001221b, -0x0001221a, -0x00012219, -0x00012218, -0x00012217, -0x00012216, -0x00012214, -0x00012212, -0x00012211, -0x00012210, -0x0001220f, -0x0001220e, -0x0001220c, -0x0001220b, -0x00012209, -0x00012208, -0x00012207, -0x00012206, -0x00012205, -0x00012203, -0x00012202, -0x00012201, -0x000121ff, -0x000121fe, -0x000121fd, -0x000121fb, -0x000121fa, -0x000121f9, -0x000121f8, -0x000121f6, -0x000121f5, -0x000121f4, -0x000121f2, -0x000121f1, -0x000121f0, -0x000121ef, -0x000121ee, -0x000121ec, -0x000121ea, -0x000121e9, -0x000121e8, -0x000121e7, -0x000121e6, -0x000121e5, -0x000121e3, -0x000121e1, -0x000121e0, -0x000121df, -0x000121de, -0x000121dd, -0x000121dc, -0x000121db, -0x000121d8, -0x000121d7, -0x000121d6, -0x000121d5, -0x000121d4, -0x000121d3, -0x000121d2, -0x000121cf, -0x000121ce, -0x000121cd, -0x000121cc, -0x000121cb, -0x000121ca, -0x000121c8, -0x000121c7, -0x000121c5, -0x000121c4, -0x000121c3, -0x000121c2, -0x000121c1, -0x000121bf, -0x000121be, -0x000121bc, -0x000121bb, -0x000121ba, -0x000121b9, -0x000121b8, -0x000121b6, -0x000121b5, -0x000121b4, -0x000121b2, -0x000121b1, -0x000121b0, -0x000121ae, -0x000121ad, -0x000121ac, -0x000121ab, -0x000121a9, -0x000121a8, -0x000121a6, -0x000121a5, -0x000121a4, -0x000121a3, -0x000121a1, -0x000121a0, -0x0001219f, -0x0001219e, -0x0001219c, -0x0001219b, -0x0001219a, -0x00012198, -0x00012197, -0x00012196, -0x00012195, -0x00012194, -0x00012192, -0x00012191, -0x0001218f, -0x0001218e, -0x0001218d, -0x0001218c, -0x0001218b, -0x0001218a, -0x00012187, -0x00012186, -0x00012185, -0x00012184, -0x00012183, -0x00012182, -0x00012181, -0x0001217e, -0x0001217d, -0x0001217c, -0x0001217b, -0x0001217a, -0x00012179, -0x00012178, -0x00012177, -0x00012174, -0x00012173, -0x00012172, -0x00012171, -0x00012170, -0x0001216f, -0x0001216e, -0x0001216c, -0x0001216a, -0x00012169, -0x00012168, -0x00012167, -0x00012166, -0x00012164, -0x00012163, -0x00012162, -0x00012160, -0x0001215f, -0x0001215e, -0x0001215d, -0x0001215b, -0x0001215a, -0x00012159, -0x00012158, -0x00012156, -0x00012155, -0x00012154, -0x00012152, -0x00012151, -0x00012150, -0x0001214f, -0x0001214d, -0x0001214c, -0x0001214b, -0x00012149, -0x00012148, -0x00012147, -0x00012146, -0x00012145, -0x00012143, -0x00012141, -0x00012140, -0x0001213f, -0x0001213e, -0x0001213d, -0x0001213c, -0x0001213b, -0x00012138, -0x00012137, -0x00012136, -0x00012135, -0x00012134, -0x00012133, -0x00012132, -0x00012131, -0x0001212e, -0x0001212d, -0x0001212c, -0x0001212b, -0x0001212a, -0x00012129, -0x00012128, -0x00012125, -0x00012124, -0x00012123, -0x00012122, -0x00012121, -0x00012120, -0x0001211e, -0x0001211d, -0x0001211b, -0x0001211a, -0x00012119, -0x00012118, -0x00012117, -0x00012115, -0x00012114, -0x00012113, -0x00012111, -0x00012110, -0x0001210f, -0x0001210e, -0x0001210c, -0x0001210b, -0x0001210a, -0x00012109, -0x00012107, -0x00012106, -0x00012105, -0x00012103, -0x00012102, -0x00012101, -0x00012100, -0x000120fe, -0x000120fd, -0x000120fb, -0x000120fa, -0x000120f9, -0x000120f8, -0x000120f7, -0x000120f6, -0x000120f4, -0x000120f2, -0x000120f1, -0x000120f0, -0x000120ef, -0x000120ee, -0x000120ed, -0x000120ec, -0x000120e9, -0x000120e8, -0x000120e7, -0x000120e6, -0x000120e5, -0x000120e4, -0x000120e3, -0x000120e2, -0x000120df, -0x000120de, -0x000120dd, -0x000120dc, -0x000120db, -0x000120da, -0x000120d8, -0x000120d6, -0x000120d5, -0x000120d4, -0x000120d3, -0x000120d2, -0x000120d1, -0x000120cf, -0x000120ce, -0x000120cc, -0x000120cb, -0x000120ca, -0x000120c9, -0x000120c8, -0x000120c6, -0x000120c5, -0x000120c4, -0x000120c2, -0x000120c1, -0x000120c0, -0x000120bf, -0x000120bd, -0x000120bc, -0x000120bb, -0x000120ba, -0x000120b8, -0x000120b7, -0x000120b5, -0x000120b4, -0x000120b3, -0x000120b2, -0x000120b1, -0x000120af, -0x000120ae, -0x000120ac, -0x000120ab, -0x000120aa, -0x000120a9, -0x000120a8, -0x000120a7, -0x000120a5, -0x000120a3, -0x000120a2, -0x000120a1, -0x000120a0, -0x0001209f, -0x0001209e, -0x0001209d, -0x0001209a, -0x00012099, -0x00012098, -0x00012097, -0x00012096, -0x00012095, -0x00012094, -0x00012092, -0x00012090, -0x0001208f, -0x0001208e, -0x0001208d, -0x0001208c, -0x0001208b, -0x00012089, -0x00012087, -0x00012086, -0x00012085, -0x00012084, -0x00012083, -0x00012082, -0x00012080, -0x0001207f, -0x0001207d, -0x0001207c, -0x0001207b, -0x0001207a, -0x00012079, -0x00012077, -0x00012076, -0x00012075, -0x00012073, -0x00012072, -0x00012071, -0x00012070, -0x0001206e, -0x0001206d, -0x0001206c, -0x0001206b, -0x00012069, -0x00012068, -0x00012066, -0x00012065, -0x00012064, -0x00012063, -0x00012062, -0x00012061, -0x00012060, -0x0001205f, -0x0001205c, -0x0001205b, -0x0001205a, -0x00012059, -0x00012058, -0x00012057, -0x00012056, -0x00012054, -0x00012052, -0x00012051, -0x00012050, -0x0001204f, -0x0001204e, -0x0001204d, -0x0001204b, -0x0001204a, -0x00012048, -0x00012047, -0x00012046, -0x00012045, -0x00012044, -0x00012042, -0x00012041, -0x00012040, -0x0001203e, -0x0001203d, -0x0001203c, -0x0001203b, -0x00012039, -0x00012038, -0x00012037, -0x00012036, -0x00012034, -0x00012033, -0x00012032, -0x00012030, -0x0001202f, -0x0001202e, -0x0001202d, -0x0001202c, -0x0001202a, -0x00012029, -0x00012027, -0x00012026, -0x00012025, -0x00012024, -0x00012023, -0x00012022, -0x00012020, -0x0001201e, -0x0001201d, -0x0001201c, -0x0001201b, -0x0001201a, -0x00012019, -0x00012018, -0x00012015, -0x00012014, -0x00012013, -0x00012012, -0x00012011, -0x00012010, -0x0001200f, -0x0001200e, -0x0001200b, -0x0001200a, -0x00012009, -0x00012008, -0x00012007, -0x00012006, -0x00012005, -0x00012003, -0x00012001, -0x00012000, -0x00011fff, -0x00011ffe, -0x00011ffd, -0x00011ffc, -0x00011ffa, -0x00011ff9, -0x00011ff7, -0x00011ff6, -0x00011ff5, -0x00011ff4, -0x00011ff3, -0x00011ff1, -0x00011ff0, -0x00011fef, -0x00011fed, -0x00011fec, -0x00011feb, -0x00011fea, -0x00011fe8, -0x00011fe7, -0x00011fe6, -0x00011fe5, -0x00011fe3, -0x00011fe2, -0x00011fe1, -0x00011fdf, -0x00011fde, -0x00011fdd, -0x00011fdc, -0x00011fdb, -0x00011fd9, -0x00011fd8, -0x00011fd6, -0x00011fd5, -0x00011fd4, -0x00011fd3, -0x00011fd2, -0x00011fd1, -0x00011fcf, -0x00011fcd, -0x00011fcc, -0x00011fcb, -0x00011fca, -0x00011fc9, -0x00011fc8, -0x00011fc7, -0x00011fc4, -0x00011fc3, -0x00011fc2, -0x00011fc1, -0x00011fc0, -0x00011fbf, -0x00011fbc, -0x00011fbb, -0x00011fba, -0x00011fb9, -0x00011fb8, -0x00011fb7, -0x00011fb6, -0x00011fb4, -0x00011fb2, -0x00011fb1, -0x00011fb0, -0x00011faf, -0x00011fae, -0x00011fad, -0x00011fac, -0x00011faa, -0x00011fa8, -0x00011fa7, -0x00011fa6, -0x00011fa5, -0x00011fa4, -0x00011fa3, -0x00011fa1, -0x00011fa0, -0x00011f9e, -0x00011f9d, -0x00011f9c, -0x00011f9b, -0x00011f9a, -0x00011f98, -0x00011f97, -0x00011f96, -0x00011f95, -0x00011f93, -0x00011f92, -0x00011f91, -0x00011f90, -0x00011f8e, -0x00011f8d, -0x00011f8c, -0x00011f8b, -0x00011f89, -0x00011f88, -0x00011f87, -0x00011f85, -0x00011f84, -0x00011f83, -0x00011f82, -0x00011f81, -0x00011f7f, -0x00011f7e, -0x00011f7c, -0x00011f7b, -0x00011f7a, -0x00011f79, -0x00011f78, -0x00011f77, -0x00011f75, -0x00011f73, -0x00011f72, -0x00011f71, -0x00011f70, -0x00011f6f, -0x00011f6e, -0x00011f6d, -0x00011f6c, -0x00011f69, -0x00011f68, -0x00011f67, -0x00011f66, -0x00011f65, -0x00011f64, -0x00011f63, -0x00011f62, -0x00011f5f, -0x00011f5e, -0x00011f5d, -0x00011f5c, -0x00011f5b, -0x00011f5a, -0x00011f59, -0x00011f57, -0x00011f55, -0x00011f54, -0x00011f53, -0x00011f52, -0x00011f51, -0x00011f50, -0x00011f4e, -0x00011f4d, -0x00011f4b, -0x00011f4a, -0x00011f49, -0x00011f48, -0x00011f47, -0x00011f46, -0x00011f44, -0x00011f43, -0x00011f42, -0x00011f40, -0x00011f3f, -0x00011f3e, -0x00011f3d, -0x00011f3b, -0x00011f3a, -0x00011f39, -0x00011f38, -0x00011f36, -0x00011f35, -0x00011f34, -0x00011f32, -0x00011f31, -0x00011f30, -0x00011f2f, -0x00011f2e, -0x00011f2c, -0x00011f2b, -0x00011f29, -0x00011f28, -0x00011f27, -0x00011f26, -0x00011f25, -0x00011f24, -0x00011f22, -0x00011f21, -0x00011f1f, -0x00011f1e, -0x00011f1d, -0x00011f1c, -0x00011f1b, -0x00011f1a, -0x00011f19, -0x00011f16, -0x00011f15, -0x00011f14, -0x00011f13, -0x00011f12, -0x00011f11, -0x00011f10, -0x00011f0f, -0x00011f0c, -0x00011f0b, -0x00011f0a, -0x00011f09, -0x00011f08, -0x00011f07, -0x00011f06, -0x00011f04, -0x00011f02, -0x00011f01, -0x00011f00, -0x00011eff, -0x00011efe, -0x00011efd, -0x00011efc, -0x00011efa, -0x00011ef8, -0x00011ef7, -0x00011ef6, -0x00011ef5, -0x00011ef4, -0x00011ef3, -0x00011ef1, -0x00011ef0, -0x00011eef, -0x00011eed, -0x00011eec, -0x00011eeb, -0x00011eea, -0x00011ee8, -0x00011ee7, -0x00011ee6, -0x00011ee5, -0x00011ee3, -0x00011ee2, -0x00011ee1, -0x00011edf, -0x00011ede, -0x00011edd, -0x00011edc, -0x00011edb, -0x00011ed9, -0x00011ed8, -0x00011ed7, -0x00011ed5, -0x00011ed4, -0x00011ed3, -0x00011ed2, -0x00011ed1, -0x00011ed0, -0x00011ece, -0x00011ecc, -0x00011ecb, -0x00011eca, -0x00011ec9, -0x00011ec8, -0x00011ec7, -0x00011ec6, -0x00011ec3, -0x00011ec2, -0x00011ec1, -0x00011ec0, -0x00011ebf, -0x00011ebe, -0x00011ebd, -0x00011ebc, -0x00011eb9, -0x00011eb8, -0x00011eb7, -0x00011eb6, -0x00011eb5, -0x00011eb4, -0x00011eb3, -0x00011eb2, -0x00011eaf, -0x00011eae, -0x00011ead, -0x00011eac, -0x00011eab, -0x00011eaa, -0x00011ea9, -0x00011ea7, -0x00011ea6, -0x00011ea4, -0x00011ea3, -0x00011ea2, -0x00011ea1, -0x00011ea0, -0x00011e9e, -0x00011e9d, -0x00011e9c, -0x00011e9a, -0x00011e99, -0x00011e98, -0x00011e97, -0x00011e95, -0x00011e94, -0x00011e93, -0x00011e92, -0x00011e90, -0x00011e8f, -0x00011e8e, -0x00011e8d, -0x00011e8b, -0x00011e8a, -0x00011e89, -0x00011e88, -0x00011e86, -0x00011e85, -0x00011e84, -0x00011e82, -0x00011e81, -0x00011e80, -0x00011e7f, -0x00011e7d, -0x00011e7c, -0x00011e7b, -0x00011e7a, -0x00011e79, -0x00011e78, -0x00011e76, -0x00011e75, -0x00011e73, -0x00011e72, -0x00011e71, -0x00011e70, -0x00011e6f, -0x00011e6d, -0x00011e6c, -0x00011e6b, -0x00011e6a, -0x00011e68, -0x00011e67, -0x00011e66, -0x00011e65, -0x00011e63, -0x00011e62, -0x00011e61, -0x00011e60, -0x00011e5e, -0x00011e5d, -0x00011e5c, -0x00011e5a, -0x00011e59, -0x00011e58, -0x00011e57, -0x00011e56, -0x00011e55, -0x00011e53, -0x00011e52, -0x00011e50, -0x00011e4f, -0x00011e4e, -0x00011e4d, -0x00011e4c, -0x00011e4b, -0x00011e49, -0x00011e48, -0x00011e46, -0x00011e45, -0x00011e44, -0x00011e43, -0x00011e42, -0x00011e41, -0x00011e40, -0x00011e3d, -0x00011e3c, -0x00011e3b, -0x00011e3a, -0x00011e39, -0x00011e38, -0x00011e37, -0x00011e36, -0x00011e33, -0x00011e32, -0x00011e31, -0x00011e30, -0x00011e2f, -0x00011e2e, -0x00011e2d, -0x00011e2c, -0x00011e2a, -0x00011e28, -0x00011e27, -0x00011e26, -0x00011e25, -0x00011e24, -0x00011e23, -0x00011e22, -0x00011e20, -0x00011e1e, -0x00011e1d, -0x00011e1c, -0x00011e1b, -0x00011e1a, -0x00011e19, -0x00011e17, -0x00011e16, -0x00011e15, -0x00011e13, -0x00011e12, -0x00011e11, -0x00011e10, -0x00011e0f, -0x00011e0d, -0x00011e0c, -0x00011e0b, -0x00011e09, -0x00011e08, -0x00011e07, -0x00011e06, -0x00011e04, -0x00011e03, -0x00011e02, -0x00011e01, -0x00011e00, -0x00011dfe, -0x00011dfd, -0x00011dfc, -0x00011dfa, -0x00011df9, -0x00011df8, -0x00011df7, -0x00011df6, -0x00011df4, -0x00011df3, -0x00011df1, -0x00011df0, -0x00011def, -0x00011dee, -0x00011ded, -0x00011dec, -0x00011deb, -0x00011de9, -0x00011de7, -0x00011de6, -0x00011de5, -0x00011de4, -0x00011de3, -0x00011de2, -0x00011de1, -0x00011de0, -0x00011ddd, -0x00011ddc, -0x00011ddb, -0x00011dda, -0x00011dd9, -0x00011dd8, -0x00011dd7, -0x00011dd6, -0x00011dd3, -0x00011dd2, -0x00011dd1, -0x00011dd0, -0x00011dcf, -0x00011dce, -0x00011dcd, -0x00011dcb, -0x00011dca, -0x00011dc8, -0x00011dc7, -0x00011dc6, -0x00011dc5, -0x00011dc4, -0x00011dc3, -0x00011dc1, -0x00011dc0, -0x00011dbe, -0x00011dbd, -0x00011dbc, -0x00011dbb, -0x00011dba, -0x00011db9, -0x00011db7, -0x00011db6, -0x00011db5, -0x00011db3, -0x00011db2, -0x00011db1, -0x00011db0, -0x00011dae, -0x00011dad, -0x00011dac, -0x00011dab, -0x00011da9, -0x00011da8, -0x00011da7, -0x00011da6, -0x00011da4, -0x00011da3, -0x00011da2, -0x00011da1, -0x00011da0, -0x00011d9e, -0x00011d9d, -0x00011d9b, -0x00011d9a, -0x00011d99, -0x00011d98, -0x00011d97, -0x00011d96, -0x00011d94, -0x00011d93, -0x00011d91, -0x00011d90, -0x00011d8f, -0x00011d8e, -0x00011d8d, -0x00011d8c, -0x00011d8b, -0x00011d88, -0x00011d87, -0x00011d86, -0x00011d85, -0x00011d84, -0x00011d83, -0x00011d82, -0x00011d81, -0x00011d7e, -0x00011d7d, -0x00011d7c, -0x00011d7b, -0x00011d7a, -0x00011d79, -0x00011d78, -0x00011d77, -0x00011d75, -0x00011d73, -0x00011d72, -0x00011d71, -0x00011d70, -0x00011d6f, -0x00011d6e, -0x00011d6d, -0x00011d6b, -0x00011d69, -0x00011d68, -0x00011d67, -0x00011d66, -0x00011d65, -0x00011d64, -0x00011d62, -0x00011d61, -0x00011d60, -0x00011d5e, -0x00011d5d, -0x00011d5c, -0x00011d5b, -0x00011d5a, -0x00011d58, -0x00011d57, -0x00011d56, -0x00011d54, -0x00011d53, -0x00011d52, -0x00011d51, -0x00011d4f, -0x00011d4e, -0x00011d4d, -0x00011d4c, -0x00011d4b, -0x00011d49, -0x00011d48, -0x00011d47, -0x00011d45, -0x00011d44, -0x00011d43, -0x00011d42, -0x00011d41, -0x00011d3f, -0x00011d3e, -0x00011d3d, -0x00011d3c, -0x00011d3b, -0x00011d3a, -0x00011d39, -0x00011d37, -0x00011d35, -0x00011d34, -0x00011d33, -0x00011d32, -0x00011d31, -0x00011d30, -0x00011d2f, -0x00011d2e, -0x00011d2b, -0x00011d2a, -0x00011d29, -0x00011d28, -0x00011d27, -0x00011d26, -0x00011d25, -0x00011d24, -0x00011d23, -0x00011d20, -0x00011d1f, -0x00011d1e, -0x00011d1d, -0x00011d1c, -0x00011d1b, -0x00011d1a, -0x00011d18, -0x00011d17, -0x00011d15, -0x00011d14, -0x00011d13, -0x00011d12, -0x00011d11, -0x00011d10, -0x00011d0e, -0x00011d0d, -0x00011d0b, -0x00011d0a, -0x00011d09, -0x00011d08, -0x00011d07, -0x00011d06, -0x00011d04, -0x00011d03, -0x00011d02, -0x00011d00, -0x00011cff, -0x00011cfe, -0x00011cfd, -0x00011cfc, -0x00011cfa, -0x00011cf9, -0x00011cf8, -0x00011cf7, -0x00011cf5, -0x00011cf4, -0x00011cf3, -0x00011cf2, -0x00011cf0, -0x00011cef, -0x00011cee, -0x00011ced, -0x00011cec, -0x00011cea, -0x00011ce9, -0x00011ce8, -0x00011ce6, -0x00011ce5, -0x00011ce4, -0x00011ce3, -0x00011ce2, -0x00011ce1, -0x00011cdf, -0x00011cdd, -0x00011cdc, -0x00011cdb, -0x00011cda, -0x00011cd9, -0x00011cd8, -0x00011cd7, -0x00011cd6, -0x00011cd3, -0x00011cd2, -0x00011cd1, -0x00011cd0, -0x00011ccf, -0x00011cce, -0x00011ccd, -0x00011ccc, -0x00011cc9, -0x00011cc8, -0x00011cc7, -0x00011cc6, -0x00011cc5, -0x00011cc4, -0x00011cc3, -0x00011cc2, -0x00011cc1, -0x00011cbe, -0x00011cbd, -0x00011cbc, -0x00011cbb, -0x00011cba, -0x00011cb9, -0x00011cb8, -0x00011cb7, -0x00011cb5, -0x00011cb3, -0x00011cb2, -0x00011cb1, -0x00011cb0, -0x00011caf, -0x00011cae, -0x00011cad, -0x00011cab, -0x00011caa, -0x00011ca8, -0x00011ca7, -0x00011ca6, -0x00011ca5, -0x00011ca4, -0x00011ca2, -0x00011ca1, -0x00011ca0, -0x00011c9f, -0x00011c9e, -0x00011c9c, -0x00011c9a, -0x00011c99, -0x00011c98, -0x00011c97, -0x00011c96, -0x00011c95, -0x00011c94, -0x00011c92, -0x00011c91, -0x00011c8f, -0x00011c8e, -0x00011c8d, -0x00011c8c, -0x00011c8b, -0x00011c8a, -0x00011c88, -0x00011c87, -0x00011c86, -0x00011c84, -0x00011c83, -0x00011c82, -0x00011c81, -0x00011c80, -0x00011c7e, -0x00011c7d, -0x00011c7c, -0x00011c7b, -0x00011c7a, -0x00011c78, -0x00011c77, -0x00011c76, -0x00011c74, -0x00011c73, -0x00011c72, -0x00011c71, -0x00011c70, -0x00011c6f, -0x00011c6d, -0x00011c6c, -0x00011c6b, -0x00011c69, -0x00011c68, -0x00011c67, -0x00011c66, -0x00011c65, -0x00011c64, -0x00011c62, -0x00011c61, -0x00011c5f, -0x00011c5e, -0x00011c5d, -0x00011c5c, -0x00011c5b, -0x00011c5a, -0x00011c59, -0x00011c57, -0x00011c55, -0x00011c54, -0x00011c53, -0x00011c52, -0x00011c51, -0x00011c50, -0x00011c4f, -0x00011c4e, -0x00011c4b, -0x00011c4a, -0x00011c49, -0x00011c48, -0x00011c47, -0x00011c46, -0x00011c45, -0x00011c44, -0x00011c43, -0x00011c40, -0x00011c3f, -0x00011c3e, -0x00011c3d, -0x00011c3c, -0x00011c3b, -0x00011c3a, -0x00011c39, -0x00011c37, -0x00011c35, -0x00011c34, -0x00011c33, -0x00011c32, -0x00011c31, -0x00011c30, -0x00011c2f, -0x00011c2d, -0x00011c2c, -0x00011c2b, -0x00011c29, -0x00011c28, -0x00011c27, -0x00011c26, -0x00011c25, -0x00011c24, -0x00011c22, -0x00011c21, -0x00011c20, -0x00011c1e, -0x00011c1d, -0x00011c1c, -0x00011c1b, -0x00011c1a, -0x00011c18, -0x00011c17, -0x00011c16, -0x00011c15, -0x00011c13, -0x00011c12, -0x00011c11, -0x00011c10, -0x00011c0e, -0x00011c0d, -0x00011c0c, -0x00011c0b, -0x00011c0a, -0x00011c08, -0x00011c07, -0x00011c06, -0x00011c04, -0x00011c03, -0x00011c02, -0x00011c01, -0x00011c00, -0x00011bff, -0x00011bfd, -0x00011bfc, -0x00011bfa, -0x00011bf9, -0x00011bf8, -0x00011bf7, -0x00011bf6, -0x00011bf5, -0x00011bf4, -0x00011bf2, -0x00011bf0, -0x00011bef, -0x00011bee, -0x00011bed, -0x00011bec, -0x00011beb, -0x00011bea, -0x00011be9, -0x00011be6, -0x00011be5, -0x00011be4, -0x00011be3, -0x00011be2, -0x00011be1, -0x00011be0, -0x00011bdf, -0x00011bde, -0x00011bdd, -0x00011bda, -0x00011bd9, -0x00011bd8, -0x00011bd7, -0x00011bd6, -0x00011bd5, -0x00011bd4, -0x00011bd3, -0x00011bd1, -0x00011bcf, -0x00011bce, -0x00011bcd, -0x00011bcc, -0x00011bcb, -0x00011bca, -0x00011bc9, -0x00011bc7, -0x00011bc6, -0x00011bc4, -0x00011bc3, -0x00011bc2, -0x00011bc1, -0x00011bc0, -0x00011bbf, -0x00011bbd, -0x00011bbc, -0x00011bbb, -0x00011bb9, -0x00011bb8, -0x00011bb7, -0x00011bb6, -0x00011bb5, -0x00011bb3, -0x00011bb2, -0x00011bb1, -0x00011bb0, -0x00011bae, -0x00011bad, -0x00011bac, -0x00011bab, -0x00011ba9, -0x00011ba8, -0x00011ba7, -0x00011ba6, -0x00011ba5, -0x00011ba3, -0x00011ba2, -0x00011ba1, -0x00011b9f, -0x00011b9e, -0x00011b9d, -0x00011b9c, -0x00011b9b, -0x00011b9a, -0x00011b98, -0x00011b97, -0x00011b96, -0x00011b94, -0x00011b93, -0x00011b92, -0x00011b91, -0x00011b90, -0x00011b8f, -0x00011b8e, -0x00011b8c, -0x00011b8a, -0x00011b89, -0x00011b88, -0x00011b87, -0x00011b86, -0x00011b85, -0x00011b84, -0x00011b83, -0x00011b80, -0x00011b7f, -0x00011b7e, -0x00011b7d, -0x00011b7c, -0x00011b7b, -0x00011b7a, -0x00011b79, -0x00011b78, -0x00011b75, -0x00011b74, -0x00011b73, -0x00011b72, -0x00011b71, -0x00011b70, -0x00011b6f, -0x00011b6e, -0x00011b6c, -0x00011b6a, -0x00011b69, -0x00011b68, -0x00011b67, -0x00011b66, -0x00011b65, -0x00011b63, -0x00011b62, -0x00011b61, -0x00011b60, -0x00011b5f, -0x00011b5e, -0x00011b5c, -0x00011b5b, -0x00011b5a, -0x00011b58, -0x00011b57, -0x00011b56, -0x00011b55, -0x00011b54, -0x00011b53, -0x00011b51, -0x00011b50, -0x00011b4e, -0x00011b4d, -0x00011b4c, -0x00011b4b, -0x00011b4a, -0x00011b49, -0x00011b48, -0x00011b47, -0x00011b45, -0x00011b43, -0x00011b42, -0x00011b41, -0x00011b40, -0x00011b3f, -0x00011b3e, -0x00011b3d, -0x00011b3c, -0x00011b39, -0x00011b38, -0x00011b37, -0x00011b36, -0x00011b35, -0x00011b34, -0x00011b33, -0x00011b32, -0x00011b31, -0x00011b30, -0x00011b2d, -0x00011b2c, -0x00011b2b, -0x00011b2a, -0x00011b29, -0x00011b28, -0x00011b27, -0x00011b26, -0x00011b24, -0x00011b22, -0x00011b21, -0x00011b20, -0x00011b1f, -0x00011b1e, -0x00011b1d, -0x00011b1c, -0x00011b1b, -0x00011b19, -0x00011b18, -0x00011b16, -0x00011b15, -0x00011b14, -0x00011b13, -0x00011b12, -0x00011b11, -0x00011b0f, -0x00011b0e, -0x00011b0d, -0x00011b0b, -0x00011b0a, -0x00011b09, -0x00011b08, -0x00011b07, -0x00011b06, -0x00011b04, -0x00011b03, -0x00011b02, -0x00011b00, -0x00011aff, -0x00011afe, -0x00011afd, -0x00011afc, -0x00011afa, -0x00011af9, -0x00011af8, -0x00011af7, -0x00011af6, -0x00011af4, -0x00011af3, -0x00011af2, -0x00011af1, -0x00011aef, -0x00011aee, -0x00011aed, -0x00011aec, -0x00011aeb, -0x00011ae9, -0x00011ae8, -0x00011ae7, -0x00011ae5, -0x00011ae4, -0x00011ae3, -0x00011ae2, -0x00011ae1, -0x00011ae0, -0x00011adf, -0x00011add, -0x00011adc, -0x00011ada, -0x00011ad9, -0x00011ad8, -0x00011ad7, -0x00011ad6, -0x00011ad5, -0x00011ad4, -0x00011ad2, -0x00011ad0, -0x00011acf, -0x00011ace, -0x00011acd, -0x00011acc, -0x00011acb, -0x00011aca, -0x00011ac7, -0x00011ac6, -0x00011ac5, -0x00011ac4, -0x00011ac3, -0x00011ac2, -0x00011ac1, -0x00011ac0, -0x00011abf, -0x00011abc, -0x00011abb, -0x00011aba, -0x00011ab9, -0x00011ab8, -0x00011ab7, -0x00011ab6, -0x00011ab5, -0x00011ab4, -0x00011ab2, -0x00011ab0, -0x00011aaf, -0x00011aae, -0x00011aad, -0x00011aac, -0x00011aab, -0x00011aaa, -0x00011aa9, -0x00011aa7, -0x00011aa6, -0x00011aa4, -0x00011aa3, -0x00011aa2, -0x00011aa1, -0x00011aa0, -0x00011a9f, -0x00011a9e, -0x00011a9c, -0x00011a9b, -0x00011a9a, -0x00011a98, -0x00011a97, -0x00011a96, -0x00011a95, -0x00011a94, -0x00011a93, -0x00011a91, -0x00011a90, -0x00011a8f, -0x00011a8e, -0x00011a8c, -0x00011a8b, -0x00011a8a, -0x00011a89, -0x00011a87, -0x00011a86, -0x00011a85, -0x00011a84, -0x00011a83, -0x00011a82, -0x00011a80, -0x00011a7f, -0x00011a7e, -0x00011a7c, -0x00011a7b, -0x00011a7a, -0x00011a79, -0x00011a78, -0x00011a77, -0x00011a75, -0x00011a74, -0x00011a73, -0x00011a71, -0x00011a70, -0x00011a6f, -0x00011a6e, -0x00011a6d, -0x00011a6c, -0x00011a6b, -0x00011a69, -0x00011a68, -0x00011a66, -0x00011a65, -0x00011a64, -0x00011a63, -0x00011a62, -0x00011a61, -0x00011a60, -0x00011a5f, -0x00011a5d, -0x00011a5b, -0x00011a5a, -0x00011a59, -0x00011a58, -0x00011a57, -0x00011a56, -0x00011a55, -0x00011a54, -0x00011a53, -0x00011a50, -0x00011a4f, -0x00011a4e, -0x00011a4d, -0x00011a4c, -0x00011a4b, -0x00011a4a, -0x00011a49, -0x00011a48, -0x00011a47, -0x00011a44, -0x00011a43, -0x00011a42, -0x00011a41, -0x00011a40, -0x00011a3f, -0x00011a3e, -0x00011a3d, -0x00011a3b, -0x00011a3a, -0x00011a38, -0x00011a37, -0x00011a36, -0x00011a35, -0x00011a34, -0x00011a33, -0x00011a32, -0x00011a30, -0x00011a2f, -0x00011a2e, -0x00011a2c, -0x00011a2b, -0x00011a2a, -0x00011a29, -0x00011a28, -0x00011a27, -0x00011a25, -0x00011a24, -0x00011a23, -0x00011a21, -0x00011a20, -0x00011a1f, -0x00011a1e, -0x00011a1d, -0x00011a1c, -0x00011a1a, -0x00011a19, -0x00011a18, -0x00011a17, -0x00011a15, -0x00011a14, -0x00011a13, -0x00011a12, -0x00011a11, -0x00011a0f, -0x00011a0e, -0x00011a0d, -0x00011a0c, -0x00011a0b, -0x00011a09, -0x00011a08, -0x00011a07, -0x00011a06, -0x00011a04, -0x00011a03, -0x00011a02, -0x00011a01, -0x00011a00, -0x000119ff, -0x000119fd, -0x000119fc, -0x000119fa, -0x000119f9, -0x000119f8, -0x000119f7, -0x000119f6, -0x000119f5, -0x000119f4, -0x000119f3, -0x000119f1, -0x000119ef, -0x000119ee, -0x000119ed, -0x000119ec, -0x000119eb, -0x000119ea, -0x000119e9, -0x000119e8, -0x000119e7, -0x000119e4, -0x000119e3, -0x000119e2, -0x000119e1, -0x000119e0, -0x000119df, -0x000119de, -0x000119dd, -0x000119dc, -0x000119d9, -0x000119d8, -0x000119d7, -0x000119d6, -0x000119d5, -0x000119d4, -0x000119d3, -0x000119d2, -0x000119d1, -0x000119d0, -0x000119cd, -0x000119cc, -0x000119cb, -0x000119ca, -0x000119c9, -0x000119c8, -0x000119c7, -0x000119c6, -0x000119c5, -0x000119c3, -0x000119c1, -0x000119c0, -0x000119bf, -0x000119be, -0x000119bd, -0x000119bc, -0x000119bb, -0x000119ba, -0x000119b8, -0x000119b7, -0x000119b5, -0x000119b4, -0x000119b3, -0x000119b2, -0x000119b1, -0x000119b0, -0x000119ae, -0x000119ad, -0x000119ac, -0x000119ab, -0x000119a9, -0x000119a8, -0x000119a7, -0x000119a6, -0x000119a5, -0x000119a3, -0x000119a2, -0x000119a1, -0x000119a0, -0x0001199f, -0x0001199d, -0x0001199c, -0x0001199b, -0x0001199a, -0x00011998, -0x00011997, -0x00011996, -0x00011995, -0x00011994, -0x00011992, -0x00011991, -0x00011990, -0x0001198f, -0x0001198e, -0x0001198d, -0x0001198b, -0x0001198a, -0x00011988, -0x00011987, -0x00011986, -0x00011985, -0x00011984, -0x00011983, -0x00011982, -0x00011980, -0x0001197f, -0x0001197e, -0x0001197c, -0x0001197b, -0x0001197a, -0x00011979, -0x00011978, -0x00011977, -0x00011975, -0x00011974, -0x00011973, -0x00011972, -0x00011971, -0x0001196f, -0x0001196e, -0x0001196d, -0x0001196c, -0x0001196a, -0x00011969, -0x00011968, -0x00011967, -0x00011966, -0x00011965, -0x00011963, -0x00011962, -0x00011961, -0x0001195f, -0x0001195e, -0x0001195d, -0x0001195c, -0x0001195b, -0x0001195a, -0x00011959, -0x00011957, -0x00011956, -0x00011955, -0x00011953, -0x00011952, -0x00011951, -0x00011950, -0x0001194f, -0x0001194e, -0x0001194d, -0x0001194b, -0x0001194a, -0x00011948, -0x00011947, -0x00011946, -0x00011945, -0x00011944, -0x00011943, -0x00011942, -0x00011941, -0x00011940, -0x0001193d, -0x0001193c, -0x0001193b, -0x0001193a, -0x00011939, -0x00011938, -0x00011937, -0x00011936, -0x00011935, -0x00011934, -0x00011931, -0x00011930, -0x0001192f, -0x0001192e, -0x0001192d, -0x0001192c, -0x0001192b, -0x0001192a, -0x00011929, -0x00011928, -0x00011925, -0x00011924, -0x00011923, -0x00011922, -0x00011921, -0x00011920, -0x0001191f, -0x0001191e, -0x0001191d, -0x0001191b, -0x00011919, -0x00011918, -0x00011917, -0x00011916, -0x00011915, -0x00011914, -0x00011913, -0x00011912, -0x00011910, -0x0001190f, -0x0001190e, -0x0001190c, -0x0001190b, -0x0001190a, -0x00011909, -0x00011908, -0x00011907, -0x00011905, -0x00011904, -0x00011903, -0x00011902, -0x00011900, -0x000118ff, -0x000118fe, -0x000118fd, -0x000118fc, -0x000118fb, -0x000118f9, -0x000118f8, -0x000118f7, -0x000118f6, -0x000118f4, -0x000118f3, -0x000118f2, -0x000118f1, -0x000118f0, -0x000118ee, -0x000118ed, -0x000118ec, -0x000118eb, -0x000118ea, -0x000118e8, -0x000118e7, -0x000118e6, -0x000118e5, -0x000118e3, -0x000118e2, -0x000118e1, -0x000118e0, -0x000118df, -0x000118de, -0x000118dd, -0x000118db, -0x000118da, -0x000118d8, -0x000118d7, -0x000118d6, -0x000118d5, -0x000118d4, -0x000118d3, -0x000118d2, -0x000118d1, -0x000118cf, -0x000118ce, -0x000118cc, -0x000118cb, -0x000118ca, -0x000118c9, -0x000118c8, -0x000118c7, -0x000118c6, -0x000118c5, -0x000118c3, -0x000118c1, -0x000118c0, -0x000118bf, -0x000118be, -0x000118bd, -0x000118bc, -0x000118bb, -0x000118ba, -0x000118b9, -0x000118b6, -0x000118b5, -0x000118b4, -0x000118b3, -0x000118b2, -0x000118b1, -0x000118b0, -0x000118af, -0x000118ae, -0x000118ad, -0x000118ab, -0x000118a9, -0x000118a8, -0x000118a7, -0x000118a6, -0x000118a5, -0x000118a4, -0x000118a3, -0x000118a2, -0x000118a1, -0x0001189f, -0x0001189d, -0x0001189c, -0x0001189b, -0x0001189a, -0x00011899, -0x00011898, -0x00011897, -0x00011896, -0x00011894, -0x00011893, -0x00011891, -0x00011890, -0x0001188f, -0x0001188e, -0x0001188d, -0x0001188c, -0x0001188b, -0x00011889, -0x00011888, -0x00011887, -0x00011885, -0x00011884, -0x00011883, -0x00011882, -0x00011881, -0x00011880, -0x0001187e, -0x0001187d, -0x0001187c, -0x0001187b, -0x00011879, -0x00011878, -0x00011877, -0x00011876, -0x00011875, -0x00011874, -0x00011872, -0x00011871, -0x00011870, -0x0001186f, -0x0001186e, -0x0001186c, -0x0001186b, -0x0001186a, -0x00011869, -0x00011867, -0x00011866, -0x00011865, -0x00011864, -0x00011863, -0x00011862, -0x00011860, -0x0001185f, -0x0001185e, -0x0001185d, -0x0001185c, -0x0001185b, -0x0001185a, -0x00011859, -0x00011856, -0x00011855, -0x00011854, -0x00011853, -0x00011852, -0x00011851, -0x00011850, -0x0001184f, -0x0001184e, -0x0001184d, -0x0001184b, -0x00011849, -0x00011848, -0x00011847, -0x00011846, -0x00011845, -0x00011844, -0x00011843, -0x00011842, -0x00011841, -0x0001183f, -0x0001183d, -0x0001183c, -0x0001183b, -0x0001183a, -0x00011839, -0x00011838, -0x00011837, -0x00011836, -0x00011835, -0x00011833, -0x00011832, -0x00011830, -0x0001182f, -0x0001182e, -0x0001182d, -0x0001182c, -0x0001182b, -0x0001182a, -0x00011828, -0x00011827, -0x00011826, -0x00011825, -0x00011823, -0x00011822, -0x00011821, -0x00011820, -0x0001181f, -0x0001181e, -0x0001181c, -0x0001181b, -0x0001181a, -0x00011819, -0x00011817, -0x00011816, -0x00011815, -0x00011814, -0x00011813, -0x00011812, -0x00011810, -0x0001180f, -0x0001180e, -0x0001180d, -0x0001180c, -0x0001180a, -0x00011809, -0x00011808, -0x00011807, -0x00011805, -0x00011804, -0x00011803, -0x00011802, -0x00011801, -0x00011800, -0x000117ff, -0x000117fd, -0x000117fc, -0x000117fb, -0x000117f9, -0x000117f8, -0x000117f7, -0x000117f6, -0x000117f5, -0x000117f4, -0x000117f3, -0x000117f1, -0x000117f0, -0x000117ef, -0x000117ed, -0x000117ec, -0x000117eb, -0x000117ea, -0x000117e9, -0x000117e8, -0x000117e7, -0x000117e6, -0x000117e4, -0x000117e2, -0x000117e1, -0x000117e0, -0x000117df, -0x000117de, -0x000117dd, -0x000117dc, -0x000117db, -0x000117da, -0x000117d9, -0x000117d6, -0x000117d5, -0x000117d4, -0x000117d3, -0x000117d2, -0x000117d1, -0x000117d0, -0x000117cf, -0x000117ce, -0x000117cd, -0x000117ca, -0x000117c9, -0x000117c8, -0x000117c7, -0x000117c6, -0x000117c4, -0x000117c3, -0x000117c2, -0x000117c1, -0x000117c0, -0x000117bf, -0x000117be, -0x000117bd, -0x000117bb, -0x000117b9, -0x000117b8, -0x000117b7, -0x000117b6, -0x000117b5, -0x000117b4, -0x000117b3, -0x000117b2, -0x000117b1, -0x000117af, -0x000117ae, -0x000117ac, -0x000117ab, -0x000117aa, -0x000117a9, -0x000117a8, -0x000117a7, -0x000117a6, -0x000117a5, -0x000117a3, -0x000117a2, -0x000117a1, -0x0001179f, -0x0001179e, -0x0001179d, -0x0001179c, -0x0001179b, -0x0001179a, -0x00011799, -0x00011797, -0x00011796, -0x00011795, -0x00011794, -0x00011792, -0x00011791, -0x00011790, -0x0001178f, -0x0001178e, -0x0001178d, -0x0001178c, -0x0001178a, -0x00011789, -0x00011788, -0x00011787, -0x00011785, -0x00011784, -0x00011783, -0x00011782, -0x00011781, -0x00011780, -0x0001177e, -0x0001177d, -0x0001177c, -0x0001177b, -0x0001177a, -0x00011779, -0x00011777, -0x00011776, -0x00011775, -0x00011774, -0x00011772, -0x00011771, -0x00011770, -0x0001176f, -0x0001176e, -0x0001176d, -0x0001176c, -0x0001176a, -0x00011769, -0x00011768, -0x00011766, -0x00011765, -0x00011764, -0x00011763, -0x00011762, -0x00011761, -0x00011760, -0x0001175f, -0x0001175d, -0x0001175c, -0x0001175a, -0x00011759, -0x00011758, -0x00011757, -0x00011756, -0x00011755, -0x00011754, -0x00011753, -0x00011752, -0x00011750, -0x0001174e, -0x0001174d, -0x0001174c, -0x0001174b, -0x0001174a, -0x00011749, -0x00011748, -0x00011747, -0x00011746, -0x00011745, -0x00011742, -0x00011741, -0x00011740, -0x0001173f, -0x0001173e, -0x0001173d, -0x0001173c, -0x0001173b, -0x0001173a, -0x00011739, -0x00011738, -0x00011735, -0x00011734, -0x00011733, -0x00011732, -0x00011731, -0x00011730, -0x0001172f, -0x0001172e, -0x0001172d, -0x0001172c, -0x0001172b, -0x00011728, -0x00011727, -0x00011726, -0x00011725, -0x00011724, -0x00011723, -0x00011722, -0x00011721, -0x00011720, -0x0001171f, -0x0001171d, -0x0001171b, -0x0001171a, -0x00011719, -0x00011718, -0x00011717, -0x00011716, -0x00011715, -0x00011714, -0x00011713, -0x00011711, -0x00011710, -0x0001170f, -0x0001170d, -0x0001170c, -0x0001170b, -0x0001170a, -0x00011709, -0x00011708, -0x00011707, -0x00011705, -0x00011704, -0x00011703, -0x00011702, -0x00011700, -0x000116ff, -0x000116fe, -0x000116fd, -0x000116fc, -0x000116fb, -0x000116f9, -0x000116f8, -0x000116f7, -0x000116f6, -0x000116f5, -0x000116f3, -0x000116f2, -0x000116f1, -0x000116f0, -0x000116ef, -0x000116ed, -0x000116ec, -0x000116eb, -0x000116ea, -0x000116e9, -0x000116e8, -0x000116e6, -0x000116e5, -0x000116e4, -0x000116e3, -0x000116e1, -0x000116e0, -0x000116df, -0x000116de, -0x000116dd, -0x000116dc, -0x000116db, -0x000116d9, -0x000116d8, -0x000116d7, -0x000116d5, -0x000116d4, -0x000116d3, -0x000116d2, -0x000116d1, -0x000116d0, -0x000116cf, -0x000116ce, -0x000116cc, -0x000116cb, -0x000116ca, -0x000116c8, -0x000116c7, -0x000116c6, -0x000116c5, -0x000116c4, -0x000116c3, -0x000116c2, -0x000116c1, -0x000116bf, -0x000116be, -0x000116bc, -0x000116bb, -0x000116ba, -0x000116b9, -0x000116b8, -0x000116b7, -0x000116b6, -0x000116b5, -0x000116b4, -0x000116b2, -0x000116b0, -0x000116af, -0x000116ae, -0x000116ad, -0x000116ac, -0x000116ab, -0x000116aa, -0x000116a9, -0x000116a8, -0x000116a7, -0x000116a6, -0x000116a3, -0x000116a2, -0x000116a1, -0x000116a0, -0x0001169f, -0x0001169e, -0x0001169d, -0x0001169c, -0x0001169b, -0x0001169a, -0x00011698, -0x00011696, -0x00011695, -0x00011695, -0x00011693, -0x00011692, -0x00011690, -0x0001168f, -0x0001168e, -0x0001168d, -0x0001168c, -0x0001168b, -0x0001168a, -0x00011689, -0x00011688, -0x00011686, -0x00011684, -0x00011683, -0x00011682, -0x00011681, -0x00011680, -0x0001167f, -0x0001167e, -0x0001167d, -0x0001167c, -0x0001167b, -0x0001167a, -0x00011677, -0x00011676, -0x00011675, -0x00011674, -0x00011673, -0x00011672, -0x00011671, -0x00011670, -0x0001166f, -0x0001166e, -0x0001166d, -0x0001166a, -0x00011669, -0x00011668, -0x00011667, -0x00011666, -0x00011665, -0x00011664, -0x00011663, -0x00011662, -0x00011661, -0x00011660, -0x0001165e, -0x0001165c, -0x0001165b, -0x0001165a, -0x00011659, -0x00011658, -0x00011657, -0x00011656, -0x00011655, -0x00011654, -0x00011653, -0x00011651, -0x00011650, -0x0001164e, -0x0001164d, -0x0001164c, -0x0001164b, -0x0001164a, -0x00011649, -0x00011648, -0x00011647, -0x00011646, -0x00011644, -0x00011643, -0x00011641, -0x00011640, -0x0001163f, -0x0001163e, -0x0001163d, -0x0001163c, -0x0001163b, -0x0001163a, -0x00011638, -0x00011637, -0x00011636, -0x00011635, -0x00011633, -0x00011632, -0x00011631, -0x00011630, -0x0001162f, -0x0001162e, -0x0001162d, -0x0001162b, -0x0001162a, -0x00011629, -0x00011628, -0x00011627, -0x00011625, -0x00011624, -0x00011623, -0x00011622, -0x00011621, -0x0001161f, -0x0001161e, -0x0001161d, -0x0001161c, -0x0001161b, -0x0001161a, -0x00011618, -0x00011617, -0x00011616, -0x00011615, -0x00011614, -0x00011612, -0x00011611, -0x00011610, -0x0001160f, -0x0001160e, -0x0001160d, -0x0001160c, -0x0001160a, -0x00011609, -0x00011608, -0x00011607, -0x00011605, -0x00011604, -0x00011603, -0x00011602, -0x00011601, -0x00011600, -0x000115ff, -0x000115fe, -0x000115fc, -0x000115fb, -0x000115f9, -0x000115f8, -0x000115f7, -0x000115f6, -0x000115f5, -0x000115f4, -0x000115f3, -0x000115f2, -0x000115f1, -0x000115ef, -0x000115ee, -0x000115ec, -0x000115eb, -0x000115ea, -0x000115e9, -0x000115e8, -0x000115e7, -0x000115e6, -0x000115e5, -0x000115e4, -0x000115e3, -0x000115e1, -0x000115df, -0x000115de, -0x000115dd, -0x000115dc, -0x000115db, -0x000115da, -0x000115d9, -0x000115d8, -0x000115d7, -0x000115d6, -0x000115d3, -0x000115d2, -0x000115d1, -0x000115d0, -0x000115cf, -0x000115ce, -0x000115cd, -0x000115cc, -0x000115cb, -0x000115ca, -0x000115c9, -0x000115c8, -0x000115c5, -0x000115c4, -0x000115c3, -0x000115c2, -0x000115c1, -0x000115c0, -0x000115bf, -0x000115be, -0x000115bd, -0x000115bc, -0x000115bb, -0x000115b9, -0x000115b7, -0x000115b6, -0x000115b5, -0x000115b4, -0x000115b3, -0x000115b2, -0x000115b1, -0x000115b0, -0x000115af, -0x000115ad, -0x000115ac, -0x000115aa, -0x000115a9, -0x000115a8, -0x000115a7, -0x000115a6, -0x000115a5, -0x000115a4, -0x000115a3, -0x000115a2, -0x000115a0, -0x0001159f, -0x0001159e, -0x0001159c, -0x0001159b, -0x0001159a, -0x00011599, -0x00011598, -0x00011597, -0x00011596, -0x00011594, -0x00011593, -0x00011592, -0x00011591, -0x00011590, -0x0001158e, -0x0001158d, -0x0001158c, -0x0001158b, -0x0001158a, -0x00011589, -0x00011587, -0x00011586, -0x00011585, -0x00011584, -0x00011583, -0x00011581, -0x00011580, -0x0001157f, -0x0001157e, -0x0001157d, -0x0001157c, -0x0001157a, -0x00011579, -0x00011578, -0x00011577, -0x00011576, -0x00011575, -0x00011573, -0x00011572, -0x00011571, -0x00011570, -0x0001156e, -0x0001156d, -0x0001156c, -0x0001156b, -0x0001156a, -0x00011569, -0x00011568, -0x00011567, -0x00011566, -0x00011565, -0x00011564, -0x00011561, -0x00011560, -0x0001155f, -0x0001155e, -0x0001155d, -0x0001155c, -0x0001155b, -0x0001155a, -0x00011559, -0x00011558, -0x00011557, -0x00011555, -0x00011553, -0x00011552, -0x00011551, -0x00011550, -0x0001154f, -0x0001154e, -0x0001154d, -0x0001154c, -0x0001154b, -0x0001154a, -0x00011548, -0x00011547, -0x00011545, -0x00011544, -0x00011543, -0x00011542, -0x00011541, -0x00011540, -0x0001153f, -0x0001153e, -0x0001153d, -0x0001153c, -0x0001153a, -0x00011539, -0x00011537, -0x00011536, -0x00011535, -0x00011534, -0x00011533, -0x00011532, -0x00011531, -0x00011530, -0x0001152f, -0x0001152d, -0x0001152c, -0x0001152b, -0x00011529, -0x00011528, -0x00011527, -0x00011526, -0x00011525, -0x00011524, -0x00011523, -0x00011522, -0x00011520, -0x0001151f, -0x0001151e, -0x0001151d, -0x0001151c, -0x0001151a, -0x00011519, -0x00011518, -0x00011517, -0x00011516, -0x00011515, -0x00011513, -0x00011512, -0x00011511, -0x00011510, -0x0001150f, -0x0001150e, -0x0001150c, -0x0001150b, -0x0001150a, -0x00011509, -0x00011508, -0x00011506, -0x00011505, -0x00011504, -0x00011503, -0x00011502, -0x00011501, -0x00011500, -0x000114fe, -0x000114fd, -0x000114fc, -0x000114fb, -0x000114fa, -0x000114f8, -0x000114f7, -0x000114f6, -0x000114f5, -0x000114f4, -0x000114f3, -0x000114f2, -0x000114f0, -0x000114ef, -0x000114ee, -0x000114ed, -0x000114eb, -0x000114ea, -0x000114e9, -0x000114e8, -0x000114e7, -0x000114e6, -0x000114e5, -0x000114e4, -0x000114e2, -0x000114e1, -0x000114e0, -0x000114de, -0x000114dd, -0x000114dc, -0x000114db, -0x000114da, -0x000114d9, -0x000114d8, -0x000114d7, -0x000114d6, -0x000114d4, -0x000114d3, -0x000114d1, -0x000114d0, -0x000114cf, -0x000114ce, -0x000114cd, -0x000114cc, -0x000114cb, -0x000114ca, -0x000114c9, -0x000114c8, -0x000114c7, -0x000114c4, -0x000114c3, -0x000114c2, -0x000114c1, -0x000114c0, -0x000114bf, -0x000114be, -0x000114bd, -0x000114bc, -0x000114bb, -0x000114ba, -0x000114b9, -0x000114b6, -0x000114b5, -0x000114b4, -0x000114b3, -0x000114b2, -0x000114b1, -0x000114b0, -0x000114af, -0x000114ae, -0x000114ad, -0x000114ac, -0x000114ab, -0x000114a8, -0x000114a7, -0x000114a6, -0x000114a5, -0x000114a4, -0x000114a3, -0x000114a2, -0x000114a1, -0x000114a0, -0x0001149f, -0x0001149e, -0x0001149c, -0x0001149a, -0x00011499, -0x00011498, -0x00011497, -0x00011496, -0x00011495, -0x00011494, -0x00011493, -0x00011492, -0x00011491, -0x0001148f, -0x0001148e, -0x0001148c, -0x0001148b, -0x0001148a, -0x00011489, -0x00011488, -0x00011487, -0x00011486, -0x00011485, -0x00011484, -0x00011482, -0x00011481, -0x00011480, -0x0001147f, -0x0001147d, -0x0001147c, -0x0001147b, -0x0001147a, -0x00011479, -0x00011478, -0x00011477, -0x00011476, -0x00011474, -0x00011473, -0x00011472, -0x00011471, -0x0001146f, -0x0001146e, -0x0001146d, -0x0001146c, -0x0001146b, -0x0001146a, -0x00011469, -0x00011467, -0x00011466, -0x00011465, -0x00011464, -0x00011463, -0x00011461, -0x00011460, -0x0001145f, -0x0001145e, -0x0001145d, -0x0001145c, -0x0001145a, -0x00011459, -0x00011458, -0x00011457, -0x00011456, -0x00011455, -0x00011453, -0x00011452, -0x00011451, -0x00011450, -0x0001144f, -0x0001144d, -0x0001144c, -0x0001144b, -0x0001144a, -0x00011449, -0x00011448, -0x00011447, -0x00011445, -0x00011444, -0x00011443, -0x00011442, -0x00011440, -0x0001143f, -0x0001143e, -0x0001143d, -0x0001143c, -0x0001143b, -0x0001143a, -0x00011439, -0x00011438, -0x00011437, -0x00011436, -0x00011435, -0x00011433, -0x00011432, -0x00011431, -0x0001142f, -0x0001142e, -0x0001142d, -0x0001142c, -0x0001142b, -0x0001142a, -0x00011429, -0x00011428, -0x00011427, -0x00011426, -0x00011424, -0x00011423, -0x00011421, -0x00011420, -0x0001141f, -0x0001141e, -0x0001141d, -0x0001141c, -0x0001141b, -0x0001141a, -0x00011419, -0x00011418, -0x00011417, -0x00011414, -0x00011413, -0x00011412, -0x00011411, -0x00011410, -0x0001140f, -0x0001140e, -0x0001140d, -0x0001140c, -0x0001140b, -0x0001140a, -0x00011409, -0x00011406, -0x00011405, -0x00011404, -0x00011403, -0x00011402, -0x00011401, -0x00011400, -0x000113ff, -0x000113fe, -0x000113fd, -0x000113fc, -0x000113fb, -0x000113fa, -0x000113f7, -0x000113f6, -0x000113f5, -0x000113f4, -0x000113f3, -0x000113f2, -0x000113f1, -0x000113f0, -0x000113ef, -0x000113ee, -0x000113ed, -0x000113ec, -0x000113ea, -0x000113e8, -0x000113e7, -0x000113e6, -0x000113e5, -0x000113e4, -0x000113e3, -0x000113e2, -0x000113e1, -0x000113e0, -0x000113df, -0x000113de, -0x000113dc, -0x000113db, -0x000113d9, -0x000113d8, -0x000113d7, -0x000113d6, -0x000113d5, -0x000113d4, -0x000113d3, -0x000113d2, -0x000113d1, -0x000113cf, -0x000113ce, -0x000113cd, -0x000113cc, -0x000113ca, -0x000113c9, -0x000113c8, -0x000113c7, -0x000113c6, -0x000113c5, -0x000113c4, -0x000113c3, -0x000113c1, -0x000113c0, -0x000113bf, -0x000113be, -0x000113bc, -0x000113bb, -0x000113ba, -0x000113b9, -0x000113b8, -0x000113b7, -0x000113b6, -0x000113b5, -0x000113b3, -0x000113b2, -0x000113b1, -0x000113b0, -0x000113af, -0x000113ad, -0x000113ac, -0x000113ab, -0x000113aa, -0x000113a9, -0x000113a8, -0x000113a7, -0x000113a5, -0x000113a4, -0x000113a3, -0x000113a1, -0x000113a0, -0x0001139f, -0x0001139e, -0x0001139d, -0x0001139c, -0x0001139b, -0x0001139a, -0x00011399, -0x00011397, -0x00011396, -0x00011395, -0x00011394, -0x00011392, -0x00011391, -0x00011390, -0x0001138f, -0x0001138e, -0x0001138d, -0x0001138c, -0x0001138b, -0x0001138a, -0x00011388, -0x00011387, -0x00011386, -0x00011385, -0x00011384, -0x00011382, -0x00011381, -0x00011380, -0x0001137f, -0x0001137e, -0x0001137d, -0x0001137c, -0x0001137a, -0x00011379, -0x00011378, -0x00011377, -0x00011376, -0x00011375, -0x00011373, -0x00011372, -0x00011371, -0x00011370, -0x0001136f, -0x0001136e, -0x0001136c, -0x0001136b, -0x0001136a, -0x00011369, -0x00011368, -0x00011367, -0x00011366, -0x00011365, -0x00011363, -0x00011362, -0x00011361, -0x00011360, -0x0001135f, -0x0001135d, -0x0001135c, -0x0001135b, -0x0001135a, -0x00011359, -0x00011358, -0x00011357, -0x00011356, -0x00011354, -0x00011353, -0x00011352, -0x00011351, -0x0001134f, -0x0001134e, -0x0001134d, -0x0001134c, -0x0001134b, -0x0001134a, -0x00011349, -0x00011348, -0x00011347, -0x00011346, -0x00011344, -0x00011343, -0x00011342, -0x00011340, -0x0001133f, -0x0001133e, -0x0001133d, -0x0001133c, -0x0001133b, -0x0001133a, -0x00011339, -0x00011338, -0x00011337, -0x00011335, -0x00011334, -0x00011332, -0x00011331, -0x00011330, -0x0001132f, -0x0001132e, -0x0001132d, -0x0001132c, -0x0001132b, -0x0001132a, -0x00011329, -0x00011328, -0x00011327, -0x00011325, -0x00011323, -0x00011322, -0x00011321, -0x00011320, -0x0001131f, -0x0001131e, -0x0001131d, -0x0001131c, -0x0001131b, -0x0001131a, -0x00011319, -0x00011318, -0x00011315, -0x00011314, -0x00011313, -0x00011312, -0x00011311, -0x00011310, -0x0001130f, -0x0001130e, -0x0001130d, -0x0001130c, -0x0001130b, -0x0001130a, -0x00011309, -0x00011308, -0x00011305, -0x00011304, -0x00011303, -0x00011302, -0x00011301, -0x00011300, -0x000112ff, -0x000112fe, -0x000112fd, -0x000112fc, -0x000112fb, -0x000112fa, -0x000112f8, -0x000112f6, -0x000112f5, -0x000112f4, -0x000112f3, -0x000112f2, -0x000112f1, -0x000112f0, -0x000112ef, -0x000112ee, -0x000112ed, -0x000112ec, -0x000112eb, -0x000112e9, -0x000112e8, -0x000112e6, -0x000112e5, -0x000112e4, -0x000112e3, -0x000112e2, -0x000112e1, -0x000112e0, -0x000112df, -0x000112de, -0x000112dd, -0x000112db, -0x000112da, -0x000112d9, -0x000112d7, -0x000112d6, -0x000112d5, -0x000112d4, -0x000112d3, -0x000112d2, -0x000112d1, -0x000112d0, -0x000112cf, -0x000112ce, -0x000112cc, -0x000112cb, -0x000112ca, -0x000112c9, -0x000112c7, -0x000112c6, -0x000112c5, -0x000112c4, -0x000112c3, -0x000112c2, -0x000112c1, -0x000112c0, -0x000112be, -0x000112bd, -0x000112bc, -0x000112bb, -0x000112ba, -0x000112b8, -0x000112b7, -0x000112b6, -0x000112b5, -0x000112b4, -0x000112b3, -0x000112b2, -0x000112b1, -0x000112af, -0x000112ae, -0x000112ad, -0x000112ac, -0x000112ab, -0x000112a9, -0x000112a8, -0x000112a7, -0x000112a6, -0x000112a5, -0x000112a4, -0x000112a3, -0x000112a1, -0x000112a0, -0x0001129f, -0x0001129e, -0x0001129d, -0x0001129c, -0x0001129b, -0x00011299, -0x00011298, -0x00011297, -0x00011296, -0x00011295, -0x00011294, -0x00011292, -0x00011291, -0x00011290, -0x0001128f, -0x0001128e, -0x0001128d, -0x0001128c, -0x0001128a, -0x00011289, -0x00011288, -0x00011287, -0x00011286, -0x00011284, -0x00011283, -0x00011282, -0x00011281, -0x00011280, -0x0001127f, -0x0001127d, -0x0001127c, -0x0001127b, -0x0001127a, -0x00011279, -0x00011278, -0x00011277, -0x00011276, -0x00011275, -0x00011274, -0x00011273, -0x00011271, -0x00011270, -0x0001126f, -0x0001126d, -0x0001126c, -0x0001126b, -0x0001126a, -0x00011269, -0x00011268, -0x00011267, -0x00011266, -0x00011265, -0x00011264, -0x00011262, -0x00011261, -0x00011260, -0x0001125f, -0x0001125d, -0x0001125c, -0x0001125b, -0x0001125a, -0x00011259, -0x00011258, -0x00011257, -0x00011256, -0x00011255, -0x00011253, -0x00011252, -0x00011251, -0x00011250, -0x0001124f, -0x0001124d, -0x0001124c, -0x0001124b, -0x0001124a, -0x00011249, -0x00011248, -0x00011247, -0x00011246, -0x00011245, -0x00011243, -0x00011242, -0x00011241, -0x00011240, -0x0001123f, -0x0001123d, -0x0001123c, -0x0001123b, -0x0001123a, -0x00011239, -0x00011238, -0x00011237, -0x00011236, -0x00011234, -0x00011233, -0x00011232, -0x00011231, -0x00011230, -0x0001122f, -0x0001122e, -0x0001122c, -0x0001122b, -0x0001122a, -0x00011229, -0x00011228, -0x00011227, -0x00011225, -0x00011224, -0x00011223, -0x00011222, -0x00011221, -0x00011220, -0x0001121f, -0x0001121e, -0x0001121c, -0x0001121b, -0x0001121a, -0x00011219, -0x00011218, -0x00011216, -0x00011215, -0x00011214, -0x00011213, -0x00011212, -0x00011211, -0x00011210, -0x0001120f, -0x0001120e, -0x0001120c, -0x0001120b, -0x0001120a, -0x00011209, -0x00011207, -0x00011206, -0x00011205, -0x00011204, -0x00011203, -0x00011202, -0x00011201, -0x00011200, -0x000111ff, -0x000111fe, -0x000111fc, -0x000111fb, -0x000111fa, -0x000111f9, -0x000111f7, -0x000111f6, -0x000111f5, -0x000111f4, -0x000111f3, -0x000111f2, -0x000111f1, -0x000111f0, -0x000111ef, -0x000111ee, -0x000111ed, -0x000111eb, -0x000111ea, -0x000111e8, -0x000111e7, -0x000111e6, -0x000111e5, -0x000111e4, -0x000111e3, -0x000111e2, -0x000111e1, -0x000111e0, -0x000111df, -0x000111de, -0x000111dd, -0x000111db, -0x000111d9, -0x000111d8, -0x000111d7, -0x000111d6, -0x000111d5, -0x000111d4, -0x000111d3, -0x000111d2, -0x000111d1, -0x000111d0, -0x000111cf, -0x000111ce, -0x000111cd, -0x000111ca, -0x000111c9, -0x000111c8, -0x000111c7, -0x000111c6, -0x000111c5, -0x000111c4, -0x000111c3, -0x000111c2, -0x000111c1, -0x000111c0, -0x000111bf, -0x000111be, -0x000111bd, -0x000111ba, -0x000111b9, -0x000111b8, -0x000111b7, -0x000111b6, -0x000111b5, -0x000111b4, -0x000111b3, -0x000111b2, -0x000111b1, -0x000111b0, -0x000111af, -0x000111ae, -0x000111ad, -0x000111aa, -0x000111a9, -0x000111a8, -0x000111a7, -0x000111a6, -0x000111a5, -0x000111a4, -0x000111a3, -0x000111a2, -0x000111a1, -0x000111a0, -0x0001119f, -0x0001119e, -0x0001119c, -0x0001119b, -0x00011199, -0x00011198, -0x00011197, -0x00011196, -0x00011195, -0x00011194, -0x00011193, -0x00011192, -0x00011191, -0x00011190, -0x0001118f, -0x0001118d, -0x0001118c, -0x0001118b, -0x00011189, -0x00011188, -0x00011187, -0x00011186, -0x00011185, -0x00011184, -0x00011183, -0x00011182, -0x00011181, -0x00011180, -0x0001117e, -0x0001117d, -0x0001117c, -0x0001117b, -0x00011179, -0x00011178, -0x00011177, -0x00011176, -0x00011175, -0x00011174, -0x00011173, -0x00011172, -0x00011171, -0x00011170, -0x0001116e, -0x0001116d, -0x0001116c, -0x0001116b, -0x00011169, -0x00011168, -0x00011167, -0x00011166, -0x00011165, -0x00011164, -0x00011163, -0x00011162, -0x00011161, -0x0001115f, -0x0001115e, -0x0001115d, -0x0001115c, -0x0001115b, -0x0001115a, -0x00011159, -0x00011157, -0x00011156, -0x00011155, -0x00011154, -0x00011153, -0x00011152, -0x00011151, -0x00011150, -0x0001114f, -0x0001114e, -0x0001114c, -0x0001114b, -0x0001114a, -0x00011149, -0x00011147, -0x00011146, -0x00011145, -0x00011144, -0x00011143, -0x00011142, -0x00011141, -0x00011140, -0x0001113f, -0x0001113e, -0x0001113d, -0x0001113b, -0x0001113a, -0x00011139, -0x00011137, -0x00011136, -0x00011135, -0x00011134, -0x00011133, -0x00011132, -0x00011131, -0x00011130, -0x0001112f, -0x0001112e, -0x0001112d, -0x0001112c, -0x0001112a, -0x00011129, -0x00011127, -0x00011126, -0x00011125, -0x00011124, -0x00011123, -0x00011122, -0x00011121, -0x00011120, -0x0001111f, -0x0001111e, -0x0001111d, -0x0001111c, -0x0001111b, -0x00011119, -0x00011117, -0x00011116, -0x00011115, -0x00011114, -0x00011113, -0x00011112, -0x00011111, -0x00011110, -0x0001110f, -0x0001110e, -0x0001110d, -0x0001110c, -0x0001110b, -0x0001110a, -0x00011107, -0x00011106, -0x00011105, -0x00011104, -0x00011103, -0x00011102, -0x00011101, -0x00011100, -0x000110ff, -0x000110fe, -0x000110fd, -0x000110fc, -0x000110fb, -0x000110fa, -0x000110f9, -0x000110f6, -0x000110f5, -0x000110f4, -0x000110f3, -0x000110f2, -0x000110f1, -0x000110f0, -0x000110ef, -0x000110ee, -0x000110ed, -0x000110ec, -0x000110eb, -0x000110ea, -0x000110e9, -0x000110e7, -0x000110e5, -0x000110e4, -0x000110e3, -0x000110e2, -0x000110e1, -0x000110e0, -0x000110df, -0x000110de, -0x000110dd, -0x000110dc, -0x000110db, -0x000110da, -0x000110d9, -0x000110d7, -0x000110d6, -0x000110d4, -0x000110d3, -0x000110d2, -0x000110d1, -0x000110d0, -0x000110cf, -0x000110ce, -0x000110cd, -0x000110cc, -0x000110cb, -0x000110ca, -0x000110c8, -0x000110c7, -0x000110c6, -0x000110c5, -0x000110c4, -0x000110c2, -0x000110c1, -0x000110c0, -0x000110bf, -0x000110bd, -0x000110bc, -0x000110bb, -0x000110ba, -0x000110b9, -0x000110b8, -0x000110b7, -0x000110b6, -0x000110b5, -0x000110b4, -0x000110b3, -0x000110b1, -0x000110b0, -0x000110af, -0x000110ae, -0x000110ad, -0x000110ab, -0x000110aa, -0x000110a9, -0x000110a8, -0x000110a7, -0x000110a6, -0x000110a5, -0x000110a4, -0x000110a3, -0x000110a2, -0x000110a0, -0x0001109f, -0x0001109e, -0x0001109d, -0x0001109c, -0x0001109b, -0x00011099, -0x00011098, -0x00011097, -0x00011096, -0x00011095, -0x00011094, -0x00011093, -0x00011092, -0x00011091, -0x0001108f, -0x0001108e, -0x0001108d, -0x0001108c, -0x0001108b, -0x0001108a, -0x00011089, -0x00011087, -0x00011086, -0x00011085, -0x00011084, -0x00011083, -0x00011082, -0x00011081, -0x00011080, -0x0001107e, -0x0001107d, -0x0001107c, -0x0001107b, -0x0001107a, -0x00011079, -0x00011078, -0x00011077, -0x00011075, -0x00011074, -0x00011073, -0x00011072, -0x00011071, -0x00011070, -0x0001106f, -0x0001106d, -0x0001106c, -0x0001106b, -0x0001106a, -0x00011069, -0x00011068, -0x00011067, -0x00011066, -0x00011065, -0x00011063, -0x00011062, -0x00011061, -0x00011060, -0x0001105f, -0x0001105e, -0x0001105c, -0x0001105b, -0x0001105a, -0x00011059, -0x00011058, -0x00011057, -0x00011056, -0x00011055, -0x00011054, -0x00011053, -0x00011051, -0x00011050, -0x0001104f, -0x0001104e, -0x0001104d, -0x0001104b, -0x0001104a, -0x00011049, -0x00011048, -0x00011047, -0x00011046, -0x00011045, -0x00011044, -0x00011043, -0x00011042, -0x00011041, -0x0001103f, -0x0001103e, -0x0001103d, -0x0001103c, -0x0001103a, -0x00011039, -0x00011038, -0x00011037, -0x00011036, -0x00011035, -0x00011034, -0x00011033, -0x00011032, -0x00011031, -0x00011030, -0x0001102f, -0x0001102d, -0x0001102c, -0x0001102b, -0x00011029, -0x00011028, -0x00011027, -0x00011026, -0x00011025, -0x00011024, -0x00011023, -0x00011022, -0x00011021, -0x00011020, -0x0001101f, -0x0001101e, -0x0001101d, -0x0001101b, -0x0001101a, -0x00011018, -0x00011017, -0x00011016, -0x00011015, -0x00011014, -0x00011013, -0x00011012, -0x00011011, -0x00011010, -0x0001100f, -0x0001100e, -0x0001100d, -0x0001100c, -0x0001100b, -0x00011009, -0x00011007, -0x00011006, -0x00011005, -0x00011004, -0x00011003, -0x00011002, -0x00011001, -0x00011000, -0x00010fff, -0x00010ffe, -0x00010ffd, -0x00010ffc, -0x00010ffb, -0x00010ffa, -0x00010ff9, -0x00010ff6, -0x00010ff5, -0x00010ff4, -0x00010ff3, -0x00010ff2, -0x00010ff1, -0x00010ff0, -0x00010fef, -0x00010fee, -0x00010fed, -0x00010fec, -0x00010feb, -0x00010fea, -0x00010fe9, -0x00010fe8, -0x00010fe7, -0x00010fe4, -0x00010fe3, -0x00010fe2, -0x00010fe1, -0x00010fe0, -0x00010fdf, -0x00010fde, -0x00010fdd, -0x00010fdc, -0x00010fdb, -0x00010fda, -0x00010fd9, -0x00010fd8, -0x00010fd7, -0x00010fd6, -0x00010fd4, -0x00010fd2, -0x00010fd1, -0x00010fd0, -0x00010fcf, -0x00010fce, -0x00010fcd, -0x00010fcc, -0x00010fcb, -0x00010fca, -0x00010fc9, -0x00010fc8, -0x00010fc7, -0x00010fc6, -0x00010fc5, -0x00010fc3, -0x00010fc2, -0x00010fc0, -0x00010fbf, -0x00010fbe, -0x00010fbd, -0x00010fbc, -0x00010fbb, -0x00010fba, -0x00010fb9, -0x00010fb8, -0x00010fb7, -0x00010fb6, -0x00010fb5, -0x00010fb4, -0x00010fb2, -0x00010fb1, -0x00010fb0, -0x00010fae, -0x00010fad, -0x00010fac, -0x00010fab, -0x00010faa, -0x00010fa9, -0x00010fa8, -0x00010fa6, -0x00010fa5, -0x00010fa4, -0x00010fa3, -0x00010fa2, -0x00010fa1, -0x00010fa0, -0x00010f9f, -0x00010f9e, -0x00010f9d, -0x00010f9c, -0x00010f9b, -0x00010f99, -0x00010f97, -0x00010f96, -0x00010f95, -0x00010f94, -0x00010f93, -0x00010f92, -0x00010f91, -0x00010f90, -0x00010f8f, -0x00010f8e, -0x00010f8d, -0x00010f8c, -0x00010f8b, -0x00010f8a, -0x00010f89, -0x00010f88, -0x00010f86, -0x00010f84, -0x00010f83, -0x00010f82, -0x00010f81, -0x00010f80, -0x00010f7f, -0x00010f7e, -0x00010f7d, -0x00010f7c, -0x00010f7b, -0x00010f7a, -0x00010f79, -0x00010f78, -0x00010f77, -0x00010f76, -0x00010f74, -0x00010f73, -0x00010f71, -0x00010f70, -0x00010f6f, -0x00010f6e, -0x00010f6d, -0x00010f6c, -0x00010f6b, -0x00010f6a, -0x00010f69, -0x00010f68, -0x00010f67, -0x00010f66, -0x00010f65, -0x00010f64, -0x00010f62, -0x00010f61, -0x00010f60, -0x00010f5f, -0x00010f5d, -0x00010f5c, -0x00010f5b, -0x00010f5a, -0x00010f59, -0x00010f58, -0x00010f57, -0x00010f56, -0x00010f55, -0x00010f54, -0x00010f53, -0x00010f52, -0x00010f50, -0x00010f4f, -0x00010f4e, -0x00010f4d, -0x00010f4c, -0x00010f4a, -0x00010f49, -0x00010f48, -0x00010f47, -0x00010f46, -0x00010f45, -0x00010f44, -0x00010f43, -0x00010f42, -0x00010f41, -0x00010f40, -0x00010f3e, -0x00010f3d, -0x00010f3c, -0x00010f3b, -0x00010f3a, -0x00010f39, -0x00010f37, -0x00010f36, -0x00010f35, -0x00010f34, -0x00010f33, -0x00010f32, -0x00010f31, -0x00010f30, -0x00010f2f, -0x00010f2e, -0x00010f2c, -0x00010f2b, -0x00010f2a, -0x00010f29, -0x00010f28, -0x00010f27, -0x00010f26, -0x00010f24, -0x00010f23, -0x00010f22, -0x00010f21, -0x00010f20, -0x00010f1f, -0x00010f1e, -0x00010f1d, -0x00010f1c, -0x00010f1a, -0x00010f19, -0x00010f18, -0x00010f17, -0x00010f16, -0x00010f15, -0x00010f14, -0x00010f13, -0x00010f11, -0x00010f10, -0x00010f0f, -0x00010f0e, -0x00010f0d, -0x00010f0c, -0x00010f0b, -0x00010f0a, -0x00010f08, -0x00010f07, -0x00010f06, -0x00010f05, -0x00010f04, -0x00010f03, -0x00010f02, -0x00010f01, -0x00010f00, -0x00010efe, -0x00010efd, -0x00010efc, -0x00010efb, -0x00010efa, -0x00010ef9, -0x00010ef8, -0x00010ef6, -0x00010ef5, -0x00010ef4, -0x00010ef3, -0x00010ef2, -0x00010ef1, -0x00010ef0, -0x00010eef, -0x00010eee, -0x00010eed, -0x00010eeb, -0x00010eea, -0x00010ee9, -0x00010ee8, -0x00010ee7, -0x00010ee6, -0x00010ee4, -0x00010ee3, -0x00010ee2, -0x00010ee1, -0x00010ee0, -0x00010edf, -0x00010ede, -0x00010edd, -0x00010edc, -0x00010edb, -0x00010eda, -0x00010ed8, -0x00010ed7, -0x00010ed6, -0x00010ed5, -0x00010ed4, -0x00010ed2, -0x00010ed1, -0x00010ed0, -0x00010ecf, -0x00010ece, -0x00010ecd, -0x00010ecc, -0x00010ecb, -0x00010eca, -0x00010ec9, -0x00010ec8, -0x00010ec7, -0x00010ec5, -0x00010ec4, -0x00010ec3, -0x00010ec2, -0x00010ec0, -0x00010ebf, -0x00010ebe, -0x00010ebd, -0x00010ebc, -0x00010ebb, -0x00010eba, -0x00010eb9, -0x00010eb8, -0x00010eb7, -0x00010eb6, -0x00010eb5, -0x00010eb4, -0x00010eb2, -0x00010eb1, -0x00010eb0, -0x00010eae, -0x00010ead, -0x00010eac, -0x00010eab, -0x00010eaa, -0x00010ea9, -0x00010ea8, -0x00010ea7, -0x00010ea6, -0x00010ea5, -0x00010ea4, -0x00010ea3, -0x00010ea2, -0x00010ea1, -0x00010e9f, -0x00010e9e, -0x00010e9c, -0x00010e9b, -0x00010e9a, -0x00010e99, -0x00010e98, -0x00010e97, -0x00010e96, -0x00010e95, -0x00010e94, -0x00010e93, -0x00010e92, -0x00010e91, -0x00010e90, -0x00010e8f, -0x00010e8e, -0x00010e8c, -0x00010e8a, -0x00010e89, -0x00010e88, -0x00010e88, -0x00010e86, -0x00010e85, -0x00010e84, -0x00010e83, -0x00010e82, -0x00010e81, -0x00010e80, -0x00010e7f, -0x00010e7e, -0x00010e7c, -0x00010e7b, -0x00010e7a, -0x00010e79, -0x00010e78, -0x00010e77, -0x00010e76, -0x00010e75, -0x00010e74, -0x00010e72, -0x00010e71, -0x00010e70, -0x00010e6f, -0x00010e6e, -0x00010e6d, -0x00010e6c, -0x00010e6b, -0x00010e69, -0x00010e68, -0x00010e67, -0x00010e66, -0x00010e65, -0x00010e64, -0x00010e63, -0x00010e62, -0x00010e61, -0x00010e60, -0x00010e5e, -0x00010e5d, -0x00010e5c, -0x00010e5b, -0x00010e5a, -0x00010e59, -0x00010e58, -0x00010e56, -0x00010e55, -0x00010e54, -0x00010e53, -0x00010e52, -0x00010e51, -0x00010e50, -0x00010e4f, -0x00010e4e, -0x00010e4d, -0x00010e4c, -0x00010e4a, -0x00010e49, -0x00010e48, -0x00010e47, -0x00010e46, -0x00010e45, -0x00010e44, -0x00010e42, -0x00010e41, -0x00010e40, -0x00010e3f, -0x00010e3e, -0x00010e3d, -0x00010e3c, -0x00010e3b, -0x00010e3a, -0x00010e39, -0x00010e38, -0x00010e37, -0x00010e35, -0x00010e34, -0x00010e33, -0x00010e32, -0x00010e31, -0x00010e2f, -0x00010e2e, -0x00010e2d, -0x00010e2c, -0x00010e2b, -0x00010e2a, -0x00010e29, -0x00010e28, -0x00010e27, -0x00010e26, -0x00010e25, -0x00010e24, -0x00010e23, -0x00010e21, -0x00010e20, -0x00010e1f, -0x00010e1e, -0x00010e1c, -0x00010e1b, -0x00010e1a, -0x00010e19, -0x00010e18, -0x00010e17, -0x00010e16, -0x00010e15, -0x00010e14, -0x00010e13, -0x00010e12, -0x00010e11, -0x00010e10, -0x00010e0f, -0x00010e0d, -0x00010e0c, -0x00010e0b, -0x00010e09, -0x00010e08, -0x00010e07, -0x00010e06, -0x00010e05, -0x00010e04, -0x00010e03, -0x00010e02, -0x00010e01, -0x00010e00, -0x00010dff, -0x00010dfe, -0x00010dfd, -0x00010dfc, -0x00010dfb, -0x00010dfa, -0x00010df8, -0x00010df7, -0x00010df5, -0x00010df4, -0x00010df3, -0x00010df2, -0x00010df1, -0x00010df0, -0x00010def, -0x00010dee, -0x00010ded, -0x00010dec, -0x00010deb, -0x00010dea, -0x00010de9, -0x00010de8, -0x00010de7, -0x00010de6, -0x00010de4, -0x00010de2, -0x00010de1, -0x00010de0, -0x00010ddf, -0x00010dde, -0x00010ddd, -0x00010ddc, -0x00010ddb, -0x00010dda, -0x00010dd9, -0x00010dd8, -0x00010dd7, -0x00010dd6, -0x00010dd5, -0x00010dd4, -0x00010dd3, -0x00010dd2, -0x00010dcf, -0x00010dce, -0x00010dcd, -0x00010dcc, -0x00010dcb, -0x00010dca, -0x00010dc9, -0x00010dc8, -0x00010dc7, -0x00010dc6, -0x00010dc5, -0x00010dc4, -0x00010dc3, -0x00010dc2, -0x00010dc1, -0x00010dc0, -0x00010dbf, -0x00010dbe, -0x00010dbb, -0x00010dba, -0x00010db9, -0x00010db8, -0x00010db7, -0x00010db6, -0x00010db5, -0x00010db4, -0x00010db3, -0x00010db2, -0x00010db1, -0x00010db0, -0x00010daf, -0x00010dae, -0x00010dad, -0x00010dac, -0x00010dab, -0x00010daa, -0x00010da8, -0x00010da6, -0x00010da5, -0x00010da4, -0x00010da3, -0x00010da2, -0x00010da1, -0x00010da0, -0x00010d9f, -0x00010d9e, -0x00010d9d, -0x00010d9c, -0x00010d9b, -0x00010d9a, -0x00010d99, -0x00010d98, -0x00010d97, -0x00010d95, -0x00010d94, -0x00010d92, -0x00010d91, -0x00010d90, -0x00010d8f, -0x00010d8e, -0x00010d8d, -0x00010d8c, -0x00010d8b, -0x00010d8a, -0x00010d89, -0x00010d88, -0x00010d87, -0x00010d86, -0x00010d85, -0x00010d84, -0x00010d82, -0x00010d81, -0x00010d80, -0x00010d7e, -0x00010d7d, -0x00010d7c, -0x00010d7b, -0x00010d7a, -0x00010d79, -0x00010d78, -0x00010d77, -0x00010d76, -0x00010d75, -0x00010d74, -0x00010d73, -0x00010d72, -0x00010d71, -0x00010d70, -0x00010d6e, -0x00010d6d, -0x00010d6c, -0x00010d6b, -0x00010d6a, -0x00010d69, -0x00010d68, -0x00010d67, -0x00010d65, -0x00010d64, -0x00010d63, -0x00010d62, -0x00010d61, -0x00010d60, -0x00010d5f, -0x00010d5e, -0x00010d5c, -0x00010d5b, -0x00010d5a, -0x00010d59, -0x00010d58, -0x00010d57, -0x00010d56, -0x00010d55, -0x00010d54, -0x00010d53, -0x00010d52, -0x00010d51, -0x00010d4f, -0x00010d4e, -0x00010d4d, -0x00010d4c, -0x00010d4b, -0x00010d4a, -0x00010d49, -0x00010d47, -0x00010d46, -0x00010d45, -0x00010d44, -0x00010d43, -0x00010d42, -0x00010d41, -0x00010d40, -0x00010d3f, -0x00010d3e, -0x00010d3d, -0x00010d3c, -0x00010d3b, -0x00010d39, -0x00010d38, -0x00010d37, -0x00010d36, -0x00010d35, -0x00010d33, -0x00010d32, -0x00010d31, -0x00010d30, -0x00010d2f, -0x00010d2e, -0x00010d2d, -0x00010d2c, -0x00010d2b, -0x00010d2a, -0x00010d29, -0x00010d28, -0x00010d27, -0x00010d26, -0x00010d25, -0x00010d23, -0x00010d22, -0x00010d21, -0x00010d20, -0x00010d1e, -0x00010d1d, -0x00010d1c, -0x00010d1b, -0x00010d1a, -0x00010d19, -0x00010d18, -0x00010d17, -0x00010d16, -0x00010d15, -0x00010d14, -0x00010d13, -0x00010d12, -0x00010d11, -0x00010d10, -0x00010d0e, -0x00010d0d, -0x00010d0c, -0x00010d0b, -0x00010d09, -0x00010d08, -0x00010d07, -0x00010d06, -0x00010d05, -0x00010d04, -0x00010d03, -0x00010d02, -0x00010d01, -0x00010d00, -0x00010cff, -0x00010cfe, -0x00010cfd, -0x00010cfc, -0x00010cfb, -0x00010cfa, -0x00010cf8, -0x00010cf7, -0x00010cf5, -0x00010cf4, -0x00010cf3, -0x00010cf2, -0x00010cf1, -0x00010cf0, -0x00010cef, -0x00010cee, -0x00010ced, -0x00010cec, -0x00010ceb, -0x00010cea, -0x00010ce9, -0x00010ce8, -0x00010ce7, -0x00010ce6, -0x00010ce5, -0x00010ce4, -0x00010ce2, -0x00010ce0, -0x00010cdf, -0x00010cde, -0x00010cdd, -0x00010cdc, -0x00010cdb, -0x00010cda, -0x00010cd9, -0x00010cd8, -0x00010cd7, -0x00010cd6, -0x00010cd5, -0x00010cd4, -0x00010cd3, -0x00010cd2, -0x00010cd1, -0x00010cd0, -0x00010ccf, -0x00010ccd, -0x00010ccb, -0x00010cca, -0x00010cc9, -0x00010cc8, -0x00010cc7, -0x00010cc6, -0x00010cc5, -0x00010cc4, -0x00010cc3, -0x00010cc2, -0x00010cc1, -0x00010cc0, -0x00010cbf, -0x00010cbe, -0x00010cbd, -0x00010cbc, -0x00010cbb, -0x00010cba, -0x00010cb9, -0x00010cb6, -0x00010cb5, -0x00010cb4, -0x00010cb3, -0x00010cb2, -0x00010cb1, -0x00010cb0, -0x00010caf, -0x00010cae, -0x00010cad, -0x00010cac, -0x00010cab, -0x00010caa, -0x00010ca9, -0x00010ca8, -0x00010ca7, -0x00010ca6, -0x00010ca5, -0x00010ca4, -0x00010ca2, -0x00010ca0, -0x00010c9f, -0x00010c9e, -0x00010c9d, -0x00010c9c, -0x00010c9b, -0x00010c9a, -0x00010c99, -0x00010c98, -0x00010c97, -0x00010c96, -0x00010c95, -0x00010c94, -0x00010c93, -0x00010c92, -0x00010c91, -0x00010c90, -0x00010c8f, -0x00010c8d, -0x00010c8b, -0x00010c8a, -0x00010c89, -0x00010c88, -0x00010c87, -0x00010c86, -0x00010c85, -0x00010c84, -0x00010c83, -0x00010c82, -0x00010c81, -0x00010c80, -0x00010c7f, -0x00010c7e, -0x00010c7d, -0x00010c7c, -0x00010c7b, -0x00010c7a, -0x00010c78, -0x00010c77, -0x00010c75, -0x00010c74, -0x00010c73, -0x00010c72, -0x00010c71, -0x00010c70, -0x00010c6f, -0x00010c6e, -0x00010c6d, -0x00010c6c, -0x00010c6b, -0x00010c6a, -0x00010c69, -0x00010c68, -0x00010c67, -0x00010c66, -0x00010c64, -0x00010c63, -0x00010c62, -0x00010c61, -0x00010c5f, -0x00010c5e, -0x00010c5d, -0x00010c5c, -0x00010c5b, -0x00010c5a, -0x00010c59, -0x00010c58, -0x00010c57, -0x00010c56, -0x00010c55, -0x00010c54, -0x00010c53, -0x00010c52, -0x00010c51, -0x00010c50, -0x00010c4f, -0x00010c4d, -0x00010c4c, -0x00010c4b, -0x00010c4a, -0x00010c49, -0x00010c48, -0x00010c47, -0x00010c46, -0x00010c44, -0x00010c43, -0x00010c42, -0x00010c41, -0x00010c40, -0x00010c3f, -0x00010c3e, -0x00010c3d, -0x00010c3c, -0x00010c3b, -0x00010c3a, -0x00010c39, -0x00010c37, -0x00010c36, -0x00010c35, -0x00010c34, -0x00010c33, -0x00010c32, -0x00010c31, -0x00010c30, -0x00010c2f, -0x00010c2e, -0x00010c2c, -0x00010c2b, -0x00010c2a, -0x00010c29, -0x00010c28, -0x00010c27, -0x00010c26, -0x00010c25, -0x00010c24, -0x00010c23, -0x00010c22, -0x00010c20, -0x00010c1f, -0x00010c1e, -0x00010c1d, -0x00010c1c, -0x00010c1b, -0x00010c1a, -0x00010c19, -0x00010c18, -0x00010c17, -0x00010c15, -0x00010c14, -0x00010c13, -0x00010c12, -0x00010c11, -0x00010c10, -0x00010c0f, -0x00010c0e, -0x00010c0d, -0x00010c0c, -0x00010c0a, -0x00010c09, -0x00010c08, -0x00010c07, -0x00010c06, -0x00010c05, -0x00010c04, -0x00010c03, -0x00010c02, -0x00010c01, -0x00010c00, -0x00010bfe, -0x00010bfd, -0x00010bfc, -0x00010bfb, -0x00010bfa, -0x00010bf9, -0x00010bf8, -0x00010bf7, -0x00010bf6, -0x00010bf4, -0x00010bf3, -0x00010bf2, -0x00010bf1, -0x00010bf0, -0x00010bef, -0x00010bee, -0x00010bed, -0x00010bec, -0x00010beb, -0x00010bea, -0x00010be9, -0x00010be8, -0x00010be6, -0x00010be5, -0x00010be4, -0x00010be3, -0x00010be2, -0x00010be1, -0x00010be0, -0x00010bdf, -0x00010bdd, -0x00010bdc, -0x00010bdb, -0x00010bda, -0x00010bd9, -0x00010bd8, -0x00010bd7, -0x00010bd6, -0x00010bd5, -0x00010bd4, -0x00010bd3, -0x00010bd2, -0x00010bd1, -0x00010bcf, -0x00010bce, -0x00010bcd, -0x00010bcc, -0x00010bcb, -0x00010bca, -0x00010bc9, -0x00010bc7, -0x00010bc6, -0x00010bc5, -0x00010bc4, -0x00010bc3, -0x00010bc2, -0x00010bc1, -0x00010bc0, -0x00010bbf, -0x00010bbd, -0x00010bbc, -0x00010bbb, -0x00010bba, -0x00010bb9, -0x00010bb8, -0x00010bb7, -0x00010bb5, -0x00010bb4, -0x00010bb3, -0x00010bb2, -0x00010bb1, -0x00010bb0, -0x00010baf, -0x00010bae, -0x00010bad, -0x00010bac, -0x00010bab, -0x00010baa, -0x00010ba9, -0x00010ba8, -0x00010ba7, -0x00010ba6, -0x00010ba5, -0x00010ba3, -0x00010ba2, -0x00010ba1, -0x00010ba0, -0x00010b9f, -0x00010b9d, -0x00010b9c, -0x00010b9b, -0x00010b9a, -0x00010b99, -0x00010b98, -0x00010b97, -0x00010b96, -0x00010b95, -0x00010b94, -0x00010b93, -0x00010b92, -0x00010b91, -0x00010b90, -0x00010b8f, -0x00010b8e, -0x00010b8d, -0x00010b8c, -0x00010b8a, -0x00010b89, -0x00010b88, -0x00010b87, -0x00010b86, -0x00010b84, -0x00010b83, -0x00010b82, -0x00010b81, -0x00010b80, -0x00010b7f, -0x00010b7e, -0x00010b7d, -0x00010b7c, -0x00010b7b, -0x00010b7a, -0x00010b79, -0x00010b78, -0x00010b77, -0x00010b76, -0x00010b75, -0x00010b74, -0x00010b73, -0x00010b71, -0x00010b70, -0x00010b6f, -0x00010b6e, -0x00010b6c, -0x00010b6b, -0x00010b6a, -0x00010b69, -0x00010b68, -0x00010b67, -0x00010b66, -0x00010b65, -0x00010b64, -0x00010b63, -0x00010b62, -0x00010b61, -0x00010b60, -0x00010b5f, -0x00010b5e, -0x00010b5d, -0x00010b5c, -0x00010b5b, -0x00010b5a, -0x00010b58, -0x00010b57, -0x00010b56, -0x00010b54, -0x00010b53, -0x00010b52, -0x00010b51, -0x00010b50, -0x00010b4f, -0x00010b4e, -0x00010b4d, -0x00010b4c, -0x00010b4b, -0x00010b4a, -0x00010b49, -0x00010b48, -0x00010b47, -0x00010b46, -0x00010b45, -0x00010b44, -0x00010b43, -0x00010b42, -0x00010b41, -0x00010b40, -0x00010b3e, -0x00010b3c, -0x00010b3b, -0x00010b3a, -0x00010b39, -0x00010b38, -0x00010b37, -0x00010b36, -0x00010b35, -0x00010b34, -0x00010b33, -0x00010b32, -0x00010b31, -0x00010b30, -0x00010b2f, -0x00010b2e, -0x00010b2d, -0x00010b2c, -0x00010b2b, -0x00010b2a, -0x00010b29, -0x00010b28, -0x00010b27, -0x00010b25, -0x00010b23, -0x00010b22, -0x00010b21, -0x00010b20, -0x00010b1f, -0x00010b1e, -0x00010b1d, -0x00010b1c, -0x00010b1b, -0x00010b1a, -0x00010b19, -0x00010b18, -0x00010b17, -0x00010b16, -0x00010b15, -0x00010b14, -0x00010b13, -0x00010b12, -0x00010b11, -0x00010b10, -0x00010b0f, -0x00010b0e, -0x00010b0b, -0x00010b0a, -0x00010b09, -0x00010b08, -0x00010b07, -0x00010b06, -0x00010b05, -0x00010b04, -0x00010b03, -0x00010b02, -0x00010b01, -0x00010b00, -0x00010aff, -0x00010afe, -0x00010afd, -0x00010afc, -0x00010afb, -0x00010afa, -0x00010af9, -0x00010af8, -0x00010af7, -0x00010af6, -0x00010af5, -0x00010af3, -0x00010af1, -0x00010af0, -0x00010aef, -0x00010aee, -0x00010aed, -0x00010aec, -0x00010aeb, -0x00010aea, -0x00010ae9, -0x00010ae8, -0x00010ae7, -0x00010ae6, -0x00010ae5, -0x00010ae4, -0x00010ae3, -0x00010ae2, -0x00010ae1, -0x00010ae0, -0x00010adf, -0x00010ade, -0x00010add, -0x00010adb, -0x00010ada, -0x00010ad8, -0x00010ad7, -0x00010ad6, -0x00010ad5, -0x00010ad4, -0x00010ad3, -0x00010ad2, -0x00010ad1, -0x00010ad0, -0x00010acf, -0x00010ace, -0x00010acd, -0x00010acc, -0x00010acb, -0x00010aca, -0x00010ac9, -0x00010ac8, -0x00010ac7, -0x00010ac6, -0x00010ac5, -0x00010ac4, -0x00010ac2, -0x00010ac1, -0x00010abf, -0x00010abe, -0x00010abd, -0x00010abc, -0x00010abb, -0x00010aba, -0x00010ab9, -0x00010ab8, -0x00010ab7, -0x00010ab6, -0x00010ab5, -0x00010ab4, -0x00010ab3, -0x00010ab2, -0x00010ab1, -0x00010ab0, -0x00010aaf, -0x00010aae, -0x00010aab, -0x00010aaa, -0x00010aa9, -0x00010aa8, -0x00010aa7, -0x00010aa6, -0x00010aa5, -0x00010aa4, -0x00010aa3, -0x00010aa2, -0x00010aa1, -0x00010aa0, -0x00010a9f, -0x00010a9e, -0x00010a9d, -0x00010a9c, -0x00010a9b, -0x00010a9a, -0x00010a99, -0x00010a98, -0x00010a97, -0x00010a96, -0x00010a95, -0x00010a94, -0x00010a93, -0x00010a90, -0x00010a8f, -0x00010a8e, -0x00010a8d, -0x00010a8c, -0x00010a8b, -0x00010a8a, -0x00010a89, -0x00010a88, -0x00010a87, -0x00010a86, -0x00010a85, -0x00010a84, -0x00010a83, -0x00010a82, -0x00010a81, -0x00010a80, -0x00010a7f, -0x00010a7e, -0x00010a7d, -0x00010a7c, -0x00010a7b, -0x00010a7a, -0x00010a79, -0x00010a77, -0x00010a76, -0x00010a74, -0x00010a73, -0x00010a72, -0x00010a71, -0x00010a70, -0x00010a6f, -0x00010a6e, -0x00010a6d, -0x00010a6c, -0x00010a6b, -0x00010a6a, -0x00010a69, -0x00010a68, -0x00010a67, -0x00010a66, -0x00010a65, -0x00010a64, -0x00010a63, -0x00010a62, -0x00010a61, -0x00010a60, -0x00010a5f, -0x00010a5e, -0x00010a5c, -0x00010a5b, -0x00010a59, -0x00010a58, -0x00010a57, -0x00010a56, -0x00010a55, -0x00010a54, -0x00010a53, -0x00010a52, -0x00010a51, -0x00010a50, -0x00010a4f, -0x00010a4e, -0x00010a4d, -0x00010a4c, -0x00010a4b, -0x00010a4a, -0x00010a49, -0x00010a48, -0x00010a47, -0x00010a46, -0x00010a45, -0x00010a44, -0x00010a43, -0x00010a41, -0x00010a40, -0x00010a3f, -0x00010a3d, -0x00010a3c, -0x00010a3b, -0x00010a3a, -0x00010a39, -0x00010a38, -0x00010a37, -0x00010a36, -0x00010a35, -0x00010a34, -0x00010a33, -0x00010a32, -0x00010a31, -0x00010a30, -0x00010a2f, -0x00010a2e, -0x00010a2d, -0x00010a2c, -0x00010a2b, -0x00010a2a, -0x00010a29, -0x00010a27, -0x00010a26, -0x00010a25, -0x00010a24, -0x00010a23, -0x00010a21, -0x00010a20, -0x00010a1f, -0x00010a1e, -0x00010a1d, -0x00010a1c, -0x00010a1b, -0x00010a1a, -0x00010a19, -0x00010a18, -0x00010a17, -0x00010a16, -0x00010a15, -0x00010a14, -0x00010a13, -0x00010a12, -0x00010a11, -0x00010a10, -0x00010a0f, -0x00010a0e, -0x00010a0c, -0x00010a0b, -0x00010a0a, -0x00010a09, -0x00010a08, -0x00010a06, -0x00010a05, -0x00010a04, -0x00010a03, -0x00010a02, -0x00010a01, -0x00010a00, -0x000109ff, -0x000109fe, -0x000109fd, -0x000109fc, -0x000109fb, -0x000109fa, -0x000109f9, -0x000109f8, -0x000109f7, -0x000109f6, -0x000109f5, -0x000109f4, -0x000109f2, -0x000109f1, -0x000109f0, -0x000109ef, -0x000109ee, -0x000109ed, -0x000109ec, -0x000109ea, -0x000109e9, -0x000109e8, -0x000109e7, -0x000109e6, -0x000109e5, -0x000109e4, -0x000109e3, -0x000109e2, -0x000109e1, -0x000109e0, -0x000109df, -0x000109de, -0x000109dd, -0x000109dc, -0x000109db, -0x000109da, -0x000109d9, -0x000109d7, -0x000109d6, -0x000109d5, -0x000109d4, -0x000109d3, -0x000109d2, -0x000109d1, -0x000109cf, -0x000109ce, -0x000109cd, -0x000109cc, -0x000109cb, -0x000109ca, -0x000109c9, -0x000109c8, -0x000109c7, -0x000109c6, -0x000109c5, -0x000109c4, -0x000109c3, -0x000109c2, -0x000109c1, -0x000109c0, -0x000109bf, -0x000109be, -0x000109bc, -0x000109bb, -0x000109ba, -0x000109b9, -0x000109b8, -0x000109b7, -0x000109b6, -0x000109b5, -0x000109b3, -0x000109b2, -0x000109b1, -0x000109b0, -0x000109af, -0x000109ae, -0x000109ad, -0x000109ac, -0x000109ab, -0x000109aa, -0x000109a9, -0x000109a8, -0x000109a7, -0x000109a6, -0x000109a5, -0x000109a4, -0x000109a2, -0x000109a1, -0x000109a0, -0x0001099f, -0x0001099e, -0x0001099d, -0x0001099c, -0x0001099b, -0x0001099a, -0x00010998, -0x00010997, -0x00010996, -0x00010995, -0x00010994, -0x00010993, -0x00010992, -0x00010991, -0x00010990, -0x0001098f, -0x0001098e, -0x0001098d, -0x0001098c, -0x0001098b, -0x0001098a, -0x00010989, -0x00010988, -0x00010987, -0x00010986, -0x00010985, -0x00010983, -0x00010982, -0x00010980, -0x0001097f, -0x0001097e, -0x0001097d, -0x0001097c, -0x0001097b, -0x0001097a, -0x00010979, -0x00010978, -0x00010977, -0x00010976, -0x00010975, -0x00010974, -0x00010973, -0x00010972, -0x00010971, -0x00010970, -0x0001096f, -0x0001096e, -0x0001096d, -0x0001096c, -0x0001096b, -0x0001096a, -0x00010969, -0x00010968, -0x00010966, -0x00010965, -0x00010964, -0x00010962, -0x00010961, -0x00010960, -0x0001095f, -0x0001095e, -0x0001095d, -0x0001095c, -0x0001095b, -0x0001095a, -0x00010959, -0x00010958, -0x00010957, -0x00010956, -0x00010955, -0x00010954, -0x00010953, -0x00010952, -0x00010951, -0x00010950, -0x0001094f, -0x0001094e, -0x0001094d, -0x0001094c, -0x0001094b, -0x00010949, -0x00010948, -0x00010947, -0x00010946, -0x00010945, -0x00010943, -0x00010942, -0x00010941, -0x00010940, -0x0001093f, -0x0001093e, -0x0001093d, -0x0001093c, -0x0001093b, -0x0001093a, -0x00010939, -0x00010938, -0x00010937, -0x00010936, -0x00010935, -0x00010934, -0x00010933, -0x00010932, -0x00010931, -0x00010930, -0x0001092f, -0x0001092e, -0x0001092d, -0x0001092b, -0x0001092a, -0x00010929, -0x00010928, -0x00010927, -0x00010925, -0x00010924, -0x00010923, -0x00010922, -0x00010921, -0x00010920, -0x0001091f, -0x0001091e, -0x0001091d, -0x0001091c, -0x0001091b, -0x0001091a, -0x00010919, -0x00010918, -0x00010917, -0x00010916, -0x00010915, -0x00010914, -0x00010913, -0x00010912, -0x00010911, -0x00010910, -0x0001090e, -0x0001090d, -0x0001090c, -0x0001090b, -0x0001090a, -0x00010909, -0x00010908, -0x00010906, -0x00010905, -0x00010904, -0x00010903, -0x00010902, -0x00010901, -0x00010900, -0x000108ff, -0x000108fe, -0x000108fd, -0x000108fc, -0x000108fb, -0x000108fa, -0x000108f9, -0x000108f8, -0x000108f7, -0x000108f6, -0x000108f5, -0x000108f4, -0x000108f3, -0x000108f2, -0x000108f0, -0x000108ef, -0x000108ee, -0x000108ed, -0x000108ec, -0x000108eb, -0x000108ea, -0x000108e8, -0x000108e7, -0x000108e6, -0x000108e5, -0x000108e4, -0x000108e3, -0x000108e2, -0x000108e1, -0x000108e0, -0x000108df, -0x000108de, -0x000108dd, -0x000108dc, -0x000108db, -0x000108da, -0x000108d9, -0x000108d8, -0x000108d7, -0x000108d6, -0x000108d5, -0x000108d3, -0x000108d2, -0x000108d1, -0x000108d0, -0x000108cf, -0x000108ce, -0x000108cd, -0x000108cc, -0x000108cb, -0x000108c9, -0x000108c8, -0x000108c7, -0x000108c6, -0x000108c5, -0x000108c4, -0x000108c3, -0x000108c2, -0x000108c1, -0x000108c0, -0x000108bf, -0x000108be, -0x000108bd, -0x000108bc, -0x000108bb, -0x000108ba, -0x000108b9, -0x000108b8, -0x000108b7, -0x000108b5, -0x000108b4, -0x000108b3, -0x000108b2, -0x000108b1, -0x000108b0, -0x000108af, -0x000108ae, -0x000108ad, -0x000108ab, -0x000108aa, -0x000108a9, -0x000108a8, -0x000108a7, -0x000108a6, -0x000108a5, -0x000108a4, -0x000108a3, -0x000108a2, -0x000108a1, -0x000108a0, -0x0001089f, -0x0001089e, -0x0001089d, -0x0001089c, -0x0001089b, -0x0001089a, -0x00010898, -0x00010897, -0x00010896, -0x00010895, -0x00010894, -0x00010893, -0x00010892, -0x00010891, -0x00010890, -0x0001088f, -0x0001088d, -0x0001088c, -0x0001088b, -0x0001088a, -0x00010889, -0x00010888, -0x00010887, -0x00010886, -0x00010885, -0x00010884, -0x00010883, -0x00010882, -0x00010881, -0x00010880, -0x0001087f, -0x0001087e, -0x0001087d, -0x0001087c, -0x0001087b, -0x0001087a, -0x00010879, -0x00010878, -0x00010877, -0x00010876, -0x00010874, -0x00010872, -0x00010871, -0x00010870, -0x0001086f, -0x0001086e, -0x0001086d, -0x0001086c, -0x0001086b, -0x0001086a, -0x00010869, -0x00010868, -0x00010867, -0x00010866, -0x00010865, -0x00010864, -0x00010863, -0x00010862, -0x00010861, -0x00010860, -0x0001085f, -0x0001085e, -0x0001085d, -0x0001085c, -0x0001085b, -0x0001085a, -0x00010859, -0x00010858, -0x00010857, -0x00010856, -0x00010855, -0x00010854, -0x00010851, -0x00010850, -0x0001084f, -0x0001084e, -0x0001084d, -0x0001084c, -0x0001084b, -0x0001084a, -0x00010849, -0x00010848, -0x00010847, -0x00010846, -0x00010845, -0x00010844, -0x00010843, -0x00010842, -0x00010841, -0x00010840, -0x0001083f, -0x0001083e, -0x0001083d, -0x0001083c, -0x0001083b, -0x0001083a, -0x00010839, -0x00010838, -0x00010837, -0x00010836, -0x00010835, -0x00010834, -0x00010833, -0x00010832, -0x0001082f, -0x0001082e, -0x0001082d, -0x0001082c, -0x0001082b, -0x0001082a, -0x00010829, -0x00010828, -0x00010827, -0x00010826, -0x00010825, -0x00010824, -0x00010823, -0x00010822, -0x00010821, -0x00010820, -0x0001081f, -0x0001081e, -0x0001081d, -0x0001081c, -0x0001081b, -0x0001081a, -0x00010819, -0x00010818, -0x00010817, -0x00010816, -0x00010815, -0x00010814, -0x00010813, -0x00010812, -0x00010811, -0x0001080f, -0x0001080d, -0x0001080c, -0x0001080b, -0x0001080a, -0x00010809, -0x00010808, -0x00010807, -0x00010806, -0x00010805, -0x00010804, -0x00010803, -0x00010802, -0x00010801, -0x00010800, -0x000107ff, -0x000107fe, -0x000107fd, -0x000107fc, -0x000107fb, -0x000107fa, -0x000107f9, -0x000107f8, -0x000107f7, -0x000107f6, -0x000107f5, -0x000107f4, -0x000107f3, -0x000107f2, -0x000107f1, -0x000107f0, -0x000107ee, -0x000107ed, -0x000107eb, -0x000107ea, -0x000107e9, -0x000107e8, -0x000107e7, -0x000107e6, -0x000107e5, -0x000107e4, -0x000107e3, -0x000107e2, -0x000107e1, -0x000107e0, -0x000107df, -0x000107de, -0x000107dd, -0x000107dc, -0x000107db, -0x000107da, -0x000107d9, -0x000107d8, -0x000107d7, -0x000107d6, -0x000107d5, -0x000107d4, -0x000107d3, -0x000107d2, -0x000107d1, -0x000107d0, -0x000107cf, -0x000107cd, -0x000107cc, -0x000107cb, -0x000107c9, -0x000107c8, -0x000107c7, -0x000107c6, -0x000107c5, -0x000107c4, -0x000107c3, -0x000107c2, -0x000107c1, -0x000107c0, -0x000107bf, -0x000107be, -0x000107bd, -0x000107bc, -0x000107bb, -0x000107ba, -0x000107b9, -0x000107b8, -0x000107b7, -0x000107b6, -0x000107b5, -0x000107b4, -0x000107b3, -0x000107b2, -0x000107b1, -0x000107b0, -0x000107af, -0x000107ae, -0x000107ac, -0x000107ab, -0x000107aa, -0x000107a9, -0x000107a7, -0x000107a6, -0x000107a5, -0x000107a4, -0x000107a3, -0x000107a2, -0x000107a1, -0x000107a0, -0x0001079f, -0x0001079e, -0x0001079d, -0x0001079c, -0x0001079b, -0x0001079a, -0x00010799, -0x00010798, -0x00010797, -0x00010796, -0x00010795, -0x00010794, -0x00010793, -0x00010792, -0x00010791, -0x00010790, -0x0001078f, -0x0001078e, -0x0001078d, -0x0001078b, -0x0001078a, -0x00010789, -0x00010788, -0x00010787, -0x00010785, -0x00010784, -0x00010783, -0x00010782, -0x00010781, -0x00010780, -0x0001077f, -0x0001077e, -0x0001077d, -0x0001077c, -0x0001077b, -0x0001077a, -0x00010779, -0x00010778, -0x00010777, -0x00010776, -0x00010775, -0x00010774, -0x00010773, -0x00010772, -0x00010771, -0x00010770, -0x0001076f, -0x0001076e, -0x0001076d, -0x0001076b, -0x0001076a, -0x00010769, -0x00010768, -0x00010767, -0x00010766, -0x00010765, -0x00010764, -0x00010763, -0x00010762, -0x00010761, -0x00010760, -0x0001075f, -0x0001075d, -0x0001075c, -0x0001075b, -0x0001075a, -0x00010759, -0x00010758, -0x00010757, -0x00010756, -0x00010755, -0x00010754, -0x00010753, -0x00010752, -0x00010751, -0x00010750, -0x0001074f, -0x0001074e, -0x0001074d, -0x0001074c, -0x0001074b, -0x0001074a, -0x00010749, -0x00010748, -0x00010747, -0x00010745, -0x00010744, -0x00010743, -0x00010742, -0x00010741, -0x00010740, -0x0001073f, -0x0001073e, -0x0001073d, -0x0001073c, -0x0001073b, -0x0001073a, -0x00010739, -0x00010737, -0x00010736, -0x00010735, -0x00010734, -0x00010733, -0x00010732, -0x00010731, -0x00010730, -0x0001072f, -0x0001072e, -0x0001072d, -0x0001072c, -0x0001072b, -0x0001072a, -0x00010729, -0x00010728, -0x00010727, -0x00010726, -0x00010725, -0x00010724, -0x00010723, -0x00010722, -0x00010721, -0x00010720, -0x0001071e, -0x0001071d, -0x0001071c, -0x0001071b, -0x0001071a, -0x00010719, -0x00010718, -0x00010717, -0x00010716, -0x00010715, -0x00010714, -0x00010712, -0x00010711, -0x00010710, -0x0001070f, -0x0001070e, -0x0001070d, -0x0001070c, -0x0001070b, -0x0001070a, -0x00010709, -0x00010708, -0x00010707, -0x00010706, -0x00010705, -0x00010704, -0x00010703, -0x00010702, -0x00010701, -0x00010700, -0x000106ff, -0x000106fe, -0x000106fd, -0x000106fc, -0x000106fb, -0x000106fa, -0x000106f8, -0x000106f7, -0x000106f6, -0x000106f5, -0x000106f4, -0x000106f3, -0x000106f2, -0x000106f1, -0x000106f0, -0x000106ef, -0x000106ee, -0x000106ec, -0x000106eb, -0x000106ea, -0x000106e9, -0x000106e8, -0x000106e7, -0x000106e6, -0x000106e5, -0x000106e4, -0x000106e3, -0x000106e2, -0x000106e1, -0x000106e0, -0x000106df, -0x000106de, -0x000106dd, -0x000106dc, -0x000106db, -0x000106da, -0x000106d9, -0x000106d8, -0x000106d7, -0x000106d6, -0x000106d5, -0x000106d4, -0x000106d3, -0x000106d1, -0x000106d0, -0x000106cf, -0x000106ce, -0x000106cd, -0x000106cc, -0x000106cb, -0x000106ca, -0x000106c9, -0x000106c7, -0x000106c6, -0x000106c5, -0x000106c4, -0x000106c3, -0x000106c2, -0x000106c1, -0x000106c0, -0x000106bf, -0x000106be, -0x000106bd, -0x000106bc, -0x000106bb, -0x000106ba, -0x000106b9, -0x000106b8, -0x000106b7, -0x000106b6, -0x000106b5, -0x000106b4, -0x000106b3, -0x000106b2, -0x000106b1, -0x000106b0, -0x000106af, -0x000106ae, -0x000106ad, -0x000106ac, -0x000106aa, -0x000106a9, -0x000106a8, -0x000106a7, -0x000106a6, -0x000106a5, -0x000106a4, -0x000106a3, -0x000106a1, -0x000106a0, -0x0001069f, -0x0001069e, -0x0001069d, -0x0001069c, -0x0001069b, -0x0001069a, -0x00010699, -0x00010698, -0x00010697, -0x00010696, -0x00010695, -0x00010694, -0x00010693, -0x00010692, -0x00010691, -0x00010690, -0x0001068f, -0x0001068e, -0x0001068d, -0x0001068c, -0x0001068b, -0x0001068a, -0x00010689, -0x00010688, -0x00010687, -0x00010686, -0x00010684, -0x00010683, -0x00010682, -0x00010681, -0x00010680, -0x0001067f, -0x0001067e, -0x0001067d, -0x0001067b, -0x0001067a, -0x00010679, -0x00010678, -0x00010677, -0x00010676, -0x00010675, -0x00010674, -0x00010673, -0x00010672, -0x00010671, -0x00010670, -0x0001066f, -0x0001066e, -0x0001066d, -0x0001066c, -0x0001066b, -0x0001066a, -0x00010669, -0x00010668, -0x00010666, -0x00010665, -0x00010664, -0x00010663, -0x00010662, -0x00010661, -0x00010660, -0x0001065f, -0x0001065e, -0x0001065d, -0x0001065c, -0x0001065b, -0x0001065a, -0x00010659, -0x00010658, -0x00010657, -0x00010656, -0x00010655, -0x00010654, -0x00010653, -0x00010652, -0x00010651, -0x00010650, -0x0001064f, -0x0001064e, -0x0001064d, -0x0001064c, -0x0001064b, -0x0001064a, -0x00010649, -0x00010648, -0x00010647, -0x00010646, -0x00010645, -0x00010644, -0x00010643, -0x00010642, -0x00010640, -0x0001063f, -0x0001063e, -0x0001063d, -0x0001063c, -0x0001063a, -0x00010639, -0x00010638, -0x00010637, -0x00010636, -0x00010635, -0x00010634, -0x00010633, -0x00010632, -0x00010631, -0x00010630, -0x0001062f, -0x0001062e, -0x0001062d, -0x0001062c, -0x0001062b, -0x0001062a, -0x00010629, -0x00010628, -0x00010627, -0x00010626, -0x00010625, -0x00010624, -0x00010623, -0x00010622, -0x00010621, -0x00010620, -0x0001061f, -0x0001061e, -0x0001061d, -0x0001061c, -0x0001061b, -0x0001061a, -0x00010619, -0x00010618, -0x00010617, -0x00010615, -0x00010614, -0x00010613, -0x00010612, -0x00010611, -0x00010610, -0x0001060f, -0x0001060d, -0x0001060c, -0x0001060b, -0x0001060a, -0x00010609, -0x00010608, -0x00010607, -0x00010606, -0x00010605, -0x00010604, -0x00010603, -0x00010602, -0x00010601, -0x00010600, -0x000105ff, -0x000105fe, -0x000105fd, -0x000105fc, -0x000105fb, -0x000105fa, -0x000105f9, -0x000105f8, -0x000105f7, -0x000105f6, -0x000105f5, -0x000105f4, -0x000105f3, -0x000105f2, -0x000105f1, -0x000105f0, -0x000105ef, -0x000105ee, -0x000105ed, -0x000105ec, -0x000105eb, -0x000105e9, -0x000105e8, -0x000105e7, -0x000105e6, -0x000105e5, -0x000105e4, -0x000105e3, -0x000105e2, -0x000105e0, -0x000105df, -0x000105de, -0x000105dd, -0x000105dc, -0x000105db, -0x000105da, -0x000105d9, -0x000105d8, -0x000105d7, -0x000105d6, -0x000105d5, -0x000105d4, -0x000105d3, -0x000105d2, -0x000105d1, -0x000105d0, -0x000105cf, -0x000105ce, -0x000105cd, -0x000105cc, -0x000105cb, -0x000105ca, -0x000105c9, -0x000105c8, -0x000105c7, -0x000105c6, -0x000105c5, -0x000105c4, -0x000105c3, -0x000105c2, -0x000105c1, -0x000105c0, -0x000105bf, -0x000105bd, -0x000105bc, -0x000105bb, -0x000105ba, -0x000105b9, -0x000105b8, -0x000105b7, -0x000105b6, -0x000105b4, -0x000105b3, -0x000105b2, -0x000105b1, -0x000105b0, -0x000105af, -0x000105ae, -0x000105ad, -0x000105ac, -0x000105ab, -0x000105aa, -0x000105a9, -0x000105a8, -0x000105a7, -0x000105a6, -0x000105a5, -0x000105a4, -0x000105a3, -0x000105a2, -0x000105a1, -0x000105a0, -0x0001059f, -0x0001059e, -0x0001059d, -0x0001059c, -0x0001059b, -0x0001059a, -0x00010599, -0x00010598, -0x00010597, -0x00010596, -0x00010595, -0x00010594, -0x00010592, -0x00010591, -0x00010590, -0x0001058f, -0x0001058e, -0x0001058d, -0x0001058c, -0x0001058b, -0x0001058a, -0x00010589, -0x00010587, -0x00010586, -0x00010585, -0x00010584, -0x00010583, -0x00010582, -0x00010581, -0x00010580, -0x0001057f, -0x0001057e, -0x0001057d, -0x0001057c, -0x0001057b, -0x0001057a, -0x00010579, -0x00010578, -0x00010577, -0x00010576, -0x00010575, -0x00010574, -0x00010573, -0x00010572, -0x00010571, -0x00010570, -0x0001056f, -0x0001056e, -0x0001056d, -0x0001056c, -0x0001056b, -0x0001056a, -0x00010569, -0x00010568, -0x00010566, -0x00010565, -0x00010564, -0x00010563, -0x00010562, -0x00010561, -0x00010560, -0x0001055f, -0x0001055e, -0x0001055d, -0x0001055c, -0x0001055b, -0x0001055a, -0x00010559, -0x00010558, -0x00010557, -0x00010556, -0x00010555, -0x00010554, -0x00010553, -0x00010552, -0x00010551, -0x00010550, -0x0001054f, -0x0001054d, -0x0001054c, -0x0001054b, -0x0001054a, -0x00010549, -0x00010548, -0x00010547, -0x00010546, -0x00010545, -0x00010544, -0x00010543, -0x00010542, -0x00010541, -0x00010540, -0x0001053f, -0x0001053e, -0x0001053d, -0x0001053c, -0x0001053b, -0x0001053a, -0x00010539, -0x00010538, -0x00010537, -0x00010536, -0x00010535, -0x00010533, -0x00010532, -0x00010531, -0x00010530, -0x0001052f, -0x0001052e, -0x0001052d, -0x0001052c, -0x0001052b, -0x0001052a, -0x00010529, -0x00010528, -0x00010527, -0x00010526, -0x00010525, -0x00010524, -0x00010523, -0x00010522, -0x00010521, -0x00010520, -0x0001051f, -0x0001051e, -0x0001051d, -0x0001051c, -0x0001051b, -0x00010519, -0x00010518, -0x00010517, -0x00010516, -0x00010515, -0x00010514, -0x00010513, -0x00010512, -0x00010511, -0x00010510, -0x0001050f, -0x0001050e, -0x0001050d, -0x0001050c, -0x0001050b, -0x0001050a, -0x00010509, -0x00010508, -0x00010507, -0x00010506, -0x00010505, -0x00010504, -0x00010503, -0x00010502, -0x00010501, -0x00010500, -0x000104fe, -0x000104fd, -0x000104fc, -0x000104fb, -0x000104fa, -0x000104f9, -0x000104f8, -0x000104f7, -0x000104f6, -0x000104f5, -0x000104f4, -0x000104f3, -0x000104f2, -0x000104f1, -0x000104f0, -0x000104ef, -0x000104ee, -0x000104ed, -0x000104ec, -0x000104eb, -0x000104ea, -0x000104e9, -0x000104e8, -0x000104e7, -0x000104e5, -0x000104e4, -0x000104e3, -0x000104e2, -0x000104e1, -0x000104e0, -0x000104df, -0x000104de, -0x000104dd, -0x000104dc, -0x000104db, -0x000104da, -0x000104d9, -0x000104d8, -0x000104d7, -0x000104d6, -0x000104d5, -0x000104d4, -0x000104d3, -0x000104d2, -0x000104d1, -0x000104d0, -0x000104cf, -0x000104ce, -0x000104cd, -0x000104cc, -0x000104cb, -0x000104c9, -0x000104c8, -0x000104c7, -0x000104c6, -0x000104c5, -0x000104c4, -0x000104c3, -0x000104c2, -0x000104c1, -0x000104c0, -0x000104bf, -0x000104be, -0x000104bd, -0x000104bc, -0x000104bb, -0x000104ba, -0x000104b9, -0x000104b8, -0x000104b7, -0x000104b6, -0x000104b5, -0x000104b4, -0x000104b3, -0x000104b1, -0x000104b0, -0x000104af, -0x000104ae, -0x000104ad, -0x000104ac, -0x000104ab, -0x000104aa, -0x000104a9, -0x000104a8, -0x000104a7, -0x000104a6, -0x000104a5, -0x000104a4, -0x000104a3, -0x000104a2, -0x000104a1, -0x000104a0, -0x0001049f, -0x0001049e, -0x0001049d, -0x0001049c, -0x0001049b, -0x0001049a, -0x00010499, -0x00010498, -0x00010497, -0x00010496, -0x00010495, -0x00010493, -0x00010492, -0x00010491, -0x00010490, -0x0001048f, -0x0001048e, -0x0001048d, -0x0001048c, -0x0001048b, -0x0001048a, -0x00010489, -0x00010488, -0x00010487, -0x00010486, -0x00010485, -0x00010484, -0x00010483, -0x00010482, -0x00010481, -0x00010480, -0x0001047f, -0x0001047e, -0x0001047c, -0x0001047b, -0x0001047a, -0x00010479, -0x00010478, -0x00010477, -0x00010476, -0x00010475, -0x00010474, -0x00010473, -0x00010472, -0x00010471, -0x00010470, -0x0001046f, -0x0001046e, -0x0001046d, -0x0001046c, -0x0001046b, -0x0001046a, -0x00010469, -0x00010468, -0x00010467, -0x00010466, -0x00010465, -0x00010464, -0x00010463, -0x00010462, -0x00010461, -0x00010460, -0x0001045e, -0x0001045d, -0x0001045c, -0x0001045b, -0x0001045a, -0x00010459, -0x00010458, -0x00010457, -0x00010456, -0x00010455, -0x00010454, -0x00010453, -0x00010452, -0x00010451, -0x00010450, -0x0001044f, -0x0001044e, -0x0001044d, -0x0001044c, -0x0001044b, -0x0001044a, -0x00010449, -0x00010448, -0x00010447, -0x00010446, -0x00010445, -0x00010444, -0x00010443, -0x00010442, -0x00010441, -0x00010440, -0x0001043f, -0x0001043e, -0x0001043d, -0x0001043c, -0x0001043b, -0x0001043a, -0x00010439, -0x00010438, -0x00010437, -0x00010436, -0x00010435, -0x00010434, -0x00010433, -0x00010432, -0x00010430, -0x0001042f, -0x0001042e, -0x0001042d, -0x0001042c, -0x0001042b, -0x0001042a, -0x00010429, -0x00010428, -0x00010427, -0x00010426, -0x00010425, -0x00010424, -0x00010423, -0x00010422, -0x00010421, -0x0001041f, -0x0001041e, -0x0001041d, -0x0001041c, -0x0001041b, -0x0001041a, -0x00010419, -0x00010418, -0x00010417, -0x00010416, -0x00010415, -0x00010414, -0x00010413, -0x00010412, -0x00010411, -0x00010410, -0x0001040f, -0x0001040e, -0x0001040d, -0x0001040c, -0x0001040b, -0x0001040a, -0x00010409, -0x00010408, -0x00010407, -0x00010406, -0x00010405, -0x00010404, -0x00010403, -0x00010402, -0x00010401, -0x00010400, -0x000103ff, -0x000103fe, -0x000103fd, -0x000103fc, -0x000103fb, -0x000103fa, -0x000103f9, -0x000103f8, -0x000103f7, -0x000103f6, -0x000103f5, -0x000103f4, -0x000103f3, -0x000103f2, -0x000103f1, -0x000103f0, -0x000103ee, -0x000103ed, -0x000103ec, -0x000103eb, -0x000103ea, -0x000103e9, -0x000103e8, -0x000103e7, -0x000103e6, -0x000103e5, -0x000103e4, -0x000103e3, -0x000103e2, -0x000103e1, -0x000103e0, -0x000103de, -0x000103dd, -0x000103dc, -0x000103db, -0x000103da, -0x000103d9, -0x000103d8, -0x000103d7, -0x000103d6, -0x000103d5, -0x000103d4, -0x000103d3, -0x000103d2, -0x000103d1, -0x000103d0, -0x000103cf, -0x000103ce, -0x000103cd, -0x000103cc, -0x000103cb, -0x000103ca, -0x000103c9, -0x000103c8, -0x000103c7, -0x000103c6, -0x000103c5, -0x000103c4, -0x000103c3, -0x000103c2, -0x000103c1, -0x000103c0, -0x000103bf, -0x000103be, -0x000103bd, -0x000103bc, -0x000103bb, -0x000103ba, -0x000103b9, -0x000103b8, -0x000103b7, -0x000103b6, -0x000103b5, -0x000103b4, -0x000103b3, -0x000103b2, -0x000103b1, -0x000103b0, -0x000103af, -0x000103ae, -0x000103ac, -0x000103ab, -0x000103aa, -0x000103a9, -0x000103a8, -0x000103a7, -0x000103a6, -0x000103a5, -0x000103a4, -0x000103a3, -0x000103a2, -0x000103a1, -0x000103a0, -0x0001039f, -0x0001039d, -0x0001039c, -0x0001039b, -0x0001039a, -0x00010399, -0x00010398, -0x00010397, -0x00010396, -0x00010395, -0x00010394, -0x00010393, -0x00010392, -0x00010391, -0x00010390, -0x0001038f, -0x0001038e, -0x0001038d, -0x0001038c, -0x0001038b, -0x0001038a, -0x00010389, -0x00010388, -0x00010387, -0x00010386, -0x00010385, -0x00010384, -0x00010383, -0x00010382, -0x00010381, -0x00010380, -0x0001037f, -0x0001037e, -0x0001037d, -0x0001037c, -0x0001037b, -0x0001037a, -0x00010379, -0x00010378, -0x00010377, -0x00010376, -0x00010375, -0x00010374, -0x00010373, -0x00010372, -0x00010371, -0x00010370, -0x0001036f, -0x0001036e, -0x0001036d, -0x0001036c, -0x0001036a, -0x00010369, -0x00010368, -0x00010367, -0x00010366, -0x00010365, -0x00010364, -0x00010363, -0x00010362, -0x00010361, -0x00010360, -0x0001035f, -0x0001035e, -0x0001035c, -0x0001035b, -0x0001035a, -0x00010359, -0x00010358, -0x00010357, -0x00010356, -0x00010355, -0x00010354, -0x00010353, -0x00010352, -0x00010351, -0x00010350, -0x0001034f, -0x0001034e, -0x0001034d, -0x0001034c, -0x0001034b, -0x0001034b, -0x0001034a, -0x00010349, -0x00010348, -0x00010347, -0x00010346, -0x00010345, -0x00010344, -0x00010343, -0x00010342, -0x00010341, -0x00010340, -0x0001033f, -0x0001033e, -0x0001033d, -0x0001033c, -0x0001033b, -0x0001033a, -0x00010339, -0x00010338, -0x00010337, -0x00010336, -0x00010334, -0x00010333, -0x00010332, -0x00010331, -0x00010330, -0x0001032f, -0x0001032e, -0x0001032d, -0x0001032c, -0x0001032a, -0x00010329, -0x00010328, -0x00010327, -0x00010326, -0x00010325, -0x00010324, -0x00010323, -0x00010322, -0x00010321, -0x00010320, -0x0001031f, -0x0001031e, -0x0001031d, -0x0001031c, -0x0001031b, -0x0001031a, -0x00010319, -0x00010318, -0x00010317, -0x00010316, -0x00010315, -0x00010314, -0x00010313, -0x00010312, -0x00010311, -0x00010310, -0x0001030f, -0x0001030e, -0x0001030d, -0x0001030c, -0x0001030b, -0x0001030a, -0x00010309, -0x00010308, -0x00010307, -0x00010306, -0x00010305, -0x00010304, -0x00010303, -0x00010302, -0x00010301, -0x00010300, -0x000102ff, -0x000102fe, -0x000102fd, -0x000102fc, -0x000102fb, -0x000102fa, -0x000102f9, -0x000102f8, -0x000102f7, -0x000102f6, -0x000102f5, -0x000102f4, -0x000102f3, -0x000102f2, -0x000102f1, -0x000102f0, -0x000102ef, -0x000102ee, -0x000102ed, -0x000102ec, -0x000102eb, -0x000102ea, -0x000102e9, -0x000102e8, -0x000102e7, -0x000102e6, -0x000102e5, -0x000102e4, -0x000102e3, -0x000102e2, -0x000102e1, -0x000102e0, -0x000102df, -0x000102dd, -0x000102dc, -0x000102db, -0x000102da, -0x000102d9, -0x000102d8, -0x000102d7, -0x000102d6, -0x000102d4, -0x000102d3, -0x000102d2, -0x000102d1, -0x000102d0, -0x000102cf, -0x000102ce, -0x000102cd, -0x000102cc, -0x000102cb, -0x000102ca, -0x000102c9, -0x000102c8, -0x000102c7, -0x000102c6, -0x000102c5, -0x000102c4, -0x000102c3, -0x000102c2, -0x000102c1, -0x000102c0, -0x000102bf, -0x000102be, -0x000102bd, -0x000102bc, -0x000102bb, -0x000102ba, -0x000102b9, -0x000102b8, -0x000102b7, -0x000102b6, -0x000102b5, -0x000102b4, -0x000102b3, -0x000102b2, -0x000102b1, -0x000102b0, -0x000102af, -0x000102ae, -0x000102ad, -0x000102ac, -0x000102ab, -0x000102aa, -0x000102a9, -0x000102a8, -0x000102a7, -0x000102a6, -0x000102a5, -0x000102a4, -0x000102a3, -0x000102a2, -0x000102a1, -0x000102a0, -0x0001029f, -0x0001029e, -0x0001029d, -0x0001029c, -0x0001029b, -0x0001029a, -0x00010299, -0x00010298, -0x00010297, -0x00010296, -0x00010295, -0x00010294, -0x00010293, -0x00010292, -0x00010291, -0x00010290, -0x0001028f, -0x0001028e, -0x0001028d, -0x0001028c, -0x0001028b, -0x0001028a, -0x00010289, -0x00010288, -0x00010287, -0x00010285, -0x00010284, -0x00010283, -0x00010282, -0x00010281, -0x00010280, -0x0001027f, -0x0001027d, -0x0001027c, -0x0001027b, -0x0001027a, -0x00010279, -0x00010278, -0x00010277, -0x00010276, -0x00010275, -0x00010274, -0x00010273, -0x00010272, -0x00010271, -0x00010270, -0x0001026f, -0x0001026e, -0x0001026d, -0x0001026c, -0x0001026b, -0x0001026a, -0x00010269, -0x00010268, -0x00010267, -0x00010266, -0x00010265, -0x00010264, -0x00010263, -0x00010262, -0x00010261, -0x00010260, -0x0001025f, -0x0001025e, -0x0001025d, -0x0001025c, -0x0001025b, -0x0001025a, -0x00010259, -0x00010258, -0x00010257, -0x00010256, -0x00010255, -0x00010254, -0x00010253, -0x00010252, -0x00010251, -0x00010250, -0x0001024f, -0x0001024e, -0x0001024d, -0x0001024c, -0x0001024b, -0x0001024a, -0x00010249, -0x00010248, -0x00010247, -0x00010246, -0x00010246, -0x00010244, -0x00010243, -0x00010242, -0x00010241, -0x0001023f, -0x0001023e, -0x0001023d, -0x0001023c, -0x0001023b, -0x0001023a, -0x00010239, -0x00010238, -0x00010237, -0x00010236, -0x00010235, -0x00010234, -0x00010233, -0x00010232, -0x00010231, -0x00010230, -0x0001022f, -0x0001022e, -0x0001022d, -0x0001022c, -0x0001022b, -0x0001022a, -0x00010229, -0x00010228, -0x00010227, -0x00010226, -0x00010225, -0x00010224, -0x00010223, -0x00010222, -0x00010221, -0x00010220, -0x0001021f, -0x0001021e, -0x0001021d, -0x0001021c, -0x0001021b, -0x0001021a, -0x00010219, -0x00010218, -0x00010217, -0x00010216, -0x00010215, -0x00010214, -0x00010213, -0x00010212, -0x00010211, -0x00010210, -0x0001020f, -0x0001020e, -0x0001020d, -0x0001020c, -0x0001020b, -0x0001020a, -0x00010209, -0x00010208, -0x00010207, -0x00010206, -0x00010205, -0x00010204, -0x00010203, -0x00010202, -0x00010201, -0x00010200, -0x000101ff, -0x000101fe, -0x000101fd, -0x000101fc, -0x000101fb, -0x000101fa, -0x000101f9, -0x000101f8, -0x000101f7, -0x000101f6, -0x000101f5, -0x000101f4, -0x000101f3, -0x000101f2, -0x000101f1, -0x000101f0, -0x000101ef, -0x000101ee, -0x000101ed, -0x000101ec, -0x000101eb, -0x000101ea, -0x000101e9, -0x000101e8, -0x000101e7, -0x000101e6, -0x000101e5, -0x000101e4, -0x000101e3, -0x000101e2, -0x000101e1, -0x000101e0, -0x000101df, -0x000101de, -0x000101dd, -0x000101dc, -0x000101db, -0x000101da, -0x000101d9, -0x000101d8, -0x000101d7, -0x000101d6, -0x000101d5, -0x000101d4, -0x000101d3, -0x000101d2, -0x000101d1, -0x000101d0, -0x000101cf, -0x000101ce, -0x000101cd, -0x000101cc, -0x000101cb, -0x000101ca, -0x000101c9, -0x000101c8, -0x000101c7, -0x000101c6, -0x000101c5, -0x000101c4, -0x000101c2, -0x000101c1, -0x000101c0, -0x000101be, -0x000101bd, -0x000101bc, -0x000101bb, -0x000101ba, -0x000101b9, -0x000101b8, -0x000101b7, -0x000101b6, -0x000101b5, -0x000101b4, -0x000101b3, -0x000101b2, -0x000101b1, -0x000101b0, -0x000101af, -0x000101ae, -0x000101ad, -0x000101ac, -0x000101ab, -0x000101aa, -0x000101a9, -0x000101a8, -0x000101a7, -0x000101a6, -0x000101a5, -0x000101a4, -0x000101a3, -0x000101a2, -0x000101a1, -0x000101a0, -0x0001019f, -0x0001019e, -0x0001019d, -0x0001019c, -0x0001019b, -0x0001019a, -0x00010199, -0x00010198, -0x00010197, -0x00010196, -0x00010195, -0x00010194, -0x00010193, -0x00010192, -0x00010191, -0x00010190, -0x0001018f, -0x0001018e, -0x0001018d, -0x0001018c, -0x0001018b, -0x0001018a, -0x00010189, -0x00010188, -0x00010187, -0x00010186, -0x00010185, -0x00010184, -0x00010183, -0x00010182, -0x00010181, -0x00010180, -0x0001017f, -0x0001017e, -0x0001017d, -0x0001017c, -0x0001017b, -0x0001017a, -0x00010179, -0x00010178, -0x00010177, -0x00010176, -0x00010175, -0x00010174, -0x00010173, -0x00010172, -0x00010171, -0x00010170, -0x0001016f, -0x0001016e, -0x0001016d, -0x0001016c, -0x0001016b, -0x0001016a, -0x00010169, -0x00010168, -0x00010167, -0x00010166, -0x00010165, -0x00010164, -0x00010163, -0x00010162, -0x00010161, -0x00010160, -0x0001015f, -0x0001015e, -0x0001015d, -0x0001015c, -0x0001015b, -0x0001015a, -0x00010159, -0x00010158, -0x00010157, -0x00010156, -0x00010155, -0x00010154, -0x00010153, -0x00010152, -0x00010151, -0x00010150, -0x0001014f, -0x0001014e, -0x0001014d, -0x0001014c, -0x0001014b, -0x0001014a, -0x00010149, -0x00010148, -0x00010147, -0x00010146, -0x00010145, -0x00010144, -0x00010143, -0x00010141, -0x00010140, -0x0001013f, -0x0001013e, -0x0001013d, -0x0001013c, -0x0001013b, -0x0001013a, -0x00010139, -0x00010138, -0x00010137, -0x00010136, -0x00010135, -0x00010134, -0x00010133, -0x00010132, -0x00010131, -0x00010130, -0x0001012f, -0x0001012e, -0x0001012d, -0x0001012c, -0x0001012b, -0x0001012a, -0x00010129, -0x00010128, -0x00010127, -0x00010126, -0x00010125, -0x00010124, -0x00010123, -0x00010122, -0x00010121, -0x00010120, -0x0001011f, -0x0001011e, -0x0001011d, -0x0001011c, -0x0001011b, -0x0001011a, -0x00010119, -0x00010118, -0x00010117, -0x00010116, -0x00010115, -0x00010114, -0x00010113, -0x00010112, -0x00010111, -0x00010110, -0x0001010f, -0x0001010e, -0x0001010d, -0x0001010c, -0x0001010b, -0x0001010a, -0x00010109, -0x00010108, -0x00010107, -0x00010106, -0x00010105, -0x00010104, -0x00010103, -0x00010102, -0x00010101, -0x00010100, -0x000100ff, -0x000100fe, -0x000100fd, -0x000100fc, -0x000100fb, -0x000100fa, -0x000100f9, -0x000100f8, -0x000100f7, -0x000100f6, -0x000100f5, -0x000100f4, -0x000100f3, -0x000100f2, -0x000100f1, -0x000100f0, -0x000100ef, -0x000100ee, -0x000100ed, -0x000100ec, -0x000100eb, -0x000100ea, -0x000100e9, -0x000100e8, -0x000100e7, -0x000100e6, -0x000100e5, -0x000100e4, -0x000100e3, -0x000100e2, -0x000100e1, -0x000100e0, -0x000100df, -0x000100de, -0x000100dd, -0x000100dc, -0x000100db, -0x000100da, -0x000100d9, -0x000100d8, -0x000100d7, -0x000100d6, -0x000100d5, -0x000100d4, -0x000100d3, -0x000100d2, -0x000100d1, -0x000100d0, -0x000100cf, -0x000100ce, -0x000100cd, -0x000100cc, -0x000100cb, -0x000100ca, -0x000100c9, -0x000100c8, -0x000100c7, -0x000100c6, -0x000100c5, -0x000100c4, -0x000100c3, -0x000100c2, -0x000100c1, -0x000100c0, -0x000100bf, -0x000100be, -0x000100bd, -0x000100bc, -0x000100bb, -0x000100ba, -0x000100b9, -0x000100b8, -0x000100b7, -0x000100b6, -0x000100b5, -0x000100b4, -0x000100b3, -0x000100b2, -0x000100b1, -0x000100b0, -0x000100af, -0x000100ae, -0x000100ad, -0x000100ac, -0x000100ab, -0x000100aa, -0x000100a9, -0x000100a8, -0x000100a7, -0x000100a6, -0x000100a5, -0x000100a4, -0x000100a3, -0x000100a2, -0x000100a1, -0x000100a0, -0x0001009f, -0x0001009e, -0x0001009d, -0x0001009c, -0x0001009b, -0x0001009a, -0x00010099, -0x00010098, -0x00010097, -0x00010096, -0x00010095, -0x00010094, -0x00010093, -0x00010092, -0x00010091, -0x00010090, -0x0001008f, -0x0001008e, -0x0001008d, -0x0001008c, -0x0001008b, -0x0001008a, -0x00010089, -0x00010088, -0x00010087, -0x00010086, -0x00010085, -0x00010084, -0x00010083, -0x00010082, -0x00010081, -0x0001007e, -0x0001007d, -0x0001007c, -0x0001007b, -0x0001007a, -0x00010079, -0x00010078, -0x00010077, -0x00010076, -0x00010075, -0x00010074, -0x00010073, -0x00010072, -0x00010071, -0x00010070, -0x0001006f, -0x0001006e, -0x0001006d, -0x0001006c, -0x0001006b, -0x0001006a, -0x00010069, -0x00010068, -0x00010067, -0x00010066, -0x00010065, -0x00010064, -0x00010063, -0x00010062, -0x00010061, -0x00010060, -0x0001005f, -0x0001005e, -0x0001005d, -0x0001005c, -0x0001005b, -0x0001005a, -0x00010059, -0x00010058, -0x00010057, -0x00010056, -0x00010055, -0x00010054, -0x00010053, -0x00010052, -0x00010051, -0x00010050, -0x0001004f, -0x0001004e, -0x0001004d, -0x0001004c, -0x0001004b, -0x0001004a, -0x00010049, -0x00010048, -0x00010047, -0x00010046, -0x00010045, -0x00010044, -0x00010043, -0x00010042, -0x00010041, -0x00010040, -0x0001003f, -0x0001003e, -0x0001003d, -0x0001003c, -0x0001003b, -0x0001003a, -0x00010039, -0x00010038, -0x00010037, -0x00010036, -0x00010035, -0x00010034, -0x00010033, -0x00010032, -0x00010031, -0x00010030, -0x0001002f, -0x0001002e, -0x0001002d, -0x0001002c, -0x0001002b, -0x0001002a, -0x00010029, -0x00010028, -0x00010027, -0x00010026, -0x00010025, -0x00010024, -0x00010023, -0x00010022, -0x00010021, -0x00010020, -0x0001001f, -0x0001001e, -0x0001001d, -0x0001001c, -0x0001001b, -0x0001001a, -0x00010019, -0x00010018, -0x00010017, -0x00010016, -0x00010015, -0x00010014, -0x00010013, -0x00010012, -0x00010011, -0x00010010, -0x0001000f, -0x0001000e, -0x0001000d, -0x0001000c, -0x0001000b, -0x0001000a, -0x00010009, -0x00010008, -0x00010007, -0x00010006, -0x00010005, -0x00010004, -0x00010003, -0x00010002, -0x00010001, -0x00010000, diff --git a/psx/octoshock/psx/input/dualanalog.cpp b/psx/octoshock/psx/input/dualanalog.cpp index b6add69e26..1c127e9a48 100644 --- a/psx/octoshock/psx/input/dualanalog.cpp +++ b/psx/octoshock/psx/input/dualanalog.cpp @@ -13,7 +13,6 @@ class InputDevice_DualAnalog : public InputDevice virtual ~InputDevice_DualAnalog(); virtual void Power(void); - virtual int StateAction(StateMem* sm, int load, int data_only, const char* section_name); virtual void UpdateInput(const void *data); // @@ -72,41 +71,6 @@ void InputDevice_DualAnalog::Power(void) transmit_count = 0; } -int InputDevice_DualAnalog::StateAction(StateMem* sm, int load, int data_only, const char* section_name) -{ - SFORMAT StateRegs[] = - { - SFVAR(dtr), - - SFARRAY(buttons, sizeof(buttons)), - SFARRAY(&axes[0][0], sizeof(axes)), - - SFVAR(command_phase), - SFVAR(bitpos), - SFVAR(receive_buffer), - - SFVAR(command), - - SFARRAY(transmit_buffer, sizeof(transmit_buffer)), - SFVAR(transmit_pos), - SFVAR(transmit_count), - - SFEND - }; - int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name); - - if(load) - { - if((transmit_pos + transmit_count) > sizeof(transmit_buffer)) - { - transmit_pos = 0; - transmit_count = 0; - } - } - - return(ret); -} - void InputDevice_DualAnalog::UpdateInput(const void *data) { diff --git a/psx/octoshock/psx/input/dualshock.cpp b/psx/octoshock/psx/input/dualshock.cpp index 38509c94a8..5156482a2d 100644 --- a/psx/octoshock/psx/input/dualshock.cpp +++ b/psx/octoshock/psx/input/dualshock.cpp @@ -56,7 +56,7 @@ class InputDevice_DualShock : public InputDevice { public: - InputDevice_DualShock(const std::string &arg_name); + InputDevice_DualShock(); virtual ~InputDevice_DualShock(); virtual void Power(void); @@ -112,9 +112,6 @@ class InputDevice_DualShock : public InputDevice // // // - bool am_prev_info; - bool aml_prev_info; - std::string gp_name; pscpu_timestamp_t lastts; // @@ -122,13 +119,9 @@ class InputDevice_DualShock : public InputDevice bool amct_enabled; }; -InputDevice_DualShock::InputDevice_DualShock(const std::string &name) +InputDevice_DualShock::InputDevice_DualShock() { - gp_name = name; Power(); - am_prev_info = analog_mode; - aml_prev_info = analog_mode_locked; - amct_enabled = false; } InputDevice_DualShock::~InputDevice_DualShock() @@ -306,7 +299,7 @@ void InputDevice_DualShock::UpdateInput(const void *data) if(rumble_param[0] == 0x01) sneaky_weaky = 0xFF; - MDFN_en16lsb(rumb_dp, (sneaky_weaky << 0) | (rumble_param[1] << 8)); + MDFN_en16lsb(rumb_dp, (sneaky_weaky << 0) | (rumble_param[1] << 8)); } else { @@ -315,7 +308,7 @@ void InputDevice_DualShock::UpdateInput(const void *data) if(((rumble_param[0] & 0xC0) == 0x40) && ((rumble_param[1] & 0x01) == 0x01)) sneaky_weaky = 0xFF; - MDFN_en16lsb(rumb_dp, sneaky_weaky << 0); + MDFN_en16lsb(rumb_dp, sneaky_weaky << 0); } //printf("%d %d %d %d\n", axes[0][0], axes[0][1], axes[1][0], axes[1][1]); @@ -325,12 +318,12 @@ void InputDevice_DualShock::UpdateInput(const void *data) // CheckManualAnaModeChange(); - if(am_prev_info != analog_mode || aml_prev_info != analog_mode_locked) - { - //MDFN_DispMessage(_("%s: Analog mode is %s(%s)."), gp_name.c_str(), analog_mode ? _("on") : _("off"), analog_mode_locked ? _("locked") : _("unlocked")); - } - aml_prev_info = analog_mode_locked; - am_prev_info = analog_mode; + // + // Encode analog mode state last. + // + d8[2] &= ~0x6; + d8[2] |= (analog_mode ? 0x02 : 0x00); + d8[2] |= (analog_mode_locked ? 0x04 : 0x00); } @@ -1046,9 +1039,9 @@ bool InputDevice_DualShock::Clock(bool TxD, int32 &dsr_pulse_delay) return(ret); } -InputDevice *Device_DualShock_Create(const std::string &name) +InputDevice *Device_DualShock_Create() { - return new InputDevice_DualShock(name); + return new InputDevice_DualShock(); } diff --git a/psx/octoshock/psx/input/dualshock.h b/psx/octoshock/psx/input/dualshock.h index 758f10bf3a..e7c6813b38 100644 --- a/psx/octoshock/psx/input/dualshock.h +++ b/psx/octoshock/psx/input/dualshock.h @@ -5,7 +5,7 @@ namespace MDFN_IEN_PSX { -InputDevice *Device_DualShock_Create(const std::string &name); +InputDevice *Device_DualShock_Create(); extern InputDeviceInputInfoStruct Device_DualShock_IDII[26]; } #endif diff --git a/psx/octoshock/psx/input/gamepad.cpp b/psx/octoshock/psx/input/gamepad.cpp index b3045253bc..1b190809da 100644 --- a/psx/octoshock/psx/input/gamepad.cpp +++ b/psx/octoshock/psx/input/gamepad.cpp @@ -13,7 +13,6 @@ class InputDevice_Gamepad : public InputDevice virtual ~InputDevice_Gamepad(); virtual void Power(void); - virtual int StateAction(StateMem* sm, int load, int data_only, const char* section_name); virtual void UpdateInput(const void *data); // @@ -70,40 +69,6 @@ void InputDevice_Gamepad::Power(void) transmit_count = 0; } -int InputDevice_Gamepad::StateAction(StateMem* sm, int load, int data_only, const char* section_name) -{ - SFORMAT StateRegs[] = - { - SFVAR(dtr), - - SFARRAY(buttons, sizeof(buttons)), - - SFVAR(command_phase), - SFVAR(bitpos), - SFVAR(receive_buffer), - - SFVAR(command), - - SFARRAY(transmit_buffer, sizeof(transmit_buffer)), - SFVAR(transmit_pos), - SFVAR(transmit_count), - - SFEND - }; - int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name); - - if(load) - { - if((transmit_pos + transmit_count) > sizeof(transmit_buffer)) - { - transmit_pos = 0; - transmit_count = 0; - } - } - - return(ret); -} - void InputDevice_Gamepad::UpdateInput(const void *data) { diff --git a/psx/octoshock/psx/input/guncon.cpp b/psx/octoshock/psx/input/guncon.cpp index b9ae7501c5..e8e987a214 100644 --- a/psx/octoshock/psx/input/guncon.cpp +++ b/psx/octoshock/psx/input/guncon.cpp @@ -22,25 +22,24 @@ namespace MDFN_IEN_PSX { -class InputDevice_GunCon : public InputDevice +class InputDevice_GunCon final : public InputDevice { public: InputDevice_GunCon(void); virtual ~InputDevice_GunCon(); - virtual void Power(void); - virtual int StateAction(StateMem* sm, int load, int data_only, const char* section_name); - virtual void UpdateInput(const void *data); - virtual bool RequireNoFrameskip(void); - virtual pscpu_timestamp_t GPULineHook(const pscpu_timestamp_t line_timestamp, bool vsync, uint32 *pixels, const MDFN_PixelFormat* const format, const unsigned width, const unsigned pix_clock_offset, const unsigned pix_clock, const unsigned pix_clock_divider); + virtual void Power(void) override; + virtual void UpdateInput(const void *data) override; + virtual bool RequireNoFrameskip(void) override; + virtual pscpu_timestamp_t GPULineHook(const pscpu_timestamp_t line_timestamp, bool vsync, uint32 *pixels, const MDFN_PixelFormat* const format, const unsigned width, const unsigned pix_clock_offset, const unsigned pix_clock, const unsigned pix_clock_divider) override; // // // - virtual void SetDTR(bool new_dtr); - virtual bool GetDSR(void); - virtual bool Clock(bool TxD, int32 &dsr_pulse_delay); + virtual void SetDTR(bool new_dtr) override; + virtual bool GetDSR(void) override; + virtual bool Clock(bool TxD, int32 &dsr_pulse_delay) override; private: @@ -114,59 +113,60 @@ void InputDevice_GunCon::Power(void) line_counter = 0; } -int InputDevice_GunCon::StateAction(StateMem* sm, int load, int data_only, const char* section_name) -{ - SFORMAT StateRegs[] = - { - SFVAR(dtr), - - SFVAR(buttons), - SFVAR(trigger_eff), - SFVAR(trigger_noclear), - SFVAR(hit_x), - SFVAR(hit_y), - - SFVAR(nom_x), - SFVAR(nom_y), - SFVAR(os_shot_counter), - SFVAR(prev_oss), - - SFVAR(command_phase), - SFVAR(bitpos), - SFVAR(receive_buffer), - - SFVAR(command), - - SFARRAY(transmit_buffer, sizeof(transmit_buffer)), - SFVAR(transmit_pos), - SFVAR(transmit_count), - - SFVAR(prev_vsync), - SFVAR(line_counter), - - SFEND - }; - int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name); - - if(load) - { - if((transmit_pos + transmit_count) > sizeof(transmit_buffer)) - { - transmit_pos = 0; - transmit_count = 0; - } - } - - return(ret); -} +//void InputDevice_GunCon::StateAction(StateMem* sm, const unsigned load, const bool data_only, const char* sname_prefix) +//{ +// SFORMAT StateRegs[] = +// { +// SFVAR(dtr), +// +// SFVAR(buttons), +// SFVAR(trigger_eff), +// SFVAR(trigger_noclear), +// SFVAR(hit_x), +// SFVAR(hit_y), +// +// SFVAR(nom_x), +// SFVAR(nom_y), +// SFVAR(os_shot_counter), +// SFVAR(prev_oss), +// +// SFVAR(command_phase), +// SFVAR(bitpos), +// SFVAR(receive_buffer), +// +// SFVAR(command), +// +// SFARRAY(transmit_buffer, sizeof(transmit_buffer)), +// SFVAR(transmit_pos), +// SFVAR(transmit_count), +// +// SFVAR(prev_vsync), +// SFVAR(line_counter), +// +// SFEND +// }; +// char section_name[32]; +// trio_snprintf(section_name, sizeof(section_name), "%s_GunCon", sname_prefix); +// +// if(!MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name, true) && load) +// Power(); +// else if(load) +// { +// if((transmit_pos + transmit_count) > sizeof(transmit_buffer)) +// { +// transmit_pos = 0; +// transmit_count = 0; +// } +// } +//} void InputDevice_GunCon::UpdateInput(const void *data) { uint8 *d8 = (uint8 *)data; - nom_x = (int16)MDFN_de16lsb(&d8[0]); - nom_y = (int16)MDFN_de16lsb(&d8[2]); + nom_x = (int16)MDFN_de16lsb(&d8[0]); + nom_y = (int16)MDFN_de16lsb(&d8[2]); trigger_noclear = (bool)(d8[4] & 0x1); trigger_eff |= trigger_noclear; @@ -329,8 +329,8 @@ bool InputDevice_GunCon::Clock(bool TxD, int32 &dsr_pulse_delay) } } - MDFN_en16lsb(&transmit_buffer[3], hit_x); - MDFN_en16lsb(&transmit_buffer[5], hit_y); + MDFN_en16lsb(&transmit_buffer[3], hit_x); + MDFN_en16lsb(&transmit_buffer[5], hit_y); hit_x = 0x01; hit_y = 0x0A; @@ -365,19 +365,5 @@ InputDevice *Device_GunCon_Create(void) } -InputDeviceInputInfoStruct Device_GunCon_IDII[6] = -{ - { "x_axis", "X Axis", -1, IDIT_X_AXIS }, - { "y_axis", "Y Axis", -1, IDIT_Y_AXIS }, - - { "trigger", "Trigger", 0, IDIT_BUTTON, NULL }, - - { "a", "A", 1, IDIT_BUTTON, NULL }, - { "b", "B", 2, IDIT_BUTTON, NULL }, - - { "offscreen_shot", "Offscreen Shot(Simulated)", 3, IDIT_BUTTON, NULL }, // Useful for "Judge Dredd", and probably not much else. -}; - - } diff --git a/psx/octoshock/psx/input/guncon.h b/psx/octoshock/psx/input/guncon.h index 7641cc2d9f..4578466b38 100644 --- a/psx/octoshock/psx/input/guncon.h +++ b/psx/octoshock/psx/input/guncon.h @@ -5,7 +5,6 @@ namespace MDFN_IEN_PSX { InputDevice *Device_GunCon_Create(void); -extern InputDeviceInputInfoStruct Device_GunCon_IDII[6]; } #endif diff --git a/psx/octoshock/psx/input/justifier.cpp b/psx/octoshock/psx/input/justifier.cpp index e19bfb9b7b..76f6ad2465 100644 --- a/psx/octoshock/psx/input/justifier.cpp +++ b/psx/octoshock/psx/input/justifier.cpp @@ -22,25 +22,24 @@ namespace MDFN_IEN_PSX { -class InputDevice_Justifier : public InputDevice +class InputDevice_Justifier final : public InputDevice { public: InputDevice_Justifier(void); virtual ~InputDevice_Justifier(); - virtual void Power(void); - virtual int StateAction(StateMem* sm, int load, int data_only, const char* section_name); - virtual void UpdateInput(const void *data); - virtual bool RequireNoFrameskip(void); - virtual pscpu_timestamp_t GPULineHook(const pscpu_timestamp_t timestamp, bool vsync, uint32 *pixels, const MDFN_PixelFormat* const format, const unsigned width, const unsigned pix_clock_offset, const unsigned pix_clock, const unsigned pix_clock_divider); + virtual void Power(void) override; + virtual void UpdateInput(const void *data) override; + virtual bool RequireNoFrameskip(void) override; + virtual pscpu_timestamp_t GPULineHook(const pscpu_timestamp_t timestamp, bool vsync, uint32 *pixels, const MDFN_PixelFormat* const format, const unsigned width, const unsigned pix_clock_offset, const unsigned pix_clock, const unsigned pix_clock_divider) override; // // // - virtual void SetDTR(bool new_dtr); - virtual bool GetDSR(void); - virtual bool Clock(bool TxD, int32 &dsr_pulse_delay); + virtual void SetDTR(bool new_dtr) override; + virtual bool GetDSR(void) override; + virtual bool Clock(bool TxD, int32 &dsr_pulse_delay) override; private: @@ -119,8 +118,8 @@ void InputDevice_Justifier::UpdateInput(const void *data) { uint8 *d8 = (uint8 *)data; - nom_x = (int16)MDFN_de16lsb(&d8[0]); - nom_y = (int16)MDFN_de16lsb(&d8[2]); + nom_x = (int16)MDFN_de16lsb(&d8[0]); + nom_y = (int16)MDFN_de16lsb(&d8[2]); trigger_noclear = (bool)(d8[4] & 0x1); trigger_eff |= trigger_noclear; @@ -135,51 +134,52 @@ void InputDevice_Justifier::UpdateInput(const void *data) prev_oss = d8[4] & 0x8; } -int InputDevice_Justifier::StateAction(StateMem* sm, int load, int data_only, const char* section_name) -{ - SFORMAT StateRegs[] = - { - SFVAR(dtr), - - SFVAR(buttons), - SFVAR(trigger_eff), - SFVAR(trigger_noclear), - - SFVAR(need_hit_detect), - - SFVAR(nom_x), - SFVAR(nom_y), - SFVAR(os_shot_counter), - SFVAR(prev_oss), - - SFVAR(command_phase), - SFVAR(bitpos), - SFVAR(receive_buffer), - - SFVAR(command), - - SFARRAY(transmit_buffer, sizeof(transmit_buffer)), - SFVAR(transmit_pos), - SFVAR(transmit_count), - - SFVAR(prev_vsync), - SFVAR(line_counter), - - SFEND - }; - int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name); - - if(load) - { - if((transmit_pos + transmit_count) > sizeof(transmit_buffer)) - { - transmit_pos = 0; - transmit_count = 0; - } - } - - return(ret); -} +//void InputDevice_Justifier::StateAction(StateMem* sm, const unsigned load, const bool data_only, const char* sname_prefix) +//{ +// SFORMAT StateRegs[] = +// { +// SFVAR(dtr), +// +// SFVAR(buttons), +// SFVAR(trigger_eff), +// SFVAR(trigger_noclear), +// +// SFVAR(need_hit_detect), +// +// SFVAR(nom_x), +// SFVAR(nom_y), +// SFVAR(os_shot_counter), +// SFVAR(prev_oss), +// +// SFVAR(command_phase), +// SFVAR(bitpos), +// SFVAR(receive_buffer), +// +// SFVAR(command), +// +// SFARRAY(transmit_buffer, sizeof(transmit_buffer)), +// SFVAR(transmit_pos), +// SFVAR(transmit_count), +// +// SFVAR(prev_vsync), +// SFVAR(line_counter), +// +// SFEND +// }; +// char section_name[32]; +// trio_snprintf(section_name, sizeof(section_name), "%s_Justifier", sname_prefix); +// +// if(!MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name, true) && load) +// Power(); +// else if(load) +// { +// if((transmit_pos + transmit_count) > sizeof(transmit_buffer)) +// { +// transmit_pos = 0; +// transmit_count = 0; +// } +// } +//} bool InputDevice_Justifier::RequireNoFrameskip(void) @@ -208,15 +208,22 @@ pscpu_timestamp_t InputDevice_Justifier::GPULineHook(const pscpu_timestamp_t tim //if(gxa < 0 && gx >= 0) // gxa = 0; - if(!os_shot_counter && need_hit_detect && gxa >= 0 && gxa < (int)width && line_counter >= (avs + gy - 1) && line_counter <= (avs + gy + 1)) + if(!os_shot_counter && need_hit_detect) { - int r, g, b, a; - - format->DecodeColor(pixels[gxa], r, g, b, a); - - if((r + g + b) >= 0x40) // Wrong, but not COMPLETELY ABSOLUTELY wrong, at least. ;) + for(int32 ix = gxa; ix < (gxa + (int32)(pix_clock / 762925)); ix++) { - ret = timestamp + (int64)(gxa + pix_clock_offset) * (44100 * 768) / pix_clock - 177; + if(ix >= 0 && ix < (int)width && line_counter >= (avs + gy - 6) && line_counter <= (avs + gy + 6)) + { + int r, g, b, a; + + format->DecodeColor(pixels[ix], r, g, b, a); + + if((r + g + b) >= 0x40) // Wrong, but not COMPLETELY ABSOLUTELY wrong, at least. ;) + { + ret = timestamp + (int64)(ix + pix_clock_offset) * (44100 * 768) / pix_clock - 177; + break; + } + } } } @@ -363,19 +370,6 @@ InputDevice *Device_Justifier_Create(void) } -InputDeviceInputInfoStruct Device_Justifier_IDII[6] = -{ - { "x_axis", "X Axis", -1, IDIT_X_AXIS }, - { "y_axis", "Y Axis", -1, IDIT_Y_AXIS }, - - { "trigger", "Trigger", 0, IDIT_BUTTON, NULL }, - - { "o", "O", 1, IDIT_BUTTON, NULL }, - { "start", "Start", 2, IDIT_BUTTON, NULL }, - - { "offscreen_shot", "Offscreen Shot(Simulated)", 3, IDIT_BUTTON, NULL }, -}; - } diff --git a/psx/octoshock/psx/input/justifier.h b/psx/octoshock/psx/input/justifier.h index b9c95982a6..a412f2748b 100644 --- a/psx/octoshock/psx/input/justifier.h +++ b/psx/octoshock/psx/input/justifier.h @@ -5,7 +5,6 @@ namespace MDFN_IEN_PSX { InputDevice *Device_Justifier_Create(void); -extern InputDeviceInputInfoStruct Device_Justifier_IDII[6]; } #endif diff --git a/psx/octoshock/psx/input/memcard.cpp b/psx/octoshock/psx/input/memcard.cpp index e201e6dfdf..792ddc7332 100644 --- a/psx/octoshock/psx/input/memcard.cpp +++ b/psx/octoshock/psx/input/memcard.cpp @@ -40,7 +40,6 @@ class InputDevice_Memcard : public InputDevice virtual ~InputDevice_Memcard(); virtual void Power(void); - virtual int StateAction(StateMem* sm, int load, int data_only, const char* section_name); virtual void SyncState(bool isReader, EW::NewState *ns); // // @@ -52,10 +51,10 @@ class InputDevice_Memcard : public InputDevice // // virtual uint32 GetNVSize(void); - virtual void ReadNV(uint8 *buffer, uint32 offset, uint32 size); + virtual const uint8* ReadNV(void) const override; virtual void WriteNV(const uint8 *buffer, uint32 offset, uint32 size); - virtual uint64 GetNVDirtyCount(void); + virtual uint64 GetNVDirtyCount(void) const; virtual void ResetNVDirtyCount(void); private: @@ -193,67 +192,67 @@ void InputDevice_Memcard::SyncState(bool isReader, EW::NewState *ns) NSS(card_data); dirty_count = 0; } - -int InputDevice_Memcard::StateAction(StateMem* sm, int load, int data_only, const char* section_name) -{ - // Don't save dirty_count. - SFORMAT StateRegs[] = - { - SFVAR(presence_new), - - SFARRAY(rw_buffer, sizeof(rw_buffer)), - SFVAR(write_xor), - - SFVAR(dtr), - SFVAR(command_phase), - SFVAR(bitpos), - SFVAR(receive_buffer), - - SFVAR(command), - SFVAR(addr), - SFVAR(calced_xor), - - SFVAR(transmit_buffer), - SFVAR(transmit_count), - - SFVAR(data_used), - - SFEND - }; - - SFORMAT CD_StateRegs[] = - { - SFARRAY(card_data, sizeof(card_data)), - SFEND - }; - int ret = 1; - - if(MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name) != 0) - { - //printf("%s data_used=%d\n", section_name, data_used); - if(data_used) - { - std::string tmp_name = std::string(section_name) + "_DT"; - - ret &= MDFNSS_StateAction(sm, load, data_only, CD_StateRegs, tmp_name.c_str()); - } - - if(load) - { - if(data_used) - dirty_count++; - else - { - //printf("Format: %s\n", section_name); - Format(); - } - } - } - else - ret = 0; - - return(ret); -} +// +//int InputDevice_Memcard::StateAction(StateMem* sm, int load, int data_only, const char* section_name) +//{ +// // Don't save dirty_count. +// SFORMAT StateRegs[] = +// { +// SFVAR(presence_new), +// +// SFARRAY(rw_buffer, sizeof(rw_buffer)), +// SFVAR(write_xor), +// +// SFVAR(dtr), +// SFVAR(command_phase), +// SFVAR(bitpos), +// SFVAR(receive_buffer), +// +// SFVAR(command), +// SFVAR(addr), +// SFVAR(calced_xor), +// +// SFVAR(transmit_buffer), +// SFVAR(transmit_count), +// +// SFVAR(data_used), +// +// SFEND +// }; +// +// SFORMAT CD_StateRegs[] = +// { +// SFARRAY(card_data, sizeof(card_data)), +// SFEND +// }; +// int ret = 1; +// +// if(MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name) != 0) +// { +// //printf("%s data_used=%d\n", section_name, data_used); +// if(data_used) +// { +// std::string tmp_name = std::string(section_name) + "_DT"; +// +// ret &= MDFNSS_StateAction(sm, load, data_only, CD_StateRegs, tmp_name.c_str()); +// } +// +// if(load) +// { +// if(data_used) +// dirty_count++; +// else +// { +// //printf("Format: %s\n", section_name); +// Format(); +// } +// } +// } +// else +// ret = 0; +// +// return(ret); +//} void InputDevice_Memcard::SetDTR(bool new_dtr) @@ -531,14 +530,9 @@ uint32 InputDevice_Memcard::GetNVSize(void) return(sizeof(card_data)); } -void InputDevice_Memcard::ReadNV(uint8 *buffer, uint32 offset, uint32 size) -{ - while(size--) - { - *buffer = card_data[offset & (sizeof(card_data) - 1)]; - buffer++; - offset++; - } +const uint8* InputDevice_Memcard::ReadNV(void) const +{ + return card_data; } void InputDevice_Memcard::WriteNV(const uint8 *buffer, uint32 offset, uint32 size) @@ -559,7 +553,7 @@ void InputDevice_Memcard::WriteNV(const uint8 *buffer, uint32 offset, uint32 siz } } -uint64 InputDevice_Memcard::GetNVDirtyCount(void) +uint64 InputDevice_Memcard::GetNVDirtyCount(void) const { return(dirty_count); } diff --git a/psx/octoshock/psx/input/mouse.cpp b/psx/octoshock/psx/input/mouse.cpp index 530ff638ad..9cb4a30efb 100644 --- a/psx/octoshock/psx/input/mouse.cpp +++ b/psx/octoshock/psx/input/mouse.cpp @@ -5,25 +5,24 @@ namespace MDFN_IEN_PSX { -class InputDevice_Mouse : public InputDevice +class InputDevice_Mouse final : public InputDevice { public: InputDevice_Mouse(); virtual ~InputDevice_Mouse(); - virtual void Power(void); - virtual int StateAction(StateMem* sm, int load, int data_only, const char* section_name); - virtual void UpdateInput(const void *data); + virtual void Power(void) override; + virtual void UpdateInput(const void *data) override; - virtual void Update(const pscpu_timestamp_t timestamp); - virtual void ResetTS(void); + virtual void Update(const pscpu_timestamp_t timestamp) override; + virtual void ResetTS(void) override; // // // - virtual void SetDTR(bool new_dtr); - virtual bool Clock(bool TxD, int32 &dsr_pulse_delay); + virtual void SetDTR(bool new_dtr) override; + virtual bool Clock(bool TxD, int32 &dsr_pulse_delay) override; private: @@ -106,50 +105,51 @@ void InputDevice_Mouse::Power(void) transmit_count = 0; } -int InputDevice_Mouse::StateAction(StateMem* sm, int load, int data_only, const char* section_name) -{ - SFORMAT StateRegs[] = - { - SFVAR(clear_timeout), - - SFVAR(dtr), - - SFVAR(button), - SFVAR(button_post_mask), - SFVAR(accum_xdelta), - SFVAR(accum_ydelta), - - SFVAR(command_phase), - SFVAR(bitpos), - SFVAR(receive_buffer), - - SFVAR(command), - - SFARRAY(transmit_buffer, sizeof(transmit_buffer)), - SFVAR(transmit_pos), - SFVAR(transmit_count), - - SFEND - }; - int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name); - - if(load) - { - if((transmit_pos + transmit_count) > sizeof(transmit_buffer)) - { - transmit_pos = 0; - transmit_count = 0; - } - } - - return(ret); -} +//void InputDevice_Mouse::StateAction(StateMem* sm, const unsigned load, const bool data_only, const char* sname_prefix) +//{ +// SFORMAT StateRegs[] = +// { +// SFVAR(clear_timeout), +// +// SFVAR(dtr), +// +// SFVAR(button), +// SFVAR(button_post_mask), +// SFVAR(accum_xdelta), +// SFVAR(accum_ydelta), +// +// SFVAR(command_phase), +// SFVAR(bitpos), +// SFVAR(receive_buffer), +// +// SFVAR(command), +// +// SFARRAY(transmit_buffer, sizeof(transmit_buffer)), +// SFVAR(transmit_pos), +// SFVAR(transmit_count), +// +// SFEND +// }; +// char section_name[32]; +// trio_snprintf(section_name, sizeof(section_name), "%s_Mouse", sname_prefix); +// +// if(!MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name, true) && load) +// Power(); +// else if(load) +// { +// if((transmit_pos + transmit_count) > sizeof(transmit_buffer)) +// { +// transmit_pos = 0; +// transmit_count = 0; +// } +// } +//} void InputDevice_Mouse::UpdateInput(const void *data) { - accum_xdelta += (int32)MDFN_de32lsb((uint8*)data + 0); - accum_ydelta += (int32)MDFN_de32lsb((uint8*)data + 4); + accum_xdelta += (int32)MDFN_de32lsb((uint8*)data + 0); + accum_ydelta += (int32)MDFN_de32lsb((uint8*)data + 4); if(accum_xdelta > 30 * 127) accum_xdelta = 30 * 127; if(accum_xdelta < 30 * -128) accum_xdelta = 30 * -128; @@ -280,14 +280,4 @@ InputDevice *Device_Mouse_Create(void) } -InputDeviceInputInfoStruct Device_Mouse_IDII[4] = -{ - { "x_axis", "X Axis", -1, IDIT_X_AXIS_REL }, - { "y_axis", "Y Axis", -1, IDIT_Y_AXIS_REL }, - { "right", "Right Button", 1, IDIT_BUTTON, NULL }, - { "left", "Left Button", 0, IDIT_BUTTON, NULL }, -}; - - - } diff --git a/psx/octoshock/psx/input/mouse.h b/psx/octoshock/psx/input/mouse.h index 2597a75f31..d84dc5f9b2 100644 --- a/psx/octoshock/psx/input/mouse.h +++ b/psx/octoshock/psx/input/mouse.h @@ -5,7 +5,5 @@ namespace MDFN_IEN_PSX { InputDevice *Device_Mouse_Create(void); -extern InputDeviceInputInfoStruct Device_Mouse_IDII[4]; - } #endif diff --git a/psx/octoshock/psx/input/multitap.cpp b/psx/octoshock/psx/input/multitap.cpp index 4ec530b64e..4bc97c1f7f 100644 --- a/psx/octoshock/psx/input/multitap.cpp +++ b/psx/octoshock/psx/input/multitap.cpp @@ -144,42 +144,102 @@ void InputDevice_Multitap::Power(void) } } -int InputDevice_Multitap::StateAction(StateMem* sm, int load, int data_only, const char* section_name) +//void InputDevice_Multitap::StateAction(StateMem* sm, const unsigned load, const bool data_only, const char* sname_prefix) +//{ +// SFORMAT StateRegs[] = +// { +// SFVAR(dtr), +// +// SFVAR(selected_device), +// SFVAR(full_mode_setting), +// +// SFVAR(full_mode), +// SFVAR(mc_mode), +// +// SFVAR(fm_dp), +// SFARRAY(&fm_buffer[0][0], sizeof(fm_buffer) / sizeof(fm_buffer[0][0])), +// +// SFVAR(fm_deferred_error_temp), +// SFVAR(fm_deferred_error), +// SFVAR(fm_command_error), +// +// SFVAR(command), +// SFVAR(receive_buffer), +// SFVAR(bit_counter), +// SFVAR(byte_counter), +// +// SFEND +// }; +// char section_name[32]; +// trio_snprintf(section_name, sizeof(section_name), "%s_MT", sname_prefix); +// +// if(!MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name, true) && load) +// Power(); +// else if(load) +// { +// +// } +// +// for(unsigned i = 0; i < 4; i++) +// { +// char tmpbuf[32]; +// +// trio_snprintf(tmpbuf, sizeof(tmpbuf), "%sP%u", section_name, i); +// pad_devices[i]->StateAction(sm, load, data_only, tmpbuf); +// } +// +// for(unsigned i = 0; i < 4; i++) +// { +// char tmpbuf[32]; +// +// trio_snprintf(tmpbuf, sizeof(tmpbuf), "%sMC%u", section_name, i); +// mc_devices[i]->StateAction(sm, load, data_only, tmpbuf); +// } +//} + +void InputDevice_Multitap::Update(const pscpu_timestamp_t timestamp) { - SFORMAT StateRegs[] = + for(unsigned i = 0; i < 4; i++) { - SFVAR(dtr), - - SFVAR(selected_device), - SFVAR(full_mode_setting), - - SFVAR(full_mode), - SFVAR(mc_mode), - - SFVAR(fm_dp), - SFARRAY(&fm_buffer[0][0], sizeof(fm_buffer) / sizeof(fm_buffer[0][0])), - - SFVAR(fm_deferred_error_temp), - SFVAR(fm_deferred_error), - SFVAR(fm_command_error), - - SFVAR(command), - SFVAR(receive_buffer), - SFVAR(bit_counter), - SFVAR(byte_counter), - - SFEND - }; - int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name); - - if(load) - { - + pad_devices[i]->Update(timestamp); + mc_devices[i]->Update(timestamp); } +} + +void InputDevice_Multitap::ResetTS(void) +{ + for(unsigned i = 0; i < 4; i++) + { + pad_devices[i]->ResetTS(); + mc_devices[i]->ResetTS(); + } +} + + +bool InputDevice_Multitap::RequireNoFrameskip(void) +{ + bool ret = false; + + for(unsigned i = 0; i < 4; i++) + ret |= pad_devices[i]->RequireNoFrameskip(); return(ret); } +pscpu_timestamp_t InputDevice_Multitap::GPULineHook(const pscpu_timestamp_t line_timestamp, bool vsync, uint32 *pixels, const MDFN_PixelFormat* const format, const unsigned width, const unsigned pix_clock_offset, const unsigned pix_clock, const unsigned pix_clock_divider) +{ + pscpu_timestamp_t ret = PSX_EVENT_MAXTS; + + for(unsigned i = 0; i < 4; i++) + { + pscpu_timestamp_t tmp = pad_devices[i]->GPULineHook(line_timestamp, vsync, pixels, format, width, pix_clock_offset, pix_clock, pix_clock_divider); + + if(i == 0) // FIXME; though the problems the design flaw causes(multitap issues with justifier) are documented at least. + ret = tmp; + } + + return(ret); +} void InputDevice_Multitap::SetDTR(bool new_dtr) { diff --git a/psx/octoshock/psx/input/multitap.h b/psx/octoshock/psx/input/multitap.h index 4736d1b269..b4a3699004 100644 --- a/psx/octoshock/psx/input/multitap.h +++ b/psx/octoshock/psx/input/multitap.h @@ -4,23 +4,28 @@ namespace MDFN_IEN_PSX { -class InputDevice_Multitap : public InputDevice +class InputDevice_Multitap final : public InputDevice { public: InputDevice_Multitap(); virtual ~InputDevice_Multitap(); - virtual void Power(void); - virtual int StateAction(StateMem* sm, int load, int data_only, const char* section_name); + virtual void Power(void) override; + + virtual void Update(const pscpu_timestamp_t timestamp) override; + virtual void ResetTS(void) override; + + virtual bool RequireNoFrameskip(void) override; + virtual pscpu_timestamp_t GPULineHook(const pscpu_timestamp_t line_timestamp, bool vsync, uint32 *pixels, const MDFN_PixelFormat* const format, const unsigned width, const unsigned pix_clock_offset, const unsigned pix_clock, const unsigned pix_clock_divider) override; void SetSubDevice(unsigned int sub_index, InputDevice *device, InputDevice *mc_device); // // // - virtual void SetDTR(bool new_dtr); - virtual bool GetDSR(void); - virtual bool Clock(bool TxD, int32 &dsr_pulse_delay); + virtual void SetDTR(bool new_dtr) override; + virtual bool GetDSR(void) override; + virtual bool Clock(bool TxD, int32 &dsr_pulse_delay) override; private: diff --git a/psx/octoshock/psx/input/negcon.cpp b/psx/octoshock/psx/input/negcon.cpp index fc6f2633ae..7a30d5aed5 100644 --- a/psx/octoshock/psx/input/negcon.cpp +++ b/psx/octoshock/psx/input/negcon.cpp @@ -22,23 +22,22 @@ namespace MDFN_IEN_PSX { -class InputDevice_neGcon : public InputDevice +class InputDevice_neGcon final : public InputDevice { public: InputDevice_neGcon(void); virtual ~InputDevice_neGcon(); - virtual void Power(void); - virtual int StateAction(StateMem* sm, int load, int data_only, const char* section_name); - virtual void UpdateInput(const void *data); + virtual void Power(void) override; + virtual void UpdateInput(const void *data) override; // // // - virtual void SetDTR(bool new_dtr); - virtual bool GetDSR(void); - virtual bool Clock(bool TxD, int32 &dsr_pulse_delay); + virtual void SetDTR(bool new_dtr) override; + virtual bool GetDSR(void) override; + virtual bool Clock(bool TxD, int32 &dsr_pulse_delay) override; private: @@ -92,42 +91,43 @@ void InputDevice_neGcon::Power(void) transmit_pos = 0; transmit_count = 0; } - -int InputDevice_neGcon::StateAction(StateMem* sm, int load, int data_only, const char* section_name) -{ - SFORMAT StateRegs[] = - { - SFVAR(dtr), - - SFARRAY(buttons, sizeof(buttons)), - SFVAR(twist), - SFARRAY(anabuttons, sizeof(anabuttons)), - - SFVAR(command_phase), - SFVAR(bitpos), - SFVAR(receive_buffer), - - SFVAR(command), - - SFARRAY(transmit_buffer, sizeof(transmit_buffer)), - SFVAR(transmit_pos), - SFVAR(transmit_count), - - SFEND - }; - int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name); - - if(load) - { - if((transmit_pos + transmit_count) > sizeof(transmit_buffer)) - { - transmit_pos = 0; - transmit_count = 0; - } - } - - return(ret); -} +// +//void InputDevice_neGcon::StateAction(StateMem* sm, const unsigned load, const bool data_only, const char* sname_prefix) +//{ +// SFORMAT StateRegs[] = +// { +// SFVAR(dtr), +// +// SFARRAY(buttons, sizeof(buttons)), +// SFVAR(twist), +// SFARRAY(anabuttons, sizeof(anabuttons)), +// +// SFVAR(command_phase), +// SFVAR(bitpos), +// SFVAR(receive_buffer), +// +// SFVAR(command), +// +// SFARRAY(transmit_buffer, sizeof(transmit_buffer)), +// SFVAR(transmit_pos), +// SFVAR(transmit_count), +// +// SFEND +// }; +// char section_name[32]; +// trio_snprintf(section_name, sizeof(section_name), "%s_neGcon", sname_prefix); +// +// if(!MDFNSS_StateAction(sm, load, data_only, StateRegs, section_name, true) && load) +// Power(); +// else if(load) +// { +// if((transmit_pos + transmit_count) > sizeof(transmit_buffer)) +// { +// transmit_pos = 0; +// transmit_count = 0; +// } +// } +//} void InputDevice_neGcon::UpdateInput(const void *data) @@ -137,11 +137,11 @@ void InputDevice_neGcon::UpdateInput(const void *data) buttons[0] = d8[0]; buttons[1] = d8[1]; - twist = ((32768 + MDFN_de16lsb((const uint8 *)data + 2) - (((int32)MDFN_de16lsb((const uint8 *)data + 4) * 32768 + 16383) / 32767)) * 255 + 32767) / 65535; + twist = ((32768 + MDFN_de16lsb((const uint8 *)data + 2) - (((int32)MDFN_de16lsb((const uint8 *)data + 4) * 32768 + 16383) / 32767)) * 255 + 32767) / 65535; - anabuttons[0] = (MDFN_de16lsb((const uint8 *)data + 6) * 255 + 16383) / 32767; - anabuttons[1] = (MDFN_de16lsb((const uint8 *)data + 8) * 255 + 16383) / 32767; - anabuttons[2] = (MDFN_de16lsb((const uint8 *)data + 10) * 255 + 16383) / 32767; + anabuttons[0] = (MDFN_de16lsb((const uint8 *)data + 6) * 255 + 16383) / 32767; + anabuttons[1] = (MDFN_de16lsb((const uint8 *)data + 8) * 255 + 16383) / 32767; + anabuttons[2] = (MDFN_de16lsb((const uint8 *)data + 10) * 255 + 16383) / 32767; //printf("%02x %02x %02x %02x\n", twist, anabuttons[0], anabuttons[1], anabuttons[2]); } @@ -265,33 +265,4 @@ InputDevice *Device_neGcon_Create(void) } -InputDeviceInputInfoStruct Device_neGcon_IDII[21] = -{ - { NULL, "empty", -1, IDIT_BUTTON, NULL }, - { NULL, "empty", -1, IDIT_BUTTON, NULL }, - { NULL, "empty", -1, IDIT_BUTTON, NULL }, - { "start", "START", 4, IDIT_BUTTON, NULL }, - { "up", "D-Pad UP ↑", 0, IDIT_BUTTON, "down" }, - { "right", "D-Pad RIGHT →", 3, IDIT_BUTTON, "left" }, - { "down", "D-Pad DOWN ↓", 1, IDIT_BUTTON, "up" }, - { "left", "D-Pad LEFT ←", 2, IDIT_BUTTON, "right" }, - - { NULL, "empty", -1, IDIT_BUTTON, NULL }, - { NULL, "empty", -1, IDIT_BUTTON, NULL }, - { NULL, "empty", -1, IDIT_BUTTON, NULL }, - { "r", "Right Shoulder", 12, IDIT_BUTTON }, - - { "b", "B", 9, IDIT_BUTTON, NULL }, - { "a", "A", 10, IDIT_BUTTON, NULL }, - { NULL, "empty", -1, IDIT_BUTTON, NULL }, - { NULL, "empty", -1, IDIT_BUTTON, NULL }, - - { "twist_cwise", "Twist ↓|↑ (Analog, Turn Right)", 6, IDIT_BUTTON_ANALOG }, - { "twist_ccwise", "Twist ↑|↓ (Analog, Turn Left)", 5, IDIT_BUTTON_ANALOG }, - { "i", "I (Analog)", 8, IDIT_BUTTON_ANALOG }, - { "ii", "II (Analog)", 7, IDIT_BUTTON_ANALOG }, - - { "l", "Left Shoulder (Analog)", 11, IDIT_BUTTON_ANALOG }, -}; - } diff --git a/psx/octoshock/psx/input/negcon.h b/psx/octoshock/psx/input/negcon.h index 0091fec476..74129294b2 100644 --- a/psx/octoshock/psx/input/negcon.h +++ b/psx/octoshock/psx/input/negcon.h @@ -4,6 +4,5 @@ namespace MDFN_IEN_PSX { InputDevice *Device_neGcon_Create(void); - extern InputDeviceInputInfoStruct Device_neGcon_IDII[21]; } #endif diff --git a/psx/octoshock/psx/irq.cpp b/psx/octoshock/psx/irq.cpp index 61182b075d..0d7919cc00 100644 --- a/psx/octoshock/psx/irq.cpp +++ b/psx/octoshock/psx/irq.cpp @@ -29,35 +29,6 @@ static INLINE void Recalc(void) CPU->AssertIRQ(0, (bool)(Status & Mask)); } -void IRQ_Power(void) -{ - Asserted = 0; - Status = 0; - Mask = 0; - - Recalc(); -} - -int IRQ_StateAction(StateMem *sm, int load, int data_only) -{ - SFORMAT StateRegs[] = - { - SFVAR(Asserted), - SFVAR(Mask), - SFVAR(Status), - SFEND - }; - int ret = MDFNSS_StateAction(sm, load, data_only, StateRegs, "IRQ"); - - if(load) - { - Recalc(); - } - - return(ret); -} - - void IRQ_SyncState(bool isReader, EW::NewState *ns) { NSS(Asserted); @@ -130,6 +101,14 @@ uint32 IRQ_Read(uint32 A) return(ret); } +void IRQ_Power(void) +{ + Asserted = 0; + Status = 0; + Mask = 0; + + Recalc(); +} void IRQ_Reset(void) { diff --git a/psx/octoshock/psx/irq.h b/psx/octoshock/psx/irq.h index f716a40b9d..d6f21f90e5 100644 --- a/psx/octoshock/psx/irq.h +++ b/psx/octoshock/psx/irq.h @@ -19,7 +19,7 @@ enum IRQ_PIO = 10, // Probably }; -void IRQ_Power(void); +void IRQ_Power(void) MDFN_COLD; void IRQ_Assert(int which, bool asserted); void IRQ_Write(uint32 A, uint32 V); @@ -36,7 +36,6 @@ enum uint32 IRQ_GetRegister(unsigned int which, char *special, const uint32 special_len); void IRQ_SetRegister(unsigned int which, uint32 value); -int IRQ_StateAction(StateMem *sm, int load, int data_only); }; diff --git a/psx/octoshock/psx/masmem.h b/psx/octoshock/psx/masmem.h new file mode 100644 index 0000000000..4f5ba08929 --- /dev/null +++ b/psx/octoshock/psx/masmem.h @@ -0,0 +1,102 @@ +#ifndef __MDFN_PSX_MASMEM_H +#define __MDFN_PSX_MASMEM_H + +#include "endian.h" + +// address must not be >= size specified by template parameter, and address must be a multiple of the byte-size of the +// unit(1,2,4) being read(except for Read/WriteU24, which only needs to be byte-aligned). +// + +template //, unsigned pre_padding_count, unsigned post_padding_count> +struct MultiAccessSizeMem +{ + //uint8 pre_padding[pre_padding_count ? pre_padding_count : 1]; + + union + { + uint8 data8[size]; + uint64 alignment_dummy[1]; + }; + + //uint8 post_padding[post_padding_count ? post_padding_count : 1]; + + template + INLINE T Read(uint32 address) + { + return MDFN_deXsb(data8 + address); + } + + template + INLINE void Write(uint32 address, T value) + { + MDFN_enXsb(data8 + address, value); + } + + INLINE uint8 ReadU8(uint32 address) + { + return Read(address); + } + + INLINE uint16 ReadU16(uint32 address) + { + return Read(address); + } + + INLINE uint32 ReadU32(uint32 address) + { + return Read(address); + } + + INLINE uint32 ReadU24(uint32 address) + { + uint32 ret; + + if(!big_endian) + { + ret = ReadU8(address) << 0; + ret |= ReadU8(address + 1) << 8; + ret |= ReadU8(address + 2) << 16; + } + else + { + ret = ReadU8(address) << 16; + ret |= ReadU8(address + 1) << 8; + ret |= ReadU8(address + 2) << 0; + } + return(ret); + } + + + INLINE void WriteU8(uint32 address, uint8 value) + { + Write(address, value); + } + + INLINE void WriteU16(uint32 address, uint16 value) + { + Write(address, value); + } + + INLINE void WriteU32(uint32 address, uint32 value) + { + Write(address, value); + } + + INLINE void WriteU24(uint32 address, uint32 value) + { + if(!big_endian) + { + WriteU8(address + 0, value >> 0); + WriteU8(address + 1, value >> 8); + WriteU8(address + 2, value >> 16); + } + else + { + WriteU8(address + 0, value >> 16); + WriteU8(address + 1, value >> 8); + WriteU8(address + 2, value >> 0); + } + } +}; + +#endif diff --git a/psx/octoshock/psx/mdec.cpp b/psx/octoshock/psx/mdec.cpp index 00218548f0..e975bbc02f 100644 --- a/psx/octoshock/psx/mdec.cpp +++ b/psx/octoshock/psx/mdec.cpp @@ -407,7 +407,7 @@ static void EncodeImage(const unsigned ybn) YCbCr_to_RGB(by[x], cb[x >> 1], cr[x >> 1], r, g, b); - StoreU16_LE(pix_out, pixel_xor ^ RGB_to_RGB555(r, g, b)); + MDFN_en16lsb(pix_out, pixel_xor ^ RGB_to_RGB555(r, g, b)); pix_out++; } } @@ -603,7 +603,7 @@ void MDEC_Run(int32 clocks) PixelBufferReadOffset = 0; while(PixelBufferReadOffset != PixelBufferCount32) { - MDEC_WRITE_FIFO(LoadU32_LE(&PixelBuffer.pix32[PixelBufferReadOffset++])); + MDEC_WRITE_FIFO(MDFN_de32lsb(&PixelBuffer.pix32[PixelBufferReadOffset++])); } } while(InCounter != 0xFFFF); } diff --git a/psx/octoshock/psx/mdec.h b/psx/octoshock/psx/mdec.h index a9ff800720..0f7de66576 100644 --- a/psx/octoshock/psx/mdec.h +++ b/psx/octoshock/psx/mdec.h @@ -12,13 +12,12 @@ void MDEC_Write(const pscpu_timestamp_t timestamp, uint32 A, uint32 V); uint32 MDEC_Read(const pscpu_timestamp_t timestamp, uint32 A); -void MDEC_Power(void); +void MDEC_Power(void) MDFN_COLD; bool MDEC_DMACanWrite(void); bool MDEC_DMACanRead(void); void MDEC_Run(int32 clocks); -int MDEC_StateAction(StateMem *sm, int load, int data_only); } #endif diff --git a/psx/octoshock/psx/psx.cpp b/psx/octoshock/psx/psx.cpp index 6d48717f28..2dd2c195a7 100644 --- a/psx/octoshock/psx/psx.cpp +++ b/psx/octoshock/psx/psx.cpp @@ -40,22 +40,41 @@ namespace MDFN_IEN_PSX { -#if PSX_DBGPRINT_ENABLE -static unsigned psx_dbg_level = 0; - -void PSX_DBG(unsigned level, const char *format, ...) throw() -{ - if(psx_dbg_level >= level) - { - va_list ap; - - va_start(ap, format); - - trio_vprintf(format, ap); - - va_end(ap); - } -} + +static unsigned psx_dbg_level = 0; +#if PSX_DBGPRINT_ENABLE + +void PSX_DBG_BIOS_PUTC(uint8 c) noexcept +{ + if(psx_dbg_level >= PSX_DBG_BIOS_PRINT) + { + if(c == 0x1B) + return; + + fputc(c, stdout); + + //if(c == '\n') + //{ + // fputc('%', stdout); + // fputc(' ', stdout); + //} + fflush(stdout); + } +} + +void PSX_DBG(unsigned level, const char *format, ...) noexcept +{ + if(psx_dbg_level >= level) + { + va_list ap; + + va_start(ap, format); + + trio_vprintf(format, ap); + + va_end(ap); + } +} #endif @@ -151,10 +170,10 @@ PS_GPU *GPU = NULL; PS_CDC *CDC = NULL; FrontIO *FIO = NULL; -static MultiAccessSizeMem<512 * 1024, uint32, false> *BIOSROM = NULL; -static MultiAccessSizeMem<65536, uint32, false> *PIOMem = NULL; +static MultiAccessSizeMem<512 * 1024, false> *BIOSROM = NULL; +static MultiAccessSizeMem<65536, false> *PIOMem = NULL; -MultiAccessSizeMem<2048 * 1024, uint32, false> MainRAM; +MultiAccessSizeMem<2048 * 1024, false> MainRAM; static uint32 TextMem_Start; static std::vector TextMem; @@ -731,8 +750,8 @@ template static INLINE void MemRW(pscpu else switch(sizeof(T)) { case 1: V = TextMem[(A & 0x7FFFFF) - 65536]; break; - case 2: V = MDFN_de16lsb(&TextMem[(A & 0x7FFFFF) - 65536]); break; - case 4: V = MDFN_de32lsb(&TextMem[(A & 0x7FFFFF) - 65536]); break; + case 2: V = MDFN_de16lsb(&TextMem[(A & 0x7FFFFF) - 65536]); break; + case 4: V = MDFN_de32lsb(&TextMem[(A & 0x7FFFFF) - 65536]); break; } } } @@ -921,8 +940,8 @@ template static INLINE uint32 MemPeek(pscpu_timestamp else switch(sizeof(T)) { case 1: return(TextMem[(A & 0x7FFFFF) - 65536]); break; - case 2: return(MDFN_de16lsb(&TextMem[(A & 0x7FFFFF) - 65536])); break; - case 4: return(MDFN_de32lsb(&TextMem[(A & 0x7FFFFF) - 65536])); break; + case 2: return(MDFN_de16lsb(&TextMem[(A & 0x7FFFFF) - 65536])); break; + case 4: return(MDFN_de32lsb(&TextMem[(A & 0x7FFFFF) - 65536])); break; } } } @@ -951,11 +970,11 @@ uint32 PSX_MemPeek32(uint32 A) } // FIXME: Add PSX_Reset() and FrontIO::Reset() so that emulated input devices don't get power-reset on reset-button reset. -static void PSX_Power(void) +static void PSX_Power(bool powering_up) { PSX_PRNG.ResetState(); // Should occur first! - memset(MainRAM.data32, 0, 2048 * 1024); + memset(MainRAM.data8, 0, 2048 * 1024); for(unsigned i = 0; i < 9; i++) SysControl.Regs[i] = 0; @@ -968,7 +987,7 @@ static void PSX_Power(void) DMA_Power(); - FIO->Power(); + FIO->Reset(powering_up); SIO_Power(); MDEC_Power(); @@ -1120,9 +1139,12 @@ struct { return SHOCK_OK; case eShockMemcardTransaction_Read: - FIO->MCPorts[portnum]->ReadNV((uint8*)transaction->buffer128k,0,128*1024); + { + const u8* ptr = FIO->MCPorts[portnum]->ReadNV(); + memcpy(transaction->buffer128k,ptr,128*1024); FIO->MCPorts[portnum]->ResetNVDirtyCount(); return SHOCK_OK; + } case eShockMemcardTransaction_CheckDirty: if(FIO->GetMemcardDirtyCount(portnum)) @@ -1155,20 +1177,20 @@ static void MountCPUAddressSpace() { for(uint32 ma = 0x00000000; ma < 0x00800000; ma += 2048 * 1024) { - CPU->SetFastMap(MainRAM.data32, 0x00000000 + ma, 2048 * 1024); - CPU->SetFastMap(MainRAM.data32, 0x80000000 + ma, 2048 * 1024); - CPU->SetFastMap(MainRAM.data32, 0xA0000000 + ma, 2048 * 1024); + CPU->SetFastMap(MainRAM.data8, 0x00000000 + ma, 2048 * 1024); + CPU->SetFastMap(MainRAM.data8, 0x80000000 + ma, 2048 * 1024); + CPU->SetFastMap(MainRAM.data8, 0xA0000000 + ma, 2048 * 1024); } - CPU->SetFastMap(BIOSROM->data32, 0x1FC00000, 512 * 1024); - CPU->SetFastMap(BIOSROM->data32, 0x9FC00000, 512 * 1024); - CPU->SetFastMap(BIOSROM->data32, 0xBFC00000, 512 * 1024); + CPU->SetFastMap(BIOSROM->data8, 0x1FC00000, 512 * 1024); + CPU->SetFastMap(BIOSROM->data8, 0x9FC00000, 512 * 1024); + CPU->SetFastMap(BIOSROM->data8, 0xBFC00000, 512 * 1024); if(PIOMem) { - CPU->SetFastMap(PIOMem->data32, 0x1F000000, 65536); - CPU->SetFastMap(PIOMem->data32, 0x9F000000, 65536); - CPU->SetFastMap(PIOMem->data32, 0xBF000000, 65536); + CPU->SetFastMap(PIOMem->data8, 0x1F000000, 65536); + CPU->SetFastMap(PIOMem->data8, 0x9F000000, 65536); + CPU->SetFastMap(PIOMem->data8, 0xBF000000, 65536); } } @@ -1189,10 +1211,10 @@ EW_EXPORT s32 shock_Create(void** psx, s32 region, void* firmware512k) //PIO Mem: why wouldn't we want this? static const bool WantPIOMem = true; - BIOSROM = new MultiAccessSizeMem<512 * 1024, uint32, false>(); + BIOSROM = new MultiAccessSizeMem<512 * 1024, false>(); memcpy(BIOSROM->data8, firmware512k, 512 * 1024); - if(WantPIOMem) PIOMem = new MultiAccessSizeMem<65536, uint32, false>(); + if(WantPIOMem) PIOMem = new MultiAccessSizeMem<65536, false>(); else PIOMem = NULL; CPU = new PS_CPU(); @@ -1216,7 +1238,7 @@ EW_EXPORT s32 shock_Create(void** psx, s32 region, void* firmware512k) } //these steps can't be done without more information - GPU = new PS_GPU(region == REGION_EU, sls, sle); + GPU = new PS_GPU(region == REGION_EU, sls, sle, true); //fetch video parameters, stash in a simpler format MDFNGI givp; @@ -1264,7 +1286,7 @@ EW_EXPORT s32 shock_PowerOn(void* psx) { if(s_ShockState.power) return SHOCK_NOCANDO; - PSX_Power(); + PSX_Power(true); return SHOCK_OK; } @@ -1321,7 +1343,7 @@ EW_EXPORT s32 shock_Step(void* psx, eShockStep step) SPU->StartFrame(espec.SoundRate, ResampleQuality); Running = -1; - timestamp = CPU->Run(timestamp, psf_loader != NULL); + timestamp = CPU->Run(timestamp, psf_loader == NULL && psx_dbg_level >= PSX_DBG_BIOS_PRINT, psf_loader != NULL); assert(timestamp); ForceEventUpdates(timestamp); @@ -1564,10 +1586,10 @@ static void LoadEXE(const uint8 *data, const uint32 size, bool ignore_pcsp = fal //if(size < 0x800) // throw(MDFN_Error(0, "PS-EXE is too small.")); - PC = MDFN_de32lsb(&data[0x10]); - SP = MDFN_de32lsb(&data[0x30]); - TextStart = MDFN_de32lsb(&data[0x18]); - TextSize = MDFN_de32lsb(&data[0x1C]); + PC = MDFN_de32lsb(&data[0x10]); + SP = MDFN_de32lsb(&data[0x30]); + TextStart = MDFN_de32lsb(&data[0x18]); + TextSize = MDFN_de32lsb(&data[0x1C]); if(ignore_pcsp) printf("TextStart=0x%08x\nTextSize=0x%08x\n", TextStart, TextSize); @@ -1627,23 +1649,23 @@ static void LoadEXE(const uint8 *data, const uint32 size, bool ignore_pcsp = fal po = &PIOMem->data8[0x0800]; - MDFN_en32lsb(po, (0x0 << 26) | (31 << 21) | (0x8 << 0)); // JR + MDFN_en32lsb(po, (0x0 << 26) | (31 << 21) | (0x8 << 0)); // JR po += 4; - MDFN_en32lsb(po, 0); // NOP(kinda) + MDFN_en32lsb(po, 0); // NOP(kinda) po += 4; po = &PIOMem->data8[0x1000]; // Load cacheable-region target PC into r2 - MDFN_en32lsb(po, (0xF << 26) | (0 << 21) | (1 << 16) | (0x9F001010 >> 16)); // LUI + MDFN_en32lsb(po, (0xF << 26) | (0 << 21) | (1 << 16) | (0x9F001010 >> 16)); // LUI po += 4; - MDFN_en32lsb(po, (0xD << 26) | (1 << 21) | (2 << 16) | (0x9F001010 & 0xFFFF)); // ORI + MDFN_en32lsb(po, (0xD << 26) | (1 << 21) | (2 << 16) | (0x9F001010 & 0xFFFF)); // ORI po += 4; // Jump to r2 - MDFN_en32lsb(po, (0x0 << 26) | (2 << 21) | (0x8 << 0)); // JR + MDFN_en32lsb(po, (0x0 << 26) | (2 << 21) | (0x8 << 0)); // JR po += 4; - MDFN_en32lsb(po, 0); // NOP(kinda) + MDFN_en32lsb(po, 0); // NOP(kinda) po += 4; // @@ -1652,42 +1674,42 @@ static void LoadEXE(const uint8 *data, const uint32 size, bool ignore_pcsp = fal // Load source address into r8 uint32 sa = 0x9F000000 + 65536; - MDFN_en32lsb(po, (0xF << 26) | (0 << 21) | (1 << 16) | (sa >> 16)); // LUI + MDFN_en32lsb(po, (0xF << 26) | (0 << 21) | (1 << 16) | (sa >> 16)); // LUI po += 4; - MDFN_en32lsb(po, (0xD << 26) | (1 << 21) | (8 << 16) | (sa & 0xFFFF)); // ORI + MDFN_en32lsb(po, (0xD << 26) | (1 << 21) | (8 << 16) | (sa & 0xFFFF)); // ORI po += 4; // Load dest address into r9 - MDFN_en32lsb(po, (0xF << 26) | (0 << 21) | (1 << 16) | (TextMem_Start >> 16)); // LUI + MDFN_en32lsb(po, (0xF << 26) | (0 << 21) | (1 << 16) | (TextMem_Start >> 16)); // LUI po += 4; - MDFN_en32lsb(po, (0xD << 26) | (1 << 21) | (9 << 16) | (TextMem_Start & 0xFFFF)); // ORI + MDFN_en32lsb(po, (0xD << 26) | (1 << 21) | (9 << 16) | (TextMem_Start & 0xFFFF)); // ORI po += 4; // Load size into r10 - MDFN_en32lsb(po, (0xF << 26) | (0 << 21) | (1 << 16) | (TextMem.size() >> 16)); // LUI + MDFN_en32lsb(po, (0xF << 26) | (0 << 21) | (1 << 16) | (TextMem.size() >> 16)); // LUI po += 4; - MDFN_en32lsb(po, (0xD << 26) | (1 << 21) | (10 << 16) | (TextMem.size() & 0xFFFF)); // ORI + MDFN_en32lsb(po, (0xD << 26) | (1 << 21) | (10 << 16) | (TextMem.size() & 0xFFFF)); // ORI po += 4; // // Loop begin // - MDFN_en32lsb(po, (0x24 << 26) | (8 << 21) | (1 << 16)); // LBU to r1 + MDFN_en32lsb(po, (0x24 << 26) | (8 << 21) | (1 << 16)); // LBU to r1 po += 4; - MDFN_en32lsb(po, (0x08 << 26) | (10 << 21) | (10 << 16) | 0xFFFF); // Decrement size + MDFN_en32lsb(po, (0x08 << 26) | (10 << 21) | (10 << 16) | 0xFFFF); // Decrement size po += 4; - MDFN_en32lsb(po, (0x28 << 26) | (9 << 21) | (1 << 16)); // SB from r1 + MDFN_en32lsb(po, (0x28 << 26) | (9 << 21) | (1 << 16)); // SB from r1 po += 4; - MDFN_en32lsb(po, (0x08 << 26) | (8 << 21) | (8 << 16) | 0x0001); // Increment source addr + MDFN_en32lsb(po, (0x08 << 26) | (8 << 21) | (8 << 16) | 0x0001); // Increment source addr po += 4; - MDFN_en32lsb(po, (0x05 << 26) | (0 << 21) | (10 << 16) | (-5 & 0xFFFF)); + MDFN_en32lsb(po, (0x05 << 26) | (0 << 21) | (10 << 16) | (-5 & 0xFFFF)); po += 4; - MDFN_en32lsb(po, (0x08 << 26) | (9 << 21) | (9 << 16) | 0x0001); // Increment dest addr + MDFN_en32lsb(po, (0x08 << 26) | (9 << 21) | (9 << 16) | 0x0001); // Increment dest addr po += 4; // @@ -1701,31 +1723,31 @@ static void LoadEXE(const uint8 *data, const uint32 size, bool ignore_pcsp = fal } else { - MDFN_en32lsb(po, (0xF << 26) | (0 << 21) | (1 << 16) | (SP >> 16)); // LUI + MDFN_en32lsb(po, (0xF << 26) | (0 << 21) | (1 << 16) | (SP >> 16)); // LUI po += 4; - MDFN_en32lsb(po, (0xD << 26) | (1 << 21) | (29 << 16) | (SP & 0xFFFF)); // ORI + MDFN_en32lsb(po, (0xD << 26) | (1 << 21) | (29 << 16) | (SP & 0xFFFF)); // ORI po += 4; // Load PC into r2 - MDFN_en32lsb(po, (0xF << 26) | (0 << 21) | (1 << 16) | ((PC >> 16) | 0x8000)); // LUI + MDFN_en32lsb(po, (0xF << 26) | (0 << 21) | (1 << 16) | ((PC >> 16) | 0x8000)); // LUI po += 4; - MDFN_en32lsb(po, (0xD << 26) | (1 << 21) | (2 << 16) | (PC & 0xFFFF)); // ORI + MDFN_en32lsb(po, (0xD << 26) | (1 << 21) | (2 << 16) | (PC & 0xFFFF)); // ORI po += 4; } // Half-assed instruction cache flush. ;) for(unsigned i = 0; i < 1024; i++) { - MDFN_en32lsb(po, 0); + MDFN_en32lsb(po, 0); po += 4; } // Jump to r2 - MDFN_en32lsb(po, (0x0 << 26) | (2 << 21) | (0x8 << 0)); // JR + MDFN_en32lsb(po, (0x0 << 26) | (2 << 21) | (0x8 << 0)); // JR po += 4; - MDFN_en32lsb(po, 0); // NOP(kinda) + MDFN_en32lsb(po, 0); // NOP(kinda) po += 4; } @@ -1735,7 +1757,7 @@ EW_EXPORT s32 shock_MountEXE(void* psx, void* exebuf, int size) return SHOCK_OK; } - + #ifdef WANT_PSF PSF1Loader::PSF1Loader(MDFNFILE *fp) { @@ -2162,8 +2184,8 @@ EW_EXPORT s32 shock_AnalyzeDisc(ShockDiscRef* disc, ShockDiscInfo* info) throw "Missing Primary Volume Descriptor"; } while(pvd[0] != 0x01); //[156 ... 189], 34 bytes - uint32 rdel = MDFN_de32lsb(&pvd[0x9E]); - uint32 rdel_len = MDFN_de32lsb(&pvd[0xA6]); + uint32 rdel = MDFN_de32lsb(&pvd[0x9E]); + uint32 rdel_len = MDFN_de32lsb(&pvd[0xA6]); if(rdel_len >= (1024 * 1024 * 10)) // Arbitrary sanity check. throw "Root directory table too large"; @@ -2190,8 +2212,8 @@ EW_EXPORT s32 shock_AnalyzeDisc(ShockDiscRef* disc, ShockDiscInfo* info) if(len_fi == 12 && !memcmp(&dr[0x21], "SYSTEM.CNF;1", 12)) { - uint32 file_lba = MDFN_de32lsb(&dr[0x02]); - //uint32 file_len = MDFN_de32lsb(&dr[0x0A]); + uint32 file_lba = MDFN_de32lsb(&dr[0x02]); + //uint32 file_len = MDFN_de32lsb(&dr[0x0A]); uint8 fb[2048 + 1]; char *bootpos; diff --git a/psx/octoshock/psx/psx.h b/psx/octoshock/psx/psx.h index dddcaa8687..79d3a4d15f 100644 --- a/psx/octoshock/psx/psx.h +++ b/psx/octoshock/psx/psx.h @@ -33,12 +33,14 @@ namespace MDFN_IEN_PSX #define PSX_DBG_FLOOD 4 // Heavy informational debug messages(GPU commands; TODO). #if PSX_DBGPRINT_ENABLE - void PSX_DBG(unsigned level, const char *format, ...) throw() MDFN_COLD MDFN_FORMATSTR(gnu_printf, 2, 3); + void PSX_DBG(unsigned level, const char *format, ...) noexcept MDFN_COLD MDFN_FORMATSTR(gnu_printf, 2, 3); + void PSX_DBG_BIOS_PUTC(uint8 c) noexcept; #define PSX_WARNING(format, ...) { PSX_DBG(PSX_DBG_WARNING, format "\n", ## __VA_ARGS__); } #define PSX_DBGINFO(format, ...) { } #else static INLINE void PSX_DBG(unsigned level, const char* format, ...) { } + static INLINE void PSX_DBG_BIOS_PUTC(uint8 c) { } static INLINE void PSX_WARNING(const char* format, ...) { } static INLINE void PSX_DBGINFO(const char* format, ...) { } #endif @@ -110,7 +112,7 @@ namespace MDFN_IEN_PSX extern PS_GPU *GPU; extern PS_CDC *CDC; extern PS_SPU *SPU; - extern MultiAccessSizeMem<2048 * 1024, uint32, false> MainRAM; + extern MultiAccessSizeMem<2048 * 1024, false> MainRAM; }; enum eRegion diff --git a/psx/octoshock/psx/sio.h b/psx/octoshock/psx/sio.h index eccd5d0ab7..1dddecca29 100644 --- a/psx/octoshock/psx/sio.h +++ b/psx/octoshock/psx/sio.h @@ -8,8 +8,6 @@ void SIO_Write(pscpu_timestamp_t timestamp, uint32 A, uint32 V); uint32 SIO_Read(pscpu_timestamp_t timestamp, uint32 A); void SIO_Power(void); -int SIO_StateAction(StateMem *sm, int load, int data_only); - } #endif diff --git a/psx/octoshock/psx/spu.cpp b/psx/octoshock/psx/spu.cpp index 8ef7c9abc7..2f5e8a3872 100644 --- a/psx/octoshock/psx/spu.cpp +++ b/psx/octoshock/psx/spu.cpp @@ -1,66 +1,63 @@ -/* Mednafen - Multi-system Emulator - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* TODO: - Note to self: Emulating the SPU at more timing accuracy than sample, and emulating the whole SPU RAM write port FIFO thing and hypothetical periodic FIFO commit to - SPU RAM(maybe every 32 CPU cycles, with exceptions?) will likely necessitate a much more timing-accurate CPU core, and emulation of the SPU delay register(or at least the - effects of the standard value written to it), to avoid game glitches. Probably more trouble than it's worth.... - - SPU IRQ emulation isn't totally correct, behavior is kind of complex; run more tests on PS1. - - Test reverb upsampler on the real thing. - - Alter reverb algorithm to process in the pattern of L,R,L,R,L,R on each input sample, instead of doing both L and R on every 2 input samples(make - sure the real thing does it this way too, I think it at least runs the downsampler this way); and while we're at it, implement the correct buffer - offset(probably either -39 or -40, the latter is what we have now). - - Alter reverb algorithm to perform saturation more often, as occurs on the real thing. - - See if sample flag & 0x8 does anything weird, like suppressing the program-readable block end flag setting. - - Determine the actual purpose of global register 0x2C(is it REALLY an address multiplier? And if so, does it affect the reverb offsets too?) - - For ADSR and volume sweep, should the divider be reset to 0 on &0x8000 == true, or should the upper bit be cleared? - - Should shift occur on all stages of ADPCM sample decoding, or only at the end? - - On the real thing, there's some kind of weirdness with ADSR when you voice on when attack_rate(raw) = 0x7F; the envelope level register is repeatedly - reset to 0, which you can see by manual writes to the envelope level register. Normally in the attack phase when attack_rate = 0x7F, enveloping is effectively stuck/paused such that the value you write is sticky and won't be replaced or reset. Note that after you voice on, you can write a new attack_rate < 0x7F, and enveloping will work "normally" again shortly afterwards. You can even write an attack_rate of 0x7F at that point to pause enveloping clocking. I doubt any games rely on this, but it's something to keep in mind if we ever need greater insight as to how the SPU functions at a low-level in order to emulate it at cycle granularity rather than sample granularity, and it may not be a bad idea to investigate this oddity further and emulate it in the future regardless. - - Voice 1 and 3 waveform output writes to SPURAM might not be correct(noted due to problems reading this area of SPU RAM on the real thing - based on my expectations of how this should work). -*/ - -/* - Notes: - The last half of the noise freq table was confirmed on a real PSX(more or less, number of changes * 0x8000 / samples), but the first half hasn't been yet with sufficient precision. - - All addresses(for 16-bit access, at least) within the SPU address space appear to be fully read/write as if they were RAM, though - values at some addresses(like the envelope current value) will be "overwritten" by the sound processing at certain times. - - 32-bit and 8-bit reads act as if it were RAM(not tested with all addresses, but a few, assuming the rest are the same), but 8-bit writes - to odd addresses appear to be ignored, and 8-bit writes to even addresses are treated as 16-bit writes(most likely, but, need to code custom assembly to - fully test the upper 8 bits). NOTE: the preceding information doesn't necessarily cover accesses with side effects, they still need to be tested; and it - of course covers reads/writes from the point of view of software running on the CPU. - - It doesn't appear to be possible to enable FM on the first channel/voice(channel/voice 0). - - Lower bit of channel start address appears to be masked out to 0(such that ADPCM block decoding is always 8 16-bit units, 16 bytes, aligned), as far as - block-decoding and flag-set program-readable loop address go. +/* Mednafen - Multi-system Emulator + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* TODO: + Note to self: Emulating the SPU at more timing accuracy than sample, and emulating the whole SPU RAM write port FIFO thing and hypothetical periodic FIFO commit to + SPU RAM(maybe every 32 CPU cycles, with exceptions?) will likely necessitate a much more timing-accurate CPU core, and emulation of the SPU delay register(or at least the + effects of the standard value written to it), to avoid game glitches. Probably more trouble than it's worth.... + + SPU IRQ emulation isn't totally correct, behavior is kind of complex; run more tests on PS1. + + Test reverb upsampler on the real thing. + + Alter reverb algorithm to process in the pattern of L,R,L,R,L,R on each input sample, instead of doing both L and R on every 2 input samples(make + sure the real thing does it this way too, I think it at least runs the downsampler this way). + + Alter reverb algorithm to perform saturation more often, as occurs on the real thing. + + See if sample flag & 0x8 does anything weird, like suppressing the program-readable block end flag setting. + + Determine the actual purpose of global register 0x2C(is it REALLY an address multiplier? And if so, does it affect the reverb offsets too?) + + For ADSR and volume sweep, should the divider be reset to 0 on &0x8000 == true, or should the upper bit be cleared? + + Should shift occur on all stages of ADPCM sample decoding, or only at the end? + + On the real thing, there's some kind of weirdness with ADSR when you voice on when attack_rate(raw) = 0x7F; the envelope level register is repeatedly + reset to 0, which you can see by manual writes to the envelope level register. Normally in the attack phase when attack_rate = 0x7F, enveloping is effectively stuck/paused such that the value you write is sticky and won't be replaced or reset. Note that after you voice on, you can write a new attack_rate < 0x7F, and enveloping will work "normally" again shortly afterwards. You can even write an attack_rate of 0x7F at that point to pause enveloping clocking. I doubt any games rely on this, but it's something to keep in mind if we ever need greater insight as to how the SPU functions at a low-level in order to emulate it at cycle granularity rather than sample granularity, and it may not be a bad idea to investigate this oddity further and emulate it in the future regardless. + + Voice 1 and 3 waveform output writes to SPURAM might not be correct(noted due to problems reading this area of SPU RAM on the real thing + based on my expectations of how this should work). +*/ + +/* + Notes: + All addresses(for 16-bit access, at least) within the SPU address space appear to be fully read/write as if they were RAM, though + values at some addresses(like the envelope current value) will be "overwritten" by the sound processing at certain times. + + 32-bit and 8-bit reads act as if it were RAM(not tested with all addresses, but a few, assuming the rest are the same), but 8-bit writes + to odd addresses appear to be ignored, and 8-bit writes to even addresses are treated as 16-bit writes(most likely, but, need to code custom assembly to + fully test the upper 8 bits). NOTE: the preceding information doesn't necessarily cover accesses with side effects, they still need to be tested; and it + of course covers reads/writes from the point of view of software running on the CPU. + + It doesn't appear to be possible to enable FM on the first channel/voice(channel/voice 0). + + Lower bit of channel start address appears to be masked out to 0(such that ADPCM block decoding is always 8 16-bit units, 16 bytes, aligned), as far as + block-decoding and flag-set program-readable loop address go. */ /* @@ -95,90 +92,89 @@ PS_SPU::~PS_SPU() { } -void PS_SPU::Power(void) -{ - clock_divider = 768; - - memset(SPURAM, 0, sizeof(SPURAM)); - - for(int i = 0; i < 24; i++) - { - memset(Voices[i].DecodeBuffer, 0, sizeof(Voices[i].DecodeBuffer)); - Voices[i].DecodeM2 = 0; - Voices[i].DecodeM1 = 0; - - Voices[i].DecodePlayDelay = 0; - Voices[i].DecodeWritePos = 0; - Voices[i].DecodeReadPos = 0; - Voices[i].DecodeAvail = 0; - - Voices[i].DecodeShift = 0; - Voices[i].DecodeWeight = 0; - Voices[i].DecodeFlags = 0; - - Voices[i].IgnoreSampLA = false; - - Voices[i].Sweep[0].Power(); - Voices[i].Sweep[1].Power(); - - Voices[i].Pitch = 0; - Voices[i].CurPhase = 0; - - Voices[i].StartAddr = 0; - - Voices[i].CurAddr = 0; - - Voices[i].ADSRControl = 0; - - Voices[i].LoopAddr = 0; - - Voices[i].PreLRSample = 0; - - memset(&Voices[i].ADSR, 0, sizeof(SPU_ADSR)); - } - - GlobalSweep[0].Power(); - GlobalSweep[1].Power(); - - NoiseDivider = 0; - NoiseCounter = 0; - LFSR = 0; - - FM_Mode = 0; - Noise_Mode = 0; - Reverb_Mode = 0; - ReverbWA = 0; - - ReverbVol[0] = ReverbVol[1] = 0; - - CDVol[0] = CDVol[1] = 0; - - ExternVol[0] = ExternVol[1] = 0; - - IRQAddr = 0; - - RWAddr = 0; - - SPUControl = 0; - - VoiceOn = 0; - VoiceOff = 0; - - BlockEnd = 0; - - CWA = 0; - - memset(Regs, 0, sizeof(Regs)); - - memset(RDSB, 0, sizeof(RDSB)); - RDSB_WP = 0; - - memset(RUSB, 0, sizeof(RUSB)); - RUSB_WP = 0; - - ReverbCur = ReverbWA; - - IRQAsserted = false; + +void PS_SPU::Power(void) +{ + clock_divider = 768; + + memset(SPURAM, 0, sizeof(SPURAM)); + + for(int i = 0; i < 24; i++) + { + memset(Voices[i].DecodeBuffer, 0, sizeof(Voices[i].DecodeBuffer)); + Voices[i].DecodeM2 = 0; + Voices[i].DecodeM1 = 0; + + Voices[i].DecodePlayDelay = 0; + Voices[i].DecodeWritePos = 0; + Voices[i].DecodeReadPos = 0; + Voices[i].DecodeAvail = 0; + + Voices[i].DecodeShift = 0; + Voices[i].DecodeWeight = 0; + Voices[i].DecodeFlags = 0; + + Voices[i].IgnoreSampLA = false; + + Voices[i].Sweep[0].Power(); + Voices[i].Sweep[1].Power(); + + Voices[i].Pitch = 0; + Voices[i].CurPhase = 0; + + Voices[i].StartAddr = 0; + + Voices[i].CurAddr = 0; + + Voices[i].ADSRControl = 0; + + Voices[i].LoopAddr = 0; + + Voices[i].PreLRSample = 0; + + memset(&Voices[i].ADSR, 0, sizeof(SPU_ADSR)); + } + + GlobalSweep[0].Power(); + GlobalSweep[1].Power(); + + NoiseDivider = 0; + NoiseCounter = 0; + LFSR = 0; + + FM_Mode = 0; + Noise_Mode = 0; + Reverb_Mode = 0; + ReverbWA = 0; + + ReverbVol[0] = ReverbVol[1] = 0; + + CDVol[0] = CDVol[1] = 0; + + ExternVol[0] = ExternVol[1] = 0; + + IRQAddr = 0; + + RWAddr = 0; + + SPUControl = 0; + + VoiceOn = 0; + VoiceOff = 0; + + BlockEnd = 0; + + CWA = 0; + + memset(Regs, 0, sizeof(Regs)); + + memset(RDSB, 0, sizeof(RDSB)); + memset(RUSB, 0, sizeof(RUSB)); + RvbResPos = 0; + + ReverbCur = ReverbWA; + + IRQAsserted = false; } static INLINE void CalcVCDelta(const uint8 zs, uint8 speed, bool log_mode, bool dec_mode, bool inv_increment, int16 Current, int &increment, int &divinco) @@ -190,8 +186,8 @@ static INLINE void CalcVCDelta(const uint8 zs, uint8 speed, bool log_mode, bool divinco = 32768; - if(speed < 0x2C) - increment <<= (0x2F - speed) >> 2; + if(speed < 0x2C) + increment = (unsigned)increment << ((0x2F - speed) >> 2); if(speed >= 0x30) divinco >>= (speed - 0x2C) >> 2; @@ -328,10 +324,20 @@ void PS_SPU::RunDecoder(SPU_Voice *voice) return; } - if((voice->CurAddr & 0x7) == 0) - { - // Handle delayed flags from the previously-decoded block. - if(voice->DecodeFlags & 0x1) + + if((voice->CurAddr & 0x7) == 0) + { + // + // Handle delayed flags from the previously-decoded block. + // + // NOTE: The timing of setting the BlockEnd bit here, and forcing ADSR envelope volume to 0, is a bit late. (And I'm not sure if it should be done once + // per decoded block, or more than once, but that's probably not something games would rely on, but we should test it anyway). + // + // Correctish timing can be achieved by moving this block of code up above voice->DecodeAvail >= 11, and sticking it inside an: if(voice->DecodeAvail <= 12), + // though more tests are needed on the ADPCM decoding process as a whole before we should actually make such a change. Additionally, we'd probably + // have to separate the CurAddr = LoopAddr logic, so we don't generate spurious early SPU IRQs. + // + if(voice->DecodeFlags & 0x1) { voice->CurAddr = voice->LoopAddr & ~0x7; @@ -386,37 +392,50 @@ void PS_SPU::RunDecoder(SPU_Voice *voice) voice->CurAddr = (voice->CurAddr + 1) & 0x3FFFF; } - // - // Don't else this block; we need to ALWAYS decode 4 samples per call to RunDecoder() if DecodeAvail < 11, or else sample playback - // at higher rates will fail horribly. - // - { - const uint16 CV = SPURAM[voice->CurAddr]; - const unsigned shift = voice->DecodeShift; - const int32 weight_m1 = Weights[voice->DecodeWeight][0]; - const int32 weight_m2 = Weights[voice->DecodeWeight][1]; - uint32 coded = (uint32)CV << 12; - int16 *tb = &voice->DecodeBuffer[voice->DecodeWritePos]; - - for(int i = 0; i < 4; i++) - { - int32 sample = (int16)(coded & 0xF000) >> shift; - - sample += ((voice->DecodeM2 * weight_m2) >> 6); - sample += ((voice->DecodeM1 * weight_m1) >> 6); - - clamp(&sample, -32768, 32767); - - tb[i] = sample; - voice->DecodeM2 = voice->DecodeM1; - voice->DecodeM1 = sample; - coded >>= 4; - } - voice->DecodeWritePos = (voice->DecodeWritePos + 4) & 0x1F; - voice->DecodeAvail += 4; - voice->CurAddr = (voice->CurAddr + 1) & 0x3FFFF; - } - } + // + // Don't else this block; we need to ALWAYS decode 4 samples per call to RunDecoder() if DecodeAvail < 11, or else sample playback + // at higher rates will fail horribly. + // + { + const int32 weight_m1 = Weights[voice->DecodeWeight][0]; + const int32 weight_m2 = Weights[voice->DecodeWeight][1]; + uint16 CV; + unsigned shift; + uint32 coded; + int16 *tb = &voice->DecodeBuffer[voice->DecodeWritePos]; + + CV = SPURAM[voice->CurAddr]; + shift = voice->DecodeShift; + + if(MDFN_UNLIKELY(shift > 12)) + { + //PSX_DBG(PSX_DBG_FLOOD, "[SPU] Buggy/Illegal ADPCM block shift value on voice %u: %u\n", (unsigned)(voice - Voices), shift); + + shift = 8; + CV &= 0x8888; + } + + coded = (uint32)CV << 12; + + for(int i = 0; i < 4; i++) + { + int32 sample = (int16)(coded & 0xF000) >> shift; + + sample += ((voice->DecodeM2 * weight_m2) >> 6); + sample += ((voice->DecodeM1 * weight_m1) >> 6); + + clamp(&sample, -32768, 32767); + + tb[i] = sample; + voice->DecodeM2 = voice->DecodeM1; + voice->DecodeM1 = sample; + coded >>= 4; + } + voice->DecodeWritePos = (voice->DecodeWritePos + 4) & 0x1F; + voice->DecodeAvail += 4; + voice->CurAddr = (voice->CurAddr + 1) & 0x3FFFF; + } + } } void PS_SPU::CacheEnvelope(SPU_Voice *voice) @@ -592,23 +611,21 @@ int32 PS_SPU::UpdateFromCDC(int32 clocks) sample_clocks++; } - while(sample_clocks > 0) - { - // Accumulated normal sound output. - int32 accum_l = 0; - int32 accum_r = 0; - - // Accumulated sound output for reverb input - int32 accum_fv_l = 0; - int32 accum_fv_r = 0; - - // Output of reverb processing. - int32 reverb_l = 0; - int32 reverb_r = 0; - - // Final output. - int32 output_l = 0; - int32 output_r = 0; +while(sample_clocks > 0) + { + // xxx[0] = left, xxx[1] = right + + // Accumulated sound output. + int32 accum[2] = { 0, 0 }; + + // Accumulated sound output for reverb input + int32 accum_fv[2] = { 0, 0 }; + + // Output of reverb processing. + int32 reverb[2] = { 0, 0 }; + + // Final output. + int32 output[2] = { 0, 0 }; const uint32 PhaseModCache = FM_Mode & ~ 1; /* @@ -690,14 +707,14 @@ int32 PS_SPU::UpdateFromCDC(int32 clocks) l = (voice_pvs * voice->Sweep[0].ReadVolume()) >> 15; r = (voice_pvs * voice->Sweep[1].ReadVolume()) >> 15; - accum_l += l; - accum_r += r; - - if(Reverb_Mode & (1 << voice_num)) - { - accum_fv_l += l; - accum_fv_r += r; - } + accum[0] += l; + accum[1] += r; + + if(Reverb_Mode & (1 << voice_num)) + { + accum_fv[0] += l; + accum_fv[1] += r; + } // Run sweep for(int lr = 0; lr < 2; lr++) @@ -782,10 +799,10 @@ int32 PS_SPU::UpdateFromCDC(int32 clocks) // TODO: If we add sub-sample timing accuracy, see if it's checked for every channel at different times, or just once. if(!(SPUControl & 0x4000)) { - accum_l = 0; - accum_r = 0; - accum_fv_l = 0; - accum_fv_r = 0; + accum[0] = 0; + accum[1] = 0; + accum_fv[0] = 0; + accum_fv[1] = 0; } // Get CD-DA @@ -802,66 +819,54 @@ int32 PS_SPU::UpdateFromCDC(int32 clocks) for(unsigned i = 0; i < 2; i++) cdav[i] = (cda_raw[i] * CDVol[i]) >> 15; - if(SPUControl & 0x0001) - { - accum_l += cdav[0]; - accum_r += cdav[1]; - - if(SPUControl & 0x0004) // TODO: Test this bit(and see if it is really dependent on bit0) - { - accum_fv_l += cdav[0]; - accum_fv_r += cdav[1]; - } - } + if(SPUControl & 0x0001) + { + accum[0] += cdav[0]; + accum[1] += cdav[1]; + + if(SPUControl & 0x0004) // TODO: Test this bit(and see if it is really dependent on bit0) + { + accum_fv[0] += cdav[0]; + accum_fv[1] += cdav[1]; + } + } } CWA = (CWA + 1) & 0x1FF; - RunNoise(); - - clamp(&accum_l, -32768, 32767); - clamp(&accum_r, -32768, 32767); - clamp(&accum_fv_l, -32768, 32767); - clamp(&accum_fv_r, -32768, 32767); - -#if 0 - accum_l = 0; - accum_r = 0; - //accum_fv_l = (short)(rand()); - //accum_fv_r = (short)(rand()); -#endif - - RunReverb(accum_fv_l, accum_fv_r, reverb_l, reverb_r); - - //MDFN_DispMessage("%d %d\n", MainVol[0], MainVol[1], ReverbVol[0], ReverbVol[1]); - - // FIXME: Dry volume versus everything else - output_l = (((accum_l * GlobalSweep[0].ReadVolume()) >> 16) + ((reverb_l * ReverbVol[0]) >> 15)); - output_r = (((accum_r * GlobalSweep[1].ReadVolume()) >> 16) + ((reverb_r * ReverbVol[1]) >> 15)); - - //output_l = reverb_l; - //output_r = reverb_r; - - clamp(&output_l, -32768, 32767); - clamp(&output_r, -32768, 32767); - - if(IntermediateBufferPos < 4096) // Overflow might occur in some debugger use cases. - { - IntermediateBuffer[IntermediateBufferPos][0] = output_l; - IntermediateBuffer[IntermediateBufferPos][1] = output_r; - IntermediateBufferPos++; - } - - sample_clocks--; - - // Clock global sweep - for(int lr = 0; lr < 2; lr++) - GlobalSweep[lr].Clock(); - } - - //assert(clock_divider < 768); - - return clock_divider; + RunNoise(); + + for(unsigned lr = 0; lr < 2; lr++) + clamp(&accum_fv[lr], -32768, 32767); + + RunReverb(accum_fv, reverb); + + for(unsigned lr = 0; lr < 2; lr++) + { + accum[lr] += ((reverb[lr] * ReverbVol[lr]) >> 15); + clamp(&accum[lr], -32768, 32767); + output[lr] = (accum[lr] * GlobalSweep[lr].ReadVolume()) >> 15; + } + + if(IntermediateBufferPos < 4096) // Overflow might occur in some debugger use cases. + { + // 75%, for some (resampling) headroom. + for(unsigned lr = 0; lr < 2; lr++) + IntermediateBuffer[IntermediateBufferPos][lr] = (output[lr] * 3 + 2) >> 2; + + IntermediateBufferPos++; + } + + sample_clocks--; + + // Clock global sweep + for(unsigned lr = 0; lr < 2; lr++) + GlobalSweep[lr].Clock(); + } + + //assert(clock_divider < 768); + + return clock_divider; } void PS_SPU::WriteDMA(uint32 V) @@ -1216,10 +1221,9 @@ SYNCFUNC(PS_SPU) NSS(AuxRegs); NSS(RDSB); - NSS(RDSB_WP); - NSS(RUSB); - NSS(RUSB_WP); + NSS(RvbResPos); + NSS(ReverbCur); NSS(IRQAsserted); @@ -1234,6 +1238,9 @@ SYNCFUNC(PS_SPU) //and another thing like this, which I think makes no sense. I really need to test these. IRQ_Assert(IRQ_SPU, IRQAsserted); //} + + //sanity check this + //RvbResPos &= 0x3F; } uint16 PS_SPU::PeekSPURAM(uint32 address) @@ -1323,27 +1330,27 @@ uint32 PS_SPU::GetRegister(unsigned int which, char *special, const uint32 speci ret = (uint16)CDVol[1]; break; - case GSREG_DRYVOL_CTRL_L: + case GSREG_MAINVOL_CTRL_L: ret = Regs[0xC0]; break; - case GSREG_DRYVOL_CTRL_R: + case GSREG_MAINVOL_CTRL_R: ret = Regs[0xC1]; break; - case GSREG_DRYVOL_L: + case GSREG_MAINVOL_L: ret = GlobalSweep[0].ReadVolume() & 0xFFFF; break; - case GSREG_DRYVOL_R: + case GSREG_MAINVOL_R: ret = GlobalSweep[1].ReadVolume() & 0xFFFF; break; - case GSREG_WETVOL_L: + case GSREG_RVBVOL_L: ret = (uint16)ReverbVol[0]; break; - case GSREG_WETVOL_R: + case GSREG_RVBVOL_R: ret = (uint16)ReverbVol[1]; break; @@ -1405,7 +1412,7 @@ uint32 PS_SPU::GetRegister(unsigned int which, char *special, const uint32 speci case GSREG_MIX_DEST_B1: case GSREG_IN_COEF_L: case GSREG_IN_COEF_R: - ret = ReverbRegs[which - GSREG_FB_SRC_A] & 0xFFFF; + ret = ReverbRegs[which - GSREG_FB_SRC_A]; break; } @@ -1441,31 +1448,31 @@ void PS_SPU::SetRegister(unsigned int which, uint32 value) CDVol[1] = (int16)value; break; - case GSREG_DRYVOL_CTRL_L: + case GSREG_MAINVOL_CTRL_L: Regs[0xC0] = value; GlobalSweep[0].WriteControl(value); //GlobalSweep[0].Control = value; break; - case GSREG_DRYVOL_CTRL_R: + case GSREG_MAINVOL_CTRL_R: Regs[0xC1] = value; GlobalSweep[1].WriteControl(value); //GlobalSweep[1].Control = value; break; - case GSREG_DRYVOL_L: + case GSREG_MAINVOL_L: GlobalSweep[0].WriteVolume(value); break; - case GSREG_DRYVOL_R: + case GSREG_MAINVOL_R: GlobalSweep[1].WriteVolume(value); break; - case GSREG_WETVOL_L: + case GSREG_RVBVOL_L: ReverbVol[0] = (int16)value; break; - case GSREG_WETVOL_R: + case GSREG_RVBVOL_R: ReverbVol[1] = (int16)value; break; @@ -1494,6 +1501,42 @@ void PS_SPU::SetRegister(unsigned int which, uint32 value) break; + //case GSREG_FB_SRC_A ... GSREG_IN_COEF_R: + case GSREG_FB_SRC_A: + case GSREG_FB_SRC_B: + case GSREG_IIR_ALPHA: + case GSREG_ACC_COEF_A: + case GSREG_ACC_COEF_B: + case GSREG_ACC_COEF_C: + case GSREG_ACC_COEF_D: + case GSREG_IIR_COEF: + case GSREG_FB_ALPHA: + case GSREG_FB_X: + case GSREG_IIR_DEST_A0: + case GSREG_IIR_DEST_A1: + case GSREG_ACC_SRC_A0: + case GSREG_ACC_SRC_A1: + case GSREG_ACC_SRC_B0: + case GSREG_ACC_SRC_B1: + case GSREG_IIR_SRC_A0: + case GSREG_IIR_SRC_A1: + case GSREG_IIR_DEST_B0: + case GSREG_IIR_DEST_B1: + case GSREG_ACC_SRC_C0: + case GSREG_ACC_SRC_C1: + case GSREG_ACC_SRC_D0: + case GSREG_ACC_SRC_D1: + case GSREG_IIR_SRC_B1: + case GSREG_IIR_SRC_B0: + case GSREG_MIX_DEST_A0: + case GSREG_MIX_DEST_A1: + case GSREG_MIX_DEST_B0: + case GSREG_MIX_DEST_B1: + case GSREG_IN_COEF_L: + case GSREG_IN_COEF_R: + ReverbRegs[which - GSREG_FB_SRC_A] = value; + break; + } } diff --git a/psx/octoshock/psx/spu.h b/psx/octoshock/psx/spu.h index e31fe6fdf6..f278f3373c 100644 --- a/psx/octoshock/psx/spu.h +++ b/psx/octoshock/psx/spu.h @@ -96,14 +96,12 @@ class PS_SPU { public: - PS_SPU(); - ~PS_SPU(); + PS_SPU() MDFN_COLD; + ~PS_SPU() MDFN_COLD; templatevoid SyncState(EW::NewState *ns); - int StateAction(StateMem *sm, int load, int data_only); - - void Power(void); + void Power(void) MDFN_COLD; void Write(pscpu_timestamp_t timestamp, uint32 A, uint16 V); uint16 Read(pscpu_timestamp_t timestamp, uint32 A); @@ -132,7 +130,7 @@ private: void RunEnvelope(SPU_Voice *voice); - void RunReverb(int32 in_l, int32 in_r, int32 &out_l, int32 &out_r); +void RunReverb(const int32* in, int32* out); void RunNoise(void); bool GetCDAudio(int32 &l, int32 &r); @@ -146,7 +144,7 @@ private: uint32 Noise_Mode; uint32 Reverb_Mode; - int32 ReverbWA; + uint32 ReverbWA; SPU_Sweep GlobalSweep[2]; // Doesn't affect reverb volume! @@ -184,163 +182,161 @@ private: uint16 _Global1[0x08]; }; }; - union - { - int16 ReverbRegs[0x20]; - - struct - { - int16 FB_SRC_A; - int16 FB_SRC_B; - int16 IIR_ALPHA; - int16 ACC_COEF_A; - int16 ACC_COEF_B; - int16 ACC_COEF_C; - int16 ACC_COEF_D; - int16 IIR_COEF; - int16 FB_ALPHA; - int16 FB_X; - int16 IIR_DEST_A0; - int16 IIR_DEST_A1; - int16 ACC_SRC_A0; - int16 ACC_SRC_A1; - int16 ACC_SRC_B0; - int16 ACC_SRC_B1; - int16 IIR_SRC_A0; - int16 IIR_SRC_A1; - int16 IIR_DEST_B0; - int16 IIR_DEST_B1; - int16 ACC_SRC_C0; - int16 ACC_SRC_C1; - int16 ACC_SRC_D0; - int16 ACC_SRC_D1; - int16 IIR_SRC_B1; - int16 IIR_SRC_B0; - int16 MIX_DEST_A0; - int16 MIX_DEST_A1; - int16 MIX_DEST_B0; - int16 MIX_DEST_B1; - int16 IN_COEF_L; - int16 IN_COEF_R; - }; - }; - }; - }; - - uint16 AuxRegs[0x10]; - - int16 RDSB[2][128]; // [40] - int32 RDSB_WP; - - int16 RUSB[2][128]; - int32 RUSB_WP; - - int32 ReverbCur; - - int32 Get_Reverb_Offset(int32 offset); - int32 RD_RVB(int16 raw_offs); - void WR_RVB(int16 raw_offs, int32 sample, int32 extra_offs = 0); - - bool IRQAsserted; - - //pscpu_timestamp_t lastts; - int32 clock_divider; - - int last_rate; - uint32 last_quality; - - // Buffers 44.1KHz samples, should have enough for two(worst-case scenario) video frames(2* ~735 frames NTSC, 2* ~882 PAL) plus jitter plus enough for the resampler leftovers. - // We'll just go with 4096 because powers of 2 are AWESOME and such. - uint32 IntermediateBufferPos; - int16 IntermediateBuffer[4096][2]; - - public: - enum - { - GSREG_SPUCONTROL = 0, - - GSREG_FM_ON, - GSREG_NOISE_ON, - GSREG_REVERB_ON, - - GSREG_CDVOL_L, - GSREG_CDVOL_R, - - GSREG_DRYVOL_CTRL_L, - GSREG_DRYVOL_CTRL_R, - - GSREG_DRYVOL_L, - GSREG_DRYVOL_R, - - GSREG_WETVOL_L, - GSREG_WETVOL_R, - - GSREG_RWADDR, - - GSREG_IRQADDR, - - GSREG_REVERBWA, - - GSREG_VOICEON, - GSREG_VOICEOFF, - GSREG_BLOCKEND, - - // Note: the order of these should match the reverb reg array - GSREG_FB_SRC_A, - GSREG_FB_SRC_B, - GSREG_IIR_ALPHA, - GSREG_ACC_COEF_A, - GSREG_ACC_COEF_B, - GSREG_ACC_COEF_C, - GSREG_ACC_COEF_D, - GSREG_IIR_COEF, - GSREG_FB_ALPHA, - GSREG_FB_X, - GSREG_IIR_DEST_A0, - GSREG_IIR_DEST_A1, - GSREG_ACC_SRC_A0, - GSREG_ACC_SRC_A1, - GSREG_ACC_SRC_B0, - GSREG_ACC_SRC_B1, - GSREG_IIR_SRC_A0, - GSREG_IIR_SRC_A1, - GSREG_IIR_DEST_B0, - GSREG_IIR_DEST_B1, - GSREG_ACC_SRC_C0, - GSREG_ACC_SRC_C1, - GSREG_ACC_SRC_D0, - GSREG_ACC_SRC_D1, - GSREG_IIR_SRC_B1, - GSREG_IIR_SRC_B0, - GSREG_MIX_DEST_A0, - GSREG_MIX_DEST_A1, - GSREG_MIX_DEST_B0, - GSREG_MIX_DEST_B1, - GSREG_IN_COEF_L, - GSREG_IN_COEF_R, - - - // Multiply v * 256 for each extra voice - GSREG_V0_VOL_CTRL_L = 0x8000, - GSREG_V0_VOL_CTRL_R, - GSREG_V0_VOL_L, - GSREG_V0_VOL_R, - GSREG_V0_PITCH, - GSREG_V0_STARTADDR, - GSREG_V0_ADSR_CTRL, - GSREG_V0_ADSR_LEVEL, - GSREG_V0_LOOP_ADDR, - GSREG_V0_READ_ADDR - }; - - uint32 GetRegister(unsigned int which, char *special, const uint32 special_len); - void SetRegister(unsigned int which, uint32 value); - - uint16 PeekSPURAM(uint32 address); - void PokeSPURAM(uint32 address, uint16 value); -}; - - -} - -#endif + union + { + uint16 ReverbRegs[0x20]; + + struct + { + uint16 FB_SRC_A; + uint16 FB_SRC_B; + int16 IIR_ALPHA; + int16 ACC_COEF_A; + int16 ACC_COEF_B; + int16 ACC_COEF_C; + int16 ACC_COEF_D; + int16 IIR_COEF; + int16 FB_ALPHA; + int16 FB_X; + uint16 IIR_DEST_A0; + uint16 IIR_DEST_A1; + uint16 ACC_SRC_A0; + uint16 ACC_SRC_A1; + uint16 ACC_SRC_B0; + uint16 ACC_SRC_B1; + uint16 IIR_SRC_A0; + uint16 IIR_SRC_A1; + uint16 IIR_DEST_B0; + uint16 IIR_DEST_B1; + uint16 ACC_SRC_C0; + uint16 ACC_SRC_C1; + uint16 ACC_SRC_D0; + uint16 ACC_SRC_D1; + uint16 IIR_SRC_B1; + uint16 IIR_SRC_B0; + uint16 MIX_DEST_A0; + uint16 MIX_DEST_A1; + uint16 MIX_DEST_B0; + uint16 MIX_DEST_B1; + int16 IN_COEF_L; + int16 IN_COEF_R; + }; + }; + }; + }; + + uint16 AuxRegs[0x10]; + + int16 RDSB[2][128]; + int16 RUSB[2][64]; + int32 RvbResPos; + + uint32 ReverbCur; + + uint32 Get_Reverb_Offset(uint32 offset); + int16 RD_RVB(uint16 raw_offs, int32 extra_offs = 0); + void WR_RVB(uint16 raw_offs, int16 sample); + + bool IRQAsserted; + + //pscpu_timestamp_t lastts; + int32 clock_divider; + + int last_rate; + uint32 last_quality; + + // Buffers 44.1KHz samples, should have enough for two(worst-case scenario) video frames(2* ~735 frames NTSC, 2* ~882 PAL) plus jitter plus enough for the resampler leftovers. + // We'll just go with 4096 because powers of 2 are AWESOME and such. + uint32 IntermediateBufferPos; + int16 IntermediateBuffer[4096][2]; + + public: + enum + { + GSREG_SPUCONTROL = 0, + + GSREG_FM_ON, + GSREG_NOISE_ON, + GSREG_REVERB_ON, + + GSREG_CDVOL_L, + GSREG_CDVOL_R, + + GSREG_MAINVOL_CTRL_L, + GSREG_MAINVOL_CTRL_R, + + GSREG_MAINVOL_L, + GSREG_MAINVOL_R, + + GSREG_RVBVOL_L, + GSREG_RVBVOL_R, + + GSREG_RWADDR, + + GSREG_IRQADDR, + + GSREG_REVERBWA, + + GSREG_VOICEON, + GSREG_VOICEOFF, + GSREG_BLOCKEND, + + // Note: the order of these should match the reverb reg array + GSREG_FB_SRC_A, + GSREG_FB_SRC_B, + GSREG_IIR_ALPHA, + GSREG_ACC_COEF_A, + GSREG_ACC_COEF_B, + GSREG_ACC_COEF_C, + GSREG_ACC_COEF_D, + GSREG_IIR_COEF, + GSREG_FB_ALPHA, + GSREG_FB_X, + GSREG_IIR_DEST_A0, + GSREG_IIR_DEST_A1, + GSREG_ACC_SRC_A0, + GSREG_ACC_SRC_A1, + GSREG_ACC_SRC_B0, + GSREG_ACC_SRC_B1, + GSREG_IIR_SRC_A0, + GSREG_IIR_SRC_A1, + GSREG_IIR_DEST_B0, + GSREG_IIR_DEST_B1, + GSREG_ACC_SRC_C0, + GSREG_ACC_SRC_C1, + GSREG_ACC_SRC_D0, + GSREG_ACC_SRC_D1, + GSREG_IIR_SRC_B1, + GSREG_IIR_SRC_B0, + GSREG_MIX_DEST_A0, + GSREG_MIX_DEST_A1, + GSREG_MIX_DEST_B0, + GSREG_MIX_DEST_B1, + GSREG_IN_COEF_L, + GSREG_IN_COEF_R, + + + // Multiply v * 256 for each extra voice + GSREG_V0_VOL_CTRL_L = 0x8000, + GSREG_V0_VOL_CTRL_R, + GSREG_V0_VOL_L, + GSREG_V0_VOL_R, + GSREG_V0_PITCH, + GSREG_V0_STARTADDR, + GSREG_V0_ADSR_CTRL, + GSREG_V0_ADSR_LEVEL, + GSREG_V0_LOOP_ADDR, + GSREG_V0_READ_ADDR + }; + + uint32 GetRegister(unsigned int which, char *special, const uint32 special_len); + void SetRegister(unsigned int which, uint32 value); + + uint16 PeekSPURAM(uint32 address); + void PokeSPURAM(uint32 address, uint16 value); +}; + + +} + +#endif diff --git a/psx/octoshock/psx/spu_reverb.inc b/psx/octoshock/psx/spu_reverb.inc index 8192fd9c9f..bf96701d4a 100644 --- a/psx/octoshock/psx/spu_reverb.inc +++ b/psx/octoshock/psx/spu_reverb.inc @@ -11,227 +11,185 @@ static INLINE int16 ReverbSat(int32 samp) } -INLINE int32 PS_SPU::Get_Reverb_Offset(int32 in_offset) +INLINE uint32 PS_SPU::Get_Reverb_Offset(uint32 in_offset) { - int32 offset = in_offset & 0x3FFFF; - int32 wa_size = 0x40000 - ReverbWA; + uint32 offset = ReverbCur + (in_offset & 0x3FFFF); - if(offset & 0x20000) - { - offset -= ReverbWA; + offset += ReverbWA & ((int32)(offset << 13) >> 31); + offset &= 0x3FFFF; - if(offset < 0) - { - offset = 0; - //PSX_WARNING("[SPU] A reverb offset is broken(-)."); - } - } - else - { - if(offset >= wa_size) - { - offset = wa_size - 1; - //PSX_WARNING("[SPU] A reverb offset is broken(+): WASize=0x%04x, 0x%04x.", wa_size >> 2, in_offset >> 2); - } - } - - offset += ReverbCur; - - if(offset >= 0x40000) - offset = (offset & 0x3FFFF) + ReverbWA; - - assert(offset >= ReverbWA && offset < 0x40000); + // For debugging in case there are any problems with games misprogramming the reverb registers in a race-conditiony manner that + // causes important data in SPU RAM to be trashed: + //if(offset < ReverbWA) + // printf("BARF: offset=%05x reverbwa=%05x reverbcur=%05x in_offset=%05x\n", offset, ReverbWA, ReverbCur, in_offset & 0x3FFFF); return(offset); } -int32 PS_SPU::RD_RVB(int16 raw_offs) +int16 NO_INLINE PS_SPU::RD_RVB(uint16 raw_offs, int32 extra_offs) { - //raw_offs = rand() & 0xFFFF; - - return((int16)SPURAM[Get_Reverb_Offset(raw_offs << 2)]); + return ReadSPURAM(Get_Reverb_Offset((raw_offs << 2) + extra_offs)); } -void PS_SPU::WR_RVB(int16 raw_offs, int32 sample, int32 extra_offs) +void NO_INLINE PS_SPU::WR_RVB(uint16 raw_offs, int16 sample) { - //raw_offs = rand() & 0xFFFF; - - SPURAM[Get_Reverb_Offset((raw_offs << 2) + extra_offs)] = ReverbSat(sample); + WriteSPURAM(Get_Reverb_Offset(raw_offs << 2), sample); } +// +// Zeroes optimized out; middle removed too(it's 16384) +static const int16 ResampTable[20] = +{ + -1, 2, -10, 35, -103, 266, -616, 1332, -2960, 10246, 10246, -2960, 1332, -616, 266, -103, 35, -10, 2, -1, +}; + static INLINE int32 Reverb4422(const int16 *src) { - static const int16 ResampTable[40] = - { - (int16)0xffff, - (int16)0x0000, - (int16)0x0002, - (int16)0x0000, - (int16)0xfff6, - (int16)0x0000, - (int16)0x0023, - (int16)0x0000, - (int16)0xff99, - (int16)0x0000, - (int16)0x010a, - (int16)0x0000, - (int16)0xfd98, - (int16)0x0000, - (int16)0x0534, - (int16)0x0000, - (int16)0xf470, - (int16)0x0000, - (int16)0x2806, - (int16)0x4000, - (int16)0x2806, - (int16)0x0000, - (int16)0xf470, - (int16)0x0000, - (int16)0x0534, - (int16)0x0000, - (int16)0xfd98, - (int16)0x0000, - (int16)0x010a, - (int16)0x0000, - (int16)0xff99, - (int16)0x0000, - (int16)0x0023, - (int16)0x0000, - (int16)0xfff6, - (int16)0x0000, - (int16)0x0002, - (int16)0x0000, - (int16)0xffff, - (int16)0x0000, - }; int32 out = 0; // 32-bits is adequate(it won't overflow) - for(int i = 0; i < 40; i += 2) - out += ResampTable[i] * src[i]; + for(unsigned i = 0; i < 20; i++) + out += ResampTable[i] * src[i * 2]; // Middle non-zero out += 0x4000 * src[19]; out >>= 15; - if(out < -32768) - out = -32768; - - if(out > 32767) - out = 32767; + clamp(&out, -32768, 32767); return(out); } -void PS_SPU::RunReverb(int32 in_l, int32 in_r, int32 &out_l, int32 &out_r) +template +static INLINE int32 Reverb2244(const int16 *src) +{ + int32 out; // 32-bits is adequate(it won't overflow) + + if(phase) + { + // Middle non-zero + out = src[9]; + } + else + { + out = 0; + + for(unsigned i = 0; i < 20; i++) + out += ResampTable[i] * src[i]; + + out >>= 14; + + clamp(&out, -32768, 32767); + } + + return(out); +} + +static int32 IIASM(const int16 IIR_ALPHA, const int16 insamp) +{ + if(MDFN_UNLIKELY(IIR_ALPHA == -32768)) + { + //const int32 iai_adj = sign_x_to_s32(17, (32768 - IIR_ALPHA)); + //tmp = iai_adj * in_samp + + if(insamp == -32768) + return 0; + else + return insamp * -65536; + } + else + return insamp * (32768 - IIR_ALPHA); +} + +// +// Take care to thoroughly test the reverb resampling code when modifying anything that uses RvbResPos. +// +void PS_SPU::RunReverb(const int32* in, int32* out) { int32 upsampled[2] = { 0, 0 }; - RDSB[0][RDSB_WP] = in_l; - RDSB[1][RDSB_WP] = in_r; - RDSB[0][RDSB_WP | 0x40] = in_l; // So we don't have to &/bounds check in our MAC loop - RDSB[1][RDSB_WP | 0x40] = in_r; + for(unsigned lr = 0; lr < 2; lr++) + { + RDSB[lr][RvbResPos | 0x00] = in[lr]; + RDSB[lr][RvbResPos | 0x40] = in[lr]; // So we don't have to &/bounds check in our MAC loop + } - RDSB_WP = (RDSB_WP + 1) & 0x3F; - - if(!(RDSB_WP & 1)) + if(RvbResPos & 1) { int32 downsampled[2]; - for(int lr = 0; lr < 2; lr++) - downsampled[lr] = Reverb4422(&RDSB[lr][(RDSB_WP - 40) & 0x3F]); + for(unsigned lr = 0; lr < 2; lr++) + downsampled[lr] = Reverb4422(&RDSB[lr][(RvbResPos - 39) & 0x3F]); // // Run algorithm /// - if(SPUControl & 0x80) - { - int32 IIR_INPUT_A0; - int32 IIR_INPUT_A1; - int32 IIR_INPUT_B0; - int32 IIR_INPUT_B1; - int32 IIR_A0, IIR_A1, IIR_B0, IIR_B1; - int32 ACC0, ACC1; - int32 FB_A0, FB_A1, FB_B0, FB_B1; + if(SPUControl & 0x80) + { + int16 IIR_INPUT_A0, IIR_INPUT_A1, IIR_INPUT_B0, IIR_INPUT_B1; + int16 IIR_A0, IIR_A1, IIR_B0, IIR_B1; + int16 ACC0, ACC1; + int16 FB_A0, FB_A1, FB_B0, FB_B1; - IIR_INPUT_A0 = ((RD_RVB(IIR_SRC_A0) * IIR_COEF) >> 15) + ((downsampled[0] * IN_COEF_L) >> 15); - IIR_INPUT_A1 = ((RD_RVB(IIR_SRC_A1) * IIR_COEF) >> 15) + ((downsampled[1] * IN_COEF_R) >> 15); - IIR_INPUT_B0 = ((RD_RVB(IIR_SRC_B0) * IIR_COEF) >> 15) + ((downsampled[0] * IN_COEF_L) >> 15); - IIR_INPUT_B1 = ((RD_RVB(IIR_SRC_B1) * IIR_COEF) >> 15) + ((downsampled[1] * IN_COEF_R) >> 15); + IIR_INPUT_A0 = ReverbSat(((RD_RVB(IIR_SRC_A0) * IIR_COEF) >> 15) + ((downsampled[0] * IN_COEF_L) >> 15)); + IIR_INPUT_A1 = ReverbSat(((RD_RVB(IIR_SRC_A1) * IIR_COEF) >> 15) + ((downsampled[1] * IN_COEF_R) >> 15)); + IIR_INPUT_B0 = ReverbSat(((RD_RVB(IIR_SRC_B0) * IIR_COEF) >> 15) + ((downsampled[0] * IN_COEF_L) >> 15)); + IIR_INPUT_B1 = ReverbSat(((RD_RVB(IIR_SRC_B1) * IIR_COEF) >> 15) + ((downsampled[1] * IN_COEF_R) >> 15)); + IIR_A0 = ReverbSat((((IIR_INPUT_A0 * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_A0, -1)) >> 14)) >> 1); + IIR_A1 = ReverbSat((((IIR_INPUT_A1 * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_A1, -1)) >> 14)) >> 1); + IIR_B0 = ReverbSat((((IIR_INPUT_B0 * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_B0, -1)) >> 14)) >> 1); + IIR_B1 = ReverbSat((((IIR_INPUT_B1 * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_B1, -1)) >> 14)) >> 1); - IIR_A0 = (((int64)IIR_INPUT_A0 * IIR_ALPHA) >> 15) + ((RD_RVB(IIR_DEST_A0) * (32768 - IIR_ALPHA)) >> 15); - IIR_A1 = (((int64)IIR_INPUT_A1 * IIR_ALPHA) >> 15) + ((RD_RVB(IIR_DEST_A1) * (32768 - IIR_ALPHA)) >> 15); - IIR_B0 = (((int64)IIR_INPUT_B0 * IIR_ALPHA) >> 15) + ((RD_RVB(IIR_DEST_B0) * (32768 - IIR_ALPHA)) >> 15); - IIR_B1 = (((int64)IIR_INPUT_B1 * IIR_ALPHA) >> 15) + ((RD_RVB(IIR_DEST_B1) * (32768 - IIR_ALPHA)) >> 15); + WR_RVB(IIR_DEST_A0, IIR_A0); + WR_RVB(IIR_DEST_A1, IIR_A1); + WR_RVB(IIR_DEST_B0, IIR_B0); + WR_RVB(IIR_DEST_B1, IIR_B1); - WR_RVB(IIR_DEST_A0, IIR_A0, 1); - WR_RVB(IIR_DEST_A1, IIR_A1, 1); - WR_RVB(IIR_DEST_B0, IIR_B0, 1); - WR_RVB(IIR_DEST_B1, IIR_B1, 1); + ACC0 = ReverbSat((((RD_RVB(ACC_SRC_A0) * ACC_COEF_A) >> 14) + + ((RD_RVB(ACC_SRC_B0) * ACC_COEF_B) >> 14) + + ((RD_RVB(ACC_SRC_C0) * ACC_COEF_C) >> 14) + + ((RD_RVB(ACC_SRC_D0) * ACC_COEF_D) >> 14)) >> 1); -#if 0 - ACC0 = ((RD_RVB(ACC_SRC_A0) * ACC_COEF_A) >> 15) + - ((RD_RVB(ACC_SRC_B0) * ACC_COEF_B) >> 15) + - ((RD_RVB(ACC_SRC_C0) * ACC_COEF_C) >> 15) + - ((RD_RVB(ACC_SRC_D0) * ACC_COEF_D) >> 15); + ACC1 = ReverbSat((((RD_RVB(ACC_SRC_A1) * ACC_COEF_A) >> 14) + + ((RD_RVB(ACC_SRC_B1) * ACC_COEF_B) >> 14) + + ((RD_RVB(ACC_SRC_C1) * ACC_COEF_C) >> 14) + + ((RD_RVB(ACC_SRC_D1) * ACC_COEF_D) >> 14)) >> 1); - ACC1 = ((RD_RVB(ACC_SRC_A1) * ACC_COEF_A) >> 15) + - ((RD_RVB(ACC_SRC_B1) * ACC_COEF_B) >> 15) + - ((RD_RVB(ACC_SRC_C1) * ACC_COEF_C) >> 15) + - ((RD_RVB(ACC_SRC_D1) * ACC_COEF_D) >> 15); -#endif + FB_A0 = RD_RVB(MIX_DEST_A0 - FB_SRC_A); + FB_A1 = RD_RVB(MIX_DEST_A1 - FB_SRC_A); + FB_B0 = RD_RVB(MIX_DEST_B0 - FB_SRC_B); + FB_B1 = RD_RVB(MIX_DEST_B1 - FB_SRC_B); - ACC0 = ((int64)(RD_RVB(ACC_SRC_A0) * ACC_COEF_A) + - (RD_RVB(ACC_SRC_B0) * ACC_COEF_B) + - (RD_RVB(ACC_SRC_C0) * ACC_COEF_C) + - (RD_RVB(ACC_SRC_D0) * ACC_COEF_D)) >> 15; + WR_RVB(MIX_DEST_A0, ReverbSat(ACC0 - ((FB_A0 * FB_ALPHA) >> 15))); + WR_RVB(MIX_DEST_A1, ReverbSat(ACC1 - ((FB_A1 * FB_ALPHA) >> 15))); - - ACC1 = ((int64)(RD_RVB(ACC_SRC_A1) * ACC_COEF_A) + - (RD_RVB(ACC_SRC_B1) * ACC_COEF_B) + - (RD_RVB(ACC_SRC_C1) * ACC_COEF_C) + - (RD_RVB(ACC_SRC_D1) * ACC_COEF_D)) >> 15; - - - FB_A0 = RD_RVB(MIX_DEST_A0 - FB_SRC_A); - FB_A1 = RD_RVB(MIX_DEST_A1 - FB_SRC_A); - FB_B0 = RD_RVB(MIX_DEST_B0 - FB_SRC_B); - FB_B1 = RD_RVB(MIX_DEST_B1 - FB_SRC_B); - - WR_RVB(MIX_DEST_A0, ACC0 - ((FB_A0 * FB_ALPHA) >> 15)); - WR_RVB(MIX_DEST_A1, ACC1 - ((FB_A1 * FB_ALPHA) >> 15)); - - WR_RVB(MIX_DEST_B0, (((int64)FB_ALPHA * ACC0) >> 15) - ((FB_A0 * (int16)(0x8000 ^ FB_ALPHA)) >> 15) - ((FB_B0 * FB_X) >> 15)); - WR_RVB(MIX_DEST_B1, (((int64)FB_ALPHA * ACC1) >> 15) - ((FB_A1 * (int16)(0x8000 ^ FB_ALPHA)) >> 15) - ((FB_B1 * FB_X) >> 15)); - } + WR_RVB(MIX_DEST_B0, ReverbSat(((FB_ALPHA * ACC0) >> 15) - ((FB_A0 * (int16)(0x8000 ^ FB_ALPHA)) >> 15) - ((FB_B0 * FB_X) >> 15))); + WR_RVB(MIX_DEST_B1, ReverbSat(((FB_ALPHA * ACC1) >> 15) - ((FB_A1 * (int16)(0x8000 ^ FB_ALPHA)) >> 15) - ((FB_B1 * FB_X) >> 15))); + } // // Get output samples // -// RUSB[0][RUSB_WP | 0x40] = RUSB[0][RUSB_WP] = (short)rand(); -// RUSB[1][RUSB_WP | 0x40] = RUSB[1][RUSB_WP] = (short)rand(); - RUSB[0][RUSB_WP | 0x40] = RUSB[0][RUSB_WP] = (RD_RVB(MIX_DEST_A0) + RD_RVB(MIX_DEST_B0)) >> 1; - RUSB[1][RUSB_WP | 0x40] = RUSB[1][RUSB_WP] = (RD_RVB(MIX_DEST_A1) + RD_RVB(MIX_DEST_B1)) >> 1; - - RUSB_WP = (RUSB_WP + 1) & 0x3F; + RUSB[0][(RvbResPos >> 1) | 0x20] = RUSB[0][RvbResPos >> 1] = (RD_RVB(MIX_DEST_A0) + RD_RVB(MIX_DEST_B0)) >> 1; + RUSB[1][(RvbResPos >> 1) | 0x20] = RUSB[1][RvbResPos >> 1] = (RD_RVB(MIX_DEST_A1) + RD_RVB(MIX_DEST_B1)) >> 1; ReverbCur = (ReverbCur + 1) & 0x3FFFF; if(!ReverbCur) ReverbCur = ReverbWA; - } + + for(unsigned lr = 0; lr < 2; lr++) + upsampled[lr] = Reverb2244(&RUSB[lr][((RvbResPos - 39) & 0x3F) >> 1]); + } else { - RUSB[0][RUSB_WP | 0x40] = RUSB[0][RUSB_WP] = 0; - RUSB[1][RUSB_WP | 0x40] = RUSB[1][RUSB_WP] = 0; - - RUSB_WP = (RUSB_WP + 1) & 0x3F; + for(unsigned lr = 0; lr < 2; lr++) + upsampled[lr] = Reverb2244(&RUSB[lr][((RvbResPos - 39) & 0x3F) >> 1]); } - for(int lr = 0; lr < 2; lr++) - upsampled[lr] = Reverb4422(&RUSB[lr][(RUSB_WP - 40) & 0x3F]); + RvbResPos = (RvbResPos + 1) & 0x3F; - out_l = upsampled[0]; - out_r = upsampled[1]; + for(unsigned lr = 0; lr < 2; lr++) + out[lr] = upsampled[lr]; } diff --git a/psx/octoshock/psx/timer.h b/psx/octoshock/psx/timer.h index a816ad0591..225b735e4e 100644 --- a/psx/octoshock/psx/timer.h +++ b/psx/octoshock/psx/timer.h @@ -34,8 +34,7 @@ void TIMER_SetVBlank(bool status); pscpu_timestamp_t TIMER_Update(const pscpu_timestamp_t); void TIMER_ResetTS(void); -void TIMER_Power(void); -int TIMER_StateAction(StateMem *sm, int load, int data_only); +void TIMER_Power(void) MDFN_COLD; } diff --git a/psx/octoshock/state.cpp b/psx/octoshock/state.cpp deleted file mode 100644 index 5df459221b..0000000000 --- a/psx/octoshock/state.cpp +++ /dev/null @@ -1,897 +0,0 @@ -/* Mednafen - Multi-system Emulator - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include - -#include "octoshock.h" - -#include "state.h" -#include "video.h" -//#include "video/resize.h" -#include "endian.h" - -static int SaveStateStatus[10]; - -#define RLSB MDFNSTATE_RLSB //0x80000000 - -int32 smem_read(StateMem *st, void *buffer, uint32 len) -{ - if((len + st->loc) > st->len) - return(0); - - memcpy(buffer, st->data + st->loc, len); - st->loc += len; - - return(len); -} - -int32 smem_write(StateMem *st, void *buffer, uint32 len) -{ - if((len + st->loc) > st->malloced) - { - uint32 newsize = (st->malloced >= 32768) ? st->malloced : (st->initial_malloc ? st->initial_malloc : 32768); - - while(newsize < (len + st->loc)) - newsize *= 2; - st->data = (uint8 *)realloc(st->data, newsize); - st->malloced = newsize; - } - memcpy(st->data + st->loc, buffer, len); - st->loc += len; - - if(st->loc > st->len) st->len = st->loc; - - return(len); -} - -int32 smem_putc(StateMem *st, int value) -{ - uint8 tmpval = value; - if(smem_write(st, &tmpval, 1) != 1) - return(-1); - return(1); -} - -int32 smem_tell(StateMem *st) -{ - return(st->loc); -} - -int32 smem_seek(StateMem *st, uint32 offset, int whence) -{ - switch(whence) - { - case SEEK_SET: st->loc = offset; break; - case SEEK_END: st->loc = st->len - offset; break; - case SEEK_CUR: st->loc += offset; break; - } - - if(st->loc > st->len) - { - st->loc = st->len; - return(-1); - } - - if(st->loc < 0) - { - st->loc = 0; - return(-1); - } - - return(0); -} - -int smem_write32le(StateMem *st, uint32 b) -{ - uint8 s[4]; - s[0]=b; - s[1]=b>>8; - s[2]=b>>16; - s[3]=b>>24; - return((smem_write(st, s, 4)<4)?0:4); -} - -int smem_read32le(StateMem *st, uint32 *b) -{ - uint8 s[4]; - - if(smem_read(st, s, 4) < 4) - return(0); - - *b = s[0] | (s[1] << 8) | (s[2] << 16) | (s[3] << 24); - - return(4); -} - - -static bool ValidateSFStructure(SFORMAT *sf) -{ - SFORMAT *saved_sf = sf; - - while(sf->size || sf->name) - { - SFORMAT *sub_sf = saved_sf; - while(sub_sf->size || sub_sf->name) - { - if(sf != sub_sf) - { - if(!strncmp(sf->name, sub_sf->name, 32)) - { - printf("Duplicate state variable name: %.32s\n", sf->name); - } - } - sub_sf++; - } - - sf++; - } - return(1); -} - - -static bool SubWrite(StateMem *st, SFORMAT *sf, int data_only, const char *name_prefix = NULL) -{ - // FIXME? It's kind of slow, and we definitely don't want it on with state rewinding... - if(!data_only) - ValidateSFStructure(sf); - - while(sf->size || sf->name) // Size can sometimes be zero, so also check for the text name. These two should both be zero only at the end of a struct. - { - if(!sf->size || !sf->v) - { - sf++; - continue; - } - - if(sf->size == (uint32)~0) /* Link to another struct. */ - { - if(!SubWrite(st, (SFORMAT *)sf->v, data_only, name_prefix)) - return(0); - - sf++; - continue; - } - - int32 bytesize = sf->size; - - // If we're only saving the raw data, and we come across a bool type, we save it as it is in memory, rather than converting it to - // 1-byte. In the SFORMAT structure, the size member for bool entries is the number of bool elements, not the total in-memory size, - // so we adjust it here. - if(data_only && (sf->flags & MDFNSTATE_BOOL)) - { - bytesize *= sizeof(bool); - } - - if(!data_only) - { - char nameo[1 + 256]; - int slen; - - slen = snprintf(nameo + 1, 256, "%s%s", name_prefix ? name_prefix : "", sf->name); - nameo[0] = slen; - - if(slen >= 255) - { - printf("Warning: state variable name possibly too long: %s %s %s %d\n", sf->name, name_prefix, nameo, slen); - slen = 255; - } - - smem_write(st, nameo, 1 + nameo[0]); - smem_write32le(st, bytesize); - - /* Flip the byte order... */ - if(sf->flags & MDFNSTATE_BOOL) - { - - } - else if(sf->flags & MDFNSTATE_RLSB64) - Endian_A64_NE_to_LE(sf->v, bytesize / sizeof(uint64)); - else if(sf->flags & MDFNSTATE_RLSB32) - Endian_A32_NE_to_LE(sf->v, bytesize / sizeof(uint32)); - else if(sf->flags & MDFNSTATE_RLSB16) - Endian_A16_NE_to_LE(sf->v, bytesize / sizeof(uint16)); - else if(sf->flags & RLSB) - Endian_V_NE_to_LE(sf->v, bytesize); - } - - // Special case for the evil bool type, to convert bool to 1-byte elements. - // Don't do it if we're only saving the raw data. - if((sf->flags & MDFNSTATE_BOOL) && !data_only) - { - for(int32 bool_monster = 0; bool_monster < bytesize; bool_monster++) - { - uint8 tmp_bool = ((bool *)sf->v)[bool_monster]; - //printf("Bool write: %.31s\n", sf->name); - smem_write(st, &tmp_bool, 1); - } - } - else - smem_write(st, (uint8 *)sf->v, bytesize); - - if(!data_only) - { - /* Now restore the original byte order. */ - if(sf->flags & MDFNSTATE_BOOL) - { - - } - else if(sf->flags & MDFNSTATE_RLSB64) - Endian_A64_LE_to_NE(sf->v, bytesize / sizeof(uint64)); - else if(sf->flags & MDFNSTATE_RLSB32) - Endian_A32_LE_to_NE(sf->v, bytesize / sizeof(uint32)); - else if(sf->flags & MDFNSTATE_RLSB16) - Endian_A16_LE_to_NE(sf->v, bytesize / sizeof(uint16)); - else if(sf->flags & RLSB) - Endian_V_LE_to_NE(sf->v, bytesize); - } - sf++; - } - - return TRUE_1; -} - -static int WriteStateChunk(StateMem *st, const char *sname, SFORMAT *sf, int data_only) -{ - int32 data_start_pos; - int32 end_pos; - - if(!data_only) - { - uint8 sname_tmp[32]; - - memset(sname_tmp, 0, sizeof(sname_tmp)); - strncpy((char *)sname_tmp, sname, 32); - - if(strlen(sname) > 32) - printf("Warning: section name is too long: %s\n", sname); - - smem_write(st, sname_tmp, 32); - - smem_write32le(st, 0); // We'll come back and write this later. - } - - data_start_pos = smem_tell(st); - - if(!SubWrite(st, sf, data_only)) - return(0); - - end_pos = smem_tell(st); - - if(!data_only) - { - smem_seek(st, data_start_pos - 4, SEEK_SET); - smem_write32le(st, end_pos - data_start_pos); - smem_seek(st, end_pos, SEEK_SET); - } - - return(end_pos - data_start_pos); -} - -struct compare_cstr -{ - bool operator()(const char *s1, const char *s2) const - { - return(strcmp(s1, s2) < 0); - } -}; - -typedef std::map SFMap_t; - -static void MakeSFMap(SFORMAT *sf, SFMap_t &sfmap) -{ - while(sf->size || sf->name) // Size can sometimes be zero, so also check for the text name. These two should both be zero only at the end of a struct. - { - if(!sf->size || !sf->v) - { - sf++; - continue; - } - - if(sf->size == (uint32)~0) /* Link to another SFORMAT structure. */ - MakeSFMap((SFORMAT *)sf->v, sfmap); - else - { - assert(sf->name); - - if(sfmap.find(sf->name) != sfmap.end()) - printf("Duplicate save state variable in internal emulator structures(CLUB THE PROGRAMMERS WITH BREADSTICKS): %s\n", sf->name); - - sfmap[sf->name] = sf; - } - - sf++; - } -} - -// Fast raw chunk reader -static void DOReadChunk(StateMem *st, SFORMAT *sf) -{ - while(sf->size || sf->name) // Size can sometimes be zero, so also check for the text name. - // These two should both be zero only at the end of a struct. - { - if(!sf->size || !sf->v) - { - sf++; - continue; - } - - if(sf->size == (uint32) ~0) // Link to another SFORMAT struct - { - DOReadChunk(st, (SFORMAT *)sf->v); - sf++; - continue; - } - - int32 bytesize = sf->size; - - // Loading raw data, bool types are stored as they appear in memory, not as single bytes in the full state format. - // In the SFORMAT structure, the size member for bool entries is the number of bool elements, not the total in-memory size, - // so we adjust it here. - if(sf->flags & MDFNSTATE_BOOL) - bytesize *= sizeof(bool); - - smem_read(st, (uint8 *)sf->v, bytesize); - sf++; - } -} - -static int ReadStateChunk(StateMem *st, SFORMAT *sf, int size, int data_only) -{ - int temp; - - if(data_only) - { - DOReadChunk(st, sf); - } - else - { - SFMap_t sfmap; - SFMap_t sfmap_found; // Used for identifying variables that are missing in the save state. - - MakeSFMap(sf, sfmap); - - temp = smem_tell(st); - while(smem_tell(st) < (temp + size)) - { - uint32 recorded_size; // In bytes - uint8 toa[1 + 256]; // Don't change to char unless cast toa[0] to unsigned to smem_read() and other places. - - if(smem_read(st, toa, 1) != 1) - { - puts("Unexpected EOF"); - return(0); - } - - if(smem_read(st, toa + 1, toa[0]) != toa[0]) - { - puts("Unexpected EOF?"); - return 0; - } - - toa[1 + toa[0]] = 0; - - smem_read32le(st, &recorded_size); - - SFMap_t::iterator sfmit; - - sfmit = sfmap.find((char *)toa + 1); - - if(sfmit != sfmap.end()) - { - SFORMAT *tmp = sfmit->second; - uint32 expected_size = tmp->size; // In bytes - - if(recorded_size != expected_size) - { - printf("Variable in save state wrong size: %s. Need: %u, got: %u\n", toa + 1, expected_size, recorded_size); - if(smem_seek(st, recorded_size, SEEK_CUR) < 0) - { - puts("Seek error"); - return(0); - } - } - else - { - sfmap_found[tmp->name] = tmp; - - smem_read(st, (uint8 *)tmp->v, expected_size); - - if(tmp->flags & MDFNSTATE_BOOL) - { - // Converting downwards is necessary for the case of sizeof(bool) > 1 - for(int32 bool_monster = expected_size - 1; bool_monster >= 0; bool_monster--) - { - ((bool *)tmp->v)[bool_monster] = ((uint8 *)tmp->v)[bool_monster]; - } - } - if(tmp->flags & MDFNSTATE_RLSB64) - Endian_A64_LE_to_NE(tmp->v, expected_size / sizeof(uint64)); - else if(tmp->flags & MDFNSTATE_RLSB32) - Endian_A32_LE_to_NE(tmp->v, expected_size / sizeof(uint32)); - else if(tmp->flags & MDFNSTATE_RLSB16) - Endian_A16_LE_to_NE(tmp->v, expected_size / sizeof(uint16)); - else if(tmp->flags & RLSB) - Endian_V_LE_to_NE(tmp->v, expected_size); - } - } - else - { - printf("Unknown variable in save state: %s\n", toa + 1); - if(smem_seek(st, recorded_size, SEEK_CUR) < 0) - { - puts("Seek error"); - return(0); - } - } - } // while(...) - - for(SFMap_t::const_iterator it = sfmap.begin(); it != sfmap.end(); it++) - { - if(sfmap_found.find(it->second->name) == sfmap_found.end()) - { - printf("Variable missing from save state: %s\n", it->second->name); - } - } - - assert(smem_tell(st) == (temp + size)); - } - return 1; -} - -static int CurrentState = 0; -static int RecentlySavedState = -1; - -/* This function is called by the game driver(NES, GB, GBA) to save a state. */ -int MDFNSS_StateAction(StateMem *st, int load, int data_only, std::vector §ions) -{ - std::vector::iterator section; - - if(load) - { - if(data_only) - { - for(section = sections.begin(); section != sections.end(); section++) - { - ReadStateChunk(st, section->sf, ~0, 1); - } - } - else - { - char sname[32]; - - for(section = sections.begin(); section != sections.end(); section++) - { - int found = 0; - uint32 tmp_size; - uint32 total = 0; - - while(smem_read(st, (uint8 *)sname, 32) == 32) - { - if(smem_read32le(st, &tmp_size) != 4) - return(0); - - total += tmp_size + 32 + 4; - - // Yay, we found the section - if(!strncmp(sname, section->name, 32)) - { - if(!ReadStateChunk(st, section->sf, tmp_size, 0)) - { - printf("Error reading chunk: %s\n", section->name); - return(0); - } - found = 1; - break; - } - else - { - // puts("SEEK"); - if(smem_seek(st, tmp_size, SEEK_CUR) < 0) - { - puts("Chunk seek failure"); - return(0); - } - } - } - if(smem_seek(st, -total, SEEK_CUR) < 0) - { - puts("Reverse seek error"); - return(0); - } - if(!found && !section->optional) // Not found. We are sad! - { - printf("Section missing: %.32s\n", section->name); - return(0); - } - } - } - } - else - { - for(section = sections.begin(); section != sections.end(); section++) - { - if(!WriteStateChunk(st, section->name, section->sf, data_only)) - return(0); - } - } - - return(1); -} - -int MDFNSS_StateAction(StateMem *st, int load, int data_only, SFORMAT *sf, const char *name, bool optional) -{ - std::vector love; - - love.push_back(SSDescriptor(sf, name, optional)); - return(MDFNSS_StateAction(st, load, data_only, love)); -} - -//int MDFNSS_SaveSM(StateMem *st, int wantpreview_and_ts, int data_only, const MDFN_Surface *surface, const MDFN_Rect *DisplayRect, const int32 *LineWidths) -//{ -// static const char *header_magic = "MDFNSVST"; -// uint8 header[32]; -// int neowidth = 0, neoheight = 0; -// -// memset(header, 0, sizeof(header)); -// -// if(wantpreview_and_ts) -// { -// bool is_multires = false; -// -// // We'll want to use the nominal width if the source rectangle is > 25% off on either axis, or the source image has -// // multiple horizontal resolutions. -// neowidth = MDFNGameInfo->nominal_width; -// neoheight = MDFNGameInfo->nominal_height; -// -// if(LineWidths[0] != ~0) -// { -// uint32 first_w = LineWidths[DisplayRect->y]; -// -// for(int y = 0; y < DisplayRect->h; y++) -// if(LineWidths[DisplayRect->y + y] != first_w) -// { -// puts("Multires!"); -// is_multires = TRUE; -// } -// } -// -// if(!is_multires) -// { -// if(((double)DisplayRect->w / MDFNGameInfo->nominal_width) > 0.75 && ((double)DisplayRect->w / MDFNGameInfo->nominal_width) < 1.25) -// neowidth = DisplayRect->w; -// -// if(((double)DisplayRect->h / MDFNGameInfo->nominal_height) > 0.75 && ((double)DisplayRect->h / MDFNGameInfo->nominal_height) < 1.25) -// neoheight = DisplayRect->h; -// } -// } -// -// if(!data_only) -// { -// memcpy(header, header_magic, 8); -// -// if(wantpreview_and_ts) -// MDFN_en64lsb(header + 8, time(NULL)); -// -// MDFN_en32lsb(header + 16, MEDNAFEN_VERSION_NUMERIC); -// MDFN_en32lsb(header + 24, neowidth); -// MDFN_en32lsb(header + 28, neoheight); -// smem_write(st, header, 32); -// } -// -// if(wantpreview_and_ts) -// { -// uint8 *previewbuffer = (uint8 *)malloc(4 * neowidth * neoheight); -// MDFN_Surface *dest_surface = new MDFN_Surface((uint32 *)previewbuffer, neowidth, neoheight, neowidth, surface->format); -// MDFN_Rect dest_rect; -// -// dest_rect.x = 0; -// dest_rect.y = 0; -// dest_rect.w = neowidth; -// dest_rect.h = neoheight; -// -// MDFN_ResizeSurface(surface, DisplayRect, LineWidths, dest_surface, &dest_rect); -// -// { -// uint32 a, b = 0; -// for(a = 0; a < neowidth * neoheight * 4; a+=4) -// { -// uint32 c = *(uint32 *)&previewbuffer[a]; -// int nr, ng, nb; -// -// surface->DecodeColor(c, nr, ng, nb); -// -// previewbuffer[b + 0] = nr; -// previewbuffer[b + 1] = ng; -// previewbuffer[b + 2] = nb; -// b += 3; -// } -// } -// -// smem_write(st, previewbuffer, 3 * neowidth * neoheight); -// -// free(previewbuffer); -// delete dest_surface; -// } -// -// // State rewinding code path hack, FIXME -// if(data_only) -// { -// if(!MDFN_RawInputStateAction(st, 0, data_only)) -// return(0); -// } -// -// if(!MDFNGameInfo->StateAction(st, 0, data_only)) -// return(0); -// -// if(!data_only) -// { -// uint32 sizy = smem_tell(st); -// smem_seek(st, 16 + 4, SEEK_SET); -// smem_write32le(st, sizy); -// } -// return(1); -//} - -int MDFNSS_Save(const char *fname, const char *suffix, const MDFN_Surface *surface, const MDFN_Rect *DisplayRect, const int32 *LineWidths) -{ - StateMem st; - - memset(&st, 0, sizeof(StateMem)); - - - //if(!MDFNGameInfo->StateAction) - //{ - // MDFN_DispMessage(_("Module \"%s\" doesn't support save states."), MDFNGameInfo->shortname); - // return(0); - //} - - //if(!MDFNSS_SaveSM(&st, (DisplayRect && LineWidths), 0, surface, DisplayRect, LineWidths)) - //{ - // if(st.data) - // free(st.data); - // if(!fname && !suffix) - // MDFN_DispMessage(_("State %d save error."), CurrentState); - // return(0); - //} - - /*if(!MDFN_DumpToFile(fname ? fname : MDFN_MakeFName(MDFNMKF_STATE,CurrentState,suffix).c_str(), 6, st.data, st.len)) - { - SaveStateStatus[CurrentState] = 0; - free(st.data); - - if(!fname && !suffix) - MDFN_DispMessage(_("State %d save error."),CurrentState); - - return(0); - }*/ - - //free(st.data); - - //if(!fname && !suffix) - // MDFN_DispMessage(_("State %d saved."),CurrentState); - - return(1); -} -// -// -//int MDFNSS_LoadSM(StateMem *st, int haspreview, int data_only) -//{ -// uint8 header[32]; -// uint32 stateversion; -// -// if(data_only) -// { -// stateversion = MEDNAFEN_VERSION_NUMERIC; -// } -// else -// { -// smem_read(st, header, 32); -// -// if(memcmp(header, "MEDNAFENSVESTATE", 16) && memcmp(header, "MDFNSVST", 8)) -// return(0); -// -// stateversion = MDFN_de32lsb(header + 16); -// -// if((int)stateversion < 0x900) // Ensuring that (int)stateversion is > 0 is the most important part. -// return(0); -// -// if(haspreview) -// { -// uint32 width = MDFN_de32lsb(header + 24); -// uint32 height = MDFN_de32lsb(header + 28); -// uint32 psize; -// -// psize = width * height * 3; -// smem_seek(st, psize, SEEK_CUR); // Skip preview -// } -// } -// -// // State rewinding code path hack, FIXME -// if(data_only) -// { -// if(!MDFN_RawInputStateAction(st, stateversion, data_only)) -// return(0); -// } -// -// return(MDFNGameInfo->StateAction(st, stateversion, data_only)); -//} -// -//int MDFNSS_LoadFP(gzFile fp) -//{ -// uint8 header[32]; -// StateMem st; -// -// memset(&st, 0, sizeof(StateMem)); -// -// if(gzread(fp, header, 32) != 32) -// { -// return(0); -// } -// st.len = MDFN_de32lsb(header + 16 + 4); -// -// if(st.len < 32) -// return(0); -// -// if(!(st.data = (uint8 *)malloc(st.len))) -// return(0); -// -// memcpy(st.data, header, 32); -// if(gzread(fp, st.data + 32, st.len - 32) != ((int32)st.len - 32)) -// { -// free(st.data); -// return(0); -// } -// if(!MDFNSS_LoadSM(&st, 1, 0)) -// { -// free(st.data); -// return(0); -// } -// free(st.data); -// return(1); -//} - -int MDFNSS_Load(const char *fname, const char *suffix) -{ - //gzFile st; - - // if(!MDFNGameInfo->StateAction) - // { - // MDFN_DispMessage(_("Module \"%s\" doesn't support save states."), MDFNGameInfo->shortname); - // return(0); - // } - - // if(fname) - // st=gzopen(fname, "rb"); - // else - // { - // st=gzopen(MDFN_MakeFName(MDFNMKF_STATE,CurrentState,suffix).c_str(),"rb"); - //} - - //if(st == NULL) - //{ - // if(!fname && !suffix) - // { - // MDFN_DispMessage(_("State %d load error."),CurrentState); - // SaveStateStatus[CurrentState]=0; - // } - // return(0); - //} - - //if(MDFNSS_LoadFP(st)) - //{ - // if(!fname && !suffix) - // { - // SaveStateStatus[CurrentState]=1; - // MDFN_DispMessage(_("State %d loaded."),CurrentState); - // SaveStateStatus[CurrentState]=1; - // } - // gzclose(st); - // return(1); - // } - // else - // { - // SaveStateStatus[CurrentState]=1; - // MDFN_DispMessage(_("State %d read error!"),CurrentState); - // gzclose(st); - // return(0); - // } - - return 0; -} -// -//void MDFNSS_GetStateInfo(const char *filename, StateStatusStruct *status) -//{ -// gzFile fp; -// uint32 StateShowPBWidth; -// uint32 StateShowPBHeight; -// uint8 *previewbuffer = NULL; -// -// fp = gzopen(filename, "rb"); -// if(fp) -// { -// uint8 header[32]; -// -// gzread(fp, header, 32); -// uint32 width = MDFN_de32lsb(header + 24); -// uint32 height = MDFN_de32lsb(header + 28); -// -// if(width > 1024) width = 1024; -// if(height > 1024) height = 1024; -// -// if(!(previewbuffer = (uint8 *)MDFN_malloc(3 * width * height, _("Save state preview buffer")))) -// { -// StateShowPBWidth = 0; -// StateShowPBHeight = 0; -// } -// else -// { -// gzread(fp, previewbuffer, 3 * width * height); -// -// StateShowPBWidth = width; -// StateShowPBHeight = height; -// } -// gzclose(fp); -// } -// else -// { -// StateShowPBWidth = MDFNGameInfo->nominal_width; -// StateShowPBHeight = MDFNGameInfo->nominal_height; -// } -// -// status->gfx = previewbuffer; -// status->w = StateShowPBWidth; -// status->h = StateShowPBHeight; -//} - - -void MDFNI_SaveState(const char *fname, const char *suffix, const MDFN_Surface *surface, const MDFN_Rect *DisplayRect, const int32 *LineWidths) -{ - //if(!MDFNGameInfo->StateAction) - // return; - - //if(MDFNnetplay && (MDFNGameInfo->SaveStateAltersState == true)) - //{ - // char sb[256]; - // trio_snprintf(sb, sizeof(sb), _("Module %s is not compatible with manual state saving during netplay."), MDFNGameInfo->shortname); - // MDFND_NetplayText((const uint8*)sb, false); - // return; - //} - - MDFNSS_Save(fname, suffix, surface, DisplayRect, LineWidths); -} - -void MDFNI_LoadState(const char *fname, const char *suffix) -{ - //if(!MDFNGameInfo->StateAction) - // return; - - /* For network play and movies, be load the state locally, and then save the state to a temporary buffer, - and send or record that. This ensures that if an older state is loaded that is missing some - information expected in newer save states, desynchronization won't occur(at least not - from this ;)). - */ - if(MDFNSS_Load(fname, suffix)) - { - - } -} - diff --git a/psx/octoshock/state.h b/psx/octoshock/state.h deleted file mode 100644 index 1dd1cd5864..0000000000 --- a/psx/octoshock/state.h +++ /dev/null @@ -1,145 +0,0 @@ -#pragma once - -#include "octoshock.h" -#include "video/surface.h" -//#include "state-common.h" -#include - -//void MDFNSS_GetStateInfo(const char *filename, StateStatusStruct *status); - -int MDFNSS_Save(const char *, const char *suffix, const MDFN_Surface *surface = (MDFN_Surface *)NULL, const MDFN_Rect *DisplayRect = (MDFN_Rect*)NULL, const int32 *LineWidths = (int32*)NULL); -int MDFNSS_Load(const char *, const char *suffix); -int MDFNSS_SaveFP(FILE* fp, const MDFN_Surface *surface = (MDFN_Surface *)NULL, const MDFN_Rect *DisplayRect = (MDFN_Rect*)NULL, const int32 *LineWidths = (int32*)NULL); -int MDFNSS_LoadFP(FILE fp); - -typedef struct -{ - uint8 *data; - uint32 loc; - uint32 len; - - uint32 malloced; - - uint32 initial_malloc; // A setting! -} StateMem; - -// Eh, we abuse the smem_* in-memory stream code -// in a few other places. :) -int32 smem_read(StateMem *st, void *buffer, uint32 len); -int32 smem_write(StateMem *st, void *buffer, uint32 len); -int32 smem_putc(StateMem *st, int value); -int32 smem_tell(StateMem *st); -int32 smem_seek(StateMem *st, uint32 offset, int whence); -int smem_write32le(StateMem *st, uint32 b); -int smem_read32le(StateMem *st, uint32 *b); - -int MDFNSS_SaveSM(StateMem *st, int wantpreview_and_ts, int data_only, const MDFN_Surface *surface = (MDFN_Surface *)NULL, const MDFN_Rect *DisplayRect = (MDFN_Rect*)NULL, const int32 *LineWidths = (int32*)NULL); -int MDFNSS_LoadSM(StateMem *st, int haspreview, int data_only); - -void MDFNSS_CheckStates(void); - -// Flag for a single, >= 1 byte native-endian variable -#define MDFNSTATE_RLSB 0x80000000 - -// 32-bit native-endian elements -#define MDFNSTATE_RLSB32 0x40000000 - -// 16-bit native-endian elements -#define MDFNSTATE_RLSB16 0x20000000 - -// 64-bit native-endian elements -#define MDFNSTATE_RLSB64 0x10000000 - -#define MDFNSTATE_BOOL 0x08000000 - - -//// Array of structures -//#define MDFNSTATE_ARRAYOFS 0x04000000 - -typedef struct { - void *v; // Pointer to the variable/array - uint32 size; // Length, in bytes, of the data to be saved EXCEPT: - // In the case of MDFNSTATE_BOOL, it is the number of bool elements to save(bool is not always 1-byte). - // If 0, the subchunk isn't saved. - uint32 flags; // Flags - const char *name; // Name - //uint32 struct_size; // Only used for MDFNSTATE_ARRAYOFS, sizeof(struct) that members of the linked SFORMAT struct are in. -} SFORMAT; - -INLINE bool SF_IS_BOOL(bool *) { return(1); } -INLINE bool SF_IS_BOOL(void *) { return(0); } - -INLINE uint32 SF_FORCE_AB(bool *) { return(0); } - -INLINE uint32 SF_FORCE_A8(int8 *) { return(0); } -INLINE uint32 SF_FORCE_A8(uint8 *) { return(0); } - -INLINE uint32 SF_FORCE_A16(int16 *) { return(0); } -INLINE uint32 SF_FORCE_A16(uint16 *) { return(0); } - -INLINE uint32 SF_FORCE_A32(int32 *) { return(0); } -INLINE uint32 SF_FORCE_A32(uint32 *) { return(0); } - -INLINE uint32 SF_FORCE_A64(int64 *) { return(0); } -INLINE uint32 SF_FORCE_A64(uint64 *) { return(0); } - -INLINE uint32 SF_FORCE_D(double *) { return(0); } - -#define SFVARN(x, n) { &(x), SF_IS_BOOL(&(x)) ? 1U : (uint32)sizeof(x), MDFNSTATE_RLSB | (SF_IS_BOOL(&(x)) ? MDFNSTATE_BOOL : 0), n } -#define SFVAR(x) SFVARN((x), #x) - -#define SFARRAYN(x, l, n) { (x), (uint32)(l), 0 | SF_FORCE_A8(x), n } -#define SFARRAY(x, l) SFARRAYN((x), (l), #x) - -#define SFARRAYBN(x, l, n) { (x), (uint32)(l), MDFNSTATE_BOOL | SF_FORCE_AB(x), n } -#define SFARRAYB(x, l) SFARRAYBN((x), (l), #x) - -#define SFARRAY16N(x, l, n) { (x), (uint32)((l) * sizeof(uint16)), MDFNSTATE_RLSB16 | SF_FORCE_A16(x), n } -#define SFARRAY16(x, l) SFARRAY16N((x), (l), #x) - -#define SFARRAY32N(x, l, n) { (x), (uint32)((l) * sizeof(uint32)), MDFNSTATE_RLSB32 | SF_FORCE_A32(x), n } -#define SFARRAY32(x, l) SFARRAY32N((x), (l), #x) - -#define SFARRAY64N(x, l, n) { (x), (uint32)((l) * sizeof(uint64)), MDFNSTATE_RLSB64 | SF_FORCE_A64(x), n } -#define SFARRAY64(x, l) SFARRAY64N((x), (l), #x) - -#if SIZEOF_DOUBLE != 8 -#error "sizeof(double) != 8" -#endif - -#define SFARRAYDN(x, l, n) { (x), (uint32)((l) * 8), MDFNSTATE_RLSB64 | SF_FORCE_D(x), n } -#define SFARRAYD(x, l) SFARRAYDN((x), (l), #x) - -#define SFEND { 0, 0, 0, 0 } - -#include - -// State-Section Descriptor -class SSDescriptor -{ - public: - SSDescriptor(SFORMAT *n_sf, const char *n_name, bool n_optional = 0) - { - sf = n_sf; - name = n_name; - optional = n_optional; - } - ~SSDescriptor(void) - { - - } - - SFORMAT *sf; - const char *name; - bool optional; -}; - -int MDFNSS_StateAction(StateMem *st, int load, int data_only, std::vector §ions); -int MDFNSS_StateAction(StateMem *st, int load, int data_only, SFORMAT *sf, const char *name, bool optional = 0); - -void MDFN_StateEvilFlushMovieLove(void); -bool MDFN_StateEvilIsRunning(void); -void MDFN_StateEvilBegin(void); -void MDFN_StateEvilEnd(void); -int MDFN_StateEvil(int); - diff --git a/psx/octoshock/video/surface.cpp b/psx/octoshock/video/surface.cpp index 8b2b247ccf..b99c1bd84c 100644 --- a/psx/octoshock/video/surface.cpp +++ b/psx/octoshock/video/surface.cpp @@ -148,7 +148,7 @@ void MDFN_Surface::Init(void *const p_pixels, const uint32 p_width, const uint32 { //ErrnoHolder ene(errno); - throw "OLD ERROR"; + throw "OLD ERROR"; //throw(MDFN_Error(ene.Errno(), "%s", ene.StrError())); } } @@ -225,6 +225,16 @@ void MDFN_Surface::SetFormat(const MDFN_PixelFormat &nf, bool convert) { if(format.bpp == 8) { + uint16 palconv[256]; + + for(unsigned i = 0; i < 256; i++) + { + uint8 r, g, b; + + format.DecodePColor(palette[i], r, g, b); + palconv[i] = nf.MakeColor(r, g, b, 0); + } + puts("8bpp to 16bpp convert"); for(int y = 0; y < h; y++) { @@ -233,9 +243,7 @@ void MDFN_Surface::SetFormat(const MDFN_PixelFormat &nf, bool convert) for(int x = 0; x < w; x++) { - const MDFN_PaletteEntry &p = palette[srow[x]]; - - drow[x] = nf.MakeColor(p.r, p.g, p.b, 0); + drow[x] = palconv[srow[x]]; } } } @@ -267,6 +275,16 @@ void MDFN_Surface::SetFormat(const MDFN_PixelFormat &nf, bool convert) { if(format.bpp == 8) { + uint32 palconv[256]; + + for(unsigned i = 0; i < 256; i++) + { + uint8 r, g, b; + + format.DecodePColor(palette[i], r, g, b); + palconv[i] = nf.MakeColor(r, g, b, 0); + } + puts("8bpp to 32bpp convert"); for(int y = 0; y < h; y++) { @@ -275,9 +293,7 @@ void MDFN_Surface::SetFormat(const MDFN_PixelFormat &nf, bool convert) for(int x = 0; x < w; x++) { - const MDFN_PaletteEntry &p = palette[srow[x]]; - - drow[x] = nf.MakeColor(p.r, p.g, p.b, 0); + drow[x] = palconv[srow[x]]; } } } diff --git a/psx/octoshock/video/surface.h b/psx/octoshock/video/surface.h index e6fbe0e149..65f9c0bf74 100644 --- a/psx/octoshock/video/surface.h +++ b/psx/octoshock/video/surface.h @@ -13,6 +13,11 @@ enum //MDFN_COLORSPACE_YUV = 2, // TODO, maybe. }; +struct MDFN_PaletteEntry +{ + uint8 r, g, b; +}; + class MDFN_PixelFormat { public: @@ -86,6 +91,24 @@ class MDFN_PixelFormat } } + INLINE MDFN_PaletteEntry MakePColor(uint8 r, uint8 g, uint8 b) const + { + MDFN_PaletteEntry ret; + + ret.r = ((r * ((1 << Rprec) - 1) + 127) / 255) << Rshift; + ret.g = ((g * ((1 << Gprec) - 1) + 127) / 255) << Gshift; + ret.b = ((b * ((1 << Bprec) - 1) + 127) / 255) << Bshift; + + return ret; + } + + INLINE void DecodePColor(const MDFN_PaletteEntry& pe, uint8 &r, uint8 &g, uint8 &b) const + { + r = ((pe.r >> Rshift) & ((1 << Rprec) - 1)) * 255 / ((1 << Rprec) - 1); + g = ((pe.g >> Gshift) & ((1 << Gprec) - 1)) * 255 / ((1 << Gprec) - 1); + b = ((pe.b >> Bshift) & ((1 << Bprec) - 1)) * 255 / ((1 << Bprec) - 1); + } + // Gets the R/G/B/A values for the passed 32-bit surface pixel value INLINE void DecodeColor(uint32 value, int &r, int &g, int &b, int &a) const { @@ -149,11 +172,6 @@ class MDFN_PixelFormat } }; // MDFN_PixelFormat; -struct MDFN_PaletteEntry -{ - uint8 r, g, b; -}; - // Supports 32-bit RGBA // 16-bit is WIP // 8-bit is even WIPier. diff --git a/psx/octoshock/video/video-common.h b/psx/octoshock/video/video-common.h index e69de29bb2..dd5b4344f3 100644 --- a/psx/octoshock/video/video-common.h +++ b/psx/octoshock/video/video-common.h @@ -0,0 +1,5 @@ +#include "../mednafen.h" +#include "../video.h" +#include "../general.h" +#include "../driver.h" +