REDRIVER2/src_rebuild/GAME/C/SYSTEM.C
Ilya Shurumov 739c2ce5f7 - implement ProcessDentLump & LoadDenting
- implement ClearMem
2020-04-09 22:41:58 +06:00

2403 lines
95 KiB
C

#include "THISDUST.H"
#include "LIBETC.H"
#include "SYSTEM.H"
#include "XAPLAY.H"
#include "LOADVIEW.H"
#include "MISSION.H"
#include <string.h>
char _overlay_buffer[0x50000]; // 0x1C0000
char _frontend_buffer[0x50000]; // 0xFB400
char _other_buffer[0x50000]; // 0xF3000
char g_allocatedMem[0x200000]; // 0x137400 (_ramsize). TODO: use real malloc
char* mallocptr = g_allocatedMem;
int leadAIRequired = 0;
int leadAILoaded = 0;
int pathAILoaded = 0;
char* LevelFiles[] = {
"LEVELS\\CHICAGO.LEV",
"LEVELS\\HAVANA.LEV",
"LEVELS\\VEGAS.LEV",
"LEVELS\\RIO.LEV",
};
char* LoadingScreenNames[] = {
"GFX\\LOADCHIC.TIM",
"GFX\\LOADHAVA.TIM",
"GFX\\LOADVEGA.TIM",
"GFX\\LOADRIO.TIM",
};
CdlFILE currentfileinfo;
char currentfilename[128] = { 0 };
DRAW_MODE draw_mode_pal =
{ 0, 0, 0, 0, 512, 256, 0, 16 };
DRAW_MODE draw_mode_ntsc =
{ 0, 0, 0, 8, 512, 240, 0, 0 };
DB MPBuff[2][2];
DB* last;
DB* current;
OTTYPE _tempOT1[OTSIZE];
OTTYPE _tempOT2[OTSIZE];
char _tempPrimTab1[0x8000]; // 0xFB400
char _tempPrimTab2[0x8000]; // 0x119400
static CITYTYPE lasttype = (CITYTYPE)-1;
static int lastcity = -1;
int citystart[8];
XYPAIR citylumps[8][4];
#ifndef PSX
char g_CurrentLevelFileName[64];
#endif // !PSX
// LUT for cos and sin
// 8192 entries, even entry = Sin, odd entry = Cos
// take TR angle (between 0 and 65535), shift R by 3 (to get between 0 and 8191), and with 8190 (to get between 0 and 8190)
// if you want Cos, add 1 to the index
// you then get value between -4096 and 4096, which you can divide by 4096f to get between -1 and 1
short rcossin_tbl[8192] =
{
0x0000, 0x1000, 0x0006, 0x1000, 0x000D, 0x1000, 0x0013, 0x1000, 0x0019, 0x1000,
0x001F, 0x1000, 0x0026, 0x1000, 0x002C, 0x1000, 0x0032, 0x1000, 0x0039, 0x1000,
0x003F, 0x1000, 0x0045, 0x0FFF, 0x004B, 0x0FFF, 0x0052, 0x0FFF, 0x0058, 0x0FFF,
0x005E, 0x0FFF, 0x0065, 0x0FFF, 0x006B, 0x0FFF, 0x0071, 0x0FFE, 0x0077, 0x0FFE,
0x007E, 0x0FFE, 0x0084, 0x0FFE, 0x008A, 0x0FFE, 0x0090, 0x0FFD, 0x0097, 0x0FFD,
0x009D, 0x0FFD, 0x00A3, 0x0FFD, 0x00AA, 0x0FFC, 0x00B0, 0x0FFC, 0x00B6, 0x0FFC,
0x00BC, 0x0FFC, 0x00C3, 0x0FFB, 0x00C9, 0x0FFB, 0x00CF, 0x0FFB, 0x00D6, 0x0FFA,
0x00DC, 0x0FFA, 0x00E2, 0x0FFA, 0x00E8, 0x0FF9, 0x00EF, 0x0FF9, 0x00F5, 0x0FF9,
0x00FB, 0x0FF8, 0x0101, 0x0FF8, 0x0108, 0x0FF8, 0x010E, 0x0FF7, 0x0114, 0x0FF7,
0x011B, 0x0FF6, 0x0121, 0x0FF6, 0x0127, 0x0FF5, 0x012D, 0x0FF5, 0x0134, 0x0FF4,
0x013A, 0x0FF4, 0x0140, 0x0FF3, 0x0146, 0x0FF3, 0x014D, 0x0FF2, 0x0153, 0x0FF2,
0x0159, 0x0FF1, 0x015F, 0x0FF1, 0x0166, 0x0FF0, 0x016C, 0x0FF0, 0x0172, 0x0FEF,
0x0178, 0x0FEF, 0x017F, 0x0FEE, 0x0185, 0x0FED, 0x018B, 0x0FED, 0x0191, 0x0FEC,
0x0198, 0x0FEC, 0x019E, 0x0FEB, 0x01A4, 0x0FEA, 0x01AA, 0x0FEA, 0x01B1, 0x0FE9,
0x01B7, 0x0FE8, 0x01BD, 0x0FE8, 0x01C3, 0x0FE7, 0x01CA, 0x0FE6, 0x01D0, 0x0FE6,
0x01D6, 0x0FE5, 0x01DC, 0x0FE4, 0x01E3, 0x0FE3, 0x01E9, 0x0FE3, 0x01EF, 0x0FE2,
0x01F5, 0x0FE1, 0x01FC, 0x0FE0, 0x0202, 0x0FE0, 0x0208, 0x0FDF, 0x020E, 0x0FDE,
0x0215, 0x0FDD, 0x021B, 0x0FDC, 0x0221, 0x0FDC, 0x0227, 0x0FDB, 0x022D, 0x0FDA,
0x0234, 0x0FD9, 0x023A, 0x0FD8, 0x0240, 0x0FD7, 0x0246, 0x0FD6, 0x024D, 0x0FD5,
0x0253, 0x0FD5, 0x0259, 0x0FD4, 0x025F, 0x0FD3, 0x0265, 0x0FD2, 0x026C, 0x0FD1,
0x0272, 0x0FD0, 0x0278, 0x0FCF, 0x027E, 0x0FCE, 0x0284, 0x0FCD, 0x028B, 0x0FCC,
0x0291, 0x0FCB, 0x0297, 0x0FCA, 0x029D, 0x0FC9, 0x02A3, 0x0FC8, 0x02AA, 0x0FC7,
0x02B0, 0x0FC6, 0x02B6, 0x0FC5, 0x02BC, 0x0FC4, 0x02C2, 0x0FC3, 0x02C9, 0x0FC2,
0x02CF, 0x0FC0, 0x02D5, 0x0FBF, 0x02DB, 0x0FBE, 0x02E1, 0x0FBD, 0x02E8, 0x0FBC,
0x02EE, 0x0FBB, 0x02F4, 0x0FBA, 0x02FA, 0x0FB8, 0x0300, 0x0FB7, 0x0306, 0x0FB6,
0x030D, 0x0FB5, 0x0313, 0x0FB4, 0x0319, 0x0FB3, 0x031F, 0x0FB1, 0x0325, 0x0FB0,
0x032B, 0x0FAF, 0x0332, 0x0FAE, 0x0338, 0x0FAC, 0x033E, 0x0FAB, 0x0344, 0x0FAA,
0x034A, 0x0FA8, 0x0350, 0x0FA7, 0x0356, 0x0FA6, 0x035D, 0x0FA5, 0x0363, 0x0FA3,
0x0369, 0x0FA2, 0x036F, 0x0FA1, 0x0375, 0x0F9F, 0x037B, 0x0F9E, 0x0381, 0x0F9C,
0x0388, 0x0F9B, 0x038E, 0x0F9A, 0x0394, 0x0F98, 0x039A, 0x0F97, 0x03A0, 0x0F95,
0x03A6, 0x0F94, 0x03AC, 0x0F93, 0x03B2, 0x0F91, 0x03B9, 0x0F90, 0x03BF, 0x0F8E,
0x03C5, 0x0F8D, 0x03CB, 0x0F8B, 0x03D1, 0x0F8A, 0x03D7, 0x0F88, 0x03DD, 0x0F87,
0x03E3, 0x0F85, 0x03E9, 0x0F84, 0x03EF, 0x0F82, 0x03F6, 0x0F81, 0x03FC, 0x0F7F,
0x0402, 0x0F7D, 0x0408, 0x0F7C, 0x040E, 0x0F7A, 0x0414, 0x0F79, 0x041A, 0x0F77,
0x0420, 0x0F76, 0x0426, 0x0F74, 0x042C, 0x0F72, 0x0432, 0x0F71, 0x0438, 0x0F6F,
0x043E, 0x0F6D, 0x0444, 0x0F6C, 0x044B, 0x0F6A, 0x0451, 0x0F68, 0x0457, 0x0F67,
0x045D, 0x0F65, 0x0463, 0x0F63, 0x0469, 0x0F61, 0x046F, 0x0F60, 0x0475, 0x0F5E,
0x047B, 0x0F5C, 0x0481, 0x0F5A, 0x0487, 0x0F59, 0x048D, 0x0F57, 0x0493, 0x0F55,
0x0499, 0x0F53, 0x049F, 0x0F51, 0x04A5, 0x0F50, 0x04AB, 0x0F4E, 0x04B1, 0x0F4C,
0x04B7, 0x0F4A, 0x04BD, 0x0F48, 0x04C3, 0x0F46, 0x04C9, 0x0F45, 0x04CF, 0x0F43,
0x04D5, 0x0F41, 0x04DB, 0x0F3F, 0x04E1, 0x0F3D, 0x04E7, 0x0F3B, 0x04ED, 0x0F39,
0x04F3, 0x0F37, 0x04F9, 0x0F35, 0x04FF, 0x0F33, 0x0505, 0x0F31, 0x050B, 0x0F2F,
0x0511, 0x0F2D, 0x0517, 0x0F2B, 0x051D, 0x0F29, 0x0523, 0x0F27, 0x0529, 0x0F25,
0x052F, 0x0F23, 0x0534, 0x0F21, 0x053A, 0x0F1F, 0x0540, 0x0F1D, 0x0546, 0x0F1B,
0x054C, 0x0F19, 0x0552, 0x0F17, 0x0558, 0x0F15, 0x055E, 0x0F13, 0x0564, 0x0F11,
0x056A, 0x0F0E, 0x0570, 0x0F0C, 0x0576, 0x0F0A, 0x057C, 0x0F08, 0x0581, 0x0F06,
0x0587, 0x0F04, 0x058D, 0x0F02, 0x0593, 0x0EFF, 0x0599, 0x0EFD, 0x059F, 0x0EFB,
0x05A5, 0x0EF9, 0x05AB, 0x0EF7, 0x05B1, 0x0EF4, 0x05B6, 0x0EF2, 0x05BC, 0x0EF0,
0x05C2, 0x0EEE, 0x05C8, 0x0EEB, 0x05CE, 0x0EE9, 0x05D4, 0x0EE7, 0x05DA, 0x0EE4,
0x05DF, 0x0EE2, 0x05E5, 0x0EE0, 0x05EB, 0x0EDD, 0x05F1, 0x0EDB, 0x05F7, 0x0ED9,
0x05FD, 0x0ED6, 0x0602, 0x0ED4, 0x0608, 0x0ED2, 0x060E, 0x0ECF, 0x0614, 0x0ECD,
0x061A, 0x0ECB, 0x061F, 0x0EC8, 0x0625, 0x0EC6, 0x062B, 0x0EC3, 0x0631, 0x0EC1,
0x0637, 0x0EBF, 0x063C, 0x0EBC, 0x0642, 0x0EBA, 0x0648, 0x0EB7, 0x064E, 0x0EB5,
0x0654, 0x0EB2, 0x0659, 0x0EB0, 0x065F, 0x0EAD, 0x0665, 0x0EAB, 0x066B, 0x0EA8,
0x0670, 0x0EA6, 0x0676, 0x0EA3, 0x067C, 0x0EA1, 0x0682, 0x0E9E, 0x0687, 0x0E9B,
0x068D, 0x0E99, 0x0693, 0x0E96, 0x0699, 0x0E94, 0x069E, 0x0E91, 0x06A4, 0x0E8F,
0x06AA, 0x0E8C, 0x06AF, 0x0E89, 0x06B5, 0x0E87, 0x06BB, 0x0E84, 0x06C1, 0x0E81,
0x06C6, 0x0E7F, 0x06CC, 0x0E7C, 0x06D2, 0x0E79, 0x06D7, 0x0E77, 0x06DD, 0x0E74,
0x06E3, 0x0E71, 0x06E8, 0x0E6F, 0x06EE, 0x0E6C, 0x06F4, 0x0E69, 0x06F9, 0x0E66,
0x06FF, 0x0E64, 0x0705, 0x0E61, 0x070A, 0x0E5E, 0x0710, 0x0E5B, 0x0715, 0x0E59,
0x071B, 0x0E56, 0x0721, 0x0E53, 0x0726, 0x0E50, 0x072C, 0x0E4D, 0x0732, 0x0E4B,
0x0737, 0x0E48, 0x073D, 0x0E45, 0x0742, 0x0E42, 0x0748, 0x0E3F, 0x074E, 0x0E3C,
0x0753, 0x0E3A, 0x0759, 0x0E37, 0x075E, 0x0E34, 0x0764, 0x0E31, 0x076A, 0x0E2E,
0x076F, 0x0E2B, 0x0775, 0x0E28, 0x077A, 0x0E25, 0x0780, 0x0E22, 0x0785, 0x0E1F,
0x078B, 0x0E1C, 0x0790, 0x0E19, 0x0796, 0x0E16, 0x079B, 0x0E13, 0x07A1, 0x0E10,
0x07A6, 0x0E0D, 0x07AC, 0x0E0A, 0x07B2, 0x0E07, 0x07B7, 0x0E04, 0x07BD, 0x0E01,
0x07C2, 0x0DFE, 0x07C8, 0x0DFB, 0x07CD, 0x0DF8, 0x07D2, 0x0DF5, 0x07D8, 0x0DF2,
0x07DD, 0x0DEF, 0x07E3, 0x0DEC, 0x07E8, 0x0DE9, 0x07EE, 0x0DE6, 0x07F3, 0x0DE3,
0x07F9, 0x0DDF, 0x07FE, 0x0DDC, 0x0804, 0x0DD9, 0x0809, 0x0DD6, 0x080E, 0x0DD3,
0x0814, 0x0DD0, 0x0819, 0x0DCC, 0x081F, 0x0DC9, 0x0824, 0x0DC6, 0x082A, 0x0DC3,
0x082F, 0x0DC0, 0x0834, 0x0DBC, 0x083A, 0x0DB9, 0x083F, 0x0DB6, 0x0845, 0x0DB3,
0x084A, 0x0DB0, 0x084F, 0x0DAC, 0x0855, 0x0DA9, 0x085A, 0x0DA6, 0x085F, 0x0DA2,
0x0865, 0x0D9F, 0x086A, 0x0D9C, 0x086F, 0x0D99, 0x0875, 0x0D95, 0x087A, 0x0D92,
0x087F, 0x0D8F, 0x0885, 0x0D8B, 0x088A, 0x0D88, 0x088F, 0x0D85, 0x0895, 0x0D81,
0x089A, 0x0D7E, 0x089F, 0x0D7A, 0x08A5, 0x0D77, 0x08AA, 0x0D74, 0x08AF, 0x0D70,
0x08B4, 0x0D6D, 0x08BA, 0x0D69, 0x08BF, 0x0D66, 0x08C4, 0x0D62, 0x08C9, 0x0D5F,
0x08CF, 0x0D5C, 0x08D4, 0x0D58, 0x08D9, 0x0D55, 0x08DE, 0x0D51, 0x08E4, 0x0D4E,
0x08E9, 0x0D4A, 0x08EE, 0x0D47, 0x08F3, 0x0D43, 0x08F8, 0x0D40, 0x08FE, 0x0D3C,
0x0903, 0x0D39, 0x0908, 0x0D35, 0x090D, 0x0D32, 0x0912, 0x0D2E, 0x0918, 0x0D2A,
0x091D, 0x0D27, 0x0922, 0x0D23, 0x0927, 0x0D20, 0x092C, 0x0D1C, 0x0931, 0x0D18,
0x0937, 0x0D15, 0x093C, 0x0D11, 0x0941, 0x0D0E, 0x0946, 0x0D0A, 0x094B, 0x0D06,
0x0950, 0x0D03, 0x0955, 0x0CFF, 0x095A, 0x0CFB, 0x095F, 0x0CF8, 0x0965, 0x0CF4,
0x096A, 0x0CF0, 0x096F, 0x0CED, 0x0974, 0x0CE9, 0x0979, 0x0CE5, 0x097E, 0x0CE1,
0x0983, 0x0CDE, 0x0988, 0x0CDA, 0x098D, 0x0CD6, 0x0992, 0x0CD2, 0x0997, 0x0CCF,
0x099C, 0x0CCB, 0x09A1, 0x0CC7, 0x09A6, 0x0CC3, 0x09AB, 0x0CC0, 0x09B0, 0x0CBC,
0x09B5, 0x0CB8, 0x09BA, 0x0CB4, 0x09BF, 0x0CB0, 0x09C4, 0x0CAC, 0x09C9, 0x0CA9,
0x09CE, 0x0CA5, 0x09D3, 0x0CA1, 0x09D8, 0x0C9D, 0x09DD, 0x0C99, 0x09E2, 0x0C95,
0x09E7, 0x0C91, 0x09EC, 0x0C8E, 0x09F1, 0x0C8A, 0x09F6, 0x0C86, 0x09FB, 0x0C82,
0x09FF, 0x0C7E, 0x0A04, 0x0C7A, 0x0A09, 0x0C76, 0x0A0E, 0x0C72, 0x0A13, 0x0C6E,
0x0A18, 0x0C6A, 0x0A1D, 0x0C66, 0x0A22, 0x0C62, 0x0A26, 0x0C5E, 0x0A2B, 0x0C5A,
0x0A30, 0x0C56, 0x0A35, 0x0C52, 0x0A3A, 0x0C4E, 0x0A3F, 0x0C4A, 0x0A44, 0x0C46,
0x0A48, 0x0C42, 0x0A4D, 0x0C3E, 0x0A52, 0x0C3A, 0x0A57, 0x0C36, 0x0A5C, 0x0C32,
0x0A60, 0x0C2E, 0x0A65, 0x0C2A, 0x0A6A, 0x0C26, 0x0A6F, 0x0C22, 0x0A73, 0x0C1E,
0x0A78, 0x0C19, 0x0A7D, 0x0C15, 0x0A82, 0x0C11, 0x0A86, 0x0C0D, 0x0A8B, 0x0C09,
0x0A90, 0x0C05, 0x0A95, 0x0C01, 0x0A99, 0x0BFC, 0x0A9E, 0x0BF8, 0x0AA3, 0x0BF4,
0x0AA7, 0x0BF0, 0x0AAC, 0x0BEC, 0x0AB1, 0x0BE8, 0x0AB5, 0x0BE3, 0x0ABA, 0x0BDF,
0x0ABF, 0x0BDB, 0x0AC3, 0x0BD7, 0x0AC8, 0x0BD2, 0x0ACD, 0x0BCE, 0x0AD1, 0x0BCA,
0x0AD6, 0x0BC6, 0x0ADB, 0x0BC1, 0x0ADF, 0x0BBD, 0x0AE4, 0x0BB9, 0x0AE8, 0x0BB5,
0x0AED, 0x0BB0, 0x0AF2, 0x0BAC, 0x0AF6, 0x0BA8, 0x0AFB, 0x0BA3, 0x0AFF, 0x0B9F,
0x0B04, 0x0B9B, 0x0B08, 0x0B97, 0x0B0D, 0x0B92, 0x0B11, 0x0B8E, 0x0B16, 0x0B89,
0x0B1B, 0x0B85, 0x0B1F, 0x0B81, 0x0B24, 0x0B7C, 0x0B28, 0x0B78, 0x0B2D, 0x0B74,
0x0B31, 0x0B6F, 0x0B36, 0x0B6B, 0x0B3A, 0x0B66, 0x0B3E, 0x0B62, 0x0B43, 0x0B5E,
0x0B47, 0x0B59, 0x0B4C, 0x0B55, 0x0B50, 0x0B50, 0x0B55, 0x0B4C, 0x0B59, 0x0B47,
0x0B5E, 0x0B43, 0x0B62, 0x0B3E, 0x0B66, 0x0B3A, 0x0B6B, 0x0B36, 0x0B6F, 0x0B31,
0x0B74, 0x0B2D, 0x0B78, 0x0B28, 0x0B7C, 0x0B24, 0x0B81, 0x0B1F, 0x0B85, 0x0B1B,
0x0B89, 0x0B16, 0x0B8E, 0x0B11, 0x0B92, 0x0B0D, 0x0B97, 0x0B08, 0x0B9B, 0x0B04,
0x0B9F, 0x0AFF, 0x0BA3, 0x0AFB, 0x0BA8, 0x0AF6, 0x0BAC, 0x0AF2, 0x0BB0, 0x0AED,
0x0BB5, 0x0AE8, 0x0BB9, 0x0AE4, 0x0BBD, 0x0ADF, 0x0BC1, 0x0ADB, 0x0BC6, 0x0AD6,
0x0BCA, 0x0AD1, 0x0BCE, 0x0ACD, 0x0BD2, 0x0AC8, 0x0BD7, 0x0AC3, 0x0BDB, 0x0ABF,
0x0BDF, 0x0ABA, 0x0BE3, 0x0AB5, 0x0BE8, 0x0AB1, 0x0BEC, 0x0AAC, 0x0BF0, 0x0AA7,
0x0BF4, 0x0AA3, 0x0BF8, 0x0A9E, 0x0BFC, 0x0A99, 0x0C01, 0x0A95, 0x0C05, 0x0A90,
0x0C09, 0x0A8B, 0x0C0D, 0x0A86, 0x0C11, 0x0A82, 0x0C15, 0x0A7D, 0x0C19, 0x0A78,
0x0C1E, 0x0A73, 0x0C22, 0x0A6F, 0x0C26, 0x0A6A, 0x0C2A, 0x0A65, 0x0C2E, 0x0A60,
0x0C32, 0x0A5C, 0x0C36, 0x0A57, 0x0C3A, 0x0A52, 0x0C3E, 0x0A4D, 0x0C42, 0x0A48,
0x0C46, 0x0A44, 0x0C4A, 0x0A3F, 0x0C4E, 0x0A3A, 0x0C52, 0x0A35, 0x0C56, 0x0A30,
0x0C5A, 0x0A2B, 0x0C5E, 0x0A26, 0x0C62, 0x0A22, 0x0C66, 0x0A1D, 0x0C6A, 0x0A18,
0x0C6E, 0x0A13, 0x0C72, 0x0A0E, 0x0C76, 0x0A09, 0x0C7A, 0x0A04, 0x0C7E, 0x09FF,
0x0C82, 0x09FB, 0x0C86, 0x09F6, 0x0C8A, 0x09F1, 0x0C8E, 0x09EC, 0x0C91, 0x09E7,
0x0C95, 0x09E2, 0x0C99, 0x09DD, 0x0C9D, 0x09D8, 0x0CA1, 0x09D3, 0x0CA5, 0x09CE,
0x0CA9, 0x09C9, 0x0CAC, 0x09C4, 0x0CB0, 0x09BF, 0x0CB4, 0x09BA, 0x0CB8, 0x09B5,
0x0CBC, 0x09B0, 0x0CC0, 0x09AB, 0x0CC3, 0x09A6, 0x0CC7, 0x09A1, 0x0CCB, 0x099C,
0x0CCF, 0x0997, 0x0CD2, 0x0992, 0x0CD6, 0x098D, 0x0CDA, 0x0988, 0x0CDE, 0x0983,
0x0CE1, 0x097E, 0x0CE5, 0x0979, 0x0CE9, 0x0974, 0x0CED, 0x096F, 0x0CF0, 0x096A,
0x0CF4, 0x0965, 0x0CF8, 0x095F, 0x0CFB, 0x095A, 0x0CFF, 0x0955, 0x0D03, 0x0950,
0x0D06, 0x094B, 0x0D0A, 0x0946, 0x0D0E, 0x0941, 0x0D11, 0x093C, 0x0D15, 0x0937,
0x0D18, 0x0931, 0x0D1C, 0x092C, 0x0D20, 0x0927, 0x0D23, 0x0922, 0x0D27, 0x091D,
0x0D2A, 0x0918, 0x0D2E, 0x0912, 0x0D32, 0x090D, 0x0D35, 0x0908, 0x0D39, 0x0903,
0x0D3C, 0x08FE, 0x0D40, 0x08F8, 0x0D43, 0x08F3, 0x0D47, 0x08EE, 0x0D4A, 0x08E9,
0x0D4E, 0x08E4, 0x0D51, 0x08DE, 0x0D55, 0x08D9, 0x0D58, 0x08D4, 0x0D5C, 0x08CF,
0x0D5F, 0x08C9, 0x0D62, 0x08C4, 0x0D66, 0x08BF, 0x0D69, 0x08BA, 0x0D6D, 0x08B4,
0x0D70, 0x08AF, 0x0D74, 0x08AA, 0x0D77, 0x08A5, 0x0D7A, 0x089F, 0x0D7E, 0x089A,
0x0D81, 0x0895, 0x0D85, 0x088F, 0x0D88, 0x088A, 0x0D8B, 0x0885, 0x0D8F, 0x087F,
0x0D92, 0x087A, 0x0D95, 0x0875, 0x0D99, 0x086F, 0x0D9C, 0x086A, 0x0D9F, 0x0865,
0x0DA2, 0x085F, 0x0DA6, 0x085A, 0x0DA9, 0x0855, 0x0DAC, 0x084F, 0x0DB0, 0x084A,
0x0DB3, 0x0845, 0x0DB6, 0x083F, 0x0DB9, 0x083A, 0x0DBC, 0x0834, 0x0DC0, 0x082F,
0x0DC3, 0x082A, 0x0DC6, 0x0824, 0x0DC9, 0x081F, 0x0DCC, 0x0819, 0x0DD0, 0x0814,
0x0DD3, 0x080E, 0x0DD6, 0x0809, 0x0DD9, 0x0804, 0x0DDC, 0x07FE, 0x0DDF, 0x07F9,
0x0DE3, 0x07F3, 0x0DE6, 0x07EE, 0x0DE9, 0x07E8, 0x0DEC, 0x07E3, 0x0DEF, 0x07DD,
0x0DF2, 0x07D8, 0x0DF5, 0x07D2, 0x0DF8, 0x07CD, 0x0DFB, 0x07C8, 0x0DFE, 0x07C2,
0x0E01, 0x07BD, 0x0E04, 0x07B7, 0x0E07, 0x07B2, 0x0E0A, 0x07AC, 0x0E0D, 0x07A6,
0x0E10, 0x07A1, 0x0E13, 0x079B, 0x0E16, 0x0796, 0x0E19, 0x0790, 0x0E1C, 0x078B,
0x0E1F, 0x0785, 0x0E22, 0x0780, 0x0E25, 0x077A, 0x0E28, 0x0775, 0x0E2B, 0x076F,
0x0E2E, 0x076A, 0x0E31, 0x0764, 0x0E34, 0x075E, 0x0E37, 0x0759, 0x0E3A, 0x0753,
0x0E3C, 0x074E, 0x0E3F, 0x0748, 0x0E42, 0x0742, 0x0E45, 0x073D, 0x0E48, 0x0737,
0x0E4B, 0x0732, 0x0E4D, 0x072C, 0x0E50, 0x0726, 0x0E53, 0x0721, 0x0E56, 0x071B,
0x0E59, 0x0715, 0x0E5B, 0x0710, 0x0E5E, 0x070A, 0x0E61, 0x0705, 0x0E64, 0x06FF,
0x0E66, 0x06F9, 0x0E69, 0x06F4, 0x0E6C, 0x06EE, 0x0E6F, 0x06E8, 0x0E71, 0x06E3,
0x0E74, 0x06DD, 0x0E77, 0x06D7, 0x0E79, 0x06D2, 0x0E7C, 0x06CC, 0x0E7F, 0x06C6,
0x0E81, 0x06C1, 0x0E84, 0x06BB, 0x0E87, 0x06B5, 0x0E89, 0x06AF, 0x0E8C, 0x06AA,
0x0E8F, 0x06A4, 0x0E91, 0x069E, 0x0E94, 0x0699, 0x0E96, 0x0693, 0x0E99, 0x068D,
0x0E9B, 0x0687, 0x0E9E, 0x0682, 0x0EA1, 0x067C, 0x0EA3, 0x0676, 0x0EA6, 0x0670,
0x0EA8, 0x066B, 0x0EAB, 0x0665, 0x0EAD, 0x065F, 0x0EB0, 0x0659, 0x0EB2, 0x0654,
0x0EB5, 0x064E, 0x0EB7, 0x0648, 0x0EBA, 0x0642, 0x0EBC, 0x063C, 0x0EBF, 0x0637,
0x0EC1, 0x0631, 0x0EC3, 0x062B, 0x0EC6, 0x0625, 0x0EC8, 0x061F, 0x0ECB, 0x061A,
0x0ECD, 0x0614, 0x0ECF, 0x060E, 0x0ED2, 0x0608, 0x0ED4, 0x0602, 0x0ED6, 0x05FD,
0x0ED9, 0x05F7, 0x0EDB, 0x05F1, 0x0EDD, 0x05EB, 0x0EE0, 0x05E5, 0x0EE2, 0x05DF,
0x0EE4, 0x05DA, 0x0EE7, 0x05D4, 0x0EE9, 0x05CE, 0x0EEB, 0x05C8, 0x0EEE, 0x05C2,
0x0EF0, 0x05BC, 0x0EF2, 0x05B6, 0x0EF4, 0x05B1, 0x0EF7, 0x05AB, 0x0EF9, 0x05A5,
0x0EFB, 0x059F, 0x0EFD, 0x0599, 0x0EFF, 0x0593, 0x0F02, 0x058D, 0x0F04, 0x0587,
0x0F06, 0x0581, 0x0F08, 0x057C, 0x0F0A, 0x0576, 0x0F0C, 0x0570, 0x0F0E, 0x056A,
0x0F11, 0x0564, 0x0F13, 0x055E, 0x0F15, 0x0558, 0x0F17, 0x0552, 0x0F19, 0x054C,
0x0F1B, 0x0546, 0x0F1D, 0x0540, 0x0F1F, 0x053A, 0x0F21, 0x0534, 0x0F23, 0x052F,
0x0F25, 0x0529, 0x0F27, 0x0523, 0x0F29, 0x051D, 0x0F2B, 0x0517, 0x0F2D, 0x0511,
0x0F2F, 0x050B, 0x0F31, 0x0505, 0x0F33, 0x04FF, 0x0F35, 0x04F9, 0x0F37, 0x04F3,
0x0F39, 0x04ED, 0x0F3B, 0x04E7, 0x0F3D, 0x04E1, 0x0F3F, 0x04DB, 0x0F41, 0x04D5,
0x0F43, 0x04CF, 0x0F45, 0x04C9, 0x0F46, 0x04C3, 0x0F48, 0x04BD, 0x0F4A, 0x04B7,
0x0F4C, 0x04B1, 0x0F4E, 0x04AB, 0x0F50, 0x04A5, 0x0F51, 0x049F, 0x0F53, 0x0499,
0x0F55, 0x0493, 0x0F57, 0x048D, 0x0F59, 0x0487, 0x0F5A, 0x0481, 0x0F5C, 0x047B,
0x0F5E, 0x0475, 0x0F60, 0x046F, 0x0F61, 0x0469, 0x0F63, 0x0463, 0x0F65, 0x045D,
0x0F67, 0x0457, 0x0F68, 0x0451, 0x0F6A, 0x044B, 0x0F6C, 0x0444, 0x0F6D, 0x043E,
0x0F6F, 0x0438, 0x0F71, 0x0432, 0x0F72, 0x042C, 0x0F74, 0x0426, 0x0F76, 0x0420,
0x0F77, 0x041A, 0x0F79, 0x0414, 0x0F7A, 0x040E, 0x0F7C, 0x0408, 0x0F7D, 0x0402,
0x0F7F, 0x03FC, 0x0F81, 0x03F6, 0x0F82, 0x03EF, 0x0F84, 0x03E9, 0x0F85, 0x03E3,
0x0F87, 0x03DD, 0x0F88, 0x03D7, 0x0F8A, 0x03D1, 0x0F8B, 0x03CB, 0x0F8D, 0x03C5,
0x0F8E, 0x03BF, 0x0F90, 0x03B9, 0x0F91, 0x03B2, 0x0F93, 0x03AC, 0x0F94, 0x03A6,
0x0F95, 0x03A0, 0x0F97, 0x039A, 0x0F98, 0x0394, 0x0F9A, 0x038E, 0x0F9B, 0x0388,
0x0F9C, 0x0381, 0x0F9E, 0x037B, 0x0F9F, 0x0375, 0x0FA1, 0x036F, 0x0FA2, 0x0369,
0x0FA3, 0x0363, 0x0FA5, 0x035D, 0x0FA6, 0x0356, 0x0FA7, 0x0350, 0x0FA8, 0x034A,
0x0FAA, 0x0344, 0x0FAB, 0x033E, 0x0FAC, 0x0338, 0x0FAE, 0x0332, 0x0FAF, 0x032B,
0x0FB0, 0x0325, 0x0FB1, 0x031F, 0x0FB3, 0x0319, 0x0FB4, 0x0313, 0x0FB5, 0x030D,
0x0FB6, 0x0306, 0x0FB7, 0x0300, 0x0FB8, 0x02FA, 0x0FBA, 0x02F4, 0x0FBB, 0x02EE,
0x0FBC, 0x02E8, 0x0FBD, 0x02E1, 0x0FBE, 0x02DB, 0x0FBF, 0x02D5, 0x0FC0, 0x02CF,
0x0FC2, 0x02C9, 0x0FC3, 0x02C2, 0x0FC4, 0x02BC, 0x0FC5, 0x02B6, 0x0FC6, 0x02B0,
0x0FC7, 0x02AA, 0x0FC8, 0x02A3, 0x0FC9, 0x029D, 0x0FCA, 0x0297, 0x0FCB, 0x0291,
0x0FCC, 0x028B, 0x0FCD, 0x0284, 0x0FCE, 0x027E, 0x0FCF, 0x0278, 0x0FD0, 0x0272,
0x0FD1, 0x026C, 0x0FD2, 0x0265, 0x0FD3, 0x025F, 0x0FD4, 0x0259, 0x0FD5, 0x0253,
0x0FD5, 0x024D, 0x0FD6, 0x0246, 0x0FD7, 0x0240, 0x0FD8, 0x023A, 0x0FD9, 0x0234,
0x0FDA, 0x022D, 0x0FDB, 0x0227, 0x0FDC, 0x0221, 0x0FDC, 0x021B, 0x0FDD, 0x0215,
0x0FDE, 0x020E, 0x0FDF, 0x0208, 0x0FE0, 0x0202, 0x0FE0, 0x01FC, 0x0FE1, 0x01F5,
0x0FE2, 0x01EF, 0x0FE3, 0x01E9, 0x0FE3, 0x01E3, 0x0FE4, 0x01DC, 0x0FE5, 0x01D6,
0x0FE6, 0x01D0, 0x0FE6, 0x01CA, 0x0FE7, 0x01C3, 0x0FE8, 0x01BD, 0x0FE8, 0x01B7,
0x0FE9, 0x01B1, 0x0FEA, 0x01AA, 0x0FEA, 0x01A4, 0x0FEB, 0x019E, 0x0FEC, 0x0198,
0x0FEC, 0x0191, 0x0FED, 0x018B, 0x0FED, 0x0185, 0x0FEE, 0x017F, 0x0FEF, 0x0178,
0x0FEF, 0x0172, 0x0FF0, 0x016C, 0x0FF0, 0x0166, 0x0FF1, 0x015F, 0x0FF1, 0x0159,
0x0FF2, 0x0153, 0x0FF2, 0x014D, 0x0FF3, 0x0146, 0x0FF3, 0x0140, 0x0FF4, 0x013A,
0x0FF4, 0x0134, 0x0FF5, 0x012D, 0x0FF5, 0x0127, 0x0FF6, 0x0121, 0x0FF6, 0x011B,
0x0FF7, 0x0114, 0x0FF7, 0x010E, 0x0FF8, 0x0108, 0x0FF8, 0x0101, 0x0FF8, 0x00FB,
0x0FF9, 0x00F5, 0x0FF9, 0x00EF, 0x0FF9, 0x00E8, 0x0FFA, 0x00E2, 0x0FFA, 0x00DC,
0x0FFA, 0x00D6, 0x0FFB, 0x00CF, 0x0FFB, 0x00C9, 0x0FFB, 0x00C3, 0x0FFC, 0x00BC,
0x0FFC, 0x00B6, 0x0FFC, 0x00B0, 0x0FFC, 0x00AA, 0x0FFD, 0x00A3, 0x0FFD, 0x009D,
0x0FFD, 0x0097, 0x0FFD, 0x0090, 0x0FFE, 0x008A, 0x0FFE, 0x0084, 0x0FFE, 0x007E,
0x0FFE, 0x0077, 0x0FFE, 0x0071, 0x0FFF, 0x006B, 0x0FFF, 0x0065, 0x0FFF, 0x005E,
0x0FFF, 0x0058, 0x0FFF, 0x0052, 0x0FFF, 0x004B, 0x0FFF, 0x0045, 0x1000, 0x003F,
0x1000, 0x0039, 0x1000, 0x0032, 0x1000, 0x002C, 0x1000, 0x0026, 0x1000, 0x001F,
0x1000, 0x0019, 0x1000, 0x0013, 0x1000, 0x000D, 0x1000, 0x0006, 0x1000, 0x0000,
0x1000, 0xFFFA, 0x1000, 0xFFF3, 0x1000, 0xFFED, 0x1000, 0xFFE7, 0x1000, 0xFFE1,
0x1000, 0xFFDA, 0x1000, 0xFFD4, 0x1000, 0xFFCE, 0x1000, 0xFFC7, 0x1000, 0xFFC1,
0x0FFF, 0xFFBB, 0x0FFF, 0xFFB5, 0x0FFF, 0xFFAE, 0x0FFF, 0xFFA8, 0x0FFF, 0xFFA2,
0x0FFF, 0xFF9B, 0x0FFF, 0xFF95, 0x0FFE, 0xFF8F, 0x0FFE, 0xFF89, 0x0FFE, 0xFF82,
0x0FFE, 0xFF7C, 0x0FFE, 0xFF76, 0x0FFD, 0xFF70, 0x0FFD, 0xFF69, 0x0FFD, 0xFF63,
0x0FFD, 0xFF5D, 0x0FFC, 0xFF56, 0x0FFC, 0xFF50, 0x0FFC, 0xFF4A, 0x0FFC, 0xFF44,
0x0FFB, 0xFF3D, 0x0FFB, 0xFF37, 0x0FFB, 0xFF31, 0x0FFA, 0xFF2A, 0x0FFA, 0xFF24,
0x0FFA, 0xFF1E, 0x0FF9, 0xFF18, 0x0FF9, 0xFF11, 0x0FF9, 0xFF0B, 0x0FF8, 0xFF05,
0x0FF8, 0xFEFF, 0x0FF8, 0xFEF8, 0x0FF7, 0xFEF2, 0x0FF7, 0xFEEC, 0x0FF6, 0xFEE5,
0x0FF6, 0xFEDF, 0x0FF5, 0xFED9, 0x0FF5, 0xFED3, 0x0FF4, 0xFECC, 0x0FF4, 0xFEC6,
0x0FF3, 0xFEC0, 0x0FF3, 0xFEBA, 0x0FF2, 0xFEB3, 0x0FF2, 0xFEAD, 0x0FF1, 0xFEA7,
0x0FF1, 0xFEA1, 0x0FF0, 0xFE9A, 0x0FF0, 0xFE94, 0x0FEF, 0xFE8E, 0x0FEF, 0xFE88,
0x0FEE, 0xFE81, 0x0FED, 0xFE7B, 0x0FED, 0xFE75, 0x0FEC, 0xFE6F, 0x0FEC, 0xFE68,
0x0FEB, 0xFE62, 0x0FEA, 0xFE5C, 0x0FEA, 0xFE56, 0x0FE9, 0xFE4F, 0x0FE8, 0xFE49,
0x0FE8, 0xFE43, 0x0FE7, 0xFE3D, 0x0FE6, 0xFE36, 0x0FE6, 0xFE30, 0x0FE5, 0xFE2A,
0x0FE4, 0xFE24, 0x0FE3, 0xFE1D, 0x0FE3, 0xFE17, 0x0FE2, 0xFE11, 0x0FE1, 0xFE0B,
0x0FE0, 0xFE04, 0x0FE0, 0xFDFE, 0x0FDF, 0xFDF8, 0x0FDE, 0xFDF2, 0x0FDD, 0xFDEB,
0x0FDC, 0xFDE5, 0x0FDC, 0xFDDF, 0x0FDB, 0xFDD9, 0x0FDA, 0xFDD3, 0x0FD9, 0xFDCC,
0x0FD8, 0xFDC6, 0x0FD7, 0xFDC0, 0x0FD6, 0xFDBA, 0x0FD5, 0xFDB3, 0x0FD5, 0xFDAD,
0x0FD4, 0xFDA7, 0x0FD3, 0xFDA1, 0x0FD2, 0xFD9B, 0x0FD1, 0xFD94, 0x0FD0, 0xFD8E,
0x0FCF, 0xFD88, 0x0FCE, 0xFD82, 0x0FCD, 0xFD7C, 0x0FCC, 0xFD75, 0x0FCB, 0xFD6F,
0x0FCA, 0xFD69, 0x0FC9, 0xFD63, 0x0FC8, 0xFD5D, 0x0FC7, 0xFD56, 0x0FC6, 0xFD50,
0x0FC5, 0xFD4A, 0x0FC4, 0xFD44, 0x0FC3, 0xFD3E, 0x0FC2, 0xFD37, 0x0FC0, 0xFD31,
0x0FBF, 0xFD2B, 0x0FBE, 0xFD25, 0x0FBD, 0xFD1F, 0x0FBC, 0xFD18, 0x0FBB, 0xFD12,
0x0FBA, 0xFD0C, 0x0FB8, 0xFD06, 0x0FB7, 0xFD00, 0x0FB6, 0xFCFA, 0x0FB5, 0xFCF3,
0x0FB4, 0xFCED, 0x0FB3, 0xFCE7, 0x0FB1, 0xFCE1, 0x0FB0, 0xFCDB, 0x0FAF, 0xFCD5,
0x0FAE, 0xFCCE, 0x0FAC, 0xFCC8, 0x0FAB, 0xFCC2, 0x0FAA, 0xFCBC, 0x0FA8, 0xFCB6,
0x0FA7, 0xFCB0, 0x0FA6, 0xFCAA, 0x0FA5, 0xFCA3, 0x0FA3, 0xFC9D, 0x0FA2, 0xFC97,
0x0FA1, 0xFC91, 0x0F9F, 0xFC8B, 0x0F9E, 0xFC85, 0x0F9C, 0xFC7F, 0x0F9B, 0xFC78,
0x0F9A, 0xFC72, 0x0F98, 0xFC6C, 0x0F97, 0xFC66, 0x0F95, 0xFC60, 0x0F94, 0xFC5A,
0x0F93, 0xFC54, 0x0F91, 0xFC4E, 0x0F90, 0xFC47, 0x0F8E, 0xFC41, 0x0F8D, 0xFC3B,
0x0F8B, 0xFC35, 0x0F8A, 0xFC2F, 0x0F88, 0xFC29, 0x0F87, 0xFC23, 0x0F85, 0xFC1D,
0x0F84, 0xFC17, 0x0F82, 0xFC11, 0x0F81, 0xFC0A, 0x0F7F, 0xFC04, 0x0F7D, 0xFBFE,
0x0F7C, 0xFBF8, 0x0F7A, 0xFBF2, 0x0F79, 0xFBEC, 0x0F77, 0xFBE6, 0x0F76, 0xFBE0,
0x0F74, 0xFBDA, 0x0F72, 0xFBD4, 0x0F71, 0xFBCE, 0x0F6F, 0xFBC8, 0x0F6D, 0xFBC2,
0x0F6C, 0xFBBC, 0x0F6A, 0xFBB5, 0x0F68, 0xFBAF, 0x0F67, 0xFBA9, 0x0F65, 0xFBA3,
0x0F63, 0xFB9D, 0x0F61, 0xFB97, 0x0F60, 0xFB91, 0x0F5E, 0xFB8B, 0x0F5C, 0xFB85,
0x0F5A, 0xFB7F, 0x0F59, 0xFB79, 0x0F57, 0xFB73, 0x0F55, 0xFB6D, 0x0F53, 0xFB67,
0x0F51, 0xFB61, 0x0F50, 0xFB5B, 0x0F4E, 0xFB55, 0x0F4C, 0xFB4F, 0x0F4A, 0xFB49,
0x0F48, 0xFB43, 0x0F46, 0xFB3D, 0x0F45, 0xFB37, 0x0F43, 0xFB31, 0x0F41, 0xFB2B,
0x0F3F, 0xFB25, 0x0F3D, 0xFB1F, 0x0F3B, 0xFB19, 0x0F39, 0xFB13, 0x0F37, 0xFB0D,
0x0F35, 0xFB07, 0x0F33, 0xFB01, 0x0F31, 0xFAFB, 0x0F2F, 0xFAF5, 0x0F2D, 0xFAEF,
0x0F2B, 0xFAE9, 0x0F29, 0xFAE3, 0x0F27, 0xFADD, 0x0F25, 0xFAD7, 0x0F23, 0xFAD1,
0x0F21, 0xFACC, 0x0F1F, 0xFAC6, 0x0F1D, 0xFAC0, 0x0F1B, 0xFABA, 0x0F19, 0xFAB4,
0x0F17, 0xFAAE, 0x0F15, 0xFAA8, 0x0F13, 0xFAA2, 0x0F11, 0xFA9C, 0x0F0E, 0xFA96,
0x0F0C, 0xFA90, 0x0F0A, 0xFA8A, 0x0F08, 0xFA84, 0x0F06, 0xFA7F, 0x0F04, 0xFA79,
0x0F02, 0xFA73, 0x0EFF, 0xFA6D, 0x0EFD, 0xFA67, 0x0EFB, 0xFA61, 0x0EF9, 0xFA5B,
0x0EF7, 0xFA55, 0x0EF4, 0xFA4F, 0x0EF2, 0xFA4A, 0x0EF0, 0xFA44, 0x0EEE, 0xFA3E,
0x0EEB, 0xFA38, 0x0EE9, 0xFA32, 0x0EE7, 0xFA2C, 0x0EE4, 0xFA26, 0x0EE2, 0xFA21,
0x0EE0, 0xFA1B, 0x0EDD, 0xFA15, 0x0EDB, 0xFA0F, 0x0ED9, 0xFA09, 0x0ED6, 0xFA03,
0x0ED4, 0xF9FE, 0x0ED2, 0xF9F8, 0x0ECF, 0xF9F2, 0x0ECD, 0xF9EC, 0x0ECB, 0xF9E6,
0x0EC8, 0xF9E1, 0x0EC6, 0xF9DB, 0x0EC3, 0xF9D5, 0x0EC1, 0xF9CF, 0x0EBF, 0xF9C9,
0x0EBC, 0xF9C4, 0x0EBA, 0xF9BE, 0x0EB7, 0xF9B8, 0x0EB5, 0xF9B2, 0x0EB2, 0xF9AC,
0x0EB0, 0xF9A7, 0x0EAD, 0xF9A1, 0x0EAB, 0xF99B, 0x0EA8, 0xF995, 0x0EA6, 0xF990,
0x0EA3, 0xF98A, 0x0EA1, 0xF984, 0x0E9E, 0xF97E, 0x0E9B, 0xF979, 0x0E99, 0xF973,
0x0E96, 0xF96D, 0x0E94, 0xF967, 0x0E91, 0xF962, 0x0E8F, 0xF95C, 0x0E8C, 0xF956,
0x0E89, 0xF951, 0x0E87, 0xF94B, 0x0E84, 0xF945, 0x0E81, 0xF93F, 0x0E7F, 0xF93A,
0x0E7C, 0xF934, 0x0E79, 0xF92E, 0x0E77, 0xF929, 0x0E74, 0xF923, 0x0E71, 0xF91D,
0x0E6F, 0xF918, 0x0E6C, 0xF912, 0x0E69, 0xF90C, 0x0E66, 0xF907, 0x0E64, 0xF901,
0x0E61, 0xF8FB, 0x0E5E, 0xF8F6, 0x0E5B, 0xF8F0, 0x0E59, 0xF8EB, 0x0E56, 0xF8E5,
0x0E53, 0xF8DF, 0x0E50, 0xF8DA, 0x0E4D, 0xF8D4, 0x0E4B, 0xF8CE, 0x0E48, 0xF8C9,
0x0E45, 0xF8C3, 0x0E42, 0xF8BE, 0x0E3F, 0xF8B8, 0x0E3C, 0xF8B2, 0x0E3A, 0xF8AD,
0x0E37, 0xF8A7, 0x0E34, 0xF8A2, 0x0E31, 0xF89C, 0x0E2E, 0xF896, 0x0E2B, 0xF891,
0x0E28, 0xF88B, 0x0E25, 0xF886, 0x0E22, 0xF880, 0x0E1F, 0xF87B, 0x0E1C, 0xF875,
0x0E19, 0xF870, 0x0E16, 0xF86A, 0x0E13, 0xF865, 0x0E10, 0xF85F, 0x0E0D, 0xF85A,
0x0E0A, 0xF854, 0x0E07, 0xF84E, 0x0E04, 0xF849, 0x0E01, 0xF843, 0x0DFE, 0xF83E,
0x0DFB, 0xF838, 0x0DF8, 0xF833, 0x0DF5, 0xF82E, 0x0DF2, 0xF828, 0x0DEF, 0xF823,
0x0DEC, 0xF81D, 0x0DE9, 0xF818, 0x0DE6, 0xF812, 0x0DE3, 0xF80D, 0x0DDF, 0xF807,
0x0DDC, 0xF802, 0x0DD9, 0xF7FC, 0x0DD6, 0xF7F7, 0x0DD3, 0xF7F2, 0x0DD0, 0xF7EC,
0x0DCC, 0xF7E7, 0x0DC9, 0xF7E1, 0x0DC6, 0xF7DC, 0x0DC3, 0xF7D6, 0x0DC0, 0xF7D1,
0x0DBC, 0xF7CC, 0x0DB9, 0xF7C6, 0x0DB6, 0xF7C1, 0x0DB3, 0xF7BB, 0x0DB0, 0xF7B6,
0x0DAC, 0xF7B1, 0x0DA9, 0xF7AB, 0x0DA6, 0xF7A6, 0x0DA2, 0xF7A1, 0x0D9F, 0xF79B,
0x0D9C, 0xF796, 0x0D99, 0xF791, 0x0D95, 0xF78B, 0x0D92, 0xF786, 0x0D8F, 0xF781,
0x0D8B, 0xF77B, 0x0D88, 0xF776, 0x0D85, 0xF771, 0x0D81, 0xF76B, 0x0D7E, 0xF766,
0x0D7A, 0xF761, 0x0D77, 0xF75B, 0x0D74, 0xF756, 0x0D70, 0xF751, 0x0D6D, 0xF74C,
0x0D69, 0xF746, 0x0D66, 0xF741, 0x0D62, 0xF73C, 0x0D5F, 0xF737, 0x0D5C, 0xF731,
0x0D58, 0xF72C, 0x0D55, 0xF727, 0x0D51, 0xF722, 0x0D4E, 0xF71C, 0x0D4A, 0xF717,
0x0D47, 0xF712, 0x0D43, 0xF70D, 0x0D40, 0xF708, 0x0D3C, 0xF702, 0x0D39, 0xF6FD,
0x0D35, 0xF6F8, 0x0D32, 0xF6F3, 0x0D2E, 0xF6EE, 0x0D2A, 0xF6E8, 0x0D27, 0xF6E3,
0x0D23, 0xF6DE, 0x0D20, 0xF6D9, 0x0D1C, 0xF6D4, 0x0D18, 0xF6CF, 0x0D15, 0xF6C9,
0x0D11, 0xF6C4, 0x0D0E, 0xF6BF, 0x0D0A, 0xF6BA, 0x0D06, 0xF6B5, 0x0D03, 0xF6B0,
0x0CFF, 0xF6AB, 0x0CFB, 0xF6A6, 0x0CF8, 0xF6A1, 0x0CF4, 0xF69B, 0x0CF0, 0xF696,
0x0CED, 0xF691, 0x0CE9, 0xF68C, 0x0CE5, 0xF687, 0x0CE1, 0xF682, 0x0CDE, 0xF67D,
0x0CDA, 0xF678, 0x0CD6, 0xF673, 0x0CD2, 0xF66E, 0x0CCF, 0xF669, 0x0CCB, 0xF664,
0x0CC7, 0xF65F, 0x0CC3, 0xF65A, 0x0CC0, 0xF655, 0x0CBC, 0xF650, 0x0CB8, 0xF64B,
0x0CB4, 0xF646, 0x0CB0, 0xF641, 0x0CAC, 0xF63C, 0x0CA9, 0xF637, 0x0CA5, 0xF632,
0x0CA1, 0xF62D, 0x0C9D, 0xF628, 0x0C99, 0xF623, 0x0C95, 0xF61E, 0x0C91, 0xF619,
0x0C8E, 0xF614, 0x0C8A, 0xF60F, 0x0C86, 0xF60A, 0x0C82, 0xF605, 0x0C7E, 0xF601,
0x0C7A, 0xF5FC, 0x0C76, 0xF5F7, 0x0C72, 0xF5F2, 0x0C6E, 0xF5ED, 0x0C6A, 0xF5E8,
0x0C66, 0xF5E3, 0x0C62, 0xF5DE, 0x0C5E, 0xF5DA, 0x0C5A, 0xF5D5, 0x0C56, 0xF5D0,
0x0C52, 0xF5CB, 0x0C4E, 0xF5C6, 0x0C4A, 0xF5C1, 0x0C46, 0xF5BC, 0x0C42, 0xF5B8,
0x0C3E, 0xF5B3, 0x0C3A, 0xF5AE, 0x0C36, 0xF5A9, 0x0C32, 0xF5A4, 0x0C2E, 0xF5A0,
0x0C2A, 0xF59B, 0x0C26, 0xF596, 0x0C22, 0xF591, 0x0C1E, 0xF58D, 0x0C19, 0xF588,
0x0C15, 0xF583, 0x0C11, 0xF57E, 0x0C0D, 0xF57A, 0x0C09, 0xF575, 0x0C05, 0xF570,
0x0C01, 0xF56B, 0x0BFC, 0xF567, 0x0BF8, 0xF562, 0x0BF4, 0xF55D, 0x0BF0, 0xF559,
0x0BEC, 0xF554, 0x0BE8, 0xF54F, 0x0BE3, 0xF54B, 0x0BDF, 0xF546, 0x0BDB, 0xF541,
0x0BD7, 0xF53D, 0x0BD2, 0xF538, 0x0BCE, 0xF533, 0x0BCA, 0xF52F, 0x0BC6, 0xF52A,
0x0BC1, 0xF525, 0x0BBD, 0xF521, 0x0BB9, 0xF51C, 0x0BB5, 0xF518, 0x0BB0, 0xF513,
0x0BAC, 0xF50E, 0x0BA8, 0xF50A, 0x0BA3, 0xF505, 0x0B9F, 0xF501, 0x0B9B, 0xF4FC,
0x0B97, 0xF4F8, 0x0B92, 0xF4F3, 0x0B8E, 0xF4EF, 0x0B89, 0xF4EA, 0x0B85, 0xF4E5,
0x0B81, 0xF4E1, 0x0B7C, 0xF4DC, 0x0B78, 0xF4D8, 0x0B74, 0xF4D3, 0x0B6F, 0xF4CF,
0x0B6B, 0xF4CA, 0x0B66, 0xF4C6, 0x0B62, 0xF4C2, 0x0B5E, 0xF4BD, 0x0B59, 0xF4B9,
0x0B55, 0xF4B4, 0x0B50, 0xF4B0, 0x0B4C, 0xF4AB, 0x0B47, 0xF4A7, 0x0B43, 0xF4A2,
0x0B3E, 0xF49E, 0x0B3A, 0xF49A, 0x0B36, 0xF495, 0x0B31, 0xF491, 0x0B2D, 0xF48C,
0x0B28, 0xF488, 0x0B24, 0xF484, 0x0B1F, 0xF47F, 0x0B1B, 0xF47B, 0x0B16, 0xF477,
0x0B11, 0xF472, 0x0B0D, 0xF46E, 0x0B08, 0xF469, 0x0B04, 0xF465, 0x0AFF, 0xF461,
0x0AFB, 0xF45D, 0x0AF6, 0xF458, 0x0AF2, 0xF454, 0x0AED, 0xF450, 0x0AE8, 0xF44B,
0x0AE4, 0xF447, 0x0ADF, 0xF443, 0x0ADB, 0xF43F, 0x0AD6, 0xF43A, 0x0AD1, 0xF436,
0x0ACD, 0xF432, 0x0AC8, 0xF42E, 0x0AC3, 0xF429, 0x0ABF, 0xF425, 0x0ABA, 0xF421,
0x0AB5, 0xF41D, 0x0AB1, 0xF418, 0x0AAC, 0xF414, 0x0AA7, 0xF410, 0x0AA3, 0xF40C,
0x0A9E, 0xF408, 0x0A99, 0xF404, 0x0A95, 0xF3FF, 0x0A90, 0xF3FB, 0x0A8B, 0xF3F7,
0x0A86, 0xF3F3, 0x0A82, 0xF3EF, 0x0A7D, 0xF3EB, 0x0A78, 0xF3E7, 0x0A73, 0xF3E2,
0x0A6F, 0xF3DE, 0x0A6A, 0xF3DA, 0x0A65, 0xF3D6, 0x0A60, 0xF3D2, 0x0A5C, 0xF3CE,
0x0A57, 0xF3CA, 0x0A52, 0xF3C6, 0x0A4D, 0xF3C2, 0x0A48, 0xF3BE, 0x0A44, 0xF3BA,
0x0A3F, 0xF3B6, 0x0A3A, 0xF3B2, 0x0A35, 0xF3AE, 0x0A30, 0xF3AA, 0x0A2B, 0xF3A6,
0x0A26, 0xF3A2, 0x0A22, 0xF39E, 0x0A1D, 0xF39A, 0x0A18, 0xF396, 0x0A13, 0xF392,
0x0A0E, 0xF38E, 0x0A09, 0xF38A, 0x0A04, 0xF386, 0x09FF, 0xF382, 0x09FB, 0xF37E,
0x09F6, 0xF37A, 0x09F1, 0xF376, 0x09EC, 0xF372, 0x09E7, 0xF36F, 0x09E2, 0xF36B,
0x09DD, 0xF367, 0x09D8, 0xF363, 0x09D3, 0xF35F, 0x09CE, 0xF35B, 0x09C9, 0xF357,
0x09C4, 0xF354, 0x09BF, 0xF350, 0x09BA, 0xF34C, 0x09B5, 0xF348, 0x09B0, 0xF344,
0x09AB, 0xF340, 0x09A6, 0xF33D, 0x09A1, 0xF339, 0x099C, 0xF335, 0x0997, 0xF331,
0x0992, 0xF32E, 0x098D, 0xF32A, 0x0988, 0xF326, 0x0983, 0xF322, 0x097E, 0xF31F,
0x0979, 0xF31B, 0x0974, 0xF317, 0x096F, 0xF313, 0x096A, 0xF310, 0x0965, 0xF30C,
0x095F, 0xF308, 0x095A, 0xF305, 0x0955, 0xF301, 0x0950, 0xF2FD, 0x094B, 0xF2FA,
0x0946, 0xF2F6, 0x0941, 0xF2F2, 0x093C, 0xF2EF, 0x0937, 0xF2EB, 0x0931, 0xF2E8,
0x092C, 0xF2E4, 0x0927, 0xF2E0, 0x0922, 0xF2DD, 0x091D, 0xF2D9, 0x0918, 0xF2D6,
0x0912, 0xF2D2, 0x090D, 0xF2CE, 0x0908, 0xF2CB, 0x0903, 0xF2C7, 0x08FE, 0xF2C4,
0x08F8, 0xF2C0, 0x08F3, 0xF2BD, 0x08EE, 0xF2B9, 0x08E9, 0xF2B6, 0x08E4, 0xF2B2,
0x08DE, 0xF2AF, 0x08D9, 0xF2AB, 0x08D4, 0xF2A8, 0x08CF, 0xF2A4, 0x08C9, 0xF2A1,
0x08C4, 0xF29E, 0x08BF, 0xF29A, 0x08BA, 0xF297, 0x08B4, 0xF293, 0x08AF, 0xF290,
0x08AA, 0xF28C, 0x08A5, 0xF289, 0x089F, 0xF286, 0x089A, 0xF282, 0x0895, 0xF27F,
0x088F, 0xF27B, 0x088A, 0xF278, 0x0885, 0xF275, 0x087F, 0xF271, 0x087A, 0xF26E,
0x0875, 0xF26B, 0x086F, 0xF267, 0x086A, 0xF264, 0x0865, 0xF261, 0x085F, 0xF25E,
0x085A, 0xF25A, 0x0855, 0xF257, 0x084F, 0xF254, 0x084A, 0xF250, 0x0845, 0xF24D,
0x083F, 0xF24A, 0x083A, 0xF247, 0x0834, 0xF244, 0x082F, 0xF240, 0x082A, 0xF23D,
0x0824, 0xF23A, 0x081F, 0xF237, 0x0819, 0xF234, 0x0814, 0xF230, 0x080E, 0xF22D,
0x0809, 0xF22A, 0x0804, 0xF227, 0x07FE, 0xF224, 0x07F9, 0xF221, 0x07F3, 0xF21D,
0x07EE, 0xF21A, 0x07E8, 0xF217, 0x07E3, 0xF214, 0x07DD, 0xF211, 0x07D8, 0xF20E,
0x07D2, 0xF20B, 0x07CD, 0xF208, 0x07C8, 0xF205, 0x07C2, 0xF202, 0x07BD, 0xF1FF,
0x07B7, 0xF1FC, 0x07B2, 0xF1F9, 0x07AC, 0xF1F6, 0x07A6, 0xF1F3, 0x07A1, 0xF1F0,
0x079B, 0xF1ED, 0x0796, 0xF1EA, 0x0790, 0xF1E7, 0x078B, 0xF1E4, 0x0785, 0xF1E1,
0x0780, 0xF1DE, 0x077A, 0xF1DB, 0x0775, 0xF1D8, 0x076F, 0xF1D5, 0x076A, 0xF1D2,
0x0764, 0xF1CF, 0x075E, 0xF1CC, 0x0759, 0xF1C9, 0x0753, 0xF1C6, 0x074E, 0xF1C4,
0x0748, 0xF1C1, 0x0742, 0xF1BE, 0x073D, 0xF1BB, 0x0737, 0xF1B8, 0x0732, 0xF1B5,
0x072C, 0xF1B3, 0x0726, 0xF1B0, 0x0721, 0xF1AD, 0x071B, 0xF1AA, 0x0715, 0xF1A7,
0x0710, 0xF1A5, 0x070A, 0xF1A2, 0x0705, 0xF19F, 0x06FF, 0xF19C, 0x06F9, 0xF19A,
0x06F4, 0xF197, 0x06EE, 0xF194, 0x06E8, 0xF191, 0x06E3, 0xF18F, 0x06DD, 0xF18C,
0x06D7, 0xF189, 0x06D2, 0xF187, 0x06CC, 0xF184, 0x06C6, 0xF181, 0x06C1, 0xF17F,
0x06BB, 0xF17C, 0x06B5, 0xF179, 0x06AF, 0xF177, 0x06AA, 0xF174, 0x06A4, 0xF171,
0x069E, 0xF16F, 0x0699, 0xF16C, 0x0693, 0xF16A, 0x068D, 0xF167, 0x0687, 0xF165,
0x0682, 0xF162, 0x067C, 0xF15F, 0x0676, 0xF15D, 0x0670, 0xF15A, 0x066B, 0xF158,
0x0665, 0xF155, 0x065F, 0xF153, 0x0659, 0xF150, 0x0654, 0xF14E, 0x064E, 0xF14B,
0x0648, 0xF149, 0x0642, 0xF146, 0x063C, 0xF144, 0x0637, 0xF141, 0x0631, 0xF13F,
0x062B, 0xF13D, 0x0625, 0xF13A, 0x061F, 0xF138, 0x061A, 0xF135, 0x0614, 0xF133,
0x060E, 0xF131, 0x0608, 0xF12E, 0x0602, 0xF12C, 0x05FD, 0xF12A, 0x05F7, 0xF127,
0x05F1, 0xF125, 0x05EB, 0xF123, 0x05E5, 0xF120, 0x05DF, 0xF11E, 0x05DA, 0xF11C,
0x05D4, 0xF119, 0x05CE, 0xF117, 0x05C8, 0xF115, 0x05C2, 0xF112, 0x05BC, 0xF110,
0x05B6, 0xF10E, 0x05B1, 0xF10C, 0x05AB, 0xF109, 0x05A5, 0xF107, 0x059F, 0xF105,
0x0599, 0xF103, 0x0593, 0xF101, 0x058D, 0xF0FE, 0x0587, 0xF0FC, 0x0581, 0xF0FA,
0x057C, 0xF0F8, 0x0576, 0xF0F6, 0x0570, 0xF0F4, 0x056A, 0xF0F2, 0x0564, 0xF0EF,
0x055E, 0xF0ED, 0x0558, 0xF0EB, 0x0552, 0xF0E9, 0x054C, 0xF0E7, 0x0546, 0xF0E5,
0x0540, 0xF0E3, 0x053A, 0xF0E1, 0x0534, 0xF0DF, 0x052F, 0xF0DD, 0x0529, 0xF0DB,
0x0523, 0xF0D9, 0x051D, 0xF0D7, 0x0517, 0xF0D5, 0x0511, 0xF0D3, 0x050B, 0xF0D1,
0x0505, 0xF0CF, 0x04FF, 0xF0CD, 0x04F9, 0xF0CB, 0x04F3, 0xF0C9, 0x04ED, 0xF0C7,
0x04E7, 0xF0C5, 0x04E1, 0xF0C3, 0x04DB, 0xF0C1, 0x04D5, 0xF0BF, 0x04CF, 0xF0BD,
0x04C9, 0xF0BB, 0x04C3, 0xF0BA, 0x04BD, 0xF0B8, 0x04B7, 0xF0B6, 0x04B1, 0xF0B4,
0x04AB, 0xF0B2, 0x04A5, 0xF0B0, 0x049F, 0xF0AF, 0x0499, 0xF0AD, 0x0493, 0xF0AB,
0x048D, 0xF0A9, 0x0487, 0xF0A7, 0x0481, 0xF0A6, 0x047B, 0xF0A4, 0x0475, 0xF0A2,
0x046F, 0xF0A0, 0x0469, 0xF09F, 0x0463, 0xF09D, 0x045D, 0xF09B, 0x0457, 0xF099,
0x0451, 0xF098, 0x044B, 0xF096, 0x0444, 0xF094, 0x043E, 0xF093, 0x0438, 0xF091,
0x0432, 0xF08F, 0x042C, 0xF08E, 0x0426, 0xF08C, 0x0420, 0xF08A, 0x041A, 0xF089,
0x0414, 0xF087, 0x040E, 0xF086, 0x0408, 0xF084, 0x0402, 0xF083, 0x03FC, 0xF081,
0x03F6, 0xF07F, 0x03EF, 0xF07E, 0x03E9, 0xF07C, 0x03E3, 0xF07B, 0x03DD, 0xF079,
0x03D7, 0xF078, 0x03D1, 0xF076, 0x03CB, 0xF075, 0x03C5, 0xF073, 0x03BF, 0xF072,
0x03B9, 0xF070, 0x03B2, 0xF06F, 0x03AC, 0xF06D, 0x03A6, 0xF06C, 0x03A0, 0xF06B,
0x039A, 0xF069, 0x0394, 0xF068, 0x038E, 0xF066, 0x0388, 0xF065, 0x0381, 0xF064,
0x037B, 0xF062, 0x0375, 0xF061, 0x036F, 0xF05F, 0x0369, 0xF05E, 0x0363, 0xF05D,
0x035D, 0xF05B, 0x0356, 0xF05A, 0x0350, 0xF059, 0x034A, 0xF058, 0x0344, 0xF056,
0x033E, 0xF055, 0x0338, 0xF054, 0x0332, 0xF052, 0x032B, 0xF051, 0x0325, 0xF050,
0x031F, 0xF04F, 0x0319, 0xF04D, 0x0313, 0xF04C, 0x030D, 0xF04B, 0x0306, 0xF04A,
0x0300, 0xF049, 0x02FA, 0xF048, 0x02F4, 0xF046, 0x02EE, 0xF045, 0x02E8, 0xF044,
0x02E1, 0xF043, 0x02DB, 0xF042, 0x02D5, 0xF041, 0x02CF, 0xF040, 0x02C9, 0xF03E,
0x02C2, 0xF03D, 0x02BC, 0xF03C, 0x02B6, 0xF03B, 0x02B0, 0xF03A, 0x02AA, 0xF039,
0x02A3, 0xF038, 0x029D, 0xF037, 0x0297, 0xF036, 0x0291, 0xF035, 0x028B, 0xF034,
0x0284, 0xF033, 0x027E, 0xF032, 0x0278, 0xF031, 0x0272, 0xF030, 0x026C, 0xF02F,
0x0265, 0xF02E, 0x025F, 0xF02D, 0x0259, 0xF02C, 0x0253, 0xF02B, 0x024D, 0xF02B,
0x0246, 0xF02A, 0x0240, 0xF029, 0x023A, 0xF028, 0x0234, 0xF027, 0x022D, 0xF026,
0x0227, 0xF025, 0x0221, 0xF024, 0x021B, 0xF024, 0x0215, 0xF023, 0x020E, 0xF022,
0x0208, 0xF021, 0x0202, 0xF020, 0x01FC, 0xF020, 0x01F5, 0xF01F, 0x01EF, 0xF01E,
0x01E9, 0xF01D, 0x01E3, 0xF01D, 0x01DC, 0xF01C, 0x01D6, 0xF01B, 0x01D0, 0xF01A,
0x01CA, 0xF01A, 0x01C3, 0xF019, 0x01BD, 0xF018, 0x01B7, 0xF018, 0x01B1, 0xF017,
0x01AA, 0xF016, 0x01A4, 0xF016, 0x019E, 0xF015, 0x0198, 0xF014, 0x0191, 0xF014,
0x018B, 0xF013, 0x0185, 0xF013, 0x017F, 0xF012, 0x0178, 0xF011, 0x0172, 0xF011,
0x016C, 0xF010, 0x0166, 0xF010, 0x015F, 0xF00F, 0x0159, 0xF00F, 0x0153, 0xF00E,
0x014D, 0xF00E, 0x0146, 0xF00D, 0x0140, 0xF00D, 0x013A, 0xF00C, 0x0134, 0xF00C,
0x012D, 0xF00B, 0x0127, 0xF00B, 0x0121, 0xF00A, 0x011B, 0xF00A, 0x0114, 0xF009,
0x010E, 0xF009, 0x0108, 0xF008, 0x0101, 0xF008, 0x00FB, 0xF008, 0x00F5, 0xF007,
0x00EF, 0xF007, 0x00E8, 0xF007, 0x00E2, 0xF006, 0x00DC, 0xF006, 0x00D6, 0xF006,
0x00CF, 0xF005, 0x00C9, 0xF005, 0x00C3, 0xF005, 0x00BC, 0xF004, 0x00B6, 0xF004,
0x00B0, 0xF004, 0x00AA, 0xF004, 0x00A3, 0xF003, 0x009D, 0xF003, 0x0097, 0xF003,
0x0090, 0xF003, 0x008A, 0xF002, 0x0084, 0xF002, 0x007E, 0xF002, 0x0077, 0xF002,
0x0071, 0xF002, 0x006B, 0xF001, 0x0065, 0xF001, 0x005E, 0xF001, 0x0058, 0xF001,
0x0052, 0xF001, 0x004B, 0xF001, 0x0045, 0xF001, 0x003F, 0xF000, 0x0039, 0xF000,
0x0032, 0xF000, 0x002C, 0xF000, 0x0026, 0xF000, 0x001F, 0xF000, 0x0019, 0xF000,
0x0013, 0xF000, 0x000D, 0xF000, 0x0006, 0xF000, 0x0000, 0xF000, 0xFFFA, 0xF000,
0xFFF3, 0xF000, 0xFFED, 0xF000, 0xFFE7, 0xF000, 0xFFE1, 0xF000, 0xFFDA, 0xF000,
0xFFD4, 0xF000, 0xFFCE, 0xF000, 0xFFC7, 0xF000, 0xFFC1, 0xF000, 0xFFBB, 0xF001,
0xFFB5, 0xF001, 0xFFAE, 0xF001, 0xFFA8, 0xF001, 0xFFA2, 0xF001, 0xFF9B, 0xF001,
0xFF95, 0xF001, 0xFF8F, 0xF002, 0xFF89, 0xF002, 0xFF82, 0xF002, 0xFF7C, 0xF002,
0xFF76, 0xF002, 0xFF70, 0xF003, 0xFF69, 0xF003, 0xFF63, 0xF003, 0xFF5D, 0xF003,
0xFF56, 0xF004, 0xFF50, 0xF004, 0xFF4A, 0xF004, 0xFF44, 0xF004, 0xFF3D, 0xF005,
0xFF37, 0xF005, 0xFF31, 0xF005, 0xFF2A, 0xF006, 0xFF24, 0xF006, 0xFF1E, 0xF006,
0xFF18, 0xF007, 0xFF11, 0xF007, 0xFF0B, 0xF007, 0xFF05, 0xF008, 0xFEFF, 0xF008,
0xFEF8, 0xF008, 0xFEF2, 0xF009, 0xFEEC, 0xF009, 0xFEE5, 0xF00A, 0xFEDF, 0xF00A,
0xFED9, 0xF00B, 0xFED3, 0xF00B, 0xFECC, 0xF00C, 0xFEC6, 0xF00C, 0xFEC0, 0xF00D,
0xFEBA, 0xF00D, 0xFEB3, 0xF00E, 0xFEAD, 0xF00E, 0xFEA7, 0xF00F, 0xFEA1, 0xF00F,
0xFE9A, 0xF010, 0xFE94, 0xF010, 0xFE8E, 0xF011, 0xFE88, 0xF011, 0xFE81, 0xF012,
0xFE7B, 0xF013, 0xFE75, 0xF013, 0xFE6F, 0xF014, 0xFE68, 0xF014, 0xFE62, 0xF015,
0xFE5C, 0xF016, 0xFE56, 0xF016, 0xFE4F, 0xF017, 0xFE49, 0xF018, 0xFE43, 0xF018,
0xFE3D, 0xF019, 0xFE36, 0xF01A, 0xFE30, 0xF01A, 0xFE2A, 0xF01B, 0xFE24, 0xF01C,
0xFE1D, 0xF01D, 0xFE17, 0xF01D, 0xFE11, 0xF01E, 0xFE0B, 0xF01F, 0xFE04, 0xF020,
0xFDFE, 0xF020, 0xFDF8, 0xF021, 0xFDF2, 0xF022, 0xFDEB, 0xF023, 0xFDE5, 0xF024,
0xFDDF, 0xF024, 0xFDD9, 0xF025, 0xFDD3, 0xF026, 0xFDCC, 0xF027, 0xFDC6, 0xF028,
0xFDC0, 0xF029, 0xFDBA, 0xF02A, 0xFDB3, 0xF02B, 0xFDAD, 0xF02B, 0xFDA7, 0xF02C,
0xFDA1, 0xF02D, 0xFD9B, 0xF02E, 0xFD94, 0xF02F, 0xFD8E, 0xF030, 0xFD88, 0xF031,
0xFD82, 0xF032, 0xFD7C, 0xF033, 0xFD75, 0xF034, 0xFD6F, 0xF035, 0xFD69, 0xF036,
0xFD63, 0xF037, 0xFD5D, 0xF038, 0xFD56, 0xF039, 0xFD50, 0xF03A, 0xFD4A, 0xF03B,
0xFD44, 0xF03C, 0xFD3E, 0xF03D, 0xFD37, 0xF03E, 0xFD31, 0xF040, 0xFD2B, 0xF041,
0xFD25, 0xF042, 0xFD1F, 0xF043, 0xFD18, 0xF044, 0xFD12, 0xF045, 0xFD0C, 0xF046,
0xFD06, 0xF048, 0xFD00, 0xF049, 0xFCFA, 0xF04A, 0xFCF3, 0xF04B, 0xFCED, 0xF04C,
0xFCE7, 0xF04D, 0xFCE1, 0xF04F, 0xFCDB, 0xF050, 0xFCD5, 0xF051, 0xFCCE, 0xF052,
0xFCC8, 0xF054, 0xFCC2, 0xF055, 0xFCBC, 0xF056, 0xFCB6, 0xF058, 0xFCB0, 0xF059,
0xFCAA, 0xF05A, 0xFCA3, 0xF05B, 0xFC9D, 0xF05D, 0xFC97, 0xF05E, 0xFC91, 0xF05F,
0xFC8B, 0xF061, 0xFC85, 0xF062, 0xFC7F, 0xF064, 0xFC78, 0xF065, 0xFC72, 0xF066,
0xFC6C, 0xF068, 0xFC66, 0xF069, 0xFC60, 0xF06B, 0xFC5A, 0xF06C, 0xFC54, 0xF06D,
0xFC4E, 0xF06F, 0xFC47, 0xF070, 0xFC41, 0xF072, 0xFC3B, 0xF073, 0xFC35, 0xF075,
0xFC2F, 0xF076, 0xFC29, 0xF078, 0xFC23, 0xF079, 0xFC1D, 0xF07B, 0xFC17, 0xF07C,
0xFC11, 0xF07E, 0xFC0A, 0xF07F, 0xFC04, 0xF081, 0xFBFE, 0xF083, 0xFBF8, 0xF084,
0xFBF2, 0xF086, 0xFBEC, 0xF087, 0xFBE6, 0xF089, 0xFBE0, 0xF08A, 0xFBDA, 0xF08C,
0xFBD4, 0xF08E, 0xFBCE, 0xF08F, 0xFBC8, 0xF091, 0xFBC2, 0xF093, 0xFBBC, 0xF094,
0xFBB5, 0xF096, 0xFBAF, 0xF098, 0xFBA9, 0xF099, 0xFBA3, 0xF09B, 0xFB9D, 0xF09D,
0xFB97, 0xF09F, 0xFB91, 0xF0A0, 0xFB8B, 0xF0A2, 0xFB85, 0xF0A4, 0xFB7F, 0xF0A6,
0xFB79, 0xF0A7, 0xFB73, 0xF0A9, 0xFB6D, 0xF0AB, 0xFB67, 0xF0AD, 0xFB61, 0xF0AF,
0xFB5B, 0xF0B0, 0xFB55, 0xF0B2, 0xFB4F, 0xF0B4, 0xFB49, 0xF0B6, 0xFB43, 0xF0B8,
0xFB3D, 0xF0BA, 0xFB37, 0xF0BB, 0xFB31, 0xF0BD, 0xFB2B, 0xF0BF, 0xFB25, 0xF0C1,
0xFB1F, 0xF0C3, 0xFB19, 0xF0C5, 0xFB13, 0xF0C7, 0xFB0D, 0xF0C9, 0xFB07, 0xF0CB,
0xFB01, 0xF0CD, 0xFAFB, 0xF0CF, 0xFAF5, 0xF0D1, 0xFAEF, 0xF0D3, 0xFAE9, 0xF0D5,
0xFAE3, 0xF0D7, 0xFADD, 0xF0D9, 0xFAD7, 0xF0DB, 0xFAD1, 0xF0DD, 0xFACC, 0xF0DF,
0xFAC6, 0xF0E1, 0xFAC0, 0xF0E3, 0xFABA, 0xF0E5, 0xFAB4, 0xF0E7, 0xFAAE, 0xF0E9,
0xFAA8, 0xF0EB, 0xFAA2, 0xF0ED, 0xFA9C, 0xF0EF, 0xFA96, 0xF0F2, 0xFA90, 0xF0F4,
0xFA8A, 0xF0F6, 0xFA84, 0xF0F8, 0xFA7F, 0xF0FA, 0xFA79, 0xF0FC, 0xFA73, 0xF0FE,
0xFA6D, 0xF101, 0xFA67, 0xF103, 0xFA61, 0xF105, 0xFA5B, 0xF107, 0xFA55, 0xF109,
0xFA4F, 0xF10C, 0xFA4A, 0xF10E, 0xFA44, 0xF110, 0xFA3E, 0xF112, 0xFA38, 0xF115,
0xFA32, 0xF117, 0xFA2C, 0xF119, 0xFA26, 0xF11C, 0xFA21, 0xF11E, 0xFA1B, 0xF120,
0xFA15, 0xF123, 0xFA0F, 0xF125, 0xFA09, 0xF127, 0xFA03, 0xF12A, 0xF9FE, 0xF12C,
0xF9F8, 0xF12E, 0xF9F2, 0xF131, 0xF9EC, 0xF133, 0xF9E6, 0xF135, 0xF9E1, 0xF138,
0xF9DB, 0xF13A, 0xF9D5, 0xF13D, 0xF9CF, 0xF13F, 0xF9C9, 0xF141, 0xF9C4, 0xF144,
0xF9BE, 0xF146, 0xF9B8, 0xF149, 0xF9B2, 0xF14B, 0xF9AC, 0xF14E, 0xF9A7, 0xF150,
0xF9A1, 0xF153, 0xF99B, 0xF155, 0xF995, 0xF158, 0xF990, 0xF15A, 0xF98A, 0xF15D,
0xF984, 0xF15F, 0xF97E, 0xF162, 0xF979, 0xF165, 0xF973, 0xF167, 0xF96D, 0xF16A,
0xF967, 0xF16C, 0xF962, 0xF16F, 0xF95C, 0xF171, 0xF956, 0xF174, 0xF951, 0xF177,
0xF94B, 0xF179, 0xF945, 0xF17C, 0xF93F, 0xF17F, 0xF93A, 0xF181, 0xF934, 0xF184,
0xF92E, 0xF187, 0xF929, 0xF189, 0xF923, 0xF18C, 0xF91D, 0xF18F, 0xF918, 0xF191,
0xF912, 0xF194, 0xF90C, 0xF197, 0xF907, 0xF19A, 0xF901, 0xF19C, 0xF8FB, 0xF19F,
0xF8F6, 0xF1A2, 0xF8F0, 0xF1A5, 0xF8EB, 0xF1A7, 0xF8E5, 0xF1AA, 0xF8DF, 0xF1AD,
0xF8DA, 0xF1B0, 0xF8D4, 0xF1B3, 0xF8CE, 0xF1B5, 0xF8C9, 0xF1B8, 0xF8C3, 0xF1BB,
0xF8BE, 0xF1BE, 0xF8B8, 0xF1C1, 0xF8B2, 0xF1C4, 0xF8AD, 0xF1C6, 0xF8A7, 0xF1C9,
0xF8A2, 0xF1CC, 0xF89C, 0xF1CF, 0xF896, 0xF1D2, 0xF891, 0xF1D5, 0xF88B, 0xF1D8,
0xF886, 0xF1DB, 0xF880, 0xF1DE, 0xF87B, 0xF1E1, 0xF875, 0xF1E4, 0xF870, 0xF1E7,
0xF86A, 0xF1EA, 0xF865, 0xF1ED, 0xF85F, 0xF1F0, 0xF85A, 0xF1F3, 0xF854, 0xF1F6,
0xF84E, 0xF1F9, 0xF849, 0xF1FC, 0xF843, 0xF1FF, 0xF83E, 0xF202, 0xF838, 0xF205,
0xF833, 0xF208, 0xF82E, 0xF20B, 0xF828, 0xF20E, 0xF823, 0xF211, 0xF81D, 0xF214,
0xF818, 0xF217, 0xF812, 0xF21A, 0xF80D, 0xF21D, 0xF807, 0xF221, 0xF802, 0xF224,
0xF7FC, 0xF227, 0xF7F7, 0xF22A, 0xF7F2, 0xF22D, 0xF7EC, 0xF230, 0xF7E7, 0xF234,
0xF7E1, 0xF237, 0xF7DC, 0xF23A, 0xF7D6, 0xF23D, 0xF7D1, 0xF240, 0xF7CC, 0xF244,
0xF7C6, 0xF247, 0xF7C1, 0xF24A, 0xF7BB, 0xF24D, 0xF7B6, 0xF250, 0xF7B1, 0xF254,
0xF7AB, 0xF257, 0xF7A6, 0xF25A, 0xF7A1, 0xF25E, 0xF79B, 0xF261, 0xF796, 0xF264,
0xF791, 0xF267, 0xF78B, 0xF26B, 0xF786, 0xF26E, 0xF781, 0xF271, 0xF77B, 0xF275,
0xF776, 0xF278, 0xF771, 0xF27B, 0xF76B, 0xF27F, 0xF766, 0xF282, 0xF761, 0xF286,
0xF75B, 0xF289, 0xF756, 0xF28C, 0xF751, 0xF290, 0xF74C, 0xF293, 0xF746, 0xF297,
0xF741, 0xF29A, 0xF73C, 0xF29E, 0xF737, 0xF2A1, 0xF731, 0xF2A4, 0xF72C, 0xF2A8,
0xF727, 0xF2AB, 0xF722, 0xF2AF, 0xF71C, 0xF2B2, 0xF717, 0xF2B6, 0xF712, 0xF2B9,
0xF70D, 0xF2BD, 0xF708, 0xF2C0, 0xF702, 0xF2C4, 0xF6FD, 0xF2C7, 0xF6F8, 0xF2CB,
0xF6F3, 0xF2CE, 0xF6EE, 0xF2D2, 0xF6E8, 0xF2D6, 0xF6E3, 0xF2D9, 0xF6DE, 0xF2DD,
0xF6D9, 0xF2E0, 0xF6D4, 0xF2E4, 0xF6CF, 0xF2E8, 0xF6C9, 0xF2EB, 0xF6C4, 0xF2EF,
0xF6BF, 0xF2F2, 0xF6BA, 0xF2F6, 0xF6B5, 0xF2FA, 0xF6B0, 0xF2FD, 0xF6AB, 0xF301,
0xF6A6, 0xF305, 0xF6A1, 0xF308, 0xF69B, 0xF30C, 0xF696, 0xF310, 0xF691, 0xF313,
0xF68C, 0xF317, 0xF687, 0xF31B, 0xF682, 0xF31F, 0xF67D, 0xF322, 0xF678, 0xF326,
0xF673, 0xF32A, 0xF66E, 0xF32E, 0xF669, 0xF331, 0xF664, 0xF335, 0xF65F, 0xF339,
0xF65A, 0xF33D, 0xF655, 0xF340, 0xF650, 0xF344, 0xF64B, 0xF348, 0xF646, 0xF34C,
0xF641, 0xF350, 0xF63C, 0xF354, 0xF637, 0xF357, 0xF632, 0xF35B, 0xF62D, 0xF35F,
0xF628, 0xF363, 0xF623, 0xF367, 0xF61E, 0xF36B, 0xF619, 0xF36F, 0xF614, 0xF372,
0xF60F, 0xF376, 0xF60A, 0xF37A, 0xF605, 0xF37E, 0xF601, 0xF382, 0xF5FC, 0xF386,
0xF5F7, 0xF38A, 0xF5F2, 0xF38E, 0xF5ED, 0xF392, 0xF5E8, 0xF396, 0xF5E3, 0xF39A,
0xF5DE, 0xF39E, 0xF5DA, 0xF3A2, 0xF5D5, 0xF3A6, 0xF5D0, 0xF3AA, 0xF5CB, 0xF3AE,
0xF5C6, 0xF3B2, 0xF5C1, 0xF3B6, 0xF5BC, 0xF3BA, 0xF5B8, 0xF3BE, 0xF5B3, 0xF3C2,
0xF5AE, 0xF3C6, 0xF5A9, 0xF3CA, 0xF5A4, 0xF3CE, 0xF5A0, 0xF3D2, 0xF59B, 0xF3D6,
0xF596, 0xF3DA, 0xF591, 0xF3DE, 0xF58D, 0xF3E2, 0xF588, 0xF3E7, 0xF583, 0xF3EB,
0xF57E, 0xF3EF, 0xF57A, 0xF3F3, 0xF575, 0xF3F7, 0xF570, 0xF3FB, 0xF56B, 0xF3FF,
0xF567, 0xF404, 0xF562, 0xF408, 0xF55D, 0xF40C, 0xF559, 0xF410, 0xF554, 0xF414,
0xF54F, 0xF418, 0xF54B, 0xF41D, 0xF546, 0xF421, 0xF541, 0xF425, 0xF53D, 0xF429,
0xF538, 0xF42E, 0xF533, 0xF432, 0xF52F, 0xF436, 0xF52A, 0xF43A, 0xF525, 0xF43F,
0xF521, 0xF443, 0xF51C, 0xF447, 0xF518, 0xF44B, 0xF513, 0xF450, 0xF50E, 0xF454,
0xF50A, 0xF458, 0xF505, 0xF45D, 0xF501, 0xF461, 0xF4FC, 0xF465, 0xF4F8, 0xF469,
0xF4F3, 0xF46E, 0xF4EF, 0xF472, 0xF4EA, 0xF477, 0xF4E5, 0xF47B, 0xF4E1, 0xF47F,
0xF4DC, 0xF484, 0xF4D8, 0xF488, 0xF4D3, 0xF48C, 0xF4CF, 0xF491, 0xF4CA, 0xF495,
0xF4C6, 0xF49A, 0xF4C2, 0xF49E, 0xF4BD, 0xF4A2, 0xF4B9, 0xF4A7, 0xF4B4, 0xF4AB,
0xF4B0, 0xF4B0, 0xF4AB, 0xF4B4, 0xF4A7, 0xF4B9, 0xF4A2, 0xF4BD, 0xF49E, 0xF4C2,
0xF49A, 0xF4C6, 0xF495, 0xF4CA, 0xF491, 0xF4CF, 0xF48C, 0xF4D3, 0xF488, 0xF4D8,
0xF484, 0xF4DC, 0xF47F, 0xF4E1, 0xF47B, 0xF4E5, 0xF477, 0xF4EA, 0xF472, 0xF4EF,
0xF46E, 0xF4F3, 0xF469, 0xF4F8, 0xF465, 0xF4FC, 0xF461, 0xF501, 0xF45D, 0xF505,
0xF458, 0xF50A, 0xF454, 0xF50E, 0xF450, 0xF513, 0xF44B, 0xF518, 0xF447, 0xF51C,
0xF443, 0xF521, 0xF43F, 0xF525, 0xF43A, 0xF52A, 0xF436, 0xF52F, 0xF432, 0xF533,
0xF42E, 0xF538, 0xF429, 0xF53D, 0xF425, 0xF541, 0xF421, 0xF546, 0xF41D, 0xF54B,
0xF418, 0xF54F, 0xF414, 0xF554, 0xF410, 0xF559, 0xF40C, 0xF55D, 0xF408, 0xF562,
0xF404, 0xF567, 0xF3FF, 0xF56B, 0xF3FB, 0xF570, 0xF3F7, 0xF575, 0xF3F3, 0xF57A,
0xF3EF, 0xF57E, 0xF3EB, 0xF583, 0xF3E7, 0xF588, 0xF3E2, 0xF58D, 0xF3DE, 0xF591,
0xF3DA, 0xF596, 0xF3D6, 0xF59B, 0xF3D2, 0xF5A0, 0xF3CE, 0xF5A4, 0xF3CA, 0xF5A9,
0xF3C6, 0xF5AE, 0xF3C2, 0xF5B3, 0xF3BE, 0xF5B8, 0xF3BA, 0xF5BC, 0xF3B6, 0xF5C1,
0xF3B2, 0xF5C6, 0xF3AE, 0xF5CB, 0xF3AA, 0xF5D0, 0xF3A6, 0xF5D5, 0xF3A2, 0xF5DA,
0xF39E, 0xF5DE, 0xF39A, 0xF5E3, 0xF396, 0xF5E8, 0xF392, 0xF5ED, 0xF38E, 0xF5F2,
0xF38A, 0xF5F7, 0xF386, 0xF5FC, 0xF382, 0xF601, 0xF37E, 0xF605, 0xF37A, 0xF60A,
0xF376, 0xF60F, 0xF372, 0xF614, 0xF36F, 0xF619, 0xF36B, 0xF61E, 0xF367, 0xF623,
0xF363, 0xF628, 0xF35F, 0xF62D, 0xF35B, 0xF632, 0xF357, 0xF637, 0xF354, 0xF63C,
0xF350, 0xF641, 0xF34C, 0xF646, 0xF348, 0xF64B, 0xF344, 0xF650, 0xF340, 0xF655,
0xF33D, 0xF65A, 0xF339, 0xF65F, 0xF335, 0xF664, 0xF331, 0xF669, 0xF32E, 0xF66E,
0xF32A, 0xF673, 0xF326, 0xF678, 0xF322, 0xF67D, 0xF31F, 0xF682, 0xF31B, 0xF687,
0xF317, 0xF68C, 0xF313, 0xF691, 0xF310, 0xF696, 0xF30C, 0xF69B, 0xF308, 0xF6A1,
0xF305, 0xF6A6, 0xF301, 0xF6AB, 0xF2FD, 0xF6B0, 0xF2FA, 0xF6B5, 0xF2F6, 0xF6BA,
0xF2F2, 0xF6BF, 0xF2EF, 0xF6C4, 0xF2EB, 0xF6C9, 0xF2E8, 0xF6CF, 0xF2E4, 0xF6D4,
0xF2E0, 0xF6D9, 0xF2DD, 0xF6DE, 0xF2D9, 0xF6E3, 0xF2D6, 0xF6E8, 0xF2D2, 0xF6EE,
0xF2CE, 0xF6F3, 0xF2CB, 0xF6F8, 0xF2C7, 0xF6FD, 0xF2C4, 0xF702, 0xF2C0, 0xF708,
0xF2BD, 0xF70D, 0xF2B9, 0xF712, 0xF2B6, 0xF717, 0xF2B2, 0xF71C, 0xF2AF, 0xF722,
0xF2AB, 0xF727, 0xF2A8, 0xF72C, 0xF2A4, 0xF731, 0xF2A1, 0xF737, 0xF29E, 0xF73C,
0xF29A, 0xF741, 0xF297, 0xF746, 0xF293, 0xF74C, 0xF290, 0xF751, 0xF28C, 0xF756,
0xF289, 0xF75B, 0xF286, 0xF761, 0xF282, 0xF766, 0xF27F, 0xF76B, 0xF27B, 0xF771,
0xF278, 0xF776, 0xF275, 0xF77B, 0xF271, 0xF781, 0xF26E, 0xF786, 0xF26B, 0xF78B,
0xF267, 0xF791, 0xF264, 0xF796, 0xF261, 0xF79B, 0xF25E, 0xF7A1, 0xF25A, 0xF7A6,
0xF257, 0xF7AB, 0xF254, 0xF7B1, 0xF250, 0xF7B6, 0xF24D, 0xF7BB, 0xF24A, 0xF7C1,
0xF247, 0xF7C6, 0xF244, 0xF7CC, 0xF240, 0xF7D1, 0xF23D, 0xF7D6, 0xF23A, 0xF7DC,
0xF237, 0xF7E1, 0xF234, 0xF7E7, 0xF230, 0xF7EC, 0xF22D, 0xF7F2, 0xF22A, 0xF7F7,
0xF227, 0xF7FC, 0xF224, 0xF802, 0xF221, 0xF807, 0xF21D, 0xF80D, 0xF21A, 0xF812,
0xF217, 0xF818, 0xF214, 0xF81D, 0xF211, 0xF823, 0xF20E, 0xF828, 0xF20B, 0xF82E,
0xF208, 0xF833, 0xF205, 0xF838, 0xF202, 0xF83E, 0xF1FF, 0xF843, 0xF1FC, 0xF849,
0xF1F9, 0xF84E, 0xF1F6, 0xF854, 0xF1F3, 0xF85A, 0xF1F0, 0xF85F, 0xF1ED, 0xF865,
0xF1EA, 0xF86A, 0xF1E7, 0xF870, 0xF1E4, 0xF875, 0xF1E1, 0xF87B, 0xF1DE, 0xF880,
0xF1DB, 0xF886, 0xF1D8, 0xF88B, 0xF1D5, 0xF891, 0xF1D2, 0xF896, 0xF1CF, 0xF89C,
0xF1CC, 0xF8A2, 0xF1C9, 0xF8A7, 0xF1C6, 0xF8AD, 0xF1C4, 0xF8B2, 0xF1C1, 0xF8B8,
0xF1BE, 0xF8BE, 0xF1BB, 0xF8C3, 0xF1B8, 0xF8C9, 0xF1B5, 0xF8CE, 0xF1B3, 0xF8D4,
0xF1B0, 0xF8DA, 0xF1AD, 0xF8DF, 0xF1AA, 0xF8E5, 0xF1A7, 0xF8EB, 0xF1A5, 0xF8F0,
0xF1A2, 0xF8F6, 0xF19F, 0xF8FB, 0xF19C, 0xF901, 0xF19A, 0xF907, 0xF197, 0xF90C,
0xF194, 0xF912, 0xF191, 0xF918, 0xF18F, 0xF91D, 0xF18C, 0xF923, 0xF189, 0xF929,
0xF187, 0xF92E, 0xF184, 0xF934, 0xF181, 0xF93A, 0xF17F, 0xF93F, 0xF17C, 0xF945,
0xF179, 0xF94B, 0xF177, 0xF951, 0xF174, 0xF956, 0xF171, 0xF95C, 0xF16F, 0xF962,
0xF16C, 0xF967, 0xF16A, 0xF96D, 0xF167, 0xF973, 0xF165, 0xF979, 0xF162, 0xF97E,
0xF15F, 0xF984, 0xF15D, 0xF98A, 0xF15A, 0xF990, 0xF158, 0xF995, 0xF155, 0xF99B,
0xF153, 0xF9A1, 0xF150, 0xF9A7, 0xF14E, 0xF9AC, 0xF14B, 0xF9B2, 0xF149, 0xF9B8,
0xF146, 0xF9BE, 0xF144, 0xF9C4, 0xF141, 0xF9C9, 0xF13F, 0xF9CF, 0xF13D, 0xF9D5,
0xF13A, 0xF9DB, 0xF138, 0xF9E1, 0xF135, 0xF9E6, 0xF133, 0xF9EC, 0xF131, 0xF9F2,
0xF12E, 0xF9F8, 0xF12C, 0xF9FE, 0xF12A, 0xFA03, 0xF127, 0xFA09, 0xF125, 0xFA0F,
0xF123, 0xFA15, 0xF120, 0xFA1B, 0xF11E, 0xFA21, 0xF11C, 0xFA26, 0xF119, 0xFA2C,
0xF117, 0xFA32, 0xF115, 0xFA38, 0xF112, 0xFA3E, 0xF110, 0xFA44, 0xF10E, 0xFA4A,
0xF10C, 0xFA4F, 0xF109, 0xFA55, 0xF107, 0xFA5B, 0xF105, 0xFA61, 0xF103, 0xFA67,
0xF101, 0xFA6D, 0xF0FE, 0xFA73, 0xF0FC, 0xFA79, 0xF0FA, 0xFA7F, 0xF0F8, 0xFA84,
0xF0F6, 0xFA8A, 0xF0F4, 0xFA90, 0xF0F2, 0xFA96, 0xF0EF, 0xFA9C, 0xF0ED, 0xFAA2,
0xF0EB, 0xFAA8, 0xF0E9, 0xFAAE, 0xF0E7, 0xFAB4, 0xF0E5, 0xFABA, 0xF0E3, 0xFAC0,
0xF0E1, 0xFAC6, 0xF0DF, 0xFACC, 0xF0DD, 0xFAD1, 0xF0DB, 0xFAD7, 0xF0D9, 0xFADD,
0xF0D7, 0xFAE3, 0xF0D5, 0xFAE9, 0xF0D3, 0xFAEF, 0xF0D1, 0xFAF5, 0xF0CF, 0xFAFB,
0xF0CD, 0xFB01, 0xF0CB, 0xFB07, 0xF0C9, 0xFB0D, 0xF0C7, 0xFB13, 0xF0C5, 0xFB19,
0xF0C3, 0xFB1F, 0xF0C1, 0xFB25, 0xF0BF, 0xFB2B, 0xF0BD, 0xFB31, 0xF0BB, 0xFB37,
0xF0BA, 0xFB3D, 0xF0B8, 0xFB43, 0xF0B6, 0xFB49, 0xF0B4, 0xFB4F, 0xF0B2, 0xFB55,
0xF0B0, 0xFB5B, 0xF0AF, 0xFB61, 0xF0AD, 0xFB67, 0xF0AB, 0xFB6D, 0xF0A9, 0xFB73,
0xF0A7, 0xFB79, 0xF0A6, 0xFB7F, 0xF0A4, 0xFB85, 0xF0A2, 0xFB8B, 0xF0A0, 0xFB91,
0xF09F, 0xFB97, 0xF09D, 0xFB9D, 0xF09B, 0xFBA3, 0xF099, 0xFBA9, 0xF098, 0xFBAF,
0xF096, 0xFBB5, 0xF094, 0xFBBC, 0xF093, 0xFBC2, 0xF091, 0xFBC8, 0xF08F, 0xFBCE,
0xF08E, 0xFBD4, 0xF08C, 0xFBDA, 0xF08A, 0xFBE0, 0xF089, 0xFBE6, 0xF087, 0xFBEC,
0xF086, 0xFBF2, 0xF084, 0xFBF8, 0xF083, 0xFBFE, 0xF081, 0xFC04, 0xF07F, 0xFC0A,
0xF07E, 0xFC11, 0xF07C, 0xFC17, 0xF07B, 0xFC1D, 0xF079, 0xFC23, 0xF078, 0xFC29,
0xF076, 0xFC2F, 0xF075, 0xFC35, 0xF073, 0xFC3B, 0xF072, 0xFC41, 0xF070, 0xFC47,
0xF06F, 0xFC4E, 0xF06D, 0xFC54, 0xF06C, 0xFC5A, 0xF06B, 0xFC60, 0xF069, 0xFC66,
0xF068, 0xFC6C, 0xF066, 0xFC72, 0xF065, 0xFC78, 0xF064, 0xFC7F, 0xF062, 0xFC85,
0xF061, 0xFC8B, 0xF05F, 0xFC91, 0xF05E, 0xFC97, 0xF05D, 0xFC9D, 0xF05B, 0xFCA3,
0xF05A, 0xFCAA, 0xF059, 0xFCB0, 0xF058, 0xFCB6, 0xF056, 0xFCBC, 0xF055, 0xFCC2,
0xF054, 0xFCC8, 0xF052, 0xFCCE, 0xF051, 0xFCD5, 0xF050, 0xFCDB, 0xF04F, 0xFCE1,
0xF04D, 0xFCE7, 0xF04C, 0xFCED, 0xF04B, 0xFCF3, 0xF04A, 0xFCFA, 0xF049, 0xFD00,
0xF048, 0xFD06, 0xF046, 0xFD0C, 0xF045, 0xFD12, 0xF044, 0xFD18, 0xF043, 0xFD1F,
0xF042, 0xFD25, 0xF041, 0xFD2B, 0xF040, 0xFD31, 0xF03E, 0xFD37, 0xF03D, 0xFD3E,
0xF03C, 0xFD44, 0xF03B, 0xFD4A, 0xF03A, 0xFD50, 0xF039, 0xFD56, 0xF038, 0xFD5D,
0xF037, 0xFD63, 0xF036, 0xFD69, 0xF035, 0xFD6F, 0xF034, 0xFD75, 0xF033, 0xFD7C,
0xF032, 0xFD82, 0xF031, 0xFD88, 0xF030, 0xFD8E, 0xF02F, 0xFD94, 0xF02E, 0xFD9B,
0xF02D, 0xFDA1, 0xF02C, 0xFDA7, 0xF02B, 0xFDAD, 0xF02B, 0xFDB3, 0xF02A, 0xFDBA,
0xF029, 0xFDC0, 0xF028, 0xFDC6, 0xF027, 0xFDCC, 0xF026, 0xFDD3, 0xF025, 0xFDD9,
0xF024, 0xFDDF, 0xF024, 0xFDE5, 0xF023, 0xFDEB, 0xF022, 0xFDF2, 0xF021, 0xFDF8,
0xF020, 0xFDFE, 0xF020, 0xFE04, 0xF01F, 0xFE0B, 0xF01E, 0xFE11, 0xF01D, 0xFE17,
0xF01D, 0xFE1D, 0xF01C, 0xFE24, 0xF01B, 0xFE2A, 0xF01A, 0xFE30, 0xF01A, 0xFE36,
0xF019, 0xFE3D, 0xF018, 0xFE43, 0xF018, 0xFE49, 0xF017, 0xFE4F, 0xF016, 0xFE56,
0xF016, 0xFE5C, 0xF015, 0xFE62, 0xF014, 0xFE68, 0xF014, 0xFE6F, 0xF013, 0xFE75,
0xF013, 0xFE7B, 0xF012, 0xFE81, 0xF011, 0xFE88, 0xF011, 0xFE8E, 0xF010, 0xFE94,
0xF010, 0xFE9A, 0xF00F, 0xFEA1, 0xF00F, 0xFEA7, 0xF00E, 0xFEAD, 0xF00E, 0xFEB3,
0xF00D, 0xFEBA, 0xF00D, 0xFEC0, 0xF00C, 0xFEC6, 0xF00C, 0xFECC, 0xF00B, 0xFED3,
0xF00B, 0xFED9, 0xF00A, 0xFEDF, 0xF00A, 0xFEE5, 0xF009, 0xFEEC, 0xF009, 0xFEF2,
0xF008, 0xFEF8, 0xF008, 0xFEFF, 0xF008, 0xFF05, 0xF007, 0xFF0B, 0xF007, 0xFF11,
0xF007, 0xFF18, 0xF006, 0xFF1E, 0xF006, 0xFF24, 0xF006, 0xFF2A, 0xF005, 0xFF31,
0xF005, 0xFF37, 0xF005, 0xFF3D, 0xF004, 0xFF44, 0xF004, 0xFF4A, 0xF004, 0xFF50,
0xF004, 0xFF56, 0xF003, 0xFF5D, 0xF003, 0xFF63, 0xF003, 0xFF69, 0xF003, 0xFF70,
0xF002, 0xFF76, 0xF002, 0xFF7C, 0xF002, 0xFF82, 0xF002, 0xFF89, 0xF002, 0xFF8F,
0xF001, 0xFF95, 0xF001, 0xFF9B, 0xF001, 0xFFA2, 0xF001, 0xFFA8, 0xF001, 0xFFAE,
0xF001, 0xFFB5, 0xF001, 0xFFBB, 0xF000, 0xFFC1, 0xF000, 0xFFC7, 0xF000, 0xFFCE,
0xF000, 0xFFD4, 0xF000, 0xFFDA, 0xF000, 0xFFE1, 0xF000, 0xFFE7, 0xF000, 0xFFED,
0xF000, 0xFFF3, 0xF000, 0xFFFA, 0xF000, 0x0000, 0xF000, 0x0006, 0xF000, 0x000D,
0xF000, 0x0013, 0xF000, 0x0019, 0xF000, 0x001F, 0xF000, 0x0026, 0xF000, 0x002C,
0xF000, 0x0032, 0xF000, 0x0039, 0xF000, 0x003F, 0xF001, 0x0045, 0xF001, 0x004B,
0xF001, 0x0052, 0xF001, 0x0058, 0xF001, 0x005E, 0xF001, 0x0065, 0xF001, 0x006B,
0xF002, 0x0071, 0xF002, 0x0077, 0xF002, 0x007E, 0xF002, 0x0084, 0xF002, 0x008A,
0xF003, 0x0090, 0xF003, 0x0097, 0xF003, 0x009D, 0xF003, 0x00A3, 0xF004, 0x00AA,
0xF004, 0x00B0, 0xF004, 0x00B6, 0xF004, 0x00BC, 0xF005, 0x00C3, 0xF005, 0x00C9,
0xF005, 0x00CF, 0xF006, 0x00D6, 0xF006, 0x00DC, 0xF006, 0x00E2, 0xF007, 0x00E8,
0xF007, 0x00EF, 0xF007, 0x00F5, 0xF008, 0x00FB, 0xF008, 0x0101, 0xF008, 0x0108,
0xF009, 0x010E, 0xF009, 0x0114, 0xF00A, 0x011B, 0xF00A, 0x0121, 0xF00B, 0x0127,
0xF00B, 0x012D, 0xF00C, 0x0134, 0xF00C, 0x013A, 0xF00D, 0x0140, 0xF00D, 0x0146,
0xF00E, 0x014D, 0xF00E, 0x0153, 0xF00F, 0x0159, 0xF00F, 0x015F, 0xF010, 0x0166,
0xF010, 0x016C, 0xF011, 0x0172, 0xF011, 0x0178, 0xF012, 0x017F, 0xF013, 0x0185,
0xF013, 0x018B, 0xF014, 0x0191, 0xF014, 0x0198, 0xF015, 0x019E, 0xF016, 0x01A4,
0xF016, 0x01AA, 0xF017, 0x01B1, 0xF018, 0x01B7, 0xF018, 0x01BD, 0xF019, 0x01C3,
0xF01A, 0x01CA, 0xF01A, 0x01D0, 0xF01B, 0x01D6, 0xF01C, 0x01DC, 0xF01D, 0x01E3,
0xF01D, 0x01E9, 0xF01E, 0x01EF, 0xF01F, 0x01F5, 0xF020, 0x01FC, 0xF020, 0x0202,
0xF021, 0x0208, 0xF022, 0x020E, 0xF023, 0x0215, 0xF024, 0x021B, 0xF024, 0x0221,
0xF025, 0x0227, 0xF026, 0x022D, 0xF027, 0x0234, 0xF028, 0x023A, 0xF029, 0x0240,
0xF02A, 0x0246, 0xF02B, 0x024D, 0xF02B, 0x0253, 0xF02C, 0x0259, 0xF02D, 0x025F,
0xF02E, 0x0265, 0xF02F, 0x026C, 0xF030, 0x0272, 0xF031, 0x0278, 0xF032, 0x027E,
0xF033, 0x0284, 0xF034, 0x028B, 0xF035, 0x0291, 0xF036, 0x0297, 0xF037, 0x029D,
0xF038, 0x02A3, 0xF039, 0x02AA, 0xF03A, 0x02B0, 0xF03B, 0x02B6, 0xF03C, 0x02BC,
0xF03D, 0x02C2, 0xF03E, 0x02C9, 0xF040, 0x02CF, 0xF041, 0x02D5, 0xF042, 0x02DB,
0xF043, 0x02E1, 0xF044, 0x02E8, 0xF045, 0x02EE, 0xF046, 0x02F4, 0xF048, 0x02FA,
0xF049, 0x0300, 0xF04A, 0x0306, 0xF04B, 0x030D, 0xF04C, 0x0313, 0xF04D, 0x0319,
0xF04F, 0x031F, 0xF050, 0x0325, 0xF051, 0x032B, 0xF052, 0x0332, 0xF054, 0x0338,
0xF055, 0x033E, 0xF056, 0x0344, 0xF058, 0x034A, 0xF059, 0x0350, 0xF05A, 0x0356,
0xF05B, 0x035D, 0xF05D, 0x0363, 0xF05E, 0x0369, 0xF05F, 0x036F, 0xF061, 0x0375,
0xF062, 0x037B, 0xF064, 0x0381, 0xF065, 0x0388, 0xF066, 0x038E, 0xF068, 0x0394,
0xF069, 0x039A, 0xF06B, 0x03A0, 0xF06C, 0x03A6, 0xF06D, 0x03AC, 0xF06F, 0x03B2,
0xF070, 0x03B9, 0xF072, 0x03BF, 0xF073, 0x03C5, 0xF075, 0x03CB, 0xF076, 0x03D1,
0xF078, 0x03D7, 0xF079, 0x03DD, 0xF07B, 0x03E3, 0xF07C, 0x03E9, 0xF07E, 0x03EF,
0xF07F, 0x03F6, 0xF081, 0x03FC, 0xF083, 0x0402, 0xF084, 0x0408, 0xF086, 0x040E,
0xF087, 0x0414, 0xF089, 0x041A, 0xF08A, 0x0420, 0xF08C, 0x0426, 0xF08E, 0x042C,
0xF08F, 0x0432, 0xF091, 0x0438, 0xF093, 0x043E, 0xF094, 0x0444, 0xF096, 0x044B,
0xF098, 0x0451, 0xF099, 0x0457, 0xF09B, 0x045D, 0xF09D, 0x0463, 0xF09F, 0x0469,
0xF0A0, 0x046F, 0xF0A2, 0x0475, 0xF0A4, 0x047B, 0xF0A6, 0x0481, 0xF0A7, 0x0487,
0xF0A9, 0x048D, 0xF0AB, 0x0493, 0xF0AD, 0x0499, 0xF0AF, 0x049F, 0xF0B0, 0x04A5,
0xF0B2, 0x04AB, 0xF0B4, 0x04B1, 0xF0B6, 0x04B7, 0xF0B8, 0x04BD, 0xF0BA, 0x04C3,
0xF0BB, 0x04C9, 0xF0BD, 0x04CF, 0xF0BF, 0x04D5, 0xF0C1, 0x04DB, 0xF0C3, 0x04E1,
0xF0C5, 0x04E7, 0xF0C7, 0x04ED, 0xF0C9, 0x04F3, 0xF0CB, 0x04F9, 0xF0CD, 0x04FF,
0xF0CF, 0x0505, 0xF0D1, 0x050B, 0xF0D3, 0x0511, 0xF0D5, 0x0517, 0xF0D7, 0x051D,
0xF0D9, 0x0523, 0xF0DB, 0x0529, 0xF0DD, 0x052F, 0xF0DF, 0x0534, 0xF0E1, 0x053A,
0xF0E3, 0x0540, 0xF0E5, 0x0546, 0xF0E7, 0x054C, 0xF0E9, 0x0552, 0xF0EB, 0x0558,
0xF0ED, 0x055E, 0xF0EF, 0x0564, 0xF0F2, 0x056A, 0xF0F4, 0x0570, 0xF0F6, 0x0576,
0xF0F8, 0x057C, 0xF0FA, 0x0581, 0xF0FC, 0x0587, 0xF0FE, 0x058D, 0xF101, 0x0593,
0xF103, 0x0599, 0xF105, 0x059F, 0xF107, 0x05A5, 0xF109, 0x05AB, 0xF10C, 0x05B1,
0xF10E, 0x05B6, 0xF110, 0x05BC, 0xF112, 0x05C2, 0xF115, 0x05C8, 0xF117, 0x05CE,
0xF119, 0x05D4, 0xF11C, 0x05DA, 0xF11E, 0x05DF, 0xF120, 0x05E5, 0xF123, 0x05EB,
0xF125, 0x05F1, 0xF127, 0x05F7, 0xF12A, 0x05FD, 0xF12C, 0x0602, 0xF12E, 0x0608,
0xF131, 0x060E, 0xF133, 0x0614, 0xF135, 0x061A, 0xF138, 0x061F, 0xF13A, 0x0625,
0xF13D, 0x062B, 0xF13F, 0x0631, 0xF141, 0x0637, 0xF144, 0x063C, 0xF146, 0x0642,
0xF149, 0x0648, 0xF14B, 0x064E, 0xF14E, 0x0654, 0xF150, 0x0659, 0xF153, 0x065F,
0xF155, 0x0665, 0xF158, 0x066B, 0xF15A, 0x0670, 0xF15D, 0x0676, 0xF15F, 0x067C,
0xF162, 0x0682, 0xF165, 0x0687, 0xF167, 0x068D, 0xF16A, 0x0693, 0xF16C, 0x0699,
0xF16F, 0x069E, 0xF171, 0x06A4, 0xF174, 0x06AA, 0xF177, 0x06AF, 0xF179, 0x06B5,
0xF17C, 0x06BB, 0xF17F, 0x06C1, 0xF181, 0x06C6, 0xF184, 0x06CC, 0xF187, 0x06D2,
0xF189, 0x06D7, 0xF18C, 0x06DD, 0xF18F, 0x06E3, 0xF191, 0x06E8, 0xF194, 0x06EE,
0xF197, 0x06F4, 0xF19A, 0x06F9, 0xF19C, 0x06FF, 0xF19F, 0x0705, 0xF1A2, 0x070A,
0xF1A5, 0x0710, 0xF1A7, 0x0715, 0xF1AA, 0x071B, 0xF1AD, 0x0721, 0xF1B0, 0x0726,
0xF1B3, 0x072C, 0xF1B5, 0x0732, 0xF1B8, 0x0737, 0xF1BB, 0x073D, 0xF1BE, 0x0742,
0xF1C1, 0x0748, 0xF1C4, 0x074E, 0xF1C6, 0x0753, 0xF1C9, 0x0759, 0xF1CC, 0x075E,
0xF1CF, 0x0764, 0xF1D2, 0x076A, 0xF1D5, 0x076F, 0xF1D8, 0x0775, 0xF1DB, 0x077A,
0xF1DE, 0x0780, 0xF1E1, 0x0785, 0xF1E4, 0x078B, 0xF1E7, 0x0790, 0xF1EA, 0x0796,
0xF1ED, 0x079B, 0xF1F0, 0x07A1, 0xF1F3, 0x07A6, 0xF1F6, 0x07AC, 0xF1F9, 0x07B2,
0xF1FC, 0x07B7, 0xF1FF, 0x07BD, 0xF202, 0x07C2, 0xF205, 0x07C8, 0xF208, 0x07CD,
0xF20B, 0x07D2, 0xF20E, 0x07D8, 0xF211, 0x07DD, 0xF214, 0x07E3, 0xF217, 0x07E8,
0xF21A, 0x07EE, 0xF21D, 0x07F3, 0xF221, 0x07F9, 0xF224, 0x07FE, 0xF227, 0x0804,
0xF22A, 0x0809, 0xF22D, 0x080E, 0xF230, 0x0814, 0xF234, 0x0819, 0xF237, 0x081F,
0xF23A, 0x0824, 0xF23D, 0x082A, 0xF240, 0x082F, 0xF244, 0x0834, 0xF247, 0x083A,
0xF24A, 0x083F, 0xF24D, 0x0845, 0xF250, 0x084A, 0xF254, 0x084F, 0xF257, 0x0855,
0xF25A, 0x085A, 0xF25E, 0x085F, 0xF261, 0x0865, 0xF264, 0x086A, 0xF267, 0x086F,
0xF26B, 0x0875, 0xF26E, 0x087A, 0xF271, 0x087F, 0xF275, 0x0885, 0xF278, 0x088A,
0xF27B, 0x088F, 0xF27F, 0x0895, 0xF282, 0x089A, 0xF286, 0x089F, 0xF289, 0x08A5,
0xF28C, 0x08AA, 0xF290, 0x08AF, 0xF293, 0x08B4, 0xF297, 0x08BA, 0xF29A, 0x08BF,
0xF29E, 0x08C4, 0xF2A1, 0x08C9, 0xF2A4, 0x08CF, 0xF2A8, 0x08D4, 0xF2AB, 0x08D9,
0xF2AF, 0x08DE, 0xF2B2, 0x08E4, 0xF2B6, 0x08E9, 0xF2B9, 0x08EE, 0xF2BD, 0x08F3,
0xF2C0, 0x08F8, 0xF2C4, 0x08FE, 0xF2C7, 0x0903, 0xF2CB, 0x0908, 0xF2CE, 0x090D,
0xF2D2, 0x0912, 0xF2D6, 0x0918, 0xF2D9, 0x091D, 0xF2DD, 0x0922, 0xF2E0, 0x0927,
0xF2E4, 0x092C, 0xF2E8, 0x0931, 0xF2EB, 0x0937, 0xF2EF, 0x093C, 0xF2F2, 0x0941,
0xF2F6, 0x0946, 0xF2FA, 0x094B, 0xF2FD, 0x0950, 0xF301, 0x0955, 0xF305, 0x095A,
0xF308, 0x095F, 0xF30C, 0x0965, 0xF310, 0x096A, 0xF313, 0x096F, 0xF317, 0x0974,
0xF31B, 0x0979, 0xF31F, 0x097E, 0xF322, 0x0983, 0xF326, 0x0988, 0xF32A, 0x098D,
0xF32E, 0x0992, 0xF331, 0x0997, 0xF335, 0x099C, 0xF339, 0x09A1, 0xF33D, 0x09A6,
0xF340, 0x09AB, 0xF344, 0x09B0, 0xF348, 0x09B5, 0xF34C, 0x09BA, 0xF350, 0x09BF,
0xF354, 0x09C4, 0xF357, 0x09C9, 0xF35B, 0x09CE, 0xF35F, 0x09D3, 0xF363, 0x09D8,
0xF367, 0x09DD, 0xF36B, 0x09E2, 0xF36F, 0x09E7, 0xF372, 0x09EC, 0xF376, 0x09F1,
0xF37A, 0x09F6, 0xF37E, 0x09FB, 0xF382, 0x09FF, 0xF386, 0x0A04, 0xF38A, 0x0A09,
0xF38E, 0x0A0E, 0xF392, 0x0A13, 0xF396, 0x0A18, 0xF39A, 0x0A1D, 0xF39E, 0x0A22,
0xF3A2, 0x0A26, 0xF3A6, 0x0A2B, 0xF3AA, 0x0A30, 0xF3AE, 0x0A35, 0xF3B2, 0x0A3A,
0xF3B6, 0x0A3F, 0xF3BA, 0x0A44, 0xF3BE, 0x0A48, 0xF3C2, 0x0A4D, 0xF3C6, 0x0A52,
0xF3CA, 0x0A57, 0xF3CE, 0x0A5C, 0xF3D2, 0x0A60, 0xF3D6, 0x0A65, 0xF3DA, 0x0A6A,
0xF3DE, 0x0A6F, 0xF3E2, 0x0A73, 0xF3E7, 0x0A78, 0xF3EB, 0x0A7D, 0xF3EF, 0x0A82,
0xF3F3, 0x0A86, 0xF3F7, 0x0A8B, 0xF3FB, 0x0A90, 0xF3FF, 0x0A95, 0xF404, 0x0A99,
0xF408, 0x0A9E, 0xF40C, 0x0AA3, 0xF410, 0x0AA7, 0xF414, 0x0AAC, 0xF418, 0x0AB1,
0xF41D, 0x0AB5, 0xF421, 0x0ABA, 0xF425, 0x0ABF, 0xF429, 0x0AC3, 0xF42E, 0x0AC8,
0xF432, 0x0ACD, 0xF436, 0x0AD1, 0xF43A, 0x0AD6, 0xF43F, 0x0ADB, 0xF443, 0x0ADF,
0xF447, 0x0AE4, 0xF44B, 0x0AE8, 0xF450, 0x0AED, 0xF454, 0x0AF2, 0xF458, 0x0AF6,
0xF45D, 0x0AFB, 0xF461, 0x0AFF, 0xF465, 0x0B04, 0xF469, 0x0B08, 0xF46E, 0x0B0D,
0xF472, 0x0B11, 0xF477, 0x0B16, 0xF47B, 0x0B1B, 0xF47F, 0x0B1F, 0xF484, 0x0B24,
0xF488, 0x0B28, 0xF48C, 0x0B2D, 0xF491, 0x0B31, 0xF495, 0x0B36, 0xF49A, 0x0B3A,
0xF49E, 0x0B3E, 0xF4A2, 0x0B43, 0xF4A7, 0x0B47, 0xF4AB, 0x0B4C, 0xF4B0, 0x0B50,
0xF4B4, 0x0B55, 0xF4B9, 0x0B59, 0xF4BD, 0x0B5E, 0xF4C2, 0x0B62, 0xF4C6, 0x0B66,
0xF4CA, 0x0B6B, 0xF4CF, 0x0B6F, 0xF4D3, 0x0B74, 0xF4D8, 0x0B78, 0xF4DC, 0x0B7C,
0xF4E1, 0x0B81, 0xF4E5, 0x0B85, 0xF4EA, 0x0B89, 0xF4EF, 0x0B8E, 0xF4F3, 0x0B92,
0xF4F8, 0x0B97, 0xF4FC, 0x0B9B, 0xF501, 0x0B9F, 0xF505, 0x0BA3, 0xF50A, 0x0BA8,
0xF50E, 0x0BAC, 0xF513, 0x0BB0, 0xF518, 0x0BB5, 0xF51C, 0x0BB9, 0xF521, 0x0BBD,
0xF525, 0x0BC1, 0xF52A, 0x0BC6, 0xF52F, 0x0BCA, 0xF533, 0x0BCE, 0xF538, 0x0BD2,
0xF53D, 0x0BD7, 0xF541, 0x0BDB, 0xF546, 0x0BDF, 0xF54B, 0x0BE3, 0xF54F, 0x0BE8,
0xF554, 0x0BEC, 0xF559, 0x0BF0, 0xF55D, 0x0BF4, 0xF562, 0x0BF8, 0xF567, 0x0BFC,
0xF56B, 0x0C01, 0xF570, 0x0C05, 0xF575, 0x0C09, 0xF57A, 0x0C0D, 0xF57E, 0x0C11,
0xF583, 0x0C15, 0xF588, 0x0C19, 0xF58D, 0x0C1E, 0xF591, 0x0C22, 0xF596, 0x0C26,
0xF59B, 0x0C2A, 0xF5A0, 0x0C2E, 0xF5A4, 0x0C32, 0xF5A9, 0x0C36, 0xF5AE, 0x0C3A,
0xF5B3, 0x0C3E, 0xF5B8, 0x0C42, 0xF5BC, 0x0C46, 0xF5C1, 0x0C4A, 0xF5C6, 0x0C4E,
0xF5CB, 0x0C52, 0xF5D0, 0x0C56, 0xF5D5, 0x0C5A, 0xF5DA, 0x0C5E, 0xF5DE, 0x0C62,
0xF5E3, 0x0C66, 0xF5E8, 0x0C6A, 0xF5ED, 0x0C6E, 0xF5F2, 0x0C72, 0xF5F7, 0x0C76,
0xF5FC, 0x0C7A, 0xF601, 0x0C7E, 0xF605, 0x0C82, 0xF60A, 0x0C86, 0xF60F, 0x0C8A,
0xF614, 0x0C8E, 0xF619, 0x0C91, 0xF61E, 0x0C95, 0xF623, 0x0C99, 0xF628, 0x0C9D,
0xF62D, 0x0CA1, 0xF632, 0x0CA5, 0xF637, 0x0CA9, 0xF63C, 0x0CAC, 0xF641, 0x0CB0,
0xF646, 0x0CB4, 0xF64B, 0x0CB8, 0xF650, 0x0CBC, 0xF655, 0x0CC0, 0xF65A, 0x0CC3,
0xF65F, 0x0CC7, 0xF664, 0x0CCB, 0xF669, 0x0CCF, 0xF66E, 0x0CD2, 0xF673, 0x0CD6,
0xF678, 0x0CDA, 0xF67D, 0x0CDE, 0xF682, 0x0CE1, 0xF687, 0x0CE5, 0xF68C, 0x0CE9,
0xF691, 0x0CED, 0xF696, 0x0CF0, 0xF69B, 0x0CF4, 0xF6A1, 0x0CF8, 0xF6A6, 0x0CFB,
0xF6AB, 0x0CFF, 0xF6B0, 0x0D03, 0xF6B5, 0x0D06, 0xF6BA, 0x0D0A, 0xF6BF, 0x0D0E,
0xF6C4, 0x0D11, 0xF6C9, 0x0D15, 0xF6CF, 0x0D18, 0xF6D4, 0x0D1C, 0xF6D9, 0x0D20,
0xF6DE, 0x0D23, 0xF6E3, 0x0D27, 0xF6E8, 0x0D2A, 0xF6EE, 0x0D2E, 0xF6F3, 0x0D32,
0xF6F8, 0x0D35, 0xF6FD, 0x0D39, 0xF702, 0x0D3C, 0xF708, 0x0D40, 0xF70D, 0x0D43,
0xF712, 0x0D47, 0xF717, 0x0D4A, 0xF71C, 0x0D4E, 0xF722, 0x0D51, 0xF727, 0x0D55,
0xF72C, 0x0D58, 0xF731, 0x0D5C, 0xF737, 0x0D5F, 0xF73C, 0x0D62, 0xF741, 0x0D66,
0xF746, 0x0D69, 0xF74C, 0x0D6D, 0xF751, 0x0D70, 0xF756, 0x0D74, 0xF75B, 0x0D77,
0xF761, 0x0D7A, 0xF766, 0x0D7E, 0xF76B, 0x0D81, 0xF771, 0x0D85, 0xF776, 0x0D88,
0xF77B, 0x0D8B, 0xF781, 0x0D8F, 0xF786, 0x0D92, 0xF78B, 0x0D95, 0xF791, 0x0D99,
0xF796, 0x0D9C, 0xF79B, 0x0D9F, 0xF7A1, 0x0DA2, 0xF7A6, 0x0DA6, 0xF7AB, 0x0DA9,
0xF7B1, 0x0DAC, 0xF7B6, 0x0DB0, 0xF7BB, 0x0DB3, 0xF7C1, 0x0DB6, 0xF7C6, 0x0DB9,
0xF7CC, 0x0DBC, 0xF7D1, 0x0DC0, 0xF7D6, 0x0DC3, 0xF7DC, 0x0DC6, 0xF7E1, 0x0DC9,
0xF7E7, 0x0DCC, 0xF7EC, 0x0DD0, 0xF7F2, 0x0DD3, 0xF7F7, 0x0DD6, 0xF7FC, 0x0DD9,
0xF802, 0x0DDC, 0xF807, 0x0DDF, 0xF80D, 0x0DE3, 0xF812, 0x0DE6, 0xF818, 0x0DE9,
0xF81D, 0x0DEC, 0xF823, 0x0DEF, 0xF828, 0x0DF2, 0xF82E, 0x0DF5, 0xF833, 0x0DF8,
0xF838, 0x0DFB, 0xF83E, 0x0DFE, 0xF843, 0x0E01, 0xF849, 0x0E04, 0xF84E, 0x0E07,
0xF854, 0x0E0A, 0xF85A, 0x0E0D, 0xF85F, 0x0E10, 0xF865, 0x0E13, 0xF86A, 0x0E16,
0xF870, 0x0E19, 0xF875, 0x0E1C, 0xF87B, 0x0E1F, 0xF880, 0x0E22, 0xF886, 0x0E25,
0xF88B, 0x0E28, 0xF891, 0x0E2B, 0xF896, 0x0E2E, 0xF89C, 0x0E31, 0xF8A2, 0x0E34,
0xF8A7, 0x0E37, 0xF8AD, 0x0E3A, 0xF8B2, 0x0E3C, 0xF8B8, 0x0E3F, 0xF8BE, 0x0E42,
0xF8C3, 0x0E45, 0xF8C9, 0x0E48, 0xF8CE, 0x0E4B, 0xF8D4, 0x0E4D, 0xF8DA, 0x0E50,
0xF8DF, 0x0E53, 0xF8E5, 0x0E56, 0xF8EB, 0x0E59, 0xF8F0, 0x0E5B, 0xF8F6, 0x0E5E,
0xF8FB, 0x0E61, 0xF901, 0x0E64, 0xF907, 0x0E66, 0xF90C, 0x0E69, 0xF912, 0x0E6C,
0xF918, 0x0E6F, 0xF91D, 0x0E71, 0xF923, 0x0E74, 0xF929, 0x0E77, 0xF92E, 0x0E79,
0xF934, 0x0E7C, 0xF93A, 0x0E7F, 0xF93F, 0x0E81, 0xF945, 0x0E84, 0xF94B, 0x0E87,
0xF951, 0x0E89, 0xF956, 0x0E8C, 0xF95C, 0x0E8F, 0xF962, 0x0E91, 0xF967, 0x0E94,
0xF96D, 0x0E96, 0xF973, 0x0E99, 0xF979, 0x0E9B, 0xF97E, 0x0E9E, 0xF984, 0x0EA1,
0xF98A, 0x0EA3, 0xF990, 0x0EA6, 0xF995, 0x0EA8, 0xF99B, 0x0EAB, 0xF9A1, 0x0EAD,
0xF9A7, 0x0EB0, 0xF9AC, 0x0EB2, 0xF9B2, 0x0EB5, 0xF9B8, 0x0EB7, 0xF9BE, 0x0EBA,
0xF9C4, 0x0EBC, 0xF9C9, 0x0EBF, 0xF9CF, 0x0EC1, 0xF9D5, 0x0EC3, 0xF9DB, 0x0EC6,
0xF9E1, 0x0EC8, 0xF9E6, 0x0ECB, 0xF9EC, 0x0ECD, 0xF9F2, 0x0ECF, 0xF9F8, 0x0ED2,
0xF9FE, 0x0ED4, 0xFA03, 0x0ED6, 0xFA09, 0x0ED9, 0xFA0F, 0x0EDB, 0xFA15, 0x0EDD,
0xFA1B, 0x0EE0, 0xFA21, 0x0EE2, 0xFA26, 0x0EE4, 0xFA2C, 0x0EE7, 0xFA32, 0x0EE9,
0xFA38, 0x0EEB, 0xFA3E, 0x0EEE, 0xFA44, 0x0EF0, 0xFA4A, 0x0EF2, 0xFA4F, 0x0EF4,
0xFA55, 0x0EF7, 0xFA5B, 0x0EF9, 0xFA61, 0x0EFB, 0xFA67, 0x0EFD, 0xFA6D, 0x0EFF,
0xFA73, 0x0F02, 0xFA79, 0x0F04, 0xFA7F, 0x0F06, 0xFA84, 0x0F08, 0xFA8A, 0x0F0A,
0xFA90, 0x0F0C, 0xFA96, 0x0F0E, 0xFA9C, 0x0F11, 0xFAA2, 0x0F13, 0xFAA8, 0x0F15,
0xFAAE, 0x0F17, 0xFAB4, 0x0F19, 0xFABA, 0x0F1B, 0xFAC0, 0x0F1D, 0xFAC6, 0x0F1F,
0xFACC, 0x0F21, 0xFAD1, 0x0F23, 0xFAD7, 0x0F25, 0xFADD, 0x0F27, 0xFAE3, 0x0F29,
0xFAE9, 0x0F2B, 0xFAEF, 0x0F2D, 0xFAF5, 0x0F2F, 0xFAFB, 0x0F31, 0xFB01, 0x0F33,
0xFB07, 0x0F35, 0xFB0D, 0x0F37, 0xFB13, 0x0F39, 0xFB19, 0x0F3B, 0xFB1F, 0x0F3D,
0xFB25, 0x0F3F, 0xFB2B, 0x0F41, 0xFB31, 0x0F43, 0xFB37, 0x0F45, 0xFB3D, 0x0F46,
0xFB43, 0x0F48, 0xFB49, 0x0F4A, 0xFB4F, 0x0F4C, 0xFB55, 0x0F4E, 0xFB5B, 0x0F50,
0xFB61, 0x0F51, 0xFB67, 0x0F53, 0xFB6D, 0x0F55, 0xFB73, 0x0F57, 0xFB79, 0x0F59,
0xFB7F, 0x0F5A, 0xFB85, 0x0F5C, 0xFB8B, 0x0F5E, 0xFB91, 0x0F60, 0xFB97, 0x0F61,
0xFB9D, 0x0F63, 0xFBA3, 0x0F65, 0xFBA9, 0x0F67, 0xFBAF, 0x0F68, 0xFBB5, 0x0F6A,
0xFBBC, 0x0F6C, 0xFBC2, 0x0F6D, 0xFBC8, 0x0F6F, 0xFBCE, 0x0F71, 0xFBD4, 0x0F72,
0xFBDA, 0x0F74, 0xFBE0, 0x0F76, 0xFBE6, 0x0F77, 0xFBEC, 0x0F79, 0xFBF2, 0x0F7A,
0xFBF8, 0x0F7C, 0xFBFE, 0x0F7D, 0xFC04, 0x0F7F, 0xFC0A, 0x0F81, 0xFC11, 0x0F82,
0xFC17, 0x0F84, 0xFC1D, 0x0F85, 0xFC23, 0x0F87, 0xFC29, 0x0F88, 0xFC2F, 0x0F8A,
0xFC35, 0x0F8B, 0xFC3B, 0x0F8D, 0xFC41, 0x0F8E, 0xFC47, 0x0F90, 0xFC4E, 0x0F91,
0xFC54, 0x0F93, 0xFC5A, 0x0F94, 0xFC60, 0x0F95, 0xFC66, 0x0F97, 0xFC6C, 0x0F98,
0xFC72, 0x0F9A, 0xFC78, 0x0F9B, 0xFC7F, 0x0F9C, 0xFC85, 0x0F9E, 0xFC8B, 0x0F9F,
0xFC91, 0x0FA1, 0xFC97, 0x0FA2, 0xFC9D, 0x0FA3, 0xFCA3, 0x0FA5, 0xFCAA, 0x0FA6,
0xFCB0, 0x0FA7, 0xFCB6, 0x0FA8, 0xFCBC, 0x0FAA, 0xFCC2, 0x0FAB, 0xFCC8, 0x0FAC,
0xFCCE, 0x0FAE, 0xFCD5, 0x0FAF, 0xFCDB, 0x0FB0, 0xFCE1, 0x0FB1, 0xFCE7, 0x0FB3,
0xFCED, 0x0FB4, 0xFCF3, 0x0FB5, 0xFCFA, 0x0FB6, 0xFD00, 0x0FB7, 0xFD06, 0x0FB8,
0xFD0C, 0x0FBA, 0xFD12, 0x0FBB, 0xFD18, 0x0FBC, 0xFD1F, 0x0FBD, 0xFD25, 0x0FBE,
0xFD2B, 0x0FBF, 0xFD31, 0x0FC0, 0xFD37, 0x0FC2, 0xFD3E, 0x0FC3, 0xFD44, 0x0FC4,
0xFD4A, 0x0FC5, 0xFD50, 0x0FC6, 0xFD56, 0x0FC7, 0xFD5D, 0x0FC8, 0xFD63, 0x0FC9,
0xFD69, 0x0FCA, 0xFD6F, 0x0FCB, 0xFD75, 0x0FCC, 0xFD7C, 0x0FCD, 0xFD82, 0x0FCE,
0xFD88, 0x0FCF, 0xFD8E, 0x0FD0, 0xFD94, 0x0FD1, 0xFD9B, 0x0FD2, 0xFDA1, 0x0FD3,
0xFDA7, 0x0FD4, 0xFDAD, 0x0FD5, 0xFDB3, 0x0FD5, 0xFDBA, 0x0FD6, 0xFDC0, 0x0FD7,
0xFDC6, 0x0FD8, 0xFDCC, 0x0FD9, 0xFDD3, 0x0FDA, 0xFDD9, 0x0FDB, 0xFDDF, 0x0FDC,
0xFDE5, 0x0FDC, 0xFDEB, 0x0FDD, 0xFDF2, 0x0FDE, 0xFDF8, 0x0FDF, 0xFDFE, 0x0FE0,
0xFE04, 0x0FE0, 0xFE0B, 0x0FE1, 0xFE11, 0x0FE2, 0xFE17, 0x0FE3, 0xFE1D, 0x0FE3,
0xFE24, 0x0FE4, 0xFE2A, 0x0FE5, 0xFE30, 0x0FE6, 0xFE36, 0x0FE6, 0xFE3D, 0x0FE7,
0xFE43, 0x0FE8, 0xFE49, 0x0FE8, 0xFE4F, 0x0FE9, 0xFE56, 0x0FEA, 0xFE5C, 0x0FEA,
0xFE62, 0x0FEB, 0xFE68, 0x0FEC, 0xFE6F, 0x0FEC, 0xFE75, 0x0FED, 0xFE7B, 0x0FED,
0xFE81, 0x0FEE, 0xFE88, 0x0FEF, 0xFE8E, 0x0FEF, 0xFE94, 0x0FF0, 0xFE9A, 0x0FF0,
0xFEA1, 0x0FF1, 0xFEA7, 0x0FF1, 0xFEAD, 0x0FF2, 0xFEB3, 0x0FF2, 0xFEBA, 0x0FF3,
0xFEC0, 0x0FF3, 0xFEC6, 0x0FF4, 0xFECC, 0x0FF4, 0xFED3, 0x0FF5, 0xFED9, 0x0FF5,
0xFEDF, 0x0FF6, 0xFEE5, 0x0FF6, 0xFEEC, 0x0FF7, 0xFEF2, 0x0FF7, 0xFEF8, 0x0FF8,
0xFEFF, 0x0FF8, 0xFF05, 0x0FF8, 0xFF0B, 0x0FF9, 0xFF11, 0x0FF9, 0xFF18, 0x0FF9,
0xFF1E, 0x0FFA, 0xFF24, 0x0FFA, 0xFF2A, 0x0FFA, 0xFF31, 0x0FFB, 0xFF37, 0x0FFB,
0xFF3D, 0x0FFB, 0xFF44, 0x0FFC, 0xFF4A, 0x0FFC, 0xFF50, 0x0FFC, 0xFF56, 0x0FFC,
0xFF5D, 0x0FFD, 0xFF63, 0x0FFD, 0xFF69, 0x0FFD, 0xFF70, 0x0FFD, 0xFF76, 0x0FFE,
0xFF7C, 0x0FFE, 0xFF82, 0x0FFE, 0xFF89, 0x0FFE, 0xFF8F, 0x0FFE, 0xFF95, 0x0FFF,
0xFF9B, 0x0FFF, 0xFFA2, 0x0FFF, 0xFFA8, 0x0FFF, 0xFFAE, 0x0FFF, 0xFFB5, 0x0FFF,
0xFFBB, 0x0FFF, 0xFFC1, 0x1000, 0xFFC7, 0x1000, 0xFFCE, 0x1000, 0xFFD4, 0x1000,
0xFFDA, 0x1000, 0xFFE1, 0x1000, 0xFFE7, 0x1000, 0xFFED, 0x1000, 0xFFF3, 0x1000,
0xFFFA, 0x1000,
};
// TODO: to game vars
// decompiled code
// original method signature:
// void /*$ra*/ ClearMem(char *mem /*$a0*/, int size /*$a1*/)
// line 389, offset 0x0007f3e8
/* begin block 1 */
// Start line: 390
// Start offset: 0x0007F3E8
// Variables:
// char *end; // $v1
/* end block 1 */
// End offset: 0x0007F47C
// End Line: 416
/* begin block 2 */
// Start line: 2270
/* end block 2 */
// End Line: 2271
/* begin block 3 */
// Start line: 778
/* end block 3 */
// End Line: 779
/* begin block 4 */
// Start line: 2273
/* end block 4 */
// End Line: 2274
// [D]
void ClearMem(char *mem, int size)
{
// 16 bit aligned clear
#ifndef PSX
memset(mem, 0, size);
#else
char *end;
end = mem + size;
while ((((uint)mem & 3) != 0 && (mem < end))) {
*mem = 0;
mem = (char *)((int)mem + 1);
}
while (mem <= end + -0x10) {
*(uint *)mem = 0;
((uint *)mem)[1] = 0;
((uint *)mem)[2] = 0;
((uint *)mem)[3] = 0;
mem = (char *)((uint *)mem + 4);
}
while (mem <= end + -4) {
*(uint *)mem = 0;
mem = (char *)((uint *)mem + 1);
}
while (mem < end) {
*mem = 0;
mem = (char *)((int)mem + 1);
}
#endif // !PSX
}
// decompiled code
// original method signature:
// void /*$ra*/ setMem8(unsigned char *mem /*$a0*/, unsigned char val /*$a1*/, int size /*$a2*/)
// line 427, offset 0x0007f47c
/* begin block 1 */
// Start line: 428
// Start offset: 0x0007F47C
// Variables:
// unsigned char *end; // $v1
// unsigned long lval; // $a3
/* end block 1 */
// End offset: 0x0007F524
// End Line: 459
/* begin block 2 */
// Start line: 2334
/* end block 2 */
// End Line: 2335
/* begin block 3 */
// Start line: 2346
/* end block 3 */
// End Line: 2347
// [D]
void setMem8(unsigned char *mem, unsigned char val, int size)
{
UNIMPLEMENTED();
/*
int *puVar1;
int uVar2;
uVar2 = CONCAT22(CONCAT11(val, val), CONCAT11(val, val));
puVar1 = (int *)(mem + size);
while ((((uint)mem & 3) != 0 && (mem < puVar1))) {
*mem = val;
mem = (unsigned char *)((int)mem + 1);
}
while (mem <= puVar1 + -4) {
*(int *)mem = uVar2;
((int *)mem)[1] = uVar2;
((int *)mem)[2] = uVar2;
((int *)mem)[3] = uVar2;
mem = (unsigned char *)((int *)mem + 4);
}
while (mem <= puVar1 + -1) {
*(int *)mem = uVar2;
mem = (unsigned char *)((int *)mem + 1);
}
while (mem < puVar1) {
*mem = val;
mem = (unsigned char *)((int)mem + 1);
}
return;
*/
}
// decompiled code
// original method signature:
// void /*$ra*/ setMem16(unsigned short *mem /*$a0*/, unsigned short val /*$a1*/, int size /*$a2*/)
// line 469, offset 0x0007f524
/* begin block 1 */
// Start line: 470
// Start offset: 0x0007F524
// Variables:
// unsigned short *end; // $a3
// unsigned long lval; // $a2
/* end block 1 */
// End offset: 0x0007F5B4
// End Line: 495
/* begin block 2 */
// Start line: 2424
/* end block 2 */
// End Line: 2425
/* begin block 3 */
// Start line: 2435
/* end block 3 */
// End Line: 2436
void setMem16(ushort *mem, ushort val, int size)
{
UNIMPLEMENTED();
/*
bool bVar1;
int uVar2;
int *puVar3;
puVar3 = (int *)(mem + size);
uVar2 = CONCAT22(val, val);
if (((uint)mem & 2) != 0) {
bVar1 = mem < puVar3;
do {
if (!bVar1) break;
*mem = val;
mem = (ushort *)((int)mem + 2);
bVar1 = mem < puVar3;
} while (((uint)mem & 2) != 0);
}
while (mem <= puVar3 + -4) {
*(int *)mem = uVar2;
((int *)mem)[1] = uVar2;
((int *)mem)[2] = uVar2;
((int *)mem)[3] = uVar2;
mem = (ushort *)((int *)mem + 4);
}
while (mem < puVar3) {
*mem = val;
mem = (ushort *)((int)mem + 2);
}
return;
*/
}
// decompiled code
// original method signature:
// void /*$ra*/ Init_FileSystem()
// line 580, offset 0x0007f848
/* begin block 1 */
// Start line: 1160
/* end block 1 */
// End Line: 1161
/* begin block 2 */
// Start line: 4149
/* end block 2 */
// End Line: 4150
/* WARNING: Unknown calling convention yet parameter storage is locked */
void Init_FileSystem(void)
{
CdInit();
VSync(3);
return;
}
// decompiled code
// original method signature:
// void /*$ra*/ DoCDRetry()
// line 622, offset 0x0007f870
/* begin block 1 */
// Start line: 624
// Start offset: 0x0007F870
// Variables:
// static int retries; // offset 0xc
// unsigned char result[8]; // stack offset -16
/* end block 1 */
// End offset: 0x0007F8B8
// End Line: 633
/* begin block 2 */
// Start line: 4231
/* end block 2 */
// End Line: 4232
/* begin block 3 */
// Start line: 4232
/* end block 3 */
// End Line: 4233
/* begin block 4 */
// Start line: 4235
/* end block 4 */
// End Line: 4236
/* WARNING: Unknown calling convention yet parameter storage is locked */
int gNumCDRetries = 0;
void DoCDRetry(void)
{
bool bVar1;
int iVar2;
iVar2 = gNumCDRetries + 1;
bVar1 = 9 < gNumCDRetries;
gNumCDRetries = iVar2;
if (bVar1) {
CdInit();
VSync(3);
gNumCDRetries = 0;
}
return;
}
// decompiled code
// original method signature:
// int /*$ra*/ Loadfile(char *name /*$a2*/, char *addr /*$s2*/)
// line 646, offset 0x0007f354
/* begin block 1 */
// Start line: 647
// Start offset: 0x0007F354
// Variables:
// char namebuffer[64]; // stack offset -88
// unsigned char result[8]; // stack offset -24
// int nread; // $s0
/* end block 1 */
// End offset: 0x0007F3E8
// End Line: 670
/* begin block 2 */
// Start line: 1292
/* end block 2 */
// End Line: 1293
#include <SDL.h>
// loads whole file into buffer
int Loadfile(char *name, char *addr)
{
char namebuffer[64];
#ifndef PSX
int fileSize = 0;
sprintf(namebuffer, "DRIVER2\\%s", name);
FILE* fptr = fopen(namebuffer, "rb");
if (!fptr)
{
char errPrint[1024];
sprintf(errPrint, "Cannot open '%s'\n", namebuffer);
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "ERROR", errPrint, NULL);
return 0;
}
fseek(fptr, 0, SEEK_END);
fileSize = ftell(fptr);
fseek(fptr, 0, SEEK_SET);
int numRead = fread(addr, 1, fileSize, fptr);
fclose(fptr);
//SDL_Delay(200); // [A] PSX-like CD delay
return numRead;
#else // PSX
UNIMPLEMENTED();
return 0;
/*
int status;
int rstatus;
char filename[64];
unsigned char res[8];
sprintf(filename, "\\DRIVER2\\%s;1", name);
do {
status = CdReadFile(filename, addr, 0);
if (status != 0) {
rstatus = CdReadSync(0, res);
if (rstatus == 0) {
return status;
}
}
status = CdDiskReady(0);
if (status != 2) {
DoCDRetry();
}
} while (true);
*/
#endif // PSX
}
// decompiled code
// original method signature:
// int /*$ra*/ LoadfileSeg(char *name /*$v0*/, char *addr /*$s1*/, int offset /*$s5*/, int loadsize /*$fp*/)
// line 759, offset 0x0007e9d0
/* begin block 1 */
// Start line: 760
// Start offset: 0x0007E9D0
// Variables:
// char namebuffer[64]; // stack offset -2192
// unsigned char result[8]; // stack offset -2128
// int sector; // $s2
// int nsectors; // $s5
// char sectorbuffer[2048]; // stack offset -2120
// struct CdlFILE info; // stack offset -72
// struct CdlLOC pos; // stack offset -48
// int i; // $a2
// int toload; // $s4
// int first; // $a0
/* end block 1 */
// End offset: 0x0007ECF0
// End Line: 879
/* begin block 2 */
// Start line: 1518
/* end block 2 */
// End Line: 1519
// loads file partially into buffer
int LoadfileSeg(char *name, char *addr, int offset, int loadsize)
{
char namebuffer[64];
#ifndef PSX
int fileSize = 0;
sprintf(namebuffer, "DRIVER2\\%s", name);
FILE* fptr = fopen(namebuffer, "rb");
if (!fptr)
{
char errPrint[1024];
sprintf(errPrint, "Cannot open '%s'\n", namebuffer);
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "ERROR", errPrint, NULL);
return 0;
}
fseek(fptr, 0, SEEK_END);
fileSize = ftell(fptr);
if (loadsize > fileSize)
loadsize = fileSize;
fseek(fptr, offset, SEEK_SET);
int numRead = fread(addr, 1, loadsize, fptr);
fclose(fptr);
//SDL_Delay(200); // [A] PSX-like CD delay
return numRead;
#else // PSX
UNIMPLEMENTED();
sprintf(namebuffer, "\\DRIVER2\\%s;1", name);
/*
int iVar1;
CdlFILE *pCVar2;
int iVar3;
char *pcVar4;
int iVar5;
int iVar6;
uint uVar7;
char acStack2192[64];
unsigned char auStack2128[8];
char local_848[2072];
CdlLOC auStack48;
sprintf(acStack2192, "\\DRIVER2\\%s;1", name);
iVar1 = strcmp(currentfilename, acStack2192);
if (iVar1 != 0) {
strcpy(currentfilename, acStack2192);
while (pCVar2 = CdSearchFile(&currentfileinfo, acStack2192), pCVar2 == (CdlFILE *)0x0) {
DoCDRetry();
}
}
iVar1 = offset;
if (offset < 0) {
iVar1 = offset + 0x7ff;
}
iVar3 = CdPosToInt((CdlLOC *)&currentfileinfo);
iVar3 = (iVar1 >> 0xb) + iVar3;
uVar7 = offset & 0x7ff;
iVar1 = loadsize;
if (uVar7 != 0) {
CdIntToPos(iVar3, &auStack48);
do {
iVar1 = CdDiskReady(0);
if (iVar1 != 2) {
DoCDRetry();
}
iVar1 = CdControlB(2, &auStack48, 0);
} while (((iVar1 == 0) || (iVar1 = CdRead(1, local_848, 0x80), iVar1 == 0)) ||
(iVar1 = CdReadSync(0, auStack2128), iVar1 != 0));
if (loadsize <= (int)(0x800 - uVar7)) {
iVar1 = uVar7 + loadsize;
while ((int)uVar7 < iVar1) {
pcVar4 = local_848 + uVar7;
uVar7 = uVar7 + 1;
*addr = *pcVar4;
addr = addr + 1;
}
return loadsize;
}
iVar1 = loadsize - (0x800 - uVar7);
iVar3 = iVar3 + 1;
if (uVar7 < 0x800) {
do {
pcVar4 = local_848 + uVar7;
uVar7 = uVar7 + 1;
*addr = *pcVar4;
addr = addr + 1;
} while ((int)uVar7 < 0x800);
}
}
iVar6 = iVar1;
if (iVar1 < 0) {
iVar6 = iVar1 + 0x7ff;
}
iVar6 = iVar6 >> 0xb;
if (iVar6 != 0) {
CdIntToPos(iVar3, &auStack48);
iVar3 = iVar3 + iVar6;
do {
iVar5 = CdDiskReady(0);
if (iVar5 != 2) {
DoCDRetry();
}
iVar5 = CdControlB(2, &auStack48, 0);
} while (((iVar5 == 0) || (iVar5 = CdRead(iVar6, addr, 0x80), iVar5 == 0)) ||
(iVar5 = CdReadSync(0, auStack2128), iVar5 != 0));
addr = addr + iVar6 * 0x800;
iVar1 = iVar1 + iVar6 * -0x800;
}
if (0 < iVar1) {
CdIntToPos(iVar3, &auStack48);
do {
iVar3 = CdDiskReady(0);
if (iVar3 != 2) {
DoCDRetry();
}
iVar3 = CdControlB(2, &auStack48, 0);
} while (((iVar3 == 0) || (iVar3 = CdRead(1, local_848, 0x80), iVar3 == 0)) ||
(iVar3 = CdReadSync(0, auStack2128), iVar3 != 0));
iVar3 = 0;
if (0 < iVar1) {
do {
pcVar4 = local_848 + iVar3;
iVar3 = iVar3 + 1;
*addr = *pcVar4;
addr = addr + 1;
} while (iVar3 < iVar1);
}
}
return loadsize;
*/
#endif // PSX
}
// decompiled code
// original method signature:
// void /*$ra*/ ReportMode(int on /*$s0*/)
// line 952, offset 0x0007f8b8
/* begin block 1 */
// Start line: 953
// Start offset: 0x0007F8B8
// Variables:
// static unsigned char param[8]; // offset 0x0
/* end block 1 */
// End offset: 0x0007F8F4
// End Line: 967
/* begin block 2 */
// Start line: 4571
/* end block 2 */
// End Line: 4572
/* begin block 3 */
// Start line: 4891
/* end block 3 */
// End Line: 4892
void ReportMode(int on)
{
UNIMPLEMENTED();
/*
static char param_25 = 0;
int iVar1;
iVar1 = XAPrepared();
if (iVar1 == 0) {
param_25 = 0x80;
if (on != 0) {
param_25 = 0x84;
}
CdControlB(0xe, &param_25, 0);
}
return;*/
}
// decompiled code
// original method signature:
// void /*$ra*/ data_ready()
// line 978, offset 0x0007fa44
/* begin block 1 */
// Start line: 5546
/* end block 1 */
// End Line: 5547
/* begin block 2 */
// Start line: 1956
/* end block 2 */
// End Line: 1957
/* begin block 3 */
// Start line: 5547
/* end block 3 */
// End Line: 5548
/* WARNING: Unknown calling convention yet parameter storage is locked */
static unsigned char endread = 0;
static unsigned char load_complete = 0;
void data_ready(void)
{
UNIMPLEMENTED();
/*
if (endread != '\0') {
CdDataCallback(0);
load_complete = '\x01';
}
return;*/
}
// decompiled code
// original method signature:
// void /*$ra*/ sector_ready(unsigned char intr /*$a0*/, unsigned char *result /*$a1*/)
// line 987, offset 0x0007fa74
/* begin block 1 */
// Start line: 988
// Start offset: 0x0007FA74
/* begin block 1.1 */
// Start line: 1004
// Start offset: 0x0007FAE4
// Variables:
// struct CdlLOC p; // stack offset -16
/* end block 1.1 */
// End offset: 0x0007FB34
// End Line: 1014
/* end block 1 */
// End offset: 0x0007FB44
// End Line: 1015
/* begin block 2 */
// Start line: 5564
/* end block 2 */
// End Line: 5565
static int current_sector = 0; // offset 0xAB27C
static char *current_address = NULL; // offset 0xAB288
static int sectors_left = 0; // offset 0xAB280
static int sectors_read = 0; // offset 0xAB284
static int sectors_this_chunk = 0; // offset 0xAB174
static int sectors_to_read = 0; // offset 0xAB170
void sector_ready(unsigned char intr, unsigned char *result)
{
UNIMPLEMENTED();
/*
int iVar1;
CdlLOC auStack16;
if (intr == '\x01') {
CdGetSector(current_address, 0x200);
current_address = current_address + 0x800;
current_sector = current_sector + 1;
sectors_left = sectors_left + -1;
if (sectors_left == 0) {
endread = '\x01';
CdReadyCallback(0);
CdControlF(9, 0);
}
}
else {
if ((*result & 0x10) != 0) {
CdReadyCallback(0);
do {
iVar1 = CdDiskReady(1);
} while (iVar1 != 2);
CdReadyCallback(sector_ready);
}
CdIntToPos(current_sector, &auStack16);
CdControlF(0x1b, &auStack16);
}
return;
*/
}
// decompiled code
// original method signature:
// void /*$ra*/ loadsectors(char *addr /*$a0*/, int sector /*$v0*/, int nsectors /*$a2*/)
// line 1017, offset 0x0007f904
/* begin block 1 */
// Start line: 1018
// Start offset: 0x0007F904
// Variables:
// struct CdlLOC pos; // stack offset -16
/* end block 1 */
// End offset: 0x0007F984
// End Line: 1035
/* begin block 2 */
// Start line: 5021
/* end block 2 */
// End Line: 5022
/* begin block 3 */
// Start line: 5026
/* end block 3 */
// End Line: 5027
#ifdef PSX
void loadsectors(char *addr, int sector, int nsectors)
{
UNIMPLEMENTED();
/*
CdlLOC auStack16;
load_complete = '\0';
endread = '\0';
current_sector = sector;
sectors_left = nsectors;
current_address = addr;
CdIntToPos(sector, &auStack16);
CdControlF(0x1b, &auStack16);
CdDataCallback(data_ready);
CdReadyCallback(sector_ready);
do {
} while (load_complete == '\0');
ShowLoading();
return;*/
}
#else
// It has to be this way
void loadsectorsPC(char* filename, char* addr, int sector, int nsectors)
{
FILE* fp = fopen(filename, "rb");
if (!fp)
{
char errPrint[512];
sprintf(errPrint, "loadsectorsPC: failed to open '%s'\n", filename);
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "ERROR", errPrint, NULL);
return;
}
fseek(fp, sector * CDSECTOR_SIZE, SEEK_SET);
int numRead = fread(addr, CDSECTOR_SIZE, nsectors, fp);
fclose(fp);
ShowLoading();
}
#endif // PSX
// decompiled code
// original method signature:
// void /*$ra*/ EnableDisplay()
// line 1221, offset 0x0007f984
/* begin block 1 */
// Start line: 1223
// Start offset: 0x0007F984
// Variables:
// int i; // $s1
/* end block 1 */
// End offset: 0x0007F9F0
// End Line: 1230
/* begin block 2 */
// Start line: 5256
/* end block 2 */
// End Line: 5257
/* begin block 3 */
// Start line: 5443
/* end block 3 */
// End Line: 5444
/* begin block 4 */
// Start line: 5444
/* end block 4 */
// End Line: 5445
/* begin block 5 */
// Start line: 5446
/* end block 5 */
// End Line: 5447
/* WARNING: Unknown calling convention yet parameter storage is locked */
// [D]
void EnableDisplay(void)
{
int i;
i = 0;
if (NumPlayers)
{
for (i = 0; i < NumPlayers; i++)
{
ClearOTagR((u_long*)MPBuff[i][0].ot, 0x1080);
ClearOTagR((u_long*)MPBuff[i][1].ot, 0x1080);
}
}
}
// decompiled code
// original method signature:
// void /*$ra*/ DisableDisplay()
// line 1239, offset 0x0007f9f0
/* begin block 1 */
// Start line: 5472
/* end block 1 */
// End Line: 5473
/* begin block 2 */
// Start line: 5482
/* end block 2 */
// End Line: 5483
/* begin block 3 */
// Start line: 5483
/* end block 3 */
// End Line: 5484
/* WARNING: Unknown calling convention yet parameter storage is locked */
void DisableDisplay(void)
{
SetDispMask(0);
return;
}
// decompiled code
// original method signature:
// void /*$ra*/ SwapDrawBuffers()
// line 1253, offset 0x0007f6fc
/* begin block 1 */
// Start line: 1255
// Start offset: 0x0007F6FC
/* end block 1 */
// End offset: 0x0007F7C0
// End Line: 1303
/* begin block 2 */
// Start line: 4524
/* end block 2 */
// End Line: 4525
/* begin block 3 */
// Start line: 2506
/* end block 3 */
// End Line: 2507
/* begin block 4 */
// Start line: 4525
/* end block 4 */
// End Line: 4526
/* begin block 5 */
// Start line: 4535
/* end block 5 */
// End Line: 4536
/* WARNING: Unknown calling convention yet parameter storage is locked */
void SwapDrawBuffers(void)
{
UNIMPLEMENTED();
/*
DrawSync(0);
if (DoNotSwap == 0) {
PutDispEnv(&current->disp);
PutDrawEnv(&current->draw);
}
DoNotSwap = 0;
PutDrawEnv(&current->draw);
DrawOTag(current->ot + 0x107f);
if ((FrameCnt & 1U) == 0) {
current = &DB_000e0938;
last = &MPBuff;
}
else {
current = &MPBuff;
last = &DB_000e0938;
}
ClearOTagR(current->ot, (int)&DAT_00001080);
current->primptr = current->primtab;
return;
*/
}
// decompiled code
// original method signature:
// void /*$ra*/ SwapDrawBuffers2(int player /*$s0*/)
// line 1310, offset 0x0007ecf0
/* begin block 1 */
// Start line: 1311
// Start offset: 0x0007ECF0
// Variables:
// int toggle; // $v1
/* end block 1 */
// End offset: 0x0007EDDC
// End Line: 1340
/* begin block 2 */
// Start line: 2221
/* end block 2 */
// End Line: 2222
/* begin block 3 */
// Start line: 2653
/* end block 3 */
// End Line: 2654
void SwapDrawBuffers2(int player)
{
UNIMPLEMENTED();
/*
uint uVar1;
DrawSync(0);
if (player == 0) {
PutDispEnv(&current->disp);
}
PutDrawEnv(&current->draw);
DrawOTag(current->ot + 0x107f);
if (player == 1) {
uVar1 = FrameCnt & 1;
MPcurrent2 = &MPBuff + (1 - uVar1);
MPlast2 = &MPBuff + uVar1;
PTR_000ab2b4 = (DB *)(&DAT_000e09b8 + (1 - uVar1) * 0x80);
PTR_000ab29c = (DB *)(&DAT_000e09b8 + uVar1 * 0x80);
}
current = (&MPcurrent2)[1 - player];
last = (&MPlast2)[1 - player];
ClearOTagR(current->ot, (int)&DAT_00001080);
current->primptr = current->primtab;
return;
*/
}
// decompiled code
// original method signature:
// void /*$ra*/ UpdatePadData()
// line 1349, offset 0x0007fa10
/* begin block 1 */
// Start line: 5702
/* end block 1 */
// End Line: 5703
/* begin block 2 */
// Start line: 5703
/* end block 2 */
// End Line: 5704
/* WARNING: Unknown calling convention yet parameter storage is locked */
void UpdatePadData(void)
{
UNIMPLEMENTED();
/*
ReadControllers();
paddp = Pads[0].mapnew;
padd = Pads[0].mapped;
return;
*/
}
// decompiled code
// original method signature:
// void /*$ra*/ SetupDrawBuffers()
// line 1364, offset 0x0007eddc
/* begin block 1 */
// Start line: 1366
// Start offset: 0x0007EDDC
// Variables:
// struct RECT rect; // stack offset -24
// int i; // $v1
/* end block 1 */
// End offset: 0x0007EF0C
// End Line: 1411
/* begin block 2 */
// Start line: 2745
/* end block 2 */
// End Line: 2746
/* begin block 3 */
// Start line: 2770
/* end block 3 */
// End Line: 2771
/* begin block 4 */
// Start line: 2771
/* end block 4 */
// End Line: 2772
/* begin block 5 */
// Start line: 2775
/* end block 5 */
// End Line: 2776
/* WARNING: Unknown calling convention yet parameter storage is locked */
void SetupDrawBuffers(void)
{
UNIMPLEMENTED();
/*
DB *pDVar1;
int iVar2;
DB **ppDVar3;
DB *pDVar4;
DB **ppDVar5;
undefined2 local_18;
undefined2 local_16;
undefined2 local_14;
undefined2 local_12;
SetDefDispEnv(0xe0924, 0, 0x100, 0x140, 0x100);
SetDefDispEnv(0xe09a4, 0, 0, 0x140, 0x100);
MPBuff.disp.screen.h = 0x100;
DB_000e0938.disp.screen.h = 0x100;
MPBuff.disp.screen.x = draw_mode_pal.framex;
DB_000e0938.disp.screen.x = draw_mode_pal.framex;
MPBuff.disp.screen.y = draw_mode_pal.framey;
DB_000e0938.disp.screen.y = draw_mode_pal.framey;
if (NoPlayerControl == 0) {
SetupDrawBufferData((uint)NumPlayers);
}
else {
SetupDrawBufferData(1);
}
ppDVar5 = &MPlast2;
pDVar1 = &MPBuff;
pDVar4 = &DB_000e0938;
ppDVar3 = &MPcurrent2;
iVar2 = 1;
do {
*ppDVar5 = pDVar4;
ppDVar5 = ppDVar5 + 1;
pDVar4 = pDVar4 + 2;
*ppDVar3 = pDVar1;
ppDVar3 = ppDVar3 + 1;
iVar2 = iVar2 + -1;
pDVar1 = pDVar1 + 2;
} while (-1 < iVar2);
local_14 = 0x140;
local_18 = 0;
local_16 = 0;
local_12 = 0x200;
current = MPcurrent2;
last = MPlast2;
ClearImage(&local_18, 0, 0, 0);
DrawSync(0);
return;
*/
}
// decompiled code
// original method signature:
// void /*$ra*/ SetupDrawBufferData(int num_players /*stack 0*/)
// line 1429, offset 0x0007ef0c
/* begin block 1 */
// Start line: 1430
// Start offset: 0x0007EF0C
// Variables:
// unsigned long *otpt; // $s2
// unsigned char *primpt; // $s1
// unsigned char *PRIMpt; // $fp
// int x[2]; // stack offset -72
// int y[2]; // stack offset -64
// int i; // $s3
// int j; // $s6
// int toggle; // $s7
// int height; // stack offset -56
/* end block 1 */
// End offset: 0x0007F118
// End Line: 1523
/* begin block 2 */
// Start line: 2915
/* end block 2 */
// End Line: 2916
/* begin block 3 */
// Start line: 2934
/* end block 3 */
// End Line: 2935
void SetupDrawBufferData(int num_players)
{
UNIMPLEMENTED();
/*
bool bVar1;
char *pcVar2;
undefined *puVar3;
int iVar4;
DB *pBuff;
int iVar5;
int local_48[6];
int local_30;
if (num_players == 1) {
local_48[4] = 0x100;
local_48[0] = 0;
local_48[2] = 0;
local_48[1] = 0;
local_48[3] = 0;
}
else {
if (num_players == 2) {
local_48[3] = 0x80;
local_48[4] = 0x7f;
local_48[0] = 0;
local_48[2] = 0;
local_48[1] = 0;
}
else {
while (FrameCnt != 0x78654321) {
trap(0x400);
}
}
}
SetGeomOffset(0xa0, local_48[4] >> 1);
bVar1 = false;
iVar5 = 0;
do {
iVar4 = 0;
local_48[5] = iVar5 + 1;
if (0 < num_players) {
pBuff = &MPBuff;
local_30 = 0xe08bc;
do {
if (bVar1) {
puVar3 = &DAT_000f7200;
pcVar2 = &DAT_00119400;
}
else {
puVar3 = &DAT_000f3000;
pcVar2 = &DAT_000fb400;
}
bVar1 = (bool)(bVar1 ^ 1);
InitaliseDrawEnv(pBuff, local_48[iVar4], local_48[iVar4 + 2], 0x140, local_48[4]);
(&MPBuff)[iVar4 * 2 + iVar5].primtab = pcVar2;
(&MPBuff)[iVar4 * 2 + iVar5].primptr = pcVar2;
*(undefined **)(iVar5 * 0x80 + iVar4 * 0x100 + local_30) = puVar3;
iVar4 = iVar4 + 1;
pBuff = pBuff + 2;
} while (iVar4 < num_players);
}
iVar5 = local_48[5];
} while (local_48[5] < 2);
aspect.m[0][0] = 0x1000;
aspect.m[0][1] = 0;
aspect.m[0][2] = 0;
aspect.m[1][0] = 0;
aspect.m[1][1] = 0x1266;
aspect.m[1][2] = 0;
aspect.m[2][0] = 0;
aspect.m[2][1] = 0;
aspect.m[2][2] = 0x1000;
return;
*/
}
// decompiled code
// original method signature:
// void /*$ra*/ InitaliseDrawEnv(struct DB *pBuff /*$s0*/, int x /*$s4*/, int y /*$s3*/, int w /*$s1*/, int h /*stack 16*/)
// line 1535, offset 0x0007f7c0
/* begin block 1 */
// Start line: 4857
/* end block 1 */
// End Line: 4858
/* begin block 2 */
// Start line: 5090
/* end block 2 */
// End Line: 5091
void InitaliseDrawEnv(DB *pBuff, int x, int y, int w, int h)
{
UNIMPLEMENTED();
/*
SetDefDrawEnv(&pBuff->draw);
SetDefDrawEnv(&pBuff[1].draw, x, y + 0x100, w, h);
pBuff->id = 0;
pBuff[1].id = 1;
(pBuff->draw).dfe = 1;
pBuff[1].draw.dfe = 1;
return;
*/
}
// decompiled code
// original method signature:
// void /*$ra*/ ResetCityType()
// line 1566, offset 0x0007f5b4
/* begin block 1 */
// Start line: 3557
/* end block 1 */
// End Line: 3558
/* begin block 2 */
// Start line: 4629
/* end block 2 */
// End Line: 4630
/* begin block 3 */
// Start line: 4630
/* end block 3 */
// End Line: 4631
/* WARNING: Unknown calling convention yet parameter storage is locked */
// [D]
void ResetCityType(void)
{
lasttype = (CITYTYPE)-1;
lastcity = -1;
#ifndef PSX
g_CurrentLevelFileName[0] = '\0';
#endif // !PSX
}
// decompiled code
// original method signature:
// void /*$ra*/ SetCityType(enum CITYTYPE type /*$a0*/)
// line 1577, offset 0x0007f118
/* begin block 1 */
// Start line: 1578
// Start offset: 0x0007F118
// Variables:
// struct CdlFILE cdfile; // stack offset -120
// struct XYPAIR *info; // $s2
// char namebuffer[64]; // stack offset -96
// unsigned char result[8]; // stack offset -32
// int i; // $a2
// int sector; // $s0
/* end block 1 */
// End offset: 0x0007F338
// End Line: 1655
/* begin block 2 */
// Start line: 3260
/* end block 2 */
// End Line: 3261
/* begin block 3 */
// Start line: 3315
/* end block 3 */
// End Line: 3316
/* begin block 4 */
// Start line: 3317
/* end block 4 */
// End Line: 3318
// [D]
void SetCityType(CITYTYPE type)
{
int *piVar1;
CdlFILE *pCVar2;
int levOfs;
int iVar3;
XYPAIR *cdp;
char *format;
int *piVar4;
CdlFILE fp;
char filename[64];
unsigned char result[8];
if ((type == lasttype) && (GameLevel == (uint)lastcity))
return;
lastcity = GameLevel;
lasttype = type;
#ifndef PSX
// PC code
switch (type)
{
case CITYTYPE_NIGHT:
format = "DRIVER2\\N%s";
break;
case CITYTYPE_MULTI_DAY:
format = "DRIVER2\\M%s";
break;
case CITYTYPE_MULTI_NIGHT:
format = "DRIVER2\\MN%s";
break;
default:
format = "DRIVER2\\%s";
break;
}
sprintf(filename, format, LevelFiles[GameLevel]);
FILE* levFp = fopen(filename, "rb");
if (!levFp)
{
char errPrint[1024];
sprintf(errPrint, "SetCityType: cannot open level '%s'\n", filename);
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "ERROR", errPrint, NULL);
return;
}
// store level name as it's required by loadsectorsPC
strcpy(g_CurrentLevelFileName, filename);
citystart[GameLevel] = 0;
// skip LUMP type (37) and size, it's already hardcoded
fseek(levFp, 8, SEEK_CUR);
fread(citylumps[GameLevel], 1, sizeof(citylumps[GameLevel]), levFp);
fclose(levFp);
#else
switch (type)
{
case CITYTYPE_NIGHT:
format = "\\DRIVER2\\N%s;1";
break;
case CITYTYPE_MULTI_DAY:
format = "\\DRIVER2\\M%s;1";
break;
case CITYTYPE_MULTI_NIGHT:
format = "\\DRIVER2\\MN%s;1";
break;
default:
format = "\\DRIVER2\\%s;1";
break;
}
sprintf(filename, format, LevelFiles[GameLevel]);
LAB_0007f244:
pCVar2 = CdSearchFile(&fp, filename);
while (pCVar2 == NULL)
{
DoCDRetry();
pCVar2 = CdSearchFile(&fp, filename);
}
levOfs = CdPosToInt((CdlLOC *)&fp);
citystart[GameLevel] = levOfs;
do {
do {
iVar3 = CdDiskReady(0);
if (iVar3 != 2) {
DoCDRetry();
}
iVar3 = CdControlB(2, (u_char*)&fp, 0);
} while ((iVar3 == 0) || (iVar3 = CdRead(1, &DAT_000f3000, 0x80), iVar3 == 0));
iVar3 = CdReadSync(0, result);
} while (iVar3 != 0);
iVar3 = 3;
cdp = citylumps[GameLevel];
piVar4 = &DAT_000f3008;
do {
iVar3 = iVar3 + -1;
cdp->x = *piVar4 + levOfs * 0x800;
piVar1 = piVar4 + 1;
piVar4 = piVar4 + 2;
cdp->y = *piVar1;
cdp = cdp + 1;
} while (-1 < iVar3);
#endif // PSX
}
// decompiled code
// original method signature:
// int /*$ra*/ FileExists(char *filename /*$a2*/)
// line 1682, offset 0x0007f5c8
/* begin block 1 */
// Start line: 1683
// Start offset: 0x0007F5C8
// Variables:
// struct CdlFILE cdfile; // stack offset -176
// char namebuffer[128]; // stack offset -152
// unsigned char result[8]; // stack offset -24
// int retries; // $s1
/* end block 1 */
// End offset: 0x0007F640
// End Line: 1708
/* begin block 2 */
// Start line: 4861
/* end block 2 */
// End Line: 4862
// [D]
int FileExists(char *filename)
{
#ifdef PSX
CdlFILE *pCVar1;
int retries;
CdlFILE cdfile;
char namebuffer[128];
sprintf(namebuffer, "\\DRIVER2\\%s;1", filename);
retries = 9;
do {
pCVar1 = CdSearchFile(&cdfile, namebuffer);
if (pCVar1 != (CdlFILE *)0x0) {
return 1;
}
retries--;
DoCDRetry();
} while (retries != -1);
return 0;
#else
char namebuffer[128];
sprintf(namebuffer, "DRIVER2\\%s", filename);
FILE* fp = fopen(namebuffer, "rb");
if (fp)
{
fclose(fp);
return 1;
}
return 0;
#endif // PSX
}
// decompiled code
// original method signature:
// enum CDTYPE /*$ra*/ DiscSwapped(char *filename /*$s1*/)
// line 1723, offset 0x0007f640
/* begin block 1 */
// Start line: 1724
// Start offset: 0x0007F640
// Variables:
// struct CdlFILE cdfile; // stack offset -40
// int ret; // $v1
/* end block 1 */
// End offset: 0x0007F6FC
// End Line: 1762
/* begin block 2 */
// Start line: 4934
/* end block 2 */
// End Line: 4935
/* begin block 3 */
// Start line: 4950
/* end block 3 */
// End Line: 4951
int handle = 0;
CDTYPE DiscSwapped(char *filename)
{
UNIMPLEMENTED();
return CDTYPE_CORRECTDISC;
/*
CDTYPE CVar1;
int iVar2;
CdlFILE CStack40;
iVar2 = CdDiskReady(1);
if (iVar2 == 2) {
iVar2 = CdGetDiskType();
if (iVar2 != 1) {
if (iVar2 < 2) {
if (iVar2 != 0) {
return CDTYPE_DISCERROR;
}
return CDTYPE_NODISC;
}
if (iVar2 != 2) goto LAB_0007f66c;
handle = (int)CdSearchFile(&CStack40, filename);
if ((CdlFILE *)handle != (CdlFILE *)0x0) {
return CDTYPE_CORRECTDISC;
}
}
CVar1 = CDTYPE_WRONGDISC;
}
else {
LAB_0007f66c:
CVar1 = CDTYPE_DISCERROR;
if (iVar2 == 0x10) {
CVar1 = CDTYPE_SHELLOPEN;
}
}
return CVar1;*/
}