ELF2 for arm64 main programs

modified:   ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
	modified:   p_lx_elf.cpp
	modified:   stub/Makefile
	modified:   stub/src/amd64-linux.elf-entry.S
	modified:   stub/src/amd64-linux.elf-main2.c
	modified:   stub/src/arm64-linux.elf-entry.S
	modified:   stub/src/arm64-linux.elf-fold.S
	modified:   stub/src/arm64-linux.elf-fold.lds
	new file:   stub/src/arm64-linux.elf-main2.c
           plus generated *.h *.dump *.map
This commit is contained in:
John Reiser
2024-06-24 14:38:53 -07:00
parent 4fa50b96ad
commit 6276a4a7c4
14 changed files with 1403 additions and 912 deletions
+21 -21
View File
@@ -46,12 +46,12 @@ b8c35fa2956da17ca505956e9f5017bb5f3a746322647e24ccb8ff28059cafa4 *powerpc-linux.
a0950546dc17fca9437219431d8ddb0249ce5b08e899e0c799a87ac982adee70 *powerpc64le-linux.elf/upx-3.95 a0950546dc17fca9437219431d8ddb0249ce5b08e899e0c799a87ac982adee70 *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t110_compress_ucl_nrv2b_3_no_filter="\ expected_sha256sums__t110_compress_ucl_nrv2b_3_no_filter="\
ac7093ea493bfa05e1229584029be585bf6042099fce41bb3f5b89279a41c8f6 *amd64-linux.elf/upx-3.91 1dcbac9b18093bc2cfa8180bc2f6ebf654decb322f9f90bc884f64446397599a *amd64-linux.elf/upx-3.91
7b49177bad3dfe076ded4fb661d601bf8c0a26f900686dee41425ff5af3407c1 *amd64-linux.elf/upx-3.95 f1df33ab1679203b3aa32ae79250bec646435bacb721388e0289947d7b387d88 *amd64-linux.elf/upx-3.95
1bd70a3cd3b34e635a3c947cacd46c4d66bf07e0fd350cc6d1f3cf60483f75b9 *amd64-win64.pe/upx-3.95.exe 1bd70a3cd3b34e635a3c947cacd46c4d66bf07e0fd350cc6d1f3cf60483f75b9 *amd64-win64.pe/upx-3.95.exe
c9d8d916100e1dd972a2a9a060e4213505b14c62e9705ab6c8b544a8f18e083d *arm-linux.elf/upx-3.95 c9d8d916100e1dd972a2a9a060e4213505b14c62e9705ab6c8b544a8f18e083d *arm-linux.elf/upx-3.95
94422a91473a467dfb534afa3f20247bc38691aeb386a42fb3e0fd18d3d0ae08 *arm-wince.pe/upx-3.91.exe 94422a91473a467dfb534afa3f20247bc38691aeb386a42fb3e0fd18d3d0ae08 *arm-wince.pe/upx-3.91.exe
73264b5b85b3866e7d132a29745deff2fc3fe190b66e492fdb22df188d801cc8 *arm64-linux.elf/upx-3.95 fcdfb02749f51327bfef97369d4f4c95d3b87ef9534a3e6f8c3022aff3f667fa *arm64-linux.elf/upx-3.95
0a9d0d95822a7d645d67b61ebd5b86d8be07b8a36e0f29dbc9b55a8666ed67af *armeb-linux.elf/upx-3.91 0a9d0d95822a7d645d67b61ebd5b86d8be07b8a36e0f29dbc9b55a8666ed67af *armeb-linux.elf/upx-3.91
6e4ff31a80809fc5058ae714ab10ad7810c310bd7d116fad8b198009b9872312 *armeb-linux.elf/upx-3.95 6e4ff31a80809fc5058ae714ab10ad7810c310bd7d116fad8b198009b9872312 *armeb-linux.elf/upx-3.95
e17a126cebc32977991a292b7434d1435a7c95862ccece0e4acbf6e810bd3443 *i386-dos32.djgpp2.coff/upx-3.91.exe e17a126cebc32977991a292b7434d1435a7c95862ccece0e4acbf6e810bd3443 *i386-dos32.djgpp2.coff/upx-3.91.exe
@@ -69,12 +69,12 @@ fcbd8b4709ee324eb772e5de45a85bac5b8e560460fb1d50d0958f2ce568be97 *mipsel-linux.e
d74c348bad0c1f3e776cf78282141492a58746c601f3f4288c9e675b7b425f82 *powerpc64le-linux.elf/upx-3.95 d74c348bad0c1f3e776cf78282141492a58746c601f3f4288c9e675b7b425f82 *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t120_compress_ucl_nrv2d_3_no_filter="\ expected_sha256sums__t120_compress_ucl_nrv2d_3_no_filter="\
4d50cd6cb9456f54533d98b217826077ec4afd23fe80acf35f52ab42d6dc63e6 *amd64-linux.elf/upx-3.91 6e5cdecceed30621f3cdd62dad279d027d6668311374917ae591de63b7a7857a *amd64-linux.elf/upx-3.91
269f04d0109a4eb160e9696998c60c9301927b504b110b023f07f03ba721202f *amd64-linux.elf/upx-3.95 3c9e7bc6a5fe039da7b56be80f8ee90a1cf3112b53080c0fdd059a61b1bed6be *amd64-linux.elf/upx-3.95
0314c6974f29d180e46e41a1004d46a3993fe96f03de7f78d45ad89ad3b2177e *amd64-win64.pe/upx-3.95.exe 0314c6974f29d180e46e41a1004d46a3993fe96f03de7f78d45ad89ad3b2177e *amd64-win64.pe/upx-3.95.exe
0f781a70828dc3b939988b96e70c0734cef3f4a7693624e61f7a678b0c8667a6 *arm-linux.elf/upx-3.95 0f781a70828dc3b939988b96e70c0734cef3f4a7693624e61f7a678b0c8667a6 *arm-linux.elf/upx-3.95
d7839b7dee866794e4ca3df32e2b1084b35aa22dee5f060fa14b5ca09c612ba3 *arm-wince.pe/upx-3.91.exe d7839b7dee866794e4ca3df32e2b1084b35aa22dee5f060fa14b5ca09c612ba3 *arm-wince.pe/upx-3.91.exe
0e1298896e6eac45ebe3610571fda980555c00a022e215d6fd7ab4af3a1fae2f *arm64-linux.elf/upx-3.95 20930d073fccb9730b8f1930a88cdcd822d7449a310cc5372cceaa0c52acffca *arm64-linux.elf/upx-3.95
7ebffb7cd7a0f95e82738cb58728334fe51b5174f54f807303d281e4594037cf *armeb-linux.elf/upx-3.91 7ebffb7cd7a0f95e82738cb58728334fe51b5174f54f807303d281e4594037cf *armeb-linux.elf/upx-3.91
4a9d498ec0df4923ebb475f634c25f9b47eea115998adfd9c46b7dc4a561cf47 *armeb-linux.elf/upx-3.95 4a9d498ec0df4923ebb475f634c25f9b47eea115998adfd9c46b7dc4a561cf47 *armeb-linux.elf/upx-3.95
4a434c3a14686786369c8bede8736d15e307ed7dd8c40cccb8f22003b05db968 *i386-dos32.djgpp2.coff/upx-3.91.exe 4a434c3a14686786369c8bede8736d15e307ed7dd8c40cccb8f22003b05db968 *i386-dos32.djgpp2.coff/upx-3.91.exe
@@ -92,12 +92,12 @@ d05786b4b729f13a9b325322c2ea41ca7db6f60fee9f82c58874a25ee7eca086 *powerpc-linux.
c4888e9ed7c587163b53246c2c0cb2c6118122feacfc5248f371d8f6c8783abd *powerpc64le-linux.elf/upx-3.95 c4888e9ed7c587163b53246c2c0cb2c6118122feacfc5248f371d8f6c8783abd *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t130_compress_ucl_nrv2e_3_no_filter="\ expected_sha256sums__t130_compress_ucl_nrv2e_3_no_filter="\
6b0f012f0b412e9589cfb5180b5a54c4535b87d781ee0ea4d7ebd3877312f97f *amd64-linux.elf/upx-3.91 be909d6362b96620480ca307c05b28a6856714a113026d36c1e7470d207155d5 *amd64-linux.elf/upx-3.91
a20e7a2056834060632ad551381c73b8c5072ecca4f7af3df34c541878e29380 *amd64-linux.elf/upx-3.95 56166479df570e70c1a74b801096aa64d653c00a933ae9b11c06df580ba99d31 *amd64-linux.elf/upx-3.95
97bb5953405f3413d9ff9bdc272caf2858697168b3e85dab54213da356b5ea0f *amd64-win64.pe/upx-3.95.exe 97bb5953405f3413d9ff9bdc272caf2858697168b3e85dab54213da356b5ea0f *amd64-win64.pe/upx-3.95.exe
0bf33b6b3f246093a7e15c4a51b0a15f40c7ec9c16fcd38613b8b66004a3b3cb *arm-linux.elf/upx-3.95 0bf33b6b3f246093a7e15c4a51b0a15f40c7ec9c16fcd38613b8b66004a3b3cb *arm-linux.elf/upx-3.95
8c73f5acfc70e3c518be09978af87b9bec4906240cb457a166da0eba05bea4db *arm-wince.pe/upx-3.91.exe 8c73f5acfc70e3c518be09978af87b9bec4906240cb457a166da0eba05bea4db *arm-wince.pe/upx-3.91.exe
8f21a05b2edfea21c0b3df2fd0b955e480bccc7bebc71fcc8918bf625d200dcf *arm64-linux.elf/upx-3.95 eb5e101d1299518212be474f27242f63fd495f9e6c930d40f38edb02fff86567 *arm64-linux.elf/upx-3.95
4be1831f03092f1c594115d95663f3d180c0066e10b9d8389f25a350a3976529 *armeb-linux.elf/upx-3.91 4be1831f03092f1c594115d95663f3d180c0066e10b9d8389f25a350a3976529 *armeb-linux.elf/upx-3.91
c3ec4a5148e25f74f6c8dca92b608f65dc5539f9c5a0f839f801612b13505bd1 *armeb-linux.elf/upx-3.95 c3ec4a5148e25f74f6c8dca92b608f65dc5539f9c5a0f839f801612b13505bd1 *armeb-linux.elf/upx-3.95
d454dd376db342e7650a93bd4859546711c94f5da55336e5b969dbea996465d9 *i386-dos32.djgpp2.coff/upx-3.91.exe d454dd376db342e7650a93bd4859546711c94f5da55336e5b969dbea996465d9 *i386-dos32.djgpp2.coff/upx-3.91.exe
@@ -115,12 +115,12 @@ fa3be8f93006a88c7ad3d9fd13f600c4f69745859eb76f7eab317a5b87d256ea *mipsel-linux.e
cf8c7d3616c00e6709eea0ae335cc3959a8debdac3623076541f51724649a6cc *powerpc64le-linux.elf/upx-3.95 cf8c7d3616c00e6709eea0ae335cc3959a8debdac3623076541f51724649a6cc *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t140_compress_lzma_2_no_filter="\ expected_sha256sums__t140_compress_lzma_2_no_filter="\
3bb0b0e781849c7b4c39b85eec13088479f4d01edfa62ea412a08456c6d578ab *amd64-linux.elf/upx-3.91 8f1a3bcfd3a3908c667970e3c2342e6421e49df985edb12a9f8d16a8636b13f1 *amd64-linux.elf/upx-3.91
c414d7606ca9c58097fb987ac859f3fad6e1416c0b3934318e240708ed660e9f *amd64-linux.elf/upx-3.95 255643b345ffb38904dfeb200e21a0f67802e299e05563ad3cd8240e207d279e *amd64-linux.elf/upx-3.95
b8815f95e92d6853a04a86069e9054115be2d9aa657fa2c8912d0f37e56c894f *amd64-win64.pe/upx-3.95.exe b8815f95e92d6853a04a86069e9054115be2d9aa657fa2c8912d0f37e56c894f *amd64-win64.pe/upx-3.95.exe
7a832eb6c3c33a04053786334c9e1953796ba2debacc754b5a18632ec987aa40 *arm-linux.elf/upx-3.95 7a832eb6c3c33a04053786334c9e1953796ba2debacc754b5a18632ec987aa40 *arm-linux.elf/upx-3.95
018242f330e19dd7ca2fb78687c0070ad88f1aa2e113be865c30ad3ff94a4ada *arm-wince.pe/upx-3.91.exe 018242f330e19dd7ca2fb78687c0070ad88f1aa2e113be865c30ad3ff94a4ada *arm-wince.pe/upx-3.91.exe
ede34a26982566c5f04b43a112d6dfc2bdb817f1d81895e62c64520788300d5f *arm64-linux.elf/upx-3.95 e38062cc314a5a2e89c47ec4dadb888db07d7ac355e5523469ae75766f6068bc *arm64-linux.elf/upx-3.95
0a64b334793d1d6056241d0072afe8aa34d92ca5680192d05e1df90ca2f3c893 *armeb-linux.elf/upx-3.91 0a64b334793d1d6056241d0072afe8aa34d92ca5680192d05e1df90ca2f3c893 *armeb-linux.elf/upx-3.91
895a9facf830fbcf2953adc0d7cf364fc5ab716f03940fc6165b49343c5253de *armeb-linux.elf/upx-3.95 895a9facf830fbcf2953adc0d7cf364fc5ab716f03940fc6165b49343c5253de *armeb-linux.elf/upx-3.95
4e16bdab8b74ea5c7de4f255eec035189c24ac6374afef883c17696642c4fe16 *i386-dos32.djgpp2.coff/upx-3.91.exe 4e16bdab8b74ea5c7de4f255eec035189c24ac6374afef883c17696642c4fe16 *i386-dos32.djgpp2.coff/upx-3.91.exe
@@ -138,12 +138,12 @@ a214c035d403c1dc7b5d80d6cfd8e00e2278f8600332875f2e53e1c61648fdc2 *powerpc-linux.
e614e62b002d3f8e900099d1683d17a932e8879c53de6b9a9d4a064f551afa8d *powerpc64le-linux.elf/upx-3.95 e614e62b002d3f8e900099d1683d17a932e8879c53de6b9a9d4a064f551afa8d *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t150_compress_ucl_2_all_filters="\ expected_sha256sums__t150_compress_ucl_2_all_filters="\
a60cc1b7b7734c3874fed17e8ff79f212b97c2eed15ee9e6c48600b19b9201cb *amd64-linux.elf/upx-3.91 afdac91bf87ea0399034adcc9b5744726d3d1c7173306f19ca6a3c86acd4c6bc *amd64-linux.elf/upx-3.91
b2fa0763c1635014e886c457b0263aef9ccc304db6c08ebc4451a91a7b9e2f4c *amd64-linux.elf/upx-3.95 4c61a6e47671d57391f61c5110c42092033a49e1fe0a950c8f85e1c7f797d09e *amd64-linux.elf/upx-3.95
434732efb16b89114162a1787a28c128e2c11edb9835411f2b707cac5cd475ae *amd64-win64.pe/upx-3.95.exe 434732efb16b89114162a1787a28c128e2c11edb9835411f2b707cac5cd475ae *amd64-win64.pe/upx-3.95.exe
acbb1628a4631ec5ded40ec286c55544839f57a671ef925c89f81a7fff937954 *arm-linux.elf/upx-3.95 acbb1628a4631ec5ded40ec286c55544839f57a671ef925c89f81a7fff937954 *arm-linux.elf/upx-3.95
93e2ead9e54732a1731896681d415e3ce60b7420ad7f3c57822ad7dbd061cdd3 *arm-wince.pe/upx-3.91.exe 93e2ead9e54732a1731896681d415e3ce60b7420ad7f3c57822ad7dbd061cdd3 *arm-wince.pe/upx-3.91.exe
83799cb0b2736bc0c38a23b0a37e127e6066e1cf87eaf9b65541861d8131ffa4 *arm64-linux.elf/upx-3.95 dee589677746210903d4c752da178cafe0ba6fddafc9beb566dfef1692dcf9b3 *arm64-linux.elf/upx-3.95
9d6b8ef721a9af947f8439c5e6805da9ecadf8e5e41f1e5ef54c40f3c8395db2 *armeb-linux.elf/upx-3.91 9d6b8ef721a9af947f8439c5e6805da9ecadf8e5e41f1e5ef54c40f3c8395db2 *armeb-linux.elf/upx-3.91
591f023a8c6506cf8113fcb8a8672d0044890d60c6b9372a7eeeb40c9f5af464 *armeb-linux.elf/upx-3.95 591f023a8c6506cf8113fcb8a8672d0044890d60c6b9372a7eeeb40c9f5af464 *armeb-linux.elf/upx-3.95
2957b481e67689a5ad43dcfdfde207b9eb16142c161f3e43fd0eeff5917fefbd *i386-dos32.djgpp2.coff/upx-3.91.exe 2957b481e67689a5ad43dcfdfde207b9eb16142c161f3e43fd0eeff5917fefbd *i386-dos32.djgpp2.coff/upx-3.91.exe
@@ -161,12 +161,12 @@ e3825daa7fb8d509590c1db347a8403dbd899da453fb43850ebf1d31abbe0cba *powerpc-linux.
3b246002f2dff8e44cf3c2cd2c64701514a1354c27b616c9a704f542df30e04f *powerpc64le-linux.elf/upx-3.95 3b246002f2dff8e44cf3c2cd2c64701514a1354c27b616c9a704f542df30e04f *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t160_compress_all_methods_1_no_filter="\ expected_sha256sums__t160_compress_all_methods_1_no_filter="\
966ac969f6670e153d53262a83bfbbcaa696a7ffad884d514e51eab1ca3783b7 *amd64-linux.elf/upx-3.91 f9e4463d20f5e5f2f359c8503d7846be3409d0eaabee2772b0c9aa6b843aec48 *amd64-linux.elf/upx-3.91
4d01dd4a8890f6fc23a26833ea36a7d9a00de276bbbcebfb1cb6a51475986722 *amd64-linux.elf/upx-3.95 c6c01776f3f3a912abff169de5507ba4fa67bc045e9699d5a8a6f694796f7768 *amd64-linux.elf/upx-3.95
f38ff7edc916c1a3e82020035667de858c89d52c98d960dad0e21b4da444ed6c *amd64-win64.pe/upx-3.95.exe f38ff7edc916c1a3e82020035667de858c89d52c98d960dad0e21b4da444ed6c *amd64-win64.pe/upx-3.95.exe
2481a933d3f1bcaed047e9cbc81ae227351e86e7c6c761c4756faea0c525aeb6 *arm-linux.elf/upx-3.95 2481a933d3f1bcaed047e9cbc81ae227351e86e7c6c761c4756faea0c525aeb6 *arm-linux.elf/upx-3.95
bb475839ec547696aaccf4da202b99be927c872e5de298a5eb1f0be0edc06d1d *arm-wince.pe/upx-3.91.exe bb475839ec547696aaccf4da202b99be927c872e5de298a5eb1f0be0edc06d1d *arm-wince.pe/upx-3.91.exe
856c8e7c77318394baa9880ef794627114f8e2e31c72ca1098c7797b716d5fa8 *arm64-linux.elf/upx-3.95 7634941f1bd62cc5b42467ed26a1f9a85d317dad01fa55f3914848caf01f7375 *arm64-linux.elf/upx-3.95
d33a702da5d0c46e744056c24e8323360223ed8e1be07660eecc28ade7b5fc75 *armeb-linux.elf/upx-3.91 d33a702da5d0c46e744056c24e8323360223ed8e1be07660eecc28ade7b5fc75 *armeb-linux.elf/upx-3.91
57790e4d030d32d19ae6ba2a485a5bc6f7244c7e65d3ec4c8b0afe395927dd83 *armeb-linux.elf/upx-3.95 57790e4d030d32d19ae6ba2a485a5bc6f7244c7e65d3ec4c8b0afe395927dd83 *armeb-linux.elf/upx-3.95
8673a20ba4b83e25daab30431ed215dcb35f595fa0cabf67ff57368a07ba4c14 *i386-dos32.djgpp2.coff/upx-3.91.exe 8673a20ba4b83e25daab30431ed215dcb35f595fa0cabf67ff57368a07ba4c14 *i386-dos32.djgpp2.coff/upx-3.91.exe
@@ -184,12 +184,12 @@ c37806b0d68697276cdd208ab37c92e01055bfbab73c6bbdf054c95fe9cef3b9 *powerpc-linux.
bdd174f8e00e1364fba1f821b56e0083fb9993d2bab9e3a93fced8f66ccc84c7 *powerpc64le-linux.elf/upx-3.95 bdd174f8e00e1364fba1f821b56e0083fb9993d2bab9e3a93fced8f66ccc84c7 *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t170_compress_all_methods_no_lzma_5_no_filter="\ expected_sha256sums__t170_compress_all_methods_no_lzma_5_no_filter="\
a00c0f98e790ab31600fdc918e76b35cd7f1f4b7bada42980b6d7ee8e963caa8 *amd64-linux.elf/upx-3.91 276a901f5187f7e020f584451aae4a93d50fc1b93d79637725e16df9a5a65b32 *amd64-linux.elf/upx-3.91
3a0dbc859768bee2213632ac0fb811562e282c183eccd2930b04378f583bd7dd *amd64-linux.elf/upx-3.95 4a52204ba45028280f7b3528c186e8f42145a51dfa7d081e24b70081b272bc27 *amd64-linux.elf/upx-3.95
5fccb0f5044baaa74d176efb25eefa3b5810dc737ed0f9d38084d275f7ebe7b8 *amd64-win64.pe/upx-3.95.exe 5fccb0f5044baaa74d176efb25eefa3b5810dc737ed0f9d38084d275f7ebe7b8 *amd64-win64.pe/upx-3.95.exe
90e56eefcce87542dbbc65e54c83c7e921a747877cbe489089c6043165b4f334 *arm-linux.elf/upx-3.95 90e56eefcce87542dbbc65e54c83c7e921a747877cbe489089c6043165b4f334 *arm-linux.elf/upx-3.95
56be0b4046accdfadbe534ecb6e6452b9e3a18bb9eac39da0ee8893c31d24416 *arm-wince.pe/upx-3.91.exe 56be0b4046accdfadbe534ecb6e6452b9e3a18bb9eac39da0ee8893c31d24416 *arm-wince.pe/upx-3.91.exe
11994cbac13b0545049d35d331581ad7fb773075b619a378958d39c531aaa88a *arm64-linux.elf/upx-3.95 a921bfa806e2d5c987a2ad908c8a7132779e24d56da5210cce6304ea90c9f312 *arm64-linux.elf/upx-3.95
0925e9f13460111685bcf3e695a0e191a083f43149cb0a2e6f93ca68f414614b *armeb-linux.elf/upx-3.91 0925e9f13460111685bcf3e695a0e191a083f43149cb0a2e6f93ca68f414614b *armeb-linux.elf/upx-3.91
03e9bb54264382f17dc15e451b9aff634e41d0b3e14585350479bf143b612c09 *armeb-linux.elf/upx-3.95 03e9bb54264382f17dc15e451b9aff634e41d0b3e14585350479bf143b612c09 *armeb-linux.elf/upx-3.95
6f9fbac216cd42aa370cb90965e74669daf33fd403bf0a250aaec06dd3439009 *i386-dos32.djgpp2.coff/upx-3.91.exe 6f9fbac216cd42aa370cb90965e74669daf33fd403bf0a250aaec06dd3439009 *i386-dos32.djgpp2.coff/upx-3.91.exe
+4 -3
View File
@@ -1651,8 +1651,8 @@ PackLinuxElf64::buildLinuxLoader(
} }
else if (0 else if (0
|| this->e_machine==Elf64_Ehdr::EM_X86_64 || this->e_machine==Elf64_Ehdr::EM_X86_64
|| this->e_machine==Elf64_Ehdr::EM_AARCH64
//ELF2 NYI || this->e_machine==Elf64_Ehdr::EM_PPC64 //ELF2 NYI || this->e_machine==Elf64_Ehdr::EM_PPC64
//ELF2 NYI || this->e_machine==Elf64_Ehdr::EM_AARCH64
) { // main program with ELF2 de-compressor ) { // main program with ELF2 de-compressor
initLoader(fold, szfold); initLoader(fold, szfold);
char sec[120]; memset(sec, 0, sizeof(sec)); // debug convenience char sec[120]; memset(sec, 0, sizeof(sec)); // debug convenience
@@ -1719,15 +1719,16 @@ PackLinuxElf64::buildLinuxLoader(
if (xct_off if (xct_off
&& (0 && (0
|| this->e_machine==Elf64_Ehdr::EM_X86_64 || this->e_machine==Elf64_Ehdr::EM_X86_64
|| this->e_machine==Elf64_Ehdr::EM_AARCH64
//ELF2 NYI || this->e_machine==Elf64_Ehdr::EM_PPC64 //ELF2 NYI || this->e_machine==Elf64_Ehdr::EM_PPC64
|| this->e_machine==Elf64_Ehdr::EM_AARCH64) )
) { ) {
addLoader("ELFMAINX,ELFMAINZ,FOLDEXEC,IDENTSTR"); addLoader("ELFMAINX,ELFMAINZ,FOLDEXEC,IDENTSTR");
} // shlib } // shlib
else if (0 else if (0
|| this->e_machine==Elf64_Ehdr::EM_X86_64 || this->e_machine==Elf64_Ehdr::EM_X86_64
|| this->e_machine==Elf64_Ehdr::EM_AARCH64
//ELF2 NYI || this->e_machine==Elf64_Ehdr::EM_PPC64 //ELF2 NYI || this->e_machine==Elf64_Ehdr::EM_PPC64
//ELF2 NYI || this->e_machine==Elf64_Ehdr::EM_AARCH64
) { // main program with ELF2 de-compressor ) { // main program with ELF2 de-compressor
addLoader("ELFMAINX,ELFMAINZ,FOLDEXEC,IDENTSTR"); addLoader("ELFMAINX,ELFMAINZ,FOLDEXEC,IDENTSTR");
if (this->e_machine==Elf64_Ehdr::EM_PPC64 if (this->e_machine==Elf64_Ehdr::EM_PPC64
+14 -7
View File
@@ -700,6 +700,8 @@ tc.arm64-linux.elf.gcc = arm64-linux-gcc-4.9.2 -nostdinc -MMD -MT $@
tc.arm64-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables tc.arm64-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
tc.arm64-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror tc.arm64-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
+tc.arm64-expand.gcc = $(tc.arm64-linux.elf.gcc)
tc.arm64-linux.elf-fold.ld = arm64-linux-ld-2.25 tc.arm64-linux.elf-fold.ld = arm64-linux-ld-2.25
tc.arm64-linux.elf-so_fold.ld = arm64-linux-ld-2.25 tc.arm64-linux.elf-so_fold.ld = arm64-linux-ld-2.25
@@ -707,15 +709,16 @@ tc.arm64-linux.elf-entry.objcopy = arm64-linux-objcopy-2.25 -F elf64-littlea
tc.arm64-linux.elf-so_entry.objcopy = arm64-linux-objcopy-2.25 -F elf64-littleaarch64 tc.arm64-linux.elf-so_entry.objcopy = arm64-linux-objcopy-2.25 -F elf64-littleaarch64
tc.arm64-linux.elf-fold.objcopy = arm64-linux-objcopy-2.25 -F elf64-littleaarch64 tc.arm64-linux.elf-fold.objcopy = arm64-linux-objcopy-2.25 -F elf64-littleaarch64
tc.arm64-linux.elf-so_fold.objcopy = arm64-linux-objcopy-2.25 -F elf64-littleaarch64 tc.arm64-linux.elf-so_fold.objcopy = arm64-linux-objcopy-2.25 -F elf64-littleaarch64
tc.arm64-linux.elf-main.objcopy = arm64-linux-objcopy-2.25 -F elf64-littleaarch64 tc.arm64-linux.elf-main2.objcopy = arm64-linux-objcopy-2.25 -F elf64-littleaarch64
tc.arm64-linux.elf-so_main.objcopy = arm64-linux-objcopy-2.25 -F elf64-littleaarch64 tc.arm64-linux.elf-so_main.objcopy = arm64-linux-objcopy-2.25 -F elf64-littleaarch64
tc.arm64-linux.elf-entry.objdump = arm64-linux-objdump-2.25 tc.arm64-linux.elf-entry.objdump = arm64-linux-objdump-2.25
tc.arm64-linux.elf-so_entry.objdump = arm64-linux-objdump-2.25 tc.arm64-linux.elf-so_entry.objdump = arm64-linux-objdump-2.25
tc.arm64-linux.elf-fold.objdump = arm64-linux-objdump-2.25 tc.arm64-linux.elf-fold.objdump = arm64-linux-objdump-2.25
tc.arm64-linux.elf-so_fold.objdump = arm64-linux-objdump-2.25 tc.arm64-linux.elf-so_fold.objdump = arm64-linux-objdump-2.25
tc.arm64-linux.elf-main.objdump = arm64-linux-objdump-2.25 tc.arm64-linux.elf-main2.objdump = arm64-linux-objdump-2.25
tc.arm64-linux.elf-so_main.objdump = arm64-linux-objdump-2.25 tc.arm64-linux.elf-so_main.objdump = arm64-linux-objdump-2.25
tc.arm64-expand.objdump = arm64-linux-objdump-2.25
arm64-linux.elf-entry.h : $(srcdir)/src/$$T.S arm64-linux.elf-entry.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o tmp/$T.bin $(call tc,gcc) -c $< -o tmp/$T.bin
@@ -727,10 +730,13 @@ arm64-linux.elf-so_entry.h: $(srcdir)/src/$$T.S
$(call tc,f-embed_objinfo_without_xstrip,tmp/$T.bin) $(call tc,f-embed_objinfo_without_xstrip,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@ $(call tc,bin2h) tmp/$T.bin $@
arm64-linux.elf-fold.h : tmp/$$T.o tmp/arm64-linux.elf-main.o $(srcdir)/src/arm64-linux.elf-fold.lds arm64-linux.elf-fold.h : $(srcdir)/src/$$T.lds \
$(call tc,ld) --strip-all -T $(srcdir)/src/arm64-linux.elf-fold.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin tmp/$$T.o \
$(call tc,f-objstrip,tmp/$T.bin) tmp/arm64-expand.o \
$(call tc,sstrip) tmp/$T.bin tmp/arm64-linux.elf-main2.o
$(call tc,ld) -r -T $(srcdir)/src/$T.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
$(call tc,objdump) -Dr $(tc_objdump_disasm_options) tmp/$T.bin | $(RTRIM) > tmp/$T.bin.disasm
$(call tc,f-embed_objinfo_without_xstrip_keep_dot_text,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@ $(call tc,bin2h) tmp/$T.bin $@
arm64-linux.elf-so_fold.h : tmp/$$T.o tmp/arm64-linux.elf-so_main.o $(srcdir)/src/$$T.lds tmp/arm64-expand.o arm64-linux.elf-so_fold.h : tmp/$$T.o tmp/arm64-linux.elf-so_main.o $(srcdir)/src/$$T.lds tmp/arm64-expand.o
@@ -749,8 +755,9 @@ tmp/arm64-linux.elf-so_fold.o : $(srcdir)/src/$$T.S
tmp/arm64-expand.o: $(srcdir)/src/$$T.S tmp/arm64-expand.o: $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o $@ $(call tc,gcc) -c $< -o $@
arm64-linux-objdump-2.25 -Dr $(tc_objdump_disasm_options) tmp/$T.o | $(RTRIM) > tmp/$T.o.disasm
tmp/arm64-linux.elf-main.o : $(srcdir)/src/$$T.c $(srcdir)/src/arm64-linux.elf-main.c tmp/arm64-linux.elf-main2.o : $(srcdir)/src/$$T.c
$(call tc,gcc) -c -Os $< -o $@ $(call tc,gcc) -c -Os $< -o $@
$(call tc,f-objstrip,$@) $(call tc,f-objstrip,$@)
+3 -3
View File
@@ -33,8 +33,8 @@
/* clang-format off */ /* clang-format off */
#define STUB_AMD64_LINUX_ELF_ENTRY_SIZE 1105 #define STUB_AMD64_LINUX_ELF_ENTRY_SIZE 1105
#define STUB_AMD64_LINUX_ELF_ENTRY_ADLER32 0xbd0f3bb4 #define STUB_AMD64_LINUX_ELF_ENTRY_ADLER32 0xb7253bb2
#define STUB_AMD64_LINUX_ELF_ENTRY_CRC32 0x69ac5629 #define STUB_AMD64_LINUX_ELF_ENTRY_CRC32 0x1881def8
unsigned char stub_amd64_linux_elf_entry[1105] = { unsigned char stub_amd64_linux_elf_entry[1105] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -58,7 +58,7 @@ unsigned char stub_amd64_linux_elf_entry[1105] = {
/* 0x0120 */ 141, 52, 47,243,164, 94,235,180, 93, 89, 72, 57,206,116, 1,244, /* 0x0120 */ 141, 52, 47,243,164, 94,235,180, 93, 89, 72, 57,206,116, 1,244,
/* 0x0130 */ 72,139, 69, 48, 72,137, 4, 36, 72,139, 85, 32, 72,131,234, 16, /* 0x0130 */ 72,139, 69, 48, 72,137, 4, 36, 72,139, 85, 32, 72,131,234, 16,
/* 0x0140 */ 84, 94, 76,137,231,106, 1, 88,232, 60, 0, 0, 0, 85, 92, 69, /* 0x0140 */ 84, 94, 76,137,231,106, 1, 88,232, 60, 0, 0, 0, 85, 92, 69,
/* 0x0150 */ 41,201, 77,137,224,106, 1, 65, 90, 82, 94,106, 7, 90, 41,255, /* 0x0150 */ 41,201, 77,137,224,106, 1, 65, 90, 82, 94,106, 5, 90, 41,255,
/* 0x0160 */ 106, 9, 88,232, 33, 0, 0, 0, 80, 72,137, 69, 24, 65, 80, 95, /* 0x0160 */ 106, 9, 88,232, 33, 0, 0, 0, 80, 72,137, 69, 24, 65, 80, 95,
/* 0x0170 */ 106, 3, 88, 15, 5, 88, 72,131,192, 8,255,224, 72,139, 7, 72, /* 0x0170 */ 106, 3, 88, 15, 5, 88, 72,131,192, 8,255,224, 72,139, 7, 72,
/* 0x0180 */ 131,199, 8, 72,133,192,117,244,195, 80, 15, 5, 89, 72, 61, 0, /* 0x0180 */ 131,199, 8, 72,133,192,117,244,195, 80, 15, 5, 89, 72, 61, 0,
+105 -465
View File
@@ -1,5 +1,5 @@
/* arm64-linux.elf-entry.h /* arm64-linux.elf-entry.h
created from arm64-linux.elf-entry.bin, 7405 (0x1ced) bytes created from arm64-linux.elf-entry.bin, 1646 (0x66e) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -32,472 +32,112 @@
/* clang-format off */ /* clang-format off */
#define STUB_ARM64_LINUX_ELF_ENTRY_SIZE 7405 #define STUB_ARM64_LINUX_ELF_ENTRY_SIZE 1646
#define STUB_ARM64_LINUX_ELF_ENTRY_ADLER32 0xbcad6a23 #define STUB_ARM64_LINUX_ELF_ENTRY_ADLER32 0x3bf2c3a4
#define STUB_ARM64_LINUX_ELF_ENTRY_CRC32 0x4f61097f #define STUB_ARM64_LINUX_ELF_ENTRY_CRC32 0x88b67ee4
unsigned char stub_arm64_linux_elf_entry[7405] = { unsigned char stub_arm64_linux_elf_entry[1646] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 0, 0, 0, /* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 80, 4, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, /* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 0, 0, 0, 0,224, 7,191,169,211,255,255, 24, 0, 0, 0,148, /* 0x0040 */ 0, 0, 0, 0,224, 7,191,169,211,255,255, 24,224, 99, 0,145,
/* 0x0050 */ 254, 15, 31,248,226, 15,191,169, 7, 64, 33,139, 5, 0,128, 18, /* 0x0050 */ 60, 0, 0,148, 59, 0, 0,148,246, 3, 0,170,255,131, 0,209,
/* 0x0060 */ 4, 0,176, 82, 45, 0, 0, 20,227, 19,193,168, 0, 0, 7,203, /* 0x0060 */ 1, 8,193,168, 63, 24, 0,113, 96, 0, 0, 84,161,255,255, 53,
/* 0x0070 */ 66, 0, 3,203,130, 0, 0,185,229, 3, 0,170,224, 3, 3,170, /* 0x0070 */ 34, 0,160,210,250, 3, 2,203,250, 3, 0,249, 0, 0, 0,148,
/* 0x0080 */ 97, 0, 2,139, 35, 0, 59,213, 99, 1,224, 55, 98, 76, 80,211, /* 0x0080 */ 244, 3, 30,170, 1, 0,128, 82,128, 98, 0,209,232, 34,128, 82,
/* 0x0090 */ 100, 0,128,146,132, 32,194,154, 2, 0, 4,138, 95, 0, 1,235, /* 0x0090 */ 1, 0, 0,212,251, 3, 0, 42,128, 6, 64,185,253, 3, 0,145,
/* 0x00a0 */ 162, 0, 0, 84, 34,123, 11,213, 66, 0, 4,203, 63, 0, 2,235, /* 0x00a0 */ 160, 3, 0,203, 0,236,124,146, 31, 0, 0,145,226, 3, 0,170,
/* 0x00b0 */ 168,255,255, 84,159, 59, 3,213, 99, 1,232, 55, 99, 12, 64,146, /* 0x00b0 */ 225, 15, 31,248,227, 3, 0,145,128, 66, 0,145,129, 10, 64,185,
/* 0x00c0 */ 98, 0,128,146, 66, 32,195,154, 0, 0, 2,138, 63, 0, 0,235, /* 0x00c0 */ 132, 50, 64, 57, 34, 0, 0,148,232, 7, 65,248,250, 3, 0,249,
/* 0x00d0 */ 169, 0, 0, 84, 32,117, 11,213, 0, 0, 2,203, 63, 0, 0,235, /* 0x00d0 */ 130, 6, 64,185,225, 3, 0,145,224, 3, 27, 42, 8, 8,128, 82,
/* 0x00e0 */ 168,255,255, 84,159, 59, 3,213,223, 63, 3,213,224, 3, 5,170, /* 0x00e0 */ 1, 0, 0,212,191, 3, 0,145, 5, 0,128,210,228, 3, 27, 42,
/* 0x00f0 */ 254, 7, 65,248,192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52, /* 0x00f0 */ 35, 0,128, 82,162, 0,128, 82,129, 6, 64,185,225, 15, 0,249,
/* 0x0100 */ 192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214, /* 0x0100 */ 0, 0,128,210,200, 27,128, 82, 1, 0, 0,212,224, 11, 0,249,
/* 0x0110 */ 3, 20, 64, 56, 67, 20, 0, 56,248,255,255,151,162,255,255, 84, /* 0x0110 */ 252, 3, 0,170,224, 3, 27, 42, 40, 7,128, 82, 1, 0, 0,212,
/* 0x0120 */ 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81,243,255,255,151, /* 0x0120 */ 253, 11, 64,185,129, 2, 64,185,158, 83, 0,145,189, 3, 1, 75,
/* 0x0130 */ 33, 0, 1, 26,241,255,255,151, 33, 0, 1, 26,239,255,255,151, /* 0x0130 */ 253, 7, 0,249, 33,120, 30, 18, 60, 3, 1,139,192, 3, 31,214,
/* 0x0140 */ 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82, 35, 1, 0, 84, /* 0x0140 */ 1,132, 64,248,225,255,255,181,192, 3, 95,214, 1, 64, 33,139,
/* 0x0150 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42,101,248,255, 52, /* 0x0150 */ 225, 11,190,169,227,123, 1,169, 5, 0,128, 18, 4, 0,176, 82,
/* 0x0160 */ 191, 0, 0,114,165,124, 1, 19,161, 1, 0, 84, 3, 0, 0, 20, /* 0x0160 */ 52, 0, 0, 20,228,123, 65,169,225, 15,194,168, 0, 0, 1,203,
/* 0x0170 */ 226,255,255,151, 66, 1, 0, 84, 33, 0,128, 82,223,255,255,151, /* 0x0170 */ 66, 0, 3,203,130, 0, 0,185,229, 3, 0,170,224, 3, 3,170,
/* 0x0180 */ 226, 0, 0, 84,221,255,255,151, 33, 0, 1, 26,219,255,255,151, /* 0x0180 */ 97, 0, 2,139, 35, 0, 59,213, 99, 1,224, 55, 98, 76, 80,211,
/* 0x0190 */ 163,255,255, 84, 33, 16, 0, 17, 4, 0, 0, 20,215,255,255,151, /* 0x0190 */ 100, 0,128,146,132, 32,194,154, 2, 0, 4,138, 95, 0, 1,235,
/* 0x01a0 */ 33, 0, 1, 26, 33, 8, 0, 17,191, 0, 20, 49, 33, 36,129, 26, /* 0x01a0 */ 162, 0, 0, 84, 34,123, 11,213, 66, 0, 4,203, 63, 0, 2,235,
/* 0x01b0 */ 67, 64, 33,139, 99,240, 95, 56, 67,200,101, 56, 67, 20, 0, 56, /* 0x01b0 */ 168,255,255, 84,159, 59, 3,213, 99, 1,232, 55, 99, 12, 64,146,
/* 0x01c0 */ 33, 4, 0,113,161,255,255, 84,212,255,255, 23,226, 15,190,169, /* 0x01c0 */ 98, 0,128,146, 66, 32,195,154, 0, 0, 2,138, 63, 0, 0,235,
/* 0x01d0 */ 254, 11, 0,249, 7, 64, 33,139, 5, 0,128, 18, 4, 0,176, 82, /* 0x01d0 */ 169, 0, 0, 84, 32,117, 11,213, 0, 0, 2,203, 63, 0, 0,235,
/* 0x01e0 */ 45, 0, 0, 20,227, 19,193,168, 0, 0, 7,203, 66, 0, 3,203, /* 0x01e0 */ 168,255,255, 84,159, 59, 3,213,223, 63, 3,213,224, 3, 5,170,
/* 0x01f0 */ 130, 0, 0,185,229, 3, 0,170,224, 3, 3,170, 97, 0, 2,139, /* 0x01f0 */ 192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214,
/* 0x0200 */ 35, 0, 59,213, 99, 1,224, 55, 98, 76, 80,211,100, 0,128,146, /* 0x0200 */ 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214, 33, 0,128, 82,
/* 0x0210 */ 132, 32,194,154, 2, 0, 4,138, 95, 0, 1,235,162, 0, 0, 84, /* 0x0210 */ 240, 3, 30,170,248,255,255,151, 33, 0, 1, 58,246,255,255,151,
/* 0x0220 */ 34,123, 11,213, 66, 0, 4,203, 63, 0, 2,235,168,255,255, 84, /* 0x0220 */ 163,255,255, 84, 0, 2, 31,214, 3, 20, 64, 56, 67, 20, 0, 56,
/* 0x0230 */ 159, 59, 3,213, 99, 1,232, 55, 99, 12, 64,146, 98, 0,128,146, /* 0x0230 */ 241,255,255,151,162,255,255, 84,245,255,255,151, 35, 12, 0,113,
/* 0x0240 */ 66, 32,195,154, 0, 0, 2,138, 63, 0, 0,235,169, 0, 0, 84, /* 0x0240 */ 1, 0,128, 82,163, 0, 0, 84, 5, 20, 64, 56,165, 32, 3, 42,
/* 0x0250 */ 32,117, 11,213, 0, 0, 2,203, 63, 0, 0,235,168,255,255, 84, /* 0x0250 */ 229, 3, 37, 42,133,248,255, 52,231,255,255,151, 33, 0, 1, 58,
/* 0x0260 */ 159, 59, 3,213,223, 63, 3,213,224, 3, 5,170,254, 7, 65,248, /* 0x0260 */ 229,255,255,151, 33, 0, 1, 58, 97, 0, 0, 84,232,255,255,151,
/* 0x0270 */ 192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, /* 0x0270 */ 33, 8, 0, 17,191, 0, 52, 49, 33, 36,129, 26, 67,200,101, 56,
/* 0x0280 */ 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214, 3, 20, 64, 56, /* 0x0280 */ 33, 4, 0,113, 67, 20, 0, 56,162,255,255, 84,233,255,255, 23,
/* 0x0290 */ 67, 20, 0, 56,248,255,255,151,162,255,255, 84, 33, 0,128, 82, /* 0x0290 */ 117,112,120, 0,217, 19, 1,209, 32, 3, 64,185, 57, 67, 32,203,
/* 0x02a0 */ 4, 0, 0, 20, 33, 4, 0, 81,243,255,255,151, 33, 0, 1, 58, /* 0x02a0 */ 224, 7, 0,249,192, 3, 63,214, 0, 0, 0, 0,102,105,108,101,
/* 0x02b0 */ 241,255,255,151, 33, 0, 1, 58,239,255,255,151, 67,255,255, 84, /* 0x02b0 */ 32,102,111,114,109, 97,116, 32,101,108,102, 54, 52, 45,108,105,
/* 0x02c0 */ 35, 12, 0,113, 1, 0,128, 82, 35, 1, 0, 84, 5, 20, 64, 56, /* 0x02c0 */ 116,116,108,101, 97, 97,114, 99,104, 54, 52, 10, 10, 83,101, 99,
/* 0x02d0 */ 165, 32, 3, 42,229, 3, 37, 42,101,248,255, 52,163, 0, 1, 83, /* 0x02d0 */ 116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32,
/* 0x02e0 */ 165,124, 1, 19, 99, 0, 3, 43, 2, 0, 0, 20,226,255,255,151, /* 0x02e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32,
/* 0x02f0 */ 33, 0, 1, 58,224,255,255,151, 33, 0, 1, 58,225, 0, 0, 84, /* 0x02f0 */ 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0300 */ 33, 0,128, 82,220,255,255,151, 33, 0, 1, 58,218,255,255,151, /* 0x0300 */ 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0310 */ 163,255,255, 84, 33, 8, 0, 17, 33, 4, 0, 17,191, 0, 20, 49, /* 0x0310 */ 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32,
/* 0x0320 */ 33, 36,129, 26, 67, 0, 64, 57, 67,200,101, 56, 67, 20, 0, 56, /* 0x0320 */ 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48,
/* 0x0330 */ 33, 4, 0,113,161,255,255, 84,215,255,255, 23, 1, 64, 33,139, /* 0x0330 */ 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48,
/* 0x0340 */ 225, 11,190,169,227,123, 1,169, 5, 0,128, 18, 4, 0,176, 82, /* 0x0340 */ 50, 53, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 52, 48, 32, 32,
/* 0x0350 */ 52, 0, 0, 20,228,123, 65,169,225, 15,194,168, 0, 0, 1,203, /* 0x0350 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32,
/* 0x0360 */ 66, 0, 3,203,130, 0, 0,185,229, 3, 0,170,224, 3, 3,170, /* 0x0360 */ 32, 49, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32,
/* 0x0370 */ 97, 0, 2,139, 35, 0, 59,213, 99, 1,224, 55, 98, 76, 80,211, /* 0x0370 */ 32, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 50, 57, 48, 32, 32,
/* 0x0380 */ 100, 0,128,146,132, 32,194,154, 2, 0, 4,138, 95, 0, 1,235, /* 0x0380 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32,
/* 0x0390 */ 162, 0, 0, 84, 34,123, 11,213, 66, 0, 4,203, 63, 0, 2,235, /* 0x0390 */ 32, 50, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32,
/* 0x03a0 */ 168,255,255, 84,159, 59, 3,213, 99, 1,232, 55, 99, 12, 64,146, /* 0x03a0 */ 32, 48, 49, 99, 32, 32, 48, 32, 32, 48, 32, 32, 48, 50, 57, 48,
/* 0x03b0 */ 98, 0,128,146, 66, 32,195,154, 0, 0, 2,138, 63, 0, 0,235, /* 0x03b0 */ 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x03c0 */ 169, 0, 0, 84, 32,117, 11,213, 0, 0, 2,203, 63, 0, 0,235, /* 0x03c0 */ 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48,
/* 0x03d0 */ 168,255,255, 84,159, 59, 3,213,223, 63, 3,213,224, 3, 5,170, /* 0x03d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x03e0 */ 192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, /* 0x03e0 */ 108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90,
/* 0x03f0 */ 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214, 33, 0,128, 82, /* 0x03f0 */ 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48,
/* 0x0400 */ 240, 3, 30,170,248,255,255,151, 33, 0, 1, 58,246,255,255,151, /* 0x0400 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x0410 */ 163,255,255, 84, 0, 2, 31,214, 3, 20, 64, 56, 67, 20, 0, 56, /* 0x0410 */ 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,
/* 0x0420 */ 241,255,255,151,162,255,255, 84,245,255,255,151, 35, 12, 0,113, /* 0x0420 */ 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x0430 */ 1, 0,128, 82,163, 0, 0, 84, 5, 20, 64, 56,165, 32, 3, 42, /* 0x0430 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x0440 */ 229, 3, 37, 42,133,248,255, 52,231,255,255,151, 33, 0, 1, 58, /* 0x0440 */ 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 48, 32, 69, 76, 70,
/* 0x0450 */ 229,255,255,151, 33, 0, 1, 58, 97, 0, 0, 84,232,255,255,151, /* 0x0450 */ 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0460 */ 33, 8, 0, 17,191, 0, 52, 49, 33, 36,129, 26, 67,200,101, 56, /* 0x0460 */ 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42,
/* 0x0470 */ 33, 4, 0,113, 67, 20, 0, 56,162,255,255, 84,233,255,255, 23, /* 0x0470 */ 85, 78, 68, 42, 32, 48, 32, 77, 70, 76, 71, 10, 48, 48, 48, 48,
/* 0x0480 */ 159, 56, 0,113, 1, 0, 0, 84,226, 15,190,169,253,123, 1,169, /* 0x0480 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 32,103, 32, 32,
/* 0x0490 */ 253, 3, 0,145, 8, 0, 64, 57, 7,192,128, 82, 8,125, 3, 83, /* 0x0490 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,
/* 0x04a0 */ 231, 32,200, 26,231,192, 57, 17,232, 3, 0,145,255, 67, 39,203, /* 0x04a0 */ 95,115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x04b0 */ 228, 3, 0,145,159,124,129,168,159, 0, 8,235,195,255,255, 84, /* 0x04b0 */ 48, 48, 48, 48, 49, 48, 99, 32,103, 32, 32, 32, 32, 32, 70, 32,
/* 0x04c0 */ 255,127,191,169,230, 3, 3,170,197, 0, 64,185,228, 3, 2,170, /* 0x04c0 */ 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 49, 52, 52, 32,117, 99,
/* 0x04d0 */ 227, 35, 0,145, 34, 8, 0, 81,225, 3, 0,170,224, 3, 0,145, /* 0x04d0 */ 108, 95,110,114,118, 50, 98, 95,100,101, 99,111,109,112,114,101,
/* 0x04e0 */ 39, 20, 64, 56,231, 8, 0, 18, 7, 8, 0, 57, 39, 20, 64, 56, /* 0x04e0 */ 115,115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x04f0 */ 232,124, 4, 83, 8, 4, 0, 57,231, 12, 0, 18, 7, 0, 0, 57, /* 0x04f0 */ 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69,
/* 0x0500 */ 35, 0, 0,148,191, 3, 0,145,229, 3, 0,170,253,123, 65,169, /* 0x0500 */ 76, 70, 77, 65, 73, 78, 89, 32, 48, 32,101,110,100, 95,100,101,
/* 0x0510 */ 224, 7,194,168, 33, 0, 64,249, 33, 0, 0,139, 35, 0, 59,213, /* 0x0510 */ 99,111,109,112,114,101,115,115, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x0520 */ 99, 1,224, 55, 98, 76, 80,211,100, 0,128,146,132, 32,194,154, /* 0x0520 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32,
/* 0x0530 */ 2, 0, 4,138, 95, 0, 1,235,162, 0, 0, 84, 34,123, 11,213, /* 0x0530 */ 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, 79, 95, 66, 73, 78, 70,
/* 0x0540 */ 66, 0, 4,203, 63, 0, 2,235,168,255,255, 84,159, 59, 3,213, /* 0x0540 */ 79, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69,
/* 0x0550 */ 99, 1,232, 55, 99, 12, 64,146, 98, 0,128,146, 66, 32,195,154, /* 0x0550 */ 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65,
/* 0x0560 */ 0, 0, 2,138, 63, 0, 0,235,169, 0, 0, 84, 32,117, 11,213, /* 0x0560 */ 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32,
/* 0x0570 */ 0, 0, 2,203, 63, 0, 0,235,168,255,255, 84,159, 59, 3,213, /* 0x0570 */ 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32,
/* 0x0580 */ 223, 63, 3,213,224, 3, 5,170,192, 3, 95,214,255, 67, 1,209, /* 0x0580 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48,
/* 0x0590 */ 39, 0,128, 82, 17, 16, 0,145, 9,128,128, 82,243, 83, 0,169, /* 0x0590 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x05a0 */ 245, 91, 1,169,247, 99, 2,169,249,107, 3,169,251,115, 4,169, /* 0x05a0 */ 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 65, 66, 83, 51, 50, 32,
/* 0x05b0 */ 20, 8, 64, 57, 19, 4, 64, 57, 22, 0, 64, 57,244, 32,212, 26, /* 0x05b0 */ 32, 32, 77, 70, 76, 71, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x05c0 */ 127, 0, 0,185,243, 32,211, 26,223, 0, 0,185, 7, 0,128,210, /* 0x05c0 */ 48, 48, 48, 48, 48, 51, 99, 32, 82, 95, 65, 65, 82, 67, 72, 54,
/* 0x05d0 */ 148, 6, 0, 81, 8, 4, 64, 57, 10, 1, 22, 11,104, 6, 0, 81, /* 0x05d0 */ 52, 95, 67, 65, 76, 76, 50, 54, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x05e0 */ 18, 1, 39, 30, 8, 96,128, 82, 8, 33,202, 26, 8,217, 28, 49, /* 0x05e0 */ 78, 90, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x05f0 */ 160, 0, 0, 84, 41,122, 39,120,231, 4, 0,145, 31, 1, 7,107, /* 0x05f0 */ 48, 48, 48, 48, 52, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79,
/* 0x0600 */ 168,255,255, 84, 34, 64, 34,139, 63, 0, 2,235, 64, 16, 0, 84, /* 0x0600 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69,
/* 0x0610 */ 235, 3, 1,170, 40, 4, 0,145,103, 85, 64, 56, 31, 1, 2,235, /* 0x0610 */ 76, 70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84,
/* 0x0620 */ 160, 15, 0, 84, 9, 21, 64, 56, 31, 1, 11,235, 39, 33, 7, 42, /* 0x0620 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32,
/* 0x0630 */ 97,255,255, 84,229, 69, 0, 52, 8, 1,128, 82, 53, 0,128, 82, /* 0x0630 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76,
/* 0x0640 */ 18, 0,128, 82, 9, 0,128, 18, 20, 1, 39, 30,104, 0,128, 82, /* 0x0640 */ 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0650 */ 177, 2, 39, 30,247, 3, 21, 42, 7, 1, 39, 30, 8, 86,128,210, /* 0x0650 */ 48, 49, 56, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 65, 66,
/* 0x0660 */ 165, 2, 39, 30,252, 3, 21, 42, 3, 1,103,158,104, 1,128, 82, /* 0x0660 */ 83, 51, 50, 32, 32, 32, 79, 95, 66, 73, 78, 70, 79, 10
/* 0x0670 */ 234, 3, 18, 42,240, 3, 18, 42, 0, 1, 39, 30, 8,176, 41,145,
/* 0x0680 */ 14,224,191, 18, 15, 0,129, 82, 1, 1,103,158, 40, 1,128, 82,
/* 0x0690 */ 2, 1, 39, 30,136, 2, 38, 30, 8, 1, 22, 75, 16, 1, 39, 30,
/* 0x06a0 */ 72,110, 28, 83, 63, 1, 14,107, 25, 2, 20, 10, 13,125, 64,147,
/* 0x06b0 */ 173,193, 57,139,173,249,127,211,232, 0, 0, 84,127, 1, 2,235,
/* 0x06c0 */ 160, 10, 0, 84,104, 1, 64, 57, 41, 93, 24, 83,107, 5, 0,145,
/* 0x06d0 */ 7, 33, 7, 42, 59,106,109,120, 40,125, 11, 83, 8,125, 27, 27,
/* 0x06e0 */ 255, 0, 8,107,130, 10, 0, 84, 73, 2, 38, 30, 19, 62, 1, 14,
/* 0x06f0 */ 95, 26, 0,113, 12, 2, 9, 10, 73, 41,211, 26,140, 33,214, 26,
/* 0x0700 */ 234, 1, 27, 75, 41, 1, 12, 11,106, 23,138, 11, 42,106, 45,120,
/* 0x0710 */ 41, 5, 9, 11, 41, 93,120,211, 41,217, 28,145, 58, 6, 9,139,
/* 0x0720 */ 109, 31, 0, 84, 10, 2, 28, 75, 41, 0,128, 82,153,104,106, 56,
/* 0x0730 */ 7, 0, 0, 20, 91,107, 42,120, 41,121, 31, 83,232, 3, 13, 42,
/* 0x0740 */ 83, 57, 0, 53, 63,253, 3,113,236, 3, 0, 84, 57,123, 31, 83,
/* 0x0750 */ 31, 1, 14,107, 51, 3, 24, 18, 56,121, 31, 83,106,126, 64,147,
/* 0x0760 */ 74, 1, 4,145, 74,193, 41,139, 74,249,127,211,232, 0, 0, 84,
/* 0x0770 */ 127, 1, 2,235, 8, 93, 24, 83,224, 4, 0, 84,108, 1, 64, 57,
/* 0x0780 */ 107, 5, 0,145,135, 33, 7, 42, 76,107,106,120, 13,125, 11, 83,
/* 0x0790 */ 251, 1, 12, 75,173,125, 12, 27,155, 21,155, 11,140, 21, 76, 75,
/* 0x07a0 */ 255, 0, 13,107, 8, 1, 13, 75, 99,252,255, 84, 76,107, 42,120,
/* 0x07b0 */ 9, 7, 0, 17,231, 0, 13, 75,115,252,255, 53, 63,253, 3,113,
/* 0x07c0 */ 77, 27, 0, 84, 42, 29, 0, 83,233, 3, 8, 42,138, 72, 48, 56,
/* 0x07d0 */ 16, 6, 0, 17, 95, 38, 0,113,236, 49, 0, 84, 82, 14, 0, 81,
/* 0x07e0 */ 191, 0, 16,107,232,245,255, 84, 0,224,191, 18, 63, 1, 0,107,
/* 0x07f0 */ 136, 0, 0, 84,127, 1, 2,235,224, 0, 0, 84,107, 5, 0,145,
/* 0x0800 */ 97, 1, 1,203, 97, 0, 0,185,208, 0, 0,185, 0, 0,128, 82,
/* 0x0810 */ 2, 0, 0, 20, 32, 0,128, 82,243, 83, 64,169,245, 91, 65,169,
/* 0x0820 */ 247, 99, 66,169,249,107, 67,169,251,115, 68,169,255, 67, 1,145,
/* 0x0830 */ 192, 3, 95,214, 58, 1, 8, 75, 74,126, 64,147,105, 23, 91, 75,
/* 0x0840 */ 95, 3, 14,107, 41,106, 45,120, 76, 1, 3,145,231, 0, 8, 75,
/* 0x0850 */ 140,249,127,211,232, 0, 0, 84,127, 1, 2,235,192,253,255, 84,
/* 0x0860 */ 104, 1, 64, 57, 90, 95, 24, 83,107, 5, 0,145, 7, 33, 7, 42,
/* 0x0870 */ 40,106,108,120, 74,127, 11, 83, 74,125, 8, 27,255, 0, 10,107,
/* 0x0880 */ 130, 25, 0, 84,237, 0, 38, 30,233, 1, 8, 75, 95, 30, 0,113,
/* 0x0890 */ 53, 2, 38, 30, 8, 21,137, 11,241, 2, 39, 30, 40,106, 44,120,
/* 0x08a0 */ 242,179,141, 26, 12,160, 25,145,247, 3, 28, 42, 95, 1, 14,107,
/* 0x08b0 */ 232, 0, 0, 84,127, 1, 2,235,224,250,255, 84,104, 1, 64, 57,
/* 0x08c0 */ 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,141, 1, 64,121,
/* 0x08d0 */ 73,125, 11, 83, 41,125, 13, 27,255, 0, 9,107, 98, 31, 0, 84,
/* 0x08e0 */ 40,115, 29, 83,115, 0,128, 82,234, 1, 13, 75, 8,125, 64,147,
/* 0x08f0 */ 8, 9, 0,145,173, 21,138, 11,228, 3, 39, 30,141, 1, 0,121,
/* 0x0900 */ 102, 2, 39, 30,153, 5, 8,139,218, 0, 38, 30, 44, 0,128, 82,
/* 0x0910 */ 6, 0, 0, 20, 13, 3, 0,121, 90, 7, 0,113,140,121, 31, 83,
/* 0x0920 */ 233, 3, 8, 42, 32, 3, 0, 84, 63, 1, 14,107,147,121, 31, 83,
/* 0x0930 */ 56,199, 44,139,232, 0, 0, 84,127, 1, 2,235, 41, 93, 24, 83,
/* 0x0940 */ 160,246,255, 84,104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,
/* 0x0950 */ 8, 3, 64,121, 42,125, 11, 83,237, 1, 8, 75, 27, 21, 72, 75,
/* 0x0960 */ 13, 21,141, 11, 72,125, 8, 27,255, 0, 8,107, 41, 1, 8, 75,
/* 0x0970 */ 35,253,255, 84, 27, 3, 0,121, 90, 7, 0,113,231, 0, 8, 75,
/* 0x0980 */ 108, 6, 0, 17, 33,253,255, 84,166, 68,166, 46,138, 0, 38, 30,
/* 0x0990 */ 95, 14, 0,113,200, 0, 38, 30, 72, 1, 8, 75, 8, 1, 12, 11,
/* 0x09a0 */ 6, 1, 39, 30,236, 22, 0, 84,234, 0, 38, 30, 31, 13, 0,113,
/* 0x09b0 */ 220, 0,128, 82, 10,209,138, 26, 40, 0,128, 82, 74,101, 26, 83,
/* 0x09c0 */ 74,125, 64,147, 74,193, 6,145, 91,249,127,211, 6, 0, 0, 20,
/* 0x09d0 */ 44,106, 57,120,156, 7, 0,113, 8,121, 31, 83,233, 3, 10, 42,
/* 0x09e0 */ 32, 3, 0, 84, 63, 1, 14,107, 19,121, 31, 83,121,199, 40,139,
/* 0x09f0 */ 232, 0, 0, 84,127, 1, 2,235, 41, 93, 24, 83,192,240,255, 84,
/* 0x0a00 */ 106, 1, 64, 57,107, 5, 0,145, 71, 33, 7, 42, 42,106,121,120,
/* 0x0a10 */ 45,125, 11, 83,236, 1, 10, 75, 90, 21, 74, 75, 76, 21,140, 11,
/* 0x0a20 */ 170,125, 10, 27,255, 0, 10,107, 41, 1, 10, 75, 35,253,255, 84,
/* 0x0a30 */ 58,106, 57,120,156, 7, 0,113,231, 0, 10, 75,104, 6, 0, 17,
/* 0x0a40 */ 33,253,255, 84, 10, 1, 1, 81, 95, 13, 0,113, 45, 17, 0, 84,
/* 0x0a50 */ 95, 53, 0,113, 72, 1, 0, 18, 77,125, 1, 19, 12, 1, 31, 50,
/* 0x0a60 */ 140, 32, 0, 84,104, 0,102,158,187, 5, 0, 81,152, 33,219, 26,
/* 0x0a70 */ 8,193, 42,203, 8, 65, 56,139, 40, 6, 8,139, 8, 9, 0,209,
/* 0x0a80 */ 19, 1,103,158, 40, 0,128, 82,252, 3, 8, 42, 7, 0, 0, 20,
/* 0x0a90 */ 83, 3, 0,121, 8,121, 31, 83,233, 3, 10, 42,123, 7, 0,113,
/* 0x0aa0 */ 156,123, 31, 83,128, 14, 0, 84,106, 2,102,158, 63, 1, 14,107,
/* 0x0ab0 */ 25,121, 31, 83, 90,197, 40,139,232, 0, 0, 84,127, 1, 2,235,
/* 0x0ac0 */ 41, 93, 24, 83,128,234,255, 84,106, 1, 64, 57,107, 5, 0,145,
/* 0x0ad0 */ 71, 33, 7, 42, 74, 3, 64,121, 45,125, 11, 83,243, 1, 10, 75,
/* 0x0ae0 */ 76, 21, 74, 75, 83, 21,147, 11,170,125, 10, 27,255, 0, 10,107,
/* 0x0af0 */ 41, 1, 10, 75,227,252,255, 84, 76, 3, 0,121, 24, 3, 28, 42,
/* 0x0b00 */ 231, 0, 10, 75, 40, 7, 0, 17,229,255,255, 23, 41, 0,128, 82,
/* 0x0b10 */ 6, 0, 0, 20, 41,121, 31, 83, 74,107, 56,120, 63,253, 3,113,
/* 0x0b20 */ 232, 3, 12, 42, 44, 3, 0, 84, 31, 1, 14,107, 51,121, 31, 83,
/* 0x0b30 */ 56,125,127,147,232, 0, 0, 84,127, 1, 2,235, 8, 93, 24, 83,
/* 0x0b40 */ 160,230,255, 84,106, 1, 64, 57,107, 5, 0,145, 71, 33, 7, 42,
/* 0x0b50 */ 74,107,120,120, 12,125, 11, 83,237, 1, 10, 75,140,125, 10, 27,
/* 0x0b60 */ 89, 21, 74, 75, 74, 21,141, 11,255, 0, 12,107, 8, 1, 12, 75,
/* 0x0b70 */ 35,253,255, 84,105, 6, 0, 17, 89,107, 56,120, 63,253, 3,113,
/* 0x0b80 */ 231, 0, 12, 75, 45,253,255, 84, 42, 29, 0, 83, 95, 14, 0,113,
/* 0x0b90 */ 138, 72, 48, 56,233, 3, 8, 42, 16, 6, 0, 17,204,225,255, 84,
/* 0x0ba0 */ 191, 0, 16,107, 18, 0,128, 82,200,215,255, 84, 15,255,255, 23,
/* 0x0bb0 */ 73, 3, 10, 75, 8, 21, 72, 75, 63, 1, 14,107, 40,106, 44,120,
/* 0x0bc0 */ 231, 0, 10, 75,154, 97, 0,145,232, 0, 0, 84,127, 1, 2,235,
/* 0x0bd0 */ 32,226,255, 84,104, 1, 64, 57, 41, 93, 24, 83,107, 5, 0,145,
/* 0x0be0 */ 7, 33, 7, 42, 40,106,122,120, 42,125, 11, 83, 74,125, 8, 27,
/* 0x0bf0 */ 255, 0, 10,107, 66, 10, 0, 84,233, 1, 8, 75, 95, 1, 14,107,
/* 0x0c00 */ 173,129, 7,145, 8, 21,137, 11, 40,106, 58,120,232, 0, 0, 84,
/* 0x0c10 */ 127, 1, 2,235, 0,224,255, 84,104, 1, 64, 57, 74, 93, 24, 83,
/* 0x0c20 */ 107, 5, 0,145, 7, 33, 7, 42, 40,106,109,120, 73,125, 11, 83,
/* 0x0c30 */ 41,125, 8, 27,255, 0, 9,107,226, 16, 0, 84,234, 1, 8, 75,
/* 0x0c40 */ 8, 21,138, 11, 40,106, 45,120,112,222,255, 52, 74, 0, 38, 30,
/* 0x0c50 */ 8, 2, 28, 75, 12, 0, 38, 30, 95, 30, 0,113, 82,177,140, 26,
/* 0x0c60 */ 138,104,104, 56,138, 72, 48, 56, 16, 6, 0, 17,221,254,255, 23,
/* 0x0c70 */ 248, 3, 10, 42, 28, 7, 0, 49,128,219,255, 84, 82, 30, 0, 17,
/* 0x0c80 */ 200, 0, 38, 30,159, 3, 16,107, 12, 9, 0, 17, 72,220,255, 84,
/* 0x0c90 */ 232, 3, 16, 42, 2, 0, 0, 20, 76,218,255, 52, 10, 2, 28, 75,
/* 0x0ca0 */ 16, 6, 0, 17, 31, 2, 5,107,140, 5, 0, 81,138,104,106, 56,
/* 0x0cb0 */ 138, 72, 40, 56,232, 3, 16, 42, 3,255,255, 84,191, 0, 16,107,
/* 0x0cc0 */ 8,207,255, 84,201,254,255, 23, 74, 1, 9, 75,173, 21, 77, 75,
/* 0x0cd0 */ 95, 1, 14,107,141, 1, 0,121,231, 0, 9, 75,232, 0, 0, 84,
/* 0x0ce0 */ 127, 1, 2,235,128,217,255, 84,104, 1, 64, 57, 74, 93, 24, 83,
/* 0x0cf0 */ 107, 5, 0,145, 7, 33, 7, 42,141, 5, 64,121, 73,125, 11, 83,
/* 0x0d00 */ 41,125, 13, 27,255, 0, 9,107, 34, 7, 0, 84, 40,115, 29, 83,
/* 0x0d10 */ 19, 1,128, 82,234, 1, 13, 75, 8,125, 64,147,100, 2, 39, 30,
/* 0x0d20 */ 8, 9, 2,145,115, 0,128, 82,173, 21,138, 11,153, 5, 8,139,
/* 0x0d30 */ 141, 5, 0,121,102, 2, 39, 30,244,254,255, 23, 41, 1, 10, 75,
/* 0x0d40 */ 8, 21, 72, 75, 63, 1, 14,107, 40,106, 58,120,231, 0, 10, 75,
/* 0x0d50 */ 154,193, 0,145,232, 0, 0, 84,127, 1, 2,235,192,213,255, 84,
/* 0x0d60 */ 104, 1, 64, 57, 41, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,
/* 0x0d70 */ 45,106,122,120, 40,125, 11, 83, 10,125, 13, 27,255, 0, 10,107,
/* 0x0d80 */ 35, 5, 0, 84, 41, 1, 10, 75,173, 21, 77, 75, 63, 1, 14,107,
/* 0x0d90 */ 45,106, 58,120,231, 0, 10, 75,140, 33, 1,145,232, 0, 0, 84,
/* 0x0da0 */ 127, 1, 2,235,128,211,255, 84,104, 1, 64, 57, 41, 93, 24, 83,
/* 0x0db0 */ 107, 5, 0,145, 7, 33, 7, 42, 45,106,108,120, 40,125, 11, 83,
/* 0x0dc0 */ 10,125, 13, 27,255, 0, 10,107, 2, 8, 0, 84,232, 1, 13, 75,
/* 0x0dd0 */ 233, 3, 28, 42, 60, 2, 38, 30,173, 21,136, 11, 45,106, 44,120,
/* 0x0de0 */ 241, 2, 39, 30,247, 3, 9, 42, 21, 0, 0, 20, 8, 2,128, 82,
/* 0x0df0 */ 231, 0, 9, 75,173, 21, 77, 75,153, 17, 8,145, 4, 1, 39, 30,
/* 0x0e00 */ 8, 1,128, 82,141, 5, 0,121, 73, 1, 9, 75, 6, 1, 39, 30,
/* 0x0e10 */ 190,254,255, 23,191, 0, 16,107, 82, 26, 0, 81, 40,196,255, 84,
/* 0x0e20 */ 114,254,255, 23,232, 1, 13, 75,233, 3, 28, 42,252, 3, 23, 42,
/* 0x0e30 */ 247, 3, 9, 42,173, 21,136, 11, 45,106, 58,120,136, 2, 38, 30,
/* 0x0e40 */ 95, 30, 0,113, 9, 0, 38, 30, 44, 0,102,158, 18,177,137, 26,
/* 0x0e50 */ 151,254,255, 23, 8, 21, 72, 75, 74, 1, 9, 75,231, 0, 9, 75,
/* 0x0e60 */ 40,106, 45,120,246,255,255, 23,232, 3, 13, 42, 84,254,255, 23,
/* 0x0e70 */ 170, 21, 0, 81, 63, 1, 14,107,140,121, 31, 83,232, 0, 0, 84,
/* 0x0e80 */ 127, 1, 2,235, 41, 93, 24, 83, 96,204,255, 84,104, 1, 64, 57,
/* 0x0e90 */ 107, 5, 0,145, 7, 33, 7, 42, 41,125, 1, 83,255, 0, 9,107,
/* 0x0ea0 */ 99, 0, 0, 84,231, 0, 9, 75,140, 1, 0, 50, 74, 5, 0,113,
/* 0x0eb0 */ 33,254,255, 84, 8, 32, 25,145,152,109, 28, 83,155, 0,128, 82,
/* 0x0ec0 */ 19, 1,103,158,240,254,255, 23,232, 3, 28, 42,231, 0, 10, 75,
/* 0x0ed0 */ 173, 21, 77, 75,252, 3, 21, 42, 45,106, 44,120, 42, 1, 10, 75,
/* 0x0ee0 */ 53, 2, 38, 30,241, 2, 39, 30,247, 3, 8, 42,212,255,255, 23,
/* 0x0ef0 */ 240, 3, 5, 42,227, 19,189,169,229, 27, 1,169,254, 19, 0,249,
/* 0x0f00 */ 232, 3, 1,170, 45, 64, 34,139,233, 3, 4,170,142, 64, 37,139,
/* 0x0f10 */ 11, 16, 0,145, 6, 0, 64, 57, 5, 4, 64, 57, 4, 8, 64, 57,
/* 0x0f20 */ 174, 0, 6, 11, 7, 0,128, 18,229, 32,197, 26,229, 3, 37, 42,
/* 0x0f30 */ 228, 32,196, 26,228, 3, 36, 42, 35, 0,128, 82, 34, 0,128, 82,
/* 0x0f40 */ 33, 0,128, 82, 32, 0,128, 82, 6, 0,128, 82,230, 31, 0,185,
/* 0x0f50 */ 2, 96,128, 82,192,230,128, 82, 66, 32,206, 26, 66, 0, 0, 11,
/* 0x0f60 */ 0,128,128,210,225, 3, 11,170, 0, 64, 0,170, 0,128, 0,170,
/* 0x0f70 */ 32,132, 0,248, 66, 16, 0,113,204,255,255, 84, 0, 21, 0,145,
/* 0x0f80 */ 232, 0, 0,148, 31, 0, 8,235,193,255,255, 84,227, 67, 66,248,
/* 0x0f90 */ 226, 19, 64,185, 36, 1, 3,203,128, 0, 2, 10,224, 47, 0,185,
/* 0x0fa0 */ 0, 16, 6, 11, 97, 1, 0,145,226, 0, 0,148,161, 5, 0, 84,
/* 0x0fb0 */ 227, 23, 64,185,226, 27, 64,185, 99, 0, 4, 10,224,115, 64, 57,
/* 0x0fc0 */ 99, 32,194, 26,226, 3, 2, 75, 66, 32, 0, 17, 2, 36,194, 26,
/* 0x0fd0 */ 99, 0, 2, 11,106,177, 57,145, 99, 4, 3, 11,227, 3, 3, 42,
/* 0x0fe0 */ 32, 0,128, 82, 74, 37, 3,139,223, 28, 0,113, 35, 2, 0, 84,
/* 0x0ff0 */ 227,125, 64,147,227, 3, 3,203, 37,105, 99, 56,165,120, 31, 83,
/* 0x1000 */ 65, 1, 8,145,164, 0, 24, 18,227, 3, 4, 42, 33, 4, 3,139,
/* 0x1010 */ 202, 0, 0,148, 3, 0, 0, 18,130,124, 8, 83,127, 0, 2,107,
/* 0x1020 */ 193, 0, 0, 84, 31, 0, 4,113,163,254,255, 84, 5, 0, 0, 20,
/* 0x1030 */ 225, 3, 10,170,193, 0, 0,148, 31, 0, 4,113,163,255,255, 84,
/* 0x1040 */ 98, 0,128, 82,195, 0,128, 82,223, 40, 0,113, 67, 48,131, 26,
/* 0x1050 */ 223, 16, 0,113,195, 48,131, 26,198, 0, 3, 75, 34, 0, 0, 20,
/* 0x1060 */ 97, 1, 6,145,178, 0, 0,148,129, 1, 0, 84,227, 11, 64,185,
/* 0x1070 */ 226, 7, 64,185,227, 15, 0,185,226, 11, 0,185,239, 7, 0,185,
/* 0x1080 */ 3, 0,128, 82,223, 28, 0,113,102, 0,128, 82,102, 48,134, 26,
/* 0x1090 */ 106,145, 25,145, 42, 0, 0, 20, 97, 97, 6,145,164, 0, 0,148,
/* 0x10a0 */ 97, 2, 0, 84,227, 47, 64,185, 97,129, 7,145, 96, 16, 6, 11,
/* 0x10b0 */ 160, 0, 0,148,161, 3, 0, 84, 35, 1,128, 82,223, 28, 0,113,
/* 0x10c0 */ 102, 1,128, 82,102, 48,134, 26,227, 67, 66,248, 36, 1, 3,203,
/* 0x10d0 */ 159, 0, 15,107,131, 17, 0, 84,227,125, 64,147,227, 3, 3,203,
/* 0x10e0 */ 32,105, 99, 56, 32, 21, 0, 56,121, 0, 0, 20, 97,193, 6,145,
/* 0x10f0 */ 143, 0, 0,148,228, 7, 64,185, 64, 1, 0, 84, 97, 33, 7,145,
/* 0x1100 */ 139, 0, 0,148,228, 11, 64,185,128, 0, 0, 84,227, 11, 64,185,
/* 0x1110 */ 228, 15, 64,185,227, 15, 0,185,227, 7, 64,185,227, 11, 0,185,
/* 0x1120 */ 239, 7, 0,185,239, 3, 4, 42, 3, 1,128, 82,223, 28, 0,113,
/* 0x1130 */ 102, 1,128, 82,102, 48,134, 26,106,161, 41,145, 65, 1, 0,145,
/* 0x1140 */ 125, 0, 0,148, 1, 1, 0, 84,227, 47, 64,185, 69, 17, 0,145,
/* 0x1150 */ 227, 3, 3, 42, 2, 0,128, 82,165, 16, 3,139, 4, 1,128, 82,
/* 0x1160 */ 14, 0, 0, 20, 65, 9, 0,145,115, 0, 0,148, 1, 1, 0, 84,
/* 0x1170 */ 227, 47, 64,185, 69, 17, 4,145,227, 3, 3, 42, 2, 1,128, 82,
/* 0x1180 */ 165, 16, 3,139, 4, 1,128, 82, 4, 0, 0, 20, 69, 17, 8,145,
/* 0x1190 */ 2, 2,128, 82, 4, 32,128, 82,226, 55, 0,185, 32, 0,128, 82,
/* 0x11a0 */ 225, 3, 5,170,101, 0, 0,148, 3, 0, 4,107,163,255,255, 84,
/* 0x11b0 */ 229, 55, 64,185,165, 0, 3, 11,229, 55, 0,185,223, 16, 0,113,
/* 0x11c0 */ 194, 6, 0, 84,198, 28, 0, 17, 99, 0,128, 82,191, 16, 0,113,
/* 0x11d0 */ 101, 32,133, 26,227, 3, 5, 42,101, 29, 3,139,165,128, 13,145,
/* 0x11e0 */ 32, 0,128, 82, 4, 8,128, 82,225, 3, 5,170, 83, 0, 0,148,
/* 0x11f0 */ 3, 0, 4,107,163,255,255, 84,227, 47, 0,185,127, 16, 0,113,
/* 0x1200 */ 99, 4, 0, 84,100,124, 1, 83,132, 4, 0, 81,111, 0, 0, 18,
/* 0x1210 */ 239, 1, 31, 50,127, 56, 0,113,226, 0, 0, 84,239, 33,196, 26,
/* 0x1220 */ 106,121, 21,145,227, 1, 3, 75,227, 3, 3, 42, 74, 5, 3,139,
/* 0x1230 */ 12, 0, 0, 20,132, 16, 0, 81, 53, 0, 0,148,231,124, 1, 83,
/* 0x1240 */ 131, 1, 7,107,108, 32,140, 26,239, 1, 15, 26,132, 4, 0,113,
/* 0x1250 */ 65,255,255, 84,106, 17, 25,145,239,109, 28, 83,132, 0,128, 82,
/* 0x1260 */ 37, 0,128, 82, 32, 0,128, 82,225, 3, 10,170, 51, 0, 0,148,
/* 0x1270 */ 31, 0, 0,114, 64, 0, 0, 84,239, 1, 5, 42,165,120, 31, 83,
/* 0x1280 */ 132, 4, 0,113, 33,255,255, 84, 2, 0, 0, 20,239, 47, 64,185,
/* 0x1290 */ 239, 5, 0, 49,229, 55, 64,185,227, 67, 66,248,165, 8, 0, 17,
/* 0x12a0 */ 35, 1, 3,203,255, 1, 3,107,232, 2, 0, 84,227,125, 64,147,
/* 0x12b0 */ 227, 3, 3,203, 32,105, 99, 56, 32, 21, 0, 56, 63, 1, 14,235,
/* 0x12c0 */ 194, 0, 0, 84,165, 4, 0,113, 97,255,255, 84,224,115, 0, 57,
/* 0x12d0 */ 63, 1, 14,235,195,229,255, 84, 13, 0, 0,148, 0, 0,128, 82,
/* 0x12e0 */ 226, 19, 64,249, 3, 1, 2,203,226, 31, 64,249, 67, 0, 0,185,
/* 0x12f0 */ 226, 67, 66,248, 35, 1, 2,203,226, 55, 64,249, 67, 0, 0,185,
/* 0x1300 */ 255,243, 0,145, 32, 0,128, 82,246,255,255, 23,227,124, 24, 83,
/* 0x1310 */ 195, 0, 0, 53, 31, 1, 13,235,231, 92, 24, 83, 66,255,255, 84,
/* 0x1320 */ 3, 21, 64, 56,108, 32, 12, 42,192, 3, 95,214,224, 3, 6, 42,
/* 0x1330 */ 33, 68, 32,139, 0, 0,128, 82, 33, 68, 32,139,227,124, 24, 83,
/* 0x1340 */ 241, 3, 30,170, 94, 0, 0, 16, 99,254,255, 52, 35, 0, 64,121,
/* 0x1350 */ 226,124, 11, 83, 98,124, 2, 27,159, 1, 2,107, 2, 1, 0, 84,
/* 0x1360 */ 231, 3, 2, 42, 2, 0,129, 82, 66, 0, 3, 75, 0, 0, 0, 58,
/* 0x1370 */ 99, 20, 66, 11, 35, 0, 0,121, 32, 2, 95,214,140, 1, 2, 75,
/* 0x1380 */ 231, 0, 2, 75, 99, 20, 67, 75, 0, 0, 0, 58, 35, 0, 0,121,
/* 0x1390 */ 32, 2, 95,214,194, 3,128, 82,225, 0, 0, 16, 64, 0,128, 82,
/* 0x13a0 */ 8, 8,128, 82, 1, 0, 0,212,224, 15,128, 82,168, 11,128, 82,
/* 0x13b0 */ 1, 0, 0,212, 80, 82, 79, 84, 95, 69, 88, 69, 67,124, 80, 82,
/* 0x13c0 */ 79, 84, 95, 87, 82, 73, 84, 69, 32,102, 97,105,108,101,100, 46,
/* 0x13d0 */ 10, 0, 0, 0, 5, 0,128,210, 98, 0,128, 82,200, 27,128, 82,
/* 0x13e0 */ 1, 0, 0,212,192, 3, 95,214,244, 3, 30,170, 0,195, 94,184,
/* 0x13f0 */ 25, 83, 0,209, 57, 3, 0,203,129, 6, 64,185, 4, 0,128, 18,
/* 0x1400 */ 67, 4,128, 82, 0, 0,128,210,243,255,255,151,224, 7,191,169,
/* 0x1410 */ 250,111,191,169,251, 3, 0,170,226, 3, 0,170,225, 15, 31,248,
/* 0x1420 */ 227, 3, 0,145,128, 66, 0,145,129, 10, 64,185,132, 50, 64, 57,
/* 0x1430 */ 0, 3, 63,214,232, 7, 65,248,122, 3, 0,249,115, 19, 0,185,
/* 0x1440 */ 162, 0,128, 82,225, 27, 64,185,224, 3, 27,170, 72, 28,128, 82,
/* 0x1450 */ 1, 0, 0,212,128, 2, 64,185, 0,116, 30, 18, 29,195, 94,184,
/* 0x1460 */ 60, 3, 0,139, 96, 83, 0,145, 0, 0, 31,214, 1,132, 64,248,
/* 0x1470 */ 225,255,255,181,192, 3, 95,214,248, 3, 30,170,224, 99, 0,145,
/* 0x1480 */ 251,255,255,151,250,255,255,151,246, 3, 0,170, 1, 8,193,168,
/* 0x1490 */ 63, 24, 0,113, 96, 0, 0, 84,161,255,255, 53, 34, 0,160,210,
/* 0x14a0 */ 250, 3, 2,203, 27, 0,128, 18,208,255,255,151, 0, 0, 0, 0,
/* 0x14b0 */ 102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 54,
/* 0x14c0 */ 52, 45,108,105,116,116,108,101, 97, 97,114, 99,104, 54, 52, 10,
/* 0x14d0 */ 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78,
/* 0x14e0 */ 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,
/* 0x14f0 */ 101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32,
/* 0x1500 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32,
/* 0x1510 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,
/* 0x1520 */ 111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115,
/* 0x1530 */ 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32,
/* 0x1540 */ 32, 32, 32, 48, 49, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 52,
/* 0x1550 */ 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x1560 */ 83, 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32,
/* 0x1570 */ 32, 32, 32, 32, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 53, 48,
/* 0x1580 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x1590 */ 10, 32, 32, 50, 32, 78, 82, 86, 95, 84, 65, 73, 76, 32, 32, 32,
/* 0x15a0 */ 32, 32, 32, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 53, 48, 32,
/* 0x15b0 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10,
/* 0x15c0 */ 32, 32, 51, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, 32, 32, 32,
/* 0x15d0 */ 32, 32, 48, 49, 55, 99, 32, 32, 48, 32, 32, 48, 32, 32, 48, 53,
/* 0x15e0 */ 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x15f0 */ 83, 10, 32, 32, 52, 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32,
/* 0x1600 */ 32, 32, 32, 32, 48, 49, 55, 48, 32, 32, 48, 32, 32, 48, 32, 32,
/* 0x1610 */ 48, 49, 99, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x1620 */ 69, 78, 84, 83, 10, 32, 32, 53, 32, 78, 82, 86, 50, 66, 32, 32,
/* 0x1630 */ 32, 32, 32, 32, 32, 32, 32, 48, 49, 52, 52, 32, 32, 48, 32, 32,
/* 0x1640 */ 48, 32, 32, 48, 51, 51, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67,
/* 0x1650 */ 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 54, 32, 76, 90, 77, 65,
/* 0x1660 */ 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 49, 48, 99, 32, 32,
/* 0x1670 */ 48, 32, 32, 48, 32, 32, 48, 52, 56, 48, 32, 32, 50, 42, 42, 48,
/* 0x1680 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 55, 32, 76,
/* 0x1690 */ 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 57, 54,
/* 0x16a0 */ 56, 32, 32, 48, 32, 32, 48, 32, 32, 48, 53, 56, 99, 32, 32, 50,
/* 0x16b0 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32,
/* 0x16c0 */ 56, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32, 32,
/* 0x16d0 */ 48, 52, 97, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48,101,102, 52,
/* 0x16e0 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x16f0 */ 10, 32, 32, 57, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 32,
/* 0x1700 */ 32, 32, 32, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 49, 51, 57,
/* 0x1710 */ 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x1720 */ 83, 10, 32, 49, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 32,
/* 0x1730 */ 32, 32, 32, 32, 48, 51,101, 32, 32, 48, 32, 32, 48, 32, 32, 48,
/* 0x1740 */ 49, 51, 57, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x1750 */ 69, 78, 84, 83, 10, 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x1760 */ 90, 32, 32, 32, 32, 32, 32, 48,100, 99, 32, 32, 48, 32, 32, 48,
/* 0x1770 */ 32, 32, 48, 49, 51,100, 52, 32, 32, 50, 42, 42, 50, 32, 32, 67,
/* 0x1780 */ 79, 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66, 79, 76, 32, 84,
/* 0x1790 */ 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17a0 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76,
/* 0x17b0 */ 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 48, 32, 76, 90, 77, 65,
/* 0x17c0 */ 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17d0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x17e0 */ 69, 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65,
/* 0x17f0 */ 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1800 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70,
/* 0x1810 */ 77, 65, 73, 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x1820 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1830 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69,
/* 0x1840 */ 65, 68, 32, 48, 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, 48,
/* 0x1850 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x1860 */ 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 32,
/* 0x1870 */ 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48,
/* 0x1880 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x1890 */ 32,100, 32, 32, 78, 82, 86, 50, 69, 32, 48, 32, 78, 82, 86, 50,
/* 0x18a0 */ 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18b0 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68,
/* 0x18c0 */ 32, 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x18d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x18e0 */ 32, 32, 78, 82, 86, 50, 66, 32, 48, 32, 78, 82, 86, 50, 66, 10,
/* 0x18f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1900 */ 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 69, 76,
/* 0x1910 */ 70, 48, 48, 32, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48,
/* 0x1920 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1930 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68,
/* 0x1940 */ 69, 67, 50, 48, 32, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50,
/* 0x1950 */ 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1960 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95,
/* 0x1970 */ 68, 69, 67, 49, 48, 32, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1980 */ 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1990 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77,
/* 0x19a0 */ 65, 73, 78, 89, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 10,
/* 0x19b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48,
/* 0x19d0 */ 32, 77, 70, 76, 71, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19e0 */ 48, 48, 48, 48, 48, 52, 32,103, 32, 32, 32, 32, 32, 32, 32, 69,
/* 0x19f0 */ 76, 70, 77, 65, 73, 78, 88, 32, 48, 32, 95,115,116, 97,114,116,
/* 0x1a00 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a10 */ 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 32,
/* 0x1a20 */ 48, 49, 55, 99, 32,117, 99,108, 95,110,114,118, 50,101, 95,100,
/* 0x1a30 */ 101, 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48,
/* 0x1a40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32,
/* 0x1a50 */ 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 68, 32, 48, 49, 55, 48,
/* 0x1a60 */ 32,117, 99,108, 95,110,114,118, 50,100, 95,100,101, 99,111,109,
/* 0x1a70 */ 112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32,
/* 0x1a90 */ 70, 32, 78, 82, 86, 50, 66, 32, 48, 49, 52, 52, 32,117, 99,108,
/* 0x1aa0 */ 95,110,114,118, 50, 98, 95,100,101, 99,111,109,112,114,101,115,
/* 0x1ab0 */ 115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ac0 */ 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 76, 90,
/* 0x1ad0 */ 77, 65, 95, 68, 69, 67, 49, 48, 32, 48, 32, 76,122,109, 97, 68,
/* 0x1ae0 */ 101, 99,111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1af0 */ 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69,
/* 0x1b00 */ 76, 70, 77, 65, 73, 78, 89, 32, 48, 32,101,110,100, 95,100,101,
/* 0x1b10 */ 99,111,109,112,114,101,115,115, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32,
/* 0x1b30 */ 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, 79, 95, 66, 73, 78, 70,
/* 0x1b40 */ 79, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69,
/* 0x1b50 */ 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65,
/* 0x1b60 */ 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32,
/* 0x1b70 */ 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32,
/* 0x1b80 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48,
/* 0x1b90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1ba0 */ 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 65, 66, 83, 51, 50, 32,
/* 0x1bb0 */ 32, 32, 77, 70, 76, 71, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bc0 */ 48, 48, 48, 48, 48, 48, 99, 32, 82, 95, 65, 65, 82, 67, 72, 54,
/* 0x1bd0 */ 52, 95, 67, 65, 76, 76, 50, 54, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x1be0 */ 78, 90, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bf0 */ 48, 48, 48, 97, 52, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79,
/* 0x1c00 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76,
/* 0x1c10 */ 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, 83,
/* 0x1c20 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80,
/* 0x1c30 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x1c40 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c50 */ 48, 48, 48, 48, 52, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95,
/* 0x1c60 */ 67, 79, 78, 68, 66, 82, 49, 57, 32, 32, 76, 90, 77, 65, 95, 68,
/* 0x1c70 */ 69, 67, 51, 48, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78,
/* 0x1c80 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76,
/* 0x1c90 */ 70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32,
/* 0x1ca0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32,
/* 0x1cb0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85,
/* 0x1cc0 */ 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cd0 */ 100, 56, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 65, 66, 83,
/* 0x1ce0 */ 51, 50, 32, 32, 32, 79, 95, 66, 73, 78, 70, 79, 10
}; };
+1017 -190
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -249,7 +249,7 @@ eof_n2b:
mov %r12,%arg5 // mfd mov %r12,%arg5 // mfd
push $MAP_SHARED; pop %sys4 push $MAP_SHARED; pop %sys4
push %arg3; pop %arg2 // LENU push %arg3; pop %arg2 // LENU
push $PROT_WRITE|PROT_READ|PROT_EXEC; pop %arg3 // FIXME: add PROT_WRITE for DEBUG only push $PROT_READ|PROT_EXEC; pop %arg3 // FIXME: add PROT_WRITE for DEBUG only
subl %edi,%edi // (%arg1)dst = 0; // kernel chooses addr subl %edi,%edi // (%arg1)dst = 0; // kernel chooses addr
push $__NR_mmap; pop %rax; call sys_check push $__NR_mmap; pop %rax; call sys_check
push %rax // MATCH_12 push %rax // MATCH_12
+2 -2
View File
@@ -650,10 +650,10 @@ upx_main( // returns entry address
/*arg4*/ ElfW(auxv_t) *const av /*arg4*/ ElfW(auxv_t) *const av
#if defined(__x86_64) //{ #if defined(__x86_64) //{
/*arg5*/ , ElfW(Addr) elfaddr // In: &ElfW(Ehdr) for stub /*arg5*/ , ElfW(Addr) elfaddr // In: &ElfW(Ehdr) for stub
#elif defined(__powerpc64__) //}{
/*arg5*/ , ElfW(Addr) *p_reloc // In: &ElfW(Ehdr) for stub; Out: 'slide' for PT_INTERP
#elif defined(__aarch64__) //}{ #elif defined(__aarch64__) //}{
/*arg5*/ , ElfW(Addr) elfaddr /*arg5*/ , ElfW(Addr) elfaddr
#elif defined(__powerpc64__) //}{
/*arg5*/ , ElfW(Addr) *p_reloc // In: &ElfW(Ehdr) for stub; Out: 'slide' for PT_INTERP
#endif //} #endif //}
) )
{ {
+124 -117
View File
@@ -30,6 +30,7 @@
*/ */
#include "arch/arm64/v8/macros.S" #include "arch/arm64/v8/macros.S"
#define bkpt brk #0
NBPW= 8 NBPW= 8
sz_Elf64_Phdr= 56 sz_Elf64_Phdr= 56
@@ -49,7 +50,6 @@ sz_b_info= 12
sz_cpr= 4 sz_cpr= 4
b_method= 8 b_method= 8
is_ptinterp= (1<<0)
unmap_all_pages= (1<<1) unmap_all_pages= (1<<1)
AT_NULL= 0 // <elf.h> AT_NULL= 0 // <elf.h>
@@ -66,6 +66,7 @@ PROT_READ= 1
PROT_WRITE= 2 PROT_WRITE= 2
PROT_EXEC= 4 PROT_EXEC= 4
MAP_SHARED= 1
MAP_PRIVATE= 2 MAP_PRIVATE= 2
MAP_FIXED= 0x10 MAP_FIXED= 0x10
MAP_ANONYMOUS= 0x20 MAP_ANONYMOUS= 0x20
@@ -74,13 +75,28 @@ PAGE_SHIFT= 16 // 64KiB PAGE_SIZE
PAGE_SIZE = -(~0<<PAGE_SHIFT) PAGE_SIZE = -(~0<<PAGE_SHIFT)
// /usr/include/asm-generic/unistd.h // /usr/include/asm-generic/unistd.h
__NR_close = 0x39 // 57
__NR_exit = 0x5d // 93 __NR_exit = 0x5d // 93
__NR_memfd_create= 0x117 // 279
__NR_mmap = 0xde // 222 __NR_mmap = 0xde // 222
__NR_mprotect = 0xe2 // 226 __NR_mprotect = 0xe2 // 226
__NR_munmap = 0xd7 // 215 __NR_munmap = 0xd7 // 215
__NR_openat = 0x38 // 56 __NR_openat = 0x38 // 56
__NR_write = 0x40 // 64 __NR_write = 0x40 // 64
arg1 .req x0
arg1w .req w0
arg2 .req x1
arg2w .req w1
arg3 .req x2
arg3w .req w2
arg4 .req x3
arg4w .req w3
arg5 .req x4
arg5w .req w4
arg6 .req x5
arg6w .req w5
#ifndef DEBUG /*{*/ #ifndef DEBUG /*{*/
#define DEBUG 0 #define DEBUG 0
#endif /*}*/ #endif /*}*/
@@ -92,26 +108,23 @@ __NR_write = 0x40 // 64
#define TRACE(arg) /*empty*/ #define TRACE(arg) /*empty*/
#endif //} #endif //}
//lr .req x30 //lr .req x30
//fp .req x29
wLENU .req w29 // un-folded fold_begin and upx_main wLENU .req w29 // un-folded fold_begin and upx_main
xLENU .req x29 xLENU .req x29
xADRU .req x28 xADRU .req x28
xADRC .req x28 // OVERLAPS xADRU
wfd .req w27 // file descriptor of /proc/self/exe wLENC .req w29
xLENC .req x29
mfd .req w27 // file descriptor from memfd_create
xfd .req x27 xfd .req x27
xPMASK .req x26 // PAGE_MASK xPMASK .req x26 // PAGE_MASK
// The above 4 registers are passed on stack to unfolded code. // The above 4 registers are passed on *stack* to unfolded code.
xelfa .req x25 // hi &Elf64_Ehdr xelfa .req x25 // hi &Elf64_Ehdr
xfexp .req x24 // de-compressor // xPMASK, xelfa still are used here.
// xPMASK, xelfa, xfexp still are used here.
wLENC .req w29 // compressed input OVERLAPS wLENU
xLENC .req x29
xADRC .req x28 // OVERLAPS xADRU
xADRM .req x27 // conveneinence; OVERLAPS wfd, xfd
wLENM .req w23
xLENM .req x23
xauxv .req x22 xauxv .req x22
wszuf .req w21 wszuf .req w21
@@ -129,60 +142,50 @@ wPrivAnon .req w19
section ELFMAINX section ELFMAINX
sz_pack2= .-4 // placed there by ::pack3() sz_pack2= .-4 // placed there by ::pack3()
mflg: mflg:
.int MFLG // MAP_{PRIVATE|ANONYMOUS} // QNX vs linux .long MFLG // MAP_{PRIVATE|ANONYMOUS} // QNX vs linux
_start: .globl _start _start: .globl _start
#if DEBUG /*{*/
bkpt // DEBUG 0xd4200000
TRACE(#0)
#endif /*}*/
stp x0,x1,[sp,#-2*NBPW]! // ABI: -static crt0 might pass data in x0,x1 stp x0,x1,[sp,#-2*NBPW]! // ABI: -static crt0 might pass data in x0,x1
ldr wPrivAnon,mflg ldr wPrivAnon,mflg
add x0,sp,#(1+ 2)*NBPW
call zfind // avoid feint of 0==argc; out: x0= &envp
call zfind; mov xauxv,x0 // &Elf64_auxv
sub sp,sp,#4*NBPW // space for PMASK, SZPK2, ADRU, LENU
F_PMASK= 0 * NBPW
F_SZPK2= 1 * NBPW
F_ADRU= 2 * NBPW
F_LENU= 3 * NBPW
// set xPMASK by finding actual page size in Elf64_auxv
1:
ldp x1,x2,[x0],#2*NBPW
cmp w1,#AT_PAGESZ; beq 2f
cbnz w1,1b // AT_NULL
mov x2,#PAGE_SIZE // default
2:
neg xPMASK,x2 // save for folded code
str xPMASK,[sp,#F_PMASK]
call main call main
L00:
mov xFOLD,lr
f_exp: mov w1,#0 // flags
f_decompress: add x0,xFOLD,#strupx - LxFOLD
do_sys __NR_memfd_create; mov mfd,w0
section NRV_HEAD // alloca() for de-compressed stub
// empty ldr w0,[xFOLD,#sz_unc + LBINFO - LxFOLD] // .sz_unc of fold
section NRV_TAIL mov fp,sp
// empty sub x0,fp,x0
and x0,x0,#-2*NBPW
// FIXME mov sp,x0
#define NO_METHOD_CHECK 1
section NRV2E
#include "arch/arm64/v8/nrv2e_d32.S"
section NRV2D
#include "arch/arm64/v8/nrv2d_d32.S"
section NRV2B
#include "arch/arm64/v8/nrv2b_d32.S"
#include "arch/arm64/v8/lzma_d.S"
section ELFMAINY
end_decompress: .globl end_decompress
msg_SELinux:
mov w2,#L71 - L70 // length
adr x1,L70 // message text
mov w0,#2 // fd stderr
do_sys __NR_write
die:
mov w0,#127
do_sys __NR_exit
L70:
.asciz "PROT_EXEC|PROT_WRITE failed.\n"
L71:
/* IDENTSTR goes here */
section ELFMAINZ
.balign 4
mmapRW0:
mov x5,#0 // offset
mmapRW:
mov w2,#PROT_WRITE|PROT_READ
mmap:
do_sys __NR_mmap
ret
src .req x0 src .req x0
lsrc .req w1 lsrc .req w1
@@ -190,49 +193,17 @@ dst .req x2
ldst .req x3 ldst .req x3
xmeth .req x4 xmeth .req x4
wmeth .req w4 wmeth .req w4
unfold:
mov xFOLD,lr // Decompress folded code of this stub
// Reserve enough space to decompress the folded code of the stub
ldr w0, [xfexp,#sz_pack2 - f_exp]
add xelfa,xfexp,#sz_pack2 - f_exp
sub xelfa,xelfa,x0 // &Elf64_Ehdr of stub
ldr w1,[xFOLD,#sz_unc + LBINFO - LxFOLD] // .sz_unc of fold
mov w4,#-1 // fd
mov w3,#MAP_PRIVATE|MAP_ANONYMOUS
mov x0,#0 // kernel chooses addr
call mmapRW0
PUSH2(x0,x1) // ADRU, LENU
PUSH2(xPMASK,xfd)
mov xADRM,x0 // convenience
// Decompress folded code
mov dst,x0 // ADRU mov dst,x0 // ADRU
PUSH1(x1); mov ldst,sp // &slot on stack; lzma uses for EOF PUSH1(x1); mov ldst,sp // &slot on stack; lzma uses for EOF
add src, xFOLD,#sz_b_info + LBINFO - LxFOLD // folded code add src, xFOLD,#sz_b_info + LBINFO - LxFOLD // folded code
ldr lsrc, [XFOLD,#sz_cpr + LBINFO - LxFOLD] ldr lsrc, [XFOLD,#sz_cpr + LBINFO - LxFOLD]
ldrb wmeth,[xFOLD,#b_method + LBINFO - LxFOLD] ldrb wmeth,[xFOLD,#b_method + LBINFO - LxFOLD]
TRACE(#1) TRACE(#1)
callr xfexp // decompress it call f_expand // decompress it
POP1(x8) // discard lzma EOF POP1(x8) // discard lzma EOF
// propagate PAGE_MASK and wPrivAnon
str xPMASK,[xADRM]
str wPrivAnon,[xADRM,#NBPW + 2*4] // bits_privanon in unfolded code
// PROT_EXEC
mov w2,#PROT_EXEC|PROT_READ
ldr w1,[sp,3*NBPW] // LENU
mov x0,xADRM // base
TRACE(#2)
do_sys __NR_mprotect
// Use the unfolded code
ldr w0,[xFOLD, #LOBINFO - LxFOLD] // O_BINFO
bic w0,w0,#is_ptinterp | unmap_all_pages
ldr wLENC,[xfexp,#sz_pack2 - f_exp]
add xADRC,xelfa,x0 // &b_info of compressed input data
add x0,xADRM,#NBPW + 3*4 // jmp over get_page_mask() and bits_privanon
jr x0
.unreq src .unreq src
.unreq lsrc .unreq lsrc
.unreq dst .unreq dst
@@ -240,6 +211,52 @@ unfold:
.unreq xmeth .unreq xmeth
.unreq wmeth .unreq wmeth
str xPMASK,[sp] // propagate PAGE_MASK
// Write de-compressed stub
ldr w2,[xFOLD,#sz_unc + LBINFO - LxFOLD] // .sz_unc of fold
mov x1,sp
mov w0,mfd
do_sys __NR_write
mov sp,fp
mov arg6,#0 // beginning of file
mov arg5w,mfd
mov arg4w,#MAP_SHARED // modes
mov arg3w,#PROT_READ|PROT_EXEC // FIXME: add PROT_WRITE for DEBUG only
ldr arg2w,[xFOLD,#sz_unc + LBINFO - LxFOLD]
str arg2,[sp,#F_LENU]
mov arg1,#0 // addr (kernel chooses)
do_sys __NR_mmap; str x0,[sp,#F_ADRU]; mov xADRU,x0
mov arg1w,mfd
do_sys __NR_close
// Use the unfolded stub
ldr wLENC,[sp,#F_SZPK2]
ldr w1,[xFOLD, #LOBINFO - LxFOLD] // O_BINFO
add lr,xADRU,#3*4 + NBPW // jmp to fold_begin
sub wLENC,wLENC,w1
str xLENC,[sp,#F_SZPK2]
bic w1,w1,#unmap_all_pages
add xADRC,xelfa,x1 // &b_info of compressed input data
jr lr // goto unfolded stub
zfind:
ldr x1,[x0],#NBPW; cbnz x1,zfind
ret
f_expand:
#define NO_METHOD_CHECK 1
#include "arch/arm64/v8/nrv2b_d32.S"
section ELFMAINY
end_decompress: .globl end_decompress
/* IDENTSTR goes here */
section ELFMAINZ
.balign 4
#if DEBUG //{ #if DEBUG //{
TRACE_BUFLEN=1024 TRACE_BUFLEN=1024
trace: // preserves condition code (thank you, CBNZ) [if write() does!] trace: // preserves condition code (thank you, CBNZ) [if write() does!]
@@ -334,33 +351,23 @@ hex:
.ascii "0123456789abcdef" .ascii "0123456789abcdef"
#endif //} #endif //}
zfind: strupx:
ldr x1,[x0],#NBPW; cbnz x1,zfind .asciz "upx"
ret .balign 4
main: main:
mov xfexp,lr lr .req x30
add x0,sp,#3*NBPW; call zfind // in: x0= &argv; out: x0= &envp add xelfa,lr,#sz_pack2 - L00 // &sz_pack2
call zfind; mov xauxv,x0 // &Elf64_auxv ldr w0,[xelfa]
sub xelfa,xelfa,w0,uxtw
// set xPMASK by finding actual page size in Elf64_auxv str x0,[sp,#F_SZPK2]
1: callr lr
ldp x1,x2,[x0],#sz_auxv
cmp w1,#AT_PAGESZ; beq 2f
cbnz w1,1b // AT_NULL
mov x2,#PAGE_SIZE // default
2:
neg xPMASK,x2 // save for folded code
mov wfd,#-1
call unfold
LxFOLD: LxFOLD:
LOBINFO: LOBINFO:
.int O_BINFO // o_binfo | is_ptinterp | unmap_all_pages .int O_BINFO
LBINFO: LBINFO:
// { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} // { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...}
/* /*
vi:ts=8:et:nowrap vaddi:ts=8:et:nowrap
*/ */
+29 -18
View File
@@ -95,7 +95,7 @@ fold_begin: // known offset (NBPW + 3*4)
//// brk #0 // DEBUG //// brk #0 // DEBUG
b L10 b L10
// In: sp/ PMASK,fd,ADRU,LENU, x0,x1, argc,argv,... // In: sp/ PMASK,LENC,ADRU,LENU, x0,x1, argc,argv,...
//lr .req x30 //lr .req x30
wLENC .req w29 // compressed input wLENC .req w29 // compressed input
xLENC .req x29 xLENC .req x29
@@ -140,7 +140,7 @@ mprotect: .globl mprotect
do_sys __NR_mprotect; ret do_sys __NR_mprotect; ret
L10: L10:
add sp,sp,#2*NBPW // toss xPMASK,xfd add sp,sp,#2*NBPW // toss xPMASK,sz_pack2
POP2(xADRU,xLENU) POP2(xADRU,xLENU)
mov x7,sp // old_sp: x0,x1,argc,... mov x7,sp // old_sp: x0,x1,argc,...
@@ -213,11 +213,8 @@ no_buf_pse:
no_env_pse: no_env_pse:
/* Construct arglist for upx_main */ /* Construct arglist for upx_main */
ldr x7,PAGE_MASK mov x4,xelfa // Elf64_Ehdr (reloc if ET_DYN and not pre-link)
mov x6,xelfa // Elf64_Ehdr (reloc if ET_DYN and not pre-link)
sub sp,sp,#MAX_ELF_HDR_64 + OVERHEAD // alloca sub sp,sp,#MAX_ELF_HDR_64 + OVERHEAD // alloca
adr x5,f_unfilter
mov x4,xfexp // &f_decompress
mov x3,xauxv // new &Elf64_auxv_t mov x3,xauxv // new &Elf64_auxv_t
mov x2,sp // ehdr mov x2,sp // ehdr
mov w1,wLENC // total size of compressed data mov w1,wLENC // total size of compressed data
@@ -451,6 +448,8 @@ hex:
.unreq cto .unreq cto
.unreq fid .unreq fid
section SYSCALLS; .balign 4
__NR_SYSCALL_BASE= 0 __NR_SYSCALL_BASE= 0
__NR_exit = 0x5d + __NR_SYSCALL_BASE // 93 __NR_exit = 0x5d + __NR_SYSCALL_BASE // 93
@@ -466,6 +465,8 @@ __NR_readlink = 0x4e + __NR_SYSCALL_BASE // 78
__NR_mmap = 0xde + __NR_SYSCALL_BASE // 222 __NR_mmap = 0xde + __NR_SYSCALL_BASE // 222
__NR_mprotect = 0xe2 + __NR_SYSCALL_BASE // 226 __NR_mprotect = 0xe2 + __NR_SYSCALL_BASE // 226
__NR_munmap = 0xd7 + __NR_SYSCALL_BASE // 215 __NR_munmap = 0xd7 + __NR_SYSCALL_BASE // 215
__NR_memfd_create= 0x117 + __NR_SYSCALL_BASE // 279
__NR_ftruncate= 0x2e + __NR_SYSCALL_BASE // 46
.globl my_bkpt .globl my_bkpt
my_bkpt: my_bkpt:
@@ -477,28 +478,28 @@ exit:
do_sys __NR_exit do_sys __NR_exit
.globl read .globl read
read: read: do_sys __NR_read; ret
do_sys __NR_read; ret
.globl write .globl write
write: write: do_sys __NR_write; ret
do_sys __NR_write; ret
.globl close .globl close
close: close: do_sys __NR_close; ret
do_sys __NR_close; ret
.globl getpid .globl getpid
getpid: getpid: do_sys __NR_getpid; ret
do_sys __NR_getpid; ret
.globl brk .globl brk
brk: brk: do_sys __NR_brk; ret
do_sys __NR_brk; ret
.globl munmap .globl munmap
munmap: munmap: do_sys __NR_munmap; ret
do_sys __NR_munmap; ret
.globl memfd_create
memfd_create: do_sys __NR_memfd_create; ret
.globl ftruncate
ftruncate: do_sys __NR_ftruncate; ret
.globl unlink .globl unlink
unlink: unlink:
@@ -539,5 +540,15 @@ div10: .globl div10
ret ret
#endif /*}*/ #endif /*}*/
memcpy: .globl memcpy // void *memcpy(void *dst, void const *src, size_t len)
ldrb w3,[x1],#1; sub x2,x2,#1
strb w3,[x0],#1; cbnz x2,memcpy
ret
memset: .globl memset // void *memset(void *dst, int c, size_t len);
strb w1,[x0],#1; sub x2,x2,#1
cbnz x2,memset
ret
// vi:ts=8:et:nowrap // vi:ts=8:et:nowrap
+1 -13
View File
@@ -30,19 +30,7 @@
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64", "elf64-littleaarch64") OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64", "elf64-littleaarch64")
OUTPUT_ARCH(aarch64) OUTPUT_ARCH(aarch64)
/*ENTRY(_start)*/
PHDRS
{
text PT_LOAD FILEHDR PHDRS FLAGS ( 5 ) ; /* r-x (no -w-) */
data PT_LOAD ; /* for setting brk(0) */
}
SECTIONS SECTIONS
{ {
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */ . = SIZEOF_HEADERS + 12 ;
.text : {
*(.text)
*(.data)
} : text
.data : {
} : data
} }
+1
View File
@@ -0,0 +1 @@
#include "amd64-linux.elf-main2.c"
+6 -31
View File
@@ -2,49 +2,24 @@ file format elf64-littleaarch64
Sections: Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 010 0 0 040 2**0 CONTENTS 0 ELFMAINX 0250 0 0 040 2**0 CONTENTS
1 NRV_HEAD 0 0 0 050 2**0 CONTENTS 1 ELFMAINY 0 0 0 0290 2**0 CONTENTS
2 NRV_TAIL 0 0 0 050 2**0 CONTENTS 2 ELFMAINZ 01c 0 0 0290 2**2 CONTENTS
3 NRV2E 017c 0 0 050 2**0 CONTENTS
4 NRV2D 0170 0 0 01cc 2**0 CONTENTS
5 NRV2B 0144 0 0 033c 2**0 CONTENTS
6 LZMA_ELF00 010c 0 0 0480 2**0 CONTENTS
7 LZMA_DEC20 0968 0 0 058c 2**0 CONTENTS
8 LZMA_DEC10 04a0 0 0 0ef4 2**0 CONTENTS
9 LZMA_DEC30 0 0 0 01394 2**0 CONTENTS
10 ELFMAINY 03e 0 0 01394 2**0 CONTENTS
11 ELFMAINZ 0dc 0 0 013d4 2**2 CONTENTS
SYMBOL TABLE: SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0 LZMA_DEC30
0000000000000000 l d ELFMAINZ 0 ELFMAINZ 0000000000000000 l d ELFMAINZ 0 ELFMAINZ
0000000000000000 l d ELFMAINX 0 ELFMAINX 0000000000000000 l d ELFMAINX 0 ELFMAINX
0000000000000000 l d NRV_HEAD 0 NRV_HEAD
0000000000000000 l d NRV_TAIL 0 NRV_TAIL
0000000000000000 l d NRV2E 0 NRV2E
0000000000000000 l d NRV2D 0 NRV2D
0000000000000000 l d NRV2B 0 NRV2B
0000000000000000 l d LZMA_ELF00 0 LZMA_ELF00
0000000000000000 l d LZMA_DEC20 0 LZMA_DEC20
0000000000000000 l d LZMA_DEC10 0 LZMA_DEC10
0000000000000000 l d ELFMAINY 0 ELFMAINY 0000000000000000 l d ELFMAINY 0 ELFMAINY
0000000000000000 *UND* 0 MFLG 0000000000000000 *UND* 0 MFLG
0000000000000004 g ELFMAINX 0 _start 0000000000000004 g ELFMAINX 0 _start
0000000000000000 g F NRV2E 017c ucl_nrv2e_decompress_32 000000000000010c g F ELFMAINX 0144 ucl_nrv2b_decompress_32
0000000000000000 g F NRV2D 0170 ucl_nrv2d_decompress_32
0000000000000000 g F NRV2B 0144 ucl_nrv2b_decompress_32
0000000000000000 g LZMA_DEC10 0 LzmaDecode
0000000000000000 g ELFMAINY 0 end_decompress 0000000000000000 g ELFMAINY 0 end_decompress
0000000000000000 *UND* 0 O_BINFO 0000000000000000 *UND* 0 O_BINFO
RELOCATION RECORDS FOR [ELFMAINX]: RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
0000000000000000 R_AARCH64_ABS32 MFLG 0000000000000000 R_AARCH64_ABS32 MFLG
000000000000000c R_AARCH64_CALL26 ELFMAINZ+0x00000000000000a4 000000000000003c R_AARCH64_CALL26 ELFMAINZ+0x0000000000000004
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
0000000000000004 R_AARCH64_CONDBR19 LZMA_DEC30
RELOCATION RECORDS FOR [ELFMAINZ]: RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
00000000000000d8 R_AARCH64_ABS32 O_BINFO 0000000000000018 R_AARCH64_ABS32 O_BINFO
+75 -41
View File
@@ -6,48 +6,82 @@ Name Origin Length Attributes
Linker script and memory map Linker script and memory map
0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc) 0x000000000000004c . = (SIZEOF_HEADERS + 0xc)
.text 0x00000000001000bc 0xae4
*(.text)
.text 0x00000000001000bc 0x300 tmp/arm64-linux.elf-fold.o
0x00000000001000c4 get_page_mask
0x00000000001000d4 mmap_privanon
0x00000000001000e4 mmap
0x0000000000100100 Pprotect
0x0000000000100100 mprotect
0x0000000000100318 my_bkpt
0x0000000000100320 exit
0x0000000000100328 read
0x0000000000100334 write
0x0000000000100340 close
0x000000000010034c getpid
0x0000000000100358 brk
0x0000000000100364 munmap
0x0000000000100370 unlink
0x0000000000100384 readlink
0x000000000010038c open
0x00000000001003a8 __clear_cache
.text 0x00000000001003bc 0x7e4 tmp/arm64-linux.elf-main.o
0x0000000000100a38 upx_main
*(.data)
.data 0x0000000000100ba0 0x0 tmp/arm64-linux.elf-fold.o
.data 0x0000000000100ba0 0x0 tmp/arm64-linux.elf-main.o
.iplt 0x0000000000100ba0 0x0
.iplt 0x0000000000100ba0 0x0 tmp/arm64-linux.elf-fold.o
.rela.dyn 0x0000000000100ba0 0x0
.rela.iplt 0x0000000000100ba0 0x0 tmp/arm64-linux.elf-fold.o
.data
LOAD tmp/arm64-linux.elf-fold.o LOAD tmp/arm64-linux.elf-fold.o
LOAD tmp/arm64-linux.elf-main.o LOAD tmp/arm64-expand.o
LOAD tmp/arm64-linux.elf-main2.o
OUTPUT(tmp/arm64-linux.elf-fold.bin elf64-littleaarch64) OUTPUT(tmp/arm64-linux.elf-fold.bin elf64-littleaarch64)
.igot.plt 0x0000000000100ba0 0x0 .text 0x0000000000000000 0xaa8
.igot.plt 0x0000000000100ba0 0x0 tmp/arm64-linux.elf-fold.o .text 0x0000000000000000 0x250 tmp/arm64-linux.elf-fold.o
0x0000000000000008 get_page_mask
0x0000000000000018 mmap_privanon
0x0000000000000028 mmap
0x0000000000000044 Pprotect
0x0000000000000044 mprotect
.text 0x0000000000000250 0x0 tmp/arm64-expand.o
.text 0x0000000000000250 0x858 tmp/arm64-linux.elf-main2.o
0x0000000000000904 underlay
0x0000000000000970 upx_main
.bss 0x0000000000100ba0 0x0 .data 0x0000000000000000 0x0
.bss 0x0000000000100ba0 0x0 tmp/arm64-linux.elf-fold.o .data 0x0000000000000000 0x0 tmp/arm64-linux.elf-fold.o
.bss 0x0000000000100ba0 0x0 tmp/arm64-linux.elf-main.o .data 0x0000000000000000 0x0 tmp/arm64-expand.o
.data 0x0000000000000000 0x0 tmp/arm64-linux.elf-main2.o
.bss 0x0000000000000000 0x0
.bss 0x0000000000000000 0x0 tmp/arm64-linux.elf-fold.o
.bss 0x0000000000000000 0x0 tmp/arm64-expand.o
.bss 0x0000000000000000 0x0 tmp/arm64-linux.elf-main2.o
SYSCALLS 0x0000000000000000 0xe0
SYSCALLS 0x0000000000000000 0xe0 tmp/arm64-linux.elf-fold.o
0x0000000000000000 my_bkpt
0x0000000000000008 exit
0x0000000000000010 read
0x000000000000001c write
0x0000000000000028 close
0x0000000000000034 getpid
0x0000000000000040 brk
0x000000000000004c munmap
0x0000000000000058 memfd_create
0x0000000000000064 ftruncate
0x0000000000000070 unlink
0x0000000000000084 readlink
0x000000000000008c open
0x00000000000000a8 __clear_cache
0x00000000000000bc memcpy
0x00000000000000d0 memset
EXP_HEAD 0x0000000000000000 0x104
EXP_HEAD 0x0000000000000000 0x104 tmp/arm64-expand.o
0x0000000000000000 f_expand
EXP_TAIL 0x0000000000000000 0x20
EXP_TAIL 0x0000000000000000 0x20 tmp/arm64-expand.o
0x0000000000000000 eof
NRV2E 0x0000000000000000 0x17c
NRV2E 0x0000000000000000 0x17c tmp/arm64-expand.o
0x0000000000000000 ucl_nrv2e_decompress_32
NRV2D 0x0000000000000000 0x170
NRV2D 0x0000000000000000 0x170 tmp/arm64-expand.o
0x0000000000000000 ucl_nrv2d_decompress_32
NRV2B 0x0000000000000000 0x144
NRV2B 0x0000000000000000 0x144 tmp/arm64-expand.o
0x0000000000000000 ucl_nrv2b_decompress_32
LZMA_ELF00 0x0000000000000000 0x10c
LZMA_ELF00 0x0000000000000000 0x10c tmp/arm64-expand.o
LZMA_DEC20 0x0000000000000000 0x968
LZMA_DEC20 0x0000000000000000 0x968 tmp/arm64-expand.o
LZMA_DEC10 0x0000000000000000 0x4a0
LZMA_DEC10 0x0000000000000000 0x4a0 tmp/arm64-expand.o
0x0000000000000000 LzmaDecode
LZMA_DEC30 0x0000000000000000 0x0
LZMA_DEC30 0x0000000000000000 0x0 tmp/arm64-expand.o