1
0
mirror of https://github.com/upx/upx synced 2025-09-28 19:06:07 +08:00

convert PackMachPPC32 to new Linker

This commit is contained in:
John Reiser 2006-08-19 15:28:16 -07:00
parent aab984618d
commit 4f0d89ef8b
6 changed files with 273 additions and 247 deletions

View File

@ -69,17 +69,37 @@ Linker *PackMachPPC32::newLinker() const
return new ElfLinkerPpc32;
}
void
PackMachPPC32::addStubEntrySections(Filter const *)
{
addLoader("MACOS000", NULL);
//addLoader(getDecompressorSections(), NULL);
addLoader(
( M_IS_NRV2E(ph.method) ? "NRV_HEAD,NRV2E,NRV_TAIL"
: M_IS_NRV2D(ph.method) ? "NRV_HEAD,NRV2D,NRV_TAIL"
: M_IS_NRV2B(ph.method) ? "NRV_HEAD,NRV2B,NRV_TAIL"
: M_IS_LZMA(ph.method) ? "LZMA_ELF00,LZMA_DEC20,LZMA_DEC30"
: NULL), NULL);
addLoader("ELFMAINY,IDENTSTR,+40,ELFMAINZ,FOLDEXEC", NULL);
}
void PackMachPPC32::addLinkerSymbols(Filter const *)
{
// empty
}
int
PackMachPPC32::buildMachLoader(
upx_byte const *const proto,
unsigned const szproto,
upx_byte const *const fold,
unsigned const szfold,
Filter const */*ft*/
Filter const *ft
)
{
int eof_empty = -1;
initLoader(&eof_empty, 4096, 0, 0);
initLoader(proto, szproto);
struct b_info h; memset(&h, 0, sizeof(h));
unsigned fold_hdrlen = 0;
@ -109,11 +129,11 @@ PackMachPPC32::buildMachLoader(
int const GAP = 128; // must match stub/l_mac_ppc.S
segcmdo.vmsize += h.sz_unc - h.sz_cpr + GAP + 64;
linker->addSection("MACOS000", proto, szproto, 0);
addStubEntrySections(ft);
addLoader("MACOS000", NULL);
addLoader("FOLDEXEC", NULL);
freezeLoader();
addLinkerSymbols(ft);
linker->relocate();
return getLoaderSize();
}

View File

@ -191,6 +191,8 @@ protected:
upx_byte const *const fold,
unsigned const szfold,
Filter const *ft );
virtual void addLinkerSymbols(Filter const *);
virtual void addStubEntrySections(Filter const *);
unsigned n_segment;
unsigned sz_segment;

View File

@ -1,4 +1,4 @@
/* powerpc-darwin.macho-entry.h -- created from powerpc-darwin.macho-entry.bin, 9698 (0x25e2) bytes
/* powerpc-darwin.macho-entry.h -- created from powerpc-darwin.macho-entry.bin, 9710 (0x25ee) bytes
This file is part of the UPX executable compressor.
@ -27,15 +27,15 @@
*/
#define L_MAC_PPC32_LOADER_SIZE 9698
#define L_MAC_PPC32_LOADER_ADLER32 0xc122dd2d
#define L_MAC_PPC32_LOADER_CRC32 0xe09b1a26
#define L_MAC_PPC32_LOADER_SIZE 9710
#define L_MAC_PPC32_LOADER_ADLER32 0x4e54e33e
#define L_MAC_PPC32_LOADER_CRC32 0x78175f48
unsigned char l_mac_ppc32_loader[9698] = {
unsigned char l_mac_ppc32_loader[9710] = {
127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */
0, 1, 0, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 10 */
0, 0, 24,112, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, /* 0x 20 */
0, 21, 0, 18, 72, 0, 0, 61,124, 0, 41,236,125,168, 2,166, /* 0x 30 */
0, 0, 24,124, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, /* 0x 20 */
0, 21, 0, 18, 72, 0, 0, 69,124, 0, 41,236,125,168, 2,166, /* 0x 30 */
40, 7, 0, 8, 64,130, 1, 60,144,166, 0, 0,124,132, 26, 20, /* 0x 40 */
60, 0,128, 0, 61, 32,128, 0, 56, 99,255,255, 56,165,255,255, /* 0x 50 */
57, 64,255,255, 72, 0, 1, 12, 57, 32, 0, 1,125, 41, 28, 44, /* 0x 60 */
@ -409,234 +409,234 @@ unsigned char l_mac_ppc32_loader[9698] = {
124, 8, 3,166, 78,128, 0, 32,128, 6, 0, 0,125,168, 3,166, /* 0x1760 */
56,165, 0, 1, 56, 99, 0, 1,124,160, 40, 80,124,100, 24, 80, /* 0x1770 */
144,166, 0, 0, 78,128, 0, 32,124, 72, 2,166,128,130, 0, 8, /* 0x1780 */
124,137, 3,166,128,194, 0, 4,124,164, 18, 20, 56,165, 0, 16, /* 0x1790 */
124,102, 18, 20, 56, 99, 0,192,140, 5,255,255,156, 3,255,255, /* 0x17a0 */
66, 0,255,248,127,233, 3,166, 56,162, 0,128, 56,193,255,252, /* 0x17b0 */
78,128, 4, 32,127,232, 2,166, 75,255,255,193, 72, 0, 0,128, /* 0x17c0 */
0, 46,115,121,109,116, 97, 98, 0, 46,115,116,114,116, 97, 98, /* 0x17d0 */
0, 46,115,104,115,116,114,116, 97, 98, 0, 46,114,101,108, 97, /* 0x17e0 */
77, 65, 67, 79, 83, 48, 48, 48, 0, 78, 82, 86, 95, 72, 69, 65, /* 0x17f0 */
68, 0, 46,114,101,108, 97, 78, 82, 86, 50, 69, 0, 46,114,101, /* 0x1800 */
108, 97, 78, 82, 86, 50, 68, 0, 46,114,101,108, 97, 78, 82, 86, /* 0x1810 */
50, 66, 0, 46,114,101,108, 97, 76, 90, 77, 65, 95, 69, 76, 70, /* 0x1820 */
48, 48, 0, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 0, 76, 90, /* 0x1830 */
77, 65, 95, 68, 69, 67, 50, 48, 0, 76, 90, 77, 65, 95, 68, 69, /* 0x1840 */
67, 51, 48, 0, 78, 82, 86, 95, 84, 65, 73, 76, 0, 69, 76, 70, /* 0x1850 */
77, 65, 73, 78, 89, 0, 69, 76, 70, 77, 65, 73, 78, 90, 0, 0, /* 0x1860 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1870 */
124,137, 3,166,128,194, 0, 4,136,226, 0, 12,124,164, 18, 20, /* 0x1790 */
56,165, 0, 16,124,102, 18, 20, 56, 99, 0,192,140, 5,255,255, /* 0x17a0 */
156, 3,255,255, 66, 0,255,248,127,233, 3,166, 56,162, 0,128, /* 0x17b0 */
144,193,255,252, 56,193,255,252, 78,128, 4, 32,124,128, 0, 8, /* 0x17c0 */
127,232, 2,166, 75,255,255,181, 72, 0, 0,128, 0, 46,115,121, /* 0x17d0 */
109,116, 97, 98, 0, 46,115,116,114,116, 97, 98, 0, 46,115,104, /* 0x17e0 */
115,116,114,116, 97, 98, 0, 46,114,101,108, 97, 77, 65, 67, 79, /* 0x17f0 */
83, 48, 48, 48, 0, 78, 82, 86, 95, 72, 69, 65, 68, 0, 46,114, /* 0x1800 */
101,108, 97, 78, 82, 86, 50, 69, 0, 46,114,101,108, 97, 78, 82, /* 0x1810 */
86, 50, 68, 0, 46,114,101,108, 97, 78, 82, 86, 50, 66, 0, 46, /* 0x1820 */
114,101,108, 97, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 0, 76, /* 0x1830 */
90, 77, 65, 95, 68, 69, 67, 49, 48, 0, 76, 90, 77, 65, 95, 68, /* 0x1840 */
69, 67, 50, 48, 0, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 0, /* 0x1850 */
78, 82, 86, 95, 84, 65, 73, 76, 0, 69, 76, 70, 77, 65, 73, 78, /* 0x1860 */
89, 0, 69, 76, 70, 77, 65, 73, 78, 90, 0, 0, 0, 0, 0, 0, /* 0x1870 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1880 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 1, /* 0x1890 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 4, /* 0x18a0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x18b0 */
0, 0, 0, 27, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x18c0 */
0, 0, 28,160, 0, 0, 0, 12, 0, 0, 0, 19, 0, 0, 0, 1, /* 0x18d0 */
0, 0, 0, 4, 0, 0, 0, 12, 0, 0, 0, 41, 0, 0, 0, 1, /* 0x18e0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, /* 0x18f0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x1900 */
0, 0, 0, 55, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1910 */
0, 0, 0, 56, 0, 0, 1, 72, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1920 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 4, /* 0x1930 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,172, 0, 0, 0, 12, /* 0x1940 */
0, 0, 0, 19, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 12, /* 0x1950 */
0, 0, 0, 66, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1960 */
0, 0, 1,128, 0, 0, 1, 44, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1970 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 4, /* 0x1980 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,184, 0, 0, 0, 12, /* 0x1990 */
0, 0, 0, 19, 0, 0, 0, 6, 0, 0, 0, 4, 0, 0, 0, 12, /* 0x19a0 */
0, 0, 0, 77, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x19b0 */
0, 0, 2,172, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x19c0 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 4, /* 0x19d0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,196, 0, 0, 0, 12, /* 0x19e0 */
0, 0, 0, 19, 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 0, 12, /* 0x19f0 */
0, 0, 0, 88, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1a00 */
0, 0, 3,156, 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1a10 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 4, /* 0x1a20 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,208, 0, 0, 0, 12, /* 0x1a30 */
0, 0, 0, 19, 0, 0, 0, 10, 0, 0, 0, 4, 0, 0, 0, 12, /* 0x1a40 */
0, 0, 0, 99, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1a50 */
0, 0, 4, 32, 0, 0, 9,156, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1a60 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0, 1, /* 0x1a70 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,188, 0, 0, 9,156, /* 0x1a80 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x1a90 */
0, 0, 0,121, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1aa0 */
0, 0, 23, 88, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1ab0 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,132, 0, 0, 0, 1, /* 0x1ac0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,104, 0, 0, 0, 32, /* 0x1ad0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x1ae0 */
0, 0, 0,141, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1af0 */
0, 0, 23,136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1b00 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,150, 0, 0, 0, 1, /* 0x1b10 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,136, 0, 0, 0, 72, /* 0x1b20 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x1b30 */
0, 0, 0, 17, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1b40 */
0, 0, 23,208, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1b50 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, /* 0x1b60 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,184, 0, 0, 0,224, /* 0x1b70 */
0, 0, 0, 20, 0, 0, 0, 13, 0, 0, 0, 4, 0, 0, 0, 16, /* 0x1b80 */
0, 0, 0, 9, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1b90 */
0, 0, 28,152, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1ba0 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1bb0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1890 */
0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x18a0 */
0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 4, 0, 0, 0, 0, /* 0x18b0 */
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 27, /* 0x18c0 */
0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,172, /* 0x18d0 */
0, 0, 0, 12, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 4, /* 0x18e0 */
0, 0, 0, 12, 0, 0, 0, 41, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x18f0 */
0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1900 */
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 55, /* 0x1910 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, /* 0x1920 */
0, 0, 1, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x1930 */
0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 4, 0, 0, 0, 0, /* 0x1940 */
0, 0, 0, 0, 0, 0, 28,184, 0, 0, 0, 12, 0, 0, 0, 19, /* 0x1950 */
0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 12, 0, 0, 0, 66, /* 0x1960 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,128, /* 0x1970 */
0, 0, 1, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x1980 */
0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 4, 0, 0, 0, 0, /* 0x1990 */
0, 0, 0, 0, 0, 0, 28,196, 0, 0, 0, 12, 0, 0, 0, 19, /* 0x19a0 */
0, 0, 0, 6, 0, 0, 0, 4, 0, 0, 0, 12, 0, 0, 0, 77, /* 0x19b0 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,172, /* 0x19c0 */
0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x19d0 */
0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 4, 0, 0, 0, 0, /* 0x19e0 */
0, 0, 0, 0, 0, 0, 28,208, 0, 0, 0, 12, 0, 0, 0, 19, /* 0x19f0 */
0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 0, 12, 0, 0, 0, 88, /* 0x1a00 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,156, /* 0x1a10 */
0, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x1a20 */
0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 4, 0, 0, 0, 0, /* 0x1a30 */
0, 0, 0, 0, 0, 0, 28,220, 0, 0, 0, 12, 0, 0, 0, 19, /* 0x1a40 */
0, 0, 0, 10, 0, 0, 0, 4, 0, 0, 0, 12, 0, 0, 0, 99, /* 0x1a50 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 32, /* 0x1a60 */
0, 0, 9,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x1a70 */
0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x1a80 */
0, 0, 0, 0, 0, 0, 13,188, 0, 0, 9,156, 0, 0, 0, 0, /* 0x1a90 */
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,121, /* 0x1aa0 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 88, /* 0x1ab0 */
0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x1ac0 */
0, 0, 0, 0, 0, 0, 0,132, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x1ad0 */
0, 0, 0, 0, 0, 0, 23,104, 0, 0, 0, 32, 0, 0, 0, 0, /* 0x1ae0 */
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,141, /* 0x1af0 */
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,136, /* 0x1b00 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x1b10 */
0, 0, 0, 0, 0, 0, 0,150, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x1b20 */
0, 0, 0, 0, 0, 0, 23,136, 0, 0, 0, 84, 0, 0, 0, 0, /* 0x1b30 */
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 17, /* 0x1b40 */
0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,220, /* 0x1b50 */
0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x1b60 */
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, /* 0x1b70 */
0, 0, 0, 0, 0, 0, 27,196, 0, 0, 0,224, 0, 0, 0, 20, /* 0x1b80 */
0, 0, 0, 13, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 9, /* 0x1b90 */
0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,164, /* 0x1ba0 */
0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x1bb0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1bc0 */
0, 0, 0, 0, 3, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1bd0 */
0, 0, 0, 0, 3, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1be0 */
0, 0, 0, 0, 3, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1bf0 */
0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c00 */
0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c10 */
0, 0, 0, 0, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c20 */
0, 0, 0, 0, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c30 */
0, 0, 0, 0, 3, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c40 */
0, 0, 0, 0, 3, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c50 */
0, 0, 0, 0, 3, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c60 */
0, 0, 0, 0, 3, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c70 */
0, 0, 0, 0, 3, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x1c80 */
0, 0, 0, 0, 16, 0, 0, 1, 0, 95,115,116, 97,114,116, 0, /* 0x1c90 */
0, 0, 0, 0, 0, 0, 3, 10, 0, 0, 0, 60, 0, 0, 0,180, /* 0x1ca0 */
0, 0, 2, 11, 0, 0, 0, 0, 0, 0, 0,180, 0, 0, 2, 11, /* 0x1cb0 */
0, 0, 0, 0, 0, 0, 0,144, 0, 0, 2, 11, 0, 0, 0, 0, /* 0x1cc0 */
0, 0, 0, 4, 0, 0, 1, 11, 0, 0, 0, 16, 10,116,109,112, /* 0x1cd0 */
47,112,111,119,101,114,112, 99, 45,100, 97,114,119,105,110, 46, /* 0x1ce0 */
109, 97, 99,104,111, 45,101,110,116,114,121, 46, 98,105,110, 58, /* 0x1cf0 */
32, 32, 32, 32, 32,102,105,108,101, 32,102,111,114,109, 97,116, /* 0x1d00 */
32,101,108,102, 51, 50, 45,112,111,119,101,114,112, 99, 10, 10, /* 0x1d10 */
83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97, /* 0x1d20 */
109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, /* 0x1d30 */
32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, /* 0x1d40 */
76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111, /* 0x1d50 */
102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, /* 0x1d60 */
32, 32, 48, 32, 77, 65, 67, 79, 83, 48, 48, 48, 32, 32, 32, 32, /* 0x1d70 */
32, 32, 48, 48, 48, 48, 48, 48, 48, 52, 32, 32, 48, 48, 48, 48, /* 0x1d80 */
48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x1d90 */
48, 48, 48, 48, 48, 48, 51, 52, 32, 32, 50, 42, 42, 48, 32, 32, /* 0x1da0 */
67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, /* 0x1db0 */
32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, /* 0x1dc0 */
86, 95, 72, 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, /* 0x1dd0 */
48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x1de0 */
48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x1df0 */
51, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, /* 0x1e00 */
84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, /* 0x1e10 */
32, 78, 82, 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, /* 0x1e20 */
48, 48, 48, 48, 49, 52, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x1e30 */
48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x1e40 */
48, 48, 48, 51, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, /* 0x1e50 */
84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, /* 0x1e60 */
65, 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, 78, 82, 86, 50, 68, /* 0x1e70 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 50, /* 0x1e80 */
99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x1e90 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 56, 48, 32, /* 0x1ea0 */
32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, /* 0x1eb0 */
32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, /* 0x1ec0 */
10, 32, 32, 52, 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, /* 0x1ed0 */
32, 32, 32, 48, 48, 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48, /* 0x1ee0 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1ef0 */
32, 48, 48, 48, 48, 48, 50, 97, 99, 32, 32, 50, 42, 42, 48, 32, /* 0x1f00 */
32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, /* 0x1f10 */
44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 76, /* 0x1f20 */
90, 77, 65, 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, /* 0x1f30 */
48, 48, 48, 56, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1f40 */
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1f50 */
51, 57, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, /* 0x1f60 */
78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, /* 0x1f70 */
79, 78, 76, 89, 10, 32, 32, 54, 32, 76, 90, 77, 65, 95, 68, 69, /* 0x1f80 */
67, 49, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 57, 99, 32, /* 0x1f90 */
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x1fa0 */
48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 52, 50, 48, 32, 32, 50, /* 0x1fb0 */
42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, /* 0x1fc0 */
69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, /* 0x1fd0 */
95, 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, /* 0x1fe0 */
57, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x1ff0 */
48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,100, 98, 99, /* 0x2000 */
32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, /* 0x2010 */
44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 56, 32, 76, /* 0x2020 */
90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, /* 0x2030 */
48, 48, 48, 49, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2040 */
32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, /* 0x2050 */
55, 53, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, /* 0x2060 */
78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, /* 0x2070 */
57, 32, 78, 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, /* 0x2080 */
48, 48, 48, 48, 48, 48, 50, 48, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x2090 */
48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x20a0 */
48, 48, 49, 55, 54, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, /* 0x20b0 */
78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, /* 0x20c0 */
10, 32, 49, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, /* 0x20d0 */
32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x20e0 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x20f0 */
32, 48, 48, 48, 48, 49, 55, 56, 56, 32, 32, 50, 42, 42, 48, 32, /* 0x2100 */
32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, /* 0x2110 */
78, 76, 89, 10, 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, /* 0x2120 */
32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 52, 56, 32, 32, /* 0x2130 */
48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x2140 */
48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 56, 56, 32, 32, 50, 42, /* 0x2150 */
42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, /* 0x2160 */
65, 68, 79, 78, 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, /* 0x2170 */
66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, /* 0x2180 */
32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, /* 0x2190 */
9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, /* 0x21a0 */
69, 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, /* 0x21b0 */
32, 32, 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, /* 0x21c0 */
48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, /* 0x21d0 */
10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, /* 0x21e0 */
32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, /* 0x21f0 */
48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, /* 0x2200 */
48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, /* 0x2210 */
67, 79, 83, 48, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2220 */
77, 65, 67, 79, 83, 48, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x2230 */
48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, /* 0x2240 */
65, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, /* 0x2250 */
72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, /* 0x2260 */
32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, /* 0x2270 */
48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, /* 0x2280 */
48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, /* 0x2290 */
68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, /* 0x22a0 */
10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, /* 0x22b0 */
32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x22c0 */
32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x22d0 */
108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, /* 0x22e0 */
48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, /* 0x22f0 */
95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2300 */
108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x2310 */
49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, /* 0x2320 */
95, 68, 69, 67, 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2330 */
108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x2340 */
50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, /* 0x2350 */
95, 68, 69, 67, 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2360 */
108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, /* 0x2370 */
9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, /* 0x2380 */
78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, /* 0x2390 */
32, 32, 32, 32, 77, 65, 67, 79, 83, 48, 48, 48, 9, 48, 48, 48, /* 0x23a0 */
48, 48, 48, 48, 48, 32, 95,115,116, 97,114,116, 10, 10, 10, 82, /* 0x23b0 */
69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, /* 0x23c0 */
83, 32, 70, 79, 82, 32, 91, 77, 65, 67, 79, 83, 48, 48, 48, 93, /* 0x23d0 */
58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, /* 0x23e0 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, /* 0x23f0 */
85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 80, 80, /* 0x2400 */
67, 95, 82, 69, 76, 50, 52, 32, 32, 32, 32, 32, 32, 32, 69, 76, /* 0x2410 */
70, 77, 65, 73, 78, 90, 43, 48,120, 48, 48, 48, 48, 48, 48, 51, /* 0x2420 */
99, 10, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, /* 0x2430 */
69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, /* 0x2440 */
69, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, /* 0x2450 */
69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, /* 0x2460 */
65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 98, 52, 32, 82, 95, /* 0x2470 */
80, 80, 67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, /* 0x2480 */
78, 82, 86, 95, 84, 65, 73, 76, 10, 10, 10, 82, 69, 76, 79, 67, /* 0x2490 */
65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, /* 0x24a0 */
82, 32, 91, 78, 82, 86, 50, 68, 93, 58, 10, 79, 70, 70, 83, 69, /* 0x24b0 */
84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x24c0 */
32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, /* 0x24d0 */
48, 48, 98, 52, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 49, 52, /* 0x24e0 */
32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, /* 0x24f0 */
10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, /* 0x2500 */
79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93, /* 0x2510 */
58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, /* 0x2520 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, /* 0x2530 */
85, 69, 10, 48, 48, 48, 48, 48, 48, 57, 48, 32, 82, 95, 80, 80, /* 0x2540 */
67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 78, 82, /* 0x2550 */
86, 95, 84, 65, 73, 76, 10, 10, 10, 82, 69, 76, 79, 67, 65, 84, /* 0x2560 */
73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, /* 0x2570 */
91, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, /* 0x2580 */
70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, /* 0x2590 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, /* 0x25a0 */
48, 48, 48, 48, 48, 48, 52, 32, 82, 95, 80, 80, 67, 95, 82, 69, /* 0x25b0 */
76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, /* 0x25c0 */
69, 67, 51, 48, 43, 48,120, 48, 48, 48, 48, 48, 48, 49, 48, 10, /* 0x25d0 */
10, 10 /* 0x25e0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1bd0 */
3, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1be0 */
3, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1bf0 */
3, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c00 */
3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c10 */
3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c20 */
3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c30 */
3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c40 */
3, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c50 */
3, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c60 */
3, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c70 */
3, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c80 */
3, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1c90 */
16, 0, 0, 1, 0, 95,115,116, 97,114,116, 0, 0, 0, 0, 0, /* 0x1ca0 */
0, 0, 3, 10, 0, 0, 0, 68, 0, 0, 0,180, 0, 0, 2, 11, /* 0x1cb0 */
0, 0, 0, 0, 0, 0, 0,180, 0, 0, 2, 11, 0, 0, 0, 0, /* 0x1cc0 */
0, 0, 0,144, 0, 0, 2, 11, 0, 0, 0, 0, 0, 0, 0, 4, /* 0x1cd0 */
0, 0, 1, 11, 0, 0, 0, 16, 10,116,109,112, 47,112,111,119, /* 0x1ce0 */
101,114,112, 99, 45,100, 97,114,119,105,110, 46,109, 97, 99,104, /* 0x1cf0 */
111, 45,101,110,116,114,121, 46, 98,105,110, 58, 32, 32, 32, 32, /* 0x1d00 */
32,102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, /* 0x1d10 */
51, 50, 45,112,111,119,101,114,112, 99, 10, 10, 83,101, 99,116, /* 0x1d20 */
105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, /* 0x1d30 */
32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, /* 0x1d40 */
32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, /* 0x1d50 */
32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, /* 0x1d60 */
65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, /* 0x1d70 */
77, 65, 67, 79, 83, 48, 48, 48, 32, 32, 32, 32, 32, 32, 48, 48, /* 0x1d80 */
48, 48, 48, 48, 48, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1d90 */
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x1da0 */
48, 48, 51, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, /* 0x1db0 */
69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, /* 0x1dc0 */
68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, /* 0x1dd0 */
65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1de0 */
32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x1df0 */
48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 51, 56, 32, 32, /* 0x1e00 */
50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, /* 0x1e10 */
82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, 78, 82, 86, /* 0x1e20 */
50, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, /* 0x1e30 */
49, 52, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x1e40 */
48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 51, /* 0x1e50 */
56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, /* 0x1e60 */
83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, /* 0x1e70 */
76, 89, 10, 32, 32, 51, 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, /* 0x1e80 */
32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 50, 99, 32, 32, 48, /* 0x1e90 */
48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x1ea0 */
48, 32, 32, 48, 48, 48, 48, 48, 49, 56, 48, 32, 32, 50, 42, 42, /* 0x1eb0 */
48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, /* 0x1ec0 */
79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, /* 0x1ed0 */
32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, /* 0x1ee0 */
48, 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x1ef0 */
48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x1f00 */
48, 48, 50, 97, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, /* 0x1f10 */
84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, /* 0x1f20 */
65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 76, 90, 77, 65, 95, /* 0x1f30 */
69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 56, /* 0x1f40 */
52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x1f50 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 51, 57, 99, 32, /* 0x1f60 */
32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, /* 0x1f70 */
32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, /* 0x1f80 */
10, 32, 32, 54, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, /* 0x1f90 */
32, 32, 32, 48, 48, 48, 48, 48, 57, 57, 99, 32, 32, 48, 48, 48, /* 0x1fa0 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x1fb0 */
32, 48, 48, 48, 48, 48, 52, 50, 48, 32, 32, 50, 42, 42, 48, 32, /* 0x1fc0 */
32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, /* 0x1fd0 */
78, 76, 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x1fe0 */
50, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 57, 99, 32, 32, /* 0x1ff0 */
48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x2000 */
48, 48, 32, 32, 48, 48, 48, 48, 48,100, 98, 99, 32, 32, 50, 42, /* 0x2010 */
42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, /* 0x2020 */
65, 68, 79, 78, 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, /* 0x2030 */
68, 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 49, /* 0x2040 */
48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x2050 */
48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, 53, 56, 32, /* 0x2060 */
32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, /* 0x2070 */
32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 57, 32, 78, 82, /* 0x2080 */
86, 95, 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, /* 0x2090 */
48, 48, 50, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x20a0 */
48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 55, /* 0x20b0 */
54, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, /* 0x20c0 */
84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48, /* 0x20d0 */
32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, /* 0x20e0 */
48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x20f0 */
48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x2100 */
48, 49, 55, 56, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, /* 0x2110 */
84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, /* 0x2120 */
32, 49, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, /* 0x2130 */
32, 32, 48, 48, 48, 48, 48, 48, 53, 52, 32, 32, 48, 48, 48, 48, /* 0x2140 */
48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x2150 */
48, 48, 48, 48, 49, 55, 56, 56, 32, 32, 50, 42, 42, 48, 32, 32, /* 0x2160 */
67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, /* 0x2170 */
76, 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, /* 0x2180 */
10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, /* 0x2190 */
32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, 48, 48, 48, /* 0x21a0 */
48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, /* 0x21b0 */
10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, /* 0x21c0 */
32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, /* 0x21d0 */
48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, /* 0x21e0 */
48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, /* 0x21f0 */
70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2200 */
69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, /* 0x2210 */
48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 79, 83, 48, /* 0x2220 */
48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 79, /* 0x2230 */
83, 48, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, /* 0x2240 */
32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, /* 0x2250 */
48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 72, 69, 65, 68, /* 0x2260 */
10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, /* 0x2270 */
32, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x2280 */
32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x2290 */
108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, /* 0x22a0 */
48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, /* 0x22b0 */
48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, /* 0x22c0 */
86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, /* 0x22d0 */
50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, /* 0x22e0 */
32,100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 9, 48, /* 0x22f0 */
48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70, /* 0x2300 */
48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, /* 0x2310 */
32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, /* 0x2320 */
48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x2330 */
49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, /* 0x2340 */
32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 9, 48, /* 0x2350 */
48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, /* 0x2360 */
50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, /* 0x2370 */
32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, 48, /* 0x2380 */
48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 10, 48, /* 0x2390 */
48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, /* 0x23a0 */
77, 65, 67, 79, 83, 48, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, /* 0x23b0 */
48, 32, 95,115,116, 97,114,116, 10, 10, 10, 82, 69, 76, 79, 67, /* 0x23c0 */
65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, /* 0x23d0 */
82, 32, 91, 77, 65, 67, 79, 83, 48, 48, 48, 93, 58, 10, 79, 70, /* 0x23e0 */
70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, /* 0x23f0 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, /* 0x2400 */
48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 80, 80, 67, 95, 82, 69, /* 0x2410 */
76, 50, 52, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, /* 0x2420 */
78, 90, 43, 48,120, 48, 48, 48, 48, 48, 48, 52, 52, 10, 10, 10, /* 0x2430 */
82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, /* 0x2440 */
68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 69, 93, 58, 10, /* 0x2450 */
79, 70, 70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, /* 0x2460 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, /* 0x2470 */
10, 48, 48, 48, 48, 48, 48, 98, 52, 32, 82, 95, 80, 80, 67, 95, /* 0x2480 */
82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 95, /* 0x2490 */
84, 65, 73, 76, 10, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, /* 0x24a0 */
78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, /* 0x24b0 */
82, 86, 50, 68, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, /* 0x24c0 */
84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x24d0 */
32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 98, 52, /* 0x24e0 */
32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, /* 0x24f0 */
32, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 10, 10, 82, 69, /* 0x2500 */
76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, /* 0x2510 */
32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93, 58, 10, 79, 70, /* 0x2520 */
70, 83, 69, 84, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, /* 0x2530 */
32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, /* 0x2540 */
48, 48, 48, 48, 48, 57, 48, 32, 82, 95, 80, 80, 67, 95, 82, 69, /* 0x2550 */
76, 49, 52, 32, 32, 32, 32, 32, 32, 32, 78, 82, 86, 95, 84, 65, /* 0x2560 */
73, 76, 10, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, /* 0x2570 */
82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, 90, 77, /* 0x2580 */
65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, /* 0x2590 */
32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x25a0 */
32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, /* 0x25b0 */
48, 48, 52, 32, 82, 95, 80, 80, 67, 95, 82, 69, 76, 49, 52, 32, /* 0x25c0 */
32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, /* 0x25d0 */
43, 48,120, 48, 48, 48, 48, 48, 48, 49, 48, 10, 10, 10 /* 0x25e0 */
};

View File

@ -28,8 +28,8 @@
#define FOLD_MACHPPC32_SIZE 1660
#define FOLD_MACHPPC32_ADLER32 0xdacb2724
#define FOLD_MACHPPC32_CRC32 0xa548d6c6
#define FOLD_MACHPPC32_ADLER32 0xfc8b272c
#define FOLD_MACHPPC32_CRC32 0x62ce0ae3
unsigned char fold_machppc32[1660] = {
72, 0, 0,105, 40, 6, 0,208, 76,130, 0, 32, 84,132,240,191, /* 0x 0 */
@ -68,7 +68,7 @@ unsigned char fold_machppc32[1660] = {
56, 96, 0,127, 75,255,254,245,127, 5, 72, 64, 65,185,255,244, /* 0x 210 */
128, 31, 0, 0,127,137, 0, 64, 65,189,255,232,128, 31, 0, 4, /* 0x 220 */
64,152, 0,136,124,164, 43,120,128,126, 0, 4,124, 5, 3,120, /* 0x 230 */
56,193, 0, 32,128,225, 0, 24,145, 33, 0, 32,127,136, 3,166, /* 0x 240 */
56,193, 0, 32,136,225, 0, 24,145, 33, 0, 32,127,136, 3,166, /* 0x 240 */
78,128, 0, 33, 47,131, 0, 0, 64,190,255,184,128,129, 0, 32, /* 0x 250 */
128, 1, 0, 16,127,132, 0, 0, 64,190,255,168,136,193, 0, 25, /* 0x 260 */
49, 61,255,255,124, 9,233, 16,125, 38, 0,208, 85, 41, 15,254, /* 0x 270 */

View File

@ -81,6 +81,7 @@ eof_nrv:
sz_b_info= 12
sz_unc= 0
sz_cpr= 4
b_method= 8
/* Decompress the rest of this loader, and jump to it. */
unfold:
@ -88,6 +89,7 @@ unfold:
lwz lsrc,4+sz_cpr(t0); mtctr lsrc # length to copy (and decompress)
lwz ldst,4+sz_unc(t0)
lbz meth,4+b_method(t0)
add dst,lsrc,t0; addi dst,dst,4+sz_b_info
add src,ldst,t0; addi src,src,GAP+64 # defend against prefetch and overlap
movup: # descending copy moves folded_loader to higher address
@ -97,10 +99,12 @@ movup: # descending copy moves folded_loader to higher address
mtctr r31 # &decompress
addi dst,t0,GAP # &unfolded result
la ldst,-4(sp) # &sz_result [will be ignored]
stw ldst,-4(sp) # LZMA needs for EOF
la ldst,-4(sp) # &sz_result
bctr # call decompress: branch to counter register, return to link register
main:
teq r0,r0 // debugging
mflr r31 # r31= &decompress
call unfold
L100: GAP= 128 # > farthest_prefetch; must match ../p_mach.cpp

View File

@ -175,8 +175,8 @@ ERR_LAB
if (h.sz_cpr < h.sz_unc) { // Decompress block
nrv_uint out_len = h.sz_unc; // EOF for lzma
int const j = (*f_decompress)(xi->buf, h.sz_cpr, xo->buf, &out_len,
*(int *)(void *)&h.b_method);
int const j = (*f_decompress)(xi->buf, h.sz_cpr,
xo->buf, &out_len, h.b_method);
if (j != 0 || out_len != (nrv_uint)h.sz_unc)
err_exit(7);
if (h.b_ftid!=0 && f_unf) { // have filter