From 910008e9e769a3e0ea6e8d8ebd4ef261fc06988b Mon Sep 17 00:00:00 2001 From: John Reiser Date: Wed, 10 Mar 2010 18:58:38 -0800 Subject: [PATCH] Hack on amd64-darwin.dylib-entry.S --- src/stub/amd64-darwin.dylib-entry.h | 455 ++++++++++++------------ src/stub/src/amd64-darwin.dylib-entry.S | 51 ++- src/stub/src/arch/amd64/bxx.S | 5 + 3 files changed, 270 insertions(+), 241 deletions(-) diff --git a/src/stub/amd64-darwin.dylib-entry.h b/src/stub/amd64-darwin.dylib-entry.h index 9c82e981..ea00fb69 100644 --- a/src/stub/amd64-darwin.dylib-entry.h +++ b/src/stub/amd64-darwin.dylib-entry.h @@ -1,5 +1,5 @@ /* amd64-darwin.dylib-entry.h - created from amd64-darwin.dylib-entry.bin, 9549 (0x254d) bytes + created from amd64-darwin.dylib-entry.bin, 9628 (0x259c) bytes This file is part of the UPX executable compressor. @@ -31,14 +31,14 @@ */ -#define STUB_AMD64_DARWIN_DYLIB_ENTRY_SIZE 9549 -#define STUB_AMD64_DARWIN_DYLIB_ENTRY_ADLER32 0xe5dcb7aa -#define STUB_AMD64_DARWIN_DYLIB_ENTRY_CRC32 0x48a6bd27 +#define STUB_AMD64_DARWIN_DYLIB_ENTRY_SIZE 9628 +#define STUB_AMD64_DARWIN_DYLIB_ENTRY_ADLER32 0x4e96d9be +#define STUB_AMD64_DARWIN_DYLIB_ENTRY_CRC32 0x4d9de2fe -unsigned char stub_amd64_darwin_dylib_entry[9549] = { +unsigned char stub_amd64_darwin_dylib_entry[9628] = { /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0, 62, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,136, 24, 0, 0, 0, 0, 0, 0, +/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,216, 24, 0, 0, 0, 0, 0, 0, /* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 22, 0, 19, 0, /* 0x0040 */ 204, 80, 85, 83,232, 0, 0, 0, 0, 85, 83, 81, 82, 72, 1,254, /* 0x0050 */ 86, 72,137,254, 72,137,215, 49,219, 49,201, 72,131,205,255,232, @@ -409,228 +409,233 @@ unsigned char stub_amd64_darwin_dylib_entry[9549] = { /* 0x1720 */ 45, 0, 0, 0, 0, 80, 69, 41,201, 69, 41,192,185, 2, 16, 0, /* 0x1730 */ 0,186, 3, 0, 0, 0,137,198, 41,255,104,197, 0, 0, 0, 88, /* 0x1740 */ 15, 5, 80, 72,137,238, 72,137,197, 72,137,199,185, 0, 0, 0, -/* 0x1750 */ 0,129,233, 0, 0, 0, 0,252,243,164, 72,141,135,133,255,255, +/* 0x1750 */ 0,129,233, 0, 0, 0, 0,252,243,164, 72,141,135, 54,255,255, /* 0x1760 */ 255,255,224, 87, 72,137,218,139, 67,244, 43, 19, 72, 1,208, 72, /* 0x1770 */ 137, 68, 36, 44,139,115,248, 72, 1,214,139, 75,252,243,164, 94, /* 0x1780 */ 72,137,215,173, 72, 1,199,173, 72, 1,198,173, 86, 87,173,133, -/* 0x1790 */ 192,116, 61, 80, 72,137,225, 72,137,250, 72, 1,248, 80,173,137, +/* 0x1790 */ 192,116, 60, 80, 72,137,225, 72,137,250, 72, 1,248, 80,173,137, /* 0x17a0 */ 198, 72,137,193,173, 65,137,192, 72,137,247, 72, 1,241, 81,255, /* 0x17b0 */ 213, 94, 95, 89, 90, 88, 15,182, 72, 9,133,201,116,206, 15,182, -/* 0x17c0 */ 80, 10,139,112, 0, 72,137,215, 72,141, 69, 2,255,208,235,188, -/* 0x17d0 */ 88, 89, 72,141, 87,252,199, 2, 91, 93,195,144,255,226,102,105, -/* 0x17e0 */ 108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 54, 52, 45, -/* 0x17f0 */ 120, 56, 54, 45, 54, 52, 10, 10, 83,101, 99,116,105,111,110,115, -/* 0x1800 */ 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, -/* 0x1810 */ 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, -/* 0x1820 */ 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x1830 */ 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x1840 */ 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, -/* 0x1850 */ 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 77, 65, 67, 72, -/* 0x1860 */ 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, -/* 0x1870 */ 49, 49, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1880 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1890 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 52, 48, -/* 0x18a0 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, -/* 0x18b0 */ 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, -/* 0x18c0 */ 89, 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, -/* 0x18d0 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 54, 54, 32, 32, 48, 48, -/* 0x18e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, -/* 0x18f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1900 */ 32, 32, 48, 48, 48, 48, 48, 48, 53, 49, 32, 32, 50, 42, 42, 48, -/* 0x1910 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, -/* 0x1920 */ 79, 78, 76, 89, 10, 32, 32, 50, 32, 78, 82, 86, 50, 69, 32, 32, -/* 0x1930 */ 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 98, 55, 32, -/* 0x1940 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1950 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1960 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 98, 55, 32, 32, 50, -/* 0x1970 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, -/* 0x1980 */ 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, -/* 0x1990 */ 32, 51, 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x19a0 */ 32, 48, 48, 48, 48, 48, 48, 57,101, 32, 32, 48, 48, 48, 48, 48, -/* 0x19b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, -/* 0x19c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, -/* 0x19d0 */ 48, 48, 48, 48, 49, 54,101, 32, 32, 50, 42, 42, 48, 32, 32, 67, -/* 0x19e0 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, -/* 0x19f0 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, 86, -/* 0x1a00 */ 50, 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, -/* 0x1a10 */ 48, 57, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1a20 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1a30 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 50, 48, -/* 0x1a40 */ 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, -/* 0x1a50 */ 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, -/* 0x1a60 */ 76, 89, 10, 32, 32, 53, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, -/* 0x1a70 */ 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 54, 52, 32, 32, 48, -/* 0x1a80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x1a90 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1aa0 */ 48, 32, 32, 48, 48, 48, 48, 48, 50, 57, 99, 32, 32, 50, 42, 42, -/* 0x1ab0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, -/* 0x1ac0 */ 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, -/* 0x1ad0 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32, 32, 48, -/* 0x1ae0 */ 48, 48, 48, 48, 57,102, 55, 32, 32, 48, 48, 48, 48, 48, 48, 48, -/* 0x1af0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, -/* 0x1b00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, -/* 0x1b10 */ 48, 48, 51, 48, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, -/* 0x1b20 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, -/* 0x1b30 */ 32, 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, -/* 0x1b40 */ 32, 32, 48, 48, 48, 48, 48, 57,102, 55, 32, 32, 48, 48, 48, 48, -/* 0x1b50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, -/* 0x1b60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, -/* 0x1b70 */ 48, 48, 48, 48, 48, 99,102, 55, 32, 32, 50, 42, 42, 48, 32, 32, -/* 0x1b80 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, -/* 0x1b90 */ 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, -/* 0x1ba0 */ 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 49, 52, 32, 32, 48, -/* 0x1bb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x1bc0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1bd0 */ 48, 32, 32, 48, 48, 48, 48, 49, 54,101,101, 32, 32, 50, 42, 42, -/* 0x1be0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, -/* 0x1bf0 */ 68, 79, 78, 76, 89, 10, 32, 32, 57, 32, 78, 82, 86, 95, 84, 65, -/* 0x1c00 */ 73, 76, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c10 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c20 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c30 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 48, 50, 32, 32, -/* 0x1c40 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, -/* 0x1c50 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48, 32, 77, 65, 67, -/* 0x1c60 */ 72, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, -/* 0x1c70 */ 48, 49, 49, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c80 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1c90 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 48, -/* 0x1ca0 */ 50, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, -/* 0x1cb0 */ 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 49, 32, -/* 0x1cc0 */ 77, 65, 67, 72, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 48, 48, -/* 0x1cd0 */ 48, 48, 48, 48, 99, 98, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1ce0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, -/* 0x1cf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, -/* 0x1d00 */ 49, 55, 49, 51, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, -/* 0x1d10 */ 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, -/* 0x1d20 */ 68, 79, 78, 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, -/* 0x1d30 */ 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1d40 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, -/* 0x1d50 */ 72, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1d60 */ 48, 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, -/* 0x1d70 */ 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1d80 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, -/* 0x1d90 */ 69, 65, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1da0 */ 48, 48, 48, 48, 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, 48, -/* 0x1db0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, -/* 0x1dc0 */ 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, -/* 0x1dd0 */ 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1de0 */ 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, -/* 0x1df0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, -/* 0x1e00 */ 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, -/* 0x1e10 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1e20 */ 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, -/* 0x1e30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, -/* 0x1e40 */ 32, 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 9, 48, -/* 0x1e50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x1e60 */ 77, 65, 67, 72, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, -/* 0x1e70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, -/* 0x1e80 */ 100, 32, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, -/* 0x1e90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, -/* 0x1ea0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1eb0 */ 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, -/* 0x1ec0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, -/* 0x1ed0 */ 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1ee0 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, -/* 0x1ef0 */ 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1f00 */ 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, -/* 0x1f10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, -/* 0x1f20 */ 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, -/* 0x1f30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1f40 */ 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, -/* 0x1f50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, -/* 0x1f60 */ 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, -/* 0x1f70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1f80 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, -/* 0x1f90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, -/* 0x1fa0 */ 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, -/* 0x1fb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x1fc0 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, -/* 0x1fd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, -/* 0x1fe0 */ 32, 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, -/* 0x1ff0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, -/* 0x2000 */ 82, 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2010 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, -/* 0x2020 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, -/* 0x2030 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, 97, -/* 0x2040 */ 114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2050 */ 48, 49, 49, 32,103, 32, 32, 32, 32, 32, 32, 32, 77, 65, 67, 72, -/* 0x2060 */ 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2070 */ 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, 99,111,109, -/* 0x2080 */ 112,114,101,115,115, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, -/* 0x2090 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 77, -/* 0x20a0 */ 65, 67, 72, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, -/* 0x20b0 */ 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, -/* 0x20c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, -/* 0x20d0 */ 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x20e0 */ 48, 48, 48, 53, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, -/* 0x20f0 */ 51, 50, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, -/* 0x2100 */ 43, 48,120,102,102,102,102,102,102,102,102,102,102,102,102,102, -/* 0x2110 */ 102,102, 99, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, -/* 0x2120 */ 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, -/* 0x2130 */ 50, 69, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, -/* 0x2140 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, -/* 0x2150 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, -/* 0x2160 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 97,101, 32, 82, -/* 0x2170 */ 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, -/* 0x2180 */ 32, 78, 82, 86, 95, 72, 69, 65, 68, 43, 48,120, 48, 48, 48, 48, -/* 0x2190 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 49, 10, 48, 48, 48, -/* 0x21a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 98, 32, 82, 95, -/* 0x21b0 */ 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, -/* 0x21c0 */ 77, 65, 67, 72, 77, 65, 73, 78, 89, 43, 48,120,102,102,102,102, -/* 0x21d0 */ 102,102,102,102,102,102,102,102,102,102,102, 99, 10, 10, 82, 69, -/* 0x21e0 */ 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, -/* 0x21f0 */ 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 68, 93, 58, 10, 79, 70, -/* 0x2200 */ 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, -/* 0x2210 */ 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, -/* 0x2220 */ 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2230 */ 48, 48, 48, 48, 48, 57, 53, 32, 82, 95, 88, 56, 54, 95, 54, 52, -/* 0x2240 */ 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 78, 82, 86, 95, 72, 69, -/* 0x2250 */ 65, 68, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2260 */ 48, 48, 48, 50, 49, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -/* 0x2270 */ 48, 48, 48, 48, 53, 98, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, -/* 0x2280 */ 80, 67, 51, 50, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, -/* 0x2290 */ 78, 89, 43, 48,120,102,102,102,102,102,102,102,102,102,102,102, -/* 0x22a0 */ 102,102,102,102, 99, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, -/* 0x22b0 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, -/* 0x22c0 */ 82, 86, 50, 66, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, -/* 0x22d0 */ 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, -/* 0x22e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, -/* 0x22f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, 97, -/* 0x2300 */ 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, -/* 0x2310 */ 32, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 43, 48,120, 48, 48, -/* 0x2320 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 49, 10, 48, -/* 0x2330 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 50, 32, -/* 0x2340 */ 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, -/* 0x2350 */ 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 43, 48,120,102,102, -/* 0x2360 */ 102,102,102,102,102,102,102,102,102,102,102,102,102, 99, 10, 10, -/* 0x2370 */ 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, -/* 0x2380 */ 68, 83, 32, 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 69, 76, 70, -/* 0x2390 */ 48, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, -/* 0x23a0 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, -/* 0x23b0 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, -/* 0x23c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 54, 32, 82, -/* 0x23d0 */ 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, -/* 0x23e0 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 43, 48,120, 48, 48, -/* 0x23f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 48, 10, 10, -/* 0x2400 */ 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, -/* 0x2410 */ 68, 83, 32, 70, 79, 82, 32, 91, 77, 65, 67, 72, 77, 65, 73, 78, -/* 0x2420 */ 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, -/* 0x2430 */ 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, -/* 0x2440 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, -/* 0x2450 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 57, 32, 82, 95, -/* 0x2460 */ 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, -/* 0x2470 */ 77, 65, 67, 72, 77, 65, 73, 78, 90, 43, 48,120, 48, 48, 48, 48, -/* 0x2480 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 99, 98, 10, 48, 48, 48, -/* 0x2490 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,101, 32, 82, 95, -/* 0x24a0 */ 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, -/* 0x24b0 */ 77, 65, 67, 72, 77, 65, 73, 78, 88, 43, 48,120, 48, 48, 48, 48, -/* 0x24c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 57, 10, 48, 48, 48, -/* 0x24d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 51, 97, 32, 82, 95, -/* 0x24e0 */ 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, -/* 0x24f0 */ 77, 65, 67, 72, 77, 65, 73, 78, 90, 43, 48,120, 48, 48, 48, 48, -/* 0x2500 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 99, 98, 10, 48, 48, 48, -/* 0x2510 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 48, 32, 82, 95, -/* 0x2520 */ 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, -/* 0x2530 */ 77, 65, 67, 72, 77, 65, 73, 78, 88, 43, 48,120, 48, 48, 48, 48, -/* 0x2540 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 57, 10 +/* 0x17c0 */ 80, 10,139,112, 0, 72,137,215,232, 16, 0, 0, 0,235,189, 88, +/* 0x17d0 */ 89, 72,141, 87,252,199, 2, 91, 93,195,144,255,226,131,249, 73, +/* 0x17e0 */ 117, 74, 72,137,241, 72,137,254,235, 44,138, 7, 72,131,199, 1, +/* 0x17f0 */ 60,128,114, 10, 60,143,119, 6,128,127,254, 15,116, 6, 44,232, +/* 0x1800 */ 60, 1,119, 35, 56, 23,117, 31,139, 7, 37, 0,255,255,255, 15, +/* 0x1810 */ 200, 41,248, 1,240,171, 72,131,233, 4,138, 7, 72,131,199, 1, +/* 0x1820 */ 72,255,201,117,217,235, 5, 72,255,201,117,190,195,102,105,108, +/* 0x1830 */ 101, 32,102,111,114,109, 97,116, 32,101,108,102, 54, 52, 45,120, +/* 0x1840 */ 56, 54, 45, 54, 52, 10, 10, 83,101, 99,116,105,111,110,115, 58, +/* 0x1850 */ 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, +/* 0x1860 */ 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, +/* 0x1870 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, +/* 0x1880 */ 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x1890 */ 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, +/* 0x18a0 */ 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 77, 65, 67, 72, 77, +/* 0x18b0 */ 65, 73, 78, 88, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 49, +/* 0x18c0 */ 49, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x18d0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x18e0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 52, 48, 32, +/* 0x18f0 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, +/* 0x1900 */ 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, +/* 0x1910 */ 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, 32, +/* 0x1920 */ 32, 32, 32, 48, 48, 48, 48, 48, 48, 54, 54, 32, 32, 48, 48, 48, +/* 0x1930 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, +/* 0x1940 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1950 */ 32, 48, 48, 48, 48, 48, 48, 53, 49, 32, 32, 50, 42, 42, 48, 32, +/* 0x1960 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, +/* 0x1970 */ 78, 76, 89, 10, 32, 32, 50, 32, 78, 82, 86, 50, 69, 32, 32, 32, +/* 0x1980 */ 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 98, 55, 32, 32, +/* 0x1990 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x19a0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x19b0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 98, 55, 32, 32, 50, 42, +/* 0x19c0 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, +/* 0x19d0 */ 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, +/* 0x19e0 */ 51, 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x19f0 */ 48, 48, 48, 48, 48, 48, 57,101, 32, 32, 48, 48, 48, 48, 48, 48, +/* 0x1a00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, +/* 0x1a10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, +/* 0x1a20 */ 48, 48, 48, 49, 54,101, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, +/* 0x1a30 */ 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, +/* 0x1a40 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, 86, 50, +/* 0x1a50 */ 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, +/* 0x1a60 */ 57, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1a70 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1a80 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 50, 48, 99, +/* 0x1a90 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, +/* 0x1aa0 */ 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, +/* 0x1ab0 */ 89, 10, 32, 32, 53, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, +/* 0x1ac0 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 54, 52, 32, 32, 48, 48, +/* 0x1ad0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, +/* 0x1ae0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1af0 */ 32, 32, 48, 48, 48, 48, 48, 50, 57, 99, 32, 32, 50, 42, 42, 48, +/* 0x1b00 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, +/* 0x1b10 */ 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, +/* 0x1b20 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32, 32, 48, 48, +/* 0x1b30 */ 48, 48, 48, 57,102, 55, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1b40 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, +/* 0x1b50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, +/* 0x1b60 */ 48, 51, 48, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, +/* 0x1b70 */ 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, +/* 0x1b80 */ 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, +/* 0x1b90 */ 32, 48, 48, 48, 48, 48, 57,102, 55, 32, 32, 48, 48, 48, 48, 48, +/* 0x1ba0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, +/* 0x1bb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, +/* 0x1bc0 */ 48, 48, 48, 48, 99,102, 55, 32, 32, 50, 42, 42, 48, 32, 32, 67, +/* 0x1bd0 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, +/* 0x1be0 */ 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, +/* 0x1bf0 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 49, 52, 32, 32, 48, 48, +/* 0x1c00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, +/* 0x1c10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c20 */ 32, 32, 48, 48, 48, 48, 49, 54,101,101, 32, 32, 50, 42, 42, 48, +/* 0x1c30 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, +/* 0x1c40 */ 79, 78, 76, 89, 10, 32, 32, 57, 32, 78, 82, 86, 95, 84, 65, 73, +/* 0x1c50 */ 76, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1c60 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c70 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1c80 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 48, 50, 32, 32, 50, +/* 0x1c90 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, +/* 0x1ca0 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48, 32, 77, 65, 67, 72, +/* 0x1cb0 */ 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, +/* 0x1cc0 */ 49, 49, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1cd0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ce0 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 48, 50, +/* 0x1cf0 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, +/* 0x1d00 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 49, 32, 77, +/* 0x1d10 */ 65, 67, 72, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 48, 48, 48, +/* 0x1d20 */ 48, 48, 49, 49, 97, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1d30 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, +/* 0x1d40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, +/* 0x1d50 */ 55, 49, 51, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, +/* 0x1d60 */ 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, +/* 0x1d70 */ 79, 78, 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, +/* 0x1d80 */ 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1d90 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 72, +/* 0x1da0 */ 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1db0 */ 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, +/* 0x1dc0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1dd0 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, +/* 0x1de0 */ 65, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1df0 */ 48, 48, 48, 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, 48, 48, +/* 0x1e00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, +/* 0x1e10 */ 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, +/* 0x1e20 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1e30 */ 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, +/* 0x1e40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, +/* 0x1e50 */ 32, 32, 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 9, +/* 0x1e60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1e70 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, +/* 0x1e80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, +/* 0x1e90 */ 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 9, 48, 48, +/* 0x1ea0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, +/* 0x1eb0 */ 65, 67, 72, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ec0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, +/* 0x1ed0 */ 32, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1ee0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, +/* 0x1ef0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1f00 */ 108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, +/* 0x1f10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, +/* 0x1f20 */ 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f30 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, +/* 0x1f40 */ 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x1f50 */ 48, 48, 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, +/* 0x1f60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, +/* 0x1f70 */ 32,100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, 48, +/* 0x1f80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1f90 */ 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, +/* 0x1fa0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, +/* 0x1fb0 */ 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, +/* 0x1fc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x1fd0 */ 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, +/* 0x1fe0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, +/* 0x1ff0 */ 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, 48, +/* 0x2000 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, +/* 0x2010 */ 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, +/* 0x2020 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, +/* 0x2030 */ 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, +/* 0x2040 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, +/* 0x2050 */ 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2060 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, +/* 0x2070 */ 77, 65, 67, 72, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, +/* 0x2080 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, 97,114, +/* 0x2090 */ 116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x20a0 */ 49, 49, 32,103, 32, 32, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, +/* 0x20b0 */ 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x20c0 */ 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, 99,111,109,112, +/* 0x20d0 */ 114,101,115,115, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, +/* 0x20e0 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 77, 65, +/* 0x20f0 */ 67, 72, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, +/* 0x2100 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, +/* 0x2110 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, +/* 0x2120 */ 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2130 */ 48, 48, 53, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, +/* 0x2140 */ 50, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 43, +/* 0x2150 */ 48,120,102,102,102,102,102,102,102,102,102,102,102,102,102,102, +/* 0x2160 */ 102, 99, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, +/* 0x2170 */ 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, +/* 0x2180 */ 69, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, +/* 0x2190 */ 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, +/* 0x21a0 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, +/* 0x21b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 97,101, 32, 82, 95, +/* 0x21c0 */ 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, +/* 0x21d0 */ 78, 82, 86, 95, 72, 69, 65, 68, 43, 48,120, 48, 48, 48, 48, 48, +/* 0x21e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 49, 10, 48, 48, 48, 48, +/* 0x21f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 98, 32, 82, 95, 88, +/* 0x2200 */ 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 77, +/* 0x2210 */ 65, 67, 72, 77, 65, 73, 78, 89, 43, 48,120,102,102,102,102,102, +/* 0x2220 */ 102,102,102,102,102,102,102,102,102,102, 99, 10, 10, 82, 69, 76, +/* 0x2230 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, +/* 0x2240 */ 70, 79, 82, 32, 91, 78, 82, 86, 50, 68, 93, 58, 10, 79, 70, 70, +/* 0x2250 */ 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, +/* 0x2260 */ 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x2270 */ 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x2280 */ 48, 48, 48, 48, 57, 53, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, +/* 0x2290 */ 80, 67, 51, 50, 32, 32, 32, 32, 32, 78, 82, 86, 95, 72, 69, 65, +/* 0x22a0 */ 68, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x22b0 */ 48, 48, 50, 49, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, +/* 0x22c0 */ 48, 48, 48, 53, 98, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, +/* 0x22d0 */ 67, 51, 50, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, +/* 0x22e0 */ 89, 43, 48,120,102,102,102,102,102,102,102,102,102,102,102,102, +/* 0x22f0 */ 102,102,102, 99, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, +/* 0x2300 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, +/* 0x2310 */ 86, 50, 66, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, +/* 0x2320 */ 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, +/* 0x2330 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, +/* 0x2340 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, 97, 32, +/* 0x2350 */ 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, +/* 0x2360 */ 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 43, 48,120, 48, 48, 48, +/* 0x2370 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 49, 10, 48, 48, +/* 0x2380 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 50, 32, 82, +/* 0x2390 */ 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, +/* 0x23a0 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 43, 48,120,102,102,102, +/* 0x23b0 */ 102,102,102,102,102,102,102,102,102,102,102,102, 99, 10, 10, 82, +/* 0x23c0 */ 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, +/* 0x23d0 */ 83, 32, 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 69, 76, 70, 48, +/* 0x23e0 */ 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, +/* 0x23f0 */ 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, +/* 0x2400 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, +/* 0x2410 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 54, 32, 82, 95, +/* 0x2420 */ 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, +/* 0x2430 */ 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 43, 48,120, 48, 48, 48, +/* 0x2440 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 48, 10, 10, 82, +/* 0x2450 */ 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, +/* 0x2460 */ 83, 32, 70, 79, 82, 32, 91, 77, 65, 67, 72, 77, 65, 73, 78, 90, +/* 0x2470 */ 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, +/* 0x2480 */ 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, +/* 0x2490 */ 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, +/* 0x24a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 57, 32, 82, 95, 88, +/* 0x24b0 */ 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 77, +/* 0x24c0 */ 65, 67, 72, 77, 65, 73, 78, 90, 43, 48,120, 48, 48, 48, 48, 48, +/* 0x24d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 97, 10, 48, 48, 48, 48, +/* 0x24e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,101, 32, 82, 95, 88, +/* 0x24f0 */ 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 77, +/* 0x2500 */ 65, 67, 72, 77, 65, 73, 78, 88, 43, 48,120, 48, 48, 48, 48, 48, +/* 0x2510 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 57, 10, 48, 48, 48, 48, +/* 0x2520 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 51, 97, 32, 82, 95, 88, +/* 0x2530 */ 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 77, +/* 0x2540 */ 65, 67, 72, 77, 65, 73, 78, 90, 43, 48,120, 48, 48, 48, 48, 48, +/* 0x2550 */ 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 97, 10, 48, 48, 48, 48, +/* 0x2560 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 48, 32, 82, 95, 88, +/* 0x2570 */ 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 77, +/* 0x2580 */ 65, 67, 72, 77, 65, 73, 78, 88, 43, 48,120, 48, 48, 48, 48, 48, +/* 0x2590 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 57, 10 }; diff --git a/src/stub/src/amd64-darwin.dylib-entry.S b/src/stub/src/amd64-darwin.dylib-entry.S index b41ddfb2..c73d2af7 100644 --- a/src/stub/src/amd64-darwin.dylib-entry.S +++ b/src/stub/src/amd64-darwin.dylib-entry.S @@ -177,11 +177,17 @@ eof: end_decompress: .globl end_decompress +#undef src +#undef lsrc +#undef dst +#undef ldst +#undef meth +#undef methb /* IDENTSTR goes here */ section MACHMAINZ -SYS_mmap =197 -#define PAGE_SIZE ( 1<<12) +SYS_mmap = 0x02000000 + 197 +PAGE_SIZE= ( 1<<12) sz_Mach_header= 7*4 mh_sizeofcmds=5*4 @@ -197,14 +203,17 @@ sz_b_info=3*4 sz_cpr= 4 b_method= 8 -#define MAP_FIXED 0x10 -#define MAP_PRIVATE 0x02 -#define MAP_ANON 0x1000 -#define PROT_READ 1 -#define PROT_WRITE 2 -#define PROT_EXEC 4 +MAP_FIXED= 0x10 +MAP_PRIVATE= 0x02 +MAP_ANON= 0x1000 +PROT_READ= 1 +PROT_WRITE= 2 +PROT_EXEC= 4 +bad_mmap: + hlt + j bad_mmap main: pop %rbp # &decompress lea -4+ _start - decompress(%rbp),%rbx # &total_length @@ -214,14 +223,15 @@ main: push %rax # length for eventual munmap - sub %arg6l,%arg6l # offset - sub %arg5l,%arg5l # fd - mov $MAP_ANON|MAP_PRIVATE,%arg4l + mov $0,%arg6l # offset + mov $0,%arg5l # fd + mov $MAP_ANON|MAP_PRIVATE,%sys4l mov $PROT_READ|PROT_WRITE,%arg3l mov %eax,%arg2l # length sub %arg1l,%arg1l # 0 addr - push $SYS_mmap; pop %rax + mov $SYS_mmap,%eax syscall + jc bad_mmap push %rax # addr for eventual munmap @@ -280,18 +290,27 @@ dy_uncpr: movzbl 2+ b_method(%rax),%arg3l # cto8 mov sz_unc(%rax),%arg2l mov %rdx,%arg1 # dst - # FIXME: only i386 has f_unfilter==(2+ f_decompress) - lea 2(%rbp),%rax; call *%rax # f_unfilter(1=rdi=dst, 2=rsi=dstlen, 3=rdx=cto8, 4=rcx=ftid) + call f_unfilter # f_unfilter(1=rdi=dst, 2=rsi=dstlen, 3=rdx=cto8, 4=rcx=ftid) jmp dy_uncpr -SYS_munmap=73 +SYS_munmap= 0x02000000 + 73 dy_done: pop %rax; pop %rcx # discard lea -4(%rdi),%rdx # steal some space at high end of __TEXT movl $0x90c35d5b,(%rdx) # pop %rbx; pop %rbp; ret; nop - # FIXME push $SYS_munmap; pop %rax + # FIXME mov $SYS_munmap,%eax # FIXME syscall jmp *%rdx + +#undef off +#undef len +#undef lenq +#undef bits +#undef disp + +f_unfilter: +#include "arch/amd64/bxx.S" + dy_top: diff --git a/src/stub/src/arch/amd64/bxx.S b/src/stub/src/arch/amd64/bxx.S index fd319b4d..fd2da584 100644 --- a/src/stub/src/arch/amd64/bxx.S +++ b/src/stub/src/arch/amd64/bxx.S @@ -62,3 +62,8 @@ ckcount: decq %rcx; jnz ckloop3 ckend: ret + +#undef ptr +#undef len +#undef cto8 +#undef ftid