From 90caf19e9e19bb9d4928141bda85ef4241bd33f5 Mon Sep 17 00:00:00 2001 From: "jreiser@BitWagon.com" Date: Fri, 16 Sep 2016 21:29:37 -0700 Subject: [PATCH] Cleanup amd64-darwin.macho-upxmain.c changed src/stub/amd64-darwin.macho-upxmain.h changed src/stub/src/amd64-darwin.macho-upxmain.c changed src/stub/src/amd64-darwin.macho-upxsubr.S --- src/stub/amd64-darwin.macho-upxmain.h | 413 ++++++++++------------ src/stub/src/amd64-darwin.macho-upxmain.c | 32 +- src/stub/src/amd64-darwin.macho-upxsubr.S | 35 +- 3 files changed, 246 insertions(+), 234 deletions(-) diff --git a/src/stub/amd64-darwin.macho-upxmain.h b/src/stub/amd64-darwin.macho-upxmain.h index 83514dee..edbed26b 100644 --- a/src/stub/amd64-darwin.macho-upxmain.h +++ b/src/stub/amd64-darwin.macho-upxmain.h @@ -1,5 +1,5 @@ /* amd64-darwin.macho-upxmain.h - created from amd64-darwin.macho-upxmain.exe, 5464 (0x1558) bytes + created from amd64-darwin.macho-upxmain.exe, 5032 (0x13a8) bytes This file is part of the UPX executable compressor. @@ -31,48 +31,48 @@ */ -#define STUB_AMD64_DARWIN_MACHO_UPXMAIN_EXE_SIZE 5464 -#define STUB_AMD64_DARWIN_MACHO_UPXMAIN_EXE_ADLER32 0x01a91141 -#define STUB_AMD64_DARWIN_MACHO_UPXMAIN_EXE_CRC32 0xc9501621 +#define STUB_AMD64_DARWIN_MACHO_UPXMAIN_EXE_SIZE 5032 +#define STUB_AMD64_DARWIN_MACHO_UPXMAIN_EXE_ADLER32 0xb823c21c +#define STUB_AMD64_DARWIN_MACHO_UPXMAIN_EXE_CRC32 0x8e69c33a -unsigned char stub_amd64_darwin_macho_upxmain_exe[5464] = { +unsigned char stub_amd64_darwin_macho_upxmain_exe[5032] = { /* 0x0000 */ 207,250,237,254, 7, 0, 0, 1, 3, 0, 0,128, 2, 0, 0, 0, /* 0x0010 */ 13, 0, 0, 0,248, 2, 0, 0,133, 0, 0, 0, 0, 0, 0, 0, /* 0x0020 */ 25, 0, 0, 0, 72, 0, 0, 0, 95, 95, 80, 65, 71, 69, 90, 69, /* 0x0030 */ 82, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 0x0040 */ 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0x0040 */ 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0050 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0060 */ 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,232, 0, 0, 0, /* 0x0070 */ 95, 95, 84, 69, 88, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 0x0080 */ 0, 0, 0,254, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, +/* 0x0080 */ 0, 0, 0,240, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, /* 0x0090 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, /* 0x00a0 */ 7, 0, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, /* 0x00b0 */ 95, 95,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00c0 */ 95, 95, 84, 69, 88, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 0x00d0 */ 10, 9, 0,254, 0, 0, 0, 0,150, 6, 0, 0, 0, 0, 0, 0, -/* 0x00e0 */ 10, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0x00d0 */ 244, 8, 0,240, 0, 0, 0, 0,180, 6, 0, 0, 0, 0, 0, 0, +/* 0x00e0 */ 244, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00f0 */ 0, 4, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0100 */ 95, 95,117,110,119,105,110,100, 95,105,110,102,111, 0, 0, 0, /* 0x0110 */ 95, 95, 84, 69, 88, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 0x0120 */ 160, 15, 0,254, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, -/* 0x0130 */ 160, 15, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0x0120 */ 168, 15, 0,240, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, +/* 0x0130 */ 168, 15, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0140 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0150 */ 25, 0, 0, 0, 72, 0, 0, 0, 95, 95, 68, 65, 84, 65, 0, 0, -/* 0x0160 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,254, 0, 0, 0, 0, +/* 0x0160 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,240, 0, 0, 0, 0, /* 0x0170 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, /* 0x0180 */ 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, /* 0x0190 */ 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 72, 0, 0, 0, /* 0x01a0 */ 95, 95, 76, 73, 78, 75, 69, 68, 73, 84, 0, 0, 0, 0, 0, 0, -/* 0x01b0 */ 0, 16, 0,254, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, -/* 0x01c0 */ 0, 16, 0, 0, 0, 0, 0, 0, 88, 5, 0, 0, 0, 0, 0, 0, +/* 0x01b0 */ 0, 16, 0,240, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, +/* 0x01c0 */ 0, 16, 0, 0, 0, 0, 0, 0,168, 3, 0, 0, 0, 0, 0, 0, /* 0x01d0 */ 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x01e0 */ 34, 0, 0,128, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x01f0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 0x0200 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,136, 1, 0, 0, -/* 0x0210 */ 2, 0, 0, 0, 24, 0, 0, 0,136, 17, 0, 0, 40, 0, 0, 0, -/* 0x0220 */ 8, 20, 0, 0, 80, 1, 0, 0, 11, 0, 0, 0, 80, 0, 0, 0, -/* 0x0230 */ 0, 0, 0, 0, 12, 0, 0, 0, 12, 0, 0, 0, 27, 0, 0, 0, -/* 0x0240 */ 39, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0x0200 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,224, 0, 0, 0, +/* 0x0210 */ 2, 0, 0, 0, 24, 0, 0, 0,224, 16, 0, 0, 28, 0, 0, 0, +/* 0x0220 */ 160, 18, 0, 0, 8, 1, 0, 0, 11, 0, 0, 0, 80, 0, 0, 0, +/* 0x0230 */ 0, 0, 0, 0, 12, 0, 0, 0, 12, 0, 0, 0, 15, 0, 0, 0, +/* 0x0240 */ 27, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0250 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0260 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0270 */ 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 32, 0, 0, 0, @@ -80,12 +80,12 @@ unsigned char stub_amd64_darwin_macho_upxmain_exe[5464] = { /* 0x0290 */ 100, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 16, 0, 0, 0, /* 0x02a0 */ 0, 11, 10, 0, 0, 11, 10, 0, 42, 0, 0, 0, 16, 0, 0, 0, /* 0x02b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0,128, 24, 0, 0, 0, -/* 0x02c0 */ 81, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0x02c0 */ 59, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x02d0 */ 12, 0, 0, 0, 56, 0, 0, 0, 24, 0, 0, 0, 2, 0, 0, 0, /* 0x02e0 */ 1, 10,202, 4, 0, 0, 1, 0, 47,117,115,114, 47,108,105, 98, /* 0x02f0 */ 47,108,105, 98, 83,121,115,116,101,109, 46, 66, 46,100,121,108, /* 0x0300 */ 105, 98, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 16, 0, 0, 0, -/* 0x0310 */ 136, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0x0310 */ 224, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0320 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0330 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0340 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -179,203 +179,176 @@ unsigned char stub_amd64_darwin_macho_upxmain_exe[5464] = { /* 0x08c0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x08d0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x08e0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 0x08f0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* 0x0900 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 72,137,229, 65, 87, -/* 0x0910 */ 65, 86, 65, 85, 65, 84, 83, 72,131,236, 72, 77,137,205, 76,137, -/* 0x0920 */ 195, 73,137,206, 73,137,212, 72,137,117,208, 72,141, 71, 24, 72, -/* 0x0930 */ 137, 69,200, 72,139, 69,208, 72,131,192,232, 72,137, 69,192, 76, -/* 0x0940 */ 137,101,184,139, 71, 24, 72,137, 69,176, 72,139, 69,192, 72,139, -/* 0x0950 */ 77,200, 72,137, 77,168, 72,137, 69,160, 69, 49,255, 72,141,125, -/* 0x0960 */ 192, 72,141,117,176, 49,201, 72,137,218,232, 27, 1, 0, 0, 76, -/* 0x0970 */ 137, 44, 36, 72,141, 85,160,190, 0, 0, 0, 0,185,255,255,255, -/* 0x0980 */ 255, 76,137,231, 76,139, 69, 16, 73,137,217,232, 16, 2, 0, 0, -/* 0x0990 */ 72,137,195, 65,139, 76, 36, 16,133,201, 15,132,216, 0, 0, 0, -/* 0x09a0 */ 73,141, 68, 36, 32,131, 56, 14,116, 19, 65,255,199,139, 80, 4, -/* 0x09b0 */ 72, 1,208, 65, 57,207,114,237,233,187, 0, 0, 0,139,120, 8, -/* 0x09c0 */ 72, 1,199, 49,246, 49,210,232,182, 5, 0, 0, 65,137,199, 69, -/* 0x09d0 */ 133,255,120,113, 77,141,108, 36, 16, 49,219, 68,137,255, 76,137, -/* 0x09e0 */ 230, 76,137,242, 72,137,217,232,142, 5, 0, 0, 76, 57,240,117, -/* 0x09f0 */ 84, 65,139, 4, 36, 61,190,186,254,202,116, 7, 61,202,254,186, -/* 0x0a00 */ 190,117, 76, 65, 15,182, 68, 36, 7,141, 4,128,141, 52,133, 8, -/* 0x0a10 */ 0, 0, 0, 76,137,231,232, 55, 5, 0, 0, 65,139, 68, 36, 4, -/* 0x0a20 */ 49,201,133,192, 76,137,234,116, 28,129,122,248, 7, 0, 0, 1, -/* 0x0a30 */ 116, 12,255,193, 72,131,194, 20, 57,193,114,237,235, 7,139, 26, -/* 0x0a40 */ 72,133,219,117,150,191,127, 0, 0, 0,232, 31, 5, 0, 0, 72, -/* 0x0a50 */ 199, 4, 36, 0, 0, 0, 0, 49,210, 69, 49,192, 69, 49,201, 76, -/* 0x0a60 */ 137,231, 72,137,222, 68,137,249,232, 51, 1, 0, 0, 72,137,195, -/* 0x0a70 */ 68,137,255,232, 6, 5, 0, 0, 72,137,216, 72,131,196, 72, 91, -/* 0x0a80 */ 65, 92, 65, 93, 65, 94, 65, 95, 93,195, 85, 72,137,229, 65, 87, -/* 0x0a90 */ 65, 86, 65, 85, 65, 84, 83, 72,131,236, 56, 72,137, 77,176, 72, -/* 0x0aa0 */ 137, 85,168, 73,137,246, 72,137,125,184, 73,131, 62, 0, 15,132, -/* 0x0ab0 */ 211, 0, 0, 0, 76,141,101,200,186, 12, 0, 0, 0, 72,139,125, -/* 0x0ac0 */ 184, 76,137,230,232, 63, 4, 0, 0, 68,139,109,200, 68,139,125, -/* 0x0ad0 */ 204, 77,133,237, 15,132,154, 0, 0, 0, 65,141, 71,255, 68, 57, -/* 0x0ae0 */ 232, 15,131,175, 0, 0, 0, 77, 59, 46, 15,135,166, 0, 0, 0, -/* 0x0af0 */ 69, 57,239,115, 90, 68,137,109,196, 72,139, 69,184, 72,139,120, -/* 0x0b00 */ 8, 73,139, 86, 8,139, 93,208, 68, 15,182,195, 68,137,254, 72, -/* 0x0b10 */ 141, 77,196,255, 85,168,133,192,117,124, 68, 57,109,196,117,118, -/* 0x0b20 */ 72,131,125,176, 0,116, 27, 15,182,199,102,133,192,116, 19,193, -/* 0x0b30 */ 235, 16, 15,183,200, 73,139,126, 8, 15,182,211, 68,137,238,255, -/* 0x0b40 */ 85,176, 72,139, 69,184, 76, 1,120, 8, 76, 41, 56,235, 16, 73, -/* 0x0b50 */ 139,118, 8, 72,139,125,184, 76,137,250,232,169, 3, 0, 0, 77, -/* 0x0b60 */ 1,110, 8, 73,139, 6, 76, 41,232, 73,137, 6, 15,133, 70,255, -/* 0x0b70 */ 255,255,235, 19, 65,129,255, 85, 80, 88, 33,117, 25, 72,139, 69, -/* 0x0b80 */ 184, 72,131, 56, 0,117, 15, 72,131,196, 56, 91, 65, 92, 65, 93, -/* 0x0b90 */ 65, 94, 65, 95, 93,195,191,127, 0, 0, 0,232,206, 3, 0, 0, -/* 0x0ba0 */ 85, 72,137,229, 65, 87, 65, 86, 65, 85, 65, 84, 83, 72,131,236, -/* 0x0bb0 */ 120, 76,137,141,112,255,255,255, 76,137,133,104,255,255,255,137, -/* 0x0bc0 */ 77,140, 72,137, 85,192, 72,137,117,128, 72,137,125,144,139, 95, -/* 0x0bd0 */ 16, 69, 49,255,133,219,184, 0, 0, 0, 0, 15,132, 87, 2, 0, -/* 0x0be0 */ 0, 72,139, 77,144, 76,141,105, 32, 72,131,125,192, 0, 15,149, -/* 0x0bf0 */ 193, 15,182,201, 72,141, 12, 73, 72,137,141,120,255,255,255, 72, -/* 0x0c00 */ 191, 4, 0, 0, 0, 42, 0, 0, 0, 69, 49,201, 49,192, 69, 49, -/* 0x0c10 */ 192, 73,139, 85, 0, 72,137,209, 72,193,233, 32,141,114,252,131, -/* 0x0c20 */ 254, 2, 15,130,205, 0, 0, 0,129,250, 40, 0, 0,128, 15,132, -/* 0x0c30 */ 218, 0, 0, 0,131,250, 25, 15,133,234, 1, 0, 0, 73,139, 85, -/* 0x0c40 */ 32, 72,133,210, 15,132,221, 1, 0, 0, 72,137, 85,168, 76,137, -/* 0x0c50 */ 77,184, 72,137, 69,160, 73,139, 69, 48, 72,137, 69,200, 77,139, -/* 0x0c60 */ 101, 24, 77, 1,196, 76,137,101,176, 76,137,101,208, 69,137,230, -/* 0x0c70 */ 65,129,230,255, 15, 0, 0, 77, 41,244, 73, 1,198, 76,137,195, -/* 0x0c80 */ 15,132,169, 0, 0, 0, 72,139,141,120,255,255,255, 73,141, 52, -/* 0x0c90 */ 14, 77,133,228,186, 2, 0, 0, 0,185, 18, 0, 0, 0, 15, 69, -/* 0x0ca0 */ 209, 72,133,192, 15,148,193, 15,182,201,193,225, 12, 72,131,125, -/* 0x0cb0 */ 192, 0,191, 0, 16, 0, 0, 15, 69,207, 9,209, 72,131,248, 1, -/* 0x0cc0 */ 69, 25,192, 68, 11, 69,140, 77,139, 77, 40, 76, 3, 77,128,186, -/* 0x0cd0 */ 3, 0, 0, 0, 76,137,231,232,170, 2, 0, 0, 77,133,228, 72, -/* 0x0ce0 */ 15, 68,216, 72,137, 93,152, 72,131,248,255, 73,137,196,117, 67, -/* 0x0cf0 */ 233, 82, 1, 0, 0, 73, 57,125, 8, 15,133, 40, 1, 0, 0, 73, -/* 0x0d00 */ 139,133,144, 0, 0, 0, 76, 1,192,233, 25, 1, 0, 0, 73,139, -/* 0x0d10 */ 69, 8, 73, 57, 65, 40, 15,135, 11, 1, 0, 0, 73, 59, 65, 48, -/* 0x0d20 */ 15,131, 1, 1, 0, 0, 73, 3, 65, 24,233,248, 0, 0, 0, 72, -/* 0x0d30 */ 137, 93,152, 72,131,125,192, 0,116, 52, 73,131,125, 48, 0,116, -/* 0x0d40 */ 45, 73,131,125, 40, 0,117, 14, 72,139,133,104,255,255,255, 76, -/* 0x0d50 */ 137, 32, 76,137,109,184, 72,139,125,192, 72,141,117,200, 72,139, -/* 0x0d60 */ 149,112,255,255,255, 72,139, 77, 16,232, 28,253,255,255, 68,137, -/* 0x0d70 */ 243,247,219, 72,129,227,255, 15, 0, 0,116, 12, 75,141, 60, 52, -/* 0x0d80 */ 72,137,222,232,219, 1, 0, 0, 77,133,246,116, 23, 65,139, 85, -/* 0x0d90 */ 60, 76,137,231, 76,137,246,232,214, 1, 0, 0,133,192, 15,133, -/* 0x0da0 */ 163, 0, 0, 0, 72,139, 69,176, 72, 3, 69,168, 76, 1,243, 73, -/* 0x0db0 */ 1,220, 73, 57,196,115, 44, 77,133,228,116, 74, 72,137,198, 76, -/* 0x0dc0 */ 41,230, 65,139, 85, 60,185, 18, 16, 0, 0, 65,184,255,255,255, -/* 0x0dd0 */ 255, 69, 49,201, 76,137,231,232,170, 1, 0, 0, 73, 57,196,116, -/* 0x0de0 */ 37,235,100, 72,131,125,192, 0,116, 28, 65,131,198, 3, 65,129, -/* 0x0df0 */ 230,255, 15, 0, 0, 73,131,254, 3,119, 11, 76,137,231, 76,137, -/* 0x0e00 */ 246,232,112, 1, 0, 0, 65,139, 77, 4, 72,139, 69,144,139, 88, -/* 0x0e10 */ 16, 72,191, 4, 0, 0, 0, 42, 0, 0, 0, 72,139, 69,160, 76, -/* 0x0e20 */ 139, 69,152, 76,139, 77,184, 65,255,199,137,201, 73, 1,205, 65, -/* 0x0e30 */ 57,223, 15,130,217,253,255,255, 72,131,196,120, 91, 65, 92, 65, -/* 0x0e40 */ 93, 65, 94, 65, 95, 93,195,191,127, 0, 0, 0,232, 29, 1, 0, -/* 0x0e50 */ 0, 85, 72,137,229, 65, 87, 65, 86, 83, 72,129,236, 24, 8, 0, -/* 0x0e60 */ 0, 68,139,117, 8, 76,141,125, 16, 72,141, 5,225,255,255,255, -/* 0x0e70 */ 72, 37, 0, 0,255,255,139, 72, 16,133,201,116, 82, 72,131,200, -/* 0x0e80 */ 32, 49,210, 73,187, 85, 80, 88, 95, 68, 65, 84, 65, 73,186, 95, -/* 0x0e90 */ 95, 84, 69, 88, 84, 0, 0,131, 56, 25,117, 39, 72,139, 88, 8, -/* 0x0ea0 */ 76, 57,219,116, 22, 76, 57,211,117, 25, 72,139, 88,104, 68, 15, -/* 0x0eb0 */ 183, 3, 73, 1,216, 76,141, 75, 2,235, 8, 72,139,120, 24, 72, -/* 0x0ec0 */ 139,112, 48,255,194,139, 88, 4, 72, 1,216, 57,202,114,200, 76, -/* 0x0ed0 */ 137,248, 72,131,192,240, 72,137, 4, 36, 72,141,149,224,247,255, -/* 0x0ee0 */ 255,185, 0, 8, 0, 0,232, 31,250,255,255, 73, 99,206, 73,137, -/* 0x0ef0 */ 79,248, 73,141,103,240,255,224, 49,192, 72,129,196, 24, 8, 0, -/* 0x0f00 */ 0, 91, 65, 94, 65, 95, 93,195, 72,139, 15, 72, 57,209,114, 52, -/* 0x0f10 */ 72,139, 71, 8, 72,133,210,116, 29, 72,137,209, 72,255,201, 68, -/* 0x0f20 */ 138, 0, 72,141, 64, 1, 68,136, 6, 72,141,118, 1,117,237, 72, -/* 0x0f30 */ 139, 15, 72,139, 71, 8, 72, 1,208, 72,137, 71, 8, 72, 41,209, -/* 0x0f40 */ 72,137, 15,195, 85, 72,137,229,191,127, 0, 0, 0,232, 28, 0, -/* 0x0f50 */ 0, 0,139, 7, 15,200,137, 7, 72,131,238, 4, 72,141,127, 4, -/* 0x0f60 */ 119,240,195, 49,192,137,241,243,170,195,176, 4,235, 2,176, 1, -/* 0x0f70 */ 235, 2,176, 74,235, 2,176, 73,235, 2,176,153,235, 2,176, 6, -/* 0x0f80 */ 235, 2,176, 5,235, 2,176,197,235, 2,176, 3, 15,182,192, 13, -/* 0x0f90 */ 0, 0, 0, 2, 73,137,202, 15, 5,115, 4, 72,131,200,255,195, -/* 0x0fa0 */ 1, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, -/* 0x0fb0 */ 0, 0, 0, 0, 28, 0, 0, 0, 2, 0, 0, 0, 10, 9, 0, 0, -/* 0x0fc0 */ 52, 0, 0, 0, 52, 0, 0, 0,161, 15, 0, 0, 0, 0, 0, 0, -/* 0x0fd0 */ 52, 0, 0, 0, 3, 0, 0, 0, 12, 0, 4, 0, 28, 0, 4, 0, -/* 0x0fe0 */ 0, 0, 0, 3, 71, 5, 0, 2,254, 5, 0, 1, 72, 6, 0, 0, -/* 0x0ff0 */ 0, 0, 0, 0, 0, 0, 0, 1, 97, 1, 3, 1,209, 88, 5, 1, -/* 0x1000 */ 0, 9, 95, 0, 58, 98, 0,233, 1,119,114,105,116,101, 0,151, -/* 0x1010 */ 2,101,120,105,116, 0,161, 2,109, 0,171, 2,112,114,101, 97, -/* 0x1020 */ 100, 0,217, 2, 99,108,111,115,101, 0,227, 2,111,112,101,110, -/* 0x1030 */ 0,237, 2,114,101, 97,100, 0,129, 3, 0, 10, 95, 0,127,117, -/* 0x1040 */ 112,120, 95,109, 97,105,110, 0,170, 1,109, 0,175, 1, 98, 0, -/* 0x1050 */ 212, 1,119,114,105,116,101, 0,146, 2,101,120,105,116, 0,156, -/* 0x1060 */ 2,112,114,101, 97,100, 0,212, 2, 99,108,111,115,101, 0,222, -/* 0x1070 */ 2,111,112,101,110, 0,232, 2,114,101, 97,100, 0,252, 2, 0, -/* 0x1080 */ 3,109,104, 95,101,120,101, 99,117,116,101, 95,104,101, 97,100, -/* 0x1090 */ 101,114, 0,166, 1, 95, 98,122,101,114,111, 0,254, 1, 98,122, -/* 0x10a0 */ 101,114,111, 0,131, 2, 2, 0, 0, 0, 3, 0,138, 18, 0, 0, -/* 0x10b0 */ 4, 97,105,110, 0,207, 1,112,114,111,116,101, 99,116, 0,166, -/* 0x10c0 */ 2,117,110,109, 97,112, 0,202, 2,109, 97,112, 0,242, 2, 3, -/* 0x10d0 */ 0,209, 28, 0, 0, 2,115,119, 97,112, 0,228, 1,122,101,114, -/* 0x10e0 */ 111, 0,136, 2, 3, 0,210, 30, 0, 0, 2,115,119, 97,112, 0, -/* 0x10f0 */ 249, 1,122,101,114,111, 0,141, 2, 3, 0,210, 30, 0, 3, 0, -/* 0x1100 */ 227, 30, 0, 3, 0,227, 30, 0, 3, 0,227, 30, 0, 3, 0,227, -/* 0x1110 */ 30, 0, 3, 0,234, 30, 0, 3, 0,234, 30, 0, 3, 0,238, 30, -/* 0x1120 */ 0, 3, 0,238, 30, 0, 3, 0,242, 30, 0, 0, 3,112,114,111, -/* 0x1130 */ 116,101, 99,116, 0,197, 2,117,110,109, 97,112, 0,207, 2,109, -/* 0x1140 */ 97,112, 0,247, 2, 3, 0,242, 30, 0, 3, 0,246, 30, 0, 3, -/* 0x1150 */ 0,246, 30, 0, 3, 0,250, 30, 0, 3, 0,250, 30, 0, 3, 0, -/* 0x1160 */ 254, 30, 0, 3, 0,254, 30, 0, 3, 0,130, 31, 0, 3, 0,130, -/* 0x1170 */ 31, 0, 3, 0,134, 31, 0, 3, 0,134, 31, 0, 3, 0,138, 31, -/* 0x1180 */ 0, 3, 0,138, 31, 0, 0, 0, 2, 0, 0, 0, 14, 1, 0, 0, -/* 0x1190 */ 138, 10, 0,254, 0, 0, 0, 0, 16, 0, 0, 0, 14, 1, 0, 0, -/* 0x11a0 */ 160, 11, 0,254, 0, 0, 0, 0, 25, 0, 0, 0, 14, 1, 0, 0, -/* 0x11b0 */ 8, 15, 0,254, 0, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, -/* 0x11c0 */ 1, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 2, 0, 0, 0, -/* 0x11d0 */ 3, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 2, 0, 0, 0, -/* 0x11e0 */ 4, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 2, 0, 0, 0, -/* 0x11f0 */ 5, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 2, 0, 0, 0, -/* 0x1200 */ 6, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 2, 0, 0, 0, -/* 0x1210 */ 73, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 2, 0, 0, 0, -/* 0x1220 */ 74, 0, 0, 0, 0, 0, 0, 0,103, 0, 0, 0, 2, 0, 0, 0, -/* 0x1230 */ 153, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0, 2, 0, 0, 0, -/* 0x1240 */ 197, 0, 0, 0, 0, 0, 0, 0,122, 0, 0, 0, 15, 1, 0, 0, -/* 0x1250 */ 99, 15, 0,254, 0, 0, 0, 0,131, 0, 0, 0, 15, 1, 0, 0, -/* 0x1260 */ 99, 15, 0,254, 0, 0, 0, 0,139, 0, 0, 0, 3, 1, 16, 0, -/* 0x1270 */ 0, 0, 0,254, 0, 0, 0, 0,159, 0, 0, 0, 15, 1, 0, 0, -/* 0x1280 */ 82, 15, 0,254, 0, 0, 0, 0,166, 0, 0, 0, 15, 1, 0, 0, -/* 0x1290 */ 99, 15, 0,254, 0, 0, 0, 0,173, 0, 0, 0, 15, 1, 0, 0, -/* 0x12a0 */ 126, 15, 0,254, 0, 0, 0, 0,180, 0, 0, 0, 15, 1, 0, 0, -/* 0x12b0 */ 110, 15, 0,254, 0, 0, 0, 0,186, 0, 0, 0, 15, 1, 0, 0, -/* 0x12c0 */ 81, 14, 0,254, 0, 0, 0, 0,192, 0, 0, 0, 15, 1, 0, 0, -/* 0x12d0 */ 134, 15, 0,254, 0, 0, 0, 0,198, 0, 0, 0, 15, 1, 0, 0, -/* 0x12e0 */ 114, 15, 0,254, 0, 0, 0, 0,208, 0, 0, 0, 15, 1, 0, 0, -/* 0x12f0 */ 118, 15, 0,254, 0, 0, 0, 0,216, 0, 0, 0, 15, 1, 0, 0, -/* 0x1300 */ 130, 15, 0,254, 0, 0, 0, 0,222, 0, 0, 0, 15, 1, 0, 0, -/* 0x1310 */ 122, 15, 0,254, 0, 0, 0, 0,229, 0, 0, 0, 15, 1, 0, 0, -/* 0x1320 */ 138, 15, 0,254, 0, 0, 0, 0,235, 0, 0, 0, 15, 1, 0, 0, -/* 0x1330 */ 10, 9, 0,254, 0, 0, 0, 0,245, 0, 0, 0, 15, 1, 0, 0, -/* 0x1340 */ 106, 15, 0,254, 0, 0, 0, 0,252, 0, 0, 0, 15, 1, 0, 0, -/* 0x1350 */ 82, 15, 0,254, 0, 0, 0, 0, 2, 1, 0, 0, 15, 1, 0, 0, -/* 0x1360 */ 99, 15, 0,254, 0, 0, 0, 0, 8, 1, 0, 0, 15, 1, 0, 0, -/* 0x1370 */ 126, 15, 0,254, 0, 0, 0, 0, 14, 1, 0, 0, 15, 1, 0, 0, -/* 0x1380 */ 110, 15, 0,254, 0, 0, 0, 0, 19, 1, 0, 0, 15, 1, 0, 0, -/* 0x1390 */ 134, 15, 0,254, 0, 0, 0, 0, 24, 1, 0, 0, 15, 1, 0, 0, -/* 0x13a0 */ 114, 15, 0,254, 0, 0, 0, 0, 33, 1, 0, 0, 15, 1, 0, 0, -/* 0x13b0 */ 118, 15, 0,254, 0, 0, 0, 0, 40, 1, 0, 0, 15, 1, 0, 0, -/* 0x13c0 */ 130, 15, 0,254, 0, 0, 0, 0, 45, 1, 0, 0, 15, 1, 0, 0, -/* 0x13d0 */ 122, 15, 0,254, 0, 0, 0, 0, 51, 1, 0, 0, 15, 1, 0, 0, -/* 0x13e0 */ 138, 15, 0,254, 0, 0, 0, 0, 56, 1, 0, 0, 15, 1, 0, 0, -/* 0x13f0 */ 106, 15, 0,254, 0, 0, 0, 0, 62, 1, 0, 0, 1, 0, 0, 1, -/* 0x1400 */ 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 95,117,110,112, 97, 99, -/* 0x1410 */ 107, 69,120,116,101,110,116, 0, 95,100,111, 95,120,109, 97,112, -/* 0x1420 */ 0, 95,120,114,101, 97,100, 0, 83, 89, 83, 95,101,120,105,116, -/* 0x1430 */ 0, 83, 89, 83, 95,114,101, 97,100, 0, 83, 89, 83, 95,119,114, -/* 0x1440 */ 105,116,101, 0, 83, 89, 83, 95,111,112,101,110, 0, 83, 89, 83, -/* 0x1450 */ 95, 99,108,111,115,101, 0, 83, 89, 83, 95,109,117,110,109, 97, -/* 0x1460 */ 112, 0, 83, 89, 83, 95,109,112,114,111,116,101, 99,116, 0, 83, -/* 0x1470 */ 89, 83, 95,112,114,101, 97,100, 0, 83, 89, 83, 95,109,109, 97, -/* 0x1480 */ 112, 0, 95, 95, 95, 98,122,101,114,111, 0, 95, 95, 98,122,101, -/* 0x1490 */ 114,111, 0, 95, 95,109,104, 95,101,120,101, 99,117,116,101, 95, -/* 0x14a0 */ 104,101, 97,100,101,114, 0, 95, 98,115,119, 97,112, 0, 95, 98, -/* 0x14b0 */ 122,101,114,111, 0, 95, 99,108,111,115,101, 0, 95,101,120,105, -/* 0x14c0 */ 116, 0, 95,109, 97,105,110, 0, 95,109,109, 97,112, 0, 95,109, -/* 0x14d0 */ 112,114,111,116,101, 99,116, 0, 95,109,117,110,109, 97,112, 0, -/* 0x14e0 */ 95,111,112,101,110, 0, 95,112,114,101, 97,100, 0, 95,114,101, -/* 0x14f0 */ 97,100, 0, 95,117,112,120, 95,109, 97,105,110, 0, 95,119,114, -/* 0x1500 */ 105,116,101, 0, 98,115,119, 97,112, 0, 98,122,101,114,111, 0, -/* 0x1510 */ 99,108,111,115,101, 0,101,120,105,116, 0,109,109, 97,112, 0, -/* 0x1520 */ 109,112,114,111,116,101, 99,116, 0,109,117,110,109, 97,112, 0, -/* 0x1530 */ 111,112,101,110, 0,112,114,101, 97,100, 0,114,101, 97,100, 0, -/* 0x1540 */ 119,114,105,116,101, 0,100,121,108,100, 95,115,116,117, 98, 95, -/* 0x1550 */ 98,105,110,100,101,114, 0, 0 +/* 0x08f0 */ 0, 0, 0, 0, 85, 72,137,229, 65, 87, 65, 86, 65, 85, 65, 84, +/* 0x0900 */ 83, 72,131,236, 72, 77,137,205, 76,137,195, 73,137,206, 73,137, +/* 0x0910 */ 212, 72,137,117,208, 72,141, 71, 24, 72,137, 69,200, 72,139, 69, +/* 0x0920 */ 208, 72,131,192,232, 72,137, 69,192, 76,137,101,184,139, 71, 24, +/* 0x0930 */ 72,137, 69,176, 72,139, 69,192, 72,139, 77,200, 72,137, 77,168, +/* 0x0940 */ 72,137, 69,160, 69, 49,255, 72,141,125,192, 72,141,117,176, 49, +/* 0x0950 */ 201, 72,137,218,232, 27, 1, 0, 0, 76,137, 44, 36, 72,141, 85, +/* 0x0960 */ 160,190, 0, 0, 0, 0,185,255,255,255,255, 76,137,231, 76,139, +/* 0x0970 */ 69, 16, 73,137,217,232, 16, 2, 0, 0, 72,137,195, 65,139, 76, +/* 0x0980 */ 36, 16,133,201, 15,132,216, 0, 0, 0, 73,141, 68, 36, 32,131, +/* 0x0990 */ 56, 14,116, 19, 65,255,199,139, 80, 4, 72, 1,208, 65, 57,207, +/* 0x09a0 */ 114,237,233,187, 0, 0, 0,139,120, 8, 72, 1,199, 49,246, 49, +/* 0x09b0 */ 210,232,212, 5, 0, 0, 65,137,199, 69,133,255,120,113, 77,141, +/* 0x09c0 */ 108, 36, 16, 49,219, 68,137,255, 76,137,230, 76,137,242, 72,137, +/* 0x09d0 */ 217,232,172, 5, 0, 0, 76, 57,240,117, 84, 65,139, 4, 36, 61, +/* 0x09e0 */ 190,186,254,202,116, 7, 61,202,254,186,190,117, 76, 65, 15,182, +/* 0x09f0 */ 68, 36, 7,141, 4,128,141, 52,133, 8, 0, 0, 0, 76,137,231, +/* 0x0a00 */ 232, 85, 5, 0, 0, 65,139, 68, 36, 4, 49,201,133,192, 76,137, +/* 0x0a10 */ 234,116, 28,129,122,248, 7, 0, 0, 1,116, 12,255,193, 72,131, +/* 0x0a20 */ 194, 20, 57,193,114,237,235, 7,139, 26, 72,133,219,117,150,191, +/* 0x0a30 */ 127, 0, 0, 0,232, 61, 5, 0, 0, 72,199, 4, 36, 0, 0, 0, +/* 0x0a40 */ 0, 49,210, 69, 49,192, 69, 49,201, 76,137,231, 72,137,222, 68, +/* 0x0a50 */ 137,249,232, 51, 1, 0, 0, 72,137,195, 68,137,255,232, 36, 5, +/* 0x0a60 */ 0, 0, 72,137,216, 72,131,196, 72, 91, 65, 92, 65, 93, 65, 94, +/* 0x0a70 */ 65, 95, 93,195, 85, 72,137,229, 65, 87, 65, 86, 65, 85, 65, 84, +/* 0x0a80 */ 83, 72,131,236, 56, 72,137, 77,176, 72,137, 85,168, 73,137,246, +/* 0x0a90 */ 72,137,125,184, 73,131, 62, 0, 15,132,211, 0, 0, 0, 76,141, +/* 0x0aa0 */ 101,200,186, 12, 0, 0, 0, 72,139,125,184, 76,137,230,232, 93, +/* 0x0ab0 */ 4, 0, 0, 68,139,109,200, 68,139,125,204, 77,133,237, 15,132, +/* 0x0ac0 */ 154, 0, 0, 0, 65,141, 71,255, 68, 57,232, 15,131,175, 0, 0, +/* 0x0ad0 */ 0, 77, 59, 46, 15,135,166, 0, 0, 0, 69, 57,239,115, 90, 68, +/* 0x0ae0 */ 137,109,196, 72,139, 69,184, 72,139,120, 8, 73,139, 86, 8,139, +/* 0x0af0 */ 93,208, 68, 15,182,195, 68,137,254, 72,141, 77,196,255, 85,168, +/* 0x0b00 */ 133,192,117,124, 68, 57,109,196,117,118, 72,131,125,176, 0,116, +/* 0x0b10 */ 27, 15,182,199,102,133,192,116, 19,193,235, 16, 15,183,200, 73, +/* 0x0b20 */ 139,126, 8, 15,182,211, 68,137,238,255, 85,176, 72,139, 69,184, +/* 0x0b30 */ 76, 1,120, 8, 76, 41, 56,235, 16, 73,139,118, 8, 72,139,125, +/* 0x0b40 */ 184, 76,137,250,232,199, 3, 0, 0, 77, 1,110, 8, 73,139, 6, +/* 0x0b50 */ 76, 41,232, 73,137, 6, 15,133, 70,255,255,255,235, 19, 65,129, +/* 0x0b60 */ 255, 85, 80, 88, 33,117, 25, 72,139, 69,184, 72,131, 56, 0,117, +/* 0x0b70 */ 15, 72,131,196, 56, 91, 65, 92, 65, 93, 65, 94, 65, 95, 93,195, +/* 0x0b80 */ 191,127, 0, 0, 0,232,236, 3, 0, 0, 85, 72,137,229, 65, 87, +/* 0x0b90 */ 65, 86, 65, 85, 65, 84, 83, 72,131,236,120, 76,137,141,112,255, +/* 0x0ba0 */ 255,255, 76,137,133,104,255,255,255,137, 77,140, 72,137, 85,192, +/* 0x0bb0 */ 72,137,117,128, 72,137,125,144,139, 95, 16, 69, 49,255,133,219, +/* 0x0bc0 */ 184, 0, 0, 0, 0, 15,132, 87, 2, 0, 0, 72,139, 77,144, 76, +/* 0x0bd0 */ 141,105, 32, 72,131,125,192, 0, 15,149,193, 15,182,201, 72,141, +/* 0x0be0 */ 12, 73, 72,137,141,120,255,255,255, 72,191, 4, 0, 0, 0, 42, +/* 0x0bf0 */ 0, 0, 0, 69, 49,201, 49,192, 69, 49,192, 73,139, 85, 0, 72, +/* 0x0c00 */ 137,209, 72,193,233, 32,141,114,252,131,254, 2, 15,130,205, 0, +/* 0x0c10 */ 0, 0,129,250, 40, 0, 0,128, 15,132,218, 0, 0, 0,131,250, +/* 0x0c20 */ 25, 15,133,234, 1, 0, 0, 73,139, 85, 32, 72,133,210, 15,132, +/* 0x0c30 */ 221, 1, 0, 0, 72,137, 85,168, 76,137, 77,184, 72,137, 69,160, +/* 0x0c40 */ 73,139, 69, 48, 72,137, 69,200, 77,139,101, 24, 77, 1,196, 76, +/* 0x0c50 */ 137,101,176, 76,137,101,208, 69,137,230, 65,129,230,255, 15, 0, +/* 0x0c60 */ 0, 77, 41,244, 73, 1,198, 76,137,195, 15,132,169, 0, 0, 0, +/* 0x0c70 */ 72,139,141,120,255,255,255, 73,141, 52, 14, 77,133,228,186, 2, +/* 0x0c80 */ 0, 0, 0,185, 18, 0, 0, 0, 15, 69,209, 72,133,192, 15,148, +/* 0x0c90 */ 193, 15,182,201,193,225, 12, 72,131,125,192, 0,191, 0, 16, 0, +/* 0x0ca0 */ 0, 15, 69,207, 9,209, 72,131,248, 1, 69, 25,192, 68, 11, 69, +/* 0x0cb0 */ 140, 77,139, 77, 40, 76, 3, 77,128,186, 3, 0, 0, 0, 76,137, +/* 0x0cc0 */ 231,232,200, 2, 0, 0, 77,133,228, 72, 15, 68,216, 72,137, 93, +/* 0x0cd0 */ 152, 72,131,248,255, 73,137,196,117, 67,233, 82, 1, 0, 0, 73, +/* 0x0ce0 */ 57,125, 8, 15,133, 40, 1, 0, 0, 73,139,133,144, 0, 0, 0, +/* 0x0cf0 */ 76, 1,192,233, 25, 1, 0, 0, 73,139, 69, 8, 73, 57, 65, 40, +/* 0x0d00 */ 15,135, 11, 1, 0, 0, 73, 59, 65, 48, 15,131, 1, 1, 0, 0, +/* 0x0d10 */ 73, 3, 65, 24,233,248, 0, 0, 0, 72,137, 93,152, 72,131,125, +/* 0x0d20 */ 192, 0,116, 52, 73,131,125, 48, 0,116, 45, 73,131,125, 40, 0, +/* 0x0d30 */ 117, 14, 72,139,133,104,255,255,255, 76,137, 32, 76,137,109,184, +/* 0x0d40 */ 72,139,125,192, 72,141,117,200, 72,139,149,112,255,255,255, 72, +/* 0x0d50 */ 139, 77, 16,232, 28,253,255,255, 68,137,243,247,219, 72,129,227, +/* 0x0d60 */ 255, 15, 0, 0,116, 12, 75,141, 60, 52, 72,137,222,232,249, 1, +/* 0x0d70 */ 0, 0, 77,133,246,116, 23, 65,139, 85, 60, 76,137,231, 76,137, +/* 0x0d80 */ 246,232,244, 1, 0, 0,133,192, 15,133,163, 0, 0, 0, 72,139, +/* 0x0d90 */ 69,176, 72, 3, 69,168, 76, 1,243, 73, 1,220, 73, 57,196,115, +/* 0x0da0 */ 44, 77,133,228,116, 74, 72,137,198, 76, 41,230, 65,139, 85, 60, +/* 0x0db0 */ 185, 18, 16, 0, 0, 65,184,255,255,255,255, 69, 49,201, 76,137, +/* 0x0dc0 */ 231,232,200, 1, 0, 0, 73, 57,196,116, 37,235,100, 72,131,125, +/* 0x0dd0 */ 192, 0,116, 28, 65,131,198, 3, 65,129,230,255, 15, 0, 0, 73, +/* 0x0de0 */ 131,254, 3,119, 11, 76,137,231, 76,137,246,232,142, 1, 0, 0, +/* 0x0df0 */ 65,139, 77, 4, 72,139, 69,144,139, 88, 16, 72,191, 4, 0, 0, +/* 0x0e00 */ 0, 42, 0, 0, 0, 72,139, 69,160, 76,139, 69,152, 76,139, 77, +/* 0x0e10 */ 184, 65,255,199,137,201, 73, 1,205, 65, 57,223, 15,130,217,253, +/* 0x0e20 */ 255,255, 72,131,196,120, 91, 65, 92, 65, 93, 65, 94, 65, 95, 93, +/* 0x0e30 */ 195,191,127, 0, 0, 0,232, 59, 1, 0, 0, 85, 72,137,229, 65, +/* 0x0e40 */ 87, 65, 86, 65, 85, 65, 84, 83, 72,129,236, 24, 8, 0, 0, 68, +/* 0x0e50 */ 139,109, 8, 76,141,101, 16, 72,141, 5,221,255,255,255, 72, 37, +/* 0x0e60 */ 0, 0,255,255,139, 72, 16,133,201,116, 82, 72,131,200, 32, 49, +/* 0x0e70 */ 210, 72,190, 85, 80, 88, 95, 68, 65, 84, 65, 72,191, 95, 95, 84, +/* 0x0e80 */ 69, 88, 84, 0, 0,131, 56, 25,117, 39, 72,139, 88, 8, 72, 57, +/* 0x0e90 */ 243,116, 22, 72, 57,251,117, 25, 72,139, 88,104, 68, 15,183, 3, +/* 0x0ea0 */ 73, 1,216, 76,141, 75, 2,235, 8, 76,139,120, 24, 76,139,112, +/* 0x0eb0 */ 48,255,194,139, 88, 4, 72, 1,216, 57,202,114,200, 76,137,224, +/* 0x0ec0 */ 72,131,192,240, 72,137, 4, 36, 72,141,149,208,247,255,255,185, +/* 0x0ed0 */ 0, 8, 0, 0, 76,137,255, 76,137,246,232, 21,250,255,255, 72, +/* 0x0ee0 */ 137,195, 76,137,255, 76,137,246,232,145, 0, 0, 0, 73, 99,197, +/* 0x0ef0 */ 73,137, 68, 36,248, 73,141,100, 36,240,255,227, 49,192, 72,129, +/* 0x0f00 */ 196, 24, 8, 0, 0, 91, 65, 92, 65, 93, 65, 94, 65, 95, 93,195, +/* 0x0f10 */ 72,139, 15, 72, 57,209,114, 52, 72,139, 71, 8, 72,133,210,116, +/* 0x0f20 */ 29, 72,137,209, 72,255,201, 68,138, 0, 72,141, 64, 1, 68,136, +/* 0x0f30 */ 6, 72,141,118, 1,117,237, 72,139, 15, 72,139, 71, 8, 72, 1, +/* 0x0f40 */ 208, 72,137, 71, 8, 72, 41,209, 72,137, 15,195, 85, 72,137,229, +/* 0x0f50 */ 191,127, 0, 0, 0,232, 28, 0, 0, 0,139, 7, 15,200,137, 7, +/* 0x0f60 */ 72,131,238, 4, 72,141,127, 4,119,240,195, 49,192,137,241,243, +/* 0x0f70 */ 170,195,176, 4,235, 2,176, 1,235, 2,176, 74,235, 2,176, 73, +/* 0x0f80 */ 235, 2,176,153,235, 2,176, 6,235, 2,176, 5,235, 2,176,197, +/* 0x0f90 */ 235, 2,176, 3, 15,182,192, 13, 0, 0, 0, 2, 73,137,202, 15, +/* 0x0fa0 */ 5,115, 4, 72,131,200,255,195, 1, 0, 0, 0, 28, 0, 0, 0, +/* 0x0fb0 */ 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, +/* 0x0fc0 */ 2, 0, 0, 0,244, 8, 0, 0, 52, 0, 0, 0, 52, 0, 0, 0, +/* 0x0fd0 */ 169, 15, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 3, 0, 0, 0, +/* 0x0fe0 */ 12, 0, 3, 0, 24, 0, 3, 0, 0, 0, 0, 2, 28, 6, 0, 1, +/* 0x0ff0 */ 102, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,209, 88, 5, 1, +/* 0x1000 */ 0, 1, 95, 0, 5, 0, 10, 95, 0, 72,117,112,120, 95,109, 97, +/* 0x1010 */ 105,110, 0,106,109, 0,111, 98, 0,148, 1,119,114,105,116,101, +/* 0x1020 */ 0,179, 1,101,120,105,116, 0,184, 1,112,114,101, 97,100, 0, +/* 0x1030 */ 199, 1, 99,108,111,115,101, 0,204, 1,111,112,101,110, 0,209, +/* 0x1040 */ 1,114,101, 97,100, 0,219, 1, 0, 2,109,104, 95,101,120,101, +/* 0x1050 */ 99,117,116,101, 95,104,101, 97,100,101,114, 0,102, 95, 98,122, +/* 0x1060 */ 101,114,111, 0,169, 1, 2, 0, 0, 0, 3, 0,244, 17, 0, 0, +/* 0x1070 */ 4, 97,105,110, 0,143, 1,112,114,111,116,101, 99,116, 0,189, +/* 0x1080 */ 1,117,110,109, 97,112, 0,194, 1,109, 97,112, 0,214, 1, 3, +/* 0x1090 */ 0,187, 28, 0, 0, 2,115,119, 97,112, 0,164, 1,122,101,114, +/* 0x10a0 */ 111, 0,174, 1, 3, 0,218, 30, 0, 3, 0,235, 30, 0, 3, 0, +/* 0x10b0 */ 235, 30, 0, 3, 0,242, 30, 0, 3, 0,246, 30, 0, 3, 0,250, +/* 0x10c0 */ 30, 0, 3, 0,254, 30, 0, 3, 0,130, 31, 0, 3, 0,134, 31, +/* 0x10d0 */ 0, 3, 0,138, 31, 0, 3, 0,142, 31, 0, 3, 0,146, 31, 0, +/* 0x10e0 */ 2, 0, 0, 0, 14, 1, 0, 0,116, 10, 0,240, 0, 0, 0, 0, +/* 0x10f0 */ 16, 0, 0, 0, 14, 1, 0, 0,138, 11, 0,240, 0, 0, 0, 0, +/* 0x1100 */ 25, 0, 0, 0, 14, 1, 0, 0, 16, 15, 0,240, 0, 0, 0, 0, +/* 0x1110 */ 32, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, +/* 0x1120 */ 41, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, +/* 0x1130 */ 50, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, +/* 0x1140 */ 60, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, +/* 0x1150 */ 69, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, +/* 0x1160 */ 79, 0, 0, 0, 2, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, +/* 0x1170 */ 90, 0, 0, 0, 2, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, +/* 0x1180 */ 103, 0, 0, 0, 2, 0, 0, 0,153, 0, 0, 0, 0, 0, 0, 0, +/* 0x1190 */ 113, 0, 0, 0, 2, 0, 0, 0,197, 0, 0, 0, 0, 0, 0, 0, +/* 0x11a0 */ 122, 0, 0, 0, 15, 1, 0, 0,107, 15, 0,240, 0, 0, 0, 0, +/* 0x11b0 */ 131, 0, 0, 0, 3, 1, 16, 0, 0, 0, 0,240, 0, 0, 0, 0, +/* 0x11c0 */ 151, 0, 0, 0, 15, 1, 0, 0, 90, 15, 0,240, 0, 0, 0, 0, +/* 0x11d0 */ 158, 0, 0, 0, 15, 1, 0, 0,107, 15, 0,240, 0, 0, 0, 0, +/* 0x11e0 */ 165, 0, 0, 0, 15, 1, 0, 0,134, 15, 0,240, 0, 0, 0, 0, +/* 0x11f0 */ 172, 0, 0, 0, 15, 1, 0, 0,118, 15, 0,240, 0, 0, 0, 0, +/* 0x1200 */ 178, 0, 0, 0, 15, 1, 0, 0, 59, 14, 0,240, 0, 0, 0, 0, +/* 0x1210 */ 184, 0, 0, 0, 15, 1, 0, 0,142, 15, 0,240, 0, 0, 0, 0, +/* 0x1220 */ 190, 0, 0, 0, 15, 1, 0, 0,122, 15, 0,240, 0, 0, 0, 0, +/* 0x1230 */ 200, 0, 0, 0, 15, 1, 0, 0,126, 15, 0,240, 0, 0, 0, 0, +/* 0x1240 */ 208, 0, 0, 0, 15, 1, 0, 0,138, 15, 0,240, 0, 0, 0, 0, +/* 0x1250 */ 214, 0, 0, 0, 15, 1, 0, 0,130, 15, 0,240, 0, 0, 0, 0, +/* 0x1260 */ 221, 0, 0, 0, 15, 1, 0, 0,146, 15, 0,240, 0, 0, 0, 0, +/* 0x1270 */ 227, 0, 0, 0, 15, 1, 0, 0,244, 8, 0,240, 0, 0, 0, 0, +/* 0x1280 */ 237, 0, 0, 0, 15, 1, 0, 0,114, 15, 0,240, 0, 0, 0, 0, +/* 0x1290 */ 244, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0x12a0 */ 32, 0, 95,117,110,112, 97, 99,107, 69,120,116,101,110,116, 0, +/* 0x12b0 */ 95,100,111, 95,120,109, 97,112, 0, 95,120,114,101, 97,100, 0, +/* 0x12c0 */ 83, 89, 83, 95,101,120,105,116, 0, 83, 89, 83, 95,114,101, 97, +/* 0x12d0 */ 100, 0, 83, 89, 83, 95,119,114,105,116,101, 0, 83, 89, 83, 95, +/* 0x12e0 */ 111,112,101,110, 0, 83, 89, 83, 95, 99,108,111,115,101, 0, 83, +/* 0x12f0 */ 89, 83, 95,109,117,110,109, 97,112, 0, 83, 89, 83, 95,109,112, +/* 0x1300 */ 114,111,116,101, 99,116, 0, 83, 89, 83, 95,112,114,101, 97,100, +/* 0x1310 */ 0, 83, 89, 83, 95,109,109, 97,112, 0, 95, 95, 95, 98,122,101, +/* 0x1320 */ 114,111, 0, 95, 95,109,104, 95,101,120,101, 99,117,116,101, 95, +/* 0x1330 */ 104,101, 97,100,101,114, 0, 95, 98,115,119, 97,112, 0, 95, 98, +/* 0x1340 */ 122,101,114,111, 0, 95, 99,108,111,115,101, 0, 95,101,120,105, +/* 0x1350 */ 116, 0, 95,109, 97,105,110, 0, 95,109,109, 97,112, 0, 95,109, +/* 0x1360 */ 112,114,111,116,101, 99,116, 0, 95,109,117,110,109, 97,112, 0, +/* 0x1370 */ 95,111,112,101,110, 0, 95,112,114,101, 97,100, 0, 95,114,101, +/* 0x1380 */ 97,100, 0, 95,117,112,120, 95,109, 97,105,110, 0, 95,119,114, +/* 0x1390 */ 105,116,101, 0,100,121,108,100, 95,115,116,117, 98, 95, 98,105, +/* 0x13a0 */ 110,100,101,114, 0, 0, 0, 0 }; diff --git a/src/stub/src/amd64-darwin.macho-upxmain.c b/src/stub/src/amd64-darwin.macho-upxmain.c index 43044a85..3de45d5d 100644 --- a/src/stub/src/amd64-darwin.macho-upxmain.c +++ b/src/stub/src/amd64-darwin.macho-upxmain.c @@ -696,21 +696,31 @@ typedef struct { // // Build on Mac OS X: (where gcc is really clang) -// gcc -o amd64-darwin.macho-upxmain.exe -fno-stack-protector \ -// -Os -fPIC amd64-darwin.macho-upxmain.c -Wl,-pagezero_size,0xffff0000 \ -// -Wl,-no_pie -Wl,-no_uuid -Wl,-no_function_starts -Wl,-headerpad,0x400 \ -// -Wl,-unexported_symbols_list amd64-darwin.macho-upxhide.txt +// gcc -o amd64-darwin.macho-upxmain.exe \ +// -Os -fPIC -fno-stack-protector \ +// amd64-darwin.macho-upxmain.c \ +// amd64-darwin.macho-upxsubr.S \ +// -Wl,-pagezero_size,0xf0000000 \ +// -Wl,-no_pie \ +// -Wl,-no_uuid \ +// -Wl,-no_function_starts \ +// -Wl,-bind_at_load \ +// -Wl,-headerpad,0x400 \ +// +//# -Wl,-unexported_symbols_list unexport-upxload.txt \ +//# strip -u -r amd64-darwin.macho-upxmain.exe + int main(int argc, char *argv[]) { - // Entry via JMP + // Entry via JMP (with no parameters) instead of CALL asm("movl 1*8(%%rbp),%0; leaq 2*8(%%rbp),%1" : "=r" (argc), "=r" (argv) : ); Mach_header64 const *mhdr0 = (Mach_header64 const *)((~0ul<<16) & (unsigned long)&main); Mach_command const *ptr = (Mach_command const *)(1+ mhdr0); f_unfilter *f_unf; f_expand *f_exp; - unsigned char const *payload; + char *payload; size_t paysize; unsigned j; @@ -718,28 +728,24 @@ main(int argc, char *argv[]) ptr = (Mach_command const *)(ptr->cmdsize + (char const *)ptr)) if (LC_SEGMENT_64==ptr->cmd) { Mach_segment_command const *const segptr = (Mach_segment_command const *)ptr; -//fprintf(stderr, "ptr=%p segptr=%p\n", ptr, segptr); if ((long)0x0000545845545f5ful == *(long const *)segptr->segname) { // "__TEXT" Mach_section_command const *const secptr = (Mach_section_command const *)(1+ segptr); //if ((long)0x0000747865745f5ful == *(long const *)secptr->sectname) { // "__text" f_unf = (f_unfilter *)(sizeof(unsigned short) + secptr->addr); f_exp = (f_expand *)(*(unsigned short *)secptr->addr + secptr->addr); -//fprintf(stderr, "f_unf=%p f_exp=%p\n", f_unf, f_exp); //} } if ((long)0x415441445f585055ul == *(long const *)segptr->segname) { // "UPX_DATA" - payload = (unsigned char const *)(segptr->vmaddr); + payload = (char *)(segptr->vmaddr); paysize = segptr->filesize; -//fprintf(stderr, "payload=%p paysize=%lu\n", payload, paysize); } } char mhdr[2048]; -//fprintf(stderr, "call upx_main(payload=%p paysize=%lu mhdr=%p f_exp=%p f_unf=%p mhdrp@%p)\n", -//payload, paysize, mhdr, f_exp, f_unf, &argv[-2]); uint64_t entry = upx_main((struct l_info const *)payload, paysize, (Mach_header64 *)mhdr, sizeof(mhdr), f_exp, f_unf, (Mach_header64 **)&argv[-2]); -//fprintf(stderr, "return to launch\n"); + + munmap(payload, paysize); // leaving __LINKEDIT argv[-1] = (char *)(long)argc; asm("lea -2*8(%1),%%rsp; jmp *%0" : : "r" (entry), "r" (argv)); return 0; diff --git a/src/stub/src/amd64-darwin.macho-upxsubr.S b/src/stub/src/amd64-darwin.macho-upxsubr.S index df566cba..fcd83740 100644 --- a/src/stub/src/amd64-darwin.macho-upxsubr.S +++ b/src/stub/src/amd64-darwin.macho-upxsubr.S @@ -1,4 +1,37 @@ -#define GLOBAL(sym) sym: .globl sym; _##sym: .globl _##sym +/* +; amd64-darwin.macho-upxsubr.S -- system calls, bswap, bzero (amd64 Mach-o) +; +; This file is part of the UPX executable compressor. +; +; Copyright (C) 1996-2015 Markus Franz Xaver Johannes Oberhumer +; Copyright (C) 1996-2015 Laszlo Molnar +; Copyright (C) 2000-2015 John F. Reiser +; All Rights Reserved. +; +; UPX and the UCL library are free software; you can redistribute them +; and/or modify them under the terms of the GNU General Public License as +; published by the Free Software Foundation; either version 2 of +; the License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program; see the file COPYING. +; If not, write to the Free Software Foundation, Inc., +; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +; +; Markus F.X.J. Oberhumer Laszlo Molnar +; +; +; John F. Reiser +; +; +*/ +// Prepend one underscore +#define GLOBAL(sym) _##sym: .globl _##sym GLOBAL(bswap) 0: