pax_global_header 0000666 0000000 0000000 00000000064 14544472107 0014522 g ustar 00root root 0000000 0000000 52 comment=cc242da3aae5df373f7ed7fe9995665e6835802c
tinyssh-20240101/ 0000775 0000000 0000000 00000000000 14544472107 0013456 5 ustar 00root root 0000000 0000000 tinyssh-20240101/.gitignore 0000664 0000000 0000000 00000000007 14544472107 0015443 0 ustar 00root root 0000000 0000000 /build
tinyssh-20240101/INSTALL 0000664 0000000 0000000 00000000045 14544472107 0014506 0 ustar 00root root 0000000 0000000 See https://tinyssh.org/install.html
tinyssh-20240101/LICENCE 0000664 0000000 0000000 00000015610 14544472107 0014446 0 ustar 00root root 0000000 0000000 Creative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.
tinyssh-20240101/Makefile 0000664 0000000 0000000 00000000330 14544472107 0015112 0 ustar 00root root 0000000 0000000 compile: make-tinyssh.sh
sh -e make-tinyssh.sh
cross-compile: make-tinysshcc.sh
sh -e make-tinysshcc.sh
clean:
rm -rf build
install:
sh -e make-install.sh $(DESTDIR)
deb:
dpkg-buildpackage -b -rfakeroot -us -uc
tinyssh-20240101/README.md 0000664 0000000 0000000 00000005201 14544472107 0014733 0 ustar 00root root 0000000 0000000 ### Introduction ###
* tinysshd is a minimalistic SSH server which implements only a subset of SSHv2 features.
* tinysshd supports only secure cryptography (minimum 128-bit security, protected against cache-timing attacks)
* tinysshd doesn't implement older crypto (such as RSA, DSA, HMAC-MD5, HMAC-SHA1, 3DES, RC4, ...)
* tinysshd doesn't implement unsafe features (such as password or hostbased authentication)
* tinysshd doesn't have features such: SSH1 protocol, compression, port forwarding, agent forwarding, X11 forwarding ...
* tinysshd doesn't use dynamic memory allocation (no allocation failures, etc.)
### Crypto primitives ###
* State-of-the-art crypto: ssh-ed25519, curve25519-sha256, chacha20-poly1305@openssh.com
* Older standard: ecdsa-sha2-nistp256, ecdh-sha2-nistp256, aes256-ctr, hmac-sha2-256 removed in version 20190101
* Postquantum crypto: sntrup761x25519-sha512@openssh.com, chacha20-poly1305@openssh.com
### Project timelime ###
* experimental: 2014.01.01 - 2014.12.31 (experimentation)
* alpha(updated): 2015.01.01 - 2017.12.31 (not ready for production use, ready for testing)
* beta(updated): 2018.01.01 - ????.??.?? (ready for production use)
* stable: expected ????.??.?? - (ready for production use - including post-quantum crypto)
### Current release (20240101) ###
* has 63899 words of code
* beta release
### How-to run ###
~~~
TCPSERVER
tcpserver -HRDl0 0.0.0.0 22 /usr/sbin/tinysshd -v /etc/tinyssh/sshkeydir &
BUSYBOX
busybox tcpsvd 0 22 tinysshd -v /etc/tinyssh/sshkeydir &
INETD
/etc/inetd.conf:
ssh stream tcp nowait root /usr/sbin/tinysshd tinysshd -l -v /etc/tinyssh/sshkeydir
SYSTEMD
tinysshd.socket:
[Unit]
Description=TinySSH server socket
ConditionPathExists=!/etc/tinyssh/disable_tinysshd
[Socket]
ListenStream=22
Accept=yes
[Install]
WantedBy=sockets.target
tinysshd@.service:
[Unit]
Description=Tiny SSH server
After=network.target auditd.service
[Service]
ExecStartPre=-/usr/sbin/tinysshd-makekey -q /etc/tinyssh/sshkeydir
EnvironmentFile=-/etc/default/tinysshd
ExecStart=/usr/sbin/tinysshd ${TINYSSHDOPTS} -- /etc/tinyssh/sshkeydir
KillMode=process
SuccessExitStatus=111
StandardInput=socket
StandardError=journal
[Install]
WantedBy=multi-user.target
~~~
tinyssh-20240101/_tinyssh/ 0000775 0000000 0000000 00000000000 14544472107 0015316 5 ustar 00root root 0000000 0000000 tinyssh-20240101/_tinyssh/_TARGETS 0000664 0000000 0000000 00000000221 14544472107 0016504 0 ustar 00root root 0000000 0000000 _tinysshd-printkex
_tinysshd-unauthenticated
_tinysshd-test-hello1
_tinysshd-test-hello2
_tinysshd-test-kex1
_tinysshd-test-kex2
_tinysshd-speed
tinyssh-20240101/_tinyssh/_tinysshd-printkex.c 0000664 0000000 0000000 00000010307 14544472107 0021331 0 ustar 00root root 0000000 0000000 /*
20141210
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "log.h"
#include "packet.h"
#include "ssh.h"
#include "bug.h"
#include "packetparser.h"
#include "global.h"
static void cleanup(void) {
global_purge();
}
static void die_fatal(const char *trouble, const char *d, const char *fn) {
cleanup();
if (d) {
if (fn) log_f5(trouble, " ", d, "/", fn);
else log_f3(trouble, " ", d);
}
else {
log_f1(trouble);
}
_exit(111);
}
static int _packet_kex_receive(void) {
struct buf *b = &packet.kexrecv;
long long pos = 0;
crypto_uint8 ch;
crypto_uint32 len;
if (!packet_getall(b, SSH_MSG_KEXINIT)) return 0;
/* parse packet */
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* SSH_MSG_KEXINIT */
if (ch != SSH_MSG_KEXINIT) bug_proto();
pos = packetparser_skip(b->buf, b->len, pos, 16); /* cookie */
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* kex algorithms */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("kex algorithms: ", (char *)b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* server host key algorithms */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("server host key algorithms: ", (char *)b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* encryption algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("encryption algorithms client to server: ", (char *)b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* encryption algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("encryption algorithms server to client: ", (char *)b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* mac algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("mac algorithms client to server: ", (char *)b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* mac algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("mac algorithms server to client: ", (char *)b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* compress algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* compress algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* languages client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* languages server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* kex first packet follows */
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* reserved */
return 1;
}
int main(int argc, char **argv) {
pid_t pid;
int tochild[2] = { -1, -1 };
int fromchild[2] = { -1, -1 };
if (argc < 2) _exit(111);
if (!argv[0]) _exit(111);
if (!argv[1]) _exit(111);
++argv;
if (pipe(tochild) == -1) _exit(111);
if (pipe(fromchild) == -1) _exit(111);
pid = fork();
if (pid == -1) _exit(111);
if (pid == 0) {
close(tochild[1]);
close(fromchild[0]);
close(2);
if (dup2(tochild[0], 0) == -1) _exit(111);
if (dup2(fromchild[1], 1) == -1) _exit(111);
execvp(*argv, argv);
_exit(111);
}
close(tochild[0]);
close(fromchild[1]);
close(0); if (dup2(fromchild[0], 0) == -1) _exit(111);
close(1); if (dup2(tochild[1], 1) == -1) _exit(111);
signal(SIGPIPE, SIG_IGN);
global_init();
log_init(2, "_tinysshd-printkex", 0, 0);
if (!packet_hello_receive()) die_fatal("unable to receive hello-string", 0, 0);
if (!packet_hello_send()) die_fatal("unable to send hello-string", 0, 0);
if (!_packet_kex_receive()) die_fatal("unable to receive kex-message", 0, 0);
_exit(111);
}
tinyssh-20240101/_tinyssh/_tinysshd-speed.c 0000664 0000000 0000000 00000012337 14544472107 0020572 0 ustar 00root root 0000000 0000000 #include
#include
#include
#include "crypto.h"
#include "randombytes.h"
static unsigned char sk[2560];
static unsigned char pk[2560];
static unsigned char c[2560];
static unsigned char a[16];
static unsigned char n[8];
static unsigned char k[64];
static unsigned char h[64];
static unsigned char space[10240];
static unsigned char m[51200];
static unsigned char sm[51200];
static unsigned long long smlen;
static unsigned long long mlen;
static int flagtimeout;
static void timeout(int x) {
flagtimeout = x = 1;
signal(SIGALRM, timeout);
}
int main(void) {
long long count;
signal(SIGALRM, timeout);
#ifdef crypto_hash_sha512_IMPLEMENTATION
/* sha512 test */
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_hash_sha512(h, space, sizeof space) != 0) return 111;
++count;
}
printf("crypto_hash_sha512: %lld MB/s (%s)\n", count/100, crypto_hash_sha512_IMPLEMENTATION);
#endif
#ifdef crypto_hash_sha256_IMPLEMENTATION
/* sha256 test */
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_hash_sha256(h, space, sizeof space) != 0) return 111;
++count;
}
printf("crypto_hash_sha256: %lld MB/s (%s)\n", count/100, crypto_hash_sha256_IMPLEMENTATION);
#endif
#ifdef crypto_stream_chacha20_IMPLEMENTATION
/* chacha20 test */
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_stream_chacha20_xor(space, space, sizeof space, n, k) != 0) return 111;
++count;
}
printf("crypto_stream_chacha20_xor: %lld MB/s (%s)\n", count/100, crypto_stream_chacha20_IMPLEMENTATION);
#endif
#ifdef crypto_onetimeauth_poly1305_IMPLEMENTATION
/* onetimeauth test */
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_onetimeauth_poly1305(a, space, sizeof space, k) != 0) return 111;
++count;
}
printf("crypto_onetimeauth_poly1305: %lld MB/s (%s)\n", count/100, crypto_onetimeauth_poly1305_IMPLEMENTATION);
#endif
#ifdef crypto_scalarmult_curve25519_IMPLEMENTATION
/* x25519 test */
randombytes(sk, crypto_scalarmult_curve25519_SCALARBYTES);
crypto_scalarmult_curve25519_base(pk, sk);
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_scalarmult_curve25519(k, sk, pk) != 0) return 111;
++count;
}
printf("crypto_scalarmult_curve25519: %lld dh/s (%s)\n", count, crypto_scalarmult_curve25519_IMPLEMENTATION);
#endif
#ifdef crypto_sign_ed25519_IMPLEMENTATION
/* ed25519 test */
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_sign_ed25519_keypair(pk, sk) != 0) return 111;
++count;
}
printf("crypto_sign_ed25519_keyipair: %lld keypairs/s (%s)\n", count, crypto_sign_ed25519_IMPLEMENTATION);
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_sign_ed25519(sm, &smlen, m + crypto_sign_ed25519_BYTES, sizeof(m) - crypto_sign_ed25519_BYTES, sk) != 0) return 111;
++count;
}
printf("crypto_sign_ed25519: %lld sigs/s (%s)\n", count, crypto_sign_ed25519_IMPLEMENTATION);
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_sign_ed25519_open(m, &mlen, sm, sizeof sm, pk) != 0) return 111;
++count;
}
printf("crypto_sign_ed25519_open: %lld sigs/s (%s)\n", count, crypto_sign_ed25519_IMPLEMENTATION);
#endif
#ifdef crypto_kem_sntrup4591761_IMPLEMENTATION
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_kem_sntrup4591761_keypair(pk, sk) != 0) return 111;
++count;
}
printf("crypto_kem_sntrup4591761_keypair: %lld keypairs/s (%s)\n", count, crypto_kem_sntrup4591761_IMPLEMENTATION);
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_kem_sntrup4591761_enc(c, k, pk) != 0) return 111;
++count;
}
printf("crypto_kem_sntrup4591761_enc: %lld encryptions/s (%s)\n", count, crypto_kem_sntrup4591761_IMPLEMENTATION);
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_kem_sntrup4591761_dec(k, c, sk) != 0) return 111;
++count;
}
printf("crypto_kem_sntrup4591761_dec: %lld decryptions/s (%s)\n", count, crypto_kem_sntrup4591761_IMPLEMENTATION);
#endif
#ifdef crypto_kem_sntrup4591761x25519_IMPLEMENTATION
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_kem_sntrup4591761x25519_keypair(pk, sk) != 0) return 111;
++count;
}
printf("crypto_kem_sntrup4591761x25519_keypair: %lld keypairs/s (%s)\n", count, crypto_kem_sntrup4591761x25519_IMPLEMENTATION);
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_kem_sntrup4591761x25519_enc(c, k, pk) != 0) return 111;
++count;
}
printf("crypto_kem_sntrup4591761x25519_enc: %lld encryptions/s (%s)\n", count, crypto_kem_sntrup4591761x25519_IMPLEMENTATION);
alarm(1); flagtimeout = 0; count = 0;
while (!flagtimeout) {
if (crypto_kem_sntrup4591761x25519_dec(k, c, sk) != 0) return 111;
++count;
}
printf("crypto_kem_sntrup4591761x25519_dec: %lld decryptions/s (%s)\n", count, crypto_kem_sntrup4591761x25519_IMPLEMENTATION);
#endif
return 0;
}
tinyssh-20240101/_tinyssh/_tinysshd-test-hello1.c 0000664 0000000 0000000 00000001704 14544472107 0021627 0 ustar 00root root 0000000 0000000 /*
20160225
Jan Mojzis
Public domain.
*/
#include
#include
#include
int main(int argc, char **argv) {
pid_t pid;
int tochild[2] = { -1, -1 };
int fromchild[2] = { -1, -1 };
if (argc < 2) _exit(111);
if (!argv[0]) _exit(111);
if (!argv[1]) _exit(111);
++argv;
if (pipe(tochild) == -1) _exit(111);
if (pipe(fromchild) == -1) _exit(111);
pid = fork();
if (pid == -1) _exit(111);
if (pid == 0) {
close(tochild[1]);
close(fromchild[0]);
close(1); /* simulate closed connection */
if (dup2(tochild[0], 0) == -1) _exit(111);
if (dup2(fromchild[1], 1) == -1) _exit(111);
execvp(*argv, argv);
_exit(111);
}
close(tochild[0]);
close(fromchild[1]);
close(0); if (dup2(fromchild[0], 0) == -1) _exit(111);
close(1); if (dup2(tochild[1], 1) == -1) _exit(111);
signal(SIGPIPE, SIG_IGN);
_exit(111);
}
tinyssh-20240101/_tinyssh/_tinysshd-test-hello2.c 0000664 0000000 0000000 00000003404 14544472107 0021627 0 ustar 00root root 0000000 0000000 /*
20160225
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "log.h"
#include "packet.h"
#include "global.h"
#include "str.h"
#include "writeall.h"
static void cleanup(void) {
global_purge();
}
static void die_fatal(const char *trouble, const char *d, const char *fn) {
cleanup();
if (d) {
if (fn) log_f5(trouble, " ", d, "/", fn);
else log_f3(trouble, " ", d);
}
else {
log_f1(trouble);
}
_exit(111);
}
int main(int argc, char **argv) {
pid_t pid;
int tochild[2] = { -1, -1 };
int fromchild[2] = { -1, -1 };
const char *message;
long long messagelen;
if (argc < 2) _exit(111);
if (!argv[0]) _exit(111);
if (!argv[1]) _exit(111);
if (!argv[2]) _exit(111);
++argv;
message = *argv;
messagelen = str_len(message);
++argv;
if (pipe(tochild) == -1) _exit(111);
if (pipe(fromchild) == -1) _exit(111);
pid = fork();
if (pid == -1) _exit(111);
if (pid == 0) {
close(tochild[1]);
close(fromchild[0]);
if (dup2(tochild[0], 0) == -1) _exit(111);
if (dup2(fromchild[1], 1) == -1) _exit(111);
execvp(*argv, argv);
_exit(111);
}
close(tochild[0]);
close(fromchild[1]);
close(0); if (dup2(fromchild[0], 0) == -1) _exit(111);
close(1); if (dup2(tochild[1], 1) == -1) _exit(111);
signal(SIGPIPE, SIG_IGN);
global_init();
if (!packet_hello_receive()) die_fatal("unable to receive hello-string", 0, 0);
if (messagelen) {
if (writeall(1, message, messagelen) == -1) die_fatal("unable to write hello-string", 0, 0);
if (writeall(1, "\r\n", 2) == -1) die_fatal("unable to write hello-string", 0, 0);
}
_exit(111);
}
tinyssh-20240101/_tinyssh/_tinysshd-test-kex1.c 0000664 0000000 0000000 00000003045 14544472107 0021313 0 ustar 00root root 0000000 0000000 /*
20160226
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "log.h"
#include "packet.h"
#include "ssh.h"
#include "bug.h"
#include "packetparser.h"
#include "global.h"
static void cleanup(void) {
global_purge();
}
static void die_fatal(const char *trouble, const char *d, const char *fn) {
cleanup();
if (d) {
if (fn) log_f5(trouble, " ", d, "/", fn);
else log_f3(trouble, " ", d);
}
else {
log_f1(trouble);
}
_exit(111);
}
int main(int argc, char **argv) {
pid_t pid;
int tochild[2] = { -1, -1 };
int fromchild[2] = { -1, -1 };
if (argc < 2) _exit(111);
if (!argv[0]) _exit(111);
if (!argv[1]) _exit(111);
++argv;
if (pipe(tochild) == -1) _exit(111);
if (pipe(fromchild) == -1) _exit(111);
pid = fork();
if (pid == -1) _exit(111);
if (pid == 0) {
close(tochild[1]);
close(fromchild[0]);
if (dup2(tochild[0], 0) == -1) _exit(111);
if (dup2(fromchild[1], 1) == -1) _exit(111);
execvp(*argv, argv);
_exit(111);
}
close(tochild[0]);
close(fromchild[1]);
close(0); if (dup2(fromchild[0], 0) == -1) _exit(111);
close(1); if (dup2(tochild[1], 1) == -1) _exit(111);
signal(SIGPIPE, SIG_IGN);
global_init();
log_init(2, "_tinysshd-test-kex1", 0, 0);
if (!packet_hello_receive()) die_fatal("unable to receive hello-string", 0, 0);
if (!packet_hello_send()) die_fatal("unable to send hello-string", 0, 0);
_exit(111);
}
tinyssh-20240101/_tinyssh/_tinysshd-test-kex2.c 0000664 0000000 0000000 00000012331 14544472107 0021312 0 ustar 00root root 0000000 0000000 /*
20160226
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "log.h"
#include "packet.h"
#include "ssh.h"
#include "bug.h"
#include "packetparser.h"
#include "global.h"
static void cleanup(void) {
global_purge();
}
static void die_fatal(const char *trouble, const char *d, const char *fn) {
cleanup();
if (d) {
if (fn) log_f5(trouble, " ", d, "/", fn);
else log_f3(trouble, " ", d);
}
else {
log_f1(trouble);
}
_exit(111);
}
static int _packet_disconnect(struct buf *b) {
buf_purge(b);
buf_putnum8(b, SSH_MSG_DISCONNECT); /* byte SSH_MSG_DISCONNECT */
buf_putnum32(b, 0); /* uint32 reason code */
buf_putstring(b, "bye"); /* string description in ISO-10646 UTF-8 encoding [RFC3629] */
buf_putstring(b, ""); /* string language tag [RFC3066] */
packet_put(b);
return packet_sendall();
}
static int _packet_debug(struct buf *b) {
buf_purge(b);
buf_putnum8(b, SSH_MSG_DEBUG); /* SSH_MSG_DEBUG */
buf_putnum8(b, 1); /* always_display */
buf_putstring(b, "test message"); /* message in ISO-10646 UTF-8 encoding [RFC3629] */
buf_putstring(b, ""); /* language tag [RFC3066] */
packet_put(b);
return packet_sendall();
}
static int _packet_kex_receive(void) {
struct buf *b = &packet.kexrecv;
long long pos = 0;
crypto_uint8 ch;
crypto_uint32 len;
if (!packet_getall(b, SSH_MSG_KEXINIT)) return 0;
/* parse packet */
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* SSH_MSG_KEXINIT */
if (ch != SSH_MSG_KEXINIT) bug_proto();
pos = packetparser_skip(b->buf, b->len, pos, 16); /* cookie */
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* kex algorithms */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("kex algorithms: ", (char *)b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* server host key algorithms */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("server host key algorithms: ", (char *)b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* encryption algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("encryption algorithms client to server: ", (char *)b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* encryption algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("encryption algorithms server to client: ", (char *)b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* mac algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("mac algorithms client to server: ", (char *)b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* mac algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("mac algorithms server to client: ", (char *)b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* compress algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* compress algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* languages client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* languages server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* kex first packet follows */
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* reserved */
return 1;
}
static unsigned char bspace[1024];
static struct buf b;
int main(int argc, char **argv) {
pid_t pid;
int tochild[2] = { -1, -1 };
int fromchild[2] = { -1, -1 };
if (argc < 2) _exit(111);
if (!argv[0]) _exit(111);
if (!argv[1]) _exit(111);
++argv;
buf_init(&b, bspace, sizeof bspace);
if (pipe(tochild) == -1) _exit(111);
if (pipe(fromchild) == -1) _exit(111);
pid = fork();
if (pid == -1) _exit(111);
if (pid == 0) {
close(tochild[1]);
close(fromchild[0]);
if (dup2(tochild[0], 0) == -1) _exit(111);
if (dup2(fromchild[1], 1) == -1) _exit(111);
execvp(*argv, argv);
_exit(111);
}
close(tochild[0]);
close(fromchild[1]);
close(0); if (dup2(fromchild[0], 0) == -1) _exit(111);
close(1); if (dup2(tochild[1], 1) == -1) _exit(111);
signal(SIGPIPE, SIG_IGN);
global_init();
log_init(0, "_tinysshd-test-kex1", 0, 0);
if (!packet_hello_receive()) die_fatal("unable to receive hello-string", 0, 0);
if (!packet_hello_send()) die_fatal("unable to send hello-string", 0, 0);
if (!_packet_kex_receive()) die_fatal("unable to receive kex-message", 0, 0);
if (!_packet_disconnect(&b)) die_fatal("unable to send disconnect-message", 0, 0);
_exit(111);
}
tinyssh-20240101/_tinyssh/_tinysshd-unauthenticated.c 0000664 0000000 0000000 00000005003 14544472107 0022647 0 ustar 00root root 0000000 0000000 /*
20141210
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "log.h"
#include "packet.h"
#include "ssh.h"
#include "bug.h"
#include "packetparser.h"
#include "global.h"
static void cleanup(void) {
global_purge();
}
static void die_fatal(const char *trouble, const char *d, const char *fn) {
cleanup();
if (d) {
if (fn) log_f5(trouble, " ", d, "/", fn);
else log_f3(trouble, " ", d);
}
else {
log_f1(trouble);
}
_exit(111);
}
static int _packet_debug(struct buf *b) {
buf_purge(b);
buf_putnum8(b, SSH_MSG_DEBUG); /* SSH_MSG_DEBUG */
buf_putnum8(b, 1); /* always_display */
buf_putstring(b, "test message"); /* message in ISO-10646 UTF-8 encoding [RFC3629] */
buf_putstring(b, ""); /* language tag [RFC3066] */
packet_put(b);
return packet_sendall();
}
static unsigned char bspace[1024];
static struct buf b;
int main(int argc, char **argv) {
pid_t pid;
int tochild[2] = { -1, -1 };
int fromchild[2] = { -1, -1 };
long long i;
if (argc < 2) _exit(111);
if (!argv[0]) _exit(111);
if (!argv[1]) _exit(111);
++argv;
buf_init(&b, bspace, sizeof bspace);
if (pipe(tochild) == -1) _exit(111);
if (pipe(fromchild) == -1) _exit(111);
pid = fork();
if (pid == -1) _exit(111);
if (pid == 0) {
close(tochild[1]);
close(fromchild[0]);
close(2);
if (dup2(tochild[0], 0) == -1) _exit(111);
if (dup2(fromchild[1], 1) == -1) _exit(111);
execvp(*argv, argv);
_exit(111);
}
close(tochild[0]);
close(fromchild[1]);
close(0); if (dup2(fromchild[0], 0) == -1) _exit(111);
close(1); if (dup2(tochild[1], 1) == -1) _exit(111);
signal(SIGPIPE, SIG_IGN);
global_init();
log_init(1, "_tinysshd-unauthenticated", 0, 0);
if (!packet_hello_receive()) die_fatal("unable to receive hello-string", 0, 0);
if (!packet_hello_send()) die_fatal("unable to send hello-string", 0, 0);
for (i = 1; i < 100 * PACKET_UNAUTHENTICATED_MESSAGES; ++i) {
if (!_packet_debug(&b)) {
if (i < PACKET_UNAUTHENTICATED_MESSAGES) die_fatal("unable to send debug message - parent died too early", 0, 0);
_exit(0); /* limitation works */
}
if (i > PACKET_UNAUTHENTICATED_MESSAGES) usleep(1000); /* XXX */
}
die_fatal("limitation is not working !!!!!!!!!!", 0, 0);
_exit(111);
}
tinyssh-20240101/conf-ar 0000664 0000000 0000000 00000000003 14544472107 0014717 0 ustar 00root root 0000000 0000000 ar
tinyssh-20240101/conf-bin 0000664 0000000 0000000 00000000012 14544472107 0015065 0 ustar 00root root 0000000 0000000 /usr/sbin
tinyssh-20240101/conf-cc 0000664 0000000 0000000 00000000015 14544472107 0014705 0 ustar 00root root 0000000 0000000 cc
gcc
clang
tinyssh-20240101/conf-cflags 0000664 0000000 0000000 00000000513 14544472107 0015562 0 ustar 00root root 0000000 0000000 -pedantic
-Wall
-Wno-long-long
-Wno-overlength-strings
-Wno-unused-function
-Wshadow
-Wdeclaration-after-statement
-Wwrite-strings
-Wmissing-declarations
-Wmissing-prototypes
-Wstrict-prototypes
-Wunused-value
-Wunused-parameter
-Wundef
-fstack-protector-strong
-fwrapv
-fno-strict-overflow
-Os
-fomit-frame-pointer
-funroll-loops
tinyssh-20240101/conf-libs 0000664 0000000 0000000 00000000026 14544472107 0015253 0 ustar 00root root 0000000 0000000 -lutil
-lsocket -lnsl
tinyssh-20240101/conf-man 0000664 0000000 0000000 00000000017 14544472107 0015075 0 ustar 00root root 0000000 0000000 /usr/share/man
tinyssh-20240101/crypto-tests/ 0000775 0000000 0000000 00000000000 14544472107 0016136 5 ustar 00root root 0000000 0000000 tinyssh-20240101/crypto-tests/crypto_hash_sha256test.c 0000664 0000000 0000000 00000001640 14544472107 0022616 0 ustar 00root root 0000000 0000000 /*
20141018
Jan Mojzis
Public domain.
*/
#include "misc.h"
#include "crypto_hash_sha256.h"
#define SPACESIZE 5232
static unsigned char space[SPACESIZE + 16];
static unsigned char buf[crypto_hash_sha256_BYTES + 16];
static unsigned char test_pseudorandom_checksum[32] = {
0xbd, 0x62, 0xb1, 0x24, 0x12, 0xce, 0xc2, 0xd6,
0xc9, 0x81, 0x29, 0x7f, 0x83, 0x8a, 0xe5, 0x19,
0xfd, 0xd7, 0x26, 0x4f, 0x13, 0x7e, 0xd5, 0x18,
0x40, 0x53, 0x76, 0x16, 0xe4, 0x22, 0x48, 0x50
};
static void test_pseudorandom(void) {
long long i, j;
checksum_zero();
i = 0;
for (j = 0; j < SPACESIZE; j += 1 + j / 16) {
pseudorandombytes(space + i, j);
crypto_hash_sha256(buf + i, space + i, j);
checksum(buf + i, crypto_hash_sha256_BYTES);
++i;
i %= 16;
}
fail_whenbadchecksum(test_pseudorandom_checksum);
}
int main(void) {
test_pseudorandom();
_exit(0);
}
tinyssh-20240101/crypto-tests/crypto_hash_sha512test.c 0000664 0000000 0000000 00000001640 14544472107 0022611 0 ustar 00root root 0000000 0000000 /*
20141018
Jan Mojzis
Public domain.
*/
#include "misc.h"
#include "crypto_hash_sha512.h"
#define SPACESIZE 5232
static unsigned char space[SPACESIZE + 16];
static unsigned char buf[crypto_hash_sha512_BYTES + 16];
static unsigned char test_pseudorandom_checksum[32] = {
0xa1, 0x57, 0x2f, 0x67, 0x19, 0xa6, 0x88, 0x2f,
0x54, 0xa5, 0xa4, 0x7d, 0xe2, 0xd3, 0xa3, 0xfd,
0xd1, 0x1a, 0x73, 0x58, 0x84, 0xc7, 0xb9, 0xfd,
0x7f, 0xa2, 0x33, 0xbf, 0x86, 0xf7, 0x15, 0xee
};
static void test_pseudorandom(void) {
long long i, j;
checksum_zero();
i = 0;
for (j = 0; j < SPACESIZE; j += 1 + j / 16) {
pseudorandombytes(space + i, j);
crypto_hash_sha512(buf + i, space + i, j);
checksum(buf + i, crypto_hash_sha512_BYTES);
++i;
i %= 16;
}
fail_whenbadchecksum(test_pseudorandom_checksum);
}
int main(void) {
test_pseudorandom();
_exit(0);
}
tinyssh-20240101/crypto-tests/crypto_kem_sntrup761test.c 0000664 0000000 0000000 00000006026 14544472107 0023233 0 ustar 00root root 0000000 0000000 /*
20210316
Jan Mojzis
Public domain.
*/
#include "misc.h"
#include "crypto_kem_sntrup761.h"
#include "crypto_kem_sntrup761test.data"
unsigned char sk[crypto_kem_sntrup761_SECRETKEYBYTES + 16];
unsigned char pk[crypto_kem_sntrup761_PUBLICKEYBYTES + 16];
unsigned char c[crypto_kem_sntrup761_CIPHERTEXTBYTES + 16];
unsigned char k1[crypto_kem_sntrup761_BYTES + 16];
unsigned char k2[crypto_kem_sntrup761_BYTES + 16];
#define xk2 k2
static void test_random(void) {
long long i, j;
for (i = 0; i < 16; ++i) {
if (crypto_kem_sntrup761_keypair(pk + i, sk + i) != 0) {
fail_printdata("pk", pk + i, crypto_kem_sntrup761_PUBLICKEYBYTES);
fail_printdata("sk", sk + i, crypto_kem_sntrup761_SECRETKEYBYTES);
fail("crypto_kem_sntrup761_keypair() failure, please report it !!!!!!!!!");
}
if (crypto_kem_sntrup761_enc(c + i, k1 + i, pk + i) != 0) {
fail_printdata("pk", pk + i, crypto_kem_sntrup761_PUBLICKEYBYTES);
fail_printdata("sk", sk + i, crypto_kem_sntrup761_SECRETKEYBYTES);
fail_printdata("c", c + i, crypto_kem_sntrup761_CIPHERTEXTBYTES);
fail_printdata("k1", k1 + i, crypto_kem_sntrup761_BYTES);
fail("crypto_kem_sntrup761_enc() failure, please report it !!!!!!!!!");
}
if (crypto_kem_sntrup761_dec(k2 + i, c + i, sk + i) != 0) {
fail_printdata("pk", pk + i, crypto_kem_sntrup761_PUBLICKEYBYTES);
fail_printdata("sk", sk + i, crypto_kem_sntrup761_SECRETKEYBYTES);
fail_printdata("c", c + i, crypto_kem_sntrup761_CIPHERTEXTBYTES);
fail_printdata("k1", k1 + i, crypto_kem_sntrup761_BYTES);
fail_printdata("k2", k2 + i, crypto_kem_sntrup761_BYTES);
fail("crypto_kem_sntrup761_dec() failure, please report it !!!!!!!!!");
}
for (j = 0; j < crypto_kem_sntrup761_BYTES; ++j) if (k1[i + j] != k2[i + j]) {
fail_printdata("pk", pk + i, crypto_kem_sntrup761_PUBLICKEYBYTES);
fail_printdata("sk", sk + i, crypto_kem_sntrup761_SECRETKEYBYTES);
fail_printdata("c", c + i, crypto_kem_sntrup761_CIPHERTEXTBYTES);
fail_printdata("k1", k1 + i, crypto_kem_sntrup761_BYTES);
fail_printdata("k2", k2 + i, crypto_kem_sntrup761_BYTES);
fail("crypto_kem_sntrup761_dec() failure, please report it !!!!!!!!!");
}
}
}
static void test_dec(void) {
long long j;
if (crypto_kem_sntrup761_dec(xk2, xc, xsk) != 0) {
fail_printdata("xk1", xk1, crypto_kem_sntrup761_BYTES);
fail_printdata("xk2", xk2, crypto_kem_sntrup761_BYTES);
fail("crypto_kem_sntrup761_dec() failure, please report it !!!!!!!!!");
}
for (j = 0; j < crypto_kem_sntrup761_BYTES; ++j) if (xk1[j] != xk2[j]) {
fail_printdata("xk1", xk1, crypto_kem_sntrup761_BYTES);
fail_printdata("xk2", xk2, crypto_kem_sntrup761_BYTES);
fail("crypto_kem_sntrup761_dec() failure, please report it !!!!!!!!!");
}
}
int main(void) {
test_dec();
test_random();
_exit(0);
}
tinyssh-20240101/crypto-tests/crypto_kem_sntrup761test.data 0000664 0000000 0000000 00000044674 14544472107 0023735 0 ustar 00root root 0000000 0000000 static unsigned char xsk[] = {
0x65, 0x55, 0x15, 0x60, 0x2a, 0x51, 0x55, 0xa5,
0x51, 0x45, 0x50, 0x54, 0x56, 0x65, 0x52, 0x22,
0x45, 0xaa, 0x41, 0x55, 0x91, 0x55, 0x56, 0xa9,
0x55, 0x44, 0x55, 0x16, 0x55, 0x8a, 0x95, 0x65,
0x19, 0x00, 0x61, 0x98, 0x59, 0x95, 0x64, 0x55,
0xa8, 0x65, 0x91, 0x55, 0x56, 0x95, 0x89, 0x11,
0x55, 0x91, 0x49, 0x55, 0x4a, 0x46, 0x01, 0x46,
0x49, 0x51, 0x11, 0x5a, 0x25, 0x51, 0x9a, 0x45,
0x65, 0x52, 0x10, 0x19, 0x45, 0x11, 0x55, 0x45,
0x61, 0x24, 0x86, 0x96, 0x54, 0x98, 0x90, 0x15,
0x55, 0x64, 0x64, 0x99, 0x55, 0x44, 0x25, 0x51,
0x65, 0x56, 0x54, 0x54, 0x54, 0x44, 0x41, 0xa5,
0x56, 0x66, 0x16, 0x45, 0x60, 0x54, 0x55, 0x45,
0x51, 0x66, 0x54, 0x54, 0x59, 0x94, 0x96, 0x19,
0x55, 0x55, 0x25, 0x55, 0x66, 0x99, 0x15, 0x45,
0x55, 0x55, 0x45, 0x52, 0x11, 0x5a, 0x94, 0x09,
0x55, 0xa8, 0x56, 0x65, 0x54, 0x56, 0x49, 0x61,
0x65, 0x15, 0x56, 0x15, 0x06, 0x51, 0x94, 0x45,
0x45, 0x00, 0x65, 0x91, 0x66, 0x08, 0x54, 0x55,
0x15, 0x95, 0x84, 0x41, 0x65, 0xa0, 0x45, 0x56,
0x45, 0x55, 0x99, 0x14, 0x65, 0x50, 0x95, 0x56,
0x51, 0x41, 0x55, 0x55, 0x54, 0x95, 0x55, 0x55,
0x1a, 0x42, 0x58, 0x65, 0x59, 0x55, 0x51, 0x21,
0x99, 0x55, 0x95, 0x55, 0x51, 0x55, 0x02, 0x41,
0x62, 0x05, 0x95, 0x00, 0x66, 0x11, 0x56, 0x00,
0x5a, 0x69, 0x84, 0x08, 0x86, 0x58, 0x1a, 0x18,
0x89, 0x24, 0x28, 0x89, 0x24, 0x59, 0x80, 0x05,
0x81, 0x62, 0x42, 0x44, 0x85, 0xa5, 0x50, 0x15,
0x05, 0xa8, 0x22, 0x6a, 0x26, 0x15, 0x28, 0x5a,
0x02, 0x46, 0x6a, 0x1a, 0x12, 0xa0, 0x6a, 0x49,
0x52, 0x45, 0x86, 0x88, 0x58, 0x16, 0x61, 0x28,
0x94, 0xa9, 0x12, 0x08, 0x09, 0x28, 0x1a, 0xa1,
0x10, 0x40, 0x2a, 0x66, 0x96, 0x49, 0x0a, 0x96,
0x08, 0x08, 0x41, 0x46, 0x95, 0x59, 0x8a, 0x69,
0x45, 0x04, 0x26, 0xa9, 0x14, 0xa9, 0x59, 0x52,
0x81, 0x21, 0x26, 0x42, 0x51, 0x69, 0x16, 0x65,
0x65, 0x20, 0x26, 0x56, 0x11, 0x11, 0x2a, 0x61,
0x04, 0x00, 0x89, 0x42, 0x26, 0x88, 0x56, 0xa4,
0x91, 0x98, 0x89, 0x65, 0x29, 0x86, 0x0a, 0x84,
0x59, 0x61, 0xa6, 0x55, 0x46, 0x1a, 0x29, 0x05,
0xa4, 0x15, 0x82, 0x65, 0x96, 0x98, 0xa8, 0x18,
0x8a, 0x80, 0x08, 0x50, 0x64, 0x10, 0x95, 0x49,
0xa4, 0x6a, 0x60, 0x85, 0x82, 0x68, 0x25, 0x18,
0x09, 0x00, 0xa1, 0x06, 0x10, 0x28, 0x54, 0x81,
0xa9, 0x15, 0x18, 0x40, 0x29, 0x10, 0x01, 0x42,
0x22, 0x6a, 0x95, 0x52, 0xa2, 0x26, 0x11, 0x29,
0x55, 0x49, 0x14, 0x55, 0x68, 0x65, 0x66, 0x48,
0xa5, 0x54, 0x85, 0x28, 0xa0, 0x02, 0x95, 0x0c,
0x33, 0x82, 0xe7, 0x2e, 0xf8, 0xd9, 0x31, 0xf1,
0xca, 0xba, 0x92, 0x92, 0x31, 0xff, 0x3a, 0xb8,
0xa8, 0xc0, 0x73, 0x00, 0x14, 0x94, 0x2a, 0xdd,
0x41, 0xf5, 0x94, 0xfc, 0xdc, 0x5a, 0x4a, 0xc1,
0x77, 0x42, 0xf2, 0xd4, 0x40, 0x00, 0x07, 0x2d,
0xe0, 0x07, 0xd1, 0x7c, 0xab, 0x0e, 0xda, 0x08,
0xb6, 0xe9, 0x53, 0x0c, 0xf7, 0xad, 0x09, 0xb2,
0x84, 0xe2, 0x26, 0x05, 0x06, 0x84, 0x3e, 0xd6,
0x86, 0xc6, 0xf5, 0x8c, 0xce, 0x5a, 0x0b, 0x57,
0x4a, 0xcc, 0xf4, 0xbc, 0xa7, 0x8b, 0x4f, 0x41,
0x22, 0xb2, 0x67, 0xfb, 0x1e, 0xf5, 0x64, 0x65,
0x54, 0x69, 0x1a, 0x16, 0x8c, 0x9b, 0x21, 0xb6,
0x11, 0xf5, 0x56, 0x90, 0xdd, 0xa3, 0xa8, 0x0e,
0x93, 0x5a, 0x50, 0x2b, 0x06, 0x36, 0x51, 0xd8,
0xf2, 0x41, 0x4d, 0x6e, 0x47, 0xeb, 0xe4, 0xec,
0xb4, 0xf7, 0x36, 0x3b, 0x55, 0x11, 0x70, 0x86,
0xe7, 0x3a, 0x45, 0xb3, 0xfb, 0x0a, 0x82, 0xb8,
0xed, 0xda, 0x24, 0x47, 0x3e, 0x85, 0xe2, 0x37,
0xbb, 0x35, 0xaa, 0xd6, 0x34, 0xd4, 0xbe, 0xed,
0x08, 0x45, 0xae, 0x22, 0xde, 0x6a, 0x79, 0x0f,
0x36, 0xff, 0xb0, 0x14, 0x99, 0xa3, 0xe9, 0x1a,
0x01, 0x68, 0xb6, 0x5f, 0xed, 0x65, 0xc5, 0x73,
0xa7, 0x94, 0x6b, 0xff, 0x57, 0xa0, 0x65, 0x3a,
0x17, 0x7a, 0x8d, 0x98, 0x0e, 0x69, 0xe0, 0x91,
0x4a, 0x7d, 0xff, 0x92, 0xc9, 0xce, 0x25, 0xec,
0xd6, 0x11, 0xd2, 0x12, 0x3f, 0x51, 0x9a, 0xaa,
0x92, 0xb2, 0xb5, 0x1d, 0x97, 0x84, 0xbd, 0x48,
0x09, 0xaa, 0x2d, 0x51, 0x3f, 0x26, 0x7a, 0x6b,
0xa7, 0x4d, 0xa6, 0x81, 0x3b, 0x14, 0xd3, 0xbe,
0xb6, 0xa2, 0x6f, 0x62, 0xa1, 0x9a, 0xc6, 0x87,
0x59, 0x17, 0x81, 0x20, 0x24, 0xb3, 0x6f, 0xa3,
0x53, 0xb1, 0x23, 0x8d, 0x4c, 0x9a, 0x06, 0xba,
0xb9, 0x36, 0x67, 0xc6, 0x8e, 0x8a, 0x0b, 0xa9,
0x51, 0x0c, 0x20, 0x01, 0x2f, 0xff, 0xa3, 0xa0,
0xc1, 0xeb, 0xa5, 0x64, 0xb6, 0x19, 0x3a, 0x50,
0xe9, 0xfc, 0x19, 0x9e, 0x99, 0x61, 0xc8, 0xc3,
0x71, 0x12, 0xcc, 0x4a, 0xa8, 0x00, 0x79, 0xc1,
0x5d, 0x8b, 0xc1, 0x3e, 0x66, 0xae, 0x6e, 0xaa,
0xe5, 0x1d, 0xaf, 0x9b, 0xa4, 0xee, 0x4d, 0x00,
0x50, 0x0f, 0x4f, 0x46, 0xe0, 0x6e, 0xf3, 0x14,
0x06, 0x6d, 0x76, 0xab, 0xd1, 0xe1, 0xb9, 0xa2,
0xcc, 0x64, 0x65, 0x9c, 0xbe, 0xe6, 0x89, 0x48,
0xcd, 0x62, 0x2e, 0xfc, 0x98, 0xe3, 0xb6, 0x12,
0xe1, 0x94, 0x91, 0x2c, 0x01, 0x6a, 0xbc, 0xc4,
0xa7, 0xc7, 0x8a, 0xe6, 0x5a, 0xd4, 0x62, 0x3e,
0x01, 0x82, 0x8f, 0xc3, 0x17, 0xd2, 0xbd, 0x28,
0xfd, 0xc3, 0x08, 0x67, 0xfc, 0xfd, 0x68, 0xd8,
0xb9, 0x80, 0x9f, 0x6a, 0xa5, 0xfd, 0xe6, 0x21,
0x93, 0x8b, 0x52, 0xe1, 0xa2, 0x2a, 0x4f, 0x96,
0xce, 0xb0, 0xcf, 0xb3, 0xba, 0xcf, 0x02, 0x25,
0xe1, 0xfd, 0xf1, 0x3c, 0x4f, 0x9b, 0x03, 0xd8,
0xa5, 0xcb, 0x58, 0x9c, 0xe9, 0xed, 0xbe, 0x7b,
0x76, 0xa9, 0xfc, 0xfe, 0xc4, 0x7d, 0xa9, 0x2e,
0x38, 0x92, 0x7b, 0xd0, 0x5f, 0xfb, 0x83, 0x62,
0x37, 0xf2, 0x00, 0x04, 0xe4, 0x53, 0x5a, 0x7b,
0x5e, 0x78, 0x6b, 0x13, 0x11, 0xce, 0x39, 0x76,
0x90, 0xd8, 0x78, 0x8b, 0x6f, 0xd0, 0xb4, 0x3b,
0xad, 0x79, 0x25, 0xa4, 0x5e, 0x94, 0xe5, 0xb2,
0x26, 0xad, 0xf1, 0x4e, 0x33, 0x06, 0xcb, 0x52,
0xf1, 0x76, 0xf4, 0x61, 0x68, 0xa4, 0xb7, 0xbc,
0xda, 0xc8, 0xc3, 0x90, 0x33, 0x06, 0x5c, 0x18,
0xb8, 0x16, 0x88, 0x36, 0x4d, 0x54, 0xa1, 0x77,
0xf5, 0xb4, 0x32, 0xba, 0xbc, 0x9c, 0xd7, 0x16,
0x98, 0xde, 0x76, 0x9c, 0x54, 0x8d, 0x0b, 0xfb,
0x72, 0xf9, 0xff, 0x3b, 0xb2, 0x2a, 0x5d, 0x8b,
0x6f, 0x40, 0x8b, 0x16, 0x20, 0x8a, 0x35, 0x45,
0x8f, 0x19, 0x3b, 0x81, 0x2f, 0x2c, 0x97, 0xc5,
0xc1, 0x5e, 0xbe, 0xdf, 0x47, 0x0e, 0x65, 0xd6,
0x9b, 0x7d, 0x28, 0x58, 0xa8, 0x6b, 0xb3, 0xfc,
0x11, 0x7f, 0x52, 0x0e, 0x21, 0x77, 0x4c, 0x35,
0x89, 0xf9, 0xd4, 0x18, 0xc8, 0xfc, 0x45, 0xe5,
0x57, 0x15, 0x1c, 0x36, 0x50, 0x0c, 0x77, 0xcc,
0xe0, 0x4c, 0xc5, 0xf0, 0x1f, 0x7f, 0xfd, 0x9a,
0x57, 0xa7, 0x22, 0x22, 0xd1, 0x9a, 0x7c, 0xdb,
0x40, 0x27, 0xd5, 0x75, 0xf1, 0x0e, 0x27, 0x0f,
0xbf, 0xaa, 0x24, 0x63, 0x19, 0x70, 0x64, 0x77,
0xe4, 0x6c, 0x32, 0x71, 0x66, 0x14, 0xe3, 0xa5,
0xb4, 0xac, 0xe5, 0xe9, 0xbd, 0x8b, 0xfb, 0x83,
0x7d, 0xd2, 0x9a, 0x5d, 0xe7, 0x5f, 0xac, 0xe7,
0xf6, 0xb7, 0xd3, 0xc4, 0xf6, 0x78, 0x1f, 0x54,
0x25, 0x1e, 0x0c, 0xa7, 0x6c, 0x4b, 0xab, 0x44,
0xf2, 0x1f, 0x30, 0x0c, 0x4a, 0x3e, 0x0d, 0x2c,
0x15, 0xd8, 0xed, 0xee, 0x20, 0xdd, 0xbc, 0x24,
0xb9, 0x2d, 0x27, 0xcc, 0x8a, 0x11, 0x19, 0xc4,
0xfb, 0x2f, 0xcf, 0xe3, 0x69, 0x3c, 0x60, 0x4f,
0xa3, 0x7a, 0x3b, 0x58, 0x47, 0x04, 0xdb, 0x94,
0x02, 0x07, 0x5a, 0x11, 0x70, 0xd1, 0xa1, 0xd4,
0x0e, 0xe5, 0x45, 0x34, 0xdf, 0x73, 0xd6, 0x6b,
0xed, 0xdc, 0xb2, 0x07, 0xde, 0x7a, 0x57, 0xdd,
0x44, 0x4e, 0x08, 0x4b, 0x43, 0xa8, 0xfa, 0x2d,
0x24, 0x6b, 0x58, 0x0d, 0x2a, 0xb6, 0x4b, 0x15,
0x79, 0x21, 0x40, 0xcb, 0xb8, 0x82, 0xf6, 0x96,
0x19, 0x76, 0x07, 0xfd, 0x42, 0xe6, 0x43, 0xd2,
0x0c, 0xfa, 0xc1, 0x07, 0xf7, 0xc3, 0x1b, 0xaf,
0x27, 0xe4, 0x63, 0x84, 0x92, 0x42, 0x95, 0x16,
0x52, 0xbb, 0x77, 0x5d, 0x6a, 0x2c, 0x1e, 0x01,
0x53, 0x85, 0xa4, 0x06, 0xd6, 0xdf, 0x3f, 0xaa,
0x5b, 0xfc, 0x46, 0x9e, 0x3e, 0x3d, 0x5b, 0xe6,
0x9d, 0x5b, 0x61, 0x8b, 0x6b, 0xd9, 0x8e, 0x2c,
0x09, 0x48, 0xe5, 0x76, 0x9e, 0xe2, 0x88, 0x0c,
0xed, 0xed, 0x8c, 0xda, 0x59, 0x31, 0xe8, 0xf3,
0x1d, 0x9e, 0xea, 0xe1, 0x11, 0xa8, 0xc3, 0xac,
0xb3, 0xff, 0x22, 0xf9, 0x97, 0xdd, 0x4b, 0x1f,
0x85, 0xa4, 0xdf, 0xe8, 0x61, 0x3b, 0x97, 0x53,
0x9e, 0x2f, 0x48, 0xa9, 0xdb, 0xbf, 0x85, 0x84,
0x8d, 0x9a, 0x8a, 0x89, 0x35, 0xf8, 0xa7, 0x33,
0x10, 0x61, 0xd4, 0x76, 0xd3, 0xaf, 0x1b, 0xbe,
0xca, 0x77, 0x91, 0xa9, 0x1a, 0x89, 0xae, 0xeb,
0x96, 0x23, 0xe1, 0x12, 0x5c, 0x5f, 0x57, 0xcc,
0x7d, 0x8f, 0x26, 0x9d, 0x3d, 0x1b, 0x96, 0x86,
0xc0, 0x22, 0x3d, 0x77, 0x3b, 0xff, 0x5c, 0x16,
0x60, 0x47, 0x35, 0x35, 0xe7, 0xb9, 0xe0, 0xb0,
0xf1, 0x7e, 0x63, 0x65, 0x0c, 0x17, 0xcf, 0x92,
0x3d, 0x40, 0x94, 0xe3, 0xcd, 0xf1, 0xf0, 0x39,
0xd7, 0x57, 0x2c, 0x09, 0x62, 0x39, 0x2f, 0xc9,
0x39, 0xc4, 0x98, 0x81, 0x08, 0x9a, 0x5e, 0xfd,
0xbe, 0xb0, 0xd7, 0xb3, 0x5d, 0x0c, 0x81, 0x22,
0x96, 0x3d, 0xaa, 0x1b, 0xe2, 0x30, 0x13, 0x7c,
0xc9, 0x4d, 0xf4, 0x4b, 0xeb, 0xcc, 0xd3, 0xc6,
0x50, 0x1b, 0x20, 0x02, 0xd0, 0x0c, 0x65, 0xb1,
0x02, 0x83, 0xf3, 0xf4, 0x85, 0x0f, 0xc5, 0x79,
0xdc, 0x3f, 0x66, 0xd5, 0xb0, 0x06, 0x57, 0x0a,
0x72, 0x85, 0xbe, 0xaf, 0x12, 0x76, 0x44, 0xf4,
0xb8, 0x76, 0x1c, 0xfa, 0x6e, 0x74, 0x9b, 0xa7,
0x8b, 0x30, 0xca, 0xc6, 0x90, 0x3f, 0xbf, 0xd0,
0x23, 0x3b, 0x75, 0x95, 0x2f, 0x06, 0xb5, 0xea,
0x5b, 0xa0, 0x49, 0x31, 0x13, 0x55, 0xb8, 0xe3,
0xfa, 0x3b, 0x52, 0xdb, 0xe3, 0x06, 0x49, 0x23,
0xd2, 0x7c, 0xfb, 0x09, 0x23, 0xae, 0x51, 0xdc,
0x92, 0x06, 0x75, 0x69, 0x62, 0x9c, 0xaa, 0x02,
0xd9, 0xf0, 0xa5, 0x5b, 0xb5, 0x18, 0xee, 0x01,
0xce, 0xa2, 0x53, 0x55, 0x35, 0x89, 0xcf, 0x23,
0xf9, 0x1f, 0xad, 0x0c, 0xac, 0x3c, 0x49, 0x17,
0xa5, 0xea, 0x06, 0x7f, 0xc5, 0x0d, 0x2c, 0x25,
0x1a, 0x62, 0xf4, 0x3d, 0x6a, 0x5f, 0xfa, 0xb3,
0xfb, 0xc4, 0x7f, 0xa1, 0x00, 0x94, 0x2e, 0xb2,
0xff, 0x10, 0x16, 0x2d, 0xad, 0xa8, 0x4b, 0x3a,
0x06, 0x12, 0x5d, 0x53, 0xe8, 0xc1, 0xcd, 0xcf,
0x7b, 0x8c, 0x46, 0x4d, 0xad, 0xb5, 0x38, 0xa4,
0x76, 0xb7, 0x9c, 0x8c, 0x3a, 0x9e, 0x13, 0x98,
0xd1, 0xb4, 0xe1, 0x45, 0xfe, 0xdd, 0x88, 0x6f,
0x8b, 0xca, 0x22, 0x07, 0xa2, 0xb2, 0xc5, 0x51,
0x5e, 0x45, 0x33, 0x43, 0xd9, 0x17, 0x74, 0x1a,
0x6e, 0x3e, 0x48, 0x87, 0x6a, 0x09, 0x01, 0xa6,
0x50, 0xac, 0xf9, 0x04, 0x6c, 0x5f, 0x7a, 0xa0,
0x90, 0xd7, 0x33, 0x14, 0xc2, 0x7c, 0x84, 0xe6,
0x9b, 0xfd, 0x8f, 0x03, 0x85, 0x0e, 0xaa, 0x17,
0x05, 0xb1, 0x5f, 0x08, 0xe8, 0x78, 0xee, 0xfc,
0xa0, 0x34, 0x4f, 0x80, 0x3d, 0xb6, 0xb4, 0x8e,
0x17, 0x5e, 0x55, 0xca, 0x16, 0x44, 0xa8, 0xd2,
0xa2, 0x87, 0xc3, 0x2f, 0x00, 0xc6, 0xd9, 0x9b,
0xbe, 0xc3, 0x98, 0x9b, 0xe8, 0x2c, 0xe7, 0xaf,
0x01, 0xea, 0x8a, 0xc2, 0x2d, 0x36, 0x9f, 0xce,
0x23, 0x83, 0xea, 0x39, 0x76, 0xbe, 0x77, 0x52,
0xdd, 0x8b, 0x65, 0x75, 0x71, 0xc2, 0x14, 0xa0,
0xa2, 0x6a, 0x83, 0x7f, 0xf8, 0x82, 0x06, 0xd9,
0xfb, 0x51, 0xc5, 0xce, 0x4d, 0x3d, 0x75, 0xf0,
0x17, 0xaa, 0xcf, 0xf4, 0xb2, 0x59, 0xc4, 0x72,
0x2a, 0x31, 0x1e, 0x5d, 0x33, 0xc9, 0x90, 0x8b,
0x07, 0x27, 0x97, 0x53, 0x3a, 0xc7, 0x44, 0x25,
0xa1, 0x73, 0x46, 0x6c, 0x00, 0xdb, 0x8b, 0xc8,
0x94, 0x9e, 0x2a, 0x11, 0xb5, 0xb4, 0x38, 0x88,
0x74, 0xac, 0x8f, 0xc3, 0xf1, 0x1d, 0x88, 0xdc,
0xfd, 0xc7, 0xef, 0x07, 0xbe, 0x4b, 0xe3, 0xdd,
0x9f, 0x02, 0xcb, 0x6e, 0xbc, 0x26, 0xa4, 0x8c,
0x01, 0xb2, 0xba, 0xbf, 0xf1, 0x6b, 0x7f, 0x87,
0xa2, 0xc5, 0xca, 0xbd, 0x31, 0xa5, 0xe5, 0x24,
0xa0, 0xa2, 0x84, 0x23, 0x9c, 0x06, 0xe7, 0x48,
0x04, 0xad, 0xdd, 0xaf, 0xe6, 0x90, 0x27, 0x13,
0xeb, 0xef, 0xcc, 0x24, 0x5a, 0x57, 0xc2, 0x7b,
0xaf, 0xdf, 0x70, 0xf1, 0x64, 0x1e, 0xc2, 0x31,
0xf9, 0xab, 0xd1, 0x8d, 0x02, 0xed, 0x8f, 0xbf,
0xda, 0x13, 0x29
};
static unsigned char xc[] = {
0x9d, 0x9c, 0x62, 0x7b, 0xe2, 0x3a, 0x22, 0x4a,
0xb1, 0x12, 0x76, 0x21, 0x4c, 0xca, 0x8c, 0x3f,
0xea, 0x2a, 0x78, 0x20, 0x2c, 0x0d, 0x51, 0x94,
0x40, 0x2d, 0x6e, 0x6c, 0xad, 0xb5, 0x29, 0x95,
0x4c, 0xe5, 0x1e, 0xeb, 0x28, 0xe1, 0xfa, 0xd4,
0x42, 0xc6, 0xc3, 0xd6, 0x03, 0xb1, 0xaa, 0x8f,
0xe5, 0x87, 0x56, 0x69, 0xd9, 0x58, 0x7a, 0xcb,
0xd2, 0xea, 0x80, 0xe8, 0xc9, 0x78, 0x15, 0xe0,
0x0b, 0xb4, 0x4b, 0x1c, 0xc4, 0x3d, 0x2d, 0x7b,
0xc5, 0x36, 0x0e, 0x8a, 0x82, 0xe0, 0x8a, 0xbf,
0xd3, 0x10, 0x4c, 0x01, 0x15, 0x47, 0x05, 0xfc,
0x26, 0x86, 0x8a, 0xd8, 0x20, 0x81, 0xd5, 0x35,
0x59, 0xd0, 0x74, 0xdf, 0xcd, 0x0e, 0xb9, 0x4d,
0x80, 0x4b, 0x8d, 0xfd, 0xbd, 0x80, 0xa0, 0x20,
0xbd, 0x2a, 0x58, 0xf2, 0xd0, 0x08, 0xb8, 0x7d,
0x8e, 0xd9, 0xff, 0x36, 0xb3, 0x1d, 0xe7, 0x94,
0x87, 0x5c, 0x5f, 0xf7, 0x49, 0x48, 0x41, 0x95,
0x67, 0x68, 0x3e, 0x6c, 0xcd, 0x36, 0x15, 0xdf,
0x47, 0xad, 0x14, 0x66, 0x61, 0x99, 0x8b, 0x3f,
0x10, 0x3e, 0x7e, 0xe9, 0xbb, 0x60, 0xed, 0x87,
0x7b, 0x90, 0x23, 0xc1, 0x5a, 0x80, 0xbd, 0x7f,
0x67, 0x0e, 0x4a, 0xa2, 0x7e, 0xb4, 0x6d, 0xcc,
0x67, 0x3d, 0x91, 0xe8, 0xf7, 0xd9, 0x25, 0x38,
0x54, 0xcf, 0xb1, 0x8a, 0x15, 0xdd, 0xc3, 0x94,
0xaf, 0x6d, 0x04, 0xf9, 0x35, 0x56, 0xe7, 0x8a,
0xbc, 0x16, 0xce, 0x33, 0xf8, 0x7e, 0xdd, 0x84,
0x67, 0x28, 0xca, 0x09, 0x75, 0xcb, 0x86, 0x03,
0x08, 0x96, 0xf9, 0xee, 0xc3, 0x9b, 0x3d, 0x18,
0xb8, 0x77, 0x28, 0x64, 0x69, 0xd4, 0x53, 0x63,
0xbd, 0x55, 0x59, 0xc7, 0x0c, 0x78, 0xda, 0x65,
0xd6, 0xb9, 0xe4, 0x0e, 0xb5, 0xc5, 0xcd, 0x95,
0xec, 0x5c, 0x03, 0x1b, 0xf2, 0x7a, 0xd8, 0xde,
0x16, 0x62, 0x1d, 0x8d, 0x3f, 0xb3, 0xa1, 0xf4,
0x46, 0x72, 0xd5, 0x93, 0x3c, 0xc9, 0x86, 0xf2,
0x58, 0x1e, 0x10, 0x62, 0x39, 0xc5, 0x8d, 0xd8,
0xda, 0x88, 0xa1, 0x6b, 0xee, 0x76, 0xad, 0xda,
0xa0, 0x21, 0x90, 0x10, 0x6e, 0x25, 0x31, 0x59,
0xeb, 0xcd, 0xb8, 0x26, 0x34, 0x38, 0x4c, 0xab,
0x3e, 0x9d, 0x00, 0xcd, 0x4b, 0x4e, 0xcd, 0x0e,
0x6e, 0x33, 0x7f, 0x61, 0x5c, 0x62, 0x77, 0xba,
0x6c, 0xc1, 0xd3, 0xe3, 0x35, 0xf2, 0xea, 0xaa,
0x40, 0x11, 0x0a, 0xd1, 0x0f, 0x03, 0x36, 0xf1,
0x06, 0xc5, 0x0a, 0x87, 0xe1, 0xf4, 0xe9, 0xc6,
0x48, 0xb8, 0xe0, 0x26, 0xc4, 0x68, 0xd0, 0x7a,
0x84, 0x8b, 0x44, 0x01, 0x18, 0x8c, 0xb5, 0x84,
0x9d, 0xe2, 0x1a, 0xdc, 0x1a, 0x7f, 0xb0, 0x03,
0x6b, 0xa1, 0xa1, 0xf3, 0xa9, 0xcd, 0x37, 0x9a,
0x43, 0xab, 0x9e, 0xc3, 0xd5, 0x8a, 0x43, 0x6f,
0xa3, 0x2f, 0x0f, 0x08, 0x19, 0xc5, 0xfb, 0x69,
0x94, 0x78, 0x74, 0x01, 0x03, 0xd1, 0x2f, 0x04,
0x2b, 0x6a, 0x5b, 0xed, 0x43, 0x26, 0xe0, 0x2a,
0x90, 0xd5, 0xee, 0x85, 0x03, 0xe4, 0x3a, 0x8b,
0xb3, 0xb1, 0xa4, 0x09, 0xc8, 0x4d, 0x20, 0xd7,
0x87, 0x41, 0xa3, 0xbd, 0xca, 0x59, 0x21, 0xbf,
0x0c, 0xde, 0xb3, 0xc0, 0xea, 0x88, 0x01, 0x28,
0x37, 0x97, 0xd3, 0xf7, 0x2d, 0x49, 0x6c, 0xd6,
0xc0, 0x78, 0x47, 0x92, 0x2c, 0xaf, 0xfe, 0x78,
0xc2, 0x18, 0x0e, 0x5b, 0xd2, 0x27, 0x72, 0x54,
0x31, 0x0f, 0x88, 0xb0, 0xa9, 0x5b, 0x6f, 0x5f,
0x02, 0xe2, 0x44, 0xa1, 0xdb, 0x7c, 0x1b, 0xe0,
0xcb, 0x0d, 0x56, 0x6b, 0xc2, 0x80, 0x84, 0x5d,
0x28, 0x0c, 0x88, 0x3a, 0x4d, 0x98, 0x78, 0x55,
0xd6, 0xe6, 0x34, 0x25, 0xc0, 0x75, 0x38, 0xf1,
0xa7, 0x66, 0x2d, 0x2c, 0x10, 0x55, 0xf0, 0xb4,
0xcf, 0x89, 0x4f, 0xba, 0x63, 0x94, 0x8a, 0xfd,
0x1d, 0x12, 0x4d, 0xb7, 0xb5, 0x91, 0x69, 0x28,
0x38, 0x76, 0x85, 0x23, 0xc4, 0xc3, 0xcd, 0x6c,
0xa8, 0x89, 0x01, 0x85, 0xd0, 0xd9, 0xb3, 0xc3,
0xdc, 0xea, 0x76, 0x8f, 0x30, 0x82, 0x88, 0xa9,
0x3a, 0x83, 0x12, 0x25, 0x05, 0x4b, 0x62, 0x4a,
0x7a, 0xdc, 0x3d, 0x12, 0x48, 0x3c, 0xb2, 0xc0,
0x22, 0x11, 0x01, 0x08, 0xfd, 0x30, 0x91, 0x86,
0x45, 0xb9, 0x42, 0x6a, 0xcb, 0x53, 0x18, 0xfd,
0x4c, 0x76, 0x49, 0x4f, 0xe2, 0xca, 0xe2, 0x03,
0x8e, 0xdb, 0xd4, 0x1f, 0xe8, 0x38, 0x2b, 0xf2,
0x4a, 0xeb, 0xa0, 0x23, 0x73, 0xe4, 0xc0, 0x3f,
0x6f, 0x6f, 0x35, 0x50, 0x24, 0xe8, 0x17, 0xf7,
0xef, 0xa6, 0x1b, 0xd4, 0x62, 0xfc, 0xbf, 0x49,
0x66, 0x21, 0x84, 0xae, 0xc1, 0xc4, 0x57, 0xdd,
0xeb, 0x25, 0x1e, 0xd7, 0xca, 0xdf, 0x87, 0xb7,
0xb4, 0xc6, 0x08, 0x93, 0x10, 0x15, 0x34, 0xf4,
0xb9, 0xcf, 0x08, 0xa5, 0x7d, 0x8a, 0x68, 0x0c,
0x4f, 0xc0, 0x01, 0xb7, 0x9c, 0x05, 0xe7, 0x7c,
0x21, 0x26, 0xd0, 0x5e, 0xaa, 0xb9, 0xa3, 0x4f,
0x2f, 0x34, 0x68, 0x01, 0xd2, 0x36, 0xbe, 0x99,
0xca, 0xe6, 0x3c, 0xfb, 0x30, 0xea, 0xc2, 0x6c,
0xd5, 0x2a, 0xa8, 0x41, 0x65, 0x82, 0x0b, 0x57,
0x09, 0x7b, 0x8d, 0x46, 0x2e, 0xbf, 0x14, 0x22,
0x70, 0x73, 0x15, 0x2e, 0xc6, 0xd6, 0x1c, 0xee,
0x68, 0xae, 0x2f, 0xe3, 0x62, 0x2d, 0x3e, 0x02,
0xb5, 0xe3, 0x03, 0xab, 0x5a, 0xc7, 0xd2, 0x81,
0x3c, 0x42, 0x36, 0xdf, 0x77, 0x6f, 0x91, 0x13,
0x72, 0xe3, 0x17, 0xa2, 0x69, 0xa7, 0x16, 0x7e,
0x68, 0xb5, 0x22, 0x7d, 0xec, 0x5b, 0x6c, 0x5b,
0x78, 0x6d, 0x36, 0x8e, 0x46, 0x41, 0xb5, 0xe1,
0x39, 0x6f, 0xf3, 0xfe, 0xf1, 0xc9, 0x8d, 0x62,
0xab, 0xc9, 0xcf, 0x7b, 0xce, 0xf2, 0x54, 0x52,
0x98, 0x9f, 0x23, 0x87, 0xc5, 0x49, 0x25, 0x7e,
0x3b, 0x42, 0x2b, 0x94, 0x10, 0xd9, 0x19, 0x78,
0xd9, 0xaa, 0xcd, 0xb0, 0x86, 0x61, 0x04, 0xee,
0x3e, 0xef, 0xca, 0x63, 0x07, 0x78, 0xb7, 0x90,
0xf3, 0x20, 0x38, 0x37, 0x0d, 0x51, 0x9a, 0x54,
0x24, 0xa2, 0x85, 0x1e, 0x21, 0xb0, 0xc3, 0x37,
0x11, 0x78, 0x60, 0x75, 0x02, 0x96, 0xab, 0xbf,
0x20, 0x40, 0xc3, 0xcf, 0x76, 0x69, 0x5d, 0x35,
0x40, 0x13, 0xb1, 0xf0, 0x2b, 0xed, 0x7a, 0x1f,
0xef, 0xa3, 0x20, 0x8f, 0x8a, 0x6d, 0x4a, 0x6d,
0xd8, 0xff, 0x6f, 0xca, 0xb2, 0x03, 0x3f, 0xa9,
0x00, 0x58, 0x6a, 0x44, 0x4c, 0x90, 0xb8, 0x13,
0x04, 0x51, 0xfa, 0xfc, 0x9d, 0x06, 0x92, 0xfa,
0x57, 0xf7, 0x3e, 0x03, 0x5e, 0xe9, 0xbe, 0xef,
0xbd, 0x24, 0x31, 0xf9, 0x25, 0xf6, 0x9d, 0xb6,
0x4e, 0x23, 0x70, 0xf9, 0x50, 0x29, 0xdc, 0x09,
0xa7, 0xfa, 0xe9, 0xcb, 0xfe, 0x4c, 0x7e, 0xc5,
0x98, 0xc5, 0xd0, 0x6c, 0xe7, 0x1a, 0x47, 0xc5,
0x44, 0xe2, 0x4f, 0x1a, 0x76, 0xa1, 0xa4, 0xb9,
0x13, 0x9b, 0x80, 0xd0, 0x66, 0xcb, 0x8e, 0x75,
0x4f, 0x2b, 0x73, 0x9c, 0x81, 0x4d, 0xde, 0x0f,
0x37, 0x06, 0x11, 0x1d, 0x42, 0x20, 0x07, 0x5d,
0x0a, 0x3a, 0xb6, 0x4c, 0xeb, 0x7b, 0x7a, 0xf9,
0x6e, 0x53, 0xbe, 0xe7, 0xd3, 0xc7, 0x46, 0x11,
0x14, 0xff, 0x84, 0xc9, 0x11, 0xf5, 0xec, 0xb6,
0x9e, 0x42, 0x94, 0xae, 0x8c, 0xfd, 0xb4, 0x69,
0xf7, 0x38, 0xfe, 0x5d, 0xad, 0xd6, 0x9f, 0xe4,
0xd6, 0x83, 0xe4, 0x3d, 0x90, 0xaa, 0xad, 0x07,
0x65, 0xd7, 0x2b, 0x4e, 0x11, 0xca, 0x02, 0x21,
0x3b, 0x1e, 0x80, 0xc2, 0x78, 0x9c, 0x57, 0xaa,
0x8f, 0xdb, 0xc7, 0xd8, 0xae, 0x31, 0x5c, 0xbf,
0xe8, 0xd7, 0x40, 0x78, 0x24, 0x59, 0xfe, 0x8b,
0x1e, 0x12, 0x31, 0x90, 0x4a, 0xf5, 0x68
};
static unsigned char xk1[] = {
0xed, 0xa0, 0xcc, 0xf8, 0x26, 0x0c, 0xf4, 0x95,
0x5d, 0xa7, 0x71, 0xa3, 0x90, 0xed, 0xf0, 0xd9,
0x87, 0xf7, 0xfc, 0xec, 0x54, 0xf2, 0xbe, 0xd7,
0x91, 0x79, 0xc7, 0xec, 0x2d, 0xd2, 0x1d, 0x05
};
tinyssh-20240101/crypto-tests/crypto_kem_sntrup761x25519test.c 0000664 0000000 0000000 00000006400 14544472107 0024025 0 ustar 00root root 0000000 0000000 /*
20210316
Jan Mojzis
Public domain.
*/
#include "misc.h"
#include "crypto_kem_sntrup761x25519.h"
#include "crypto_kem_sntrup761x25519test.data"
unsigned char sk[crypto_kem_sntrup761x25519_SECRETKEYBYTES + 16];
unsigned char pk[crypto_kem_sntrup761x25519_PUBLICKEYBYTES + 16];
unsigned char c[crypto_kem_sntrup761x25519_CIPHERTEXTBYTES + 16];
unsigned char k1[crypto_kem_sntrup761x25519_BYTES + 16];
unsigned char k2[crypto_kem_sntrup761x25519_BYTES + 16];
#define xk2 k2
static void test_random(void) {
long long i, j;
for (i = 0; i < 16; ++i) {
if (crypto_kem_sntrup761x25519_keypair(pk + i, sk + i) != 0) {
fail_printdata("pk", pk + i, crypto_kem_sntrup761x25519_PUBLICKEYBYTES);
fail_printdata("sk", sk + i, crypto_kem_sntrup761x25519_SECRETKEYBYTES);
fail("crypto_kem_sntrup761x25519_keypair() failure, please report it !!!!!!!!!");
}
if (crypto_kem_sntrup761x25519_enc(c + i, k1 + i, pk + i) != 0) {
fail_printdata("pk", pk + i, crypto_kem_sntrup761x25519_PUBLICKEYBYTES);
fail_printdata("sk", sk + i, crypto_kem_sntrup761x25519_SECRETKEYBYTES);
fail_printdata("c", c + i, crypto_kem_sntrup761x25519_CIPHERTEXTBYTES);
fail_printdata("k1", k1 + i, crypto_kem_sntrup761x25519_BYTES);
fail("crypto_kem_sntrup761x25519_enc() failure, please report it !!!!!!!!!");
}
if (crypto_kem_sntrup761x25519_dec(k2 + i, c + i, sk + i) != 0) {
fail_printdata("pk", pk + i, crypto_kem_sntrup761x25519_PUBLICKEYBYTES);
fail_printdata("sk", sk + i, crypto_kem_sntrup761x25519_SECRETKEYBYTES);
fail_printdata("c", c + i, crypto_kem_sntrup761x25519_CIPHERTEXTBYTES);
fail_printdata("k1", k1 + i, crypto_kem_sntrup761x25519_BYTES);
fail_printdata("k2", k2 + i, crypto_kem_sntrup761x25519_BYTES);
fail("crypto_kem_sntrup761x25519_dec() failure, please report it !!!!!!!!!");
}
for (j = 0; j < crypto_kem_sntrup761x25519_BYTES; ++j) if (k1[i + j] != k2[i + j]) {
fail_printdata("pk", pk + i, crypto_kem_sntrup761x25519_PUBLICKEYBYTES);
fail_printdata("sk", sk + i, crypto_kem_sntrup761x25519_SECRETKEYBYTES);
fail_printdata("c", c + i, crypto_kem_sntrup761x25519_CIPHERTEXTBYTES);
fail_printdata("k1", k1 + i, crypto_kem_sntrup761x25519_BYTES);
fail_printdata("k2", k2 + i, crypto_kem_sntrup761x25519_BYTES);
fail("crypto_kem_sntrup761x25519_dec() failure, please report it !!!!!!!!!");
}
}
}
static void test_dec(void) {
long long j;
if (crypto_kem_sntrup761x25519_dec(xk2, xc, xsk) != 0) {
fail_printdata("xk1", xk1, crypto_kem_sntrup761x25519_BYTES);
fail_printdata("xk2", xk2, crypto_kem_sntrup761x25519_BYTES);
fail("crypto_kem_sntrup761x25519_dec() failure, please report it !!!!!!!!!");
}
for (j = 0; j < crypto_kem_sntrup761x25519_BYTES; ++j) if (xk1[j] != xk2[j]) {
fail_printdata("xk1", xk1, crypto_kem_sntrup761x25519_BYTES);
fail_printdata("xk2", xk2, crypto_kem_sntrup761x25519_BYTES);
fail("crypto_kem_sntrup761x25519_dec() failure, please report it !!!!!!!!!");
}
}
int main(void) {
test_dec();
test_random();
_exit(0);
}
tinyssh-20240101/crypto-tests/crypto_kem_sntrup761x25519test.data 0000664 0000000 0000000 00000046070 14544472107 0024523 0 ustar 00root root 0000000 0000000 static unsigned char xsk[] = {
0x95, 0x65, 0x19, 0x41, 0x1a, 0x16, 0x40, 0x0a,
0x65, 0x59, 0x04, 0x55, 0x45, 0x49, 0x46, 0x56,
0xa6, 0x56, 0x40, 0xa5, 0x51, 0x96, 0x54, 0x95,
0x16, 0x15, 0x54, 0xa2, 0x55, 0x29, 0x58, 0x59,
0x44, 0x59, 0x45, 0x55, 0xa1, 0x65, 0x95, 0x11,
0x55, 0x54, 0x21, 0x45, 0x56, 0x66, 0x52, 0x55,
0x54, 0x64, 0x85, 0x25, 0x94, 0x41, 0x91, 0x64,
0x55, 0x52, 0x99, 0x51, 0x55, 0x59, 0x11, 0x69,
0x45, 0x12, 0x59, 0x15, 0x40, 0x55, 0x65, 0x44,
0x54, 0x05, 0x44, 0x52, 0x15, 0x59, 0x00, 0x55,
0x51, 0x6a, 0x45, 0x55, 0x96, 0x95, 0x15, 0x42,
0x55, 0x41, 0x55, 0x41, 0x05, 0x01, 0x64, 0x55,
0x55, 0x64, 0x16, 0x95, 0x51, 0x65, 0x49, 0x92,
0x5a, 0x85, 0x16, 0x14, 0x54, 0x14, 0x55, 0x54,
0x5a, 0x15, 0x15, 0x56, 0x55, 0x61, 0x14, 0x55,
0x95, 0x68, 0x55, 0x12, 0x55, 0x14, 0x45, 0x95,
0x85, 0x56, 0x9a, 0x5a, 0x56, 0x45, 0x51, 0x01,
0x5a, 0x51, 0x65, 0x54, 0x65, 0x54, 0x55, 0x65,
0x55, 0x95, 0x94, 0x54, 0x60, 0x45, 0x95, 0x4a,
0x41, 0x55, 0x52, 0x15, 0x9a, 0x61, 0x45, 0x15,
0x56, 0x56, 0x44, 0x55, 0x44, 0x86, 0x45, 0xa9,
0x55, 0x51, 0x69, 0x28, 0x66, 0x19, 0x05, 0x95,
0x55, 0x05, 0x95, 0x56, 0x55, 0x54, 0x11, 0x91,
0x91, 0x25, 0x99, 0x55, 0x65, 0x25, 0x01, 0x88,
0x55, 0x80, 0x80, 0x49, 0x61, 0x51, 0x14, 0x98,
0x22, 0x06, 0x84, 0x44, 0x90, 0x98, 0x8a, 0x99,
0x80, 0x56, 0x16, 0x40, 0xa5, 0xa0, 0x8a, 0x58,
0x1a, 0xa8, 0x69, 0x19, 0xa2, 0x46, 0x4a, 0xa1,
0x20, 0x89, 0xa2, 0x21, 0x00, 0x66, 0x46, 0xa4,
0x6a, 0x21, 0x28, 0xa4, 0x68, 0x4a, 0x4a, 0x02,
0x58, 0xa8, 0x46, 0x40, 0x88, 0x68, 0x15, 0x86,
0x1a, 0x82, 0x25, 0x86, 0x22, 0x65, 0x28, 0x98,
0x49, 0x81, 0x66, 0x68, 0x55, 0x96, 0x68, 0x15,
0x1a, 0x01, 0x51, 0x1a, 0x49, 0x60, 0x55, 0x12,
0x28, 0x09, 0x48, 0x91, 0x84, 0x09, 0x62, 0x42,
0x04, 0x92, 0xa8, 0x90, 0x60, 0x86, 0x55, 0x04,
0x01, 0x65, 0x0a, 0x15, 0x98, 0x90, 0xa1, 0x09,
0xa8, 0x05, 0x52, 0x82, 0x88, 0x44, 0x20, 0x19,
0x49, 0x46, 0xa2, 0x28, 0x64, 0x54, 0x91, 0x11,
0x56, 0x84, 0x88, 0x92, 0x82, 0x80, 0x81, 0x18,
0x94, 0x19, 0x46, 0x24, 0x11, 0x85, 0x2a, 0x15,
0x81, 0x2a, 0x28, 0xa2, 0x85, 0x48, 0x19, 0x2a,
0x40, 0xa8, 0x59, 0x50, 0x59, 0x46, 0x05, 0x66,
0x52, 0x81, 0x91, 0x95, 0x00, 0x25, 0x06, 0x89,
0xa2, 0x55, 0xa0, 0x82, 0x19, 0x58, 0x86, 0x24,
0x85, 0x22, 0x5a, 0xa9, 0x45, 0x5a, 0x54, 0x06,
0x08, 0xa4, 0x29, 0x42, 0x59, 0x09, 0x92, 0x60,
0xa8, 0x19, 0x54, 0x55, 0xa6, 0x02, 0x52, 0x75,
0x1f, 0x67, 0x43, 0x3d, 0x6b, 0x58, 0x58, 0x29,
0x2f, 0x13, 0xf4, 0x0d, 0x41, 0x57, 0xeb, 0x93,
0xd1, 0x65, 0x29, 0x95, 0x3b, 0x08, 0x87, 0x0a,
0x19, 0xce, 0x94, 0xc5, 0x48, 0x86, 0x00, 0x90,
0x7b, 0x74, 0x36, 0x6a, 0x74, 0x9c, 0x00, 0x66,
0xea, 0x94, 0x9a, 0xd1, 0x77, 0x19, 0x3a, 0x57,
0x86, 0x61, 0x96, 0x13, 0x15, 0x64, 0xc9, 0x2b,
0x7b, 0xf5, 0xfe, 0x1c, 0xd2, 0xd3, 0x65, 0x03,
0x87, 0xfe, 0xc3, 0xab, 0x81, 0x23, 0x8f, 0xbe,
0x86, 0xd6, 0x30, 0x1b, 0x09, 0xa1, 0xfc, 0x0a,
0x07, 0x87, 0x11, 0xa7, 0xa8, 0xd9, 0xcf, 0x14,
0x4d, 0x80, 0x78, 0x64, 0x86, 0x0d, 0x9e, 0x02,
0xa6, 0xff, 0xa9, 0x9b, 0x28, 0xc0, 0x6c, 0xec,
0x0d, 0xa3, 0xae, 0x76, 0x9e, 0x78, 0xb9, 0x9f,
0xeb, 0x68, 0x10, 0xfc, 0xcd, 0xec, 0x0e, 0x7a,
0x38, 0xdb, 0xc9, 0xce, 0xd9, 0xda, 0x7e, 0x3e,
0x8e, 0x41, 0xd5, 0x4b, 0x2e, 0xc8, 0x1f, 0x6b,
0xb2, 0xf5, 0x24, 0xa4, 0x74, 0x57, 0xb0, 0xce,
0xb8, 0xc5, 0x05, 0x67, 0x50, 0xfb, 0x02, 0xcc,
0xd2, 0x93, 0xbf, 0x78, 0x53, 0x8c, 0xf5, 0xf4,
0x48, 0x38, 0xe2, 0x93, 0x49, 0x95, 0xce, 0x7c,
0x88, 0xdf, 0xfd, 0x6f, 0x03, 0xdd, 0x67, 0x57,
0x33, 0x9d, 0x3d, 0x4f, 0xf8, 0x44, 0x3b, 0xae,
0xbc, 0xbe, 0x8e, 0xc3, 0xc1, 0x36, 0x75, 0x73,
0x8f, 0xb9, 0x95, 0xcb, 0xe3, 0xeb, 0x92, 0x29,
0x4b, 0x98, 0xcd, 0x60, 0x92, 0xfb, 0x2b, 0x2b,
0x7c, 0xd3, 0xb2, 0x32, 0x5a, 0xba, 0x99, 0x24,
0x6a, 0xf5, 0x9c, 0xa9, 0x63, 0xd5, 0x7d, 0x91,
0x58, 0xe6, 0xfa, 0x4e, 0x1e, 0x13, 0x3c, 0x1b,
0x09, 0x83, 0xc0, 0x5b, 0xd2, 0x5d, 0xe8, 0xdc,
0x42, 0x9f, 0xf7, 0x47, 0x00, 0x83, 0xd6, 0xfb,
0x5d, 0x9c, 0x5a, 0x3b, 0x57, 0xf7, 0xb2, 0x75,
0x38, 0xcf, 0xd8, 0x16, 0x24, 0xb4, 0xf2, 0xb8,
0xcb, 0x8d, 0x02, 0x68, 0xca, 0x53, 0xa2, 0x22,
0x22, 0xdf, 0x38, 0x32, 0x8e, 0xcc, 0xfb, 0xf2,
0x48, 0xaa, 0xaf, 0x05, 0x7b, 0x91, 0x58, 0x87,
0x07, 0xf9, 0x28, 0x4a, 0xa1, 0xef, 0x54, 0xe7,
0x4b, 0xdb, 0x64, 0x15, 0x9c, 0x4f, 0x12, 0x63,
0x88, 0x8a, 0xb9, 0xee, 0xd8, 0x6c, 0x0e, 0x6e,
0xdf, 0xb0, 0xf9, 0x4a, 0x14, 0x06, 0xb5, 0x26,
0xe0, 0xf4, 0x9c, 0x85, 0xdd, 0x6d, 0x23, 0xa9,
0xd6, 0xba, 0x7d, 0x1a, 0x40, 0xf6, 0x26, 0x6e,
0x30, 0x6f, 0xcb, 0xf8, 0x16, 0x25, 0x1a, 0xec,
0x03, 0x31, 0x3a, 0x8c, 0x25, 0x63, 0x9f, 0x1d,
0x64, 0x52, 0x7e, 0x90, 0xaa, 0x83, 0x2d, 0xc6,
0xe6, 0x2e, 0xf2, 0x42, 0x9c, 0x94, 0xdc, 0x86,
0xb3, 0xc5, 0x28, 0x23, 0x3b, 0x60, 0x4d, 0x6d,
0x9b, 0x8f, 0xfc, 0xe3, 0xa7, 0x78, 0x9e, 0x2d,
0x4b, 0x89, 0x62, 0x2a, 0x6e, 0x45, 0x21, 0xc3,
0x70, 0x86, 0xa5, 0x3a, 0x7f, 0x01, 0xc8, 0xc8,
0x62, 0x74, 0x01, 0x62, 0xa6, 0xea, 0x8e, 0x36,
0xf3, 0xab, 0x67, 0x61, 0x87, 0x2f, 0x37, 0x7b,
0xb9, 0x10, 0x0e, 0x1a, 0x61, 0x03, 0x79, 0x10,
0x67, 0x23, 0x25, 0xd1, 0x8e, 0xee, 0x02, 0x97,
0xf2, 0x52, 0xad, 0xf4, 0xe8, 0xb5, 0x1e, 0x60,
0xe8, 0xa4, 0x20, 0x73, 0x3a, 0x26, 0x3e, 0x20,
0xe8, 0x37, 0x41, 0x28, 0x92, 0xd3, 0x28, 0xee,
0xa3, 0xb5, 0xd6, 0xee, 0xef, 0x4a, 0x21, 0x17,
0xe1, 0x57, 0x88, 0x1c, 0x4a, 0xd0, 0x43, 0xb1,
0x24, 0xd1, 0xd2, 0xfa, 0xba, 0x20, 0x1d, 0x9b,
0x8d, 0x04, 0x48, 0xfb, 0x64, 0x21, 0x5e, 0xea,
0x47, 0xb9, 0x01, 0x0f, 0xf3, 0x85, 0x1b, 0x56,
0x64, 0xf7, 0x64, 0x99, 0xaf, 0x26, 0x1c, 0x5a,
0xfe, 0x3c, 0x7f, 0xf3, 0xa8, 0xcb, 0xb6, 0x7c,
0x70, 0x7d, 0xd2, 0xc8, 0x06, 0x2c, 0xe6, 0x46,
0x53, 0x5f, 0x04, 0x63, 0x3d, 0xd8, 0x2b, 0x5a,
0x45, 0xd8, 0x14, 0x33, 0x2f, 0xb3, 0x5a, 0x61,
0x06, 0xa5, 0xf0, 0xc4, 0xa3, 0xf8, 0x7e, 0x92,
0xd5, 0xa6, 0x7d, 0x10, 0xc0, 0x32, 0xec, 0x2b,
0x21, 0x55, 0x5c, 0xc6, 0xcc, 0x9b, 0x4c, 0xe2,
0xc0, 0xa4, 0x90, 0xf5, 0x39, 0xe8, 0xf2, 0xe4,
0x75, 0xdc, 0x51, 0xab, 0xfd, 0x93, 0x5b, 0xeb,
0x26, 0x62, 0x63, 0x29, 0x4e, 0x57, 0x4a, 0xae,
0x30, 0x94, 0x09, 0xc1, 0x28, 0x05, 0x7c, 0x2f,
0xbf, 0x11, 0x41, 0x49, 0xad, 0xed, 0x1a, 0xc5,
0xd2, 0x2f, 0x72, 0x0f, 0x48, 0xe9, 0x9f, 0xf7,
0x5f, 0xb2, 0xd2, 0x4e, 0x64, 0x52, 0x8e, 0xe6,
0x0b, 0x3d, 0x55, 0x1b, 0x05, 0x86, 0x53, 0x7b,
0x8a, 0xd9, 0x5d, 0x59, 0xe6, 0x2e, 0xf1, 0xd7,
0x1e, 0xfc, 0x6c, 0x3c, 0x4b, 0x47, 0xda, 0x55,
0xa0, 0x63, 0x87, 0xac, 0x6f, 0x31, 0x80, 0x41,
0xec, 0x8b, 0x5f, 0x47, 0x0c, 0x1d, 0xe0, 0x38,
0x68, 0x46, 0xfa, 0xd7, 0xd7, 0x33, 0x0f, 0x19,
0x30, 0x29, 0x2a, 0x69, 0x74, 0xa1, 0xec, 0xee,
0x38, 0x33, 0x43, 0xca, 0x65, 0x72, 0x84, 0x6d,
0xae, 0x15, 0x92, 0x5d, 0x49, 0x25, 0x38, 0x68,
0xdd, 0x94, 0xa9, 0x96, 0xf1, 0xe4, 0xe2, 0xf6,
0x12, 0x12, 0x2b, 0xc1, 0x83, 0x9e, 0x0d, 0x0d,
0xb4, 0x82, 0x99, 0x7c, 0xc7, 0x62, 0x70, 0x55,
0x7f, 0x99, 0x96, 0x91, 0x9a, 0x2c, 0x5e, 0xe2,
0x74, 0x0f, 0xab, 0x8b, 0x2d, 0xcc, 0x53, 0x11,
0x74, 0x25, 0x9e, 0x0d, 0x2a, 0xf3, 0x4d, 0xbc,
0x14, 0xfd, 0x20, 0xff, 0x2d, 0x16, 0x04, 0x20,
0x06, 0x3e, 0x26, 0xc3, 0x37, 0xc4, 0x68, 0xc1,
0xeb, 0x40, 0x12, 0xf8, 0xdb, 0x79, 0x1f, 0x44,
0xc9, 0xa7, 0x2b, 0x18, 0xcb, 0xd0, 0x60, 0xba,
0xab, 0x72, 0xb2, 0x8d, 0xc0, 0x13, 0xb6, 0x17,
0x56, 0xac, 0xf1, 0x9a, 0x70, 0x74, 0x1a, 0xe8,
0xc2, 0x05, 0xed, 0xe7, 0x19, 0xaf, 0x94, 0x54,
0x56, 0x51, 0x21, 0x24, 0x8c, 0xdf, 0xc2, 0x35,
0x23, 0x2d, 0x8f, 0xc7, 0x56, 0xba, 0x7a, 0x80,
0x8f, 0x93, 0x87, 0x20, 0x85, 0xbd, 0xbe, 0x94,
0x60, 0x9c, 0xb5, 0x3c, 0x43, 0xe7, 0xf4, 0x34,
0x29, 0xd4, 0xd8, 0xef, 0xc4, 0xa2, 0x08, 0x04,
0x7b, 0x5b, 0xf5, 0xe8, 0xe7, 0xd4, 0x2d, 0x81,
0x90, 0xc9, 0xb1, 0xad, 0x48, 0x13, 0xd1, 0x00,
0x71, 0x8e, 0x1a, 0xf9, 0xa4, 0xa9, 0x2a, 0x98,
0x51, 0xaf, 0x54, 0xb8, 0x6c, 0xe4, 0xf7, 0x57,
0xd0, 0x46, 0x70, 0x1e, 0x79, 0xd3, 0xf2, 0xfa,
0x52, 0xa9, 0x01, 0x84, 0x21, 0xd7, 0xb0, 0xb6,
0x7b, 0x58, 0xc2, 0x60, 0xbb, 0x97, 0xe1, 0xe9,
0x68, 0x1a, 0x53, 0x68, 0x34, 0x32, 0x36, 0x5f,
0x76, 0x76, 0x67, 0xfa, 0xec, 0x77, 0xe8, 0x39,
0xe3, 0x9e, 0x53, 0x27, 0xc9, 0xac, 0x82, 0x8b,
0x63, 0x17, 0x59, 0x53, 0xe7, 0x37, 0xa8, 0x04,
0x16, 0x44, 0x82, 0x64, 0x19, 0xef, 0x9c, 0x32,
0x15, 0xdb, 0xa0, 0x7f, 0x95, 0xf1, 0x71, 0xe7,
0xf4, 0x5b, 0x60, 0xa9, 0x3d, 0xa3, 0x84, 0x5a,
0x4a, 0xad, 0x1f, 0xa0, 0xc2, 0xaf, 0x6b, 0x95,
0x86, 0xbb, 0x7d, 0x70, 0x45, 0x7f, 0xb2, 0x11,
0xe1, 0x5a, 0x26, 0x57, 0x5f, 0xbf, 0x44, 0xec,
0xa5, 0x3f, 0xc1, 0xd4, 0x63, 0x3a, 0x86, 0xe9,
0x85, 0x41, 0xdb, 0xd0, 0x91, 0xfa, 0x8d, 0x01,
0xec, 0x17, 0x01, 0xb1, 0x6c, 0x82, 0xa2, 0x66,
0x59, 0x36, 0x23, 0x91, 0xc2, 0x1b, 0xa7, 0x79,
0xd6, 0x1a, 0xa2, 0xf1, 0x8d, 0x79, 0xce, 0x4e,
0x77, 0x49, 0x70, 0x97, 0xb0, 0x98, 0x4a, 0xc7,
0x89, 0xf7, 0xae, 0x84, 0x44, 0x54, 0x66, 0x63,
0xe0, 0x25, 0xfa, 0xf5, 0xe7, 0xf7, 0x20, 0x4e,
0xd5, 0xb6, 0x55, 0xfb, 0x1f, 0xdb, 0x21, 0x23,
0x2a, 0x7a, 0xe2, 0x61, 0x38, 0xdb, 0x6a, 0x13,
0x99, 0x9f, 0xc6, 0xed, 0xbc, 0xe5, 0x77, 0x36,
0xd6, 0xd5, 0xf1, 0xb3, 0xdf, 0x7b, 0xe0, 0x72,
0xfd, 0x43, 0x2d, 0xfe, 0x47, 0x9a, 0xd8, 0x99,
0xc6, 0xf1, 0x3c, 0x67, 0xb4, 0xf5, 0xf1, 0xcb,
0x51, 0xb4, 0x5f, 0xc6, 0x98, 0xbc, 0xde, 0xad,
0x68, 0x7e, 0x1a, 0x5f, 0xf0, 0xff, 0x64, 0x8d,
0xd9, 0xd5, 0x7d, 0x96, 0x9e, 0x8d, 0xf7, 0x8e,
0xcf, 0x3d, 0x74, 0xc5, 0x0a, 0xcb, 0x95, 0x58,
0xb7, 0x88, 0xb7, 0xa0, 0x93, 0xe4, 0x07, 0x6a,
0xf5, 0x6a, 0x3b, 0xe1, 0x8b, 0x74, 0x81, 0x0e,
0x8c, 0x53, 0x0a, 0xf2, 0x56, 0x82, 0x57, 0x10,
0x13, 0x85, 0xf9, 0xd3, 0x22, 0x3f, 0xb3, 0x60,
0x4b, 0x67, 0x70, 0x95, 0xa9, 0x4d, 0x8b, 0xa4,
0x8a, 0xb9, 0x34, 0x03, 0x74, 0x17, 0x8f, 0x26,
0xa8, 0x35, 0x7f, 0x37, 0x82, 0x84, 0xda, 0xf0,
0xc7, 0x87, 0x7a, 0xb9, 0xbd, 0x1e, 0xe0, 0xea,
0x15, 0xd1, 0xcc, 0x69, 0x04, 0x81, 0x67, 0xd6,
0x19, 0x08, 0xc3, 0x2c, 0x53, 0x51, 0x84, 0x23,
0x46, 0xe3, 0x7e, 0x18, 0xfe, 0xda, 0x8f, 0xe0,
0x3f, 0xa7, 0x81, 0x68, 0xdb, 0x46, 0xcd, 0x4c,
0x5c, 0x6b, 0x80, 0x2c, 0x4c, 0xd8, 0xb4, 0x62,
0xc8, 0x3a, 0xcb, 0xac, 0xc1, 0x58, 0x20, 0xa0,
0xfb, 0x5a, 0xed, 0x4f, 0x15, 0xee, 0x20, 0xfd,
0xc5, 0xb6, 0xc4, 0x41, 0x29, 0xb0, 0xf8, 0x11,
0x61, 0xae, 0x90, 0x03, 0xcd, 0x28, 0xc6, 0xce,
0xd2, 0x34, 0xd7, 0x9c, 0x55, 0x4a, 0xaf, 0xba,
0x30, 0xeb, 0x43, 0x5f, 0x89, 0xd3, 0x01, 0xde,
0x2f, 0xd8, 0x6d, 0x95, 0xfa, 0xb4, 0x67, 0x64,
0x1f, 0x71, 0xcc, 0xbe, 0x37, 0x46, 0x58, 0x86,
0x0d, 0xca, 0x2d, 0xd3, 0x1d, 0x60, 0x83, 0xe3,
0xd2, 0x96, 0x47, 0xc2, 0xfb, 0xe5, 0x20, 0x1e,
0x6c, 0x08, 0xc4, 0x26, 0x71, 0x0b, 0xab, 0x10,
0x59, 0xc6, 0x29, 0xe8, 0xb5, 0x5b, 0x2c, 0x88,
0xae, 0x56, 0x2d, 0x1e, 0xe4, 0xc3, 0xc0, 0x2b,
0x44, 0xc5, 0xf2, 0xbd, 0xa7, 0x23, 0x3b, 0xe3,
0x7d, 0xb4, 0xfb, 0x8b, 0x0e, 0xf5, 0x13, 0x41,
0x19, 0x46, 0x9d, 0xd2, 0x2b, 0x33, 0x0b, 0x57,
0xa8, 0xba, 0x7a, 0x70, 0xed, 0xfc, 0x50, 0x54,
0xc0, 0x34, 0x95, 0x93, 0x08, 0x7e, 0x0c, 0x4d,
0x42, 0x49, 0xc8, 0x7e, 0x5d, 0xf7, 0x08, 0x8f,
0xf0, 0xd6, 0x8a, 0x6e, 0x95, 0xdf, 0x97, 0x32,
0x78, 0x1d, 0xd6, 0xea, 0x5a, 0x06, 0xc8, 0x78,
0x67, 0x9b, 0x95, 0xb3, 0xff, 0x32, 0xd8, 0xb7,
0x66, 0x62, 0x29, 0xce, 0x68, 0x13, 0x15, 0xd8,
0x31, 0xc7, 0xe8, 0xd6, 0x53, 0x1f, 0xf6, 0x92,
0x38, 0xac, 0x09
};
static unsigned char xc[] = {
0xf1, 0x43, 0x60, 0x72, 0x21, 0x2b, 0x90, 0xc7,
0x57, 0x44, 0x2f, 0xd7, 0x5b, 0x43, 0xc5, 0x3b,
0x7b, 0x33, 0x67, 0x84, 0xb6, 0xa3, 0x4a, 0x28,
0xf3, 0x53, 0xd6, 0x7c, 0x83, 0x58, 0xb6, 0x43,
0x26, 0x5f, 0xf3, 0xa8, 0x7e, 0x57, 0x73, 0xa6,
0x10, 0x30, 0x12, 0x90, 0x52, 0x77, 0x00, 0x4d,
0x77, 0xfb, 0x05, 0x1c, 0x0d, 0xd3, 0x64, 0xc1,
0x69, 0x19, 0x5a, 0xb8, 0x1c, 0x9b, 0x6e, 0x09,
0x3d, 0xff, 0xc7, 0xf4, 0x89, 0x57, 0x1b, 0x28,
0xde, 0x41, 0x11, 0x74, 0x63, 0x3a, 0xa6, 0xc2,
0x4b, 0xcc, 0x3a, 0xa9, 0xa5, 0x3b, 0x1d, 0x30,
0xe4, 0xdc, 0x3a, 0xdc, 0xa8, 0xc5, 0xa4, 0x6c,
0x14, 0xae, 0xd8, 0x20, 0xf1, 0xb9, 0x21, 0xae,
0xf1, 0x9a, 0x22, 0x14, 0x01, 0x53, 0xc6, 0x25,
0x64, 0x79, 0x75, 0x27, 0x56, 0x18, 0xf9, 0xd0,
0x4a, 0x04, 0xb9, 0xef, 0x74, 0xc4, 0xa9, 0xfc,
0x47, 0xb2, 0x99, 0xa3, 0x68, 0x48, 0x06, 0xd5,
0x11, 0x9f, 0x03, 0x36, 0xff, 0xa2, 0x9a, 0xd8,
0xfb, 0xb3, 0xd0, 0xe9, 0xf3, 0x58, 0x02, 0xd4,
0x8a, 0x4f, 0xd7, 0x7c, 0xdb, 0xe4, 0xb8, 0xbc,
0x8d, 0x32, 0xdd, 0x94, 0xe5, 0xdf, 0xe3, 0x15,
0x12, 0xe0, 0x81, 0xcc, 0x67, 0xe6, 0xe3, 0xb0,
0xd1, 0x40, 0x9e, 0x2b, 0x13, 0xc5, 0x57, 0x24,
0xaf, 0xe0, 0x92, 0x3c, 0xa9, 0x9f, 0x47, 0xb5,
0x00, 0x90, 0xfc, 0x72, 0xb8, 0xcb, 0xcf, 0xf4,
0xae, 0x52, 0x8e, 0xa6, 0x9d, 0x7b, 0x15, 0x0b,
0xf5, 0xd2, 0x6c, 0xe1, 0xe8, 0xd7, 0x05, 0x09,
0x1a, 0x9a, 0xfd, 0x6b, 0x29, 0x7b, 0x1d, 0x37,
0xa1, 0x5e, 0x93, 0x37, 0xd9, 0xd6, 0x0d, 0x06,
0x4c, 0x04, 0x8a, 0xb9, 0xfd, 0xc2, 0x7b, 0xd8,
0x74, 0x13, 0x3f, 0x25, 0xb2, 0x35, 0x24, 0x3a,
0x96, 0x7e, 0x4d, 0x0b, 0x49, 0x53, 0x6d, 0x7e,
0x0b, 0xdf, 0xd3, 0xfc, 0x1c, 0x36, 0x3f, 0x7d,
0x42, 0xdd, 0x0f, 0x5b, 0x50, 0xd5, 0x01, 0xd8,
0x09, 0x59, 0xaa, 0xdb, 0x19, 0x9f, 0xb7, 0xd4,
0x6f, 0x12, 0xe5, 0x73, 0x3c, 0x58, 0x86, 0xc9,
0x34, 0x91, 0xbb, 0xdd, 0x31, 0x57, 0xaf, 0xaf,
0x08, 0x3a, 0x21, 0x96, 0xc0, 0xf0, 0x84, 0xc0,
0x4a, 0x1c, 0xfd, 0x86, 0xe6, 0xb1, 0xc3, 0xec,
0x9d, 0x7f, 0x86, 0x4d, 0xaa, 0xd4, 0x3a, 0x6e,
0xb3, 0xe1, 0x89, 0xcc, 0x63, 0x64, 0x9c, 0x55,
0xe9, 0x20, 0xfc, 0xaa, 0x77, 0x77, 0x89, 0x09,
0x8c, 0x53, 0x1f, 0x9b, 0xbd, 0x1f, 0xda, 0x22,
0x1d, 0xa7, 0x19, 0x96, 0x31, 0x4b, 0x1a, 0x56,
0x59, 0xe9, 0x86, 0x73, 0x44, 0xcb, 0x75, 0x98,
0xed, 0x9c, 0xa1, 0xcc, 0xf6, 0xf5, 0x4e, 0x01,
0x9d, 0xc0, 0xb4, 0xa4, 0x4d, 0x46, 0xeb, 0x03,
0xd2, 0x02, 0x86, 0x46, 0x50, 0x5e, 0x9a, 0xc8,
0x17, 0x0f, 0xf4, 0x37, 0x5a, 0xc8, 0xce, 0x17,
0x68, 0x61, 0x5f, 0xe1, 0x2d, 0xf1, 0x83, 0x25,
0xf5, 0xd4, 0x53, 0xf6, 0x59, 0x06, 0x16, 0xfd,
0xca, 0x80, 0x18, 0x0e, 0x81, 0x50, 0x2a, 0x31,
0xc1, 0x6a, 0x9f, 0xd1, 0xcb, 0x2f, 0xf5, 0x9c,
0xe2, 0x5f, 0x32, 0x76, 0xff, 0x4c, 0xe4, 0x86,
0x48, 0xe4, 0xf3, 0x62, 0x05, 0x40, 0x8c, 0x3c,
0xd1, 0xb1, 0x6b, 0x06, 0x4b, 0x79, 0x99, 0x15,
0x74, 0x34, 0x32, 0x7a, 0x41, 0x39, 0xe4, 0x98,
0xcb, 0x01, 0x98, 0x70, 0x11, 0x3c, 0xee, 0xe1,
0x64, 0x55, 0xa2, 0x29, 0x99, 0xbb, 0x66, 0xb0,
0x19, 0x2f, 0x41, 0x54, 0x96, 0x8f, 0x77, 0xb2,
0x2b, 0x88, 0xdd, 0xa7, 0xaf, 0xb0, 0x84, 0x20,
0x9c, 0x5d, 0x83, 0x43, 0x35, 0x08, 0x42, 0xb5,
0x0c, 0x6d, 0x0a, 0xb0, 0xf5, 0xa6, 0x5b, 0xf2,
0x06, 0xcd, 0x43, 0x41, 0x39, 0x96, 0x36, 0x4e,
0x08, 0x94, 0x5a, 0x2c, 0x49, 0x0a, 0xee, 0x33,
0x32, 0x8c, 0x98, 0x4b, 0x97, 0x4f, 0x89, 0x82,
0x6f, 0x57, 0x72, 0xdd, 0xb5, 0xdc, 0x9b, 0x7f,
0xc4, 0x00, 0x7b, 0x88, 0xb2, 0x1a, 0xc0, 0x06,
0x2c, 0x08, 0x9e, 0xcf, 0x70, 0x43, 0x57, 0x8b,
0xb7, 0xc6, 0xa9, 0x5c, 0xe9, 0x1c, 0x79, 0xf6,
0xbf, 0x0c, 0x66, 0x36, 0xc4, 0xf6, 0xca, 0xe4,
0x5b, 0xe4, 0xb0, 0x60, 0xc3, 0xcd, 0xdd, 0xed,
0x0c, 0xff, 0xe2, 0x60, 0xd3, 0x2a, 0x58, 0x81,
0x48, 0xd1, 0x60, 0xf5, 0x35, 0x1c, 0x82, 0x68,
0xbd, 0xf8, 0xc1, 0x5d, 0x31, 0xce, 0x68, 0xb1,
0x8d, 0x9f, 0x06, 0xe4, 0x69, 0x87, 0x3a, 0xf1,
0x6e, 0xd3, 0x1c, 0x86, 0x3e, 0xe2, 0xf0, 0x13,
0x1b, 0xde, 0x89, 0x5f, 0x90, 0x5f, 0xcb, 0x3d,
0xd4, 0xdf, 0x0d, 0xf3, 0x81, 0x2b, 0x43, 0xda,
0x82, 0xd4, 0x12, 0xbf, 0x26, 0x32, 0xdf, 0x60,
0x15, 0x87, 0x7d, 0x70, 0x60, 0xeb, 0x25, 0x2a,
0xe1, 0x10, 0xda, 0xaa, 0x8d, 0x2f, 0xb8, 0x1e,
0x79, 0xb8, 0x7c, 0x3b, 0x4a, 0xc6, 0xc8, 0x81,
0x4a, 0x05, 0xc0, 0x2c, 0x7d, 0xe7, 0x2d, 0x34,
0x57, 0xec, 0xdb, 0x81, 0x89, 0x0c, 0x72, 0xce,
0x28, 0xcc, 0x5a, 0x56, 0x9d, 0x21, 0xb0, 0x0d,
0x72, 0xba, 0xc8, 0x68, 0x91, 0x70, 0xb1, 0x15,
0xf9, 0x2a, 0xe2, 0x59, 0x1c, 0xcc, 0x1e, 0x6d,
0x40, 0x24, 0x11, 0xef, 0x42, 0xa7, 0x4c, 0x36,
0x10, 0xbe, 0x09, 0x75, 0x57, 0xcc, 0xb0, 0x48,
0x8a, 0xb7, 0xf7, 0xb8, 0xd2, 0xb2, 0x8e, 0xea,
0x42, 0xfd, 0x3e, 0x86, 0x24, 0x31, 0x2c, 0x95,
0x5e, 0x6b, 0xab, 0xe5, 0x62, 0xb0, 0x49, 0xde,
0x41, 0xbf, 0x01, 0x76, 0x04, 0xdf, 0x3a, 0x0d,
0xfb, 0x44, 0x94, 0x98, 0xa3, 0xdd, 0x6a, 0xf9,
0xe8, 0x91, 0x80, 0x13, 0x45, 0xc5, 0xdb, 0x9f,
0xe4, 0x4d, 0x3f, 0x2a, 0xde, 0x2a, 0xf8, 0xf6,
0x93, 0x88, 0x3c, 0x29, 0xc5, 0xa9, 0xfb, 0x28,
0xcd, 0x64, 0x96, 0x51, 0x76, 0x50, 0x1a, 0x07,
0x68, 0x83, 0x56, 0x03, 0x82, 0x48, 0x81, 0xf8,
0x7c, 0x5a, 0x21, 0xe8, 0x22, 0x62, 0xeb, 0x10,
0xd2, 0x07, 0x5e, 0x0a, 0x26, 0x0c, 0x5c, 0xa2,
0xf5, 0x5f, 0xe3, 0xc6, 0xa3, 0x88, 0x1e, 0x32,
0xcd, 0xb2, 0xb9, 0xa9, 0x12, 0xbc, 0xd5, 0xc3,
0xe4, 0x4c, 0x82, 0xfc, 0xbb, 0xc1, 0x98, 0x8b,
0xa1, 0xdc, 0x80, 0x7b, 0x45, 0x97, 0xf9, 0x30,
0x53, 0x00, 0x82, 0x40, 0x29, 0x9f, 0xeb, 0xd1,
0x6a, 0x37, 0xd1, 0x6e, 0x11, 0x0f, 0x35, 0x8d,
0x57, 0x2e, 0xed, 0x13, 0xbd, 0x64, 0xa8, 0x26,
0x79, 0xb7, 0xb8, 0x84, 0x27, 0x32, 0x40, 0x73,
0x32, 0xa1, 0x89, 0x97, 0x4f, 0x3d, 0xea, 0xc0,
0xc7, 0x22, 0x68, 0xc7, 0xbc, 0x76, 0x88, 0x05,
0x1e, 0xc5, 0x42, 0xfb, 0x4c, 0x25, 0xab, 0xaf,
0x1d, 0x0c, 0x93, 0xa1, 0xeb, 0xb4, 0x35, 0x6d,
0x9e, 0x01, 0x79, 0x64, 0xa0, 0x97, 0x7f, 0x84,
0x58, 0x86, 0xe2, 0x1a, 0x50, 0x94, 0x99, 0xe3,
0xc1, 0xc5, 0xd7, 0x73, 0xc1, 0xe4, 0x45, 0x60,
0xfc, 0x30, 0x5c, 0x33, 0x44, 0xe7, 0x8d, 0x30,
0x25, 0x5f, 0x79, 0x44, 0xc6, 0xfb, 0x38, 0xb6,
0x5d, 0xd9, 0x54, 0x96, 0xb7, 0xfb, 0x67, 0x22,
0x17, 0x65, 0xf5, 0x2d, 0x4b, 0xe4, 0x18, 0x00,
0xb3, 0x6d, 0x5c, 0x1a, 0x89, 0x3f, 0xe1, 0x7e,
0xc7, 0xf5, 0x4d, 0x3b, 0x9f, 0x4c, 0xc9, 0x5d,
0x9f, 0xa4, 0x98, 0x06, 0x3c, 0xb6, 0xac, 0x89,
0x80, 0x90, 0x25, 0x4e, 0x53, 0x05, 0xc5, 0x9f,
0x40, 0xa0, 0xdb, 0x3b, 0x95, 0xf0, 0x09, 0xd8,
0xeb, 0x00, 0x31, 0x95, 0xc6, 0x8a, 0x8e, 0xfa,
0xd9, 0xb5, 0x82, 0xea, 0xa9, 0x9a, 0x14, 0xea,
0x70, 0x00, 0xbe, 0x48, 0xa5, 0x64, 0x6a, 0x66,
0x77, 0xc6, 0xc5, 0x7a, 0x37, 0x59, 0xf7, 0xb5,
0xea, 0x38, 0xb4, 0x1d, 0x2f, 0xe4, 0xe4, 0x90,
0x39, 0xc3, 0xca, 0x96, 0x69, 0x98, 0x4e, 0xf3,
0xd4, 0x45, 0x36, 0x24, 0xb0, 0xe3, 0x08, 0x41,
0x67, 0x34, 0xcd, 0xe0, 0x0c, 0x9f, 0x02
};
static unsigned char xk1[] = {
0xb7, 0x19, 0xb0, 0xae, 0x96, 0x55, 0xe7, 0x35,
0xbb, 0x84, 0x0a, 0x09, 0xd7, 0x66, 0x8b, 0xd2,
0x65, 0xd2, 0x23, 0x59, 0xf9, 0xc3, 0x75, 0xdb,
0x3c, 0xb4, 0x35, 0x89, 0xaf, 0xf1, 0xd9, 0x8b,
0x52, 0x8b, 0x3f, 0x2e, 0xfc, 0x41, 0x4a, 0x82,
0x10, 0xb2, 0x42, 0x89, 0xa3, 0x8d, 0xdf, 0x15,
0x50, 0x7d, 0x97, 0x27, 0x20, 0x12, 0x13, 0xaa,
0xf2, 0x7a, 0x83, 0x28, 0xd4, 0x20, 0x19, 0x02
};
tinyssh-20240101/crypto-tests/crypto_onetimeauth_poly1305test.c 0000664 0000000 0000000 00000002727 14544472107 0024510 0 ustar 00root root 0000000 0000000 /*
20141017
Jan Mojzis
Public domain.
*/
#include "misc.h"
#include "crypto_onetimeauth_poly1305.h"
#define SPACESIZE 5232
static unsigned char space[SPACESIZE + 16];
static unsigned char key[crypto_onetimeauth_poly1305_KEYBYTES + 16];
static unsigned char buf[crypto_onetimeauth_poly1305_BYTES + 16];
static unsigned char test_pseudorandom_checksum[32] = {
0xaf, 0xe7, 0xbb, 0x79, 0x2a, 0xe5, 0x81, 0xee,
0xbc, 0x1f, 0x5b, 0x79, 0x96, 0xb7, 0x27, 0x1a,
0xc2, 0x74, 0x65, 0x0e, 0x1d, 0xb5, 0xb7, 0x06,
0x10, 0x42, 0x6a, 0x50, 0x57, 0x8b, 0xf1, 0xb0
};
static void test_pseudorandom(void) {
long long i, j;
checksum_zero();
i = 0;
for (j = 0; j < SPACESIZE; j += 1 + j / 16) {
pseudorandombytes(space + i, j);
pseudorandombytes(key + i, crypto_onetimeauth_poly1305_KEYBYTES);
crypto_onetimeauth_poly1305(buf + i, space + i, j, key + i);
checksum(buf + i, crypto_onetimeauth_poly1305_BYTES);
if (crypto_onetimeauth_poly1305_verify(buf + i, space + i, j, key + i) != 0) {
fail_printdata("m", space + i, j);
fail_printdata("key", key + i, crypto_onetimeauth_poly1305_KEYBYTES);
fail_printdata("a", buf + i, crypto_onetimeauth_poly1305_BYTES);
fail("crypto_onetimeauth_poly1305_verify() failure");
}
++i;
i %= 16;
}
fail_whenbadchecksum(test_pseudorandom_checksum);
}
int main(void) {
test_pseudorandom();
_exit(0);
}
tinyssh-20240101/crypto-tests/crypto_scalarmult_curve25519test.c 0000664 0000000 0000000 00000007733 14544472107 0024575 0 ustar 00root root 0000000 0000000 /*
20141017
Jan Mojzis
Public domain.
*/
#include "misc.h"
#include "crypto_scalarmult_curve25519.h"
#define BYTES crypto_scalarmult_curve25519_BYTES
#define SCALARBYTES crypto_scalarmult_curve25519_SCALARBYTES
static unsigned char pk[BYTES];
static unsigned char sk1[SCALARBYTES + 16];
static unsigned char pk1[BYTES + 16];
static unsigned char k1[BYTES + 16];
static unsigned char sk2[SCALARBYTES + 16];
static unsigned char pk2[BYTES + 16];
static unsigned char k2[BYTES + 16];
static unsigned char S[BYTES] = { 9 };
static unsigned char R[BYTES] = {
0xf9, 0xc3, 0xda, 0xc2, 0x10, 0x4c, 0x80, 0xb2,
0x52, 0xd0, 0xae, 0xec, 0x37, 0x7a, 0xfd, 0x5d,
0x1e, 0xf2, 0xc8, 0xc3, 0x48, 0xc2, 0x9e, 0x12,
0xdd, 0xb2, 0xd0, 0xc8, 0xb1, 0x98, 0xff, 0x7f
};
static unsigned char d[SCALARBYTES] = {
0x56, 0x2c, 0x1e, 0xb5, 0xfd, 0xb2, 0x81, 0x29,
0xbd, 0x37, 0x49, 0x58, 0x35, 0xd4, 0xb1, 0x30,
0x7d, 0xdb, 0x57, 0x38, 0x80, 0x12, 0x17, 0x42,
0xf7, 0x13, 0xf1, 0x05, 0x67, 0x69, 0xd5, 0xbf
};
static void test_vector(void) {
long long j;
unsigned char r[BYTES];
if (crypto_scalarmult_curve25519(r, d, S) != 0) fail("crypto_scalarmult_curve25519() failure");
for (j = 0; j < BYTES; ++j) if (r[j] != R[j]) fail("crypto_scalarmult_curve25519() failure");
}
static unsigned char skdata[1080][32] = {
#include "precomp.data"
};
static unsigned char pkdata[1080][32] = {
#include "precomp_curve25519.data"
};
static void test_base(void) {
long long i, j;
checksum_zero();
for (i = 0; i < 1080; ++i) {
if (crypto_scalarmult_curve25519_base(pk, skdata[i]) != 0) {
fail_printdata("sk", skdata[i], SCALARBYTES);
fail("crypto_scalarmult_curve25519_base() failure, please report it !!!!!!!!!");
}
for (j = 0; j < BYTES; ++j) if (pk[j] != pkdata[i][j]) {
fail_printdata("pk_computed", pk, BYTES);
fail_printdata("pk_expected", pkdata[i], BYTES);
fail_printdata("sk", skdata[i], SCALARBYTES);
fail("crypto_scalarmult_curve25519() failure, please report it !!!!!!!!!");
}
}
}
static const unsigned char basepoint[BYTES] = { 9 };
static unsigned char test_scalarmult_checksum[32] = {
0xca, 0xf4, 0xa3, 0xbe, 0x00, 0x9c, 0x6f, 0x01,
0xb8, 0x4e, 0xf8, 0x0d, 0x0a, 0x17, 0x16, 0x42,
0xfe, 0x01, 0x59, 0x40, 0x74, 0xd4, 0xa6, 0x48,
0x07, 0x94, 0x95, 0x94, 0xab, 0xa4, 0x5e, 0x6d
};
static void test_scalarmult(void) {
long long i, j;
unsigned char outpk[BYTES];
for (i = 0; i < BYTES; ++i) pk[i] = basepoint[i];
checksum_zero();
for (i = 0; i < 1080; ++i) {
pk[31] |= 128;
if (crypto_scalarmult_curve25519(outpk, skdata[i], pk) != 0) {
fail_printdata("pk", pk, BYTES);
fail_printdata("sk", skdata[i], SCALARBYTES);
fail("crypto_scalarmult_curve25519() failure, please report it !!!!!!!!!");
}
checksum(outpk, BYTES);
for (j = 0; j < BYTES; ++j) pk[j] = outpk[j];
}
fail_whenbadchecksum(test_scalarmult_checksum);
}
static void test_random(void) {
long long i, j;
for (i = 0; i < 16; ++i) {
unsaferandombytes(sk1 + i, SCALARBYTES);
unsaferandombytes(sk2 + i, SCALARBYTES);
if (crypto_scalarmult_curve25519_base(pk1 + i, sk1 + i) != 0) goto fail;
pk1[31 + i] |= 128;
if (crypto_scalarmult_curve25519_base(pk2 + i, sk2 + i) != 0) goto fail;
pk2[31 + i] |= 128;
if (crypto_scalarmult_curve25519(k1 + i, sk1 + i, pk2 + i) != 0) goto fail;
if (crypto_scalarmult_curve25519(k2 + i, sk2 + i, pk1 + i) != 0) goto fail;
for (j = 0; j < BYTES; ++j) if (k1[j + i] != k2[j + i]) goto fail;
}
return;
fail:
fail_printdata("sk1", sk1 + i, SCALARBYTES);
fail_printdata("sk2", sk2 + i, SCALARBYTES);
fail("crypto_scalarmult_curve25519() failure, please report it !!!!!!!!!");
}
int main(void) {
test_vector();
test_base();
test_scalarmult();
test_random();
_exit(0);
}
tinyssh-20240101/crypto-tests/crypto_sign_ed25519test.c 0000664 0000000 0000000 00000007454 14544472107 0022632 0 ustar 00root root 0000000 0000000 /*
20141017
Jan Mojzis
Public domain.
*/
#include
#include "misc.h"
#include "crypto_sign_ed25519.h"
#define MLEN 5232
static unsigned char space[MLEN + 16];
static unsigned char m[MLEN + crypto_sign_ed25519_BYTES + 16];
static unsigned char sm[MLEN + crypto_sign_ed25519_BYTES + 16];
static unsigned char sk[crypto_sign_ed25519_SECRETKEYBYTES + 16];
static unsigned char pk[crypto_sign_ed25519_PUBLICKEYBYTES + 16];
static unsigned long long mlen;
static unsigned long long smlen;
static unsigned char test_precomp_checksumsha2[32] = {
0x63, 0xe6, 0x3c, 0xcf, 0x4a, 0x50, 0x12, 0xdc,
0xc5, 0xec, 0x43, 0x76, 0x52, 0x6c, 0xf1, 0x5c,
0x7b, 0x12, 0xb2, 0xa5, 0xee, 0x77, 0x71, 0x63,
0xd0, 0x3a, 0xf1, 0x84, 0xe0, 0xd2, 0x06, 0x13
};
static unsigned char test_precomp_checksumsha3[32] = {
0x18, 0x03, 0xc1, 0x7e, 0xf4, 0x2c, 0x56, 0xce,
0xc0, 0xc4, 0xb2, 0xc3, 0x29, 0xf7, 0xa8, 0x8c,
0x1e, 0xfe, 0xd2, 0x9c, 0xf3, 0xdb, 0xe5, 0x61,
0x2d, 0x22, 0xf9, 0x0c, 0xd9, 0x0f, 0xf2, 0x7f
};
static unsigned char skdata[1080][32] = {
#include "precomp.data"
};
static unsigned char pkdata[1080][32] = {
#include "precomp_ed25519.data"
};
static void test_precomp(void) {
long long i, j;
pseudorandombytes(space, sizeof space);
checksum_zero();
for (i = 0; i < 1080; ++i) {
for (j = 31; j >= 0; --j) sk[j ] = skdata[i][j];
for (j = 31; j >= 0; --j) sk[j + 32] = pkdata[i][j];
for (j = 31; j >= 0; --j) pk[j ] = pkdata[i][j];
crypto_sign_ed25519(sm, &smlen, space, MLEN - i, sk);
checksum(sm, crypto_sign_ed25519_BYTES);
if (crypto_sign_ed25519_open(m, &mlen, sm, smlen, pk) != 0) {
fail_printdata("sm", sm, smlen);
fail_printdata("pk", pk, crypto_sign_ed25519_PUBLICKEYBYTES);
fail_printdata("sk", sk, crypto_sign_ed25519_SECRETKEYBYTES);
fail("crypto_sign_ed25519_open() failure, please report it !!!!!!!!!");
}
}
if (!checksum_check((test_precomp_checksumsha2)) && !checksum_check((test_precomp_checksumsha3))) {
fail_whenbadchecksum(test_precomp_checksumsha3);
}
}
static void test_random(void) {
long long i, j;
i = 0;
for (j = 0; j < sizeof space; j += 1 + j / 16) {
unsaferandombytes(space + i, j);
if (crypto_sign_ed25519_keypair(pk + i, sk + i) != 0)
fail("crypto_sign_ed25519_keypair() failure");
crypto_sign_ed25519(sm + i, &smlen, space + i, j, sk + i);
if (crypto_sign_ed25519_open(m + i, &mlen, sm + i, smlen, pk + i) != 0) {
fail_printdata("sm", sm + i, smlen);
fail_printdata("pk", pk + i, crypto_sign_ed25519_PUBLICKEYBYTES);
fail_printdata("sk", sk + i, crypto_sign_ed25519_SECRETKEYBYTES);
fail("crypto_sign_ed25519_open() failure, please report it !!!!!!!!!");
}
++i;
i %= 16;
}
}
static void test_signopen(void) {
unsigned char m[1024];
unsigned char sm[1024];
unsigned char om[1024];
unsigned long long smlen = 0;
unsigned long long omlen;
if (crypto_sign_ed25519_keypair(pk, sk) != 0) fail("crypto_sign_ed25519_keypair() failure");
pseudorandombytes(m, sizeof m);
crypto_sign_ed25519(sm, &smlen, m + 64, sizeof m - 64, sk);
if (crypto_sign_ed25519_open(om, &omlen, sm, sizeof sm, pk) != 0) {
fail_printdata("sm", sm, smlen);
fail_printdata("pk", pk, crypto_sign_ed25519_PUBLICKEYBYTES);
fail_printdata("sk", sk, crypto_sign_ed25519_SECRETKEYBYTES);
fail("crypto_sign_ed25519_open() failure, please report it !!!!!!!!!");
}
if (memcmp(m + 64, om, sizeof m - 64)) {
fail("crypto_sign_ed25519_open() failure, messages do not match");
}
}
int main(void) {
test_precomp();
test_random();
test_signopen();
_exit(0);
}
tinyssh-20240101/crypto-tests/crypto_sort_uint32test.c 0000664 0000000 0000000 00000001551 14544472107 0022777 0 ustar 00root root 0000000 0000000 #include "misc.h"
#include "crypto_uint32.h"
#include "crypto_sort_uint32.h"
static void test_321(void) {
crypto_uint32 x[3] = {3, 2, 1};
crypto_sort_uint32(x, 3);
if (x[0] != 1) fail("crypto_sort_uint32() failure");
if (x[1] != 2) fail("crypto_sort_uint32() failure");
if (x[2] != 3) fail("crypto_sort_uint32() failure");
}
static void test_i(void) {
crypto_uint32 x[5] = { (crypto_uint32) -1, (crypto_uint32) -2, 2, 1, 0};
crypto_sort_uint32(x, 5);
if (x[0] != 0) fail("crypto_sort_uint32() failure");
if (x[1] != 1) fail("crypto_sort_uint32() failure");
if (x[2] != 2) fail("crypto_sort_uint32() failure");
if (x[3] != (crypto_uint32) -2) fail("crypto_sort_uint32() failure");
if (x[4] != (crypto_uint32) -1) fail("crypto_sort_uint32() failure");
}
int main(void) {
test_321();
test_i();
_exit(0);
}
tinyssh-20240101/crypto-tests/crypto_stream_chacha20test.c 0000664 0000000 0000000 00000002417 14544472107 0023532 0 ustar 00root root 0000000 0000000 /*
20140709
Jan Mojzis
Public domain.
*/
#include
#include "misc.h"
#include "crypto_stream_chacha20.h"
static unsigned char space[5232];
static unsigned char k[crypto_stream_chacha20_KEYBYTES + 16];
static unsigned char n[crypto_stream_chacha20_NONCEBYTES + 16];
static unsigned char o[32] = {
0x98, 0x43, 0x28, 0xe2, 0x76, 0xc2, 0xc3, 0xa1,
0xe8, 0xf3, 0x50, 0x98, 0x15, 0xc4, 0xea, 0xa6,
0x2c, 0x54, 0x87, 0x1b, 0x02, 0x4c, 0x61, 0xd1,
0x01, 0xd9, 0xf0, 0xb1, 0xd5, 0x21, 0xc4, 0x7a
};
static void test_alignment(void) {
long long i;
for (i = 0; i < 16; ++i) {
crypto_stream_chacha20_xor(space + i, space + i, sizeof space - i, n + i, k + i);
}
}
static void test_rand(void) {
long long i, j;
unsigned int u;
pseudorandombytes(space, sizeof space);
pseudorandombytes(k, sizeof k);
pseudorandombytes(n, sizeof n);
for (i = 0; i < sizeof space; i += 1 + i / 16) {
u = 1;
for (j = 0; j < 8; ++j) {
u += (unsigned int) n[j];
n[j] = u;
u >>= 8;
}
crypto_stream_chacha20_xor(space, space, i, n, k);
}
checksum(space, sizeof space);
fail_whenbadchecksum(o);
}
int main(void) {
test_alignment();
test_rand();
_exit(0);
}
tinyssh-20240101/crypto-tests/crypto_verify_16test.c 0000664 0000000 0000000 00000001701 14544472107 0022413 0 ustar 00root root 0000000 0000000 /*
20140167
Jan Mojzis
Public domain.
*/
#include "misc.h"
#include "crypto_verify_16.h"
static unsigned char b1[crypto_verify_16_BYTES + 16];
static unsigned char b2[crypto_verify_16_BYTES + 16];
static void test_alignment(void) {
long long i;
for (i = 0; i < sizeof b1; ++i) b1[i] = 0xff;
for (i = 0; i < sizeof b2; ++i) b2[i] = 0xff;
for (i = 0; i < 16; ++i) {
if (crypto_verify_16(b1 + i, b2 + i) != 0) fail("crypto_verify_16 failure");
}
}
static void test_verify(void) {
long long i;
for (i = 0; i < sizeof b1; ++i) b1[i] = 0xff;
for (i = 0; i < sizeof b2; ++i) b2[i] = 0xff;
if (crypto_verify_16(b1, b2) != 0) fail("crypto_verify_16 failure");
for (i = 0; i < crypto_verify_16_BYTES; ++i) {
b1[i] = 0;
if (crypto_verify_16(b1, b2) == 0) fail("crypto_verify_16 failure");
b1[i] = 0xff;
}
}
int main(void) {
test_alignment();
test_verify();
_exit(0);
}
tinyssh-20240101/crypto-tests/crypto_verify_32test.c 0000664 0000000 0000000 00000001701 14544472107 0022411 0 ustar 00root root 0000000 0000000 /*
20140167
Jan Mojzis
Public domain.
*/
#include "misc.h"
#include "crypto_verify_32.h"
static unsigned char b1[crypto_verify_32_BYTES + 16];
static unsigned char b2[crypto_verify_32_BYTES + 16];
static void test_alignment(void) {
long long i;
for (i = 0; i < sizeof b1; ++i) b1[i] = 0xff;
for (i = 0; i < sizeof b2; ++i) b2[i] = 0xff;
for (i = 0; i < 16; ++i) {
if (crypto_verify_32(b1 + i, b2 + i) != 0) fail("crypto_verify_32 failure");
}
}
static void test_verify(void) {
long long i;
for (i = 0; i < sizeof b1; ++i) b1[i] = 0xff;
for (i = 0; i < sizeof b2; ++i) b2[i] = 0xff;
if (crypto_verify_32(b1, b2) != 0) fail("crypto_verify_32 failure");
for (i = 0; i < crypto_verify_32_BYTES; ++i) {
b1[i] = 0;
if (crypto_verify_32(b1, b2) == 0) fail("crypto_verify_32 failure");
b1[i] = 0xff;
}
}
int main(void) {
test_alignment();
test_verify();
_exit(0);
}
tinyssh-20240101/crypto-tests/misc.h 0000664 0000000 0000000 00000010412 14544472107 0017240 0 ustar 00root root 0000000 0000000 #ifndef _MISC_H____
#define _MISC_H____
#include
#include
#include
#include
#include "crypto_uint8.h"
#include "crypto_uint32.h"
#include "crypto_uint64.h"
typedef crypto_uint8 u8;
typedef crypto_uint32 u32;
typedef crypto_uint64 u64;
#define FOR(i,n) for (i = 0;i < n;++i)
static u32 L32(u32 x,int c) { return (x << c) | ((x&0xffffffff) >> (32 - c)); }
static u32 ld32(const u8 *x)
{
u32 u = x[3];
u = (u<<8)|x[2];
u = (u<<8)|x[1];
return (u<<8)|x[0];
}
static void st32(u8 *x,u32 u)
{
int i;
FOR(i,4) { x[i] = u; u >>= 8; }
}
static const u8 sigma[17] = "expand 32-byte k";
static void core(u8 *out,const u8 *in,const u8 *k)
{
u32 w[16],x[16],y[16],t[4];
int i,j,m;
FOR(i,4) {
x[5*i] = ld32(sigma+4*i);
x[1+i] = ld32(k+4*i);
x[6+i] = ld32(in+4*i);
x[11+i] = ld32(k+16+4*i);
}
FOR(i,16) y[i] = x[i];
FOR(i,20) {
FOR(j,4) {
FOR(m,4) t[m] = x[(5*j+4*m)%16];
t[1] ^= L32(t[0]+t[3], 7);
t[2] ^= L32(t[1]+t[0], 9);
t[3] ^= L32(t[2]+t[1],13);
t[0] ^= L32(t[3]+t[2],18);
FOR(m,4) w[4*j+(j+m)%4] = t[m];
}
FOR(m,16) x[m] = w[m];
}
FOR(i,16) st32(out + 4 * i,x[i] + y[i]);
}
static unsigned char checksum_state[64] = {0};
static void checksum(const unsigned char *x,unsigned long long xlen)
{
u8 block[16];
int i;
while (xlen >= 16) {
core(checksum_state,x,checksum_state);
x += 16;
xlen -= 16;
}
FOR(i,16) block[i] = 0;
FOR(i,xlen) block[i] = x[i];
block[xlen] = 1;
checksum_state[0] ^= 1;
core(checksum_state,block,checksum_state);
}
static int checksum_check(unsigned char *o) {
int j;
for (j = 0; j < 32; ++j) if (checksum_state[j] != o[j]) return 0;
return 1;
}
static void checksum_zero(void) {
long long i;
for (i = 0; i < 64; ++i) checksum_state[i] = 0;
}
static void s20(u8 *c,u64 b,const u8 *n,const u8 *k)
{
u8 z[16],x[64];
u32 u,i;
if (!b) return;
FOR(i,16) z[i] = 0;
FOR(i,8) z[i] = n[i];
while (b >= 64) {
core(x,z,k);
FOR(i,64) c[i] = x[i];
u = 1;
for (i = 8;i < 16;++i) {
u += (u32) z[i];
z[i] = u;
u >>= 8;
}
b -= 64;
c += 64;
}
if (b) {
core(x,z,k);
FOR(i,b) c[i] = x[i];
}
}
static void increment(u8 *n)
{
if (!++n[0])
if (!++n[1])
if (!++n[2])
if (!++n[3])
if (!++n[4])
if (!++n[5])
if (!++n[6])
if (!++n[7])
;
}
static void pseudorandombytes(unsigned char *x,unsigned long long xlen)
{
const static unsigned char randombytes_k[33] = "answer randombytes from crypto_*";
static unsigned char randombytes_n[8];
s20(x,xlen,randombytes_n,randombytes_k);
increment(randombytes_n);
}
static void unsaferandombytes(unsigned char *x,unsigned long long xlen)
{
static unsigned char randombytes_k[32];
static unsigned char randombytes_n[8];
static int initialized = 0;
struct timeval t;
if (!initialized) {
initialized = 1;
gettimeofday(&t, (struct timezone *)0);
st32(randombytes_k + 0, t.tv_usec);
st32(randombytes_k + 4, t.tv_sec);
st32(randombytes_k + 8, getpid());
st32(randombytes_k + 12, getppid());
s20(randombytes_k,32,randombytes_n,randombytes_k);
}
s20(x,xlen,randombytes_n,randombytes_k);
increment(randombytes_n);
}
#define fail_(a, b, x) do { fprintf(stderr, "%s:%llu: %s\n", (a), (unsigned long long)(b), (x)); fflush(stderr); _exit(111); } while (0);
#define fail(x) fail_(__FILE__, __LINE__, (x))
static void fail_printdata(const char *text, unsigned char *data, long long len) {
long long i;
fprintf(stderr, "%s = {\n ", text);
for (i = 0; i < len; ++i) {
if (i == len - 1) {
fprintf(stderr, "0x%02x", data[i]);
}
else {
fprintf(stderr, "0x%02x, ", data[i]);
if (i % 8 == 7) fprintf(stderr, "\n ");
}
}
fprintf(stderr, "\n};\n");
fflush(stderr);
}
#define fail_whenbadchecksum(x) \
if (!checksum_check((x))) { \
fail_printdata("checksum_expected", (x), 32); \
fail_printdata("checksum_computed", checksum_state, 32); \
fail("checksum failure"); \
}
#endif
tinyssh-20240101/crypto-tests/precomp.data 0000664 0000000 0000000 00000534030 14544472107 0020443 0 ustar 00root root 0000000 0000000 { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8 },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe },
{ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
tinyssh-20240101/crypto-tests/precomp.data.py 0000664 0000000 0000000 00000000705 14544472107 0021067 0 ustar 00root root 0000000 0000000 import binascii
f = open("precomp.txt")
def l(line):
l = ""
for i in range(32):
if i == 31:
l += "0x%s%s" % (line[2*i], line[2*i+1])
else:
l += "0x%s%s," % (line[2*i], line[2*i+1])
return l
while True:
line=f.readline()
if len(line) == 0:
f.close()
break
print "{", l(line), "},"
tinyssh-20240101/crypto-tests/precomp.txt 0000664 0000000 0000000 00000211070 14544472107 0020345 0 ustar 00root root 0000000 0000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000001
0000000000000000000000000000000000000000000000000000000000000002
0000000000000000000000000000000000000000000000000000000000000003
0000000000000000000000000000000000000000000000000000000000000004
0000000000000000000000000000000000000000000000000000000000000007
0000000000000000000000000000000000000000000000000000000000000008
000000000000000000000000000000000000000000000000000000000000000f
0000000000000000000000000000000000000000000000000000000000000010
000000000000000000000000000000000000000000000000000000000000001f
0000000000000000000000000000000000000000000000000000000000000020
000000000000000000000000000000000000000000000000000000000000003f
0000000000000000000000000000000000000000000000000000000000000040
000000000000000000000000000000000000000000000000000000000000007f
0000000000000000000000000000000000000000000000000000000000000080
00000000000000000000000000000000000000000000000000000000000000ff
0000000000000000000000000000000000000000000000000000000000000100
00000000000000000000000000000000000000000000000000000000000001ff
0000000000000000000000000000000000000000000000000000000000000200
00000000000000000000000000000000000000000000000000000000000003ff
0000000000000000000000000000000000000000000000000000000000000400
00000000000000000000000000000000000000000000000000000000000007ff
0000000000000000000000000000000000000000000000000000000000000800
0000000000000000000000000000000000000000000000000000000000000fff
0000000000000000000000000000000000000000000000000000000000001000
0000000000000000000000000000000000000000000000000000000000001fff
0000000000000000000000000000000000000000000000000000000000002000
0000000000000000000000000000000000000000000000000000000000003fff
0000000000000000000000000000000000000000000000000000000000004000
0000000000000000000000000000000000000000000000000000000000007fff
0000000000000000000000000000000000000000000000000000000000008000
000000000000000000000000000000000000000000000000000000000000ff00
000000000000000000000000000000000000000000000000000000000000ffff
0000000000000000000000000000000000000000000000000000000000010000
000000000000000000000000000000000000000000000000000000000001ffff
0000000000000000000000000000000000000000000000000000000000020000
000000000000000000000000000000000000000000000000000000000003ffff
0000000000000000000000000000000000000000000000000000000000040000
000000000000000000000000000000000000000000000000000000000007ffff
0000000000000000000000000000000000000000000000000000000000080000
00000000000000000000000000000000000000000000000000000000000fffff
0000000000000000000000000000000000000000000000000000000000100000
00000000000000000000000000000000000000000000000000000000001fffff
0000000000000000000000000000000000000000000000000000000000200000
00000000000000000000000000000000000000000000000000000000003fffff
0000000000000000000000000000000000000000000000000000000000400000
00000000000000000000000000000000000000000000000000000000007fffff
0000000000000000000000000000000000000000000000000000000000800000
0000000000000000000000000000000000000000000000000000000000ff0000
0000000000000000000000000000000000000000000000000000000000ffffff
0000000000000000000000000000000000000000000000000000000001000000
0000000000000000000000000000000000000000000000000000000001ffffff
0000000000000000000000000000000000000000000000000000000002000000
0000000000000000000000000000000000000000000000000000000003ffffff
0000000000000000000000000000000000000000000000000000000004000000
0000000000000000000000000000000000000000000000000000000007ffffff
0000000000000000000000000000000000000000000000000000000008000000
000000000000000000000000000000000000000000000000000000000fffffff
0000000000000000000000000000000000000000000000000000000010000000
000000000000000000000000000000000000000000000000000000001fffffff
0000000000000000000000000000000000000000000000000000000020000000
000000000000000000000000000000000000000000000000000000003fffffff
0000000000000000000000000000000000000000000000000000000040000000
000000000000000000000000000000000000000000000000000000007fffffff
0000000000000000000000000000000000000000000000000000000080000000
00000000000000000000000000000000000000000000000000000000ff000000
00000000000000000000000000000000000000000000000000000000ffffffff
0000000000000000000000000000000000000000000000000000000100000000
00000000000000000000000000000000000000000000000000000001ffffffff
0000000000000000000000000000000000000000000000000000000200000000
00000000000000000000000000000000000000000000000000000003ffffffff
0000000000000000000000000000000000000000000000000000000400000000
00000000000000000000000000000000000000000000000000000007ffffffff
0000000000000000000000000000000000000000000000000000000800000000
0000000000000000000000000000000000000000000000000000000fffffffff
0000000000000000000000000000000000000000000000000000001000000000
0000000000000000000000000000000000000000000000000000001fffffffff
0000000000000000000000000000000000000000000000000000002000000000
0000000000000000000000000000000000000000000000000000003fffffffff
0000000000000000000000000000000000000000000000000000004000000000
0000000000000000000000000000000000000000000000000000007fffffffff
0000000000000000000000000000000000000000000000000000008000000000
000000000000000000000000000000000000000000000000000000ff00000000
000000000000000000000000000000000000000000000000000000ffffffffff
0000000000000000000000000000000000000000000000000000010000000000
000000000000000000000000000000000000000000000000000001ffffffffff
0000000000000000000000000000000000000000000000000000020000000000
000000000000000000000000000000000000000000000000000003ffffffffff
0000000000000000000000000000000000000000000000000000040000000000
000000000000000000000000000000000000000000000000000007ffffffffff
0000000000000000000000000000000000000000000000000000080000000000
00000000000000000000000000000000000000000000000000000fffffffffff
0000000000000000000000000000000000000000000000000000100000000000
00000000000000000000000000000000000000000000000000001fffffffffff
0000000000000000000000000000000000000000000000000000200000000000
00000000000000000000000000000000000000000000000000003fffffffffff
0000000000000000000000000000000000000000000000000000400000000000
00000000000000000000000000000000000000000000000000007fffffffffff
0000000000000000000000000000000000000000000000000000800000000000
0000000000000000000000000000000000000000000000000000ff0000000000
0000000000000000000000000000000000000000000000000000ffffffffffff
0000000000000000000000000000000000000000000000000001000000000000
0000000000000000000000000000000000000000000000000001ffffffffffff
0000000000000000000000000000000000000000000000000002000000000000
0000000000000000000000000000000000000000000000000003ffffffffffff
0000000000000000000000000000000000000000000000000004000000000000
0000000000000000000000000000000000000000000000000007ffffffffffff
0000000000000000000000000000000000000000000000000008000000000000
000000000000000000000000000000000000000000000000000fffffffffffff
0000000000000000000000000000000000000000000000000010000000000000
000000000000000000000000000000000000000000000000001fffffffffffff
0000000000000000000000000000000000000000000000000020000000000000
000000000000000000000000000000000000000000000000003fffffffffffff
0000000000000000000000000000000000000000000000000040000000000000
000000000000000000000000000000000000000000000000007fffffffffffff
0000000000000000000000000000000000000000000000000080000000000000
00000000000000000000000000000000000000000000000000ff000000000000
00000000000000000000000000000000000000000000000000ffffffffffffff
0000000000000000000000000000000000000000000000000100000000000000
00000000000000000000000000000000000000000000000001ffffffffffffff
0000000000000000000000000000000000000000000000000200000000000000
00000000000000000000000000000000000000000000000003ffffffffffffff
0000000000000000000000000000000000000000000000000400000000000000
00000000000000000000000000000000000000000000000007ffffffffffffff
0000000000000000000000000000000000000000000000000800000000000000
0000000000000000000000000000000000000000000000000fffffffffffffff
0000000000000000000000000000000000000000000000001000000000000000
0000000000000000000000000000000000000000000000001fffffffffffffff
0000000000000000000000000000000000000000000000002000000000000000
0000000000000000000000000000000000000000000000003fffffffffffffff
0000000000000000000000000000000000000000000000004000000000000000
0000000000000000000000000000000000000000000000007fffffffffffffff
0000000000000000000000000000000000000000000000008000000000000000
000000000000000000000000000000000000000000000000ff00000000000000
000000000000000000000000000000000000000000000000ffffffffffffffff
0000000000000000000000000000000000000000000000010000000000000000
000000000000000000000000000000000000000000000001ffffffffffffffff
0000000000000000000000000000000000000000000000020000000000000000
000000000000000000000000000000000000000000000003ffffffffffffffff
0000000000000000000000000000000000000000000000040000000000000000
000000000000000000000000000000000000000000000007ffffffffffffffff
0000000000000000000000000000000000000000000000080000000000000000
00000000000000000000000000000000000000000000000fffffffffffffffff
0000000000000000000000000000000000000000000000100000000000000000
00000000000000000000000000000000000000000000001fffffffffffffffff
0000000000000000000000000000000000000000000000200000000000000000
00000000000000000000000000000000000000000000003fffffffffffffffff
0000000000000000000000000000000000000000000000400000000000000000
00000000000000000000000000000000000000000000007fffffffffffffffff
0000000000000000000000000000000000000000000000800000000000000000
0000000000000000000000000000000000000000000000ff0000000000000000
0000000000000000000000000000000000000000000000ffffffffffffffffff
0000000000000000000000000000000000000000000001000000000000000000
0000000000000000000000000000000000000000000001ffffffffffffffffff
0000000000000000000000000000000000000000000002000000000000000000
0000000000000000000000000000000000000000000003ffffffffffffffffff
0000000000000000000000000000000000000000000004000000000000000000
0000000000000000000000000000000000000000000007ffffffffffffffffff
0000000000000000000000000000000000000000000008000000000000000000
000000000000000000000000000000000000000000000fffffffffffffffffff
0000000000000000000000000000000000000000000010000000000000000000
000000000000000000000000000000000000000000001fffffffffffffffffff
0000000000000000000000000000000000000000000020000000000000000000
000000000000000000000000000000000000000000003fffffffffffffffffff
0000000000000000000000000000000000000000000040000000000000000000
000000000000000000000000000000000000000000007fffffffffffffffffff
0000000000000000000000000000000000000000000080000000000000000000
00000000000000000000000000000000000000000000ff000000000000000000
00000000000000000000000000000000000000000000ffffffffffffffffffff
0000000000000000000000000000000000000000000100000000000000000000
00000000000000000000000000000000000000000001ffffffffffffffffffff
0000000000000000000000000000000000000000000200000000000000000000
00000000000000000000000000000000000000000003ffffffffffffffffffff
0000000000000000000000000000000000000000000400000000000000000000
00000000000000000000000000000000000000000007ffffffffffffffffffff
0000000000000000000000000000000000000000000800000000000000000000
0000000000000000000000000000000000000000000fffffffffffffffffffff
0000000000000000000000000000000000000000001000000000000000000000
0000000000000000000000000000000000000000001fffffffffffffffffffff
0000000000000000000000000000000000000000002000000000000000000000
0000000000000000000000000000000000000000003fffffffffffffffffffff
0000000000000000000000000000000000000000004000000000000000000000
0000000000000000000000000000000000000000007fffffffffffffffffffff
0000000000000000000000000000000000000000008000000000000000000000
000000000000000000000000000000000000000000ff00000000000000000000
000000000000000000000000000000000000000000ffffffffffffffffffffff
0000000000000000000000000000000000000000010000000000000000000000
000000000000000000000000000000000000000001ffffffffffffffffffffff
0000000000000000000000000000000000000000020000000000000000000000
000000000000000000000000000000000000000003ffffffffffffffffffffff
0000000000000000000000000000000000000000040000000000000000000000
000000000000000000000000000000000000000007ffffffffffffffffffffff
0000000000000000000000000000000000000000080000000000000000000000
00000000000000000000000000000000000000000fffffffffffffffffffffff
0000000000000000000000000000000000000000100000000000000000000000
00000000000000000000000000000000000000001fffffffffffffffffffffff
0000000000000000000000000000000000000000200000000000000000000000
00000000000000000000000000000000000000003fffffffffffffffffffffff
0000000000000000000000000000000000000000400000000000000000000000
00000000000000000000000000000000000000007fffffffffffffffffffffff
0000000000000000000000000000000000000000800000000000000000000000
0000000000000000000000000000000000000000ff0000000000000000000000
0000000000000000000000000000000000000000ffffffffffffffffffffffff
0000000000000000000000000000000000000001000000000000000000000000
0000000000000000000000000000000000000001ffffffffffffffffffffffff
0000000000000000000000000000000000000002000000000000000000000000
0000000000000000000000000000000000000003ffffffffffffffffffffffff
0000000000000000000000000000000000000004000000000000000000000000
0000000000000000000000000000000000000007ffffffffffffffffffffffff
0000000000000000000000000000000000000008000000000000000000000000
000000000000000000000000000000000000000fffffffffffffffffffffffff
0000000000000000000000000000000000000010000000000000000000000000
000000000000000000000000000000000000001fffffffffffffffffffffffff
0000000000000000000000000000000000000020000000000000000000000000
000000000000000000000000000000000000003fffffffffffffffffffffffff
0000000000000000000000000000000000000040000000000000000000000000
000000000000000000000000000000000000007fffffffffffffffffffffffff
0000000000000000000000000000000000000080000000000000000000000000
00000000000000000000000000000000000000ff000000000000000000000000
00000000000000000000000000000000000000ffffffffffffffffffffffffff
0000000000000000000000000000000000000100000000000000000000000000
00000000000000000000000000000000000001ffffffffffffffffffffffffff
0000000000000000000000000000000000000200000000000000000000000000
00000000000000000000000000000000000003ffffffffffffffffffffffffff
0000000000000000000000000000000000000400000000000000000000000000
00000000000000000000000000000000000007ffffffffffffffffffffffffff
0000000000000000000000000000000000000800000000000000000000000000
0000000000000000000000000000000000000fffffffffffffffffffffffffff
0000000000000000000000000000000000001000000000000000000000000000
0000000000000000000000000000000000001fffffffffffffffffffffffffff
0000000000000000000000000000000000002000000000000000000000000000
0000000000000000000000000000000000003fffffffffffffffffffffffffff
0000000000000000000000000000000000004000000000000000000000000000
0000000000000000000000000000000000007fffffffffffffffffffffffffff
0000000000000000000000000000000000008000000000000000000000000000
000000000000000000000000000000000000ff00000000000000000000000000
000000000000000000000000000000000000ffffffffffffffffffffffffffff
0000000000000000000000000000000000010000000000000000000000000000
000000000000000000000000000000000001ffffffffffffffffffffffffffff
0000000000000000000000000000000000020000000000000000000000000000
000000000000000000000000000000000003ffffffffffffffffffffffffffff
0000000000000000000000000000000000040000000000000000000000000000
000000000000000000000000000000000007ffffffffffffffffffffffffffff
0000000000000000000000000000000000080000000000000000000000000000
00000000000000000000000000000000000fffffffffffffffffffffffffffff
0000000000000000000000000000000000100000000000000000000000000000
00000000000000000000000000000000001fffffffffffffffffffffffffffff
0000000000000000000000000000000000200000000000000000000000000000
00000000000000000000000000000000003fffffffffffffffffffffffffffff
0000000000000000000000000000000000400000000000000000000000000000
00000000000000000000000000000000007fffffffffffffffffffffffffffff
0000000000000000000000000000000000800000000000000000000000000000
0000000000000000000000000000000000ff0000000000000000000000000000
0000000000000000000000000000000000ffffffffffffffffffffffffffffff
0000000000000000000000000000000001000000000000000000000000000000
0000000000000000000000000000000001ffffffffffffffffffffffffffffff
0000000000000000000000000000000002000000000000000000000000000000
0000000000000000000000000000000003ffffffffffffffffffffffffffffff
0000000000000000000000000000000004000000000000000000000000000000
0000000000000000000000000000000007ffffffffffffffffffffffffffffff
0000000000000000000000000000000008000000000000000000000000000000
000000000000000000000000000000000fffffffffffffffffffffffffffffff
0000000000000000000000000000000010000000000000000000000000000000
000000000000000000000000000000001fffffffffffffffffffffffffffffff
0000000000000000000000000000000020000000000000000000000000000000
000000000000000000000000000000003fffffffffffffffffffffffffffffff
0000000000000000000000000000000040000000000000000000000000000000
000000000000000000000000000000007fffffffffffffffffffffffffffffff
0000000000000000000000000000000080000000000000000000000000000000
00000000000000000000000000000000ff000000000000000000000000000000
00000000000000000000000000000000ffffffffffffffffffffffffffffffff
0000000000000000000000000000000100000000000000000000000000000000
00000000000000000000000000000001ffffffffffffffffffffffffffffffff
0000000000000000000000000000000200000000000000000000000000000000
00000000000000000000000000000003ffffffffffffffffffffffffffffffff
0000000000000000000000000000000400000000000000000000000000000000
00000000000000000000000000000007ffffffffffffffffffffffffffffffff
0000000000000000000000000000000800000000000000000000000000000000
0000000000000000000000000000000fffffffffffffffffffffffffffffffff
0000000000000000000000000000001000000000000000000000000000000000
0000000000000000000000000000001fffffffffffffffffffffffffffffffff
0000000000000000000000000000002000000000000000000000000000000000
0000000000000000000000000000003fffffffffffffffffffffffffffffffff
0000000000000000000000000000004000000000000000000000000000000000
0000000000000000000000000000007fffffffffffffffffffffffffffffffff
0000000000000000000000000000008000000000000000000000000000000000
000000000000000000000000000000ff00000000000000000000000000000000
000000000000000000000000000000ffffffffffffffffffffffffffffffffff
0000000000000000000000000000010000000000000000000000000000000000
000000000000000000000000000001ffffffffffffffffffffffffffffffffff
0000000000000000000000000000020000000000000000000000000000000000
000000000000000000000000000003ffffffffffffffffffffffffffffffffff
0000000000000000000000000000040000000000000000000000000000000000
000000000000000000000000000007ffffffffffffffffffffffffffffffffff
0000000000000000000000000000080000000000000000000000000000000000
00000000000000000000000000000fffffffffffffffffffffffffffffffffff
0000000000000000000000000000100000000000000000000000000000000000
00000000000000000000000000001fffffffffffffffffffffffffffffffffff
0000000000000000000000000000200000000000000000000000000000000000
00000000000000000000000000003fffffffffffffffffffffffffffffffffff
0000000000000000000000000000400000000000000000000000000000000000
00000000000000000000000000007fffffffffffffffffffffffffffffffffff
0000000000000000000000000000800000000000000000000000000000000000
0000000000000000000000000000ff0000000000000000000000000000000000
0000000000000000000000000000ffffffffffffffffffffffffffffffffffff
0000000000000000000000000001000000000000000000000000000000000000
0000000000000000000000000001ffffffffffffffffffffffffffffffffffff
0000000000000000000000000002000000000000000000000000000000000000
0000000000000000000000000003ffffffffffffffffffffffffffffffffffff
0000000000000000000000000004000000000000000000000000000000000000
0000000000000000000000000007ffffffffffffffffffffffffffffffffffff
0000000000000000000000000008000000000000000000000000000000000000
000000000000000000000000000fffffffffffffffffffffffffffffffffffff
0000000000000000000000000010000000000000000000000000000000000000
000000000000000000000000001fffffffffffffffffffffffffffffffffffff
0000000000000000000000000020000000000000000000000000000000000000
000000000000000000000000003fffffffffffffffffffffffffffffffffffff
0000000000000000000000000040000000000000000000000000000000000000
000000000000000000000000007fffffffffffffffffffffffffffffffffffff
0000000000000000000000000080000000000000000000000000000000000000
00000000000000000000000000ff000000000000000000000000000000000000
00000000000000000000000000ffffffffffffffffffffffffffffffffffffff
0000000000000000000000000100000000000000000000000000000000000000
00000000000000000000000001ffffffffffffffffffffffffffffffffffffff
0000000000000000000000000200000000000000000000000000000000000000
00000000000000000000000003ffffffffffffffffffffffffffffffffffffff
0000000000000000000000000400000000000000000000000000000000000000
00000000000000000000000007ffffffffffffffffffffffffffffffffffffff
0000000000000000000000000800000000000000000000000000000000000000
0000000000000000000000000fffffffffffffffffffffffffffffffffffffff
0000000000000000000000001000000000000000000000000000000000000000
0000000000000000000000001fffffffffffffffffffffffffffffffffffffff
0000000000000000000000002000000000000000000000000000000000000000
0000000000000000000000003fffffffffffffffffffffffffffffffffffffff
0000000000000000000000004000000000000000000000000000000000000000
0000000000000000000000007fffffffffffffffffffffffffffffffffffffff
0000000000000000000000008000000000000000000000000000000000000000
000000000000000000000000ff00000000000000000000000000000000000000
000000000000000000000000ffffffffffffffffffffffffffffffffffffffff
0000000000000000000000010000000000000000000000000000000000000000
000000000000000000000001ffffffffffffffffffffffffffffffffffffffff
0000000000000000000000020000000000000000000000000000000000000000
000000000000000000000003ffffffffffffffffffffffffffffffffffffffff
0000000000000000000000040000000000000000000000000000000000000000
000000000000000000000007ffffffffffffffffffffffffffffffffffffffff
0000000000000000000000080000000000000000000000000000000000000000
00000000000000000000000fffffffffffffffffffffffffffffffffffffffff
0000000000000000000000100000000000000000000000000000000000000000
00000000000000000000001fffffffffffffffffffffffffffffffffffffffff
0000000000000000000000200000000000000000000000000000000000000000
00000000000000000000003fffffffffffffffffffffffffffffffffffffffff
0000000000000000000000400000000000000000000000000000000000000000
00000000000000000000007fffffffffffffffffffffffffffffffffffffffff
0000000000000000000000800000000000000000000000000000000000000000
0000000000000000000000ff0000000000000000000000000000000000000000
0000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
0000000000000000000001000000000000000000000000000000000000000000
0000000000000000000001ffffffffffffffffffffffffffffffffffffffffff
0000000000000000000002000000000000000000000000000000000000000000
0000000000000000000003ffffffffffffffffffffffffffffffffffffffffff
0000000000000000000004000000000000000000000000000000000000000000
0000000000000000000007ffffffffffffffffffffffffffffffffffffffffff
0000000000000000000008000000000000000000000000000000000000000000
000000000000000000000fffffffffffffffffffffffffffffffffffffffffff
0000000000000000000010000000000000000000000000000000000000000000
000000000000000000001fffffffffffffffffffffffffffffffffffffffffff
0000000000000000000020000000000000000000000000000000000000000000
000000000000000000003fffffffffffffffffffffffffffffffffffffffffff
0000000000000000000040000000000000000000000000000000000000000000
000000000000000000007fffffffffffffffffffffffffffffffffffffffffff
0000000000000000000080000000000000000000000000000000000000000000
00000000000000000000ff000000000000000000000000000000000000000000
00000000000000000000ffffffffffffffffffffffffffffffffffffffffffff
0000000000000000000100000000000000000000000000000000000000000000
00000000000000000001ffffffffffffffffffffffffffffffffffffffffffff
0000000000000000000200000000000000000000000000000000000000000000
00000000000000000003ffffffffffffffffffffffffffffffffffffffffffff
0000000000000000000400000000000000000000000000000000000000000000
00000000000000000007ffffffffffffffffffffffffffffffffffffffffffff
0000000000000000000800000000000000000000000000000000000000000000
0000000000000000000fffffffffffffffffffffffffffffffffffffffffffff
0000000000000000001000000000000000000000000000000000000000000000
0000000000000000001fffffffffffffffffffffffffffffffffffffffffffff
0000000000000000002000000000000000000000000000000000000000000000
0000000000000000003fffffffffffffffffffffffffffffffffffffffffffff
0000000000000000004000000000000000000000000000000000000000000000
0000000000000000007fffffffffffffffffffffffffffffffffffffffffffff
0000000000000000008000000000000000000000000000000000000000000000
000000000000000000ff00000000000000000000000000000000000000000000
000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff
0000000000000000010000000000000000000000000000000000000000000000
000000000000000001ffffffffffffffffffffffffffffffffffffffffffffff
0000000000000000020000000000000000000000000000000000000000000000
000000000000000003ffffffffffffffffffffffffffffffffffffffffffffff
0000000000000000040000000000000000000000000000000000000000000000
000000000000000007ffffffffffffffffffffffffffffffffffffffffffffff
0000000000000000080000000000000000000000000000000000000000000000
00000000000000000fffffffffffffffffffffffffffffffffffffffffffffff
0000000000000000100000000000000000000000000000000000000000000000
00000000000000001fffffffffffffffffffffffffffffffffffffffffffffff
0000000000000000200000000000000000000000000000000000000000000000
00000000000000003fffffffffffffffffffffffffffffffffffffffffffffff
0000000000000000400000000000000000000000000000000000000000000000
00000000000000007fffffffffffffffffffffffffffffffffffffffffffffff
0000000000000000800000000000000000000000000000000000000000000000
0000000000000000ff0000000000000000000000000000000000000000000000
0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff
0000000000000001000000000000000000000000000000000000000000000000
0000000000000001ffffffffffffffffffffffffffffffffffffffffffffffff
0000000000000002000000000000000000000000000000000000000000000000
0000000000000003ffffffffffffffffffffffffffffffffffffffffffffffff
0000000000000004000000000000000000000000000000000000000000000000
0000000000000007ffffffffffffffffffffffffffffffffffffffffffffffff
0000000000000008000000000000000000000000000000000000000000000000
000000000000000fffffffffffffffffffffffffffffffffffffffffffffffff
0000000000000010000000000000000000000000000000000000000000000000
000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff
0000000000000020000000000000000000000000000000000000000000000000
000000000000003fffffffffffffffffffffffffffffffffffffffffffffffff
0000000000000040000000000000000000000000000000000000000000000000
000000000000007fffffffffffffffffffffffffffffffffffffffffffffffff
0000000000000080000000000000000000000000000000000000000000000000
00000000000000ff000000000000000000000000000000000000000000000000
00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000000100000000000000000000000000000000000000000000000000
00000000000001ffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000000200000000000000000000000000000000000000000000000000
00000000000003ffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000000400000000000000000000000000000000000000000000000000
00000000000007ffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000000800000000000000000000000000000000000000000000000000
0000000000000fffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000001000000000000000000000000000000000000000000000000000
0000000000001fffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000002000000000000000000000000000000000000000000000000000
0000000000003fffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000004000000000000000000000000000000000000000000000000000
0000000000007fffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000008000000000000000000000000000000000000000000000000000
000000000000ff00000000000000000000000000000000000000000000000000
000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000010000000000000000000000000000000000000000000000000000
000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000020000000000000000000000000000000000000000000000000000
000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000040000000000000000000000000000000000000000000000000000
000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000080000000000000000000000000000000000000000000000000000
00000000000fffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000100000000000000000000000000000000000000000000000000000
00000000001fffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000200000000000000000000000000000000000000000000000000000
00000000003fffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000400000000000000000000000000000000000000000000000000000
00000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000000800000000000000000000000000000000000000000000000000000
0000000000ff0000000000000000000000000000000000000000000000000000
0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000001000000000000000000000000000000000000000000000000000000
0000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000002000000000000000000000000000000000000000000000000000000
0000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000004000000000000000000000000000000000000000000000000000000
0000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000008000000000000000000000000000000000000000000000000000000
000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000010000000000000000000000000000000000000000000000000000000
000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000020000000000000000000000000000000000000000000000000000000
000000003fffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000040000000000000000000000000000000000000000000000000000000
000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000080000000000000000000000000000000000000000000000000000000
00000000ff000000000000000000000000000000000000000000000000000000
00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000100000000000000000000000000000000000000000000000000000000
00000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000200000000000000000000000000000000000000000000000000000000
00000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000400000000000000000000000000000000000000000000000000000000
00000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000000800000000000000000000000000000000000000000000000000000000
0000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000001000000000000000000000000000000000000000000000000000000000
0000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000002000000000000000000000000000000000000000000000000000000000
0000003fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000004000000000000000000000000000000000000000000000000000000000
0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000008000000000000000000000000000000000000000000000000000000000
000000ff00000000000000000000000000000000000000000000000000000000
000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000010000000000000000000000000000000000000000000000000000000000
000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000020000000000000000000000000000000000000000000000000000000000
000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000040000000000000000000000000000000000000000000000000000000000
000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000080000000000000000000000000000000000000000000000000000000000
00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000100000000000000000000000000000000000000000000000000000000000
00001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000200000000000000000000000000000000000000000000000000000000000
00003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000400000000000000000000000000000000000000000000000000000000000
00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0000800000000000000000000000000000000000000000000000000000000000
0000ff0000000000000000000000000000000000000000000000000000000000
0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0001000000000000000000000000000000000000000000000000000000000000
0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0002000000000000000000000000000000000000000000000000000000000000
0003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0004000000000000000000000000000000000000000000000000000000000000
0007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0008000000000000000000000000000000000000000000000000000000000000
000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0010000000000000000000000000000000000000000000000000000000000000
001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0020000000000000000000000000000000000000000000000000000000000000
003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0040000000000000000000000000000000000000000000000000000000000000
007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0080000000000000000000000000000000000000000000000000000000000000
00ff000000000000000000000000000000000000000000000000000000000000
00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0100000000000000000000000000000000000000000000000000000000000000
01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0200000000000000000000000000000000000000000000000000000000000000
03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0400000000000000000000000000000000000000000000000000000000000000
07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
0800000000000000000000000000000000000000000000000000000000000000
0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
1000000000000000000000000000000000000000000000000000000000000000
1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2000000000000000000000000000000000000000000000000000000000000000
3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
4000000000000000000000000000000000000000000000000000000000000000
7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
8000000000000000000000000000000000000000000000000000000000000000
bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
c000000000000000000000000000000000000000000000000000000000000000
dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
e000000000000000000000000000000000000000000000000000000000000000
efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
f000000000000000000000000000000000000000000000000000000000000000
f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
f800000000000000000000000000000000000000000000000000000000000000
fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fc00000000000000000000000000000000000000000000000000000000000000
fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fe00000000000000000000000000000000000000000000000000000000000000
feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ff00000000000000000000000000000000000000000000000000000000000000
ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ff80000000000000000000000000000000000000000000000000000000000000
ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffc0000000000000000000000000000000000000000000000000000000000000
ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffe0000000000000000000000000000000000000000000000000000000000000
ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fff0000000000000000000000000000000000000000000000000000000000000
fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fff8000000000000000000000000000000000000000000000000000000000000
fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffc000000000000000000000000000000000000000000000000000000000000
fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffe000000000000000000000000000000000000000000000000000000000000
fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffff000000000000000000000000000000000000000000000000000000000000
ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffff800000000000000000000000000000000000000000000000000000000000
ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffc00000000000000000000000000000000000000000000000000000000000
ffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffe00000000000000000000000000000000000000000000000000000000000
ffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffff00000000000000000000000000000000000000000000000000000000000
fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffff80000000000000000000000000000000000000000000000000000000000
fffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffc0000000000000000000000000000000000000000000000000000000000
fffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffe0000000000000000000000000000000000000000000000000000000000
fffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffff0000000000000000000000000000000000000000000000000000000000
ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffff8000000000000000000000000000000000000000000000000000000000
ffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffc000000000000000000000000000000000000000000000000000000000
ffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffe000000000000000000000000000000000000000000000000000000000
ffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffff000000000000000000000000000000000000000000000000000000000
fffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffff800000000000000000000000000000000000000000000000000000000
fffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffc00000000000000000000000000000000000000000000000000000000
fffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffe00000000000000000000000000000000000000000000000000000000
fffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffff00000000000000000000000000000000000000000000000000000000
ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffff80000000000000000000000000000000000000000000000000000000
ffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffc0000000000000000000000000000000000000000000000000000000
ffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffe0000000000000000000000000000000000000000000000000000000
ffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffff0000000000000000000000000000000000000000000000000000000
fffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffff8000000000000000000000000000000000000000000000000000000
fffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffc000000000000000000000000000000000000000000000000000000
fffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffe000000000000000000000000000000000000000000000000000000
fffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffff000000000000000000000000000000000000000000000000000000
ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffff800000000000000000000000000000000000000000000000000000
ffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffc00000000000000000000000000000000000000000000000000000
ffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffe00000000000000000000000000000000000000000000000000000
ffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffff00000000000000000000000000000000000000000000000000000
fffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffff80000000000000000000000000000000000000000000000000000
fffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffc0000000000000000000000000000000000000000000000000000
fffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffe0000000000000000000000000000000000000000000000000000
fffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffff0000000000000000000000000000000000000000000000000000
ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffff8000000000000000000000000000000000000000000000000000
ffffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffc000000000000000000000000000000000000000000000000000
ffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffe000000000000000000000000000000000000000000000000000
ffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffff000000000000000000000000000000000000000000000000000
fffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffff800000000000000000000000000000000000000000000000000
fffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffc00000000000000000000000000000000000000000000000000
fffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffe00000000000000000000000000000000000000000000000000
fffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffff00000000000000000000000000000000000000000000000000
ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffff80000000000000000000000000000000000000000000000000
ffffffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffc0000000000000000000000000000000000000000000000000
ffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffe0000000000000000000000000000000000000000000000000
ffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffff0000000000000000000000000000000000000000000000000
fffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffff8000000000000000000000000000000000000000000000000
fffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffc000000000000000000000000000000000000000000000000
fffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffe000000000000000000000000000000000000000000000000
fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffff000000000000000000000000000000000000000000000000
ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffff800000000000000000000000000000000000000000000000
ffffffffffffffffbfffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffc00000000000000000000000000000000000000000000000
ffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffe00000000000000000000000000000000000000000000000
ffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffff00000000000000000000000000000000000000000000000
fffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffff80000000000000000000000000000000000000000000000
fffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffc0000000000000000000000000000000000000000000000
fffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffe0000000000000000000000000000000000000000000000
fffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffff0000000000000000000000000000000000000000000000
ffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffff8000000000000000000000000000000000000000000000
ffffffffffffffffffbfffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffc000000000000000000000000000000000000000000000
ffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffe000000000000000000000000000000000000000000000
ffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffff000000000000000000000000000000000000000000000
fffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffff800000000000000000000000000000000000000000000
fffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffc00000000000000000000000000000000000000000000
fffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffe00000000000000000000000000000000000000000000
fffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffff00000000000000000000000000000000000000000000
ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffff80000000000000000000000000000000000000000000
ffffffffffffffffffffbfffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffc0000000000000000000000000000000000000000000
ffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffe0000000000000000000000000000000000000000000
ffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffff0000000000000000000000000000000000000000000
fffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffff8000000000000000000000000000000000000000000
fffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffc000000000000000000000000000000000000000000
fffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffe000000000000000000000000000000000000000000
fffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffff000000000000000000000000000000000000000000
ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffff800000000000000000000000000000000000000000
ffffffffffffffffffffffbfffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffc00000000000000000000000000000000000000000
ffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffe00000000000000000000000000000000000000000
ffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffff00000000000000000000000000000000000000000
fffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffff80000000000000000000000000000000000000000
fffffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffc0000000000000000000000000000000000000000
fffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffe0000000000000000000000000000000000000000
fffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffff0000000000000000000000000000000000000000
ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffff8000000000000000000000000000000000000000
ffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffc000000000000000000000000000000000000000
ffffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffe000000000000000000000000000000000000000
ffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffff000000000000000000000000000000000000000
fffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffff800000000000000000000000000000000000000
fffffffffffffffffffffffffbffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffc00000000000000000000000000000000000000
fffffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffe00000000000000000000000000000000000000
fffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffff00000000000000000000000000000000000000
ffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffff80000000000000000000000000000000000000
ffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffc0000000000000000000000000000000000000
ffffffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffe0000000000000000000000000000000000000
ffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffff0000000000000000000000000000000000000
fffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffff8000000000000000000000000000000000000
fffffffffffffffffffffffffffbffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffc000000000000000000000000000000000000
fffffffffffffffffffffffffffdffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffe000000000000000000000000000000000000
fffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffff000000000000000000000000000000000000
ffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffff800000000000000000000000000000000000
ffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffc00000000000000000000000000000000000
ffffffffffffffffffffffffffffdfffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffe00000000000000000000000000000000000
ffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffff00000000000000000000000000000000000
fffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffff80000000000000000000000000000000000
fffffffffffffffffffffffffffffbffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffc0000000000000000000000000000000000
fffffffffffffffffffffffffffffdffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffe0000000000000000000000000000000000
fffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffff0000000000000000000000000000000000
ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffff8000000000000000000000000000000000
ffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffc000000000000000000000000000000000
ffffffffffffffffffffffffffffffdfffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffe000000000000000000000000000000000
ffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffff000000000000000000000000000000000
fffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffff800000000000000000000000000000000
fffffffffffffffffffffffffffffffbffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffc00000000000000000000000000000000
fffffffffffffffffffffffffffffffdffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffe00000000000000000000000000000000
fffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff00000000000000000000000000000000
ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff80000000000000000000000000000000
ffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffc0000000000000000000000000000000
ffffffffffffffffffffffffffffffffdfffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffe0000000000000000000000000000000
ffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffff0000000000000000000000000000000
fffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffff8000000000000000000000000000000
fffffffffffffffffffffffffffffffffbffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffc000000000000000000000000000000
fffffffffffffffffffffffffffffffffdffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffe000000000000000000000000000000
fffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff000000000000000000000000000000
ffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffff800000000000000000000000000000
ffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffc00000000000000000000000000000
ffffffffffffffffffffffffffffffffffdfffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffe00000000000000000000000000000
ffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffff00000000000000000000000000000
fffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffff80000000000000000000000000000
fffffffffffffffffffffffffffffffffffbffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffc0000000000000000000000000000
fffffffffffffffffffffffffffffffffffdffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffe0000000000000000000000000000
fffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffff0000000000000000000000000000
ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffff8000000000000000000000000000
ffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffc000000000000000000000000000
ffffffffffffffffffffffffffffffffffffdfffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffe000000000000000000000000000
ffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffff000000000000000000000000000
fffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffff800000000000000000000000000
fffffffffffffffffffffffffffffffffffffbffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffc00000000000000000000000000
fffffffffffffffffffffffffffffffffffffdffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffe00000000000000000000000000
fffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffff00000000000000000000000000
ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffff80000000000000000000000000
ffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffc0000000000000000000000000
ffffffffffffffffffffffffffffffffffffffdfffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffe0000000000000000000000000
ffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffff0000000000000000000000000
fffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffff8000000000000000000000000
fffffffffffffffffffffffffffffffffffffffbffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffc000000000000000000000000
fffffffffffffffffffffffffffffffffffffffdffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffe000000000000000000000000
fffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffff000000000000000000000000
ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffff800000000000000000000000
ffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffc00000000000000000000000
ffffffffffffffffffffffffffffffffffffffffdfffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffe00000000000000000000000
ffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffff00000000000000000000000
fffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffff80000000000000000000000
fffffffffffffffffffffffffffffffffffffffffbffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffc0000000000000000000000
fffffffffffffffffffffffffffffffffffffffffdffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffe0000000000000000000000
fffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000
ffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff8000000000000000000000
ffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffc000000000000000000000
ffffffffffffffffffffffffffffffffffffffffffdfffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffe000000000000000000000
ffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffff000000000000000000000
fffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffff800000000000000000000
fffffffffffffffffffffffffffffffffffffffffffbffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffc00000000000000000000
fffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffe00000000000000000000
fffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000
ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffff80000000000000000000
ffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffc0000000000000000000
ffffffffffffffffffffffffffffffffffffffffffffdfffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000
ffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000
fffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffff8000000000000000000
fffffffffffffffffffffffffffffffffffffffffffffbffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffc000000000000000000
fffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffe000000000000000000
fffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffff800000000000000000
ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffc00000000000000000
ffffffffffffffffffffffffffffffffffffffffffffffdfffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000
ffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000
fffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffff80000000000000000
fffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000
fffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000
fffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffc000000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000
fffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffff800000000000000
fffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffc00000000000000
fffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000
fffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffc0000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000
fffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000
fffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffc000000000000
fffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000
fffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffff800000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000
fffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000
fffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffc0000000000
fffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000
fffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffc000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000
fffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffff800000000
fffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000
fffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000
fffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000
fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc000000
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0000
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
tinyssh-20240101/crypto-tests/precomp_curve25519.data 0000664 0000000 0000000 00000534030 14544472107 0022255 0 ustar 00root root 0000000 0000000 { 0x2f,0xe5,0x7d,0xa3,0x47,0xcd,0x62,0x43,0x15,0x28,0xda,0xac,0x5f,0xbb,0x29,0x07,0x30,0xff,0xf6,0x84,0xaf,0xc4,0xcf,0xc2,0xed,0x90,0x99,0x5f,0x58,0xcb,0x3b,0x74 },
{ 0xfd,0x33,0x84,0xe1,0x32,0xad,0x02,0xa5,0x6c,0x78,0xf4,0x55,0x47,0xee,0x40,0x03,0x8d,0xc7,0x90,0x02,0xb9,0x0d,0x29,0xed,0x90,0xe0,0x8e,0xee,0x76,0x2a,0xe7,0x15 },
{ 0xad,0x8c,0x48,0xc2,0x67,0x65,0xae,0xa7,0xad,0xc5,0x36,0x28,0x96,0x05,0xc1,0xab,0xea,0x95,0x05,0x00,0x93,0xdb,0xd2,0x18,0xc9,0x6a,0xbd,0x24,0x81,0xa0,0x35,0x65 },
{ 0x99,0x52,0xfb,0x7e,0x53,0x83,0xc5,0x22,0xc9,0x54,0xde,0x94,0xf2,0xe4,0x62,0x0d,0x3e,0x08,0xcd,0x9e,0x72,0x48,0xad,0x23,0x20,0x7f,0x9e,0xf5,0x5c,0x90,0x41,0x44 },
{ 0xec,0x13,0xd2,0x3a,0x17,0xda,0xf1,0x74,0x75,0x0d,0xf7,0xad,0x67,0xa8,0x6a,0x1d,0x4e,0xab,0xec,0x8f,0x51,0x76,0x36,0x60,0x52,0x81,0xc1,0xdb,0x18,0xc6,0x66,0x49 },
{ 0xf6,0x03,0x1b,0xd7,0x59,0x63,0x23,0xfa,0x54,0x00,0x41,0xbd,0x3a,0x63,0x51,0x33,0xe7,0x28,0x78,0x49,0x3e,0x76,0x20,0x04,0x88,0x75,0x88,0x7b,0xdc,0x8b,0x99,0x07 },
{ 0x0b,0xc6,0x8f,0x68,0x72,0x17,0x2f,0x9d,0xa9,0xc3,0x5b,0xe0,0x82,0x76,0xa6,0x36,0xa8,0x04,0x9d,0x44,0x26,0xdc,0xb5,0x06,0x7c,0x56,0xb8,0x11,0x38,0x50,0x4d,0x6a },
{ 0x76,0x46,0x27,0xe0,0x18,0x48,0xbd,0x9c,0x38,0xd4,0x3d,0x7a,0xe4,0x2d,0x32,0x33,0x73,0x27,0x51,0x4a,0xeb,0x5f,0x00,0x00,0x63,0xbb,0x1f,0x5b,0xb9,0xfd,0x9b,0x75 },
{ 0x2a,0xe1,0x19,0xbc,0x7b,0x59,0x49,0x5c,0x8c,0xc1,0x9e,0xfb,0xed,0xfe,0x6f,0x00,0xbb,0xc1,0x0e,0x7d,0x99,0x08,0xd1,0x02,0xa4,0x09,0x44,0xa9,0x44,0xfa,0xa3,0x6e },
{ 0xce,0x08,0x10,0xb0,0x5f,0x29,0xc1,0x67,0x20,0x9e,0xd7,0x6c,0x96,0x8d,0xd5,0x9d,0xe5,0x6e,0x4b,0x1c,0x9e,0xd4,0x70,0x52,0xfb,0x96,0x7b,0xff,0x94,0x31,0x45,0x1d },
{ 0xf3,0x5c,0xa9,0x9a,0xe0,0x11,0x19,0x80,0xc5,0x50,0xe3,0x7d,0xef,0xef,0xc7,0x68,0x5b,0xa1,0x24,0x14,0x38,0x31,0x47,0x06,0x86,0x77,0xf7,0x7d,0xd0,0x78,0x0c,0x52 },
{ 0xad,0xea,0xff,0xf5,0xd8,0x78,0x56,0x59,0x33,0x15,0xc0,0x48,0x41,0x78,0xe8,0xd1,0xc4,0x77,0x7a,0x2a,0xb1,0x6e,0xa1,0x71,0x7a,0x7e,0x2f,0x20,0x99,0x2e,0x9b,0x2c },
{ 0x2f,0xe5,0x7d,0xa3,0x47,0xcd,0x62,0x43,0x15,0x28,0xda,0xac,0x5f,0xbb,0x29,0x07,0x30,0xff,0xf6,0x84,0xaf,0xc4,0xcf,0xc2,0xed,0x90,0x99,0x5f,0x58,0xcb,0x3b,0x74 },
{ 0xad,0xea,0xff,0xf5,0xd8,0x78,0x56,0x59,0x33,0x15,0xc0,0x48,0x41,0x78,0xe8,0xd1,0xc4,0x77,0x7a,0x2a,0xb1,0x6e,0xa1,0x71,0x7a,0x7e,0x2f,0x20,0x99,0x2e,0x9b,0x2c },
{ 0x2f,0xe5,0x7d,0xa3,0x47,0xcd,0x62,0x43,0x15,0x28,0xda,0xac,0x5f,0xbb,0x29,0x07,0x30,0xff,0xf6,0x84,0xaf,0xc4,0xcf,0xc2,0xed,0x90,0x99,0x5f,0x58,0xcb,0x3b,0x74 },
{ 0xad,0xea,0xff,0xf5,0xd8,0x78,0x56,0x59,0x33,0x15,0xc0,0x48,0x41,0x78,0xe8,0xd1,0xc4,0x77,0x7a,0x2a,0xb1,0x6e,0xa1,0x71,0x7a,0x7e,0x2f,0x20,0x99,0x2e,0x9b,0x2c },
{ 0xdc,0xac,0x46,0xcd,0xb9,0xc2,0xb9,0xe9,0x34,0x84,0x04,0x27,0x53,0x8a,0x05,0x75,0xae,0x42,0x1d,0xbb,0x85,0x76,0x47,0xaa,0xcf,0x07,0x57,0x65,0xf0,0xae,0x64,0x43 },
{ 0xb7,0x22,0x15,0xf0,0x6c,0xf3,0x55,0xf6,0xd1,0x42,0xd7,0x68,0xbc,0xc7,0x85,0x1e,0x0b,0x41,0x84,0xb3,0x69,0x9d,0x64,0x9c,0x20,0xfe,0xaa,0x8b,0x26,0x7c,0xf1,0x49 },
{ 0x80,0xee,0xdc,0x7d,0x50,0x6a,0x6f,0x89,0x10,0x5c,0x9e,0xb8,0x25,0x83,0x11,0x4a,0x31,0x60,0x04,0x35,0xda,0xd3,0xe8,0x42,0x16,0xdb,0x2c,0x31,0x6a,0xdd,0xe2,0x56 },
{ 0x0b,0xbb,0xb5,0x7a,0xb3,0xba,0xe0,0x9e,0x3c,0x7e,0x0f,0xc9,0x78,0xc7,0xf7,0xb3,0x90,0x94,0xd0,0x69,0x25,0x5c,0xc5,0x66,0xf5,0xb4,0x85,0x36,0x54,0xe0,0x02,0x2b },
{ 0x83,0x4d,0xdf,0x49,0x28,0xff,0xc8,0x79,0x46,0xfa,0x61,0xf2,0x99,0x90,0x90,0x81,0x1a,0x34,0x14,0x45,0xf7,0xa4,0xdf,0x47,0x9d,0x03,0xc6,0xe5,0x84,0xd1,0x43,0x1c },
{ 0xbf,0xa8,0xbf,0x95,0xbe,0xfd,0x36,0x2f,0x42,0xc4,0xa0,0x81,0x24,0xdb,0xcb,0x35,0x01,0xeb,0xd6,0xcc,0x65,0x01,0x7e,0xf9,0x83,0x2a,0x2c,0x4b,0x86,0xa8,0xbc,0x10 },
{ 0xba,0x11,0xd6,0xc0,0xad,0x11,0x75,0xf7,0xfe,0x4c,0xf0,0x94,0xfc,0xd9,0x62,0xd3,0x7c,0xb0,0x79,0x09,0x8c,0x9f,0xd6,0x6f,0xfc,0x9a,0xcc,0xdc,0xf9,0xaa,0x71,0x70 },
{ 0x7e,0xbc,0x10,0x2a,0xc2,0x33,0x7a,0x7f,0x95,0x2d,0x5b,0x73,0xee,0xfd,0xd9,0x22,0x3b,0x5d,0x94,0x83,0xd0,0xe2,0x13,0xf9,0xa8,0xfc,0x2f,0x94,0x0e,0x30,0x26,0x23 },
{ 0x39,0x86,0xec,0x1f,0x57,0xae,0x8d,0xfc,0x40,0xb9,0x00,0xaa,0x59,0xb0,0x38,0x52,0x98,0xa6,0x63,0x7a,0xdd,0x35,0xef,0x52,0x1b,0x74,0x68,0xb0,0xff,0x38,0x16,0x49 },
{ 0x0e,0x1d,0x6f,0x15,0xfb,0x3b,0x4d,0xc4,0xb4,0xf9,0x8d,0xe1,0x9e,0xac,0xca,0x65,0xa4,0xc0,0x8f,0x7e,0xd7,0x43,0xfa,0xb0,0x49,0xb2,0x84,0xec,0x06,0xd2,0xc3,0x3c },
{ 0xee,0x0a,0xf8,0x9e,0x9a,0xdb,0xbd,0xde,0xc2,0x71,0x3f,0x2f,0xbc,0xf8,0x08,0x33,0x58,0x33,0x1f,0x96,0x3f,0x50,0xe8,0x6f,0x7a,0xbd,0x89,0x67,0x06,0xc2,0x96,0x50 },
{ 0xce,0x12,0x7b,0x99,0x3d,0xec,0x3c,0xfb,0xa5,0x45,0xf6,0x94,0x2c,0xd5,0x19,0x20,0x1c,0x1b,0x95,0x99,0xaf,0x10,0xa7,0x1a,0x59,0x1a,0xb8,0xd8,0xbe,0xb6,0x15,0x5b },
{ 0x28,0x09,0xed,0x72,0x48,0xa6,0x99,0xd7,0x39,0xe2,0xcb,0x8a,0x8b,0xec,0xb7,0xc6,0x7b,0x2a,0xfa,0x93,0x3c,0x7b,0x12,0x28,0x10,0x26,0x3b,0x9a,0xdc,0x75,0xac,0x09 },
{ 0x9f,0xae,0x13,0x65,0x29,0x1e,0xf8,0xc2,0x66,0x2b,0xfb,0x7f,0x8f,0x30,0xf0,0x8d,0x73,0x74,0xb2,0xcf,0xaf,0xea,0xc9,0xcb,0x94,0x6c,0xc9,0x3a,0x1a,0xb9,0x98,0x68 },
{ 0x11,0x73,0xce,0xf0,0x59,0x9a,0xe1,0x20,0xde,0x0d,0x18,0x06,0x90,0xab,0x49,0x90,0x56,0x7c,0x41,0x51,0xbe,0x47,0xd9,0x69,0xac,0x84,0xed,0xc2,0x6c,0x15,0xf2,0x61 },
{ 0x11,0xb6,0x23,0xd5,0xf6,0xb9,0x9b,0xc5,0xf2,0x3b,0x4d,0x87,0x19,0x0c,0xec,0x89,0xc2,0xfc,0x6d,0x57,0x41,0x89,0x9e,0x9d,0xc7,0x89,0x6a,0x9d,0x77,0x7e,0x67,0x35 },
{ 0xb1,0xe8,0x23,0x6b,0x63,0x1e,0x19,0xd8,0x6b,0x28,0xa6,0xff,0x4d,0x5f,0x4b,0x39,0xd4,0x1e,0xdd,0xf4,0x7a,0xb7,0xd3,0xa9,0x57,0x95,0x06,0xde,0xc3,0xda,0x27,0x2a },
{ 0x29,0x6d,0x79,0x1b,0x69,0x24,0xe5,0x41,0x1d,0xb5,0xbe,0xe0,0x3d,0x97,0xa1,0x76,0xe6,0x24,0x1f,0x23,0x8a,0xe3,0x53,0xa8,0x1b,0xe0,0xbb,0xcd,0x74,0x9f,0x34,0x21 },
{ 0x88,0xa6,0x21,0x6b,0x63,0x71,0x04,0xa2,0x66,0xef,0xb1,0x3f,0x6f,0xee,0xfa,0xa1,0xd3,0xce,0x75,0x86,0xff,0xc9,0xb3,0x8c,0xf8,0x42,0xca,0x0f,0x83,0x02,0xaa,0x50 },
{ 0xdc,0x73,0x4f,0xf9,0xf9,0xee,0x7f,0x52,0x33,0x48,0x18,0xfd,0x49,0x45,0x65,0xea,0xb7,0x31,0xaf,0x79,0xdc,0xfb,0x47,0x72,0x65,0x2a,0xc8,0x18,0x3f,0x6b,0x34,0x76 },
{ 0x94,0xc6,0xae,0xa0,0x73,0xdb,0x2e,0x35,0x24,0x25,0x3c,0x1a,0x2f,0x71,0x5f,0x65,0x43,0xd0,0xb2,0x6d,0x1a,0x85,0x39,0x4d,0x0b,0xd9,0xcf,0x2e,0xbf,0xc4,0x77,0x27 },
{ 0xb3,0x8d,0x0f,0xa4,0x0a,0x6a,0x90,0x78,0x85,0x94,0xec,0x6d,0xbd,0x56,0xf5,0x37,0x39,0xe0,0xc3,0xdc,0xb2,0xd8,0x80,0x30,0x03,0x85,0xfb,0x86,0x91,0x1c,0x95,0x2c },
{ 0xd6,0xc8,0x42,0x69,0xe4,0xb0,0x77,0x1d,0x1b,0xb4,0x45,0x74,0xcd,0xee,0xbf,0x00,0x7a,0x3b,0xab,0xe0,0x2a,0xfb,0x9f,0x4b,0x5e,0xa3,0xd0,0x16,0x09,0x80,0xe1,0x03 },
{ 0x89,0x74,0xb4,0xa0,0x88,0xf1,0x10,0xe4,0x85,0xcc,0x9e,0x0b,0x5e,0x8e,0xab,0xc3,0x39,0x26,0xc7,0x00,0x7b,0x18,0xef,0xd0,0xc4,0xc4,0xcb,0x4e,0xdf,0x16,0xc6,0x35 },
{ 0x26,0xc6,0x66,0x4f,0x0f,0x9a,0xb9,0x49,0x12,0x39,0x83,0x88,0x15,0x4f,0xaf,0xd4,0xe5,0x5c,0x9f,0xbc,0xfe,0x94,0x77,0x29,0x13,0xcd,0x03,0xee,0x64,0xbf,0xe3,0x57 },
{ 0x46,0xaa,0xa2,0x16,0xd4,0x9f,0x74,0x7c,0xdf,0x29,0x4c,0xa8,0x64,0x09,0xb5,0x83,0x69,0xc6,0xd2,0x3b,0x7e,0xec,0x2b,0x12,0x3d,0x13,0x30,0xa6,0x33,0x20,0xe4,0x36 },
{ 0x05,0x79,0x56,0x30,0x04,0x27,0x4d,0xc0,0xbd,0x8a,0xde,0x46,0x5f,0xf9,0xae,0x9d,0x23,0x61,0x7e,0x67,0xa9,0xb4,0xbe,0x0d,0xd4,0x97,0xa6,0x4a,0xfc,0x04,0xc2,0x65 },
{ 0x48,0x28,0x2a,0xf7,0xe3,0x92,0x34,0xdb,0x40,0xb8,0x2c,0x62,0x2b,0xb9,0xfe,0x31,0x3b,0xc0,0x0f,0x60,0x61,0xdb,0x48,0x14,0x49,0x77,0x6f,0x62,0x97,0x67,0x0c,0x31 },
{ 0x4e,0x8b,0x52,0x0f,0xdf,0x4a,0xdc,0x43,0x6f,0x12,0xbb,0x12,0x1d,0xcb,0x20,0x44,0x3e,0xc3,0x30,0x81,0x7b,0xba,0x31,0xfe,0x7e,0x25,0xaa,0x88,0x7c,0x78,0x8c,0x3a },
{ 0xdd,0xf2,0xe7,0x31,0xe7,0x3c,0x26,0xbb,0xee,0x76,0xc7,0x32,0xfb,0x89,0x94,0xf7,0x60,0x72,0xf5,0x48,0x8b,0x9b,0x34,0x18,0x69,0x86,0xe2,0x3a,0xe5,0xb8,0x12,0x58 },
{ 0xa4,0xe4,0x68,0x6a,0xd2,0x86,0xa7,0x4a,0xe8,0xcd,0x5f,0x96,0x28,0xf0,0x45,0x3f,0x58,0xf9,0x5e,0x08,0x6a,0xe6,0x00,0xbc,0xba,0x2f,0x76,0x10,0x9b,0xad,0x07,0x46 },
{ 0xf7,0x53,0x8e,0xb1,0xaa,0xbf,0xba,0x8c,0xa3,0x1c,0x0e,0x63,0x60,0x9f,0x9b,0x54,0x56,0x6f,0xda,0x68,0x19,0xb1,0x2d,0xb5,0x8e,0x4e,0x82,0xce,0xc3,0x79,0x44,0x5d },
{ 0x02,0x75,0x91,0x27,0x08,0x9c,0x40,0xe1,0xf2,0x7c,0xde,0xa7,0xbe,0x8d,0xb0,0xa5,0xda,0x4f,0x00,0x3c,0x6a,0x8d,0x95,0x5d,0x91,0xeb,0x16,0xcb,0xbf,0x97,0x21,0x3d },
{ 0xba,0xa1,0x40,0x3f,0x9d,0xa4,0xac,0xa2,0x4e,0x31,0xb0,0x53,0x10,0x1c,0x0a,0x8e,0x63,0x2b,0xf2,0x23,0x0e,0x5d,0x2a,0x2a,0x7c,0x37,0x97,0xac,0x56,0x31,0x36,0x0f },
{ 0x1b,0xf6,0xbf,0x46,0xc7,0x04,0x26,0xa1,0x23,0xbf,0x3e,0xfe,0x06,0x02,0xd8,0x40,0x32,0x53,0xeb,0x84,0xff,0xa0,0x94,0x54,0x78,0xa0,0x83,0xd5,0xef,0xb5,0x26,0x7c },
{ 0xe6,0xe3,0x9f,0x90,0x59,0x46,0xf1,0xd6,0x30,0x53,0x9b,0xb1,0xb3,0x3f,0x70,0x52,0x69,0x2a,0x44,0x5a,0xe8,0x92,0xea,0xf3,0x67,0x32,0xde,0x2a,0x33,0x66,0x9b,0x47 },
{ 0x99,0x11,0x0e,0x20,0xf7,0x6a,0x53,0xd4,0xfa,0xc1,0x97,0xa7,0x20,0x8a,0x6c,0xc7,0xd4,0xe7,0x61,0x11,0xfe,0xfc,0x68,0x84,0x01,0x69,0x72,0x2e,0x54,0x9b,0xd0,0x31 },
{ 0x97,0xd2,0x1b,0x14,0x25,0x1d,0x43,0x0e,0x49,0xb6,0x63,0xa7,0x1d,0xf0,0x2d,0xd8,0xb7,0x31,0x54,0x14,0x13,0xdb,0x62,0x43,0x27,0x3e,0xbd,0xf0,0x01,0x61,0xa6,0x70 },
{ 0xdd,0x16,0x8d,0x2f,0x34,0x42,0x74,0xaf,0x50,0x07,0x83,0xbc,0x3d,0x9f,0x91,0x59,0xde,0xd0,0x86,0x48,0x27,0x7c,0x0a,0x4a,0xb2,0x76,0xe6,0x25,0xe5,0x90,0xde,0x55 },
{ 0xe4,0xee,0xc7,0xe7,0x58,0x95,0x5b,0xb8,0x0d,0x43,0xe2,0xf2,0x3e,0x64,0xa8,0xe2,0x06,0xa6,0x64,0xd4,0x4c,0x09,0xea,0x72,0x9f,0x48,0x50,0xa2,0x72,0x9a,0x02,0x20 },
{ 0x84,0xcd,0x2c,0xf9,0xcc,0x1a,0x4f,0x1c,0x97,0x8e,0xa9,0x2e,0x0c,0x4b,0x23,0xe2,0x3c,0x84,0x21,0xa7,0x78,0x98,0x1f,0x4a,0x72,0x41,0xd1,0x4e,0x83,0x63,0xd1,0x7b },
{ 0xb9,0xd9,0x05,0xef,0xf5,0x1a,0xf1,0xba,0x11,0x21,0x36,0xf8,0x06,0x38,0xb9,0xb9,0xfb,0x2f,0x44,0xd9,0xf4,0x09,0x19,0x9a,0xeb,0xb6,0xd4,0xd3,0x18,0x40,0x97,0x77 },
{ 0x0f,0x34,0x6e,0x25,0xa5,0x1e,0x73,0x9b,0x98,0x04,0xb7,0xcb,0x27,0xfb,0x16,0xfb,0xcf,0x74,0xb5,0x90,0x2f,0xf2,0x1a,0xe8,0xff,0x63,0x1b,0x29,0x9d,0xe8,0x8a,0x7f },
{ 0x5a,0xf4,0xcd,0xd7,0x50,0xab,0x46,0x03,0xdc,0x53,0xad,0xf5,0xb8,0x17,0x5e,0x33,0xf3,0xe5,0xa8,0x7b,0x27,0x62,0x90,0x6d,0x5d,0xaf,0x4b,0x2f,0x71,0xd3,0xb7,0x4f },
{ 0xaf,0x1d,0xf4,0xeb,0x33,0x45,0xf8,0x75,0x48,0x1d,0x30,0x80,0xf8,0x1c,0x93,0x67,0xf7,0x3a,0x84,0x21,0xa0,0xbb,0x4a,0x22,0x66,0x43,0x44,0x8a,0xa9,0xa5,0xef,0x09 },
{ 0xde,0x5b,0x8d,0x4e,0x61,0x24,0x30,0xc8,0xfc,0xd9,0xe2,0xbc,0xa4,0x89,0x32,0xc7,0x9f,0x11,0x05,0x00,0xc0,0x5a,0x68,0x77,0x36,0x23,0x63,0x50,0x1e,0x10,0x07,0x6b },
{ 0x17,0x45,0x2b,0xfb,0xae,0x2c,0x81,0xff,0x0b,0xaf,0x6b,0xaf,0xcd,0x6d,0xd6,0xf4,0x96,0x43,0x7c,0x34,0x43,0xf5,0xeb,0x16,0x98,0x2a,0xb3,0xec,0xb5,0xd2,0x94,0x46 },
{ 0x30,0x95,0xa9,0x14,0x0d,0x84,0xad,0xee,0x88,0x77,0x95,0xf6,0x96,0x6a,0xa9,0x90,0xc3,0xed,0xca,0xbb,0x65,0x8f,0xd4,0xd2,0x17,0xba,0x86,0x33,0x6c,0x99,0x9a,0x30 },
{ 0x70,0x24,0x40,0x73,0x33,0x0a,0xe9,0x47,0x65,0xe1,0x6c,0xda,0xb7,0x0c,0x0b,0x94,0x4c,0x12,0x12,0xe9,0x16,0x88,0x56,0x64,0xca,0xbb,0x18,0x41,0x99,0xda,0xbc,0x29 },
{ 0xf7,0x9c,0xce,0xc7,0x5d,0x66,0xa5,0x6e,0x4e,0xd6,0x30,0x1b,0x63,0x7e,0xb4,0x49,0xee,0x01,0xa6,0x65,0xdd,0x2c,0x78,0xf8,0xd4,0x3e,0x37,0x9f,0xce,0x65,0xe0,0x34 },
{ 0xb1,0xc4,0x94,0xd9,0x2e,0x93,0x33,0x6e,0x8b,0xab,0xda,0x55,0x58,0xf1,0x1b,0x8b,0x83,0x2c,0x93,0xb6,0x8f,0xb8,0xa6,0x91,0x8c,0x8f,0x0b,0x86,0xc1,0xe8,0x85,0x1d },
{ 0xe9,0x1c,0x16,0x22,0x39,0xb1,0xd2,0x1f,0x70,0xd9,0x81,0x43,0xac,0x9b,0xa1,0x5d,0xbd,0x8d,0xe0,0x89,0xba,0x24,0x8f,0xbf,0x45,0xee,0xe5,0x2c,0xfe,0xe0,0xc2,0x2b },
{ 0x89,0xfa,0xb4,0x3f,0xc4,0x56,0xea,0x75,0x14,0x96,0x4e,0x79,0x4c,0x01,0x16,0xd7,0x55,0x35,0xf0,0xb3,0xfb,0xc6,0xdf,0x61,0xb5,0xbf,0x07,0xa5,0xc4,0x76,0x5e,0x05 },
{ 0xed,0x0d,0xe3,0x31,0x92,0xf9,0x11,0x0a,0xb2,0xed,0x5d,0x8d,0x96,0xfc,0x1e,0x53,0x5b,0xb2,0xc5,0xd1,0x6f,0x60,0xdd,0xc6,0x1c,0xfe,0xef,0xf8,0x9b,0x8d,0x79,0x17 },
{ 0x40,0x1c,0x21,0x1c,0xda,0xb2,0x81,0x57,0x4c,0xe7,0xe7,0x6c,0xde,0x69,0x71,0x8b,0x0a,0x23,0xbb,0x39,0xd8,0x99,0x12,0x4e,0xb8,0xdf,0x09,0x4e,0xe8,0x95,0x2e,0x57 },
{ 0xc8,0xb3,0xa6,0xee,0x15,0xb2,0x9a,0x62,0xe3,0xcd,0xd5,0x3f,0xb9,0x4c,0x6f,0x06,0x79,0x1f,0xff,0x21,0xa4,0x36,0xb6,0xdb,0x52,0x88,0x0f,0x1b,0x68,0x24,0x69,0x3c },
{ 0x2f,0x1e,0xf0,0x78,0x2d,0x60,0x8b,0x6d,0x99,0x07,0xac,0x6b,0x53,0x3d,0x5e,0x0c,0x92,0x03,0x02,0xe1,0x02,0xd0,0x68,0xe0,0xac,0xb6,0x27,0x60,0x2c,0xaa,0x3b,0x71 },
{ 0x4c,0x8d,0x11,0xca,0xea,0x52,0xe8,0xdf,0x4f,0xa8,0x6b,0x39,0xc7,0xd4,0x20,0xa8,0xb3,0xd4,0x60,0x8d,0x50,0x15,0xb3,0x82,0x34,0xcb,0x38,0xa4,0xd3,0x84,0x0e,0x2d },
{ 0xc7,0x19,0x36,0xf3,0x78,0xc8,0xb8,0xa0,0x52,0x1f,0x4a,0xc2,0x30,0x99,0x9e,0x18,0x56,0x16,0xdd,0xaf,0x46,0x37,0x99,0xde,0xce,0x6b,0x85,0xaa,0x1c,0x80,0x3d,0x35 },
{ 0x07,0x01,0x88,0xfe,0xc1,0xe6,0xc3,0x12,0xa6,0x6e,0x97,0x96,0x4c,0xd4,0x98,0x10,0x84,0xd3,0x97,0xe3,0x83,0x21,0xbe,0x75,0x10,0x50,0x9f,0xf9,0x10,0x31,0xe7,0x3b },
{ 0x72,0xef,0x9f,0x61,0x99,0x60,0x1f,0x5a,0x3d,0x2d,0x0b,0x7f,0x71,0x25,0xcf,0x30,0xd3,0x23,0xbd,0x3e,0xc7,0x3e,0xe1,0x67,0xcf,0x66,0x17,0xf4,0xf0,0x06,0xd9,0x55 },
{ 0x09,0x96,0x30,0xa6,0x3c,0xfc,0x6c,0x53,0xb6,0x02,0xb7,0xbd,0xa5,0x97,0x28,0xbc,0x43,0xac,0x65,0x85,0xcc,0x56,0x4d,0x0b,0x62,0xb5,0xf0,0xaf,0x8b,0xe9,0x67,0x15 },
{ 0xda,0x50,0x19,0xcc,0x8f,0x78,0x64,0xbd,0x1c,0xaa,0xb6,0xa7,0xc0,0xb8,0xd4,0xcb,0x6d,0xe6,0xc8,0x1f,0xd7,0x67,0x04,0x08,0xd1,0xe7,0xf6,0x9a,0xbd,0xf1,0xde,0x15 },
{ 0xfa,0xbc,0xaa,0xef,0x7c,0xeb,0xfc,0xa7,0x4d,0xf1,0x89,0xed,0x7e,0xd4,0x4a,0xe9,0x7a,0xfb,0xb3,0x91,0xbd,0xf2,0xed,0xd4,0x3f,0xdc,0x7f,0x19,0xa0,0x5f,0x3f,0x0d },
{ 0xdb,0x26,0x78,0xcd,0xc3,0x31,0xc1,0x74,0x65,0x9c,0xea,0x36,0x5b,0x0a,0xa6,0x02,0xcb,0x79,0xe8,0x30,0x83,0xb0,0x89,0x1b,0xc8,0x1a,0x87,0x92,0x78,0x53,0xcf,0x35 },
{ 0x45,0x46,0x47,0x0d,0x8e,0x5a,0x50,0xf8,0x3c,0x69,0x80,0xf5,0x23,0x34,0x58,0x12,0x52,0x7f,0x0d,0xbf,0xf1,0x34,0x34,0x75,0x97,0xf9,0x02,0x9f,0xec,0x47,0xf9,0x30 },
{ 0xd1,0xeb,0x0d,0x89,0x7f,0x2d,0x4e,0xcb,0xc6,0x1c,0xc4,0x84,0x4e,0xe8,0xb3,0xe0,0x15,0xe7,0x48,0x8d,0x96,0xa5,0xd1,0x28,0x60,0xbf,0x22,0xe7,0xd9,0x8c,0x61,0x78 },
{ 0x0b,0xc0,0x3a,0xf2,0x3d,0x79,0x20,0xc3,0xa2,0x1e,0xe4,0x96,0xcc,0x02,0xf9,0x7e,0x20,0x7a,0x60,0xba,0x63,0x3e,0x51,0x8b,0x69,0xdd,0x51,0xf4,0x31,0xe7,0xde,0x28 },
{ 0x68,0x25,0x64,0x37,0x26,0xb6,0x71,0xaa,0xfd,0x80,0xf8,0x72,0xaf,0xbb,0xd6,0x34,0xf8,0xce,0x19,0x57,0x6b,0xba,0x3e,0x47,0x5f,0x4d,0x5c,0x91,0x5b,0xbc,0x35,0x05 },
{ 0x23,0x3a,0xd4,0xad,0x0c,0xde,0x95,0x8f,0x8e,0xa7,0xbd,0x99,0x60,0x18,0x8e,0xa3,0x14,0x55,0x2b,0xbe,0x8e,0x56,0x44,0x27,0xfc,0xe8,0x85,0x28,0xec,0xe4,0xc3,0x48 },
{ 0x21,0xdf,0x6a,0xda,0xbf,0xc4,0xb9,0x01,0x7e,0xc9,0x36,0x93,0xfd,0x63,0xc5,0x34,0x01,0xc7,0x65,0xad,0x4a,0x97,0xcd,0xec,0x3e,0x03,0x62,0x55,0x3a,0xcf,0x03,0x70 },
{ 0x6f,0x8e,0x4a,0x5d,0x95,0xd5,0x70,0x91,0x38,0x8d,0xff,0x62,0x9d,0xb3,0x09,0x33,0x39,0x8a,0x4d,0x21,0xa6,0xfb,0xd0,0x78,0xe2,0x96,0x7a,0xc8,0x49,0x9a,0x88,0x28 },
{ 0x63,0x43,0x34,0x4a,0x05,0x39,0x6e,0xf7,0xeb,0x08,0x24,0x58,0x1d,0x44,0x76,0x16,0x59,0x38,0x1b,0xe0,0xab,0xcd,0x88,0x98,0x98,0x71,0xca,0x53,0x1a,0x89,0x81,0x62 },
{ 0x5d,0x96,0xab,0xee,0x95,0x2c,0x79,0x92,0xe2,0x59,0x2c,0x08,0xdb,0xf7,0x04,0x83,0xc6,0x17,0x8a,0xb9,0x88,0x7e,0x1e,0x88,0xd1,0x9c,0xb2,0x5e,0x22,0x25,0x07,0x6c },
{ 0x01,0x4a,0x91,0xef,0x0b,0x3c,0xa1,0x8f,0xab,0x94,0xd4,0x0f,0x82,0x80,0x11,0x51,0xc7,0x36,0x21,0xc4,0x5c,0x24,0xa8,0x3f,0x51,0xf0,0x98,0xb2,0x3f,0xd1,0x19,0x17 },
{ 0xab,0x7a,0x4f,0x4c,0x96,0xd5,0xdf,0x9c,0x52,0xe7,0x4b,0x7d,0x67,0x41,0xc9,0xc8,0xf3,0x04,0xc0,0x70,0x74,0x42,0x78,0xed,0x93,0x8b,0x73,0x34,0x97,0x7b,0x09,0x27 },
{ 0x6e,0xc3,0xba,0x59,0xfe,0x61,0x73,0xd0,0x2a,0x82,0x9f,0x13,0x2a,0x90,0x9e,0xdc,0x20,0x6a,0x97,0x83,0xa6,0x83,0x3d,0xa9,0xc1,0x35,0x32,0x61,0xbb,0x13,0x70,0x58 },
{ 0xf1,0x91,0x4e,0x81,0xfe,0xb9,0x91,0xdc,0x5b,0xce,0xde,0x23,0xdd,0x26,0xaf,0xb6,0x3b,0x0e,0xc0,0x78,0xe9,0x54,0x31,0x53,0x7d,0x86,0x77,0x13,0xfe,0x14,0x48,0x2b },
{ 0x44,0x13,0xf1,0xe1,0x2b,0x3d,0xaa,0x9a,0x6b,0x68,0x5d,0xe5,0x93,0xc6,0x46,0xd0,0x30,0xf3,0x41,0xd2,0x86,0x8b,0x05,0xd1,0x6a,0xdf,0xbb,0xe4,0x09,0x75,0x8e,0x2b },
{ 0x99,0x0f,0xd6,0xa8,0xb9,0xc7,0xa0,0xc7,0x9a,0xd6,0x20,0xb5,0xe7,0x77,0x75,0x07,0x6c,0x3d,0xe2,0x2b,0x73,0xae,0xde,0x22,0x2e,0x1e,0xe0,0x78,0xa9,0xe5,0x12,0x5b },
{ 0x01,0xdf,0xe9,0x65,0xa0,0x89,0xa4,0xee,0x95,0x42,0xdd,0xc2,0xc9,0xb5,0x56,0xd2,0x3b,0x43,0x85,0xe6,0x04,0x93,0x88,0x23,0x56,0x1c,0x70,0x27,0xf1,0x54,0x73,0x22 },
{ 0x6d,0x74,0x93,0xe0,0x57,0x52,0x62,0x75,0x46,0xf8,0x3a,0x6a,0xa4,0x1d,0x23,0xd8,0x84,0xae,0x10,0x91,0xde,0x49,0x02,0xb5,0xdd,0x1b,0x43,0xfd,0xd5,0x08,0x19,0x6b },
{ 0x32,0x52,0x3d,0x98,0xab,0x15,0x4a,0x44,0x6d,0x15,0xc8,0x31,0x8c,0x7a,0x2e,0xd6,0x6b,0x7e,0x9d,0x5f,0xf9,0xfb,0xe8,0xb4,0xa6,0x44,0x3c,0x01,0x6d,0x58,0x8b,0x17 },
{ 0x34,0xa6,0x2b,0x13,0x67,0x80,0xa0,0x53,0x8a,0xd2,0x9b,0x9e,0x3c,0xa5,0x32,0x59,0x94,0xd2,0x1e,0xca,0xe3,0xee,0x67,0x11,0xef,0xd1,0x34,0x33,0x6a,0xf6,0x44,0x51 },
{ 0x33,0xb3,0x35,0x92,0xd1,0xb1,0x86,0x27,0xf6,0xaf,0x1b,0x6a,0x3d,0x9b,0xe2,0x15,0xd9,0xbe,0x39,0xd3,0xd1,0x7b,0xbe,0x90,0x57,0xae,0x42,0xea,0x92,0x54,0x0a,0x61 },
{ 0x81,0xcd,0x54,0xa4,0x49,0xdd,0x3f,0xda,0xbe,0x18,0xc4,0x3f,0x7d,0x6f,0xa9,0x53,0xb8,0x32,0xca,0xab,0xac,0xf5,0x3f,0x68,0xfa,0x3d,0xde,0x1f,0x8c,0xb5,0x03,0x4a },
{ 0xd2,0xf5,0x34,0xbb,0xfa,0x41,0x87,0x41,0xae,0x8a,0x15,0xb2,0xd7,0x5a,0x80,0xed,0xba,0xf7,0xeb,0xc1,0xff,0x63,0xec,0x68,0x2f,0x85,0x14,0x91,0x11,0x34,0x29,0x65 },
{ 0x66,0x08,0x12,0xb4,0xf7,0x02,0x52,0xbf,0x86,0x6a,0x0f,0x11,0xf4,0x4b,0xe1,0x59,0x0e,0x6a,0x56,0x56,0xe5,0x19,0x94,0x32,0x3c,0x9a,0x70,0x2f,0xed,0x9a,0xbb,0x10 },
{ 0x7a,0x05,0x29,0x73,0x40,0x78,0x68,0x4c,0x03,0xa5,0xde,0xf9,0x80,0x97,0x6e,0x8c,0x2b,0xa1,0x23,0xd6,0xca,0x74,0x56,0xdb,0x35,0xbe,0xb5,0x35,0x24,0xa9,0x06,0x54 },
{ 0xf0,0xc0,0x64,0xd1,0x9d,0xe8,0x60,0x2b,0x60,0xe7,0x3e,0xea,0xfe,0x32,0xb8,0x6f,0xf9,0x54,0x8d,0x2d,0xf8,0x0a,0x2d,0x70,0x69,0xd4,0x5a,0xc9,0x85,0x97,0x8e,0x36 },
{ 0xf5,0x2d,0xba,0x28,0x58,0x64,0x2c,0xb3,0x51,0x5f,0xa5,0x90,0x16,0x5c,0x9c,0x8b,0x15,0x29,0xb3,0x6c,0x70,0xcb,0x09,0xd1,0xdc,0x5c,0x94,0xec,0x46,0x53,0xc6,0x42 },
{ 0x75,0x09,0x0f,0xa5,0xad,0xe1,0xc5,0x56,0x47,0xee,0xff,0x18,0xae,0xbf,0xc8,0x0f,0xbb,0xab,0xc8,0xdc,0x04,0xf9,0x6c,0x57,0xcb,0xbd,0x42,0xbc,0x43,0x78,0xb6,0x3b },
{ 0xba,0x39,0x7a,0x11,0x0e,0x55,0x02,0xdd,0x75,0x69,0x4d,0xf8,0x4c,0xbd,0xac,0x21,0x6f,0x7d,0x74,0xc6,0xb3,0x51,0xf0,0x28,0x44,0xcf,0xb5,0x62,0x8f,0xf7,0x36,0x1e },
{ 0xbd,0xfe,0x4c,0x01,0xd6,0xd9,0x7c,0xc5,0x90,0x8b,0x63,0x3a,0x57,0xac,0x52,0x32,0x4f,0x48,0xe5,0x1c,0xcb,0x9b,0x80,0x05,0x63,0xcf,0x3e,0xc2,0x30,0x35,0x92,0x30 },
{ 0x1c,0x4e,0xe8,0xaf,0xfb,0x88,0x2c,0xe8,0x61,0xe1,0xaa,0xbb,0x54,0x38,0xb1,0xc6,0x43,0x9b,0x84,0x84,0x99,0x26,0x87,0xdf,0x62,0x49,0x4e,0xdd,0x2a,0x9e,0x5e,0x15 },
{ 0x58,0x0a,0xd8,0x02,0xda,0xeb,0x21,0x58,0x35,0x1e,0x2e,0x5f,0xc6,0x3e,0xcd,0xfc,0x9f,0xfe,0x72,0x8c,0xe7,0x15,0x9b,0xf3,0x29,0x7b,0x77,0xbf,0x55,0x35,0x94,0x78 },
{ 0x9a,0x96,0xd4,0xec,0x2a,0x9c,0xe7,0xe3,0xb6,0x71,0x5d,0xf0,0xd3,0xec,0xf9,0x75,0x88,0xe2,0x9b,0xfc,0x3f,0x2e,0xad,0x24,0xe6,0xae,0xba,0x30,0xe3,0x89,0x32,0x36 },
{ 0xfb,0xa4,0xdb,0x97,0x00,0x35,0xe5,0x91,0xe0,0x06,0x14,0x78,0x39,0xac,0x32,0xb2,0xd7,0xeb,0x3d,0x9d,0x87,0x08,0x37,0xcb,0x75,0x16,0xda,0xae,0x9e,0x60,0xdd,0x2f },
{ 0xfc,0x27,0x3c,0x86,0xd5,0xdb,0x2e,0x42,0xd9,0x78,0x2d,0xc4,0x93,0xaa,0x4b,0x6e,0x82,0xc4,0xba,0x27,0x3e,0x51,0x2d,0xc3,0x3a,0xbd,0x49,0xfc,0xab,0xc8,0x71,0x0c },
{ 0x69,0xaf,0xdb,0xf5,0x99,0xc6,0xa3,0xb7,0x15,0x4d,0x8b,0x6d,0x74,0xf4,0xe7,0x97,0x13,0xf4,0x4e,0x55,0xcb,0x56,0xe2,0xdb,0x1b,0x4d,0x20,0x78,0xcf,0x16,0xdd,0x36 },
{ 0xe3,0x22,0x42,0xf5,0x18,0x27,0xd8,0x60,0x5f,0x85,0x08,0xa0,0x24,0xc1,0xd0,0x6e,0x7d,0x5f,0xda,0x94,0xb9,0x2d,0xc8,0x9d,0x94,0xf0,0x82,0xd0,0x4f,0x4f,0x5b,0x69 },
{ 0xb3,0x4a,0x83,0x5a,0x97,0x33,0xd4,0x84,0xdf,0xb4,0x73,0x65,0x64,0x9e,0x14,0xdc,0x96,0x12,0x39,0x48,0x9e,0xc2,0x62,0x07,0x1f,0x8e,0x4d,0x8e,0xbc,0x93,0xee,0x7a },
{ 0x3b,0x00,0x96,0x02,0x5e,0x00,0x22,0x44,0xc6,0x90,0x06,0x41,0xb4,0xde,0x39,0xe8,0xff,0x05,0xcf,0xb3,0xdf,0x99,0xe7,0x53,0xf1,0x3c,0x14,0x42,0xd5,0xaa,0xfd,0x79 },
{ 0x58,0x0e,0xe1,0x30,0x1a,0x83,0x10,0xdd,0x3d,0xd3,0xa6,0xe4,0xbc,0xf8,0x1d,0x32,0x57,0xde,0xd5,0xde,0xb8,0x63,0x5a,0xb5,0x18,0x50,0x90,0x4a,0x96,0x3e,0x44,0x20 },
{ 0xbe,0x13,0x59,0x56,0xa9,0x62,0x07,0x90,0xaa,0xa9,0x54,0xd9,0x26,0x34,0x8b,0xad,0x6b,0x99,0xbf,0x5d,0x6a,0x07,0xdc,0x9a,0xd8,0x18,0x39,0xac,0xde,0x56,0x5c,0x2a },
{ 0xfc,0xff,0x60,0x5a,0xe9,0x8b,0x03,0xea,0xda,0xeb,0x87,0x52,0xad,0xf5,0xd9,0x59,0x72,0xf9,0xfa,0x89,0xed,0x06,0x3d,0xd3,0xd9,0xf1,0xb2,0xba,0xb1,0x9c,0x11,0x0e },
{ 0x40,0x81,0xa0,0xef,0x74,0x4f,0x6c,0x9b,0x01,0xdf,0xd7,0x8f,0x5b,0x5b,0x18,0x38,0x6a,0xa4,0x58,0xd1,0xaa,0x63,0xe9,0x36,0x7d,0x01,0x97,0x44,0xa5,0x4e,0x52,0x46 },
{ 0x67,0x93,0xc5,0x68,0x12,0xa6,0x6b,0x01,0xad,0xd7,0x7d,0xbc,0x98,0x33,0xe8,0x61,0xd6,0x22,0x7e,0x83,0x2c,0xe3,0x01,0xed,0x40,0x86,0x0e,0x77,0xc7,0xa2,0x80,0x3f },
{ 0x9c,0x3c,0xb1,0x17,0x60,0x97,0x75,0x88,0xdd,0xe4,0x66,0x35,0x35,0xc3,0xb7,0x47,0x65,0x3f,0x58,0x46,0x31,0x7a,0xb2,0xed,0xdc,0x26,0x66,0x07,0xb4,0xe3,0xc2,0x33 },
{ 0x5c,0x14,0xe3,0x22,0x24,0xfb,0x92,0x6b,0xa4,0x46,0x95,0x5d,0x85,0x4a,0xaa,0xab,0x51,0xe4,0xf5,0xa6,0x16,0xb7,0x4e,0x85,0x32,0xbd,0x42,0xaf,0x3c,0x07,0x77,0x4e },
{ 0x57,0x62,0x0c,0xf1,0x06,0xb8,0x6e,0x88,0x74,0x22,0x77,0xcf,0xd7,0x79,0xd5,0xf2,0x2f,0x4d,0xb0,0xe9,0x14,0x80,0x46,0xdc,0x92,0xd5,0x0c,0xe8,0xd2,0xd5,0x19,0x42 },
{ 0x50,0x78,0x5d,0xc6,0xab,0x78,0x82,0xc3,0xd6,0x5a,0x42,0x93,0xa9,0x03,0x1b,0x10,0x0b,0xc7,0x0b,0xf7,0xe7,0xc9,0x0b,0x54,0x0e,0xca,0xb5,0x0b,0x06,0xe4,0xd9,0x03 },
{ 0xe3,0x61,0x31,0x92,0xb8,0xad,0xf9,0x49,0xf2,0x14,0xa4,0x72,0xb2,0x8f,0x2e,0x6b,0x4b,0x42,0x4b,0xf0,0x29,0x3e,0x7b,0xcf,0x7b,0x09,0x4e,0x83,0xe5,0x8b,0xff,0x0f },
{ 0x2e,0x44,0xbb,0xb2,0xa4,0x22,0xb2,0xf9,0x46,0x74,0x67,0x89,0x8b,0x41,0x71,0xd9,0x75,0xa2,0x5c,0xa5,0xf6,0x80,0xed,0x56,0xd5,0x6e,0x05,0xc8,0xce,0xdf,0x43,0x79 },
{ 0x4d,0x3b,0x90,0x6a,0x89,0xf1,0xab,0x5c,0x60,0xd3,0xb3,0x2f,0x0e,0x98,0xeb,0x82,0xeb,0x9d,0x81,0xf5,0x22,0x42,0x3c,0x7e,0xfe,0x31,0x33,0x61,0x4e,0xc8,0xee,0x51 },
{ 0x25,0xe8,0xac,0xfd,0x85,0x33,0x6e,0x8f,0x78,0x4d,0xba,0x7f,0xfd,0x8a,0xf9,0x0d,0x4e,0xe4,0x5e,0x00,0xa6,0xab,0x07,0x0b,0x51,0x1f,0xa5,0xba,0x4f,0x43,0x54,0x7f },
{ 0x69,0x91,0x59,0x31,0xdb,0x58,0x7b,0x44,0x20,0x93,0xd7,0x8a,0xce,0x4d,0x8e,0xa8,0x02,0x6f,0x57,0xaf,0xa8,0xf6,0x8d,0x1c,0xbe,0x66,0x72,0xbe,0x60,0x92,0xb9,0x39 },
{ 0xb3,0x91,0xf9,0xa2,0xc4,0x9b,0x06,0x01,0xf7,0x15,0xeb,0xbe,0x4b,0xba,0xe0,0xc2,0x44,0xe4,0x06,0xf8,0xd7,0x9d,0x47,0xd1,0x41,0x90,0x49,0xe2,0xb4,0xcb,0x73,0x30 },
{ 0xeb,0xf8,0xaf,0xb1,0x88,0x33,0x12,0x1a,0x58,0xc2,0xc4,0xb8,0x91,0xda,0xb3,0x67,0x7f,0x6c,0xe2,0xb5,0x57,0x37,0x89,0x5f,0x66,0xff,0x93,0x9a,0xc6,0xcc,0x89,0x44 },
{ 0xe7,0x35,0x1d,0x0a,0x3e,0x30,0x0f,0xa0,0x14,0x13,0x43,0x73,0xd4,0xc9,0xd9,0xb8,0xac,0xf5,0x77,0x4c,0xd2,0xe3,0xf7,0xe3,0xef,0x80,0x16,0xfc,0x06,0x52,0x6c,0x5c },
{ 0xec,0x1f,0x26,0xc5,0xf8,0x5c,0xda,0xf2,0x49,0xc9,0x4a,0x5a,0x36,0x63,0x69,0xd0,0xce,0xb3,0xbb,0x68,0xb2,0xa5,0x35,0xc1,0x14,0x6f,0xf4,0x94,0x98,0xf2,0x53,0x02 },
{ 0xab,0x3b,0x52,0x18,0xf4,0x30,0x5d,0x5f,0x6b,0x1d,0x62,0x82,0x3d,0xbe,0x1c,0x5f,0x35,0xd5,0x0e,0x34,0x37,0x52,0x5b,0x7a,0x96,0xf8,0xf1,0x2a,0x5b,0x0e,0xe6,0x3e },
{ 0x1c,0xba,0x70,0x12,0xe7,0xe5,0x8e,0xe3,0x4c,0x12,0x9c,0x64,0x0c,0x65,0xaf,0x00,0x0a,0x8c,0xc0,0x9f,0xbe,0x7e,0x02,0xbe,0x27,0x46,0x9b,0xc2,0xdf,0x18,0xfe,0x37 },
{ 0x27,0x20,0x50,0xde,0xf9,0x22,0xf5,0xb2,0xc6,0x81,0x42,0x87,0x7a,0x19,0x1c,0xe7,0xaa,0x91,0x43,0xc2,0x62,0x08,0x72,0x41,0x94,0xa6,0x31,0x92,0x8c,0x09,0xa4,0x50 },
{ 0xf6,0x86,0x62,0x0b,0xb4,0x6e,0x33,0xbc,0xc4,0xb9,0x58,0xc5,0x6c,0x5f,0xea,0x3a,0x01,0x06,0xdc,0x71,0x10,0xb9,0xf9,0x18,0xef,0xaf,0xdd,0xb2,0x07,0xc3,0xde,0x42 },
{ 0x18,0x48,0x93,0x9a,0xae,0x94,0x37,0xbc,0x19,0x9d,0x45,0xbf,0x85,0x66,0x80,0xdd,0x81,0xac,0xa5,0xbe,0x19,0x19,0x7c,0xbc,0xd9,0x5f,0x61,0x84,0x03,0x17,0xaf,0x5a },
{ 0x24,0xff,0x9d,0x0f,0xd4,0x94,0x86,0xf6,0x71,0x5b,0x73,0x5f,0x19,0x37,0xdd,0x9c,0xa7,0x32,0x51,0x85,0x2d,0x0b,0x89,0xeb,0x5a,0x99,0x07,0x6d,0x1c,0xda,0xe0,0x72 },
{ 0x17,0x72,0x33,0xca,0x99,0x7b,0x1d,0x26,0xb7,0x1d,0xdd,0x42,0x75,0xbe,0xe4,0x05,0x43,0x9f,0xcd,0x9d,0xcd,0x6e,0xe0,0x4b,0x67,0x1a,0x98,0xf6,0xa1,0x5a,0x97,0x05 },
{ 0xc5,0x43,0xb6,0x10,0x62,0x4c,0x80,0x66,0x89,0x73,0x93,0x41,0x23,0xbe,0x11,0x64,0x4b,0xc0,0x9e,0x49,0x8d,0xc1,0x4c,0x22,0x31,0x4a,0x3d,0xfc,0xf5,0x7d,0xac,0x7e },
{ 0xa0,0xec,0x00,0x94,0x45,0xac,0x6e,0xe6,0xb2,0xcd,0x72,0x07,0xf5,0x67,0x34,0xe7,0x26,0x42,0x35,0x8d,0x19,0x78,0x8d,0xcc,0x61,0x18,0x5b,0x0a,0x29,0x1f,0xce,0x42 },
{ 0x10,0x43,0x48,0x0e,0x0c,0x83,0xba,0x61,0xee,0x97,0x93,0x88,0x5d,0xd2,0xf0,0x48,0xab,0x88,0xd1,0x18,0xd6,0x47,0x20,0xd1,0xd0,0x2a,0x07,0x99,0x78,0x48,0xc0,0x2f },
{ 0x28,0xce,0x29,0x46,0x46,0x4b,0x58,0xb0,0x72,0x88,0x8a,0x9c,0xc5,0x49,0x19,0xf9,0xac,0xf9,0x25,0x66,0x21,0xce,0xa6,0x15,0x16,0x05,0x07,0xba,0xf9,0xf1,0x64,0x45 },
{ 0xb3,0xbb,0xa4,0xa1,0x76,0x91,0x0a,0xf5,0xd0,0x40,0x09,0xa4,0x82,0xaa,0x87,0x3d,0x5b,0x0b,0x50,0x39,0x0d,0x2b,0x45,0x79,0x97,0x8c,0xff,0x51,0x25,0x98,0xcf,0x38 },
{ 0x5f,0x53,0x61,0x36,0x87,0xc5,0xff,0x87,0x6a,0xee,0xb4,0xe9,0x09,0x99,0x1e,0x87,0x99,0x4c,0xcc,0x02,0x5c,0x15,0xd6,0x59,0x84,0x91,0xbe,0x3c,0x69,0x4a,0x55,0x31 },
{ 0xf8,0x88,0xcf,0x9a,0x88,0xf3,0x02,0xb3,0x97,0x4d,0x7f,0x57,0x21,0xcd,0x9d,0xe1,0x0d,0x98,0xe4,0x81,0xbc,0x21,0x3d,0xf1,0xbe,0x1e,0x3b,0x4d,0xc6,0xda,0xd7,0x50 },
{ 0x2b,0x76,0x2e,0x7d,0x28,0x0d,0x89,0xfa,0xcf,0xea,0x49,0xd7,0xcb,0x81,0x06,0x69,0x92,0x50,0xae,0x1b,0x3a,0x8c,0xb4,0x24,0x50,0x9e,0xfc,0xed,0x72,0xf1,0x26,0x3d },
{ 0x83,0x90,0x63,0xf2,0x49,0x98,0x37,0x20,0x13,0x43,0xc9,0x00,0x2d,0xa6,0xab,0x4a,0x96,0x8c,0x8f,0x09,0x76,0x37,0x11,0x91,0xfb,0x92,0x00,0xb9,0x35,0x54,0xfc,0x14 },
{ 0x60,0xea,0x1c,0x43,0x76,0x57,0x5f,0xcd,0x8b,0xdc,0xc7,0xb8,0xec,0x88,0xb1,0x27,0xc9,0x36,0x86,0xdd,0xe7,0x00,0x5a,0xc7,0x20,0x45,0x4e,0xc8,0x28,0x26,0x65,0x2e },
{ 0x38,0xa2,0xbb,0xf6,0xc6,0x3b,0xfe,0xe5,0x5c,0x7e,0x9a,0x73,0xaa,0xc1,0x4e,0x53,0x24,0x48,0x18,0xee,0x00,0x87,0x40,0x87,0xdb,0x51,0x95,0xfc,0x20,0x70,0x2a,0x18 },
{ 0xb0,0x31,0xd5,0x9b,0xbb,0x08,0x42,0xcc,0xf7,0x6a,0xdc,0xcc,0x15,0x51,0x0d,0x26,0xe0,0x2e,0xbf,0x45,0x85,0x47,0xe4,0x12,0x29,0xad,0x06,0x7a,0x84,0x6f,0x46,0x05 },
{ 0x30,0xb8,0x12,0x14,0x53,0xcc,0x1d,0xf0,0x2c,0x6e,0x80,0xa4,0x18,0xb8,0xc6,0x4a,0xe4,0x1e,0x62,0xd3,0xd1,0x20,0x8b,0x90,0x62,0xdf,0x40,0x46,0xa2,0x0a,0xd2,0x51 },
{ 0xd6,0xeb,0x6a,0x63,0xe5,0xff,0xa5,0x24,0x7e,0xc6,0x36,0x5f,0xf5,0x71,0x02,0xfc,0xbe,0xed,0x3b,0xe1,0xb2,0xdd,0xa2,0x31,0xce,0x53,0x1d,0xbd,0x65,0x6f,0xc7,0x4b },
{ 0x56,0xd1,0x53,0xfe,0x49,0x3d,0xae,0x27,0xf4,0x7e,0xc7,0x74,0x61,0x13,0x33,0x7a,0x80,0x38,0x5d,0x72,0xa8,0x33,0xd4,0x8e,0x4f,0xa0,0xb3,0x55,0x2f,0x90,0xc4,0x49 },
{ 0x75,0x0d,0x01,0x35,0x40,0x65,0xd8,0x7b,0x6d,0xf7,0xe6,0xeb,0x82,0x53,0x3d,0x68,0x2a,0xfa,0x9b,0x6a,0x54,0xda,0x1b,0xf8,0x0b,0x4c,0x49,0xcc,0xb7,0x6e,0xb9,0x1f },
{ 0x15,0xa5,0x12,0x0d,0xac,0x08,0x1d,0x01,0xc3,0x16,0x34,0xab,0x01,0x94,0x97,0xcb,0xb5,0x4c,0xee,0xa9,0xc7,0x76,0xf7,0xea,0xa1,0xd7,0xf9,0x1c,0x97,0xc0,0x7b,0x49 },
{ 0xef,0x7d,0xa3,0x73,0x97,0x69,0x97,0xf3,0x22,0xc1,0xac,0x9e,0xe0,0xd5,0x32,0x92,0x40,0xe9,0xa0,0x0d,0xd1,0xce,0xe4,0x58,0x5b,0x92,0x2e,0xfe,0x4b,0x00,0xe6,0x7b },
{ 0x50,0xd8,0xf4,0x18,0x00,0x42,0xc2,0x8c,0xe9,0xe6,0x61,0x1b,0x87,0x90,0xe4,0xb1,0xa6,0x17,0xb5,0x60,0x51,0x9b,0x58,0xab,0x17,0xd9,0x36,0xb9,0x0e,0xa7,0x23,0x05 },
{ 0x6f,0xb0,0x47,0xe6,0xee,0x6c,0x97,0x6e,0xbb,0xf1,0x1d,0x32,0x89,0x80,0x17,0xcd,0xc9,0xb5,0x04,0x10,0x67,0xe8,0xb3,0x5a,0x05,0xbf,0xff,0x5d,0x0f,0xe4,0x51,0x78 },
{ 0x13,0x1c,0x00,0x4d,0x4b,0x03,0x5a,0x0c,0x13,0x35,0x36,0xa7,0x74,0x3f,0x5a,0x4a,0xe9,0xa2,0xa4,0xd9,0x43,0x02,0x37,0x6b,0xf0,0x61,0x0c,0xa8,0xd1,0x08,0x12,0x37 },
{ 0xeb,0x1d,0x39,0x2f,0xe4,0xc7,0xa3,0x9b,0x81,0x04,0xde,0x6c,0xa5,0xa9,0x64,0xe2,0x17,0xf9,0x36,0x7a,0x7c,0x19,0xfb,0x4a,0x71,0xd0,0x57,0xb9,0x93,0x29,0x30,0x10 },
{ 0xbc,0x04,0x7b,0xcf,0x06,0x8b,0xb0,0x94,0x94,0x5b,0xbc,0x63,0x09,0xc8,0x81,0xd4,0xd0,0x4a,0x76,0x30,0x23,0xfc,0xb1,0x8c,0x41,0x96,0x96,0xa8,0x9c,0xba,0xef,0x70 },
{ 0x7a,0xbb,0xb2,0x07,0x26,0xa2,0x48,0x98,0xe4,0xa4,0x1d,0xb8,0x62,0x6f,0x77,0x86,0x5c,0x12,0x91,0x51,0x76,0xbf,0x72,0x3a,0xdf,0x0a,0x00,0x86,0x45,0xc9,0xc4,0x37 },
{ 0xf7,0xe2,0x0f,0xc7,0x61,0x11,0xd7,0x70,0xdd,0xba,0x05,0x00,0xdb,0x3d,0x35,0x3a,0x75,0xd7,0xc3,0x0b,0x8c,0x6d,0x18,0xe5,0xd6,0xf8,0x6b,0xd4,0x84,0x3f,0xaf,0x7b },
{ 0x63,0x6d,0x06,0x76,0xf5,0x9e,0x0b,0x65,0xd5,0xf8,0xfb,0xc7,0x28,0xe9,0x30,0x24,0x77,0x23,0xed,0x46,0xbc,0xf4,0x3b,0xdf,0xd3,0x0f,0x0d,0x0a,0x22,0x3c,0x16,0x2e },
{ 0xaa,0x10,0x7a,0x84,0xcc,0xce,0x7d,0x1e,0x3f,0x49,0xb8,0x9c,0xaa,0xd9,0xad,0xe3,0x34,0x1a,0xdc,0x4c,0x8a,0x63,0xd3,0xed,0x06,0x1a,0x68,0xe7,0x51,0xc4,0xa9,0x7b },
{ 0xaa,0x85,0x14,0x5e,0xab,0x0e,0x07,0xc4,0x39,0x65,0x84,0xaf,0xe3,0x41,0x40,0x5a,0x61,0x26,0x75,0x6a,0xfc,0x9f,0x28,0x2b,0xf7,0x12,0x46,0x1b,0xaf,0xf9,0xa7,0x7b },
{ 0x6d,0x17,0x40,0x89,0x91,0xec,0xe7,0x17,0x3f,0xb9,0x9c,0xe7,0x13,0x10,0xbc,0x9b,0x8f,0x73,0xdf,0x0a,0x0e,0x35,0x38,0x92,0x26,0x84,0x8e,0x4f,0xf3,0x89,0xca,0x6d },
{ 0x4b,0x3f,0x92,0x21,0x29,0x74,0xb4,0x2c,0xf7,0xc2,0x25,0xdf,0x2f,0x06,0x5d,0xfa,0xae,0xcc,0x2b,0xdc,0x82,0x7e,0x32,0x10,0x11,0x87,0xde,0xaa,0xf1,0xef,0x24,0x6f },
{ 0x81,0x14,0xb5,0x79,0x9f,0x3c,0xb2,0x30,0xb8,0xd2,0x8b,0x5d,0x7a,0x31,0xae,0xd5,0xb3,0x3a,0xf1,0xd0,0x1c,0x56,0x0f,0x7d,0xbc,0x7c,0x80,0xae,0x4d,0x1d,0x4f,0x3b },
{ 0x9b,0x76,0x43,0xff,0xbd,0x62,0x3e,0xa1,0xd1,0x2a,0xc5,0x47,0xf9,0xe7,0xbe,0x01,0xeb,0xac,0x81,0x74,0xfc,0x9f,0x25,0x02,0x8d,0x37,0x92,0xd8,0x62,0xb3,0x3f,0x65 },
{ 0xe4,0x6e,0x66,0xbb,0x7b,0x3c,0x72,0x3d,0xf3,0x30,0x35,0x70,0xe0,0xa7,0xf2,0x46,0x6a,0x77,0x02,0x1d,0x84,0x34,0xf5,0x22,0x21,0x6b,0x98,0xf5,0x34,0x88,0x11,0x0e },
{ 0x0f,0xab,0xf6,0x0e,0x13,0xdd,0x78,0x25,0x0f,0xbe,0x70,0xc6,0xc8,0x90,0x04,0xbe,0x56,0xce,0x50,0xf7,0x0f,0x4a,0x05,0x45,0x64,0xa5,0x02,0x6b,0xb1,0xdf,0x9b,0x33 },
{ 0xc0,0x63,0x8b,0xd5,0xd2,0x60,0x42,0xaf,0xbf,0xc5,0x87,0x89,0x61,0x63,0xcd,0xd2,0x23,0x02,0x52,0x9b,0x87,0xb8,0xd4,0xa8,0x49,0x58,0xc2,0x53,0x26,0x73,0x63,0x62 },
{ 0x3e,0xfd,0x16,0x1e,0xb6,0xb2,0x91,0x95,0x04,0x5a,0xe3,0x32,0xdd,0xac,0x20,0xd8,0x3c,0xa8,0x5c,0xca,0x3b,0xbc,0x4b,0x6b,0x9b,0x80,0xa5,0x28,0x6c,0x7c,0x63,0x7e },
{ 0x6e,0x6f,0x2d,0xba,0x61,0x68,0xfa,0xe4,0x1d,0xcf,0x69,0x3d,0x90,0x3c,0xe0,0x03,0xe2,0xdc,0x19,0xd8,0xc5,0xb1,0xa6,0x0e,0x9c,0x53,0x2f,0xb5,0xa0,0x89,0x87,0x0a },
{ 0xc6,0xea,0xcf,0xd6,0xa5,0x0d,0x90,0xca,0x6b,0x54,0xd2,0x16,0x01,0x97,0xca,0xdd,0xcd,0xf2,0xfc,0xed,0x2f,0x3f,0x1f,0x8c,0xd0,0xed,0xc2,0x07,0x0f,0x9e,0x51,0x39 },
{ 0x62,0xed,0x46,0x08,0x21,0x33,0x9b,0xd9,0xf2,0x17,0x12,0x7a,0x85,0xb7,0x78,0x2e,0x8b,0x30,0xab,0xa5,0x68,0x33,0xbb,0x16,0x1e,0x9d,0xc1,0x0e,0x1e,0x06,0x85,0x18 },
{ 0x9a,0xba,0x36,0xeb,0xe4,0xc7,0x81,0x26,0x5d,0x19,0x2e,0x16,0x65,0x56,0x87,0xfb,0xcc,0xa0,0x3b,0x1d,0xa2,0x25,0xb2,0x02,0x43,0x49,0x1f,0x7a,0xb6,0x87,0x1e,0x72 },
{ 0x73,0xb2,0xae,0x02,0x28,0x78,0xef,0x68,0x8f,0xe6,0x68,0xb7,0x3e,0x8b,0x38,0x48,0x6d,0xbb,0x3e,0x7f,0xeb,0x56,0xf1,0xd7,0x1c,0x7f,0x7d,0x75,0xca,0xb1,0xc9,0x78 },
{ 0x34,0x5e,0xef,0xc1,0x61,0x0e,0xbf,0x99,0x4f,0xfe,0x69,0xa5,0xe4,0x3a,0x41,0xc9,0x8e,0xc9,0x2b,0x80,0x84,0x10,0x2b,0x95,0x91,0xdb,0x24,0xd1,0xd2,0x34,0xa6,0x62 },
{ 0x9c,0x57,0xeb,0xb2,0xe8,0x58,0xc1,0xda,0x0b,0xf8,0xe7,0x96,0x6c,0xd5,0xd2,0x49,0x4e,0xe4,0x7d,0x06,0x9d,0x42,0x79,0x12,0x42,0xe8,0x2a,0xa5,0xcf,0x95,0xb8,0x5f },
{ 0x58,0x7d,0x13,0x06,0x3a,0xd4,0xd1,0x59,0x21,0x6c,0x10,0x35,0x0b,0x76,0x02,0x8e,0x99,0xdb,0xc5,0x53,0xa3,0xeb,0x1a,0xa8,0x4e,0x49,0x54,0xa6,0x65,0x8b,0xfc,0x43 },
{ 0x9a,0x52,0xd8,0x40,0x02,0xc9,0x39,0x21,0x5b,0xe1,0xbd,0x24,0x3c,0x4a,0xb0,0x95,0x14,0x6a,0x9b,0xa1,0x7e,0xa1,0x82,0x3c,0x99,0x36,0x2b,0xf6,0x62,0x9a,0x86,0x51 },
{ 0xc5,0x6a,0x76,0x7f,0xe4,0x7e,0x54,0x38,0xda,0x8e,0x8b,0x18,0x62,0x32,0x00,0x5e,0xa9,0xbe,0x73,0x87,0x9e,0xac,0x6b,0xf0,0xea,0xc5,0xb0,0x7b,0x43,0x7d,0xee,0x75 },
{ 0x1c,0x54,0x53,0x53,0x2a,0x17,0x21,0x5c,0xdd,0xb4,0x06,0x20,0x8b,0x70,0x5f,0x15,0x6a,0xf4,0x31,0xd2,0xfd,0x38,0x1b,0xbe,0x1f,0xe7,0x0f,0x60,0x8e,0x63,0x3e,0x5d },
{ 0xe2,0x6a,0x8c,0x39,0x47,0xf8,0xa5,0xa1,0xb8,0x60,0x27,0xfa,0x1a,0xa5,0x9d,0xc5,0xf6,0xb1,0x14,0x40,0xc9,0xe4,0x11,0x6f,0x4f,0xc4,0x88,0xb3,0x68,0xd8,0x83,0x41 },
{ 0x28,0x1b,0xb0,0x84,0xbc,0xab,0x7d,0x14,0x6d,0xe0,0xc3,0x9c,0x14,0xec,0x63,0x0a,0x43,0x2a,0x39,0x61,0x3e,0x4f,0xf9,0xd8,0xc3,0x06,0x2b,0xa1,0x67,0x2b,0xdb,0x30 },
{ 0xbc,0x7c,0x5f,0xd4,0xee,0x39,0xd1,0xe9,0xe7,0x52,0xc6,0x6b,0x2e,0xfb,0x91,0x37,0x84,0x9b,0x88,0xd5,0xd7,0xc7,0xa3,0xbf,0x37,0xb3,0x32,0xb1,0x31,0xbf,0x56,0x1c },
{ 0xda,0x27,0xf1,0x4a,0x43,0x51,0xa8,0x60,0x6e,0xae,0xac,0x0d,0x63,0x9a,0x74,0x4e,0xb9,0x38,0x6c,0x76,0x10,0x51,0xef,0x11,0x57,0xd6,0xd6,0x1f,0xb5,0x6d,0x83,0x73 },
{ 0xc0,0xb3,0x5b,0x3d,0x31,0x8f,0x85,0x01,0x67,0x85,0xf6,0xe7,0x5a,0xfb,0xbb,0xb9,0x0d,0x61,0x6b,0xe8,0x37,0x81,0x7e,0x66,0x8f,0x3a,0xcd,0xff,0x6c,0xf7,0x0d,0x16 },
{ 0xb7,0x7a,0x77,0xf8,0x85,0x2e,0x0a,0x82,0x52,0xc8,0x0d,0xb5,0x22,0x82,0xc2,0x0f,0x0f,0x44,0x1f,0xf1,0x98,0x76,0x30,0xc1,0xa5,0xe3,0x31,0xec,0xa6,0x01,0x08,0x54 },
{ 0x8c,0x0e,0xe2,0x63,0x08,0x13,0xca,0x0f,0xa1,0x56,0x03,0xa3,0x76,0x0f,0xca,0x79,0xc0,0xe0,0x8c,0xa5,0x0f,0xb7,0x5a,0x43,0x48,0x3b,0xdb,0xe3,0x8f,0xcb,0x07,0x5f },
{ 0xcb,0x66,0x6f,0xd3,0x0c,0x3b,0x93,0x57,0x65,0x3e,0x03,0x33,0xc1,0x3b,0xc7,0x2b,0xca,0x9b,0xc8,0xf9,0xea,0x0e,0x97,0x81,0xe6,0x12,0x0f,0xfb,0x00,0x4f,0x2a,0x17 },
{ 0x91,0x3d,0xff,0x4b,0x24,0x28,0xc9,0x3c,0x2a,0x3e,0x3c,0x23,0xd3,0x6b,0x3c,0x71,0x50,0x58,0x06,0x8b,0x4a,0xa8,0xbd,0x27,0xe9,0x77,0x8d,0x06,0x27,0x8b,0xda,0x3f },
{ 0x48,0x44,0xb7,0x36,0x90,0xf5,0x4f,0xa7,0x78,0xba,0x7a,0xb7,0x94,0xac,0x8d,0x97,0x5f,0xd4,0xf8,0x34,0x4a,0xa6,0x3c,0xff,0x13,0xa9,0x9c,0x8b,0xb8,0xf4,0x01,0x1f },
{ 0xf5,0xc6,0x76,0xdb,0xdb,0x88,0x5a,0x94,0x13,0x8a,0x1a,0x5f,0x6d,0x46,0x29,0xee,0xc5,0xa0,0xc3,0xbd,0xfd,0xde,0x08,0x80,0xc9,0xc9,0x99,0x2f,0x5f,0x4e,0x34,0x44 },
{ 0x27,0x75,0x16,0xb2,0xe2,0x10,0x00,0x48,0x03,0x7b,0x22,0x96,0xfb,0x2d,0x93,0x6e,0x72,0x7f,0xba,0x9d,0xf8,0x99,0xdc,0x98,0xe7,0xb4,0x99,0x9a,0x5c,0xa6,0x8f,0x43 },
{ 0x1e,0xad,0x26,0xd6,0x05,0xdd,0xb9,0xb0,0x26,0x72,0x23,0x82,0x0a,0x39,0xe3,0xe1,0x8e,0xaa,0x47,0xdb,0xa3,0xff,0x86,0xc2,0xaf,0xdc,0xce,0x80,0x8d,0xab,0x80,0x49 },
{ 0x59,0xb8,0x2c,0xd6,0x51,0x72,0x7b,0x35,0x57,0x54,0x20,0x29,0x2a,0x61,0xb5,0x85,0x6b,0xd7,0x02,0xfc,0x83,0xeb,0x10,0xbf,0x5d,0xb6,0x5e,0x5e,0x85,0x89,0x00,0x78 },
{ 0xa0,0x9e,0x63,0x79,0x2e,0xa5,0x54,0x5a,0x36,0x30,0x11,0x04,0xf9,0xc9,0x82,0x0d,0x2e,0x1c,0x6c,0x0a,0x58,0x0f,0xbc,0x0d,0x46,0x61,0xa9,0x10,0x5f,0x81,0xcc,0x0a },
{ 0x63,0x92,0x77,0xb6,0x6a,0xdd,0xf0,0x4e,0xc4,0x11,0xd4,0x4f,0x92,0x11,0x98,0x0b,0xeb,0x32,0x7a,0xf2,0xc6,0x79,0x38,0xe0,0x26,0x90,0x0b,0x6d,0xf7,0x3d,0x41,0x24 },
{ 0xf0,0x3b,0xfd,0x64,0x94,0x29,0x9b,0x43,0x8e,0x0d,0x9f,0x52,0xfc,0x6f,0xf1,0x87,0x26,0xdd,0x4b,0x14,0xd9,0x68,0xad,0x94,0x4b,0x5e,0x59,0x35,0x91,0xa3,0x53,0x05 },
{ 0x1b,0x41,0x5f,0xaf,0x1d,0xbb,0xda,0x5d,0x5d,0x93,0xd5,0x52,0xe6,0x60,0x1f,0xfe,0xe3,0x53,0xed,0x76,0x90,0x41,0x72,0xd1,0xda,0xcb,0xd2,0xc4,0xc1,0xad,0xfa,0x19 },
{ 0x09,0x2a,0x46,0xc0,0x45,0x57,0x5e,0xe1,0xf6,0xc8,0x64,0xae,0xdc,0x3d,0x63,0xfc,0x71,0x06,0xf8,0x46,0xa9,0x13,0xb4,0x4e,0x94,0x54,0x0a,0x73,0xa8,0x64,0x33,0x4c },
{ 0x8e,0xc3,0x40,0xc1,0x46,0x9f,0x0d,0x3c,0xb3,0x94,0xce,0xc0,0x19,0x2a,0x15,0x98,0x42,0x25,0xf4,0x87,0x00,0x44,0x09,0x52,0x22,0x4f,0xb1,0x8c,0x4a,0x83,0xbf,0x72 },
{ 0xa1,0x67,0x46,0x58,0x61,0xb1,0xee,0x6e,0x42,0x59,0x52,0xd5,0xbf,0xbb,0xb0,0xd4,0x8c,0xe9,0x64,0xfb,0x13,0xf2,0xbb,0x63,0x74,0xf2,0xd1,0xcf,0x70,0xf6,0x22,0x54 },
{ 0x63,0xcc,0x30,0x3e,0xea,0x0c,0x6b,0x7b,0xd8,0xc4,0x68,0x6b,0x03,0x92,0xe9,0x37,0xff,0x8c,0xb6,0x99,0x7e,0xa8,0x7d,0xe5,0xd6,0xbd,0xb3,0x9a,0xce,0x17,0x70,0x2c },
{ 0x1a,0xbe,0xfc,0x15,0x6b,0x0c,0x95,0x30,0xe7,0x22,0xdc,0x84,0x91,0xd7,0xcb,0xbe,0x97,0x2f,0x85,0x8d,0x1a,0x72,0x69,0xd3,0xcc,0x78,0xc1,0x7b,0x14,0xe3,0x84,0x27 },
{ 0x32,0xc6,0xc4,0xe0,0xd3,0x24,0xe2,0x5e,0xed,0x4f,0xe0,0x8f,0xd9,0xe0,0x01,0xb8,0x75,0x53,0x9a,0xb5,0xd7,0x03,0x25,0x7b,0x06,0xdd,0x58,0xcd,0x0e,0x1f,0x45,0x49 },
{ 0xa0,0x44,0xa0,0x03,0x9b,0xd8,0x04,0x03,0x69,0x5f,0xf4,0x6d,0xc5,0xc5,0x00,0x15,0xf1,0x35,0xa8,0xc3,0xd0,0x5d,0x71,0x6e,0xa6,0xb6,0x43,0x2a,0x68,0xf0,0x04,0x43 },
{ 0xe8,0x0b,0x7e,0xc9,0xa1,0xc2,0x0b,0x24,0x38,0x94,0x92,0x39,0xf5,0x22,0xcb,0x2b,0xae,0x5e,0x66,0x65,0xd5,0x27,0x40,0xa0,0xdf,0x10,0xae,0xd1,0x70,0x70,0x79,0x48 },
{ 0x8b,0x0e,0xaf,0x61,0x87,0x93,0xfd,0xf5,0x50,0xf9,0x63,0xae,0x7e,0x88,0x73,0x73,0x29,0x87,0x1e,0x27,0xfa,0x13,0xc0,0x6e,0x0b,0xbd,0x3c,0xb7,0xdf,0x54,0x1e,0x4d },
{ 0x9b,0x8b,0x00,0x94,0xac,0x6f,0x8e,0x91,0x9a,0x2f,0x33,0x38,0x2f,0x4d,0xb4,0x6c,0x88,0xe0,0xd3,0x43,0xd1,0xed,0x66,0xe1,0x33,0x96,0x1d,0xa7,0xaa,0x3f,0xfa,0x73 },
{ 0xef,0xe0,0x90,0xfe,0xe4,0x48,0xef,0xf1,0x4d,0x48,0x2f,0x9d,0xbc,0xfc,0x8b,0x53,0xff,0xfa,0xe7,0xb0,0x31,0x7c,0x30,0x5a,0x05,0x4e,0xe1,0xdd,0x7d,0x08,0xed,0x56 },
{ 0x94,0x74,0x24,0xd6,0xe6,0x67,0xb3,0xc7,0x9e,0x71,0xa7,0x8e,0xeb,0x35,0x67,0x66,0xdc,0x94,0x13,0x07,0x16,0x4a,0x79,0xe1,0x58,0x27,0x35,0xbd,0xb5,0x7b,0xda,0x6d },
{ 0xc3,0x16,0x22,0xe6,0x2e,0x67,0x2a,0x51,0x12,0x24,0x0b,0x12,0xa8,0xb6,0xcc,0x6e,0x47,0x82,0x87,0x84,0x83,0x51,0x03,0x53,0x02,0x93,0xd8,0xe7,0xf6,0xe0,0x44,0x25 },
{ 0xd4,0x1a,0xe2,0x5e,0x04,0x45,0x1e,0x66,0xf8,0xc7,0x50,0x4e,0x77,0x32,0x1c,0xd4,0x51,0xa2,0x41,0xdb,0x0d,0xeb,0xfb,0xd9,0xa5,0x4a,0xa5,0x33,0xba,0x9e,0xe4,0x42 },
{ 0x70,0x34,0x5d,0xd1,0xa1,0xc8,0x82,0xab,0x8c,0x32,0xfd,0xf5,0x9d,0xe5,0xf2,0x64,0x23,0x13,0x45,0xbf,0x38,0x34,0x6e,0x18,0x6d,0xc0,0x7b,0xd2,0x63,0x5f,0x54,0x29 },
{ 0x0b,0xa6,0x32,0xf6,0x67,0xb5,0x0c,0x18,0xfb,0x3f,0x65,0x73,0xd7,0x46,0x82,0x6c,0x48,0x59,0xf8,0x93,0x01,0xbf,0xaa,0x24,0xce,0xfe,0xec,0x83,0x16,0xe6,0xab,0x29 },
{ 0x99,0x56,0xf4,0xbc,0xa6,0x6b,0xe9,0x2e,0x9a,0x1c,0xf5,0x94,0x43,0x25,0xf8,0xb8,0xe0,0xce,0x08,0xec,0x66,0x72,0xfe,0xf2,0xd3,0x9d,0x35,0xd3,0x14,0xd3,0x58,0x76 },
{ 0xb0,0x40,0x71,0x14,0x25,0x0f,0xd7,0x6f,0xbf,0x98,0x24,0xf7,0xec,0xbf,0xd9,0xad,0x0a,0xa9,0x87,0xb4,0xf0,0x9d,0x15,0xbb,0xf7,0x43,0x7b,0xe7,0x0f,0x1f,0xbc,0x4e },
{ 0x16,0x69,0x29,0xce,0xdf,0x6d,0x8a,0x07,0x7f,0x22,0x54,0x0f,0xa5,0xa2,0x6c,0xdc,0x62,0xac,0xe4,0x3b,0x9b,0x11,0x4d,0x99,0xb6,0x9c,0x1c,0x8d,0x44,0xf4,0x5c,0x1a },
{ 0xe2,0x89,0xea,0x78,0xa5,0x83,0x74,0xf5,0x1c,0x55,0x5d,0xb3,0x7e,0xe0,0x7a,0xe5,0x65,0xd6,0xf6,0x70,0xea,0x50,0x52,0xfd,0xea,0xac,0xdd,0x41,0xb8,0xbb,0x6d,0x1e },
{ 0x96,0x61,0x80,0xac,0xbb,0x42,0xf5,0xcb,0x61,0x7f,0xfb,0x57,0x44,0x06,0xdd,0x8c,0xe0,0x73,0xc7,0x69,0xa3,0xba,0x21,0x40,0xf0,0x91,0x64,0x39,0xc6,0xfc,0x32,0x31 },
{ 0x58,0x28,0xf5,0x95,0x73,0xba,0x6b,0x9e,0x30,0xe6,0x92,0x97,0xac,0xea,0x42,0xe1,0x2f,0xd7,0x65,0xbf,0x25,0x74,0x52,0xf5,0xc0,0x41,0x82,0x57,0x37,0x94,0x2e,0x3e },
{ 0x7a,0xda,0x2b,0xa3,0xaf,0x7d,0x5e,0x17,0xb7,0xb0,0x3c,0xe0,0xbb,0xd1,0x4d,0xe3,0x1c,0xc0,0x16,0x2e,0xa4,0x24,0xd3,0xc2,0xc3,0x5f,0x33,0x59,0xca,0x7f,0x7e,0x50 },
{ 0xb1,0xda,0xec,0x98,0x4b,0x4c,0x0e,0x13,0x88,0x47,0x11,0xc5,0x81,0x62,0xe9,0x94,0x19,0x0d,0x43,0x10,0x4c,0x44,0x43,0xc2,0x73,0xe8,0x21,0x8f,0xeb,0xe4,0x5f,0x1d },
{ 0x41,0x45,0x68,0x8e,0xac,0x43,0x1b,0xa8,0x2b,0x01,0x4c,0xaa,0x99,0x2f,0xbd,0x70,0xab,0x0b,0xd2,0x2a,0xb8,0x85,0xf4,0x53,0xc0,0x23,0xf9,0xc3,0xe8,0xac,0x5f,0x02 },
{ 0xd0,0xab,0x94,0xa6,0x3c,0xf0,0xf3,0x72,0x11,0xc4,0x7f,0x36,0x08,0x4f,0xde,0xe3,0x64,0xd4,0x72,0x16,0x2c,0x1e,0xc5,0x0c,0xa7,0x99,0xdd,0x95,0xef,0xe5,0x2f,0x1c },
{ 0xbf,0xe1,0x45,0x68,0x7c,0xb3,0x4d,0x21,0x70,0x3a,0x44,0xbb,0xd8,0x84,0xe2,0x3d,0x63,0xb8,0xf9,0x02,0x86,0xb2,0x42,0xaf,0x15,0xeb,0x05,0x57,0xa6,0xe6,0x13,0x54 },
{ 0x77,0x17,0xf4,0x53,0x41,0x49,0x35,0x74,0x7a,0x5d,0x73,0xc9,0xc5,0xb6,0x9f,0xb6,0xd8,0xb4,0xd6,0xd4,0x33,0xa6,0xb1,0x4c,0xf7,0x93,0x21,0xcb,0x89,0x58,0x4d,0x06 },
{ 0x46,0xb6,0x93,0xf4,0x10,0x97,0x83,0xf5,0xd7,0x59,0x5a,0x90,0x53,0x9c,0x87,0x0a,0x2e,0xe5,0xb2,0x2c,0x5c,0xe7,0x79,0xf8,0x29,0xa0,0x72,0x51,0xe0,0xe9,0x2f,0x6d },
{ 0x65,0xbe,0xa7,0x9b,0x20,0x02,0xbc,0xf1,0x4c,0x24,0x6f,0x30,0x68,0x4f,0xf3,0x96,0x3b,0x51,0x54,0x82,0x3c,0xe5,0x77,0x9f,0xe1,0xd0,0xd8,0x13,0x96,0xd7,0x92,0x5c },
{ 0xe2,0x82,0xfe,0xdb,0x5d,0x53,0x3a,0x08,0x34,0x71,0xf6,0xa5,0x46,0x87,0x8f,0x6c,0x88,0xa5,0xdf,0x83,0x88,0x56,0xbe,0x50,0x75,0x0b,0xc2,0x28,0x41,0x65,0x49,0x39 },
{ 0x6c,0x23,0x19,0xea,0x2c,0xde,0xc5,0x8c,0xee,0x96,0xce,0x5f,0xdd,0x2e,0x48,0xe4,0x56,0x8c,0x05,0x24,0x5c,0x68,0x42,0xc9,0x26,0xae,0x97,0xaf,0x0d,0x98,0xee,0x45 },
{ 0x5a,0x57,0xeb,0x5a,0x64,0x81,0x7f,0xa5,0x54,0x78,0x94,0xd9,0xdc,0x6d,0x54,0x24,0x1a,0x89,0x93,0x42,0x86,0x52,0x04,0xe5,0x0f,0x87,0xa5,0xa6,0xf1,0x20,0x36,0x72 },
{ 0x39,0x5a,0x32,0x4d,0x1e,0x57,0xe6,0x3f,0x9a,0xa9,0x9e,0x4f,0x2d,0x0b,0xd8,0xd2,0xd2,0xc9,0x48,0xb3,0xaf,0x46,0x00,0xa0,0xfd,0x16,0x76,0x3d,0xe3,0x4b,0x18,0x35 },
{ 0x54,0x9a,0x41,0x66,0x4e,0x15,0x5e,0x82,0x4d,0x55,0xd5,0xf2,0x06,0xe1,0x5c,0x42,0x0f,0x3f,0xca,0x6e,0x1e,0x10,0x74,0xb9,0xc5,0xdf,0x3f,0xd4,0xa4,0xea,0x82,0x63 },
{ 0xba,0x41,0x12,0xac,0xc6,0xbc,0x0d,0xa1,0xbf,0x6e,0x46,0x35,0xce,0xa3,0xc8,0x27,0xd5,0xc3,0xca,0x23,0xb4,0x7a,0x6e,0xa0,0xf5,0x12,0x85,0xba,0x68,0x21,0xd1,0x41 },
{ 0x11,0x05,0x66,0xed,0x9e,0x34,0x2a,0x8f,0xcf,0x7a,0xfa,0xf9,0x1a,0xb1,0x53,0xda,0xa9,0x1f,0x6b,0x57,0x41,0x8d,0xd6,0xc7,0xfb,0x43,0x77,0x78,0x72,0x12,0x40,0x6e },
{ 0x88,0x04,0xda,0xef,0xc3,0x2f,0xa9,0x6f,0xc5,0x1a,0x96,0xfe,0x79,0xe0,0xff,0xe8,0xc3,0xe3,0x2a,0xca,0xfe,0xc1,0x08,0x3a,0x84,0xdc,0xe2,0x5b,0xc9,0xe9,0xbd,0x13 },
{ 0x22,0x10,0x47,0xe5,0x29,0x9a,0xe5,0xfb,0x78,0x8f,0xf8,0x62,0xb4,0xa5,0xcc,0x17,0xf8,0x79,0x3f,0x97,0xb1,0x10,0x99,0xb3,0x36,0x8f,0x77,0xe8,0x6c,0x96,0x19,0x72 },
{ 0x0a,0xc2,0xe7,0xd2,0x55,0xe2,0x2e,0x63,0xe6,0xca,0xbf,0x71,0xfb,0x69,0x07,0xce,0xe5,0xe7,0xb3,0xe3,0xe1,0xb7,0x53,0x56,0xc5,0xa2,0x8c,0xbe,0x94,0x1f,0x9c,0x76 },
{ 0x80,0x05,0x7b,0x53,0xce,0x7d,0xa3,0x10,0x77,0x23,0x71,0xd2,0x33,0xdf,0x39,0x78,0x88,0x87,0x42,0x5c,0xd1,0x5b,0x20,0x08,0x0e,0xa0,0xa7,0x4b,0x90,0x07,0x0e,0x2b },
{ 0x33,0x79,0x18,0xcc,0x0d,0xcb,0x4f,0xd1,0x05,0x91,0x90,0xad,0x21,0xe8,0x74,0xbd,0x13,0x7f,0xb1,0x85,0x28,0xab,0xea,0x2e,0x24,0x32,0x3b,0x14,0xf5,0x2b,0x3d,0x08 },
{ 0x7d,0x31,0xcd,0xd2,0xf1,0x14,0xcb,0x4a,0x7b,0x1d,0x93,0x1c,0x10,0xa9,0xef,0xb4,0x6c,0x18,0x00,0x45,0x04,0xbd,0x4c,0x13,0xde,0xa2,0xb3,0x84,0x8e,0xe6,0x86,0x34 },
{ 0x04,0xbe,0xe7,0x7d,0x02,0xdc,0xc1,0x0c,0x41,0xc9,0x93,0x6c,0x18,0x71,0x79,0x7d,0x48,0x4f,0xee,0xe8,0x54,0xbf,0x88,0x74,0x47,0x58,0x98,0x95,0xbc,0x08,0x19,0x12 },
{ 0xb3,0x66,0x4f,0xa5,0xe1,0x25,0xfd,0x47,0xd2,0xc9,0xf7,0x6a,0x20,0x93,0x49,0x22,0xba,0x85,0x12,0x4a,0xcc,0xcb,0x36,0xcb,0x30,0x30,0x07,0x83,0x0b,0x47,0x89,0x1b },
{ 0x7a,0x2e,0x26,0xd3,0x1c,0x5c,0x08,0xd7,0x46,0x34,0x54,0xa7,0x51,0xd3,0x53,0xbf,0xa8,0x2c,0xa9,0x1e,0x92,0x1f,0xd0,0xc2,0x13,0xe1,0x1b,0x74,0x5e,0xf0,0x1b,0x44 },
{ 0xce,0xe6,0x82,0xa5,0x9f,0x98,0x8d,0x6e,0xc5,0xb2,0x32,0xbe,0xa2,0xbd,0x8f,0x6d,0x4d,0x1e,0x71,0x59,0x01,0x3f,0xc8,0x76,0x36,0xcf,0x77,0x0a,0x9f,0xdb,0xb1,0x65 },
{ 0x1d,0x39,0x81,0x29,0x6e,0xd6,0xe2,0xdb,0x29,0x1a,0x21,0x34,0xc5,0x9f,0xaa,0xd8,0xde,0x33,0x62,0xec,0x00,0xbe,0xf5,0x8f,0x89,0x9d,0xd9,0xf3,0x00,0x57,0xb5,0x60 },
{ 0x96,0x02,0x12,0xff,0x43,0x17,0xda,0x3a,0x0b,0x81,0xa3,0xc0,0x8c,0x4a,0x55,0xb8,0x15,0xcb,0xfe,0x90,0x10,0x02,0x3d,0xfc,0x8d,0x47,0x02,0xbb,0xf8,0x17,0x75,0x72 },
{ 0x94,0x65,0x14,0xda,0x30,0x50,0xb8,0x6c,0x6f,0xa4,0xcd,0xfc,0x2c,0xd5,0x3d,0xdd,0x59,0x4a,0x3f,0xd8,0xf6,0x0d,0x8d,0xf6,0x54,0x56,0x58,0xc6,0x42,0x53,0xbd,0x44 },
{ 0x86,0x5c,0x86,0x83,0x9a,0xd4,0x1d,0xe4,0xa8,0x5d,0x6c,0x38,0xef,0xee,0xe4,0x40,0x94,0xcf,0x21,0x43,0x93,0x54,0x3f,0xb8,0xf8,0x3f,0x4d,0x26,0xf0,0x48,0xd1,0x25 },
{ 0x10,0x9d,0xa2,0x2e,0xa2,0x67,0x16,0x7a,0xc7,0x23,0x64,0x50,0x1b,0x2d,0xef,0x7d,0x51,0xfc,0xd7,0x2a,0x34,0x7b,0x65,0x7e,0xae,0x66,0x01,0xb3,0xf4,0xb6,0x78,0x2f },
{ 0x03,0x1a,0xbf,0x47,0xa2,0x50,0x33,0x86,0xe3,0xc4,0x06,0x9d,0xff,0x57,0x1a,0x5e,0x0d,0xe0,0xb7,0x73,0xdb,0x53,0x7e,0xc8,0x20,0xaf,0x74,0xbf,0x5d,0x90,0xca,0x5b },
{ 0xd7,0x31,0xa8,0xfe,0x20,0x47,0x14,0xae,0x4f,0xbf,0x0d,0x77,0xae,0x97,0x32,0x5d,0xb5,0xc5,0x2c,0x87,0xa9,0xa6,0x4c,0x81,0x78,0xeb,0xb4,0x1f,0x40,0x96,0xeb,0x53 },
{ 0x41,0x3e,0xf1,0x7c,0xa4,0xc9,0xb2,0x6e,0xaa,0xd8,0x58,0x84,0x06,0x4c,0xdb,0xcc,0x1a,0xdc,0xf2,0x07,0xbf,0xcd,0xc5,0xba,0x3c,0x58,0x67,0xd4,0xd8,0xbd,0x18,0x7e },
{ 0x3f,0x0e,0x67,0x27,0x9f,0x5e,0xc5,0xd1,0x10,0x23,0xc9,0x97,0x5c,0xe7,0x41,0x98,0xcc,0xef,0x8a,0x84,0xf7,0x3f,0x44,0x24,0x6c,0x6a,0x31,0x74,0xb6,0x18,0x73,0x24 },
{ 0x4c,0xfc,0x47,0x83,0x4f,0x90,0x31,0xf8,0x75,0x44,0x58,0x6d,0x79,0xb5,0x25,0xc4,0xd8,0x64,0xeb,0xf8,0x31,0xe8,0x08,0x25,0x1a,0x9f,0xaf,0xc1,0x39,0xc0,0x07,0x63 },
{ 0xc6,0xc9,0x48,0xbd,0xd4,0x2b,0xee,0xec,0xb1,0x0c,0xbe,0xdc,0x69,0x4e,0x04,0xb4,0xd7,0xca,0x24,0x6e,0x8a,0x66,0x30,0x2f,0x1e,0x4c,0x94,0x8c,0xdb,0x77,0xa0,0x0c },
{ 0xf5,0x99,0x3e,0x8d,0x54,0x54,0x4d,0x8a,0xae,0xf3,0x8e,0x72,0xdd,0xda,0xa3,0xc1,0x49,0x3e,0x47,0xd6,0x5e,0xef,0xc3,0x16,0x70,0xa3,0x18,0x86,0x57,0x86,0x3a,0x32 },
{ 0xd6,0x62,0x45,0x9b,0x91,0x17,0x54,0xe9,0x6b,0xc3,0x06,0x8d,0xa0,0xba,0x1a,0xc8,0x78,0x4c,0xd1,0xce,0x49,0xa9,0x19,0x51,0xb0,0xcd,0x19,0x07,0x2b,0x03,0x97,0x51 },
{ 0x69,0xdb,0x0d,0xb4,0x80,0x20,0xd2,0xfc,0x91,0x48,0x3e,0xea,0xa0,0x28,0xa9,0x45,0xec,0x0d,0xef,0x61,0x78,0x5a,0xaa,0xea,0x43,0xd6,0xe1,0x0a,0x86,0x59,0x3f,0x1a },
{ 0x69,0xfa,0x46,0x1e,0xc4,0x92,0x82,0xf2,0x47,0x32,0x71,0xc9,0xbf,0x51,0xee,0x89,0xb5,0x46,0xb6,0x41,0x32,0x76,0x40,0xcc,0x98,0xd3,0x2e,0xec,0x06,0x36,0x5b,0x10 },
{ 0xe0,0xd9,0x28,0xc9,0xf8,0x32,0x93,0xcf,0xc9,0x0b,0xc0,0x9c,0x77,0xea,0xb6,0x79,0xe5,0x5d,0x38,0x06,0x4c,0x32,0x31,0xee,0x9b,0xec,0x2a,0x31,0xf4,0x59,0xa4,0x13 },
{ 0x7c,0xf8,0xf8,0xd4,0x2a,0x9c,0x23,0x9f,0xaf,0xfb,0xb2,0x94,0x2d,0xaf,0xb0,0xf2,0x79,0xf5,0x2c,0xb5,0x5c,0xad,0xce,0xaf,0xef,0xe5,0x5c,0x63,0xe1,0x5f,0x68,0x50 },
{ 0xf3,0x9d,0xd0,0xb9,0x27,0xaa,0x2c,0x77,0x07,0xc8,0x29,0xa5,0x8c,0x7c,0xbe,0x70,0x6d,0xad,0xf6,0xf2,0xea,0xab,0x22,0x38,0x56,0x92,0xaa,0x89,0x58,0xd2,0x83,0x21 },
{ 0x94,0xf6,0xce,0x64,0xe0,0x68,0x59,0x81,0xff,0xa9,0xa3,0xd0,0x16,0x62,0xe6,0xfa,0x5a,0x5f,0x8c,0x5a,0x1e,0xf0,0xf1,0x58,0x3e,0xb6,0x95,0x2f,0x3f,0x8a,0xb1,0x58 },
{ 0x0d,0xf6,0xdf,0xe6,0x22,0xe4,0x39,0x17,0x49,0xbf,0xa7,0x83,0xf6,0x78,0xdd,0x31,0xd1,0xff,0xb5,0x8f,0xb7,0xe4,0xe8,0xe3,0xcc,0x32,0x3a,0x80,0xa9,0x9e,0x8f,0x78 },
{ 0xe8,0x51,0xc7,0xfe,0x0c,0xad,0xe4,0x65,0x34,0x2e,0x2b,0x88,0xbf,0xaa,0x30,0x18,0x5e,0x56,0x1f,0xf3,0x48,0x71,0x21,0xa7,0x4d,0x55,0x4b,0x0b,0x05,0xc2,0x94,0x2a },
{ 0x10,0x2d,0xa9,0xaf,0xad,0x92,0xec,0x34,0x6d,0x45,0x03,0xb7,0xca,0xa3,0xc2,0xa1,0x98,0xe2,0x89,0xb9,0x13,0x2a,0xbe,0x3a,0x46,0xf2,0xdc,0xed,0x06,0xdf,0xa5,0x36 },
{ 0x49,0xc0,0x0a,0x84,0x13,0x70,0xd2,0xfe,0xa1,0x38,0xc4,0x0b,0x72,0x9a,0xac,0xfb,0x6c,0xb8,0x4a,0x00,0x1e,0xb4,0x90,0x3f,0xba,0x41,0x1c,0xd5,0x5d,0xcb,0x1e,0x1c },
{ 0x7f,0xaa,0xac,0x89,0x5f,0x71,0xbc,0xa1,0x46,0xe4,0xff,0x63,0x59,0x94,0x59,0x40,0xe5,0x4e,0x69,0x08,0x53,0x07,0xf9,0x9c,0xf5,0xe4,0x8e,0x59,0x1c,0x88,0x64,0x07 },
{ 0xc9,0xca,0xee,0xe1,0x1c,0x67,0xfa,0x50,0xf2,0x28,0x89,0x75,0x1f,0xcb,0x4b,0xdb,0x13,0xb3,0x0e,0x5b,0xec,0x39,0xf0,0x4c,0x22,0x93,0xfe,0x38,0xec,0x05,0x92,0x28 },
{ 0x88,0x6d,0xe3,0x8d,0xea,0x38,0x28,0x0d,0x70,0x9a,0xd5,0x0a,0x85,0x00,0x4a,0x33,0x75,0x3e,0x93,0x7c,0x66,0x1b,0x18,0xa7,0x4d,0xf7,0x9e,0x09,0x1f,0xd7,0xb1,0x53 },
{ 0xf1,0x39,0x62,0xbc,0x23,0x52,0x48,0x4e,0xe0,0x59,0xff,0x27,0x4d,0x74,0x30,0x20,0x8a,0xa2,0x38,0xe0,0x4d,0xc4,0x41,0x37,0x01,0x50,0xff,0xa6,0x2a,0x22,0x53,0x3f },
{ 0x61,0xf2,0x66,0x78,0xe8,0x35,0x72,0xa9,0xe1,0x9f,0x74,0x00,0x1f,0x97,0xba,0xac,0xe3,0xa0,0xc8,0x20,0xe0,0xca,0x00,0xb5,0xcd,0xa8,0x12,0xf6,0xca,0xe4,0x26,0x24 },
{ 0x1f,0x74,0xf1,0x59,0x71,0x8f,0x41,0x05,0x51,0x62,0xa3,0x6f,0xf5,0x98,0xdd,0x37,0xe5,0xff,0x5e,0x15,0x1b,0x0a,0x02,0xd9,0x34,0xe4,0xfb,0x2a,0xc3,0xf3,0xd5,0x72 },
{ 0xad,0x7b,0xf1,0x0a,0x44,0xf2,0xbd,0xe1,0x94,0x36,0x7c,0x8b,0x6b,0x1e,0x94,0xd6,0x0d,0x3c,0xe1,0x4a,0xfb,0x1f,0x31,0x8f,0xf0,0x67,0x95,0x1e,0xec,0x01,0x7f,0x2e },
{ 0x26,0xb5,0xe9,0x51,0x78,0xa5,0x1e,0x59,0x90,0xdd,0xc9,0x5d,0x75,0xe7,0x7b,0xfe,0x3f,0x32,0x39,0x14,0xcc,0x3b,0x68,0x20,0x6b,0x33,0x69,0x0b,0x5e,0x40,0x29,0x52 },
{ 0xe9,0x0c,0xe6,0x6d,0xa6,0x8c,0x40,0x21,0xb3,0x3a,0x50,0x13,0x3d,0xf0,0xe7,0xbf,0xf9,0xf3,0x4d,0x2b,0x4a,0x3b,0x29,0xc4,0x0a,0x89,0x76,0x7c,0xe8,0x33,0xc6,0x75 },
{ 0xf8,0x3c,0x9f,0x1e,0xca,0x7d,0x61,0x51,0x31,0xd6,0x3d,0xae,0x9f,0x87,0xb6,0x1e,0xdc,0x58,0xa9,0x70,0xad,0xd7,0x6f,0xbe,0xa7,0x2e,0xe1,0xfa,0x2f,0x4f,0xe4,0x3f },
{ 0xb4,0xcd,0x51,0xc8,0xe7,0xa1,0x0a,0xe6,0x55,0x4c,0xfd,0xf7,0xb2,0xf2,0xac,0x0b,0x09,0x8d,0xed,0x5e,0xdb,0x52,0xf4,0x1f,0xe8,0x25,0x9b,0x37,0xc6,0x07,0xbe,0x06 },
{ 0xe7,0x35,0x4e,0x3f,0xad,0x48,0x38,0xc0,0x1d,0xd3,0xdb,0xf0,0xb2,0xaf,0xc0,0x77,0x9c,0x21,0x79,0x31,0x93,0x7c,0x31,0x9b,0x19,0x36,0xaf,0xc2,0x53,0x00,0x32,0x36 },
{ 0x00,0x75,0x23,0xdc,0xda,0x35,0x4d,0x9d,0x9a,0x84,0x92,0x08,0x37,0x66,0x18,0x16,0xf6,0xb8,0x34,0x4c,0xf3,0x14,0x2b,0xda,0xe9,0x94,0x7f,0xed,0x90,0x1a,0xcc,0x7e },
{ 0xee,0x8a,0x05,0x95,0xf3,0x9d,0x3e,0x8e,0x8b,0xa2,0x3b,0x94,0x80,0xa7,0xab,0x92,0x38,0xf4,0x2a,0x37,0x2d,0xee,0x4a,0xc5,0xbe,0xb9,0x25,0x6e,0x24,0x5b,0xe1,0x79 },
{ 0x9d,0x2c,0x86,0x1a,0x11,0x8e,0x98,0xb1,0xe1,0x58,0x5a,0xf7,0xa4,0x1f,0xaf,0x30,0x15,0xe3,0x00,0xbb,0x5a,0xce,0xd0,0x64,0x5a,0xaf,0x89,0x9c,0x21,0x95,0x04,0x0f },
{ 0xe6,0x22,0x0f,0xab,0xcf,0x17,0x61,0x6d,0x4a,0x99,0x7d,0x0c,0x92,0x43,0xef,0xed,0xdb,0x4f,0x9d,0xe1,0xa8,0x54,0x3c,0x4a,0x42,0x26,0x19,0xc3,0xf6,0x69,0xca,0x12 },
{ 0x17,0x24,0xff,0x37,0x41,0x36,0xa0,0x27,0xb9,0xc3,0x9f,0xea,0x4f,0xaa,0x3b,0x78,0x71,0xf1,0x6e,0x45,0xce,0xf0,0x6a,0x33,0xa8,0x21,0xd6,0x29,0x06,0xcc,0x7e,0x7d },
{ 0x82,0xa1,0xc2,0xfd,0x2b,0x00,0xcb,0xaf,0xe0,0x74,0x62,0xef,0xad,0xf3,0xdc,0x86,0x12,0x20,0x67,0x5a,0xea,0x87,0x16,0x02,0xc9,0xa7,0xed,0x04,0xd9,0x17,0xee,0x28 },
{ 0x2b,0x1f,0x06,0xab,0x4e,0xa2,0x55,0x83,0x75,0x6b,0x68,0x70,0x3b,0xbc,0x0f,0x10,0xc9,0xca,0x79,0x0a,0x78,0xba,0x9a,0xb9,0x22,0xd3,0x28,0x37,0xa4,0xcb,0x5b,0x01 },
{ 0x30,0x16,0x4c,0xfc,0x55,0x87,0x7a,0xcf,0x33,0x01,0x0d,0xdc,0x0a,0x0d,0x7f,0xa3,0xca,0x72,0x3f,0xad,0x87,0x95,0xec,0xe1,0xa6,0x79,0x28,0xa1,0xaa,0x81,0x25,0x7e },
{ 0x5e,0x6e,0xb2,0x07,0x0c,0x9b,0x47,0xbf,0xe5,0x9f,0xc3,0x66,0xe2,0xa5,0xca,0x62,0x12,0xd5,0x74,0xc9,0xac,0x3a,0x6d,0x1e,0xb7,0xa5,0xaf,0x03,0x29,0x9b,0x91,0x13 },
{ 0xfd,0x0e,0x45,0x86,0x5d,0x42,0x5c,0xee,0xae,0x28,0xc1,0x3e,0xd0,0xa8,0xce,0x2d,0x98,0x62,0xbf,0x6c,0x46,0x85,0xda,0xd6,0xb5,0xf3,0xf9,0x61,0x4f,0x59,0x22,0x13 },
{ 0x5a,0x91,0x60,0xe4,0xba,0x68,0x58,0x13,0xf0,0x34,0x1a,0xc9,0x4e,0x96,0xc4,0x54,0xd9,0xd1,0x5b,0x6d,0xfd,0x1f,0x1f,0xb0,0x10,0x45,0xc9,0x12,0xda,0x3c,0xde,0x00 },
{ 0x67,0xc0,0x01,0xdb,0x4d,0x3c,0x2d,0xc4,0x8d,0x57,0x97,0xea,0x23,0x78,0x43,0x86,0xd9,0x60,0xf0,0xdc,0xad,0x22,0x6c,0xdf,0xa0,0x1c,0x18,0xa8,0x43,0xca,0x5d,0x1a },
{ 0x70,0xaa,0xa6,0xd2,0x4e,0xd2,0x79,0x2c,0x09,0x63,0xbb,0x3d,0x8e,0x0f,0xbc,0xa3,0xa6,0x35,0x7e,0x46,0x68,0x0c,0x1b,0xdc,0x37,0x02,0xee,0x9f,0xa3,0xa9,0x48,0x13 },
{ 0x86,0xc5,0xbb,0x2d,0xd9,0xf9,0xef,0x4a,0x70,0xb7,0x30,0x30,0x3e,0x24,0x20,0xd6,0xd3,0x9a,0xbd,0x3a,0x06,0x0a,0xc7,0xa0,0xf1,0x2c,0x73,0x1f,0x0b,0x53,0xe1,0x51 },
{ 0xe2,0xff,0x88,0x59,0x92,0xcf,0x11,0x6f,0x47,0x4a,0x3d,0xf3,0xda,0x74,0x99,0xe0,0x13,0x44,0x60,0x50,0x4f,0xa4,0x14,0x8b,0x9f,0xff,0x7f,0xde,0xd6,0xfc,0x2e,0x30 },
{ 0x28,0x6f,0x27,0x1e,0xd4,0xce,0xf4,0x76,0xea,0xed,0x75,0x20,0xcf,0x7f,0x88,0xad,0x23,0x27,0xbd,0x01,0x26,0x54,0xe9,0x8c,0x77,0x9a,0x6b,0xe7,0x58,0x8b,0xb4,0x02 },
{ 0xa1,0xd0,0x81,0xea,0xb3,0x5a,0x21,0x65,0x7f,0x60,0x00,0x9a,0xb7,0x8a,0x6e,0x05,0x2b,0x1c,0xc4,0x74,0xbf,0x7a,0xd3,0x09,0xb4,0x80,0xaf,0xd0,0x97,0x06,0x9e,0x44 },
{ 0x36,0x17,0xc5,0xd5,0xad,0x5a,0xe3,0x94,0x1e,0x77,0x3b,0x8f,0x3d,0xe1,0xf8,0xe3,0x0e,0xdc,0x34,0x96,0x71,0xb2,0xb3,0x05,0x7e,0x49,0x6a,0x06,0x49,0x67,0x79,0x2f },
{ 0xb4,0xe3,0x01,0x0d,0xba,0x1f,0xe2,0x4e,0xee,0x08,0xae,0xfc,0x2c,0x19,0xf9,0xa4,0x9d,0xf8,0xe4,0x5f,0x94,0x38,0x9e,0x06,0xbb,0x21,0xfb,0x3b,0x87,0xcb,0x6f,0x62 },
{ 0xc7,0x76,0x0f,0xfb,0x4a,0xd2,0xeb,0x53,0x85,0xd8,0x14,0xa9,0x08,0x40,0xad,0xcc,0x0f,0x79,0xf2,0x29,0xb8,0xb5,0x7d,0x20,0xd1,0x4f,0x24,0xbe,0xad,0xab,0xe6,0x2d },
{ 0x52,0x64,0x76,0xdb,0x1f,0x80,0x92,0x47,0x3d,0x15,0x33,0xc1,0xf1,0xd3,0x8c,0x55,0x05,0xd1,0xd6,0xcd,0xb4,0xd0,0x6e,0x55,0x6d,0x83,0x47,0xcf,0xfa,0x00,0x0b,0x50 },
{ 0x35,0xf4,0x96,0x70,0x24,0x75,0x0b,0x47,0x6f,0xc6,0x3e,0x43,0x59,0x44,0x3f,0x8b,0x3c,0x98,0xf2,0x09,0x05,0x9e,0x79,0x81,0xe9,0x7b,0xa6,0xb8,0x1c,0x08,0xf5,0x71 },
{ 0xf8,0x38,0x0e,0x1d,0x45,0x9a,0x1b,0x06,0xbc,0xa3,0x59,0x9f,0x83,0x0c,0x44,0x1a,0xd8,0xc9,0x1f,0xc4,0xdc,0xf1,0x6f,0xe4,0xa8,0x34,0xee,0x57,0xd2,0x54,0x2b,0x77 },
{ 0xc6,0x19,0x37,0x27,0x6f,0xee,0x76,0xb4,0x2b,0xe0,0x77,0x08,0x55,0x37,0xf7,0x50,0x82,0xfc,0xaf,0xd5,0xd1,0xca,0xa2,0xe9,0xda,0x8f,0x33,0x65,0xea,0x8e,0x2a,0x16 },
{ 0xd2,0xb5,0x9b,0xaa,0x6c,0x51,0xf4,0x2e,0x71,0x39,0x52,0xdb,0xef,0x43,0x2d,0xfc,0x4f,0xae,0x24,0xde,0x4d,0xdf,0x5e,0x6d,0x07,0x3c,0xf6,0x6c,0x72,0x29,0xbd,0x00 },
{ 0x00,0x58,0x2c,0xdc,0xa9,0x73,0xdb,0x16,0xa7,0x56,0xa6,0x6a,0xb2,0x77,0x52,0x17,0xd9,0xc3,0x88,0x2b,0x7d,0x0d,0x79,0x19,0x88,0xae,0xd2,0x13,0x47,0xf0,0x4f,0x6c },
{ 0xb9,0xe4,0x19,0x44,0xd4,0xb4,0x29,0xd8,0x8f,0x44,0xb8,0xcd,0x96,0x04,0xbf,0xff,0xee,0xfb,0x06,0x01,0xf0,0x97,0x29,0x4f,0x52,0xf6,0x75,0x56,0xd8,0xf6,0x53,0x60 },
{ 0xed,0xf5,0x78,0xe3,0x49,0xd6,0x9a,0x29,0xb8,0x4c,0x84,0xff,0xf3,0xff,0x14,0x0c,0xa1,0x2a,0xf0,0xd9,0xed,0x3c,0xd3,0xa3,0x16,0x52,0xb7,0x92,0x18,0x63,0xbc,0x57 },
{ 0x89,0x19,0x17,0x8a,0x17,0xbb,0x74,0x64,0xf4,0xdc,0x1a,0x25,0xe6,0x3d,0x2f,0xb3,0x7a,0xb3,0xc4,0xaf,0x52,0x30,0xc4,0xc9,0x93,0x01,0x1f,0xd7,0x9a,0x79,0xd2,0x6a },
{ 0x0d,0x27,0xa8,0x55,0x15,0xc0,0x9a,0x9f,0x82,0x6a,0xfd,0x2d,0x42,0x21,0x6a,0x2b,0x6a,0x9d,0x03,0x36,0x29,0x31,0xca,0xe7,0xac,0x3d,0x55,0x24,0x93,0x0c,0x32,0x1f },
{ 0x7d,0x33,0xfb,0x91,0x05,0xaa,0x60,0x3d,0x8b,0x27,0xa4,0xea,0x4f,0xc1,0x16,0x07,0xc5,0xc1,0xa4,0xed,0x48,0x7a,0xb1,0x56,0xeb,0xac,0x58,0x6f,0x94,0x0f,0xa4,0x7b },
{ 0x40,0x96,0xad,0xfd,0x0f,0xf3,0x8f,0xe9,0x32,0x3f,0xa8,0x8e,0x9e,0xe1,0xac,0xf1,0xad,0x7d,0x84,0xee,0x75,0x65,0x33,0x1b,0x54,0x07,0x93,0xd8,0xfd,0x24,0xd0,0x4d },
{ 0x9f,0xab,0x5e,0x1f,0x9c,0xea,0x54,0xa2,0x0e,0xa9,0xaf,0x1a,0xf8,0x7e,0xba,0xdd,0x15,0x21,0x19,0x82,0x38,0x59,0xfe,0xe8,0xcf,0xe5,0x13,0xd5,0xe0,0xe4,0x09,0x37 },
{ 0x0a,0x38,0x41,0x32,0xfe,0x52,0xf7,0xd3,0x0f,0x2d,0xea,0x67,0x4a,0x85,0xbf,0xa4,0xcd,0xa5,0xbb,0xbe,0x11,0xca,0x2e,0xd0,0x5a,0x79,0x62,0x87,0xa9,0x32,0xf2,0x04 },
{ 0x32,0x18,0xbc,0x96,0x81,0xec,0x1f,0xdb,0x2c,0x37,0x87,0xa8,0x9e,0x66,0x2d,0x4a,0x52,0xdf,0xb8,0x9e,0xf6,0x66,0x7c,0x62,0x69,0x09,0x4d,0x82,0x79,0x06,0xa0,0x3c },
{ 0xf2,0x0a,0x94,0x43,0x69,0x74,0x6e,0x53,0x5a,0x92,0xee,0xaf,0xc2,0x1b,0xb9,0x61,0x4b,0xda,0x07,0xae,0x15,0xc4,0x9b,0xcf,0x99,0x11,0xe1,0x79,0x7a,0xf5,0xe0,0x26 },
{ 0xe2,0x2a,0xe2,0xff,0x47,0x0a,0x6f,0xfa,0x29,0x02,0x8f,0x3b,0xcf,0xdd,0x99,0x9a,0x10,0x08,0x29,0xb4,0xec,0x00,0x60,0x46,0x31,0xed,0x6e,0x8a,0x2f,0x94,0x91,0x20 },
{ 0x44,0x17,0x3b,0xe4,0x2b,0xdd,0x0a,0xfd,0x2a,0x85,0xcb,0x14,0xb2,0x9e,0x7a,0x33,0x2d,0x85,0x21,0xc3,0x1f,0x42,0x4d,0xd0,0xb4,0x78,0x65,0xbc,0x84,0x04,0x91,0x76 },
{ 0xab,0x48,0x5a,0x16,0x4e,0x03,0xb3,0xa4,0xf5,0x86,0xe7,0x58,0x53,0x70,0x42,0x84,0x28,0x16,0x2e,0xe3,0xab,0x4d,0xeb,0x0f,0xca,0x97,0x8a,0x00,0x5e,0xe6,0x7a,0x2f },
{ 0x87,0xb4,0x87,0xe4,0xe5,0x92,0xdb,0x44,0x45,0x94,0xf8,0x4d,0x30,0x0d,0x51,0x8e,0xbe,0x42,0x0f,0xaf,0x49,0xd3,0x85,0x37,0x0e,0x14,0xf5,0xa3,0x86,0xd2,0x74,0x67 },
{ 0xc7,0x65,0x04,0x1b,0xbd,0xa2,0x61,0x48,0x93,0x5e,0x58,0x8d,0x73,0xb4,0xca,0xbb,0xf9,0x1d,0xdc,0xdc,0xde,0x05,0xbc,0x9f,0x23,0xcd,0x6a,0x79,0x9c,0x8e,0x3b,0x67 },
{ 0x91,0x5b,0x03,0x72,0x98,0x48,0xef,0xfe,0xed,0x53,0x54,0xc4,0x48,0xa1,0x67,0x15,0xdd,0x29,0xdd,0x52,0x39,0xed,0x94,0x64,0x57,0x30,0x08,0x67,0xf3,0x32,0xf4,0x68 },
{ 0x35,0x78,0xd3,0x1e,0xeb,0x79,0xe2,0xa6,0x1f,0x2a,0xd6,0x06,0x3b,0xf8,0x0e,0x6f,0x35,0x90,0x5c,0x52,0x7d,0xd6,0x48,0xa5,0x83,0xc0,0x7d,0xe5,0x50,0xda,0x6e,0x11 },
{ 0x3c,0xb6,0xb7,0x2e,0xea,0xcf,0xd1,0xde,0x08,0x84,0xc1,0x5c,0x3c,0x2b,0xa5,0xc0,0x21,0xac,0xc2,0xcd,0xe3,0xf7,0x98,0x9e,0x1b,0xb5,0xee,0xa0,0x42,0x44,0x74,0x0d },
{ 0x4a,0x76,0xf6,0xdb,0x1b,0x8e,0x6b,0xda,0x78,0xb8,0x54,0xdf,0xf7,0xf4,0xc4,0xee,0x7a,0xf3,0xdb,0xe5,0xf7,0x43,0x68,0x96,0xdd,0xd5,0xb1,0xc3,0x88,0xb4,0x7a,0x12 },
{ 0x28,0x65,0xad,0x3e,0xca,0x0c,0xba,0xbc,0x9e,0x8c,0x2d,0x85,0x60,0xcc,0x55,0x66,0x2d,0x22,0x07,0xed,0x9f,0x8f,0xc4,0xbf,0xaf,0x73,0x20,0xa7,0x7c,0x6d,0x7a,0x67 },
{ 0xfc,0x05,0xcd,0xfe,0xd7,0x02,0xa4,0xba,0xac,0x34,0x9b,0xf9,0xbc,0x04,0xa5,0x23,0xe8,0x04,0xa7,0xab,0x57,0xaa,0x76,0xb0,0x0f,0x9a,0x12,0xdd,0x7f,0x0f,0xaf,0x5c },
{ 0xfe,0x00,0x25,0xaa,0x7b,0xf1,0x00,0x0f,0x6c,0xaf,0x6e,0x34,0xb9,0xed,0xcd,0x3f,0x41,0x37,0xed,0x74,0x4b,0x19,0x72,0x26,0xd0,0x7a,0x7a,0x5b,0xe1,0xcd,0xf7,0x45 },
{ 0x8b,0xe3,0x02,0x95,0xe8,0x33,0xe3,0x7a,0xb4,0x90,0x21,0xc8,0xbb,0x0c,0x8c,0x5e,0x9d,0x63,0xf2,0xa2,0x56,0x5d,0x08,0x72,0x7f,0x9b,0xea,0xfb,0xaf,0x93,0x80,0x40 },
{ 0x95,0xbc,0xce,0x33,0x7b,0x0a,0x65,0x5b,0xe0,0x26,0x1a,0x40,0x68,0x28,0x4f,0xb4,0xb1,0x21,0x11,0x1b,0xd2,0x7a,0x64,0x43,0xb2,0x39,0x75,0x34,0x01,0x05,0xdc,0x17 },
{ 0x36,0x12,0x3f,0xe0,0x92,0x37,0xfe,0xbf,0xcc,0xb6,0xc5,0x4a,0x14,0x14,0x7d,0xab,0xd1,0x22,0xaa,0x1b,0x08,0xf2,0x97,0xb0,0x0c,0xdb,0x21,0x2c,0xfa,0x7f,0x60,0x4c },
{ 0x54,0xbc,0x2f,0xf4,0x02,0x89,0x70,0x2c,0x69,0x78,0x5d,0xe5,0x16,0x65,0xf0,0xc8,0x69,0x2e,0xc7,0xde,0xca,0x6a,0x64,0x63,0x53,0xec,0xe0,0xd1,0xd3,0xd9,0xd1,0x09 },
{ 0xb5,0xb9,0x1a,0x6b,0xb0,0xc1,0x94,0x9a,0x52,0x24,0x48,0xb8,0x71,0x3e,0x1b,0xfe,0xb5,0x56,0x23,0x3c,0x18,0xb3,0xdf,0x81,0x10,0xe7,0xd5,0x63,0x04,0xc3,0xb7,0x46 },
{ 0x51,0x4f,0xd2,0xb3,0xf8,0xac,0xe2,0x23,0xfb,0x3a,0xee,0x33,0x23,0xea,0x95,0xd3,0xa2,0xec,0x58,0x37,0xd9,0x80,0x45,0x0c,0x0d,0x2f,0xb4,0x33,0xb6,0xe0,0x4a,0x32 },
{ 0xaf,0x0e,0x94,0xaa,0x48,0xd9,0xf8,0xb6,0x79,0x2a,0x2c,0xe6,0xfa,0x9d,0xd3,0xa0,0x54,0xaf,0x84,0xa8,0xfb,0xcf,0xcf,0xe1,0x0b,0x24,0xa7,0xce,0xb8,0x97,0xe6,0x12 },
{ 0x92,0xed,0xc3,0x77,0x1b,0xf5,0xfc,0x7e,0xbe,0x08,0x9e,0xfc,0x51,0x5f,0x2a,0x50,0x51,0x4c,0xc5,0x90,0xf0,0x14,0x7c,0x9c,0xcb,0xd4,0x3e,0xd4,0x88,0x6d,0xc0,0x49 },
{ 0x11,0xd9,0x98,0x18,0x64,0xfe,0x46,0x51,0x14,0xe9,0xda,0xe6,0x9d,0x2d,0xc3,0x11,0x6c,0x72,0x67,0x93,0xd2,0xc9,0xd0,0xbc,0x74,0x31,0x7c,0xb7,0x96,0xd0,0x99,0x0b },
{ 0xbe,0x10,0x07,0x57,0x28,0xa1,0x6b,0x76,0xa8,0x14,0x31,0x8b,0x27,0x4d,0x2d,0xa7,0x90,0x3c,0xc2,0xaa,0x53,0x32,0x04,0x4a,0xd6,0x13,0x2d,0x8e,0x00,0xea,0xb1,0x05 },
{ 0x61,0x52,0xc2,0x38,0xc7,0xc7,0x20,0xe8,0xb6,0xfe,0xf8,0xd4,0xf1,0x06,0x26,0x0d,0xcb,0x02,0xbe,0x51,0x9f,0x9f,0xd7,0xad,0x64,0x65,0xf7,0x62,0xac,0x32,0xf9,0x0f },
{ 0x9a,0x3e,0xe0,0xae,0xb0,0x2b,0x46,0x04,0x12,0x7f,0x98,0x1e,0x2f,0x75,0xbb,0x92,0x01,0xbe,0xe0,0x24,0xb6,0x8d,0xa0,0x8b,0x43,0x01,0x65,0x67,0x8a,0xa9,0x1b,0x72 },
{ 0xfa,0x00,0xc4,0xd8,0xe4,0xf5,0xbe,0x7b,0x68,0xa9,0xa6,0xf4,0xd5,0x1a,0xb6,0x2e,0xbf,0x92,0x19,0xf7,0xc8,0x1c,0x31,0x65,0x52,0xef,0x30,0x93,0x34,0x60,0xb4,0x62 },
{ 0x6d,0x0f,0xad,0xfd,0xff,0xd6,0xa5,0xc4,0x16,0x6c,0x72,0x4a,0x1b,0x42,0xf2,0xe3,0xb8,0xe9,0x2a,0xeb,0x33,0x35,0x69,0x2e,0x22,0x3a,0xbf,0x61,0x34,0x2c,0x37,0x61 },
{ 0x6f,0x6c,0x90,0x82,0x65,0x23,0x00,0x05,0x30,0x70,0x5f,0xa3,0x94,0x10,0xbd,0xf7,0x5c,0xd7,0x75,0xbd,0xd4,0x48,0xc2,0x6c,0x6e,0x03,0x50,0x8c,0x71,0xe4,0x80,0x39 },
{ 0x40,0x7e,0x18,0xcf,0xb4,0x80,0x56,0x72,0x3c,0x05,0xb6,0x68,0xad,0x2f,0x32,0xa8,0x15,0xe7,0x0a,0x92,0x2d,0xe3,0x67,0xe7,0x8d,0x1e,0x7e,0x8d,0xf1,0xc4,0xe1,0x25 },
{ 0x53,0x4e,0xb9,0x93,0xce,0x36,0xd6,0x35,0x71,0x0c,0x98,0x3d,0xa2,0x2f,0x9a,0xe9,0xc9,0x36,0x4e,0xc4,0x1d,0x7d,0x8d,0x26,0xe9,0xe4,0x5f,0x3a,0xda,0xfe,0x42,0x60 },
{ 0xe1,0x09,0xb0,0x74,0xf6,0xbe,0xde,0x7f,0x3d,0xfd,0xde,0x31,0xa4,0x70,0x11,0xab,0x24,0x01,0x05,0xea,0x0d,0xd3,0x7a,0x9c,0x65,0x16,0x55,0x49,0x10,0xab,0x0c,0x3c },
{ 0x46,0x07,0xd6,0x3b,0x28,0x61,0x5e,0xcb,0x83,0xc5,0xe1,0xdc,0xbc,0x2f,0xd9,0x3a,0x34,0x6e,0x62,0xec,0x4a,0xb6,0xe3,0xf6,0xd0,0x16,0x23,0x3f,0xaf,0x24,0x2f,0x19 },
{ 0xec,0x42,0x64,0x86,0x00,0xbd,0xe6,0x7b,0x28,0xf8,0xf8,0x38,0xcb,0x37,0xfc,0x59,0x5a,0x77,0x0c,0x60,0x78,0x86,0x41,0xbd,0x47,0xc3,0xf1,0x24,0xf3,0x20,0x00,0x3b },
{ 0xfa,0xee,0x54,0x77,0x92,0x10,0x27,0xfc,0x1b,0x4a,0x93,0xfa,0xcc,0x11,0x57,0x45,0x05,0x02,0x0f,0x9a,0x61,0x77,0x58,0xa7,0xdd,0xfe,0xa4,0x03,0xa8,0xdb,0xcf,0x02 },
{ 0xae,0x10,0xc7,0x2a,0x6c,0xa5,0xf7,0x5c,0x0a,0x4a,0x7e,0x1b,0xbe,0x9d,0xaf,0x6f,0x25,0x72,0xe3,0x20,0x03,0x53,0xc7,0x34,0xa5,0xc9,0xaf,0x47,0x72,0x2f,0x53,0x18 },
{ 0x77,0xb4,0x0f,0x1d,0xcc,0xb1,0x89,0x72,0x82,0x9b,0xd5,0xfc,0x4a,0x64,0x0e,0xd5,0x46,0xda,0xb1,0x05,0xf0,0x10,0x1b,0xdd,0x3a,0x15,0x0e,0xb4,0xf4,0x93,0xfa,0x75 },
{ 0xf4,0x41,0x4b,0x80,0x09,0x92,0x67,0x8f,0x7a,0x4d,0x0f,0x71,0x1f,0xba,0xaf,0xf4,0x14,0x06,0xcf,0x9c,0xa3,0x8d,0x92,0x24,0x20,0x61,0xea,0xe0,0xaf,0xd4,0x5c,0x34 },
{ 0x08,0x08,0x32,0x73,0x5e,0x47,0x2c,0xef,0xa3,0x7c,0xfd,0x1a,0x93,0x70,0xc7,0x11,0x13,0x85,0xa6,0x91,0x3f,0x9a,0x99,0x7f,0xbe,0x0d,0x03,0xc2,0x79,0xb2,0x58,0x7f },
{ 0x0f,0xb2,0x76,0xf4,0x09,0x94,0x46,0x07,0x18,0x8b,0xec,0x06,0xb3,0x82,0x60,0x1a,0x0a,0xad,0xf7,0xab,0x09,0x15,0x94,0x4b,0x72,0xeb,0xd6,0x0c,0xea,0x1a,0xf5,0x5a },
{ 0xaf,0x03,0x2b,0x91,0xf6,0xf8,0xbd,0x87,0x27,0x10,0xf5,0xe3,0x09,0xc5,0x30,0x81,0x9d,0x08,0x3d,0x05,0xc8,0xf4,0x93,0x9f,0xf3,0xe5,0xfd,0xa4,0xf0,0xd6,0x52,0x13 },
{ 0xb4,0xdf,0x30,0x98,0x0d,0xf1,0x18,0x37,0x79,0xcb,0x3c,0x2d,0x13,0x7d,0xa7,0x23,0xe3,0x64,0x38,0x2b,0x13,0x9a,0x32,0x67,0x98,0x94,0x12,0x76,0x05,0x4a,0x75,0x46 },
{ 0x00,0x8e,0xb5,0xf0,0x57,0x5d,0xae,0x77,0xc9,0x0d,0x3c,0x8f,0x03,0x09,0x83,0x71,0xac,0xc1,0x16,0xf9,0x3f,0xeb,0x5b,0x24,0x1f,0x7e,0xae,0x9f,0xa2,0xf6,0xf1,0x5a },
{ 0xd3,0x29,0x66,0x6e,0x26,0x55,0x29,0x62,0xe3,0xd1,0xae,0xdb,0x33,0xb6,0xfd,0xac,0x43,0xa2,0xb6,0xf8,0x00,0xb0,0xf7,0x04,0x97,0x17,0x94,0x01,0x52,0x4c,0x22,0x6b },
{ 0xd2,0x35,0x49,0x4b,0x06,0x43,0xd9,0x28,0x13,0x63,0x8c,0xdd,0xd1,0x26,0xe2,0x8b,0x0c,0xf6,0x56,0x49,0x5e,0x6e,0x91,0xb3,0x5d,0x33,0xe4,0x62,0x73,0x60,0x8b,0x76 },
{ 0xb3,0xac,0x71,0x13,0x63,0x15,0xb1,0xa1,0xf5,0xe4,0x96,0xf5,0x8b,0xb2,0x1f,0xea,0x31,0xcc,0x48,0x1a,0x17,0xc6,0x37,0xb6,0x2d,0xee,0x9c,0xb9,0x88,0xa3,0xe0,0x4f },
{ 0xd1,0x74,0xe6,0xaa,0x9d,0x4c,0x26,0x86,0x7c,0xbf,0x85,0xff,0xae,0xd7,0x5e,0x88,0xa2,0xda,0x7d,0x0f,0x55,0xf7,0x6e,0x36,0x15,0xb0,0x9a,0x5d,0xa2,0x80,0xdd,0x50 },
{ 0xc9,0xcc,0xf5,0x2c,0xc6,0x59,0xa9,0xdf,0x41,0x07,0x91,0xd5,0x48,0x00,0xd1,0x0b,0x4c,0xbe,0xad,0xf0,0x0a,0x3a,0x5b,0x70,0xdd,0x81,0x6d,0x75,0xb3,0x28,0x8b,0x0e },
{ 0x28,0x3a,0x77,0xff,0x39,0x9a,0x51,0x68,0x6c,0x2d,0xb7,0xa3,0x36,0x7b,0xb6,0x66,0x7a,0x26,0x9b,0xdc,0x9c,0xb2,0x7a,0x3c,0xd0,0xfc,0x34,0xaf,0x33,0xdd,0x0a,0x48 },
{ 0x9b,0xb5,0xb6,0x19,0xfd,0x1d,0x0b,0xfa,0x29,0xb2,0x8e,0xdd,0xad,0xeb,0xf1,0x7d,0x13,0xcd,0xf0,0x62,0x30,0x34,0x5c,0xfc,0x10,0x03,0xd7,0x06,0x2c,0xf8,0xfc,0x1f },
{ 0x54,0x63,0x73,0xa5,0xd0,0x3f,0xe2,0x18,0x05,0x14,0xae,0x4e,0xe8,0x5e,0xe9,0xfd,0xb9,0x6b,0x32,0xf4,0x2e,0x0e,0x4b,0x2c,0xab,0x84,0xd7,0x5e,0xd5,0x3e,0x80,0x33 },
{ 0xb6,0xea,0x35,0xe4,0xba,0xe6,0x98,0x78,0x06,0xcb,0x8a,0x66,0xec,0xe4,0xc1,0x28,0xf4,0x64,0xff,0x64,0xf2,0xfc,0x36,0x0f,0xbe,0x0a,0xde,0xe5,0xdb,0x3a,0x49,0x12 },
{ 0x80,0xeb,0xa2,0x21,0x8a,0x3b,0xed,0x1c,0xcb,0x2d,0x94,0x28,0xf8,0x6b,0xc1,0xdb,0xce,0x76,0xf7,0x8c,0x30,0x68,0x9e,0x7c,0xc3,0x3f,0xf1,0xec,0x8c,0x3a,0xd5,0x12 },
{ 0x90,0x92,0xda,0x19,0xa2,0x89,0x74,0xab,0x9f,0xc5,0xad,0x76,0xa9,0x02,0x0e,0x64,0x5a,0x5d,0x57,0x67,0x14,0xd2,0xff,0x06,0x91,0x41,0x20,0xeb,0x01,0xe0,0xa9,0x07 },
{ 0xc4,0xa1,0xe5,0x87,0x30,0x0f,0xfa,0x30,0x13,0x0c,0x67,0xda,0xc1,0xc6,0x1a,0xe5,0xb8,0x7d,0xaa,0x4c,0xba,0x69,0x91,0xad,0x6c,0xf5,0x4c,0x38,0xa4,0x7d,0x30,0x00 },
{ 0xdd,0x04,0x5f,0xf6,0xf2,0xdb,0x0f,0x98,0x86,0x72,0xcd,0x69,0x5d,0x8f,0xe9,0x3f,0xc8,0x86,0x6c,0xb0,0xa0,0x06,0xd8,0x57,0xa2,0xa6,0x1a,0x2b,0xe4,0xdf,0x7e,0x3e },
{ 0x5f,0x67,0x46,0x72,0x1c,0xe8,0x8b,0xc9,0x78,0x24,0xcd,0x54,0xaf,0x5e,0x0a,0x0c,0x66,0x1a,0x7f,0x9a,0xf6,0x26,0xa5,0xa2,0x5b,0x75,0xf5,0x08,0xf1,0x49,0xdc,0x40 },
{ 0x95,0x83,0x7d,0x76,0x9a,0x03,0x56,0x2a,0x4a,0x89,0xab,0x4b,0xd8,0x3c,0xe6,0x48,0x9c,0x5e,0x44,0xba,0xb5,0x91,0x33,0xda,0x04,0x88,0x45,0x2d,0xa5,0x17,0x10,0x06 },
{ 0x3c,0xc4,0xb4,0xd9,0xe8,0x15,0x93,0x1e,0x1f,0xf4,0xa5,0xaa,0x84,0x4d,0x78,0x88,0x1c,0xd8,0x4e,0x34,0x44,0xf7,0x81,0x0a,0x7c,0xf6,0x05,0x9e,0x3e,0x86,0x43,0x72 },
{ 0x7e,0x74,0x85,0x24,0x56,0xde,0x09,0xa5,0xb0,0xd6,0xeb,0xf7,0x63,0x26,0xfb,0xb5,0x78,0x46,0xb4,0x1a,0x07,0xa3,0x41,0xb0,0x38,0x5e,0x7f,0x4e,0xe1,0x17,0x71,0x47 },
{ 0xa2,0xdb,0x34,0xf7,0x4e,0x77,0x81,0x47,0x99,0x7e,0x24,0x1e,0x9f,0x6d,0x4f,0x52,0x1a,0xa8,0x0b,0xd5,0x44,0x3d,0x42,0x24,0x42,0x6c,0x9b,0x5c,0xeb,0xb0,0x9b,0x3d },
{ 0xf5,0xa7,0xb7,0xf6,0x6f,0x7f,0x17,0xc1,0x6c,0x27,0xe1,0x59,0x38,0x98,0xdf,0x53,0xf0,0xd1,0x1b,0xdd,0x8f,0x02,0x79,0x79,0xca,0xfc,0x24,0xd2,0x06,0xb7,0xe3,0x2c },
{ 0xee,0xf3,0x3c,0x17,0x9f,0x81,0x6b,0xda,0x03,0x4e,0x43,0xb0,0x11,0xff,0x1c,0x38,0x73,0x06,0xed,0xc7,0xce,0x5b,0xaa,0x20,0xc6,0x6f,0x1e,0x84,0x92,0xd7,0xa3,0x11 },
{ 0x29,0xf9,0x9f,0xa7,0x31,0xa0,0xec,0x1f,0xd7,0x08,0x7d,0xdf,0xbb,0x59,0x7d,0xcb,0x98,0x36,0xd9,0x55,0x29,0x40,0xdf,0xe0,0x45,0x20,0x44,0xdc,0x85,0xd6,0xb0,0x36 },
{ 0xe7,0x18,0xcb,0xb1,0x93,0x6f,0x94,0x3b,0x9a,0x68,0xeb,0xaf,0xee,0x1b,0x80,0xa9,0x83,0xae,0x3a,0xe3,0xb9,0x54,0xa7,0xca,0xfc,0x16,0x70,0x2a,0x91,0x87,0x1c,0x2c },
{ 0x6e,0x67,0x99,0x76,0x1e,0x15,0x79,0x30,0xfd,0x32,0x9f,0x81,0x91,0xa0,0x83,0xc6,0xd3,0x99,0xbf,0x0f,0xac,0xd5,0x86,0x9f,0xc5,0x9a,0xd3,0x4c,0x67,0xa7,0x5e,0x6c },
{ 0x30,0xd5,0x64,0x99,0x1e,0x8b,0x78,0x8b,0x3e,0x27,0x61,0x40,0x58,0x4e,0x41,0x1b,0x40,0xa2,0xcb,0xa5,0xc6,0x6a,0x38,0xf1,0x6f,0xdf,0xa6,0xb4,0x22,0xaf,0xaa,0x71 },
{ 0x70,0xa6,0x93,0xf5,0x03,0xa2,0x00,0x0f,0xa5,0x3f,0x0a,0x98,0x10,0x3a,0xc2,0xc8,0x30,0x04,0x7e,0x88,0xa6,0x1c,0xd9,0xc6,0x74,0x04,0xd0,0xe2,0xf1,0x36,0x6a,0x17 },
{ 0xbd,0xa2,0xec,0x17,0x87,0xda,0x8e,0xcc,0x23,0x34,0x01,0x26,0xb5,0x8e,0x25,0xd0,0x6f,0x4f,0x24,0xc2,0x03,0xfe,0x12,0xc9,0x97,0xa0,0x94,0x81,0xa8,0xe2,0x2d,0x0e },
{ 0x25,0xf1,0x9f,0x49,0xb3,0xc2,0x17,0x34,0x9d,0x1c,0x56,0xfb,0xa5,0xfb,0x01,0xa5,0xed,0x4e,0xec,0xc6,0x83,0x12,0xe7,0xd4,0x29,0xee,0xc2,0xc2,0xb2,0x1a,0x9e,0x4c },
{ 0x33,0x1c,0x81,0x26,0xbb,0x5b,0x15,0xd7,0x5a,0x64,0x46,0x2c,0x9c,0x09,0xa8,0x84,0x57,0x13,0xb1,0x49,0x74,0xee,0x9c,0x61,0x21,0x33,0x36,0x26,0xe2,0xd7,0xb5,0x0e },
{ 0xaa,0xb0,0x7c,0x63,0xff,0x89,0x3a,0x8a,0x86,0x31,0xd9,0xea,0xb6,0x09,0x48,0x2d,0x1d,0x9b,0x51,0x5a,0x98,0x95,0x33,0x13,0xd4,0x50,0xc8,0x40,0x94,0xb5,0x53,0x0e },
{ 0x06,0xc4,0xae,0x12,0x5a,0x8c,0xf6,0xb5,0xa4,0xf9,0x0e,0x72,0xc7,0x5c,0x40,0xe8,0xbc,0x27,0x0e,0x6b,0x6d,0xca,0xba,0x2b,0x19,0xe5,0x80,0x11,0xac,0x4a,0xc8,0x1a },
{ 0x91,0xcd,0xf6,0x17,0x85,0x2c,0xa0,0x1f,0xc1,0x2a,0x08,0x69,0x20,0xc1,0x26,0xac,0x87,0x46,0x47,0xd1,0x26,0xec,0x68,0xcb,0x87,0x0c,0x57,0xa1,0x15,0xea,0x18,0x6d },
{ 0x19,0xfa,0x34,0xd6,0xfb,0x3c,0xd7,0x4a,0x11,0xcf,0xfd,0x66,0xc2,0x69,0xc1,0x68,0x6d,0x6a,0x62,0xca,0xa2,0x6f,0xff,0x9f,0xe3,0x69,0x6a,0xde,0xd9,0x72,0x8c,0x21 },
{ 0x23,0x6d,0x74,0x08,0xd9,0x04,0x9d,0xc5,0x10,0x96,0xb1,0xe9,0x9b,0xe6,0x11,0xa4,0x02,0x4a,0xe1,0x02,0xc6,0x7b,0x84,0x52,0x91,0xf4,0xa8,0xdd,0x0b,0x97,0x6f,0x30 },
{ 0xd1,0x29,0x37,0x66,0xb5,0xdd,0xca,0x9a,0xaa,0x27,0x3a,0x41,0x85,0xe6,0x14,0x39,0xc5,0x03,0x0b,0x86,0x87,0xa3,0x31,0xb8,0x8a,0xf0,0x8e,0xa5,0xd9,0x96,0x6a,0x06 },
{ 0x70,0xa9,0xad,0x37,0xd7,0xd9,0x84,0x4f,0x27,0x22,0x6d,0xe3,0x0a,0x01,0x90,0xff,0x6a,0x86,0x6b,0xaf,0x5b,0x2c,0xa4,0x6e,0x29,0x61,0x0e,0xd2,0x54,0x7a,0x70,0x3f },
{ 0x12,0x17,0xe9,0x90,0x68,0xd4,0x97,0xbe,0xde,0x77,0xd8,0x0d,0xf8,0xfa,0x12,0x58,0x37,0xd3,0x2c,0x78,0xeb,0x32,0xde,0xf6,0x1e,0x30,0x30,0xce,0xd3,0xd5,0xda,0x7d },
{ 0x1c,0x92,0xad,0x3f,0x32,0xa3,0x52,0xbe,0xbf,0xb7,0x64,0x1d,0x9d,0x9b,0xb4,0x20,0x08,0x89,0x65,0x3d,0xbd,0x2d,0xfc,0x09,0x20,0xef,0x1e,0xcf,0xdc,0x4a,0x3b,0x65 },
{ 0x77,0xb9,0xdf,0xea,0xe8,0x3a,0x16,0x0d,0xe9,0x20,0xf9,0xf8,0xff,0xf6,0xa9,0x4d,0x67,0xd6,0x0e,0x6a,0xf6,0xdc,0x28,0x8a,0xd4,0x12,0xcd,0xa3,0x0c,0xad,0xd7,0x6b },
{ 0x5d,0x34,0xbf,0xf2,0x60,0xd1,0xb4,0x31,0xd0,0x3f,0x37,0x10,0x4f,0xf9,0xb6,0x52,0xf6,0x7d,0x74,0xed,0x90,0xc3,0x89,0xbe,0xf5,0xf2,0x32,0x4f,0x01,0xca,0x5b,0x49 },
{ 0x85,0xdb,0x65,0xd4,0x14,0x0b,0xd5,0x7f,0x93,0x5f,0xe1,0x24,0x30,0xe2,0xc7,0x78,0x96,0xb4,0x83,0x2d,0x85,0xa7,0x01,0x0d,0x71,0x90,0x42,0xc5,0x0c,0xc9,0xb6,0x56 },
{ 0x49,0x39,0xd1,0xab,0xd9,0x34,0x16,0x23,0xdf,0xf4,0x25,0x56,0x07,0xf3,0x31,0xcb,0xed,0x76,0xbe,0x12,0x70,0xb4,0xab,0x6e,0xb3,0x43,0x93,0xfd,0xac,0xab,0x65,0x22 },
{ 0xcd,0x94,0x1f,0xb8,0x8b,0x98,0xfa,0xcb,0xfa,0x72,0x00,0x03,0xf8,0xd5,0xaf,0x11,0xa0,0xfc,0x24,0x2a,0x9d,0x99,0x75,0x13,0x80,0xa5,0x67,0xb7,0x6f,0x35,0x72,0x0f },
{ 0x0a,0xa8,0xcb,0x6c,0xad,0x0c,0x1e,0x17,0x39,0x69,0x75,0x6a,0x71,0x0a,0x18,0x40,0xf4,0xbf,0xfd,0x27,0x6a,0xb6,0x2b,0x97,0x55,0xcd,0xca,0x2e,0xe1,0x4c,0x30,0x2c },
{ 0x07,0x5b,0xe6,0x2f,0x9b,0xc4,0xd9,0xe3,0x4a,0x94,0x16,0x24,0x1e,0xcf,0x96,0x6e,0x9f,0xa3,0xa7,0x6e,0x68,0x32,0x32,0xef,0x08,0xef,0x40,0x46,0x0c,0x9b,0x7d,0x3b },
{ 0xe2,0x01,0x62,0x02,0x82,0x4e,0xa1,0x8a,0xea,0x03,0x00,0x6f,0x4e,0xd6,0x84,0xac,0xf7,0xc6,0xbe,0x7e,0x38,0x3e,0x59,0x21,0x95,0x58,0xcc,0xa8,0x21,0xd3,0x84,0x54 },
{ 0xb4,0x1b,0xdf,0x72,0x6e,0x1d,0xe6,0x35,0xf7,0x79,0x28,0x65,0xb1,0x8d,0xeb,0xd2,0x21,0xb4,0xb2,0x64,0x65,0x63,0x98,0xa3,0x0e,0xf3,0xb5,0x52,0x2c,0xbe,0xf2,0x77 },
{ 0x78,0x1e,0xeb,0x48,0x36,0x14,0xe1,0x85,0xd3,0xd9,0x12,0x45,0xf6,0x03,0x68,0x3a,0xa7,0x40,0x16,0x9c,0x8c,0xd1,0x5d,0xcf,0x05,0x0a,0x1b,0xd7,0x3e,0x1d,0x17,0x6b },
{ 0xff,0x26,0x53,0x18,0xa6,0xf1,0x83,0x4e,0x41,0x1a,0xcc,0x0a,0x01,0x3a,0xea,0x11,0xe3,0x6f,0xad,0x48,0xe0,0xab,0x3c,0xe2,0xc1,0x83,0x33,0x27,0x53,0x6e,0xd1,0x70 },
{ 0xdb,0x04,0x14,0xac,0x21,0x70,0xcf,0xe4,0x5a,0x12,0x36,0x9c,0x07,0x4e,0x9f,0xae,0x64,0x37,0x04,0x67,0x7d,0x54,0x16,0x6a,0x06,0xda,0xac,0x0e,0x4f,0xe2,0x07,0x2b },
{ 0xbc,0x8c,0x7f,0x97,0x0b,0x84,0x9a,0xe6,0xcf,0xf2,0xa0,0xb7,0xb0,0x71,0x52,0xc7,0xf5,0x97,0x0d,0x12,0x39,0x34,0x25,0x51,0x19,0xaf,0x5c,0xd4,0x73,0x76,0x9b,0x01 },
{ 0x7b,0x80,0xae,0x2b,0xd9,0x36,0x8f,0x36,0xcb,0x7a,0x00,0xb5,0xbf,0xa5,0xba,0x66,0xc5,0xec,0xca,0xce,0x57,0x3e,0xac,0x20,0x49,0x68,0x17,0x5c,0xf9,0xe0,0xb2,0x79 },
{ 0x1e,0x23,0x59,0xf3,0xa4,0xe4,0x1e,0x8d,0x38,0x0b,0xf5,0x9b,0x00,0xb3,0x48,0x2e,0xd1,0x26,0x1a,0xf4,0x44,0x48,0xe5,0x54,0xaa,0x1a,0x0a,0xca,0x5b,0x21,0x77,0x05 },
{ 0x96,0x42,0x1d,0x0f,0x6c,0x80,0x63,0xed,0xe2,0x36,0xd0,0x8d,0x8a,0x90,0x3d,0x1b,0x31,0x40,0xdb,0xc1,0xda,0x11,0xf7,0x9b,0x48,0x9d,0xaf,0x40,0x04,0x18,0xe7,0x3a },
{ 0x17,0x01,0xd1,0x34,0xb6,0xec,0xf1,0xb4,0x5c,0x06,0x41,0xe8,0xd3,0x55,0x44,0xd0,0xe1,0xa6,0x12,0x5c,0x4f,0x58,0x51,0xc6,0xa0,0x36,0x32,0x18,0x02,0xed,0x7e,0x15 },
{ 0x0b,0x87,0x37,0xef,0xac,0x5f,0xcd,0x28,0x44,0x00,0x96,0x21,0xe9,0x41,0x95,0xe7,0x60,0xde,0xd7,0x6f,0x0e,0x73,0x48,0xb1,0x05,0x9a,0x1b,0xd4,0x38,0x94,0x75,0x79 },
{ 0x25,0xa5,0xf0,0x4e,0x98,0x31,0x31,0x2d,0x97,0x30,0xd2,0x7f,0x12,0xfa,0x5f,0x66,0x4c,0xa3,0xa2,0x8e,0x8b,0x98,0xec,0xe6,0xb6,0x90,0xf6,0xad,0x74,0xcd,0x4d,0x32 },
{ 0x7d,0xbb,0xaf,0x41,0xbe,0xa5,0x8d,0x50,0xef,0x81,0xab,0xca,0x6c,0x3a,0x48,0xc4,0xf3,0xd4,0xed,0x41,0x74,0x14,0x34,0xe1,0x15,0x2c,0x0b,0x2d,0x7c,0x22,0x67,0x1f },
{ 0x7e,0xcf,0xa5,0x25,0xcf,0x23,0x7b,0xfd,0x1b,0xfe,0xef,0x21,0xcd,0x34,0x80,0x7a,0xae,0x81,0x39,0x6e,0xd8,0x6d,0xf4,0x4d,0x73,0xce,0xfb,0xd3,0x19,0xf1,0x72,0x73 },
{ 0x95,0xfd,0x98,0x6b,0xc3,0x24,0x8e,0x9e,0x4b,0x61,0x16,0x4a,0xb9,0xf0,0x0f,0xf7,0x09,0x31,0xb9,0x41,0x42,0xa0,0xec,0xe3,0x17,0x1b,0x6f,0x3b,0x5c,0x02,0xd2,0x0f },
{ 0x40,0x62,0x30,0x73,0x99,0x39,0x3c,0x8f,0x4c,0xa3,0x13,0xfc,0x7c,0x3d,0x03,0x25,0x1c,0xb5,0x7e,0x83,0xab,0x4e,0xfd,0xfe,0x38,0x99,0x01,0xa9,0x32,0x46,0xb8,0x66 },
{ 0xe2,0x1b,0xa0,0x85,0x29,0xd0,0x8c,0x31,0x5e,0x5e,0xf8,0xb4,0xdc,0x69,0x33,0x13,0xb3,0x72,0x9e,0x36,0xe8,0x16,0x66,0x5e,0x29,0xfa,0xc0,0x9e,0xf1,0x0f,0xf0,0x1c },
{ 0x7a,0x50,0x09,0xec,0x6f,0x95,0x91,0x78,0x6c,0x47,0xde,0x89,0x2a,0x8d,0x42,0xc5,0x46,0xf3,0xeb,0x20,0x0c,0x38,0x77,0x11,0xd8,0x18,0xb5,0xcf,0xc7,0xe2,0x92,0x27 },
{ 0xcd,0xd8,0x08,0x86,0x86,0x39,0x90,0xb6,0x7b,0xd4,0x7a,0x33,0xb9,0x73,0x22,0xcc,0xd4,0x9f,0x60,0x55,0xdc,0xf1,0xd3,0xe7,0xfd,0x58,0x04,0xd6,0x7b,0x70,0xa5,0x75 },
{ 0x7f,0x20,0x88,0xcb,0x94,0xd0,0xee,0x31,0x14,0x24,0xe9,0xb0,0x73,0x98,0xae,0x97,0x46,0x3d,0xa4,0x99,0x90,0x6b,0xc2,0xa8,0x8a,0xf0,0x81,0x9b,0x8d,0xb6,0x47,0x75 },
{ 0x72,0x14,0x93,0x6a,0x4a,0x4d,0x68,0x88,0x91,0xab,0x66,0x9b,0x9f,0xbf,0xf7,0x81,0x1f,0x0a,0x85,0xb8,0x7f,0xfe,0xc0,0x39,0x36,0x56,0x7b,0x7c,0x81,0x2e,0x81,0x34 },
{ 0xc7,0x30,0x48,0xf3,0x9e,0x32,0xd7,0xc6,0x9a,0x4e,0x0c,0x16,0xde,0xa7,0xcf,0x34,0x30,0xfc,0xd5,0x0e,0x01,0x9f,0xfe,0x8a,0x1c,0x28,0xe4,0x83,0x2d,0xc8,0x23,0x49 },
{ 0xbe,0x79,0x17,0xf1,0xe9,0x45,0x00,0x11,0xaa,0x93,0x7a,0x3a,0x39,0xa0,0xe6,0x06,0x15,0xe0,0x00,0xe5,0xdc,0x32,0x3f,0xfb,0x24,0xe4,0xba,0x34,0x28,0x6d,0x26,0x1f },
{ 0x2c,0xfc,0x3f,0x3a,0x4b,0xc6,0x54,0xa8,0x49,0x7b,0x02,0x2a,0xd5,0x26,0x05,0x45,0x90,0x9d,0xf2,0xda,0xf4,0x83,0xb8,0xbc,0x04,0xe6,0x90,0x80,0xf6,0x7a,0x7a,0x34 },
{ 0xd8,0x8c,0x25,0x58,0xdc,0x46,0x29,0xd5,0xe7,0x77,0x54,0x63,0xeb,0xb1,0xb3,0x9e,0x31,0xb4,0x3a,0xf7,0xcd,0x34,0xa8,0xf8,0x4e,0x44,0xa7,0xe5,0x82,0xa3,0xf9,0x40 },
{ 0x38,0x88,0x70,0xe8,0xdd,0x48,0xaf,0xf9,0x8a,0xd2,0xd7,0x8e,0x70,0xab,0xcf,0x78,0xfe,0x01,0xa0,0x0d,0xc7,0x75,0x6d,0x57,0x48,0x6b,0xfe,0x09,0x30,0x4b,0x8e,0x13 },
{ 0x5f,0xb7,0x4a,0x2f,0x8a,0x3c,0xeb,0x84,0x0c,0x0a,0xde,0x07,0xe5,0x5f,0x5f,0x46,0x21,0xf9,0xf9,0xaf,0x21,0x4d,0x63,0x0c,0xf3,0xc2,0x5f,0xc2,0xc4,0xd7,0xf1,0x11 },
{ 0x37,0x0e,0xbf,0x83,0x86,0x1b,0xde,0x52,0xb7,0x0a,0x28,0x3e,0x26,0x7f,0x4a,0x89,0xac,0x48,0x0c,0xc9,0x66,0x30,0x9c,0xb6,0x8e,0x5a,0x25,0x79,0xda,0xd5,0x63,0x4e },
{ 0xfb,0xc5,0x15,0x0e,0x65,0x75,0x1c,0xbf,0xd0,0x87,0xb9,0xe5,0xc2,0xa3,0x76,0x22,0xcd,0x03,0xab,0x7b,0x34,0x74,0x18,0x7b,0x54,0xca,0xab,0xc9,0x67,0x3b,0x72,0x6e },
{ 0xf5,0x03,0x2a,0x75,0x1f,0x2f,0xa2,0x31,0x93,0x4e,0xf0,0x66,0x02,0x73,0xd6,0xae,0xc8,0x9f,0xf6,0xb7,0x22,0x23,0x2a,0x7f,0x1a,0xe9,0x23,0x89,0x53,0xb2,0xd4,0x35 },
{ 0xe0,0x72,0x08,0x0f,0xfc,0x79,0x53,0xb8,0xeb,0x0d,0x15,0x7c,0x22,0x26,0xba,0x13,0xe8,0xbe,0xa6,0x36,0x37,0xbc,0xdc,0xe8,0x18,0x45,0x45,0x8f,0xd3,0x34,0xb9,0x33 },
{ 0x87,0x85,0xc7,0x3e,0xc4,0x03,0xf7,0x7b,0x19,0x58,0x95,0x5e,0xed,0xeb,0xfd,0xf3,0x96,0xa2,0xa3,0xe5,0x2b,0x90,0x16,0x4c,0xa1,0xa6,0x47,0x1c,0xe1,0xc9,0x0a,0x60 },
{ 0xa6,0x84,0x17,0x38,0xe9,0x81,0xef,0xd5,0xce,0x42,0xdf,0x84,0xd7,0x81,0x1c,0xeb,0xd2,0x92,0xe7,0x74,0x19,0x15,0xf0,0x25,0x59,0xd1,0x46,0xe1,0xd9,0x0a,0x1e,0x2d },
{ 0x31,0xdb,0x98,0xef,0x5e,0x6c,0x6b,0x10,0xcc,0x68,0xb2,0x97,0x66,0xe2,0x7e,0xc7,0x16,0xb1,0x1c,0x2e,0x84,0xaf,0xb0,0xb2,0xdc,0x19,0xd6,0x3d,0xbe,0xc2,0xec,0x1b },
{ 0x1c,0x67,0x9b,0xaf,0xf2,0x92,0x69,0x43,0x06,0x34,0xed,0xae,0xf6,0xc0,0x8c,0x81,0x8c,0xd2,0xa6,0x97,0xaa,0x0c,0x3b,0x63,0x9b,0xb7,0x64,0xbe,0x6e,0x89,0x15,0x6c },
{ 0xc2,0x0c,0x8a,0x23,0xbf,0xf9,0x34,0xe0,0x95,0xa9,0x4e,0xc3,0xf8,0x4c,0x61,0x7a,0xdd,0x4b,0x91,0x8f,0x95,0xc8,0x22,0x84,0xa6,0xbf,0xb5,0x34,0x10,0x92,0xac,0x4b },
{ 0xe9,0x35,0xf4,0xff,0xe2,0x33,0x7b,0xa0,0xd4,0x08,0x6f,0xc4,0x43,0x0e,0xa1,0x0b,0x4d,0xf0,0x14,0xcb,0xb0,0x46,0x65,0x12,0x68,0x72,0x2a,0x44,0xf5,0xe3,0x88,0x2b },
{ 0x8f,0xda,0xd7,0xc0,0x19,0x6b,0xbd,0x2c,0xf2,0x65,0x23,0x6d,0x02,0x88,0xf7,0x95,0xb8,0xfd,0x8b,0xa7,0x5a,0x94,0xc0,0x3a,0xc0,0xdd,0x27,0x34,0xfd,0x25,0xa9,0x5e },
{ 0xa1,0x20,0x92,0x8e,0x8d,0x38,0xa1,0x0c,0xc6,0x51,0xd6,0x28,0x26,0xe7,0x38,0x37,0x18,0x4d,0x4f,0xc2,0x06,0x42,0x1c,0x6c,0x74,0xf8,0xe3,0xfd,0xf8,0xa4,0x45,0x17 },
{ 0xd4,0x89,0xb3,0x49,0x38,0x18,0xcd,0x59,0x85,0xe0,0x50,0xa9,0xb8,0xf5,0x47,0xd3,0x04,0xea,0xd7,0x1a,0x0e,0x92,0x19,0x6f,0x0d,0xcf,0x1d,0x25,0x1f,0xe1,0xe5,0x48 },
{ 0xa1,0x17,0xb7,0xcb,0x84,0xe2,0x04,0xe7,0xed,0x20,0x1c,0x82,0x67,0xd2,0x82,0x65,0x5e,0xa8,0xe9,0x94,0x22,0x51,0xac,0x04,0xfa,0x5d,0xb2,0x59,0xc3,0x1d,0xda,0x48 },
{ 0xde,0x2f,0xd8,0xd1,0xfe,0x02,0xf7,0xc0,0x44,0xfb,0x44,0x07,0x43,0x4e,0x98,0xfe,0xa3,0x79,0x9a,0x33,0x64,0x01,0x43,0xaf,0x9b,0xab,0x94,0xc3,0xee,0x82,0xbd,0x6e },
{ 0xc8,0x85,0x03,0x7e,0x45,0x82,0x04,0xac,0x35,0xbe,0x4e,0xef,0x9c,0x07,0xe2,0x76,0xf3,0x7d,0x03,0x4f,0xec,0x35,0xa4,0x37,0xcd,0x19,0x33,0x19,0xc3,0x56,0xf8,0x06 },
{ 0xbb,0xa5,0x35,0x5b,0xe7,0x3d,0xb2,0x32,0x23,0xfb,0xf5,0x75,0x73,0x63,0x10,0xee,0xf5,0xb8,0x63,0x52,0x97,0xdd,0x64,0x12,0x14,0x83,0xf7,0x5d,0x05,0xbe,0x5d,0x77 },
{ 0x6a,0xe7,0x8c,0x73,0x96,0x82,0x73,0x54,0xd7,0x69,0xd3,0x70,0xa0,0xfe,0xc0,0xf1,0x68,0x85,0x49,0x67,0x53,0x26,0x6e,0x35,0x31,0xd4,0x71,0x4d,0xbe,0x55,0xb3,0x24 },
{ 0xf9,0xe0,0x1b,0x11,0x76,0x2b,0xd4,0x76,0x21,0xae,0x19,0x78,0xd1,0x55,0x16,0x67,0xcc,0xb1,0xcc,0xb8,0x68,0x13,0x1f,0x00,0xf5,0xca,0x12,0x46,0x6d,0x05,0x61,0x33 },
{ 0x0c,0x62,0x13,0x9a,0x0f,0x55,0x40,0xd2,0x33,0x69,0xaa,0xa2,0x71,0xc3,0xf1,0xad,0x11,0xfe,0xff,0x73,0x08,0x69,0x82,0x9f,0x41,0x0d,0x38,0xb8,0x6b,0x82,0x29,0x12 },
{ 0xfe,0xd0,0x80,0xa2,0x58,0x66,0xdf,0x61,0x54,0x38,0x70,0x07,0x3c,0xe2,0x3e,0xb5,0x96,0x6b,0x4e,0xda,0xfe,0x15,0x96,0xb1,0x6c,0xc3,0x96,0xc3,0x84,0xc2,0x64,0x7a },
{ 0xba,0x0b,0x92,0xef,0x62,0x24,0x75,0xe1,0xab,0x69,0x8f,0x71,0x6a,0x65,0x02,0xf3,0x72,0xfa,0x37,0xba,0x97,0x22,0xd3,0x8b,0x51,0x8c,0xbf,0xc0,0x2d,0xd6,0xb2,0x27 },
{ 0x96,0x1e,0x1b,0x00,0x6d,0xf4,0xb1,0x6b,0xc2,0x3c,0x23,0xb4,0xc0,0xdc,0x25,0x00,0x03,0x30,0x0d,0xfe,0xc4,0x2b,0x64,0x1d,0xe4,0x12,0xef,0x31,0xce,0xb6,0xeb,0x59 },
{ 0x0e,0xd0,0x49,0x47,0x73,0xbf,0x3c,0x7d,0x9e,0xf1,0x66,0x28,0x17,0x9c,0x55,0xa1,0x61,0xcb,0x69,0x9f,0xd4,0xed,0x44,0x69,0xaf,0x39,0x37,0xc7,0x46,0xb3,0x21,0x49 },
{ 0xdc,0x1f,0x97,0xba,0x62,0x0d,0x73,0x49,0x93,0xa5,0x80,0x78,0x79,0x99,0x5b,0x54,0x9e,0xd9,0xd5,0x1e,0x5d,0x5d,0x95,0x16,0x9f,0xb9,0x82,0xc9,0x82,0x5d,0xc1,0x53 },
{ 0x5f,0x3a,0xe8,0x08,0x9a,0x85,0x40,0x6d,0x74,0x8a,0xc7,0xfb,0xf0,0x10,0xb6,0x84,0xc7,0x34,0x41,0x77,0x75,0x34,0x6e,0x0c,0xef,0x65,0x40,0xb1,0x62,0x5b,0x1f,0x07 },
{ 0x11,0x14,0x7c,0x95,0x3e,0xe9,0xa2,0x9b,0x1d,0x4f,0x19,0x2c,0xfd,0xf5,0x65,0x7d,0x48,0x2b,0x45,0xf6,0x3d,0x8a,0x31,0xfe,0xe0,0xaa,0x6b,0x31,0x85,0x35,0xdc,0x23 },
{ 0x20,0x42,0xc3,0xa1,0xd6,0x6a,0xb2,0xc7,0xcb,0xa6,0x71,0xb4,0x82,0xe1,0x8e,0x9f,0x29,0x3a,0x5e,0x0d,0x2a,0xeb,0x9a,0x17,0x48,0x85,0x5a,0x38,0x56,0xfc,0x35,0x7c },
{ 0x71,0xea,0x4a,0x4b,0xf1,0xcf,0x3a,0xf2,0xc7,0x5d,0xcd,0xb1,0xc6,0xf9,0xd3,0xe5,0x79,0xf8,0xb7,0x51,0x4b,0x1f,0xa1,0x40,0xfd,0xe1,0x3f,0x0e,0x64,0xc4,0x9c,0x71 },
{ 0x68,0xae,0x94,0x4e,0x3f,0xbf,0x6a,0x99,0x7f,0x97,0x15,0xa0,0x2b,0x11,0xc7,0xc2,0xf3,0x38,0xa6,0xae,0x6b,0x12,0x44,0xe3,0xdc,0x5d,0x16,0x67,0x74,0x76,0xeb,0x42 },
{ 0xf0,0xaa,0x8e,0x0c,0x39,0x0e,0xee,0x39,0x0d,0x52,0xd1,0x4f,0xec,0x4d,0x62,0x69,0x98,0x48,0x2c,0xb4,0x1f,0x04,0xa8,0xa2,0x7c,0xb2,0x46,0x7d,0xa9,0x15,0x2f,0x6e },
{ 0xa8,0xda,0x18,0x99,0x28,0x82,0xdb,0x96,0x67,0x95,0xef,0x37,0xea,0x97,0x79,0x5c,0x9c,0xe5,0xdd,0x1c,0xf7,0xd4,0xe7,0x73,0x74,0xdb,0x3f,0xd2,0x54,0xa7,0x07,0x7c },
{ 0x19,0xf3,0x33,0x40,0x8a,0x11,0x8b,0xbb,0xf8,0x3f,0xc7,0x8c,0x2e,0x02,0x8b,0x67,0x0d,0x90,0x22,0xf7,0x9a,0x01,0x7f,0xe5,0x05,0xdf,0x13,0x77,0xf3,0xfd,0x60,0x3a },
{ 0x25,0x8f,0x3e,0xaa,0x41,0x4a,0x8c,0x45,0x39,0x39,0x15,0x57,0xd1,0xc8,0x60,0x5c,0x05,0x72,0x3c,0x14,0x2f,0x80,0x02,0x63,0x0b,0xf4,0xd3,0x22,0x78,0xfb,0x03,0x5c },
{ 0x26,0x22,0xec,0x21,0x5b,0x20,0x22,0x12,0xc5,0x8e,0xb8,0xec,0xdb,0x9e,0x8d,0x0b,0xff,0x0b,0x19,0x3c,0x9f,0x05,0xbe,0x13,0x1d,0xa5,0x71,0x66,0xce,0x50,0xaf,0x3f },
{ 0x92,0xc6,0xca,0x59,0x75,0x46,0x50,0x35,0x8a,0x7f,0x74,0x13,0xf5,0xc5,0xe0,0xf5,0x74,0x62,0x77,0x10,0xa5,0x8a,0x95,0x16,0xd9,0xd4,0x8a,0x4e,0xd3,0xa5,0xca,0x51 },
{ 0x61,0x17,0x1a,0xf5,0x67,0x79,0xf8,0xc0,0x6e,0xef,0xfc,0xe4,0x8a,0x08,0x1c,0xec,0x70,0x22,0xb9,0x14,0xe8,0xee,0xb5,0xee,0xd3,0xf1,0x55,0xd0,0x30,0x53,0xe7,0x23 },
{ 0x5d,0x7d,0x9c,0xa5,0x2a,0xf7,0x72,0x2a,0xe9,0xd0,0x0d,0xda,0xaa,0x84,0x85,0x28,0xf4,0xff,0xc4,0xb0,0x8e,0x5f,0xae,0xf6,0x20,0xd6,0x41,0x4a,0x7c,0xe2,0x64,0x10 },
{ 0x4d,0x78,0xf3,0x0b,0xf2,0xfd,0xe3,0xaa,0x3f,0xb4,0x5d,0x57,0x38,0x6a,0x09,0xad,0x8e,0xa9,0x89,0xf8,0xf0,0xfe,0xe0,0xa9,0x1a,0x5e,0x6f,0xbe,0x86,0xaf,0x13,0x18 },
{ 0xe4,0x24,0x17,0x05,0x5d,0x25,0x20,0xae,0x2e,0x56,0xf9,0x06,0x6e,0x4f,0x7f,0xab,0xb8,0x69,0xa1,0xd6,0x9a,0xc6,0x3d,0x26,0x39,0x0f,0x84,0x6f,0xf6,0xfb,0x1f,0x21 },
{ 0x38,0x25,0xd5,0x9e,0xc4,0x6d,0xe3,0xe2,0x9e,0x45,0x50,0x47,0x2e,0x2e,0xbc,0x5e,0x05,0x1f,0x31,0xaf,0x0f,0x67,0xe7,0x52,0xc3,0x7f,0x7f,0x37,0xa7,0xf2,0xef,0x42 },
{ 0x67,0xf1,0x26,0xe8,0xfc,0xd0,0x97,0xbe,0x74,0xbf,0xfb,0x3f,0x13,0x54,0x87,0x08,0x39,0x88,0x57,0x7c,0x0c,0x8e,0x54,0x55,0x92,0x1e,0x12,0xf5,0x61,0xde,0x26,0x23 },
{ 0x70,0x90,0x9d,0xf5,0xe7,0x0e,0x17,0xc0,0xdc,0x0b,0x37,0xd8,0x58,0xd0,0x77,0x89,0xd7,0x64,0xec,0xd1,0x7f,0x1b,0x6b,0x96,0x29,0x63,0x7f,0xaf,0xa2,0xf8,0x97,0x4e },
{ 0xb2,0x8d,0x4a,0x7a,0xaf,0x85,0xbf,0xa5,0x29,0x72,0x23,0xa0,0xcc,0x09,0xad,0x01,0x3b,0x3b,0x59,0x31,0x2d,0x86,0x1e,0x92,0xb6,0xc5,0x6e,0xe7,0xaf,0x9d,0x4c,0x1d },
{ 0xa8,0x75,0x30,0x95,0x6d,0x85,0x9d,0xd2,0xd7,0x6e,0xc6,0x88,0xc1,0xbc,0x36,0x24,0x9a,0xb2,0x50,0xcd,0xa7,0x45,0xff,0xe2,0x17,0xb0,0x0e,0x3e,0x48,0x46,0x22,0x5e },
{ 0xfe,0xd6,0xb6,0x2d,0x3a,0xd5,0x6f,0x3f,0x6a,0x92,0x5a,0x6c,0x97,0xdd,0x62,0x49,0xde,0x27,0xbf,0x2c,0x4f,0xbe,0x3d,0xe9,0x6b,0x3d,0xd1,0x02,0xb9,0x86,0x28,0x69 },
{ 0x81,0x44,0x04,0x84,0xb4,0xa2,0xbb,0x64,0xe9,0x58,0x25,0x0f,0x6a,0x3c,0xc0,0xea,0x55,0x9b,0x0c,0xdc,0x88,0xee,0x55,0xc3,0x26,0xe3,0x10,0xc0,0x68,0xdb,0xfd,0x0b },
{ 0xd5,0x50,0x20,0x79,0x86,0xf2,0x01,0xe3,0xec,0x13,0x47,0xf9,0x67,0x43,0x9a,0x8a,0x36,0xd4,0x47,0x6a,0x65,0xa9,0x7c,0x23,0x79,0x1a,0xc0,0x97,0x51,0x68,0xed,0x5e },
{ 0xd6,0x64,0xd7,0x43,0x2f,0x76,0xcd,0x58,0xdc,0x47,0xe5,0x12,0xd9,0x67,0xe5,0xe5,0xea,0xb9,0xb8,0x3d,0xad,0x48,0x82,0x5f,0x55,0x1b,0xd7,0x51,0x8b,0xd9,0x5c,0x40 },
{ 0x79,0x3c,0x76,0x47,0x03,0x5a,0x74,0x27,0xce,0x63,0x0b,0xb1,0xa8,0x27,0x1b,0xa2,0x2a,0xbd,0xe5,0x6e,0xba,0x7f,0xf9,0x7a,0x79,0x14,0x18,0x0d,0x1e,0x55,0xca,0x71 },
{ 0x0d,0xa9,0xe8,0xcf,0x31,0x54,0x67,0x4a,0xf5,0xec,0xd1,0xff,0x02,0xf1,0x16,0x6e,0xc7,0x59,0xa8,0x37,0xac,0x4a,0xb7,0xe2,0x7f,0xb0,0x3d,0xb9,0x96,0xf5,0x8f,0x46 },
{ 0x11,0x4c,0x26,0xb2,0xd9,0x49,0x73,0x9c,0x4e,0xa2,0x90,0x57,0x59,0x96,0x27,0x8b,0x49,0x57,0x67,0xbe,0x5f,0x7b,0x15,0xea,0xe5,0x09,0x73,0x16,0xfd,0x21,0x1c,0x0b },
{ 0x3e,0x24,0x29,0x6d,0x65,0x98,0xc3,0xd3,0x68,0x95,0xf6,0x0b,0xec,0xe2,0x19,0xd7,0x9c,0x77,0xb9,0x0b,0xf1,0x92,0xab,0x3d,0x41,0x58,0xec,0xd0,0x30,0xf6,0x51,0x27 },
{ 0xfa,0xd2,0xe4,0x1f,0x54,0xf2,0xaf,0xb0,0x19,0x0b,0x4b,0x29,0xd1,0x1a,0x84,0xa5,0x5f,0x69,0x66,0x59,0xa4,0xb2,0x03,0x74,0xe1,0x46,0x81,0x75,0x38,0x8c,0x7f,0x32 },
{ 0x41,0x0e,0x63,0x5f,0xa3,0x9c,0x86,0x64,0x91,0x1e,0x2a,0x6c,0xc3,0x7d,0x1e,0x6b,0x15,0x4c,0x54,0x64,0x57,0x69,0xa8,0x15,0x01,0x37,0xc5,0xba,0xf2,0xe1,0x52,0x19 },
{ 0xee,0x67,0x56,0x4d,0x15,0x40,0x67,0x32,0x2d,0x3d,0xfd,0x5b,0x29,0xf4,0x65,0x06,0xd8,0x21,0x27,0x4e,0xcf,0x5f,0xfd,0x37,0x2f,0xdc,0x3f,0x42,0x85,0xce,0xc3,0x08 },
{ 0xd1,0x94,0x7b,0x09,0xb2,0xdd,0xc3,0x3f,0xfc,0xad,0x6d,0x3d,0xa1,0xe8,0x38,0x1d,0xb0,0x47,0x1a,0x50,0x4f,0x5d,0x30,0x1e,0x49,0xd4,0xc5,0x9d,0x39,0x8f,0x1f,0x47 },
{ 0x8b,0x31,0x7f,0x50,0x1e,0xbd,0xe1,0xbe,0x17,0x6b,0x8e,0xa5,0x6e,0x02,0x42,0x7e,0x0d,0xb9,0x08,0x78,0xba,0x09,0x8b,0xc5,0xff,0x64,0xde,0x59,0xaa,0x23,0x5f,0x43 },
{ 0xa5,0xff,0x46,0xb0,0x15,0xc2,0xb4,0x66,0x38,0x5e,0x02,0xe1,0x9e,0xf9,0xa1,0xd3,0x1d,0x46,0x9d,0xa5,0x4c,0x8e,0xc4,0x92,0x5a,0x29,0x4d,0x46,0xd8,0xf2,0xe0,0x68 },
{ 0xf1,0x6b,0x4b,0xec,0x9e,0x8d,0x46,0xb4,0xb8,0xda,0xec,0x57,0x35,0x4b,0xde,0x9e,0x67,0xb3,0xdd,0xac,0x5f,0x63,0x7c,0xb6,0xf4,0x9f,0x27,0x02,0xa6,0x02,0x59,0x21 },
{ 0xf0,0x70,0x11,0x80,0x7f,0x09,0x79,0x97,0xb3,0x8c,0x33,0xb1,0xaa,0x24,0xbe,0x27,0x07,0xa8,0x8a,0xf2,0x89,0x31,0xf8,0x0d,0x81,0x6d,0x8e,0xb2,0xa1,0x75,0x04,0x55 },
{ 0x53,0xad,0xaa,0xa1,0x1f,0xe6,0x29,0x82,0xa7,0xbb,0x4b,0xc3,0x6d,0x03,0x0a,0x68,0x9a,0x86,0xbd,0x93,0xee,0xc0,0xdf,0x4c,0x08,0xbc,0xc3,0x37,0x84,0x2f,0x26,0x01 },
{ 0xd7,0x71,0xe8,0xbc,0x57,0x53,0x65,0x66,0x4a,0xe8,0x8f,0xda,0x9b,0xd3,0xf9,0xa9,0xe4,0x09,0x4c,0xdb,0x86,0x06,0x82,0x13,0x68,0xf9,0x1e,0x1a,0xf8,0xc0,0x66,0x6c },
{ 0xd2,0x73,0x30,0xc3,0xc3,0x97,0xe8,0x44,0x0a,0x9d,0x73,0xd2,0xec,0x3c,0xbf,0x16,0x23,0x55,0xed,0xc3,0x7e,0x4c,0x41,0xe4,0x37,0x00,0xb4,0xa9,0xab,0x74,0xd0,0x5d },
{ 0x47,0xa6,0x59,0x5b,0x59,0x3e,0xa7,0x4b,0x0e,0x51,0x8c,0x77,0xb5,0xa2,0x2f,0x6e,0x03,0x23,0x35,0xe9,0xc7,0x46,0x35,0x2c,0xca,0xe2,0x73,0x25,0xe6,0x67,0xec,0x0b },
{ 0xb0,0x9e,0x1d,0x45,0xbe,0x2f,0x0c,0x6e,0x13,0x52,0xae,0xe2,0x6d,0xe1,0x3d,0xb7,0x9f,0x58,0x8a,0x9b,0x8f,0xa7,0x1b,0x2f,0x60,0x8f,0x53,0x0f,0x1e,0xb9,0xaf,0x63 },
{ 0x15,0xe7,0x42,0x02,0x3d,0x87,0x92,0xed,0x6a,0xe5,0xb7,0x45,0x70,0xf1,0x35,0xfc,0xff,0x5d,0xc9,0x7c,0x19,0xdc,0x34,0xd2,0x5c,0x06,0xc3,0xc5,0xeb,0xb0,0x88,0x08 },
{ 0xa0,0x5c,0xb2,0xa1,0x83,0xb8,0x25,0xb2,0xba,0x28,0x01,0x14,0xdb,0x08,0xf5,0xc4,0x47,0x33,0x79,0x64,0xdd,0x11,0x26,0x2e,0x92,0x36,0xef,0xb6,0xa3,0xe2,0x42,0x42 },
{ 0x06,0xe4,0x60,0x7b,0x75,0x63,0x99,0x41,0xa8,0x71,0x3b,0xfd,0x54,0xa4,0x8b,0x81,0x54,0x9d,0x49,0x5e,0x73,0x36,0xcc,0xda,0xb8,0xa6,0x52,0x69,0x95,0x01,0x48,0x35 },
{ 0x84,0x09,0x4e,0x31,0xfa,0x6d,0x0c,0x01,0x68,0x39,0x85,0x81,0x9c,0x77,0x19,0xa0,0x19,0x64,0x26,0x57,0x0a,0xa6,0x8a,0x90,0xba,0x09,0x7a,0xf8,0xbe,0xfd,0x85,0x23 },
{ 0x07,0x55,0x4a,0x94,0x80,0xbf,0x2a,0x85,0x98,0x6d,0x81,0x09,0xd0,0xa5,0x73,0xca,0x66,0xe8,0xe5,0x10,0x39,0x3d,0x2e,0xe8,0x51,0x18,0xbc,0xed,0x68,0xa2,0x9e,0x15 },
{ 0x41,0x04,0xd6,0xe2,0x1e,0xd1,0x56,0x3d,0x09,0x8f,0x75,0x69,0x55,0x71,0x23,0xda,0xe5,0x95,0x90,0x56,0x7a,0x7f,0x0b,0x79,0x1c,0xc1,0x57,0x13,0x56,0x60,0xf3,0x34 },
{ 0xad,0x33,0xd5,0xe2,0xc1,0xfe,0xa5,0x70,0x8f,0x72,0x03,0xd7,0x59,0xa3,0x82,0x6f,0x3d,0xf7,0xb1,0xfe,0x73,0xfc,0x7d,0x74,0x93,0xbe,0xa6,0xa0,0x4f,0xb5,0xd1,0x54 },
{ 0x09,0x85,0x94,0x14,0xf1,0x95,0x4b,0xc0,0x0a,0x94,0x42,0xea,0xc5,0xa1,0x7a,0x26,0x3d,0x86,0x6c,0x18,0x8f,0xb6,0xe0,0xaa,0x81,0x78,0xb1,0x92,0x24,0xb2,0x1b,0x72 },
{ 0x9a,0x7c,0x39,0x3f,0x85,0x13,0x7b,0x3e,0xe5,0x12,0x7b,0x6b,0x3c,0x25,0x17,0x90,0x88,0xef,0x8a,0x10,0x98,0x43,0xe2,0x9f,0xcf,0xe9,0xb9,0x51,0x71,0xc3,0xf2,0x1a },
{ 0x49,0x32,0xf0,0xf4,0x4d,0xf2,0x22,0x0c,0xa0,0x3e,0xa3,0x80,0x22,0x2b,0xdc,0xbd,0x01,0xfc,0xe7,0x3a,0xdf,0xa3,0xc5,0x8f,0x9a,0x5c,0x23,0xd2,0xb6,0x31,0x4b,0x6c },
{ 0xd6,0xc8,0xdc,0x97,0xed,0x56,0x3d,0xef,0x3a,0x02,0x90,0x6a,0x78,0x5a,0x59,0x9e,0x4d,0x8b,0xf7,0xca,0xe2,0x0d,0x58,0x32,0x9c,0x99,0x42,0xb9,0xe8,0xe0,0xf4,0x06 },
{ 0x3a,0xe2,0x99,0xc2,0x6a,0xf6,0x43,0x9e,0x2d,0x48,0x7f,0x5d,0x22,0xd1,0xf8,0x52,0x57,0x6f,0x2d,0xd3,0x97,0x17,0xf6,0xbd,0xd4,0xc8,0x06,0xbf,0x39,0x67,0x93,0x2d },
{ 0x3a,0x70,0x9a,0x8f,0x42,0x5a,0x83,0x7b,0xef,0x2e,0x35,0xb5,0x2d,0xcc,0x93,0xb2,0x8a,0x4f,0xca,0x0a,0xdd,0xe0,0x17,0x17,0x10,0xee,0x43,0x1f,0x4b,0xfc,0x86,0x75 },
{ 0x99,0xa6,0xcb,0x7b,0x5d,0x12,0xa7,0x10,0x44,0x0d,0x17,0x7c,0x11,0x19,0x72,0xc4,0xe4,0xc2,0x26,0xaf,0x4b,0xd9,0xb4,0x4b,0x94,0x42,0xc5,0x24,0xd5,0x6d,0xf0,0x31 },
{ 0xd7,0x36,0xb5,0xe5,0x8e,0x83,0x6b,0xbe,0x47,0x3b,0x2c,0xa7,0x31,0xc4,0xa2,0xfb,0x6f,0x0f,0xbc,0xb5,0x31,0x44,0xa4,0xf3,0x4d,0x9c,0x12,0x6f,0x36,0xb7,0x4b,0x77 },
{ 0xe9,0xa3,0x3a,0x6f,0x01,0x13,0x6e,0x24,0x72,0xed,0x9e,0xca,0x68,0x76,0x56,0x45,0xc2,0x32,0xc5,0x58,0xe0,0xa5,0x83,0x5a,0x51,0x09,0x0f,0x40,0x0b,0x90,0xf7,0x56 },
{ 0x51,0x0b,0x24,0x5c,0x76,0xf5,0x63,0x7e,0x5e,0x20,0x4e,0xd7,0x4a,0x39,0xcd,0x59,0x3d,0x6c,0xbe,0xfb,0x96,0x9c,0x17,0x42,0xaf,0x5e,0xc8,0x9b,0xa2,0xe8,0x93,0x3a },
{ 0x42,0x12,0xda,0xbc,0x51,0xac,0x75,0x91,0xf7,0x8d,0xc8,0x65,0x02,0x1a,0x6f,0x2b,0xdf,0x4a,0x2c,0xf4,0xf5,0x50,0x82,0x58,0x16,0x75,0x4c,0x7b,0x69,0xa0,0x0c,0x6e },
{ 0xa9,0xe9,0x83,0xb9,0x46,0x50,0x8a,0x24,0x9b,0xfd,0x1f,0x89,0x0a,0x18,0xbb,0x62,0xe0,0xcb,0x57,0xc6,0x18,0xcc,0xa8,0x34,0x8f,0x4e,0xc7,0xfc,0x46,0x2e,0xa3,0x20 },
{ 0x7e,0x1e,0x93,0x61,0x51,0xf6,0xe5,0x17,0x14,0x7c,0x65,0x1a,0x07,0x8a,0xf6,0x4e,0x9d,0x66,0x11,0x6f,0x98,0x2b,0x40,0xb1,0x65,0x06,0x40,0x69,0x41,0xa9,0x6b,0x7f },
{ 0x39,0xb1,0x4a,0xa1,0x97,0x89,0xcd,0xdd,0x96,0x46,0x48,0xd8,0x5f,0xef,0xb8,0x7b,0xd4,0xcb,0x53,0x42,0xe4,0x53,0x5f,0xcd,0xd4,0xf6,0xd6,0xc1,0x88,0x8f,0x48,0x1d },
{ 0x2f,0xe5,0x7d,0xa3,0x47,0xcd,0x62,0x43,0x15,0x28,0xda,0xac,0x5f,0xbb,0x29,0x07,0x30,0xff,0xf6,0x84,0xaf,0xc4,0xcf,0xc2,0xed,0x90,0x99,0x5f,0x58,0xcb,0x3b,0x74 },
{ 0x39,0xb1,0x4a,0xa1,0x97,0x89,0xcd,0xdd,0x96,0x46,0x48,0xd8,0x5f,0xef,0xb8,0x7b,0xd4,0xcb,0x53,0x42,0xe4,0x53,0x5f,0xcd,0xd4,0xf6,0xd6,0xc1,0x88,0x8f,0x48,0x1d },
{ 0x2f,0xe5,0x7d,0xa3,0x47,0xcd,0x62,0x43,0x15,0x28,0xda,0xac,0x5f,0xbb,0x29,0x07,0x30,0xff,0xf6,0x84,0xaf,0xc4,0xcf,0xc2,0xed,0x90,0x99,0x5f,0x58,0xcb,0x3b,0x74 },
{ 0x39,0xb1,0x4a,0xa1,0x97,0x89,0xcd,0xdd,0x96,0x46,0x48,0xd8,0x5f,0xef,0xb8,0x7b,0xd4,0xcb,0x53,0x42,0xe4,0x53,0x5f,0xcd,0xd4,0xf6,0xd6,0xc1,0x88,0x8f,0x48,0x1d },
{ 0x2f,0xe5,0x7d,0xa3,0x47,0xcd,0x62,0x43,0x15,0x28,0xda,0xac,0x5f,0xbb,0x29,0x07,0x30,0xff,0xf6,0x84,0xaf,0xc4,0xcf,0xc2,0xed,0x90,0x99,0x5f,0x58,0xcb,0x3b,0x74 },
{ 0x39,0xb1,0x4a,0xa1,0x97,0x89,0xcd,0xdd,0x96,0x46,0x48,0xd8,0x5f,0xef,0xb8,0x7b,0xd4,0xcb,0x53,0x42,0xe4,0x53,0x5f,0xcd,0xd4,0xf6,0xd6,0xc1,0x88,0x8f,0x48,0x1d },
{ 0x42,0x2c,0x8e,0x7a,0x62,0x27,0xd7,0xbc,0xa1,0x35,0x0b,0x3e,0x2b,0xb7,0x27,0x9f,0x78,0x97,0xb8,0x7b,0xb6,0x85,0x4b,0x78,0x3c,0x60,0xe8,0x03,0x11,0xae,0x30,0x79 },
{ 0x25,0xd7,0x28,0xb2,0xd4,0x1a,0x1d,0x0a,0xe0,0xf4,0x0e,0xe6,0xb5,0x69,0xe8,0x3c,0x01,0xb2,0x03,0x9a,0x56,0xb7,0x54,0x5a,0x93,0x63,0x22,0x8f,0x00,0x56,0x14,0x10 },
{ 0x8d,0x20,0xf8,0xc7,0xbb,0xfb,0x9a,0xf3,0xda,0x4e,0xf5,0x32,0xed,0x44,0xef,0xc6,0x8c,0xe6,0x42,0xbc,0x5d,0x0c,0x5c,0xb1,0xd7,0xb9,0x1b,0x96,0xc7,0x4e,0xdf,0x02 },
{ 0x28,0xbb,0xdf,0xad,0x41,0x7a,0x93,0xe3,0xe0,0x84,0x3b,0xab,0xf4,0x32,0x46,0xd3,0x26,0xaa,0x16,0x9b,0x27,0x89,0x6d,0x1c,0x16,0x76,0xa7,0xf9,0xee,0x71,0xa1,0x59 },
{ 0x0f,0x52,0x4b,0xef,0x7e,0x12,0x25,0x8f,0xd9,0xee,0xfc,0xd9,0xe4,0x68,0xb2,0x1e,0x54,0x3d,0x90,0xcc,0x4a,0x54,0xb3,0x47,0xf4,0x8c,0xc5,0x96,0x9f,0xeb,0xf4,0x32 },
{ 0xc8,0x14,0xe2,0xff,0x82,0xb7,0x8e,0x7f,0xaf,0xf9,0x27,0xcd,0xd3,0xb0,0xb4,0x2e,0xc8,0xf8,0x92,0x34,0x8d,0xee,0x2c,0xb4,0xf1,0xc1,0xc3,0x7a,0x64,0xb4,0xa7,0x6b },
{ 0xaf,0x6c,0x6b,0xe0,0x37,0xcc,0x06,0x22,0xe8,0x8a,0x73,0x5a,0x98,0xf7,0x7a,0xc0,0x6f,0x37,0x2b,0xad,0x85,0x42,0xbc,0x0f,0x65,0xc0,0xc5,0x80,0xb0,0x95,0xae,0x4e },
{ 0xe5,0x76,0xa1,0xa6,0xfe,0xc7,0x93,0x78,0xaf,0xb7,0xf1,0x91,0xac,0xda,0x33,0x96,0xad,0x56,0xf7,0x84,0xce,0x33,0x65,0x8e,0x96,0x7a,0xe9,0xe4,0x61,0x76,0xf7,0x27 },
{ 0xa4,0xc3,0xe7,0x49,0x66,0x4d,0x13,0x8f,0x80,0xa1,0x34,0x88,0x89,0x87,0x23,0x44,0xc1,0x1a,0x86,0xe9,0x56,0x23,0xb1,0x5f,0x8d,0xb7,0xec,0xf8,0x3a,0xde,0xd9,0x27 },
{ 0x78,0x74,0x53,0x5e,0xaa,0x3a,0x6b,0x9f,0x7f,0xa1,0xe6,0xd9,0xda,0xd1,0x21,0xa5,0xf3,0x99,0x24,0x83,0x55,0x7e,0x05,0xc3,0xb3,0x65,0xa6,0xaf,0x74,0xf7,0x4d,0x03 },
{ 0x9e,0x34,0x3c,0x34,0x94,0x80,0x8b,0x3b,0x50,0x23,0x76,0x19,0xa9,0xd0,0xad,0xf9,0x09,0x03,0xe8,0x14,0x46,0x73,0x9a,0xc8,0x9e,0x4b,0x8a,0x8c,0x9d,0x80,0x6c,0x59 },
{ 0xa5,0x6f,0x45,0x98,0x6e,0xbc,0x86,0x35,0x0c,0x98,0xfb,0xe1,0xaf,0x21,0x21,0x44,0x1b,0x0d,0x2c,0x17,0x34,0x14,0xd4,0x16,0xa6,0xff,0x00,0x14,0x15,0x0e,0x45,0x31 },
{ 0x7d,0x5c,0xcc,0xae,0xa1,0x0a,0x82,0x2a,0xcb,0x99,0x0f,0x8e,0x7b,0xca,0xd8,0x3d,0x59,0x6b,0x5d,0x7d,0x2a,0x02,0xc9,0x1a,0x86,0x9c,0xe7,0x01,0x10,0x0d,0xbc,0x14 },
{ 0x21,0xf6,0x48,0x7d,0x01,0x15,0x2d,0x72,0x5c,0xc6,0x43,0xf9,0xf5,0x9e,0x79,0xd2,0xfd,0xa0,0x22,0xad,0xd8,0xfc,0x66,0x1e,0xb7,0x9d,0xbf,0x90,0x30,0x0a,0xed,0x38 },
{ 0xdb,0xf8,0xd6,0xe5,0xf0,0x51,0x92,0x77,0x84,0xd5,0x1b,0xb5,0xdc,0x45,0xa4,0xb9,0xb1,0x7d,0x36,0x71,0xce,0xfd,0x09,0xd1,0xa4,0xa0,0x6e,0xdb,0xea,0x51,0x14,0x25 },
{ 0x05,0x22,0x89,0x13,0xd8,0xe4,0x79,0x86,0x6f,0x1f,0x37,0xe4,0x90,0x76,0x06,0xed,0x98,0x04,0x6b,0xb4,0xbe,0xdb,0x28,0x7e,0xae,0x2d,0x87,0x07,0xc1,0x2c,0x34,0x4c },
{ 0xe0,0x33,0xbc,0xa7,0xa0,0x40,0x8c,0xde,0xba,0xe8,0xca,0x21,0x74,0xb5,0x76,0xc1,0x72,0xad,0xb7,0x7d,0x78,0xa5,0x68,0x6c,0x11,0x39,0x86,0x54,0x97,0xa2,0x4f,0x41 },
{ 0x84,0x7c,0x0d,0x2c,0x37,0x52,0x34,0xf3,0x65,0xe6,0x60,0x95,0x51,0x87,0xa3,0x73,0x5a,0x0f,0x76,0x13,0xd1,0x60,0x9d,0x3a,0x6a,0x4d,0x8c,0x53,0xae,0xaa,0x5a,0x22 },
{ 0xe0,0x33,0xbc,0xa7,0xa0,0x40,0x8c,0xde,0xba,0xe8,0xca,0x21,0x74,0xb5,0x76,0xc1,0x72,0xad,0xb7,0x7d,0x78,0xa5,0x68,0x6c,0x11,0x39,0x86,0x54,0x97,0xa2,0x4f,0x41 },
{ 0x84,0x7c,0x0d,0x2c,0x37,0x52,0x34,0xf3,0x65,0xe6,0x60,0x95,0x51,0x87,0xa3,0x73,0x5a,0x0f,0x76,0x13,0xd1,0x60,0x9d,0x3a,0x6a,0x4d,0x8c,0x53,0xae,0xaa,0x5a,0x22 },
{ 0xe0,0x33,0xbc,0xa7,0xa0,0x40,0x8c,0xde,0xba,0xe8,0xca,0x21,0x74,0xb5,0x76,0xc1,0x72,0xad,0xb7,0x7d,0x78,0xa5,0x68,0x6c,0x11,0x39,0x86,0x54,0x97,0xa2,0x4f,0x41 },
{ 0x84,0x7c,0x0d,0x2c,0x37,0x52,0x34,0xf3,0x65,0xe6,0x60,0x95,0x51,0x87,0xa3,0x73,0x5a,0x0f,0x76,0x13,0xd1,0x60,0x9d,0x3a,0x6a,0x4d,0x8c,0x53,0xae,0xaa,0x5a,0x22 },
{ 0xe0,0x33,0xbc,0xa7,0xa0,0x40,0x8c,0xde,0xba,0xe8,0xca,0x21,0x74,0xb5,0x76,0xc1,0x72,0xad,0xb7,0x7d,0x78,0xa5,0x68,0x6c,0x11,0x39,0x86,0x54,0x97,0xa2,0x4f,0x41 },
{ 0x1c,0x18,0xa4,0x09,0x5c,0x2b,0x9f,0x76,0x78,0xc8,0xfb,0x23,0x84,0xea,0xb7,0xd4,0xfe,0x4f,0x78,0x8f,0x25,0x80,0xd6,0xbb,0x0e,0x06,0xcf,0x6e,0x13,0x12,0xf3,0x0b },
{ 0xf1,0x32,0xe4,0x22,0x0c,0x71,0x0a,0xac,0xf5,0x61,0xbf,0x0f,0xc3,0x07,0x35,0xad,0x61,0xbc,0x84,0xb6,0x3e,0x90,0xd5,0xbf,0x54,0xcf,0x81,0xb5,0x62,0xea,0xda,0x42 },
{ 0x2b,0x39,0x08,0x80,0xe7,0x24,0x4e,0x37,0x84,0xe3,0x04,0x73,0x09,0x50,0xe6,0x3e,0x91,0xf4,0xbe,0xec,0x78,0x66,0x70,0x54,0xcf,0x02,0x26,0xc5,0x88,0x0d,0xd3,0x2c },
{ 0xf4,0x5b,0xce,0x45,0x30,0x25,0x5b,0x17,0x63,0x17,0xbb,0xf0,0x5b,0x0b,0x18,0xbc,0x8d,0xd6,0xbc,0x7a,0xbd,0x16,0x41,0x4e,0xbf,0xb9,0x06,0x1b,0xd6,0x2f,0x6f,0x19 },
{ 0x1d,0x01,0xaa,0xc0,0xc7,0xe3,0x8f,0xfb,0x3e,0x25,0xee,0xc4,0x32,0x59,0xd8,0x56,0x29,0xbe,0xb4,0xc3,0xd9,0x4f,0x7f,0x38,0x13,0x8c,0xf9,0xca,0x97,0x82,0xeb,0x79 },
{ 0x6c,0x9a,0x29,0xd1,0x8c,0x26,0x90,0x78,0xfd,0xed,0x27,0x34,0x60,0x8a,0xd1,0x98,0xa3,0x6c,0xe7,0x57,0x9b,0x7f,0xf8,0x62,0xa2,0xc5,0x15,0xf8,0x51,0xe1,0x1a,0x54 },
{ 0x2c,0x52,0xe1,0x5e,0x14,0x31,0xf5,0x0e,0x88,0xdd,0x30,0x02,0x9f,0x56,0x34,0x23,0xc1,0xfa,0x53,0x0b,0xba,0xcb,0x9d,0xb6,0x23,0x46,0x0c,0xee,0xb0,0xf6,0x4b,0x63 },
{ 0x04,0xd4,0x40,0x9f,0x02,0xa3,0xc9,0x7e,0x50,0x70,0x02,0xdc,0xe8,0xb8,0xee,0xc7,0x7f,0xac,0x1a,0xa1,0xba,0xeb,0x0f,0x25,0xec,0xa2,0x8a,0xc4,0xb6,0xa3,0xe6,0x25 },
{ 0xf0,0x87,0x27,0xb3,0xb2,0x2f,0x2e,0xff,0xaa,0xc3,0x55,0x75,0xf2,0xea,0x0b,0x67,0xed,0x8c,0xa4,0x81,0x02,0x14,0x07,0xac,0xaf,0x46,0x63,0xdc,0x8d,0x8c,0xc3,0x7c },
{ 0x49,0xe0,0x3c,0x89,0x4b,0xe3,0x3f,0x85,0xa2,0xbf,0xa5,0x65,0x30,0x39,0x3c,0x8d,0xd4,0x3f,0xea,0x89,0x77,0x1f,0x6b,0x13,0xf4,0x90,0x6f,0x42,0x91,0x57,0xd6,0x36 },
{ 0xdf,0x01,0x8e,0xd9,0x9f,0x9a,0x8d,0xd5,0xdd,0x38,0x69,0x44,0xd3,0x9a,0x7b,0xd1,0xa6,0x0b,0x9e,0xc2,0x1f,0x65,0xcd,0xcc,0x74,0xd2,0x15,0x9e,0xa7,0xe7,0x84,0x3d },
{ 0xf7,0x12,0x31,0x18,0x91,0xc1,0x3a,0x7f,0x16,0xb1,0x8f,0xab,0x7c,0x1b,0x20,0x9f,0x78,0x7f,0x99,0xf2,0x05,0x57,0x1b,0x8e,0x99,0x03,0xa2,0x96,0xe6,0xec,0xc0,0x56 },
{ 0xcb,0xda,0x00,0xfe,0x5a,0xbe,0x61,0x68,0xc9,0x3e,0x68,0xce,0xa5,0x11,0x62,0xc0,0xbf,0x15,0xe1,0x71,0xb9,0x8e,0x36,0xd9,0x54,0x16,0xce,0x14,0xbd,0xf6,0xf6,0x5d },
{ 0x04,0xd5,0xfe,0xbb,0xf9,0xa4,0xe5,0x49,0x0e,0x72,0x74,0x57,0xd7,0xb6,0xec,0xbd,0x02,0x21,0x19,0xa8,0x63,0xc9,0x95,0xe3,0xc5,0x80,0x2c,0xe6,0x37,0x4b,0x83,0x74 },
{ 0x24,0x08,0x85,0x93,0x52,0x14,0x28,0x50,0x24,0xef,0xbf,0x83,0xc9,0x0d,0x51,0x53,0xb8,0x23,0x0a,0x46,0x5d,0x09,0x9f,0x67,0xe6,0x25,0xd8,0x57,0x06,0xf9,0x70,0x5e },
{ 0x4d,0x16,0xaa,0x5d,0xde,0x81,0xbc,0xe7,0xf2,0xd7,0x5c,0x3e,0x6a,0xa9,0xc0,0x67,0x23,0x22,0x07,0xa2,0xd7,0x97,0x59,0xf7,0x17,0x90,0xb0,0xd9,0x41,0x4f,0xc4,0x6a },
{ 0x8c,0xec,0x23,0xc6,0x8c,0x4f,0x98,0xb0,0xb8,0x73,0xc9,0x37,0xde,0xd1,0xb8,0xcf,0x4e,0x94,0x12,0x5f,0x8e,0x24,0x4e,0x29,0x05,0xbb,0xa4,0xc3,0x0e,0x80,0x39,0x1c },
{ 0x8f,0x3f,0xa2,0xd6,0x13,0x25,0x1f,0x62,0x30,0x36,0x9f,0x9d,0xe1,0xe6,0xd2,0xf0,0x39,0x5a,0x8a,0xb6,0xcf,0x82,0x04,0xc0,0x9e,0x79,0x04,0x8b,0x43,0x29,0x68,0x4a },
{ 0x5b,0xd9,0x99,0xc3,0xcc,0x16,0x23,0x21,0xdd,0xe3,0x64,0xc0,0x13,0xc0,0xa1,0x76,0x13,0x03,0x09,0x4c,0xf1,0xbc,0x84,0xa9,0xa1,0x02,0x81,0xc9,0xe3,0xaa,0xaf,0x0c },
{ 0x4f,0x51,0x65,0x12,0x33,0xb3,0xf8,0xcd,0x48,0xdc,0x0d,0x09,0x55,0xe8,0x70,0xe2,0x94,0x9b,0x78,0x5c,0xa2,0x7b,0x1c,0x0f,0x37,0x4e,0x35,0xce,0x98,0x8b,0xc0,0x1d },
{ 0x3c,0xf8,0xc7,0x4b,0x41,0xa7,0x0b,0xc1,0x41,0x81,0x3f,0xd3,0x1c,0xfd,0x36,0xc2,0x29,0x04,0xcd,0x62,0xec,0x01,0xc0,0xbf,0xe6,0xa6,0xeb,0xe6,0xa4,0x5c,0x1f,0x31 },
{ 0xd0,0xa7,0xc1,0xf6,0xeb,0xbd,0xeb,0xcd,0x9e,0x56,0x1f,0x6c,0x12,0x20,0x9f,0x8f,0x5c,0x8c,0xf5,0x33,0xf5,0x30,0x86,0xb9,0x77,0x7d,0xf1,0x7c,0xe1,0x4f,0x2b,0x71 },
{ 0x78,0xf8,0xf4,0xda,0x51,0xa8,0x45,0x68,0x60,0xa3,0x22,0xc0,0x2b,0xa5,0xc0,0xe9,0xdd,0x0c,0xbb,0x03,0x0f,0x3c,0x36,0x04,0x3e,0x32,0x77,0xd1,0xab,0xa5,0x61,0x71 },
{ 0x19,0xc8,0x3a,0x7e,0xc0,0xce,0x1c,0x50,0x25,0xc4,0x68,0xab,0x40,0x8f,0x06,0xaa,0x1e,0xa6,0x35,0xbe,0x6b,0x66,0xf8,0xec,0xba,0xf4,0xfc,0x22,0x91,0x31,0x7d,0x3b },
{ 0xc9,0x9d,0x33,0xdb,0xcd,0x7b,0x0b,0xbc,0xc2,0xe9,0xc9,0x96,0x13,0x94,0x5c,0x82,0x8d,0x05,0x0b,0x96,0xa7,0x60,0x52,0x6b,0xa1,0xcc,0x30,0xea,0xbf,0x37,0xea,0x16 },
{ 0x33,0xaf,0x11,0x57,0x3f,0x60,0x22,0x18,0x06,0xf4,0x39,0xab,0x6b,0xf3,0xe2,0xdd,0xde,0x5d,0x2e,0xd7,0x59,0xb6,0x41,0x5e,0x86,0x21,0x9f,0x28,0xc7,0x2b,0x01,0x41 },
{ 0xba,0x5e,0x80,0x3b,0x00,0x58,0xad,0xb0,0xef,0x58,0x67,0xcf,0x6a,0x09,0xe6,0xcc,0x7d,0xd3,0xe5,0x30,0x3c,0x7c,0x6a,0xbb,0x44,0x52,0x42,0x03,0x83,0xd0,0x98,0x38 },
{ 0xf9,0x4b,0xa0,0x87,0x73,0x8b,0x21,0xf7,0x64,0x6a,0x1d,0xad,0x76,0x35,0x4a,0x5f,0x5a,0xd1,0xff,0x6d,0xc2,0xde,0xcd,0x6d,0x8a,0x22,0x7f,0x75,0xc5,0xe2,0x2c,0x1b },
{ 0x3f,0x75,0x94,0xc2,0xfe,0x33,0x4d,0xa3,0x23,0x49,0xb4,0x51,0x2b,0x4a,0xa4,0xf7,0xb4,0xdc,0xc5,0xf3,0x9e,0xfd,0x8c,0xec,0xdf,0xe1,0xf5,0x55,0x2d,0xbe,0x13,0x5a },
{ 0x80,0x17,0x67,0x7f,0xf2,0x49,0x5a,0x3d,0x20,0x0b,0x97,0x72,0x18,0x8a,0xd0,0xe5,0x3f,0xf9,0xfd,0xba,0x69,0xfa,0x64,0x53,0x8f,0x2e,0x24,0x05,0x60,0x66,0x39,0x42 },
{ 0x1a,0xa3,0xcb,0xcd,0x4e,0x56,0xd6,0xa1,0x8d,0xd6,0x6e,0x01,0xe4,0x32,0x4a,0xfe,0xfd,0x8b,0x31,0x9d,0x78,0xb9,0x16,0x37,0xdc,0x90,0x06,0xcc,0xee,0x03,0x91,0x48 },
{ 0x0b,0xe5,0x80,0x3a,0xfc,0x26,0x52,0xc5,0x7d,0x74,0x0f,0x85,0x9e,0x8b,0xaa,0x55,0x68,0x1a,0x47,0x2f,0x1f,0x71,0x5d,0xc6,0x0e,0x14,0x5e,0x99,0x22,0x7e,0x3c,0x67 },
{ 0x1a,0x94,0xa1,0x95,0xe9,0x50,0x8c,0xdc,0x70,0x85,0x93,0x1a,0xcf,0x7c,0xf6,0x38,0xa7,0x78,0x36,0x4b,0x3f,0x54,0x1e,0xed,0x6e,0x7f,0xbd,0x64,0x60,0x20,0x6d,0x55 },
{ 0xcf,0x2a,0x5c,0xd1,0x37,0x38,0xec,0xd6,0x0f,0x03,0x5e,0x0b,0xd1,0xbe,0x4f,0x5e,0x23,0x04,0xd7,0x09,0xf4,0xcc,0x19,0x39,0xf2,0x5c,0x56,0x2d,0x58,0x36,0xb5,0x52 },
{ 0x8a,0xe0,0x9b,0xad,0x6c,0xb3,0x3c,0x83,0xaa,0x22,0x00,0xba,0xb7,0xd2,0x77,0x64,0x0f,0x6d,0xb4,0x50,0xd7,0xd9,0x2f,0x7c,0x27,0x79,0x52,0x63,0x94,0xd2,0x3b,0x29 },
{ 0x73,0xc1,0x7c,0x41,0x03,0xb7,0x27,0x83,0x1d,0xc5,0xbe,0x14,0x0e,0x21,0x97,0x81,0x06,0xaf,0xab,0xf7,0x60,0x2d,0x40,0x65,0x50,0x18,0x16,0x3e,0xbe,0xe1,0xe0,0x0c },
{ 0x13,0x16,0x3d,0x11,0xfa,0xd9,0x09,0x56,0x3d,0xea,0xee,0x72,0xee,0xe7,0x16,0xef,0x7b,0xf9,0x08,0x9d,0xd6,0xaf,0xd1,0x37,0xf4,0xcd,0x31,0x2e,0xcf,0x35,0x5d,0x49 },
{ 0xf0,0xf1,0xf4,0xf8,0x39,0x98,0x66,0x4f,0x20,0x15,0x63,0xdb,0x12,0xd8,0xaa,0x42,0xc2,0x3b,0xc1,0xad,0x36,0xf6,0xa7,0xfd,0xe3,0x62,0xe7,0xe5,0xa5,0x3a,0xc8,0x36 },
{ 0x79,0x8c,0x3f,0x22,0x0c,0xbf,0x99,0x55,0x71,0x14,0xbc,0x3f,0xba,0x6c,0xcd,0x20,0x43,0xa3,0xed,0x24,0x80,0x59,0x95,0x0b,0x33,0x44,0xeb,0x6a,0x7f,0x93,0x2f,0x23 },
{ 0xcb,0x38,0xd9,0xbd,0x0e,0xb8,0x65,0xbb,0x01,0xde,0x7c,0xc7,0x6f,0x69,0x60,0x08,0x28,0x55,0xb2,0xec,0x74,0x51,0x4c,0x46,0x5e,0xb9,0x79,0x74,0xa3,0xb1,0xb4,0x40 },
{ 0x89,0xd8,0xb2,0xff,0x9f,0xd2,0x7a,0xbe,0x37,0xc8,0x15,0x0c,0xc0,0xc6,0x98,0xdc,0x91,0x69,0x45,0x13,0x18,0x80,0x21,0x29,0x57,0x88,0x7d,0xd9,0xef,0xaf,0xa7,0x4d },
{ 0xe7,0x13,0x88,0xb8,0x73,0x22,0xa5,0xe3,0x30,0x5a,0x34,0x12,0x3d,0xcc,0xeb,0xab,0xd2,0xf1,0x4d,0xea,0xbd,0xbb,0xe0,0xed,0x16,0x88,0x44,0x86,0xf5,0x01,0x52,0x23 },
{ 0x9c,0x72,0x65,0x54,0x95,0x2e,0xee,0x6e,0x0d,0x62,0x5a,0x30,0x28,0x0c,0x78,0x20,0xd5,0xe9,0x99,0xcf,0x60,0x4e,0xc9,0xfe,0x2e,0xdb,0xf7,0xc9,0xf3,0x18,0x65,0x1e },
{ 0x78,0xfd,0xcf,0xc5,0x8e,0xf5,0xf9,0xac,0x03,0x33,0xf0,0x33,0x83,0xba,0x95,0x5e,0x63,0x42,0xa3,0xe4,0x1b,0xe7,0x13,0x00,0x56,0x23,0x47,0x7d,0x8a,0x1c,0xf0,0x37 },
{ 0xc0,0x0b,0xce,0x80,0x1d,0x0f,0xd0,0x90,0x69,0x03,0xc4,0x4d,0x87,0x40,0x87,0x05,0x79,0x48,0x6c,0x35,0x9a,0x35,0xd9,0x6c,0xbf,0xc5,0x8e,0xd9,0xd6,0x5f,0x6c,0x55 },
{ 0x99,0xb2,0x8e,0xe5,0xfe,0x43,0x22,0xc7,0x87,0xa3,0x77,0x6d,0x5e,0xfb,0x4f,0xe6,0xc9,0x71,0xb4,0x40,0xd2,0xfa,0x59,0x35,0x8c,0x3b,0xdf,0x88,0x1e,0xef,0x69,0x5a },
{ 0xc8,0x34,0xd5,0x94,0xf5,0x11,0xa6,0x6c,0x1b,0x1d,0x37,0x7d,0x64,0x9b,0xff,0xa9,0x0d,0x2d,0xf2,0x9e,0xc9,0xe5,0xf8,0xc8,0x72,0x60,0xc0,0x7b,0xbd,0xe0,0x81,0x7b },
{ 0xb0,0x07,0xcb,0x85,0x56,0xa8,0x9a,0x1e,0x97,0x0e,0x3a,0x6f,0x6d,0x92,0x72,0x41,0x3a,0xba,0xe8,0xdc,0x1e,0xfc,0xb6,0xa5,0xc2,0x0c,0xa8,0x63,0xe0,0x89,0xc5,0x65 },
{ 0x3e,0x57,0x80,0xa2,0x55,0x33,0x80,0x72,0xad,0x9a,0xc8,0xae,0x1b,0xf4,0x04,0xaf,0xd5,0xe7,0x07,0xc0,0xdd,0xa6,0x3a,0xb2,0xc8,0xf6,0xce,0x8b,0xb5,0x81,0x9d,0x1e },
{ 0x9c,0x28,0xe6,0xc7,0x97,0x62,0xa0,0xcf,0x34,0xa5,0x4c,0x79,0x37,0x3e,0x79,0x8b,0x2c,0x2e,0x39,0x37,0x8b,0x65,0xb4,0x90,0x74,0x89,0xb8,0x0f,0x6e,0x4f,0x1e,0x3f },
{ 0xe8,0x11,0x13,0xdd,0x23,0x1f,0x54,0xc8,0xe4,0xd1,0x28,0x55,0xb1,0x5f,0x9d,0xb3,0x38,0x68,0x97,0x0e,0x9b,0xcf,0x76,0xfa,0x08,0x74,0x56,0x30,0x30,0x06,0xc1,0x63 },
{ 0xf2,0x44,0x87,0xa4,0x13,0x4d,0x55,0x9b,0x51,0x38,0x9f,0x02,0xda,0x1e,0xf4,0x8f,0x5a,0x90,0x4a,0x2f,0xdd,0x5a,0x6e,0xed,0x20,0x94,0xee,0x45,0x9e,0x64,0x36,0x32 },
{ 0x09,0x09,0x6c,0xe1,0x96,0xa3,0x26,0x8c,0x3f,0x76,0x58,0x22,0xf5,0xd5,0x41,0xc3,0x7f,0x6a,0x98,0x13,0x2d,0x9f,0x41,0x88,0x98,0xf4,0xcb,0x6e,0x48,0x63,0x85,0x5c },
{ 0x16,0xfb,0x11,0xd1,0x84,0x18,0x0f,0x05,0xf8,0x84,0x4d,0x19,0x37,0x86,0x6d,0x0d,0x89,0x68,0x47,0x47,0x55,0xdb,0x7a,0x7b,0x1a,0x47,0x54,0xc1,0x6c,0xfd,0x70,0x17 },
{ 0x99,0x13,0xcc,0xd1,0x06,0x7e,0xf5,0x22,0x36,0xb5,0xc9,0x4f,0xbc,0x46,0xfa,0x6b,0x14,0x08,0x35,0x2a,0x69,0x1d,0x65,0x35,0x81,0x3e,0xa7,0xa9,0x98,0x78,0x0e,0x56 },
{ 0x7c,0x9d,0x44,0x3c,0xee,0xb6,0x28,0x0f,0x2e,0x0d,0xf2,0x87,0x83,0x00,0x8d,0x0a,0x97,0xae,0x5f,0x0b,0x59,0xd0,0x8d,0xff,0x02,0x56,0x83,0xe7,0x08,0xe7,0x19,0x3d },
{ 0x1c,0x56,0x21,0x8a,0xc1,0xc0,0xbe,0x47,0x7a,0x3b,0xdc,0xeb,0x3b,0xb3,0x54,0x75,0xcc,0x4c,0xb3,0xd8,0xcf,0x6d,0x0e,0xfa,0x97,0xdb,0xa8,0xc2,0x5b,0xe2,0x8f,0x3b },
{ 0x5a,0x7d,0x39,0x2f,0xb3,0x17,0x79,0xdd,0x68,0xec,0x64,0xd3,0x89,0xb7,0x0f,0x05,0xe7,0x57,0x36,0xa3,0xd0,0x45,0xc3,0xbf,0x78,0x2d,0x51,0xd4,0x68,0xd9,0xc2,0x40 },
{ 0x05,0xc4,0x90,0xfe,0xe1,0xd0,0x8b,0x1c,0x27,0xe8,0x68,0xd8,0x27,0x10,0xee,0x9e,0xfc,0x19,0xc5,0xda,0x96,0x87,0x35,0x60,0x27,0x36,0xe0,0xaa,0x2c,0xba,0x1f,0x0d },
{ 0x84,0x99,0x64,0xc1,0x23,0x3f,0x4e,0xc8,0x0b,0x61,0x5a,0x7c,0xfa,0x94,0xc8,0xba,0xe0,0xd0,0x00,0x3d,0xc6,0x53,0x92,0x07,0x54,0x0a,0x03,0x9b,0xfa,0x5a,0x57,0x39 },
{ 0xd9,0x47,0x32,0xdf,0x95,0xe0,0xf8,0xe1,0x6b,0x5e,0xfa,0xb6,0xbf,0xa0,0x8f,0xaa,0x80,0xad,0x3f,0x1e,0xa1,0x3c,0x3a,0xeb,0xa1,0x50,0xa9,0x89,0x87,0x30,0xa6,0x7f },
{ 0x8c,0x27,0x13,0x5e,0xf8,0x8e,0x05,0x28,0x2b,0x34,0x11,0x80,0x8c,0xfc,0x5f,0x85,0x09,0x51,0xf3,0xe9,0xab,0x6e,0xca,0xda,0x4e,0x02,0xcb,0xf2,0x3f,0x3e,0x79,0x02 },
{ 0x22,0xa4,0x01,0x66,0x79,0x81,0x02,0x65,0xdc,0xce,0xe3,0x21,0x0a,0x3f,0x52,0x46,0x5f,0xf3,0x7c,0xd3,0xe6,0xb8,0x0c,0x1e,0x5e,0xda,0x5d,0xb1,0xb5,0x77,0xa0,0x47 },
{ 0xcc,0xea,0xb8,0x7f,0x45,0xfe,0x0d,0x35,0xb0,0x02,0xcc,0x79,0xe6,0x0b,0x26,0x22,0x9b,0xdf,0x93,0xe0,0x99,0x5e,0xfb,0x73,0x4a,0xba,0x8b,0xb2,0xcd,0x38,0x95,0x38 },
{ 0x33,0x6d,0x5d,0xa3,0xd0,0x0f,0x71,0x81,0x36,0x64,0x1f,0x6b,0xc4,0xb4,0x75,0xb9,0x6d,0xbb,0x8e,0x38,0x7a,0x04,0x81,0xef,0x64,0x02,0x99,0x45,0x80,0xd4,0x83,0x6b },
{ 0x50,0x46,0x01,0x09,0xa2,0x85,0x6f,0x6c,0xfd,0x04,0xc0,0x76,0xae,0xed,0xea,0x5c,0xe5,0x29,0x85,0x48,0xa6,0x3a,0xc6,0xb5,0x18,0x01,0x11,0x19,0x67,0xd8,0xa5,0x08 },
{ 0xde,0x7c,0x1c,0x5c,0x7c,0x81,0xbd,0x92,0x23,0x93,0xde,0x07,0x4f,0x52,0x3d,0x48,0x99,0xbf,0xbb,0x88,0x93,0x7c,0x49,0x7f,0x1b,0x41,0xee,0xb6,0xc3,0xd2,0xaf,0x62 },
{ 0x0d,0x98,0x4d,0xf1,0x84,0xeb,0xd1,0xd8,0x58,0x2e,0x5f,0x97,0x31,0xbd,0x2c,0xdc,0x2b,0xcc,0x3d,0xd6,0x59,0xdb,0x21,0x45,0x61,0x57,0x25,0x12,0x6c,0x05,0x92,0x1c },
{ 0x1a,0x23,0xac,0x3f,0xe1,0x20,0xc7,0x3a,0x33,0x02,0x83,0xcb,0x50,0x66,0x3a,0xb4,0x87,0x85,0xb9,0xd1,0x7f,0x7f,0xbf,0x9d,0xdc,0x4c,0x0c,0x4b,0x20,0x91,0xf9,0x06 },
{ 0x88,0xff,0x40,0x77,0x59,0x19,0xb1,0x25,0x8c,0xb7,0x04,0x1c,0x05,0x33,0x46,0xee,0x99,0xb0,0x45,0x24,0x60,0x97,0x31,0xaf,0x86,0xa4,0x99,0x9e,0x70,0x19,0x49,0x0c },
{ 0x2e,0x4a,0xe6,0x4d,0x98,0x3e,0x61,0x35,0xb0,0x71,0xf3,0x5d,0xf1,0xb4,0x16,0x4f,0xe6,0xb8,0x2d,0x02,0xf7,0xd6,0xa4,0x43,0x90,0x2c,0x28,0xfc,0xda,0x42,0x95,0x4b },
{ 0x65,0xfa,0x48,0x29,0x75,0xa2,0x6f,0x4b,0x7f,0xbf,0x37,0xde,0x89,0x0b,0xa9,0x8c,0xc3,0x0b,0x32,0x2c,0x60,0x40,0xda,0xb1,0x97,0x7e,0x0b,0xca,0x3e,0x34,0xf5,0x1d },
{ 0xce,0xab,0x4e,0xac,0x72,0x86,0xd8,0xd7,0xa6,0x64,0x4e,0x92,0x91,0x56,0x81,0x3b,0xc7,0x71,0x6f,0x30,0x8e,0xec,0x2f,0x7a,0x8c,0x81,0x9e,0x4b,0x2f,0xa4,0x6f,0x02 },
{ 0x8b,0xa4,0x48,0xc6,0x24,0x26,0x9a,0x73,0x90,0x6c,0x33,0xa2,0xc1,0x40,0xbc,0x06,0xb8,0x01,0xd3,0x09,0x52,0xd8,0xdb,0xbb,0x78,0xa5,0xfa,0xf8,0x2a,0x98,0xa3,0x69 },
{ 0xfd,0xe8,0x59,0xe0,0x14,0xda,0x34,0x5b,0xed,0xe3,0x7c,0x08,0x9a,0xd5,0xe2,0x5d,0x29,0xda,0x2e,0x7e,0x93,0x13,0xd7,0xc0,0x35,0xac,0xf9,0x3f,0xee,0x56,0xf4,0x7d },
{ 0x09,0x19,0x7e,0xbb,0x7b,0xab,0x01,0xc0,0xa8,0x0a,0xcd,0x40,0x3f,0x89,0x34,0x85,0xed,0x1b,0x3d,0xbc,0x98,0xb4,0x11,0x73,0x3b,0x26,0x76,0x17,0xe4,0xc7,0x3f,0x25 },
{ 0x42,0xb7,0x5f,0x25,0xf4,0x18,0xd1,0xb5,0x8d,0x81,0xbd,0xff,0xc6,0x50,0xb7,0x2a,0xde,0xf3,0x3b,0x93,0x1f,0x31,0x1a,0x87,0xb7,0xd6,0x52,0x3d,0xc7,0x30,0x58,0x25 },
{ 0x5a,0xa4,0x2b,0xd6,0x01,0x06,0x58,0x46,0xbd,0x6d,0x8d,0xb1,0xd4,0xa8,0x47,0x74,0x16,0x8e,0x1d,0xcd,0xf1,0x11,0x2f,0xfd,0xc8,0x6d,0x46,0x38,0x52,0xd0,0xf8,0x5c },
{ 0x2e,0x1c,0x3d,0x7b,0x9e,0xc5,0x6f,0xf9,0xee,0x7a,0xd6,0x23,0x6e,0xd6,0x4e,0xb3,0x92,0x2a,0x36,0x66,0x38,0x02,0xac,0x74,0x99,0xa4,0xc1,0x4f,0x35,0x0b,0x4c,0x5d },
{ 0x69,0x9e,0x2d,0x4a,0xa3,0x69,0xc9,0x50,0x91,0xeb,0x4b,0xee,0x0c,0xf9,0x12,0xf6,0x29,0x05,0x77,0x5a,0x70,0xd4,0xf6,0x85,0x66,0xe2,0xad,0xe3,0xff,0xac,0xb9,0x14 },
{ 0x08,0x67,0xf4,0x61,0x2f,0x58,0xf0,0xe1,0x3c,0x3d,0x6c,0x15,0x66,0x22,0x68,0xda,0xb0,0xe3,0x3a,0x05,0x91,0x22,0x52,0x25,0x58,0x36,0xf2,0x8f,0x3a,0xc0,0x25,0x4f },
{ 0x72,0x40,0xcd,0x93,0x03,0xb0,0x0e,0x12,0xdc,0x07,0x16,0x91,0x1a,0x12,0xe2,0xbb,0x00,0x3c,0x6f,0x6f,0xbf,0xb0,0x0c,0x1e,0xc2,0x4e,0x0f,0xec,0xeb,0x23,0x8c,0x45 },
{ 0x21,0xea,0x0b,0x55,0x9f,0xb9,0x73,0xe6,0xe0,0x14,0x8f,0xae,0x2e,0xdc,0xec,0x8f,0x1f,0x5c,0x8b,0x7d,0xc3,0x1e,0x7b,0xab,0x3d,0x1e,0xb7,0xe9,0x6f,0xa7,0x9b,0x10 },
{ 0x26,0xbd,0x5a,0x9c,0x33,0x73,0x35,0x09,0x7b,0xd1,0xc8,0xdf,0xa0,0xaf,0x03,0xc6,0x5a,0xee,0x5d,0xf2,0xa9,0x3f,0x14,0x7f,0xee,0x1d,0x06,0xb3,0x3a,0xfe,0xd6,0x30 },
{ 0xcb,0xb6,0x0f,0x43,0xff,0x3d,0xb8,0xc4,0x1e,0x60,0xbe,0x88,0x9d,0x30,0x95,0x93,0xb4,0xf2,0x9b,0x4b,0x17,0x60,0xf4,0x14,0xb8,0xa1,0x22,0x2f,0x71,0xa8,0xde,0x2b },
{ 0x7b,0xab,0x4f,0x7b,0x96,0x44,0xb3,0xa0,0x8c,0xc3,0x69,0x56,0x37,0x23,0x7b,0x50,0xc0,0xcc,0x38,0x9e,0x0b,0x75,0xfd,0xb6,0x56,0xb5,0x9a,0x55,0x48,0x4d,0x1b,0x7b },
{ 0x24,0xa6,0x5f,0x6e,0xc5,0xfc,0x80,0xe2,0xa6,0x5d,0xd1,0x12,0x49,0x3c,0x77,0x4b,0xf4,0x98,0x63,0xfe,0x3b,0x16,0x89,0x03,0x1c,0xbd,0x40,0xa3,0xe0,0x63,0xf3,0x55 },
{ 0x6b,0x95,0xde,0x82,0x50,0x6f,0xac,0xa0,0x65,0x36,0xf6,0xe2,0xf7,0xfd,0xa6,0xd0,0xa1,0xba,0xad,0x8d,0x5e,0xa4,0x13,0x7d,0xec,0xbd,0x7b,0x91,0xfd,0x7d,0xde,0x50 },
{ 0x35,0xfd,0x92,0x37,0x66,0xce,0x1a,0x64,0x42,0x66,0xfd,0x82,0x25,0x76,0xc1,0xbd,0xf8,0x19,0x15,0xa5,0xfa,0x74,0xae,0x90,0x0b,0x94,0xea,0x60,0x5a,0xa3,0x51,0x5a },
{ 0x4d,0x92,0x56,0x24,0xd1,0xb9,0x3a,0x0c,0x16,0x4a,0x07,0x16,0xe7,0x7c,0x10,0xb9,0xfe,0x61,0xd4,0x8b,0xb8,0x50,0x22,0xb1,0xbd,0xdf,0x19,0xbf,0x42,0x7a,0xd8,0x0b },
{ 0xca,0xb8,0xe5,0x03,0x68,0xee,0x1f,0x1e,0x1b,0x58,0x6a,0xe2,0x19,0x55,0x3c,0x46,0x75,0x1a,0xec,0xb7,0xfc,0xc6,0xb2,0x3f,0x9f,0x54,0x07,0x44,0xa6,0x5a,0x23,0x31 },
{ 0x8b,0x0d,0x45,0x80,0xad,0x80,0x9a,0x4c,0x29,0x90,0xcf,0xcc,0x7a,0x55,0x62,0x6c,0x8e,0xac,0x2e,0xec,0xc2,0xb6,0x68,0x77,0x94,0xed,0x85,0xaa,0x8d,0x70,0x21,0x2e },
{ 0x77,0xb0,0x51,0x61,0xe7,0x65,0xfb,0xb3,0xbf,0xe4,0xd4,0xaf,0x32,0xfb,0xd9,0xfa,0xfe,0x3b,0x07,0x01,0x17,0x8b,0xbd,0xdd,0x71,0x15,0x3b,0xe2,0xf0,0xd7,0x00,0x25 },
{ 0xb5,0x36,0x45,0x6c,0x82,0x5f,0x2f,0x57,0xa1,0x14,0x0d,0x76,0xc2,0x87,0x53,0x6a,0x70,0x8c,0xd6,0x9a,0x3c,0x7f,0x78,0x9f,0x5b,0x26,0xa7,0xa6,0xc0,0x3b,0xde,0x67 },
{ 0xcb,0xb3,0x91,0x3b,0x12,0xb4,0x13,0x85,0xca,0x5b,0x9c,0x30,0x29,0x7d,0xc1,0x2c,0x6f,0x5c,0xba,0x2a,0x6d,0xc1,0x92,0x26,0x0d,0x5d,0xeb,0x01,0x7d,0xa9,0xe9,0x54 },
{ 0xf5,0x45,0x8c,0x2c,0x90,0x7e,0x09,0xcd,0x34,0xb4,0x62,0x59,0x8c,0x1c,0xd2,0x6d,0xb5,0xd9,0x64,0xea,0xad,0xcf,0x07,0xed,0x4e,0xb5,0x81,0x6e,0x07,0x35,0x76,0x3b },
{ 0x60,0x20,0x58,0xa1,0x70,0x1a,0x07,0xfa,0x38,0xa8,0x56,0x42,0x7c,0x09,0xec,0x2b,0x14,0xab,0x8f,0x99,0xc1,0xef,0xb2,0x1f,0xb7,0x39,0xf5,0xfc,0xe3,0xf4,0x84,0x6d },
{ 0xd8,0x29,0x4f,0x38,0x93,0xdb,0xb8,0xca,0x85,0xe0,0x45,0xab,0xa2,0xe4,0x6b,0x88,0x49,0x62,0x6f,0x1f,0x6f,0x1d,0xab,0xea,0x81,0xd1,0xf8,0x38,0x39,0x8e,0xab,0x55 },
{ 0x94,0xdd,0xfe,0xfc,0xa5,0x60,0x39,0xca,0x6f,0xe3,0x0f,0xb6,0xb0,0xf9,0xc2,0x6e,0x6e,0x52,0x5a,0x59,0x04,0x83,0xc4,0x56,0x59,0x43,0x88,0x00,0x5f,0xfe,0x9d,0x46 },
{ 0xd7,0xcc,0xf3,0xc4,0x63,0x63,0x3a,0xa3,0x82,0x89,0xbc,0x55,0xe9,0x78,0x17,0xbc,0xef,0xfc,0x8f,0x31,0x0c,0x9f,0xc3,0xde,0xa9,0xc6,0x0d,0x11,0x8b,0x36,0x3c,0x6d },
{ 0x63,0x1c,0x64,0xf1,0x1b,0x9b,0xf2,0xb0,0xad,0xcb,0x9a,0x97,0xa4,0x7f,0x04,0xf0,0x02,0xf2,0x9d,0x10,0x32,0x16,0xfe,0x85,0x9f,0xee,0x74,0x76,0xd8,0x39,0xd3,0x2b },
{ 0xcb,0x44,0xeb,0x34,0xa6,0x07,0xe2,0x95,0x2b,0x7a,0xbe,0x5a,0xbf,0xdc,0x5f,0xc5,0xa8,0x4d,0x29,0x7b,0xe8,0x27,0x3b,0xa9,0xa2,0x20,0x07,0xf0,0x98,0x10,0x0c,0x56 },
{ 0x4b,0xd4,0x30,0x8b,0x91,0xb6,0x25,0x22,0x88,0x4d,0x08,0x49,0xbc,0x6b,0xad,0x93,0xbd,0xbb,0x7f,0x51,0x11,0x71,0x61,0x44,0x37,0xad,0x7c,0xc3,0x85,0xb1,0x8a,0x4e },
{ 0xc6,0xfc,0x9f,0x0f,0x4d,0xc3,0x5d,0xcc,0x27,0x36,0xd5,0x2c,0x63,0x87,0x5b,0x0d,0x15,0x9a,0x04,0x4a,0x73,0x96,0x35,0xf7,0x00,0x98,0xd8,0x8c,0x2c,0x84,0xb6,0x55 },
{ 0xb7,0xdb,0xe3,0x5f,0x0b,0x4e,0xb2,0xf5,0x2e,0x6e,0xaa,0xaa,0xad,0xa6,0x97,0x3f,0x7b,0xa2,0x15,0xb8,0x23,0x20,0x12,0xdd,0xcc,0xff,0x75,0x33,0x1a,0x0f,0xc6,0x5a },
{ 0xe3,0x6c,0x82,0xe6,0x45,0x87,0x49,0x49,0x1f,0xd5,0xf0,0xf2,0x3d,0x87,0x37,0x56,0xaf,0xc3,0xb7,0xb8,0x68,0x71,0xc8,0x50,0x5d,0xad,0xda,0x18,0x16,0x1a,0x29,0x2f },
{ 0xd1,0x70,0xd3,0x0b,0xad,0x9e,0x52,0xa1,0x66,0x7e,0x46,0x2f,0x69,0xd5,0xf4,0xa2,0x74,0xac,0xf6,0xcb,0x82,0x74,0xa4,0xf5,0x9b,0x2f,0x8b,0xc3,0xf3,0x3e,0xc9,0x60 },
{ 0xa3,0x43,0x8b,0x92,0x04,0xde,0xc6,0xf9,0x40,0xdd,0xb0,0xc2,0xc4,0x40,0x09,0x89,0x61,0x35,0xdf,0xc3,0x0e,0xc3,0x2d,0x0f,0x49,0x45,0x1c,0x6a,0x96,0xc4,0x3a,0x2f },
{ 0x5a,0x71,0xb5,0x08,0x26,0x71,0x5d,0x99,0x1f,0x30,0xe8,0x35,0xe8,0xec,0xcc,0x6d,0x89,0xa2,0x6d,0x10,0x4c,0x37,0x90,0x66,0x80,0xbd,0xe1,0xba,0xbb,0x87,0xca,0x11 },
{ 0x37,0xef,0x71,0xf6,0x9e,0x26,0x5e,0xce,0x65,0xc2,0x3f,0x09,0x74,0x37,0x6b,0x17,0xde,0x8c,0xa1,0xa0,0x7c,0x4a,0x81,0x3f,0x20,0xd4,0xe9,0xe4,0xd2,0x30,0x93,0x14 },
{ 0x23,0xce,0x67,0xac,0x57,0x09,0x50,0x1d,0x9f,0x13,0x40,0x30,0x92,0xbc,0xc0,0x1f,0xf0,0xcd,0x15,0xc8,0x52,0x0b,0x6c,0x35,0xd7,0xbe,0x43,0x6d,0xc8,0x58,0xed,0x17 },
{ 0x0e,0x96,0x0e,0x39,0xbc,0xe1,0xea,0xfc,0x55,0x0a,0x7c,0xb6,0xd1,0x45,0x55,0x5d,0x5a,0x74,0x78,0x31,0xed,0xd4,0x8d,0x84,0x97,0x11,0x55,0x12,0x25,0x7c,0xcd,0x20 },
{ 0x53,0x5f,0x6f,0xb9,0x4e,0xdf,0xec,0x30,0x1f,0x4e,0xd4,0xea,0xb5,0xaa,0xf7,0xbf,0xd2,0x53,0x1c,0x2a,0x7c,0xe2,0x90,0xd5,0x6b,0xb3,0x28,0xfa,0x04,0xb9,0x3b,0x5e },
{ 0xc3,0x40,0x13,0x85,0xed,0x41,0x0e,0xbe,0x1d,0x30,0xbe,0x31,0x49,0x51,0xe0,0xf8,0x31,0x7c,0xcd,0x29,0xa5,0x36,0xdb,0xfa,0x78,0x99,0xc7,0x92,0x0b,0x4c,0x20,0x4b },
{ 0x88,0x3b,0xec,0xdb,0x44,0xd3,0x98,0x79,0xc7,0xc6,0xca,0x1c,0x1f,0x97,0x0d,0x07,0xb7,0x20,0xc5,0x34,0x69,0xe4,0xd0,0x0f,0x03,0xd5,0x6c,0xa0,0xe6,0x1c,0x77,0x5a },
{ 0x11,0xd2,0x5b,0x8d,0xe7,0x69,0x7c,0x48,0x1d,0xfc,0xd3,0x35,0xa9,0x58,0x3e,0xd9,0x00,0x96,0xf1,0xe0,0xc8,0x66,0xcb,0x3d,0x63,0x5f,0x08,0xf1,0x2a,0xb1,0xfe,0x36 },
{ 0xd0,0x44,0x10,0x28,0x45,0x3f,0xd7,0x4d,0x80,0xa2,0xf4,0xf7,0x40,0x9f,0x67,0xa5,0x48,0xa3,0xe8,0xe2,0xc3,0x6e,0x0c,0x80,0x8b,0x0e,0x50,0x8e,0xe7,0xe9,0x7f,0x00 },
{ 0x03,0x9a,0x16,0x84,0x12,0x56,0xcd,0x99,0x67,0x10,0xed,0xae,0x26,0x14,0x7e,0xe0,0x1b,0xf4,0x21,0x25,0x50,0xf6,0x27,0x5e,0x39,0xa9,0x89,0x09,0x49,0xca,0x91,0x63 },
{ 0xf6,0x90,0x93,0x64,0x48,0x7e,0x14,0xe6,0x1a,0x1b,0x40,0xff,0x23,0x51,0x3b,0xb9,0x87,0x5f,0x26,0xdb,0xbe,0x4d,0x0a,0xa7,0x3f,0x5b,0xaf,0xb2,0x73,0xfa,0x6e,0x3f },
{ 0x13,0x25,0x9e,0x9d,0x9e,0x8d,0x7e,0x2f,0x13,0xeb,0x09,0x37,0xdb,0x07,0x46,0x91,0x97,0xf1,0x0b,0x91,0x09,0x00,0xb4,0xe8,0x2a,0x7f,0x7a,0xe4,0x09,0xa5,0x53,0x06 },
{ 0xcf,0xbe,0x26,0x15,0x99,0xde,0xae,0x02,0x23,0x59,0x12,0x3f,0xa9,0xfc,0x26,0xa5,0xa1,0x29,0x71,0x2e,0x22,0x05,0xa8,0x4f,0x69,0x3d,0x88,0x16,0x1e,0xb9,0xba,0x3a },
{ 0xb9,0xad,0xa3,0x9e,0x8b,0x45,0x08,0xcf,0x7e,0xd0,0x3d,0x02,0x35,0x04,0xd2,0x87,0xc5,0x96,0xeb,0xe5,0x6f,0x2d,0xd2,0xc3,0x92,0x9e,0xd3,0x36,0xca,0x0f,0x26,0x08 },
{ 0xaa,0xe3,0xc0,0x74,0x20,0x55,0xa9,0x41,0xb3,0x41,0x8c,0xeb,0xee,0x8b,0xc4,0x47,0x6f,0xa1,0x28,0x38,0x68,0x3b,0xf1,0x12,0x5e,0x6b,0x79,0x6e,0x49,0x56,0x5c,0x0d },
{ 0x36,0xee,0xce,0x3b,0xc4,0x94,0xe0,0x48,0xca,0xc3,0xa0,0xef,0x31,0x98,0xcd,0x51,0x5d,0x5e,0x27,0x33,0xc3,0x62,0xcb,0xdd,0x12,0xca,0xd0,0x4f,0x1a,0x83,0x84,0x57 },
{ 0x39,0x7d,0x36,0x87,0x9e,0x93,0xa5,0x58,0xfb,0x40,0x88,0x94,0xa9,0x5e,0xfe,0xc0,0x42,0x6e,0x29,0x70,0xb8,0x43,0xb1,0x9e,0x7d,0xa2,0x25,0x87,0xae,0xf9,0xee,0x63 },
{ 0x9f,0x3a,0x6c,0x42,0x7e,0xe6,0xa9,0xb2,0x1c,0x70,0xed,0x24,0x96,0x36,0xe2,0xe5,0xfb,0x0f,0xe7,0x34,0xfd,0xbc,0x97,0x44,0x76,0x5e,0x37,0x7a,0x62,0x92,0x2b,0x24 },
{ 0x98,0x74,0xa4,0x80,0x92,0xb3,0x40,0x8f,0x73,0x73,0x46,0x70,0xa5,0xa5,0x37,0x4b,0xeb,0x45,0x59,0xd3,0xd2,0x43,0xdf,0xf9,0xd8,0xd4,0x81,0x22,0x1f,0xfa,0x41,0x1d },
{ 0x96,0xbf,0x97,0x96,0x12,0x38,0x26,0x43,0x3a,0x8a,0x6f,0x61,0x09,0x75,0xfc,0x01,0xf5,0xbe,0x20,0x0d,0x9e,0xc7,0x06,0x2d,0x7f,0x77,0x33,0x20,0x81,0x61,0x2d,0x15 },
{ 0x53,0xd6,0x7d,0x7b,0xaa,0x79,0xe1,0x9f,0x6f,0x52,0xd3,0x1b,0x61,0xdc,0x0d,0x53,0xd0,0xa7,0xfc,0xfa,0xdc,0x65,0xb4,0x79,0x6b,0x95,0x0a,0x7f,0xed,0x02,0x89,0x46 },
{ 0x4f,0x12,0xfd,0x93,0x4c,0xbd,0x76,0x56,0x1e,0x17,0xb1,0xaf,0x6f,0xf8,0xe9,0x9a,0xc6,0x98,0xfa,0x0a,0xe3,0x49,0x79,0x15,0xbe,0x41,0x32,0x84,0x44,0x72,0x47,0x76 },
{ 0x2f,0x59,0xcc,0x8b,0x85,0x2b,0x81,0x61,0x8f,0x8b,0x42,0xf0,0x29,0xa7,0x82,0x9e,0x89,0xe3,0x41,0x9f,0xd9,0xd3,0x44,0x31,0x33,0x2e,0xaa,0x0d,0x71,0x5e,0xa3,0x10 },
{ 0x4a,0xb9,0xe8,0x1c,0xb8,0x71,0x9a,0x3f,0x74,0x3e,0xb6,0xf3,0xa9,0x52,0x0b,0x5e,0xe0,0xb1,0x23,0x97,0x59,0x20,0xd3,0x9e,0x15,0x05,0x9e,0xb8,0x33,0x9f,0x9c,0x13 },
{ 0x70,0xcf,0xa6,0xdf,0xe8,0x62,0xbd,0xd8,0x0c,0xdc,0xd1,0x1a,0xf4,0xbd,0x31,0x89,0x93,0x25,0x03,0x59,0x40,0x53,0x44,0x02,0x9c,0x52,0x24,0x71,0x20,0x0c,0x4a,0x44 },
{ 0xdd,0xb7,0xc1,0xb6,0xff,0x10,0xcc,0x96,0x20,0x26,0x31,0x42,0x84,0x25,0x22,0x9d,0x80,0xd5,0x5a,0x1e,0x72,0x72,0xe4,0xe9,0xc3,0xf3,0x8f,0x9f,0x7f,0xb9,0x08,0x7d },
{ 0x2b,0xfc,0x02,0xc9,0x82,0x35,0x42,0x10,0xad,0x84,0x98,0x4d,0x9f,0x9a,0xaa,0xad,0x41,0x01,0xd9,0xbb,0x20,0xab,0xa2,0x88,0x22,0x39,0x76,0x14,0x60,0xa8,0x35,0x31 },
{ 0x55,0x5f,0xb7,0x42,0xc2,0x47,0x67,0xfc,0x55,0xaf,0xad,0x77,0x6f,0x63,0x19,0x90,0x65,0x36,0x5a,0xa4,0x26,0x24,0xd6,0xc7,0xf2,0xf4,0xf3,0xd9,0xb4,0xa2,0x58,0x1b },
{ 0x45,0x24,0x44,0x6e,0x9a,0x5f,0xa8,0x78,0x31,0x7c,0xfa,0xf7,0x47,0x23,0x37,0x1a,0xca,0x26,0xb2,0xbb,0x8e,0xd0,0x35,0x89,0x4f,0x28,0xee,0x72,0xf0,0xf1,0x07,0x76 },
{ 0x4d,0x16,0x71,0x08,0xd5,0x48,0xd8,0x46,0x92,0x92,0x81,0xbc,0x27,0xa0,0xe0,0xfe,0x65,0x10,0x1c,0x23,0xc3,0x11,0x17,0x63,0x9a,0x01,0xce,0x13,0x74,0xd4,0x00,0x14 },
{ 0xf6,0x26,0x20,0x9c,0xd8,0x09,0xcb,0xe2,0x07,0xbf,0x12,0xf6,0xb2,0x0d,0x1b,0x9f,0xe6,0x6e,0x29,0xb9,0x1d,0xf4,0x76,0x40,0xae,0x7a,0xa1,0xd7,0x29,0x4e,0xef,0x35 },
{ 0x05,0x54,0x0b,0x63,0xf2,0xac,0xb0,0x27,0xf7,0xfc,0x62,0x75,0x5a,0x9d,0x6f,0xd0,0x4f,0xe9,0x76,0x18,0x41,0x53,0xb9,0x69,0x4b,0x11,0x20,0x21,0xe4,0xff,0xf8,0x16 },
{ 0xf8,0x82,0xb1,0x6d,0x41,0x8f,0xe8,0x9f,0xd7,0x86,0xbf,0xe9,0x9b,0xc9,0x28,0x7d,0x38,0xc9,0x21,0x56,0xbe,0x62,0x00,0xca,0x5f,0x4c,0xc3,0x3b,0x92,0xad,0x51,0x31 },
{ 0xfb,0x72,0x53,0x97,0xed,0xfd,0xd8,0xd3,0xf0,0x50,0x7c,0xe4,0x61,0xdb,0xaf,0x1b,0xe8,0xe5,0xfe,0x28,0xef,0xe2,0x44,0x23,0x40,0x22,0xbc,0x1d,0x51,0x57,0x03,0x4a },
{ 0xad,0x07,0xe1,0xc3,0x80,0x7f,0x52,0xe0,0x1a,0xaf,0x90,0x4f,0xb7,0x14,0xec,0x9b,0xf5,0xeb,0x42,0x3a,0x15,0xd4,0x5d,0x20,0x1e,0xb8,0x5a,0x74,0xcb,0x6b,0xf1,0x6e },
{ 0xd2,0xdd,0x68,0x8c,0x52,0x98,0x9f,0x1a,0x7c,0xae,0xe7,0x21,0x3a,0xb4,0x0b,0xee,0x30,0x59,0xa9,0xeb,0x37,0x80,0x8b,0x7d,0xc4,0x56,0xba,0x2a,0x8f,0x9c,0xb7,0x4e },
{ 0xf3,0x18,0x88,0x90,0xb9,0x85,0x88,0x52,0x20,0xbb,0x14,0xd2,0xe1,0x07,0x98,0x5e,0xb6,0xd2,0xc0,0xcc,0xeb,0xb8,0xaa,0xb6,0xcf,0x4e,0x42,0x27,0xcb,0xe0,0x59,0x1f },
{ 0x6c,0x81,0x9c,0xb3,0xc7,0x8c,0x6d,0xb9,0x9f,0xb9,0x61,0xf4,0xf6,0x56,0xfe,0x0e,0xc0,0x7e,0x2f,0x5d,0x4d,0x18,0x9a,0x6f,0xbd,0x62,0x2d,0xe8,0x7b,0x4a,0xaa,0x30 },
{ 0x9c,0x79,0x6a,0xa4,0xa8,0x7a,0x82,0xad,0x32,0x3e,0x77,0xdc,0x98,0x5b,0xbb,0xbe,0xe2,0xfa,0xa9,0xa7,0x7f,0x5b,0x52,0xfd,0xf0,0x7c,0xca,0x6e,0x5b,0x24,0xf1,0x48 },
{ 0xf3,0x38,0xdf,0x7d,0x18,0xbc,0x35,0xe6,0x57,0x5d,0x11,0xac,0xc6,0x70,0x75,0x57,0x7a,0x93,0x9a,0xbd,0x63,0x1f,0x5c,0x0a,0x0a,0x82,0x4c,0x37,0x13,0x15,0x34,0x75 },
{ 0x0e,0x2d,0xc2,0x78,0xe7,0x85,0x7c,0x21,0x8d,0x3d,0x35,0x98,0x8a,0xca,0xe7,0xaa,0xc9,0xe6,0x6a,0x58,0x93,0xe4,0x13,0xb8,0xa9,0x51,0x76,0x03,0x1f,0x90,0x56,0x50 },
{ 0x20,0xe0,0x60,0xc9,0x70,0x47,0x4d,0xfe,0x00,0x51,0x26,0x6d,0x4b,0xa0,0x34,0x06,0xe0,0x93,0xd6,0x13,0xe2,0x75,0x44,0xc3,0xbc,0xd5,0xa1,0xbc,0x72,0x55,0xcf,0x39 },
{ 0x4f,0xa2,0x05,0xaa,0x8e,0x2b,0x52,0x66,0xbb,0xe1,0x19,0x5c,0x2a,0xb1,0x1a,0x35,0x92,0xb3,0xee,0xca,0x78,0x69,0x87,0x19,0x4c,0xcf,0x59,0xd9,0x4a,0xb2,0xf9,0x18 },
{ 0x55,0x0e,0x8e,0xb2,0x9a,0x61,0xcf,0x35,0xb4,0x19,0x7f,0xd5,0xbb,0xe4,0xa1,0x53,0x8b,0x26,0x80,0x97,0xb4,0x93,0x15,0xcc,0xd1,0x56,0x5d,0x2b,0xf3,0xb8,0x9d,0x56 },
{ 0xfd,0x23,0x70,0xe3,0xd7,0x4e,0x24,0xb8,0x7d,0x3d,0x5f,0xfe,0xdb,0x6e,0x4b,0xf2,0x6f,0x69,0x25,0x3e,0xdd,0x0a,0x88,0x2e,0x7a,0xd8,0x71,0xb9,0x0f,0x58,0x11,0x01 },
{ 0xb9,0xf5,0x5c,0xb4,0xc7,0x87,0x5b,0x9a,0x67,0xb5,0x5e,0xe8,0x93,0xc5,0x5c,0x47,0x49,0xae,0x90,0x65,0xa1,0x78,0x65,0x61,0x2a,0xeb,0xd5,0x7f,0xe2,0xc8,0x74,0x29 },
{ 0xcf,0x62,0x94,0x20,0xc2,0x4f,0x83,0x3c,0xaa,0xb2,0x8e,0x75,0x6f,0x36,0x27,0xb2,0x8d,0xd1,0xa7,0x85,0xcf,0x64,0x03,0x49,0xad,0xb8,0x74,0xa5,0x7e,0x47,0x8f,0x18 },
{ 0xb0,0x17,0x71,0x70,0x1f,0x05,0xb0,0xc8,0x98,0x41,0x74,0x82,0x2d,0x0d,0x74,0x90,0xf6,0x4e,0xa5,0x9e,0x17,0xdf,0x93,0x70,0xbe,0x8d,0x9b,0x3a,0xfc,0x24,0x63,0x5d },
{ 0x97,0xc3,0x5f,0xf1,0x3c,0x9f,0xa3,0x8a,0xe4,0x72,0x7f,0x46,0x6f,0xd0,0x5b,0xf7,0xbd,0x6e,0x5f,0x30,0x3c,0x9e,0xab,0x3e,0xab,0x5e,0x41,0xf7,0x5a,0x8b,0x95,0x39 },
{ 0xf9,0x9d,0x8a,0x0f,0x73,0x61,0xa8,0x98,0x55,0x6e,0xde,0x2d,0x1e,0x06,0x3f,0xef,0x89,0x6b,0xd3,0x34,0xb6,0xcc,0xd4,0xde,0x02,0x74,0xf8,0x26,0xf8,0x89,0xb5,0x55 },
{ 0x5b,0x83,0x0c,0x73,0x7f,0x17,0xf1,0xd4,0x6c,0x69,0x76,0x50,0x98,0x73,0xbc,0xf9,0xc1,0x57,0x8f,0x8b,0x8e,0x4c,0xb5,0x23,0x84,0x3a,0xca,0xa5,0x3f,0x8f,0x16,0x64 },
{ 0x49,0xb0,0x27,0xa8,0xf0,0x36,0x57,0xdb,0x0b,0xf1,0x0d,0x14,0x07,0x4d,0x7b,0x75,0xd9,0x9a,0xfd,0x05,0xa5,0x5c,0x5c,0xd9,0x93,0xe1,0x0d,0x84,0x9e,0x88,0x0c,0x72 },
{ 0xe4,0xe8,0x2f,0x06,0x32,0x3f,0xf3,0xcf,0x83,0x2f,0x0a,0x66,0x68,0xe5,0x5a,0x15,0xd7,0xfa,0x8b,0x77,0x40,0xd0,0x4b,0x51,0x77,0x6c,0xb4,0x39,0x5e,0xdf,0x91,0x54 },
{ 0x3e,0x41,0x41,0x5d,0xf1,0x02,0x51,0xf0,0x37,0x32,0x11,0xea,0x00,0x28,0x27,0x4f,0x13,0x83,0x2b,0x6d,0x0e,0x42,0x52,0xbd,0x5e,0xf9,0x25,0xdc,0x4c,0x31,0x04,0x75 },
{ 0xa5,0x4f,0xbf,0x86,0x00,0xd4,0x32,0x77,0x5a,0x39,0x7a,0x7b,0xa3,0xa9,0xe2,0x64,0xf2,0x55,0x3a,0x84,0xdf,0xf5,0x18,0x06,0x3a,0x89,0x12,0x87,0xc7,0x4c,0xbc,0x09 },
{ 0x6b,0x5a,0x7b,0xee,0x4c,0x83,0x3d,0xaf,0x0c,0x48,0x1e,0x44,0xac,0xa9,0x4d,0x91,0x8f,0xda,0x46,0xdc,0x61,0x2f,0xc8,0x70,0x77,0x48,0x76,0xec,0x43,0xed,0xa4,0x51 },
{ 0xe8,0x07,0x92,0x2c,0x44,0x7e,0xde,0xea,0x74,0x12,0xe4,0xf2,0x84,0x61,0x4f,0xe3,0xa4,0x13,0x7d,0xf4,0x43,0xd3,0xce,0x3d,0x21,0xf5,0x7c,0xb5,0x64,0x9e,0x53,0x72 },
{ 0xb7,0x3d,0x1b,0x4e,0x2c,0xf5,0xe0,0x59,0x42,0x3b,0x10,0xf6,0x25,0x1c,0xc2,0xa9,0x7f,0x60,0xf4,0x10,0x74,0x0f,0x95,0x14,0x19,0xe0,0x52,0x9b,0x95,0x12,0x36,0x55 },
{ 0x94,0x6c,0xc3,0x09,0xc8,0xe5,0x85,0xbb,0x2d,0x44,0xc7,0x13,0xd6,0xbb,0x5e,0xb0,0x04,0xa4,0xfa,0x6c,0xc6,0x0f,0xce,0x06,0x36,0xf7,0xfa,0x5b,0xdd,0xa9,0x84,0x17 },
{ 0x02,0xdf,0xdd,0x1e,0x79,0x55,0x89,0x72,0xaf,0xf0,0x4b,0xa2,0x0e,0xa0,0xe3,0x10,0xef,0xe0,0x65,0xac,0x0c,0xdd,0xef,0x93,0xc9,0xd9,0x54,0x11,0xe4,0x47,0x02,0x36 },
{ 0xd6,0xa1,0x76,0x6b,0x9f,0x3a,0x49,0x14,0x55,0xb5,0xca,0xdc,0xb6,0x83,0x79,0x48,0x1f,0xc7,0x8f,0xb3,0x9d,0x71,0x1c,0xd0,0xe0,0xf1,0x15,0x90,0xc8,0x6d,0xce,0x57 },
{ 0xac,0xba,0xef,0xe1,0x4b,0xca,0x69,0x86,0xb9,0x2b,0x0d,0xe8,0x31,0xf3,0x3c,0x24,0xae,0xde,0x4a,0x40,0xf3,0xab,0xd9,0xbf,0xb5,0x1e,0x1c,0xec,0x2c,0x07,0xb9,0x08 },
{ 0xac,0x3e,0x85,0x27,0x46,0x3a,0xb9,0xd8,0x61,0x2b,0xb2,0xab,0x69,0x72,0xf7,0x6d,0xc1,0x46,0xf7,0xc1,0x62,0x73,0x55,0x8a,0xac,0x45,0x3e,0xaa,0x69,0x8f,0xf6,0x6a },
{ 0x2f,0xeb,0xfa,0xa7,0xef,0x48,0x9e,0x60,0x4e,0xed,0x58,0xc1,0x71,0x1f,0xf6,0x7f,0x55,0x87,0x38,0xdc,0xad,0x5f,0x55,0x90,0xfe,0xd0,0xc4,0x5a,0xfa,0x9b,0xcc,0x57 },
{ 0x4c,0xf2,0xf7,0xd4,0x1c,0x4c,0xef,0x90,0x42,0x42,0xce,0xf1,0xeb,0x94,0xe2,0x1b,0x9a,0xe6,0xf2,0x90,0xcf,0x5c,0xe1,0xca,0x0a,0x39,0xdc,0x25,0x2e,0x83,0x6f,0x0e },
{ 0xcf,0x39,0x1f,0xbc,0xc6,0x56,0xff,0x72,0xeb,0xd5,0xfa,0x1e,0xd1,0x7a,0x7f,0x34,0xfd,0xfd,0xa2,0xa4,0xf6,0xb9,0xef,0x3c,0x78,0x96,0x81,0x7f,0x65,0xdf,0x31,0x7a },
{ 0x2e,0xbe,0xfd,0x73,0x71,0x4e,0x7a,0x66,0xb2,0xba,0xc0,0x37,0xb0,0xac,0x85,0xcf,0x26,0xc3,0xc0,0xd4,0x46,0xb4,0x16,0xfd,0xdc,0xb3,0x56,0xcc,0x80,0xac,0x4d,0x44 },
{ 0x16,0x2c,0x49,0xd1,0x74,0x11,0xf1,0x32,0x6e,0xe5,0xdc,0x57,0x72,0xa0,0x7d,0xb3,0xeb,0xb3,0x41,0xa8,0x45,0x04,0xa5,0xa6,0x6d,0xb9,0xa2,0x68,0xfe,0x2e,0xe6,0x0f },
{ 0x99,0xd9,0xe2,0x80,0x20,0xb4,0x86,0xbc,0xae,0xbe,0xd9,0xb6,0x88,0x5e,0x72,0x64,0xe9,0x31,0xca,0xb7,0x3d,0x07,0x53,0xcd,0xa5,0x3f,0x80,0xe0,0x76,0x4b,0x64,0x60 },
{ 0xaf,0xe9,0xd1,0x94,0xf9,0xfe,0x36,0x24,0x63,0x24,0x0e,0x7d,0x2d,0xb5,0x28,0x7d,0x6c,0x36,0x01,0xb2,0xfa,0xd5,0xbd,0xfa,0xcf,0x27,0xa5,0x59,0x7b,0x7b,0x4b,0x14 },
{ 0x0f,0x1b,0x65,0x89,0x58,0x78,0xe2,0x65,0x47,0x24,0x2c,0x56,0xfd,0x98,0x6f,0x79,0xcb,0xb4,0x5c,0x4f,0x72,0x2a,0x3b,0x0f,0x66,0xcf,0x4a,0xb2,0xa4,0xa5,0x23,0x69 },
{ 0x42,0xfa,0x67,0xf6,0xce,0x49,0x43,0x78,0x62,0x44,0xb8,0xdf,0xdb,0xe0,0x45,0x0d,0x10,0x2a,0x2e,0x05,0xa9,0x86,0x3c,0x1f,0x37,0x48,0xc3,0xca,0x00,0xfd,0xad,0x64 },
{ 0x15,0x24,0x0a,0xfe,0x3c,0xe2,0x92,0x20,0xbf,0x0b,0xb9,0x06,0x9b,0x8c,0xca,0xc5,0xc9,0x2d,0x1b,0x66,0xef,0x36,0x01,0x43,0x09,0xf8,0xd9,0xaf,0xe1,0x52,0x3d,0x2a },
{ 0xb5,0xbb,0xeb,0x00,0x9c,0x6c,0xb8,0x1f,0x43,0xa3,0xee,0x95,0xc6,0xc1,0xc1,0x45,0xd4,0x5a,0x3f,0x7f,0x4b,0xac,0xc8,0x88,0xc3,0xb7,0x81,0x82,0xa2,0x1b,0x53,0x20 },
{ 0x36,0x71,0xf3,0x30,0x67,0xd7,0x65,0x8d,0xc6,0x58,0x0d,0xf5,0x53,0xfe,0x1e,0x13,0x76,0xfd,0x95,0x50,0x06,0x35,0x09,0x21,0xc1,0xa3,0xe0,0x0d,0x5b,0x33,0x1c,0x4e },
{ 0x9d,0xbd,0x5a,0xe0,0x99,0xb2,0x91,0xf4,0x6f,0xbf,0x5e,0x70,0x5f,0x8d,0x28,0x98,0xe1,0x75,0xd2,0x4f,0x31,0x00,0x38,0x24,0xe4,0x73,0x1b,0xda,0x94,0x21,0xbf,0x1f },
{ 0x91,0x29,0xd2,0xc6,0x58,0x18,0x64,0xc8,0xd0,0x85,0x39,0xe8,0x0c,0x3a,0x97,0xb3,0x1c,0x3b,0xca,0x40,0xbb,0xd0,0x5e,0x2e,0x0f,0xaa,0xf4,0xdf,0x5e,0xc2,0xea,0x14 },
{ 0xf2,0x2d,0x92,0x0b,0x6f,0x24,0x3a,0xd2,0x74,0x32,0x04,0xc3,0xec,0x17,0xe7,0x65,0xf1,0x67,0x4b,0xe5,0x59,0xc0,0x94,0xf8,0xee,0x05,0x48,0x23,0x80,0x69,0x31,0x1a },
{ 0x3e,0x66,0xf6,0xa4,0x81,0x81,0xf0,0x8b,0xdf,0x8a,0x21,0x94,0x9c,0x3f,0x37,0xe0,0x55,0xc5,0x50,0xf8,0x36,0x68,0x1c,0xc4,0x57,0xb0,0x91,0xb1,0xa9,0xdf,0xc1,0x02 },
{ 0x93,0xd0,0x3a,0x56,0xfe,0xa6,0xc3,0x54,0x2e,0xac,0x1e,0x33,0xe9,0xcc,0xb3,0xd3,0xd1,0x45,0x5d,0x8d,0xd3,0xc1,0x5d,0xc5,0xc7,0x7d,0x12,0x61,0xa7,0x52,0x0d,0x08 },
{ 0xbc,0xad,0x0f,0x47,0xbf,0x74,0x86,0xc7,0x30,0x72,0xa3,0xc8,0x82,0xc0,0x32,0x16,0x81,0xe4,0x57,0xef,0x6b,0xa1,0x63,0x05,0xe4,0x69,0x3b,0x3d,0x98,0x66,0xcd,0x13 },
{ 0x8d,0xd7,0x5a,0x59,0x17,0x5e,0x96,0x00,0xa1,0x65,0x6d,0xf2,0x3d,0xe8,0xb1,0x95,0x61,0x75,0xf9,0x34,0x5d,0xf9,0xe7,0xe4,0xee,0xd7,0x41,0x71,0x5b,0x0c,0x94,0x08 },
{ 0x22,0x8b,0x13,0x88,0x2d,0x30,0xd8,0x8e,0x64,0x44,0x77,0x52,0x1c,0xf2,0x6f,0xea,0xe0,0xb5,0x92,0xbe,0x6e,0x47,0xbe,0x06,0xd9,0x00,0x78,0x90,0xeb,0xcd,0x8a,0x6d },
{ 0x22,0x81,0x1a,0x43,0x24,0xac,0x95,0x1d,0x39,0xfe,0xf7,0x17,0x9e,0xb1,0x46,0x76,0x36,0x68,0x7d,0xc1,0x14,0xf5,0xc2,0x9b,0x4a,0x13,0x50,0xe1,0x2e,0x19,0x03,0x03 },
{ 0xad,0x07,0xd7,0x42,0x8c,0xe1,0xa5,0x12,0xcd,0x4e,0x49,0x0a,0x2a,0x13,0xcb,0x8c,0xbf,0xc4,0x20,0xcd,0x31,0x41,0x9e,0x3d,0xb8,0x46,0x65,0x0c,0xfa,0xb8,0x17,0x59 },
{ 0x9c,0xb3,0x87,0xa4,0xab,0x7f,0x2b,0x42,0x27,0x0e,0xb8,0x61,0xeb,0x9e,0xb2,0x13,0x83,0x63,0xc6,0xc3,0xe4,0x5f,0x28,0x48,0x1b,0x78,0xd0,0xa6,0x86,0xef,0xaf,0x21 },
{ 0xc7,0x59,0x28,0xf0,0x20,0xb0,0x23,0x01,0xe7,0x42,0x3e,0xae,0x2f,0x84,0x4f,0x17,0x56,0x14,0x82,0x85,0x72,0x80,0x9f,0x8f,0x10,0x9c,0x68,0xfb,0x2d,0xeb,0x7b,0x33 },
{ 0x2e,0xa1,0x53,0x8a,0xc4,0x7c,0xbe,0x0d,0x5a,0x9c,0x97,0x86,0x84,0x9d,0x56,0x79,0x35,0xc9,0xbf,0x29,0xf6,0xe7,0x6b,0x7b,0x3e,0xee,0x09,0x1c,0x76,0x4a,0x80,0x12 },
{ 0xb1,0x8f,0x92,0xff,0x57,0x6c,0xcd,0xef,0x8f,0xd4,0x01,0xa1,0x20,0x13,0x01,0xbf,0xc8,0xed,0x5d,0x3b,0x0f,0xf3,0x13,0x36,0x57,0x2f,0x82,0x40,0x7d,0x7e,0x30,0x57 },
{ 0x9f,0xab,0x09,0x2a,0x85,0x73,0xc7,0x34,0xed,0x84,0x15,0x2f,0x06,0x52,0xc8,0x5c,0x2c,0x8a,0x26,0x66,0xc6,0xd0,0x89,0x2a,0x40,0xb8,0xf4,0x53,0xa5,0xa2,0x61,0x64 },
{ 0x7e,0xa9,0x2b,0x6b,0x37,0xb5,0x6d,0x91,0x53,0x95,0xa0,0x70,0x33,0x7e,0xd5,0x90,0xf1,0x32,0xd8,0xa4,0x35,0x94,0x84,0xf0,0x94,0xd1,0xfe,0x80,0x28,0x55,0xa3,0x3b },
{ 0xc4,0x92,0xa9,0x7d,0xfd,0x3f,0x3a,0x87,0x1d,0xbe,0xcd,0xfd,0xb7,0x30,0xb0,0x5a,0xde,0x48,0x79,0x7e,0xcc,0x4c,0xe9,0x22,0xfc,0x37,0xc5,0x20,0x9b,0x4e,0x6d,0x0b },
{ 0xcc,0x2b,0x29,0xd7,0x2f,0xc8,0xa3,0x38,0xc3,0xab,0x85,0x52,0xa0,0x6e,0x0d,0xc6,0xeb,0x66,0x8a,0x09,0x12,0x56,0xf4,0x59,0x1f,0x80,0x80,0xbb,0x38,0x65,0xbf,0x34 },
{ 0x22,0x54,0xd4,0x82,0x4a,0x74,0xb1,0xaf,0x42,0x09,0x4f,0xd7,0xb4,0xc4,0x05,0x99,0xbd,0x4e,0xb4,0xcd,0x14,0xaa,0xbd,0x94,0x5e,0x8a,0x4b,0x7f,0xab,0x1f,0xde,0x49 },
{ 0x0e,0xb8,0x3c,0xdd,0xdd,0x7a,0xb7,0xc4,0x8a,0xd0,0x4d,0x76,0x61,0x7d,0x75,0x30,0x24,0x95,0xea,0x31,0x35,0xd8,0x87,0xd9,0x17,0x98,0x23,0x3e,0x2e,0x9e,0xd5,0x49 },
{ 0xc8,0x09,0x74,0x4a,0x37,0x63,0xdb,0xb6,0x19,0xe2,0x55,0xaf,0x94,0x99,0x65,0x8d,0x02,0x47,0x6a,0x27,0x73,0x72,0x3d,0xf5,0x26,0x48,0x3f,0x00,0x94,0x86,0xbb,0x36 },
{ 0x2c,0x24,0x44,0xe9,0xbc,0x7d,0x3e,0xda,0x60,0x8b,0x17,0x12,0x5d,0xc3,0x8a,0x3d,0x70,0xf7,0xd4,0xf3,0x79,0x27,0x90,0xc9,0xf9,0xeb,0x5f,0x68,0xc4,0x87,0xfc,0x13 },
{ 0x0b,0x14,0xe5,0x0e,0x33,0x6c,0x94,0x98,0x70,0x8d,0xd1,0x43,0x8d,0x0a,0x9a,0x67,0x1f,0x57,0x8b,0x18,0x44,0xe8,0x79,0xd0,0x56,0xd9,0x31,0xac,0x9b,0xb7,0x7d,0x7f },
{ 0x0f,0x59,0x83,0x41,0x9f,0x87,0xec,0xfd,0x15,0x36,0x65,0xe8,0xdf,0x1e,0x80,0xba,0x6b,0xd2,0x5e,0x44,0xf1,0x95,0x66,0xe6,0x76,0x06,0x68,0x87,0x1b,0x6e,0x30,0x73 },
{ 0x2d,0x5a,0xac,0xab,0xf7,0xd6,0x09,0xe0,0x22,0xee,0x71,0x75,0xca,0xdb,0x5f,0x14,0xe2,0x00,0x3c,0x28,0x63,0xf7,0x13,0x96,0x23,0x47,0x5f,0x2d,0x20,0xae,0x71,0x73 },
{ 0x83,0xd5,0x63,0xc6,0xca,0x69,0xfb,0xe3,0xcf,0xca,0xbc,0xc2,0xe5,0xc0,0x5e,0x50,0x6b,0x25,0x55,0x1b,0xf4,0x4c,0x53,0xe2,0xce,0x2a,0x32,0xfc,0xfc,0x9b,0xd3,0x7f },
{ 0xcf,0x41,0xbe,0xf0,0xb7,0xf2,0xad,0x14,0x12,0xd6,0x3e,0x20,0xfe,0xb3,0x70,0x98,0x76,0xc5,0x35,0xef,0x48,0xaa,0x63,0x65,0xdb,0x93,0xa5,0x61,0xf7,0x96,0x54,0x59 },
{ 0xa5,0xd2,0x5b,0xd1,0xc2,0xa9,0x37,0x33,0x96,0xe6,0x63,0x3f,0xbc,0x0f,0x93,0x98,0x1e,0x1a,0x8f,0x8c,0xfd,0xc9,0x80,0x2a,0x19,0xcc,0xb0,0x42,0x4b,0x38,0x24,0x5d },
{ 0x5b,0x0d,0x1f,0x68,0xf8,0x08,0xfa,0x83,0x2a,0x99,0xbb,0xba,0x98,0xba,0x8e,0xe7,0xc8,0xf9,0xbd,0x86,0x97,0xf6,0x5e,0x96,0x39,0x99,0xa4,0x25,0x7f,0xbe,0x30,0x60 },
{ 0x22,0x92,0x84,0xd3,0xe5,0x03,0x62,0xe9,0x92,0xcf,0x13,0x5a,0xe9,0x24,0x89,0x77,0xe4,0xf6,0xb1,0x9a,0xb8,0x06,0x4c,0x9a,0x59,0xa2,0x96,0x12,0x72,0x95,0xfa,0x6e },
{ 0x8f,0x0c,0x8c,0xb2,0x1b,0x92,0xfa,0x3d,0x59,0x63,0xd4,0x71,0x0d,0xe5,0x1b,0x8c,0xa7,0xf7,0xf2,0xf6,0x86,0x30,0xc7,0x56,0xc4,0x56,0x91,0xe0,0x2f,0x68,0xbb,0x01 },
{ 0xe0,0xfc,0x3a,0x46,0x3a,0x47,0x54,0x49,0xd5,0x70,0xf6,0x7d,0xc8,0x1e,0xa2,0x7b,0x63,0x0f,0x4b,0xf8,0xd0,0xf9,0x0c,0xbf,0xc1,0xcb,0x90,0xa8,0x39,0xc1,0x3f,0x6c },
{ 0x98,0x59,0xd7,0x0e,0xc8,0xd7,0xc0,0x1a,0x94,0xd7,0x2f,0x7c,0x9e,0x87,0xa0,0xb5,0xfe,0x11,0x45,0xb5,0x61,0x99,0x0e,0x30,0x2a,0xe8,0x15,0x22,0xc4,0x01,0xb4,0x5b },
{ 0xde,0x5c,0x27,0x08,0xf5,0x60,0xca,0x47,0x4e,0x9c,0xcc,0x9d,0x8a,0xaf,0xcd,0xff,0x6d,0x8c,0xcd,0x3e,0x87,0x74,0x15,0x29,0x3b,0x2d,0x76,0x6c,0x3d,0xbf,0x96,0x3d },
{ 0xe8,0xd6,0xcd,0x28,0x6e,0x38,0x79,0x5b,0xf1,0x6b,0x66,0x20,0x0e,0x8e,0xc3,0xdf,0x0f,0x07,0xd1,0x86,0x95,0x19,0x6f,0x5e,0x3b,0xb9,0x04,0x74,0x50,0xec,0x00,0x57 },
{ 0xf0,0x1d,0x9f,0x05,0x1f,0xe7,0xca,0x5f,0x42,0x83,0x88,0x07,0xc5,0xa6,0xa5,0x83,0x8a,0x88,0x50,0x6c,0xd4,0x3d,0x64,0x78,0x65,0xff,0x0b,0x70,0xd4,0xc0,0x44,0x3a },
{ 0xe9,0xc9,0xb6,0x11,0xf0,0x42,0x20,0xa6,0x60,0x73,0x71,0xa2,0x6d,0x32,0x77,0xcf,0xba,0x08,0xc2,0x61,0x78,0x1d,0x5d,0x13,0x90,0x03,0xce,0xc9,0x3f,0xd8,0x77,0x38 },
{ 0xf7,0x74,0x72,0xb3,0x27,0x16,0x85,0x8b,0x66,0x2a,0x57,0x9a,0x4f,0x09,0x93,0x33,0x9b,0x5e,0x6f,0x42,0xdb,0x3e,0x25,0x82,0x0a,0x88,0x5c,0x95,0x0b,0xb1,0x6f,0x3e },
{ 0x5f,0xb0,0xde,0x2b,0xf5,0x4b,0x1a,0x6e,0x9e,0xfb,0xd0,0x60,0x39,0x0c,0x36,0x57,0xe7,0x87,0x23,0x4c,0xd7,0xae,0x00,0x96,0xe1,0x5f,0x81,0x30,0xb8,0xe3,0x7b,0x2d },
{ 0x00,0xb5,0x5c,0xb2,0xdf,0x93,0xc8,0x71,0x05,0x23,0x9e,0x04,0xa5,0xa6,0x56,0xe1,0x82,0xb0,0x46,0xef,0x70,0x49,0x8d,0x31,0x65,0xcf,0x25,0xf4,0xd4,0x9d,0xcf,0x4c },
{ 0x0c,0xa0,0x62,0x53,0xfe,0xee,0xfd,0x71,0x94,0xdc,0x29,0x3b,0x2b,0x20,0x30,0xda,0x4e,0x67,0x64,0xe2,0xae,0x70,0xeb,0xf4,0x17,0x79,0x48,0x5d,0x1d,0xcb,0x15,0x24 },
{ 0x9f,0x20,0x54,0x91,0x80,0xd4,0x89,0x42,0x1b,0xce,0x91,0x6f,0x9a,0xd6,0x87,0xf3,0xef,0xaa,0xc4,0xab,0x92,0xf6,0x12,0xc9,0xc6,0x91,0xf7,0xaf,0xe7,0x75,0x96,0x2a },
{ 0x02,0x67,0x84,0x0e,0xb3,0x38,0x76,0xf0,0x63,0xfe,0xe9,0xc9,0xca,0xea,0x3d,0x10,0x1c,0x47,0xfc,0xc9,0x81,0x44,0xa3,0x92,0x77,0x9f,0xf5,0x70,0xf9,0x37,0x59,0x37 },
{ 0x90,0x41,0x3e,0xf8,0xc4,0x32,0xad,0x51,0xd8,0x63,0xb3,0x8a,0xcf,0x71,0x01,0xcb,0xa1,0x27,0xfc,0x5d,0xfb,0x44,0x4e,0xe0,0x7f,0xc8,0xfa,0x2c,0x47,0x37,0x64,0x6e },
{ 0xc7,0x77,0xe0,0x64,0xde,0x3b,0x80,0x1f,0x6c,0xf0,0x2e,0xeb,0xd7,0xeb,0x50,0x2c,0x7d,0xa5,0x6c,0x46,0x5e,0xba,0x1e,0x28,0x64,0x3a,0x03,0x82,0x15,0x0c,0x1f,0x18 },
{ 0xc5,0x1d,0x2b,0xbf,0x2f,0xaa,0x13,0x8b,0xb5,0xd8,0xdd,0xf8,0xba,0x6c,0x7f,0xa0,0xff,0xdb,0xf9,0x60,0x4a,0x04,0x64,0x0b,0x4b,0x74,0x9c,0xc8,0x68,0xa4,0xc9,0x43 },
{ 0xdf,0x13,0xb4,0x92,0x56,0xa4,0xa4,0x61,0x5f,0xc2,0xc6,0xca,0x1e,0x1d,0x29,0x9e,0xaf,0x35,0x01,0x47,0x55,0x1d,0xbd,0x8a,0x91,0x05,0xcf,0xd6,0xa4,0x33,0x53,0x1b },
{ 0xd4,0x80,0xe7,0xd9,0xcc,0x83,0x6e,0x32,0xb5,0x49,0x61,0xbd,0xc7,0xcf,0xeb,0xeb,0x50,0x83,0xb9,0x8b,0x60,0x32,0xdc,0xa8,0x5f,0x9e,0x3e,0x67,0x5e,0x93,0xaf,0x7e },
{ 0x5b,0xb3,0x37,0x01,0xc9,0x3b,0x12,0x65,0x35,0x7f,0x6f,0xd8,0xfe,0xb5,0x57,0x49,0x3e,0xf3,0x20,0x07,0x18,0x85,0xa9,0x58,0xfc,0x72,0x50,0xab,0x59,0x7e,0x23,0x53 },
{ 0xe6,0x2b,0x86,0x67,0x77,0x6e,0x1f,0x7f,0x87,0x0a,0x6f,0x07,0x99,0xd7,0x40,0xb3,0x03,0x99,0x63,0x09,0xdb,0xcd,0xf4,0x48,0x79,0xc2,0xc6,0xbc,0xe4,0x2c,0xb0,0x0a },
{ 0x1b,0x58,0x7e,0x47,0x26,0x04,0xf4,0x2d,0xcd,0x58,0x78,0x55,0xd4,0x73,0x2d,0x5c,0x3e,0x8d,0x82,0x44,0xb1,0x34,0x52,0xc2,0x28,0x90,0x47,0x5a,0x22,0x0a,0x6c,0x74 },
{ 0x57,0x36,0xb5,0x3e,0xa0,0x6f,0x9e,0xe9,0x6c,0x99,0x2b,0x00,0xd5,0x41,0x25,0x26,0x85,0x6e,0xd5,0x25,0x48,0x5a,0x96,0x4f,0x8f,0xcf,0x96,0xd7,0xeb,0xcd,0x60,0x2b },
{ 0xb8,0x2e,0x36,0xc6,0xa6,0xea,0xa7,0x07,0x88,0x39,0x63,0xb3,0x6d,0x75,0x0f,0xa0,0x33,0xf0,0x5f,0x77,0x14,0xe7,0x93,0x30,0x49,0xd1,0xfc,0x08,0x50,0x92,0x2a,0x4e },
{ 0x8c,0x59,0x8e,0x7f,0x83,0x17,0xcd,0x20,0x36,0xd3,0x5a,0xce,0x9b,0x83,0x72,0xfe,0xcb,0xd1,0xce,0x83,0x68,0xbc,0x47,0xdb,0xbd,0x46,0xc1,0x10,0xf8,0x10,0x8d,0x1e },
{ 0x23,0xb5,0xd3,0xd9,0xb9,0x84,0xab,0xd5,0x9e,0x32,0xac,0xff,0x41,0x1a,0x10,0x68,0x46,0xc0,0xce,0xd7,0xad,0x5c,0xaa,0xef,0x8b,0x07,0x6f,0x5b,0xd1,0xe9,0x3b,0x58 },
{ 0x01,0x88,0xcf,0x17,0x11,0x2c,0x9b,0x3e,0x94,0x8c,0xcd,0x8c,0xeb,0xb6,0xbc,0xf2,0xf7,0x50,0xd4,0xe5,0x44,0x14,0x5d,0x01,0x73,0xc5,0x91,0x6b,0xc1,0xd6,0xc2,0x7b },
{ 0xec,0x5f,0x18,0xa4,0x82,0x96,0xd5,0xad,0x20,0x27,0x98,0x65,0xa5,0x11,0x14,0xe8,0x0b,0x0c,0x76,0x29,0x80,0x76,0x61,0x70,0x05,0xa3,0x1a,0x23,0x73,0xfa,0x57,0x12 },
{ 0x15,0x6f,0x13,0xfd,0xf6,0x62,0xf4,0xb7,0x21,0xc5,0x77,0xdf,0x32,0xfc,0x23,0xf4,0x71,0x62,0xa4,0x0d,0x92,0x83,0x77,0x3a,0x5b,0xae,0xeb,0x3e,0xe6,0x68,0x36,0x71 },
{ 0xaa,0x95,0x4e,0x75,0x92,0x82,0x18,0xcb,0x93,0xdf,0x15,0xb3,0x74,0xc6,0xe1,0x77,0x00,0x23,0xf9,0x1b,0x61,0xaa,0x20,0x70,0xb2,0xf1,0x64,0x6f,0xf4,0x21,0x88,0x06 },
{ 0x17,0x70,0xaf,0x05,0xab,0x90,0xaa,0x4c,0xae,0xe8,0x09,0xb1,0xa1,0x56,0x89,0xd5,0xe1,0x44,0x47,0x07,0x7f,0x46,0x4b,0x08,0x19,0x38,0x54,0xfc,0xe0,0x4f,0xbf,0x1d },
{ 0x5b,0xa0,0x6c,0x7a,0xb0,0x75,0xc5,0x77,0xcc,0xbb,0x7a,0xdf,0x15,0x39,0xc8,0xf8,0xe4,0x30,0x07,0xcf,0xe2,0xfa,0xfc,0xd7,0x0c,0x95,0xc4,0xe2,0x56,0xd1,0xde,0x71 },
{ 0x81,0x94,0x4e,0x3d,0x73,0xfb,0xac,0xcb,0x1a,0x09,0x6a,0x5d,0x21,0xb4,0xaf,0xc6,0x96,0x5e,0xfb,0x08,0x23,0x59,0xcc,0xf9,0x31,0x1e,0x26,0x90,0x08,0xe5,0x1b,0x4b },
{ 0x1a,0x13,0xed,0xa9,0xbe,0x1d,0xb8,0x1f,0x1f,0xcf,0xc2,0xa0,0x36,0xac,0x44,0xb2,0xdf,0x1d,0xba,0xc7,0x5d,0x23,0x4e,0x94,0xd8,0xcf,0x23,0x9c,0x7f,0x27,0x8d,0x4c },
{ 0x62,0xe3,0x37,0x29,0xf4,0x75,0xf9,0xe6,0xf6,0x5a,0x99,0x1c,0x81,0xfe,0x0c,0x10,0x07,0xe8,0xf3,0x12,0x34,0x86,0x12,0xdb,0x6c,0x39,0x03,0xf2,0xcd,0xec,0x4a,0x17 },
{ 0x4d,0x08,0x8d,0x47,0x12,0x09,0xb7,0xf9,0x66,0x5a,0x3c,0xfd,0xd9,0xa3,0x02,0x25,0x46,0x3f,0xbd,0x6a,0x8d,0x2f,0x9c,0x18,0xa2,0x4e,0x91,0x98,0x20,0xd2,0x61,0x58 },
{ 0x43,0x15,0xdb,0x9b,0x50,0x4e,0x32,0xbf,0xd6,0x8f,0xc1,0xe4,0x20,0x85,0x7f,0x13,0xd1,0xb4,0xa0,0x77,0xc5,0xb4,0xd6,0x49,0x6c,0x23,0x65,0x0c,0x30,0x83,0x37,0x30 },
{ 0xce,0xd4,0x5b,0xe3,0xa7,0xc1,0xfd,0x12,0xfa,0x61,0x0c,0x19,0x4e,0x2c,0xf1,0x78,0xb9,0x1d,0x02,0x1b,0xd4,0xdf,0xc4,0x6e,0xbd,0xc8,0x01,0xa2,0xda,0x43,0x36,0x11 },
{ 0x07,0x58,0x6e,0xa8,0x51,0x6e,0xd9,0xb8,0x38,0x51,0x8f,0x17,0x55,0xcd,0x89,0xe9,0x2b,0xd3,0x4d,0x36,0xeb,0xd5,0xf5,0xa3,0x98,0x36,0x89,0xd5,0x18,0x13,0x14,0x0a },
{ 0xb0,0xce,0x16,0x3e,0xd1,0x0d,0x92,0x7a,0x9b,0xb5,0x05,0x20,0x35,0x93,0x7d,0xd8,0x4e,0x9f,0x26,0xf9,0x96,0xfc,0x5d,0xfa,0xfb,0x22,0x31,0xad,0x89,0x28,0x7c,0x64 },
{ 0x7f,0x4e,0x70,0xd0,0xd7,0x40,0xfe,0xd8,0xa0,0x85,0x23,0xe2,0xca,0x10,0xd7,0xaf,0x63,0x33,0x43,0x28,0x84,0x9c,0xed,0x90,0x6d,0xd7,0xcf,0x69,0x37,0x01,0xfc,0x07 },
{ 0xde,0x54,0x6e,0x24,0x94,0x63,0x67,0xf1,0xaf,0x45,0xf0,0xc0,0xe4,0xc4,0x12,0x3c,0x16,0xbf,0x01,0x7e,0xaf,0x24,0x0a,0xf1,0x2e,0xd0,0x37,0xe0,0x08,0xdd,0x9c,0x69 },
{ 0x5c,0xc9,0x43,0xc9,0x87,0x5d,0x0c,0x26,0xd8,0x4a,0xfb,0x56,0x07,0xb5,0x3a,0x2c,0x2b,0xa3,0xa5,0xb6,0xce,0xe0,0x8d,0xbb,0x2d,0x0a,0xb3,0x8c,0x29,0x35,0xdb,0x00 },
{ 0x27,0x47,0x25,0x12,0xec,0xd0,0xe0,0x9f,0x38,0xf5,0xd5,0xa0,0xc5,0x19,0x45,0xdd,0x88,0x5d,0x1c,0xca,0x76,0x19,0xbc,0xc0,0xbe,0x8c,0xfd,0x54,0x8d,0xa5,0xf4,0x12 },
{ 0x2f,0xa5,0x00,0x85,0xcd,0xb6,0x87,0x84,0x47,0xe3,0x91,0xfb,0x7e,0x2f,0xfa,0x26,0x7a,0x3d,0x47,0xe5,0x2b,0xb2,0x6b,0xf4,0x11,0x31,0x5f,0x82,0x22,0x16,0xf5,0x21 },
{ 0x67,0xfd,0x1b,0x2b,0x8b,0x38,0x69,0x8c,0xcf,0x9a,0x2c,0x1f,0x66,0x09,0x9d,0x08,0xf3,0x1e,0x21,0x91,0x2d,0xce,0xd7,0x00,0x44,0x6a,0x9b,0xc0,0x8d,0xc4,0x16,0x13 },
{ 0x44,0xc8,0xab,0x78,0x55,0x7c,0x51,0xe7,0x27,0x47,0x8f,0xd9,0x7b,0xdc,0x3e,0x54,0xbc,0x9a,0xb7,0x01,0x4e,0xd9,0x23,0x62,0xab,0x0c,0x5f,0x7c,0x1a,0xad,0xf2,0x3a },
{ 0xbd,0xa4,0x04,0x6e,0x0d,0xfc,0x75,0x51,0xe0,0x3c,0x61,0x9e,0x1e,0x65,0x87,0x6b,0x73,0x1c,0xbe,0xc1,0xf2,0x8b,0x5d,0xa6,0x50,0x1a,0x30,0x55,0xd9,0x47,0x96,0x55 },
{ 0x41,0xa1,0x84,0x4a,0xcc,0x12,0x9c,0x44,0x7d,0xd3,0x4e,0x2e,0x9b,0x7a,0xfe,0x5a,0x2f,0xd2,0x37,0xca,0xa8,0xb7,0x4f,0x8d,0xd2,0x2b,0xa5,0x19,0x51,0xa8,0xc4,0x4c },
{ 0xd4,0xa5,0x30,0x9d,0x76,0xcd,0x35,0x3a,0x56,0xde,0xae,0xdd,0xba,0xe2,0x8c,0xb1,0x08,0x84,0x6a,0x19,0xc4,0x8e,0x52,0x26,0x77,0x22,0x7e,0x35,0x97,0x43,0x0c,0x39 },
{ 0x0a,0x22,0x22,0x2c,0xfa,0xcd,0x82,0x65,0xae,0xac,0x1b,0x21,0x1b,0x78,0xb6,0xa0,0xe1,0x5e,0xa5,0x2b,0x95,0xe7,0xe7,0xb9,0x27,0x87,0xa8,0x27,0x20,0x5c,0x1d,0x30 },
{ 0x74,0xf4,0x16,0x86,0x45,0xed,0xc8,0xf2,0x2a,0x7e,0x88,0x72,0x0c,0xe6,0x6e,0x21,0x04,0x62,0x20,0x2d,0xdf,0xae,0x5e,0x7c,0xc0,0xc1,0x0b,0xa0,0x73,0xe2,0xad,0x45 },
{ 0xbc,0x71,0x1f,0x5a,0xfe,0x50,0x4b,0xbe,0x65,0xa7,0xcd,0x0f,0x03,0x0a,0x12,0xf5,0x08,0x72,0xd0,0xd5,0xb2,0x80,0x62,0x89,0x86,0x17,0xcc,0xbf,0x66,0xeb,0xfc,0x01 },
{ 0x6b,0x4a,0x14,0x57,0xfa,0xbb,0x8c,0x29,0x59,0x48,0x55,0x02,0x86,0x72,0x46,0x90,0xce,0x7c,0x2b,0x79,0x0e,0xca,0x71,0xee,0x01,0x7e,0xf6,0x11,0x68,0x8e,0x1a,0x4e },
{ 0xf4,0xe8,0x6e,0x99,0x20,0x3c,0xa9,0xa8,0x19,0xfb,0x27,0x45,0x52,0x8c,0x55,0x99,0xa5,0x7b,0xb4,0xf5,0x9c,0x48,0x29,0x19,0x92,0x08,0xed,0x9a,0x77,0x08,0x25,0x64 },
{ 0xd5,0xc4,0xd2,0x24,0x3e,0x76,0x5d,0x04,0x76,0x66,0x6c,0xa4,0x2d,0x0b,0xac,0x9a,0x84,0xaa,0xc2,0x15,0xb1,0x00,0xbe,0xe2,0xfd,0x96,0x4e,0x15,0x30,0xda,0x61,0x4d },
{ 0xc4,0xcf,0xab,0xfc,0x19,0x83,0x2f,0xd1,0x87,0x0e,0x35,0xb3,0x16,0x2a,0x2b,0x8e,0x65,0xa0,0x42,0x3b,0xb1,0x4c,0x1c,0x03,0xbf,0xeb,0xea,0x01,0x1a,0xe4,0x7d,0x09 },
{ 0x56,0x46,0xfc,0x99,0x69,0xbd,0x53,0xe1,0x57,0xe7,0x8d,0x5a,0x05,0x1a,0x95,0xfb,0x3a,0x0e,0xd2,0x12,0x9b,0x9c,0x1d,0x58,0x4b,0x12,0xee,0x74,0xc0,0xab,0x8f,0x1e },
{ 0x58,0x1f,0x41,0xe1,0x16,0xde,0x0f,0xe8,0x5f,0x9f,0x39,0x69,0x05,0x46,0xbf,0x6d,0xea,0x88,0xc5,0xf3,0xb4,0x39,0x55,0x60,0x79,0x03,0xf8,0xa1,0xf7,0x7d,0x05,0x03 },
{ 0xa4,0xc4,0x06,0x76,0x51,0xa4,0xd7,0x90,0x5e,0x14,0xbf,0x61,0x74,0x84,0x97,0x3c,0xf6,0x0a,0xae,0x67,0x65,0xa6,0xe5,0x28,0x3a,0x1e,0x50,0xb0,0x6d,0x38,0x9a,0x14 },
{ 0x43,0xf8,0x26,0xb5,0x25,0xe5,0x99,0x6a,0x84,0xa0,0xa5,0x1c,0x8f,0xd8,0xcb,0xce,0x8b,0xb3,0x91,0xe5,0x11,0x38,0x43,0x3a,0xe5,0x38,0x09,0x10,0xee,0xc0,0x4b,0x4a },
{ 0x11,0x1d,0xa8,0xc0,0x08,0x07,0xe0,0x42,0xff,0xb4,0x88,0x97,0xb3,0xeb,0x1e,0x25,0x7c,0xe9,0xa1,0x00,0x5b,0x6e,0x9e,0x07,0xf7,0xfa,0x59,0xe7,0x5b,0x68,0xc3,0x5a },
{ 0x6a,0xd8,0x55,0x3b,0x8c,0x90,0x56,0x6d,0xdd,0x90,0x42,0xff,0x84,0x55,0x3d,0xa4,0x9f,0xb2,0x56,0x53,0x2b,0x52,0x20,0x7b,0x9d,0xfa,0x4a,0xb8,0x35,0x35,0xd6,0x3b },
{ 0x09,0xe8,0x7f,0x29,0xf5,0xa7,0xed,0x7e,0x23,0x42,0x44,0xf4,0x78,0x01,0x71,0x36,0xdd,0xed,0xf5,0x58,0x4d,0x69,0x33,0x19,0x8f,0x3f,0x63,0xd2,0x87,0x97,0x82,0x59 },
{ 0x1c,0x0b,0x70,0xce,0xc0,0xbb,0xd0,0x96,0x36,0xc5,0x49,0xd6,0xa8,0x28,0x8b,0x66,0x4b,0x8c,0x31,0x59,0x31,0x3f,0x27,0x91,0xa0,0x52,0x71,0x3d,0x8e,0x95,0x2d,0x18 },
{ 0xf1,0x97,0xc8,0xd8,0x37,0x9e,0xcb,0xbd,0xe1,0xd0,0x39,0x92,0x55,0xe6,0x10,0x8a,0x62,0x4a,0x17,0x4b,0x81,0x16,0x11,0xe9,0x01,0x50,0x66,0x49,0xa3,0xc2,0xdf,0x0a },
{ 0xde,0x0b,0xb8,0xe1,0x12,0x1c,0xe1,0x76,0xdf,0x5c,0xdb,0xd2,0x6f,0x7a,0xc5,0x75,0x10,0x17,0x71,0x3a,0x19,0xf4,0x5e,0xa8,0x34,0x4f,0xb2,0xae,0xb6,0xec,0x0c,0x23 },
{ 0x7f,0xe4,0xe7,0x36,0x51,0xa8,0x17,0xcb,0x02,0xe2,0xea,0x99,0x7d,0x2c,0xc6,0xfe,0x6a,0xed,0x8e,0x4a,0xbc,0x4a,0xb8,0x66,0xe5,0x2c,0xed,0xea,0x04,0xd0,0x8d,0x14 },
{ 0xeb,0x2a,0x73,0x9d,0x41,0x78,0xd7,0x07,0xc3,0x58,0xd1,0x99,0xf5,0xf9,0xa8,0x3b,0xd8,0xfd,0xf5,0xc5,0x4d,0xe3,0xb1,0x6d,0xda,0x2d,0x41,0xb2,0xf8,0xe5,0x3d,0x14 },
{ 0x46,0x64,0x7a,0x0d,0x2d,0x13,0xb4,0x16,0xcc,0x95,0x3e,0xbd,0x89,0xb7,0x5a,0xec,0x0c,0xe5,0x74,0x35,0xba,0x88,0x4e,0xfd,0x3c,0x7d,0xcf,0x4e,0x6a,0x42,0x35,0x21 },
{ 0xba,0xcf,0xff,0x26,0x47,0x2d,0x4a,0xc7,0x72,0x76,0xda,0x30,0x7c,0xf8,0xfb,0x67,0x55,0xbb,0x74,0xc1,0x92,0x0a,0xfb,0xd0,0x9f,0xfa,0x2b,0xe1,0xfc,0xe2,0x81,0x2a },
{ 0xc2,0x1d,0x44,0x8c,0x49,0x1b,0x62,0x15,0x69,0xff,0x3b,0xdb,0xfe,0x36,0x75,0x64,0xfd,0x75,0xcd,0x8f,0xe9,0xbf,0xe0,0x48,0x3d,0xdd,0x52,0xb4,0x0e,0x70,0xb0,0x1d },
{ 0x8d,0xad,0xb3,0xad,0x10,0xcf,0xd7,0x76,0x10,0x3c,0xed,0xaa,0x1b,0x31,0x39,0x0b,0x8d,0x8d,0x58,0xab,0xe1,0x38,0xb6,0x3c,0x87,0xae,0x27,0x58,0xa1,0x17,0x64,0x76 },
{ 0x67,0xf5,0xa6,0x41,0x7c,0x44,0xac,0xe9,0x58,0xbe,0x1f,0x1f,0x80,0x8d,0xc5,0x8b,0xbc,0x02,0x28,0x35,0xd1,0x1a,0xe6,0x9b,0x40,0x6a,0xed,0x96,0x85,0xaa,0xd9,0x28 },
{ 0x83,0x24,0x5c,0x8f,0xb1,0x70,0x05,0x99,0x83,0x32,0x8f,0x61,0x8b,0x6e,0x1d,0xf4,0x30,0xf7,0x53,0x16,0xf7,0xcb,0x3e,0x0c,0x20,0xcd,0x82,0xa9,0x03,0xf2,0x27,0x29 },
{ 0xa4,0x9a,0xf0,0xd3,0xf1,0xb0,0x5c,0x6e,0xd1,0x31,0x66,0x0c,0xcf,0xd1,0x1c,0x71,0x53,0x02,0x9c,0xa6,0xa7,0x92,0x1e,0x73,0xb4,0x13,0x38,0xfd,0xc9,0xf2,0x63,0x3b },
{ 0x6b,0x5f,0xff,0x46,0xbd,0x5c,0x7c,0x9a,0x58,0xdd,0xd3,0xf5,0xbb,0x77,0x9c,0x47,0xad,0x00,0xf7,0x58,0xc5,0x92,0x00,0xb7,0x3b,0x17,0x86,0xa9,0xae,0x84,0x6c,0x01 },
{ 0xab,0x41,0xcc,0xcd,0x3b,0x5d,0x57,0x77,0x40,0x35,0x83,0x79,0x5f,0x71,0x2a,0xf0,0x88,0x93,0xec,0xb1,0xa7,0x1c,0x4e,0x47,0x17,0x63,0x6f,0x26,0x14,0x04,0x45,0x70 },
{ 0xa4,0x5c,0xc2,0x5a,0xe0,0x44,0xb8,0xad,0x9f,0x0b,0x67,0x32,0xa7,0x33,0x01,0x13,0x92,0x85,0x1d,0x3b,0x5f,0xb8,0x4f,0x0b,0xd9,0x8a,0x5f,0xa7,0xc2,0x00,0x13,0x6e },
{ 0xf9,0x29,0xf6,0x70,0xfd,0x8c,0x0e,0x71,0xe3,0x2b,0x00,0xab,0xd2,0xed,0x83,0x5f,0xc9,0x0d,0x26,0x5d,0x25,0x68,0xf5,0x6d,0x79,0xf7,0x8c,0xb5,0x79,0x6a,0x71,0x74 },
{ 0x45,0x74,0x8f,0x88,0x67,0x27,0x8f,0x64,0x06,0x22,0xf4,0x66,0x48,0xbf,0x1a,0x38,0x5a,0x82,0x03,0x5b,0xde,0x65,0x5b,0x03,0xcb,0x3e,0x11,0xd7,0xde,0xb2,0x33,0x5d },
{ 0xf4,0x4c,0xb6,0x3f,0x71,0x62,0xfb,0x39,0xdd,0x2b,0x91,0xed,0x9b,0x95,0x27,0x72,0xb8,0x30,0x7a,0xdf,0x99,0x09,0xba,0x11,0x4e,0xa9,0x4d,0x3b,0x41,0x0f,0xf9,0x63 },
{ 0x02,0x65,0x18,0x81,0x56,0x16,0xd4,0x0d,0x5b,0x4e,0xff,0xd1,0x3e,0xa3,0x87,0x5c,0xc1,0x9d,0x3c,0x64,0x8e,0xfb,0x6e,0x42,0x09,0x1d,0x4c,0xdf,0xf3,0x67,0xb3,0x75 },
{ 0xea,0xa0,0x44,0xeb,0x2d,0xae,0x96,0x12,0xd8,0x4f,0x8b,0x49,0x57,0xf2,0xfd,0xa6,0x43,0x67,0xeb,0x15,0xc9,0x27,0xb5,0x4f,0xca,0xcd,0x14,0xc8,0xc3,0x60,0xf8,0x56 },
{ 0x9c,0x91,0x03,0xd2,0xa8,0x3f,0x76,0xc7,0x76,0x0e,0x81,0x6e,0xaf,0xeb,0xa0,0xc9,0xbc,0x15,0xf7,0xdc,0x25,0x1d,0xf0,0x8c,0xa5,0x76,0xcb,0xa8,0x85,0xbd,0x50,0x43 },
{ 0x65,0x97,0xe3,0x4d,0x6b,0x84,0x20,0x34,0xc6,0x6f,0x78,0x5e,0x28,0x47,0xd2,0x7a,0xa2,0x96,0x2a,0x83,0xa0,0x94,0x92,0xcc,0x32,0x35,0x13,0xa8,0xe7,0xec,0xce,0x60 },
{ 0x8b,0x02,0x18,0x93,0x66,0x58,0x11,0x59,0xd7,0xf0,0x95,0x72,0x4e,0x37,0x49,0xe4,0x07,0xbd,0x34,0xb5,0x6c,0xc2,0x3e,0x73,0x19,0x01,0x2d,0x3f,0x68,0x17,0x87,0x21 },
{ 0xc4,0x57,0xb6,0x1d,0x13,0x42,0x2e,0xb0,0xbc,0xb6,0x2a,0x9d,0x77,0x07,0x82,0x68,0xfc,0x79,0xd6,0xa1,0x53,0xd0,0x53,0x76,0x5d,0x3b,0xa1,0xe1,0x22,0x12,0x63,0x00 },
{ 0x9f,0x82,0x83,0x78,0x3f,0x11,0x0b,0x65,0x27,0x30,0x3f,0x85,0xb3,0x71,0x61,0xd4,0x69,0x7c,0xbd,0xb0,0xbf,0xf0,0x1a,0xa1,0x3d,0xab,0xc6,0xec,0x87,0xd2,0x07,0x4f },
{ 0x67,0x1a,0xfb,0xe9,0x9e,0xb1,0xe2,0x3b,0xf4,0x35,0x2e,0xc8,0xed,0xe5,0xa8,0x5d,0xa4,0xa5,0x57,0x60,0xc7,0xaa,0x02,0xeb,0xdd,0x3f,0xba,0xd6,0x90,0xc5,0xae,0x30 },
{ 0x72,0x35,0x3f,0x3d,0xe7,0x6e,0xdb,0x23,0x59,0xfe,0x48,0x08,0x31,0xdf,0xbb,0xe9,0xca,0x5a,0xf3,0xa3,0x7a,0x9c,0x2d,0x47,0x5b,0x04,0x96,0xd4,0x18,0x6b,0x55,0x12 },
{ 0x26,0x30,0x8c,0x96,0x90,0x24,0x6d,0x0f,0x87,0x37,0xb1,0x63,0x46,0x46,0x93,0x62,0x7f,0x68,0x80,0x23,0x07,0x21,0x89,0xdf,0x7a,0x5f,0x01,0x37,0x91,0x35,0x03,0x7c },
{ 0x7b,0xaa,0xc0,0xfd,0x67,0x4e,0xec,0xe1,0x66,0x06,0xdc,0x93,0xe4,0xf9,0x4f,0xc1,0xbb,0xae,0xdf,0x77,0xe5,0x47,0xa5,0x6c,0x02,0x58,0xdc,0x95,0x5c,0xde,0x62,0x17 },
{ 0xb9,0x0f,0x84,0xdd,0xfd,0xdd,0xb2,0x97,0x38,0x7f,0xda,0x37,0x84,0x87,0x26,0xfe,0xf6,0x95,0x56,0xdf,0x7a,0x75,0x46,0x68,0xb8,0x69,0x24,0xac,0x03,0x41,0x76,0x58 },
{ 0xd7,0xe5,0xa5,0xca,0x28,0x94,0x61,0xcd,0x2f,0xe2,0xbc,0x47,0xd6,0x1d,0xee,0x70,0xb5,0x48,0x34,0x95,0x41,0xb6,0x7a,0x54,0xd4,0x30,0xff,0x0c,0xbc,0xe3,0xd6,0x5d },
{ 0x05,0x31,0xf7,0x7b,0x60,0xe6,0xbb,0x28,0xfc,0xf4,0x34,0x28,0x13,0x38,0x93,0xd4,0x95,0x87,0x3e,0xd2,0x4a,0xb9,0xc2,0xa5,0x03,0x22,0xa4,0xd0,0x99,0x79,0xd2,0x49 },
{ 0x13,0xe2,0x91,0x56,0x2c,0x1f,0x0c,0xc8,0xab,0xed,0x40,0x43,0x82,0x8c,0xa1,0x5a,0x78,0xa3,0x1f,0x33,0x8d,0xd1,0x9c,0xc0,0x99,0x0c,0x7b,0xfe,0xbf,0x99,0x64,0x56 },
{ 0x30,0x42,0x0a,0x74,0x98,0x22,0x3a,0x4e,0xfc,0x4e,0xcd,0xd6,0x7d,0xdc,0xca,0xed,0x9c,0x0a,0x38,0xc3,0x1f,0x59,0xd7,0xc4,0xa7,0xae,0x65,0xe6,0x6f,0x1f,0x75,0x66 },
{ 0xb6,0xda,0xdf,0xd9,0xc2,0xbb,0x56,0x48,0xaf,0xeb,0x2c,0x7a,0x06,0x2f,0x02,0x99,0x77,0xac,0x38,0x09,0xc5,0xd8,0x76,0x5d,0xeb,0xfb,0x30,0x24,0x25,0xc9,0x93,0x4d },
{ 0xfe,0x85,0x3a,0x6c,0xaf,0x57,0x19,0xeb,0xfb,0x88,0x70,0x0a,0xe5,0x18,0x13,0x71,0xb1,0x7b,0x45,0x17,0x57,0x4b,0x6f,0xad,0x88,0x8b,0x71,0x94,0xa8,0x0d,0x91,0x2c },
{ 0x82,0x5a,0xaf,0xf3,0x00,0x87,0x75,0x23,0x0b,0x80,0x35,0x5c,0x72,0x46,0xb0,0x97,0xa7,0x28,0xea,0xde,0x0a,0x6f,0x1f,0x50,0xd8,0x18,0x1d,0xa1,0xf4,0x52,0x2c,0x69 },
{ 0x16,0x86,0xd7,0x6c,0xe5,0x91,0xa7,0x65,0x1e,0x28,0x91,0xb9,0x7e,0x4c,0x86,0x2a,0x0d,0xc4,0xaa,0xb3,0xd4,0x63,0x60,0x61,0x1f,0xc6,0x98,0x70,0x09,0x52,0x4f,0x63 },
{ 0x53,0xbd,0x97,0x70,0x29,0xa8,0xf6,0xd4,0xfa,0x38,0x7d,0xf8,0x17,0xd2,0x52,0x79,0x50,0x1a,0x75,0x9a,0x24,0xe2,0x3c,0xef,0x79,0x98,0x0e,0x28,0x99,0xf0,0x10,0x79 },
{ 0xd1,0x03,0x27,0x04,0xf2,0xae,0x23,0x80,0x76,0x2e,0xee,0x06,0x00,0x16,0x5d,0xc8,0x26,0x95,0x41,0x98,0xe6,0xc0,0xe7,0x92,0xc4,0x8a,0x52,0x14,0xe1,0x80,0x73,0x5d },
{ 0xdb,0xa7,0xd5,0x4c,0xcc,0x10,0xd1,0x3e,0xf5,0xaa,0xb3,0x0c,0xc5,0xd1,0x7c,0xa4,0xc4,0x5e,0x6b,0x8e,0x3d,0xec,0x3a,0x31,0x0f,0xda,0x9d,0x47,0x07,0x9d,0x17,0x01 },
{ 0x36,0x06,0xe2,0xd3,0x45,0x9f,0xb0,0xeb,0x81,0x18,0x6a,0x79,0xf3,0xc7,0x69,0x97,0x12,0x53,0x73,0x43,0x39,0x76,0xe2,0xa0,0xb4,0x92,0xd2,0xa6,0x64,0x06,0x32,0x2d },
{ 0xb3,0x54,0x22,0xd8,0xd6,0x79,0xc6,0xc9,0xff,0x24,0xdd,0xfc,0xb2,0x27,0x3c,0x3e,0xb9,0x3f,0x86,0xfc,0xf9,0xe5,0xb1,0x07,0x0a,0xea,0xa3,0x44,0xbd,0x89,0xe9,0x21 },
{ 0x01,0x41,0x19,0xb4,0x1a,0x0f,0xb3,0x21,0xcd,0x15,0x8c,0xfa,0x51,0xf8,0x6b,0x82,0x96,0xbd,0xce,0x06,0x5e,0x5d,0xc4,0x50,0xff,0x17,0x9c,0x16,0x7e,0xbd,0x8b,0x0a },
{ 0x26,0xad,0x5e,0x96,0xa3,0x36,0x4d,0x1d,0x1e,0xbb,0xd6,0xbb,0x94,0x23,0x30,0x26,0x91,0x99,0x72,0xa0,0xdf,0xeb,0xe6,0xef,0x21,0xf5,0x33,0x8b,0xf2,0xda,0xca,0x30 },
{ 0x24,0x17,0x02,0x35,0xd3,0xfc,0x81,0x27,0x28,0x6b,0x68,0x91,0x29,0xde,0xb1,0x0b,0xe0,0x8e,0x5a,0x2c,0x7f,0x96,0x37,0x61,0x28,0x29,0x39,0x39,0x22,0x81,0xb2,0x14 },
{ 0x35,0xe2,0x51,0x4c,0x94,0xb9,0x30,0x30,0x87,0xb6,0xd2,0xe3,0xfe,0x83,0xd0,0x56,0xdc,0xc0,0xd2,0x6f,0x44,0x54,0xca,0x1a,0x2c,0xe1,0x6c,0xf8,0x78,0x1b,0x4e,0x6e },
{ 0x04,0x9c,0xed,0x05,0x96,0x92,0x68,0x9b,0x56,0x6f,0x63,0x34,0xf4,0x31,0x47,0x7e,0x28,0xc6,0xf6,0xdb,0x52,0xcf,0x86,0x69,0x98,0x39,0x12,0x55,0x68,0x89,0x01,0x4d },
{ 0xdd,0x26,0x39,0x4f,0xab,0xc7,0xdd,0x3d,0x40,0xe9,0xf5,0x82,0x00,0xdc,0x79,0xd7,0x05,0xfc,0x7c,0x61,0x5b,0x6a,0x9a,0x7f,0x64,0x73,0xfa,0xfe,0xac,0x5a,0xf3,0x37 },
{ 0xae,0xf9,0x1e,0xac,0xff,0x83,0xd5,0x0f,0xc3,0x5c,0x5c,0x5c,0x3b,0xe7,0x1d,0x84,0x54,0x6d,0xaf,0xc2,0x4d,0xd0,0x15,0x2c,0xc0,0xbc,0xc8,0xb4,0x3a,0xa4,0x99,0x79 },
{ 0x58,0xbb,0xb0,0x19,0xf3,0x41,0x77,0x58,0x04,0x74,0xdf,0xcd,0x31,0x39,0x00,0x08,0x1e,0x24,0xe6,0xed,0x30,0x4a,0x08,0x04,0x3f,0x0b,0x6a,0x9e,0xe1,0xf5,0x9f,0x5d },
{ 0x2d,0xe1,0x43,0x4f,0xef,0xb9,0x44,0x27,0x5b,0x87,0xd7,0x8a,0xf3,0xb4,0x7f,0x0f,0xd2,0x73,0xc1,0xdf,0x6e,0x91,0x5e,0xc3,0xb5,0x7b,0xd7,0x5f,0xeb,0xd5,0x05,0x13 },
{ 0xea,0x6b,0x13,0x6b,0xd9,0x6f,0xc1,0xcb,0x91,0x90,0xf8,0x9d,0xb9,0xe7,0xfe,0x18,0xd8,0x03,0xb2,0xcf,0x06,0xed,0x89,0x0b,0xf0,0x6d,0x91,0xeb,0x3b,0xa2,0xd5,0x17 },
{ 0x45,0x32,0x1d,0xe5,0x5f,0x05,0xe0,0xe8,0xbb,0x62,0xc9,0x8d,0xc3,0x07,0xb4,0x24,0x02,0x0b,0x08,0x2b,0x5b,0xff,0x9a,0x3b,0x98,0xa1,0xf0,0xf8,0x45,0x55,0xdf,0x4a },
{ 0xc9,0x20,0xbf,0x9a,0x5d,0x70,0x47,0x5d,0xac,0x11,0x53,0xa7,0xcb,0x0c,0x01,0x45,0x12,0x5c,0xc1,0xff,0x81,0xf4,0xb9,0x31,0x5b,0xfd,0x9b,0x0a,0x7a,0x5f,0x07,0x20 },
{ 0x99,0x3f,0xb2,0xf0,0xa8,0xb6,0x3b,0xb8,0xe8,0x45,0x13,0xce,0x7b,0xc8,0x2e,0x86,0x2f,0x43,0xba,0x3e,0xb0,0x53,0xf4,0x86,0xc2,0x5e,0xae,0xe2,0x6c,0x58,0x13,0x3d },
{ 0x79,0x86,0xe9,0xd8,0xc5,0x5e,0x4e,0x46,0xf7,0x2e,0x6d,0xb4,0x1c,0x1d,0xbf,0x4c,0xe4,0xc6,0xb9,0x23,0xfd,0xb4,0x50,0x65,0x0a,0xf6,0xa4,0xe4,0x91,0xa9,0x33,0x4a },
{ 0xc6,0xff,0xb8,0x3e,0xbc,0x90,0xdb,0xf5,0xa8,0x60,0xa2,0x52,0x65,0xa6,0xa8,0x4d,0x88,0x0c,0x91,0xe9,0xa5,0x75,0x03,0xbb,0x26,0x25,0x95,0xa3,0x1f,0x0f,0x14,0x58 },
{ 0x5c,0x1d,0x46,0x11,0x44,0xfc,0x18,0xd9,0x87,0xa7,0x4d,0x85,0x5f,0xba,0xe5,0xa2,0x47,0x46,0xd1,0x2d,0xac,0x89,0x00,0xe6,0xa9,0x19,0x08,0x24,0xc8,0xe5,0x4a,0x4e },
{ 0xd6,0x7e,0x83,0x7f,0x60,0xcb,0x6e,0xfe,0xd7,0x00,0x80,0x29,0xdd,0x4e,0x51,0x93,0xc1,0x01,0xb9,0x52,0x98,0x3c,0x31,0x2c,0xd3,0xec,0x5a,0xf7,0x0d,0xca,0x28,0x12 },
{ 0x7c,0x29,0x7f,0x07,0xc2,0x59,0x6d,0x43,0xae,0x97,0x1e,0x2e,0x54,0x0d,0x3b,0xdb,0x2f,0x98,0xa5,0x85,0xc1,0x89,0x31,0x44,0xa0,0x9e,0x79,0xe2,0x42,0xfe,0xad,0x7c },
{ 0xae,0x09,0x91,0x25,0x29,0x83,0xbc,0x08,0xaf,0x26,0xd1,0xec,0xd6,0x9c,0x1a,0xf0,0x9f,0xcf,0xad,0xf8,0x85,0xdf,0x4e,0xca,0xb5,0xb1,0xd3,0x70,0x8e,0x17,0x51,0x6b },
{ 0x30,0x90,0xdd,0x7e,0x64,0x77,0xe6,0x6d,0x0a,0xb0,0x79,0x2b,0x49,0xe9,0xbb,0xc9,0x44,0xa2,0x99,0x4b,0x78,0x2f,0x9e,0xbc,0x06,0x89,0x32,0xf3,0x66,0x11,0xb6,0x5f },
{ 0x33,0xa5,0x0f,0x46,0x5f,0x73,0xef,0x0b,0xb1,0xf6,0x56,0x76,0x6a,0x17,0xd7,0xeb,0xbd,0x71,0x45,0x74,0x80,0x08,0xa2,0xd1,0xf9,0xdb,0xfb,0x57,0x8d,0x55,0x95,0x0b },
{ 0xa3,0xad,0xbc,0x21,0x57,0x21,0x70,0xaa,0x1f,0xb0,0x14,0x91,0xb7,0xdc,0xa8,0x1a,0x9a,0x55,0x4c,0xc1,0x7c,0xe2,0x3c,0x6e,0x83,0x06,0xb5,0xb3,0x24,0xb1,0x4b,0x30 },
{ 0x09,0x56,0x41,0x4e,0x3d,0x91,0x0b,0x4e,0x62,0xb9,0x40,0x17,0xa9,0xd3,0x1f,0x67,0x6e,0xf2,0x35,0x59,0xc2,0xfe,0x69,0x1f,0x79,0xe7,0x81,0x3a,0x93,0x11,0x0e,0x41 },
{ 0x16,0x78,0xb5,0xa4,0xaf,0x75,0x55,0xa6,0x84,0xcb,0x33,0x3c,0x72,0x35,0x83,0x96,0x81,0x08,0x86,0x53,0x3f,0x43,0x70,0xac,0x68,0x6e,0xe2,0x10,0xdc,0x2c,0x07,0x58 },
{ 0x44,0xa7,0x85,0x3e,0x98,0x11,0x16,0xc8,0xd2,0x11,0xde,0x58,0x49,0x44,0xf5,0x76,0x3d,0x8e,0xb3,0x28,0x9e,0x2b,0xa7,0x8e,0x7b,0xfe,0x79,0x51,0x27,0x7b,0xe1,0x33 },
{ 0x55,0xf9,0x8b,0x57,0xcf,0xe6,0xb2,0xbb,0xa8,0x69,0xb8,0x70,0x87,0xcd,0xa7,0xa5,0xb9,0x06,0x23,0x9f,0x98,0x41,0x81,0x90,0x44,0x2c,0xe6,0x7f,0x72,0x83,0xd5,0x03 },
{ 0xcf,0x15,0xef,0x36,0x68,0x64,0xee,0xd7,0x42,0x60,0x3f,0xc2,0x7e,0xd1,0x72,0xac,0x5b,0xb2,0x9f,0xe0,0x7b,0xe2,0x1e,0x6c,0xe7,0x52,0xc6,0xf4,0x30,0xa5,0xe1,0x26 },
{ 0x06,0x11,0xb9,0x3f,0x63,0x0a,0xa8,0x17,0x2d,0xc8,0x28,0x09,0xd5,0x7a,0x0f,0x9c,0x53,0x5d,0xe7,0xdc,0x25,0xb7,0x97,0xf8,0x98,0x8b,0xbe,0x4f,0x2d,0xb1,0x47,0x3e },
{ 0xfe,0xba,0x96,0xda,0x07,0x00,0x35,0xe6,0x3c,0xcb,0x52,0x09,0xb6,0xc2,0x0a,0x8f,0x8d,0xa1,0xe1,0x56,0xa2,0x37,0x4a,0x6a,0x7b,0x2a,0x5f,0x39,0xeb,0x90,0x0b,0x36 },
{ 0xd6,0x5a,0xf8,0x09,0x56,0xe7,0x52,0xcc,0xf1,0x62,0xf2,0x02,0x53,0x5e,0x8e,0x6e,0x6f,0x74,0x85,0xf9,0x74,0x79,0xaa,0x6c,0x9b,0x3b,0xe8,0x8d,0x00,0xe9,0x28,0x76 },
{ 0x09,0xfe,0x86,0xc0,0x14,0x74,0x1c,0x63,0x30,0x2b,0x8d,0xc5,0x2b,0x58,0x62,0x8c,0x7c,0x49,0x22,0x27,0xa2,0x82,0x21,0x7d,0x26,0x79,0x34,0xba,0xf4,0xda,0x38,0x6b },
{ 0xe0,0x19,0x55,0x3a,0xe2,0x26,0x7b,0x6b,0x3a,0xde,0x66,0x44,0xce,0x94,0x15,0xa7,0x3e,0xdb,0x75,0x1f,0xde,0x1e,0xb5,0xd5,0x22,0xfa,0xf8,0xff,0x32,0x67,0x99,0x11 },
{ 0x2a,0x40,0x9d,0xdc,0xd9,0x81,0x45,0x93,0x01,0x93,0x61,0xee,0x3d,0xc1,0x59,0x32,0xcf,0xcb,0x4f,0xf7,0x88,0x6d,0x43,0x81,0x49,0xae,0x9f,0xff,0x9d,0x17,0x2e,0x64 },
{ 0xfa,0x57,0x3a,0xfa,0x86,0xec,0x1e,0x23,0xa5,0x6b,0x0d,0x0e,0x67,0x79,0x03,0xf7,0x81,0xa8,0xca,0x0c,0xa6,0x20,0xa0,0x3d,0xd7,0x9d,0xc4,0x67,0x90,0x92,0xa1,0x48 },
{ 0x30,0xe0,0x60,0x8a,0xdc,0xad,0x12,0x35,0xa2,0x9e,0x8a,0xb0,0x06,0x09,0xc3,0x19,0xf4,0x2d,0xee,0x34,0xfb,0xe2,0x61,0x4c,0x57,0x53,0x24,0x54,0x83,0x59,0xf1,0x79 },
{ 0x61,0xce,0x81,0xf7,0x35,0x50,0x80,0xf5,0x00,0xd8,0x88,0xe8,0x94,0x61,0x86,0xfb,0xc3,0xd8,0xda,0x74,0xf5,0xe5,0xec,0x72,0x0c,0x33,0xcb,0x69,0x4e,0xe4,0xb3,0x22 },
{ 0x85,0x52,0xcb,0x58,0x36,0x08,0x0b,0x67,0x0b,0x76,0xc8,0x6b,0xc8,0xf9,0x11,0x74,0x8c,0xf2,0x73,0x1d,0x48,0x6e,0xf3,0x17,0xe0,0xbe,0xd8,0x2b,0xa8,0xcb,0x0a,0x43 },
{ 0x6d,0x15,0x9d,0x2f,0x88,0x8b,0xb7,0x2d,0x18,0x9e,0xa0,0x4f,0x8c,0xff,0x6f,0x33,0xb7,0x83,0xfe,0x50,0x16,0x04,0x61,0x28,0x72,0xcc,0x34,0x88,0xdf,0x79,0x48,0x0b },
{ 0x91,0x47,0xde,0x37,0xb3,0x7a,0xfb,0xc2,0xd1,0x53,0xbb,0x72,0xb1,0x4c,0xb9,0xfa,0xd3,0x66,0xbf,0x4a,0xba,0xb4,0x3d,0x7d,0x06,0x7b,0x2e,0xa0,0x5e,0x5a,0xe3,0x18 },
{ 0xa2,0x0e,0x67,0x78,0x99,0x9a,0xd0,0x0e,0xd5,0xf5,0xcc,0x0d,0xf9,0x70,0xc9,0x20,0x24,0x07,0x80,0xcb,0xa3,0xca,0x35,0x07,0x14,0x7e,0x84,0x8a,0x2d,0x52,0xb2,0x28 },
{ 0xfb,0xb1,0xdc,0x5c,0x64,0xed,0x08,0x6e,0x13,0x59,0xcf,0x5d,0x90,0x46,0x70,0xc0,0x95,0x1b,0xd0,0x01,0xfb,0x5e,0x4c,0xf3,0xcf,0x56,0xa9,0xa9,0x05,0x87,0x7f,0x2f },
{ 0x94,0x2e,0x8d,0x41,0x92,0x9c,0x8e,0xf6,0x3c,0xe3,0xab,0x38,0x81,0x5e,0x31,0x42,0x14,0x10,0x09,0xed,0xb0,0xb0,0xae,0x9e,0x00,0xca,0x71,0xb0,0xa7,0x1b,0x17,0x21 },
{ 0x4a,0xd0,0x13,0xd1,0x62,0xaf,0xc1,0x58,0x70,0x1e,0xdf,0x5b,0x24,0x3e,0x42,0x83,0x0e,0x5a,0x51,0xb9,0xf3,0x02,0x40,0x86,0x00,0xe2,0x0d,0x4e,0x42,0xa2,0x97,0x55 },
{ 0x0d,0x06,0x71,0x04,0xd0,0x0f,0x9f,0xf9,0xdb,0x4f,0x82,0x92,0xe9,0x5b,0x4c,0x0c,0x0a,0x56,0xf3,0x15,0x7f,0x2a,0x15,0xf8,0x74,0xad,0x0b,0x79,0xa4,0x61,0xe2,0x7f },
{ 0x3c,0x03,0x37,0x30,0x23,0x97,0xdf,0x1f,0x89,0xad,0x7b,0xc1,0xf8,0x01,0x4a,0xe7,0x02,0x62,0x21,0xb6,0x44,0x04,0xde,0x6c,0x89,0x59,0x98,0x69,0x0a,0xc6,0xb9,0x12 },
{ 0xbf,0x27,0xee,0x3c,0xf3,0x59,0x6f,0x3c,0x88,0xc4,0x09,0x7b,0xcc,0xe0,0x39,0xe8,0x7d,0xb5,0xfa,0xd7,0x1f,0x67,0x3e,0xd1,0x30,0x96,0x1e,0x74,0x7a,0x59,0xd1,0x17 },
{ 0x1f,0xda,0xe5,0x8f,0x07,0xaa,0x07,0xab,0x1e,0x80,0x2a,0xd0,0xf2,0x92,0x6c,0x2b,0x51,0x7f,0x41,0xc7,0xc7,0x26,0xc2,0x90,0x87,0xa4,0x46,0xf1,0xb9,0x31,0xcd,0x78 },
{ 0xb1,0xe3,0x73,0xe4,0x35,0xb9,0x34,0x31,0x30,0x35,0xc2,0x14,0xec,0xb2,0x99,0xbf,0xd2,0xff,0xeb,0x62,0x7e,0x93,0xfe,0xab,0x56,0x0f,0xcb,0x3d,0x7e,0x1f,0xf1,0x52 },
{ 0xb8,0x58,0xec,0x64,0x5d,0x14,0x9e,0xbf,0xf2,0x68,0x8e,0x05,0x36,0x70,0xd2,0x2b,0x80,0x61,0x07,0x1e,0x45,0x91,0x22,0xd6,0x0c,0x0a,0x0f,0xc2,0xf3,0xcb,0xd9,0x36 },
{ 0x9c,0x35,0x06,0x4e,0xbe,0x98,0x7c,0x17,0x7b,0xe1,0xf9,0x55,0xa8,0x8b,0xee,0x72,0xf0,0x6b,0x90,0x31,0x73,0x94,0x64,0x58,0xfe,0x02,0x08,0x13,0x42,0xbf,0xdd,0x46 },
{ 0xd4,0x2b,0x60,0xff,0xab,0x4f,0x32,0xfc,0xb0,0x61,0xf5,0xfb,0x65,0x6f,0x0a,0x53,0x57,0x81,0x7c,0x33,0x71,0x0a,0x17,0xdb,0x4e,0x20,0xa2,0xf8,0x37,0x41,0xd9,0x3b },
{ 0xbc,0x4c,0x41,0x26,0x6d,0xd5,0x55,0xea,0x44,0x57,0x53,0x3e,0x46,0x87,0xbe,0x75,0x96,0x69,0x1a,0xea,0x89,0xf3,0xd0,0xd0,0x1f,0x2b,0x2a,0xcc,0x1c,0x51,0x82,0x3a },
{ 0x9c,0x35,0x03,0x63,0xbb,0xaf,0x75,0xd6,0xbf,0xb7,0xa1,0x73,0xc8,0xfc,0x1b,0xbb,0x6f,0xbb,0x7d,0xf4,0x5e,0x67,0x28,0x94,0x90,0x2c,0x38,0xda,0x93,0xe5,0x5d,0x58 },
{ 0xbd,0x49,0xcf,0xc5,0x3f,0xfc,0xab,0x6a,0x6f,0x85,0xc7,0xf9,0xfb,0xad,0x32,0x8d,0xc8,0x00,0x3a,0x89,0x35,0xaf,0xbd,0xee,0x65,0x0b,0x41,0x43,0xab,0x6e,0xe6,0x1d },
{ 0x3b,0x6f,0xe3,0xaf,0xb4,0x3c,0xdf,0x78,0x18,0xa3,0xc0,0x53,0xd2,0x76,0x44,0xb0,0xad,0xd9,0x65,0x33,0xb2,0x4b,0x50,0x6e,0x86,0xbe,0xe9,0x1a,0x5b,0xca,0x77,0x59 },
{ 0xb9,0xca,0x85,0xd5,0x04,0xac,0xf8,0x61,0xe6,0xa0,0xf0,0x3a,0x22,0x50,0xc1,0x2b,0xc1,0xf6,0x03,0x6a,0xeb,0xb8,0x02,0x72,0x09,0x6c,0x20,0x9a,0xab,0x5b,0xc5,0x77 },
{ 0x29,0x31,0x0e,0x7b,0x19,0x56,0x47,0x73,0x65,0x34,0x0b,0x8c,0x7b,0xde,0xc5,0xae,0x86,0x2b,0x73,0xda,0x7d,0xb4,0x47,0x6e,0x3e,0x53,0x0f,0x06,0xff,0x01,0x33,0x37 },
{ 0xaa,0x24,0x7d,0xb4,0x63,0xf0,0xa1,0xd0,0x88,0x36,0x49,0xb3,0x75,0x16,0x50,0x57,0xdb,0xb2,0x31,0x7e,0x6e,0x71,0x2e,0xd9,0x9f,0x0c,0x7f,0xf5,0x53,0x07,0xbb,0x48 },
{ 0x03,0x80,0x10,0x30,0x8f,0x4d,0x85,0x12,0x0a,0xe7,0x97,0xf3,0x6d,0xaa,0xf5,0x4d,0xb5,0xab,0xb6,0xe6,0xce,0xbc,0xb4,0x43,0xeb,0xe2,0x92,0xfb,0xa3,0x89,0x80,0x03 },
{ 0x30,0xd7,0x15,0xbb,0x78,0x1f,0x56,0xcb,0x75,0xa8,0xa0,0x00,0xa3,0x87,0x3d,0x69,0xa5,0x7e,0xa3,0x91,0x24,0x2c,0xfc,0x8f,0x83,0x22,0xe6,0xc1,0xec,0xf5,0x4d,0x17 },
{ 0xb1,0x20,0xdd,0xe9,0x40,0xda,0xe4,0xa2,0x66,0xb0,0xdf,0x1e,0x61,0x2c,0xf4,0x5b,0x1d,0x50,0xc3,0xcd,0x24,0xd5,0x10,0xa7,0x73,0x14,0x4f,0xbf,0xb4,0xe9,0x22,0x18 },
{ 0xe1,0x11,0xda,0x76,0x36,0x56,0x93,0x00,0x08,0xe5,0x5d,0x2d,0x6e,0x40,0x27,0xe5,0x8f,0x19,0x51,0x1b,0xc7,0xd6,0x51,0x74,0x79,0xb2,0x82,0x74,0xbb,0xb3,0xb4,0x58 },
{ 0x38,0x38,0x9f,0x47,0xde,0xc6,0x76,0xdc,0x82,0xaa,0xbd,0x3b,0xb2,0xbd,0x65,0x42,0x47,0x48,0x33,0xb1,0x92,0xfd,0x63,0xa7,0x53,0xbf,0x9b,0x3c,0x72,0x8e,0x19,0x71 },
{ 0x93,0x2f,0xc2,0x83,0xe3,0xd3,0xf9,0xbd,0xa4,0xbc,0xff,0x5a,0x1c,0x81,0xb5,0x26,0xdb,0x7b,0x6b,0xad,0x15,0xf1,0xad,0xa5,0x1e,0xd0,0x77,0x4f,0x79,0x50,0x72,0x51 },
{ 0xc2,0x1a,0x26,0x9b,0x90,0x1b,0x5c,0x63,0x86,0xf8,0x62,0x22,0xae,0xe8,0x80,0x43,0xf3,0x36,0x78,0xae,0x69,0xc5,0x6b,0xb0,0x42,0x97,0x79,0x3e,0xa7,0xea,0x8e,0x3f },
{ 0x85,0x51,0x71,0x14,0xcc,0xc4,0xa8,0x6c,0x94,0x30,0x56,0x0a,0xcf,0x78,0x5d,0x2f,0x1d,0x3c,0x90,0x36,0x25,0xbf,0x34,0xe4,0xb6,0x0a,0x0e,0x7e,0x17,0x30,0x44,0x15 },
{ 0x54,0xad,0xfd,0x98,0x6a,0x65,0xd8,0xf5,0x93,0xde,0x95,0x49,0xce,0xf3,0x06,0x0e,0x4e,0x83,0xdd,0x79,0x7c,0xa8,0xf4,0x84,0x52,0x4f,0x99,0xf6,0x50,0xb7,0x61,0x1b },
{ 0x23,0x04,0xe4,0x38,0x40,0xd0,0x76,0xa2,0x53,0x6e,0x1a,0x7d,0x13,0x4b,0xc6,0xb3,0xb1,0x9d,0x70,0xdf,0xde,0x26,0xa3,0xb1,0x1a,0x6d,0x46,0x4c,0x25,0x7a,0x1f,0x12 },
{ 0x63,0x36,0x74,0xc9,0x40,0x98,0xdf,0x83,0xcc,0x5f,0xf4,0x6a,0x1b,0xea,0xab,0xab,0x38,0x6a,0x01,0xe9,0x67,0xf3,0xb7,0xb8,0x11,0x89,0x7d,0x62,0x44,0x43,0x58,0x59 },
{ 0x6d,0x18,0x8f,0x5c,0xf2,0xe0,0x7d,0xe1,0x32,0x8d,0xc9,0x23,0xb9,0xf3,0xa5,0xc6,0xc7,0xb6,0x03,0xd2,0xc0,0xef,0xeb,0x6d,0x4f,0x00,0x03,0xe5,0x1f,0x5e,0xb9,0x00 },
{ 0x3d,0x37,0x32,0xa1,0x9a,0xc8,0x9c,0xeb,0x88,0xbd,0x71,0x19,0xd7,0x35,0xaa,0xcd,0xbc,0x7d,0xd7,0xa8,0x61,0x68,0x18,0xaf,0x77,0xd1,0xcd,0xf4,0xf3,0xb5,0xad,0x30 },
{ 0x52,0x5b,0xe3,0xd5,0xe2,0xd2,0x4e,0xec,0xc2,0x47,0x17,0xf1,0x01,0xc5,0x81,0x18,0x44,0xd6,0x92,0xcf,0x7e,0xbe,0xcc,0x9c,0x2f,0xb5,0x50,0x3a,0xb8,0x50,0x0a,0x0c },
{ 0x12,0x7c,0x6e,0x40,0x7f,0x26,0xeb,0x4d,0x1c,0x76,0xc4,0xfc,0x58,0x7a,0xbb,0x4f,0x2c,0x22,0xaf,0xcc,0x61,0x40,0xed,0x23,0xfd,0x3e,0x3b,0x20,0x0d,0x52,0x41,0x10 },
{ 0x33,0xc8,0xab,0xac,0x0f,0x23,0x3e,0x33,0x98,0x55,0x71,0x85,0x7f,0xc2,0x86,0x67,0x2e,0x1f,0x3c,0x89,0x0f,0xef,0x9c,0x3b,0xaf,0x12,0x70,0xf1,0x87,0x1f,0x31,0x38 },
{ 0xb7,0x53,0x54,0x8a,0xa2,0xde,0xd0,0x3b,0x7d,0x4b,0x51,0x78,0x5e,0xcc,0xc5,0x3b,0x75,0x7f,0x9a,0xc4,0xee,0x9c,0x7a,0x9a,0x38,0x09,0x98,0x97,0x20,0xff,0x9b,0x5e },
{ 0xd4,0xe9,0x73,0x2c,0xef,0xd6,0xcd,0xc9,0xf6,0x9b,0x60,0x71,0x79,0x75,0x69,0xbf,0x89,0xc8,0x36,0x37,0x6b,0xd4,0x36,0xe9,0x64,0xcd,0x71,0x62,0xc5,0xf1,0x7e,0x62 },
{ 0x97,0x80,0x0a,0xd7,0x3c,0xbe,0x4f,0x6d,0xdc,0xa6,0xd8,0xda,0x02,0x51,0xb8,0xf9,0x5e,0x41,0x36,0x59,0xe7,0x44,0x92,0x20,0xf1,0x40,0x82,0xd5,0xb5,0x99,0x47,0x7f },
{ 0xee,0x39,0xc1,0x14,0xb3,0x93,0x8a,0xb4,0x71,0x3d,0x60,0xf5,0x7a,0x4d,0xcb,0xcb,0xe7,0x38,0x35,0xae,0x6e,0xdd,0x29,0x71,0x55,0x24,0xea,0xb4,0x83,0xfc,0x85,0x3b },
{ 0x6a,0xc9,0x2f,0xb9,0x60,0xe5,0xb2,0x2e,0xef,0xa2,0x90,0x9a,0x2f,0xc6,0x1d,0xe2,0x2c,0x48,0x1f,0xa2,0xeb,0x45,0x65,0xc3,0x78,0xb6,0xb6,0xaa,0x37,0x12,0x43,0x46 },
{ 0xe2,0x9f,0xd5,0xd3,0x11,0xee,0xb1,0x7d,0x4d,0xba,0x70,0x24,0x52,0x96,0xc8,0xb9,0xec,0x59,0x69,0x50,0xa3,0x0e,0xa7,0xd4,0xcb,0x13,0x36,0x8d,0x7a,0x93,0xd2,0x3a },
{ 0xcd,0x87,0xe4,0x30,0x44,0x8f,0xf6,0xda,0xb8,0xfa,0x96,0xdb,0x80,0x5c,0xb0,0x00,0xc2,0x89,0x26,0x25,0x34,0x15,0x06,0x89,0x0a,0x4a,0x06,0xa6,0x66,0xa2,0xb2,0x42 },
{ 0x5f,0x4c,0x0a,0x5b,0x4e,0x16,0x76,0x56,0x46,0x66,0x0e,0x7b,0xb9,0x36,0x26,0x83,0x70,0x4b,0x80,0xaf,0x09,0x10,0x69,0xae,0x2f,0x41,0xcc,0x9e,0xcf,0x70,0x41,0x33 },
{ 0x4a,0x41,0x9a,0xf2,0x2f,0x22,0xfc,0xad,0x19,0x15,0x59,0x68,0xb1,0x4e,0xdb,0x4b,0xd5,0x65,0xb9,0xbd,0x70,0x5a,0x57,0x96,0x2a,0x9c,0xf7,0xc1,0x39,0x43,0xa3,0x0a },
{ 0xb6,0xb4,0x9d,0x85,0x3a,0x22,0x01,0xf0,0x77,0x4a,0x63,0xce,0x6f,0xa6,0xf5,0x38,0xaf,0xd8,0xc7,0x78,0x5a,0x9c,0x28,0xe4,0xed,0xc6,0xe7,0xfa,0x00,0x94,0x1f,0x60 },
{ 0x15,0x4d,0xb9,0xd8,0xb9,0x54,0x56,0xc2,0x13,0x17,0x41,0x9a,0xab,0x50,0xa0,0x2c,0x05,0xf2,0x65,0x46,0x4f,0xa4,0x7a,0xdb,0x35,0x90,0x4a,0xc3,0x41,0x0e,0xc5,0x7c },
{ 0x4f,0xd9,0x48,0x2d,0x78,0x66,0xe6,0xf6,0x4b,0x8d,0x52,0xe0,0x70,0x18,0x10,0xde,0x3e,0x22,0x24,0x41,0xcf,0xa7,0x4c,0x44,0x99,0x75,0x32,0x39,0x87,0x88,0x35,0x7b },
{ 0x7c,0xd6,0x13,0x44,0xfc,0xae,0x17,0x11,0x6f,0xe1,0x75,0xcc,0xf8,0xcc,0x97,0xe9,0x0e,0xf9,0x68,0x9c,0xc4,0x0f,0xb3,0x42,0x71,0x72,0xb4,0x54,0x46,0xa3,0xdf,0x1f },
{ 0x40,0xe9,0x84,0x24,0x68,0x8a,0x55,0x8e,0x98,0xaa,0xc2,0xdd,0xb6,0xd1,0xd2,0x35,0xcf,0x93,0x3b,0xc4,0xa1,0x70,0xf5,0x20,0x45,0x8a,0xbb,0x0c,0x9d,0xec,0xe9,0x78 },
{ 0xdf,0x44,0xdf,0x54,0x1f,0x74,0x97,0x0e,0x53,0xc9,0x53,0x2c,0x5e,0x85,0x7a,0xbd,0xb0,0xde,0xe8,0xca,0x54,0x6b,0xda,0xcd,0xbe,0x9a,0x33,0x8d,0xd6,0x98,0x50,0x0b },
{ 0x24,0x67,0xfa,0x57,0x94,0x65,0x94,0xfd,0xf5,0x97,0xc6,0xc2,0x59,0xb7,0xb8,0x94,0xdc,0xc7,0x1f,0xa0,0x7a,0x3d,0x4f,0x83,0xc1,0xa7,0xfc,0x11,0x4a,0x35,0xdf,0x37 },
{ 0x2b,0x9d,0x2a,0x7f,0x1a,0x41,0x0b,0xe2,0x9c,0xb8,0x06,0xeb,0xa6,0xb2,0x78,0x8e,0x70,0xbd,0x28,0xa7,0x49,0x5d,0x22,0x03,0x03,0x9e,0xd5,0xd0,0x3b,0xec,0x8d,0x39 },
{ 0x7a,0xaf,0x4c,0xa9,0x70,0xc6,0x2a,0xe5,0xc9,0xdd,0xc5,0x66,0xda,0x6b,0x07,0x48,0xee,0xf3,0xab,0x66,0xa3,0x46,0xd6,0xd1,0x5b,0xcd,0xd0,0xbf,0xe6,0x63,0x5e,0x15 },
{ 0xa9,0xb7,0xa6,0x71,0x28,0x68,0x15,0xb9,0xa6,0x7f,0xdf,0x5c,0x1a,0x05,0xdd,0x5f,0x91,0x22,0x8f,0xc0,0xc3,0x3f,0xa9,0x49,0x90,0xec,0x5a,0x1e,0xe8,0x77,0x46,0x37 },
{ 0xf1,0x36,0x52,0xf6,0xdb,0x37,0x58,0x59,0xba,0x6f,0xf8,0xd0,0x5c,0x97,0xfd,0x73,0xcb,0x6c,0x5a,0x5e,0x66,0xc7,0xc9,0x7d,0xb4,0x68,0xbb,0x1b,0x32,0x1f,0x22,0x05 },
{ 0xdf,0xef,0x21,0x2b,0x7b,0x1b,0xd7,0xeb,0xca,0x97,0x88,0x1a,0x2a,0x39,0xbf,0xc4,0x72,0xdc,0x16,0x63,0x20,0x30,0xe7,0xe7,0x24,0x2e,0x23,0xbc,0x91,0x66,0x61,0x33 },
{ 0xa9,0x4b,0x20,0x43,0xcc,0x47,0x52,0x5b,0x9f,0xf8,0x7f,0x5a,0x19,0x7f,0xe0,0xb6,0xbf,0xe6,0x50,0x73,0x63,0x9a,0xef,0x3d,0x40,0x9f,0x4e,0x1b,0xb4,0x09,0xf2,0x5a },
{ 0x5d,0xdd,0x74,0x54,0x84,0x17,0xa6,0xe7,0xfa,0x81,0xd2,0x46,0xc8,0xc5,0x97,0x07,0x9d,0xf6,0x35,0xc1,0xa6,0x67,0xa1,0x91,0x6d,0x64,0x90,0xe4,0x17,0xd0,0x69,0x46 },
{ 0xe5,0x01,0xb2,0x2b,0xbf,0x83,0xfc,0xed,0x61,0x72,0x30,0x97,0xb2,0x45,0xa2,0x6e,0x09,0x67,0x79,0xe2,0xa3,0xe2,0x5b,0x19,0x47,0x4a,0x33,0x17,0xe9,0x2e,0x05,0x1c },
{ 0x9c,0x0d,0x8c,0x7f,0x0f,0x0a,0x02,0xcb,0x2d,0x64,0xbd,0x61,0x00,0xe5,0xf7,0x38,0x38,0x47,0x0f,0x3e,0x7b,0xd2,0xf1,0x02,0x07,0xa7,0xf5,0xf7,0x84,0x77,0x30,0x2c },
{ 0x4c,0x7d,0x7a,0xfa,0xfd,0x05,0x87,0x84,0x41,0x3a,0x59,0xbc,0xee,0x5c,0x15,0x6b,0x89,0xc5,0x53,0x4b,0x63,0x47,0xae,0x16,0x68,0x2e,0xd8,0xba,0x82,0x79,0xe1,0x11 },
{ 0x51,0x6e,0x95,0x14,0xca,0x55,0x2e,0x4b,0x35,0x06,0x3b,0x4d,0xf9,0xfb,0x25,0x8f,0xc5,0xbe,0x94,0xf1,0xf2,0x3b,0x18,0x43,0x47,0x29,0x74,0x1a,0xf9,0x77,0x62,0x5c },
{ 0x6c,0x26,0x58,0x53,0x8d,0x12,0xc6,0xe0,0x5c,0xae,0xa5,0x55,0x48,0x1d,0x3a,0xf3,0xe0,0x53,0x2e,0xb8,0xdd,0x40,0x00,0x7b,0x6e,0x8f,0xdc,0x4a,0x7b,0x33,0x59,0x31 },
{ 0x96,0x1c,0xba,0x05,0xd5,0x1a,0xce,0x8e,0xab,0xcd,0x42,0x57,0x43,0xd1,0xa1,0x66,0xce,0x26,0xb0,0x64,0x4a,0xa4,0xa7,0xc0,0x85,0xc3,0x26,0x3c,0xd2,0xbd,0x82,0x26 },
{ 0x8b,0xe9,0x16,0x2a,0x7e,0x07,0x62,0xc9,0x1f,0x9e,0xa9,0x4f,0x77,0xd8,0xab,0x9f,0x29,0x9e,0xdc,0x2a,0x39,0x23,0x5c,0x05,0x76,0x68,0xd1,0x27,0x7c,0x1b,0x88,0x45 },
{ 0x96,0x71,0x4f,0x71,0x31,0x34,0x71,0xfc,0x59,0x3c,0x8a,0x5a,0xd6,0xe6,0xd7,0x13,0xe4,0x43,0xb2,0x39,0x23,0xdb,0xe9,0x51,0x8f,0x25,0x46,0xcb,0x7a,0x29,0x76,0x54 },
{ 0x6b,0x29,0xfe,0xdb,0x44,0x22,0x72,0xad,0x86,0x2d,0x8a,0x7d,0xc5,0xd2,0xe2,0x79,0x86,0x56,0xce,0xc4,0x39,0x0a,0x21,0xd4,0x72,0xf8,0x67,0x05,0x50,0x83,0x5d,0x08 },
{ 0xc9,0xf8,0xd9,0x8c,0xe6,0x01,0x22,0xb7,0xf3,0x98,0x2e,0x4e,0x06,0x13,0x43,0x42,0xfa,0xb3,0x62,0x15,0xa6,0xb6,0x94,0xd9,0x54,0x86,0xd4,0x37,0x16,0x26,0xef,0x4e },
{ 0x3f,0x75,0xa9,0xa1,0xcf,0x61,0x9d,0x15,0x1f,0xcd,0x9c,0x00,0x6d,0x87,0x0f,0x53,0x43,0x62,0x98,0x08,0x54,0x64,0x9d,0x65,0x88,0xe2,0x6a,0x11,0xa9,0xd8,0x8a,0x45 },
{ 0xd8,0x95,0x4b,0x57,0xf3,0x13,0x15,0x78,0x01,0x2a,0xe6,0xc2,0x53,0xd5,0x98,0x9b,0xc5,0xac,0xa8,0xfd,0x4f,0xa4,0xcb,0x2b,0xf8,0x78,0xdb,0x24,0x62,0xe6,0x5b,0x4d },
{ 0xdd,0xb9,0xbc,0xcf,0xe1,0x09,0x96,0xf0,0x00,0x9c,0x7b,0xc3,0x25,0xc2,0x09,0xc3,0x42,0x6b,0xcc,0x47,0x5f,0x19,0xc7,0xa0,0x9c,0x3f,0xaa,0xec,0xbd,0x5a,0x76,0x06 },
{ 0x6f,0x7a,0x97,0x6d,0x24,0xd0,0x5f,0x2f,0xd9,0x5c,0xfb,0x03,0x6b,0x90,0xca,0x47,0x61,0x12,0x61,0xa2,0xed,0xc3,0x42,0xa9,0x1f,0x2d,0x99,0x72,0x32,0x8c,0x65,0x08 },
{ 0x03,0x4a,0x56,0x4b,0xb1,0xeb,0x9a,0x51,0x30,0x58,0xb1,0x6a,0x69,0x5c,0xdf,0xfe,0xe5,0x76,0x31,0x03,0x87,0xd1,0x26,0x9f,0x36,0x52,0x07,0xb3,0xc1,0xf5,0x4c,0x6d },
{ 0x98,0xe2,0x77,0x13,0x92,0xb3,0xf6,0xd6,0x4b,0x2f,0xae,0xb1,0x07,0xc3,0x04,0x3a,0x0d,0x51,0x61,0x70,0x9d,0x1b,0xed,0x0c,0xd7,0x45,0x37,0xab,0x89,0xa3,0xeb,0x1d },
{ 0xd4,0x60,0xaa,0x8e,0xe3,0xd5,0x07,0xa1,0x21,0x5e,0x28,0xce,0x9a,0x44,0xd6,0x39,0x4b,0xf8,0xf9,0x46,0x00,0x0e,0xa5,0x46,0xe1,0x28,0xf5,0x52,0x6c,0xa2,0x98,0x57 },
{ 0xec,0xe6,0x64,0x3b,0x8f,0xa8,0x3b,0x94,0x82,0xf3,0x00,0x12,0x7f,0xb0,0xd9,0xd6,0xba,0x4f,0xba,0xf4,0x06,0x16,0xcf,0x8e,0x28,0x46,0x2b,0x96,0x4a,0xd2,0xec,0x0f },
{ 0x47,0x86,0x58,0xac,0xb7,0x4e,0x51,0x85,0x39,0xe8,0x8b,0xd9,0x01,0x42,0x8a,0x04,0x6a,0x53,0xc1,0x53,0x14,0xa8,0xe7,0x65,0xe5,0x76,0x78,0xc5,0x2a,0x14,0xa5,0x00 },
{ 0xe1,0xd0,0xe5,0xd3,0xf2,0xb1,0x5c,0x68,0x10,0x1a,0x6f,0x2b,0x6a,0xe1,0xa4,0x65,0x32,0x14,0x0f,0x61,0x5f,0xe7,0xf9,0xd6,0x1e,0xcf,0x8d,0xc4,0xfe,0xc0,0xf1,0x56 },
{ 0x96,0x41,0xd5,0x43,0xaf,0x0f,0x36,0x58,0xfe,0x22,0x09,0x85,0x2f,0xf0,0x61,0xe1,0x3e,0x63,0x3d,0xfb,0xc5,0x3f,0xb7,0x16,0x40,0xf4,0x2b,0x15,0x8c,0xd8,0x2f,0x70 },
{ 0x34,0x1b,0xab,0x95,0x71,0x61,0x27,0xfb,0xa7,0x05,0x48,0xa2,0xee,0x01,0xfa,0x55,0x43,0x2b,0x8c,0x6c,0x16,0x50,0x58,0x10,0x3f,0xf6,0x95,0xa2,0xd8,0x18,0x1d,0x62 },
{ 0x0b,0x81,0x8d,0x2b,0xca,0x10,0x6b,0xcb,0x0e,0x2b,0x08,0x1d,0x62,0xf1,0x70,0x0a,0x20,0xf7,0xa2,0xca,0x0e,0x0f,0x7d,0x0a,0x67,0x8d,0x0d,0x45,0xca,0xe3,0xff,0x57 },
{ 0xdb,0xe5,0x37,0xd6,0x40,0x25,0xb8,0xcb,0x44,0x36,0x3b,0xab,0x65,0xe9,0x83,0x0b,0x77,0x7c,0x73,0x84,0x45,0x4e,0x3c,0x27,0x24,0xba,0xee,0xe3,0x1f,0xd2,0x3c,0x53 },
{ 0x66,0x6f,0x57,0x9d,0x5c,0xd0,0xe8,0x63,0xdd,0xe5,0x1e,0x7f,0x9e,0x7b,0xb2,0x13,0x43,0x74,0x6e,0x44,0xef,0x29,0x5d,0x24,0x9d,0x7f,0x12,0x3f,0xaa,0xec,0xa3,0x1c },
{ 0x85,0xa0,0xce,0x79,0x20,0x90,0x28,0x71,0xa6,0x4c,0xf6,0xc8,0xbe,0x20,0x99,0x1d,0x6f,0x6c,0xd8,0xc1,0x8c,0x69,0xc9,0xee,0x66,0x33,0x40,0x0b,0xac,0x50,0x1e,0x7c },
{ 0x68,0xb9,0xb3,0x31,0x4c,0x21,0xdc,0xef,0x16,0x0b,0x37,0x68,0x71,0x56,0x36,0xe8,0xb6,0x8e,0xc1,0x11,0x22,0x67,0x6d,0x58,0xc3,0xf4,0xc6,0x28,0x41,0xd8,0x9d,0x0d },
{ 0xa3,0xaf,0x80,0x58,0x85,0xd9,0x8b,0xbf,0x39,0x35,0xee,0x9d,0xe9,0xbd,0x52,0x91,0xc3,0xbe,0xce,0xf2,0xcc,0x1f,0xaf,0xf7,0x16,0xfa,0x86,0x27,0xa8,0xa5,0xea,0x57 },
{ 0x1c,0x5c,0x63,0xce,0x46,0xd2,0x0e,0x94,0xe4,0x34,0x81,0xa7,0xfa,0x84,0xcd,0xf0,0x75,0x60,0x98,0x17,0xf2,0x12,0x71,0x8e,0xdf,0x05,0xe6,0xba,0x87,0x94,0xa2,0x6e },
{ 0x06,0xac,0x61,0x8b,0x0f,0x33,0x49,0xb5,0x60,0xf9,0x47,0x1f,0x02,0x4f,0x0e,0x65,0x0d,0x99,0x5a,0x98,0x1a,0x99,0x97,0xfe,0xae,0x4b,0xa4,0xa5,0x9b,0x4f,0x60,0x77 },
{ 0xa2,0x99,0xa1,0x1a,0x0b,0x9d,0x18,0x41,0x97,0xf3,0x66,0xd7,0xb1,0x12,0xea,0xdf,0x8b,0x5d,0x45,0xf4,0x5e,0x63,0x14,0xc2,0x12,0x92,0x1e,0x1f,0x75,0xd0,0xb1,0x2a },
{ 0xba,0x8b,0x9c,0x6b,0x38,0x14,0xed,0x35,0xb6,0x02,0x27,0x09,0x5b,0x69,0xdf,0x27,0x6a,0x30,0xae,0x33,0xa0,0x46,0x00,0x57,0x92,0x34,0x2c,0x5a,0xc2,0x4d,0x64,0x56 },
{ 0xe4,0xc8,0x6a,0x69,0xe5,0xce,0xbf,0xc6,0xaa,0xd3,0x2c,0x99,0x44,0xe8,0x9e,0xc4,0xbc,0x0e,0x85,0xc2,0x81,0x90,0x38,0x3f,0x89,0xdf,0xd1,0xe6,0x41,0xfe,0x28,0x72 },
{ 0xa1,0xc9,0x7a,0xf2,0xbf,0x11,0xcb,0x29,0x4a,0xe5,0xa7,0x91,0xfd,0x99,0xa1,0x66,0x6f,0xed,0x1d,0xd1,0xa3,0x9f,0x73,0x7c,0xf4,0x75,0x81,0xcf,0x4e,0x69,0x3f,0x55 },
{ 0x25,0x99,0xeb,0xe6,0x53,0xf1,0x5e,0x06,0x38,0xf2,0xa4,0xd2,0xb3,0x46,0x30,0xad,0x8f,0x50,0xf4,0x7b,0x95,0x16,0xa5,0x4a,0xda,0xc3,0xaa,0x59,0x1f,0x94,0x3e,0x1e },
{ 0x44,0x0d,0xe8,0x15,0x8b,0xf2,0xf2,0x5a,0xe6,0xb5,0x74,0x30,0xe4,0x7a,0x78,0x1a,0x57,0x6c,0xf1,0xda,0x38,0xfa,0x2d,0x01,0xf6,0x99,0xc2,0x60,0x82,0x5b,0xf7,0x45 },
{ 0xe1,0x08,0xa0,0x7b,0xa7,0xf1,0x67,0xf9,0xc3,0x7b,0x5f,0x58,0xf2,0xc5,0x79,0x5e,0x0d,0x1f,0xa5,0x81,0x12,0x1b,0x88,0xa3,0xc0,0x54,0x5f,0x5d,0xc5,0x6a,0xe6,0x2f },
{ 0x2c,0x82,0xdd,0x04,0xb4,0xba,0xe2,0x68,0x9a,0xf4,0x90,0x88,0xe0,0xb9,0x5e,0x4d,0x90,0x52,0x42,0x74,0xdf,0x81,0xa6,0x97,0x45,0x44,0xac,0xaa,0xce,0x0c,0xa5,0x7f },
{ 0xce,0x8f,0x52,0xec,0xb3,0x1b,0xd4,0x43,0xfe,0x8a,0xa4,0x4a,0x49,0x1c,0x3a,0x3a,0x16,0x25,0x11,0xbb,0xd8,0x78,0x8a,0xab,0xf8,0x6a,0x6c,0x13,0xf3,0x07,0xeb,0x27 },
{ 0xbd,0x14,0xbf,0x74,0x8d,0x71,0x78,0x9d,0x59,0xbe,0x89,0x27,0xb6,0x7f,0x77,0xe5,0x38,0xfb,0x13,0x9f,0x1f,0x74,0x91,0x3a,0xd7,0x58,0x98,0x06,0x53,0x80,0xcd,0x2f },
{ 0x71,0xd5,0x96,0xaf,0xb9,0x34,0x30,0x00,0x59,0x7c,0x6e,0x2b,0x9b,0xf6,0xc5,0x0a,0x99,0x62,0x01,0xf4,0x4d,0xb5,0x7e,0x22,0x59,0x87,0x3b,0x76,0x9b,0x58,0x61,0x6c },
{ 0x80,0x12,0xaa,0xa6,0xeb,0x0c,0x15,0xd0,0x4d,0x94,0x89,0x6c,0xcd,0x98,0x56,0xc4,0xa4,0x59,0x58,0x36,0xf3,0xf0,0x11,0xad,0x8a,0xad,0xe3,0xc8,0x21,0x99,0x00,0x79 },
{ 0xe3,0xc6,0x3b,0x99,0x89,0x4a,0xfc,0x06,0xb9,0x78,0xd5,0x2e,0xac,0x9a,0xdf,0xf4,0x50,0x63,0xa9,0xf3,0x64,0x90,0xd5,0x40,0x92,0xc4,0x06,0x8f,0x42,0x51,0xb1,0x4b },
{ 0xf0,0x5d,0xb2,0x1e,0x63,0x30,0x0b,0x8a,0x42,0x87,0x02,0x24,0xda,0x86,0xe7,0xc2,0x0a,0xc4,0xe7,0x59,0xa3,0x36,0xb0,0x30,0xdc,0x4b,0x54,0xef,0x24,0x72,0xb3,0x11 },
{ 0x4d,0xd4,0x0f,0x13,0xa8,0xe9,0x7b,0x15,0x7b,0xa7,0xa5,0x13,0xb4,0x82,0xb4,0xb5,0xd8,0xc0,0x56,0x46,0x87,0x32,0x9d,0x3d,0x87,0x82,0xf9,0xce,0x6a,0xfa,0x71,0x33 },
{ 0x56,0x67,0x1a,0xf2,0x7b,0x04,0xb5,0x19,0x24,0xa4,0x54,0xf4,0xc2,0xd8,0x17,0xf7,0x27,0x91,0xa3,0x35,0x4e,0x5e,0x57,0x75,0x15,0x34,0x00,0xdd,0x76,0x88,0x17,0x34 },
{ 0xa2,0xce,0xa7,0xb2,0x7a,0xa9,0x52,0x62,0x9b,0x69,0x00,0x5d,0xbf,0x38,0x6d,0xb0,0xc6,0x85,0x46,0x57,0xdd,0xbd,0x8a,0xb2,0xb1,0x1e,0xbe,0x3a,0xbd,0xa6,0xa0,0x6d },
{ 0x93,0xae,0x77,0x0b,0xdf,0x35,0x43,0x3e,0x69,0x85,0x2a,0xe3,0x58,0x26,0x38,0xd4,0xaf,0x70,0x6a,0xda,0xd2,0xc4,0x2b,0xfb,0x4e,0xac,0x41,0x2a,0x41,0xbe,0x70,0x2d },
{ 0xcd,0x0e,0x22,0x87,0x96,0x54,0xda,0x74,0x31,0xdc,0x13,0x84,0x5c,0xa1,0x47,0xef,0xb6,0x0b,0xb6,0x02,0xd5,0xdd,0x20,0x84,0xdb,0x82,0x03,0x00,0xd5,0xde,0xdf,0x70 },
{ 0x3b,0x03,0xb4,0x60,0x18,0xdb,0x82,0x06,0xab,0xad,0x4e,0x75,0x65,0x32,0x24,0x19,0x41,0xb1,0xe4,0xba,0xac,0xfa,0x0b,0x54,0x33,0xd2,0xf4,0x45,0xda,0xcd,0x8e,0x0c },
{ 0xe0,0x80,0x2b,0x66,0x7f,0x3d,0x6f,0xc7,0xd1,0xb1,0x9f,0xb5,0x4a,0x22,0x64,0xcb,0xa1,0x08,0x33,0x3d,0x9f,0x40,0xe8,0x92,0xb4,0x27,0xd6,0x38,0x4e,0xef,0x32,0x46 },
{ 0xc3,0xf9,0xc5,0x0b,0xe1,0xac,0x60,0xde,0x38,0x22,0x20,0x65,0x4d,0x76,0x93,0xf7,0x52,0x6a,0xd1,0x47,0xab,0xa2,0x0f,0xe9,0xba,0x49,0x85,0xbe,0xcc,0xab,0xb0,0x03 },
{ 0xd4,0x41,0xc4,0x1a,0x93,0x6c,0x97,0xa2,0x9f,0x7f,0x82,0x41,0x4e,0xe1,0x72,0xd5,0x3a,0xc7,0x5f,0xf8,0x0d,0x12,0x48,0x59,0x3a,0xdc,0x6b,0x94,0x69,0x87,0x8b,0x44 },
{ 0x5a,0x78,0xb7,0x94,0xb6,0x65,0x13,0x81,0x32,0x13,0x54,0xda,0x4c,0xaa,0x29,0x7b,0x46,0x5a,0x48,0xc6,0x76,0xea,0x44,0x13,0x51,0x2c,0xf8,0xf2,0xab,0x6f,0xcd,0x65 },
{ 0xec,0xa6,0xe6,0x37,0x3f,0x3e,0xd4,0x73,0xfd,0x74,0xee,0xdf,0x23,0x68,0x05,0xe2,0xc9,0x6f,0x85,0x84,0xa7,0x92,0x07,0x37,0xb9,0xf6,0xcb,0x7b,0xb4,0x93,0xea,0x0f },
{ 0xd7,0xe4,0x1b,0x6b,0x6f,0xf4,0xd8,0x13,0x02,0x39,0xd6,0x0e,0xfc,0xcc,0xc6,0xf0,0xc5,0x27,0x03,0xf4,0xe1,0x38,0x0f,0x50,0xff,0x40,0x3d,0xbc,0x52,0x27,0x6a,0x2b },
{ 0xc0,0xab,0x0a,0x68,0x81,0x3c,0x0a,0xde,0xe6,0x19,0x39,0x57,0x52,0xe9,0x44,0xbe,0x3d,0xa7,0x69,0x68,0x2c,0x2c,0xd8,0xb4,0x3d,0x40,0x2c,0xba,0xcb,0xd5,0x17,0x3e },
{ 0xce,0x9d,0xce,0x7d,0xf7,0x7c,0x46,0x97,0xf8,0x07,0x00,0xde,0x35,0x97,0x26,0x72,0x4e,0xc2,0xdc,0x3c,0xfc,0xe5,0x22,0xe1,0x98,0x2f,0x4a,0xbd,0x6a,0x7b,0x1f,0x45 },
{ 0x3a,0xd8,0xb5,0x92,0xe9,0x3f,0x43,0x48,0xad,0x2c,0x45,0x0c,0xb0,0x22,0xd6,0xce,0x0a,0x34,0x74,0xa1,0x66,0xff,0x89,0xa4,0x19,0xad,0xc2,0x42,0x53,0xf6,0x63,0x7e },
{ 0xa4,0x75,0xd7,0x0c,0x8b,0xdb,0x2f,0x5c,0x3d,0xb0,0x7e,0x42,0x9c,0x1c,0x25,0xa3,0x24,0xc2,0x11,0xa3,0x55,0x94,0xfd,0x93,0xbf,0xee,0x42,0xaa,0x85,0x22,0x42,0x5e },
{ 0x22,0xec,0xc4,0x21,0xa4,0xa0,0x59,0xe8,0x60,0x4b,0xc3,0xec,0xfb,0x51,0x46,0xf3,0x3a,0x75,0xc3,0xa7,0x85,0x6a,0xcd,0xb9,0x47,0x06,0x88,0x2f,0xfb,0x61,0xa5,0x3e },
{ 0xea,0x97,0xda,0xed,0xbc,0xbf,0xa4,0x11,0xde,0x8d,0x94,0x43,0xac,0x4a,0xfd,0x36,0x65,0xa8,0xa3,0x7e,0x1d,0x88,0xaa,0x24,0xd3,0x23,0x9d,0x83,0x06,0x8f,0x37,0x06 },
{ 0xf0,0x5b,0x30,0x54,0xe6,0x01,0x23,0xa7,0x7e,0x5e,0xe3,0xcf,0x83,0x15,0x68,0x82,0x47,0x14,0x0c,0xa5,0xfe,0x4a,0x44,0xd4,0x24,0xa0,0xdc,0xa3,0x70,0xfd,0xce,0x43 },
{ 0x40,0x02,0xc7,0x81,0x55,0x9e,0x49,0x06,0x72,0x9d,0x14,0x14,0x18,0x66,0xa2,0xff,0x67,0x82,0x72,0x84,0xcd,0x0c,0x3f,0x53,0xf8,0x07,0x46,0x0e,0x94,0x0e,0x6c,0x1a },
{ 0xec,0xe4,0xa3,0xe4,0x80,0x42,0x30,0x19,0x50,0x4f,0xaa,0xb1,0xd0,0x4b,0xb6,0x19,0x5c,0xd0,0x6a,0x98,0xf7,0xa0,0x32,0xfb,0x59,0x40,0xec,0x40,0xde,0xad,0xb0,0x72 },
{ 0x7c,0xe6,0x0b,0x1e,0xdd,0xb7,0xb7,0x38,0xd7,0xa2,0xb8,0x80,0xc5,0xa5,0x74,0x86,0xb8,0x64,0xd1,0x2e,0x96,0x6c,0x19,0x3a,0x73,0x6f,0x0c,0x40,0x69,0xfc,0x15,0x1b },
{ 0x4c,0x01,0xc9,0xd2,0x10,0xbd,0xbc,0x1f,0xff,0x99,0x65,0xd6,0x05,0xb4,0x0a,0xc2,0x25,0x49,0x85,0x4d,0x21,0x14,0x4a,0x0e,0x36,0xe6,0xb3,0x1b,0x4f,0x60,0xf0,0x11 },
{ 0x5e,0x70,0x53,0x3a,0x47,0xa3,0x5d,0xb0,0x1a,0xd9,0xb7,0xf7,0x4f,0xa2,0xa2,0x2e,0xce,0x8b,0x6d,0xfe,0x9e,0x31,0x38,0x8e,0xff,0xfb,0x21,0x6c,0x50,0x2b,0xed,0x24 },
{ 0x9e,0x85,0xc5,0xb0,0x06,0xdc,0xf5,0x7e,0xb2,0x78,0xc2,0xec,0x3c,0xab,0x55,0xaf,0x0e,0x6f,0xd5,0xf4,0xf5,0xcf,0x8b,0x57,0x19,0x7b,0x1a,0xbf,0x8a,0x28,0x30,0x24 },
{ 0xb4,0x5e,0x7a,0x6a,0x8d,0xa4,0x05,0x7b,0x85,0xf4,0x54,0x06,0xa5,0x9d,0x97,0x6d,0x1c,0x8c,0x6b,0x32,0x82,0x4f,0xba,0x18,0x1d,0xf9,0xc3,0x63,0xbe,0x49,0x62,0x46 },
{ 0x0e,0xb7,0xdf,0x70,0x5c,0x6e,0xa4,0x80,0x4d,0x78,0x18,0x76,0x62,0x0e,0xcc,0x64,0x3e,0x1f,0x15,0x34,0x2f,0x3d,0x51,0x99,0x47,0x5d,0x28,0x9a,0xac,0x89,0x37,0x5b },
{ 0x10,0x38,0x87,0x2a,0xbc,0xee,0x1d,0x94,0xbc,0x8b,0xe4,0xcf,0x4b,0xb7,0x54,0xa2,0xea,0xa7,0xa0,0x8d,0xd1,0x0d,0x0d,0xe1,0x4d,0x18,0x1b,0xa5,0xc2,0xba,0xb8,0x74 },
{ 0x54,0x00,0x6a,0x1f,0x61,0x47,0x62,0x81,0x67,0x99,0xc0,0xa3,0xfc,0x00,0xf4,0x71,0xc6,0x68,0x24,0xe2,0x8a,0x36,0x33,0x09,0xc1,0x88,0x0a,0xa2,0xc0,0x3c,0x04,0x04 },
{ 0xef,0x3e,0xe6,0x2e,0x18,0x00,0x3f,0xc8,0x66,0x08,0xf8,0xe5,0xa9,0xc5,0x25,0x8a,0x1a,0x92,0x43,0x93,0x96,0x88,0xf4,0x8e,0xc9,0xa9,0x81,0xa6,0x2d,0x75,0x96,0x69 },
{ 0x95,0x3d,0xff,0x40,0x08,0x62,0xe7,0x14,0x0c,0xac,0x7d,0x9b,0xcb,0x47,0xd9,0x20,0x62,0x7b,0x4b,0xd9,0x91,0x3b,0x4b,0x2b,0x0e,0x1c,0xf1,0x10,0xbe,0x53,0xd4,0x42 },
{ 0xc6,0x93,0xdb,0xf7,0x70,0xa3,0xd0,0xd8,0x41,0x2e,0xa0,0xa0,0x22,0xa8,0x75,0x2b,0xeb,0xf4,0xbd,0x76,0x73,0x03,0xb1,0x8e,0x11,0xb9,0xd1,0x6d,0xea,0xe6,0x3b,0x01 },
{ 0x0e,0xd2,0x64,0xa5,0x36,0x8f,0xf8,0xed,0x0a,0x1c,0xcd,0x28,0x58,0xf6,0xdb,0xfd,0x8a,0x88,0x12,0x90,0x37,0x9e,0x9d,0xa2,0x68,0xba,0xc1,0xa6,0x08,0x8b,0xe2,0x08 },
{ 0xa4,0x86,0x04,0x50,0x26,0xba,0x84,0x28,0xaa,0x8c,0x34,0xa9,0x36,0x56,0x24,0x6c,0xd8,0x78,0x18,0x7a,0x38,0x9f,0x1a,0x56,0xe5,0xf1,0x85,0x53,0x90,0xe2,0xc8,0x7d },
{ 0xd1,0x34,0x09,0x31,0xc2,0xcd,0xed,0xa1,0xd7,0xf2,0x9b,0x15,0xb6,0xf2,0xa4,0xc3,0x6d,0xd4,0x36,0x15,0xf6,0xd0,0x13,0x55,0x03,0xef,0xd2,0x27,0xf8,0xf9,0x4b,0x72 },
{ 0x44,0x39,0x8c,0x0f,0x24,0x53,0xc3,0x57,0x46,0x99,0x0a,0xac,0x8d,0xc5,0xe5,0x35,0xd7,0x30,0x93,0x3c,0xc9,0x27,0x0c,0x88,0x2e,0xa3,0x70,0xf7,0x13,0xd0,0xbc,0x07 },
{ 0xcb,0x87,0x51,0xb4,0x6c,0x54,0xd0,0x67,0x17,0x91,0x11,0x34,0xda,0xb5,0x33,0x1e,0x4d,0xfb,0x46,0xfa,0x45,0xef,0xd1,0x99,0xe0,0xef,0xd3,0xf2,0xac,0x5a,0x3d,0x12 },
{ 0x34,0x0f,0x84,0x28,0x12,0x04,0x11,0xa2,0x63,0x67,0x1d,0x2e,0x63,0x67,0x16,0xc0,0x52,0xec,0xd2,0x46,0xcd,0x72,0x54,0x44,0x40,0x31,0x38,0x2a,0x16,0x60,0x26,0x59 },
{ 0x34,0x36,0x13,0x10,0x2a,0x94,0xe5,0xf0,0x03,0x12,0x62,0x19,0x5d,0xa2,0x63,0x05,0xc6,0xbb,0x24,0xbb,0x3a,0x0c,0xdc,0x5d,0x53,0x03,0x7f,0x04,0xdc,0xc0,0xcf,0x58 },
{ 0xbf,0x10,0xab,0xf9,0x35,0xd2,0x94,0xb5,0xe2,0x42,0x16,0xb4,0x23,0x88,0x25,0x1a,0x23,0x16,0x60,0xff,0xc8,0xd5,0x03,0xbf,0xbf,0xd6,0xc1,0xb7,0xda,0xe9,0xa6,0x6b },
{ 0x41,0xda,0x96,0x26,0x8d,0x7f,0x7a,0x85,0x1c,0xaa,0x4d,0x3a,0xa1,0x7d,0x51,0x50,0x9a,0x77,0xb7,0xc8,0xcc,0x7e,0x40,0x41,0xb1,0xfc,0x83,0x5d,0xc3,0x36,0xf6,0x1a },
{ 0x73,0x19,0xa1,0x81,0x1c,0x8f,0x4e,0xc9,0x70,0x10,0x44,0xc8,0xc3,0x5a,0x1b,0x84,0xf5,0x4a,0x93,0x75,0x69,0xb2,0x21,0x69,0x12,0x36,0x6f,0x08,0xb3,0x15,0xd4,0x7f },
{ 0x91,0x63,0x55,0xeb,0x1d,0x6e,0xb0,0xdd,0xd6,0x00,0xac,0x37,0xe2,0xe5,0x99,0x6b,0x85,0x2e,0x10,0x8b,0xd1,0x41,0x0d,0x85,0xe4,0xd2,0x1f,0x2c,0x3e,0xb8,0x4b,0x37 },
{ 0xbf,0x33,0xe4,0xa4,0x34,0x88,0x86,0xa4,0xef,0x75,0x41,0x74,0xfa,0x5c,0x2b,0xbf,0x51,0xc0,0xed,0x2a,0x08,0x1f,0x1d,0xa3,0x20,0x5d,0xd9,0x9e,0xc3,0x7e,0x2e,0x0a },
{ 0xae,0x20,0x8c,0x37,0xb8,0xd0,0x76,0x45,0x56,0x41,0x80,0xc6,0xae,0xa8,0x71,0x09,0x60,0x8f,0x20,0x58,0x9a,0x19,0x46,0x6d,0xc3,0xb4,0x32,0x86,0x05,0xa8,0x89,0x41 },
{ 0x78,0x31,0xc3,0xdb,0x55,0xef,0x27,0xb3,0x1d,0x04,0xd5,0x7c,0x06,0xa9,0xf8,0x9b,0x5e,0x5a,0xb9,0x00,0x28,0xe6,0xf9,0x5b,0x5e,0xaa,0xe9,0x9c,0x3f,0xce,0xf7,0x0e },
{ 0x6d,0x33,0x2c,0xc7,0xb8,0xff,0x4a,0x5c,0xff,0xf7,0xe8,0xff,0x4c,0xb8,0x89,0x97,0x28,0x29,0x21,0xd0,0xe5,0xfe,0xb2,0x90,0x54,0x8c,0xed,0x81,0x4f,0xed,0x69,0x25 },
{ 0x16,0x59,0x74,0x83,0xd8,0x34,0x92,0xd5,0x0b,0x54,0x8a,0x06,0xd1,0x5d,0x8b,0x5c,0xdf,0xc0,0x09,0x07,0x1d,0x0f,0x7e,0xd9,0x3a,0x5d,0x2b,0x86,0xca,0x23,0xe0,0x52 },
{ 0x0e,0xc1,0xce,0x0f,0x6e,0x8d,0x7b,0x30,0x75,0x69,0x1b,0xf4,0x87,0x2f,0x0c,0x6d,0x6d,0xc4,0x11,0x43,0xfd,0x3b,0xdb,0xdf,0x43,0x9a,0xda,0xc6,0x50,0xf9,0x84,0x03 },
{ 0xbd,0x1b,0x2a,0x42,0xd3,0xa6,0x7e,0x51,0xe2,0xaa,0x68,0x77,0xdb,0x64,0xa7,0x70,0x0c,0x8d,0xf2,0x33,0xe1,0xdf,0x6d,0x8a,0xaf,0x81,0xe8,0x50,0xca,0x12,0xd3,0x1a },
{ 0x84,0x7c,0x0d,0x2c,0x37,0x52,0x34,0xf3,0x65,0xe6,0x60,0x95,0x51,0x87,0xa3,0x73,0x5a,0x0f,0x76,0x13,0xd1,0x60,0x9d,0x3a,0x6a,0x4d,0x8c,0x53,0xae,0xaa,0x5a,0x22 },
{ 0xbd,0x1b,0x2a,0x42,0xd3,0xa6,0x7e,0x51,0xe2,0xaa,0x68,0x77,0xdb,0x64,0xa7,0x70,0x0c,0x8d,0xf2,0x33,0xe1,0xdf,0x6d,0x8a,0xaf,0x81,0xe8,0x50,0xca,0x12,0xd3,0x1a },
{ 0x84,0x7c,0x0d,0x2c,0x37,0x52,0x34,0xf3,0x65,0xe6,0x60,0x95,0x51,0x87,0xa3,0x73,0x5a,0x0f,0x76,0x13,0xd1,0x60,0x9d,0x3a,0x6a,0x4d,0x8c,0x53,0xae,0xaa,0x5a,0x22 },
{ 0xbd,0x1b,0x2a,0x42,0xd3,0xa6,0x7e,0x51,0xe2,0xaa,0x68,0x77,0xdb,0x64,0xa7,0x70,0x0c,0x8d,0xf2,0x33,0xe1,0xdf,0x6d,0x8a,0xaf,0x81,0xe8,0x50,0xca,0x12,0xd3,0x1a },
{ 0x7a,0xd9,0xcf,0x6e,0x89,0xb7,0x50,0x54,0x25,0xaf,0xf9,0x54,0xe8,0x9c,0xa2,0x2b,0x6c,0x62,0x88,0x4e,0x8c,0xb6,0x28,0x32,0x2f,0x9c,0xce,0x85,0xcb,0x2c,0xfa,0x4a },
{ 0x7c,0x2c,0x45,0x89,0x03,0xe6,0x74,0xca,0xbb,0x01,0x27,0xcc,0xce,0xd3,0x93,0xa3,0xf1,0x48,0x40,0xf8,0x0d,0xe7,0x70,0xee,0x82,0xa0,0x03,0xdb,0x37,0x2c,0x17,0x07 },
{ 0x56,0x54,0xd6,0xfa,0x8a,0x32,0x51,0x50,0x48,0x0d,0x0c,0x1e,0x3e,0xe9,0x4c,0xf3,0x0d,0x36,0x5f,0xeb,0xb3,0x93,0xcf,0xbf,0x8b,0x09,0x16,0x21,0x1a,0xbf,0x91,0x75 },
{ 0x44,0x20,0x79,0xef,0x16,0xfd,0x61,0xcf,0xf2,0xe0,0xad,0xf4,0x39,0x73,0x92,0x65,0x6d,0x9b,0x44,0xea,0xad,0x4c,0xc7,0x28,0x05,0xe7,0x81,0xa0,0xdc,0x65,0xe7,0x1d },
{ 0xc5,0xdb,0x52,0xd5,0xb0,0xf9,0xfa,0x5f,0x68,0x79,0x06,0xf9,0x29,0x3d,0x83,0xca,0x32,0x5a,0xd4,0x93,0xd3,0x10,0x5c,0x80,0x64,0xe4,0x10,0xe2,0x78,0x20,0xb5,0x0d },
{ 0x0d,0xd8,0x0f,0x97,0x4d,0xa1,0xe8,0x7b,0x4c,0xc4,0x88,0xaa,0xb7,0x5e,0x78,0x91,0x56,0x6d,0x11,0x28,0xea,0xbf,0x2d,0xc0,0xf8,0x95,0x3f,0xc7,0x86,0x24,0x27,0x5f },
{ 0x22,0x0f,0xe3,0xf9,0xd6,0x06,0x8a,0xf3,0x34,0xe4,0xb9,0x9a,0xa2,0x65,0x73,0x48,0xaa,0x63,0x4f,0x5c,0xf2,0x60,0x61,0x9e,0xb1,0x73,0x42,0x95,0x80,0xcc,0x7e,0x19 },
{ 0xa1,0x24,0xc9,0xf3,0x13,0x29,0x11,0x9c,0x2c,0x8c,0x27,0x12,0x7c,0x35,0xc4,0x71,0x6b,0x9c,0xa2,0x97,0x9a,0x99,0xf8,0xce,0x2a,0xf4,0xa4,0x2e,0x19,0xd6,0x5e,0x7b },
{ 0x7e,0x6f,0xa1,0xca,0x0d,0x7b,0xd7,0x7e,0x3c,0x19,0x8f,0x01,0xe2,0xf0,0xe8,0xd8,0xe4,0x00,0x7a,0x1c,0xdf,0xcd,0x1e,0xc5,0x0b,0x78,0x32,0x06,0x76,0xbf,0xdb,0x68 },
{ 0x2c,0x5a,0x55,0xfe,0x30,0xa1,0x81,0x10,0xe4,0x3d,0xad,0x52,0x02,0x75,0x0d,0xe0,0x2c,0xdd,0x8c,0x14,0x6d,0xab,0x9c,0x40,0xb0,0xdc,0x60,0x26,0xd3,0x64,0x6e,0x28 },
{ 0x84,0x7c,0x0d,0x2c,0x37,0x52,0x34,0xf3,0x65,0xe6,0x60,0x95,0x51,0x87,0xa3,0x73,0x5a,0x0f,0x76,0x13,0xd1,0x60,0x9d,0x3a,0x6a,0x4d,0x8c,0x53,0xae,0xaa,0x5a,0x22 },
tinyssh-20240101/crypto-tests/precomp_curve25519.data.py 0000664 0000000 0000000 00000003677 14544472107 0022714 0 ustar 00root root 0000000 0000000 import binascii
P = 2 ** 255 - 19
A = 486662
def expmod(b, e, m):
if e == 0: return 1
t = expmod(b, e / 2, m) ** 2 % m
if e & 1: t = (t * b) % m
return t
def inv(x):
return expmod(x, P - 2, P)
# Addition and doubling formulas taken from Appendix D of "Curve25519:
# new Diffie-Hellman speed records".
def add((xn,zn), (xm,zm), (xd,zd)):
x = 4 * (xm * xn - zm * zn) ** 2 * zd
z = 4 * (xm * zn - zm * xn) ** 2 * xd
return (x % P, z % P)
def double((xn,zn)):
x = (xn ** 2 - zn ** 2) ** 2
z = 4 * xn * zn * (xn ** 2 + A * xn * zn + zn ** 2)
return (x % P, z % P)
def curve25519(n, base):
one = (base,1)
two = double(one)
# f(m) evaluates to a tuple containing the mth multiple and the
# (m+1)th multiple of base.
def f(m):
if m == 1: return (one, two)
(pm, pm1) = f(m / 2)
if (m & 1):
return (add(pm, pm1, one), double(pm1))
return (double(pm), add(pm, pm1, one))
((x,z), _) = f(n)
return (x * inv(z)) % P
def unpack(s):
if len(s) != 32: raise ValueError('Invalid Curve25519 argument')
return sum(ord(s[i]) << (8 * i) for i in range(32))
def pack(n):
return ''.join([chr((n >> (8 * i)) & 255) for i in range(32)])
def clamp(n):
n &= ~7
n &= ~(128 << 8 * 31)
n |= 64 << 8 * 31
return n
def crypto_scalarmult_curve25519(n, p):
n = clamp(unpack(n))
p = unpack(p)
return pack(curve25519(n, p))
def crypto_scalarmult_curve25519_base(n):
n = clamp(unpack(n))
return pack(curve25519(n, 9))
f = open("precomp.txt")
def l(line):
l = ""
for i in range(32):
if i == 31:
l += "0x%s%s" % (line[2*i], line[2*i+1])
else:
l += "0x%s%s," % (line[2*i], line[2*i+1])
return l
while True:
line=f.readline()
if len(line) == 0:
f.close()
break
print "{", l(binascii.hexlify(crypto_scalarmult_curve25519_base(binascii.unhexlify(line[0:-1])))), "},"
tinyssh-20240101/crypto-tests/precomp_ed25519.data 0000664 0000000 0000000 00000534030 14544472107 0021521 0 ustar 00root root 0000000 0000000 { 0x3b,0x6a,0x27,0xbc,0xce,0xb6,0xa4,0x2d,0x62,0xa3,0xa8,0xd0,0x2a,0x6f,0x0d,0x73,0x65,0x32,0x15,0x77,0x1d,0xe2,0x43,0xa6,0x3a,0xc0,0x48,0xa1,0x8b,0x59,0xda,0x29 },
{ 0x4c,0xb5,0xab,0xf6,0xad,0x79,0xfb,0xf5,0xab,0xbc,0xca,0xfc,0xc2,0x69,0xd8,0x5c,0xd2,0x65,0x1e,0xd4,0xb8,0x85,0xb5,0x86,0x9f,0x24,0x1a,0xed,0xf0,0xa5,0xba,0x29 },
{ 0x74,0x22,0xb9,0x88,0x75,0x98,0x06,0x8e,0x32,0xc4,0x44,0x8a,0x94,0x9a,0xdb,0x29,0x0d,0x0f,0x4e,0x35,0xb9,0xe0,0x1b,0x0e,0xe5,0xf1,0xa1,0xe6,0x00,0xfe,0x26,0x74 },
{ 0xf3,0x81,0x62,0x6e,0x41,0xe7,0x02,0x7e,0xa4,0x31,0xbf,0xe3,0x00,0x9e,0x94,0xbd,0xd2,0x5a,0x74,0x6b,0xee,0xc4,0x68,0x94,0x8d,0x6c,0x3c,0x7c,0x5d,0xc9,0xa5,0x4b },
{ 0xfd,0x50,0xb8,0xe3,0xb1,0x44,0xea,0x24,0x4f,0xbf,0x77,0x37,0xf5,0x50,0xbc,0x8d,0xd0,0xc2,0x65,0x0b,0xbc,0x1a,0xad,0xa8,0x33,0xca,0x17,0xff,0x8d,0xbf,0x32,0x9b },
{ 0x3e,0xe2,0xa8,0xa7,0x28,0x3c,0xb2,0xfd,0x72,0x89,0x43,0xda,0xa1,0x27,0xef,0x09,0xe4,0x83,0x07,0x1a,0x8b,0x4b,0xc6,0x99,0xba,0x45,0x22,0xf0,0x9b,0x14,0xcf,0xde },
{ 0xbe,0x3b,0x4f,0x95,0xd1,0xd8,0x75,0xd7,0x1d,0xd2,0xfa,0xcf,0x6c,0x5e,0x4d,0xa5,0x7c,0x1a,0x2c,0x79,0xde,0xad,0x9e,0x1f,0xc5,0xc3,0xb5,0xc1,0xde,0x54,0xc0,0x22 },
{ 0x67,0x54,0x03,0x04,0x32,0x88,0xcc,0x7c,0xd1,0x10,0xc6,0xa4,0xa7,0x0e,0xca,0x13,0x7b,0x6e,0xba,0x5b,0xb8,0xcf,0xc0,0x08,0xa4,0x0c,0xdf,0xb3,0xe4,0x53,0xc2,0x9e },
{ 0xb9,0x2a,0xaa,0x7c,0x8d,0xb2,0x11,0x39,0xaa,0x7d,0x7e,0xc0,0xda,0xa8,0xd7,0xe6,0x25,0x19,0xd6,0xee,0x46,0xa4,0x53,0x4e,0x07,0x64,0x4c,0x68,0x3a,0x00,0x83,0x91 },
{ 0x17,0x26,0x06,0x22,0x77,0xd7,0xb6,0x81,0x78,0x7e,0x95,0xda,0x60,0xff,0xf0,0x32,0xd2,0xe9,0x8c,0xf3,0xd4,0x04,0xea,0xb2,0x82,0x1c,0x49,0x80,0x6e,0x67,0x9f,0x3e },
{ 0xc0,0x5b,0x7b,0xee,0x64,0xc8,0x4c,0x7a,0xd8,0x0e,0x45,0xac,0x14,0xe9,0x8b,0x3e,0x3e,0x64,0x50,0x29,0x02,0x40,0x1d,0xc4,0x91,0x12,0x6d,0xaf,0xc1,0xe9,0x38,0x61 },
{ 0xd7,0xdd,0xc4,0xe7,0x91,0x66,0x90,0xdc,0xd6,0x6f,0xc9,0x62,0x93,0xbd,0x3d,0x39,0x98,0x79,0xac,0x73,0x6b,0x7d,0x1b,0x86,0xcf,0x45,0xa8,0x44,0x30,0x96,0x65,0xbd },
{ 0xc0,0xdd,0x26,0x97,0xc4,0xa1,0x7d,0xf8,0x3f,0x36,0xa9,0x97,0x99,0xdd,0x38,0x49,0x58,0x72,0x84,0x90,0xfa,0xc7,0xd1,0x31,0x82,0x05,0x2d,0x88,0x4e,0x6e,0x42,0x84 },
{ 0xed,0x85,0xe2,0x1f,0x75,0x15,0x5c,0x85,0x01,0x51,0xa8,0x61,0xd5,0x7d,0x62,0xe6,0x56,0x98,0x9a,0x3d,0x2d,0x6c,0x3e,0xe1,0xfc,0x2c,0xe9,0x26,0x71,0x6a,0x20,0xf4 },
{ 0xbe,0x1f,0xb9,0x96,0xbe,0x80,0xe7,0xbd,0x2b,0x78,0xda,0x15,0x7a,0x22,0x4a,0xb5,0x23,0x20,0xcc,0xa0,0x2a,0xe5,0xa0,0x2e,0xfb,0xb4,0x19,0x17,0x9b,0xe9,0x28,0xf9 },
{ 0x56,0x99,0xa9,0xce,0xf8,0x70,0xe2,0xff,0x0c,0x02,0x2b,0x67,0x68,0x9c,0xc7,0x6f,0xe0,0x5e,0x90,0x91,0x5c,0x5f,0x01,0x43,0xf9,0x35,0x6c,0xa7,0x2f,0x4a,0xff,0x99 },
{ 0x79,0xf6,0xd7,0xbe,0x8a,0x5a,0xc1,0xa6,0xff,0x6a,0xcc,0x51,0xbb,0xa8,0x0c,0x52,0x39,0x96,0x27,0x60,0x23,0x06,0x72,0x82,0x93,0xe7,0x59,0x5f,0x7e,0xcf,0x30,0x7f },
{ 0xec,0x9c,0x1a,0xce,0xd4,0xc1,0x81,0xc9,0xf7,0x52,0x6b,0x68,0xab,0x6c,0x7d,0x44,0xdd,0x22,0xee,0x94,0x2d,0xb1,0x1b,0xd0,0xf8,0xb3,0x02,0x5f,0xcd,0xc5,0x1f,0x79 },
{ 0x1c,0x3c,0x06,0x41,0x2d,0xc1,0x8c,0xbb,0xa8,0x79,0xb8,0xd4,0x73,0xc5,0x0f,0xb4,0x19,0xdb,0x5c,0xa9,0xc3,0x88,0x2f,0x2a,0x1d,0xc4,0x9e,0xbc,0x8d,0x9e,0x43,0x54 },
{ 0x04,0x54,0xa2,0x0a,0x28,0xf9,0x2e,0xd2,0x44,0xb7,0x36,0x72,0xce,0x85,0x67,0x0a,0x89,0xee,0x77,0x25,0x54,0x72,0xe0,0x85,0x10,0x42,0xbd,0x9f,0x3d,0xbb,0x7d,0xe8 },
{ 0x23,0xd6,0x93,0x5a,0x75,0xf6,0x99,0xc0,0x0c,0x47,0x32,0xd8,0x0a,0xcd,0x3b,0x2d,0xfa,0x03,0x6e,0x8c,0x46,0x36,0x30,0xd3,0x4c,0x5a,0xa8,0x4d,0x57,0x67,0x2d,0xd6 },
{ 0x85,0xe0,0x32,0x88,0x6c,0xfc,0xf8,0xaf,0xae,0x03,0xb1,0x81,0x22,0x8e,0x23,0x9a,0x92,0x3b,0x8b,0x63,0xa2,0x87,0x89,0x4d,0xad,0x4e,0x0b,0x4a,0xce,0x18,0x7d,0x99 },
{ 0x3c,0xc6,0xd8,0xb8,0x0f,0x0b,0x78,0xa7,0x5f,0x2b,0xad,0x3b,0x90,0x7c,0x53,0xb0,0xb0,0x48,0x19,0x95,0x14,0x39,0x93,0x55,0xe5,0xf0,0x85,0x34,0x56,0xe8,0xb6,0xd6 },
{ 0x0d,0xdf,0x68,0xb9,0xa7,0x93,0x1d,0x32,0x5b,0x36,0xd0,0xa1,0x5e,0x2b,0x04,0xc8,0x37,0x9a,0x76,0xf4,0x7d,0x1d,0x4a,0xaf,0xcd,0xb4,0xeb,0xbe,0x88,0x4b,0x19,0x66 },
{ 0xf0,0xea,0xa2,0x8b,0xf5,0x4f,0x04,0x0f,0x73,0xd8,0x42,0xd0,0x1f,0xfb,0xa1,0x42,0xe2,0xdd,0x28,0x01,0x59,0xbd,0x82,0x00,0x9a,0x42,0xbf,0xbb,0x5d,0xa7,0x2d,0x62 },
{ 0xbd,0xcd,0x64,0xae,0x7a,0xdd,0xa4,0xfd,0x24,0x0d,0xa5,0x00,0x16,0xc3,0xf5,0x19,0x7d,0x5e,0xa9,0xfa,0x28,0xf5,0x66,0x47,0xff,0x9f,0x79,0x94,0xe2,0xd7,0x5b,0x0c },
{ 0xe4,0xa6,0x30,0x99,0x3b,0xf3,0xae,0x0d,0x33,0x35,0x6b,0x13,0x88,0x19,0xd8,0x70,0xc5,0x47,0x68,0x25,0xdb,0x39,0x14,0xc9,0xde,0xd3,0x92,0xcf,0x44,0x3b,0xbc,0x6f },
{ 0x7f,0xf7,0xbc,0x16,0x71,0x02,0x0f,0x3a,0x07,0xe7,0x80,0xfb,0x39,0x9d,0x8a,0x68,0x83,0x4a,0x48,0xfb,0xf6,0x22,0x65,0x50,0x1b,0xf8,0x80,0x82,0x79,0x7b,0x91,0x3f },
{ 0xce,0x97,0xbe,0xb9,0x0a,0xa1,0x1a,0xd3,0xe0,0x0c,0x6e,0xed,0x4f,0xb2,0x0e,0x8b,0x8a,0xb7,0xee,0x34,0x12,0x97,0x97,0xe2,0x20,0x3f,0x93,0x1e,0x17,0xd1,0xbd,0x68 },
{ 0x00,0x9d,0x83,0x49,0x63,0x7c,0xa9,0x8e,0xb1,0xa8,0xb9,0x5a,0x8b,0x94,0x86,0xe9,0x88,0x2c,0x76,0x64,0x3c,0xc1,0xd7,0xd1,0xbb,0xd6,0x3d,0x83,0xf3,0xfc,0x6e,0xfc },
{ 0x8c,0x70,0x38,0x3f,0x69,0x15,0x85,0x4b,0xf2,0x89,0x59,0xc7,0x73,0x81,0xba,0x6a,0xd4,0xb6,0xed,0x44,0x7e,0x04,0x64,0x56,0x95,0x48,0x4b,0x47,0xc6,0xa1,0xa9,0xf9 },
{ 0x58,0x7d,0x18,0xf6,0xa4,0xc2,0x63,0xef,0xf8,0x2c,0x45,0xe9,0x43,0xd9,0xd6,0x4c,0x0e,0x6a,0x47,0x33,0x22,0x5d,0xb6,0xc1,0xce,0x50,0xc3,0x5c,0x65,0x10,0xc4,0x2f },
{ 0x05,0xe5,0x0a,0xf9,0x1e,0xa6,0x0c,0xa5,0xb6,0xd3,0xa4,0xe8,0x2a,0x83,0x2a,0x42,0x6b,0x2d,0x9f,0x82,0xe0,0x53,0x58,0x9a,0x86,0x2f,0xd2,0x36,0xbc,0x69,0xe5,0xb9 },
{ 0xf2,0x3c,0xbb,0x8f,0x25,0xda,0xd2,0x32,0xb6,0x70,0xb5,0x07,0xe2,0xe5,0x6b,0x14,0xc5,0x1d,0x16,0x20,0x7c,0xfb,0x62,0xf1,0x36,0xe5,0x71,0x71,0x08,0xcd,0x03,0x96 },
{ 0x4c,0x96,0xab,0xd4,0xaa,0xa9,0x7e,0xe9,0x75,0xa7,0x64,0xc4,0x62,0xea,0x36,0x46,0x7f,0x75,0x4e,0x67,0x91,0x21,0x31,0x66,0xe4,0x69,0x28,0x2f,0x91,0xc9,0xe1,0xde },
{ 0x30,0x16,0x16,0xaa,0xb9,0xf9,0x7e,0x93,0x9a,0x17,0x38,0x7e,0xe7,0x20,0x29,0x66,0xa9,0xcc,0x09,0x5b,0xa7,0x7c,0x2f,0xa2,0x68,0xb0,0x3d,0xd8,0xf2,0xf1,0x61,0x46 },
{ 0xea,0x97,0x2d,0xbb,0x00,0x34,0x7f,0x27,0x0b,0x96,0xda,0xf9,0xef,0xe3,0x24,0x39,0x17,0x67,0x56,0xea,0xce,0xea,0x98,0x56,0x63,0x6f,0x52,0xf3,0xc0,0xa7,0x54,0x9e },
{ 0xbf,0x31,0x82,0x53,0x80,0x46,0xc4,0x12,0xe7,0xc2,0x2e,0xd7,0x58,0x15,0xde,0x04,0x99,0x3e,0x7a,0x51,0x38,0x78,0x18,0x6b,0x79,0xfe,0xdc,0x7a,0x2d,0xd3,0x61,0x32 },
{ 0x67,0x60,0xcd,0x63,0xb9,0x5f,0x5b,0xfa,0x0a,0x84,0x81,0xe2,0x33,0x24,0xb1,0x50,0x4b,0x1d,0x9a,0xad,0xaa,0xa3,0x6e,0x67,0x98,0xe6,0xff,0x64,0xa6,0x33,0xb8,0x68 },
{ 0x96,0x07,0x91,0xca,0x5b,0x52,0x6e,0xd8,0x01,0x20,0x21,0x24,0x7a,0xed,0xe9,0xb2,0x3e,0x4f,0xba,0xc7,0x39,0xb2,0xfe,0xe8,0x48,0x74,0x91,0xc2,0x8d,0xef,0xe1,0xbf },
{ 0xce,0x58,0xa1,0x36,0x1d,0xef,0x2b,0x6d,0x9e,0xc9,0x07,0x19,0x6f,0x0d,0xda,0xe3,0x08,0xf2,0x0e,0xe3,0x3f,0x68,0x51,0xac,0x86,0xa1,0x46,0x03,0x89,0xb1,0x2f,0x62 },
{ 0x43,0x70,0x82,0x85,0x3d,0x70,0x6c,0xaf,0x45,0xb3,0x17,0x8b,0x60,0x85,0x52,0x18,0x24,0x0b,0xdb,0xa3,0x91,0xa9,0x44,0x96,0x74,0x3b,0xa3,0xae,0x21,0xcb,0x76,0x9c },
{ 0x9a,0x88,0xed,0x92,0xeb,0x82,0xa9,0xd6,0x08,0x9c,0x72,0x30,0xf4,0x27,0xdc,0x67,0x58,0x00,0xef,0xb8,0xce,0x65,0xeb,0xcd,0xca,0xbd,0xf1,0x7a,0x15,0xdd,0x58,0x8d },
{ 0xb6,0xcd,0xa7,0xc2,0x2f,0x16,0xc2,0x01,0x3d,0xf7,0xf1,0x95,0xd6,0x6d,0xbb,0x22,0xc5,0xe0,0x24,0x05,0x3d,0x6c,0xc7,0x15,0x54,0xb3,0x1d,0x9f,0xd1,0xdd,0x3f,0x1b },
{ 0xce,0x1c,0x43,0x05,0xd4,0x62,0x80,0xbb,0xbd,0x01,0x04,0x88,0x9d,0xc3,0x89,0x21,0x6c,0x74,0x01,0x10,0x86,0xeb,0x66,0x71,0x7a,0xa0,0xba,0xc1,0xbc,0x25,0x89,0x21 },
{ 0x89,0xae,0x5b,0xf7,0x81,0x39,0x3f,0xfd,0xc2,0xe8,0x89,0xcb,0xaa,0xc1,0xad,0xd5,0x1b,0xde,0x8a,0xbe,0xbb,0x60,0x9e,0xdd,0x9f,0x27,0x62,0x5c,0xe2,0x47,0xb8,0x4f },
{ 0xdb,0x70,0x0d,0xc4,0xee,0xcf,0x15,0xab,0x0d,0xa2,0xc7,0xd2,0x5a,0xc2,0x04,0xd8,0x4f,0x08,0x15,0x54,0x53,0xb1,0x2a,0xb5,0x3b,0xf4,0xab,0x86,0x76,0x7b,0x90,0x1f },
{ 0x28,0x99,0x0a,0xa3,0xb0,0x64,0x83,0x0f,0x5d,0x82,0x15,0xf1,0xcf,0xb6,0x80,0xcd,0x60,0xad,0x4c,0x75,0x99,0xc1,0x59,0x1c,0x19,0x59,0xa2,0x4f,0x86,0x06,0xec,0xb6 },
{ 0x2c,0x70,0xea,0x61,0x4b,0x31,0x71,0x8f,0xc7,0x7c,0xa8,0xcd,0xf4,0x7c,0xb9,0xeb,0x74,0xa2,0xce,0x93,0xf7,0xd7,0x0f,0xf7,0x43,0x8a,0x58,0x24,0xa5,0xc9,0xa6,0xc7 },
{ 0x4c,0x69,0xa9,0xb6,0x69,0x4f,0x6d,0xe1,0x3b,0x0d,0x8d,0xb9,0xa0,0x62,0xdc,0xf8,0x96,0xe5,0xdb,0xf2,0xf0,0x6a,0x18,0x7b,0x33,0xd8,0x4d,0xaf,0x69,0x78,0x8b,0xa2 },
{ 0xd5,0xbc,0x8e,0x60,0x06,0xef,0xd1,0x6e,0x53,0x35,0x14,0x9e,0x92,0xc0,0xb2,0x19,0x99,0x5b,0x13,0xce,0xb4,0x8b,0xbd,0xea,0x56,0x76,0xbf,0x11,0xf2,0x14,0xef,0xe4 },
{ 0x07,0xfb,0x9f,0xb5,0x33,0xc5,0x38,0x7c,0xcf,0xe7,0xfc,0x05,0xee,0xd1,0x25,0x02,0x93,0xf0,0xc4,0x71,0x9f,0x74,0xfe,0xd7,0x89,0x81,0x04,0xc8,0x2f,0xfd,0x0f,0x11 },
{ 0xbd,0xab,0xc0,0xc0,0x41,0x67,0x52,0x02,0xa9,0x1c,0x9f,0x40,0x27,0xa1,0x55,0x75,0xbe,0x40,0x8e,0x14,0x83,0xa8,0xf0,0x95,0x74,0x94,0x3c,0xee,0x4c,0x91,0xa5,0x32 },
{ 0x4b,0x9a,0x5e,0x97,0x20,0x14,0x4a,0x81,0x9a,0xaf,0xd6,0x35,0x04,0x92,0x23,0xdf,0xc8,0x34,0x66,0xc9,0x59,0x60,0x71,0xba,0x22,0x87,0xb4,0x47,0x52,0xdc,0xe7,0xc1 },
{ 0xba,0x02,0x95,0xf0,0xe9,0xbb,0x81,0x19,0x06,0xf2,0x2e,0xf8,0x19,0x9c,0xad,0xd1,0x82,0x43,0x4d,0xe1,0x62,0x64,0x67,0x7b,0x11,0x94,0xca,0xc7,0xcb,0x11,0xb7,0x01 },
{ 0x8d,0x0f,0x4d,0x43,0x87,0xca,0x66,0x01,0x8e,0xd5,0x16,0xdf,0xab,0x78,0xdb,0x0a,0x3e,0xa1,0xa0,0x90,0x7f,0xf9,0x27,0xd4,0x18,0x95,0x6c,0x21,0xad,0x67,0x92,0x60 },
{ 0xe7,0x6e,0xae,0xc4,0x9e,0x4d,0x35,0x70,0x7c,0xab,0x5d,0x79,0x7e,0x94,0x08,0xf0,0xe8,0xbb,0x76,0x3b,0x1f,0x9b,0xab,0xea,0xb3,0x1c,0xbc,0x0a,0x59,0x51,0xd7,0x58 },
{ 0xfa,0x16,0x0f,0x60,0xe8,0xe3,0x6b,0x1a,0xc3,0xfe,0x0b,0x14,0x46,0x35,0x2b,0x50,0x8a,0x7a,0xfc,0x30,0x83,0x21,0x67,0x52,0xbb,0xc3,0x35,0xc4,0xa8,0x02,0x4a,0x63 },
{ 0xde,0x38,0x4b,0xe0,0x2d,0x57,0xc5,0xe2,0x47,0x9a,0xe6,0xbe,0xe9,0x36,0xc4,0x10,0xe5,0x0e,0x17,0x3b,0x30,0x67,0x04,0x3c,0xbf,0x21,0xaf,0xa0,0x0c,0xfb,0x83,0xc2 },
{ 0x2e,0x5c,0xd3,0x5f,0xfb,0x2a,0xa2,0xab,0xe2,0x25,0x97,0xde,0x55,0x9b,0x25,0x9f,0xa2,0x1c,0x46,0x78,0xa2,0x11,0x07,0xa1,0xb4,0x39,0x4b,0x75,0xac,0xee,0xcd,0x85 },
{ 0x77,0xcc,0xff,0x97,0x94,0x07,0x54,0x29,0x2d,0x8c,0x5d,0x57,0x7e,0x09,0xbe,0xfd,0x2b,0x1f,0x73,0x69,0x50,0x7a,0x33,0xe1,0xe6,0xcb,0x6a,0xaf,0x73,0x4e,0x4d,0x66 },
{ 0x74,0xa3,0x0f,0x21,0x83,0xf6,0x75,0x04,0x21,0x80,0xc9,0x25,0x4d,0x82,0x55,0xa8,0x8a,0x47,0x2a,0x13,0x3d,0xdc,0xfb,0xd5,0xd2,0x04,0xdc,0xbb,0xd4,0x09,0x19,0xe4 },
{ 0xcb,0x9f,0x80,0x6d,0xe1,0x3f,0x9e,0x5b,0xd2,0xc0,0x96,0x03,0x77,0x6c,0x68,0x5d,0x42,0x4b,0x6f,0x2d,0x2b,0x9f,0xe8,0xa4,0xce,0x77,0xae,0x2c,0xa9,0x87,0x1a,0x99 },
{ 0x75,0x6d,0x27,0x80,0x2b,0x0b,0x77,0x82,0x2d,0x4a,0x0c,0x3a,0x5d,0xb5,0xcc,0xa3,0x47,0xec,0xf1,0xae,0xcb,0x46,0x90,0xfb,0xd3,0xc9,0x73,0x76,0x11,0xd2,0x9b,0x99 },
{ 0x17,0xe1,0x27,0xd9,0xc1,0x9d,0x72,0xe9,0x6a,0xa0,0x5c,0x96,0xad,0xd3,0x00,0x38,0xab,0x76,0x67,0x83,0x6c,0xa8,0x1c,0xc8,0xae,0x65,0x25,0x9a,0xf1,0x75,0x5f,0xaf },
{ 0x0b,0x46,0x1f,0x12,0x3c,0xc9,0xf6,0xab,0x13,0x28,0x98,0x11,0xae,0xdb,0x69,0xc2,0xb3,0x14,0x28,0xc1,0x7a,0xa6,0xa2,0x1a,0x43,0x5d,0x86,0x68,0xac,0x5d,0x6f,0x6c },
{ 0x2f,0x27,0x11,0x5f,0xbb,0x7d,0xb9,0x64,0xe0,0x91,0xe1,0x34,0x8d,0xa4,0x17,0x4f,0xb8,0x31,0xa1,0x99,0x87,0xbb,0x33,0xdf,0xfd,0x59,0x87,0xca,0xeb,0x03,0x76,0x20 },
{ 0xa8,0xf6,0x0f,0x84,0xd7,0xad,0x21,0xd2,0x34,0x49,0x21,0x0d,0x85,0xd6,0x4c,0x1e,0xf4,0x1e,0x84,0x5c,0x7b,0xaf,0x17,0xbe,0x5b,0x11,0x0f,0xf2,0xd9,0x97,0x33,0xd3 },
{ 0x0f,0xae,0xee,0x87,0x09,0x71,0x04,0xac,0x44,0xd5,0x30,0x24,0x91,0x02,0xdb,0x77,0x1a,0x99,0xe7,0x53,0x7d,0xb0,0xdb,0x21,0x8b,0xbf,0xa7,0x43,0x5a,0x09,0x1f,0x9c },
{ 0x8f,0x41,0xe9,0x78,0x71,0xd8,0x43,0xb5,0x18,0x6a,0x65,0xf4,0x8d,0x58,0x3b,0x7a,0xa4,0x14,0x75,0xf8,0xea,0x79,0xaa,0x2e,0x60,0x17,0xce,0xcd,0x8a,0x28,0x5b,0xc5 },
{ 0x31,0xf5,0x0f,0x10,0xf0,0x31,0xc2,0x9f,0x37,0xd6,0x7b,0x70,0x12,0xcd,0xfa,0xea,0xf8,0xfc,0xe4,0x87,0xe0,0x2c,0xd2,0xfd,0xb9,0xc3,0xb4,0x62,0x03,0xdc,0x10,0xbd },
{ 0x0e,0x3a,0x2c,0x39,0x2d,0xe5,0x23,0xac,0xa1,0x8b,0x5b,0x6d,0xce,0x39,0x45,0x26,0x8b,0x2f,0x35,0x52,0xe9,0x1f,0x24,0xda,0x7f,0xe5,0xc8,0xfd,0x39,0x71,0xec,0x63 },
{ 0xca,0xc6,0x8a,0x54,0xdf,0x69,0xce,0x8f,0xa4,0x7c,0x4e,0x20,0x24,0x41,0xeb,0xb4,0xad,0xe8,0x2a,0x5a,0xe4,0xd4,0x51,0x78,0x7c,0x8b,0x1e,0x1b,0x8b,0xbe,0x1e,0xfb },
{ 0xdf,0x0c,0xff,0x3d,0x63,0xac,0x46,0xa8,0x2d,0x32,0x01,0xcc,0xe6,0xae,0x6b,0x44,0x65,0x77,0x7d,0xe1,0x32,0xb9,0xf0,0xa2,0x7f,0xfc,0xfc,0xa5,0xe3,0x3a,0xcf,0x57 },
{ 0xf1,0xbd,0x4a,0x24,0xcf,0xc9,0x6e,0xba,0x6e,0x6f,0xa5,0xba,0x1e,0x99,0xfc,0xd1,0x86,0x5c,0x54,0x94,0x3f,0x57,0xb3,0x86,0x24,0x72,0xb8,0xed,0xa6,0xc7,0x7f,0x15 },
{ 0xf3,0x61,0x3e,0x26,0x44,0x4d,0x55,0xd8,0x33,0x63,0xd9,0xcb,0x3c,0x48,0xde,0xce,0x39,0xe3,0x3e,0x9a,0x62,0x9f,0x1d,0x12,0xaf,0x2a,0x6c,0xea,0x7d,0xac,0xbc,0x1c },
{ 0x11,0x72,0x5b,0xc0,0xcb,0x40,0x18,0x55,0x80,0xe0,0xf1,0x77,0xd4,0xa2,0xab,0x48,0x71,0xba,0xfd,0x45,0x70,0x4e,0x24,0x13,0x38,0xd0,0xe1,0x28,0x7b,0xc4,0x9e,0x53 },
{ 0x74,0x60,0xde,0x79,0x07,0x2c,0xb6,0x49,0xfb,0x2d,0xce,0xd8,0x1e,0xa4,0x05,0x62,0xc2,0xc2,0x7a,0x92,0x55,0x75,0x2e,0x96,0x96,0xd6,0x47,0xf4,0xec,0xde,0x77,0x69 },
{ 0xc3,0xaf,0x95,0xa2,0xae,0x28,0x83,0x7f,0x54,0x00,0x8f,0x91,0xba,0xca,0x8e,0x6b,0x3c,0x3a,0x26,0xf7,0x9a,0x2d,0xf8,0xc8,0x71,0x0c,0xcc,0xea,0x6e,0x97,0x26,0x14 },
{ 0x14,0x35,0xaa,0xfa,0x9f,0x5e,0xf3,0xe2,0xed,0xa8,0xd9,0x05,0x05,0x92,0xca,0x7c,0x62,0x8a,0x97,0xff,0x73,0xf8,0x4b,0xc3,0x76,0xfb,0x06,0x48,0xe9,0x7e,0xd0,0x2b },
{ 0xfc,0x79,0x0d,0xa1,0x34,0xec,0x11,0xc7,0x14,0x93,0xf7,0x3a,0xdf,0xd8,0xa3,0x9a,0xbb,0x5e,0x99,0x24,0xe4,0xeb,0xe7,0x02,0xe6,0xba,0x19,0x94,0x01,0xac,0x4b,0xc3 },
{ 0x97,0xf5,0x84,0xfd,0xc2,0x5b,0x70,0x04,0xd2,0x7a,0xbd,0x6b,0x77,0x5a,0x04,0x2f,0xa4,0x34,0xbb,0x47,0x71,0xf0,0xc2,0x8d,0x34,0x0b,0x5f,0x62,0xd4,0x23,0xf0,0x69 },
{ 0xbf,0x9e,0xea,0xb2,0x02,0x90,0xa9,0xe8,0xc1,0xba,0x93,0x13,0xad,0x40,0x31,0xee,0xbf,0xa8,0xa5,0x01,0x89,0xe1,0xb2,0x30,0x68,0xbf,0xf1,0xae,0x1f,0xf1,0xce,0xfc },
{ 0x23,0x31,0xc1,0xb2,0x62,0xb4,0x8b,0x38,0x2d,0x52,0x85,0x7d,0x5a,0xc3,0x63,0x06,0x7d,0x04,0xf7,0xcf,0x2b,0x1f,0xd6,0xc0,0xea,0xa6,0xff,0x1f,0xd1,0x9c,0xcc,0xe0 },
{ 0xf5,0x7c,0x21,0xae,0x7a,0xfa,0xf3,0x0a,0x0f,0x40,0xaa,0x44,0xfa,0xbf,0xbd,0x86,0x6b,0x80,0x72,0x08,0x9b,0x6d,0x01,0x67,0x65,0x1f,0x72,0x70,0x8d,0x5f,0xf6,0xe3 },
{ 0x87,0x96,0xc1,0x11,0x65,0x4e,0xe6,0x4e,0x1f,0xdf,0x53,0xe1,0x6c,0x13,0x44,0xb3,0x48,0x06,0xc1,0x38,0x2d,0xa1,0x5f,0x33,0x7f,0x3c,0x64,0x25,0xdd,0xc3,0xce,0x13 },
{ 0xd4,0xff,0x85,0x02,0x45,0xb6,0x23,0x89,0xc5,0x0d,0x4b,0x0b,0xff,0xab,0x15,0x52,0x01,0x2a,0x2d,0x8b,0xbc,0x66,0x08,0x83,0x0b,0xbc,0x01,0x64,0xfd,0xb4,0x00,0x36 },
{ 0x22,0xc1,0x09,0x17,0x5b,0xfc,0x07,0x93,0x06,0x44,0x7f,0x58,0x55,0x8d,0x1f,0xe5,0xbf,0x7e,0x3d,0x2a,0xa9,0x4c,0x9e,0x21,0xfd,0x75,0x9e,0x04,0x41,0xa4,0x57,0xf8 },
{ 0x5d,0xc5,0xa0,0xb5,0xc7,0x05,0x0c,0x17,0xc8,0xe3,0x0b,0x0a,0xd6,0x99,0x6b,0x26,0x72,0x5a,0x59,0x50,0xba,0xb3,0xc1,0x25,0x4b,0xb4,0x24,0x64,0x36,0x7f,0x6e,0x54 },
{ 0x6c,0x85,0x40,0x13,0x82,0xd7,0x4f,0x08,0x7a,0xff,0x63,0xfd,0x5f,0x63,0xe0,0x93,0x16,0xfe,0xd5,0xe9,0xf3,0x6d,0x9e,0x56,0x57,0x44,0xae,0xa8,0x05,0x74,0x25,0x77 },
{ 0xdd,0xf5,0x19,0xcf,0x2e,0xba,0x50,0x28,0x3c,0xa8,0x96,0x80,0x1f,0x3a,0xe8,0x27,0xfc,0x9f,0xd6,0x74,0x2b,0x91,0xcd,0x16,0x56,0xca,0x4f,0x6a,0xf3,0x9b,0xa5,0x78 },
{ 0x34,0x82,0xa3,0xe7,0xd2,0x07,0xab,0x29,0x75,0x45,0x9a,0xd0,0x1d,0xe2,0xf8,0xa1,0xe6,0x4a,0xba,0x0d,0x6a,0xaa,0xa6,0xc4,0xd0,0xe1,0x42,0xe4,0xd3,0x82,0xc6,0x82 },
{ 0xc6,0xc4,0x7a,0xa5,0x3a,0x2b,0x6f,0x10,0xdf,0x5a,0xbb,0xf8,0x36,0x96,0x6f,0x91,0xfb,0xcd,0xf6,0x4f,0xdf,0x49,0x18,0x35,0xc6,0x3f,0x9b,0x1b,0x22,0xba,0xa5,0x2d },
{ 0x41,0x36,0xd6,0xc8,0xd1,0xf4,0x5d,0x91,0xf0,0x58,0x80,0x8e,0xea,0x8d,0x4e,0x4a,0xfc,0x1e,0xfe,0xd1,0x1d,0xc9,0xeb,0x10,0x4d,0x2e,0x4b,0x54,0x65,0x19,0x20,0xab },
{ 0x4e,0xb4,0x7e,0x1a,0x50,0xcb,0x32,0x39,0xe7,0x6b,0x0f,0x57,0x51,0xb9,0x04,0xf0,0xc2,0xdc,0xf6,0x43,0x66,0x08,0x64,0x83,0xfa,0x83,0x46,0xe8,0x58,0xd8,0x3d,0x8f },
{ 0x15,0x85,0x60,0x7d,0xea,0xe2,0xb2,0x5d,0xe0,0x8d,0x7d,0x39,0x9c,0xa8,0x1b,0xab,0x4e,0xd7,0x0c,0x92,0xcb,0xea,0x41,0xe8,0x94,0x9a,0x19,0xbc,0x49,0x61,0x93,0xd0 },
{ 0xf6,0x3f,0x34,0x5f,0x9b,0xd7,0xff,0x4e,0x9a,0xe9,0xa2,0x27,0x6b,0xb3,0xfc,0x1d,0xc5,0xed,0x4c,0xf0,0xeb,0xdd,0x1f,0x10,0xc1,0xb8,0x13,0x09,0xdd,0x43,0x87,0x30 },
{ 0xa0,0x65,0x12,0x00,0x90,0x2b,0x38,0x56,0x9f,0xd7,0xdd,0xc9,0x16,0xe4,0x36,0xcf,0x67,0x67,0x25,0x0b,0x12,0xb5,0xda,0xee,0xa2,0x76,0xa7,0xb9,0x4c,0x7d,0x8e,0xd5 },
{ 0x1d,0x2c,0xcc,0xd4,0x60,0x40,0x0d,0x82,0xe5,0x74,0x19,0xe7,0xe3,0x7f,0x20,0x67,0xf7,0x0b,0x69,0x0a,0xbf,0xe1,0x8e,0xd8,0x14,0xc0,0x6a,0x47,0xb8,0x48,0x62,0xe6 },
{ 0xe2,0xfb,0xcc,0x64,0x5c,0x5f,0x04,0x31,0x54,0x76,0xef,0xac,0xab,0x32,0x52,0x86,0xb4,0x7b,0x45,0x45,0xf6,0x22,0x9d,0xb0,0x61,0xea,0xb4,0xe1,0xe8,0xfc,0xb9,0xbd },
{ 0xb3,0xba,0x3d,0xa8,0x80,0x05,0x29,0xf8,0xb6,0xe9,0xd5,0xae,0x62,0xc9,0xb0,0x3a,0x0a,0x21,0x6e,0x94,0x2a,0x74,0x4f,0x84,0xb8,0x01,0x1d,0x4c,0xa0,0x68,0xe1,0xed },
{ 0x2e,0x05,0x00,0x78,0xe0,0xd4,0xa6,0x2e,0x7f,0x53,0x4f,0xe3,0xb6,0x76,0x8d,0x2a,0xe4,0xf3,0x1d,0x43,0xb4,0xa5,0xb0,0x76,0x59,0x59,0xa6,0x24,0xb7,0x8a,0x0d,0x8f },
{ 0x18,0x92,0x03,0x33,0x1c,0x0f,0x4d,0x6c,0x7b,0x01,0x2e,0x5f,0x3a,0x27,0x8b,0x7e,0x74,0x0e,0x15,0x04,0x5c,0xb7,0xdb,0xbd,0xcc,0x56,0x64,0xc2,0x81,0x5d,0x0c,0xc3 },
{ 0xac,0xd0,0xb7,0x32,0x68,0x3b,0xb4,0x20,0x6b,0xe3,0x6a,0x5c,0x55,0x4a,0xdb,0x2b,0xc8,0x73,0x89,0x08,0xee,0xc8,0xea,0x7a,0x57,0x83,0xdf,0x5b,0x60,0xb9,0x19,0xad },
{ 0xb2,0x7b,0x4b,0x50,0xe5,0x4e,0x0b,0x83,0x15,0x57,0xe0,0xd4,0x2d,0x6e,0xcb,0xc1,0x41,0x71,0x5a,0x01,0x26,0x87,0xe5,0xa4,0xb2,0xf1,0x86,0xa7,0xe8,0x10,0x87,0xc4 },
{ 0x23,0xf5,0xd4,0x49,0x43,0x0a,0x2e,0xec,0xab,0x58,0x30,0x78,0xc1,0x22,0xaa,0xad,0xef,0xa7,0x1d,0xfb,0xca,0x92,0x46,0xa4,0xd8,0x30,0xd0,0x63,0xa3,0x04,0xa5,0xe1 },
{ 0x76,0xb5,0x78,0x1f,0xd4,0x7d,0xc7,0x88,0xc2,0xe3,0xd1,0x37,0x5f,0x50,0x46,0x8a,0x3e,0x4f,0x1e,0xbb,0xf4,0xa3,0x36,0xcd,0x47,0x64,0xf5,0x03,0xc9,0xee,0xc9,0xa7 },
{ 0xd4,0xcc,0x5c,0x0a,0xc7,0xf1,0x3c,0xc5,0x8f,0xc5,0x69,0x8d,0x2f,0xfe,0xb8,0xe7,0x4b,0x43,0x97,0xc5,0x93,0xa1,0x67,0xbb,0x0b,0x9c,0x0e,0xdc,0x6a,0x2a,0x1a,0x9c },
{ 0x02,0xce,0xa6,0x63,0xc8,0xa8,0xad,0xb4,0x0b,0x5d,0xe1,0x53,0xaa,0x0b,0xbb,0x37,0xf8,0xd3,0x28,0x5b,0x9b,0x75,0x2e,0x81,0x8e,0xd2,0x3e,0xc9,0x00,0x32,0x55,0xb2 },
{ 0x31,0xef,0xf0,0x79,0xdd,0x5c,0x4e,0xee,0xd0,0xe1,0x01,0x80,0x2f,0x75,0xdb,0x7c,0xf3,0x4e,0xec,0x8e,0x7d,0x1d,0xe2,0x81,0x18,0xf7,0x6a,0xf2,0xc9,0x31,0x20,0xb4 },
{ 0x28,0x88,0x9a,0x19,0x78,0x02,0x58,0x93,0x8f,0xf6,0x4e,0x57,0x0a,0x43,0x0c,0x09,0x1e,0x6e,0x39,0xef,0xa8,0x22,0x5c,0x10,0x82,0x4f,0x09,0xfe,0xb3,0xbc,0x1d,0xf5 },
{ 0x42,0xea,0x73,0x11,0xde,0xbf,0xe3,0x37,0x57,0x9b,0x38,0x3d,0x32,0xbc,0x80,0x88,0x09,0xbd,0xfd,0x76,0x64,0x9a,0x80,0x8d,0x18,0x71,0x1f,0x5e,0x3f,0xf1,0xc0,0x02 },
{ 0x6f,0x21,0xaa,0x76,0xe2,0x27,0xd9,0xca,0xa4,0x73,0x66,0x64,0x08,0x76,0x9b,0x2d,0xed,0xe7,0xf7,0x27,0x03,0xd7,0x72,0xe1,0x01,0xc2,0x22,0xcb,0xc0,0x33,0xe3,0x8c },
{ 0x7b,0x01,0x54,0xbe,0x7e,0x51,0xc4,0x08,0xb3,0xce,0x40,0x35,0x5f,0xc5,0x49,0xbf,0x2f,0xef,0xd6,0xb6,0xed,0x14,0xf5,0x3c,0xfe,0x75,0xb6,0x49,0x89,0x69,0x26,0x69 },
{ 0x37,0xb2,0x26,0x5b,0x15,0x05,0x7d,0xd0,0xa0,0xb7,0x5f,0x93,0x6a,0x42,0x69,0xed,0x50,0x4f,0x0f,0x3b,0x5b,0x2b,0xda,0x48,0x2a,0x5b,0xd7,0x8d,0x63,0x23,0x00,0x4c },
{ 0x29,0x83,0xb0,0xcd,0xe4,0x37,0xe5,0xb4,0x93,0xfe,0x60,0xc2,0xa7,0xb6,0xfc,0xfa,0x01,0x16,0xf1,0x06,0xc3,0x96,0xe8,0x18,0x4e,0xad,0x14,0xb7,0x9d,0x87,0x39,0x06 },
{ 0xfd,0xe7,0x8a,0x9d,0xd4,0x42,0xd0,0xa2,0xe4,0x4e,0x03,0x76,0x33,0x61,0x2e,0xf2,0xf1,0x9c,0x6e,0x83,0x92,0x62,0x15,0xb6,0xc1,0xed,0xcc,0x4f,0xd1,0x56,0xa5,0xb4 },
{ 0x2e,0xd4,0x31,0xc6,0x64,0x27,0x47,0xf5,0x07,0x85,0x46,0x35,0xb1,0x5c,0x08,0x8b,0x73,0xe0,0x92,0xc4,0x02,0xa5,0xeb,0xee,0x6a,0x65,0xdd,0xe5,0x43,0x6c,0x9e,0x80 },
{ 0xb1,0x3e,0xb1,0x78,0x88,0x3b,0x05,0x6d,0x01,0x01,0x6f,0xb8,0x44,0xfa,0x45,0x9b,0xec,0x2b,0xe0,0xf3,0x15,0xe1,0xeb,0xa6,0x64,0xad,0x54,0x4d,0x3a,0x18,0x03,0x12 },
{ 0x98,0x13,0xd1,0xf3,0x4a,0x86,0xc0,0xd6,0xa6,0xa7,0x7f,0xc9,0x96,0x29,0xf7,0x57,0x18,0xf1,0x38,0x77,0xe1,0xfd,0xcf,0xb8,0xa7,0xb5,0xd1,0x95,0x60,0x9b,0xfe,0x0d },
{ 0x00,0xd4,0x33,0xd0,0xeb,0x88,0x9b,0xe0,0x78,0x2d,0x74,0x23,0xaf,0x83,0x0b,0xd6,0x50,0xff,0xe3,0x78,0x59,0x22,0x1e,0x1e,0xd8,0xdc,0x33,0x89,0x4e,0x84,0x22,0x3a },
{ 0x20,0x5a,0x3b,0xf1,0x05,0xc2,0x3d,0x3c,0xc3,0xeb,0x1c,0xfd,0xf3,0xe5,0x33,0x9d,0x01,0x05,0xfd,0xc9,0x2e,0x98,0x51,0x13,0xfc,0xa8,0x33,0x46,0x94,0x53,0x57,0x2b },
{ 0x18,0x63,0x4b,0x51,0x66,0x35,0xec,0x2e,0xf3,0x0a,0xdc,0xe3,0xd6,0x30,0x7f,0x75,0x0f,0x98,0xb0,0x57,0xc0,0x76,0x6b,0xcb,0x37,0xef,0x1c,0xa1,0xfd,0xe3,0x82,0x09 },
{ 0xab,0x63,0xd5,0x39,0x83,0x2f,0x76,0x7c,0xdf,0x38,0x08,0xc3,0x0f,0xb0,0x1e,0xfe,0x54,0xb7,0x23,0x20,0x5d,0x8a,0x79,0xef,0xfa,0x61,0x6f,0x80,0xa5,0x04,0x6c,0x61 },
{ 0x1d,0xd2,0x2b,0xef,0x07,0x6d,0x5b,0xb0,0x98,0x10,0x9f,0x38,0x52,0x61,0x34,0x7e,0xc7,0xba,0x3f,0x4b,0xe1,0x93,0x8d,0xf8,0x17,0x3b,0x64,0x65,0xed,0x7c,0xe1,0xa5 },
{ 0x4b,0xeb,0x9f,0x24,0x34,0x78,0x1e,0x73,0x21,0xd7,0x1e,0xd9,0xa1,0x50,0x04,0x20,0x5f,0xe9,0x91,0xb5,0x82,0x01,0xc8,0xd8,0x20,0x09,0x37,0x23,0xb4,0x45,0xba,0x22 },
{ 0xc1,0x21,0x3e,0xbf,0x79,0x85,0x88,0x20,0xbf,0x3a,0x8f,0x68,0x79,0x23,0xed,0x4b,0xd5,0x66,0x83,0x40,0x0e,0x4c,0xad,0x0c,0xb3,0x95,0x31,0x42,0xa7,0x51,0x93,0x29 },
{ 0x25,0x06,0xc7,0x05,0xdb,0x6b,0xa0,0x54,0x55,0xc3,0x13,0x56,0x51,0x5f,0x12,0x4f,0xb1,0x88,0xc6,0xfb,0xf1,0x0b,0x4f,0x79,0x21,0x6b,0x7b,0xfa,0x6c,0x1a,0xca,0x60 },
{ 0x84,0xfc,0x57,0x2f,0xcc,0x0b,0xac,0x00,0x96,0x25,0xcf,0xd9,0xb2,0x4b,0x92,0x8f,0xca,0x32,0xe6,0x66,0x4a,0xe3,0x1f,0x4d,0xc5,0x1e,0xac,0xe1,0x1d,0x60,0xb0,0xf4 },
{ 0x2e,0x71,0x23,0x40,0x9b,0xef,0x16,0x4a,0x49,0xef,0xf1,0x97,0xf5,0x27,0xcb,0x11,0x6e,0x16,0x6c,0x26,0xe2,0x3e,0xcd,0x68,0x47,0xf7,0x16,0x87,0x70,0x2c,0x7f,0x3a },
{ 0x25,0x43,0x5c,0x75,0xfc,0x17,0x02,0xe0,0x46,0x85,0xf0,0xfc,0xd8,0x9a,0xee,0x86,0xb1,0xf5,0x06,0x95,0xbd,0xae,0xd9,0x1f,0x56,0x34,0x56,0x05,0x9f,0xce,0x0b,0xe3 },
{ 0xa3,0xda,0x23,0xed,0x2e,0x2a,0x52,0xf5,0xc9,0xfe,0x19,0x67,0xb1,0x06,0x5d,0xa5,0x00,0xee,0x47,0x8e,0xa4,0x45,0x05,0x6c,0xba,0xba,0xc2,0x6a,0xe1,0xb7,0xe7,0xed },
{ 0xe4,0x02,0x64,0xcc,0x51,0x80,0x5f,0x31,0xf3,0x9d,0x1f,0x15,0x8d,0x72,0xd0,0x03,0xe2,0x5b,0x9e,0x4e,0xf6,0x5e,0x50,0x15,0x4f,0xf9,0xb4,0x40,0x62,0x89,0xca,0xee },
{ 0xa6,0x1d,0x1e,0xbf,0x98,0x69,0x25,0x8e,0xba,0xdc,0x0f,0x01,0x42,0x3c,0x71,0xa8,0x85,0xd9,0xa2,0xf0,0xa7,0x4f,0x26,0xce,0xda,0x28,0x32,0x25,0xdd,0xec,0xba,0x4e },
{ 0x97,0x84,0x49,0x3d,0x9c,0x26,0x08,0x63,0xb6,0x12,0x4d,0x36,0x2c,0x71,0xaa,0x3a,0xe2,0x95,0x03,0x40,0x87,0x55,0xfb,0xa2,0x71,0xd0,0x22,0xdc,0xd3,0xc3,0x3a,0x69 },
{ 0x8a,0xa3,0xd5,0x5a,0x48,0x32,0xb1,0x0b,0x3b,0x05,0xf7,0xee,0xd1,0x71,0xca,0xfb,0xe8,0x89,0x9f,0x9f,0xb6,0x19,0x42,0xc1,0x38,0xaf,0x43,0x0e,0xd1,0x96,0x29,0x7c },
{ 0x7e,0x0a,0x4e,0x02,0xb4,0x85,0x40,0x89,0x8e,0x2f,0xf3,0xed,0x56,0xbc,0x24,0x31,0x06,0x8d,0x4e,0xff,0x64,0x99,0x12,0xfd,0x95,0xb3,0x9d,0x10,0xaf,0x59,0x52,0x68 },
{ 0x26,0xcf,0xa7,0xe9,0x76,0x05,0x96,0x28,0x2b,0x8e,0x64,0x37,0x6e,0x34,0xef,0x87,0x93,0xc5,0x2d,0x24,0xcb,0x4c,0x9d,0x6a,0x59,0xaa,0xf9,0x52,0xcc,0xe1,0x23,0x66 },
{ 0xe8,0xea,0x3d,0xf8,0x08,0xe4,0x2a,0x8a,0x2e,0x29,0x65,0xf1,0xc2,0xfc,0x03,0xd6,0x4b,0x6d,0xc4,0x59,0x99,0x8e,0xe5,0x92,0xb1,0xcc,0x4e,0xe5,0x7f,0xad,0x1f,0x58 },
{ 0x8e,0x9a,0x8f,0x75,0x37,0xcf,0x51,0x39,0xfa,0x6b,0xfb,0x45,0x95,0x6e,0xd0,0x9e,0xba,0xef,0x85,0x54,0x4c,0x83,0x19,0xbc,0x34,0x09,0xe7,0x37,0xb8,0x7b,0xd5,0xe1 },
{ 0x95,0xf0,0xec,0xad,0x43,0xe1,0x98,0x9b,0xb2,0x7f,0xbe,0x20,0xba,0xab,0x54,0x82,0x7a,0x0c,0x23,0xd7,0xef,0xb3,0x94,0x56,0x2d,0x73,0xc0,0x43,0x0c,0xd6,0x1d,0x5a },
{ 0x53,0x45,0x9d,0x2c,0x16,0x2d,0xc0,0x84,0xc7,0xbf,0x2c,0xe6,0xb5,0xf6,0xf1,0xe7,0x3a,0x8f,0xd6,0x70,0x39,0xe5,0xdd,0x5e,0x5b,0xe3,0x45,0x5a,0xea,0xa7,0xd9,0x4f },
{ 0x2d,0xdb,0xbd,0xe0,0xab,0x64,0x82,0x29,0x87,0x44,0x89,0xb0,0x24,0xb5,0x03,0xd4,0xc9,0x11,0x2b,0x2d,0x87,0xfa,0x80,0x43,0x67,0x67,0xab,0xa8,0x32,0x3e,0xcb,0x2e },
{ 0xd9,0x92,0x4f,0x3c,0x94,0x98,0xba,0xcf,0x12,0x63,0xd0,0xb6,0x86,0x0d,0x47,0xc1,0x7e,0x4d,0x71,0xd7,0xf0,0x0e,0x0b,0xcf,0x68,0x8e,0x13,0xeb,0x6b,0xc7,0x89,0xa0 },
{ 0x4d,0x3a,0x0e,0x53,0x13,0x8f,0x3e,0xec,0x30,0x39,0x0b,0xa8,0x0a,0xce,0x77,0x92,0x30,0x11,0x43,0x9a,0xd5,0x4c,0x45,0x79,0xea,0x4a,0xb9,0x04,0x3f,0xdd,0x31,0xe2 },
{ 0x87,0x7b,0x67,0x86,0xc5,0x69,0x9e,0x88,0xb9,0x07,0x68,0x4e,0xb5,0x92,0x05,0x58,0xc1,0xed,0xa7,0xd0,0x58,0x85,0xa2,0x04,0x8d,0x16,0x33,0xc1,0x91,0x09,0x7d,0x51 },
{ 0xcb,0x9f,0x80,0xa3,0xbb,0xb8,0x1a,0xf7,0xb9,0xbc,0x33,0xbc,0x93,0x2e,0x52,0x28,0xf6,0x35,0x7c,0x6c,0xa7,0x16,0xcb,0xb6,0xde,0xff,0x23,0x9d,0xb0,0x79,0x2d,0xad },
{ 0x18,0x49,0xa4,0xb2,0xda,0x7b,0x8e,0x79,0xef,0xb5,0x47,0x6d,0x4d,0x61,0x79,0xbe,0xc3,0x6b,0x16,0x99,0xd5,0xb1,0x60,0x8c,0x9f,0xc7,0x7c,0x08,0x2f,0x17,0x4e,0xe4 },
{ 0xc4,0xc8,0x1a,0x39,0x33,0xd6,0xc3,0xa4,0x66,0x44,0xbf,0x41,0x15,0x96,0x46,0x51,0x05,0x05,0x7f,0xa0,0x77,0xcb,0xf8,0x28,0xb7,0x38,0x14,0xb9,0x0b,0x5e,0x3d,0xd5 },
{ 0xd0,0xa5,0x87,0x8e,0x47,0x96,0x8f,0x54,0x9a,0x7b,0x8d,0xe0,0x80,0x92,0xf6,0x82,0xe1,0x54,0x6f,0x87,0xbb,0xad,0xa9,0x45,0xb3,0x30,0x97,0x38,0x62,0xf8,0x73,0x39 },
{ 0xb9,0xa6,0x52,0xe8,0xe2,0x80,0x89,0x0c,0x7a,0xea,0xa0,0xb2,0x39,0xbe,0x0b,0x88,0x81,0x23,0xf0,0x12,0xcf,0xc8,0x86,0xf0,0x1d,0xfb,0x13,0x66,0xc7,0x8f,0x4a,0xa0 },
{ 0x36,0x5b,0xcb,0xb5,0x8c,0xc9,0x58,0xd9,0x39,0x9f,0x03,0xfc,0x0c,0x37,0x75,0x91,0x7f,0x79,0xb9,0x00,0xd0,0x68,0xe9,0x41,0xe7,0xfe,0xb6,0x94,0x36,0x9b,0xb2,0x32 },
{ 0x3f,0x5c,0x51,0x8d,0x59,0x90,0x6f,0xf2,0xbd,0x89,0xea,0x69,0x7b,0x85,0x98,0x3c,0x30,0x76,0x44,0xc0,0x01,0x44,0xf5,0x34,0x5b,0x02,0xa8,0x8a,0xdd,0xce,0xb0,0xfd },
{ 0x4c,0xfa,0x4b,0xe4,0x3a,0xb2,0x76,0xf4,0x10,0xbc,0xae,0x5e,0xe6,0xe7,0x6e,0x01,0xe3,0xc3,0xe0,0x03,0x8a,0x5c,0xa2,0x37,0x0b,0xf1,0x0e,0x4a,0x2c,0x23,0x50,0x5d },
{ 0x83,0xed,0x6e,0x02,0x76,0x5f,0x9b,0xf7,0x7c,0xb3,0xe1,0xd6,0x28,0xc4,0x49,0x9e,0x60,0x08,0x60,0x4a,0x3e,0xe8,0xdd,0xc5,0xd7,0xbd,0xeb,0xf4,0x4f,0x7c,0xf5,0x41 },
{ 0xbe,0xbd,0x51,0x6a,0xab,0x15,0x29,0xca,0x28,0x91,0xa2,0x90,0x92,0x20,0xaa,0x2c,0x41,0xe9,0xae,0xa4,0xe3,0x98,0xc9,0xc3,0xb1,0xcf,0x9d,0x29,0x69,0x18,0x25,0x6d },
{ 0xe5,0xd4,0x92,0x79,0xee,0x8b,0x0d,0xf4,0xfd,0xb8,0x90,0xa9,0xbc,0x08,0x37,0x05,0x81,0x16,0x1a,0xdf,0x37,0xbc,0x47,0xd3,0x4a,0x3b,0x34,0xe5,0x6a,0x1f,0xad,0x65 },
{ 0x23,0xbf,0xcc,0x11,0xd9,0x36,0x4d,0xf4,0xc0,0x48,0x41,0x78,0x72,0xcd,0xa5,0x14,0x87,0x4c,0x5d,0x62,0xe2,0xdf,0x03,0xce,0x71,0x2d,0xe9,0x5e,0x50,0xdf,0xcb,0xc3 },
{ 0xfb,0x03,0xb7,0x3f,0x73,0x60,0x86,0x86,0x0f,0x7a,0xaa,0x70,0x7f,0xd1,0xe3,0xeb,0x43,0xfc,0x38,0x21,0xee,0x39,0x60,0x10,0x03,0x52,0x8c,0x74,0xd0,0x87,0x70,0xb8 },
{ 0x73,0x53,0x2d,0xaa,0x21,0x3b,0xc1,0x88,0x9a,0xe9,0xb5,0x13,0x01,0x68,0x24,0xd8,0x07,0x6b,0xab,0x74,0x76,0x05,0xbc,0x02,0x91,0x08,0xb5,0x11,0x5f,0x17,0x2c,0x36 },
{ 0x09,0xd8,0x7c,0x23,0x8e,0xc0,0x7c,0xa1,0xe4,0xff,0x24,0xbe,0xed,0x4b,0xa1,0x8a,0xfb,0x6d,0x29,0x11,0x62,0xdb,0xc9,0x05,0x53,0x76,0xbf,0xcf,0x93,0xfb,0x57,0xec },
{ 0x44,0x0f,0x72,0x64,0x08,0xcc,0x92,0x88,0x15,0x3d,0xcc,0xae,0xc6,0x59,0xfe,0xd3,0x64,0xb7,0x69,0xa5,0xc8,0x63,0x12,0xfa,0xb4,0xf4,0x71,0xd3,0x04,0xaa,0x73,0x98 },
{ 0x73,0x6d,0x24,0xdc,0x95,0x2f,0x5e,0x39,0x01,0xcb,0x24,0x83,0x50,0x21,0x13,0x45,0xf4,0x60,0x1e,0x11,0xa7,0x9b,0x97,0x23,0x74,0x29,0x21,0xd3,0xab,0x06,0x19,0x32 },
{ 0x1c,0x00,0xce,0x05,0xf0,0x2d,0xc7,0x35,0x3b,0x57,0xe3,0xba,0x95,0xd4,0x1c,0x87,0x91,0x26,0xdd,0xa5,0xec,0x42,0xd6,0xb7,0x07,0x21,0x22,0x35,0xbf,0x9c,0xd1,0xaa },
{ 0xfa,0x14,0x3a,0xcb,0x7a,0x25,0x1d,0x57,0x29,0x3e,0xc5,0x30,0xed,0xe1,0xfd,0x85,0x0c,0xe4,0xc1,0xdd,0x04,0xd7,0x9b,0xaa,0x68,0x83,0xb9,0xb3,0x1f,0xf1,0x6b,0xfe },
{ 0x24,0x31,0xcd,0xa4,0xb5,0x63,0xbb,0xd1,0xd6,0x72,0x9e,0x9d,0x22,0xcc,0x61,0xc0,0x25,0x8a,0x09,0x9b,0xd6,0x6f,0xf4,0x74,0x92,0xef,0x53,0x9f,0x4c,0x59,0xca,0x2f },
{ 0xe1,0xb8,0xd5,0xfd,0xeb,0xbe,0x87,0x07,0x7e,0x1b,0x92,0xdb,0x14,0x44,0xe2,0x03,0x47,0x30,0xae,0xa5,0xf9,0xad,0x8c,0xff,0xc6,0xc8,0xb3,0x50,0x1c,0x7f,0xad,0xf4 },
{ 0xad,0x98,0xf4,0x2c,0xb6,0x88,0x90,0xaf,0x56,0xe2,0x30,0x7c,0x16,0xe0,0xe3,0x21,0xea,0x52,0x67,0x87,0xa2,0x9f,0xeb,0x10,0x13,0xa6,0x5a,0x78,0xc0,0xd2,0x1c,0xce },
{ 0xdd,0xf3,0xf2,0xce,0xb3,0x03,0x81,0xcc,0x95,0xc8,0x79,0x63,0xb4,0xae,0x5a,0x25,0x67,0x5f,0xca,0x6c,0x58,0x04,0xb7,0xc9,0xb7,0xc1,0xc6,0x55,0xc6,0x49,0x6d,0x44 },
{ 0xdc,0x2a,0xc1,0x6f,0x15,0x2b,0xbf,0x2d,0xcf,0x72,0xd3,0x94,0xc7,0x7c,0x5c,0x52,0xe2,0xd3,0xfd,0x40,0xc5,0x78,0x3d,0x56,0xd7,0x51,0x6d,0x67,0x2c,0x31,0x52,0x24 },
{ 0x00,0xc7,0xae,0xf5,0xd2,0xa8,0x9c,0x0a,0x8c,0xd0,0xa2,0xe9,0x68,0x85,0x69,0x7b,0xcb,0x66,0x01,0xdc,0xef,0xe5,0x3a,0x22,0xfd,0x6d,0xdc,0x6d,0x30,0x41,0xb3,0x39 },
{ 0x90,0x0c,0xc8,0x4f,0xe6,0x3b,0x0d,0xc1,0xf0,0x80,0x16,0xa9,0x24,0x65,0x5f,0x3e,0x93,0x17,0xf0,0xa8,0xdd,0xa7,0x1a,0xb7,0x42,0xdb,0x13,0x8e,0x77,0x5f,0xe6,0x8b },
{ 0x25,0x30,0x08,0x75,0xcf,0xe5,0xf8,0x36,0x36,0xdf,0xc2,0x92,0x9b,0x37,0xc9,0xe2,0x65,0x29,0xed,0xfe,0x44,0xe4,0x51,0x3e,0xc0,0xb7,0x83,0xad,0x5e,0x6b,0xd7,0x4b },
{ 0x7c,0x08,0x24,0x72,0xa2,0x7e,0xd2,0x3b,0x90,0x5c,0xd7,0x39,0x1b,0x01,0xbd,0x4c,0xda,0xec,0xfb,0x6d,0xff,0xd1,0x67,0xcc,0x09,0xb5,0x3a,0x53,0xdf,0xef,0x25,0xff },
{ 0x7a,0xdb,0xd9,0x44,0xf8,0x11,0x53,0x7e,0x37,0x7a,0x67,0x3c,0x31,0xd5,0xae,0x2f,0x3d,0xdf,0x7f,0x10,0x69,0x9f,0xab,0x9f,0xfd,0x43,0x23,0x3a,0xda,0xd6,0xcb,0x78 },
{ 0xde,0x78,0x35,0x34,0x55,0x3b,0x4e,0xe2,0x5c,0xe2,0xa9,0x49,0xb6,0x03,0x41,0x89,0xbd,0x75,0x4b,0x10,0xc4,0x66,0x21,0x95,0x8c,0xad,0x3f,0xc1,0xb7,0x93,0x3c,0x6a },
{ 0xa5,0xa8,0xe5,0xbf,0xf7,0x75,0x9e,0x46,0x2e,0x1b,0x2c,0xea,0x74,0x42,0xc9,0x29,0x95,0x60,0x01,0xa2,0xd4,0x2d,0x0e,0x73,0xb4,0x46,0x67,0x85,0x67,0x6b,0x7e,0x8f },
{ 0xe2,0xc6,0xaa,0x2a,0xf8,0x67,0x08,0xb9,0x3e,0x2a,0xdc,0x41,0xeb,0x7f,0x33,0xc4,0x86,0x59,0x91,0xe7,0x06,0x34,0x12,0xe5,0x07,0xe7,0x94,0xee,0x14,0x8a,0x53,0x24 },
{ 0xfc,0xd9,0x2d,0x84,0x16,0x44,0xd1,0x15,0xd0,0x08,0x22,0x11,0xcc,0x38,0xad,0x02,0xda,0x01,0x08,0xf3,0x8f,0x1a,0xac,0x53,0x7c,0xd3,0x1c,0x61,0x43,0xae,0x69,0x99 },
{ 0xb8,0x83,0x11,0x4d,0x7d,0x96,0x74,0x4d,0xc9,0xe5,0xe5,0x01,0x19,0xca,0xfe,0x6d,0xf9,0x3c,0x61,0x09,0x45,0x59,0x7a,0xfc,0x7b,0x7d,0x5d,0x26,0x4b,0x55,0xa2,0x8f },
{ 0x7e,0x4b,0xbc,0x65,0x26,0xc2,0x4f,0x73,0xe4,0x43,0x92,0xa5,0xf7,0x6a,0x19,0xd5,0x33,0xaa,0x3f,0x98,0x7e,0x49,0xb9,0xf5,0x79,0xb1,0xc6,0x5a,0x9d,0x36,0x77,0xc6 },
{ 0xe8,0x17,0xc7,0xad,0xbd,0xf6,0x1e,0x16,0x53,0x81,0xbf,0x56,0x74,0x5e,0x21,0x35,0x4a,0xdf,0x64,0x82,0x61,0x15,0x87,0x15,0x8d,0x0e,0x65,0x8f,0x6d,0x52,0x19,0xee },
{ 0x1c,0x7e,0x9a,0x1a,0x67,0xb3,0x70,0xc2,0xa2,0x1c,0x3c,0x52,0xe1,0xc1,0xfb,0x90,0x44,0x61,0x0e,0xaf,0x40,0x5b,0x69,0x20,0xea,0x4a,0x10,0x70,0x12,0xb0,0x55,0xe3 },
{ 0x46,0x6c,0x29,0x33,0xda,0x48,0xca,0x77,0x2b,0x43,0x8a,0x87,0x3c,0x05,0x53,0x10,0x3d,0x04,0x26,0x2d,0xf0,0x13,0xbe,0x43,0x0f,0x28,0x9a,0x5f,0xc5,0x56,0xce,0x3d },
{ 0xd3,0x29,0xf6,0x93,0x9d,0xa5,0xfd,0xfa,0xac,0x79,0x45,0xcf,0x85,0x05,0x7c,0x19,0x77,0x04,0xc2,0x19,0xb3,0xbc,0xea,0xe1,0xaf,0x9c,0x3f,0x3f,0x19,0x7e,0x8d,0x84 },
{ 0x77,0x6b,0xec,0x1a,0x55,0x86,0x0e,0xf5,0x31,0x66,0xb2,0xdc,0xe5,0xae,0x90,0xba,0xc4,0x4c,0xe9,0x72,0xc7,0x7d,0xdc,0x5a,0xf7,0xec,0x1a,0x86,0x5c,0x0b,0x2a,0xa6 },
{ 0x10,0x74,0x9e,0xf6,0x9e,0x52,0x48,0xa6,0xc5,0x09,0xf5,0x4b,0xee,0x84,0xce,0x59,0x06,0xa0,0x8f,0xf7,0xeb,0x2b,0x66,0x9d,0x1c,0x37,0x20,0x60,0xf1,0x5b,0xa1,0x07 },
{ 0x1c,0x64,0xcb,0x0d,0x63,0x13,0x06,0x01,0x43,0xf4,0x01,0xd2,0x88,0xd3,0x87,0x27,0x5f,0x8c,0xfb,0x05,0x09,0xb0,0x6d,0x2b,0x90,0x8a,0x75,0x28,0x86,0x34,0x89,0x39 },
{ 0x33,0xd7,0xaf,0xc4,0x2a,0x42,0x64,0xac,0xd4,0x0e,0xcb,0xa2,0xa9,0xd2,0x87,0xc9,0x18,0x3d,0x57,0xec,0xea,0x1b,0xf1,0xe9,0x43,0x7b,0x4b,0xde,0xf6,0x97,0xcd,0xcc },
{ 0x0a,0xe0,0xf6,0x1c,0xdf,0x6b,0x21,0x78,0x54,0x36,0x07,0x29,0x49,0x42,0x4b,0xdd,0xde,0x17,0xc0,0xa3,0x4b,0xa4,0xfb,0xc2,0xf8,0x70,0x65,0xec,0x34,0x05,0xfd,0xc7 },
{ 0x00,0x62,0x82,0x4c,0x1a,0x78,0xae,0x3c,0xca,0x9e,0x5b,0xdf,0xf1,0x6c,0xd1,0x12,0xb4,0x2b,0x4f,0xcf,0xdc,0x46,0xd1,0x97,0xfc,0x7a,0x7d,0x5b,0xe9,0x6b,0x41,0xbd },
{ 0x42,0x02,0x81,0x96,0x2f,0xb7,0xc8,0xe7,0x59,0x78,0x06,0xe8,0x11,0x4c,0xf9,0x07,0xa3,0x6c,0x33,0x4b,0xab,0xc2,0xc8,0xbe,0xc7,0x5a,0x5d,0xa3,0x62,0xee,0xad,0xbd },
{ 0x7d,0x66,0x79,0xcf,0xd5,0x8e,0xb7,0xd4,0x1d,0xdd,0x69,0x07,0x35,0x32,0x58,0xa6,0xfe,0x84,0xbe,0xa3,0x0c,0x80,0xf5,0x44,0xc6,0xde,0xb3,0x20,0x07,0x6a,0x06,0x09 },
{ 0xca,0x22,0x9f,0xae,0x0e,0x09,0xea,0xe9,0xc1,0x65,0x5b,0x93,0xb9,0xd6,0x93,0xfe,0x36,0x16,0x9b,0x10,0x68,0x72,0x0b,0x11,0x17,0xbc,0xf9,0x39,0xa7,0x2c,0x55,0x5f },
{ 0x6f,0xc1,0x80,0x78,0x3f,0x90,0x63,0x8c,0xf0,0x13,0x59,0x0f,0x81,0x96,0x39,0xfa,0x2b,0xb6,0xe0,0x94,0xd6,0xdb,0x9b,0xa8,0x37,0x2f,0xd2,0x7b,0x89,0x6b,0x63,0x0c },
{ 0x69,0x52,0x52,0xd6,0x78,0x7c,0xf8,0xdf,0xe9,0xe8,0x29,0x46,0x03,0xce,0x70,0x24,0x80,0x1b,0x95,0x7e,0x56,0x41,0xad,0x9d,0x05,0x9d,0x20,0xa8,0x28,0xfc,0xf9,0xbd },
{ 0x17,0x6f,0xfb,0xd1,0xe6,0x2b,0x37,0x8d,0xaf,0xe7,0xca,0x1a,0x98,0x04,0xcf,0x9b,0x54,0xaf,0xc5,0x2a,0x9b,0x76,0x2f,0x4b,0x78,0xef,0xf1,0xff,0xda,0xc3,0x69,0x95 },
{ 0xbb,0x08,0xdb,0x29,0x65,0xf0,0x81,0xdf,0xf6,0xc3,0x64,0xa4,0x9a,0x34,0x10,0xfc,0xe5,0x2a,0xae,0x5c,0x89,0x1e,0x21,0xb4,0x4d,0x03,0xc4,0xea,0xcc,0xa1,0xf4,0x93 },
{ 0xc5,0x54,0xe5,0x0a,0x60,0x06,0x2b,0x88,0xa9,0xcd,0x81,0xa1,0xa7,0x24,0xc8,0x84,0xc8,0x06,0xa7,0x7f,0x4f,0x96,0x59,0xf7,0x6a,0x05,0x83,0x54,0x1a,0x90,0x60,0xe1 },
{ 0x2c,0x8b,0xa0,0xe3,0x11,0xba,0x32,0xac,0x8b,0x0b,0x29,0xca,0x83,0x79,0x9b,0x09,0x5f,0xde,0xa2,0x5c,0xbc,0x0a,0x9c,0xb7,0xcf,0x16,0xda,0x7a,0x95,0xaf,0x68,0xe8 },
{ 0xc1,0xfd,0xd6,0xd0,0xa0,0xd8,0xb3,0x13,0x97,0x44,0xd0,0x0f,0x04,0x71,0x59,0xce,0x71,0xc8,0xa9,0xb4,0x3c,0xad,0x47,0x88,0xea,0xa5,0x3c,0xb8,0x3c,0x4f,0x35,0x66 },
{ 0xb6,0xab,0x69,0xad,0xdd,0x05,0x82,0xda,0x01,0xd4,0x05,0x83,0x91,0x86,0xf6,0x80,0xc1,0x53,0x61,0xb2,0x7f,0x46,0x83,0x53,0x12,0x1b,0x6a,0x67,0xe6,0xa7,0xc3,0x8b },
{ 0xa1,0xb9,0x8c,0x93,0xbe,0x35,0x59,0x7d,0x82,0xec,0x5c,0x18,0xd9,0x89,0x64,0x14,0x99,0x9a,0x23,0x64,0x55,0x25,0x6e,0x64,0xdf,0xc8,0x37,0x4f,0xd7,0xf6,0x04,0x76 },
{ 0xcf,0xe5,0x65,0xb7,0xf0,0xfc,0x20,0xa8,0x85,0x4d,0x83,0x61,0xfc,0xa9,0x0c,0xeb,0x40,0xb5,0x9d,0x87,0x73,0x6c,0x3d,0x5b,0xaa,0x8d,0x7c,0xcb,0xd7,0x12,0xe5,0xc3 },
{ 0x33,0x2d,0xdc,0xcf,0x07,0x23,0x20,0xe8,0x2a,0xa1,0xb2,0xda,0x42,0x30,0x34,0x41,0x0e,0x14,0x00,0x5a,0x06,0xa2,0x0b,0xb4,0x51,0xfc,0x67,0x4b,0x14,0x0d,0x54,0x5c },
{ 0xa9,0x23,0x6a,0xdc,0x50,0x6a,0x09,0x63,0xe9,0x8d,0x40,0x21,0x78,0x06,0x4d,0xc8,0x97,0xa1,0x30,0x18,0x6b,0x0e,0x09,0x7a,0x5e,0x8f,0x1f,0x62,0xcf,0xee,0x69,0x4f },
{ 0x88,0x96,0x6e,0xfe,0x06,0x43,0xba,0xf6,0x51,0xe7,0x8a,0x19,0x28,0x48,0xc7,0x77,0x56,0xf2,0x8c,0x32,0x10,0x4b,0x15,0x2d,0x9c,0x5f,0x8b,0x76,0x01,0xd7,0x6b,0xe3 },
{ 0x7f,0x2f,0x99,0x8c,0x51,0x13,0xce,0x98,0x36,0x88,0x83,0xff,0x6e,0xa5,0xdf,0x69,0x8d,0x31,0x36,0x45,0x8b,0xe5,0x93,0xbd,0x53,0x00,0x0d,0x67,0x0b,0x93,0xfc,0x6d },
{ 0xbe,0x2f,0x68,0x58,0xe6,0xb0,0x2e,0x5c,0x89,0x13,0x19,0x1f,0x60,0x52,0xb2,0x97,0x61,0x57,0x4b,0xcb,0x34,0x68,0xe6,0x1d,0x8a,0x48,0x4f,0x2d,0x66,0x99,0xe1,0xbe },
{ 0x4c,0x24,0xe9,0x94,0x42,0x1c,0x72,0xaf,0xca,0x6d,0x6a,0xf4,0x48,0x7e,0x86,0x97,0x4d,0x65,0x4f,0x70,0x3d,0xae,0xe5,0x81,0xf1,0x16,0x32,0xff,0xa7,0x62,0xd4,0x1a },
{ 0x14,0xd2,0x71,0x06,0x50,0x26,0xfb,0x5c,0x6f,0x8f,0x9c,0x6d,0xc1,0xbe,0x2b,0xb0,0x95,0x4f,0x90,0x92,0x6c,0xf1,0x64,0x4f,0xab,0x2f,0x03,0x8c,0x34,0x3b,0xac,0xf8 },
{ 0x77,0x4d,0xc4,0x72,0x62,0xf8,0xd3,0xda,0x10,0x52,0x27,0x30,0xf7,0x3e,0x75,0x18,0xd8,0x30,0x39,0x6d,0x3c,0x38,0x73,0x05,0x20,0x4b,0x9b,0x1c,0x49,0xf0,0xcc,0x02 },
{ 0xd3,0x74,0x07,0xf5,0x7c,0x16,0x15,0xe9,0xa1,0xc5,0x9b,0x1c,0xb9,0x64,0x3b,0xdf,0xaa,0xdc,0xa0,0xca,0x03,0xe9,0xb5,0xf9,0x79,0xcf,0x7b,0x0f,0x6c,0x07,0x14,0x0b },
{ 0x03,0xc5,0x2b,0xb9,0x38,0x86,0xf0,0x5b,0xab,0xc3,0x03,0x04,0x3c,0xb4,0xc6,0xb1,0x24,0xcd,0x95,0x03,0xcf,0xfd,0xc1,0x93,0x8c,0x19,0x53,0xdc,0x7e,0x1d,0x2e,0x9c },
{ 0x3c,0x47,0x67,0x8b,0xd0,0x43,0x2b,0x9d,0xe2,0x2f,0x67,0xc4,0x62,0x56,0xa0,0xe4,0x86,0x23,0xc4,0x65,0x78,0xdb,0x11,0x84,0x50,0xfe,0x8c,0x6e,0xb3,0x24,0xba,0xd6 },
{ 0xa9,0x14,0x18,0xe6,0xf7,0x9d,0x48,0x31,0x94,0xa2,0x42,0x19,0x73,0x1e,0x9c,0xbe,0x18,0x46,0xa5,0xc8,0x21,0x97,0x60,0xb9,0x7a,0xaa,0x6a,0x17,0x4b,0xbf,0x89,0x26 },
{ 0x9f,0x61,0x93,0x9a,0xb8,0xde,0x8d,0x63,0x9a,0x85,0x7a,0xc0,0x30,0x53,0xb2,0x1b,0x7e,0xc9,0x0b,0x8f,0xd6,0xcc,0x92,0x26,0x1c,0x82,0x46,0x0b,0x1a,0xa9,0x28,0xe4 },
{ 0x08,0xae,0x96,0xc3,0x3c,0x3a,0x28,0xaf,0xaf,0xd9,0xc2,0xbb,0x8f,0xe2,0x86,0x2c,0x05,0x13,0x53,0x00,0x43,0xd6,0xb4,0xee,0x66,0xfa,0xb5,0xc6,0x15,0x03,0x15,0xe9 },
{ 0x62,0x96,0xb1,0x11,0xc2,0x3b,0xbc,0xbd,0xf4,0x5e,0xe6,0x58,0xa7,0x6e,0x49,0x16,0x55,0x1b,0x79,0x6d,0x39,0x3e,0xd7,0x18,0xdd,0xee,0xbd,0x95,0xee,0x08,0xb7,0xb0 },
{ 0x88,0xa8,0xad,0x15,0x10,0x14,0x3d,0xcb,0x0a,0xdf,0xa8,0xe8,0x04,0xa0,0x2f,0xd4,0x3a,0x71,0x06,0x85,0x86,0xe9,0xae,0x3c,0x29,0xe0,0xe7,0x10,0x6c,0x2d,0x24,0xb1 },
{ 0x46,0xc2,0xd4,0x4f,0xd9,0x4f,0x46,0xd1,0xa7,0x27,0xcd,0xb9,0xd6,0x83,0xf6,0x2a,0x0b,0xfc,0xd4,0xf9,0xc7,0x15,0xe6,0xda,0x6d,0x3d,0x9a,0x70,0xaf,0x16,0x21,0x5c },
{ 0xed,0xa7,0x25,0xc1,0x08,0x25,0xdb,0x9b,0xd7,0x97,0x27,0x14,0x96,0x8c,0x52,0x3e,0x7c,0xa0,0x65,0xe3,0x9e,0x08,0x9b,0xbf,0x61,0x4e,0x18,0x7d,0x6e,0xef,0x31,0x37 },
{ 0xa8,0x77,0xa3,0xbf,0x93,0x86,0xfe,0xa1,0xf4,0xe4,0x2c,0xb6,0x7d,0x91,0xfe,0xa7,0x51,0xca,0x69,0xfd,0x09,0x72,0xb0,0xe2,0x61,0x67,0x70,0x3e,0x93,0x4a,0xe6,0x46 },
{ 0x8a,0x58,0xfa,0x3d,0x82,0x1e,0x96,0x3a,0xc7,0x45,0x6c,0xb9,0xe6,0x59,0x43,0xd6,0xa0,0x10,0x99,0x83,0x22,0x4c,0xa7,0x20,0xae,0xaa,0xa2,0x73,0x93,0x0a,0x1d,0x57 },
{ 0xf6,0x80,0x6e,0x85,0x69,0x62,0xc6,0x67,0x6b,0x01,0x50,0xaa,0xd0,0x2b,0x84,0x59,0x3f,0x85,0x64,0xe6,0xed,0xc0,0xd3,0x11,0x4e,0xad,0x51,0xd2,0x41,0xc1,0xb7,0x75 },
{ 0x59,0xe8,0x10,0x44,0x08,0x67,0x84,0x79,0x50,0xe5,0x41,0x35,0xaa,0x3d,0x78,0x90,0x80,0x6b,0x85,0xdb,0xc6,0xf1,0x08,0x2f,0xf5,0x84,0x41,0x23,0xe6,0x39,0x3f,0x10 },
{ 0x80,0x6c,0xc7,0x72,0xff,0x82,0xfb,0xf0,0x66,0x44,0xa4,0x8c,0x60,0xfe,0x04,0xe7,0xf5,0xfd,0x54,0x01,0xa8,0xac,0xbc,0xea,0x2e,0x48,0x44,0x12,0x5b,0x7b,0x1b,0x58 },
{ 0x1f,0xcd,0xe4,0xca,0x8d,0xe6,0xd1,0xdd,0xad,0x8e,0x72,0xc6,0x39,0xf6,0xf2,0x76,0x03,0xc7,0x1c,0x2c,0x8a,0x11,0x86,0xcf,0x82,0x07,0xf6,0x67,0xba,0x54,0x20,0x2b },
{ 0x20,0xf0,0x24,0xc6,0x4a,0xe3,0xca,0x6c,0x4f,0xf3,0x9d,0x5e,0x04,0x59,0x77,0x98,0x62,0xea,0x0e,0x39,0xee,0x11,0x2e,0xbd,0x57,0xea,0xea,0xeb,0xd7,0xe4,0x5c,0x85 },
{ 0x85,0xe3,0x23,0xa4,0xdd,0xb8,0x24,0x86,0x10,0x74,0x1c,0x57,0x10,0x1c,0x40,0xef,0x58,0xa3,0x48,0xbb,0x03,0xb7,0xa5,0x87,0x74,0xdf,0x67,0xf3,0xb8,0xc9,0x83,0x78 },
{ 0x8b,0x5d,0x34,0x4b,0x37,0xdf,0xe5,0x4e,0x94,0xd6,0x7b,0xb2,0x41,0xa0,0xd6,0x13,0x70,0xbb,0x2c,0x88,0x9a,0xec,0x52,0x1f,0x63,0xa3,0xf4,0x97,0x7e,0xde,0x7b,0xec },
{ 0x3a,0x2d,0xf8,0xd4,0x96,0xb0,0xe0,0x28,0x78,0x53,0xed,0x2b,0x5c,0xa8,0x22,0x87,0x8e,0x7c,0x12,0xd1,0x06,0xad,0x10,0x29,0x14,0xd5,0x47,0x82,0xfc,0xfa,0x1b,0x08 },
{ 0x35,0x50,0x69,0xf4,0xc8,0xeb,0x87,0x18,0x3c,0x05,0x16,0xeb,0xa3,0xc4,0x05,0x37,0xda,0x59,0x67,0xef,0x7d,0xea,0x22,0x4c,0x08,0x7d,0x34,0x0d,0xdd,0x80,0x89,0x69 },
{ 0xbd,0x26,0x3e,0xd5,0xcc,0xb8,0x02,0x50,0x15,0x75,0x6c,0xed,0x7c,0x20,0x43,0x50,0x5d,0x8c,0x5d,0xea,0x10,0x7e,0x15,0x8b,0x37,0xa6,0xfd,0x90,0xd2,0x75,0xf6,0x33 },
{ 0x05,0xf2,0x50,0x1c,0x57,0xbc,0x49,0xb5,0xdb,0xbe,0x0a,0x4c,0x94,0x5c,0x16,0xa6,0xba,0xf9,0x1f,0xaa,0x88,0x93,0x40,0x94,0x4d,0x81,0x9c,0x0d,0xae,0x7a,0x25,0xee },
{ 0x9e,0xa6,0xdd,0x11,0xf9,0x38,0x1a,0xd2,0xdd,0x5f,0x47,0x49,0x16,0x7c,0xc9,0x32,0x25,0x3a,0xd8,0xdb,0x55,0x74,0xa7,0x4c,0xb3,0x7c,0x64,0xdc,0x38,0xdb,0xa4,0xad },
{ 0xfb,0xda,0xe6,0x75,0x2f,0x0d,0x3d,0x76,0x98,0x90,0x7e,0x85,0x5a,0x67,0xde,0x70,0xb0,0x97,0x81,0x18,0xa0,0x59,0x30,0x5e,0x6d,0x5c,0x97,0x01,0xc7,0xc0,0xb6,0x3d },
{ 0xb0,0x5d,0xdc,0x8b,0xbd,0xc9,0x63,0x1c,0x81,0xaf,0x00,0xb5,0x8f,0x38,0x27,0x71,0x90,0x57,0xc5,0xa6,0x33,0xb4,0xf7,0xd1,0x09,0x77,0xba,0xbf,0x42,0xdc,0x68,0x8a },
{ 0x5b,0xc7,0x23,0x15,0x39,0x85,0xaf,0xaf,0xb8,0x06,0xe2,0x45,0xc3,0x1e,0xdc,0xae,0xf8,0x59,0x07,0x0e,0x14,0xef,0x32,0x35,0x89,0x1b,0x15,0x1b,0x48,0x04,0x94,0x35 },
{ 0xeb,0x43,0x5b,0x96,0x59,0x5c,0x4f,0x8b,0x67,0xaf,0x32,0x65,0x0a,0xf8,0x0e,0xd0,0x9c,0x95,0xf5,0xe6,0x62,0xb4,0x50,0x0c,0x4f,0x80,0x54,0x61,0x5e,0x13,0x29,0xed },
{ 0xb4,0xdf,0x32,0x52,0x6a,0x21,0x8e,0x27,0xa5,0xe0,0x4e,0x4a,0xaf,0x66,0xb7,0xc6,0x4c,0x55,0xcc,0x80,0x70,0x76,0x27,0x26,0x0f,0xcb,0xf9,0xbd,0x0d,0x27,0xd4,0x2d },
{ 0x60,0x7d,0x45,0x13,0x80,0x53,0x0d,0xfa,0x3f,0x69,0x23,0x93,0x39,0xe6,0xeb,0x00,0x14,0x30,0x7c,0xf5,0xec,0x87,0x10,0x4b,0xa3,0xcd,0x8d,0xe7,0x02,0x81,0x5b,0x41 },
{ 0x42,0xf2,0x18,0x7c,0x99,0x79,0xac,0xad,0x3b,0x36,0xe5,0x11,0x44,0xf2,0xe5,0x56,0x1a,0x09,0x41,0xd5,0x8e,0xb6,0x7c,0xfc,0x12,0xf6,0x12,0x04,0xb6,0x47,0x52,0x1e },
{ 0xc5,0x54,0x82,0xbe,0x4c,0x0b,0x60,0xfb,0x09,0xea,0x93,0x2e,0x41,0x2f,0xe4,0x20,0xd1,0xa4,0x1f,0x06,0x1b,0xde,0xdf,0x0a,0xa0,0x9c,0x3c,0xf3,0x7e,0xe4,0x05,0xaf },
{ 0x61,0xb8,0xd6,0x74,0x0a,0xc3,0xdd,0x43,0x72,0xfc,0xc0,0xdb,0x7d,0x7e,0x6e,0x3e,0x51,0xd4,0x87,0x66,0x92,0x47,0xb5,0x24,0x10,0xdf,0xe0,0xd7,0x5a,0x8e,0x79,0x4c },
{ 0x06,0xc4,0x2a,0xef,0xf2,0x74,0x14,0x5b,0xec,0xda,0xab,0x49,0x19,0x16,0x1d,0x9a,0xd2,0x19,0x77,0xe6,0xf2,0x80,0xc5,0x5b,0xf1,0x52,0xbc,0xa4,0xaa,0x5d,0x54,0x7c },
{ 0xe9,0xba,0xb5,0x91,0x8c,0x6c,0x56,0xad,0xf5,0xb5,0x2d,0x56,0xce,0x9a,0x7f,0x6b,0x61,0xfb,0xf4,0x08,0x37,0xf6,0x77,0xf5,0xe6,0x63,0x65,0xef,0x11,0x8a,0x33,0xe1 },
{ 0x22,0xf2,0xf3,0xbc,0xa5,0x4e,0x3a,0xa6,0xcb,0xa9,0x34,0xab,0x7d,0x0f,0x6e,0xb1,0xda,0xa3,0x48,0xa4,0x9b,0xe3,0x9d,0x23,0x35,0x89,0x61,0x52,0xf2,0x36,0xa6,0xbe },
{ 0x36,0xb9,0x08,0x45,0xe4,0x6a,0xe5,0x01,0xde,0xed,0xcd,0x81,0x63,0x30,0xf9,0x2a,0xf5,0x82,0xb7,0x2a,0x69,0x10,0xdf,0x65,0x64,0xe4,0x89,0xf0,0x0e,0x07,0xcc,0x9c },
{ 0x0e,0xef,0x6b,0xb1,0xb5,0x5f,0x06,0x14,0x61,0xb1,0xba,0xe2,0xd3,0xc1,0x3a,0x97,0x76,0xe5,0xd6,0x22,0xed,0xd7,0xf8,0xb1,0xae,0x59,0x17,0xa2,0xc0,0xd3,0x65,0x90 },
{ 0xb0,0x5c,0x0d,0xf0,0x28,0xe7,0x78,0x89,0x94,0xbc,0x42,0xf2,0x84,0xa6,0x5e,0x1b,0x20,0xd2,0xce,0xd7,0x7d,0x02,0x6c,0x86,0xb1,0xe4,0xa1,0x39,0x2d,0xd1,0xcb,0xb8 },
{ 0xaa,0xca,0xeb,0xb0,0x68,0xcc,0xdd,0x5e,0x5c,0x36,0x13,0x8a,0x2d,0x0f,0xed,0xb8,0x1e,0x2e,0x73,0x31,0xdf,0x02,0xaa,0x1c,0xf7,0x76,0xaa,0x65,0x2d,0x3a,0x4f,0x02 },
{ 0xa8,0xc2,0xff,0x2a,0x5a,0x87,0x33,0x51,0xcb,0x88,0xec,0xb1,0x3e,0xcc,0x68,0xb9,0x4e,0x5d,0x80,0x42,0xcd,0x90,0x6f,0x31,0xbe,0xf4,0x78,0xe3,0xe6,0x16,0x9d,0x66 },
{ 0x0d,0xaf,0xc3,0x08,0x03,0xde,0xc0,0xcf,0xb4,0xd6,0xf9,0x32,0xa4,0x0a,0x01,0xbc,0x21,0x8d,0x4c,0xc3,0x5c,0x23,0x22,0x20,0x63,0x37,0x2e,0x26,0x15,0x3a,0x62,0x3c },
{ 0x31,0x79,0x4d,0x34,0xfb,0xd0,0x8e,0x55,0xa1,0x66,0xc1,0xd0,0x90,0xe3,0xe5,0xc4,0x21,0x5f,0x19,0x80,0x60,0xd9,0xfe,0xb1,0x97,0x1a,0x6f,0x3d,0x84,0xe2,0xb4,0x7d },
{ 0x53,0x9c,0xf0,0xde,0xe1,0x35,0xf1,0x48,0xbf,0xb7,0x91,0xf7,0x5f,0xfc,0x69,0x85,0xd8,0x25,0x1f,0xc0,0x65,0xf8,0x08,0xa5,0xda,0x3d,0xde,0x5a,0xdc,0x6c,0x76,0xed },
{ 0x40,0xd5,0xec,0xbc,0x3c,0x0a,0x48,0x69,0x20,0xf2,0xd9,0xe3,0x7a,0x40,0xf9,0x5b,0xb1,0x62,0x9a,0x77,0xbe,0xf7,0x92,0x56,0xbf,0xe9,0xb9,0xaf,0x2a,0x6c,0xb9,0xf8 },
{ 0xff,0x5e,0xfd,0x23,0x7b,0xf6,0x00,0x5e,0x96,0x0e,0x9c,0x5f,0x9b,0x86,0x0e,0x17,0x4e,0xe4,0x9d,0xd1,0x8b,0xaa,0x34,0xb0,0x81,0x4e,0xb1,0xee,0x5a,0x2e,0xd3,0x56 },
{ 0xab,0x7f,0xc2,0x42,0xda,0xb0,0xcb,0x84,0xac,0x5d,0x41,0x13,0x95,0x83,0x04,0xc0,0x07,0x8e,0x08,0x60,0xb6,0xc0,0x03,0x11,0x86,0x2a,0xdd,0x77,0xf8,0x42,0xd8,0xc1 },
{ 0x89,0x1d,0xeb,0x91,0xd9,0x56,0xba,0x73,0x33,0x9c,0xaf,0x1f,0xb0,0x34,0xd0,0x1e,0x25,0x8f,0xe6,0xe7,0xd4,0xb5,0x78,0xe0,0x40,0xd8,0xdd,0x98,0x2d,0xd9,0x6d,0xd6 },
{ 0xa4,0x12,0xf9,0xe1,0xec,0x77,0x2f,0xec,0x5b,0xe8,0xd5,0xd2,0x85,0x2a,0xac,0x7d,0xda,0xf0,0xfb,0xe5,0x48,0x88,0x2b,0x81,0x06,0x65,0x85,0x13,0x61,0xc8,0x7a,0xff },
{ 0xd7,0x54,0xca,0x59,0xd0,0xb6,0x0b,0x69,0x6a,0x6b,0xfd,0x4a,0xab,0x64,0x4f,0x49,0xde,0xa9,0x74,0xfc,0x49,0x82,0x1a,0x8c,0x54,0xa9,0xa5,0x12,0xef,0x4a,0x24,0xe9 },
{ 0xb3,0x4f,0xa2,0x0b,0x57,0xd8,0x69,0xf5,0x47,0x48,0x8b,0x4b,0x31,0xc7,0x6f,0x2a,0xb3,0xf2,0xdc,0xeb,0xca,0xb1,0x24,0xf7,0x02,0xbe,0x8d,0x34,0xb1,0x1b,0x4c,0x87 },
{ 0x1a,0xda,0x51,0x96,0xd2,0x60,0xde,0xac,0xf9,0xd5,0xa0,0xaf,0x53,0x08,0x29,0xd1,0x33,0x5e,0x10,0x25,0x37,0x3a,0x13,0x0a,0xf4,0x65,0x22,0x66,0x7c,0xcd,0xea,0x5b },
{ 0x84,0x4e,0x59,0x84,0x78,0x46,0x58,0x4e,0x69,0x0d,0x4b,0x6e,0x9d,0xef,0xb9,0xf7,0xb5,0x4c,0xe3,0x76,0x49,0xb6,0x4a,0x0e,0xcb,0xa5,0x0d,0xee,0xcd,0x1b,0x7d,0x22 },
{ 0xde,0x6c,0x5c,0xab,0xad,0x43,0xf0,0x51,0x56,0x6c,0x03,0x0a,0x6f,0xb9,0x70,0xcf,0x74,0x27,0xfb,0x1d,0x59,0xe7,0x02,0x69,0xa0,0xe2,0xcd,0x13,0x3f,0xf5,0x99,0xc9 },
{ 0x14,0xb7,0x5d,0xe7,0x3e,0x57,0x3a,0xf6,0x42,0xff,0xcc,0x6a,0x37,0xf3,0xef,0x3e,0x7b,0xac,0xdd,0xf3,0x1c,0x29,0x03,0xc2,0xce,0xeb,0x49,0x68,0x35,0x78,0x49,0x3a },
{ 0x9c,0x3a,0xe1,0x06,0xdd,0x0a,0x52,0x48,0x30,0x86,0xad,0xfa,0x32,0x90,0x2c,0xc2,0xaa,0x78,0xce,0x38,0x09,0x87,0x30,0x24,0x1e,0x15,0xb9,0x40,0x05,0x24,0x01,0x58 },
{ 0x9f,0xd6,0x36,0xa5,0x60,0x59,0x67,0x1c,0x69,0xcc,0xc3,0xcc,0x52,0xd2,0x2c,0xf8,0xf8,0xec,0x6d,0x6d,0x0f,0xaf,0xc1,0xde,0x7a,0x6c,0xde,0xc1,0xbc,0xf4,0xc1,0x10 },
{ 0x68,0x63,0x26,0xf2,0x6c,0x04,0x5b,0x74,0xb7,0xff,0x7e,0x68,0x8f,0xf9,0x64,0x6b,0x13,0x70,0xf3,0x0b,0x00,0xef,0x70,0xea,0x46,0x01,0x17,0x8c,0xdd,0xa4,0xa5,0xf0 },
{ 0x2b,0x4f,0xf4,0xd1,0x85,0x26,0x59,0x78,0xf5,0x05,0x1e,0x14,0xaa,0x9e,0xfa,0x72,0x1e,0x76,0x0c,0x04,0xf3,0x78,0x91,0x0a,0x84,0x6d,0x1f,0xf2,0x2f,0x55,0x6d,0x32 },
{ 0x18,0x82,0x1f,0xf3,0xfc,0x27,0xdd,0x89,0xf7,0x9c,0xde,0x34,0xc4,0x7c,0xc1,0xf1,0x28,0x77,0xa8,0x9e,0x31,0xe2,0x5b,0xd1,0xc9,0xe8,0x13,0x60,0x08,0x8f,0xc8,0xcf },
{ 0xce,0x46,0x2c,0x5f,0x8d,0x46,0xe1,0x7e,0xc1,0x8c,0x49,0x13,0x7d,0xa1,0x0d,0x97,0x19,0xad,0xa0,0x5d,0xdc,0x5f,0xf7,0x03,0xe4,0x93,0xfa,0x53,0x14,0xdd,0xbe,0x8c },
{ 0xde,0xc4,0x58,0xfb,0x6f,0x3c,0x18,0xe9,0xab,0xc4,0xeb,0x37,0x39,0x99,0x44,0x1d,0xc2,0x03,0x7b,0x7b,0x03,0x01,0x6e,0x8b,0x3f,0xb2,0x33,0xe5,0xb2,0x22,0x26,0x65 },
{ 0xb4,0x88,0xec,0x48,0x16,0x1d,0xf3,0x67,0x78,0x08,0x16,0x8f,0xe8,0x93,0x88,0x21,0x29,0xcb,0x5c,0xfb,0xf7,0x65,0x56,0x74,0x2c,0xf7,0x76,0x26,0xdb,0xb0,0x8e,0x48 },
{ 0xf9,0x31,0x31,0x20,0x2b,0x26,0xd8,0x41,0x26,0xe7,0x16,0x60,0x09,0xa5,0xa9,0x4b,0x1d,0x4d,0x04,0xc3,0x4f,0x74,0xbc,0x8e,0x56,0xd9,0x4d,0xbc,0x3c,0xaa,0x52,0x50 },
{ 0xa0,0xd2,0x61,0xa7,0x1a,0x50,0xb8,0x8d,0xe6,0x29,0x36,0xb6,0x81,0x6d,0x3f,0x81,0x15,0x11,0x49,0x0f,0xcd,0x9d,0xce,0x52,0xee,0x25,0xd2,0x9a,0x22,0x22,0x7d,0x26 },
{ 0x84,0x1b,0xc5,0x96,0x7a,0xf2,0x94,0x67,0x21,0x9b,0x1e,0x4e,0xa0,0xcf,0x68,0x01,0xac,0xf5,0xf3,0xe4,0x5c,0x4b,0x17,0x9f,0xce,0xa6,0x67,0x85,0x23,0xca,0xb8,0x51 },
{ 0xd4,0x09,0x7e,0x8d,0x63,0x80,0x48,0x4c,0x60,0x45,0x57,0x17,0x64,0x36,0x5c,0xa2,0x65,0x99,0xee,0x7e,0x35,0xfe,0x9c,0x93,0xfc,0x75,0x93,0x94,0x25,0x38,0xc4,0xfe },
{ 0x34,0xa6,0xab,0x4d,0xb1,0x5c,0x19,0x48,0xb5,0x92,0x14,0xbf,0xce,0xac,0x6a,0x97,0x7b,0x72,0x03,0x69,0xe4,0x71,0xbc,0x70,0x59,0x05,0x1d,0x1b,0xc6,0x2f,0xaf,0x0d },
{ 0xf6,0x35,0x1e,0x5e,0x91,0x30,0x54,0x04,0xb8,0x1c,0xbd,0xe2,0x96,0x7d,0x4a,0xec,0xe7,0x6e,0xb3,0xf0,0x20,0x5d,0xdc,0x13,0x7d,0x88,0xd4,0xbe,0xee,0x7a,0x9e,0x79 },
{ 0x5b,0xc9,0x13,0x79,0x73,0x81,0xba,0x63,0x80,0xa7,0xcd,0x6f,0xab,0xfe,0x21,0x5d,0x1b,0xc2,0xae,0x3f,0xea,0x4a,0x67,0x7b,0x81,0xe5,0xa7,0x2a,0xbb,0x70,0x5d,0x69 },
{ 0x5d,0x9e,0x53,0x85,0x9d,0xfc,0x61,0xa2,0x23,0xdc,0x63,0xd9,0x4a,0x9e,0x0c,0x00,0x71,0x4e,0x9c,0x92,0x82,0x24,0xc7,0x0f,0xb1,0xe6,0xb1,0xfb,0x93,0x8b,0xeb,0xa5 },
{ 0x0e,0x60,0x8e,0x13,0x1f,0x84,0x55,0x12,0x1b,0x10,0xc6,0x6e,0x87,0x8d,0xca,0xc4,0xdf,0xcb,0xa9,0x4a,0x37,0xbd,0xa2,0x85,0xc7,0xa0,0x9c,0x96,0x7c,0x69,0x53,0xca },
{ 0x17,0x4c,0x0e,0x63,0x34,0xd4,0xf8,0x66,0x14,0xf2,0xe4,0x0b,0xde,0x6e,0x7d,0x57,0x66,0x58,0x85,0xff,0x2e,0x0a,0xdb,0x21,0x3a,0x1d,0x85,0x28,0x5c,0x7e,0x56,0xe2 },
{ 0xf0,0x50,0x78,0x1b,0x7e,0x53,0x6b,0x68,0x3b,0x25,0x41,0x94,0x15,0xa9,0x09,0x4d,0x12,0xbd,0xa4,0xb3,0x8c,0x00,0x04,0x79,0x0d,0xa6,0x5a,0x1f,0x2d,0x85,0xca,0x26 },
{ 0x3f,0xc7,0xf3,0x32,0xb7,0x33,0x3b,0x61,0x7e,0x1d,0x87,0x8b,0x4f,0x89,0x72,0x08,0x8b,0x9f,0x2b,0x77,0x26,0xe3,0x11,0x04,0x8f,0xd7,0xf1,0x9a,0x6c,0x01,0xda,0x73 },
{ 0x3c,0xe5,0x65,0x37,0xd6,0x39,0x29,0xf8,0x0d,0x9a,0xc3,0x1d,0x5b,0x01,0x32,0x7d,0x29,0xe7,0x4a,0x73,0x85,0xa2,0xde,0xb7,0x45,0x44,0xe4,0x2a,0x9a,0x71,0xd0,0x2d },
{ 0x54,0x70,0xeb,0x86,0xef,0x85,0x7f,0xf1,0xbb,0x7a,0x4a,0xbe,0xc0,0x87,0xff,0x3e,0x5e,0x9b,0x39,0xe8,0x07,0x6c,0x2b,0xda,0x96,0xc0,0xd9,0x49,0x83,0x47,0x47,0x9f },
{ 0x32,0x85,0xc7,0x27,0x2e,0xcd,0x95,0x41,0x70,0xb2,0xf7,0x4d,0x04,0x42,0x6b,0x6d,0xed,0xae,0x97,0xbf,0x98,0xb3,0x14,0xe5,0x4e,0x93,0x6e,0xdb,0x00,0x97,0xa7,0xce },
{ 0xd9,0x36,0x81,0xe1,0xaf,0x32,0x8f,0x46,0x2d,0xf8,0x3e,0xbb,0xe6,0x25,0x76,0xa5,0xfe,0x19,0x17,0x5a,0x8a,0x5a,0x67,0xab,0x34,0x87,0x88,0x52,0x95,0x44,0x14,0xc9 },
{ 0xa5,0x19,0x11,0x79,0xd3,0x49,0x17,0x73,0x30,0x49,0xa7,0x59,0x9c,0xc5,0x5d,0xb1,0xb5,0x46,0x51,0xad,0xd1,0x48,0x7b,0x58,0x7d,0x67,0xe8,0x20,0xc0,0xb0,0xf2,0xda },
{ 0xf4,0x35,0xed,0x81,0x45,0x2a,0x47,0xf5,0x5b,0x75,0x90,0x3f,0x37,0x8a,0x99,0x3e,0xdb,0x8e,0x81,0xf2,0xe7,0x06,0x58,0xe0,0xd6,0x07,0x1e,0xcf,0x77,0x44,0x74,0x33 },
{ 0xc9,0xd1,0xdc,0x8a,0x51,0xb9,0xe8,0xe5,0xaf,0x60,0xd1,0x70,0x1a,0xb2,0x25,0xe1,0xa5,0xfd,0x24,0x2e,0x4e,0xd1,0xa6,0x53,0x5e,0xcd,0x63,0x68,0xbd,0xe7,0xff,0x42 },
{ 0x36,0x62,0xa1,0xd3,0x62,0x56,0x93,0x66,0x6d,0xd8,0x51,0xd5,0x42,0xbf,0x8b,0x38,0x3c,0xb8,0x58,0xa8,0xd1,0x30,0xf0,0x1b,0x22,0x2d,0x00,0x57,0x7d,0x6f,0x5b,0xc3 },
{ 0x6f,0x0d,0x74,0x77,0x2e,0x53,0x46,0xc6,0xf3,0x17,0x68,0xc4,0x23,0x90,0x81,0x1b,0xfc,0x27,0xf2,0x84,0xe4,0xcd,0x9e,0xb8,0xbd,0x15,0xcb,0xb0,0xe9,0xf3,0x0a,0xe1 },
{ 0x7b,0x6d,0x80,0x73,0xdf,0x9e,0x90,0xc5,0xbd,0xf7,0xdd,0x63,0xae,0xd6,0x4b,0xeb,0x08,0x67,0x89,0x86,0x17,0x98,0xca,0x68,0xe7,0x29,0xb7,0x33,0xdf,0x3f,0xc9,0x19 },
{ 0x65,0xe7,0xa9,0x08,0xc0,0xb9,0x16,0x4e,0xb1,0x0a,0xa8,0xf3,0x06,0x8e,0x98,0xc2,0x37,0x72,0xf8,0x74,0xa7,0x46,0x50,0x29,0x9e,0x8d,0x86,0x1d,0xcc,0x84,0x6f,0xa2 },
{ 0xba,0x4b,0x5d,0x95,0x4d,0xae,0x5c,0xdd,0x75,0x2c,0x88,0x0d,0xe4,0xdf,0x79,0x0e,0x1e,0x28,0x4f,0x9b,0x94,0x8a,0x2e,0x77,0x5d,0x99,0xf7,0x4e,0xb2,0x42,0x07,0x9f },
{ 0xb1,0xe5,0x92,0x60,0x64,0x92,0x50,0x2b,0x2d,0x70,0xa3,0xd1,0x5f,0xb0,0xb0,0x4b,0x90,0xfb,0x53,0xe8,0x64,0x44,0x9a,0x80,0x4a,0xc9,0xd6,0x8c,0x81,0x21,0x52,0xba },
{ 0x2f,0x20,0xec,0xab,0x36,0x96,0x71,0x5b,0x68,0x5f,0x7c,0xd3,0x0e,0xb8,0x13,0xcb,0xbb,0xf2,0xa3,0xc1,0x55,0xdf,0x8a,0x4e,0xa1,0xfc,0x58,0x69,0xfb,0xd1,0xa0,0xe2 },
{ 0x4c,0x5c,0xe3,0x7c,0xfa,0x58,0x65,0x60,0xc3,0xc2,0x2a,0xc1,0xa0,0xa9,0x59,0x0e,0x86,0xa7,0x31,0xd6,0x45,0xeb,0x98,0xcd,0x74,0x9f,0xe0,0x39,0x0e,0xe8,0x6b,0x73 },
{ 0xbc,0x7c,0x6e,0x54,0x89,0xa4,0xa6,0xaf,0x47,0xc4,0x15,0xfc,0x2a,0xfa,0xf5,0xe1,0xe5,0x5e,0xce,0xed,0xfd,0xf5,0x1d,0xc7,0xa6,0x0f,0xe0,0x80,0x8a,0xf8,0x64,0x98 },
{ 0x32,0x26,0x21,0x32,0xba,0xcd,0xb5,0xae,0xbf,0x1b,0x1f,0x89,0xe3,0x6b,0x15,0xac,0xc3,0xe5,0xbb,0xc0,0x08,0x25,0x71,0x1d,0xae,0x83,0x87,0x40,0xb1,0x1c,0x3b,0x73 },
{ 0x0e,0xdc,0x03,0x3d,0x42,0xea,0x66,0xe2,0xa6,0x05,0x3c,0x27,0x1f,0x79,0x91,0x67,0xb3,0x85,0x25,0x28,0xac,0xe3,0x60,0xd1,0x2e,0xb7,0x23,0xd3,0xb1,0x19,0x73,0xbb },
{ 0xc4,0x37,0x40,0xc0,0x80,0x16,0x18,0x3e,0x27,0xe1,0xc9,0xf0,0x07,0xe2,0x3b,0x00,0x9e,0xfc,0x78,0x11,0xd7,0xd8,0xff,0xbb,0x29,0x29,0xe6,0x84,0xbd,0xe5,0xad,0xdb },
{ 0x2f,0x0c,0xa1,0x0d,0x50,0x38,0xf5,0xa0,0x53,0xfe,0xfc,0x75,0xb9,0x1c,0x3b,0x3e,0x97,0xe2,0x47,0x83,0xe8,0xa1,0xae,0x21,0x95,0x65,0xd7,0x35,0xb7,0x2b,0x1e,0x08 },
{ 0xd5,0x17,0x58,0x78,0x34,0xac,0xba,0xd9,0xf5,0xc5,0x0a,0xa2,0xea,0x0c,0x78,0x50,0x23,0x62,0xe0,0xc7,0xab,0xc4,0xa0,0x4c,0xb5,0x0f,0xd5,0x9e,0x38,0xc8,0x29,0xf9 },
{ 0x4e,0x7a,0xbf,0xaa,0x22,0xeb,0xaf,0x92,0xb3,0x93,0xcd,0xd3,0xc3,0x9e,0x8a,0xea,0x34,0x53,0xe3,0xd5,0x69,0x37,0xa4,0xeb,0x32,0xb8,0x30,0x47,0xc5,0xe6,0xb5,0xeb },
{ 0x8a,0xc8,0x10,0xbb,0x0f,0x40,0x98,0x98,0xaa,0xdf,0x59,0xc7,0x0b,0xd8,0x6e,0xd3,0x1b,0xad,0x92,0x16,0x77,0x6f,0x4b,0x19,0xfd,0x66,0xb4,0x99,0xad,0x08,0xe8,0x44 },
{ 0xcf,0x0a,0xfd,0x0d,0x18,0xd5,0xe1,0xde,0x9b,0x0f,0x91,0xdf,0xc5,0xf2,0x03,0xd4,0x51,0x02,0xb7,0x6a,0x2d,0x64,0x9f,0x70,0x4f,0x23,0x54,0x2b,0x6b,0x99,0x7d,0xcd },
{ 0xfb,0x81,0x2b,0x2a,0xaa,0xc4,0x54,0x23,0x0f,0x09,0x7a,0xed,0x9f,0xa0,0x07,0xc2,0x6e,0x49,0xc7,0xdd,0x36,0xc6,0x6e,0x2e,0xd4,0xd7,0x6e,0xbe,0xe2,0x0e,0x46,0xb1 },
{ 0xe7,0xe8,0x89,0x9e,0xe3,0x84,0xd3,0xdf,0xa2,0x16,0xde,0x76,0x18,0x0e,0x72,0x31,0xc2,0xfa,0x40,0x9a,0xc9,0x1e,0x76,0x2d,0x17,0x13,0x20,0x79,0xfa,0xa3,0x4c,0xa5 },
{ 0xb3,0x84,0xc8,0xc4,0x3f,0x36,0x79,0x4f,0xc8,0xb8,0xce,0x4e,0x92,0xd4,0x90,0xd3,0xc9,0xe2,0x69,0x97,0x26,0xdd,0x8f,0x58,0x03,0xde,0x1d,0xf0,0x37,0xff,0xcd,0xa0 },
{ 0x9a,0x39,0x41,0xa7,0xd4,0xa4,0xd1,0x04,0x0b,0xb7,0x3b,0x3c,0x3c,0x79,0x2c,0xdc,0x6a,0x75,0x33,0x62,0xb7,0x0e,0x8b,0xe8,0xd2,0x11,0x7c,0x75,0xb1,0xa1,0xd4,0xd5 },
{ 0x95,0x6b,0xe0,0x38,0xfd,0xe1,0x11,0xd7,0xe9,0x41,0x63,0xcf,0x3e,0xe5,0xdf,0x6c,0xab,0xf7,0x61,0xec,0xe8,0xaa,0x6b,0x6b,0x3f,0x6a,0xe2,0x43,0xf9,0x55,0x23,0xdf },
{ 0x99,0x13,0x75,0xd6,0x75,0x4b,0x2d,0x3c,0xc2,0x07,0x4f,0xeb,0x8d,0x9c,0x2b,0x1d,0x92,0x04,0x34,0x2d,0x55,0xf9,0x80,0xa1,0x45,0x6a,0x59,0x6a,0xc6,0x90,0xbe,0x2b },
{ 0x2c,0xcb,0xe8,0x83,0x5e,0x42,0x6d,0x93,0xea,0xa8,0x94,0xf9,0xfa,0xb2,0x80,0x8d,0xaa,0x04,0xfa,0x57,0x37,0x36,0x71,0xea,0xf9,0xdd,0xe1,0x71,0xdb,0x4b,0x97,0x95 },
{ 0x0c,0xdd,0xaa,0xa8,0x7d,0xf9,0x4f,0xd2,0xb5,0xdf,0x20,0xf5,0x10,0xc0,0x0c,0xd3,0xd0,0x8e,0xd4,0xd3,0x6a,0x13,0x60,0xb3,0x1c,0x5b,0x7b,0x75,0x18,0xe7,0xe4,0x47 },
{ 0x4e,0x73,0xd5,0x6b,0x41,0x7d,0x7a,0xc7,0x08,0x78,0x47,0x81,0xbc,0x5e,0xcf,0xd9,0xfc,0x4d,0xdc,0x0f,0xe5,0x43,0x4b,0xe2,0x92,0x57,0x25,0x87,0x54,0xae,0xc2,0x68 },
{ 0x26,0xea,0xfc,0x93,0x67,0x03,0x3b,0xca,0x18,0xf5,0x6f,0x3f,0x66,0x30,0x8a,0xca,0x9b,0x50,0x76,0x6f,0x2f,0x67,0x62,0xa5,0xf6,0x0e,0xa9,0xee,0xc3,0x77,0xed,0xfc },
{ 0xa1,0x58,0x13,0x5e,0xc9,0x21,0x45,0xdc,0x58,0x90,0x4d,0xb9,0xc7,0x0d,0x25,0xa5,0x05,0x6d,0xe3,0xd8,0xb7,0xb3,0x95,0xd9,0x49,0x74,0xb4,0xf5,0xb6,0x26,0x22,0x9c },
{ 0x5f,0x63,0x31,0x9b,0xc1,0xda,0xb0,0xdb,0xc6,0x30,0xfb,0x1a,0x89,0x82,0x11,0x77,0x98,0x78,0xbd,0x57,0x22,0x90,0x0b,0x5e,0xad,0x14,0x70,0x5c,0x0e,0x91,0x12,0xde },
{ 0x59,0x3b,0x95,0x18,0xef,0x2a,0xe4,0xf1,0x19,0xf2,0x74,0x78,0x2d,0xde,0xbc,0x41,0x11,0xe0,0xe8,0xf6,0x6b,0xa1,0x15,0x77,0x34,0x40,0x50,0xc1,0x4f,0x25,0x3f,0x95 },
{ 0x8c,0x6c,0x91,0xd4,0x6a,0xe3,0xd5,0xfd,0x68,0x42,0x64,0x77,0x5e,0x46,0x98,0x86,0x67,0xc8,0x88,0x59,0xf8,0x01,0x02,0xd8,0xad,0xa6,0x51,0x4a,0x03,0x97,0x21,0x56 },
{ 0x4f,0xfa,0x6e,0xce,0x61,0x04,0xbd,0xed,0x58,0x17,0xfc,0x73,0x9a,0xba,0x5c,0x3e,0x5f,0xcd,0x51,0x2f,0x04,0x1f,0xea,0x59,0x67,0xb3,0x74,0x79,0x39,0x6a,0xa6,0xd5 },
{ 0xf2,0xf5,0x24,0x28,0x81,0x8c,0xc6,0x71,0x71,0xdb,0x77,0x13,0x34,0xbf,0xa2,0xe9,0x0f,0x0c,0xc8,0x77,0xdf,0xac,0xbc,0x0c,0x79,0xcd,0x55,0xb6,0x55,0xf1,0x71,0x6c },
{ 0xd6,0x85,0x76,0xda,0x23,0xc8,0x2b,0x60,0x34,0x3e,0x53,0xfd,0x5d,0x0b,0x85,0x05,0x6b,0xec,0x26,0x5b,0x8e,0x32,0xef,0x66,0x47,0xf3,0xcb,0xb7,0x15,0x42,0xa7,0xda },
{ 0x11,0x26,0x8e,0x70,0xd5,0xdb,0x9e,0xa0,0xf6,0x87,0x13,0xc7,0xf3,0xc8,0x11,0x15,0x02,0x2a,0xf9,0xd5,0x0f,0x93,0xb5,0x42,0xe7,0xc4,0xec,0x07,0xe7,0x51,0x3b,0x15 },
{ 0xeb,0x3b,0xcd,0xea,0x83,0xe1,0xa4,0x05,0x6c,0xcf,0xbc,0xd1,0x66,0xd5,0xca,0x6a,0x88,0xca,0x88,0xe1,0x54,0xa2,0x43,0xb0,0x6f,0xee,0x9c,0xfc,0xe2,0x36,0x9c,0xf8 },
{ 0x74,0x82,0xd4,0x36,0x8a,0xb1,0xa3,0x00,0xb2,0x00,0xf6,0x83,0x5e,0x4a,0x54,0xf1,0xee,0x38,0x7d,0x6a,0xeb,0x87,0x4d,0x8d,0xfa,0x36,0x57,0x20,0x3d,0x3a,0xc1,0x5f },
{ 0xb8,0x41,0xee,0x0c,0x97,0x27,0xdb,0x15,0x72,0x3e,0x83,0x66,0x9b,0x4a,0x43,0x9d,0xf2,0xbb,0xe6,0x36,0x10,0xfe,0x8f,0x4b,0x60,0x9f,0xa1,0xfa,0x59,0x95,0xb3,0xa2 },
{ 0x98,0xe6,0x99,0xd8,0x21,0x7f,0x9d,0x2f,0xc9,0x99,0x99,0x8b,0x7b,0xde,0x51,0x65,0xda,0x8f,0xe5,0xa7,0x43,0x9a,0xb6,0x93,0xae,0xbe,0x52,0x0b,0x87,0xe4,0x06,0xba },
{ 0x6b,0xbc,0xf1,0x10,0xfd,0xbb,0x98,0x83,0xa7,0x38,0xe6,0x28,0x7a,0x23,0x3a,0x24,0x9d,0x87,0x09,0xd2,0x2a,0x5d,0x2e,0x66,0xa3,0xb2,0xcd,0x82,0x45,0xb9,0xf8,0x51 },
{ 0x51,0x08,0x6b,0x61,0x53,0x7c,0x25,0x75,0xb1,0x9e,0xc3,0x7b,0xd5,0xf5,0xdc,0xb6,0x0e,0xe9,0xe4,0x24,0x48,0x7f,0x5e,0xb0,0xe3,0x71,0xc4,0x9b,0x50,0x53,0x5b,0xdc },
{ 0x4b,0x1f,0xb6,0x05,0x1b,0xf4,0x37,0x96,0xf8,0xd2,0xb3,0x83,0xba,0xc4,0x9b,0x7a,0x8a,0xfa,0x2f,0x27,0x31,0x14,0xe2,0x0e,0x7d,0xae,0x59,0xc7,0x9f,0x98,0x85,0x7c },
{ 0xef,0xd5,0xb5,0x5d,0x5b,0x85,0x00,0x21,0xfc,0xad,0xf6,0x95,0x55,0x47,0xf3,0x77,0xa0,0x17,0xc8,0x39,0x17,0xb8,0xaa,0xd2,0xb4,0xfb,0xd8,0x23,0xf4,0x14,0x73,0x34 },
{ 0xb4,0x63,0x74,0xa9,0xa5,0xc7,0x84,0x8c,0x4c,0x8d,0xbf,0x93,0x8e,0x08,0x50,0xc8,0x31,0xc1,0x18,0xd9,0xd0,0x9b,0x60,0x8f,0xf3,0x6f,0xe1,0x99,0x18,0x7e,0x2c,0xc9 },
{ 0x2e,0xb1,0xea,0x67,0xdf,0x60,0x32,0xb4,0x76,0x9b,0x40,0x50,0x7f,0x56,0xb0,0x5c,0x5e,0x23,0x79,0x65,0x7e,0x2b,0xfe,0x17,0xd5,0x12,0xe6,0x72,0x61,0xc5,0xc1,0x0e },
{ 0x19,0x8f,0x5f,0x10,0x7b,0x89,0x27,0x6f,0xab,0x8a,0x99,0xf6,0xdc,0xe6,0x59,0xf4,0x22,0x3f,0x67,0xbb,0xb5,0x7c,0x8d,0x56,0x94,0x91,0x9a,0xb0,0x46,0xb2,0x39,0x7b },
{ 0xe4,0xe7,0x28,0x12,0x9b,0x8e,0x42,0xe2,0xec,0x71,0xa7,0x18,0xf5,0x7b,0x55,0xb4,0x72,0xeb,0x22,0x2a,0x7c,0x2d,0x18,0x03,0x84,0xbf,0x17,0x7f,0x01,0x31,0xad,0x37 },
{ 0x90,0x07,0x5b,0x34,0x43,0x74,0x1c,0xc5,0x5b,0x3d,0xe7,0x54,0xb7,0x13,0x05,0x51,0xba,0xe0,0xf3,0x84,0x03,0x47,0xe1,0x15,0xdf,0x5e,0x7b,0xcb,0xc2,0xda,0xba,0x4f },
{ 0x94,0x76,0xd3,0xfd,0x17,0x7d,0x2c,0x3c,0x82,0x15,0x82,0x9c,0xb4,0xfa,0x47,0xd3,0x32,0x4c,0x3d,0xc2,0xe8,0x30,0x94,0xf7,0xb4,0x0a,0x5d,0x55,0xe4,0xde,0xcb,0x9f },
{ 0xb4,0xa2,0xce,0xe2,0x13,0xd4,0xda,0x35,0x7b,0x40,0x78,0x4e,0x79,0x57,0xf4,0x52,0x85,0x7e,0x59,0x9c,0xe7,0x8a,0x85,0x55,0x65,0xd1,0x53,0xdc,0xf4,0xf0,0xb4,0xe8 },
{ 0x38,0xd5,0x7e,0x38,0xb9,0x40,0xfd,0x95,0x4a,0x58,0xbf,0xb8,0xb8,0xfc,0x33,0x19,0x50,0xcd,0xb9,0x35,0x83,0xd7,0x4e,0xe8,0x8e,0x24,0x39,0x78,0x99,0xc3,0xdb,0xc9 },
{ 0x75,0xd6,0xca,0x30,0x33,0xc3,0x38,0x00,0x32,0x30,0x07,0x44,0xdc,0xc0,0xaf,0xdf,0x30,0x5f,0x9c,0xf7,0x45,0x08,0xde,0x3e,0x8a,0xad,0x83,0xcb,0x7a,0xef,0x1e,0xe3 },
{ 0xef,0x80,0x33,0x70,0x5d,0x52,0xa5,0x10,0x85,0xc6,0xf8,0x98,0x95,0xc2,0x21,0xba,0xed,0x5d,0x9b,0x42,0x88,0xb8,0x77,0xea,0x5f,0x40,0x44,0xaa,0x82,0xb9,0x66,0x7d },
{ 0x3c,0x84,0x1d,0x10,0x54,0x1e,0xff,0x55,0x17,0x0e,0xfd,0x6f,0xcd,0x90,0xa0,0xa0,0x11,0x83,0x4b,0xc5,0x9b,0x01,0x46,0x0d,0xd2,0xe7,0x14,0x8e,0x5d,0xf7,0xe8,0xa4 },
{ 0xc5,0x2c,0x2f,0xb9,0x64,0xe3,0x9d,0xd2,0xa3,0xcb,0x5c,0x6d,0xb0,0xcb,0x95,0x57,0x2d,0xbf,0xd4,0x6e,0x2e,0xb3,0xbb,0x92,0xee,0x52,0xa2,0x11,0x6a,0x9b,0xeb,0xb1 },
{ 0x05,0xe8,0xdf,0x7b,0x16,0xab,0x60,0xf8,0xbc,0x11,0xc5,0xe3,0xd0,0x7c,0xe7,0xa8,0x60,0x39,0x22,0x2b,0x53,0x94,0x44,0xd0,0x81,0xa6,0xf9,0xc8,0x0f,0xc1,0xf3,0x10 },
{ 0x1b,0xed,0x26,0x52,0x48,0xc9,0xda,0xd5,0x1e,0x70,0xb9,0xff,0xbb,0x19,0xe1,0xd3,0x94,0x67,0xc5,0xc1,0x3d,0x3b,0xc0,0x88,0x76,0x7b,0xa8,0xa0,0xf8,0x6b,0x68,0x04 },
{ 0x05,0x45,0x41,0xdf,0x3c,0x12,0xdb,0xaa,0xe7,0x41,0xe6,0x6f,0x0f,0x35,0x38,0x94,0x43,0x72,0x93,0x72,0x0e,0x5b,0x26,0xa2,0x89,0x38,0xf5,0x8b,0x0e,0x37,0x80,0xc3 },
{ 0x8a,0x3d,0xb2,0x9c,0x23,0x17,0xbf,0xc5,0x57,0x94,0xa2,0xcd,0x03,0x43,0x69,0xf7,0x0a,0xa7,0xc2,0xbb,0x41,0x58,0x37,0x23,0x6a,0xb2,0x9a,0xc0,0x89,0x4a,0x54,0x5a },
{ 0x66,0x56,0x36,0x92,0xe8,0xb4,0x21,0x43,0x42,0xbe,0x8b,0x1c,0x6d,0x27,0x65,0xb8,0x46,0x35,0xb4,0x48,0xf2,0x5a,0x96,0x70,0x8f,0xb6,0xf2,0x36,0x62,0xc3,0x0b,0x31 },
{ 0x7d,0xaa,0x26,0x43,0xe3,0xe2,0xe4,0x20,0xbb,0x91,0x08,0xc9,0xd7,0x38,0x03,0x2b,0x0a,0x68,0x3d,0x9c,0x14,0x5f,0xc4,0x0b,0x3d,0xfc,0x51,0xe6,0x1a,0xcf,0x88,0xba },
{ 0xbc,0xf1,0xec,0x34,0x94,0xc8,0x97,0x47,0xc7,0x67,0xfc,0xbb,0xf6,0xd6,0x37,0x68,0x6f,0xc8,0xb5,0x3b,0xd5,0x45,0x4f,0xd5,0x5d,0xf5,0xfa,0xea,0x6c,0xd2,0x89,0xf0 },
{ 0xc1,0x67,0xba,0xf8,0xdc,0xf5,0x7b,0xe1,0x7b,0x34,0xbe,0x0b,0xd3,0x84,0xf2,0x46,0x66,0x3c,0xd0,0x69,0xbb,0xbc,0xcd,0xc5,0xfd,0xb4,0xec,0xb9,0xe0,0xbb,0x47,0x88 },
{ 0x28,0x3f,0x7c,0xff,0x32,0x6e,0x60,0x82,0x23,0xc6,0xb5,0xaf,0x10,0x52,0xcf,0x14,0x50,0x22,0x34,0x7e,0x47,0x90,0x81,0xa5,0xc7,0x14,0x12,0xc5,0x24,0x5d,0xbf,0xe7 },
{ 0x5c,0xe1,0x58,0x7e,0x2e,0xcc,0x43,0xb9,0x4c,0x98,0x4b,0x9c,0xa1,0xd0,0x2b,0x4e,0x80,0x00,0x5a,0x99,0xc6,0x93,0xb8,0x14,0x2f,0x14,0xd6,0xf7,0x07,0x92,0x9b,0x2a },
{ 0xf7,0xa0,0x18,0x07,0xe3,0xe2,0xc5,0x35,0x1c,0x47,0x02,0x2f,0x89,0xb1,0x50,0x38,0x22,0xec,0x83,0xc0,0x7c,0x2c,0x97,0x29,0x0d,0xd8,0xbc,0x8d,0xf9,0x97,0xdf,0x9b },
{ 0x7d,0x60,0x21,0xb9,0xc6,0x7d,0xb4,0x1a,0x06,0xbc,0x3b,0x14,0xe1,0xf6,0xa2,0xb2,0xa2,0x4a,0x6f,0x55,0xc8,0x8f,0xd0,0x70,0xd6,0x62,0xdd,0xfb,0x44,0x55,0x85,0x36 },
{ 0x13,0x32,0xb7,0x7b,0xa1,0x9d,0xa2,0xd2,0xe4,0xa7,0x33,0x53,0x17,0x1f,0x80,0xfe,0x16,0xad,0xd4,0x85,0x29,0x82,0xc1,0xf1,0x32,0x91,0x04,0xf2,0x7d,0x8c,0xc8,0xe3 },
{ 0x95,0x79,0x3b,0xa1,0x62,0x09,0x07,0xa9,0xc3,0x41,0x0f,0xb3,0xe7,0xae,0x2f,0xfc,0xd0,0x06,0x82,0xcb,0x5f,0xc8,0x37,0xf5,0x73,0xee,0x10,0xed,0xd2,0x7a,0x09,0x61 },
{ 0x8f,0x20,0x01,0x67,0x62,0x92,0xd5,0xac,0x5b,0xdf,0xaf,0x41,0x0f,0x64,0xd1,0x6d,0x78,0x2e,0xc4,0xa3,0x2c,0x66,0x03,0x7a,0x28,0xa3,0x51,0x01,0xcc,0x21,0xc4,0x7c },
{ 0x2c,0x07,0xe5,0xb5,0x90,0x51,0x25,0xdd,0x17,0xa0,0x48,0x7e,0xdc,0x90,0xff,0x03,0x7a,0x7d,0x9e,0x2a,0xb8,0x5f,0xfa,0x5b,0x15,0xe8,0x46,0x77,0x03,0x24,0x5a,0xfd },
{ 0xe0,0x11,0xed,0x04,0x6d,0x13,0x38,0x53,0x83,0xee,0x92,0x0f,0x8b,0x5f,0xb2,0xa4,0x95,0x3a,0x09,0x3f,0xdb,0xe6,0xdf,0x39,0x6f,0x9b,0xe6,0x37,0xce,0x67,0x3a,0xe1 },
{ 0x7c,0x62,0x73,0x94,0xb8,0x73,0x9f,0xa5,0x66,0x96,0xe2,0xfb,0xcd,0x88,0xff,0x01,0xb5,0x86,0x72,0x0d,0x9d,0xb9,0x89,0x12,0x56,0x6d,0x89,0x2b,0x76,0x92,0xfc,0xed },
{ 0xad,0x99,0xdc,0x16,0x4a,0xe1,0xd3,0xb3,0xb6,0x5b,0xc0,0xfd,0x16,0x1c,0xf2,0x33,0xb7,0x30,0x4f,0x46,0xd9,0xce,0xa3,0xc9,0xdc,0xb1,0x8b,0x23,0xb1,0x4c,0xbc,0x85 },
{ 0xe4,0xa5,0x73,0x24,0x4b,0x60,0x17,0xda,0x70,0xf9,0x5d,0x7d,0xc2,0xee,0xfb,0x95,0x7e,0x79,0xe6,0x20,0x12,0x63,0xe6,0xf7,0x3c,0x5a,0x86,0x72,0x31,0xfd,0xf1,0x0f },
{ 0x02,0x2e,0x00,0x61,0xee,0xe6,0xad,0x97,0x2f,0x91,0x49,0x57,0xbd,0x9e,0xe0,0x33,0x60,0xe5,0x6b,0xd2,0x4d,0x1b,0x24,0x47,0x34,0x11,0xc6,0xef,0xc3,0xd4,0x26,0x87 },
{ 0xd1,0x71,0x18,0x02,0x4e,0xc1,0x09,0x35,0x39,0xf2,0xe9,0x3c,0x6a,0x34,0x4c,0x1a,0x73,0xcb,0x7e,0xf0,0xd6,0x99,0x19,0xd2,0x73,0x5e,0x0f,0x32,0xc7,0x72,0xe3,0x01 },
{ 0x45,0xa8,0x04,0x56,0x0a,0xdc,0x82,0x76,0x12,0x71,0xec,0xa3,0x7d,0xac,0x5b,0xb7,0xc0,0xa9,0x5e,0x93,0xe6,0x33,0xa0,0x93,0x57,0xcc,0x1a,0xd1,0xec,0x6b,0xa7,0x4c },
{ 0x7f,0x28,0x51,0x11,0x92,0x5f,0x4a,0x8f,0xdc,0xea,0xeb,0xe8,0x1a,0x0a,0xd9,0xef,0xf3,0x29,0x81,0xad,0x0e,0x5a,0x49,0xa7,0xc6,0x61,0xb8,0xf1,0x78,0x90,0x2b,0xdc },
{ 0xf1,0x6a,0xb8,0xe4,0xdc,0x66,0xa2,0xb0,0xd8,0x8e,0x42,0x2b,0xed,0xc9,0xc5,0x6f,0x0a,0xf1,0xaf,0x6a,0xac,0x4a,0x12,0xcf,0xa5,0xa6,0x85,0xa3,0x69,0x94,0x0d,0xf4 },
{ 0x03,0xa6,0xec,0x92,0xb9,0x64,0x24,0x18,0xda,0xfb,0x9d,0x71,0xfc,0x7f,0xd6,0x37,0x3b,0xf3,0x4e,0xb3,0x15,0xa5,0x92,0x84,0x4f,0x97,0x7e,0x8f,0xa8,0x70,0xbb,0x1c },
{ 0x64,0x87,0x02,0xf5,0xa1,0x7b,0xc1,0xdb,0x1a,0xec,0x56,0x37,0x4a,0xd7,0x53,0xa0,0x2b,0xdd,0xf6,0xfa,0x19,0x0c,0xc2,0xb9,0x0b,0xc6,0xa5,0xef,0x1b,0x7b,0xb9,0x00 },
{ 0xf6,0x34,0x4a,0xee,0x58,0xb7,0x6c,0xc3,0x3d,0x3c,0x2c,0x04,0xf2,0xed,0x67,0x86,0x9e,0xbc,0xda,0x0c,0xf5,0x6f,0x19,0x6a,0x3d,0xeb,0xeb,0x39,0x45,0xd6,0xee,0x02 },
{ 0x90,0xf2,0xd0,0x2c,0x37,0xeb,0x57,0x62,0x4c,0xb0,0xc8,0xf2,0x84,0xc1,0x71,0xb8,0x79,0x0a,0xe5,0x6a,0xa9,0xeb,0xce,0xef,0x64,0x83,0x7e,0x26,0x26,0x5c,0x66,0x4d },
{ 0xdf,0x89,0x65,0x51,0xc7,0xb4,0x33,0x62,0xc8,0xe4,0xac,0x27,0x12,0x50,0x73,0xd1,0x86,0x9c,0xbc,0xcc,0xc5,0xb6,0x1e,0x3a,0xaa,0x77,0xfd,0x4d,0xcf,0xe6,0xa7,0x16 },
{ 0x00,0xe0,0xd1,0x07,0x3a,0x64,0xf0,0xd3,0xec,0x6c,0x81,0xda,0xeb,0x87,0x12,0xd0,0x3c,0x3b,0xc1,0x1c,0x07,0x42,0x1c,0x1f,0x9c,0x86,0x31,0xa2,0xf2,0x4a,0x2c,0xf8 },
{ 0xbe,0xa9,0xbf,0x9d,0x58,0x2d,0x15,0x97,0xc4,0x5a,0xc1,0xb1,0x99,0xa9,0x7a,0x42,0xfb,0x4b,0xd2,0x01,0x41,0x46,0x3f,0x42,0xce,0x6f,0xb6,0xa9,0xff,0xc3,0xf2,0xde },
{ 0x20,0xac,0xb3,0x3a,0x88,0xf5,0x34,0x36,0x07,0xae,0x06,0xa8,0xba,0x3e,0x78,0x7f,0xef,0xd0,0x22,0xa8,0x92,0x6f,0xce,0x5b,0xf2,0xc6,0x7a,0xdd,0xaf,0x50,0xf1,0x6e },
{ 0x49,0x8b,0xfe,0x18,0x3e,0xd5,0xf9,0xa9,0x26,0x4e,0xb6,0xb3,0x03,0xd8,0x04,0x57,0x99,0xd1,0x94,0x17,0x3d,0x7a,0x29,0x3c,0xd8,0x38,0x53,0x43,0x0f,0xe3,0xe7,0xa9 },
{ 0x1f,0xfc,0x79,0x45,0xd2,0x44,0x39,0x97,0x89,0x4c,0x8e,0x4d,0xad,0x3f,0xbd,0x02,0x9e,0x9d,0x46,0x06,0x34,0x4b,0xa3,0x89,0x0f,0xd3,0xb7,0xc3,0xb6,0x6a,0xbf,0x27 },
{ 0x85,0x0b,0xb7,0x2c,0x10,0x1a,0xce,0x8f,0xc4,0xc9,0x4f,0x90,0x64,0x8b,0x92,0x5f,0xb7,0xa1,0x5f,0xf7,0xbe,0xa6,0xe3,0x9f,0x23,0x8f,0x0d,0x8d,0xda,0x0d,0x87,0xa1 },
{ 0xa3,0x25,0xa6,0x27,0x0f,0x0c,0x33,0x49,0x1f,0x5f,0x28,0xa3,0xbb,0xbd,0xbb,0x7a,0x04,0x7d,0x8d,0x30,0xbc,0x1b,0xe6,0xca,0x64,0xb3,0x1d,0x1d,0xab,0xda,0x46,0x26 },
{ 0xb3,0x01,0xf6,0x2d,0xe2,0xb0,0xd4,0x6d,0xa9,0x1a,0x88,0x80,0x83,0xa2,0x0a,0x9d,0x7f,0x27,0xb9,0x8e,0xe9,0x63,0xf0,0xdf,0xc1,0xd4,0x4f,0xba,0x07,0x2c,0x48,0xd1 },
{ 0x12,0x74,0xfa,0x20,0x41,0x30,0x47,0xe5,0x3a,0x09,0x42,0x71,0x7e,0xa6,0xea,0x77,0x17,0xb7,0x3f,0xe8,0x99,0xad,0xca,0xff,0x12,0x36,0x5e,0xc2,0xca,0xca,0xf6,0x1b },
{ 0xb2,0xa9,0xb4,0x09,0xdb,0xc9,0xd3,0xd0,0xf4,0x96,0x7f,0x93,0x48,0x4d,0x73,0x3b,0x3a,0xc0,0x9f,0xc8,0x3e,0x8f,0x9a,0xe0,0x9a,0xe2,0x80,0xd0,0xd9,0xb4,0xfa,0x62 },
{ 0xa6,0x50,0x67,0xf6,0xc1,0xcd,0x06,0xaa,0x2a,0x6b,0xce,0x1d,0xd6,0x0a,0xa1,0x98,0x63,0x8a,0xda,0x5a,0x18,0x9f,0xc0,0x6d,0xfa,0xfb,0xf5,0x5b,0xbb,0x3e,0x62,0xa9 },
{ 0x39,0xe4,0x98,0x90,0x9f,0xa6,0x18,0x58,0x4e,0x28,0x54,0x53,0x15,0x35,0x72,0x87,0x48,0xd4,0x4f,0xe7,0x90,0x51,0x90,0x61,0x76,0x56,0x8f,0x34,0x6b,0x4a,0x24,0x90 },
{ 0x7a,0xe7,0xa2,0xca,0xa7,0x58,0x9c,0x85,0xbc,0x16,0x3a,0x0c,0xff,0x51,0x9c,0xf3,0x5d,0x18,0x62,0xc1,0x9a,0x98,0xd0,0x6c,0x3a,0x70,0xca,0x6b,0x95,0xdf,0xed,0x24 },
{ 0xad,0x77,0xc9,0x4a,0xd1,0xa1,0x2d,0x32,0xc2,0xd0,0x57,0x24,0x27,0x9a,0x8e,0x03,0x0a,0x17,0x0c,0x84,0x33,0x5b,0xd5,0xff,0x59,0x59,0x88,0xf0,0xcf,0xbb,0xed,0x35 },
{ 0x25,0x59,0x7a,0xd8,0x5b,0x30,0x7a,0xf1,0xa6,0xea,0x07,0x51,0xc4,0xe4,0x21,0xd0,0x8a,0x28,0xea,0x9b,0xa3,0xb1,0x1f,0x76,0x24,0x67,0xb1,0x38,0x23,0xdb,0x2e,0xdf },
{ 0x6d,0x08,0xc6,0xc5,0x19,0x2a,0x70,0xe4,0x3b,0xa0,0xe7,0x3b,0x2b,0x46,0xcc,0x3a,0xf2,0xd7,0x78,0x6a,0x4d,0x82,0x03,0x97,0x76,0x25,0x2d,0x93,0x1a,0xbe,0x9b,0x0f },
{ 0x5f,0x2b,0x93,0x9a,0x6b,0x30,0xf2,0xe5,0x94,0xf7,0x8e,0xb9,0xc4,0x82,0x45,0xbe,0x3a,0xa5,0x08,0xb1,0xf3,0xc2,0x19,0x49,0xe4,0x13,0xfb,0x03,0x1d,0xac,0x54,0x64 },
{ 0x31,0xc7,0x52,0x7f,0x03,0x66,0x8d,0x71,0x30,0x6b,0xe4,0x45,0xe0,0x83,0xe8,0x70,0xa9,0x47,0xba,0xb4,0x69,0x56,0xa3,0x56,0xe1,0x6b,0x22,0xa8,0xf4,0x11,0xed,0x1d },
{ 0x21,0x23,0x6e,0xc7,0xe5,0xe7,0x86,0xd5,0x23,0xca,0x35,0xef,0x00,0x46,0x1e,0xa8,0xfb,0x80,0x8e,0x96,0xbb,0xcc,0xbd,0xc7,0x22,0x20,0xb3,0x59,0x1b,0xbb,0x81,0xcc },
{ 0x86,0x54,0xcd,0x55,0x11,0x49,0x83,0x8d,0x37,0xd2,0x16,0x1b,0xfc,0x34,0xc9,0x01,0x17,0x1f,0x33,0x65,0x86,0xe7,0xb5,0x99,0x48,0x0e,0xe8,0x05,0x8f,0x61,0xb8,0x60 },
{ 0x37,0x48,0x08,0x8f,0xb5,0x86,0x1f,0xb0,0x0c,0xf9,0xff,0x0d,0x26,0xbc,0xbf,0x4b,0x79,0xfa,0xfb,0xfa,0x5a,0x28,0x14,0x75,0x90,0x4d,0x80,0x64,0x06,0x2f,0x3b,0xa7 },
{ 0x7e,0x5d,0x32,0x2a,0xdf,0x11,0xc5,0x12,0xe1,0xbb,0xea,0x65,0xa9,0x02,0x9c,0x5c,0x89,0x64,0x33,0x9c,0xfa,0x68,0xc8,0x6d,0x68,0xa4,0x1b,0x2f,0x50,0x9f,0xe8,0x4c },
{ 0x01,0x03,0xd1,0xa9,0xc7,0x2f,0xab,0x1e,0x7a,0x17,0xa0,0x94,0xca,0x55,0x33,0x3b,0x1f,0x97,0xee,0xff,0x1e,0x3c,0xd6,0x6f,0x2f,0xd9,0x72,0xf9,0xd8,0x25,0x26,0x55 },
{ 0x9c,0xa7,0x7b,0xd4,0x2b,0x60,0x99,0xe3,0x81,0xb8,0x8d,0x80,0x07,0xe8,0x24,0x99,0x20,0x98,0x7b,0x54,0x11,0x32,0x6e,0x5f,0x53,0xf0,0xab,0x89,0xc8,0xd3,0x21,0x8c },
{ 0x3f,0xb9,0xc3,0x85,0x36,0x75,0xe8,0xa8,0xec,0x41,0xc2,0x70,0x5c,0x8c,0xb7,0x23,0xed,0xc3,0x52,0x35,0x3a,0xd6,0xae,0x36,0x54,0xe6,0x9e,0x90,0x91,0x9b,0xa2,0xfa },
{ 0x59,0xf4,0x4a,0x48,0x78,0xa1,0x7f,0x23,0xfa,0x38,0x91,0x19,0xb7,0xef,0xaa,0x47,0x8c,0x8f,0xd4,0x9b,0xe0,0x0b,0x40,0xb5,0x1f,0x32,0x47,0x4f,0x93,0xf6,0x4d,0x14 },
{ 0x5d,0x4c,0x3e,0x8a,0xc9,0x97,0x79,0x7e,0x36,0xdb,0xd5,0x7c,0x3f,0x5e,0xf7,0x2f,0x35,0x2b,0xf9,0x6f,0xe4,0xa1,0xc3,0x97,0xfd,0xdf,0xee,0xcd,0xcf,0x8e,0xf2,0x0b },
{ 0x64,0x0e,0x94,0xcb,0x92,0xa7,0xde,0xd2,0x64,0xb6,0x95,0x2b,0x06,0xf0,0x73,0x62,0xc6,0x95,0xeb,0x87,0x3c,0xe5,0xe8,0x0d,0xb1,0x20,0xd8,0xfc,0x7d,0x1a,0x2f,0x44 },
{ 0xb1,0x70,0x3f,0xe3,0xcf,0xd4,0xdb,0x24,0xd0,0xf7,0x94,0x66,0x87,0x5b,0x8c,0xc8,0x3c,0x03,0xd0,0x5f,0xf4,0xc9,0x82,0x7b,0xc1,0x4c,0x44,0xf7,0xdf,0x33,0x22,0x83 },
{ 0x10,0x2e,0x63,0x19,0x66,0xe0,0x54,0xf6,0x19,0xf1,0x79,0xa3,0xd6,0x90,0xcb,0xca,0x81,0x5d,0x9b,0x7d,0x68,0x33,0x06,0x5c,0xdc,0x63,0xfc,0xb8,0x48,0x60,0x5e,0x73 },
{ 0xe6,0xe8,0x98,0x07,0x80,0x27,0x26,0x45,0x07,0x3c,0x91,0x03,0x0e,0x28,0xaf,0xaa,0x52,0xbc,0x67,0xb4,0xdb,0xbe,0x4f,0xbd,0x8b,0x70,0x38,0x82,0x14,0x18,0x5c,0x35 },
{ 0x65,0xf2,0xa8,0x3e,0x5f,0x71,0xdd,0x07,0xd7,0xd0,0x18,0x0e,0xb8,0x1c,0xff,0x5e,0x3f,0xe8,0x1d,0x68,0xf5,0x9d,0x55,0x30,0x3d,0x45,0x9d,0x82,0x89,0xe9,0x7b,0x8f },
{ 0xaa,0x2b,0xcb,0xa0,0x45,0x53,0x6e,0x9f,0x8a,0x9e,0xca,0x6e,0xc0,0x85,0x14,0x91,0xbc,0x55,0xa5,0x7b,0x25,0xa7,0xf1,0x88,0xd7,0x60,0x39,0x41,0x4c,0x7f,0xf8,0x2e },
{ 0x7a,0x5c,0x88,0xae,0xb2,0xb8,0x5a,0x9f,0x23,0x77,0x07,0xf7,0xf3,0x34,0x77,0x20,0xec,0x5e,0x94,0xf0,0x0f,0x34,0x7c,0x58,0x80,0x49,0xb3,0x14,0xe5,0x37,0xff,0xbe },
{ 0x36,0xa3,0xff,0x74,0xde,0x41,0x9a,0xc9,0x5b,0x11,0x88,0xff,0xfd,0x78,0x7a,0x48,0x3c,0x3a,0x5c,0x24,0xbf,0x25,0xcb,0x32,0x9e,0x93,0x7a,0x58,0x35,0xb3,0x0d,0xae },
{ 0x3c,0xba,0x17,0xb5,0x1d,0xa7,0x43,0x61,0x71,0x0c,0xdb,0x11,0x02,0x69,0xaa,0x8c,0xab,0x86,0x04,0x82,0xc4,0xdb,0x7a,0x9a,0x96,0xfb,0xb8,0xc5,0x10,0x6e,0x9b,0x60 },
{ 0x68,0xdc,0xbc,0xee,0x8f,0x9d,0xe4,0xbb,0xd5,0x99,0x7b,0x29,0xa9,0x52,0x58,0x5a,0x78,0x70,0xa9,0x89,0x3d,0x5c,0x6c,0x44,0xcd,0x30,0x2a,0x1e,0x70,0xf0,0xfc,0x37 },
{ 0xf6,0x7f,0x1f,0x54,0x76,0x33,0x0d,0xbf,0x03,0xc2,0xc3,0x0e,0xfb,0xbf,0xd9,0xe8,0x02,0xb9,0xb6,0xad,0x53,0x59,0x69,0xff,0x76,0xf3,0xb6,0x0f,0x42,0xad,0x2a,0xf2 },
{ 0x00,0xa9,0x42,0x7c,0xbd,0xe1,0x4b,0x13,0xd5,0x5d,0x31,0x88,0x99,0xc6,0xa8,0x5d,0x43,0x57,0xb2,0xed,0xdd,0x62,0x15,0xf7,0xc9,0x4f,0x6f,0x09,0x6a,0xb1,0xf3,0x17 },
{ 0x5a,0xeb,0x28,0x4e,0x33,0xaa,0x10,0x25,0x74,0x9a,0xe1,0xc3,0x29,0xa8,0x73,0x8b,0x3d,0x47,0x32,0xac,0x2d,0x9c,0xa0,0xb5,0xaa,0x7b,0x64,0x34,0xe2,0xfc,0xda,0xe1 },
{ 0x4b,0x14,0x24,0x0a,0x46,0x84,0xac,0x8d,0x83,0xb8,0x2f,0xd0,0xa0,0x32,0xc5,0x83,0x87,0x1a,0x68,0x3b,0xe7,0xcd,0xe0,0x95,0x0c,0x8c,0xd2,0xff,0xba,0xc0,0x35,0xce },
{ 0xd8,0x0b,0x4e,0x35,0x65,0x63,0xa9,0x50,0xb5,0xbd,0xfc,0x23,0x3f,0xe1,0xf5,0xc4,0x60,0xd6,0x78,0x3d,0xae,0xd8,0x7a,0x6c,0xf6,0x7e,0x04,0x36,0xca,0xb5,0xcc,0x08 },
{ 0xba,0x78,0xd9,0x71,0xef,0x76,0x0b,0x5e,0x81,0xa1,0x03,0x0f,0x88,0xbb,0x35,0x36,0xc0,0x4f,0xc9,0x61,0xba,0xb7,0x8e,0xb8,0x3e,0xcb,0x6a,0x45,0x83,0x30,0xea,0x54 },
{ 0x21,0x64,0xc1,0x50,0x3e,0x32,0xac,0xeb,0xe1,0xff,0xa0,0x3b,0x75,0x5a,0xf6,0x70,0xae,0x8e,0x8e,0xd6,0x42,0x3a,0x7a,0x91,0xbf,0xb2,0x30,0x86,0x87,0x25,0xb8,0x75 },
{ 0x55,0x9c,0x58,0xea,0x8c,0x85,0x57,0x7c,0x4b,0xab,0xd5,0xec,0x85,0x60,0x8e,0x56,0x63,0x2c,0x12,0x97,0x8d,0x8e,0xb2,0xa2,0x04,0xc1,0x45,0xee,0x6a,0x44,0x1c,0xcc },
{ 0x13,0xf2,0x14,0xd7,0x1c,0xac,0x94,0x35,0xf4,0xbd,0xcc,0xa3,0xac,0x5c,0x11,0x74,0x35,0x86,0x2d,0xfe,0x5d,0xc9,0x5d,0xbe,0x2b,0xf4,0x0e,0x60,0x36,0x13,0x9a,0x2a },
{ 0xb3,0x6c,0xf6,0x64,0x8d,0x13,0x88,0x06,0x4d,0xfc,0xad,0xee,0x77,0x1c,0x24,0x73,0x5d,0x4f,0xd2,0x63,0xf0,0x8f,0xf8,0x5a,0xcb,0x95,0x7b,0x99,0x30,0xb3,0xd5,0x71 },
{ 0x8c,0xf0,0xbc,0x82,0x36,0x27,0xdf,0x6b,0x82,0x1e,0xd6,0x14,0xf8,0xce,0xf0,0x73,0x64,0x24,0xf4,0x04,0xf7,0x46,0x91,0x9b,0xa6,0x57,0x4f,0x06,0x2c,0xa3,0x5b,0xb9 },
{ 0xe3,0x6e,0xbe,0xa2,0xba,0x51,0xa7,0x95,0xc6,0xf1,0x9c,0xb5,0xfe,0x8b,0x6d,0x8b,0x34,0x5e,0x83,0x67,0x07,0xef,0x13,0xb6,0x54,0xd8,0x82,0x54,0xb0,0xcd,0xb6,0x9d },
{ 0x1d,0xe9,0x97,0x8b,0x4d,0xb6,0x91,0x1c,0x56,0xdd,0xfa,0x33,0x94,0xff,0x5c,0xdd,0x73,0x94,0x2d,0x98,0x9f,0x93,0xbb,0xf6,0x2f,0x71,0x64,0xdc,0x4e,0x2d,0x4b,0xfc },
{ 0xbe,0xee,0xc0,0x6a,0xc6,0x88,0x38,0x65,0xa9,0x7f,0xce,0x33,0x9f,0x99,0x0c,0x5c,0x4d,0x97,0x1a,0x4a,0xe4,0xc0,0x32,0xbc,0xf8,0xa6,0xbd,0x11,0x9a,0x6f,0x6f,0xf3 },
{ 0x45,0x40,0x45,0x1d,0x12,0x1e,0x50,0x33,0x30,0x3a,0x94,0x8c,0xb7,0x51,0x98,0x1e,0x6d,0x70,0x53,0xea,0x71,0x32,0x56,0x02,0x2b,0xe0,0x82,0x54,0x72,0x0d,0x74,0x4e },
{ 0x97,0x66,0x38,0x8e,0x4d,0x4e,0xca,0xe9,0x15,0x26,0xda,0x96,0xef,0x4a,0x2c,0x5e,0x77,0xaf,0x02,0xb8,0xcc,0x9f,0xd0,0x96,0x8f,0x1b,0x4a,0x69,0xb8,0xd7,0x36,0x11 },
{ 0x9b,0xcd,0x2b,0x9a,0x67,0x7c,0x34,0x21,0x12,0xbb,0xce,0x4b,0xd2,0xda,0x1d,0x82,0xf3,0x73,0x21,0x86,0x39,0x28,0xbf,0x04,0x28,0x53,0x5d,0x05,0xaf,0xfd,0xf9,0x17 },
{ 0x21,0x4f,0xf0,0x74,0x1c,0xfc,0x1a,0x68,0x2a,0xd5,0x52,0xfa,0x18,0xa9,0xa0,0x7c,0x89,0x87,0x23,0xd6,0xa4,0x3d,0x17,0x97,0x83,0x34,0xf4,0x26,0xc3,0x56,0xfd,0x9f },
{ 0x2c,0x77,0x46,0x03,0x10,0xd4,0x3a,0x6d,0x46,0xa6,0x5f,0x16,0x0d,0x3e,0x6e,0xaa,0x2e,0x69,0x40,0xc8,0x2d,0x4d,0x53,0xd5,0x17,0x8e,0x48,0xcf,0x6a,0xbd,0x38,0xcc },
{ 0xf2,0x4c,0x4c,0x1b,0x70,0xb0,0x29,0xec,0x2c,0x89,0x0b,0xc9,0xa1,0x2c,0x1c,0xfb,0x15,0x57,0xc8,0xf4,0xf8,0x96,0xfc,0xbf,0xb3,0x38,0x4b,0x62,0xdb,0xc8,0x47,0x6f },
{ 0x00,0x50,0xb8,0x65,0x75,0x66,0xac,0x6c,0xfb,0x15,0x95,0xbb,0x11,0x35,0xa4,0x6b,0x1a,0xbd,0x4f,0x01,0x49,0x8d,0x72,0x03,0x6b,0xb4,0xaa,0x0e,0x47,0x55,0x10,0x14 },
{ 0xee,0xcd,0xb5,0x17,0x5f,0xc8,0x9b,0x0d,0xce,0x1f,0xb0,0x96,0xf5,0x88,0x98,0x1c,0x23,0x6c,0x7e,0x27,0xa0,0x4a,0xc7,0x22,0x0b,0x4f,0x3b,0x2b,0x60,0xe1,0xd0,0xd2 },
{ 0x33,0xac,0x46,0x7c,0x0d,0x6a,0x9c,0x4b,0x8a,0x8e,0x32,0xed,0x9a,0x96,0x3a,0x7d,0xe1,0x13,0xae,0x29,0xa6,0x66,0xc1,0xbd,0x9a,0x0b,0xde,0x76,0xbd,0xc3,0x77,0x31 },
{ 0x08,0x68,0x49,0x2e,0xee,0x33,0x81,0x81,0xf2,0xfa,0xa1,0x9d,0xad,0x67,0xaf,0x34,0x82,0xae,0x69,0x99,0xd0,0xce,0xbc,0x91,0x10,0x42,0x5d,0x61,0xb4,0x08,0x6a,0xe1 },
{ 0x5f,0x6a,0xab,0xf1,0xc0,0xba,0x50,0x9a,0xad,0xdb,0x08,0xa1,0x65,0x14,0x70,0x95,0x9d,0x1c,0xe6,0x5f,0x78,0x1d,0x4a,0x37,0xf1,0xa7,0xda,0x29,0xa9,0xb1,0xf8,0x60 },
{ 0x58,0x15,0x2f,0x42,0x93,0xdf,0x87,0x10,0x15,0xda,0xa9,0x92,0x8d,0x45,0x8c,0xd3,0xbb,0x01,0x15,0x1f,0x2b,0x27,0x21,0xd5,0x76,0x53,0x28,0x04,0x60,0x75,0x92,0xd6 },
{ 0xbc,0x30,0x33,0xbd,0x26,0x83,0x75,0xee,0x48,0x97,0x53,0x89,0xff,0xb7,0x0f,0x11,0x9a,0xd4,0xc3,0xce,0x76,0xb0,0x4e,0x50,0x47,0xd3,0x76,0xf7,0x59,0xec,0xf0,0x1d },
{ 0x52,0x6c,0xd7,0x12,0x48,0xda,0xf5,0x46,0x89,0xf6,0xe2,0x4f,0xd2,0x99,0x3e,0xa4,0x87,0xa7,0x52,0x1d,0x36,0x73,0x7b,0x67,0x28,0x4b,0x34,0xdc,0x75,0x72,0xf8,0x1c },
{ 0xf3,0xb8,0xcf,0xac,0x57,0x62,0x86,0x3d,0xde,0x46,0x26,0xbe,0xb0,0x0b,0x65,0xa4,0xf6,0xf3,0x19,0x05,0xad,0x35,0xb4,0xa9,0x79,0x25,0xcf,0xb1,0x6b,0x1c,0x48,0x1c },
{ 0x1c,0x76,0x59,0x01,0x9f,0xca,0x7b,0x15,0x16,0xc2,0x87,0xd1,0xf9,0xea,0xcb,0x6d,0x5f,0x5c,0x9f,0xa6,0xe9,0x6e,0xe9,0x57,0xfb,0xb4,0xc0,0x8e,0x8e,0x93,0xa2,0xbd },
{ 0xfa,0x67,0x40,0xf6,0x42,0xfa,0x94,0x1f,0xab,0xe2,0xda,0x17,0x59,0x78,0x0e,0x80,0x64,0x6c,0xb4,0xcd,0xc3,0x68,0xbe,0xab,0xbf,0x91,0xc1,0xbb,0xce,0xed,0x47,0x61 },
{ 0xe4,0xf4,0xf6,0xc8,0xe1,0xc5,0xdd,0x00,0x4c,0x23,0x9c,0x17,0x4e,0xd0,0xc1,0xba,0xe8,0xf3,0x1a,0x76,0x38,0x3e,0x13,0xc3,0x9d,0xc5,0x89,0x6a,0xfa,0x5e,0xc4,0xcd },
{ 0x37,0xfc,0x76,0x83,0x20,0xb8,0x06,0xbb,0x75,0x2f,0x97,0x95,0x1a,0x93,0x8a,0x01,0xd2,0xe6,0x40,0x04,0xdf,0x3a,0xeb,0xf2,0x1b,0xed,0x79,0x59,0xbe,0xbf,0x4f,0x0d },
{ 0x2a,0x51,0x7f,0x17,0xc4,0xad,0x0b,0xc6,0xb4,0xaa,0x88,0x1a,0x3f,0x4e,0xb5,0xc0,0xb8,0x59,0x2a,0x09,0x59,0x93,0x01,0xc2,0x2f,0xae,0xf1,0x44,0x89,0x61,0xa5,0x1b },
{ 0x29,0x64,0xb5,0xf9,0x2f,0x3d,0x21,0x2e,0x4f,0x56,0x75,0x87,0x07,0x4b,0xd9,0xd1,0x95,0x03,0xb4,0x73,0xcb,0xcc,0x68,0xe1,0x18,0x1e,0x6d,0xae,0x92,0x62,0xf7,0x32 },
{ 0x0a,0x95,0x52,0x88,0x6e,0x7d,0xbd,0xdc,0x4f,0x4f,0x96,0xc5,0x8f,0xb0,0x64,0xda,0x7c,0xd4,0x5a,0x84,0x2c,0xf0,0xf3,0x1c,0x91,0xba,0x0e,0x70,0xf7,0xc4,0x47,0xef },
{ 0x8c,0x92,0xb8,0x21,0x23,0x4b,0x94,0x67,0x0d,0xaf,0xbf,0x12,0x50,0xb0,0xea,0xdc,0x0c,0x95,0x00,0x4f,0xa2,0x18,0x76,0xd4,0xdf,0xb5,0xfa,0x29,0xf9,0x97,0xf2,0xfc },
{ 0x30,0x9c,0x79,0xb7,0xa0,0xa6,0x50,0x1f,0xc3,0x8b,0x35,0x16,0x54,0xef,0x3b,0xb6,0xab,0xcc,0x2b,0xd3,0x8c,0x0f,0x2b,0x71,0x33,0x7c,0x58,0x76,0x8f,0x05,0x14,0x91 },
{ 0x4a,0xf4,0x8d,0x6e,0xab,0xb8,0x77,0x21,0x65,0xc2,0x65,0x63,0xec,0xc1,0x21,0x95,0x62,0xa7,0xd6,0x45,0xd6,0x8b,0xcb,0x6f,0xb1,0x1e,0x9f,0xd3,0xfe,0xcb,0x64,0xec },
{ 0x45,0x2d,0x95,0x8f,0x35,0xea,0xc9,0x39,0x9c,0xec,0x0e,0xea,0x0d,0xf4,0xab,0x7e,0x25,0x81,0x51,0xb2,0x3b,0x52,0x4d,0x73,0xb0,0x7a,0xe4,0x48,0x6a,0xc4,0x4d,0x7d },
{ 0x62,0x0e,0x7b,0x5a,0xca,0xd7,0x6a,0x6b,0xd1,0x51,0x69,0x1f,0xca,0xca,0x19,0x87,0x38,0x8c,0xbb,0x7d,0x03,0xcf,0x18,0xff,0x58,0xb7,0xae,0x23,0x71,0xe2,0x8d,0x14 },
{ 0xbb,0xb2,0xf0,0x48,0x12,0x4e,0xde,0x35,0x9d,0x3a,0x70,0x1c,0x3a,0x60,0x9c,0xe9,0x10,0xae,0x1e,0xf7,0x5b,0xea,0xd8,0xb2,0xff,0x34,0xae,0x49,0x23,0x2a,0xd5,0x75 },
{ 0x64,0x27,0x1f,0xe0,0x8d,0x0a,0x94,0xb4,0x7f,0xad,0xfd,0x88,0x2a,0xe3,0x8e,0x32,0xcf,0x1c,0xd8,0x50,0xa3,0x2d,0x83,0x4e,0x79,0x81,0xa9,0x2a,0x63,0xbf,0x32,0xb6 },
{ 0x67,0x36,0x33,0xcc,0xb1,0xf1,0x91,0x09,0x97,0x9f,0x9c,0xe3,0x14,0x7d,0x2b,0x20,0x6f,0xb8,0x2f,0x10,0x6e,0x8d,0x09,0xb0,0xe0,0x5d,0xde,0xb1,0xab,0x63,0x43,0x68 },
{ 0x44,0xd2,0x0b,0xc9,0x98,0xee,0x07,0xdd,0x7f,0x66,0x87,0xd1,0xaf,0x9d,0x1b,0xa6,0x26,0x8e,0x53,0x5d,0x5b,0x8d,0x90,0x8d,0xbb,0xff,0x7b,0xf0,0x46,0x64,0xbb,0x4d },
{ 0x65,0x40,0x81,0x85,0xc4,0xc0,0xde,0x27,0x99,0x26,0x35,0x5a,0x2f,0x4e,0xd4,0x45,0x90,0xfe,0x70,0xea,0xbc,0x41,0x3a,0x54,0xba,0x13,0x11,0x89,0x1f,0xc1,0xf8,0x5d },
{ 0x86,0xf0,0x9c,0xf2,0x29,0xa9,0xb3,0x00,0xe6,0x24,0x3f,0x51,0x25,0x2e,0x62,0x6a,0xcf,0x2e,0x3a,0x30,0xbd,0x34,0x42,0xcf,0x4e,0xff,0xe8,0x2b,0xfc,0x3c,0x71,0xa3 },
{ 0x36,0x75,0x35,0x7f,0x0d,0x7b,0x56,0x06,0x7d,0xf3,0xa9,0xf2,0x14,0x37,0x46,0x18,0x1b,0x7f,0x70,0x5c,0x3a,0x27,0x35,0x32,0xae,0xad,0x82,0x06,0x97,0x5c,0x17,0xfa },
{ 0xd0,0xb9,0xfa,0xfe,0x16,0xb4,0xac,0xa5,0x79,0x55,0x45,0x6b,0x1c,0x8f,0xe3,0x3b,0xee,0x39,0xaa,0xf3,0x6a,0x9e,0x25,0x2b,0x98,0x86,0xf8,0xf3,0x61,0x57,0x94,0x4c },
{ 0x68,0x78,0x7d,0xd9,0xd7,0x11,0x06,0x42,0x69,0x00,0xda,0x20,0x30,0xf8,0x57,0x7c,0xa6,0xeb,0x82,0xa7,0x76,0x9e,0xac,0x9d,0x1a,0x2a,0x3d,0x2d,0x73,0x0d,0x3f,0x80 },
{ 0x41,0xee,0x6e,0x9d,0x12,0xc4,0xf4,0x98,0x17,0x60,0x3c,0x7d,0xad,0xe5,0xe6,0x84,0x1a,0xa9,0x33,0x09,0x89,0x25,0xe5,0xf7,0x1d,0x73,0x4d,0x10,0xad,0x92,0xbd,0x61 },
{ 0x72,0xf3,0xb1,0xc5,0xf8,0x45,0xa6,0x56,0x7c,0x89,0x50,0x4e,0x1a,0x12,0x88,0x8e,0xb6,0xa3,0x24,0x4c,0xa4,0x80,0x2c,0xa3,0x86,0xe4,0x58,0xe9,0x82,0xf7,0x25,0xdc },
{ 0x2b,0x19,0xe1,0xbb,0x36,0x60,0xe4,0xb3,0x89,0xc9,0xc2,0x74,0xeb,0x3e,0xc0,0xb1,0x84,0xa9,0xab,0xa5,0x88,0x4f,0x4e,0xf6,0x57,0x63,0x2d,0xd8,0x9d,0xda,0x4c,0x4d },
{ 0x9f,0x8f,0xd7,0x4e,0x6c,0xba,0xcc,0x20,0xd1,0x35,0x7e,0x14,0xac,0xf4,0x6e,0xb9,0xdc,0x11,0x52,0x35,0xef,0x0d,0x4d,0x51,0xa3,0xe3,0xc5,0xb1,0xe2,0x31,0x3a,0x8c },
{ 0xb6,0xc8,0x67,0xf6,0x5e,0xc8,0x18,0x0c,0xc1,0xcc,0xa1,0x1f,0x76,0x72,0x22,0x25,0x60,0xcc,0x87,0xc8,0x18,0x1f,0xd9,0xce,0x7f,0x0f,0x7f,0x6b,0x80,0x33,0xfd,0x60 },
{ 0xd5,0xb6,0x6e,0xf1,0xf5,0xf2,0x25,0x25,0xef,0x77,0x1f,0x20,0x47,0x6f,0x63,0x0e,0xb4,0x27,0x1c,0xff,0x53,0x9a,0x47,0xee,0x8c,0x0d,0x81,0x35,0x4b,0x7d,0x2f,0xe9 },
{ 0x84,0x98,0x75,0xd1,0x89,0xc5,0x13,0xe4,0x89,0xb6,0x7c,0x72,0xff,0xe8,0xfc,0xd1,0x74,0xa3,0x83,0xf9,0xc3,0x29,0x2a,0xff,0x50,0xfc,0x0c,0x06,0x85,0x13,0x30,0xa1 },
{ 0xe3,0x11,0x05,0x4c,0x48,0xeb,0xca,0x1f,0x79,0xe7,0x81,0x1c,0x1d,0x0a,0x45,0xbb,0x9d,0x1c,0x33,0xfd,0x13,0xe5,0x3a,0x4d,0xe1,0xeb,0x76,0xcc,0xc6,0x11,0x93,0xa3 },
{ 0xe3,0x5d,0xb7,0x48,0x3e,0x20,0xce,0xfe,0x75,0x36,0xe6,0x4e,0xea,0x60,0xbd,0x5b,0x93,0x3b,0xcd,0x20,0xc5,0xd1,0xed,0x53,0x4c,0x86,0x2b,0xdf,0xea,0x56,0xf3,0xbd },
{ 0xb1,0xf8,0x04,0xda,0xbc,0x68,0x27,0x4c,0x12,0x33,0x99,0x5c,0x5a,0x91,0x19,0xb5,0x69,0x35,0xbc,0xdd,0x83,0xb7,0xde,0x07,0xec,0x72,0x6d,0xce,0xdc,0x4e,0x9c,0xe7 },
{ 0x50,0xab,0x35,0x39,0x7c,0x4f,0xcd,0xf6,0xc6,0x57,0x9b,0x61,0x20,0x43,0xbf,0xa5,0x8f,0x5d,0xa9,0x1f,0xf2,0x54,0xbc,0x82,0xea,0x09,0x8b,0xf8,0x20,0x73,0x88,0xcf },
{ 0x6a,0x0f,0x6a,0x28,0x3a,0x8e,0x4e,0x86,0xd2,0xa3,0xd6,0x0e,0xf9,0xe3,0x7e,0xc3,0x3f,0x2a,0xb6,0x07,0x1a,0x30,0xe0,0xa4,0x77,0x73,0x51,0x28,0xe7,0x57,0x1e,0xb0 },
{ 0xdd,0x6b,0x8f,0xb4,0x46,0xd0,0x2d,0x1e,0xc0,0x14,0xc2,0x01,0x11,0xec,0xbe,0xae,0xfc,0xad,0xf8,0xc8,0x5d,0xbd,0xab,0xbd,0x23,0xdf,0x19,0x14,0x32,0xdb,0x5d,0x59 },
{ 0xd1,0xf8,0x7d,0x98,0x5a,0xde,0xe0,0xc3,0x46,0x6a,0xc0,0x45,0x87,0x45,0x99,0x8f,0xc0,0xf3,0x9a,0x98,0x84,0x89,0x7c,0xe4,0xc7,0x54,0x8d,0x1d,0xb8,0xe1,0x06,0x42 },
{ 0x38,0x49,0xbf,0x20,0xa8,0xdd,0xdc,0x80,0x22,0x10,0xfc,0x7e,0xe8,0xf4,0x0d,0x53,0x25,0xf9,0x02,0x94,0xca,0x83,0x01,0xf5,0x00,0x4f,0xc7,0x8c,0xef,0xdd,0x04,0x25 },
{ 0xdf,0x1c,0x5b,0x4a,0x92,0x9b,0x53,0xf9,0x32,0xe0,0x25,0xdf,0xff,0x4e,0x62,0x23,0x2e,0x1b,0x8f,0x82,0x4c,0x68,0xa8,0xcb,0xd6,0x2b,0x05,0x86,0x2c,0xae,0x19,0x57 },
{ 0xae,0x03,0x31,0x4b,0xf2,0xfa,0x5f,0x70,0x0a,0x5f,0x57,0x4e,0x4a,0x4a,0x4f,0x37,0xe2,0x88,0xd6,0xba,0xa7,0xb1,0x1c,0x1b,0xf4,0x2e,0xcb,0xbd,0x42,0x9d,0x0d,0x5e },
{ 0x31,0x56,0xfa,0xe0,0x8e,0x41,0x2d,0x21,0x42,0xe1,0x51,0x47,0xda,0xb5,0x63,0x58,0xdd,0x25,0x1b,0x7d,0xa8,0x08,0x11,0x8a,0xc1,0x7c,0xcb,0x07,0xc5,0x39,0xb2,0x8e },
{ 0xa8,0x87,0x4e,0xbf,0xb7,0x88,0x55,0xe3,0xa3,0x54,0x2b,0x67,0x66,0x73,0x17,0x6c,0xf3,0x86,0x7f,0x08,0x5a,0x2a,0x17,0xff,0x40,0x98,0x2c,0x12,0x9c,0x62,0xb4,0x13 },
{ 0xe3,0xaa,0xdb,0x7d,0xea,0x40,0xd2,0x5b,0xbb,0xba,0xec,0x41,0x40,0xbf,0xb7,0xba,0xd2,0x96,0x3f,0x87,0x48,0xd3,0x61,0xce,0x7b,0xbb,0xd1,0x1a,0xcb,0xa0,0x9d,0x54 },
{ 0x62,0x47,0x88,0x0b,0xff,0x0e,0x29,0x4d,0x09,0x43,0x05,0x6f,0x10,0x70,0x85,0x46,0x92,0xec,0x92,0x7b,0x72,0x41,0x7d,0x12,0x7c,0x2b,0xea,0x60,0xa3,0xba,0xcf,0x1f },
{ 0x1a,0xa9,0x05,0xfa,0xe6,0xbb,0xdf,0xfc,0x27,0x6b,0x6f,0x6a,0xb7,0x8a,0x57,0xd3,0x27,0x93,0x42,0x6d,0x06,0x66,0x8b,0x13,0x7b,0x45,0xdc,0xed,0x49,0x5d,0x71,0x20 },
{ 0x99,0xbc,0x88,0x21,0xd6,0xc0,0xa1,0x5f,0x42,0x15,0x72,0xb3,0xa6,0xe9,0x49,0xc0,0xdf,0xc3,0x80,0x78,0x29,0x4a,0xea,0xb2,0xfe,0xa0,0xc3,0x1d,0x92,0xf0,0xc4,0x8c },
{ 0x65,0xd5,0x5a,0x45,0x8d,0x78,0x94,0x20,0xc3,0xae,0xa4,0x8b,0x19,0x43,0x14,0x2c,0xd7,0x7b,0x45,0xd0,0xed,0xbd,0x16,0x67,0x43,0x87,0x10,0xb5,0x6c,0x96,0x91,0xd5 },
{ 0x9f,0xb9,0xfb,0x22,0x05,0xc5,0xf8,0x72,0xda,0x6d,0x3e,0x0b,0xcc,0x69,0x32,0x33,0x85,0x8f,0x68,0x41,0x22,0xa8,0x62,0x9b,0xb3,0x9f,0x78,0xcb,0x99,0x75,0x20,0xd6 },
{ 0x93,0x2e,0x1e,0x5f,0x01,0xa5,0x0d,0x36,0x15,0xa9,0x30,0x32,0x6c,0x14,0xd2,0xb3,0x58,0xfe,0x1c,0x58,0xcc,0x78,0x7f,0xb6,0xe9,0xe4,0xf7,0xc7,0xe1,0x38,0xaf,0xb4 },
{ 0x1f,0xd9,0xcf,0x33,0xe2,0x59,0x21,0x53,0x2a,0xb1,0x28,0xbd,0x77,0x55,0x38,0xa8,0x8e,0x4e,0xe8,0x85,0x16,0xed,0x22,0x16,0x1d,0x52,0x2e,0x9a,0x75,0x85,0xab,0xb5 },
{ 0xb3,0x73,0x5b,0xdc,0x73,0x7d,0x36,0x02,0x99,0xf7,0x6c,0xad,0x58,0x80,0x9c,0x37,0x39,0x29,0x37,0x04,0x79,0xd1,0xcc,0x18,0x2e,0x59,0xc7,0xb7,0x92,0x77,0xa4,0x2c },
{ 0x52,0xb8,0xab,0x72,0x28,0xf8,0x12,0xdd,0x13,0x9c,0xf1,0x6d,0x53,0x57,0x35,0x35,0xe1,0x7d,0x72,0x32,0x88,0x60,0xdf,0x36,0x62,0xcb,0xba,0xfe,0xb4,0xf4,0xf1,0x9e },
{ 0x2f,0x9e,0xc3,0xe9,0xcf,0x00,0xf3,0x77,0x08,0x11,0x2f,0xde,0x3d,0x0a,0x92,0x67,0x9d,0xb9,0xc3,0x65,0x41,0x8a,0x7b,0x34,0x5a,0xe9,0x6d,0x11,0x99,0xc5,0x98,0xf0 },
{ 0x89,0x02,0xe9,0x94,0xee,0xd6,0x72,0xae,0x0a,0x5e,0x6b,0xca,0xf8,0x67,0x42,0x08,0x60,0x29,0xa3,0x83,0xbd,0xb9,0x96,0x68,0x3d,0x02,0x11,0xf8,0xd2,0x16,0x83,0x05 },
{ 0x36,0x87,0x73,0xbc,0x0a,0x52,0x3c,0x7a,0x32,0xf0,0x05,0x15,0x9e,0xd7,0xd5,0xd2,0xb4,0x45,0xca,0x52,0x06,0x9d,0xea,0xe0,0x92,0x5c,0x79,0x02,0xca,0xa3,0x0f,0xa3 },
{ 0xb3,0xae,0x80,0x29,0x8e,0xe6,0x5c,0x81,0xb0,0xcd,0xed,0x0e,0x4b,0x08,0x6f,0x34,0xbf,0x3d,0x5f,0xc3,0xdb,0xca,0xaf,0xe6,0xfb,0x2e,0x58,0xfa,0x7b,0x4f,0xb5,0xf5 },
{ 0x00,0x11,0x07,0xa1,0x50,0x43,0x93,0x22,0xde,0x39,0x4e,0xe0,0x9d,0x20,0x4b,0xa2,0x37,0xb5,0xae,0xc2,0x8b,0x63,0xa3,0x03,0x9c,0x14,0x3b,0x80,0xcc,0x7c,0xa7,0xca },
{ 0x4a,0xfe,0x5c,0xb7,0xa8,0x34,0xab,0x3f,0xf0,0x18,0xb2,0xee,0xf1,0xce,0xfb,0xef,0x9e,0x55,0xbe,0x5c,0xdf,0xfa,0x08,0x27,0xfe,0x89,0x2d,0x26,0x41,0x8f,0x42,0xee },
{ 0xf2,0xed,0x5f,0x22,0x20,0xe7,0xa9,0xe6,0x3a,0x2c,0x7a,0x5e,0xf4,0x79,0x6d,0x7c,0x1e,0x23,0x16,0xbb,0x7b,0x1a,0x27,0x7e,0x78,0x96,0x3e,0xf5,0xb1,0x54,0x81,0x90 },
{ 0xa7,0xef,0x22,0x4a,0x5a,0xe7,0x74,0x1a,0x2a,0x95,0xba,0xdf,0x8b,0x36,0x56,0x05,0xb5,0x20,0x53,0x62,0x25,0x54,0x5e,0xbd,0x31,0xcf,0x60,0x81,0xc9,0x19,0xb8,0xc0 },
{ 0x66,0xaf,0x71,0xf6,0x61,0xd8,0x7c,0x7b,0x01,0x9a,0xd5,0xd2,0x0f,0xb5,0x2d,0xe9,0xa0,0x4f,0xb4,0x11,0x52,0x1b,0x97,0x43,0x11,0xa0,0x64,0xc8,0x4d,0x1c,0x41,0xd9 },
{ 0x2a,0x91,0xf3,0xb8,0x98,0x84,0x63,0x7b,0x29,0xe5,0x9b,0xdf,0xd6,0xbb,0x96,0x9c,0x02,0x5c,0x09,0xb2,0x71,0xb5,0x81,0x6a,0xe3,0xde,0x84,0x46,0x94,0x8a,0x83,0x30 },
{ 0xae,0xb2,0x11,0x78,0x9a,0xa1,0xec,0x24,0xe9,0xde,0x9e,0xfd,0x4e,0xa9,0xac,0xfc,0x73,0x6a,0xba,0x70,0x50,0x9a,0x08,0x08,0x9f,0x7d,0xc9,0x8e,0x4b,0x3d,0xf8,0x92 },
{ 0xe0,0x95,0xa1,0xea,0xb5,0x0c,0x09,0xf7,0x27,0x2d,0x80,0xce,0xc9,0x01,0x34,0xe0,0x64,0x9a,0x43,0x18,0x27,0x8d,0xd6,0x90,0xa8,0x44,0x65,0x79,0x98,0x92,0x27,0x0d },
{ 0x9f,0x5d,0xd0,0xaf,0xb2,0x5c,0x64,0xfe,0x2f,0x52,0xa0,0xa4,0x7f,0x49,0x0a,0xf0,0x12,0xe8,0x73,0xaf,0x61,0x79,0x5e,0x56,0xd2,0x25,0xec,0xa2,0xba,0x5a,0xa3,0xf3 },
{ 0x25,0x1c,0x54,0x0e,0xfc,0x8d,0x3b,0x93,0x71,0xc4,0x45,0xb7,0xd9,0xc0,0x15,0x99,0xd2,0xf1,0x58,0x44,0xd8,0x48,0x28,0xd5,0xf8,0x2e,0xda,0xa9,0xc6,0x2b,0xf4,0x83 },
{ 0x36,0xea,0x4c,0x1c,0x66,0x2c,0x64,0x37,0x65,0x08,0x98,0xeb,0xa3,0x46,0xba,0xef,0x06,0x72,0xaf,0x1c,0xb4,0xcb,0x6f,0xd6,0xf0,0xda,0xeb,0x5d,0xa1,0x47,0x95,0xfb },
{ 0x3e,0xaf,0x46,0x8a,0xd3,0x68,0x3b,0xb0,0x2c,0x56,0xdb,0x92,0x56,0x34,0x83,0x5b,0xac,0x62,0x95,0x53,0x36,0x29,0x9b,0xb1,0x07,0x84,0x68,0x26,0x2d,0x31,0xfa,0x95 },
{ 0x1a,0x9c,0x46,0x88,0xf1,0x09,0xfa,0xc0,0x1c,0x08,0xd2,0x7d,0x62,0xc9,0xfc,0x13,0x16,0xfa,0x80,0xe8,0xa7,0xed,0x92,0x0e,0xdb,0x2b,0xa9,0x50,0xe1,0xba,0x3f,0xc8 },
{ 0x86,0xa8,0x5f,0xf5,0x78,0x76,0xfd,0x33,0x7a,0x3d,0x5f,0x18,0xda,0xa5,0xd1,0xac,0xd8,0x1f,0xf8,0x4d,0x59,0x05,0xdb,0xac,0x93,0x67,0x56,0x2f,0xf0,0x54,0x45,0x45 },
{ 0xf4,0x49,0x04,0xfb,0x7d,0xc3,0x36,0x43,0x97,0xc5,0xbe,0xb7,0xd8,0x0c,0x3e,0x97,0x48,0xde,0x29,0xbf,0x8c,0xe8,0x6b,0x40,0xd7,0xd8,0xce,0x6a,0x4a,0xf7,0xb9,0xb5 },
{ 0x77,0xa3,0x0c,0x8b,0x67,0x6c,0x11,0x22,0xc8,0x2e,0x63,0x0d,0xa4,0x4b,0x07,0xea,0x5a,0x98,0x43,0x5f,0x00,0x2d,0x86,0xd2,0x0e,0xc8,0x91,0xcb,0xc4,0x61,0x45,0x6f },
{ 0x38,0x2c,0xd1,0x8e,0xa0,0x36,0xd8,0x49,0xc4,0xd3,0xb7,0x6a,0x59,0xa1,0x05,0xe2,0x07,0x88,0x19,0x8d,0x6b,0x56,0xcd,0x97,0x11,0x99,0xaa,0xcb,0xea,0xe5,0xb9,0x25 },
{ 0x7d,0xbe,0x66,0x58,0x78,0x59,0x8d,0x31,0x37,0xe4,0x8c,0x06,0xef,0x2e,0xf7,0xc7,0x87,0x0d,0x86,0x5a,0x1d,0x3a,0x85,0xa8,0xa8,0x25,0x57,0x61,0xf3,0xc8,0xd6,0x29 },
{ 0x67,0x5e,0xf5,0x35,0x02,0x3b,0x6e,0x40,0x4a,0x98,0xd9,0x47,0x15,0xc2,0x71,0x6f,0xb2,0x95,0xea,0x40,0xd5,0x6b,0x2d,0x03,0xe9,0x5c,0xb1,0x2b,0x18,0x5d,0xad,0x36 },
{ 0x71,0x88,0xab,0xb1,0xe3,0x30,0x74,0xca,0xf0,0x5e,0xa5,0x80,0xe9,0xf3,0x15,0x3c,0x70,0xd6,0x5e,0x10,0x4d,0xd7,0x8c,0xbf,0xac,0xad,0xaa,0x4f,0xdc,0x9e,0xf6,0x79 },
{ 0xf5,0xcf,0x6f,0xb2,0x9e,0x90,0xa9,0x01,0xc4,0xad,0xa5,0x23,0xf2,0x09,0x37,0x93,0x8d,0xea,0xa4,0x46,0x13,0x97,0x2a,0x6c,0xfa,0xb5,0x48,0x16,0x44,0xc0,0x0c,0xc4 },
{ 0x3e,0x3a,0xfb,0xd1,0x6f,0x8c,0xc3,0x1c,0x51,0x97,0x16,0x83,0xad,0x71,0xcf,0x2a,0x37,0x7b,0xd0,0x5c,0x0b,0x66,0x75,0x8a,0xbd,0x66,0x3e,0x9e,0x02,0x03,0x90,0x81 },
{ 0xd7,0xd7,0xa4,0x41,0x21,0x70,0x00,0x03,0x44,0xf2,0x24,0x72,0xdf,0x32,0xde,0x51,0xad,0xd6,0x90,0x8c,0x02,0x7e,0xe4,0xb2,0x54,0x72,0x38,0xc7,0xcc,0xb9,0x20,0x7a },
{ 0x68,0x18,0x3d,0x3a,0x3e,0x35,0x6c,0x43,0xeb,0x58,0x52,0x3f,0x49,0x55,0xef,0xa6,0x7f,0x47,0x9d,0x0c,0x21,0x37,0xd7,0xa1,0x1b,0xcb,0x50,0x2f,0xcb,0x4d,0x0b,0x33 },
{ 0x76,0x5f,0x68,0x7f,0xf1,0x3b,0x1c,0xf3,0x00,0xdf,0x26,0x65,0x71,0xaa,0xdd,0x83,0xaf,0x23,0xba,0x44,0x1d,0x98,0xb4,0xec,0xb7,0xcc,0x59,0x9a,0x82,0xbc,0xc0,0x81 },
{ 0xf3,0x0b,0x26,0x28,0x96,0xe0,0xc0,0x99,0x73,0x4e,0xd6,0xa7,0x53,0x72,0x99,0x00,0x88,0x57,0x9c,0xb7,0x0a,0x16,0x33,0xe2,0xbc,0x12,0x94,0xe5,0x81,0x71,0x2a,0x63 },
{ 0xae,0xde,0x95,0x0c,0xf7,0xb7,0x14,0x89,0xff,0x71,0xd2,0x1b,0xec,0x53,0x06,0x26,0xfa,0x5b,0x0d,0x0a,0x94,0xd5,0x42,0xf4,0xb3,0x80,0x11,0x59,0x2c,0x1c,0x65,0x62 },
{ 0xce,0xcc,0x15,0x07,0xdc,0x1d,0xdd,0x72,0x95,0x95,0x1c,0x29,0x08,0x88,0xf0,0x95,0xad,0xb9,0x04,0x4d,0x1b,0x73,0xd6,0x96,0xe6,0xdf,0x06,0x5d,0x68,0x3b,0xd4,0xfc },
{ 0x68,0x06,0xcd,0xcc,0x96,0x22,0x3a,0x72,0x73,0xc1,0x07,0x66,0x05,0x7f,0x60,0x84,0xf7,0x82,0x33,0xea,0x79,0x06,0x82,0x1b,0x43,0x2a,0xfa,0xeb,0xa2,0x97,0x9a,0xd9 },
{ 0x6b,0x79,0xc5,0x7e,0x6a,0x09,0x52,0x39,0x28,0x2c,0x04,0x81,0x8e,0x96,0x11,0x2f,0x3f,0x03,0xa4,0x00,0x1b,0xa9,0x7a,0x56,0x4c,0x23,0x85,0x2a,0x3f,0x1e,0xa5,0xfc },
{ 0x33,0x23,0x89,0xbb,0x1a,0xf1,0x50,0xd9,0x23,0xd0,0x3a,0x75,0x17,0xf1,0xb0,0xa2,0x41,0x60,0x85,0xe0,0xad,0x0e,0x40,0x26,0xd4,0x20,0x9c,0xba,0x7e,0x9e,0xb8,0x99 },
{ 0x9b,0xe3,0x28,0x77,0x95,0x90,0x78,0x09,0x40,0x7e,0x14,0x43,0x9f,0xf1,0x98,0xd5,0xbf,0xc7,0xdc,0xe6,0xf9,0xbc,0x74,0x3c,0xb3,0x69,0x14,0x6f,0x61,0x0b,0x48,0x01 },
{ 0x9f,0x79,0x95,0xb1,0x74,0x5a,0x25,0x8f,0x10,0xab,0x68,0x10,0x32,0x04,0x4c,0xaf,0xa7,0x95,0x74,0xdf,0x27,0xeb,0x80,0xbc,0x4f,0xd4,0x1a,0xbf,0xfc,0xee,0xc0,0x6c },
{ 0xd4,0xc5,0x06,0x1b,0x81,0xc4,0x68,0x2b,0x27,0xa0,0xcf,0xc6,0x45,0x9c,0xd9,0xd7,0x89,0x2e,0xb6,0x0a,0x43,0xf7,0x3d,0xd1,0x06,0x0b,0x6c,0x47,0x8a,0xa7,0xc3,0xd8 },
{ 0x09,0x34,0xcc,0xb0,0x2f,0x1e,0x2d,0xa3,0xf1,0x85,0xb4,0xf9,0xe1,0xfa,0x3a,0xda,0x02,0x8a,0xcb,0x14,0xd1,0x71,0xd1,0x8a,0xb9,0xd7,0x6f,0x7d,0x59,0x75,0xa3,0xfd },
{ 0x69,0x10,0x4e,0xf2,0x0c,0x66,0x76,0xaa,0xcc,0x9e,0x8c,0x29,0x18,0x00,0xd1,0xb7,0xe9,0x11,0xe2,0x0f,0x85,0xb4,0x06,0x61,0x56,0xea,0x11,0x8a,0xce,0x44,0xb8,0xd7 },
{ 0xc2,0xb0,0x87,0xe8,0x02,0x84,0x4a,0xbc,0xa9,0x92,0x7a,0x67,0xd6,0x06,0x75,0xe1,0x08,0xf7,0xb1,0x10,0x92,0xfe,0xcf,0x8b,0x2b,0x66,0xe0,0x0c,0x53,0xdc,0x49,0x53 },
{ 0x3b,0xe5,0x33,0x82,0x2b,0x14,0x6a,0x67,0xb7,0x64,0x93,0x97,0xf6,0xfd,0xcd,0xe0,0x45,0x12,0x33,0xed,0xa2,0x82,0x99,0x7f,0xe3,0x1c,0x4d,0xcc,0x0a,0x9b,0x09,0xfb },
{ 0xf2,0x4c,0x0a,0xc0,0x1e,0x5b,0x7d,0xd9,0x45,0x85,0xa4,0x48,0x46,0xae,0xd3,0x1c,0x3f,0x84,0x3f,0x6f,0x6b,0xd1,0x7e,0xd4,0x3c,0xfa,0x92,0x9f,0xae,0xdb,0xe3,0x8e },
{ 0xf5,0x38,0xcb,0xdd,0x2a,0x80,0xda,0xa5,0x14,0x8c,0x77,0x11,0xe4,0xde,0x66,0x7e,0xab,0xdc,0x90,0xf6,0x1f,0xbd,0x1a,0x9a,0xed,0xbd,0xff,0x47,0x80,0xda,0xd5,0xe1 },
{ 0xd4,0x39,0x4a,0xaa,0xef,0x05,0xeb,0xdf,0xbd,0xcb,0xb4,0xb0,0xfe,0xc0,0x8b,0xda,0x11,0x20,0xe6,0xad,0x53,0x41,0x96,0x67,0x89,0xdc,0x22,0x8d,0x49,0x14,0x79,0xd4 },
{ 0x29,0xd8,0xad,0xa1,0xdc,0x71,0x2d,0x24,0x64,0x8a,0xd5,0x3f,0xbd,0x7f,0x00,0xde,0x37,0x7f,0x67,0x24,0x6f,0x0a,0xfc,0xbb,0x4d,0xb8,0x61,0xfc,0x53,0x7e,0x4b,0xb2 },
{ 0xfe,0xf6,0x5a,0xd6,0x79,0xa0,0x6b,0x18,0x36,0x56,0x39,0xa9,0x45,0xb3,0x10,0x2d,0x77,0x13,0x05,0xc6,0x68,0xbf,0x99,0x23,0x57,0x71,0x01,0x19,0xa5,0xb1,0xd7,0x38 },
{ 0x05,0x51,0x39,0xb0,0xf6,0xda,0xf3,0x3b,0x3f,0xdc,0x29,0x4e,0x2b,0xfc,0x1a,0xd9,0x14,0xde,0x91,0xf7,0xd6,0xe9,0xf7,0x17,0xb4,0x50,0x9c,0x04,0x7f,0xbc,0x6a,0xcc },
{ 0x7f,0x0c,0x8f,0x8c,0xbf,0x23,0xbd,0xaa,0xd8,0x5b,0x17,0x1a,0x4b,0xcd,0xa1,0x67,0x38,0xd3,0xe8,0x1a,0xcb,0x93,0x4f,0x7c,0xe7,0xb6,0xa8,0xfd,0xe8,0x97,0x21,0x5a },
{ 0x5c,0x35,0xbe,0x3c,0x93,0xb6,0xab,0x3c,0x47,0xc5,0x5d,0xa7,0x4d,0x94,0x17,0x0b,0x0b,0x5e,0xb3,0x2a,0xbf,0xf2,0x0f,0x92,0x2f,0xaa,0xf2,0x1c,0x04,0xb9,0xee,0x18 },
{ 0x0c,0xdc,0x95,0x23,0x1e,0xdd,0x87,0x63,0x4f,0x42,0xec,0x16,0x6c,0x3e,0x96,0x11,0x57,0x12,0xa4,0x8f,0x01,0x63,0x77,0xeb,0xe3,0x8a,0x30,0x23,0x48,0xeb,0x0c,0x1d },
{ 0x28,0x6b,0xe3,0x20,0x13,0xbd,0x2a,0x04,0x4d,0x4b,0x6c,0x93,0xa6,0xd8,0xb7,0x23,0xcd,0x1f,0xff,0xd6,0x4e,0x75,0xaf,0x1c,0xaf,0x24,0x5e,0x57,0x0b,0x93,0xd5,0x9f },
{ 0x0f,0x96,0x8d,0x60,0x70,0x44,0x6f,0xaf,0x45,0x53,0xdd,0xca,0x74,0xc1,0xbf,0xea,0x14,0x89,0xa5,0x6b,0x23,0xe7,0xca,0xd4,0x6d,0x5f,0x8a,0x95,0x76,0xaa,0x54,0x86 },
{ 0xa1,0xfa,0x54,0x0c,0x8c,0x3d,0xeb,0x01,0xd5,0xb0,0xa2,0x43,0xbe,0xc3,0xf9,0xb1,0x7c,0xed,0x1f,0x3f,0xae,0x67,0xc7,0x34,0x07,0xb0,0x39,0xdf,0x93,0x8b,0x3a,0x68 },
{ 0x74,0x74,0x9f,0xcb,0x58,0x72,0x24,0x48,0x7f,0x06,0x68,0x0c,0x23,0xf7,0xb4,0x5a,0x0c,0x7f,0x11,0x1d,0x3f,0xc7,0x98,0x15,0x0a,0x1e,0x3a,0xe7,0xa3,0x49,0xcf,0xb3 },
{ 0x70,0x9a,0x22,0x79,0xcc,0x68,0xcf,0x00,0x7c,0x15,0x5e,0xb9,0x2f,0xd9,0x85,0x82,0xd8,0xe3,0xa3,0xad,0xce,0x47,0xa3,0x13,0x59,0x98,0xee,0xc9,0xa4,0x58,0xe6,0xd9 },
{ 0xcb,0xbe,0xc9,0xa3,0xb1,0x61,0x52,0x64,0x7f,0x74,0x44,0xf4,0x66,0xd8,0x9f,0xee,0x0a,0xf3,0x55,0x54,0xfe,0x28,0xc9,0x92,0x88,0xa0,0x8c,0x88,0x5c,0xf3,0x19,0x7e },
{ 0x8b,0x8a,0x88,0xd1,0x76,0xa4,0x1d,0x5e,0xbd,0x33,0x79,0xc2,0x20,0xef,0x0f,0xbb,0xa2,0x7e,0xcb,0x39,0x02,0x2c,0xe3,0xbf,0x60,0xc4,0x8c,0x03,0xe3,0x69,0x26,0x7d },
{ 0x30,0x9f,0xa9,0x99,0xd7,0x87,0x86,0x4e,0xdd,0x1a,0x53,0xd7,0x3a,0xfa,0xd8,0x26,0xef,0x3a,0x3f,0xd9,0x30,0x54,0xa7,0xb6,0x48,0xad,0x26,0x2b,0x37,0xba,0xf1,0x9c },
{ 0xdc,0xa4,0xe7,0x8d,0xb0,0x37,0x99,0xdd,0xa7,0x5e,0x8a,0x29,0x5c,0x0d,0xc7,0x21,0x6b,0xb6,0xbd,0xc6,0x96,0x7c,0x27,0xc1,0xb0,0xbb,0x05,0xc7,0x54,0x9e,0xa6,0x56 },
{ 0xba,0x4d,0x60,0xd2,0xb5,0xff,0xeb,0x63,0x33,0x6c,0xf8,0xa0,0x9e,0x6c,0xe6,0x75,0xea,0x08,0x87,0x4b,0x71,0x8c,0x58,0x82,0xfc,0xd3,0xd6,0xe4,0x76,0xe5,0x2c,0xe0 },
{ 0x1f,0x17,0xc2,0xd0,0xdc,0x7c,0xb7,0xec,0x7d,0x8a,0x1a,0xb9,0xf6,0x2c,0x9d,0xc0,0x97,0x05,0x1a,0xa4,0x11,0x5a,0x8c,0x01,0x13,0xa4,0x85,0xed,0x82,0x0e,0x1a,0x5a },
{ 0xa3,0xc2,0x04,0xe1,0x74,0x99,0x6f,0x18,0xe3,0x56,0x5f,0xfd,0x66,0x5d,0x41,0x71,0x75,0x4d,0xca,0x20,0xb7,0xb9,0xc2,0xd0,0xe8,0x8a,0xf0,0xd5,0x36,0xc4,0x19,0x85 },
{ 0x71,0x92,0xbe,0xc2,0xc8,0xb7,0x8d,0xe5,0x9a,0x3e,0x00,0x45,0x23,0x54,0x40,0xe0,0xd6,0x56,0x3c,0xc4,0x99,0x91,0xbe,0x63,0x97,0xbd,0x27,0xa0,0xff,0xa8,0x1d,0x18 },
{ 0x81,0x1e,0x2a,0xe8,0xd6,0x34,0x4a,0x78,0xac,0xf6,0xfe,0x8e,0x29,0x5d,0x4f,0x53,0x8e,0x54,0xe7,0x3b,0x3b,0xd1,0x21,0x25,0x84,0x6f,0x60,0x9e,0xc4,0x1d,0xbd,0xaf },
{ 0xc9,0x5d,0xf2,0x25,0xb7,0x6c,0xf4,0x96,0x55,0xbc,0x2d,0x12,0xfc,0x78,0x0a,0xab,0x96,0x4c,0x07,0xdc,0xcb,0x08,0xb2,0xe7,0xcc,0xcb,0x61,0x1a,0x48,0x34,0xe1,0xfd },
{ 0x30,0x51,0xfa,0x7f,0x38,0xad,0xce,0x51,0x9e,0x6a,0x8d,0x35,0x85,0x97,0x69,0xed,0x9b,0xf1,0x5c,0xa5,0x91,0x5f,0x5b,0x9c,0xc7,0x0f,0xcc,0x34,0x5c,0xca,0x53,0xf9 },
{ 0x46,0x45,0xee,0x13,0xc1,0x7a,0xa7,0x9c,0xe3,0x4c,0xfc,0x00,0xb2,0xbb,0x67,0xd4,0xb1,0x6d,0xf1,0x01,0x04,0x28,0x21,0xe1,0xe4,0xc4,0x45,0x8a,0x31,0xbe,0x87,0xdd },
{ 0x86,0xdb,0x38,0x67,0xaf,0x37,0x79,0x11,0xda,0x0f,0x40,0xcd,0xb9,0xac,0xb0,0x8d,0x66,0x35,0x95,0x39,0xb0,0x70,0xc5,0xc5,0x5c,0x95,0xda,0x4d,0xa0,0x97,0xff,0x86 },
{ 0x88,0xe5,0x3e,0x75,0x15,0xca,0xc8,0x77,0xe3,0x5a,0x5b,0xa8,0x52,0xa0,0xfc,0x38,0x3f,0x50,0xcf,0x5c,0x45,0x7a,0x74,0x6f,0x60,0x19,0x41,0x89,0xbc,0x76,0x00,0x24 },
{ 0x92,0xd8,0xe6,0x2c,0x1a,0x4f,0x88,0x14,0x55,0x93,0xe6,0x08,0xf5,0x70,0xba,0x52,0x41,0x5a,0xac,0x53,0xa3,0x91,0x45,0xfa,0xb6,0x8e,0x46,0x10,0xef,0x1b,0xb2,0x79 },
{ 0x26,0x6b,0x5d,0x36,0x45,0x51,0xf7,0x3b,0x9c,0xdb,0x75,0x34,0x09,0x9b,0x68,0x09,0xaf,0x9b,0x72,0xa4,0xe6,0x59,0xcc,0x5a,0xa9,0x51,0xb1,0x18,0x60,0xf7,0xd5,0x7c },
{ 0x7b,0x18,0xc4,0x02,0x34,0xb0,0x98,0x63,0x7d,0x98,0xd0,0x15,0xd1,0xed,0xdf,0x17,0x91,0xe8,0xdb,0xe2,0x2d,0xf8,0x1b,0xb7,0xb6,0x65,0xf9,0x82,0xf4,0x88,0x45,0x9b },
{ 0x6b,0x03,0x2c,0xc7,0xac,0xc2,0x14,0xa6,0x84,0x85,0x57,0xb5,0x1e,0x10,0xc4,0xc9,0x5c,0xdd,0x2c,0x41,0x78,0xcf,0x87,0x43,0x38,0xd7,0x87,0x85,0x5e,0x9c,0xc2,0x7f },
{ 0x07,0xb2,0x9d,0x71,0xe8,0x77,0xd2,0x1c,0x93,0x56,0x52,0xd8,0x90,0xc8,0xee,0xd6,0xc4,0x91,0x82,0x19,0x1f,0x87,0xf3,0xd8,0x35,0x62,0x88,0xb1,0xb4,0xb5,0xc3,0x54 },
{ 0x8f,0x8e,0xc6,0x2a,0x2a,0xe1,0xb6,0x6c,0xf5,0x0e,0x6c,0xab,0x96,0x91,0xc0,0x9e,0x87,0xa4,0xd4,0xba,0x55,0x42,0xd3,0xa1,0x90,0x38,0x6d,0x9d,0x9c,0xa2,0xdc,0xf0 },
{ 0xa3,0x38,0xc8,0x6a,0xb2,0xb8,0x50,0xa5,0x14,0x45,0x2c,0x3a,0x70,0x2d,0xcf,0x47,0x45,0x79,0x1d,0x3d,0x8f,0x40,0xc8,0xfa,0xd6,0xde,0x4f,0x64,0x23,0x6b,0x49,0xca },
{ 0xe6,0x3a,0xb1,0x11,0x20,0x88,0xb1,0x71,0xdf,0x28,0xb5,0x14,0x7c,0xad,0x05,0x23,0xf5,0x14,0x72,0x1b,0xd4,0x0d,0x9b,0x59,0xc1,0x8f,0x4f,0x91,0x7b,0x6a,0xc6,0x80 },
{ 0x74,0x1c,0x65,0xf3,0xd7,0x1f,0xf0,0x3d,0xe7,0xf4,0x91,0xc0,0x08,0xcb,0x9a,0x26,0xf7,0x46,0x84,0xf7,0x0a,0x3e,0x78,0x71,0x71,0xa8,0x58,0x41,0x05,0x90,0x15,0xab },
{ 0x36,0x64,0x01,0x7a,0x6e,0xdd,0xc9,0xfd,0xb7,0x3c,0x5f,0xb8,0xfd,0xc7,0xe6,0xbf,0x76,0xfc,0x70,0x30,0x11,0xbd,0x85,0x41,0xad,0xc0,0x47,0x44,0x5d,0x96,0x5f,0x9d },
{ 0xd4,0x50,0x74,0x60,0xa9,0x22,0x0a,0x7f,0x0a,0x62,0x51,0x99,0x0f,0x51,0x49,0x5d,0xdd,0xa0,0xc1,0x33,0xba,0x6a,0x4e,0x3b,0x1b,0x2a,0x98,0xd7,0x84,0xa0,0xcc,0xed },
{ 0x77,0xc8,0xfb,0x96,0xf1,0x4f,0xf4,0x21,0xe0,0x03,0xe2,0xdb,0x02,0x9d,0xf0,0xd4,0x5b,0xd3,0x77,0xd0,0x8f,0x84,0x45,0x50,0x10,0x21,0xbf,0xd5,0xa2,0x73,0x1e,0xf8 },
{ 0x19,0x41,0xb8,0x39,0x58,0xed,0x3d,0x33,0xf9,0xd5,0xcb,0xb8,0xde,0x05,0xa3,0xdf,0x9f,0x96,0x44,0x9c,0x1e,0x7c,0xc3,0x28,0x22,0xcf,0x41,0xf6,0x72,0xad,0x49,0xc6 },
{ 0x7e,0xb1,0x40,0xba,0xe6,0x43,0x2b,0xdc,0x5c,0xd7,0x81,0xa8,0x6d,0x41,0x31,0x92,0x33,0xa9,0x88,0xc2,0x0f,0xd5,0x87,0xd8,0x5d,0x72,0xd2,0x9f,0xa7,0xa3,0x82,0x53 },
{ 0x1c,0x4c,0x04,0xcb,0xfb,0x6f,0xe9,0xc7,0xa6,0x82,0xee,0x85,0x6a,0x02,0x81,0x25,0x3c,0x6b,0x70,0xcf,0xb1,0x2a,0x47,0xc4,0x5d,0xd2,0xb0,0xb4,0xf5,0x1d,0x60,0x5b },
{ 0x6c,0x3b,0xbb,0x18,0xf9,0x3f,0x29,0x88,0xa1,0x20,0xb2,0x09,0xc0,0x34,0xa2,0xbd,0xa5,0x22,0xec,0xdf,0xf9,0xce,0xe8,0xf8,0x01,0xba,0xbd,0xeb,0x4c,0xba,0x64,0x61 },
{ 0xf0,0xa5,0xaf,0x4b,0x37,0x97,0x21,0xc4,0x1c,0x76,0x1b,0x1c,0x85,0x88,0xb7,0xad,0x2c,0x07,0x80,0xe9,0xb2,0xfb,0x44,0x87,0x85,0x5d,0xa1,0xb2,0x64,0x8a,0x29,0x1c },
{ 0xc9,0x15,0x5e,0x23,0x95,0x4c,0x3a,0xb6,0x30,0xec,0x6e,0xd8,0xc6,0x47,0x8c,0xf2,0xaf,0x48,0x13,0x2a,0x23,0x0d,0xef,0x8e,0x83,0xb0,0xe3,0x26,0x3c,0x37,0x0a,0x5c },
{ 0x55,0x62,0xe5,0xe4,0xe2,0x55,0x23,0x2a,0xd8,0xaf,0x45,0x1c,0x0e,0x26,0x4b,0xae,0xf4,0xf1,0x9d,0x26,0xc7,0x97,0x9a,0x69,0x82,0xa3,0x71,0x9e,0xa6,0xa9,0xb0,0xce },
{ 0xb0,0xd2,0xb4,0xff,0x99,0xa1,0x84,0x27,0xbd,0x01,0xec,0x78,0x80,0x36,0x86,0x62,0xae,0xf3,0x39,0x3b,0xf9,0x90,0x5d,0xee,0xd1,0xd8,0xae,0x3e,0x9a,0x42,0x17,0x8e },
{ 0x37,0x77,0xde,0xa6,0xc5,0xd0,0x5a,0xdc,0x4b,0xbb,0xc0,0xf5,0xd8,0x1c,0x22,0x6b,0xc1,0xd8,0xb8,0x8f,0xfc,0xb7,0x55,0xa0,0x79,0x74,0x54,0x31,0xaf,0x0f,0x2a,0xc4 },
{ 0x61,0xe2,0xe1,0xbd,0x6e,0x74,0x2c,0xf3,0x22,0xfb,0xfc,0xac,0x8a,0x2f,0xab,0x18,0x12,0xff,0xb5,0x81,0x30,0x19,0x99,0xc1,0x31,0xa0,0x79,0xab,0x3b,0x94,0x2b,0x3b },
{ 0x76,0xca,0x87,0x12,0xb4,0xbc,0xec,0xaa,0x62,0x6a,0x38,0xc2,0xe0,0xc5,0x87,0xc0,0xc8,0x59,0xf1,0x7c,0xc6,0xff,0x95,0x82,0x32,0x4e,0x3b,0xf3,0xe9,0x0b,0xa0,0x4b },
{ 0xee,0xc5,0x74,0x1a,0x61,0x60,0xc3,0x5c,0xcb,0xc5,0x81,0xda,0x8e,0x67,0x0a,0x78,0xc5,0x6e,0xa5,0x3a,0x6e,0x95,0x44,0x0b,0x88,0x6e,0x4f,0x96,0xf6,0x87,0x51,0x67 },
{ 0x27,0xef,0x47,0x76,0x9e,0x2e,0xf4,0x46,0x0d,0x21,0xfa,0x23,0x91,0x88,0xa5,0xfb,0xb7,0xd2,0x9b,0x67,0xa4,0xb1,0x3b,0xc0,0x70,0x61,0x36,0x55,0x46,0xac,0x5c,0x6e },
{ 0xa3,0xc4,0x41,0xca,0x11,0x92,0x31,0xcd,0x56,0x41,0x02,0x94,0x07,0xc2,0xa8,0x0b,0xd3,0xfe,0xbd,0xb1,0xa2,0x49,0x8c,0xb3,0xc4,0x73,0xd5,0x37,0x3a,0xbc,0xd4,0x6b },
{ 0x0b,0xb2,0x7e,0xf6,0x72,0x15,0x84,0xd7,0x2c,0xee,0x85,0x8a,0xee,0xdf,0xad,0x02,0x33,0x1f,0xc6,0x8f,0xfe,0x88,0x5e,0x0f,0x16,0xc8,0x4e,0x22,0xbb,0x32,0xaa,0x8e },
{ 0x09,0x5e,0xee,0xa3,0x7c,0xf9,0xae,0x12,0x6f,0x61,0xf2,0xb1,0x74,0x8b,0x14,0xcc,0xca,0x16,0x92,0x1f,0xc6,0x08,0x35,0xd8,0x7d,0x1b,0x08,0x36,0x3f,0x14,0x76,0xb6 },
{ 0xb1,0x11,0xf2,0x2e,0xff,0xbc,0x77,0xbb,0x8d,0x9a,0xfc,0xe0,0x78,0x44,0xe9,0xc0,0xec,0x65,0xfa,0x1f,0xa1,0xa1,0x2d,0x9a,0x34,0x23,0x37,0x50,0x95,0xa3,0x71,0xb6 },
{ 0xda,0x5f,0x04,0xd1,0xa4,0x01,0x3b,0x3e,0x29,0x44,0xb2,0x5d,0x2e,0x32,0x9c,0x75,0xdb,0x2e,0x27,0xb2,0x4e,0x20,0x45,0x3a,0x51,0x63,0xf6,0x58,0xa5,0xa1,0x34,0xb7 },
{ 0xfa,0xd7,0xee,0x91,0x9a,0x41,0xd0,0xc4,0xce,0xd8,0x08,0xcb,0x5f,0x89,0xbe,0x20,0xd2,0xe4,0x3a,0x9a,0x66,0xcb,0x0c,0xfc,0x5d,0x39,0x52,0x2a,0xa6,0x88,0xa1,0x2a },
{ 0x16,0x22,0x4f,0xc3,0x98,0x9e,0x5a,0x5f,0x39,0xe8,0xac,0xad,0x3c,0xc3,0x67,0xa2,0x4d,0x3a,0x25,0x67,0x80,0xab,0x8e,0xbe,0xa1,0x9b,0x27,0x9c,0x9f,0xcd,0x68,0xf3 },
{ 0x4d,0x4d,0xbd,0x12,0x93,0xb9,0x7c,0x0e,0xaf,0x33,0xb8,0xf7,0x13,0x7a,0xfb,0x55,0xb4,0x0a,0x97,0x1a,0x22,0xee,0x45,0x6f,0xb6,0x53,0x5b,0xaf,0xc8,0x7b,0x63,0x83 },
{ 0x44,0x30,0xff,0x1e,0xed,0xc8,0xdd,0x56,0xf8,0x71,0xde,0xb8,0x4a,0x5b,0xe3,0x0c,0xe7,0xa2,0x5e,0x40,0x61,0x1e,0x31,0xff,0x9b,0xf1,0xbc,0x3a,0x72,0xeb,0xb4,0xc6 },
{ 0xe3,0x30,0x01,0x80,0x63,0x1b,0xe6,0xb1,0x09,0x41,0x5f,0x49,0x86,0x3e,0x10,0xb9,0x42,0x51,0xe9,0xee,0x98,0xbf,0xd6,0xbd,0x93,0x15,0xe1,0x54,0x60,0x72,0x22,0xc0 },
{ 0xeb,0xab,0xa3,0xd2,0xcb,0x08,0x31,0x18,0x51,0xaa,0x23,0x95,0x5c,0x19,0x46,0xd8,0x18,0xff,0x9c,0x47,0x3d,0xdc,0xff,0xe8,0xf1,0x23,0x14,0xe8,0xd9,0x32,0xa4,0xe1 },
{ 0x9a,0xcd,0x4c,0x39,0x75,0x01,0x2e,0x23,0x9e,0x25,0x1f,0xf2,0xf9,0xa0,0x71,0x74,0x3c,0x5b,0xd4,0x3c,0xa2,0xbb,0x99,0xa5,0xe9,0x5b,0x54,0x5e,0x98,0xa7,0xe3,0x87 },
{ 0x47,0xe6,0x41,0x7e,0xf2,0x21,0x1c,0x26,0xd6,0xcb,0x05,0xb5,0xc0,0x9a,0x08,0xa2,0x4d,0xa2,0xbb,0x86,0x78,0xed,0xde,0xee,0xa4,0x18,0xfb,0xae,0xc8,0x84,0x52,0xa0 },
{ 0x87,0x89,0x84,0x0a,0x8a,0xc2,0x84,0x0f,0x95,0xba,0x16,0x8a,0x83,0x23,0x17,0x3a,0x71,0x0e,0x77,0x4a,0x0b,0xbe,0x6b,0xb8,0x39,0xf7,0x7f,0xe9,0x99,0x9f,0xa0,0x8a },
{ 0x95,0xda,0x23,0x38,0x72,0xce,0x27,0x5c,0xc9,0x1c,0x9a,0xea,0x8e,0x0b,0xac,0xa8,0xa2,0x6a,0x51,0xee,0xf1,0x56,0x4b,0x97,0x2d,0x1c,0x40,0xa7,0x90,0x71,0x22,0x59 },
{ 0xbf,0xab,0x17,0x8a,0xff,0xb9,0xdb,0xf6,0x5d,0x61,0x53,0x65,0xf6,0x3e,0xea,0x2f,0xc0,0xae,0xc5,0x82,0xe6,0xc1,0xd8,0x9d,0x22,0x1a,0x22,0xa5,0x4b,0x22,0x0d,0xca },
{ 0x21,0xa5,0xca,0xf5,0xa0,0xdc,0xd4,0xd4,0x4d,0x47,0x2a,0xfb,0x54,0x56,0x4f,0xb7,0xe1,0x3d,0xf5,0x9d,0xfb,0xfc,0xec,0x54,0x52,0x60,0x4c,0xf7,0xad,0xc7,0xcd,0x1a },
{ 0x4e,0x36,0x4e,0xa3,0x9c,0x8b,0x2b,0xb5,0x44,0x89,0x81,0xd0,0x24,0x70,0x32,0xe0,0x1c,0xb6,0x85,0x3f,0x1b,0x12,0xc8,0x4f,0x89,0xdc,0xda,0x09,0x3a,0x3d,0x46,0x23 },
{ 0xc0,0x06,0x42,0x99,0xa0,0xaa,0x48,0xe2,0xc9,0x8e,0x4b,0x4e,0x65,0x03,0xdf,0x04,0xc0,0x3e,0x15,0x73,0x41,0x7d,0xdf,0xd3,0x52,0x2c,0xbc,0xde,0x85,0x7d,0x10,0x3a },
{ 0x04,0x33,0x0e,0xf5,0xe1,0xb9,0xb1,0x65,0xe2,0x1d,0xf2,0x60,0x62,0x63,0x40,0xce,0x1e,0x33,0x7b,0x31,0xfc,0xbf,0x50,0x55,0x05,0x2d,0x1c,0xe2,0x95,0x54,0x1b,0x30 },
{ 0x44,0xc5,0xfb,0x6a,0x83,0x38,0xd3,0x73,0xf9,0xab,0xdd,0x6c,0xd7,0xa3,0xd2,0x12,0x35,0x34,0xcc,0x41,0x28,0x6f,0x7c,0x02,0xd3,0x52,0x47,0xee,0x70,0xa8,0x39,0x26 },
{ 0xeb,0xdd,0xe7,0x7a,0xf6,0xdb,0x5a,0xb9,0xb5,0x22,0xa7,0x64,0x4b,0x03,0x61,0x6c,0x16,0x24,0xda,0xf0,0x90,0xf2,0xbd,0xaa,0x61,0xfd,0xd8,0x62,0x60,0xb0,0xdd,0x35 },
{ 0xae,0x8e,0x3a,0xa1,0x74,0xbf,0x43,0x37,0xe3,0x9d,0xe0,0xe0,0x8c,0xbd,0x88,0xb1,0xcd,0xf1,0x73,0xb2,0xc6,0x93,0xc1,0x09,0x55,0x52,0xcc,0xdb,0xa9,0x51,0x50,0x16 },
{ 0xf4,0x95,0x68,0x6c,0x53,0x81,0x1b,0xd4,0x11,0xbb,0x92,0xbc,0x83,0x24,0xf6,0xd0,0x25,0x6d,0x66,0x50,0xf8,0xdc,0x11,0xd2,0x24,0x25,0xb3,0xa2,0x19,0xae,0x34,0xbe },
{ 0x77,0xcd,0x4a,0x30,0x38,0xcd,0x19,0x8a,0x78,0x8c,0x19,0x5b,0x21,0x2b,0x53,0x1f,0x79,0x7a,0x18,0x94,0x19,0x05,0x10,0xfa,0x22,0x38,0x7b,0x43,0x5b,0x37,0x1d,0x24 },
{ 0xc4,0x59,0xca,0x15,0x0f,0xba,0xab,0xd1,0x72,0xcc,0xd4,0x7f,0xc0,0x90,0x31,0x69,0x61,0x4c,0x21,0xdc,0x13,0xcc,0x9a,0x4a,0xae,0x23,0xd0,0x08,0x74,0xcb,0xd2,0x0e },
{ 0x9c,0xbe,0x98,0x41,0xf0,0xb1,0xa5,0x98,0xc1,0x3b,0x40,0x2a,0x39,0xf4,0xbb,0x2f,0xa3,0xf2,0x8a,0xea,0x58,0x25,0x4d,0xe2,0x59,0x97,0x1e,0x43,0x20,0x07,0x6b,0x39 },
{ 0x27,0xbe,0xe7,0xb5,0xc3,0x67,0x52,0xb2,0x79,0x95,0xba,0xb2,0x60,0x73,0xb1,0x4f,0x36,0xfd,0x4f,0x08,0xc5,0xf9,0x9e,0x9a,0xcb,0xc0,0x0a,0xda,0x11,0xe8,0x60,0xcc },
{ 0x18,0xe6,0x56,0x78,0xbc,0xec,0xf4,0x4c,0x18,0x64,0x25,0xd4,0x1d,0xde,0x99,0x23,0x83,0xfd,0x79,0xdf,0x66,0xc1,0x9a,0xa7,0x3a,0x31,0xdc,0x80,0xc0,0x31,0x2c,0x9b },
{ 0x44,0x4d,0xc6,0xcd,0xd8,0xcc,0x2f,0x7e,0xf6,0x55,0x74,0x61,0xea,0x40,0xf9,0x83,0x48,0x11,0xfb,0x59,0x39,0x66,0xec,0x95,0x94,0xcd,0x74,0x47,0x21,0x47,0xd0,0xdf },
{ 0x60,0x87,0x98,0x76,0xa4,0xce,0x9d,0xd3,0x95,0x08,0x79,0xdd,0xbb,0xd6,0xd0,0x04,0x88,0xd6,0x1e,0x53,0x46,0xcd,0x79,0x1d,0x39,0x7d,0xd5,0x24,0x35,0x4c,0xe7,0xf7 },
{ 0x71,0xf1,0x06,0xee,0xd3,0xbe,0x65,0xc0,0x73,0x2b,0x4d,0x4d,0xab,0xa1,0xb9,0x64,0xfc,0x18,0xb4,0x69,0x32,0xf2,0xd5,0xe1,0xf4,0x73,0xf0,0x4e,0x64,0x4c,0xec,0x54 },
{ 0xda,0xab,0x1b,0x53,0xb6,0x7d,0xa0,0x4c,0x6b,0x07,0x3b,0x18,0x45,0x18,0x76,0xf4,0x90,0x43,0x9a,0xd5,0x7c,0xa3,0xb2,0xbb,0xca,0xf4,0x3c,0x60,0x8e,0x65,0x36,0x25 },
{ 0xa8,0x1c,0x76,0x34,0x52,0xa2,0x70,0x5a,0x1c,0x35,0x04,0xbd,0xbc,0x4d,0x75,0xcb,0x62,0xf6,0x78,0x37,0x7d,0xe7,0xfa,0xdc,0xf7,0x47,0xd4,0xd1,0x70,0xf5,0xb0,0xde },
{ 0x0b,0x8c,0x00,0x2b,0x0f,0x1b,0x5f,0xa1,0xcc,0x6c,0x6a,0x87,0xcd,0xb0,0x59,0x77,0x60,0xd3,0x14,0xb4,0x4b,0x5d,0xe7,0x07,0x3d,0x3a,0x29,0xd1,0xec,0xd3,0x29,0x2f },
{ 0x37,0x5a,0xe1,0x59,0x3a,0x8f,0x12,0x2f,0x3b,0x6b,0xd0,0x37,0x5f,0xa1,0x6d,0x9f,0xb8,0xb4,0x69,0x8f,0xbe,0xea,0xd9,0x16,0xe7,0x99,0xac,0x08,0xc8,0xd3,0x91,0x7f },
{ 0xbb,0x52,0xbf,0x72,0x34,0x32,0xed,0xb0,0xf2,0x22,0x7a,0xa2,0x2b,0xbf,0x58,0xd3,0x64,0x8b,0x74,0x4b,0x80,0xea,0xb7,0x82,0xa8,0xba,0xbd,0x42,0x4c,0x44,0x58,0xca },
{ 0x59,0x24,0xf0,0x0e,0x2d,0x21,0xdf,0xb0,0xf7,0x4e,0x03,0x20,0x36,0x10,0x69,0xac,0x06,0xee,0xab,0x5d,0x96,0x12,0x31,0x4b,0x05,0xb3,0x13,0xab,0xf9,0x13,0x1d,0xb7 },
{ 0x30,0x77,0xf7,0x05,0x92,0xeb,0x03,0x5c,0x23,0xf6,0x83,0xe5,0x0a,0xa3,0xd8,0x6f,0x08,0xb6,0x38,0x5a,0x67,0xb0,0xde,0xa6,0x08,0xb5,0x0d,0xd8,0x0f,0xec,0x0f,0xce },
{ 0x64,0x86,0x84,0x59,0xe6,0x04,0x73,0x98,0xe3,0x7e,0x70,0x8e,0x85,0x36,0x27,0x93,0xe0,0x87,0x3e,0x94,0xda,0xba,0x6e,0xea,0xf0,0x40,0x23,0x2f,0xf6,0xd7,0x3a,0x20 },
{ 0x77,0x1d,0x30,0x3c,0xb6,0x2f,0x5b,0x77,0x36,0xc9,0x8d,0xda,0xa4,0xdb,0xee,0x4e,0xb4,0xa3,0x04,0x6b,0x8f,0xb1,0x77,0x0e,0x15,0x56,0x50,0x43,0xa9,0x77,0x2a,0x18 },
{ 0x9f,0x79,0x64,0x44,0xc5,0x0e,0x31,0x73,0xb7,0x22,0x38,0xa0,0x00,0x09,0x54,0x11,0x15,0xf6,0x0c,0xac,0x91,0x5e,0x11,0xf3,0x49,0xb9,0x20,0xd4,0x5a,0xb0,0xcf,0xe2 },
{ 0x8d,0x2c,0xe8,0x00,0xd5,0xa8,0xf6,0x5f,0xda,0x82,0xdc,0xd3,0x38,0x99,0x51,0xa2,0xed,0xd6,0xdb,0xad,0x88,0x2d,0x9e,0x69,0xf1,0x2b,0x51,0x34,0xcf,0x60,0xc6,0x7e },
{ 0xa6,0xe5,0x40,0x06,0xad,0x70,0x26,0x20,0x2f,0xfc,0x82,0x37,0x58,0xce,0x4e,0x54,0xa9,0x65,0x70,0x79,0xc8,0x6a,0x57,0x8d,0x14,0x1c,0xbb,0x0a,0xc7,0xbe,0x83,0xa7 },
{ 0x7f,0x23,0x6a,0x5f,0x62,0x16,0xb9,0x50,0xc8,0xbb,0xa1,0x6c,0xf8,0x1c,0xcf,0x6f,0x0a,0xd0,0x2a,0x46,0xb9,0x59,0x2b,0x31,0x38,0xa3,0x5e,0x37,0x0b,0x3a,0x53,0x63 },
{ 0xb6,0xff,0x42,0xa5,0x45,0xb7,0x35,0x62,0xa0,0xba,0x54,0x43,0x80,0x77,0xa4,0x6a,0x07,0xe0,0x12,0xeb,0x5f,0xe4,0x4e,0x13,0x62,0x16,0xed,0x33,0xde,0x80,0x97,0xc8 },
{ 0xfb,0xcb,0xe3,0x8e,0xdf,0x86,0x7f,0x76,0x7e,0x9c,0x7f,0xc4,0xab,0x8c,0x16,0xc7,0x90,0x66,0x95,0x49,0x47,0x73,0x2a,0x82,0xd5,0xa9,0x4d,0x41,0xf0,0xbc,0x27,0xe2 },
{ 0x12,0x21,0x5f,0xbc,0x93,0x7a,0xca,0x84,0x08,0xd3,0xf0,0xb0,0xca,0xfe,0xad,0x7b,0x2b,0x9e,0xb1,0x60,0xe2,0xcd,0x5d,0x1a,0x9f,0xec,0xd1,0xc8,0x62,0xa8,0x6c,0xb5 },
{ 0x23,0x28,0x9e,0x35,0xe7,0xb5,0x12,0x09,0x5e,0x82,0x73,0x00,0xe4,0x72,0x4f,0xaa,0xfb,0xba,0x55,0xe8,0x7f,0xd4,0x83,0xb0,0x7f,0x50,0xab,0x1a,0x22,0xdb,0x86,0x8e },
{ 0x27,0x6a,0xc6,0x37,0x1e,0xc3,0x89,0xf3,0x7e,0x30,0xdf,0x0f,0xba,0xc2,0xdf,0x71,0x7b,0x7b,0x9c,0x86,0x30,0xae,0x5e,0x9c,0x72,0xd7,0x0f,0x3b,0xa2,0x2b,0x33,0x34 },
{ 0x03,0x5a,0x68,0x2d,0x4c,0x99,0x5a,0x6a,0x86,0x5b,0x7e,0x3c,0x71,0x53,0xcb,0x02,0x2e,0x2a,0xf9,0x23,0x82,0x4e,0x07,0x25,0x49,0x18,0x60,0xb4,0x9d,0xfb,0xcd,0x96 },
{ 0x89,0x5d,0x9e,0xcc,0x2d,0xf6,0xb6,0xce,0x57,0x70,0xfb,0xf4,0x21,0x35,0x60,0x39,0xd4,0x44,0x52,0xfa,0x84,0x3c,0x83,0x9e,0xbf,0xd4,0x21,0xe8,0x9d,0x05,0x45,0x89 },
{ 0x49,0x21,0x51,0xda,0x6a,0x3a,0x29,0x68,0x3c,0x10,0x78,0xf9,0xd2,0x8e,0x2d,0xfb,0xee,0x1b,0xaf,0x94,0xf7,0x9c,0x05,0xd1,0x6c,0x51,0x9e,0x51,0xf9,0x4d,0x9e,0x07 },
{ 0x17,0x3f,0x7d,0x87,0xe8,0xea,0xcc,0x07,0x1b,0xce,0x10,0x6a,0x3c,0x99,0x2c,0xb7,0x41,0x9a,0xcc,0x39,0xe2,0x00,0xdf,0x6a,0xab,0x75,0x6c,0x39,0x7b,0x42,0x90,0x5b },
{ 0x9f,0x58,0xd8,0x38,0xed,0xde,0xee,0x06,0x2d,0xbc,0xc8,0xda,0x9f,0x73,0x15,0x96,0xc0,0x3c,0x24,0x6e,0xf3,0x39,0xb0,0xf4,0x79,0x92,0x63,0x54,0xc1,0x8b,0x64,0xa4 },
{ 0x69,0x5f,0xb4,0xd5,0x25,0xe8,0x0d,0xd1,0xfa,0x01,0xf8,0xd0,0xc3,0xce,0x4e,0x95,0xf7,0x90,0x76,0x6a,0x2d,0xa5,0x23,0x9d,0xdc,0xd2,0x2f,0x31,0x63,0x1d,0x68,0x1d },
{ 0xb7,0xcf,0x8a,0xe3,0x6b,0xa8,0xe0,0x43,0x2d,0x00,0xc9,0x6f,0x01,0x3c,0x02,0x63,0x77,0x0c,0x87,0x30,0x26,0x51,0xd9,0x8c,0xb3,0xed,0x37,0xfd,0xbd,0x45,0xde,0xe0 },
{ 0xb3,0x4b,0x20,0x61,0xf3,0x81,0x5b,0x85,0xd5,0x95,0xb0,0x6b,0x92,0x9e,0x1a,0x29,0x76,0xe5,0x51,0x23,0x29,0x66,0x86,0xd7,0x12,0xac,0x34,0x47,0x3e,0xf5,0xdf,0x84 },
{ 0x86,0x0f,0xe8,0x2d,0x5f,0x48,0x31,0xce,0x17,0x86,0x01,0x94,0xd2,0x66,0xac,0x0f,0x88,0xcd,0x18,0x5c,0x68,0x67,0x17,0xb3,0x9d,0x6a,0xe3,0x3f,0x47,0x04,0xfb,0x28 },
{ 0x51,0x27,0xb7,0x33,0xec,0xd1,0x7c,0xd2,0x8d,0xe5,0xe2,0xbd,0xbe,0xc2,0x4b,0x3c,0xa1,0x3c,0x75,0xcb,0x1c,0xce,0x5a,0x61,0xa1,0xe2,0x69,0x0e,0x0f,0xb7,0xe4,0x05 },
{ 0x1d,0xda,0x6f,0x20,0xb0,0x44,0x93,0xcc,0xe7,0x6f,0x5c,0x01,0x3f,0xc3,0x99,0x02,0x35,0x07,0xbe,0x8c,0x88,0x5a,0xa2,0xd6,0x06,0x2f,0x55,0x35,0x96,0x56,0x06,0xe7 },
{ 0x21,0x59,0xcc,0x33,0xcb,0x70,0x3e,0x93,0xd8,0x13,0x1c,0x62,0x76,0x5e,0xc8,0x78,0x0f,0xed,0x0b,0x6a,0xdd,0xe8,0xec,0x0a,0xeb,0xc4,0x00,0x0f,0xd9,0x10,0xd1,0x3a },
{ 0x5c,0xb4,0x4a,0x39,0xac,0xf1,0x71,0xa9,0x73,0x28,0xca,0x54,0x69,0xba,0xee,0x55,0x26,0xe3,0x61,0x08,0x69,0x78,0xdd,0x09,0xae,0x5c,0x4c,0x16,0x25,0x76,0x51,0x8c },
{ 0x22,0x99,0xa7,0xaf,0x59,0x08,0x3b,0xcd,0x1f,0x85,0x54,0x56,0x65,0xfe,0x69,0x30,0xa7,0x2e,0xe8,0x7d,0xf2,0xdb,0xbc,0x36,0x5a,0xcd,0xe2,0x2e,0x97,0x22,0x31,0xd4 },
{ 0x6d,0x71,0x38,0x12,0xf0,0xdd,0x83,0xcf,0xd0,0x4a,0x4a,0x39,0xe8,0x2e,0x29,0xad,0x80,0x5d,0x15,0x61,0x8d,0xdc,0x72,0x34,0xbd,0x73,0xbd,0x5d,0xb6,0x37,0xd4,0x8a },
{ 0x44,0x0b,0xab,0x24,0x27,0xc7,0xcf,0xc6,0x88,0xdc,0x7d,0x5b,0x66,0x8f,0x7a,0xbd,0x00,0x4c,0xe5,0xd6,0x79,0x4e,0x85,0x9f,0x4e,0x25,0x8c,0xbe,0x6c,0xa7,0x3b,0xb2 },
{ 0x4e,0x3b,0xdf,0x0c,0x20,0xc0,0x50,0x50,0x97,0xf8,0x61,0x9c,0x51,0xb0,0x27,0x8d,0x50,0xe3,0x72,0x17,0x07,0x22,0xa6,0xaf,0x42,0xa7,0x58,0x0f,0xb4,0x0a,0x88,0x7e },
{ 0x54,0x9e,0xff,0x66,0xc3,0xa5,0x1e,0xa4,0x2e,0xf0,0x24,0xdf,0x48,0x81,0x11,0x94,0x5d,0x93,0xf3,0x0f,0x3f,0xfc,0x8c,0xeb,0x2d,0x86,0x90,0x8e,0x74,0x8d,0xbe,0x23 },
{ 0xc0,0xcb,0x79,0x6a,0xc1,0x96,0x4c,0x33,0x23,0x38,0xcf,0x79,0xf2,0x98,0xf1,0x55,0x68,0xe2,0x61,0x1a,0x0b,0xf2,0xea,0xfe,0x32,0x04,0xb6,0x1c,0x60,0x0b,0x21,0xc1 },
{ 0xe2,0x80,0xd8,0x8e,0x81,0x1c,0xe9,0x51,0xc6,0x19,0x83,0x58,0x9a,0x40,0x07,0x5b,0x47,0x76,0xb0,0x22,0x76,0x74,0x0e,0x97,0xba,0xdd,0x90,0xbb,0xe1,0x78,0x46,0x58 },
{ 0x6b,0x6d,0xb7,0x01,0xf0,0x56,0x30,0xc6,0xe8,0xa9,0x6c,0xf5,0x4f,0x54,0x5f,0x26,0x1a,0x5f,0xf8,0xa5,0x5a,0x94,0x0c,0x45,0x12,0x58,0x82,0xd8,0x48,0xd6,0x5c,0x23 },
{ 0x3c,0xe5,0x54,0x37,0x65,0x84,0x80,0xb8,0x68,0x0d,0x00,0x3c,0x6c,0xc4,0xa0,0xfe,0x3c,0x4f,0xf0,0xab,0x5b,0x2a,0xf9,0x36,0x5b,0x63,0xa7,0x66,0x62,0xa6,0xcb,0xe7 },
{ 0x53,0xc1,0x8b,0xbf,0xbe,0xbe,0x65,0x5b,0xb8,0x25,0x5b,0x26,0x48,0xdb,0x2a,0xdc,0x8f,0x25,0x42,0x09,0x31,0xd9,0x46,0x15,0x9a,0x7a,0xe1,0xad,0xe3,0x53,0x13,0x81 },
{ 0xfc,0xc5,0x95,0x44,0xff,0x49,0x57,0xbb,0xd6,0x42,0xcf,0x3c,0x2f,0xbc,0x5f,0x48,0x83,0xe9,0x6a,0x21,0x9f,0xce,0x9b,0xa8,0x30,0x43,0x58,0x2f,0x6d,0x4e,0x8b,0x30 },
{ 0x5c,0x9f,0x86,0xdd,0x8f,0x1c,0x85,0x49,0xef,0x82,0x51,0x7f,0x75,0x72,0x0b,0xfa,0x41,0xd0,0xcf,0xd3,0x0e,0x92,0x9b,0x67,0xf7,0x38,0xfb,0x9f,0xc2,0x36,0x47,0x62 },
{ 0xce,0xc4,0xa4,0xbd,0x4c,0xad,0x9d,0x0c,0x2d,0x3b,0x2c,0xa7,0xaa,0x62,0x69,0x2c,0x39,0x77,0x69,0xdc,0xda,0x92,0x98,0x17,0x68,0x9d,0x0f,0xbb,0xbb,0xca,0xd2,0x4a },
{ 0x34,0xc3,0xd3,0x54,0x49,0xd5,0xb7,0xec,0xc8,0xc0,0x3a,0xdb,0x38,0x5f,0x27,0xd1,0xac,0x6e,0xd3,0x46,0x5e,0xb8,0x49,0x0f,0x1c,0x9b,0x2f,0xd9,0x9e,0x8f,0x01,0x9a },
{ 0x55,0xb4,0xb0,0x9c,0x4c,0x32,0x34,0xd4,0x50,0xc1,0x08,0x65,0xcf,0xac,0x8b,0x81,0x69,0x5c,0x05,0x97,0xe5,0xb5,0x70,0x30,0x6c,0x3c,0xe8,0xc2,0xe8,0xd2,0xde,0x28 },
{ 0x05,0x39,0x9f,0xa0,0xb2,0xd5,0x63,0x0b,0xed,0xe6,0xb3,0x98,0xb8,0xb3,0xb4,0xb7,0x99,0x1a,0x2f,0x62,0x3b,0xb2,0x8c,0xb5,0xf6,0x0b,0x41,0x5f,0xa7,0x09,0x5d,0xf2 },
{ 0xab,0x9a,0xc4,0x3b,0xc3,0x0c,0x79,0x0b,0x14,0xbe,0x0a,0xc4,0x5a,0x4d,0x07,0x79,0xac,0x2a,0xe4,0x99,0x69,0xa2,0xf7,0xe1,0x34,0xea,0x90,0x53,0x2b,0x65,0x4b,0x3a },
{ 0x68,0x01,0x30,0x45,0x72,0x08,0xf8,0x4a,0xbd,0x8a,0x97,0x5a,0x86,0xbf,0x1c,0x00,0xd2,0x7d,0x1f,0x91,0xb1,0x2a,0x4a,0x5e,0x4c,0xbd,0xeb,0xe6,0xb4,0xdb,0xf6,0xfd },
{ 0xb6,0x08,0x41,0x74,0x71,0xe7,0xfa,0x97,0x13,0xf2,0xea,0x40,0x36,0xf1,0x75,0x09,0xd7,0x5f,0x06,0xd9,0x8d,0x75,0x1a,0x3e,0xff,0xe2,0x59,0xec,0xe9,0x90,0xb0,0xbd },
{ 0x86,0x84,0xa3,0x07,0xbe,0x35,0x3d,0x16,0xfb,0x4c,0x92,0x22,0x60,0xce,0x9d,0x74,0xf9,0xdc,0x22,0x82,0xe4,0x68,0x60,0x46,0xcc,0xf8,0x1a,0x7d,0x71,0xa9,0x26,0xb7 },
{ 0xa7,0x40,0xbc,0xc9,0xbc,0x69,0x1e,0x15,0xed,0x41,0x87,0xe0,0xe6,0x6b,0x1e,0xb6,0x67,0x96,0xac,0x80,0xc3,0x12,0x80,0x22,0x02,0x28,0x9a,0xd5,0xee,0x77,0x60,0x8b },
{ 0x6d,0xd5,0xa9,0xd7,0x2f,0x97,0x00,0xa3,0x92,0x1c,0xec,0x56,0x23,0x30,0xf1,0x44,0x8a,0xd1,0x91,0x2a,0x12,0x42,0xc2,0xa2,0xfd,0xc0,0x8c,0x6b,0x9c,0x17,0x84,0xda },
{ 0xe0,0x1d,0xe6,0x1d,0x2c,0xbe,0x72,0xa3,0x05,0xb6,0xc0,0x7b,0xf1,0x6b,0x5c,0x5d,0x3c,0x07,0xbe,0x1f,0xb0,0x3e,0xfd,0x70,0x61,0x56,0x2d,0x28,0x06,0x62,0x65,0xbe },
{ 0x57,0x0c,0xf7,0x58,0x91,0x93,0xee,0x88,0xa3,0x7d,0x6c,0x16,0x9a,0xb8,0xaa,0xf5,0x09,0xaa,0x87,0x01,0xf8,0x04,0xb8,0x37,0xa9,0xe0,0xe3,0xcd,0x3a,0x74,0xb5,0x57 },
{ 0xc4,0x49,0x06,0x33,0xc6,0xc3,0xd7,0x71,0xb4,0x42,0x76,0x3b,0x93,0xf7,0x81,0x19,0x7a,0xd2,0xcb,0x09,0xb7,0xfe,0x07,0x40,0xad,0xc2,0xfb,0xe6,0xc0,0x1e,0x52,0x85 },
{ 0x91,0x59,0xbf,0x15,0x87,0xf9,0xc0,0xc1,0x67,0x47,0x2f,0x34,0x57,0x22,0xac,0xf6,0x96,0x16,0x51,0xf7,0x4c,0x20,0x4b,0x7a,0x6e,0x03,0x9a,0x70,0xaa,0x77,0x30,0x5d },
{ 0x45,0x19,0x94,0xac,0xad,0x8d,0x00,0x9b,0x40,0x79,0xff,0xc1,0xab,0x6a,0x02,0x5a,0xef,0x29,0xc1,0x30,0x40,0xb9,0x61,0x56,0xe9,0x7b,0x85,0x35,0x25,0xb2,0x72,0xa2 },
{ 0xc6,0xb5,0xd5,0xca,0xf2,0x20,0x29,0x37,0xa7,0x79,0x43,0xb8,0xb7,0x31,0xf2,0xfe,0xa2,0x55,0xbf,0x81,0x0b,0x6a,0x89,0x3b,0xaf,0xbb,0x93,0x15,0xb3,0x21,0x87,0x37 },
{ 0xda,0xb4,0xdd,0x47,0x25,0x5f,0x12,0xbd,0xb0,0xfa,0xa1,0x9d,0xc5,0x67,0xff,0xb3,0x40,0xa6,0x0e,0x06,0x2e,0xfa,0x46,0xdb,0x5c,0x7d,0x68,0x80,0xc5,0xb4,0xd6,0xcd },
{ 0xfa,0x72,0x94,0x14,0xc2,0xc2,0x1d,0xc2,0xd2,0xd3,0x19,0x0f,0x7b,0x53,0x27,0x77,0x5e,0x9c,0xd4,0xd1,0x22,0x91,0xe0,0x21,0xc3,0x8a,0x4d,0xa2,0x5e,0xa3,0xbc,0x70 },
{ 0x46,0x43,0x42,0x6f,0x7d,0x7d,0x72,0x95,0x2d,0x93,0xad,0xd2,0xfd,0x2f,0x56,0xdb,0x80,0xf3,0x87,0x9d,0xe7,0xa1,0x8a,0x8f,0x49,0xe5,0x22,0xf0,0xaf,0x16,0xde,0xe9 },
{ 0xef,0x58,0xe8,0x98,0x2f,0x49,0x10,0x88,0x14,0xcc,0xb4,0xea,0x9d,0xd1,0x79,0x2b,0x35,0x2f,0x02,0xae,0xe6,0x13,0x22,0x3c,0xa5,0xed,0x02,0xec,0x4b,0xc7,0xba,0x8a },
{ 0x5b,0x42,0x17,0xd2,0x1a,0xc1,0x64,0xc8,0xe2,0x8d,0xbd,0xea,0xfa,0x98,0x5b,0x99,0xb7,0x9e,0x57,0x0e,0x3b,0x86,0x1f,0x40,0x92,0x1e,0xcf,0x69,0xb1,0xe8,0xb4,0x4f },
{ 0x8b,0x53,0x20,0xaf,0x9f,0x7e,0xa1,0x3a,0x24,0xf6,0x02,0xcb,0xf5,0x35,0x64,0xe1,0xa1,0x1d,0xa5,0x6f,0x03,0xf8,0x74,0xe6,0x18,0x15,0xf3,0x03,0xed,0x72,0xcf,0x38 },
{ 0xe5,0x15,0xe6,0xae,0x84,0x85,0xa4,0x4c,0x3a,0x78,0xf0,0xcd,0xb3,0x7e,0x6e,0xe3,0xfa,0xc3,0x07,0x37,0x92,0x64,0x93,0x65,0xb0,0x2c,0xd0,0x7c,0x20,0xa0,0x67,0x3a },
{ 0x19,0x53,0x6b,0x93,0x06,0xe9,0x0c,0xe3,0xc3,0xc3,0xc1,0xc5,0x85,0x58,0xad,0x89,0x72,0x84,0x08,0xf6,0x70,0xbd,0xc1,0x68,0xa7,0x1d,0xc9,0x7d,0xc4,0x3f,0x1c,0xae },
{ 0x5b,0x37,0xfb,0x76,0x8f,0xa9,0xfb,0xca,0x0b,0xbd,0xd3,0xa7,0x37,0xdc,0xa6,0xbf,0xd5,0x45,0x5d,0x36,0x8e,0xfc,0x05,0x98,0x7f,0x00,0x2f,0x53,0x2a,0x59,0xa2,0x36 },
{ 0x28,0xb5,0x56,0xb2,0x65,0xd5,0x25,0xd9,0xd4,0xd9,0x17,0x45,0x73,0x51,0x2c,0xbf,0x0b,0x70,0xdf,0x0b,0x87,0xcb,0x9e,0x0c,0x87,0xb2,0x52,0x6c,0xff,0xdf,0xdb,0x3e },
{ 0x57,0xf1,0x6a,0x2f,0x05,0x82,0x37,0x91,0x4f,0x1d,0xb8,0x42,0x10,0x5f,0x13,0x15,0x12,0x99,0x53,0x58,0x57,0x62,0xcc,0xdd,0xc4,0xb2,0x8c,0x25,0x0e,0x63,0x87,0x88 },
{ 0x81,0xa8,0x42,0x9b,0x73,0xe4,0x8a,0x31,0xf9,0xae,0x95,0x33,0x61,0x60,0xbf,0x9e,0x6e,0xad,0x9a,0x1e,0x6d,0x0d,0x33,0xc2,0xbf,0x7c,0xdf,0xdd,0xae,0x17,0x6e,0x6a },
{ 0x2c,0x56,0xc8,0xc5,0x4f,0xa7,0x16,0x57,0x8e,0x0d,0x03,0xdd,0xa4,0x73,0xa2,0x6d,0xa2,0x37,0x0d,0x37,0x56,0x68,0x35,0x25,0x10,0xd5,0xed,0x30,0xd9,0xee,0xaa,0x23 },
{ 0x79,0x08,0xb1,0x0e,0x3f,0x60,0x63,0x1d,0xc9,0x0c,0x3c,0xf9,0x63,0x45,0xaf,0x71,0x0f,0xd4,0xfc,0x3b,0xb0,0x95,0xc9,0x9d,0x7d,0x2e,0xf1,0x56,0x79,0xa1,0x0c,0x4b },
{ 0x13,0x97,0x68,0xa9,0xf9,0xec,0x4b,0xf5,0x88,0x64,0xa1,0x20,0xf4,0x06,0x54,0x49,0x0d,0x8b,0x03,0x0f,0x7d,0x44,0x48,0xd9,0xce,0x94,0x80,0x63,0x3c,0x97,0xf8,0xe1 },
{ 0xf7,0x36,0x8d,0x2b,0x65,0x8c,0x96,0x4f,0xa5,0xea,0xd5,0x3a,0xb0,0xac,0x85,0xb5,0xbd,0x1a,0xd7,0xa1,0x3f,0x87,0xb9,0xda,0x7d,0x48,0x30,0x5e,0x6a,0xa9,0xf7,0x0f },
{ 0x2c,0x15,0x67,0x9c,0x9b,0x6b,0x9b,0x1a,0x20,0x42,0xda,0x42,0x3d,0xfd,0x10,0x51,0x25,0x36,0xa1,0xfb,0xcc,0xcf,0x1d,0xb4,0x26,0x69,0xfd,0x2e,0x0f,0x22,0xb8,0x67 },
{ 0x93,0xda,0x4e,0xbe,0x2e,0x3b,0xc4,0x17,0xde,0xb3,0xf9,0x28,0x00,0x70,0xdd,0x7f,0x29,0x2d,0x89,0x9d,0xcc,0x46,0x18,0x3f,0x93,0x79,0x77,0x15,0xfc,0x96,0xc1,0x4d },
{ 0x96,0xf5,0xec,0x6a,0x69,0xa0,0x43,0xe9,0xeb,0xff,0x04,0x9b,0xa6,0x96,0x72,0x3f,0x34,0xcf,0x4c,0x81,0x1a,0xe7,0x55,0xa3,0x7d,0x4e,0x63,0xf3,0x13,0xbc,0x67,0xe7 },
{ 0x77,0xd9,0x4b,0xa6,0xa5,0x02,0x09,0x06,0xa7,0xe7,0x5f,0x9e,0x3a,0x25,0x6c,0xd7,0x66,0x42,0xc6,0x02,0x0e,0xd1,0x2f,0xf3,0x7c,0xc2,0x02,0xae,0xde,0x97,0x61,0xec },
{ 0xfa,0xf7,0x93,0x59,0x56,0xe8,0xc6,0x68,0xc3,0x7e,0xf5,0x1a,0x25,0xe5,0x67,0x2f,0x93,0xe9,0x70,0x5b,0x0e,0xc8,0x66,0x65,0xe1,0x55,0xd5,0x5c,0xc5,0x0e,0x1c,0x93 },
{ 0x28,0x9d,0x53,0x5c,0xf5,0x44,0x60,0xd1,0x3d,0xdd,0x52,0x10,0xb7,0xc1,0x8c,0xcb,0x2d,0x73,0x2e,0x8d,0xae,0x71,0xe2,0xdb,0x94,0xac,0xbb,0xfe,0x15,0x04,0x69,0x9e },
{ 0xf6,0xea,0xa1,0xc6,0xa8,0x00,0x9b,0x0a,0x6d,0x14,0x3b,0x31,0xc7,0xdf,0x46,0x1d,0x06,0x72,0x54,0xf4,0xb3,0x9f,0xf4,0x21,0xee,0x66,0x09,0x6a,0xcf,0xdb,0x2d,0xcf },
{ 0x51,0x05,0x7f,0x2e,0xd9,0x68,0x2c,0x03,0x31,0x8e,0x65,0x19,0xd5,0x66,0xb0,0x3e,0xeb,0x9a,0x82,0x6d,0x0a,0xc5,0xfe,0x56,0x2c,0x5c,0x52,0x42,0xd6,0x9b,0x3f,0x59 },
{ 0xfc,0xab,0x28,0x84,0x3b,0x9d,0x8d,0xa4,0xec,0x50,0x48,0x8f,0x91,0xe6,0x37,0x67,0x99,0x1e,0x1d,0x22,0xa1,0x24,0xb7,0x66,0x46,0xf9,0x85,0x96,0xfd,0xd8,0xb9,0xa3 },
{ 0x15,0x4b,0xb9,0x3c,0xe3,0x3b,0x38,0xe0,0x71,0x05,0xb8,0xd9,0x08,0xb5,0x43,0xfd,0x56,0xeb,0x63,0x27,0x8c,0x1e,0xf7,0x61,0xb2,0x4a,0x78,0xb3,0x4c,0xd4,0xa9,0xc9 },
{ 0xec,0x9d,0x85,0x4c,0xb7,0x98,0x20,0x17,0x49,0x7e,0xae,0x94,0xa8,0x0c,0x44,0x2a,0xb0,0xd3,0x1e,0x59,0x88,0x5d,0x20,0x16,0x5d,0xcd,0x11,0xa9,0xf8,0x70,0x6f,0xea },
{ 0x0e,0xdf,0x25,0x7a,0x67,0xef,0x7c,0x87,0xe1,0x9f,0x3b,0x6f,0xc0,0xd6,0x31,0x98,0x12,0xa2,0x44,0xfc,0x13,0xba,0xff,0x5c,0x90,0x67,0x41,0xf8,0x82,0x26,0x4b,0x3b },
{ 0x29,0x97,0xa8,0x8c,0x7c,0xbf,0x2b,0xa6,0x23,0x9c,0x50,0xd8,0xb9,0x37,0x17,0xdc,0x50,0x7a,0xdb,0x13,0xb7,0xd7,0x91,0x77,0x64,0x75,0x6e,0x92,0xed,0x11,0x84,0x19 },
{ 0x0a,0x24,0x12,0xa6,0x29,0x7d,0xad,0x68,0x61,0xd2,0xca,0x09,0x2d,0x4e,0xc5,0x74,0x4f,0x07,0x24,0x74,0x0b,0xff,0x9c,0x83,0x2c,0x9b,0x6c,0xe2,0xc7,0x29,0xc6,0xfe },
{ 0x22,0x98,0x1a,0x1a,0xef,0x07,0x6f,0x12,0x9b,0x65,0x8a,0xcd,0x16,0xdc,0xc2,0x2a,0xaa,0x73,0xe2,0xbd,0xef,0x8b,0x95,0x64,0xf6,0x05,0xb3,0x54,0x5c,0x62,0x33,0x42 },
{ 0xa6,0x74,0xd5,0xb1,0xf9,0x68,0x07,0xaa,0xd7,0x67,0xf6,0xac,0x4b,0x8a,0xef,0x15,0x9d,0xe7,0x4c,0x5d,0x4c,0x12,0x99,0x45,0xbd,0xd6,0x1b,0xff,0xd4,0x88,0xb8,0x25 },
{ 0x67,0x60,0x02,0x27,0x51,0xf1,0x92,0xba,0xce,0x32,0x7d,0xa9,0xb9,0xc6,0x76,0x86,0xb8,0x74,0x2a,0x5e,0xb8,0xbf,0xd4,0xec,0xaf,0x9c,0x20,0x09,0xa8,0x06,0x5f,0x02 },
{ 0x31,0xda,0xf9,0x66,0x42,0x20,0x72,0x49,0x6e,0x57,0xe5,0x43,0xe9,0xb0,0xda,0xd0,0x26,0xa2,0x6e,0xc6,0x96,0xae,0x72,0xf2,0xef,0xe4,0x70,0x90,0xb5,0x19,0xea,0xa1 },
{ 0x46,0xce,0xee,0x8e,0xfd,0xe6,0xbd,0x40,0x15,0xd2,0x3e,0x19,0xb8,0x8e,0xc2,0xe0,0x7b,0xe8,0x7a,0x27,0x8a,0x9b,0x84,0x25,0x1f,0x89,0x04,0x7c,0x3b,0x22,0xf3,0xf1 },
{ 0x07,0x59,0x82,0xcc,0xca,0x53,0x1b,0x25,0xcd,0x39,0xa4,0x88,0x3c,0x07,0xf1,0x60,0x7a,0x45,0x27,0x65,0x92,0xe5,0x0c,0x0f,0xcc,0xd7,0x62,0xef,0x8b,0xbd,0x94,0x44 },
{ 0xf6,0x63,0x85,0xc1,0x2b,0xa9,0x4e,0x1e,0x45,0xf3,0x7e,0xd2,0x40,0x4c,0x5a,0x92,0x36,0x55,0xfd,0xca,0xf7,0x69,0x98,0x24,0x95,0xa4,0xe6,0x64,0x12,0xba,0x02,0x8a },
{ 0x58,0xd4,0xd8,0xc1,0x7a,0x70,0x26,0xc7,0x10,0xe8,0x44,0x50,0x01,0xa2,0xcb,0xe6,0xeb,0x6b,0x50,0x40,0x22,0x10,0xbd,0xe4,0xcb,0xfb,0x0d,0x60,0xdc,0x8a,0xa3,0xa0 },
{ 0x76,0x5c,0xcc,0x73,0xe5,0x41,0x8b,0xa5,0x74,0xad,0xbb,0x8f,0x17,0x62,0x20,0x59,0xc7,0x16,0x31,0x02,0xc5,0xb3,0x7d,0x65,0x35,0x0f,0x17,0x9c,0xf5,0x83,0xfe,0x91 },
{ 0x10,0x01,0x30,0x2b,0xb4,0x6c,0x7d,0xfc,0x7e,0x30,0x66,0x95,0x55,0x9b,0xed,0x50,0x85,0xe0,0x16,0xca,0xdc,0x5a,0x9d,0x3e,0xb0,0xb0,0xb4,0x20,0x51,0x2c,0xc9,0xf4 },
{ 0x92,0xae,0xf4,0x50,0xb4,0x2c,0xb1,0x9e,0x0e,0x26,0x41,0x52,0x44,0xfc,0x68,0x0b,0x77,0xab,0x29,0x5d,0xdf,0xa4,0x71,0x49,0xbd,0x61,0x63,0x1a,0xcf,0x50,0x52,0x06 },
{ 0x86,0xcf,0x9e,0x56,0xd0,0x58,0xf4,0x56,0x2f,0x71,0xb3,0x6b,0x5f,0x56,0x2e,0x3b,0x8e,0x32,0x86,0x9c,0xb8,0x91,0x5f,0x43,0x40,0x61,0x24,0x94,0xb0,0x33,0xc4,0x48 },
{ 0x4b,0x35,0xc1,0x74,0x57,0x55,0xf1,0x4f,0x9a,0x9e,0xe6,0xe9,0x8e,0xb8,0x66,0x66,0x46,0x64,0x5c,0x81,0x87,0xb2,0x56,0xd5,0xb0,0xc9,0x30,0x49,0x38,0xe6,0xd9,0x87 },
{ 0xf5,0x8b,0xe6,0xcd,0xb9,0x4f,0x5d,0x48,0x2b,0x38,0xd7,0xdb,0x78,0x61,0x72,0xd7,0xc3,0x22,0x05,0x02,0xf2,0x0d,0x87,0x95,0xd2,0xd2,0x88,0xa2,0xd0,0x12,0x76,0x1c },
{ 0x48,0x6d,0x9e,0xeb,0x1d,0xa1,0x3e,0x13,0x6b,0xde,0x05,0xe8,0xc1,0x57,0x0e,0xe2,0x4b,0x91,0x0b,0x60,0x17,0x97,0x06,0x98,0xd4,0x52,0xec,0x6c,0x36,0x92,0xa6,0x6f },
{ 0xac,0x24,0x91,0x81,0x71,0x9b,0x1e,0x1f,0x6e,0x08,0xab,0x72,0x0a,0xfa,0x53,0x72,0x7e,0xf4,0xb3,0xa9,0x23,0xcd,0xc3,0x7e,0xce,0xcd,0xb5,0x84,0xf8,0x2a,0xfb,0x90 },
{ 0xb0,0x9b,0xf7,0x7d,0xec,0x4c,0xf2,0x29,0x39,0xd9,0x5f,0xa8,0x9f,0xa2,0xb0,0x4d,0xa7,0x8f,0x91,0x7a,0x0d,0x04,0x18,0xb0,0x16,0x11,0xe6,0x8f,0x91,0x25,0x55,0x2b },
{ 0x80,0x9f,0xaa,0x71,0x6d,0xdb,0x9e,0x74,0x3d,0xa5,0x8c,0x8c,0xea,0x0a,0xbf,0xa5,0x27,0xe7,0x65,0x91,0xc0,0xa2,0xe5,0x89,0x40,0x69,0x58,0xd5,0xe1,0x4e,0x7e,0xf1 },
{ 0x43,0x57,0xa4,0xa9,0xac,0x35,0x49,0xaa,0xab,0x4c,0x82,0xdb,0x27,0x6a,0x6b,0x6f,0xdf,0x23,0x23,0xe2,0x8e,0xa7,0x7a,0x10,0xca,0xa4,0x9f,0x52,0x7b,0x85,0x53,0x13 },
{ 0x9a,0xfe,0xd1,0x3f,0xcd,0x22,0x01,0x5e,0x05,0x4a,0x25,0x4a,0x09,0xe2,0x88,0x44,0x45,0xea,0xe1,0xe4,0xe8,0x7b,0xf3,0xb7,0x2b,0x70,0xf7,0x9a,0xe0,0x89,0xb0,0xa3 },
{ 0xba,0x5e,0x72,0xa6,0x91,0x49,0xd3,0x5b,0xb5,0x91,0x4e,0x76,0xc6,0xbc,0xdb,0xdd,0x01,0x50,0x2e,0x30,0x65,0x56,0x66,0x5f,0x1c,0xf9,0xac,0xf3,0x0c,0x2c,0x68,0x79 },
{ 0xc9,0x66,0xfe,0xd2,0x71,0x30,0x4a,0x2d,0xb8,0x98,0xfa,0xb7,0x14,0x58,0x8c,0x27,0xca,0x8b,0x17,0xa2,0x69,0x3c,0xf3,0x0c,0x8b,0x11,0xb7,0xed,0xdd,0x39,0x09,0x6b },
{ 0xea,0xd1,0x23,0xc9,0xd7,0xd6,0xd4,0x91,0x6d,0x22,0x57,0x1b,0x9e,0x71,0xa6,0xad,0xa1,0x68,0x26,0x22,0xd6,0x17,0xb8,0x06,0x4c,0x8e,0x92,0x26,0x67,0x40,0xfd,0x5f },
{ 0x3b,0xb4,0x57,0x82,0x8e,0x97,0x79,0x12,0x71,0xac,0x40,0x0d,0x9a,0x0a,0xba,0xeb,0x65,0x8d,0x20,0x7b,0x7b,0x0a,0x65,0xf7,0xb8,0xa9,0x2a,0x0d,0xc0,0xe7,0x50,0xa5 },
{ 0x91,0x85,0x96,0xf9,0xb7,0x6d,0x6d,0x7e,0xa6,0xc7,0x8a,0xe5,0xe2,0x28,0x52,0x71,0xfd,0xf7,0x65,0x34,0x69,0xcd,0x9a,0xfc,0xc4,0x86,0x45,0x9a,0x85,0xbb,0x63,0xca },
{ 0x97,0x40,0x5f,0x97,0xf5,0x10,0x67,0x02,0xd9,0x19,0x9f,0xd5,0xb8,0xa3,0x14,0xb5,0x77,0x35,0xb2,0xdb,0x93,0xb8,0xa6,0x02,0x55,0x6d,0xdf,0xd4,0x0a,0xe9,0xac,0xd4 },
{ 0x0e,0x48,0xa7,0x6c,0x90,0xda,0x9b,0xbb,0x6e,0x71,0xfe,0x7d,0xb2,0x88,0x4b,0xc7,0xd6,0x92,0xcf,0x8b,0x4c,0x41,0xbf,0xf0,0x50,0x0c,0xb0,0x23,0x89,0xa0,0xdf,0x9c },
{ 0x5f,0x77,0x19,0xb6,0x63,0x5b,0x44,0x86,0xc4,0x7f,0x0d,0x5b,0xa6,0x89,0x53,0x4b,0x20,0xee,0x56,0x60,0x51,0x40,0xc8,0x81,0x21,0x0b,0xc8,0xd0,0x73,0xdf,0xca,0xf6 },
{ 0x01,0x7e,0xd3,0x96,0x15,0x53,0xb7,0xe1,0x4a,0x2b,0xa7,0x8b,0x9d,0x3f,0x5f,0xc4,0x3e,0x2c,0x61,0xbf,0x6c,0x16,0x37,0xb8,0x51,0xdd,0x71,0x20,0xff,0x9e,0xfa,0x76 },
{ 0xa3,0x1a,0x30,0x4d,0xc7,0xa8,0xb0,0xd4,0x75,0x51,0x48,0x30,0x91,0xc8,0x3a,0xe0,0x21,0xdb,0xc7,0x9e,0xf3,0x88,0xe8,0xb6,0xcd,0x83,0xd5,0x9f,0x40,0x40,0x86,0xde },
{ 0x1e,0x0a,0x9c,0xe5,0x60,0xd5,0x88,0xea,0x3e,0x19,0x20,0x1d,0x6d,0x0a,0xc0,0x49,0x5b,0xf2,0xc3,0x78,0x07,0x94,0xd8,0x26,0x54,0xb7,0xf5,0x53,0x9c,0x87,0xa0,0xc1 },
{ 0xd7,0xdd,0x41,0xdc,0xe7,0xdf,0x3b,0x6b,0x73,0x33,0x68,0x16,0xec,0x5a,0x79,0x6c,0x3b,0x2b,0x78,0xd7,0xda,0x61,0x95,0x3e,0x06,0x3b,0xfc,0x4a,0x3d,0xca,0x22,0xf0 },
{ 0x06,0x0e,0xac,0x6c,0x49,0x48,0x4f,0x33,0x4f,0x73,0xbc,0xd0,0x45,0x6f,0x5e,0xb5,0x6f,0x5e,0xed,0x88,0x72,0x99,0x66,0xc9,0x9d,0x38,0xf0,0xbf,0x20,0x4a,0xdf,0xf2 },
{ 0xb3,0x78,0xf7,0x14,0x6f,0x75,0x66,0xdd,0xdc,0x1c,0x03,0xf1,0x8d,0x2d,0x1c,0x06,0xe3,0xf1,0x7d,0x02,0x35,0x80,0xf8,0x43,0x27,0x13,0xf0,0x3c,0x5a,0x1d,0xbc,0x5c },
{ 0x43,0xc0,0x2f,0x2e,0x97,0xd5,0xbb,0x0b,0xc3,0xc1,0x78,0x1e,0xc5,0x8c,0xe8,0x7a,0x98,0xf4,0x56,0x01,0xc1,0x0d,0x13,0x12,0xe7,0x40,0x2f,0x74,0x5d,0x90,0x16,0x52 },
{ 0x4c,0x2b,0xe2,0x3d,0x9c,0x16,0x24,0xb1,0xe9,0xa5,0x1a,0xc1,0x97,0x8b,0x10,0x2a,0x82,0x4c,0xcc,0xc3,0x33,0x8f,0x62,0x5e,0x29,0xb0,0x6a,0x8d,0xfb,0x82,0x91,0x1b },
{ 0xb2,0x2f,0xd7,0xa3,0x1a,0x0c,0xa7,0xd5,0xe6,0x55,0x7a,0xff,0x42,0x1b,0x2b,0xfc,0x95,0x66,0x72,0x20,0x3b,0xaf,0x14,0x88,0xf7,0xcb,0xba,0x88,0xeb,0x0c,0xf6,0x0c },
{ 0xab,0xec,0xa7,0xcf,0x8c,0xc1,0x7b,0x15,0x24,0x20,0xaf,0x47,0x6e,0x76,0x49,0x55,0x07,0x75,0xd1,0x62,0xc3,0x39,0x98,0xdf,0x09,0xef,0x7d,0x3a,0xa8,0x9e,0xda,0x61 },
{ 0x8a,0x21,0x27,0x83,0xa5,0xf6,0x6c,0xa0,0xed,0x56,0x1f,0x0c,0x46,0xd7,0x60,0x9c,0x77,0x9e,0xdc,0x3a,0xf1,0xcd,0xd3,0xb9,0x80,0x6e,0x56,0xa5,0x1b,0x02,0x4e,0xe3 },
{ 0x71,0x7a,0xda,0xa2,0x2f,0xe0,0x94,0xd7,0x49,0x78,0xdf,0x76,0x0e,0xfc,0x58,0xbe,0x73,0xf3,0xb8,0x11,0x6c,0x5d,0x47,0x19,0x96,0x96,0xb0,0xcc,0x42,0x80,0x73,0x1f },
{ 0x22,0xab,0x41,0x34,0x04,0x32,0x8a,0xa1,0x7f,0xdc,0xd5,0x89,0x4e,0xb2,0x6e,0xe2,0xfb,0x8e,0x63,0x1c,0x6c,0xd7,0x4d,0x4c,0xeb,0x79,0xe6,0x88,0x35,0x19,0xea,0x73 },
{ 0x5f,0xb7,0xdd,0x47,0xdc,0x71,0x12,0x09,0x09,0x2c,0x30,0x55,0xcc,0x79,0x0c,0x83,0xf3,0xe0,0x9b,0xdb,0x42,0x5e,0xf5,0xfb,0x4c,0xec,0xf6,0x7f,0xd6,0x07,0x82,0xdd },
{ 0xe9,0x56,0xee,0x5a,0x95,0x89,0xa5,0x16,0x1f,0xe8,0x9f,0xac,0x04,0xb1,0xf8,0x4f,0x03,0x24,0x03,0xa7,0x3a,0x50,0x42,0x59,0x33,0x26,0x3c,0x81,0x6f,0x86,0x84,0x61 },
{ 0x3b,0xdf,0xbe,0x23,0x8b,0xba,0x4c,0xcb,0x7d,0x3c,0xcc,0xfe,0xcf,0x76,0x27,0x07,0x0e,0xdb,0x3b,0x8e,0x74,0x03,0xbf,0x31,0x2b,0x07,0x09,0x08,0x12,0x03,0x34,0xc4 },
{ 0x97,0xf4,0x9f,0x96,0x97,0x1a,0x6b,0x64,0x8e,0xd3,0x9e,0xce,0x6a,0xbd,0x7b,0x78,0x48,0x73,0x56,0x9e,0x16,0xd4,0x5d,0xb0,0x55,0x08,0x7e,0xae,0x39,0xc9,0x87,0xcc },
{ 0x1b,0x8e,0x9d,0x0e,0xff,0x1b,0x1e,0xa5,0xfb,0x01,0x14,0xff,0x1f,0x53,0xe2,0x62,0x1d,0x9b,0x4e,0x93,0x62,0x52,0x2d,0xcc,0xcd,0x1f,0xe2,0x6c,0x7b,0x8c,0x64,0x88 },
{ 0xc4,0xba,0xe6,0x53,0xf2,0x0e,0x78,0x78,0x04,0xee,0xa5,0x5d,0xc9,0xe2,0x54,0x93,0x85,0xb6,0xa9,0x2a,0x2a,0x45,0x10,0x6f,0x98,0x4c,0x4f,0xdc,0x80,0x9f,0x21,0x99 },
{ 0x45,0xe0,0x41,0x57,0x40,0x9d,0x50,0xf8,0x26,0x34,0x7f,0x44,0x45,0xc1,0xf9,0x71,0x26,0xe8,0xa3,0x38,0x20,0x8a,0x89,0x81,0xc2,0x15,0x86,0x79,0xee,0x15,0x35,0x24 },
{ 0x34,0x91,0x2d,0xe9,0x63,0x60,0x09,0x01,0x66,0x6b,0xdb,0x07,0x84,0x4b,0x8b,0xb8,0xf3,0x41,0xe4,0xad,0x2f,0xe1,0x5f,0xf9,0x7e,0xbf,0x97,0x5b,0x8f,0x65,0x3d,0x71 },
{ 0x03,0xe5,0xb5,0x3a,0x13,0x1a,0x52,0x4c,0xe4,0x44,0xda,0x60,0xe0,0xde,0x80,0xfd,0x39,0xce,0x48,0x3e,0x44,0xaa,0xc4,0x12,0x11,0x2b,0x46,0x3e,0xba,0x7d,0xc5,0x4b },
{ 0xe0,0xbc,0x28,0x7a,0x5d,0x38,0x47,0xa9,0x04,0x46,0xc5,0x78,0x63,0x35,0xa2,0xea,0xd7,0x22,0x34,0x75,0x7e,0x22,0xba,0x04,0x3c,0x7a,0x35,0x87,0x9b,0xa6,0x4f,0x60 },
{ 0x1d,0xa7,0x09,0x34,0x54,0xca,0xcc,0x65,0x0c,0x0e,0xb9,0xe6,0x74,0x0a,0xcb,0x8a,0xfc,0x62,0x62,0x4d,0xbe,0x40,0xf9,0xb3,0x2e,0x81,0x47,0x07,0x57,0x33,0xb1,0x85 },
{ 0xac,0x22,0x1f,0xc9,0x12,0xf1,0x7e,0x30,0x11,0xf8,0xdb,0xac,0x55,0xd1,0xec,0xf7,0xc3,0xb0,0xc7,0xd1,0x99,0x19,0x00,0xb6,0x8a,0x12,0x83,0x6b,0x9a,0xdc,0xb8,0x5e },
{ 0xa8,0x34,0x0d,0x4c,0x3b,0x78,0xbe,0x63,0x1c,0x76,0x90,0x76,0x15,0x32,0x1a,0x28,0x20,0x72,0x81,0x0d,0x4d,0x0d,0x79,0x06,0xe1,0x37,0x90,0x16,0x19,0x44,0xa2,0xd3 },
{ 0x91,0x0b,0x89,0xd3,0x20,0x36,0x27,0x53,0xdc,0x54,0x5a,0x75,0x25,0x8c,0x79,0xc9,0xd4,0x4c,0xe8,0x00,0x31,0xf3,0xe2,0x67,0xb7,0xaa,0xd9,0xf8,0x6b,0xce,0xf1,0x8f },
{ 0x94,0xbc,0x12,0xe8,0x7b,0x10,0x82,0xcd,0x1c,0x9a,0x4e,0xe5,0x63,0x50,0xcd,0x47,0xa5,0x17,0x30,0x8b,0x62,0xef,0x93,0xed,0x5e,0x7a,0xe2,0x04,0xa6,0x33,0x40,0xf5 },
{ 0x0c,0x8a,0x06,0x05,0x43,0xfc,0x46,0x75,0xf4,0x83,0x84,0x32,0xcc,0x9f,0x69,0x9f,0xc1,0xf3,0xf9,0x35,0xbd,0xb6,0x12,0x73,0xcc,0x1c,0xc9,0xd0,0xf6,0xeb,0x8b,0x40 },
{ 0x0d,0xb0,0x58,0x40,0xb8,0x1f,0x54,0xe0,0x2e,0xf4,0xc2,0xca,0x14,0xf7,0x78,0x3a,0xf7,0x26,0x58,0xfe,0xc5,0x9a,0xc7,0x76,0xe4,0x2f,0x9c,0x89,0x34,0xf0,0x2c,0x6b },
{ 0xe8,0x63,0x00,0x36,0x4e,0x21,0xde,0x0e,0xef,0x2c,0x10,0x14,0x51,0xc1,0x28,0x43,0x18,0xc4,0x9d,0xaf,0x7f,0xd2,0xf6,0x2d,0x73,0x2e,0x37,0x3e,0x7e,0x71,0xd5,0xa3 },
{ 0xfb,0x07,0x1b,0xfb,0xda,0x7b,0x49,0x8d,0x64,0xb0,0xbd,0x37,0xd5,0x63,0x63,0xab,0x2b,0x33,0xdc,0x16,0xc2,0xc2,0x6c,0x65,0xb0,0xf0,0xab,0x91,0x5f,0x2c,0x86,0x1c },
{ 0x9a,0xc9,0x68,0x24,0x6f,0xfc,0xac,0x07,0x1e,0xd9,0x57,0xf1,0x17,0x65,0x6e,0x6d,0x12,0x24,0x38,0x6b,0x64,0x40,0x5f,0xf1,0xe1,0xf0,0xf5,0x9a,0xff,0xf4,0x9b,0xfb },
{ 0x38,0x53,0x32,0x9e,0xa1,0x12,0x82,0x22,0x55,0x1a,0x77,0xeb,0x5b,0x9d,0x98,0xa0,0xca,0xb2,0xe8,0xf9,0x74,0x3c,0xba,0x24,0x2a,0xbb,0x73,0x16,0x2f,0xf5,0x52,0x08 },
{ 0xa9,0x37,0xf2,0x1e,0xb7,0xf9,0x66,0x1b,0x74,0xf9,0x42,0xd8,0x5e,0xb4,0x57,0x71,0x1a,0x56,0xf1,0x05,0x00,0x67,0x0c,0x99,0x44,0x6f,0x91,0x7b,0x0b,0x82,0x7b,0xa1 },
{ 0x87,0xdc,0xd9,0xc7,0xa9,0x35,0xad,0xbc,0x10,0x0c,0xf7,0xd1,0x03,0x9b,0x81,0x46,0xd4,0x52,0xf5,0x9e,0xdd,0xe4,0x21,0x0c,0xbd,0xd7,0x52,0x37,0xff,0x36,0x93,0xa1 },
{ 0x8d,0x01,0x02,0x1e,0x0b,0x3b,0xb7,0x2b,0xb9,0xe2,0x96,0xfe,0xb7,0x48,0x9d,0xa0,0xa1,0x51,0x3e,0xa9,0xb0,0x7e,0xd9,0xd6,0x57,0x7d,0xb0,0x08,0x20,0xc9,0xa3,0xda },
{ 0x7a,0x7c,0x06,0x67,0x53,0x55,0x72,0x05,0x82,0x7d,0x69,0xa5,0x74,0x23,0x9e,0xc3,0x62,0x0a,0x60,0xb7,0x30,0x73,0xd4,0x8e,0x19,0x51,0xff,0xf5,0xdb,0x4c,0xb1,0x0b },
{ 0xce,0x80,0xc5,0x54,0xf6,0x3b,0x28,0x6e,0x79,0xa8,0x11,0x88,0x9c,0x68,0x86,0xdb,0x78,0x9a,0x3f,0x24,0x34,0x67,0x00,0x12,0xdb,0x42,0x37,0x4d,0x29,0x44,0xd6,0x7a },
{ 0x6b,0x3b,0x03,0x3d,0xa4,0x8e,0x93,0xde,0xda,0xa1,0x6a,0xeb,0x67,0xe5,0xf5,0xa3,0x08,0xef,0x18,0xad,0x79,0x7e,0xe7,0xd0,0x14,0xb0,0xd2,0x6a,0x49,0x56,0x1b,0xad },
{ 0xca,0x6e,0x87,0x6b,0x8f,0x22,0x74,0x53,0xb5,0x05,0x2e,0xdd,0xff,0x63,0xe6,0x8b,0xdc,0x1c,0x8c,0x2f,0x34,0x73,0x94,0x68,0xf7,0x24,0x23,0xb3,0xd3,0x8e,0x47,0x7b },
{ 0x24,0x16,0x0d,0x5e,0x03,0xd0,0xc8,0xca,0xfe,0x52,0x11,0x11,0xde,0x4e,0xf6,0x58,0xd9,0x90,0xa3,0x8b,0xf1,0x6e,0x83,0xe3,0xa5,0x30,0x88,0x3d,0xf8,0xe4,0xed,0x7b },
{ 0x5c,0x28,0xa2,0x32,0x09,0xbf,0x99,0xc6,0x00,0x28,0xe1,0xd7,0x05,0x99,0x47,0x97,0x1d,0xc1,0x56,0xc1,0xb9,0x7a,0x33,0x41,0xbc,0xaa,0x2f,0x3a,0xff,0xe6,0x45,0x61 },
{ 0x08,0x20,0x0c,0xa6,0x46,0x69,0xc1,0xf0,0xc5,0xb3,0x61,0x44,0xe5,0xb2,0xac,0x17,0x01,0xad,0x3a,0x4e,0xb7,0x95,0x0b,0x51,0x89,0xea,0x8b,0x32,0xd6,0x74,0x44,0x64 },
{ 0x87,0x52,0x82,0xd2,0xbc,0x2f,0x28,0x5f,0xb7,0x5f,0xea,0x2a,0xe3,0x75,0xa5,0x07,0x19,0xb3,0xba,0xa1,0x1c,0x5e,0xab,0x2c,0xdf,0xe6,0x64,0xae,0x2a,0x0b,0x71,0x72 },
{ 0x06,0xed,0x87,0x10,0x6e,0x67,0x0b,0xc4,0xe2,0xbe,0x3c,0xcb,0x5d,0x21,0x08,0xb2,0xf7,0x3e,0x36,0x22,0x43,0xc1,0xa2,0x91,0x87,0xae,0xc7,0x5b,0x71,0x3d,0xfa,0xb9 },
{ 0x08,0xdd,0x36,0x15,0x47,0xf0,0xae,0x01,0x32,0xa2,0x44,0xbe,0x8c,0xef,0x1c,0x92,0x56,0xbf,0x16,0x48,0x6a,0xc8,0x7c,0x83,0xb0,0x3d,0xf6,0x36,0x8e,0xda,0xb5,0x94 },
{ 0xc0,0xe7,0x30,0xe3,0x53,0xdc,0xe3,0xa2,0xde,0xc4,0xeb,0x01,0xe3,0x65,0xdf,0xc9,0x44,0xbc,0x22,0xef,0xab,0xe6,0x11,0xf3,0xbb,0x25,0xfa,0x7a,0x2f,0x41,0x89,0x65 },
{ 0xe1,0xdc,0x4f,0x53,0xc8,0xc5,0x09,0x28,0x37,0x90,0x28,0x40,0x11,0xe8,0xe0,0xba,0xbc,0x85,0x37,0x1e,0xd9,0x8b,0xdf,0x92,0x8c,0x0f,0xa2,0xf7,0xef,0x1a,0x2f,0xaa },
{ 0xf0,0x47,0x41,0xed,0x58,0xf5,0x67,0x37,0xfa,0xd9,0x5b,0xe6,0x26,0xe4,0x91,0x7c,0x01,0x3f,0x05,0x45,0x77,0x30,0x8e,0x8b,0xf9,0xe5,0xd6,0xa0,0x51,0xf6,0xa5,0xf8 },
{ 0x23,0x5a,0x90,0x9f,0xec,0x31,0x22,0x2e,0x76,0x20,0x23,0x8c,0x52,0x06,0xce,0x74,0x03,0xa3,0x39,0xd3,0x51,0x64,0x9e,0xd2,0x18,0x3e,0xac,0x48,0x5e,0x83,0xd4,0x7c },
{ 0x98,0x92,0xc8,0x1b,0xdb,0xc5,0xc9,0x3f,0x03,0x8b,0x0c,0xaf,0xa4,0x21,0x8d,0x2f,0x39,0x64,0xbb,0x82,0xb1,0xc8,0x3b,0x5d,0xd0,0xce,0x97,0xb3,0x7f,0xdf,0x64,0x86 },
{ 0x73,0xe9,0x2a,0x38,0x09,0xf0,0x45,0x1b,0x0b,0x77,0x66,0xae,0x23,0xee,0x4c,0x45,0x42,0x40,0x2f,0x79,0xab,0xb0,0x26,0xb7,0xb1,0x7f,0x9e,0x9e,0xa5,0x4f,0x9c,0x95 },
{ 0xb9,0xac,0x21,0xe9,0x87,0xd5,0x90,0x9a,0xbc,0xcf,0x3c,0xe7,0x2e,0xd9,0xcf,0x71,0x15,0x66,0x6f,0x64,0x73,0x98,0x79,0x6d,0x12,0x15,0xd0,0x7a,0x2b,0x03,0x17,0xf0 },
{ 0xf6,0xae,0x0f,0xa1,0x02,0x56,0xcb,0xa5,0x95,0xe9,0x78,0xd2,0x53,0xab,0xdd,0xd9,0x18,0x22,0x91,0x27,0x65,0x91,0x43,0x82,0xb8,0x46,0x75,0xb9,0x62,0x0b,0x23,0x3c },
{ 0x5b,0xd6,0xb6,0x85,0xe9,0xd5,0xfa,0x95,0x16,0x07,0xac,0xf5,0xab,0x1f,0xc0,0x66,0x7d,0x76,0xdf,0xb0,0xd3,0xa1,0xba,0xe7,0x94,0x24,0x19,0x84,0x7a,0x9f,0x58,0x1d },
{ 0xe5,0xb6,0x20,0x9d,0x30,0xf8,0xad,0x93,0x77,0x64,0xa5,0xac,0xc9,0x97,0x74,0x1a,0x1d,0x71,0x70,0x5a,0x60,0x20,0x63,0xf9,0xaf,0xd3,0xed,0xbf,0x92,0x5f,0xe6,0x59 },
{ 0x20,0x3a,0xec,0x83,0x7c,0x23,0x52,0x71,0xa8,0x12,0x73,0xf2,0x1b,0xd6,0x6d,0x53,0xe0,0x73,0x37,0x27,0xcf,0x50,0x59,0x7d,0xbc,0xfc,0xb6,0x00,0x5a,0xa2,0xc3,0xf3 },
{ 0x05,0xe8,0x89,0x47,0xf8,0x6b,0x39,0x42,0xbb,0xbb,0xb2,0x5b,0xb5,0x45,0xe0,0xdd,0x1f,0x24,0xfb,0xe7,0x88,0x54,0x9c,0xe5,0xa5,0xf1,0x70,0xb9,0xdd,0x27,0x9f,0x49 },
{ 0xa6,0x25,0x9e,0xbe,0xdc,0x69,0xf4,0x8a,0xad,0xf9,0x31,0xfb,0x28,0x36,0xe2,0x96,0x4a,0x28,0x96,0x45,0xdc,0x78,0x3b,0x33,0x45,0x94,0x64,0xde,0x7d,0xe6,0xfd,0x2b },
{ 0xc7,0xd8,0x30,0xd4,0xd4,0xc4,0x52,0x44,0xa7,0xf5,0x63,0x99,0x42,0xd8,0x81,0x0d,0x94,0xc9,0x57,0xb3,0x0a,0x35,0x79,0xc8,0xfa,0x7c,0xb8,0xb5,0x07,0xf7,0xbf,0x68 },
{ 0x52,0x90,0xba,0x5b,0x4b,0xad,0xc6,0xab,0x7f,0x41,0xe3,0x65,0xaf,0x82,0x72,0x51,0xc7,0xad,0x10,0x9a,0xd2,0x4f,0x80,0x43,0x69,0xe0,0x30,0xbd,0xf1,0x4d,0xcc,0x34 },
{ 0x42,0x3a,0x0f,0x0e,0xff,0xfd,0xd5,0x3e,0x84,0x53,0x45,0x99,0xf1,0xf2,0x6f,0x44,0xd0,0x70,0xdb,0x33,0xfd,0xc7,0xbf,0x7e,0x6e,0x86,0x1f,0x3d,0xf2,0x34,0x40,0x41 },
{ 0xff,0x57,0x57,0xc6,0x39,0xe5,0x2d,0x66,0x0c,0x66,0x90,0x6e,0xfc,0x73,0x98,0x5b,0xe3,0x1a,0x19,0x17,0xd5,0x58,0x09,0x14,0xc0,0x60,0x43,0x50,0xee,0x7a,0xdb,0x97 },
{ 0x82,0xd5,0x88,0xd1,0x23,0xff,0x6c,0xad,0x75,0xc2,0xf8,0xbc,0x4d,0xed,0x4c,0xd3,0x48,0x1c,0x82,0x16,0x48,0x24,0xbb,0xf4,0x82,0x9f,0x0b,0x65,0xd0,0xb8,0xcf,0x56 },
{ 0x7b,0x55,0xdf,0xb8,0x04,0x43,0x73,0x58,0x54,0xb2,0x7b,0xce,0x3a,0xf9,0x43,0x57,0x8f,0xba,0x6b,0xa2,0x92,0xc0,0x5a,0x9d,0xb8,0x16,0x64,0x0e,0x40,0x4d,0x2e,0xba },
{ 0x8a,0x70,0x27,0x4d,0x43,0x5f,0xef,0x0d,0x69,0xaa,0xa8,0x5d,0xad,0x23,0x25,0x22,0x6c,0x53,0x11,0x5b,0x16,0xf5,0xa3,0xf2,0xd2,0xf9,0x8d,0x95,0x16,0xc9,0x1c,0x8b },
{ 0x19,0xbc,0x23,0xc5,0x20,0x4b,0x1c,0x59,0x43,0xcb,0xd1,0xe2,0x1a,0x8e,0x7e,0x17,0xc2,0xe9,0x32,0x7e,0x3f,0x04,0x71,0xf9,0xc6,0xc7,0x99,0x7e,0x5a,0x57,0x58,0x31 },
{ 0xda,0xcc,0xf0,0xba,0x45,0x39,0x80,0xdd,0x02,0xcc,0xda,0x0f,0x20,0x52,0x1c,0xae,0xc9,0xe9,0xc6,0x6c,0xd0,0x2b,0x64,0x9e,0x84,0x4c,0xb3,0x9d,0x13,0xd3,0xcf,0x3e },
{ 0xf6,0x19,0x6b,0x7b,0x15,0x8b,0x47,0xfa,0x2d,0xa7,0x69,0x5a,0x07,0x99,0xa3,0xbd,0x62,0xcb,0x53,0x79,0x4d,0x63,0xcc,0xb3,0xad,0xd1,0x04,0xaa,0x14,0x5b,0xf5,0xfa },
{ 0x50,0xa8,0xa2,0x1f,0xb1,0x3d,0x4d,0x2e,0x03,0x03,0x7e,0x39,0x3e,0x5c,0x60,0xdd,0xb9,0xf9,0x2d,0x97,0xb5,0x5c,0x8a,0xa7,0x7e,0x95,0xa0,0x62,0x42,0x15,0xd7,0xa1 },
{ 0x59,0x7e,0x1c,0xc8,0xdc,0x74,0xd7,0x0b,0x53,0xa1,0x5b,0x07,0xac,0xf7,0x8d,0x75,0x63,0x1a,0x1d,0x05,0xa7,0x33,0x63,0x12,0xb9,0x97,0x93,0x11,0x67,0xd2,0x2d,0x85 },
{ 0x3a,0xe8,0x8a,0xad,0x0c,0x4a,0xeb,0xef,0xfa,0x02,0x91,0xdc,0x9c,0x33,0x79,0x84,0xb1,0xb9,0x0b,0x3d,0xae,0x51,0x6e,0x2b,0x43,0xc8,0xa1,0x9d,0x39,0x7e,0xa5,0xeb },
{ 0x4f,0xae,0x25,0xb7,0x42,0xf7,0xad,0x66,0xed,0x7b,0x03,0x6a,0x89,0x84,0x93,0x95,0xa1,0x13,0x21,0x34,0xb0,0x3e,0xf4,0xa0,0x20,0xdb,0x4b,0x4f,0xf5,0xf7,0xa7,0xa3 },
{ 0x2c,0x4b,0x89,0xf5,0xd0,0xf6,0xaf,0xb4,0x6d,0xb0,0x47,0xe5,0x7e,0x2b,0xf9,0x44,0x89,0x7a,0x9f,0x1d,0x1a,0xbc,0x76,0x44,0xf9,0x25,0x79,0x0b,0xaa,0x7b,0x5e,0x1f },
{ 0xe4,0xa7,0x5c,0xc1,0x17,0xca,0xe0,0xb4,0x48,0x13,0x25,0x7e,0x1c,0xb7,0x1e,0x6b,0x22,0xb4,0x24,0x13,0xd4,0x68,0xc0,0xb9,0x3a,0xb1,0x1a,0x0b,0x32,0x4c,0xf4,0x4b },
{ 0xcc,0x8a,0xab,0xdf,0xaf,0xf1,0xaa,0xc6,0x91,0x27,0xc8,0x25,0x23,0x29,0x7b,0x57,0x58,0x90,0xf6,0xe7,0xc8,0xeb,0xb5,0x9c,0x2f,0xfd,0x73,0x64,0xec,0xbe,0x92,0x06 },
{ 0x8f,0x21,0xaf,0x7f,0xe8,0xa5,0x68,0x3e,0x4e,0xf6,0x10,0xff,0x0e,0x2f,0xed,0x21,0x79,0xac,0xf6,0xb7,0x4c,0x58,0x2a,0x36,0x3a,0x35,0x8a,0xa6,0xcb,0x02,0x6a,0x25 },
{ 0xc8,0xef,0x6b,0x28,0xc8,0x84,0xf7,0x76,0xa5,0xb0,0x9a,0xf7,0x2c,0x08,0xf2,0xfd,0x23,0x93,0x56,0x67,0xf3,0xb9,0xa3,0xc7,0xdb,0x68,0x23,0x93,0x1e,0xb3,0x21,0x3c },
{ 0xa7,0x14,0x84,0x5b,0xdb,0xb4,0x14,0x24,0x96,0x1d,0xba,0xc8,0xc6,0x1d,0xc6,0x34,0xc3,0x8e,0x1d,0xfd,0x0f,0x99,0xe4,0xc2,0x0e,0x4f,0xa7,0xa0,0xa8,0x6f,0xec,0xea },
{ 0xd0,0xf9,0x8d,0x32,0x74,0xab,0x4d,0x20,0xba,0x8c,0xe4,0x6c,0x75,0xf9,0x98,0xdd,0xf3,0x4a,0xa5,0x2d,0x08,0x9d,0xba,0xde,0x34,0xea,0x9f,0x8e,0x1a,0xad,0x37,0x15 },
{ 0x98,0x65,0xcc,0xe3,0xdb,0x40,0xb4,0x54,0xe5,0xd0,0xe9,0xbf,0x7c,0xb4,0x33,0x5f,0xfc,0x1b,0x1e,0xd3,0x46,0xa1,0x4f,0x11,0x64,0x92,0x62,0x8f,0xef,0x02,0xc9,0x9b },
{ 0x02,0x64,0x07,0x29,0x66,0x47,0x17,0x94,0x35,0x2a,0x8e,0x4f,0xbb,0xda,0xdd,0xd1,0x42,0x5e,0x00,0x44,0xfe,0x1d,0xc6,0xde,0xf6,0x27,0xf9,0x9e,0x2a,0x6d,0xdc,0xbc },
{ 0x25,0x6b,0xbd,0x2d,0x83,0x14,0xa6,0x12,0x87,0xc1,0x07,0x98,0xbd,0xff,0x34,0xe2,0x67,0x1c,0xce,0x8c,0x65,0x62,0x6e,0x03,0x2b,0xc6,0xce,0xe6,0x00,0xff,0x76,0xee },
{ 0xc1,0x0d,0x1d,0x96,0x54,0x31,0x9a,0x51,0x0f,0xe9,0x07,0xd0,0xed,0xeb,0xcf,0x09,0x1e,0xa4,0x86,0xb3,0x94,0x1b,0xdc,0x8d,0xcc,0xe4,0xb2,0xad,0x14,0x8d,0x81,0xf4 },
{ 0xb4,0xeb,0xa6,0xb5,0x7d,0x7f,0x27,0xd8,0x81,0x46,0x7f,0x81,0x8e,0x2c,0x7e,0x4a,0x16,0xc0,0x28,0xd7,0xda,0xbe,0x5a,0x1a,0x91,0xb3,0xdb,0x73,0x10,0x62,0xdc,0xd6 },
{ 0xc7,0x2f,0xff,0xba,0x08,0x2e,0x44,0xae,0x12,0xa9,0x5a,0xb7,0xd0,0x4a,0x8d,0x49,0x39,0x43,0x67,0xa7,0xfe,0xa4,0xc3,0xce,0x7e,0xb5,0xef,0x42,0x63,0x4f,0x14,0x07 },
{ 0x75,0x85,0xd7,0x29,0xa1,0x8c,0x61,0x1b,0xa0,0x7e,0x68,0x6f,0xd6,0x4d,0xe4,0x1f,0xd3,0xfa,0x29,0x88,0x56,0x28,0x5b,0x7d,0xee,0x33,0xaf,0xa2,0x2a,0x4b,0xb0,0x6e },
{ 0x9b,0x68,0x69,0xd5,0x20,0xba,0xa2,0xcd,0xb0,0xfe,0xca,0xbb,0x99,0x55,0x04,0xce,0xf7,0x37,0x7f,0x2c,0xe4,0x8c,0x82,0x1d,0x00,0xdb,0x08,0x69,0x8f,0x99,0x30,0xc2 },
{ 0x6a,0x99,0x17,0x61,0x1a,0x20,0x23,0x80,0xe8,0xe2,0x2f,0xf1,0x8b,0x06,0x80,0x78,0xd9,0x5e,0x2c,0x39,0x15,0x52,0xb5,0xaa,0x98,0x0d,0x90,0xdc,0xe6,0x95,0x66,0xb0 },
{ 0x8b,0xc3,0x1e,0xae,0xbb,0x8d,0xb9,0x4a,0x60,0xf1,0xac,0x2a,0xf4,0xca,0xc5,0x64,0x9d,0x5f,0x69,0xaf,0x45,0xf0,0x92,0xb0,0x97,0xc2,0x41,0xb4,0x2d,0xa3,0x05,0x75 },
{ 0xc8,0x20,0xa2,0xd5,0x1d,0xd4,0xac,0x0f,0x66,0xcb,0x88,0x9d,0xeb,0xf8,0x76,0x9a,0xee,0x66,0xa5,0xbe,0x5a,0x5a,0x07,0xa6,0xf1,0xcf,0xbb,0xac,0x94,0x50,0x3c,0x10 },
{ 0x21,0x7a,0x92,0xbf,0xd6,0x45,0x89,0x1a,0xa5,0x93,0x8d,0x8a,0xd4,0x6f,0xb6,0x2f,0x0f,0x7b,0x73,0x4d,0x7a,0x8b,0x3e,0xf4,0x53,0x03,0x61,0x69,0x6f,0xc9,0xd5,0xca },
{ 0xd7,0x21,0xaa,0x22,0xbb,0x1e,0xdd,0x1e,0xbf,0x08,0xf6,0x1e,0x0a,0x3c,0x15,0x70,0xf0,0xf3,0x05,0xc1,0xb2,0xbd,0xcd,0xc2,0x70,0xaa,0x66,0x79,0xa5,0xcd,0xbb,0xab },
{ 0x27,0x54,0xfc,0x50,0x47,0x2d,0xa9,0x0e,0x57,0x44,0x11,0xb3,0x3f,0xb7,0x56,0x39,0x89,0x7b,0xf5,0x20,0x28,0xd0,0xa8,0xfe,0xdf,0xcd,0xe2,0x7a,0x4e,0x5c,0x77,0x12 },
{ 0x76,0xf4,0xbb,0x49,0x11,0x09,0xae,0x56,0x69,0xab,0xe8,0x6c,0xcc,0x67,0x70,0xa3,0x77,0x52,0x20,0xc6,0x72,0x2b,0xc8,0x22,0x61,0xad,0x59,0x0c,0xc7,0x40,0x1f,0x35 },
{ 0xcd,0xfe,0x36,0xd8,0x03,0xfb,0x56,0xae,0x35,0xeb,0xc5,0xe3,0xdc,0x59,0xba,0x4c,0xc8,0x51,0x6b,0xd8,0x04,0x99,0x1c,0xaa,0xfa,0xf6,0x9b,0xbb,0xc3,0xda,0xb4,0xe6 },
{ 0x74,0x06,0x5b,0x35,0xe6,0x7b,0x88,0xbc,0xd7,0x0e,0x3c,0xf9,0xc8,0x93,0x4d,0x67,0xeb,0x11,0x43,0x63,0xf9,0xa8,0x91,0x61,0xbc,0xb7,0xee,0xec,0x8f,0x99,0x15,0x38 },
{ 0xe7,0x45,0x91,0x3b,0x11,0x20,0xd2,0x09,0xf5,0x30,0x80,0x17,0x8c,0x59,0x69,0x39,0xe1,0xc2,0xbc,0x81,0xf4,0x8d,0x45,0xc5,0x4c,0x5b,0x01,0xbc,0x91,0x12,0x13,0x03 },
{ 0xb2,0xc9,0x10,0xf8,0x0d,0x69,0x58,0xe1,0xfd,0x80,0x6a,0x01,0x7c,0xe0,0xd3,0x83,0xbb,0xb3,0x1b,0xf5,0xfb,0x7e,0x8a,0x77,0xf9,0x27,0xfc,0x70,0xa3,0x41,0xcb,0x5f },
{ 0x18,0xd9,0xd0,0x9e,0x57,0xdd,0x10,0xbe,0x5f,0xe6,0x99,0x79,0x2a,0x83,0x0e,0x4f,0x3c,0x6e,0x7c,0x72,0x33,0x69,0xc3,0x1c,0x5a,0x9d,0xbc,0x52,0x5c,0x1d,0x63,0x07 },
{ 0x73,0xee,0x29,0x40,0x03,0x01,0x94,0x0b,0xdc,0x29,0xc1,0xb4,0x93,0x40,0x85,0x8a,0x8d,0x4d,0x70,0xd2,0xae,0xf5,0xc1,0xa2,0xcd,0x87,0x04,0x63,0x42,0xd0,0xd3,0xe5 },
{ 0x5e,0xdf,0x53,0x2f,0xcd,0x1e,0x56,0x0b,0xd1,0x21,0x76,0xc0,0x58,0x51,0x7e,0x41,0x62,0x9a,0xda,0x89,0x36,0x39,0x7e,0xaa,0xd9,0x19,0x36,0x72,0x59,0xee,0xe2,0xe8 },
{ 0x90,0x4a,0x77,0xa3,0x4a,0xd9,0x3c,0xe0,0x8e,0x43,0x3d,0x8c,0x78,0x4a,0x25,0x66,0x3d,0x5a,0x06,0x17,0x54,0xae,0x77,0x56,0xc7,0xd9,0x9f,0x6f,0x7a,0xd3,0x21,0x9e },
{ 0x82,0xbe,0xd1,0xe7,0x49,0x41,0x97,0xdd,0x39,0xdc,0x6f,0x3a,0x0c,0x94,0x16,0x5f,0x60,0xad,0xe7,0x8e,0xd0,0x1a,0xd4,0xeb,0x6b,0xbb,0xae,0xe5,0x20,0xba,0xad,0x9c },
{ 0xa9,0x60,0xc0,0xbe,0x3a,0x13,0x3f,0x9a,0xc4,0x99,0xcd,0xb0,0x8a,0xe8,0x9d,0x67,0xfa,0xb4,0xff,0x66,0x2e,0x85,0x15,0xf8,0x2d,0x7d,0x48,0x23,0xd8,0x16,0x82,0xab },
{ 0x11,0x8f,0xe0,0xa4,0xaa,0x70,0x64,0xea,0x30,0xcc,0xed,0xf3,0x68,0x16,0xe6,0xd7,0x32,0x34,0xe2,0x41,0xe5,0x7a,0x2d,0x32,0x38,0xb1,0x7e,0xd0,0xdb,0xef,0x66,0x04 },
{ 0xae,0x65,0x58,0xd4,0xc0,0xf8,0xa0,0x4f,0x7e,0x03,0x6b,0x16,0x02,0x5f,0x73,0xa8,0x47,0x61,0x12,0xc3,0xdc,0x54,0x7b,0x09,0x8a,0x44,0xa3,0x06,0x2e,0x8d,0x98,0x23 },
{ 0xc9,0x38,0xf6,0x82,0xc4,0x92,0x4d,0x04,0xf7,0xc2,0x29,0xf4,0x98,0x17,0x3e,0x07,0x86,0xca,0x91,0x64,0x4a,0xf4,0x16,0x0b,0x5a,0x92,0x2b,0x96,0x44,0xfe,0xe3,0xb8 },
{ 0xb9,0x5c,0x33,0x29,0x4f,0xcd,0x70,0x7f,0x48,0x87,0xfb,0x70,0x74,0x36,0x15,0xad,0x9d,0xf6,0x58,0x42,0x2a,0xdb,0x81,0xcd,0xf7,0x4c,0x54,0x71,0x0d,0xab,0x98,0x90 },
{ 0xd6,0x45,0x5e,0xe6,0x07,0xfe,0x73,0x5c,0x57,0x6e,0x1a,0x84,0x31,0xb7,0x13,0xeb,0x70,0x5e,0x01,0xa5,0x57,0xc1,0xcb,0x10,0xa0,0x27,0xbb,0x3e,0xba,0x4f,0x86,0x01 },
{ 0xa1,0x32,0xbe,0x64,0x7b,0x0a,0x38,0xd8,0xa8,0xf0,0x8e,0x24,0x1f,0x5f,0xb0,0x37,0xa9,0x96,0x0f,0x87,0xd1,0x5e,0xce,0x5e,0xcc,0xfe,0x55,0x93,0x1b,0x65,0xaa,0x5a },
{ 0x17,0xca,0x80,0x90,0x38,0x66,0x76,0x04,0xef,0x98,0x76,0xfd,0x44,0xdf,0xd3,0x86,0x59,0x48,0x2a,0x1a,0x59,0x05,0x91,0x16,0xd2,0xf6,0xdd,0x60,0xbb,0x9f,0x59,0xf8 },
{ 0x36,0x7f,0xb0,0x04,0x73,0x08,0x69,0x95,0x9b,0x45,0x38,0x1a,0xd5,0x31,0x86,0xd5,0x4b,0x93,0x8a,0x67,0xad,0x40,0x0d,0xc9,0x33,0x22,0x9e,0xc1,0x32,0x0e,0x2e,0xaf },
{ 0xb0,0x58,0x35,0xcf,0x75,0x66,0x95,0xad,0x42,0xb9,0x8c,0x04,0x2a,0x68,0x9d,0xae,0x7b,0xbe,0xd9,0x75,0x49,0xb8,0x9a,0x9d,0x4e,0xa1,0xdf,0x11,0x02,0xc3,0x23,0x5a },
{ 0xb0,0xf4,0x69,0x8f,0x78,0x10,0xc9,0x13,0x93,0x7b,0x95,0x23,0x64,0x54,0x92,0x3c,0x68,0xfe,0x4e,0xe5,0xe5,0x08,0x64,0xe0,0x22,0x88,0x91,0x69,0x1a,0xa6,0x1e,0x88 },
{ 0xf2,0xfb,0x61,0xf0,0x97,0x66,0x19,0x52,0x9d,0x81,0xfb,0x58,0xa1,0x1f,0xb7,0x3f,0x85,0x52,0xe7,0x64,0xa8,0x61,0xb9,0x11,0x5c,0xdd,0x86,0xda,0x5c,0x27,0xef,0x6a },
{ 0xa9,0x8f,0x2b,0x81,0x1e,0x63,0x09,0x76,0xb0,0x26,0x14,0x81,0xaa,0x06,0x24,0x2b,0x01,0x35,0xaa,0x5f,0x01,0x36,0xa7,0x77,0xa7,0x57,0x8c,0x0f,0x41,0xe5,0xc2,0x95 },
{ 0xeb,0xde,0x18,0x01,0x0c,0xc7,0xfa,0x1e,0xc8,0x4d,0x10,0x9c,0xa4,0xfb,0x62,0x7f,0xbe,0x65,0xfc,0x46,0x45,0xe9,0x94,0x59,0x51,0xc4,0x3b,0x19,0xf5,0xe5,0xca,0xab },
{ 0x78,0xb3,0x50,0x54,0x3c,0xe9,0xc8,0xe1,0xd7,0x76,0x76,0xc9,0xb2,0x76,0xc7,0x15,0xaf,0x88,0x28,0x03,0x5d,0x5f,0x88,0x24,0xfc,0xf9,0xe6,0x94,0x05,0xfd,0xbd,0x42 },
{ 0xf1,0x6d,0xff,0x85,0x6a,0x22,0xe8,0x2f,0xeb,0xf5,0xbb,0x83,0x65,0x8d,0x58,0xb4,0xc1,0x56,0xcc,0x3c,0x6c,0xcc,0x89,0x63,0x84,0xc7,0x28,0x39,0x91,0xb1,0x9e,0x98 },
{ 0x1e,0xe3,0xa5,0x54,0xc3,0x4e,0xb4,0xc2,0x62,0x88,0x07,0xc4,0xd5,0x00,0xe3,0x77,0xae,0x47,0x01,0x76,0x4b,0xb4,0x53,0x92,0xe9,0x6f,0xac,0x3a,0x55,0x1c,0x35,0x71 },
{ 0xa2,0x07,0x82,0x56,0x9b,0x87,0xcd,0x2e,0xb9,0x0c,0x31,0xfe,0xde,0xcb,0x75,0xd7,0x22,0x8b,0xb5,0x05,0x56,0x6c,0xfb,0x50,0x2b,0x05,0x76,0x4a,0xcc,0x3f,0xd6,0x58 },
{ 0x42,0xad,0x03,0x93,0xb5,0xda,0x22,0xb1,0x78,0xae,0xb9,0x50,0x8c,0xf6,0xa4,0x7d,0x99,0xbe,0xa8,0x23,0xc4,0x8a,0x33,0x93,0xfd,0xda,0x06,0x84,0xd4,0x21,0x97,0x7f },
{ 0xc2,0xae,0x4f,0x23,0x94,0xd5,0x01,0x9b,0x09,0x42,0x52,0x73,0x25,0x20,0xeb,0x60,0x48,0x9e,0x31,0x2b,0x5d,0xad,0xa1,0xdc,0xcb,0xc6,0x7d,0x98,0x26,0x1d,0xe2,0xa0 },
{ 0xd5,0xb2,0x51,0x61,0x01,0xbf,0xe9,0xe8,0x9d,0x91,0x15,0xc7,0x7c,0x80,0x3b,0x81,0x10,0x7e,0xef,0xe4,0x4e,0x99,0x3d,0x18,0x4c,0xfd,0xaf,0x85,0xa5,0xea,0x6b,0x71 },
{ 0x74,0xa7,0x13,0x89,0x08,0xb2,0xa8,0xd5,0x58,0x0f,0xd3,0xf4,0xad,0x8e,0xd7,0x09,0xf1,0x2c,0x50,0xec,0x08,0x79,0x2b,0x29,0x82,0xd2,0x27,0x04,0x52,0xdf,0x51,0xf7 },
{ 0x71,0x51,0xf0,0x74,0xdf,0x59,0x1f,0xeb,0xec,0x49,0x85,0x0b,0x31,0x16,0xa8,0x52,0x49,0x16,0x99,0x02,0x7c,0x5e,0x31,0xeb,0xc4,0x85,0xdb,0xe2,0x44,0x81,0xe6,0x05 },
{ 0x37,0x80,0x6c,0x56,0xd8,0x27,0x68,0x3e,0x4c,0xed,0x40,0x92,0x06,0x0d,0x28,0x01,0x68,0xe8,0xed,0x61,0x22,0xa1,0xf2,0xc1,0xa3,0xcb,0x43,0x0e,0xbc,0xa7,0x0f,0x64 },
{ 0x6a,0x96,0x2e,0x83,0xb0,0x3e,0x80,0x60,0xbb,0xb4,0xc4,0x57,0x58,0xdf,0xbb,0x1c,0x1d,0x91,0xd2,0xbc,0x01,0xa3,0xc9,0xd7,0xcf,0x89,0xbd,0x3d,0x9d,0x94,0x63,0xf7 },
{ 0xb5,0x75,0xbf,0x77,0x58,0x7c,0xca,0x41,0x84,0x0a,0x38,0x14,0x84,0x88,0x03,0x9e,0xed,0xa8,0x01,0x5a,0xc6,0x6a,0xff,0x45,0x46,0x2b,0x72,0x64,0xd0,0x9c,0x44,0xc7 },
{ 0x73,0x99,0x7b,0xcf,0x65,0x8a,0x01,0x85,0xf3,0xc3,0x9f,0x59,0xc4,0xb4,0xe2,0x05,0x0f,0xcd,0xe0,0x16,0x05,0xf3,0x2b,0xf9,0x5a,0xf8,0xb5,0xbe,0xed,0xe4,0x89,0xb4 },
{ 0x5c,0x6d,0xfc,0x0e,0x59,0xa7,0xa8,0x29,0x7b,0x27,0xfd,0x5e,0x34,0xa9,0x9a,0x81,0xfb,0x9a,0x95,0x11,0x4b,0xa0,0xdf,0x61,0x45,0xa6,0xb2,0x45,0xf9,0x49,0x79,0xb9 },
{ 0x2b,0x89,0x90,0x7d,0xa1,0xd5,0x9a,0x25,0xe7,0xd4,0xe9,0xa3,0xd3,0xbb,0x51,0x17,0x8d,0x9d,0x58,0xf0,0xe1,0x02,0xfc,0x7d,0x5b,0x08,0x2d,0xe9,0x85,0xcc,0x22,0xd4 },
{ 0xf6,0x7c,0x99,0x9e,0x6f,0x90,0x1a,0x66,0x0e,0xb8,0x4a,0x9d,0x19,0x5f,0x94,0xae,0x4c,0x4f,0xa1,0x15,0x3a,0x7e,0x42,0x31,0x00,0x60,0xee,0xca,0x82,0x91,0x07,0x9d },
{ 0x95,0x58,0x02,0x74,0xaa,0x2b,0xc5,0xec,0x0c,0x4c,0xf3,0x1b,0x06,0xf1,0x16,0x7d,0xe3,0x14,0xae,0x2f,0x2d,0x28,0xe2,0x79,0xea,0x91,0xfc,0x99,0xeb,0x49,0x21,0x22 },
{ 0x95,0x8e,0x98,0x85,0xea,0xae,0xc9,0xd9,0x75,0x82,0xda,0x5a,0xfe,0x67,0x05,0xef,0x71,0x2b,0xa5,0x26,0xf0,0x80,0x8a,0xa0,0xcb,0x50,0x35,0xb7,0x14,0x7d,0x0f,0x2c },
{ 0x4a,0xcd,0xcd,0x00,0x9b,0x44,0x69,0x84,0x93,0x91,0xa6,0xa2,0xda,0x0a,0x60,0xf2,0x48,0xf3,0xd8,0xb5,0x34,0xab,0xfe,0x15,0x87,0x71,0x51,0xcc,0x8e,0x49,0xda,0x03 },
{ 0x14,0xc4,0x8a,0xc1,0xa5,0x56,0x53,0xd1,0xb8,0x44,0x9a,0xf2,0xd2,0x92,0x4b,0x36,0x4c,0xbf,0x99,0xb7,0x97,0xae,0xa4,0x06,0x8c,0x2a,0xda,0x59,0xf4,0x7e,0xba,0x3d },
{ 0x42,0x99,0x37,0x20,0x4a,0xbd,0xd8,0x99,0xfe,0x66,0x07,0x41,0x81,0x50,0x82,0x1f,0x90,0x49,0x06,0x86,0x7c,0x65,0xa5,0xd3,0xed,0x74,0xe4,0xdf,0x87,0xf1,0x08,0xff },
{ 0x5c,0x7a,0x52,0x28,0xd7,0x48,0xa5,0x2b,0xf9,0x83,0x7c,0xea,0x9e,0xe2,0x97,0x3c,0x7b,0x43,0x0a,0xc7,0x71,0x4b,0x0d,0x5c,0x7a,0x1a,0x75,0xbf,0x69,0x02,0x4d,0xe0 },
{ 0xb9,0xa7,0x42,0x1a,0x14,0xfb,0x4c,0x3c,0x4c,0xc1,0x38,0x4e,0xce,0x37,0xec,0x25,0x82,0xcf,0x5a,0x69,0x39,0x75,0x5b,0x24,0xbe,0x1a,0xb5,0x72,0x5a,0x97,0xa5,0x3b },
{ 0x25,0xf3,0xdc,0x5a,0x51,0x2d,0xce,0x8f,0x85,0xf4,0xe7,0xba,0x2b,0x5e,0x5b,0x0c,0x0f,0x97,0xd8,0x43,0xaa,0xd6,0x26,0x7b,0xdb,0xae,0xde,0xcf,0xf7,0x9a,0x28,0xe1 },
{ 0x91,0xab,0x59,0x75,0x35,0xcc,0x44,0x74,0x2d,0x20,0x20,0x73,0xa0,0xe2,0xe1,0xc9,0x9b,0x29,0x98,0x15,0x35,0x0e,0xc7,0xa0,0x16,0x85,0x6f,0x29,0xed,0xbf,0x60,0x19 },
{ 0xea,0xdb,0x53,0x3f,0x6e,0xd4,0xec,0x84,0x96,0xe4,0x21,0xe5,0x0f,0x79,0x0b,0x23,0x5c,0x1b,0x31,0xc5,0x24,0x6f,0x7a,0x08,0x2d,0xc3,0x0c,0xc0,0x67,0x63,0x9d,0x77 },
{ 0xa6,0xb2,0xc4,0x46,0x42,0xc9,0xef,0x9f,0x9c,0x3d,0x65,0x62,0x65,0xba,0xb3,0x48,0xc0,0x47,0xe9,0x72,0xe7,0x26,0xb8,0xce,0x31,0xe3,0x22,0xe3,0x1d,0xb0,0xf0,0x95 },
{ 0x5a,0x62,0x5f,0xff,0xc2,0xf4,0x14,0xf7,0xc0,0xc3,0xa4,0xe3,0xb8,0xae,0x9f,0xb3,0x8d,0x93,0xfd,0xcf,0x2d,0x31,0xd8,0x72,0xe6,0x86,0x38,0xfa,0x96,0x12,0xc6,0xe2 },
{ 0x66,0x9e,0xc8,0x1d,0x99,0xb4,0x75,0x1e,0x83,0x30,0xe3,0x83,0x6e,0x24,0x5e,0x5e,0x0d,0xff,0x91,0x9a,0x54,0xd8,0xca,0x73,0x14,0x22,0x30,0x89,0x3b,0x67,0x72,0x9a },
{ 0xca,0xb0,0x18,0x19,0xe9,0xf9,0x03,0xfa,0xa4,0xe9,0xf6,0x05,0xbc,0xf6,0xd2,0xd9,0x0b,0xb3,0x22,0x4d,0xe5,0x79,0x20,0x92,0x5a,0x18,0xdb,0x2f,0xd2,0xfc,0x1d,0xc3 },
{ 0xe8,0x52,0x4f,0x4f,0x3f,0xd3,0x97,0xb6,0x31,0xc1,0xbf,0xfb,0x06,0xd5,0x2a,0xba,0x84,0x27,0xb1,0x3c,0x5d,0xdc,0x80,0x26,0x6f,0x37,0x56,0x45,0x3b,0xa7,0x07,0x32 },
{ 0x4b,0x6c,0x43,0xd1,0x3d,0x7e,0xa0,0x37,0xef,0xd6,0x54,0xfa,0xb6,0x92,0x3f,0x20,0x1b,0x1a,0x9c,0x92,0xc4,0x7e,0x13,0x21,0xb6,0x17,0xda,0xa7,0x1a,0x55,0x94,0xa5 },
{ 0xe6,0xeb,0xd1,0x66,0xfd,0x21,0x47,0x1b,0x8b,0x90,0x4f,0xa1,0x9b,0xfb,0x4a,0xab,0x30,0xe1,0xba,0x63,0xc0,0x2a,0xde,0xc5,0xb0,0x96,0x61,0x89,0x4e,0x9c,0x42,0x7d },
{ 0x5b,0x94,0xd4,0x90,0xd9,0x6f,0x85,0x73,0x22,0xd8,0x1c,0x55,0xbd,0x31,0xe1,0x76,0xb3,0x3d,0x1a,0xc8,0x26,0xa1,0xf1,0xf1,0x4e,0x65,0x2f,0xdb,0x6a,0xc3,0xd0,0x99 },
{ 0xee,0x07,0x3e,0x91,0xdb,0x93,0x0e,0x55,0x05,0x9f,0xe9,0xb5,0x39,0x94,0x82,0x55,0xa0,0xc2,0xd8,0x89,0x4b,0xe5,0x95,0xd4,0xee,0xcb,0x57,0xa5,0xca,0xa5,0xd9,0x34 },
{ 0x19,0xf3,0xe7,0x36,0xed,0xc8,0x88,0x12,0x1c,0x0e,0xf4,0x84,0xd0,0x77,0x84,0x50,0x5c,0x95,0x35,0x9a,0xcb,0x24,0xa4,0x1a,0xea,0x54,0xd3,0xcf,0x46,0x38,0x5a,0xc8 },
{ 0x17,0x27,0xba,0xae,0xca,0x0d,0xc3,0x60,0xbd,0x14,0x0c,0x61,0x83,0xc7,0x8b,0x03,0x5b,0xe7,0x19,0x91,0x39,0x25,0x4b,0x3e,0x38,0x83,0xf7,0x9d,0xc3,0xe6,0x73,0x74 },
{ 0x68,0x8a,0x1e,0x32,0x49,0x73,0xe7,0xa5,0xeb,0xe9,0xbb,0x41,0x53,0x74,0x11,0xcf,0x1c,0x4a,0x24,0xa7,0xcf,0x1c,0x47,0x3d,0xec,0xac,0x1a,0x8d,0x4a,0x7d,0x2f,0x18 },
{ 0x5d,0x77,0x2e,0x7a,0xb5,0xd2,0xc2,0x31,0x0b,0xd6,0xa7,0xc9,0x78,0x4a,0xc1,0xff,0x67,0xda,0x44,0x61,0x63,0xa0,0xa9,0x7e,0x67,0x0f,0x80,0x00,0xa0,0xa8,0x3e,0xa3 },
{ 0x0f,0x85,0xd7,0x91,0x3e,0x9d,0x58,0xf0,0xcd,0x29,0xba,0x4e,0xd5,0x9e,0xbd,0x65,0xbe,0x7f,0x09,0x54,0x22,0xf4,0x93,0x65,0x05,0x06,0x90,0xa2,0xb2,0x8d,0x3a,0x46 },
{ 0x99,0xb2,0xb0,0x99,0xe2,0x64,0x7c,0x96,0x2f,0xae,0x11,0xe9,0x8a,0x8b,0x4e,0x43,0x96,0x30,0xd4,0xcc,0xc4,0x20,0x75,0xa6,0x3a,0x05,0x5c,0xde,0x91,0x4d,0x0e,0xe5 },
{ 0x53,0x86,0xf9,0xbc,0xa1,0xd1,0x30,0xeb,0x7d,0x40,0x8d,0x79,0x28,0xd5,0xe2,0xe9,0x58,0x30,0xe5,0x47,0xa3,0x45,0xe2,0x43,0x90,0x75,0x5a,0xd5,0x67,0x3f,0x9e,0x89 },
{ 0x38,0xe5,0x8f,0x84,0x6f,0x03,0x10,0x1b,0x12,0x02,0x38,0x92,0x30,0xfc,0x9e,0x17,0xc7,0xf3,0xb8,0x14,0xd0,0xa6,0x88,0x03,0x02,0xf8,0x4a,0x73,0xdf,0xa9,0x0b,0xec },
{ 0xb7,0x75,0xb9,0x8e,0x0a,0x0e,0xf8,0x4e,0x09,0xd1,0xac,0x5d,0xf3,0x1f,0x95,0x39,0x02,0xdb,0x56,0x50,0xb2,0xef,0x68,0x39,0x04,0x02,0xc7,0xe0,0x24,0x55,0x55,0x91 },
{ 0xda,0x8e,0x10,0x24,0x67,0x0c,0xe0,0xcf,0x31,0x62,0x79,0xcc,0x88,0xe4,0x7e,0x70,0x46,0x67,0x1a,0xc4,0x73,0xfa,0x0a,0xeb,0xd9,0x38,0x1e,0xd9,0xb1,0xdd,0x6e,0x96 },
{ 0xf0,0x3c,0x97,0x8a,0x21,0x86,0xc6,0xb8,0x64,0xb4,0x94,0x2e,0x5a,0x82,0x4c,0x90,0xa4,0xc8,0x40,0x82,0x01,0xa2,0x09,0x44,0x7d,0x75,0x08,0x77,0x84,0x76,0x3f,0x4a },
{ 0x1f,0x55,0xbf,0x6a,0x0b,0x48,0x7b,0xee,0xde,0xc6,0x25,0x0f,0xc1,0x89,0xa8,0x08,0x56,0x0e,0xf1,0x1c,0x9a,0xfd,0x12,0xe9,0x19,0xd0,0x80,0xcb,0xc0,0x37,0xf5,0x4b },
{ 0x9f,0xa7,0x07,0xc4,0x3c,0x4c,0x65,0x1a,0x74,0x1a,0xde,0x42,0xc1,0x93,0xb4,0x4a,0x8c,0xbd,0x6c,0xe0,0x7e,0xd6,0x03,0x1f,0x3f,0xb1,0x19,0xdb,0xc6,0xc8,0x44,0x4a },
{ 0x98,0x15,0xf7,0x34,0x7c,0xb6,0x11,0xf1,0x2c,0xf4,0xcb,0xa4,0xbf,0xf7,0xf0,0x56,0xf8,0x7b,0x7d,0x25,0x53,0x91,0x8a,0x0e,0x8c,0x2a,0x32,0xb3,0x44,0x97,0x7f,0x64 },
{ 0x84,0xf3,0x0d,0x7a,0x9e,0x10,0x67,0xbc,0x34,0xb0,0x24,0x56,0x0d,0x2d,0x71,0xf6,0xb3,0x91,0xec,0x3d,0xce,0x76,0x29,0x7d,0x68,0x6b,0x6c,0xc5,0xc0,0x70,0x61,0xd0 },
{ 0xd3,0x84,0xbc,0xcb,0x4d,0x12,0xa0,0x35,0xf8,0xf5,0x99,0xca,0x26,0xb3,0x0c,0x15,0xa6,0x95,0x50,0x41,0x58,0x33,0x65,0x71,0x4e,0x11,0x4b,0x92,0xce,0x24,0x79,0x9a },
{ 0xce,0x51,0x78,0x8b,0x24,0x74,0x71,0xd7,0xa0,0xdd,0x98,0x8a,0x5d,0xdd,0xcb,0x5c,0x91,0xf7,0x29,0x86,0x73,0xe8,0x11,0xb6,0x49,0xe0,0x1e,0x33,0x32,0xf7,0x0d,0x98 },
{ 0xf0,0x76,0xa8,0x51,0x49,0xd9,0x21,0x58,0x6f,0x39,0xad,0x7b,0x4c,0x6f,0x9d,0x8a,0x55,0x4f,0xc4,0x19,0x33,0xe3,0xbf,0x2d,0x6e,0xb0,0x5a,0x53,0x4f,0x83,0x89,0x79 },
{ 0x96,0xbc,0xbd,0x78,0x73,0x80,0x9e,0xe8,0x2f,0x33,0xea,0x0a,0xe4,0xb5,0xf7,0x99,0x5c,0xe0,0x5c,0x15,0x7a,0x5f,0xca,0xb1,0xe0,0x73,0xe3,0x2e,0x42,0x07,0x89,0x55 },
{ 0x1e,0x7e,0x37,0x18,0x89,0xda,0x22,0xb1,0x2d,0x1e,0x0b,0xad,0x04,0xcb,0xf1,0x6d,0xdb,0xd1,0xbe,0xa8,0x55,0x6a,0x11,0x35,0xb3,0x95,0x9e,0xf6,0x9c,0xd7,0x11,0xb7 },
{ 0xf7,0xa7,0x17,0x74,0x4a,0xca,0xdc,0x16,0x15,0xe4,0x05,0x75,0xc3,0xd2,0xb4,0xc6,0x66,0x60,0xa2,0xb3,0x14,0x87,0x06,0x7f,0x51,0x5d,0x2c,0x18,0x25,0x50,0xb9,0x2d },
{ 0xa4,0xb7,0xbd,0xb9,0xf3,0x4e,0x62,0x6e,0x81,0x7a,0x94,0xf5,0x7d,0x8a,0xad,0x13,0xf1,0x47,0x1a,0xf1,0x77,0xfa,0xff,0x80,0xf7,0x43,0x02,0x3b,0x90,0xec,0x65,0x5b },
{ 0x6c,0xfe,0x85,0x20,0xed,0x21,0x34,0xb4,0xc1,0xd0,0x4b,0x34,0x7f,0xe2,0x29,0x07,0xa0,0x40,0xfa,0xf5,0x33,0x4f,0xa4,0xba,0x10,0x0f,0xaa,0x27,0x81,0xfd,0x47,0xc2 },
{ 0x92,0x6e,0xf0,0x70,0x94,0x84,0x76,0x9d,0xef,0x1a,0x8e,0x00,0x8c,0xbd,0x6d,0xea,0xd2,0x12,0x9f,0xba,0xeb,0xf2,0x6c,0x44,0x04,0x45,0x7b,0xaf,0x5c,0xc9,0x52,0x44 },
{ 0xc2,0xd4,0xbc,0xa8,0x7c,0x14,0xec,0x11,0x30,0xe0,0x33,0xf0,0xf2,0xef,0x9c,0x64,0xbf,0x13,0xd7,0xf8,0x11,0x23,0xd4,0x0c,0xf6,0x52,0x45,0x15,0xf6,0x62,0x7b,0x18 },
{ 0xcf,0xef,0x87,0xc2,0xf1,0x47,0x2d,0xc9,0x6e,0x5e,0x5e,0x91,0xad,0x6e,0xb6,0xe5,0x53,0xd9,0x60,0x08,0xa0,0x11,0x45,0xc9,0xce,0x2e,0xd3,0xef,0x77,0xa3,0x54,0xed },
{ 0x88,0x06,0x94,0xbc,0xcb,0x14,0xaa,0x44,0x7d,0x83,0xe6,0x5b,0xa1,0xc8,0x44,0x5d,0x11,0x4c,0x86,0xe6,0x08,0x55,0x4e,0x5e,0xf7,0x6c,0xd8,0xc4,0x0d,0xa2,0xd4,0x51 },
{ 0x04,0x81,0xdd,0xce,0xcc,0x70,0xe5,0x99,0x77,0xdd,0xec,0x44,0xa2,0x9c,0x9c,0x06,0x13,0x6e,0x09,0x38,0x88,0x64,0xae,0x7a,0xb7,0xb0,0x2d,0xa5,0x0a,0x6b,0xed,0xc7 },
{ 0x97,0x9a,0xd4,0x8e,0x89,0x25,0xb8,0xfe,0xc4,0xf1,0xa7,0x69,0x2d,0xdf,0x81,0x3d,0x61,0xed,0x83,0x2a,0x93,0x37,0x82,0x61,0xfd,0xb1,0x1c,0xfa,0x57,0x5e,0x50,0x85 },
{ 0x7b,0xdc,0xf0,0x0f,0x7f,0xea,0x39,0xc8,0xd2,0xfa,0xf4,0x93,0x8e,0x43,0xab,0xd8,0xbc,0x23,0x99,0xc0,0x56,0x1b,0xd0,0x7a,0x1d,0xd1,0x54,0x9f,0x32,0xa7,0x24,0x52 },
{ 0xe4,0xa8,0x2a,0xf6,0xf2,0xfe,0xfa,0xd7,0x0a,0xd0,0x98,0xa1,0x87,0x13,0x10,0x9f,0xb8,0x28,0x52,0x45,0x0e,0x6d,0x2a,0x2f,0x80,0x25,0x67,0xa6,0xe7,0xeb,0x2b,0xed },
{ 0xe7,0x02,0x16,0xac,0xfd,0xbb,0x4a,0xf5,0xab,0x79,0x0c,0xf0,0x90,0x3b,0x9c,0x11,0x23,0xd0,0x19,0x1b,0xc7,0x1a,0x3d,0x95,0xfc,0xea,0xc5,0x79,0xcc,0xad,0xff,0x98 },
{ 0x53,0xeb,0xc3,0x32,0x43,0x99,0x60,0x8f,0x84,0xa1,0x1a,0x45,0x49,0x75,0x9b,0x85,0x60,0x7c,0x9c,0x98,0x74,0x3b,0xe9,0x3a,0x2e,0x5e,0x60,0xf3,0x20,0xfd,0x39,0xbf },
{ 0x5b,0xd6,0x9c,0xfa,0x9f,0xb1,0xa3,0x61,0x03,0x16,0xa3,0x98,0x43,0xd7,0x57,0xda,0xca,0x5a,0xa0,0x27,0xaa,0x82,0xf9,0xf7,0x91,0xb0,0x27,0x05,0xab,0x11,0x28,0x60 },
{ 0x40,0xc5,0x73,0xb2,0xf2,0x1a,0xef,0xf6,0x30,0x87,0x91,0xb2,0x85,0x78,0x90,0xf5,0x12,0x39,0x16,0x39,0xea,0xea,0x5e,0x6f,0x7f,0xed,0x1e,0x34,0xcb,0x3d,0x70,0xdd },
{ 0x0b,0x45,0xd7,0xf7,0x66,0x37,0xee,0x67,0xd2,0xcf,0x56,0xd1,0xb8,0x86,0x34,0x01,0x3b,0x83,0xeb,0x3a,0x37,0xb0,0xc9,0x7e,0x07,0x21,0xcc,0x73,0xd2,0x2b,0x11,0x58 },
{ 0xa8,0xa9,0xae,0x42,0x2c,0x2c,0x28,0xd3,0x76,0xd4,0xae,0x15,0xe1,0x45,0x47,0x22,0x15,0x6e,0x13,0x68,0xbc,0xfe,0xa1,0xf4,0xd2,0xbf,0xa5,0x23,0x17,0xb9,0xcf,0x2b },
{ 0xe7,0x64,0x3a,0xcc,0x8a,0xa8,0x19,0x98,0x0b,0xda,0x04,0x5c,0x7c,0xdc,0x8e,0x7a,0x61,0x69,0xb3,0xc5,0x5c,0xc9,0x30,0xd4,0x32,0xaa,0x50,0xd6,0xae,0x41,0x31,0x96 },
{ 0xae,0xeb,0x3f,0x45,0xda,0x52,0x74,0xe0,0x62,0x03,0xc4,0xed,0x88,0xbb,0xdc,0x6e,0x68,0x7a,0xb1,0x2a,0x02,0x41,0x22,0x72,0x63,0x3f,0xe3,0x6b,0x91,0x0b,0xc7,0x32 },
{ 0x6f,0xd0,0x4f,0xe9,0xb7,0x88,0x20,0xd7,0x5a,0x08,0x72,0x20,0x94,0xd8,0x0e,0x0a,0x52,0x57,0x48,0x38,0x7a,0xf5,0x26,0x2f,0x3c,0xcf,0x4f,0x61,0x27,0xcc,0x42,0xd0 },
{ 0xf8,0x35,0x4d,0xf2,0x7f,0xda,0xf3,0xd6,0x7c,0x9d,0xf3,0xf6,0x9a,0x3a,0x9f,0x27,0x58,0xf2,0x8f,0xad,0x77,0x1e,0x4b,0xf3,0xb9,0xce,0x58,0x4f,0x92,0x7f,0x19,0x3a },
{ 0x22,0x98,0x50,0x54,0x56,0x0d,0x1c,0xba,0xf9,0x5e,0xd9,0x7d,0x05,0xb6,0xe4,0x47,0xa8,0x5d,0x4a,0x90,0x85,0x5c,0x63,0x24,0xb8,0x4c,0x47,0xe0,0x72,0x45,0xd5,0x40 },
{ 0xeb,0x0e,0xfb,0x73,0xd0,0xb4,0x44,0x4f,0xec,0x6d,0x97,0x60,0x5d,0x98,0xa9,0xa9,0x45,0xbf,0xcd,0x99,0xf0,0x06,0x37,0x72,0xd3,0x27,0xb2,0x45,0x2b,0x19,0x2e,0xbf },
{ 0x3c,0x2b,0x34,0x4b,0x38,0x49,0xb1,0x21,0x11,0x09,0x7b,0xdf,0x86,0x52,0x00,0xfe,0x45,0x39,0x1f,0x9d,0x42,0x54,0xe5,0xca,0x65,0xde,0x9d,0xd6,0x92,0xe2,0x71,0x32 },
{ 0x29,0x71,0xb2,0xfd,0xb6,0x4b,0xb2,0xa5,0x01,0xf7,0x34,0x6a,0x91,0xa9,0x72,0x54,0x0a,0x59,0x09,0xa4,0x13,0x5b,0x18,0x4a,0x50,0x3d,0x21,0x9e,0xb4,0x07,0xe6,0xac },
{ 0x9f,0x7d,0x41,0x12,0xf4,0x8b,0xfe,0x0b,0xbd,0xd0,0xd2,0xfd,0x8f,0x6c,0xaa,0x7e,0xee,0xb8,0xc3,0xba,0x14,0x39,0x81,0x30,0x13,0x20,0x57,0xac,0xe4,0x29,0x88,0x38 },
{ 0xc1,0xc7,0xdb,0xec,0x7e,0xc0,0xa5,0xcf,0xe1,0x02,0x11,0x29,0x9d,0x8c,0x10,0xde,0xd7,0x9c,0x18,0xf7,0xc1,0xd0,0x4c,0xbe,0xab,0x06,0x92,0x4d,0x61,0x7c,0xb7,0x77 },
{ 0x36,0x18,0x77,0x8d,0x0d,0xa7,0xdc,0x1d,0xc8,0xb0,0x24,0xca,0x05,0xc1,0xa1,0xd1,0x27,0xd3,0x56,0x3b,0x80,0xb1,0x88,0xa2,0x80,0x22,0xc1,0x9c,0xcc,0xb4,0x87,0x89 },
{ 0xa3,0xfd,0x15,0xcf,0xfa,0x65,0x0f,0x79,0x61,0xac,0x96,0x21,0x08,0xd7,0x05,0x20,0xaa,0x40,0xe5,0xfd,0x90,0x8c,0xba,0x74,0x2d,0x8b,0x39,0x26,0x03,0x27,0xf2,0xcc },
{ 0xfe,0x32,0x56,0x3a,0xd4,0x80,0xbc,0x47,0x14,0xf7,0x98,0xdc,0x3b,0x4b,0x44,0x82,0x47,0x1c,0xad,0xac,0xd1,0xc4,0xe0,0x51,0xea,0x2b,0xff,0x6f,0xc7,0x63,0xfc,0xea },
{ 0x1d,0x06,0xee,0x3b,0x90,0xb4,0xd1,0xf4,0xe7,0x84,0xd9,0xe5,0xd3,0xd1,0x72,0x04,0x09,0xbe,0xa0,0x2f,0x9c,0x95,0x4a,0x1f,0x8f,0xbe,0xc6,0xeb,0xf0,0xa1,0x56,0x8d },
{ 0xa9,0x7d,0xa3,0x1c,0x31,0x5c,0x1f,0x9e,0xcc,0x90,0x0a,0xe5,0x7d,0xa7,0x21,0x1f,0x55,0x71,0xc2,0xee,0x13,0x88,0x77,0x42,0x83,0xda,0x51,0x5d,0x12,0xa4,0xa6,0x7a },
{ 0xb5,0x5c,0xee,0x2f,0x8c,0x1b,0xd9,0x75,0x7b,0x91,0xa4,0x6e,0xe0,0x62,0x97,0x72,0x3a,0x12,0x6c,0xea,0x82,0x2c,0x71,0xef,0xb8,0x00,0xf3,0xd4,0xce,0xc3,0x16,0xf2 },
{ 0xb1,0xcc,0x9f,0xc5,0xc5,0x6a,0x1d,0x1f,0x13,0xa8,0x9c,0x49,0x5a,0x2c,0x24,0x62,0x56,0x25,0xe6,0x76,0x35,0x15,0x7b,0xf1,0xc2,0x04,0xbf,0xaa,0xa7,0x24,0x2c,0xa1 },
{ 0x9e,0x75,0x93,0x01,0x38,0x1f,0x44,0x14,0xcd,0xec,0x40,0x06,0xae,0x0c,0x78,0x6a,0x83,0xea,0x92,0x2e,0x95,0x51,0x2f,0x3d,0x97,0x5c,0x00,0x75,0x96,0x84,0x65,0x3e },
{ 0x55,0xc8,0x41,0xb7,0x13,0x62,0xb8,0xbe,0x5f,0x8f,0x1c,0xb1,0x78,0x0e,0xfd,0xf3,0x59,0xed,0x35,0xc1,0xd4,0x4a,0x21,0x0b,0xf0,0xf5,0xad,0xae,0x75,0x70,0x72,0x8d },
{ 0x93,0xc4,0x0c,0xdf,0xd4,0x07,0x09,0xda,0x3e,0x4c,0x05,0x57,0xa8,0xc7,0x66,0x22,0x7a,0xf9,0xec,0xa3,0x4c,0xce,0xd7,0xd1,0x7a,0x4b,0xb0,0xe2,0x0e,0x09,0xdd,0xf9 },
{ 0xee,0xe7,0x06,0x4b,0xfa,0x70,0xab,0xdd,0x7c,0x66,0xb4,0x4b,0xf4,0xbc,0x5e,0x6b,0x9c,0x62,0xa2,0xcb,0xa1,0x25,0xaf,0x0c,0x41,0x3d,0xcc,0xf5,0xab,0x81,0xab,0x83 },
{ 0xfb,0xfc,0x15,0xcf,0x61,0x1b,0xe9,0xe4,0xa5,0x8b,0x83,0x60,0xf7,0x66,0xfc,0xd0,0x8f,0xe7,0xea,0xf1,0x20,0x3e,0x25,0x8f,0xa1,0xf3,0xb4,0xa8,0xcf,0x0a,0xd3,0x8e },
{ 0x9a,0x02,0xd1,0x18,0xa3,0x4e,0xd3,0x60,0x86,0x3e,0xd4,0x12,0x21,0x9f,0x66,0xe4,0x53,0x36,0xd9,0xd5,0xf3,0x72,0xff,0x51,0x7a,0x2f,0x06,0x2c,0x5f,0x8d,0x09,0xd9 },
{ 0x65,0xe1,0xc8,0x38,0xa7,0x49,0xb4,0x9c,0x76,0x08,0x76,0x70,0x25,0x3e,0x3f,0x8e,0xa4,0xe0,0x2e,0x45,0x85,0x7d,0x43,0xd5,0xbb,0x7a,0xb6,0x8e,0x9d,0x1d,0x0b,0xce },
{ 0xe6,0x58,0x44,0x6d,0x17,0x8a,0x23,0x11,0x01,0xef,0x2a,0xf7,0x42,0xb2,0x78,0xc7,0xef,0xd5,0x8b,0x7a,0x50,0x0c,0xf5,0x10,0xf7,0xd4,0x93,0xa2,0x5e,0xeb,0x53,0xf5 },
{ 0x3f,0x4c,0x56,0x1d,0xdf,0x4a,0x80,0xf0,0x6d,0xeb,0x9a,0xbd,0x62,0xab,0xcc,0xe6,0xf7,0x30,0x78,0x4e,0x5a,0x8d,0xe8,0xc4,0xa2,0xef,0x2f,0xf4,0x16,0x00,0x4f,0x83 },
{ 0x16,0x8f,0x76,0x89,0x2c,0x7d,0xe3,0x99,0x52,0x8e,0x84,0x62,0x9d,0xf1,0x97,0x3d,0xd5,0x1b,0x91,0x20,0x93,0x31,0x4a,0x22,0x35,0x83,0xa1,0xda,0x4c,0x94,0xcd,0xd9 },
{ 0xc1,0x8a,0xea,0xe8,0xfa,0xc9,0x96,0x79,0x97,0x82,0xd2,0x9f,0xf7,0x98,0x7a,0x4e,0xae,0x8d,0xd1,0x0c,0xd4,0xad,0x37,0xbc,0xe4,0x8b,0xdc,0x2e,0x1d,0x0c,0xcf,0x84 },
{ 0x0d,0x68,0x6c,0xd7,0xfe,0x21,0x80,0xb0,0xf6,0x64,0x9a,0xc6,0x1f,0xc2,0x75,0x2f,0xb6,0x43,0x25,0x28,0x0b,0x49,0x86,0xa6,0xba,0x84,0x8e,0x18,0x31,0x0d,0x25,0xfc },
{ 0x42,0x1f,0xfe,0xab,0x04,0x33,0xe3,0x9e,0x85,0x7c,0xf6,0x9f,0xa7,0xbd,0xf4,0xbe,0x80,0x0c,0xf7,0x98,0xa0,0xf5,0x60,0x28,0x04,0xd8,0x6e,0x89,0x20,0xb7,0x77,0x32 },
{ 0xbd,0x48,0xef,0x70,0xe8,0x6a,0xba,0xd8,0x22,0xa1,0xfa,0x75,0xc6,0x55,0xf7,0x16,0xad,0xd0,0xee,0xa9,0xb3,0x73,0x7f,0x0f,0x62,0xc5,0x11,0x7d,0xf9,0xb9,0x1b,0x03 },
{ 0x25,0x47,0x9a,0x84,0x95,0x5e,0x2e,0x74,0x62,0xac,0x89,0x22,0x0b,0x3f,0xfa,0x0b,0x67,0xa4,0x5c,0x24,0xbe,0x03,0xc0,0xbb,0x37,0x91,0xe1,0x82,0xb0,0x73,0xe6,0x52 },
{ 0xa8,0x5a,0x28,0x7b,0xaa,0x73,0xf1,0x97,0x65,0x1c,0xe3,0x63,0x95,0x45,0xa4,0x31,0x3f,0x29,0xd7,0x40,0x12,0x5a,0xce,0xc5,0x87,0xe3,0xfd,0x7b,0x7c,0xba,0x8e,0xa8 },
{ 0xe2,0x7b,0x0e,0xb8,0xcb,0x10,0x7c,0x84,0x3d,0x7d,0x35,0x90,0x8b,0x76,0x2b,0x56,0x8b,0x64,0x12,0xbb,0x99,0x80,0xaf,0xe1,0xac,0x7e,0xe8,0xfc,0x0b,0x4c,0x85,0x8b },
{ 0x82,0x71,0x1c,0x1f,0x5a,0x94,0xab,0xb1,0xde,0xa2,0xfc,0xae,0xbc,0xf8,0x28,0xe4,0x79,0xc6,0xe2,0xb4,0xc7,0x40,0x5d,0x98,0xee,0xf6,0x7f,0x2c,0x55,0x86,0xd0,0xd1 },
{ 0x36,0x2f,0x7e,0x46,0x61,0x70,0x2c,0x8c,0xa6,0x99,0xba,0x90,0xc9,0x3e,0x8f,0xa7,0xe9,0xa7,0xdf,0xa0,0x1f,0xb3,0xe2,0x8c,0xc1,0x09,0x96,0xb0,0x46,0xf9,0x33,0xeb },
{ 0x75,0x05,0x92,0x46,0x79,0x45,0xa9,0x44,0x32,0x19,0x5d,0x31,0xa0,0x6a,0x54,0x27,0xb8,0x6d,0x1e,0x72,0xd4,0x43,0xa3,0xb9,0xf1,0xb6,0x0b,0xa7,0x68,0xc8,0x1c,0xc2 },
{ 0xd4,0x41,0xa2,0x7a,0xcb,0xa1,0x7b,0xa5,0xf6,0x26,0xdc,0xb1,0xba,0x90,0x02,0x72,0x0a,0xc4,0xc4,0x31,0xd5,0x97,0xcc,0x64,0x7e,0xdf,0x5f,0xb1,0xd8,0x72,0x2b,0x64 },
{ 0x2a,0xe1,0xb5,0x7b,0x36,0x74,0x59,0xc6,0xcb,0x95,0x90,0x2e,0xd3,0x0d,0xc3,0x9c,0x28,0xed,0x26,0x35,0x61,0x3b,0x6b,0x39,0x84,0x03,0x61,0x2b,0x57,0xb7,0x78,0x70 },
{ 0x36,0x0b,0x62,0x08,0x74,0xee,0xec,0x6a,0x2f,0xfc,0xce,0xe2,0xbf,0x4d,0x41,0x79,0x82,0xa0,0xc6,0xf8,0xd3,0xc0,0xd4,0x17,0x48,0x5a,0xc2,0x30,0x64,0xb7,0x93,0xf9 },
{ 0x19,0xdc,0xae,0xee,0xe9,0xe9,0x5f,0xad,0x0f,0x44,0xff,0xcd,0xc3,0x96,0x49,0x9c,0xaf,0x22,0xf6,0xc3,0x5a,0x94,0x5e,0x2f,0x9c,0xd2,0xcb,0xef,0x3a,0xcc,0x98,0x20 },
{ 0x71,0x75,0xed,0xc3,0xee,0xe6,0x9d,0x36,0x5f,0x2a,0x96,0xa4,0x05,0xf7,0x35,0xa4,0xfc,0x4c,0x54,0xe5,0x0e,0xcc,0xc9,0x0a,0x45,0x34,0x8d,0x8b,0xb8,0xee,0x80,0xdc },
{ 0x27,0x8d,0xab,0x78,0xd2,0xfc,0x8b,0x6f,0xe7,0x46,0x7d,0xe2,0xbe,0x08,0xd5,0x5d,0xea,0x03,0xfb,0xe9,0xc3,0x07,0xd5,0x32,0x62,0xcd,0x02,0xc0,0xc4,0x68,0x5d,0x8b },
{ 0xc1,0x63,0xa1,0x79,0x05,0x0b,0x94,0x4c,0xaa,0xdf,0x61,0xaa,0x7a,0x43,0x57,0x15,0x16,0x2e,0xd4,0x93,0xef,0x72,0xbb,0x63,0x32,0x4e,0x8d,0x16,0xb2,0x40,0xc4,0x8a },
{ 0xe8,0x91,0x7d,0xde,0xb2,0x18,0xb4,0x8f,0x75,0xd8,0x14,0x00,0xc6,0xfd,0xa5,0x99,0x71,0x4f,0xa6,0xd5,0x62,0x37,0x10,0xd9,0x92,0x47,0x9c,0xb5,0x41,0x38,0xe1,0x88 },
{ 0xdb,0x4d,0x67,0xee,0xbe,0xc4,0x37,0xa1,0xb1,0xc8,0xfa,0x2f,0xee,0xea,0xf3,0x63,0xec,0x7c,0x7c,0x83,0x09,0x3a,0x3d,0xfb,0xa9,0x79,0x31,0x24,0xe7,0x33,0xcf,0xdb },
{ 0x0c,0x09,0x95,0xd3,0xd5,0x20,0xa3,0xb5,0x65,0x15,0xfc,0x53,0x58,0x92,0x59,0x87,0x87,0x43,0xce,0x67,0x8c,0x1f,0xb2,0xc5,0x5f,0x2a,0xb6,0x92,0x07,0x85,0xa5,0x00 },
{ 0x0e,0xc4,0x67,0x33,0x19,0x47,0xd3,0x6f,0x03,0x23,0x59,0x0d,0x04,0x7f,0xb0,0x8b,0x4d,0x32,0x8a,0xe2,0x63,0xaa,0xa1,0x58,0x72,0x2e,0xde,0x50,0x18,0x6a,0x61,0x82 },
{ 0xb1,0xb8,0x71,0x68,0xbe,0xb3,0x97,0x51,0xf6,0x26,0x01,0xd1,0xbb,0x1c,0x97,0x7f,0xe8,0x45,0xfb,0xe1,0xd4,0x71,0x29,0x36,0x88,0xa2,0xb4,0xc2,0xfb,0x56,0x2b,0xc9 },
{ 0x02,0x63,0xbe,0x38,0xdf,0x59,0x13,0x3b,0xc8,0xe4,0xfc,0x59,0x9f,0x51,0x9a,0xfb,0x51,0xd0,0x61,0xf9,0xb1,0x2e,0x05,0xb1,0xe1,0x9e,0x49,0x12,0xaa,0xad,0xca,0xc4 },
{ 0xe4,0xad,0x83,0xc7,0x2d,0x3c,0x9c,0x01,0xda,0x92,0xf2,0x8f,0x90,0x6b,0x8c,0x75,0x46,0xda,0x41,0xc4,0xb2,0x3f,0x55,0x0c,0x7b,0x62,0x6a,0xd4,0x78,0x55,0xaf,0xdc },
{ 0x7c,0x1b,0xd5,0x14,0x73,0x88,0x77,0x27,0xbf,0x82,0xad,0x52,0x65,0x0f,0x41,0xbd,0x5c,0x11,0x75,0xd7,0x1a,0x91,0x15,0x43,0xd2,0x17,0xbe,0xb8,0x1e,0x9c,0x3a,0x3c },
{ 0x95,0xa6,0xcd,0x97,0x93,0x6f,0x8e,0x4e,0x05,0xc5,0x77,0x23,0x7b,0x97,0x41,0xaf,0x6d,0x7c,0xaa,0xd5,0xe4,0x49,0xb3,0x35,0xad,0xfb,0xc0,0xaf,0x01,0xbb,0x4a,0x1c },
{ 0x47,0xa0,0x3e,0x0a,0x93,0x95,0xc2,0x4e,0x03,0x10,0xbb,0x0a,0x44,0x3f,0x00,0x08,0x4f,0xdb,0x11,0xc9,0x45,0x0f,0x12,0xc7,0xa3,0xcd,0xe8,0x35,0x22,0x80,0x63,0x0d },
{ 0x4a,0x92,0x0e,0xc5,0xa4,0xa3,0x66,0xf8,0x51,0xa9,0x6d,0x53,0x67,0x52,0xab,0x6e,0xdc,0xac,0xd6,0x37,0x4d,0x41,0x97,0x92,0xec,0xae,0xe2,0x1d,0x6c,0xcc,0x7c,0x7f },
{ 0x58,0x27,0xbd,0x30,0xdd,0xa0,0x24,0xbc,0x7d,0x74,0xa7,0x5f,0x2c,0xa2,0x33,0x57,0x80,0xa3,0xe9,0x3a,0xcd,0x2c,0x74,0xca,0x97,0x2c,0x6a,0xf2,0x94,0x95,0x87,0x69 },
{ 0xe7,0x02,0x54,0x46,0xa4,0x75,0xe0,0x9c,0x22,0x2c,0xe1,0x62,0x33,0xf0,0x0e,0x22,0x51,0x5c,0x69,0xa3,0xae,0xd8,0x14,0xb9,0xbb,0x2f,0xb2,0xc4,0xb5,0x75,0xfb,0x46 },
{ 0x9a,0x82,0x90,0x59,0x1f,0x61,0x30,0x49,0x5b,0x3a,0xec,0x50,0xce,0x9c,0xbe,0x1b,0x40,0x4f,0xae,0xb4,0xf4,0xfd,0x06,0x84,0xcd,0x53,0x99,0x5e,0x53,0xb4,0xb1,0xb7 },
{ 0x87,0x50,0xb4,0x5f,0xb7,0x62,0xba,0xab,0x0b,0x72,0x06,0xce,0xb4,0x77,0x57,0x6f,0x9c,0xdf,0x66,0xda,0x0a,0x26,0xf2,0xf2,0x66,0xc6,0xf2,0x2e,0x40,0x0d,0xbe,0xd3 },
{ 0xfc,0x15,0xb7,0xf1,0xfd,0xcf,0xd0,0xe9,0x2b,0xbb,0xb0,0xd7,0x94,0xf6,0xb9,0x05,0x5e,0x67,0x5b,0xaf,0x68,0x3c,0xae,0x24,0xb9,0xfc,0x30,0x76,0x0c,0x5e,0x43,0x3d },
{ 0x5d,0x0a,0x65,0x5b,0xbd,0x37,0x45,0x65,0x76,0x0a,0xf8,0x4c,0xae,0x44,0x8d,0x25,0x1e,0x94,0xe6,0xd7,0x18,0x90,0xf2,0x1e,0x44,0xec,0x6e,0x52,0x6c,0x40,0x25,0x95 },
{ 0x6c,0x00,0x52,0x76,0xe6,0xbc,0x7a,0x12,0xc3,0x55,0xe5,0x3d,0x7f,0x30,0xb7,0x69,0x98,0xd6,0xf2,0xf6,0x47,0xa7,0xf8,0x19,0xa5,0x5e,0xa3,0xbc,0xce,0x40,0xac,0x16 },
{ 0x6a,0xc6,0x85,0x90,0x9a,0x22,0x8d,0x77,0x95,0xef,0x2f,0x7e,0xb9,0x96,0x11,0x69,0x00,0xa7,0xef,0x86,0x42,0xf2,0x2f,0x70,0x99,0xa0,0x37,0xa0,0xd0,0x96,0xe3,0x5a },
{ 0x68,0x13,0xc8,0x9e,0x4c,0x9f,0x4b,0xa7,0x24,0x0c,0x8a,0xd4,0x56,0x0b,0xe7,0xa7,0xf3,0xbc,0x00,0x19,0xcc,0x97,0x5a,0x20,0xe4,0x92,0x28,0x0a,0x90,0xb5,0x3c,0xb2 },
{ 0x98,0xbc,0x90,0x56,0x38,0x4c,0x17,0x59,0x31,0xc4,0x96,0xac,0xa7,0x40,0xb4,0xbe,0xc3,0xfe,0x46,0x9d,0xcf,0x02,0xf1,0x11,0x0c,0xf0,0x72,0x47,0xef,0xd0,0xa7,0xc9 },
{ 0x0d,0xae,0xab,0x9d,0x22,0x74,0x1a,0xb5,0x83,0xcd,0xc7,0x23,0xf9,0x22,0xbf,0x38,0x37,0x76,0x4b,0x27,0x88,0xcd,0xe2,0xae,0x17,0x6a,0xb3,0xbe,0xdd,0x60,0x53,0x4d },
{ 0xe9,0x41,0x73,0xdd,0xc4,0xe9,0xa1,0x46,0xb7,0xd3,0x05,0x4e,0xe7,0xba,0xd1,0xf2,0x86,0x53,0x23,0x71,0xd8,0xf2,0xa6,0xd8,0x8e,0xcb,0x09,0xa7,0xe8,0xe7,0xa4,0xcb },
{ 0xb5,0xda,0x9b,0x1a,0xb3,0x8b,0x0c,0xae,0x72,0xe3,0x11,0x02,0x2f,0x26,0x45,0xdf,0xa0,0x68,0xba,0x9e,0x24,0x70,0x86,0x5d,0xf3,0xa2,0x75,0xdb,0x78,0x13,0x6f,0x2d },
{ 0x23,0x3b,0xd1,0x92,0xd4,0x10,0x1f,0xdc,0x01,0x65,0x2d,0x40,0x7a,0x6f,0x34,0x96,0x14,0x0a,0xb3,0xf7,0x30,0xfa,0xe0,0x20,0xbf,0x37,0xf4,0x86,0x5e,0xd6,0xc6,0x30 },
{ 0xf6,0x96,0xe2,0x2e,0xe4,0x58,0xce,0xbc,0xff,0xdf,0xc6,0xc1,0x48,0xc4,0xc5,0x2a,0x75,0xed,0xf4,0x13,0x86,0x94,0xcd,0x95,0x42,0x4f,0x3d,0x81,0x5c,0xcb,0xe6,0xa6 },
{ 0xaf,0x33,0xc1,0x5e,0x3b,0xc2,0x16,0x0a,0x0f,0x1a,0xd1,0x41,0xd9,0xa9,0xec,0x76,0xb4,0x2f,0x34,0xfb,0x47,0xbc,0x95,0xff,0x8c,0x63,0x68,0x24,0x26,0x04,0x55,0xbc },
{ 0x9e,0xd3,0xc0,0x08,0x9b,0x5f,0x79,0x0c,0x7b,0x82,0xe9,0x8a,0xb6,0xe5,0xe4,0x5b,0x8e,0x26,0xe1,0x61,0xff,0x4c,0x83,0x8d,0x66,0x59,0x0b,0x6c,0x65,0x64,0xeb,0xb9 },
{ 0x55,0x10,0x53,0x30,0xa3,0x5f,0x9f,0x3d,0x5f,0x6a,0x28,0x36,0x2d,0x9d,0xa1,0x07,0x07,0xf8,0x19,0x28,0x3f,0x38,0xfd,0xe8,0x05,0x7b,0x34,0x38,0xd6,0x46,0xf1,0x02 },
{ 0x1d,0x80,0xf8,0xcd,0xf9,0x18,0xce,0x43,0x8a,0xf3,0xc6,0x37,0xac,0x84,0xa1,0x94,0x5d,0x09,0x3b,0xbf,0x92,0x41,0xa1,0xdd,0x17,0x70,0x75,0x90,0x90,0xb1,0x05,0x9f },
{ 0x61,0xc7,0x63,0xfc,0x93,0x3d,0x3f,0xe2,0xd5,0x39,0x84,0x2d,0x1a,0x94,0x62,0xae,0x41,0x86,0x38,0x53,0x23,0x6e,0xa7,0xee,0x73,0xb5,0x69,0xd7,0xd6,0xc0,0x3d,0xc9 },
{ 0xf3,0x4d,0x45,0xe0,0x73,0x2e,0x61,0x8c,0xda,0x25,0xc1,0x5f,0x8e,0xc2,0x33,0xd9,0x63,0x51,0x41,0xc1,0x92,0x06,0xa7,0x80,0xda,0x70,0xcb,0x1c,0xa0,0x7f,0x32,0x63 },
{ 0xa6,0xb5,0xca,0xfb,0xd3,0xad,0xf4,0x74,0xde,0x77,0x0f,0x73,0xd4,0xca,0x11,0x5c,0x56,0xd6,0x08,0x4d,0x1e,0x1c,0xcd,0xde,0xe4,0x15,0x8f,0x41,0x75,0xc9,0xd0,0x5e },
{ 0x62,0x78,0x89,0x30,0x37,0x8e,0x7c,0x83,0x7a,0x28,0x7b,0xfb,0x72,0xd3,0x9e,0xc4,0x5c,0xe2,0x58,0xa8,0x05,0x52,0x16,0x37,0xaa,0x5f,0x34,0x54,0xd0,0x5b,0x62,0x68 },
{ 0x15,0xc0,0x4e,0xa8,0xbd,0x77,0x1a,0x4a,0x58,0x98,0x96,0xdb,0x9d,0x95,0x97,0x0d,0xb9,0xab,0x00,0xf1,0x95,0xfb,0x73,0x64,0xd1,0x96,0xf9,0x3f,0x67,0xb3,0xf5,0x27 },
{ 0x03,0x6f,0xf6,0x41,0xde,0x85,0xdc,0x13,0xda,0xd3,0x92,0x66,0xba,0xbb,0x74,0x7d,0xf7,0x59,0xe6,0x8a,0xab,0x1a,0xe9,0xce,0x3c,0xdb,0xb6,0xd5,0x51,0x5e,0x16,0x26 },
{ 0x23,0xec,0x63,0x9a,0xba,0x39,0x6e,0x4c,0x51,0x78,0x35,0xdf,0xe3,0xab,0x7b,0x4f,0xdc,0xaa,0xe0,0x94,0xaa,0x51,0xe7,0x83,0xc6,0x1a,0x2c,0xf2,0xf1,0x4f,0x21,0x5f },
{ 0x70,0xe0,0x4b,0x93,0xb5,0x3e,0x79,0x9a,0xe4,0x9b,0x85,0x72,0x82,0x0a,0xb7,0x93,0x3d,0xb2,0x56,0x3d,0x14,0xd6,0x8e,0x35,0xaa,0xe8,0x11,0x18,0x16,0xf1,0x34,0x91 },
{ 0x3e,0xf5,0xdc,0x8b,0x66,0x60,0xdb,0x12,0x8e,0xa0,0x76,0xb0,0xa8,0x29,0x48,0x41,0xde,0x69,0x1a,0x80,0xbe,0x30,0xf9,0x3b,0xd9,0xca,0x0d,0x8d,0x26,0xf9,0x60,0x6e },
{ 0xf2,0xfb,0x28,0xd1,0xf9,0xc6,0x60,0x1c,0xbc,0x47,0xbe,0xb1,0xfa,0x7d,0x0b,0xfc,0x84,0x05,0xc6,0x46,0x07,0xfc,0x58,0xd1,0x20,0x7d,0x2c,0xac,0xb2,0xae,0x9c,0xa1 },
{ 0x0e,0x13,0x94,0xb0,0x0b,0x46,0x47,0x2b,0x0a,0xb3,0x92,0xd5,0x88,0xf5,0xb6,0x53,0x5c,0x48,0x6d,0xfb,0x2c,0xcd,0x26,0x94,0x83,0xe0,0x53,0x68,0x0a,0xe5,0x49,0x28 },
{ 0x6e,0xa5,0xae,0xf9,0xb1,0xe7,0xff,0xa6,0xaa,0xdd,0xb6,0x6f,0x76,0x2a,0xbc,0x93,0x14,0xbf,0x9b,0x1c,0xf8,0x0d,0xa0,0x67,0x25,0x44,0x1e,0xa8,0x87,0xd0,0x94,0x4d },
{ 0xed,0xf1,0x02,0xad,0x38,0x38,0xe8,0x3f,0xc6,0x45,0x57,0xc4,0x64,0x58,0xc9,0x75,0x93,0x9b,0x43,0x63,0xa2,0xb0,0x94,0x2e,0x9f,0x1b,0xab,0xad,0x63,0xa5,0xca,0x43 },
{ 0xa0,0x8a,0x93,0xab,0x17,0x23,0xed,0x85,0x99,0x0d,0x01,0x88,0x48,0x36,0xaf,0x21,0xec,0xba,0xd6,0xa1,0xdb,0x71,0xb0,0xc0,0xcd,0xd8,0xbe,0xc6,0x18,0x74,0x6e,0x6a },
{ 0x44,0x2b,0xd7,0x60,0x4d,0x9b,0xad,0xeb,0x58,0x15,0x7d,0x77,0xa7,0x4b,0xf9,0x65,0xcf,0xe7,0x3d,0xf9,0x9c,0xb8,0x5b,0x11,0x05,0x56,0x35,0xc8,0x17,0xd2,0xbe,0xc3 },
{ 0xcf,0x27,0x0d,0x69,0x2c,0x5a,0x35,0x87,0xc0,0xa0,0x52,0x57,0x79,0x43,0xfb,0xb9,0x6f,0x77,0x40,0x02,0x3b,0x7b,0xd9,0x0c,0x11,0x88,0x4f,0x16,0x33,0x4d,0x4b,0xdd },
{ 0xdb,0x3e,0x11,0xa6,0x27,0x73,0x43,0x37,0xff,0xe0,0x2b,0x85,0x39,0x05,0x66,0x23,0x49,0x49,0xc0,0x61,0x50,0x8e,0xc2,0x64,0xf1,0x1d,0x8e,0x91,0xf6,0xf2,0x44,0x35 },
{ 0x7c,0x20,0x0a,0x17,0x89,0x87,0x24,0x82,0xa6,0x2b,0x21,0x96,0x41,0xb0,0x69,0xbb,0xf8,0xf8,0x91,0x0e,0x62,0x7d,0x43,0xdd,0xf3,0x63,0x35,0x5b,0xb2,0xb9,0x67,0x5e },
{ 0x41,0xee,0x04,0xbe,0x99,0xb4,0xd5,0x37,0x8c,0x71,0xad,0x42,0x46,0x2b,0xce,0xea,0x9e,0xff,0x94,0xca,0xb6,0xfa,0x68,0xe0,0x74,0xdd,0x84,0xb0,0x5b,0x2c,0xaf,0xe7 },
{ 0xfd,0x5e,0xd3,0x17,0xaf,0x6b,0x68,0xd2,0x19,0x38,0x2d,0x0c,0x26,0x27,0x50,0x34,0x28,0x78,0x2c,0x57,0xeb,0x8f,0x70,0x7b,0x7e,0xac,0xa1,0x87,0x65,0x0e,0xd8,0x7d },
{ 0x6e,0x00,0x29,0xff,0x00,0x80,0x9e,0xd4,0xdd,0x21,0x4a,0x95,0x03,0xa3,0x63,0x72,0xa8,0x6b,0x4f,0xbf,0x80,0x8e,0x2f,0x78,0xbb,0x5e,0x12,0xee,0x8e,0x58,0xa1,0x5a },
{ 0xb4,0x12,0xa5,0x31,0xf3,0xb4,0x22,0x44,0xf9,0x34,0x3f,0xec,0x3a,0x4e,0x81,0x48,0xb4,0xcd,0x9e,0x4e,0x4b,0x47,0x94,0x37,0x4d,0x2e,0x7e,0x98,0xea,0x2c,0xeb,0x2e },
{ 0x3b,0x15,0x52,0x54,0x9c,0xb4,0xbb,0x6d,0x5b,0xea,0xd0,0x81,0x54,0xd8,0x4f,0x02,0xb4,0xe9,0xf6,0x8f,0x6a,0xd8,0x2b,0x78,0x59,0xec,0x65,0xdb,0xbe,0x7a,0x08,0xed },
{ 0xe3,0x59,0xae,0x58,0x75,0x40,0xa4,0x88,0x2e,0x74,0xb2,0x74,0xa3,0xc3,0x0c,0xd0,0xaf,0x27,0xa0,0x7d,0x2c,0xaa,0x78,0x38,0x4b,0x85,0x4f,0x5b,0xf5,0x9c,0x23,0x69 },
{ 0xb2,0x42,0x35,0x11,0xb2,0x27,0xad,0x34,0xdb,0xfe,0x53,0x18,0xc8,0x34,0x8d,0x7e,0x8b,0xba,0x32,0x19,0xc6,0xca,0x7b,0xa3,0xe2,0xf8,0x67,0xa1,0x6e,0x6f,0xc7,0x3a },
{ 0xb6,0x1b,0x89,0x3c,0xa7,0x2d,0xfa,0xc2,0xff,0x37,0x9a,0xc9,0xc4,0xb6,0x4e,0x9e,0x0d,0x02,0x26,0xf0,0x9c,0xdb,0xa4,0xf5,0xae,0x29,0x38,0x16,0x3d,0x7f,0xbf,0xf8 },
{ 0x89,0xac,0xd4,0x45,0x75,0xa3,0x75,0xcf,0xe1,0x7e,0xc9,0x18,0x37,0xa2,0x03,0x22,0xb9,0x39,0x9b,0xa0,0x9d,0x42,0xae,0x70,0x85,0x9b,0xdc,0xb0,0x87,0x2f,0xdb,0xc0 },
{ 0x61,0x58,0x27,0x98,0xcb,0xed,0x7e,0x00,0x17,0x7b,0x00,0xdf,0x96,0xc0,0xd3,0x97,0xce,0x16,0xd8,0x7b,0x1b,0x95,0xa9,0x6e,0x74,0xe2,0xcb,0x0c,0xf9,0x13,0x1a,0xf1 },
{ 0x31,0xe6,0x58,0x2c,0x7f,0x2a,0x5f,0xb8,0x74,0xc7,0x41,0xf0,0xf8,0x18,0xe4,0x4b,0xad,0x95,0x34,0xba,0x33,0x37,0xac,0x95,0x92,0x70,0x31,0x00,0xeb,0xa1,0xdd,0x7e },
{ 0x34,0x58,0x0f,0x00,0x14,0x69,0x40,0x93,0xc9,0x0d,0x2e,0x64,0xe1,0xfa,0x92,0xc1,0x42,0xb5,0x3e,0xe5,0x31,0xd7,0x2a,0xfe,0x2a,0xa0,0x44,0x2f,0xa5,0xd3,0x26,0x6d },
{ 0x7c,0x75,0x2d,0x94,0x33,0x5a,0xe0,0xe4,0x83,0x89,0x6f,0xdb,0x8d,0xb0,0xb1,0xc7,0xc5,0x45,0xee,0xb4,0x31,0x13,0xec,0x3d,0x9c,0xbc,0x91,0x6d,0xf7,0x52,0x97,0x4f },
{ 0x55,0xe6,0x82,0xd2,0xb6,0x8c,0xb0,0x42,0xfd,0xe6,0x03,0xda,0x2a,0x19,0x78,0x21,0x9a,0x8b,0xfe,0xb2,0x71,0xc2,0xf7,0xdb,0xad,0xaa,0x37,0x9d,0x02,0x07,0x74,0xfd },
{ 0x34,0x43,0x13,0xcc,0xc3,0xa7,0xdf,0x62,0x81,0x0d,0x32,0xfd,0x80,0xc6,0x51,0x5f,0x49,0x42,0x7b,0x01,0x2d,0xe5,0x52,0x89,0x0b,0x0b,0xc7,0xe5,0xcc,0xa1,0xf1,0x7f },
{ 0xa9,0x90,0x75,0xec,0x7e,0xec,0x17,0x7d,0x95,0x8c,0x4f,0xd8,0xd2,0x4c,0x59,0xdf,0xa4,0xfb,0xa7,0x2a,0xd6,0xa0,0x7d,0xcd,0x59,0x23,0xf7,0x0f,0xe1,0x82,0x1c,0x1d },
{ 0xb5,0x6a,0x66,0x66,0xcf,0x45,0x70,0x54,0xce,0xfd,0xa4,0x89,0x4e,0x9b,0x51,0x6d,0x30,0x3a,0x7d,0xd3,0x28,0x89,0x25,0x7f,0x63,0xea,0xbe,0x0a,0xa6,0x6e,0x9e,0xf0 },
{ 0xae,0x8c,0x49,0x9b,0x08,0x2d,0x1e,0x78,0x50,0xff,0x94,0xf5,0xe5,0xda,0x62,0x88,0x7c,0x73,0x93,0x5a,0x11,0x67,0x78,0x32,0x7a,0x79,0x93,0x25,0x54,0xd7,0xf2,0x27 },
{ 0xe2,0x79,0xe7,0x8a,0x6a,0x0f,0xa7,0x75,0x90,0x9e,0xa3,0x15,0x53,0x66,0xb7,0x0d,0xdc,0x8b,0xc7,0xa0,0x9a,0xe0,0x46,0x44,0xf7,0x11,0xde,0x6e,0x58,0x00,0x0a,0x9b },
{ 0xf8,0x27,0x75,0x9b,0xca,0x19,0x1d,0x45,0x7f,0x9f,0x4a,0x3e,0x9d,0xef,0x50,0x1f,0x9f,0x38,0x9d,0xcd,0x0a,0xd2,0x97,0x75,0x73,0xc3,0x14,0x59,0x52,0xd4,0x6b,0xb6 },
{ 0xcf,0x46,0xc5,0xf1,0xf8,0x04,0xe9,0x74,0x3b,0x3a,0xc0,0x7e,0xcb,0x31,0xfb,0x17,0x8e,0x4f,0x02,0xc2,0x81,0x5b,0x03,0xa3,0x38,0xfa,0x10,0x67,0x50,0xc7,0x1c,0x6a },
{ 0x54,0x5b,0x86,0x4a,0x9c,0xb1,0x7b,0xf9,0xa9,0x7f,0xa4,0x55,0x5b,0xdf,0x70,0x03,0xbe,0x8c,0x7d,0x0b,0xb0,0x22,0x57,0x29,0x59,0x85,0x03,0xfd,0x68,0x29,0x32,0x74 },
{ 0xbb,0xbf,0x65,0x31,0xf3,0x1b,0x16,0x8f,0x52,0xc6,0x16,0xa2,0x77,0x4d,0xed,0x1c,0x4e,0x6d,0xcb,0xbe,0xe0,0xee,0xbf,0xb6,0xe0,0x3b,0xe2,0x09,0xf4,0xb1,0x75,0x03 },
{ 0x6b,0x56,0x2a,0x39,0x57,0x4b,0xff,0x25,0x1e,0x1f,0x48,0x61,0x0d,0xee,0xb0,0x24,0x77,0x48,0xb9,0xc8,0x0e,0xeb,0xe2,0xf1,0xd6,0x2f,0xf7,0x7d,0xbf,0x2f,0xaf,0x30 },
{ 0xfe,0xee,0x9c,0x8e,0x15,0x20,0xfa,0xc8,0x1b,0xc0,0x7f,0x11,0xd2,0x35,0x59,0x31,0xc4,0xca,0x94,0xb9,0xa5,0x74,0xf2,0xa4,0x2b,0xa2,0x9a,0x1e,0xe4,0x97,0xfd,0x05 },
{ 0xa2,0x9e,0x34,0x2d,0x94,0xb0,0xfe,0x29,0xde,0x82,0x73,0xd1,0xfd,0x90,0x0f,0xb8,0x99,0x29,0x50,0x7f,0xc5,0xb4,0xad,0xcf,0x18,0x88,0x45,0x10,0x80,0x2e,0x03,0x7f },
{ 0x7a,0xb9,0x6a,0xf1,0x0b,0x2a,0xe7,0x72,0x61,0x13,0x3d,0xc2,0x9d,0x15,0x52,0x4e,0x55,0xb9,0xda,0x30,0xcf,0xa3,0x58,0xb4,0x55,0x07,0xe9,0x4f,0x38,0x41,0x69,0x08 },
{ 0xb5,0x42,0xde,0xd8,0x16,0xfc,0x67,0x27,0x20,0xeb,0xe2,0x58,0x6a,0x87,0xa8,0x39,0x6f,0x63,0x68,0x9f,0x9d,0x02,0x6f,0xb2,0xbe,0x85,0xe9,0xf3,0x3b,0x93,0xde,0x64 },
{ 0xc5,0x7a,0x95,0x97,0x30,0x2f,0xc2,0x0f,0x5c,0x76,0x72,0xdd,0xfb,0xbf,0x46,0x70,0x32,0x35,0x2d,0xf0,0x9c,0xce,0xa2,0x49,0xc4,0x18,0x87,0x1c,0x00,0x0d,0xa0,0x21 },
{ 0x9d,0xaf,0xc3,0x00,0x62,0xe3,0xdd,0x45,0xf2,0xa1,0x85,0x28,0x80,0x0d,0x31,0xcf,0xf7,0x7f,0xc4,0x6e,0xea,0x72,0x44,0xa9,0x9b,0x06,0xf9,0xa4,0x86,0xef,0xc8,0xbc },
{ 0x1e,0x88,0x97,0xda,0x03,0xf5,0x06,0x44,0xd7,0x13,0x41,0x14,0x49,0xbc,0xbe,0xe2,0x7e,0x93,0x37,0xee,0xf1,0x46,0x0b,0xbb,0x21,0x2a,0xc8,0xc7,0xb7,0x18,0xbb,0xfa },
{ 0xeb,0x70,0x6e,0xf5,0x2e,0xc7,0x2e,0x6b,0xad,0x45,0x6b,0x75,0x59,0xba,0xa0,0x38,0x41,0x05,0x4a,0xd7,0xe1,0x5d,0xa9,0x54,0x0e,0xd7,0xce,0x69,0x76,0x83,0x7a,0x67 },
{ 0xd1,0xb7,0xff,0x78,0x3f,0xa0,0x25,0xa3,0xaf,0x67,0xba,0xf4,0x37,0xdd,0x5d,0x15,0x49,0x43,0x26,0x1f,0xff,0x50,0x05,0xcb,0x01,0xb2,0x91,0x04,0xde,0xb0,0xaf,0xad },
{ 0xef,0xbe,0x6a,0xe7,0xec,0x46,0xb1,0x95,0x71,0xdf,0xfb,0x42,0x75,0x77,0xf2,0xe0,0x50,0x0b,0x2a,0x23,0x45,0x3c,0x1a,0x5d,0xec,0xcd,0xef,0x80,0xe7,0x1b,0x7d,0x26 },
{ 0x73,0x1b,0x62,0xa7,0xbe,0x73,0xec,0xd8,0xb8,0xd6,0x20,0x17,0xdb,0x39,0x7f,0x58,0x86,0x89,0x16,0x6f,0x50,0xea,0x96,0xb7,0x64,0x32,0x4c,0xe9,0x42,0xd5,0x3a,0xd5 },
{ 0xa4,0xb7,0x1d,0x68,0x15,0x6e,0xb4,0x50,0x1b,0xbe,0x3e,0xd0,0x40,0x94,0xf3,0x3c,0xdc,0xef,0xb6,0x15,0x66,0xc2,0x09,0x94,0x26,0xa8,0x2d,0xb1,0x8b,0xf6,0xd9,0x18 },
{ 0xff,0x86,0xcf,0x9b,0x4c,0x4c,0x79,0x88,0x4a,0x80,0xc4,0xc2,0xd7,0xdd,0x05,0x49,0xe0,0x10,0xe3,0xc0,0x71,0x4d,0xd8,0x3b,0x28,0xeb,0xf1,0xcf,0xa6,0x92,0x44,0x87 },
{ 0xa3,0xe1,0x91,0xe1,0xd2,0x91,0x13,0xc0,0xa6,0x88,0xc4,0xd4,0x6c,0x6e,0xc3,0x35,0xce,0x28,0x93,0x61,0x8e,0xbd,0x99,0xc7,0x49,0xea,0x4f,0xe0,0x35,0xf2,0x55,0x44 },
{ 0xd4,0x0e,0x12,0x99,0x42,0x66,0x9d,0x10,0x0c,0xc0,0xf3,0x2e,0xd5,0xd1,0xfa,0xdb,0x4b,0x20,0xf8,0xbc,0xeb,0x79,0xa4,0x3f,0xe3,0xd1,0x9e,0x60,0x79,0x5b,0x21,0x5c },
{ 0xc3,0xee,0x8e,0x5e,0x03,0x0e,0x73,0x46,0x69,0xf8,0xa1,0x72,0xc7,0x11,0x84,0xe1,0xc8,0x3a,0xa3,0x26,0x41,0x74,0x6c,0x65,0x93,0x78,0x5a,0x5c,0xf7,0x9b,0x26,0x98 },
{ 0x1f,0x3f,0xac,0x31,0xf9,0x43,0x17,0x33,0x6d,0x96,0xfa,0x76,0xc8,0x77,0xa6,0x18,0x96,0xac,0x9b,0x04,0x22,0x1b,0x16,0xd1,0xc5,0x95,0xff,0x7f,0x25,0x90,0xc8,0xd3 },
{ 0xd3,0x10,0x7c,0x86,0x8b,0xf4,0xd0,0x23,0x29,0x85,0x3f,0xbd,0xb4,0x2f,0x23,0x45,0x5f,0xd1,0xb2,0xbb,0xa7,0x88,0xdb,0x7b,0xbb,0x30,0x6f,0xa5,0xdd,0x4c,0x00,0xbd },
{ 0x1c,0x6f,0xa3,0x86,0x36,0xfa,0xac,0xae,0xc5,0x5b,0xa7,0x12,0x02,0x3e,0x3d,0xa4,0x29,0xfd,0x9b,0x81,0xbe,0xac,0x0b,0x94,0x92,0xd1,0x01,0xdb,0x9e,0xdf,0xd1,0xef },
{ 0xb0,0xf0,0xd5,0xeb,0x9c,0xc2,0x51,0xfb,0xa4,0x65,0x46,0xe1,0x17,0xac,0x4e,0xed,0xd6,0x51,0xca,0x4f,0x98,0xed,0x6b,0x13,0xb9,0x8e,0xcc,0x00,0xb8,0xb9,0x26,0xde },
{ 0x71,0x4c,0xf9,0xff,0x26,0xb1,0x1e,0xa1,0xd6,0x96,0xbb,0x2f,0x34,0x82,0x1b,0x65,0xf5,0xec,0x30,0xf5,0x40,0x92,0x8f,0x11,0xd5,0x81,0xe6,0x1f,0x84,0x63,0xfe,0x3e },
{ 0xe4,0x70,0xa0,0x3e,0x37,0xed,0xbe,0xd8,0x88,0x45,0x13,0x09,0xb3,0x4a,0x17,0x1f,0x6b,0x1d,0x1a,0x9d,0xba,0x9e,0xbf,0xf6,0xf9,0xe9,0x6a,0x91,0x67,0x64,0x6f,0xe4 },
{ 0x0b,0x52,0x4b,0x57,0x08,0x69,0x56,0xd4,0xcb,0x57,0x14,0x6f,0xbd,0x31,0x1b,0x07,0xfd,0x4b,0x70,0x26,0x90,0xeb,0x70,0x3c,0x37,0xe0,0x67,0x7f,0x20,0xff,0x01,0x8b },
{ 0xef,0x52,0x69,0x60,0x5c,0x29,0x00,0x2f,0x21,0xa8,0x92,0x0e,0x05,0x50,0x5d,0x5c,0x19,0x12,0x01,0xd2,0x6d,0x73,0x43,0x6c,0xb2,0xcb,0xac,0xdc,0xe3,0x65,0xf6,0x12 },
{ 0xdc,0x06,0x03,0x8e,0xaa,0x8b,0x46,0xab,0x25,0x93,0x8b,0x57,0x2d,0xc3,0x8e,0x29,0xae,0x79,0x3e,0xcc,0xda,0xd1,0x35,0x77,0x68,0xa8,0x5f,0x10,0xce,0x36,0x91,0xfb },
{ 0x51,0xa2,0x59,0xbd,0x43,0xc6,0xaa,0xd4,0x9a,0xdd,0x16,0x9f,0xc9,0x8a,0x4a,0x1e,0xec,0x82,0xae,0xe7,0xe9,0x3d,0x5a,0x3c,0x38,0x93,0x97,0x04,0xfe,0x10,0x89,0x38 },
{ 0x12,0x4c,0x62,0x07,0x88,0x7d,0xdc,0x3b,0xe4,0x31,0x29,0x40,0x3b,0xfb,0x3a,0x5a,0x6b,0xb6,0xbb,0x23,0xa2,0x08,0x0c,0xb5,0x6e,0xdf,0xf0,0xa2,0x73,0xb3,0xef,0xa2 },
{ 0x98,0x7b,0x6f,0x5d,0x83,0xe5,0x8b,0xd5,0xc9,0x97,0xbb,0x99,0x38,0xfb,0x4a,0x60,0x1f,0x2f,0x70,0x77,0x6c,0x16,0x50,0xdf,0xea,0x81,0x55,0x33,0xac,0x29,0x20,0x8d },
{ 0x4c,0x43,0x72,0x68,0x4a,0xde,0x24,0x40,0xe0,0xd1,0x0f,0x4c,0x80,0x64,0x11,0x0a,0x0f,0xdb,0xaf,0x68,0x9e,0xa4,0x21,0xde,0x98,0x81,0xae,0xa1,0x86,0x16,0xbc,0x90 },
{ 0x02,0x6f,0xe1,0xb0,0x46,0xa1,0xf8,0xff,0x32,0x55,0x1f,0xe8,0xe5,0x7a,0x65,0xf3,0xce,0xdf,0x39,0x63,0xdf,0xa2,0x81,0xa0,0x33,0x5d,0x89,0xa1,0xba,0x27,0xb4,0xfd },
{ 0x73,0x56,0xfc,0x22,0xe2,0x2a,0x31,0x0d,0x1d,0xef,0x39,0x0a,0x9c,0x2b,0xe0,0x69,0x3b,0x9b,0x2c,0xad,0x18,0x5f,0xc2,0x66,0x75,0x80,0x0c,0x97,0xe3,0x81,0xd2,0xc0 },
{ 0x4d,0xf6,0x1c,0xeb,0x35,0x5b,0x39,0x23,0x7d,0x33,0xa8,0xe1,0x34,0x48,0x73,0xc3,0x0c,0x1f,0x79,0xd4,0x21,0x56,0x82,0x66,0x39,0x26,0x54,0x9c,0x9e,0x79,0xa6,0x84 },
{ 0xbf,0xab,0x5a,0x5a,0x6a,0xe3,0xcb,0xcb,0xb7,0xf1,0xf6,0x79,0x8c,0x95,0x19,0x1c,0x43,0x32,0x4f,0x40,0x2e,0xd5,0xe7,0x49,0xc3,0x9c,0x73,0xcd,0x4a,0xda,0x43,0x3d },
{ 0x76,0xa1,0x59,0x20,0x44,0xa6,0xe4,0xf5,0x11,0x26,0x5b,0xca,0x73,0xa6,0x04,0xd9,0x0b,0x05,0x29,0xd1,0xdf,0x60,0x2b,0xe3,0x0a,0x19,0xa9,0x25,0x76,0x60,0xd1,0xf5 },
tinyssh-20240101/crypto-tests/precomp_ed25519.data.py 0000664 0000000 0000000 00000005646 14544472107 0022156 0 ustar 00root root 0000000 0000000 import hashlib, binascii
b = 256
q = 2**255 - 19
l = 2**252 + 27742317777372353535851937790883648493
def H(m):
return hashlib.sha512(m).digest()
def expmod(b,e,m):
if e == 0: return 1
t = expmod(b,e/2,m)**2 % m
if e & 1: t = (t*b) % m
return t
def inv(x):
return expmod(x,q-2,q)
d = -121665 * inv(121666)
I = expmod(2,(q-1)/4,q)
def xrecover(y):
xx = (y*y-1) * inv(d*y*y+1)
x = expmod(xx,(q+3)/8,q)
if (x*x - xx) % q != 0: x = (x*I) % q
if x % 2 != 0: x = q-x
return x
By = 4 * inv(5)
Bx = xrecover(By)
B = [Bx % q,By % q]
def edwards(P,Q):
x1 = P[0]
y1 = P[1]
x2 = Q[0]
y2 = Q[1]
x3 = (x1*y2+x2*y1) * inv(1+d*x1*x2*y1*y2)
y3 = (y1*y2+x1*x2) * inv(1-d*x1*x2*y1*y2)
return [x3 % q,y3 % q]
def scalarmult(P,e):
if e == 0: return [0,1]
Q = scalarmult(P,e/2)
Q = edwards(Q,Q)
if e & 1: Q = edwards(Q,P)
return Q
def encodeint(y):
bits = [(y >> i) & 1 for i in range(b)]
return ''.join([chr(sum([bits[i * 8 + j] << j for j in range(8)])) for i in range(b/8)])
def encodepoint(P):
x = P[0]
y = P[1]
bits = [(y >> i) & 1 for i in range(b - 1)] + [x & 1]
return ''.join([chr(sum([bits[i * 8 + j] << j for j in range(8)])) for i in range(b/8)])
def bit(h,i):
return (ord(h[i/8]) >> (i%8)) & 1
def publickey(sk):
h = H(sk)
a = 2**(b-2) + sum(2**i * bit(h,i) for i in range(3,b-2))
A = scalarmult(B,a)
return encodepoint(A)
def Hint(m):
h = H(m)
return sum(2**i * bit(h,i) for i in range(2*b))
def signature(m,sk,pk):
h = H(sk)
a = 2**(b-2) + sum(2**i * bit(h,i) for i in range(3,b-2))
r = Hint(''.join([h[i] for i in range(b/8,b/4)]) + m)
R = scalarmult(B,r)
S = (r + Hint(encodepoint(R) + pk + m) * a) % l
return encodepoint(R) + encodeint(S)
def isoncurve(P):
x = P[0]
y = P[1]
return (-x*x + y*y - 1 - d*x*x*y*y) % q == 0
def decodeint(s):
return sum(2**i * bit(s,i) for i in range(0,b))
def decodepoint(s):
y = sum(2**i * bit(s,i) for i in range(0,b-1))
x = xrecover(y)
if x & 1 != bit(s,b-1): x = q-x
P = [x,y]
if not isoncurve(P): raise Exception("decoding point that is not on curve")
return P
def checkvalid(s,m,pk):
if len(s) != b/4: raise Exception("signature length is wrong")
if len(pk) != b/8: raise Exception("public-key length is wrong")
R = decodepoint(s[0:b/8])
A = decodepoint(pk)
S = decodeint(s[b/8:b/4])
h = Hint(encodepoint(R) + pk + m)
if scalarmult(B,S) != edwards(R,scalarmult(A,h)):
raise Exception("signature does not pass verification")
f = open("precomp.txt")
def l(line):
l = ""
for i in range(32):
if i == 31:
l += "0x%s%s" % (line[2*i], line[2*i+1])
else:
l += "0x%s%s," % (line[2*i], line[2*i+1])
return l
while True:
line=f.readline()
if len(line) == 0:
f.close()
break
print "{", l(binascii.hexlify(publickey(binascii.unhexlify(line[0:-1])))), "},"
tinyssh-20240101/crypto-tests/randombytestest.c 0000664 0000000 0000000 00000003773 14544472107 0021543 0 ustar 00root root 0000000 0000000 /*
20140318
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include "misc.h"
#include "randombytes.h"
static int verify(const unsigned char *x, const unsigned char *y) {
unsigned int i, d = 0;
for(i = 0; i < 16; ++i) d |= x[i] ^ y[i];
return (1 & ((d - 1) >> 8)) - 1;
}
static int readall(int fd, unsigned char *x, long long xlen) {
long long r;
while (xlen > 0) {
r = read(fd, x, xlen);
if (r <= 0) return -1;
x += r;
xlen -= r;
}
return 0;
}
static int writeall(int fd, unsigned char *x, long long xlen) {
long long r;
while (xlen > 0) {
r = write(fd, x, xlen);
if (r <= 0) return -1;
x += r;
xlen -= r;
}
return 0;
}
static void run(unsigned char *x, long long xlen) {
pid_t pid;
int status, fromchild[2];
unsigned char buf[16];
if (pipe(fromchild) == -1) fail("pipe() failure");
pid = fork();
if (pid == -1) fail("fork() failure");
if (pid == 0) {
close(fromchild[0]);
randombytes(buf, sizeof buf);
if (writeall(fromchild[1], buf, sizeof buf) == -1) _exit(111);
_exit(0);
}
close(fromchild[1]);
if (readall(fromchild[0], x, xlen) == -1) fail("read() failure");
while (waitpid(pid, &status, 0) != pid) {};
if (!WIFEXITED(status)) fail("process killed");
if (WEXITSTATUS(status)) fail("process exited with status != 0");
}
int main(void) {
unsigned char buf1[16];
unsigned char buf2[16];
run(buf1, sizeof buf1);
run(buf2, sizeof buf2);
if (verify(buf1, buf2) == 0) fail("randombytes() cryptographically dangerous");
randombytes(buf1, sizeof buf1);
randombytes(buf2, sizeof buf2);
if (verify(buf1, buf2) == 0) fail("randombytes() cryptographically dangerous");
run(buf1, sizeof buf1);
run(buf2, sizeof buf2);
if (verify(buf1, buf2) == 0) fail("randombytes() cryptographically dangerous across fork()");
_exit(0);
}
tinyssh-20240101/crypto/ 0000775 0000000 0000000 00000000000 14544472107 0014776 5 ustar 00root root 0000000 0000000 tinyssh-20240101/crypto/CRYPTOLIBS 0000664 0000000 0000000 00000000615 14544472107 0016415 0 ustar 00root root 0000000 0000000 crypto_onetimeauth_poly1305.o
randombytes.o
uint32_pack.o
uint32_unpack.o
uint32_pack_big.o
uint32_unpack_big.o
crypto_stream_chacha20.o
verify.o
crypto_verify_16.o
crypto_verify_32.o
crypto_hash_sha512.o
crypto_hash_sha256.o
fe.o
fe25519.o
ge25519.o
sc25519.o
crypto_scalarmult_curve25519.o
crypto_sign_ed25519.o
cleanup.o
crypto_sort_uint32.o
crypto_kem_sntrup761.o
crypto_kem_sntrup761x25519.o
tinyssh-20240101/crypto/CRYPTOPRIMITIVES 0000664 0000000 0000000 00000000621 14544472107 0017354 0 ustar 00root root 0000000 0000000 crypto_int64 0
crypto_uint16 0
crypto_uint32 0
crypto_uint64 0
crypto_uint8 0
crypto_stream_chacha20 1
crypto_onetimeauth_poly1305 1
crypto_hash_sha512 1
crypto_hash_sha256 1
crypto_verify_16 1
crypto_verify_32 1
crypto_scalarmult_curve25519 1
crypto_sign_ed25519 1
randombytes 0
uint32_pack_big 0
uint32_unpack_big 0
cleanup 0
crypto_sort_uint32 1
crypto_kem_sntrup761 1
crypto_kem_sntrup761x25519 1
tinyssh-20240101/crypto/CRYPTOSOURCES 0000664 0000000 0000000 00000000541 14544472107 0017005 0 ustar 00root root 0000000 0000000 crypto_onetimeauth_poly1305
randombytes
uint32_pack
uint32_unpack
uint32_pack_big
uint32_unpack_big
crypto_stream_chacha20
verify
crypto_verify_16
crypto_verify_32
crypto_hash_sha256
crypto_hash_sha512
fe
fe25519
ge25519
sc25519
crypto_scalarmult_curve25519
crypto_sign_ed25519
cleanup
crypto_sort_uint32
crypto_kem_sntrup761
crypto_kem_sntrup761x25519
tinyssh-20240101/crypto/cleanup.c 0000664 0000000 0000000 00000000424 14544472107 0016571 0 ustar 00root root 0000000 0000000 #include "cleanup.h"
#include "hasasmvolatilememory.h"
void cleanup_(void *yv, long long ylen) {
volatile char *y = (volatile char *)yv;
while (ylen > 0) { *y++ = 0; --ylen; }
#ifdef HASASMVOLATILEMEMORY
__asm__ __volatile__("" : : "r"(yv) : "memory");
#endif
}
tinyssh-20240101/crypto/cleanup.h 0000664 0000000 0000000 00000000214 14544472107 0016573 0 ustar 00root root 0000000 0000000 #ifndef _CLEANUP_H____
#define _CLEANUP_H____
extern void cleanup_(void *, long long);
#define cleanup(x) cleanup_((x), sizeof(x))
#endif
tinyssh-20240101/crypto/crypto_hash_sha256.c 0000664 0000000 0000000 00000006755 14544472107 0020572 0 ustar 00root root 0000000 0000000 #include "crypto_uint32.h"
#include "crypto_hash_sha256.h"
static void store64_bigendian(unsigned char *y, unsigned long long x) {
long long i;
for (i = 7; i >= 0; --i) { y[i] = x; x >>= 8; }
}
static void store32_bigendian(unsigned char *y, crypto_uint32 x) {
long long i;
for (i = 3; i >= 0; --i) { y[i] = x; x >>= 8; }
}
static crypto_uint32 load32_bigendian(const unsigned char *x) {
crypto_uint32 y = 0;
long long i;
for (i = 0; i < 4; ++i) y = (y << 8) | x[i];
return y;
}
static crypto_uint32 R(crypto_uint32 x, int c) { return (x >> c) | ((x & 0xffffffff) << (32 - c)); }
static crypto_uint32 Ch(crypto_uint32 x,crypto_uint32 y,crypto_uint32 z) { return (x & y) ^ (~x & z); }
static crypto_uint32 Maj(crypto_uint32 x,crypto_uint32 y,crypto_uint32 z) { return (x & y) ^ (x & z) ^ (y & z); }
static crypto_uint32 Sigma0(crypto_uint32 x) { return R(x, 2) ^ R(x,13) ^ R(x,22); }
static crypto_uint32 Sigma1(crypto_uint32 x) { return R(x, 6) ^ R(x,11) ^ R(x,25); }
static crypto_uint32 sigma0(crypto_uint32 x) { return R(x, 7) ^ R(x,18) ^ (x >> 3); }
static crypto_uint32 sigma1(crypto_uint32 x) { return R(x,17) ^ R(x,19) ^ (x >> 10); }
static const crypto_uint32 K[64] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
};
static void blocks(crypto_uint32 *z, const unsigned char *m, unsigned long long n) {
crypto_uint32 b[8], a[8], w[64], t;
long long i, j;
for (i = 0; i < 8; ++i) a[i] = z[i];
while (n >= 64) {
for (i = 0; i < 16; ++i) w[i] = load32_bigendian(m + 4 * i);
for (i = 16; i < 64; ++i) w[i] = (sigma1(w[i - 2]) + w[i - 7] + sigma0(w[i - 15]) + w[i - 16]) & 0xffffffff;
for (i = 0; i < 64; ++i) {
for (j = 0; j < 8; ++j) b[j] = a[j];
t = a[7] + Sigma1(a[4]) + Ch(a[4], a[5], a[6]) + K[i] + w[i];
b[7] = t + Sigma0(a[0]) + Maj(a[0], a[1], a[2]);
b[3] += t;
for (j = 0; j < 8; ++j) a[(j + 1) % 8] = b[j] & 0xffffffff;
}
for (i = 0; i < 8; ++i) { a[i] += z[i]; a[i] &= 0xffffffff; z[i] = a[i]; }
m += 64;
n -= 64;
}
}
int crypto_hash_sha256_tinyssh(unsigned char *o, const unsigned char *m, unsigned long long n) {
long long i;
unsigned char x[128];
unsigned long long b = n;
crypto_uint32 h[8] = {
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
};
blocks(h, m, n);
m += n;
n &= 63;
m -= n;
for (i = 0; i < sizeof x; ++i) x[i] = 0;
for (i = 0; i < n; ++i) x[i] = m[i];
x[n] = 128;
n = 128 - 64 * (n < 56);
store64_bigendian(x + n - 8, b << 3);
blocks(h, x, n);
for (i = 0; i < 8; ++i) store32_bigendian(o + 4 * i, h[i]);
return 0;
}
tinyssh-20240101/crypto/crypto_hash_sha256.h 0000664 0000000 0000000 00000000644 14544472107 0020566 0 ustar 00root root 0000000 0000000 #ifndef crypto_hash_sha256_H
#define crypto_hash_sha256_H
#define crypto_hash_sha256_tinyssh_BYTES 32
extern int crypto_hash_sha256_tinyssh(unsigned char *,const unsigned char *,unsigned long long);
#define crypto_hash_sha256 crypto_hash_sha256_tinyssh
#define crypto_hash_sha256_BYTES crypto_hash_sha256_tinyssh_BYTES
#define crypto_hash_sha256_IMPLEMENTATION "tinyssh"
#define crypto_hash_sha256_VERSION "-"
#endif
tinyssh-20240101/crypto/crypto_hash_sha512.c 0000664 0000000 0000000 00000011441 14544472107 0020551 0 ustar 00root root 0000000 0000000 /*
20180104
*/
/*
- based on tweetnacl 20140427 (http://tweetnacl.cr.yp.to/software.html)
- slightly modified
*/
#include "crypto_hash_sha512.h"
static void store64_bigendian(unsigned char *y, unsigned long long x) {
long long i;
for (i = 7; i >= 0; --i) { y[i] = x; x >>= 8; }
}
static unsigned long long load64_bigendian(const unsigned char *x) {
unsigned long long y = 0;
long long i;
for (i = 0; i < 8; ++i) y = (y << 8) | x[i];
return y;
}
static unsigned long long R(unsigned long long x,int c) { return (x >> c) | ((x & 0xffffffffffffffffULL) << (64 - c)); }
static unsigned long long Ch(unsigned long long x, unsigned long long y, unsigned long long z) { return (x & y) ^ (~x & z); }
static unsigned long long Maj(unsigned long long x, unsigned long long y, unsigned long long z) { return (x & y) ^ (x & z) ^ (y & z); }
static unsigned long long Sigma0(unsigned long long x) { return R(x, 28) ^ R(x, 34) ^ R(x, 39); }
static unsigned long long Sigma1(unsigned long long x) { return R(x, 14) ^ R(x, 18) ^ R(x, 41); }
static unsigned long long sigma0(unsigned long long x) { return R(x, 1) ^ R(x, 8) ^ (x >> 7); }
static unsigned long long sigma1(unsigned long long x) { return R(x, 19) ^ R(x, 61) ^ (x >> 6); }
static const unsigned long long K[80] = {
0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
};
static void blocks(unsigned long long *z, const unsigned char *m, unsigned long long n) {
unsigned long long b[8], a[8], w[80], t;
long long i, j;
for (i = 0; i < 8; ++i) a[i] = z[i];
while (n >= 128) {
for (i = 0; i < 16; ++i) w[i] = load64_bigendian(m + 8 * i);
for (i = 16; i < 80; ++i) w[i] = (sigma1(w[i - 2]) + w[i - 7] + sigma0(w[i - 15]) + w[i - 16]) & 0xffffffffffffffffULL;
for (i = 0; i < 80; ++i) {
for (j = 0; j < 8; ++j) b[j] = a[j];
t = a[7] + Sigma1(a[4]) + Ch(a[4], a[5], a[6]) + K[i] + w[i];
b[7] = t + Sigma0(a[0]) + Maj(a[0], a[1], a[2]);
b[3] += t;
for (j = 0; j < 8; ++j) a[(j + 1) % 8] = b[j] & 0xffffffffffffffffULL;
}
for (i = 0; i < 8; ++i) { a[i] += z[i]; a[i] &= 0xffffffffffffffffULL; z[i] = a[i]; }
m += 128;
n -= 128;
}
}
int crypto_hash_sha512_tinyssh(unsigned char *o,const unsigned char *m, unsigned long long n) {
long long i;
unsigned char x[256];
unsigned long long b = n;
unsigned long long h[8] = {
0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,
0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL
};
blocks(h, m, n);
m += n;
n &= 127;
m -= n;
for (i = 0; i < sizeof x; ++i) x[i] = 0;
for (i = 0; i < n; ++i) x[i] = m[i];
x[n] = 128;
n = 256 - 128 * (n < 112);
x[n - 9] = b >> 61;
store64_bigendian(x + n - 8, b << 3);
blocks(h, x, n);
for (i = 0; i < 8; ++i) store64_bigendian(o + 8 * i, h[i]);
return 0;
}
tinyssh-20240101/crypto/crypto_hash_sha512.h 0000664 0000000 0000000 00000000646 14544472107 0020563 0 ustar 00root root 0000000 0000000 #ifndef crypto_hash_sha512_H
#define crypto_hash_sha512_H
#define crypto_hash_sha512_tinyssh_BYTES 64
extern int crypto_hash_sha512_tinyssh(unsigned char *, const unsigned char *, unsigned long long);
#define crypto_hash_sha512 crypto_hash_sha512_tinyssh
#define crypto_hash_sha512_BYTES crypto_hash_sha512_tinyssh_BYTES
#define crypto_hash_sha512_IMPLEMENTATION "tinyssh"
#define crypto_hash_sha512_VERSION "-"
#endif
tinyssh-20240101/crypto/crypto_int16.h 0000664 0000000 0000000 00000000152 14544472107 0017506 0 ustar 00root root 0000000 0000000 #ifndef crypto_int16_h
#define crypto_int16_h
#include
typedef int16_t crypto_int16;
#endif
tinyssh-20240101/crypto/crypto_int32.h 0000664 0000000 0000000 00000000152 14544472107 0017504 0 ustar 00root root 0000000 0000000 #ifndef crypto_int32_h
#define crypto_int32_h
#include
typedef int32_t crypto_int32;
#endif
tinyssh-20240101/crypto/crypto_int64.h 0000664 0000000 0000000 00000000152 14544472107 0017511 0 ustar 00root root 0000000 0000000 #ifndef crypto_int64_h
#define crypto_int64_h
#include
typedef int64_t crypto_int64;
#endif
tinyssh-20240101/crypto/crypto_int8.h 0000664 0000000 0000000 00000000146 14544472107 0017432 0 ustar 00root root 0000000 0000000 #ifndef crypto_int8_h
#define crypto_int8_h
#include
typedef int8_t crypto_int8;
#endif
tinyssh-20240101/crypto/crypto_kem_sntrup761.c 0000664 0000000 0000000 00000061625 14544472107 0021201 0 ustar 00root root 0000000 0000000 /*
Original code: supercop-20210125/crypto_kem/sntrup761/ref
Modifications (Jan Mojzis):
- source code merged into single file
- crypto_kem renamed to crypto_kem_sntrup761_tinyssh
*/
/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
#include
#include "crypto_uint64.h"
#include "crypto_uint32.h"
#include "crypto_uint16.h"
#include "crypto_int32.h"
#include "crypto_int16.h"
#include "crypto_int8.h"
#include "randombytes.h"
#include "crypto_verify_32.h"
#include "crypto_sort_uint32.h"
#include "crypto_hash_sha512.h"
#include "crypto_kem_sntrup761.h"
#define uint64 crypto_uint64
#define uint32 crypto_uint32
#define uint16 crypto_uint16
#define int32 crypto_int32
#define int16 crypto_int16
#define int8 crypto_int8
/* uint32.c */
/*
CPU division instruction typically takes time depending on x.
This software is designed to take time independent of x.
Time still varies depending on m; user must ensure that m is constant.
Time also varies on CPUs where multiplication is variable-time.
There could be more CPU issues.
There could also be compiler issues.
*/
static void uint32_divmod_uint14(uint32 *q,uint16 *r,uint32 x,uint16 m)
{
uint32 v = 0x80000000;
uint32 qpart;
uint32 mask;
v /= m;
/* caller guarantees m > 0 */
/* caller guarantees m < 16384 */
/* vm <= 2^31 <= vm+m-1 */
/* xvm <= 2^31 x <= xvm+x(m-1) */
*q = 0;
qpart = (x*(uint64)v)>>31;
/* 2^31 qpart <= xv <= 2^31 qpart + 2^31-1 */
/* 2^31 qpart m <= xvm <= 2^31 qpart m + (2^31-1)m */
/* 2^31 qpart m <= 2^31 x <= 2^31 qpart m + (2^31-1)m + x(m-1) */
/* 0 <= 2^31 newx <= (2^31-1)m + x(m-1) */
/* 0 <= newx <= (1-1/2^31)m + x(m-1)/2^31 */
/* 0 <= newx <= (1-1/2^31)(2^14-1) + (2^32-1)((2^14-1)-1)/2^31 */
x -= qpart*m; *q += qpart;
/* x <= 49146 */
qpart = (x*(uint64)v)>>31;
/* 0 <= newx <= (1-1/2^31)m + x(m-1)/2^31 */
/* 0 <= newx <= m + 49146(2^14-1)/2^31 */
/* 0 <= newx <= m + 0.4 */
/* 0 <= newx <= m */
x -= qpart*m; *q += qpart;
/* x <= m */
x -= m; *q += 1;
mask = -(x>>31);
x += mask&(uint32)m; *q += mask;
/* x < m */
*r = x;
}
uint32 uint32_div_uint14(uint32 x,uint16 m)
{
uint32 q;
uint16 r;
uint32_divmod_uint14(&q,&r,x,m);
return q;
}
uint16 uint32_mod_uint14(uint32 x,uint16 m)
{
uint32 q;
uint16 r;
uint32_divmod_uint14(&q,&r,x,m);
return r;
}
/* int32.c */
static void int32_divmod_uint14(int32 *q,uint16 *r,int32 x,uint16 m)
{
uint32 uq,uq2;
uint16 ur,ur2;
uint32 mask;
uint32_divmod_uint14(&uq,&ur,0x80000000+(uint32)x,m);
uint32_divmod_uint14(&uq2,&ur2,0x80000000,m);
ur -= ur2; uq -= uq2;
mask = -(uint32)(ur>>15);
ur += mask&m; uq += mask;
*r = ur; *q = uq;
}
int32 int32_div_uint14(int32 x,uint16 m)
{
int32 q;
uint16 r;
int32_divmod_uint14(&q,&r,x,m);
return q;
}
uint16 int32_mod_uint14(int32 x,uint16 m)
{
int32 q;
uint16 r;
int32_divmod_uint14(&q,&r,x,m);
return r;
}
/* paramsmenu.h */
/* pick one of these three: */
#define SIZE761
#undef SIZE653
#undef SIZE857
/* pick one of these two: */
#define SNTRUP /* Streamlined NTRU Prime */
#undef LPR /* NTRU LPRime */
/* params.h */
#ifndef params_H
#define params_H
/* menu of parameter choices: */
/* what the menu means: */
#if defined(SIZE761)
#define p 761
#define q 4591
#define Rounded_bytes 1007
#ifndef LPR
#define Rq_bytes 1158
#define w 286
#else
#define w 250
#define tau0 2156
#define tau1 114
#define tau2 2007
#define tau3 287
#endif
#elif defined(SIZE653)
#define p 653
#define q 4621
#define Rounded_bytes 865
#ifndef LPR
#define Rq_bytes 994
#define w 288
#else
#define w 252
#define tau0 2175
#define tau1 113
#define tau2 2031
#define tau3 290
#endif
#elif defined(SIZE857)
#define p 857
#define q 5167
#define Rounded_bytes 1152
#ifndef LPR
#define Rq_bytes 1322
#define w 322
#else
#define w 281
#define tau0 2433
#define tau1 101
#define tau2 2265
#define tau3 324
#endif
#else
#error "no parameter set defined"
#endif
#ifdef LPR
#define I 256
#endif
#endif
/* Decode.c */
static void Decode(uint16 *out,const unsigned char *S,const uint16 *M,long long len)
{
if (len == 1) {
if (M[0] == 1)
*out = 0;
else if (M[0] <= 256)
*out = uint32_mod_uint14(S[0],M[0]);
else
*out = uint32_mod_uint14(S[0]+(((uint16)S[1])<<8),M[0]);
}
if (len > 1) {
uint16 R2[(len+1)/2];
uint16 M2[(len+1)/2];
uint16 bottomr[len/2];
uint32 bottomt[len/2];
long long i;
for (i = 0;i < len-1;i += 2) {
uint32 m = M[i]*(uint32) M[i+1];
if (m > 256*16383) {
bottomt[i/2] = 256*256;
bottomr[i/2] = S[0]+256*S[1];
S += 2;
M2[i/2] = (((m+255)>>8)+255)>>8;
} else if (m >= 16384) {
bottomt[i/2] = 256;
bottomr[i/2] = S[0];
S += 1;
M2[i/2] = (m+255)>>8;
} else {
bottomt[i/2] = 1;
bottomr[i/2] = 0;
M2[i/2] = m;
}
}
if (i < len)
M2[i/2] = M[i];
Decode(R2,S,M2,(len+1)/2);
for (i = 0;i < len-1;i += 2) {
uint32 r = bottomr[i/2];
uint32 r1;
uint16 r0;
r += bottomt[i/2]*R2[i/2];
uint32_divmod_uint14(&r1,&r0,r,M[i]);
r1 = uint32_mod_uint14(r1,M[i+1]); /* only needed for invalid inputs */
*out++ = r0;
*out++ = r1;
}
if (i < len)
*out++ = R2[i/2];
}
}
/* Encode.c */
/* 0 <= R[i] < M[i] < 16384 */
static void Encode(unsigned char *out,const uint16 *R,const uint16 *M,long long len)
{
if (len == 1) {
uint16 r = R[0];
uint16 m = M[0];
while (m > 1) {
*out++ = r;
r >>= 8;
m = (m+255)>>8;
}
}
if (len > 1) {
uint16 R2[(len+1)/2];
uint16 M2[(len+1)/2];
long long i;
for (i = 0;i < len-1;i += 2) {
uint32 m0 = M[i];
uint32 r = R[i]+R[i+1]*m0;
uint32 m = M[i+1]*m0;
while (m >= 16384) {
*out++ = r;
r >>= 8;
m = (m+255)>>8;
}
R2[i/2] = r;
M2[i/2] = m;
}
if (i < len) {
R2[i/2] = R[i];
M2[i/2] = M[i];
}
Encode(out,R2,M2,(len+1)/2);
}
}
/* kem.c */
#ifdef LPR
#endif
/* ----- masks */
#ifndef LPR
/* return -1 if x!=0; else return 0 */
static int int16_nonzero_mask(int16 x)
{
uint16 u = x; /* 0, else 1...65535 */
uint32 v = u; /* 0, else 1...65535 */
v = -v; /* 0, else 2^32-65535...2^32-1 */
v >>= 31; /* 0, else 1 */
return -v; /* 0, else -1 */
}
#endif
/* return -1 if x<0; otherwise return 0 */
static int int16_negative_mask(int16 x)
{
uint16 u = x;
u >>= 15;
return -(int) u;
/* alternative with gcc -fwrapv: */
/* x>>15 compiles to CPU's arithmetic right shift */
}
/* ----- arithmetic mod 3 */
typedef int8 small;
/* F3 is always represented as -1,0,1 */
/* so ZZ_fromF3 is a no-op */
/* x must not be close to top int16 */
static small F3_freeze(int16 x)
{
return int32_mod_uint14(x+1,3)-1;
}
/* ----- arithmetic mod q */
#define q12 ((q-1)/2)
typedef int16 Fq;
/* always represented as -q12...q12 */
/* so ZZ_fromFq is a no-op */
/* x must not be close to top int32 */
static Fq Fq_freeze(int32 x)
{
return int32_mod_uint14(x+q12,q)-q12;
}
#ifndef LPR
static Fq Fq_recip(Fq a1)
{
int i = 1;
Fq ai = a1;
while (i < q-2) {
ai = Fq_freeze(a1*(int32)ai);
i += 1;
}
return ai;
}
#endif
/* ----- Top and Right */
#ifdef LPR
#define tau 16
static int8 Top(Fq C)
{
return (tau1*(int32)(C+tau0)+16384)>>15;
}
static Fq Right(int8 T)
{
return Fq_freeze(tau3*(int32)T-tau2);
}
#endif
/* ----- small polynomials */
#ifndef LPR
/* 0 if Weightw_is(r), else -1 */
static int Weightw_mask(small *r)
{
int weight = 0;
int i;
for (i = 0;i < p;++i) weight += r[i]&1;
return int16_nonzero_mask(weight-w);
}
/* R3_fromR(R_fromRq(r)) */
static void R3_fromRq(small *out,const Fq *r)
{
int i;
for (i = 0;i < p;++i) out[i] = F3_freeze(r[i]);
}
/* h = f*g in the ring R3 */
static void R3_mult(small *h,const small *f,const small *g)
{
small fg[p+p-1];
small result;
int i,j;
for (i = 0;i < p;++i) {
result = 0;
for (j = 0;j <= i;++j) result = F3_freeze(result+f[j]*g[i-j]);
fg[i] = result;
}
for (i = p;i < p+p-1;++i) {
result = 0;
for (j = i-p+1;j < p;++j) result = F3_freeze(result+f[j]*g[i-j]);
fg[i] = result;
}
for (i = p+p-2;i >= p;--i) {
fg[i-p] = F3_freeze(fg[i-p]+fg[i]);
fg[i-p+1] = F3_freeze(fg[i-p+1]+fg[i]);
}
for (i = 0;i < p;++i) h[i] = fg[i];
}
/* returns 0 if recip succeeded; else -1 */
static int R3_recip(small *out,const small *in)
{
small f[p+1],g[p+1],v[p+1],r[p+1];
int i,loop,delta;
int sign,swap,t;
for (i = 0;i < p+1;++i) v[i] = 0;
for (i = 0;i < p+1;++i) r[i] = 0;
r[0] = 1;
for (i = 0;i < p;++i) f[i] = 0;
f[0] = 1; f[p-1] = f[p] = -1;
for (i = 0;i < p;++i) g[p-1-i] = in[i];
g[p] = 0;
delta = 1;
for (loop = 0;loop < 2*p-1;++loop) {
for (i = p;i > 0;--i) v[i] = v[i-1];
v[0] = 0;
sign = -g[0]*f[0];
swap = int16_negative_mask(-delta) & int16_nonzero_mask(g[0]);
delta ^= swap&(delta^-delta);
delta += 1;
for (i = 0;i < p+1;++i) {
t = swap&(f[i]^g[i]); f[i] ^= t; g[i] ^= t;
t = swap&(v[i]^r[i]); v[i] ^= t; r[i] ^= t;
}
for (i = 0;i < p+1;++i) g[i] = F3_freeze(g[i]+sign*f[i]);
for (i = 0;i < p+1;++i) r[i] = F3_freeze(r[i]+sign*v[i]);
for (i = 0;i < p;++i) g[i] = g[i+1];
g[p] = 0;
}
sign = f[0];
for (i = 0;i < p;++i) out[i] = sign*v[p-1-i];
return int16_nonzero_mask(delta);
}
#endif
/* ----- polynomials mod q */
/* h = f*g in the ring Rq */
static void Rq_mult_small(Fq *h,const Fq *f,const small *g)
{
Fq fg[p+p-1];
Fq result;
int i,j;
for (i = 0;i < p;++i) {
result = 0;
for (j = 0;j <= i;++j) result = Fq_freeze(result+f[j]*(int32)g[i-j]);
fg[i] = result;
}
for (i = p;i < p+p-1;++i) {
result = 0;
for (j = i-p+1;j < p;++j) result = Fq_freeze(result+f[j]*(int32)g[i-j]);
fg[i] = result;
}
for (i = p+p-2;i >= p;--i) {
fg[i-p] = Fq_freeze(fg[i-p]+fg[i]);
fg[i-p+1] = Fq_freeze(fg[i-p+1]+fg[i]);
}
for (i = 0;i < p;++i) h[i] = fg[i];
}
#ifndef LPR
/* h = 3f in Rq */
static void Rq_mult3(Fq *h,const Fq *f)
{
int i;
for (i = 0;i < p;++i) h[i] = Fq_freeze(3*f[i]);
}
/* out = 1/(3*in) in Rq */
/* returns 0 if recip succeeded; else -1 */
static int Rq_recip3(Fq *out,const small *in)
{
Fq f[p+1],g[p+1],v[p+1],r[p+1];
int i,loop,delta;
int swap,t;
int32 f0,g0;
Fq scale;
for (i = 0;i < p+1;++i) v[i] = 0;
for (i = 0;i < p+1;++i) r[i] = 0;
r[0] = Fq_recip(3);
for (i = 0;i < p;++i) f[i] = 0;
f[0] = 1; f[p-1] = f[p] = -1;
for (i = 0;i < p;++i) g[p-1-i] = in[i];
g[p] = 0;
delta = 1;
for (loop = 0;loop < 2*p-1;++loop) {
for (i = p;i > 0;--i) v[i] = v[i-1];
v[0] = 0;
swap = int16_negative_mask(-delta) & int16_nonzero_mask(g[0]);
delta ^= swap&(delta^-delta);
delta += 1;
for (i = 0;i < p+1;++i) {
t = swap&(f[i]^g[i]); f[i] ^= t; g[i] ^= t;
t = swap&(v[i]^r[i]); v[i] ^= t; r[i] ^= t;
}
f0 = f[0];
g0 = g[0];
for (i = 0;i < p+1;++i) g[i] = Fq_freeze(f0*g[i]-g0*f[i]);
for (i = 0;i < p+1;++i) r[i] = Fq_freeze(f0*r[i]-g0*v[i]);
for (i = 0;i < p;++i) g[i] = g[i+1];
g[p] = 0;
}
scale = Fq_recip(f[0]);
for (i = 0;i < p;++i) out[i] = Fq_freeze(scale*(int32)v[p-1-i]);
return int16_nonzero_mask(delta);
}
#endif
/* ----- rounded polynomials mod q */
static void Round(Fq *out,const Fq *a)
{
int i;
for (i = 0;i < p;++i) out[i] = a[i]-F3_freeze(a[i]);
}
/* ----- sorting to generate short polynomial */
static void Short_fromlist(small *out,const uint32 *in)
{
uint32 L[p];
int i;
for (i = 0;i < w;++i) L[i] = in[i]&(uint32)-2;
for (i = w;i < p;++i) L[i] = (in[i]&(uint32)-3)|1;
crypto_sort_uint32(L,p);
for (i = 0;i < p;++i) out[i] = (L[i]&3)-1;
}
/* ----- underlying hash function */
#define Hash_bytes 32
/* e.g., b = 0 means out = Hash0(in) */
static void Hash_prefix(unsigned char *out,int b,const unsigned char *in,int inlen)
{
unsigned char x[inlen+1];
unsigned char h[64];
int i;
x[0] = b;
for (i = 0;i < inlen;++i) x[i+1] = in[i];
crypto_hash_sha512(h,x,inlen+1);
for (i = 0;i < 32;++i) out[i] = h[i];
}
/* ----- higher-level randomness */
static uint32 urandom32(void)
{
unsigned char c[4];
uint32 out[4];
randombytes(c,4);
out[0] = (uint32)c[0];
out[1] = ((uint32)c[1])<<8;
out[2] = ((uint32)c[2])<<16;
out[3] = ((uint32)c[3])<<24;
return out[0]+out[1]+out[2]+out[3];
}
static void Short_random(small *out)
{
uint32 L[p];
int i;
for (i = 0;i < p;++i) L[i] = urandom32();
Short_fromlist(out,L);
}
#ifndef LPR
static void Small_random(small *out)
{
int i;
for (i = 0;i < p;++i) out[i] = (((urandom32()&0x3fffffff)*3)>>30)-1;
}
#endif
/* ----- Streamlined NTRU Prime Core */
#ifndef LPR
/* h,(f,ginv) = KeyGen() */
static void KeyGen(Fq *h,small *f,small *ginv)
{
small g[p];
Fq finv[p];
for (;;) {
Small_random(g);
if (R3_recip(ginv,g) == 0) break;
}
Short_random(f);
Rq_recip3(finv,f); /* always works */
Rq_mult_small(h,finv,g);
}
/* c = Encrypt(r,h) */
static void Encrypt(Fq *c,const small *r,const Fq *h)
{
Fq hr[p];
Rq_mult_small(hr,h,r);
Round(c,hr);
}
/* r = Decrypt(c,(f,ginv)) */
static void Decrypt(small *r,const Fq *c,const small *f,const small *ginv)
{
Fq cf[p];
Fq cf3[p];
small e[p];
small ev[p];
int mask;
int i;
Rq_mult_small(cf,c,f);
Rq_mult3(cf3,cf);
R3_fromRq(e,cf3);
R3_mult(ev,e,ginv);
mask = Weightw_mask(ev); /* 0 if weight w, else -1 */
for (i = 0;i < w;++i) r[i] = ((ev[i]^1)&~mask)^1;
for (i = w;i < p;++i) r[i] = ev[i]&~mask;
}
#endif
/* ----- NTRU LPRime Core */
#ifdef LPR
/* (G,A),a = KeyGen(G); leaves G unchanged */
static void KeyGen(Fq *A,small *a,const Fq *G)
{
Fq aG[p];
Short_random(a);
Rq_mult_small(aG,G,a);
Round(A,aG);
}
/* B,T = Encrypt(r,(G,A),b) */
static void Encrypt(Fq *B,int8 *T,const int8 *r,const Fq *G,const Fq *A,const small *b)
{
Fq bG[p];
Fq bA[p];
int i;
Rq_mult_small(bG,G,b);
Round(B,bG);
Rq_mult_small(bA,A,b);
for (i = 0;i < I;++i) T[i] = Top(Fq_freeze(bA[i]+r[i]*q12));
}
/* r = Decrypt((B,T),a) */
static void Decrypt(int8 *r,const Fq *B,const int8 *T,const small *a)
{
Fq aB[p];
int i;
Rq_mult_small(aB,B,a);
for (i = 0;i < I;++i)
r[i] = -int16_negative_mask(Fq_freeze(Right(T[i])-aB[i]+4*w+1));
}
#endif
/* ----- encoding I-bit inputs */
#ifdef LPR
#define Inputs_bytes (I/8)
typedef int8 Inputs[I]; /* passed by reference */
static void Inputs_encode(unsigned char *s,const Inputs r)
{
int i;
for (i = 0;i < Inputs_bytes;++i) s[i] = 0;
for (i = 0;i < I;++i) s[i>>3] |= r[i]<<(i&7);
}
#endif
/* ----- Expand */
#ifdef LPR
static const unsigned char aes_nonce[16] = {0};
static void Expand(uint32 *L,const unsigned char *k)
{
int i;
crypto_stream_aes256ctr((unsigned char *) L,4*p,aes_nonce,k);
for (i = 0;i < p;++i) {
uint32 L0 = ((unsigned char *) L)[4*i];
uint32 L1 = ((unsigned char *) L)[4*i+1];
uint32 L2 = ((unsigned char *) L)[4*i+2];
uint32 L3 = ((unsigned char *) L)[4*i+3];
L[i] = L0+(L1<<8)+(L2<<16)+(L3<<24);
}
}
#endif
/* ----- Seeds */
#ifdef LPR
#define Seeds_bytes 32
static void Seeds_random(unsigned char *s)
{
randombytes(s,Seeds_bytes);
}
#endif
/* ----- Generator, HashShort */
#ifdef LPR
/* G = Generator(k) */
static void Generator(Fq *G,const unsigned char *k)
{
uint32 L[p];
int i;
Expand(L,k);
for (i = 0;i < p;++i) G[i] = uint32_mod_uint14(L[i],q)-q12;
}
/* out = HashShort(r) */
static void HashShort(small *out,const Inputs r)
{
unsigned char s[Inputs_bytes];
unsigned char h[Hash_bytes];
uint32 L[p];
Inputs_encode(s,r);
Hash_prefix(h,5,s,sizeof s);
Expand(L,h);
Short_fromlist(out,L);
}
#endif
/* ----- NTRU LPRime Expand */
#ifdef LPR
/* (S,A),a = XKeyGen() */
static void XKeyGen(unsigned char *S,Fq *A,small *a)
{
Fq G[p];
Seeds_random(S);
Generator(G,S);
KeyGen(A,a,G);
}
/* B,T = XEncrypt(r,(S,A)) */
static void XEncrypt(Fq *B,int8 *T,const int8 *r,const unsigned char *S,const Fq *A)
{
Fq G[p];
small b[p];
Generator(G,S);
HashShort(b,r);
Encrypt(B,T,r,G,A,b);
}
#define XDecrypt Decrypt
#endif
/* ----- encoding small polynomials (including short polynomials) */
#define Small_bytes ((p+3)/4)
/* these are the only functions that rely on p mod 4 = 1 */
static void Small_encode(unsigned char *s,const small *f)
{
small x;
int i;
for (i = 0;i < p/4;++i) {
x = *f++ + 1;
x += (*f++ + 1)<<2;
x += (*f++ + 1)<<4;
x += (*f++ + 1)<<6;
*s++ = x;
}
x = *f++ + 1;
*s++ = x;
}
static void Small_decode(small *f,const unsigned char *s)
{
unsigned char x;
int i;
for (i = 0;i < p/4;++i) {
x = *s++;
*f++ = ((small)(x&3))-1; x >>= 2;
*f++ = ((small)(x&3))-1; x >>= 2;
*f++ = ((small)(x&3))-1; x >>= 2;
*f++ = ((small)(x&3))-1;
}
x = *s++;
*f++ = ((small)(x&3))-1;
}
/* ----- encoding general polynomials */
#ifndef LPR
static void Rq_encode(unsigned char *s,const Fq *r)
{
uint16 R[p],M[p];
int i;
for (i = 0;i < p;++i) R[i] = r[i]+q12;
for (i = 0;i < p;++i) M[i] = q;
Encode(s,R,M,p);
}
static void Rq_decode(Fq *r,const unsigned char *s)
{
uint16 R[p],M[p];
int i;
for (i = 0;i < p;++i) M[i] = q;
Decode(R,s,M,p);
for (i = 0;i < p;++i) r[i] = ((Fq)R[i])-q12;
}
#endif
/* ----- encoding rounded polynomials */
static void Rounded_encode(unsigned char *s,const Fq *r)
{
uint16 R[p],M[p];
int i;
for (i = 0;i < p;++i) R[i] = ((r[i]+q12)*10923)>>15;
for (i = 0;i < p;++i) M[i] = (q+2)/3;
Encode(s,R,M,p);
}
static void Rounded_decode(Fq *r,const unsigned char *s)
{
uint16 R[p],M[p];
int i;
for (i = 0;i < p;++i) M[i] = (q+2)/3;
Decode(R,s,M,p);
for (i = 0;i < p;++i) r[i] = R[i]*3-q12;
}
/* ----- encoding top polynomials */
#ifdef LPR
#define Top_bytes (I/2)
static void Top_encode(unsigned char *s,const int8 *T)
{
int i;
for (i = 0;i < Top_bytes;++i)
s[i] = T[2*i]+(T[2*i+1]<<4);
}
static void Top_decode(int8 *T,const unsigned char *s)
{
int i;
for (i = 0;i < Top_bytes;++i) {
T[2*i] = s[i]&15;
T[2*i+1] = s[i]>>4;
}
}
#endif
/* ----- Streamlined NTRU Prime Core plus encoding */
#ifndef LPR
typedef small Inputs[p]; /* passed by reference */
#define Inputs_random Short_random
#define Inputs_encode Small_encode
#define Inputs_bytes Small_bytes
#define Ciphertexts_bytes Rounded_bytes
#define SecretKeys_bytes (2*Small_bytes)
#define PublicKeys_bytes Rq_bytes
/* pk,sk = ZKeyGen() */
static void ZKeyGen(unsigned char *pk,unsigned char *sk)
{
Fq h[p];
small f[p],v[p];
KeyGen(h,f,v);
Rq_encode(pk,h);
Small_encode(sk,f); sk += Small_bytes;
Small_encode(sk,v);
}
/* C = ZEncrypt(r,pk) */
static void ZEncrypt(unsigned char *C,const Inputs r,const unsigned char *pk)
{
Fq h[p];
Fq c[p];
Rq_decode(h,pk);
Encrypt(c,r,h);
Rounded_encode(C,c);
}
/* r = ZDecrypt(C,sk) */
static void ZDecrypt(Inputs r,const unsigned char *C,const unsigned char *sk)
{
small f[p],v[p];
Fq c[p];
Small_decode(f,sk); sk += Small_bytes;
Small_decode(v,sk);
Rounded_decode(c,C);
Decrypt(r,c,f,v);
}
#endif
/* ----- NTRU LPRime Expand plus encoding */
#ifdef LPR
#define Ciphertexts_bytes (Rounded_bytes+Top_bytes)
#define SecretKeys_bytes Small_bytes
#define PublicKeys_bytes (Seeds_bytes+Rounded_bytes)
static void Inputs_random(Inputs r)
{
unsigned char s[Inputs_bytes];
int i;
randombytes(s,sizeof s);
for (i = 0;i < I;++i) r[i] = 1&(s[i>>3]>>(i&7));
}
/* pk,sk = ZKeyGen() */
static void ZKeyGen(unsigned char *pk,unsigned char *sk)
{
Fq A[p];
small a[p];
XKeyGen(pk,A,a); pk += Seeds_bytes;
Rounded_encode(pk,A);
Small_encode(sk,a);
}
/* c = ZEncrypt(r,pk) */
static void ZEncrypt(unsigned char *c,const Inputs r,const unsigned char *pk)
{
Fq A[p];
Fq B[p];
int8 T[I];
Rounded_decode(A,pk+Seeds_bytes);
XEncrypt(B,T,r,pk,A);
Rounded_encode(c,B); c += Rounded_bytes;
Top_encode(c,T);
}
/* r = ZDecrypt(C,sk) */
static void ZDecrypt(Inputs r,const unsigned char *c,const unsigned char *sk)
{
small a[p];
Fq B[p];
int8 T[I];
Small_decode(a,sk);
Rounded_decode(B,c);
Top_decode(T,c+Rounded_bytes);
XDecrypt(r,B,T,a);
}
#endif
/* ----- confirmation hash */
#define Confirm_bytes 32
/* h = HashConfirm(r,pk,cache); cache is Hash4(pk) */
static void HashConfirm(unsigned char *h,const unsigned char *r,const unsigned char *pk,const unsigned char *cache)
{
#ifndef LPR
unsigned char x[Hash_bytes*2];
int i;
Hash_prefix(x,3,r,Inputs_bytes);
for (i = 0;i < Hash_bytes;++i) x[Hash_bytes+i] = cache[i];
#else
unsigned char x[Inputs_bytes+Hash_bytes];
int i;
for (i = 0;i < Inputs_bytes;++i) x[i] = r[i];
for (i = 0;i < Hash_bytes;++i) x[Inputs_bytes+i] = cache[i];
#endif
Hash_prefix(h,2,x,sizeof x);
}
/* ----- session-key hash */
/* k = HashSession(b,y,z) */
static void HashSession(unsigned char *k,int b,const unsigned char *y,const unsigned char *z)
{
#ifndef LPR
unsigned char x[Hash_bytes+Ciphertexts_bytes+Confirm_bytes];
int i;
Hash_prefix(x,3,y,Inputs_bytes);
for (i = 0;i < Ciphertexts_bytes+Confirm_bytes;++i) x[Hash_bytes+i] = z[i];
#else
unsigned char x[Inputs_bytes+Ciphertexts_bytes+Confirm_bytes];
int i;
for (i = 0;i < Inputs_bytes;++i) x[i] = y[i];
for (i = 0;i < Ciphertexts_bytes+Confirm_bytes;++i) x[Inputs_bytes+i] = z[i];
#endif
Hash_prefix(k,b,x,sizeof x);
}
/* ----- Streamlined NTRU Prime and NTRU LPRime */
/* pk,sk = KEM_KeyGen() */
static void KEM_KeyGen(unsigned char *pk,unsigned char *sk)
{
int i;
ZKeyGen(pk,sk); sk += SecretKeys_bytes;
for (i = 0;i < PublicKeys_bytes;++i) *sk++ = pk[i];
randombytes(sk,Inputs_bytes); sk += Inputs_bytes;
Hash_prefix(sk,4,pk,PublicKeys_bytes);
}
/* c,r_enc = Hide(r,pk,cache); cache is Hash4(pk) */
static void Hide(unsigned char *c,unsigned char *r_enc,const Inputs r,const unsigned char *pk,const unsigned char *cache)
{
Inputs_encode(r_enc,r);
ZEncrypt(c,r,pk); c += Ciphertexts_bytes;
HashConfirm(c,r_enc,pk,cache);
}
/* c,k = Encap(pk) */
static void Encap(unsigned char *c,unsigned char *k,const unsigned char *pk)
{
Inputs r;
unsigned char r_enc[Inputs_bytes];
unsigned char cache[Hash_bytes];
Hash_prefix(cache,4,pk,PublicKeys_bytes);
Inputs_random(r);
Hide(c,r_enc,r,pk,cache);
HashSession(k,1,r_enc,c);
}
/* 0 if matching ciphertext+confirm, else -1 */
static int Ciphertexts_diff_mask(const unsigned char *c,const unsigned char *c2)
{
uint16 differentbits = 0;
int len = Ciphertexts_bytes+Confirm_bytes;
while (len-- > 0) differentbits |= (*c++)^(*c2++);
return (1&((differentbits-1)>>8))-1;
}
/* k = Decap(c,sk) */
static void Decap(unsigned char *k,const unsigned char *c,const unsigned char *sk)
{
const unsigned char *pk = sk + SecretKeys_bytes;
const unsigned char *rho = pk + PublicKeys_bytes;
const unsigned char *cache = rho + Inputs_bytes;
Inputs r;
unsigned char r_enc[Inputs_bytes];
unsigned char cnew[Ciphertexts_bytes+Confirm_bytes];
int mask;
int i;
ZDecrypt(r,c,sk);
Hide(cnew,r_enc,r,pk,cache);
mask = Ciphertexts_diff_mask(c,cnew);
for (i = 0;i < Inputs_bytes;++i) r_enc[i] ^= mask&(r_enc[i]^rho[i]);
HashSession(k,1+mask,r_enc,c);
}
/* ----- crypto_kem_sntrup761_tinyssh API */
int crypto_kem_sntrup761_tinyssh_keypair(unsigned char *pk,unsigned char *sk)
{
KEM_KeyGen(pk,sk);
return 0;
}
int crypto_kem_sntrup761_tinyssh_enc(unsigned char *c,unsigned char *k,const unsigned char *pk)
{
Encap(c,k,pk);
return 0;
}
int crypto_kem_sntrup761_tinyssh_dec(unsigned char *k,const unsigned char *c,const unsigned char *sk)
{
Decap(k,c,sk);
return 0;
}
#if 0
Script used to merge into single the file:
#!/bin/sh
rm crypto_kem_sntrup761.c || :
(
cd "$1"
echo '/*'
echo 'Original code: supercop-20210125/crypto_kem/sntrup761/ref'
echo 'Modifications (Jan Mojzis):'
echo '- source code merged into single file'
echo '- crypto_kem renamed to crypto_kem_sntrup761_tinyssh'
echo '*/'
echo
echo '/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */'
echo
echo '#include '
echo '#include "crypto_uint64.h"'
echo '#include "crypto_uint32.h"'
echo '#include "crypto_uint16.h"'
echo '#include "crypto_int32.h"'
echo '#include "crypto_int16.h"'
echo '#include "crypto_int8.h"'
echo '#include "randombytes.h"'
echo '#include "crypto_verify_32.h"'
echo '#include "crypto_sort_uint32.h"'
echo '#include "crypto_hash_sha512.h"'
echo '#include "crypto_kem_sntrup761.h"'
echo ''
echo '#define uint64 crypto_uint64'
echo '#define uint32 crypto_uint32'
echo '#define uint16 crypto_uint16'
echo '#define int32 crypto_int32'
echo '#define int16 crypto_int16'
echo '#define int8 crypto_int8'
echo
(
for f in uint32.c int32.c paramsmenu.h params.h Decode.c Encode.c; do
echo "/* ${f} */"
cat "${f}" | sed 's/^void /static void /' | sed 's/^int16 /static int16 /'
echo
done | grep -v '#include'
)
(
echo '/* kem.c */'
cat kem.c
echo
) | grep -v '#include' | sed 's/crypto_kem/crypto_kem_sntrup761_tinyssh/g'
echo
echo '#if 0'
echo 'Script used to merge into single the file:'
echo
cat $0
echo
echo '#endif'
) > crypto_kem_sntrup761.c.tmp
mv -f crypto_kem_sntrup761.c.tmp crypto_kem_sntrup761.c
#endif
tinyssh-20240101/crypto/crypto_kem_sntrup761.h 0000664 0000000 0000000 00000002304 14544472107 0021173 0 ustar 00root root 0000000 0000000 #ifndef crypto_kem_sntrup761_H
#define crypto_kem_sntrup761_H
#define crypto_kem_sntrup761_tinyssh_SECRETKEYBYTES 1763
#define crypto_kem_sntrup761_tinyssh_PUBLICKEYBYTES 1158
#define crypto_kem_sntrup761_tinyssh_CIPHERTEXTBYTES 1039
#define crypto_kem_sntrup761_tinyssh_BYTES 32
extern int crypto_kem_sntrup761_tinyssh_keypair(unsigned char *, unsigned char *);
extern int crypto_kem_sntrup761_tinyssh_enc(unsigned char *, unsigned char *, const unsigned char *);
extern int crypto_kem_sntrup761_tinyssh_dec(unsigned char *, const unsigned char *, const unsigned char *);
#define crypto_kem_sntrup761_keypair crypto_kem_sntrup761_tinyssh_keypair
#define crypto_kem_sntrup761_enc crypto_kem_sntrup761_tinyssh_enc
#define crypto_kem_sntrup761_dec crypto_kem_sntrup761_tinyssh_dec
#define crypto_kem_sntrup761_SECRETKEYBYTES crypto_kem_sntrup761_tinyssh_SECRETKEYBYTES
#define crypto_kem_sntrup761_PUBLICKEYBYTES crypto_kem_sntrup761_tinyssh_PUBLICKEYBYTES
#define crypto_kem_sntrup761_CIPHERTEXTBYTES crypto_kem_sntrup761_tinyssh_CIPHERTEXTBYTES
#define crypto_kem_sntrup761_BYTES crypto_kem_sntrup761_tinyssh_BYTES
#define crypto_kem_sntrup761_IMPLEMENTATION "tinyssh"
#define crypto_kem_sntrup761_VERSION "-"
#endif
tinyssh-20240101/crypto/crypto_kem_sntrup761x25519.c 0000664 0000000 0000000 00000007234 14544472107 0021773 0 ustar 00root root 0000000 0000000 /*
20210314
Jan Mojzis
Public domain.
*/
#include "randombytes.h"
#include "cleanup.h"
#include "crypto_hash_sha512.h"
#include "crypto_scalarmult_curve25519.h"
#include "crypto_kem_sntrup761.h"
#include "crypto_kem_sntrup761x25519.h"
#define sntrup761_BYTES crypto_kem_sntrup761_BYTES
#define x25519_BYTES crypto_scalarmult_curve25519_BYTES
#define x25519_SCALARBYTES crypto_scalarmult_curve25519_SCALARBYTES
#define sx_BYTES sntrup761_BYTES + x25519_BYTES
#define sntrup761_PUBLICKEYBYTES crypto_kem_sntrup761_PUBLICKEYBYTES
#define sntrup761_SECRETKEYBYTES crypto_kem_sntrup761_SECRETKEYBYTES
#define sx_PUBLICKEYBYTES sntrup761_PUBLICKEYBYTES + x25519_BYTES
#define sx_SECRETKEYBYTES sntrup761_SECRETKEYBYTES + x25519_SCALARBYTES
static unsigned char returnmask(int x) {
unsigned long long ret = 1ULL;
ret <<= 8 * sizeof(int);
ret -= (unsigned long long)(unsigned int)x;
ret >>= 8 * sizeof(int);
return ret - 1;
}
int crypto_kem_sntrup761x25519_tinyssh_enc(unsigned char *c,
unsigned char *k,
const unsigned char *pk) {
int r = 0;
long long i;
unsigned char onetimesk[x25519_SCALARBYTES];
unsigned char buf[sx_BYTES];
unsigned char tmp[sx_BYTES];
unsigned char b;
/* sntrup761 */
r |= crypto_kem_sntrup761_enc(c, buf, pk);
pk += crypto_kem_sntrup761_PUBLICKEYBYTES;
c += crypto_kem_sntrup761_CIPHERTEXTBYTES;
/* x25519 */
randombytes(onetimesk, sizeof onetimesk);
r |= crypto_scalarmult_curve25519_base(/*onetimepk*/ c, onetimesk);
r |= crypto_scalarmult_curve25519(buf + sntrup761_BYTES, onetimesk, pk);
/* if something fails, fill the buffer with random data */
randombytes(tmp, sizeof tmp);
b = returnmask(r);
for (i = 0; i < sx_BYTES; ++i) tmp[i] = b & (tmp[i] ^ buf[i]);
for (i = 0; i < sx_BYTES; ++i) buf[i] ^= tmp[i];
/* hash together sntrup459176 KEM-key and x25519 shared secret */
crypto_hash_sha512(k, buf, sizeof buf);
/* cleanup */
cleanup(buf);
cleanup(onetimesk);
return r;
}
int crypto_kem_sntrup761x25519_tinyssh_dec(unsigned char *k,
const unsigned char *c,
const unsigned char *sk) {
int r = 0;
long long i;
unsigned char buf[sx_BYTES];
unsigned char tmp[sx_BYTES];
unsigned char b;
/* sntrup761 */
r |= crypto_kem_sntrup761_dec(buf, c, sk);
sk += crypto_kem_sntrup761_SECRETKEYBYTES;
c += crypto_kem_sntrup761_CIPHERTEXTBYTES;
/* x25519 */
r |= crypto_scalarmult_curve25519(buf + sntrup761_BYTES, sk, c);
/* if something fails, fill the buffer with random data */
randombytes(tmp, sizeof tmp);
b = returnmask(r);
for (i = 0; i < sx_BYTES; ++i) tmp[i] = b & (tmp[i] ^ buf[i]);
for (i = 0; i < sx_BYTES; ++i) buf[i] ^= tmp[i];
/* hash together sntrup459176 KEM-key and x25519 shared secret */
crypto_hash_sha512(k, buf, sizeof buf);
/* cleanup */
cleanup(buf);
return r;
}
int crypto_kem_sntrup761x25519_tinyssh_keypair(unsigned char *pk,
unsigned char *sk) {
int r = 0;
long long i;
unsigned char b;
/* sntrup761 */
r |= crypto_kem_sntrup761_keypair(pk, sk);
/* x25519 */
randombytes(sk + sntrup761_SECRETKEYBYTES, x25519_SCALARBYTES);
r |= crypto_scalarmult_curve25519_base(pk + sntrup761_PUBLICKEYBYTES,
sk + sntrup761_SECRETKEYBYTES);
b = ~returnmask(r);
for (i = 0; i < sx_PUBLICKEYBYTES; ++i) pk[i] &= b;
for (i = 0; i < sx_SECRETKEYBYTES; ++i) sk[i] &= b;
return r;
}
tinyssh-20240101/crypto/crypto_kem_sntrup761x25519.h 0000664 0000000 0000000 00000002532 14544472107 0021774 0 ustar 00root root 0000000 0000000 #ifndef crypto_kem_sntrup761x25519_H
#define crypto_kem_sntrup761x25519_H
#define crypto_kem_sntrup761x25519_tinyssh_SECRETKEYBYTES 1795
#define crypto_kem_sntrup761x25519_tinyssh_PUBLICKEYBYTES 1190
#define crypto_kem_sntrup761x25519_tinyssh_CIPHERTEXTBYTES 1071
#define crypto_kem_sntrup761x25519_tinyssh_BYTES 64
extern int crypto_kem_sntrup761x25519_tinyssh_keypair(unsigned char *, unsigned char *);
extern int crypto_kem_sntrup761x25519_tinyssh_enc(unsigned char *, unsigned char *, const unsigned char *);
extern int crypto_kem_sntrup761x25519_tinyssh_dec(unsigned char *, const unsigned char *, const unsigned char *);
#define crypto_kem_sntrup761x25519_keypair crypto_kem_sntrup761x25519_tinyssh_keypair
#define crypto_kem_sntrup761x25519_enc crypto_kem_sntrup761x25519_tinyssh_enc
#define crypto_kem_sntrup761x25519_dec crypto_kem_sntrup761x25519_tinyssh_dec
#define crypto_kem_sntrup761x25519_SECRETKEYBYTES crypto_kem_sntrup761x25519_tinyssh_SECRETKEYBYTES
#define crypto_kem_sntrup761x25519_PUBLICKEYBYTES crypto_kem_sntrup761x25519_tinyssh_PUBLICKEYBYTES
#define crypto_kem_sntrup761x25519_CIPHERTEXTBYTES crypto_kem_sntrup761x25519_tinyssh_CIPHERTEXTBYTES
#define crypto_kem_sntrup761x25519_BYTES crypto_kem_sntrup761x25519_tinyssh_BYTES
#define crypto_kem_sntrup761x25519_IMPLEMENTATION "tinyssh"
#define crypto_kem_sntrup761x25519_VERSION "-"
#endif
tinyssh-20240101/crypto/crypto_onetimeauth_poly1305.c 0000664 0000000 0000000 00000013132 14544472107 0022440 0 ustar 00root root 0000000 0000000 /*
20200202
*/
/*
Based on poly1305-donna (https://github.com/floodyberry/poly1305-opt/blob/master/extensions/poly1305_ref-32.c)
- modified for NaCl API
*/
#include "crypto_onetimeauth_poly1305.h"
/* clang-format off */
static inline unsigned long unpack32(const unsigned char *x) {
return
(unsigned long) (x[0]) \
| (((unsigned long) (x[1])) << 8) \
| (((unsigned long) (x[2])) << 16) \
| (((unsigned long) (x[3])) << 24);
}
static inline void pack32(unsigned char *x, unsigned long u) {
x[0] = u; u >>= 8;
x[1] = u; u >>= 8;
x[2] = u; u >>= 8;
x[3] = u;
}
int crypto_onetimeauth_poly1305_tinyssh(unsigned char *o, const unsigned char *m, unsigned long long n, const unsigned char *k) {
unsigned long h0, h1, h2, h3, h4;
unsigned long r0, r1, r2, r3, r4;
unsigned long s1, s2, s3, s4;
unsigned long long d0, d1, d2, d3, d4;
unsigned long c, mask;
unsigned long long f;
long long i;
/* r &= 0xffffffc0ffffffc0ffffffc0fffffff */
r0 = (unpack32(k + 0) ) & 0x3ffffff;
r1 = (unpack32(k + 3) >> 2) & 0x3ffff03;
r2 = (unpack32(k + 6) >> 4) & 0x3ffc0ff;
r3 = (unpack32(k + 9) >> 6) & 0x3f03fff;
r4 = (unpack32(k + 12) >> 8) & 0x00fffff;
s1 = r1 * 5;
s2 = r2 * 5;
s3 = r3 * 5;
s4 = r4 * 5;
/* h = 0 */
h0 = h1 = h2 = h3 = h4 = 0;
while (n > 0) {
/* h += m[i] */
if (n >= 16) {
h0 += (unpack32(m ) ) & 0x3ffffff;
h1 += (unpack32(m + 3) >> 2) & 0x3ffffff;
h2 += (unpack32(m + 6) >> 4) & 0x3ffffff;
h3 += (unpack32(m + 9) >> 6) & 0x3ffffff;
h4 += (unpack32(m + 12) >> 8) | 16777216;
m += 16;
n -= 16;
}
else {
unsigned char mm[16];
for (i = 0; i < 16; ++i) mm[i] = 0;
for (i = 0; i < n; ++i) mm[i] = m[i];
mm[i] = 1;
h0 += (unpack32(mm ) ) & 0x3ffffff;
h1 += (unpack32(mm + 3) >> 2) & 0x3ffffff;
h2 += (unpack32(mm + 6) >> 4) & 0x3ffffff;
h3 += (unpack32(mm + 9) >> 6) & 0x3ffffff;
h4 += (unpack32(mm + 12) >> 8);
n = 0;
}
/* h *= r */
d0 = ((unsigned long long)h0 * r0) + ((unsigned long long)h1 * s4) + ((unsigned long long)h2 * s3) + ((unsigned long long)h3 * s2) + ((unsigned long long)h4 * s1);
d1 = ((unsigned long long)h0 * r1) + ((unsigned long long)h1 * r0) + ((unsigned long long)h2 * s4) + ((unsigned long long)h3 * s3) + ((unsigned long long)h4 * s2);
d2 = ((unsigned long long)h0 * r2) + ((unsigned long long)h1 * r1) + ((unsigned long long)h2 * r0) + ((unsigned long long)h3 * s4) + ((unsigned long long)h4 * s3);
d3 = ((unsigned long long)h0 * r3) + ((unsigned long long)h1 * r2) + ((unsigned long long)h2 * r1) + ((unsigned long long)h3 * r0) + ((unsigned long long)h4 * s4);
d4 = ((unsigned long long)h0 * r4) + ((unsigned long long)h1 * r3) + ((unsigned long long)h2 * r2) + ((unsigned long long)h3 * r1) + ((unsigned long long)h4 * r0);
/* (partial) h %= p */
c = (unsigned long)(d0 >> 26); h0 = (unsigned long)d0 & 0x3ffffff;
d1 += c; c = (unsigned long)(d1 >> 26); h1 = (unsigned long)d1 & 0x3ffffff;
d2 += c; c = (unsigned long)(d2 >> 26); h2 = (unsigned long)d2 & 0x3ffffff;
d3 += c; c = (unsigned long)(d3 >> 26); h3 = (unsigned long)d3 & 0x3ffffff;
d4 += c; c = (unsigned long)(d4 >> 26); h4 = (unsigned long)d4 & 0x3ffffff;
h0 += c * 5; c = (h0 >> 26); h0 = h0 & 0x3ffffff;
h1 += c;
}
/* fully carry h */
c = h1 >> 26; h1 = h1 & 0x3ffffff;
h2 += c; c = h2 >> 26; h2 = h2 & 0x3ffffff;
h3 += c; c = h3 >> 26; h3 = h3 & 0x3ffffff;
h4 += c; c = h4 >> 26; h4 = h4 & 0x3ffffff;
h0 += c * 5; c = h0 >> 26; h0 = h0 & 0x3ffffff;
h1 += c;
/* compute h + -p */
r0 = h0 + 5; c = r0 >> 26; r0 &= 0x3ffffff;
r1 = h1 + c; c = r1 >> 26; r1 &= 0x3ffffff;
r2 = h2 + c; c = r2 >> 26; r2 &= 0x3ffffff;
r3 = h3 + c; c = r3 >> 26; r3 &= 0x3ffffff;
r4 = h4 + c - (1 << 26);
/* select h if h < p, or h + -p if h >= p */
mask = (r4 >> ((sizeof(unsigned long) * 8) - 1)) - 1;
r0 &= mask;
r1 &= mask;
r2 &= mask;
r3 &= mask;
r4 &= mask;
mask = ~mask;
h0 = (h0 & mask) | r0;
h1 = (h1 & mask) | r1;
h2 = (h2 & mask) | r2;
h3 = (h3 & mask) | r3;
h4 = (h4 & mask) | r4;
/* h = h % (2^128) */
h0 = ((h0 ) | (h1 << 26)) & 0xffffffff;
h1 = ((h1 >> 6) | (h2 << 20)) & 0xffffffff;
h2 = ((h2 >> 12) | (h3 << 14)) & 0xffffffff;
h3 = ((h3 >> 18) | (h4 << 8)) & 0xffffffff;
/* mac = (h + pad) % (2^128) */
f = (unsigned long long)h0 + unpack32(k + 16) ; h0 = (unsigned long)f;
f = (unsigned long long)h1 + unpack32(k + 20) + (f >> 32); h1 = (unsigned long)f;
f = (unsigned long long)h2 + unpack32(k + 24) + (f >> 32); h2 = (unsigned long)f;
f = (unsigned long long)h3 + unpack32(k + 28) + (f >> 32); h3 = (unsigned long)f;
pack32(o + 0, h0);
pack32(o + 4, h1);
pack32(o + 8, h2);
pack32(o + 12, h3);
return 0;
}
int crypto_onetimeauth_poly1305_tinyssh_verify(const unsigned char *h, const unsigned char *in, unsigned long long l, const unsigned char *k) {
unsigned char correct[16];
unsigned int d = 0;
long long i;
crypto_onetimeauth_poly1305(correct, in, l, k);
for (i = 0; i < 16; ++i) d |= correct[i] ^ h[i];
return (1 & ((d - 1) >> 8)) - 1;
}
/* clang-format on */
tinyssh-20240101/crypto/crypto_onetimeauth_poly1305.h 0000664 0000000 0000000 00000001611 14544472107 0022444 0 ustar 00root root 0000000 0000000 #ifndef crypto_onetimeauth_poly1305_H
#define crypto_onetimeauth_poly1305_H
#define crypto_onetimeauth_poly1305_tinyssh_BYTES 16
#define crypto_onetimeauth_poly1305_tinyssh_KEYBYTES 32
extern int crypto_onetimeauth_poly1305_tinyssh(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *);
extern int crypto_onetimeauth_poly1305_tinyssh_verify(const unsigned char *,const unsigned char *,unsigned long long,const unsigned char *);
#define crypto_onetimeauth_poly1305 crypto_onetimeauth_poly1305_tinyssh
#define crypto_onetimeauth_poly1305_verify crypto_onetimeauth_poly1305_tinyssh_verify
#define crypto_onetimeauth_poly1305_BYTES crypto_onetimeauth_poly1305_tinyssh_BYTES
#define crypto_onetimeauth_poly1305_KEYBYTES crypto_onetimeauth_poly1305_tinyssh_KEYBYTES
#define crypto_onetimeauth_poly1305_IMPLEMENTATION "tinyssh"
#define crypto_onetimeauth_poly1305_VERSION "-"
#endif
tinyssh-20240101/crypto/crypto_scalarmult_curve25519.c 0000664 0000000 0000000 00000003556 14544472107 0022534 0 ustar 00root root 0000000 0000000 #include "cleanup.h"
#include "fe25519.h"
#include "crypto_scalarmult_curve25519.h"
int crypto_scalarmult_curve25519_tinyssh(unsigned char *q, const unsigned char *n, const unsigned char *p) {
unsigned char e[32];
fe x1, x2, z2, x3, z3, tmp0, tmp1;
long long i;
unsigned int d = 0;
int pos;
crypto_uint32 swap, b;
for (i = 0; i < 32; ++i) e[i] = n[i];
e[0] &= 248;
e[31] &= 127;
e[31] |= 64;
fe25519_frombytes(x1, p);
fe_1(x2);
fe_0(z2);
fe_copy(x3, x1);
fe_1(z3);
swap = 0;
for (pos = 254; pos >= 0; --pos) {
b = e[pos / 8] >> (pos & 7);
b &= 1;
swap ^= b;
fe_cswap(x2, x3, swap);
fe_cswap(z2, z3, swap);
swap = b;
fe25519_sub(tmp0, x3, z3);
fe25519_sub(tmp1, x2, z2);
fe25519_add(x2, x2, z2);
fe25519_add(z2, x3, z3);
fe25519_mul(z3, tmp0, x2);
fe25519_mul(z2, z2, tmp1);
fe25519_sq(tmp0, tmp1);
fe25519_sq(tmp1, x2);
fe25519_add(x3, z3, z2);
fe25519_sub(z2, z3, z2);
fe25519_mul(x2, tmp1, tmp0);
fe25519_sub(tmp1, tmp1, tmp0);
fe25519_sq(z2, z2);
fe25519_mul121666(z3, tmp1);
fe25519_sq(x3, x3);
fe25519_add(tmp0, tmp0, z3);
fe25519_mul(z3, x1, z2);
fe25519_mul(z2, tmp1, tmp0);
}
fe_cswap(x2, x3, swap);
fe_cswap(z2, z3, swap);
fe25519_inv(z2, z2);
fe25519_mul(x2, x2, z2);
fe25519_tobytes(q, x2);
cleanup(e);
cleanup(tmp0); cleanup(tmp1);
cleanup(x1); cleanup(x2); cleanup(x3);
cleanup(z2); cleanup(z3);
for (i = 0; i < 32; ++i) d |= q[i];
return -(1 & ((d - 1) >> 8));
}
static const unsigned char basepoint[32] = {9};
int crypto_scalarmult_curve25519_tinyssh_base(unsigned char *q, const unsigned char *n) {
return crypto_scalarmult_curve25519_tinyssh(q, n, basepoint);
}
tinyssh-20240101/crypto/crypto_scalarmult_curve25519.h 0000664 0000000 0000000 00000001532 14544472107 0022531 0 ustar 00root root 0000000 0000000 #ifndef crypto_scalarmult_curve25519_H
#define crypto_scalarmult_curve25519_H
#define crypto_scalarmult_curve25519_tinyssh_BYTES 32
#define crypto_scalarmult_curve25519_tinyssh_SCALARBYTES 32
extern int crypto_scalarmult_curve25519_tinyssh(unsigned char *,const unsigned char *,const unsigned char *);
extern int crypto_scalarmult_curve25519_tinyssh_base(unsigned char *,const unsigned char *);
#define crypto_scalarmult_curve25519 crypto_scalarmult_curve25519_tinyssh
#define crypto_scalarmult_curve25519_base crypto_scalarmult_curve25519_tinyssh_base
#define crypto_scalarmult_curve25519_BYTES crypto_scalarmult_curve25519_tinyssh_BYTES
#define crypto_scalarmult_curve25519_SCALARBYTES crypto_scalarmult_curve25519_tinyssh_SCALARBYTES
#define crypto_scalarmult_curve25519_IMPLEMENTATION "tinyssh"
#define crypto_scalarmult_curve25519_VERSION "-"
#endif
tinyssh-20240101/crypto/crypto_sign_ed25519.c 0000664 0000000 0000000 00000006317 14544472107 0020567 0 ustar 00root root 0000000 0000000 #include "randombytes.h"
#include "cleanup.h"
#include "crypto_hash_sha512.h"
#include "crypto_verify_32.h"
#include "ge25519.h"
#include "sc25519.h"
#include "crypto_sign_ed25519.h"
int crypto_sign_ed25519_tinyssh(unsigned char *sm, unsigned long long *smlen, const unsigned char *m, unsigned long long n, const unsigned char *skorig) {
long long i;
unsigned char nonce[64], hram[64], sk[64], pk[32];
ge25519 R;
/* compute secret key from seed sk = H(skorig), H = sha512 */
crypto_hash_sha512(sk, skorig, 32);
sk[0] &= 248;
sk[31] &= 63;
sk[31] |= 64;
/* copy m to sm, copy secret key and public key */
*smlen = n + 64;
for (i = 31; i >= 0; --i) pk[i ] = skorig[i + 32];
for (i = n - 1; i >= 0; --i) sm[i + 64] = m[i];
for (i = 31; i >= 0; --i) sm[i + 32] = sk[i + 32];
/* get pseudorandom nonce = H(sk2, m) */
crypto_hash_sha512(nonce, sm + 32, n + 32);
sc25519_reduce(nonce);
/* copy pk to sm */
for (i = 31; i >= 0; --i) sm[i + 32] = pk[i];
/* compute R */
ge25519_scalarmult_base(R, nonce);
ge25519_tobytes(sm, R);
/* calculate hram = H(r, a, m) */
crypto_hash_sha512(hram, sm, n + 64);
sc25519_reduce(hram);
/* compute S */
sc25519_muladd(sm + 32, hram, sk, nonce);
/* cleanup */
cleanup(nonce); cleanup(hram); cleanup(sk); cleanup(pk); cleanup(R);
return 0;
}
int crypto_sign_ed25519_tinyssh_open(unsigned char *m, unsigned long long *mlen, const unsigned char *sm, unsigned long long n, const unsigned char *pk) {
long long i;
unsigned char pkcopy[32], rcopy[32], scopy[32], hram[64], rcheck[32];
ge25519 R, S, A;
int ret = -1;
/* check input */
if (n < 64) goto fail;
if (sm[63] & 224) goto fail;
/* unpack pk */
if (ge25519_frombytes_negate_vartime(A, pk) != 0) goto fail;
/* copy pk, r, s */
for (i = 0; i < 32; ++i) pkcopy[i] = pk[i];
for (i = 0; i < 32; ++i) rcopy[i] = sm[i];
for (i = 0; i < 32; ++i) scopy[i] = sm[i + 32];
/* copy sm to m and copy pk to m */
for (i = n - 1; i >= 0; --i) m[i] = sm[i];
for (i = 0; i < 32; ++i) m[i + 32] = pkcopy[i];
/* calculate hram = H(r, a, m) */
crypto_hash_sha512(hram, m, n);
sc25519_reduce(hram);
/* compute R */
ge25519_scalarmult(A, A, hram);
ge25519_scalarmult_base(S, scopy);
ge25519_add(R, S, A);
/* check R */
ge25519_tobytes(rcheck, R);
if (crypto_verify_32(rcheck, rcopy) != 0) goto fail;
/* copy message */
n -= 64; *mlen = n;
for (i = 0; i < n; ++i) m[i] = m[i + 64];
for (i = 0; i < 64; ++i) m[i + n] = 0;
ret = 0;
goto cleanup;
fail:
for (i = 0; i < n; ++i) m[i] = 0;
cleanup:
cleanup(pkcopy); cleanup(rcopy); cleanup(scopy);
cleanup(hram); cleanup(rcheck);
cleanup(R); cleanup(S); cleanup(A);
return ret;
}
int crypto_sign_ed25519_tinyssh_keypair(unsigned char *pk, unsigned char *sk) {
unsigned char h[64];
ge25519 A;
long long i;
randombytes(sk, 32);
crypto_hash_sha512(h, sk, 32);
h[0] &= 248;
h[31] &= 63;
h[31] |= 64;
ge25519_scalarmult_base(A, h);
ge25519_tobytes(pk, A);
for (i = 31; i >= 0; --i) sk[i + 32] = pk[i];
cleanup(h); cleanup(A);
return 0;
}
tinyssh-20240101/crypto/crypto_sign_ed25519.h 0000664 0000000 0000000 00000002136 14544472107 0020567 0 ustar 00root root 0000000 0000000 #ifndef crypto_sign_ed25519_H
#define crypto_sign_ed25519_H
#define crypto_sign_ed25519_tinyssh_SECRETKEYBYTES 64
#define crypto_sign_ed25519_tinyssh_PUBLICKEYBYTES 32
#define crypto_sign_ed25519_tinyssh_BYTES 64
extern int crypto_sign_ed25519_tinyssh(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *);
extern int crypto_sign_ed25519_tinyssh_open(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *);
extern int crypto_sign_ed25519_tinyssh_keypair(unsigned char *,unsigned char *);
#define crypto_sign_ed25519 crypto_sign_ed25519_tinyssh
#define crypto_sign_ed25519_open crypto_sign_ed25519_tinyssh_open
#define crypto_sign_ed25519_keypair crypto_sign_ed25519_tinyssh_keypair
#define crypto_sign_ed25519_BYTES crypto_sign_ed25519_tinyssh_BYTES
#define crypto_sign_ed25519_PUBLICKEYBYTES crypto_sign_ed25519_tinyssh_PUBLICKEYBYTES
#define crypto_sign_ed25519_SECRETKEYBYTES crypto_sign_ed25519_tinyssh_SECRETKEYBYTES
#define crypto_sign_ed25519_IMPLEMENTATION "tinyssh"
#define crypto_sign_ed25519_VERSION "-"
#endif
tinyssh-20240101/crypto/crypto_sort_uint32.c 0000664 0000000 0000000 00000001530 14544472107 0020734 0 ustar 00root root 0000000 0000000 #include "crypto_uint32.h"
#include "crypto_sort_uint32.h"
static void minmax(crypto_uint32 *x, crypto_uint32 *y) {
crypto_uint32 xi = *x;
crypto_uint32 yi = *y;
crypto_uint32 xy = xi ^ yi;
crypto_uint32 c = yi - xi;
c ^= xy & (c ^ yi ^ 0x80000000);
c >>= 31;
c &= 1;
c = -c;
c &= xy;
*x = xi ^ c;
*y = yi ^ c;
}
void crypto_sort_uint32_tinyssh(void *xv, long long n) {
long long top, p, q, i;
crypto_uint32 *x = xv;
if (n < 2) return;
top = 1;
while (top < n - top) top += top;
for (p = top; p > 0; p >>= 1) {
for (i = 0; i < n - p; ++i)
if (!(i & p))
minmax(x + i, x + i + p);
for (q = top; q > p; q >>= 1)
for (i = 0; i < n - q; ++i)
if (!(i & p))
minmax(x + i + p, x + i + q);
}
}
tinyssh-20240101/crypto/crypto_sort_uint32.h 0000664 0000000 0000000 00000000420 14544472107 0020736 0 ustar 00root root 0000000 0000000 #ifndef crypto_sort_uint32_H
#define crypto_sort_uint32_H
extern void crypto_sort_uint32_tinyssh(void *, long long);
#define crypto_sort_uint32 crypto_sort_uint32_tinyssh
#define crypto_sort_uint32_IMPLEMENTATION "tinyssh"
#define crypto_sort_uint32_VERSION "-"
#endif
tinyssh-20240101/crypto/crypto_stream_chacha20.c 0000664 0000000 0000000 00000012346 14544472107 0021474 0 ustar 00root root 0000000 0000000 /*
20210508
Jan Mojzis
Public domain.
*/
#include
#include "crypto_stream_chacha20.h"
/* clang-format off */
static inline uint32_t unpack32(const unsigned char *x) {
return
(uint32_t) (x[0]) \
| (((uint32_t) (x[1])) << 8) \
| (((uint32_t) (x[2])) << 16) \
| (((uint32_t) (x[3])) << 24);
}
static inline void pack32(unsigned char *x, uint32_t u) {
x[0] = u; u >>= 8;
x[1] = u; u >>= 8;
x[2] = u; u >>= 8;
x[3] = u;
}
#define ROTATE(x, c) ((x) << (c)) ^ ((x) >> (32 - (c)))
#define QUARTERROUND(a, b, c, d) \
a += b; d = ROTATE(d ^ a, 16); \
c += d; b = ROTATE(b ^ c, 12); \
a += b; d = ROTATE(d ^ a, 8); \
c += d; b = ROTATE(b ^ c, 7);
#define TWOROUNDS \
QUARTERROUND( x0, x4, x8, x12) \
QUARTERROUND( x1, x5, x9, x13) \
QUARTERROUND( x2, x6, x10, x14) \
QUARTERROUND( x3, x7, x11, x15) \
QUARTERROUND( x0, x5, x10, x15) \
QUARTERROUND( x1, x6, x11, x12) \
QUARTERROUND( x2, x7, x8, x13) \
QUARTERROUND( x3, x4, x9, x14)
#define XORBLOCK(o, i) \
x0 = s0; \
x1 = s1; \
x2 = s2; \
x3 = s3; \
x4 = k0; \
x5 = k1; \
x6 = k2; \
x7 = k3; \
x8 = k4; \
x9 = k5; \
x10 = k6; \
x11 = k7; \
x12 = n0; \
x13 = n1; \
x14 = n2; \
x15 = n3; \
\
TWOROUNDS /* round 1, 2 */ \
TWOROUNDS /* round 3, 4 */ \
TWOROUNDS /* round 5, 6 */ \
TWOROUNDS /* round 7, 8 */ \
TWOROUNDS /* round 9, 10 */ \
TWOROUNDS /* round 11, 12 */ \
TWOROUNDS /* round 13, 14 */ \
TWOROUNDS /* round 15, 16 */ \
TWOROUNDS /* round 17, 18 */ \
TWOROUNDS /* round 19, 20 */ \
\
pack32(o , (x0 + s0) ^ unpack32(i )); \
pack32(o + 4, (x1 + s1) ^ unpack32(i + 4)); \
pack32(o + 8, (x2 + s2) ^ unpack32(i + 8)); \
pack32(o + 12, (x3 + s3) ^ unpack32(i + 12)); \
pack32(o + 16, (x4 + k0) ^ unpack32(i + 16)); \
pack32(o + 20, (x5 + k1) ^ unpack32(i + 20)); \
pack32(o + 24, (x6 + k2) ^ unpack32(i + 24)); \
pack32(o + 28, (x7 + k3) ^ unpack32(i + 28)); \
pack32(o + 32, (x8 + k4) ^ unpack32(i + 32)); \
pack32(o + 36, (x9 + k5) ^ unpack32(i + 36)); \
pack32(o + 40, (x10 + k6) ^ unpack32(i + 40)); \
pack32(o + 44, (x11 + k7) ^ unpack32(i + 44)); \
pack32(o + 48, (x12 + n0) ^ unpack32(i + 48)); \
pack32(o + 52, (x13 + n1) ^ unpack32(i + 52)); \
pack32(o + 56, (x14 + n2) ^ unpack32(i + 56)); \
pack32(o + 60, (x15 + n3) ^ unpack32(i + 60));
int crypto_stream_chacha20_tinyssh_xor(unsigned char *c, const unsigned char *m, unsigned long long l, const unsigned char *n, const unsigned char *k) {
register uint32_t x0, x1, x2, x3, x4, x5, x6, x7;
register uint32_t x8, x9, x10, x11, x12, x13, x14, x15;
uint32_t k0 = unpack32(k );
uint32_t k1 = unpack32(k + 4);
uint32_t k2 = unpack32(k + 8);
uint32_t k3 = unpack32(k + 12);
uint32_t k4 = unpack32(k + 16);
uint32_t k5 = unpack32(k + 20);
uint32_t k6 = unpack32(k + 24);
uint32_t k7 = unpack32(k + 28);
uint32_t n0 = 0;
uint32_t n1 = 0;
uint32_t n2 = unpack32(n );
uint32_t n3 = unpack32(n + 4);
uint32_t s0 = 0x61707865;
uint32_t s1 = 0x3320646E;
uint32_t s2 = 0x79622D32;
uint32_t s3 = 0x6B206574;
uint64_t u = 0;
if (!l) return 0;
while (l >= 64) {
XORBLOCK(c, m);
if (!++u) return -1;
n0 = u;
n1 = u >> 32;
l -= 64;
c += 64;
m += 64;
}
if (l) {
unsigned char b[64] = {0};
unsigned long long j;
for (j = 0; j < l; ++j) b[j] = m[j];
XORBLOCK(b, b);
for (j = 0; j < l; ++j) c[j] = b[j];
}
return 0;
}
int crypto_stream_chacha20_tinyssh(unsigned char *c, unsigned long long l, const unsigned char *n, const unsigned char *k) {
unsigned long long j;
unsigned char ncopy[8], kcopy[32];
for (j = 0; j < 32; ++j) kcopy[j] = k[j];
for (j = 0; j < 8; ++j) ncopy[j] = n[j];
for (j = 0; j < l; ++j) c[j] = 0;
return crypto_stream_chacha20_tinyssh_xor(c, c, l, ncopy, kcopy);
}
/* clang-format on */
tinyssh-20240101/crypto/crypto_stream_chacha20.h 0000664 0000000 0000000 00000001525 14544472107 0021476 0 ustar 00root root 0000000 0000000 #ifndef crypto_stream_chacha20_H
#define crypto_stream_chacha20_H
#define crypto_stream_chacha20_tinyssh_KEYBYTES 32
#define crypto_stream_chacha20_tinyssh_NONCEBYTES 8
extern int crypto_stream_chacha20_tinyssh(unsigned char *, unsigned long long, const unsigned char *, const unsigned char *);
extern int crypto_stream_chacha20_tinyssh_xor(unsigned char *, const unsigned char *, unsigned long long, const unsigned char *, const unsigned char *);
#define crypto_stream_chacha20 crypto_stream_chacha20_tinyssh
#define crypto_stream_chacha20_xor crypto_stream_chacha20_tinyssh_xor
#define crypto_stream_chacha20_KEYBYTES crypto_stream_chacha20_tinyssh_KEYBYTES
#define crypto_stream_chacha20_NONCEBYTES crypto_stream_chacha20_tinyssh_NONCEBYTES
#define crypto_stream_chacha20_IMPLEMENTATION "tinyssh"
#define crypto_stream_chacha20_VERSION "-"
#endif
tinyssh-20240101/crypto/crypto_uint16.h 0000664 0000000 0000000 00000000156 14544472107 0017677 0 ustar 00root root 0000000 0000000 #ifndef crypto_uint16_h
#define crypto_uint16_h
#include
typedef uint16_t crypto_uint16;
#endif
tinyssh-20240101/crypto/crypto_uint32.h 0000664 0000000 0000000 00000000156 14544472107 0017675 0 ustar 00root root 0000000 0000000 #ifndef crypto_uint32_h
#define crypto_uint32_h
#include
typedef uint32_t crypto_uint32;
#endif
tinyssh-20240101/crypto/crypto_uint64.h 0000664 0000000 0000000 00000000156 14544472107 0017702 0 ustar 00root root 0000000 0000000 #ifndef crypto_uint64_h
#define crypto_uint64_h
#include
typedef uint64_t crypto_uint64;
#endif
tinyssh-20240101/crypto/crypto_uint8.h 0000664 0000000 0000000 00000000152 14544472107 0017614 0 ustar 00root root 0000000 0000000 #ifndef crypto_uint8_h
#define crypto_uint8_h
#include
typedef uint8_t crypto_uint8;
#endif
tinyssh-20240101/crypto/crypto_verify_16.c 0000664 0000000 0000000 00000000241 14544472107 0020351 0 ustar 00root root 0000000 0000000 #include "verify.h"
#include "crypto_verify_16.h"
int crypto_verify_16_tinyssh(const unsigned char *x, const unsigned char *y) {
return verify(x, y, 16);
}
tinyssh-20240101/crypto/crypto_verify_16.h 0000664 0000000 0000000 00000000604 14544472107 0020361 0 ustar 00root root 0000000 0000000 #ifndef crypto_verify_16_H
#define crypto_verify_16_H
#define crypto_verify_16_tinyssh_BYTES 16
extern int crypto_verify_16_tinyssh(const unsigned char *, const unsigned char *);
#define crypto_verify_16 crypto_verify_16_tinyssh
#define crypto_verify_16_BYTES crypto_verify_16_tinyssh_BYTES
#define crypto_verify_16_IMPLEMENTATION "tinyssh"
#define crypto_verify_16_VERSION "-"
#endif
tinyssh-20240101/crypto/crypto_verify_32.c 0000664 0000000 0000000 00000000241 14544472107 0020347 0 ustar 00root root 0000000 0000000 #include "verify.h"
#include "crypto_verify_32.h"
int crypto_verify_32_tinyssh(const unsigned char *x, const unsigned char *y) {
return verify(x, y, 32);
}
tinyssh-20240101/crypto/crypto_verify_32.h 0000664 0000000 0000000 00000000604 14544472107 0020357 0 ustar 00root root 0000000 0000000 #ifndef crypto_verify_32_H
#define crypto_verify_32_H
#define crypto_verify_32_tinyssh_BYTES 32
extern int crypto_verify_32_tinyssh(const unsigned char *, const unsigned char *);
#define crypto_verify_32 crypto_verify_32_tinyssh
#define crypto_verify_32_BYTES crypto_verify_32_tinyssh_BYTES
#define crypto_verify_32_IMPLEMENTATION "tinyssh"
#define crypto_verify_32_VERSION "-"
#endif
tinyssh-20240101/crypto/fe.c 0000664 0000000 0000000 00000007571 14544472107 0015546 0 ustar 00root root 0000000 0000000 /*
20140918
Jan Mojzis
Public domain.
*/
#include "fe.h"
/*
o = 0
*/
void fe_0(fe o) {
long long i;
for (i = 0; i < 8; ++i) o[i] = 0;
}
/*
o = 1
*/
void fe_1(fe o) {
fe_0(o);
o[0] = 1;
}
/*
o = x
*/
void fe_copy(fe o, const fe x) {
long long i;
for (i = 0; i < 8; ++i) o[i] = x[i];
}
/*
if (b) swap(f, g)
*/
void fe_cswap(fe f, fe g, crypto_uint32 b) {
long long i;
fe t;
b = -b;
for (i = 0; i < 8; ++i) t[i] = b & (f[i] ^ g[i]);
for (i = 0; i < 8; ++i) f[i] ^= t[i];
for (i = 0; i < 8; ++i) g[i] ^= t[i];
fe_0(t);
}
/*
if (b) f = g
*/
void fe_cmov(fe f, const fe g, crypto_uint32 b) {
long long i;
fe t;
b = -b;
for (i = 0; i < 8; ++i) t[i] = b & (f[i] ^ g[i]);
for (i = 0; i < 8; ++i) f[i] ^= t[i];
fe_0(t);
}
/*
o = a * b
*/
/*
Implementation note: fe_mul_() is unrolled version of:
void fe_mul_(fel o, const fe a, const fe b) {
crypto_uint64 u;
long long i, j;
for (i = 0; i < 16; ++i) o[i] = 0;
for (i = 0; i < 8; ++i) for (j = 0; j < 8; ++j) {
u = (crypto_uint64)a[i] * (crypto_uint64)b[j];
o[i + j ] += u & 0xffffffff;
o[i + j + 1] += u >> 32;
}
}
*/
#define M(i, j) u = (crypto_uint64)a[i] * (crypto_uint64)b[j]; \
o[i + j ] += u & 0xffffffff; \
o[i + j + 1] += u >> 32;
void fe_mul_(fel o, const fe a, const fe b) {
crypto_uint64 u;
long long i;
for (i = 0; i < 16; ++i) o[i] = 0;
M(0, 0); M(0, 1); M(0, 2); M(0, 3); M(0, 4); M(0, 5); M(0, 6); M(0, 7);
M(1, 0); M(1, 1); M(1, 2); M(1, 3); M(1, 4); M(1, 5); M(1, 6); M(1, 7);
M(2, 0); M(2, 1); M(2, 2); M(2, 3); M(2, 4); M(2, 5); M(2, 6); M(2, 7);
M(3, 0); M(3, 1); M(3, 2); M(3, 3); M(3, 4); M(3, 5); M(3, 6); M(3, 7);
M(4, 0); M(4, 1); M(4, 2); M(4, 3); M(4, 4); M(4, 5); M(4, 6); M(4, 7);
M(5, 0); M(5, 1); M(5, 2); M(5, 3); M(5, 4); M(5, 5); M(5, 6); M(5, 7);
M(6, 0); M(6, 1); M(6, 2); M(6, 3); M(6, 4); M(6, 5); M(6, 6); M(6, 7);
M(7, 0); M(7, 1); M(7, 2); M(7, 3); M(7, 4); M(7, 5); M(7, 6); M(7, 7);
}
/*
o = x ^ 2
*/
/*
Implementation note: fe_sq_() is unrolled version of:
void fe_sq_(fel o, const fe a) {
crypto_uint64 u;
long long i, j;
for (i = 0; i < 16; ++i) o[i] = 0;
for (i = 0; i < 8; ++i) for (j = i + 1; j < 8; ++j) {
u = (crypto_uint64)a[i] * (crypto_uint64)a[j];
o[i + j ] += 2 * (u & 0xffffffff);
o[i + j + 1] += 2 * (u >> 32);
}
for (i = 0; i < 8; ++i) {
u = (crypto_uint64)a[i] * (crypto_uint64)a[i];
o[2 * i ] += (u & 0xffffffff);
o[2 * i + 1] += (u >> 32);
}
}
*/
#define M2(i, j) u = (crypto_uint64)a[i] * (crypto_uint64)a[j]; \
o[i + j ] += 2 * (u & 0xffffffff); \
o[i + j + 1] += 2 * (u >> 32);
#define SQ(i) u = (crypto_uint64)a[i] * (crypto_uint64)a[i]; \
o[2 * i ] += (u & 0xffffffff); \
o[2 * i + 1] += (u >> 32)
void fe_sq_(fel o, const fe a) {
crypto_uint64 u;
long long i;
for (i = 0; i < 16; ++i) o[i] = 0;
M2(0, 1); M2(0, 2); M2(0, 3); M2(0, 4); M2(0, 5); M2(0, 6); M2(0, 7);
M2(1, 2); M2(1, 3); M2(1, 4); M2(1, 5); M2(1, 6); M2(1, 7);
M2(2, 3); M2(2, 4); M2(2, 5); M2(2, 6); M2(2, 7);
M2(3, 4); M2(3, 5); M2(3, 6); M2(3, 7);
M2(4, 5); M2(4, 6); M2(4, 7);
M2(5, 6); M2(5, 7);
M2(6, 7);
SQ(0); SQ(1); SQ(2); SQ(3); SQ(4); SQ(5); SQ(6); SQ(7);
}
/*
if (p < r) r -= p
*/
void fe_reducesmall(fe r, const fe p, const crypto_uint64 carry) {
crypto_uint64 pb = 0, b;
long long i;
fe t;
for (i = 0; i < 8; ++i) {
pb += (crypto_uint64)p[i];
b = (crypto_uint64)r[i] - pb; b >>= 63;
t[i] = (crypto_uint64)r[i] - pb + (b << 32);
pb = b;
}
b = carry - pb; b >>= 63;
b -= 1;
for (i = 0; i < 8; ++i) r[i] ^= b & (r[i] ^ t[i]);
fe_0(t);
}
tinyssh-20240101/crypto/fe.h 0000664 0000000 0000000 00000000741 14544472107 0015543 0 ustar 00root root 0000000 0000000 #ifndef _FE_H____
#define _FE_H____
#include "crypto_uint32.h"
#include "crypto_uint64.h"
typedef crypto_uint32 fe[8];
typedef crypto_uint64 fel[16];
extern void fe_0(fe);
extern void fe_1(fe);
extern void fe_copy(fe, const fe);
extern void fe_cswap(fe, fe, crypto_uint32);
extern void fe_cmov(fe, const fe, crypto_uint32);
extern void fe_mul_(fel, const fe, const fe);
extern void fe_sq_(fel, const fe);
extern void fe_reducesmall(fe, const fe, const crypto_uint64);
#endif
tinyssh-20240101/crypto/fe25519.c 0000664 0000000 0000000 00000013434 14544472107 0016147 0 ustar 00root root 0000000 0000000 #include "uint32_pack.h"
#include "uint32_unpack.h"
#include "crypto_verify_32.h"
#include "cleanup.h"
#include "fe.h"
#include "fe25519.h"
/*
p = 2^255 - 19
*/
static const fe p = {
0xffffffed, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff
};
/*
p3 = 3 * p
*/
static const crypto_uint64 p3[8] = {
0x2ffffffc7ULL, 0x2fffffffdULL, 0x2fffffffdULL, 0x2fffffffdULL,
0x2fffffffdULL, 0x2fffffffdULL, 0x2fffffffdULL, 0x17ffffffdULL
};
/*
reduction modulo p: 16 limbs -> 8 limbs
*/
static void fe25519_reducebig(fe o, fel t) {
crypto_uint64 u = 0;
long long i;
for (i = 0; i < 7; ++i) { u += t[i] + 38ULL * t[i + 8]; t[i] = u & 0xffffffff; u >>= 32; }
u += t[i] + 38ULL * t[i + 8]; t[i] = u & 0x7fffffff; u >>= 31;
u *= 19ULL;
for (i = 0; i < 8; ++i) { u += t[i]; o[i] = u & 0xffffffff; u >>= 32; }
}
/*
o = (a * b) % p
*/
void fe25519_mul(fe o, const fe a, const fe b) {
fel t;
fe_mul_(t, a, b);
fe25519_reducebig(o, t);
cleanup(t);
}
/*
o = (a ^ 2) % p
*/
void fe25519_sq(fe o, const fe a) {
fel t;
fe_sq_(t, a);
fe25519_reducebig(o, t);
cleanup(t);
}
/*
o = (121666 * f) % p;
*/
void fe25519_mul121666(fe o, const fe f) {
crypto_uint64 u = 0;
long long i;
for (i = 0; i < 7; ++i) { u += (crypto_uint64)121666 * (crypto_uint64)f[i]; o[i] = u & 0xffffffff; u >>= 32; }
u += (crypto_uint64)121666 * (crypto_uint64)f[i]; o[i] = u & 0x7fffffff; u >>= 31;
u *= 19ULL;
for (i = 0; i < 8; ++i) { u += o[i]; o[i] = u & 0xffffffff; u >>= 32; }
}
/*
o = (x + y) % p
*/
void fe25519_add(fe o, const fe x, const fe y) {
crypto_uint64 u = 0;
long long i;
for (i = 0; i < 7; ++i) { u += (crypto_uint64)x[i] + (crypto_uint64)y[i]; o[i] = u & 0xffffffff; u >>= 32; }
u += (crypto_uint64)x[i] + (crypto_uint64)y[i]; o[i] = u & 0x7fffffff; u >>= 31;
u *= 19ULL;
for (i = 0; i < 8; ++i) { u += o[i]; o[i] = u & 0xffffffff; u >>= 32; }
}
/*
o = (x - y) % p
*/
void fe25519_sub(fe o, const fe x, const fe y) {
crypto_uint64 u = 0;
long long i;
for (i = 0; i < 7; ++i) { u += p3[i] - (crypto_uint64)y[i] + (crypto_uint64)x[i]; o[i] = u & 0xffffffff; u >>= 32; }
u += p3[i] - (crypto_uint64)y[i] + (crypto_uint64)x[i]; o[i] = u & 0x7fffffff; u >>= 31;
u *= 19ULL;
for (i = 0; i < 8; ++i) { u += o[i]; o[i] = u & 0xffffffff; u >>= 32; }
}
/*
o = -x % p
*/
void fe25519_neg(fe o, const fe x) {
fe t;
fe_0(t);
fe25519_sub(o, t, x);
}
/*
o = (1 / z) % p
... using Fermat's Little Theorem
*/
void fe25519_inv(fe o, const fe z) {
fe t0, t1, t2, t3;
long long i;
fe25519_sq(t0, z); for (i = 1; i < 1; ++i) fe25519_sq(t0, t0);
fe25519_sq(t1,t0); for (i = 1; i < 2; ++i) fe25519_sq(t1, t1);
fe25519_mul(t1, z, t1);
fe25519_mul(t0, t0, t1);
fe25519_sq(t2, t0); for (i = 1; i < 1; ++i) fe25519_sq(t2, t2);
fe25519_mul(t1, t1, t2);
fe25519_sq(t2, t1); for (i = 1; i < 5; ++i) fe25519_sq(t2, t2);
fe25519_mul(t1, t2, t1);
fe25519_sq(t2, t1); for (i = 1; i < 10; ++i) fe25519_sq(t2, t2);
fe25519_mul(t2, t2, t1);
fe25519_sq(t3, t2); for (i = 1; i < 20; ++i) fe25519_sq(t3, t3);
fe25519_mul(t2, t3, t2);
fe25519_sq(t2, t2); for (i = 1; i < 10; ++i) fe25519_sq(t2, t2);
fe25519_mul(t1, t2, t1);
fe25519_sq(t2, t1); for (i = 1; i < 50; ++i) fe25519_sq(t2, t2);
fe25519_mul(t2, t2, t1);
fe25519_sq(t3, t2); for (i = 1; i < 100; ++i) fe25519_sq(t3, t3);
fe25519_mul(t2, t3, t2);
fe25519_sq(t2, t2); for (i = 1; i < 50; ++i) fe25519_sq(t2, t2);
fe25519_mul(t1, t2, t1);
fe25519_sq(t1, t1); for (i = 1; i < 5; ++i) fe25519_sq(t1, t1);
fe25519_mul(o, t1, t0);
cleanup(t0); cleanup(t1); cleanup(t2); cleanup(t3);
}
void fe25519_pow22523(fe out, const fe z) {
fe t0, t1, t2;
long long i;
fe25519_sq(t0, z); for (i = 1; i < 1; ++i) fe25519_sq(t0, t0);
fe25519_sq(t1, t0); for (i = 1; i < 2; ++i) fe25519_sq(t1, t1);
fe25519_mul(t1, z, t1);
fe25519_mul(t0, t0, t1);
fe25519_sq(t0, t0); for (i = 1; i < 1; ++i) fe25519_sq(t0, t0);
fe25519_mul(t0, t1, t0);
fe25519_sq(t1, t0); for (i = 1; i < 5; ++i) fe25519_sq(t1, t1);
fe25519_mul(t0, t1, t0);
fe25519_sq(t1, t0); for (i = 1; i < 10; ++i) fe25519_sq(t1, t1);
fe25519_mul(t1, t1, t0);
fe25519_sq(t2, t1); for (i = 1; i < 20; ++i) fe25519_sq(t2, t2);
fe25519_mul(t1, t2, t1);
fe25519_sq(t1, t1); for (i = 1; i < 10; ++i) fe25519_sq(t1, t1);
fe25519_mul(t0, t1, t0);
fe25519_sq(t1, t0); for (i = 1; i < 50; ++i) fe25519_sq(t1, t1);
fe25519_mul(t1, t1, t0);
fe25519_sq(t2, t1); for (i = 1; i < 100; ++i) fe25519_sq(t2, t2);
fe25519_mul(t1, t2, t1);
fe25519_sq(t1, t1); for (i = 1; i < 50; ++i) fe25519_sq(t1, t1);
fe25519_mul(t0, t1, t0);
fe25519_sq(t0, t0); for (i = 1; i < 2; ++i) fe25519_sq(t0, t0);
fe25519_mul(out, t0, z);
cleanup(t0); cleanup(t1); cleanup(t2);
}
/*
converts field-element into byte-array
*/
void fe25519_tobytes(unsigned char *out, const fe in) {
long long i;
fe x;
fe_copy(x, in);
fe_reducesmall(x, p, 0);
for (i = 0; i < 8; ++i) uint32_pack(out + 4 * i, x[i]);
cleanup(x);
}
/*
converts byte-array into field-element
*/
void fe25519_frombytes(fe out, const unsigned char *in) {
long long i;
for (i = 0; i < 8; ++i) out[i] = uint32_unpack(in + 4 * i);
out[7] &= 0x7fffffff;
}
/*
if (f == 0) return 0;
else return -1;
*/
static const unsigned char zero[32] = {0};
int fe25519_isnonzero(const fe f) {
unsigned char s[32];
int r;
fe25519_tobytes(s, f);
r = crypto_verify_32(s, zero);
cleanup(s);
return r;
}
/*
if (f >= 0) return 0;
else return -1;
*/
int fe25519_isnegative(const fe f) {
unsigned char s[32];
int r;
fe25519_tobytes(s,f);
r = s[0] & 1;
cleanup(s);
return r;
}
tinyssh-20240101/crypto/fe25519.h 0000664 0000000 0000000 00000001156 14544472107 0016152 0 ustar 00root root 0000000 0000000 #ifndef _FE25519_H____
#define _FE25519_H____
#include "fe.h"
extern void fe25519_mul(fe, const fe, const fe);
extern void fe25519_sq(fe, const fe);
extern void fe25519_add(fe, const fe, const fe);
extern void fe25519_mul121666(fe, const fe);
extern void fe25519_sub(fe, const fe, const fe);
extern void fe25519_neg(fe, const fe);
extern void fe25519_inv(fe, const fe);
extern void fe25519_pow22523(fe, const fe);
extern void fe25519_tobytes(unsigned char *, const fe);
extern void fe25519_frombytes(fe, const unsigned char *);
extern int fe25519_isnonzero(const fe);
extern int fe25519_isnegative(const fe);
#endif
tinyssh-20240101/crypto/ge25519.c 0000664 0000000 0000000 00000013100 14544472107 0016136 0 ustar 00root root 0000000 0000000 #include "fe25519.h"
#include "cleanup.h"
#include "ge25519.h"
/* D = -121665/121666 */
static fe D = {
0x135978a3, 0x75eb4dca, 0x4141d8ab, 0x00700a4d,
0x7779e898, 0x8cc74079, 0x2b6ffe73, 0x52036cee
};
/* D2 = 2 * -121665/121666 */
static fe D2 = {
0x26b2f159, 0xebd69b94, 0x8283b156, 0x00e0149a,
0xeef3d130, 0x198e80f2, 0x56dffce7, 0x2406d9dc
};
static fe sqrtm1 = {
0x4a0ea0b0, 0xc4ee1b27, 0xad2fe478, 0x2f431806,
0x3dfbd7a7, 0x2b4d0099, 0x4fc1df0b, 0x2b832480,
};
static void neutral(ge25519 p) {
fe_0(p[0]);
fe_1(p[1]);
fe_1(p[2]);
fe_0(p[3]);
}
/*
p = q
*/
static void copy(ge25519 p, ge25519 q) {
fe_copy(p[0], q[0]);
fe_copy(p[1], q[1]);
fe_copy(p[2], q[2]);
fe_copy(p[3], q[3]);
}
/*
if (b) p = q;
*/
static void cmov(ge25519 p, ge25519 q, crypto_uint32 b) {
fe_cmov(p[0], q[0], b);
fe_cmov(p[1], q[1], b);
fe_cmov(p[2], q[2], b);
fe_cmov(p[3], q[3], b);
}
void ge25519_add(ge25519 o, ge25519 p, ge25519 q) {
fe a, b, c, d, t, e, f, g, h;
fe25519_sub(a, p[1], p[0]);
fe25519_sub(t, q[1], q[0]);
fe25519_mul(a, a, t);
fe25519_add(b, p[0], p[1]);
fe25519_add(t, q[0], q[1]);
fe25519_mul(b, b, t);
fe25519_mul(c, p[3], q[3]);
fe25519_mul(c, c, D2);
fe25519_mul(d, p[2], q[2]);
fe25519_add(d, d, d);
fe25519_sub(e, b, a);
fe25519_sub(f, d, c);
fe25519_add(g, d, c);
fe25519_add(h, b, a);
fe25519_mul(o[0], e, f);
fe25519_mul(o[1], h, g);
fe25519_mul(o[2], g, f);
fe25519_mul(o[3], e, h);
cleanup(a); cleanup(b); cleanup(c); cleanup(d); cleanup(t);
cleanup(e); cleanup(f); cleanup(g); cleanup(h);
}
/* https://hyperelliptic.org/EFD/g1p/auto-code/twisted/extended/doubling/dbl-2008-hwcd.op3 */
static void dbl(ge25519 o, ge25519 p) {
fe a, b, c, d, e, f, g, h;
fe25519_sq(a, p[0]); /* A = X1^2 */
fe25519_sq(b, p[1]); /* B = Y1^2 */
fe25519_sq(c, p[2]); /* t0 = Z1^2 */
fe25519_add(c, c, c); /* C = 2*t0 */
fe25519_neg(d, a); /* D = a*A */
fe25519_add(e, p[0], p[1]); /* t1 = X1+Y1 */
fe25519_sq(e, e); /* t2 = t1^2 */
fe25519_sub(e, e, a); /* t3 = t2-A */
fe25519_sub(e, e, b); /* E = t3-B */
fe25519_add(g, d, b); /* G = D+B */
fe25519_sub(f, g, c); /* F = G-C */
fe25519_sub(h, d, b); /* H = D-B */
fe25519_mul(o[0], e, f); /* X3 = E*F */
fe25519_mul(o[1], g, h); /* Y3 = G*H */
fe25519_mul(o[2], f, g); /* Z3 = F*G */
fe25519_mul(o[3], e, h); /* T3 = E*H */
cleanup(a); cleanup(b); cleanup(c); cleanup(d);
cleanup(e); cleanup(f); cleanup(g); cleanup(h);
}
void ge25519_tobytes(unsigned char *s, ge25519 h) {
fe x, y, z;
fe25519_inv(z, h[2]);
fe25519_mul(x, h[0], z);
fe25519_mul(y, h[1], z);
fe25519_tobytes(s, y);
s[31] ^= fe25519_isnegative(x) << 7;
cleanup(x); cleanup(y); cleanup(z);
}
int ge25519_frombytes_negate_vartime(ge25519 h, const unsigned char *s) {
fe u, v, v3, vxx, check;
int ret = -1;
fe25519_frombytes(h[1], s);
fe_1(h[2]);
fe25519_sq(u,h[1]);
fe25519_mul(v,u,D);
fe25519_sub(u,u,h[2]); /* u = y^2-1 */
fe25519_add(v,v,h[2]); /* v = dy^2+1 */
fe25519_sq(v3,v);
fe25519_mul(v3,v3,v); /* v3 = v^3 */
fe25519_sq(h[0],v3);
fe25519_mul(h[0],h[0],v);
fe25519_mul(h[0],h[0],u); /* x = uv^7 */
fe25519_pow22523(h[0],h[0]); /* x = (uv^7)^((q-5)/8) */
fe25519_mul(h[0],h[0],v3);
fe25519_mul(h[0],h[0],u); /* x = uv^3(uv^7)^((q-5)/8) */
fe25519_sq(vxx,h[0]);
fe25519_mul(vxx,vxx,v);
fe25519_sub(check,vxx,u); /* vx^2-u */
if (fe25519_isnonzero(check)) {
fe25519_add(check,vxx,u); /* vx^2+u */
if (fe25519_isnonzero(check)) {
goto cleanup;
}
fe25519_mul(h[0],h[0],sqrtm1);
}
if (fe25519_isnegative(h[0]) == (s[31] >> 7))
fe25519_neg(h[0], h[0]);
fe25519_mul(h[3],h[0],h[1]);
ret = 0;
cleanup:
cleanup(u); cleanup(v); cleanup(v3);
cleanup(vxx); cleanup(check);
return ret;
}
/*
if (a == b) return 1;
else return 0;
*/
static unsigned char equal(unsigned char a, unsigned char b) {
unsigned char x = a ^ b;
crypto_uint32 y = x;
y -= 1;
y >>= 31;
return y;
}
/*
point multiplication using windowed method
*/
void ge25519_scalarmult(ge25519 o, ge25519 q, const unsigned char *a) {
long long i, j;
ge25519 t[16], sp, p;
unsigned char e[64];
for (i = 0; i < 32; ++i) {
e[2 * i + 0] = (a[i] >> 0) & 0x0f;
e[2 * i + 1] = (a[i] >> 4) & 0x0f;
}
neutral(p);
/* precompute points */
copy(t[0], p);
copy(t[1], q);
for (i = 2; i < 16; ++i) {
if ((i & 1) == 0) dbl(t[i], t[i / 2]);
else ge25519_add(t[i], t[i - 1], q);
}
for (i = 63; i >= 0; --i) {
for (j = 0; j < 4; ++j) dbl(p, p);
for (j = 0; j < 16; ++j) cmov(sp, t[j], equal(e[i], j));
ge25519_add(p, p, sp);
}
copy(o, p);
cleanup(p); cleanup(t); cleanup(sp); cleanup(e);
}
static ge25519 baseq = {
{ 0x8f25d51a,0xc9562d60,0x9525a7b2,0x692cc760,0xfdd6dc5c,0xc0a4e231,0xcd6e53fe,0x216936d3 },
{ 0x66666658,0x66666666,0x66666666,0x66666666,0x66666666,0x66666666,0x66666666,0x66666666 },
{ 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000 },
{ 0xa5b7dda3,0x6dde8ab3,0x775152f5,0x20f09f80,0x64abe37d,0x66ea4e8e,0xd78b7665,0x67875f0f },
};
void ge25519_scalarmult_base(ge25519 p, const unsigned char *a) {
ge25519_scalarmult(p, baseq, a);
}
tinyssh-20240101/crypto/ge25519.h 0000664 0000000 0000000 00000000700 14544472107 0016145 0 ustar 00root root 0000000 0000000 #ifndef _GE25519_H____
#define _GE25519_H____
#include "fe.h"
typedef fe ge25519[4]; /* X, Y, Z, T */
extern void ge25519_tobytes(unsigned char *, ge25519);
extern int ge25519_frombytes_negate_vartime(ge25519, const unsigned char *);
extern void ge25519_add(ge25519, ge25519, ge25519);
extern void ge25519_scalarmult(ge25519, ge25519, const unsigned char *);
extern void ge25519_scalarmult_base(ge25519, const unsigned char *);
#endif
tinyssh-20240101/crypto/randombytes.c 0000664 0000000 0000000 00000001404 14544472107 0017470 0 ustar 00root root 0000000 0000000 /* taken from nacl-20110221, from randombytes/devurandom.c, added close-on-exec */
#include
#include
#include
#include
#include "randombytes.h"
/* it's really stupid that there isn't a syscall for this */
static int fd = -1;
void randombytes(unsigned char *x,unsigned long long xlen)
{
int i;
if (fd == -1) {
for (;;) {
#ifdef O_CLOEXEC
fd = open("/dev/urandom",O_RDONLY | O_CLOEXEC);
#else
fd = open("/dev/urandom",O_RDONLY);
fcntl(fd,F_SETFD,1);
#endif
if (fd != -1) break;
sleep(1);
}
}
while (xlen > 0) {
if (xlen < 1048576) i = xlen; else i = 1048576;
i = read(fd,x,i);
if (i < 1) {
sleep(1);
continue;
}
x += i;
xlen -= i;
}
}
tinyssh-20240101/crypto/randombytes.h 0000664 0000000 0000000 00000000325 14544472107 0017476 0 ustar 00root root 0000000 0000000 #ifndef _RANDOMBYTES_H____
#define _RANDOMBYTES_H____
extern void randombytes(unsigned char *, unsigned long long);
#ifndef randombytes_implementation
#define randombytes_implementation "tinyssh"
#endif
#endif
tinyssh-20240101/crypto/sc25519.c 0000664 0000000 0000000 00000002774 14544472107 0016167 0 ustar 00root root 0000000 0000000 /*
- based on tweetnacl 20140427 (http://tweetnacl.cr.yp.to/software.html)
*/
#include "crypto_int64.h"
#include "crypto_uint32.h"
#include "crypto_uint64.h"
#include "cleanup.h"
#include "sc25519.h"
#define FOR(i,n) for (i = 0;i < n;++i)
static const crypto_uint64 L[32] = {0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10};
static void modL(unsigned char *r,crypto_int64 x[64])
{
crypto_int64 carry,i,j;
for (i = 63;i >= 32;--i) {
carry = 0;
for (j = i - 32;j < i - 12;++j) {
x[j] += carry - 16 * x[i] * L[j - (i - 32)];
carry = (x[j] + 128) >> 8;
x[j] -= carry << 8;
}
x[j] += carry;
x[i] = 0;
}
carry = 0;
FOR(j,32) {
x[j] += carry - (x[31] >> 4) * L[j];
carry = x[j] >> 8;
x[j] &= 255;
}
FOR(j,32) x[j] -= carry * L[j];
FOR(i,32) {
x[i+1] += x[i] >> 8;
r[i] = x[i] & 255;
}
}
void sc25519_reduce(unsigned char *s) {
crypto_int64 t[64], i;
for (i = 0; i < 64; ++i) t[i] = s[i];
for (i = 0; i < 64; ++i) s[i] = 0;
modL(s, t);
cleanup(t);
}
void sc25519_muladd(unsigned char *s, const unsigned char *a, const unsigned char *b, const unsigned char *c) {
crypto_int64 t[64], i, j;
for (i = 0; i < 64; ++i) t[i] = 0;
for (i = 0; i < 32; ++i) for (j = 0; j < 32; ++j) {
t[i + j] += (crypto_int64)a[i] * (crypto_int64)b[j];
}
for (i = 0; i < 32; ++i) t[i] += c[i];
modL(s, t);
cleanup(t);
}
tinyssh-20240101/crypto/sc25519.h 0000664 0000000 0000000 00000000326 14544472107 0016163 0 ustar 00root root 0000000 0000000 #ifndef _SC25519_H____
#define _SC25519_H____
extern void sc25519_reduce(unsigned char *);
extern void sc25519_muladd(unsigned char *, const unsigned char *, const unsigned char *, const unsigned char *);
#endif
tinyssh-20240101/crypto/uint32_pack.c 0000664 0000000 0000000 00000000405 14544472107 0017263 0 ustar 00root root 0000000 0000000 #include "uint32_pack.h"
/*
The 'uint32_pack' function converts 32-bit unsigned
integer into 4 bytes stored in little-endian format
*/
void uint32_pack(unsigned char *y, crypto_uint32 x) {
long long i;
for (i = 0; i < 4; ++i) { y[i] = x; x >>= 8; }
}
tinyssh-20240101/crypto/uint32_pack.h 0000664 0000000 0000000 00000000224 14544472107 0017267 0 ustar 00root root 0000000 0000000 #ifndef _UINT32_PACK_H____
#define _UINT32_PACK_H____
#include "crypto_uint32.h"
extern void uint32_pack(unsigned char *, crypto_uint32);
#endif
tinyssh-20240101/crypto/uint32_pack_big.c 0000664 0000000 0000000 00000000420 14544472107 0020101 0 ustar 00root root 0000000 0000000 #include "uint32_pack_big.h"
/*
The 'uint32_pack_big' function converts 32-bit unsigned
integer into 4 bytes stored in big-endian format
*/
void uint32_pack_big(unsigned char *y, crypto_uint32 x) {
long long i;
for (i = 3; i >= 0; --i) { y[i] = x; x >>= 8; }
}
tinyssh-20240101/crypto/uint32_pack_big.h 0000664 0000000 0000000 00000000237 14544472107 0020114 0 ustar 00root root 0000000 0000000 #ifndef _UINT32_PACK_BIG____
#define _UINT32_PACK_BIG____
#include "crypto_uint32.h"
extern void uint32_pack_big(unsigned char *y, crypto_uint32 x);
#endif
tinyssh-20240101/crypto/uint32_unpack.c 0000664 0000000 0000000 00000000451 14544472107 0017627 0 ustar 00root root 0000000 0000000 #include "uint32_unpack.h"
/*
The 'uint32_unpack' function converts 4 bytes
in little-endian format into 32-bit unsigned integer.
*/
crypto_uint32 uint32_unpack(const unsigned char *x) {
crypto_uint32 y = 0;
long long i;
for (i = 3; i >= 0; --i) y = (y << 8) | x[i];
return y;
}
tinyssh-20240101/crypto/uint32_unpack.h 0000664 0000000 0000000 00000000232 14544472107 0017631 0 ustar 00root root 0000000 0000000 #ifndef _UINT32_UNPACK_H____
#define _UINT32_UNPACK_H____
#include "crypto_uint32.h"
extern crypto_uint32 uint32_unpack(const unsigned char *);
#endif
tinyssh-20240101/crypto/uint32_unpack_big.c 0000664 0000000 0000000 00000000462 14544472107 0020452 0 ustar 00root root 0000000 0000000 #include "uint32_unpack_big.h"
/*
The 'uint32_unpack_big' function converts 4 bytes
in big-endian format into 32-bit unsigned integer.
*/
crypto_uint32 uint32_unpack_big(const unsigned char *x) {
crypto_uint32 y = 0;
long long i;
for (i = 0; i < 4; ++i) y = (y << 8) | x[i];
return y;
}
tinyssh-20240101/crypto/uint32_unpack_big.h 0000664 0000000 0000000 00000000242 14544472107 0020453 0 ustar 00root root 0000000 0000000 #ifndef _UINT32_UNPACK_BIG____
#define _UINT32_UNPACK_BIG____
#include "crypto_uint32.h"
extern crypto_uint32 uint32_unpack_big(const unsigned char *);
#endif
tinyssh-20240101/crypto/verify.c 0000664 0000000 0000000 00000000337 14544472107 0016451 0 ustar 00root root 0000000 0000000 #include "verify.h"
int verify(const unsigned char *x, const unsigned char *y, long long n) {
unsigned int d = 0;
long long i;
for (i = 0; i < n; ++i) d |= x[i] ^ y[i];
return (1 & ((d - 1) >> 8)) - 1;
}
tinyssh-20240101/crypto/verify.h 0000664 0000000 0000000 00000000201 14544472107 0016444 0 ustar 00root root 0000000 0000000 #ifndef _VERIFY_H____
#define _VERIFY_H____
extern int verify(const unsigned char *, const unsigned char *, long long);
#endif
tinyssh-20240101/make-install.sh 0000775 0000000 0000000 00000002673 14544472107 0016406 0 ustar 00root root 0000000 0000000 #!/bin/sh
set -e
build="`pwd`/build"
source="`pwd`"
bin="${build}/bin"
man="${build}/man"
cat "${source}/tinyssh/TARGETS" |\
while read x
do
[ -x "${bin}/${x}" ] || \
(
echo "=== `date` === $x not compiled, compile first!"
exit 111;
) || exit 111
done || exit 111
#bin
confbin="`head -1 conf-bin`"
bindir=`echo "$1/${confbin}" | sed 's,//,/,g'`
echo "=== `date` === installing bin directory ${bindir}"
mkdir -p "${bindir}" || exit 111
cat "${source}/tinyssh/LINKS" |\
while read x y
do
rm -f "${x}.tmp"
if [ "_${y}" = "_" ]; then
cp "${bin}/${x}" "${bindir}/${x}.tmp"
(
cd "${bindir}"
chmod 755 "${x}.tmp"
mv -f "${x}.tmp" "${x}"
)
else
(
cd "${bindir}"
ln -s "${y}" "${x}.tmp"
mv -f "${x}.tmp" "${x}"
)
fi
echo "=== `date` === installing ${bin}/${x} -> ${bindir}/${x}"
done || exit 111
echo "=== `date` === finishing"
#man
confman="`head -1 conf-man`"
mandir=`echo "$1/${confman}" | sed 's,//,/,g'`
echo "=== `date` === installing man directory ${mandir}"
mkdir -p "${mandir}" || exit 111
ls "${man}" | sort |\
while read x
do
n=`echo "${x}" | cut -d'.' -f2`
mkdir -p "${mandir}/man${n}" || exit 111
cp "${man}/${x}" "${mandir}/man${n}/${x}.tmp"
(
cd "${mandir}/man${n}"
chmod 644 "${x}.tmp"
mv -f "${x}.tmp" "${x}"
)
echo "=== `date` === installing ${man}/${x} -> ${mandir}/man${n}/${x}"
done || exit 111
echo "=== `date` === finishing"
exit 0
tinyssh-20240101/make-tinyssh.sh 0000775 0000000 0000000 00000022233 14544472107 0016433 0 ustar 00root root 0000000 0000000 #!/bin/sh -e
top="`pwd`"
build="`pwd`/build"
bin="${build}/bin"
man="${build}/man"
lib="${build}/lib"
include="${build}/include"
log="${build}/log"
work="${build}/work"
contribdir="`pwd`/build-contrib"
rm -rf "${build}"
mkdir -p "${build}"
mkdir -p "${bin}"
mkdir -p "${man}"
mkdir -p "${lib}"
mkdir -p "${include}"
exec 5>"${log}"
exec 2>&5
exec &5
}
log1() {
echo "=== `date` === $@"
echo "=== `date` === $@" >&5
}
log2() {
echo "=== `date` === $@"
echo "=== `date` === $@" >&5
}
version=`head -1 "${top}/debian/changelog" | cut -d '(' -f2 | cut -d ')' -f1` #XXX
if [ x"${version}" = x ]; then
version=noversion
fi
LANG=C
export LANG
log0 "uname -a: `uname -a || :`"
log0 "uname -F: `uname -F || :`"
log0 "uname -M: `uname -M || :`"
log0 "ulimit -a: `echo; ulimit -a || :`"
log1 "obtaining compiler"
rm -rf "${work}"
mkdir -p "${work}"
(
cd "${work}"
(
if [ x"${CC}" != x ]; then
echo "${CC} "
fi
cat "${top}/conf-cc"
) | while read compiler
do
echo 'int main(void) { return 0; }' > try.c
${compiler} -o try try.c || { log2 "${compiler} failed"; continue; }
log2 "${compiler} ok"
echo "${compiler}" > compiler
break
done
)
compiler=`head -1 "${work}/compiler"`
log1 "finishing"
log1 "checking compiler options"
rm -rf "${work}"
mkdir -p "${work}"
(
cd "${work}"
cflags=`cat "${top}/conf-cflags" || :`
cflags="${CPPFLAGS} ${CFLAGS} ${LDFLAGS} ${cflags}"
for i in ${cflags}; do
echo 'int main(void) { return 0; }' > try.c
${compiler} ${options} "${i}" -o try try.c || { log2 "${i} failed"; continue; }
options="${options} ${i}"
log2 "${i} ok"
done
echo ${options} > options
)
compilerorig=${compiler}
compiler="${compiler} `cat ${work}/options`"
log2 "${compiler}"
log1 "finishing"
log1 "checking libs"
rm -rf "${work}"
mkdir -p "${work}"
(
cd "${work}"
(
cat "${top}/conf-libs" || :
) | (
exec 9>syslibs
while read i; do
echo 'int main(void) { return 0; }' > try.c
${compiler} ${i} -o try try.c || { log2 "${i} failed"; continue; }
echo "${i}" >&9
log2 "${i} ok"
done
)
)
libs=`cat "${work}/syslibs"`
log1 "finishing"
log1 "checking \$LIBS"
if [ x"${LIBS}" != x ]; then
rm -rf "${work}"
mkdir -p "${work}"
(
cd "${work}"
for i in ${LIBS}; do
echo 'int main(void) { return 0; }' > try.c
${compiler} ${i} -o try try.c || { log2 "${i} failed"; continue; }
syslibs="${syslibs} ${i}"
log2 "${i} ok"
done
echo ${syslibs} > syslibs
)
fi
libsorig=${libs}
libs="${libs} `cat ${work}/syslibs`"
log1 "finishing"
log1 "building sysdep headers"
rm -rf "${work}"
mkdir -p "${work}"
cp -pr sysdep/* "${work}"
(
cd "${work}"
sh list | (
while read target source
do
[ -f "${include}/${target}" ] && continue
rm -f "${source}" "${target}.tmp"
${compiler} -O0 -o "${source}" "${source}.c" ${libs} || continue
"./${source}" > "${target}.tmp" 2>/dev/null || continue
if [ -f "${source}.out" ]; then
cp "${source}.out" "${include}/${target}"
else
#runtime
cp "${target}.tmp" "${include}/${target}"
fi
log2 "${target} ${source}"
done
)
)
log1 "finishing"
log1 "starting crypto lib"
rm -rf "${work}"
mkdir -p "${work}"
cp -pr crypto/* "${work}"
(
cd "${work}"
cat CRYPTOSOURCES\
| while read x
do
${compiler} -I"${include}" -c "${x}.c" || { log2 "libtinysshcrypto.a failed ... see the log ${log}"; exit 111; }
done || exit 111
ar cr "${lib}/libtinysshcrypto.a" `cat CRYPTOLIBS` || exit 0
)
log2 "libtinysshcrypto.a ok"
log1 "finishing"
origlibs="${lib}/libtinysshcrypto.a ${origlibs}"
libs="${lib}/libtinysshcrypto.a ${libs}"
log1 "starting crypto headers"
rm -rf "${work}"
mkdir -p "${work}"
cp -p crypto/CRYPTOPRIMITIVES "${work}"
cp -pr crypto-tests/*test.c "${work}"
cp -pr crypto-tests/*.h "${work}"
cp -pr crypto-tests/*.data "${work}" 2>/dev/null || :
(
cd "${work}"
cat CRYPTOPRIMITIVES\
| while read primitive checkflag
do
if [ "x${checkflag}" = x0 ]; then
cp -p "${top}/crypto/${primitive}.h" "${include}"
continue;
fi
testf=`echo "${primitive}" | sed 's/$/test/'`
(
echo '#include '
echo "#include <${primitive}.h>"
echo 'int main(void) {'
echo "#ifdef ${primitive}_PRIMITIVE"
echo "printf(\"%s\\\\n\", ${primitive}_PRIMITIVE);"
echo '#else'
echo "#ifdef ${primitive}_IMPLEMENTATION"
echo "printf(\"%s\\\\n\", ${primitive}_IMPLEMENTATION);"
echo '#endif'
echo "#ifdef ${primitive}_implementation"
echo "printf(\"%s\\\\n\", ${primitive}_implementation);"
echo '#endif'
echo '#endif'
echo 'return 0; }'
) > try.c
#try ext. crypto library
log0 "trying: ext. ${primitive}:"
if ${compiler} -c "${testf}.c" ${libs}; then
if ${compiler} -o "${testf}" "${testf}.o" ${libs}; then
if ${compiler} -o try try.c; then
if /bin/sh -ec "./${testf}"; then
log2 "${primitive}.h (`./try`) ok"
echo "#include <${primitive}.h>" >> crypto.h
continue
else
log2 "${primitive}.h (`./try`) failed"
fi
fi
fi
fi
#try int. crypto library
log0 "trying: int. ${primitive}:"
if cp -p "${top}/crypto/${primitive}.h" . ; then
if ${compilerorig} -I. -I"$include" -o "${testf}" "${testf}.c" ${origlibs}; then
if ${compilerorig} -I. -I"$include" -o try try.c; then
if /bin/sh -ec "./${testf}"; then
log2 "${primitive}.h (`./try`) ok"
echo "#include \"${primitive}.h\"" >> crypto.h
cp -p "${primitive}.h" "${include}"
continue
fi
fi
fi
fi
log2 "${primitive}.h failed ... see the log ${log}"
exit 111
done || exit 111
cp crypto.h "${include}/crypto.h"
)
log1 "finishing"
rm -rf "${work}"
mkdir -p "${work}"
cp -pr tinyssh/* "${work}"
cp -pr tinyssh-tests/*test.c "${work}"
cp -pr tinyssh-tests/*.h "${work}"
cp -pr _tinyssh/* "${work}" 2>/dev/null || :
(
cd "${work}"
log1 "starting tinyssh objects"
touch SOURCES TARGETS _TARGETS
cat SOURCES TARGETS _TARGETS\
| while read x
do
${compiler} "-DCOMPILER=\"${compilerorig}\"" "-DVERSION=\"${version}\"" -I"${include}" -c "${x}.c" || { log2 "${x}.o failed ... see the log ${log}"; exit 111; }
log2 "${x}.o ok"
done || exit 111
ar cr libtinyssh.a `cat LIBS` || exit 111
log1 "finishing"
#tests
log1 "starting tinyssh-tests"
cat LIBS \
| while read x
do
t=`echo ${x} | sed 's/.o$/test/'`
if [ ! -h "${t}.c" ]; then
${compiler} -I"${include}" -c "${t}.c" || { log2 "${t} failed ... see the log ${log}"; exit 111; }
${compiler} -I"${include}" -o "${t}" "${t}.o" libtinyssh.a ${libs} || { log2 "${t} failed ... see the log ${log}"; exit 111; }
"./${t}" || { log2 "${t} failed ... see the log ${log}"; exit 111; }
log2 "${t} ok"
fi
done || exit 111
log1 "finishing"
log1 "starting _tinyssh"
cat _TARGETS \
| while read x
do
${compiler} -I"${include}" -o "${x}" "${x}.o" libtinyssh.a ${libs} || { log2 "${x} failed ... see the log ${log}"; exit 111; }
log2 "${x} ok"
cp -p "${x}" "${bin}/${x}";
done || exit 111
log1 "finishing"
log1 "starting tinyssh"
cat TARGETS \
| while read x
do
${compiler} -I"${include}" -o "${x}" "${x}.o" libtinyssh.a ${libs} || { log2 "${x} failed ... see the log ${log}"; exit 111; }
log2 "${x} ok"
done || exit 111
log1 "finishing"
log1 "starting tinyssh regression tests"
cat TARGETS \
| while read x
do
sh ${x}.rts > ${x}.out
cmp "${x}.out" "${x}.exp" || { log2 "${x} regression test failed ... see the difference `pwd`/${x}.out `pwd`/${x}.exp"; exit 111; }
log2 "${x} ok"
cp -p "${x}" "${bin}/${x}";
done || exit 111
log1 "finishing"
) || exit 111
log1 "starting manpages"
cp -pr man/* "${man}"
log1 "finishing"
log1 "counting words of code - tests"
rm -rf "${work}"
mkdir -p "${work}"
for dir in tinyssh-tests crypto-tests _tinyssh; do
(
touch "${work}/${dir}"
[ -d "${dir}" ] || exit 0
cd "${dir}"
cat *.c *.h > "${work}/${dir}" || :
)
(
cd "${work}"
cat "${dir}" \
| (
cpp -fpreprocessed || gcpp -fpreprocessed
) | (
x=`sed 's/[_a-zA-Z0-9][_a-zA-Z0-9]*/x/g' | tr -d ' \012' | wc -c | tr -d ' '`
log2 "${dir} ${x}"
)
)
done
(
cd "${work}"
cat * \
| (
cpp -fpreprocessed || gcpp -fpreprocessed
) | (
x=`sed 's/[_a-zA-Z0-9][_a-zA-Z0-9]*/x/g' | tr -d ' \012' | wc -c | tr -d ' '`
log2 "$x words of code"
)
)
log1 "finishing"
echo "=== `date` === counting words of code"
rm -rf "${work}"
mkdir -p "${work}"
for dir in sysdep tinyssh crypto; do
(
cd "${dir}"
cat *.c *.h > "${work}/${dir}" || :
)
(
cd "${work}"
cat "${dir}" \
| (
cpp -fpreprocessed || gcpp -fpreprocessed
) | (
x=`sed 's/[_a-zA-Z0-9][_a-zA-Z0-9]*/x/g' | tr -d ' \012' | wc -c | tr -d ' '`
log2 "${dir} ${x}"
)
)
done
(
cd "${work}"
cat * \
| (
cpp -fpreprocessed || gcpp -fpreprocessed
) | (
x=`sed 's/[_a-zA-Z0-9][_a-zA-Z0-9]*/x/g' | tr -d ' \012' | wc -c | tr -d ' '`
log2 "${x} words of code"
)
)
log1 "finishing"
exit 0
tinyssh-20240101/make-tinysshcc.sh 0000775 0000000 0000000 00000012105 14544472107 0016736 0 ustar 00root root 0000000 0000000 #!/bin/sh -e
top="`pwd`"
build="`pwd`/build"
bin="${build}/bin"
man="${build}/man"
lib="${build}/lib"
include="${build}/include"
log="${build}/log"
work="${build}/work"
contribdir="`pwd`/build-contrib"
rm -rf "${build}"
mkdir -p "${build}"
mkdir -p "${bin}"
mkdir -p "${man}"
mkdir -p "${lib}"
mkdir -p "${include}"
exec 5>"${log}"
exec 2>&5
exec &5
}
log1() {
echo "=== `date` === $@"
echo "=== `date` === $@" >&5
}
log2() {
echo "=== `date` === $@"
echo "=== `date` === $@" >&5
}
version=`head -1 "${top}/debian/changelog" | cut -d '(' -f2 | cut -d ')' -f1` #XXX
if [ x"${version}" = x ]; then
version=noversion
fi
LANG=C
export LANG
log0 "uname -a: `uname -a || :`"
log0 "uname -F: `uname -F || :`"
log0 "uname -M: `uname -M || :`"
log1 "obtaining compiler"
rm -rf "${work}"
mkdir -p "${work}"
(
cd "${work}"
(
if [ x"${CC}" != x ]; then
echo "${CC} "
fi
cat "${top}/conf-cc"
) | while read compiler
do
echo 'int main(void) { return 0; }' > try.c
${compiler} -o try try.c || { log2 "${compiler} failed"; continue; }
log2 "${compiler} ok"
echo "${compiler}" > compiler
break
done
)
compiler=`head -1 "${work}/compiler"`
log1 "finishing"
log1 "obtaining ar"
rm -rf "${work}"
mkdir -p "${work}"
(
cd "${work}"
(
if [ x"${AR}" != x ]; then
echo "${AR} "
fi
cat "${top}/conf-ar"
) | while read ar
do
touch test.o
${ar} cr test.a test.o || { log2 "${ar} failed"; continue; }
log2 "${ar} ok"
echo "${ar}" > ar
break
done
)
ar=`head -1 "${work}/ar"`
log1 "finishing"
log1 "checking compiler options"
rm -rf "${work}"
mkdir -p "${work}"
(
cd "${work}"
cflags=`cat "${top}/conf-cflags" || :`
cflags="${CPPFLAGS} ${CFLAGS} ${LDFLAGS} ${cflags}"
for i in ${cflags}; do
echo 'int main(void) { return 0; }' > try.c
${compiler} ${options} "${i}" -o try try.c || { log2 "${i} failed"; continue; }
options="${options} ${i}"
log2 "${i} ok"
done
echo ${options} > options
)
compilerorig=${compiler}
compiler="${compiler} `cat ${work}/options`"
log2 "${compiler}"
log1 "finishing"
log1 "checking libs"
rm -rf "${work}"
mkdir -p "${work}"
(
cd "${work}"
(
cat "${top}/conf-libs" || :
) | (
exec 9>syslibs
while read i; do
echo 'int main(void) { return 0; }' > try.c
${compiler} ${i} -o try try.c || { log2 "${i} failed"; continue; }
echo "${i}" >&9
log2 "${i} ok"
done
)
)
libs=`cat "${work}/syslibs"`
log1 "finishing"
log1 "checking \$LIBS"
if [ x"${LIBS}" != x ]; then
rm -rf "${work}"
mkdir -p "${work}"
(
cd "${work}"
for i in ${LIBS}; do
echo 'int main(void) { return 0; }' > try.c
${compiler} ${i} -o try try.c || { log2 "${i} failed"; continue; }
syslibs="${i} ${syslibs}"
log2 "${i} ok"
done
echo ${syslibs} > syslibs
)
fi
libsorig=${libs}
libs="${libs} `cat ${work}/syslibs`"
log1 "finishing"
log1 "building sysdep headers"
rm -rf "${work}"
mkdir -p "${work}"
cp -pr sysdep/* "${work}"
(
cd "${work}"
sh list | (
while read target source
do
[ -f "${include}/${target}" ] && continue
rm -f "${source}" "${target}.tmp"
[ -f "${source}.out" ] || continue
${compiler} -O0 -o "${source}" "${source}.c" ${libs} || continue
cp "${source}.out" "${include}/${target}"
log2 "${target} ${source}"
done
)
)
log1 "finishing"
log1 "starting crypto lib"
rm -rf "${work}"
mkdir -p "${work}"
cp -pr crypto/* "${work}"
(
cd "${work}"
cat CRYPTOSOURCES\
| while read x
do
${compiler} -I"${include}" -c "${x}.c" || { log2 "libtinysshcrypto.a failed ... see the log ${log}"; exit 111; }
done || exit 111
${ar} cr "${lib}/libtinysshcrypto.a" `cat CRYPTOLIBS` || exit 0
)
log2 "libtinysshcrypto.a ok"
log1 "finishing"
origlibs="${lib}/libtinysshcrypto.a ${origlibs}"
libs="${lib}/libtinysshcrypto.a ${libs}"
log1 "starting crypto headers"
rm -rf "${work}"
mkdir -p "${work}"
cp -p crypto/CRYPTOPRIMITIVES "${work}"
(
cd "${work}"
cat CRYPTOPRIMITIVES\
| while read primitive checkflag
do
if [ "x${checkflag}" != x0 ]; then
echo "#include \"${primitive}.h\"" >> crypto.h
fi
cp -p "${top}/crypto/${primitive}.h" "${include}"
done || exit 111
cp crypto.h "${include}/crypto.h"
)
log1 "finishing"
rm -rf "${work}"
mkdir -p "${work}"
cp -pr tinyssh/* "${work}"
(
cd "${work}"
log1 "starting tinyssh objects"
touch SOURCES TARGETS
cat SOURCES TARGETS\
| while read x
do
${compiler} "-DCOMPILER=\"${compilerorig}\"" "-DVERSION=\"${version}\"" -I"${include}" -c "${x}.c" || { log2 "${x}.o failed ... see the log ${log}"; exit 111; }
log2 "${x}.o ok"
done || exit 111
${ar} cr libtinyssh.a `cat LIBS` || exit 111
log1 "finishing"
log1 "starting tinyssh"
cat TARGETS \
| while read x
do
${compiler} -I"${include}" -o "${x}" "${x}.o" libtinyssh.a ${libs} || { log2 "${x} failed ... see the log ${log}"; exit 111; }
cp -p "${x}" "${bin}/${x}"
log2 "${x} ok"
done || exit 111
log1 "finishing"
) || exit 111
log1 "starting manpages"
cp -pr man/* "${man}"
log1 "finishing"
exit 0
tinyssh-20240101/man/ 0000775 0000000 0000000 00000000000 14544472107 0014231 5 ustar 00root root 0000000 0000000 tinyssh-20240101/man/tinysshd-makekey.8 0000664 0000000 0000000 00000001063 14544472107 0017613 0 ustar 00root root 0000000 0000000 .TH tinysshd\-makekey 8
.SH NAME
tinysshd\-makekey \- create TinySSH key\-directory
.SH SYNOPSIS
.B tinysshd\-makekey
[ options ]
.I keydir
.SH DESCRIPTION
.B tinysshd\-makekey
safely creates secret\-keys and appropriate public\-keys in directory
.I keydir
.SH OPTIONS
.TP
.B \-q
no error messages
.TP
.B \-Q
print error messages (default)
.TP
.TP
.I keydir
directory for TinySSH keys, typically /etc/tinyssh/sshkeydir
.SH EXAMPLE
tinysshd\-makekey /etc/tinyssh/sshkeydir
.SH SEE ALSO
.BR tinysshd (8),
.BR tinysshd\-printkey (8)
.sp
.nf
https://tinyssh.org/
.fi
tinyssh-20240101/man/tinysshd-printkey.8 0000664 0000000 0000000 00000000701 14544472107 0020030 0 ustar 00root root 0000000 0000000 .TH tinysshd\-printkey 8
.SH NAME
tinysshd\-printkey \- print TinySSH public\-keys
.SH SYNOPSIS
.B tinysshd\-printkey
.I keydir
.SH DESCRIPTION
.B tinysshd\-printkey
prints TinySSH public\-keys in base64 format
.SH OPTIONS
.TP
.I keydir
directory containing TinySSH keys, typically /etc/tinyssh/sshkeydir
.SH EXAMPLE
tinysshd\-printkey /etc/tinyssh/sshkeydir
.SH SEE ALSO
.BR tinysshd (8),
.BR tinysshd\-makekey (8)
.sp
.nf
https://tinyssh.org/
.fi
tinyssh-20240101/man/tinysshd.8 0000664 0000000 0000000 00000006250 14544472107 0016172 0 ustar 00root root 0000000 0000000 .TH tinysshd 8
.SH NAME
tinysshd \- Tiny SSH daemon
.SH SYNOPSIS
.B tinysshd
[ options ]
.I keydir
.SH DESCRIPTION
.B tinysshd
is a minimalistic SSH server which implements only a subset of SSHv2 features.
.sp
.B tinysshd
supports only secure cryptography (minimum 128\-bit security, protected against cache\-timing attacks)
.sp
.B tinysshd
doesn't implement older crypto (such as RSA, DSA, HMAC\-MD5, HMAC\-SHA1, 3DES, RC4, ...)
.sp
.B tinysshd
doesn't implement unsafe features (such as password or hostbased authentication)
.sp
.B tinysshd
doesn't have features such: SSH1 protocol, compression, port forwarding, agent forwarding, X11 forwarding ...
.sp
.B tinysshd
doesn't use dynamic memory allocation (no allocation failures, etc.)
.SH OPTIONS
.TP
.B \-q
no error messages
.TP
.B \-Q
print error messages (default)
.TP
.B \-v
print extra information
.TP
.B \-s
enable state\-of\-the\-art crypto (default)
.sp
signing \- ssh\-ed25519
.sp
key-exchange \- curve25519\-sha256
.sp
symmetric \- chacha20\-poly1305@openssh.com
.TP
.B \-S
disable state\-of\-the\-art crypto
.TP
.B \-p
enable post\-quantum crypto (default)
.sp
signing \- TODO (not implemented yet)
.sp
key-exchange \- sntrup761x25519\-sha512@openssh.com
.sp
symmetric \- chacha20\-poly1305@openssh.com
.TP
.B \-P
disable post\-quantum crypto
.TP
.B \-l
use syslog instead of standard error output (useful for running from inetd)
.TP
.B \-L
don't use syslog, use standard error output (default)
.TP
.B \-x \fIname=command
add subsystem command (e.g.: sftp=/usr/libexec/openssh/sftp\-server)
.TP
.B \-e \fIcommand
execute the given command instead of spawning the shell (disables \fIexec\fR/\fIsubsystem\fR channel requests)
.TP
.I keydir
directory containing TinySSH keys, typically /etc/tinyssh/sshkeydir
.SH AUTHORIZATION
.B tinysshd
supports only public-key authorization via
.B AuthorizedKeysFile
~/.ssh/authorized_keys. Each line of the file contains one key in format "keytype base64-encoded-key comment".
.B tinyssh
supports only "ssh-ed25519" keytype.
.sp
~/.ssh/authorized_keys example:
.nf
.RS 2
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILV5AGhGQ1QVXjBWhTKJP3vrqE3isL4ivisBailQ14gS comment
.RE
.SH RUNNING
.TP
.B TCPSERVER
tcpserver \-HRDl0 0.0.0.0 22 /usr/sbin/tinysshd \-v /etc/tinyssh/sshkeydir &
.TP
.B BUSYBOX
busybox tcpsvd 0 22 tinysshd \-v /etc/tinyssh/sshkeydir &
.TP
.B INETD
.RS 4
/etc/inetd.conf:
.RS 4
ssh stream tcp nowait root /usr/sbin/tinysshd tinysshd \-l \-v /etc/tinyssh/sshkeydir
.RE
.RE
.TP
.B SYSTEMD
.RS 4
tinysshd.socket:
.RS 4
.nf
[Unit]
Description=TinySSH server socket
ConditionPathExists=!/etc/tinyssh/disable_tinysshd
[Socket]
ListenStream=22
Accept=yes
[Install]
WantedBy=sockets.target
.fi
.RE
.RE
.sp
.RS 4
tinysshd@.service:
.RS 4
.nf
[Unit]
Description=Tiny SSH server
After=network.target auditd.service
[Service]
ExecStartPre=\-/usr/sbin/tinysshd\-makekey \-q /etc/tinyssh/sshkeydir
EnvironmentFile=\-/etc/default/tinysshd
ExecStart=/usr/sbin/tinysshd ${TINYSSHDOPTS} \-\- /etc/tinyssh/sshkeydir
KillMode=process
SuccessExitStatus=111
StandardInput=socket
StandardError=journal
[Install]
WantedBy=multi\-user.target
.fi
.RE
.RE
.SH SEE ALSO
.BR tinysshd\-makekey (8),
.BR tinysshd\-printkey (8)
.sp
.nf
https://tinyssh.org/
.fi
tinyssh-20240101/man/tinysshnoneauthd.8 0000664 0000000 0000000 00000002333 14544472107 0017732 0 ustar 00root root 0000000 0000000 .TH tinysshnoneauthd 8
.SH NAME
tinysshnoneauthd \- Tiny SSH daemon with 'none' auth. enabled
.SH SYNOPSIS
.B tinysshnoneauthd
[ options ]
.I keydir
.SH DESCRIPTION
.B tinysshnoneauthd
creates encrypted (but not auhenticated) SSH connection.
It's used to protect older protocols which uses e.g. telnet etc.
.SH OPTIONS
.TP
.B \-q
no error messages
.TP
.B \-Q
print error messages (default)
.TP
.B \-v
print extra information
.TP
.B \-l
use syslog instead of standard error output (useful for running from inetd)
.TP
.B \-L
don't use syslog, use standard error output (default)
.TP
.B \-e \fIcommand
execute the given command instead of spawning the shell (disables \fIexec\fR/\fIsubsystem\fR channel requests)
.TP
.I keydir
directory containing TinySSH keys, typically /etc/tinyssh/sshkeydir
.SH EXAMPLES
.TP
.B TCPSERVER
.nf
useradd tinysshnoneauth
mkdir -p /home/tinysshnoneauth/
tinysshd-makekey /home/tinysshnoneauth/sshkeydir
chown -R tinysshnoneauth /home/tinysshnoneauth/sshkeydir
envuidgid tinysshnoneauth tcpserver -UHRDl0 0 2222 /usr/sbin/tinysshnoneauthd -vv -e 'cat /etc/motd' /home/tinysshnoneauth/sshkeydir
.fi
.SH SEE ALSO
.BR tinysshd (8),
.BR tinysshd\-makekey (8),
.BR tinysshd\-printkey (8)
.sp
.nf
https://tinyssh.org/
.fi
tinyssh-20240101/sysdep/ 0000775 0000000 0000000 00000000000 14544472107 0014765 5 ustar 00root root 0000000 0000000 tinyssh-20240101/sysdep/default.h-no.c 0000664 0000000 0000000 00000000066 14544472107 0017417 0 ustar 00root root 0000000 0000000 /* Public domain. */
int main(void) {
return 0;
}
tinyssh-20240101/sysdep/default.h-no.out 0000664 0000000 0000000 00000000000 14544472107 0017770 0 ustar 00root root 0000000 0000000 tinyssh-20240101/sysdep/hasasmvolatilememory.h-yes.c 0000664 0000000 0000000 00000000376 14544472107 0022430 0 ustar 00root root 0000000 0000000 /* Public domain. */
static void foo(void *yv, long long ylen) {
char *y = yv;
while (ylen > 0) { *y++ = 0; --ylen; }
__asm__ __volatile__("" : : "r"(yv) : "memory");
}
int main(void) {
char x[16];
foo(x, sizeof x);
return 0;
}
tinyssh-20240101/sysdep/hasasmvolatilememory.h-yes.out 0000664 0000000 0000000 00000000037 14544472107 0023007 0 ustar 00root root 0000000 0000000 #define HASASMVOLATILEMEMORY 1
tinyssh-20240101/sysdep/haslibutilh.h-yes.c 0000664 0000000 0000000 00000000114 14544472107 0020461 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
int main(void) {
return 0;
}
tinyssh-20240101/sysdep/haslibutilh.h-yes.out 0000664 0000000 0000000 00000000026 14544472107 0021050 0 ustar 00root root 0000000 0000000 #define HASLIBUTILH 1
tinyssh-20240101/sysdep/haslimits.h-yes.c 0000664 0000000 0000000 00000000113 14544472107 0020145 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
int main(void) {
return 0;
}
tinyssh-20240101/sysdep/haslimits.h-yes.out 0000664 0000000 0000000 00000000024 14544472107 0020533 0 ustar 00root root 0000000 0000000 #define HASLIMITS 1
tinyssh-20240101/sysdep/haslogintty.h-yes.c 0000664 0000000 0000000 00000000256 14544472107 0020525 0 ustar 00root root 0000000 0000000 /* Public domain. */
extern int login_tty(int);
static void foo(void) {
login_tty(0);
}
int main(int argc, char **argv) {
if (!argc)
foo();
return 0;
}
tinyssh-20240101/sysdep/haslogintty.h-yes.out 0000664 0000000 0000000 00000000026 14544472107 0021105 0 ustar 00root root 0000000 0000000 #define HASLOGINTTY 1
tinyssh-20240101/sysdep/hasmlock.h-yes.c 0000664 0000000 0000000 00000000217 14544472107 0017756 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
int main(void) {
char x[16];
mlock(x, sizeof x);
munlock(x, sizeof x);
return 0;
}
tinyssh-20240101/sysdep/hasmlock.h-yes.out 0000664 0000000 0000000 00000000023 14544472107 0020336 0 ustar 00root root 0000000 0000000 #define HASMLOCK 1
tinyssh-20240101/sysdep/hasopenpty.h-yes.c 0000664 0000000 0000000 00000000521 14544472107 0020345 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
#include
#include
extern int openpty(int *, int *, char *, struct termios *, struct winsize *);
static void foo(void) {
int master, slave;
openpty(&master, &slave, 0, 0, 0);
}
int main(int argc, char **argv) {
if (!argc)
foo();
return 0;
}
tinyssh-20240101/sysdep/hasopenpty.h-yes.out 0000664 0000000 0000000 00000000025 14544472107 0020731 0 ustar 00root root 0000000 0000000 #define HASOPENPTY 1
tinyssh-20240101/sysdep/hasutilh.h-yes.c 0000664 0000000 0000000 00000000111 14544472107 0017767 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
int main(void) {
return 0;
}
tinyssh-20240101/sysdep/hasutilh.h-yes.out 0000664 0000000 0000000 00000000023 14544472107 0020356 0 ustar 00root root 0000000 0000000 #define HASUTILH 1
tinyssh-20240101/sysdep/hasutmp.h-yes.c 0000664 0000000 0000000 00000000214 14544472107 0017633 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
#include
#include
int main(void) {
struct utmp ut = {0};
return 0;
}
tinyssh-20240101/sysdep/hasutmp.h-yes.out 0000664 0000000 0000000 00000000022 14544472107 0020215 0 ustar 00root root 0000000 0000000 #define HASUTMP 1
tinyssh-20240101/sysdep/hasutmpaddrv6.h-yes.c 0000664 0000000 0000000 00000000277 14544472107 0020753 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
#include
#include
int main(void) {
struct utmp ut;
int x[sizeof(ut.ut_addr_v6) < 16 ? -1 : 1] = {0};
return x[0];
}
tinyssh-20240101/sysdep/hasutmpaddrv6.h-yes.out 0000664 0000000 0000000 00000000030 14544472107 0021323 0 ustar 00root root 0000000 0000000 #define HASUTMPADDRV6 1
tinyssh-20240101/sysdep/hasutmphost.h-yes.c 0000664 0000000 0000000 00000000261 14544472107 0020533 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
#include
#include
int main(void) {
struct utmp ut;
if (sizeof ut.ut_host < 8) return 111;
return 0;
}
tinyssh-20240101/sysdep/hasutmphost.h-yes.out 0000664 0000000 0000000 00000000026 14544472107 0021117 0 ustar 00root root 0000000 0000000 #define HASUTMPHOST 1
tinyssh-20240101/sysdep/hasutmploginlogout.h-yes.c 0000664 0000000 0000000 00000000505 14544472107 0022121 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
#include
#include
extern void login(const struct utmp *);
extern int logout(const char *);
static void foo(void) {
struct utmp ut = {0};
login(&ut);
logout(ut.ut_line);
}
int main(int argc, char **argv) {
if (!argc)
foo();
return 0;
}
tinyssh-20240101/sysdep/hasutmploginlogout.h-yes.out 0000664 0000000 0000000 00000000035 14544472107 0022504 0 ustar 00root root 0000000 0000000 #define HASUTMPLOGINLOGOUT 1
tinyssh-20240101/sysdep/hasutmplogwtmp.h-yes.c 0000664 0000000 0000000 00000000332 14544472107 0021246 0 ustar 00root root 0000000 0000000 /* Public domain. */
extern void logwtmp(const char *, const char *, const char *);
static void foo(void) {
logwtmp("", "", "");
}
int main(int argc, char **argv) {
if (!argc)
foo();
return 0;
}
tinyssh-20240101/sysdep/hasutmplogwtmp.h-yes.out 0000664 0000000 0000000 00000000031 14544472107 0021627 0 ustar 00root root 0000000 0000000 #define HASUTMPLOGWTMP 1
tinyssh-20240101/sysdep/hasutmpname.h-yes.c 0000664 0000000 0000000 00000000261 14544472107 0020476 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
#include
#include
int main(void) {
struct utmp ut;
if (sizeof ut.ut_name < 8) return 111;
return 0;
}
tinyssh-20240101/sysdep/hasutmpname.h-yes.out 0000664 0000000 0000000 00000000026 14544472107 0021062 0 ustar 00root root 0000000 0000000 #define HASUTMPNAME 1
tinyssh-20240101/sysdep/hasutmppid.h-yes.c 0000664 0000000 0000000 00000000224 14544472107 0020331 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
#include
#include
int main(void) {
struct utmp ut = {0};
return ut.ut_pid;
}
tinyssh-20240101/sysdep/hasutmppid.h-yes.out 0000664 0000000 0000000 00000000025 14544472107 0020715 0 ustar 00root root 0000000 0000000 #define HASUTMPPID 1
tinyssh-20240101/sysdep/hasutmptime.h-yes.c 0000664 0000000 0000000 00000000224 14544472107 0020513 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
#include
#include
int main(void) {
struct utmp ut = {0};
return ut.ut_time;
}
tinyssh-20240101/sysdep/hasutmptime.h-yes.out 0000664 0000000 0000000 00000000026 14544472107 0021100 0 ustar 00root root 0000000 0000000 #define HASUTMPTIME 1
tinyssh-20240101/sysdep/hasutmptv.h-yes.c 0000664 0000000 0000000 00000000255 14544472107 0020212 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
#include
#include
int main(void) {
struct utmp ut = {0};
return ut.ut_tv.tv_sec + ut.ut_tv.tv_usec;
}
tinyssh-20240101/sysdep/hasutmptv.h-yes.out 0000664 0000000 0000000 00000000024 14544472107 0020571 0 ustar 00root root 0000000 0000000 #define HASUTMPTV 1
tinyssh-20240101/sysdep/hasutmptype.h-yes.c 0000664 0000000 0000000 00000000264 14544472107 0020542 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
#include
#include
int main(void) {
struct utmp ut;
ut.ut_type = USER_PROCESS | DEAD_PROCESS;
return 0;
}
tinyssh-20240101/sysdep/hasutmptype.h-yes.out 0000664 0000000 0000000 00000000026 14544472107 0021123 0 ustar 00root root 0000000 0000000 #define HASUTMPTYPE 1
tinyssh-20240101/sysdep/hasutmpuser.h-yes.c 0000664 0000000 0000000 00000000261 14544472107 0020534 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
#include
#include
int main(void) {
struct utmp ut;
if (sizeof ut.ut_user < 8) return 111;
return 0;
}
tinyssh-20240101/sysdep/hasutmpuser.h-yes.out 0000664 0000000 0000000 00000000026 14544472107 0021120 0 ustar 00root root 0000000 0000000 #define HASUTMPUSER 1
tinyssh-20240101/sysdep/hasutmpx.h-yes.c 0000664 0000000 0000000 00000000466 14544472107 0020034 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
static void foo(void) {
struct utmpx ut;
ut.ut_type = DEAD_PROCESS;
ut.ut_type = USER_PROCESS;
ut.ut_type = 0;
setutxent();
pututxline(&ut);
endutxent();
}
int main(int argc, char **argv) {
if (!argc)
foo();
return 0;
}
tinyssh-20240101/sysdep/hasutmpx.h-yes.out 0000664 0000000 0000000 00000000023 14544472107 0020406 0 ustar 00root root 0000000 0000000 #define HASUTMPX 1
tinyssh-20240101/sysdep/hasutmpxaddrv6.h-yes.c 0000664 0000000 0000000 00000000303 14544472107 0021131 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
#include
#include
int main(void) {
struct utmpx utx;
int x[sizeof(utx.ut_addr_v6) < 16 ? -1 : 1] = {0};
return x[0];
}
tinyssh-20240101/sysdep/hasutmpxaddrv6.h-yes.out 0000664 0000000 0000000 00000000031 14544472107 0021514 0 ustar 00root root 0000000 0000000 #define HASUTMPXADDRV6 1
tinyssh-20240101/sysdep/hasutmpxsyslen.h-yes.c 0000664 0000000 0000000 00000000161 14544472107 0021262 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
int main(void) {
struct utmpx ut = {0};
return ut.ut_syslen;
}
tinyssh-20240101/sysdep/hasutmpxsyslen.h-yes.out 0000664 0000000 0000000 00000000031 14544472107 0021643 0 ustar 00root root 0000000 0000000 #define HASUTMPXSYSLEN 1
tinyssh-20240101/sysdep/hasutmpxupdwtmpx.h-yes.c 0000664 0000000 0000000 00000000322 14544472107 0021634 0 ustar 00root root 0000000 0000000 /* Public domain. */
#include
static void foo(void) {
struct utmpx ut = {0};
updwtmpx("/nonexistent", &ut);
}
int main(int argc, char **argv) {
if (!argc)
foo();
return 0;
}
tinyssh-20240101/sysdep/hasutmpxupdwtmpx.h-yes.out 0000664 0000000 0000000 00000000033 14544472107 0022220 0 ustar 00root root 0000000 0000000 #define HASUTMPXUPDWTMPX 1
tinyssh-20240101/sysdep/list 0000664 0000000 0000000 00000003334 14544472107 0015666 0 ustar 00root root 0000000 0000000 #!/bin/sh -e
#__asm__ __volatile__ ...
echo 'hasasmvolatilememory.h hasasmvolatilememory.h-yes'
echo 'hasasmvolatilememory.h default.h-no'
#mlock
echo 'hasmlock.h hasmlock.h-yes'
echo 'hasmlock.h default.h-no'
#util/libutil
echo 'haslibutilh.h haslibutilh.h-yes'
echo 'haslibutilh.h default.h-no'
echo 'hasutilh.h hasutilh.h-yes'
echo 'hasutilh.h default.h-no'
#openpty/login_tty
echo 'hasopenpty.h hasopenpty.h-yes'
echo 'hasopenpty.h default.h-no'
echo 'haslogintty.h haslogintty.h-yes'
echo 'haslogintty.h default.h-no'
#utmpx
echo 'hasutmpx.h hasutmpx.h-yes'
echo 'hasutmpx.h default.h-no'
echo 'hasutmpxupdwtmpx.h hasutmpxupdwtmpx.h-yes'
echo 'hasutmpxupdwtmpx.h default.h-no'
echo 'hasutmpxsyslen.h hasutmpxsyslen.h-yes'
echo 'hasutmpxsyslen.h default.h-no'
echo 'hasutmpxaddrv6.h hasutmpxaddrv6.h-yes'
echo 'hasutmpxaddrv6.h default.h-no'
#utmp
echo 'hasutmp.h hasutmp.h-yes'
echo 'hasutmp.h default.h-no'
echo 'hasutmpname.h hasutmpname.h-yes'
echo 'hasutmpname.h default.h-no'
echo 'hasutmpuser.h hasutmpuser.h-yes'
echo 'hasutmpuser.h default.h-no'
echo 'hasutmphost.h hasutmphost.h-yes'
echo 'hasutmphost.h default.h-no'
echo 'hasutmptime.h hasutmptime.h-yes'
echo 'hasutmptime.h default.h-no'
echo 'hasutmptv.h hasutmptv.h-yes'
echo 'hasutmptv.h default.h-no'
echo 'hasutmppid.h hasutmppid.h-yes'
echo 'hasutmppid.h default.h-no'
echo 'hasutmptype.h hasutmptype.h-yes'
echo 'hasutmptype.h default.h-no'
echo 'hasutmplogwtmp.h hasutmplogwtmp.h-yes'
echo 'hasutmplogwtmp.h default.h-no'
echo 'hasutmploginlogout.h hasutmploginlogout.h-yes'
echo 'hasutmploginlogout.h default.h-no'
echo 'hasutmpaddrv6.h hasutmpaddrv6.h-yes'
echo 'hasutmpaddrv6.h default.h-no'
#limits
echo 'haslimits.h haslimits.h-yes'
echo 'haslimits.h default.h-no'
tinyssh-20240101/tinyssh-tests/ 0000775 0000000 0000000 00000000000 14544472107 0016317 5 ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/blockingtest.c 0000664 0000000 0000000 00000001066 14544472107 0021156 0 ustar 00root root 0000000 0000000 /*
20140302
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "fail.h"
#include "blocking.h"
int main(void) {
int pi[2];
long long i;
if (pipe(pi) == -1) fail("failure");
for (i = 0; i < 2; ++i) {
if ((fcntl(pi[i], F_GETFL) & O_NONBLOCK) != 0) fail("failure");
blocking_disable(pi[i]);
if ((fcntl(pi[i], F_GETFL) & O_NONBLOCK) == 0) fail("failure");
blocking_enable(pi[i]);
if ((fcntl(pi[i], F_GETFL) & O_NONBLOCK) != 0) fail("failure");
}
_exit(0);
}
tinyssh-20240101/tinyssh-tests/buftest.c 0000664 0000000 0000000 00000050601 14544472107 0020141 0 ustar 00root root 0000000 0000000 /*
20140303
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include "fail.h"
#include "byte.h"
#include "buf.h"
#include "str.h"
#include "crypto_uint32.h"
#include "crypto_uint8.h"
/* XXX */
static int xbuf_putnum8_(const char *fn, unsigned long long line,
struct buf *b, long long uu) {
crypto_uint8 u = uu;
return buf_putnum8_(fn, line, b, u);
}
static int xbuf_putnum32_(const char *fn, unsigned long long line,
struct buf *b, long long uu) {
crypto_uint32 u = uu;
return buf_putnum32_(fn, line, b, u);
}
struct vectors1 {
int (*op)(const char *, unsigned long long, struct buf *, long long);
long long spacelen;
long long xlen;
} testvectors1[] = {
{ buf_putzerobytes_, 5, 4 },
{ buf_putrandombytes_, 5, 4 },
{ buf_putpadding_, 5, 4 },
{ xbuf_putnum32_, 5, 0 },
{ xbuf_putnum8_, 2, 0 },
{ 0, 0, 0 }
};
struct vectors2 {
int (*op)(const char *, unsigned long long, struct buf *, const unsigned char *, long long);
long long spacelen;
const unsigned char *x;
long long xlen;
} testvectors2[] = {
{ buf_put_, 1, (unsigned char *)"", 0 },
{ buf_put_, 5, (unsigned char *)"ahoj", 4 },
{ buf_putstringlen_, 5, (unsigned char *)"", 0 },
{ buf_putstringlen_, 9, (unsigned char *)"ahoj", 4 },
{ 0, 0, 0, 0 }
};
struct vectors3 {
int (*op)(const char *, unsigned long long, struct buf *, const char *);
long long spacelen;
const char *x;
} testvectors3[] = {
{ buf_puts_, 1, "" },
{ buf_puts_, 5, "ahoj" },
{ buf_putstring_, 5, "" },
{ buf_putstring_, 9, "ahoj" },
{ 0, 0, 0 }
};
static int _test1a1(long long spacelen, int (*op)(const char *, unsigned long long, struct buf *, long long), long long xlen) {
pid_t pid;
int status;
unsigned char bspace[10];
struct buf b;
pid = fork();
if (pid == -1) return -1;
if (pid == 0) {
close(2);
buf_init(&b, bspace, spacelen);
op(__FILE__, __LINE__, &b, xlen);
buf_put(&b, (unsigned char *)"", 1); /* overflow */
_exit(0);
}
while (waitpid(pid, &status, 0) != pid) {};
if (!WIFEXITED(status)) return -1;
return WEXITSTATUS(status);
}
static int _test1a2(long long spacelen, int (*op)(const char *, unsigned long long, struct buf *, const unsigned char *, long long), const unsigned char *x, long long xlen) {
pid_t pid;
int status;
unsigned char bspace[10];
struct buf b;
pid = fork();
if (pid == -1) return -1;
if (pid == 0) {
close(2);
buf_init(&b, bspace, spacelen);
op(__FILE__, __LINE__, &b, x, xlen);
buf_put(&b, (unsigned char *)"", 1); /* overflow */
_exit(0);
}
while (waitpid(pid, &status, 0) != pid) {};
if (!WIFEXITED(status)) return -1;
return WEXITSTATUS(status);
}
static int _test1a3(long long spacelen, int (*op)(const char *, unsigned long long, struct buf *, const char *), const char *x) {
pid_t pid;
int status;
unsigned char bspace[10];
struct buf b;
pid = fork();
if (pid == -1) return -1;
if (pid == 0) {
close(2);
buf_init(&b, bspace, spacelen);
op(__FILE__, __LINE__, &b, x);
buf_put(&b, (unsigned char *)"", 1); /* overflow */
_exit(0);
}
while (waitpid(pid, &status, 0) != pid) {};
if (!WIFEXITED(status)) return -1;
return WEXITSTATUS(status);
}
static void _test1b1(long long spacelen, int (*op)(const char *, unsigned long long, struct buf *, long long), long long xlen) {
unsigned char bspace[10];
struct buf b;
buf_init(&b, bspace, spacelen);
op(__FILE__, __LINE__, &b, xlen);
}
static void _test1b2(long long spacelen, int (*op)(const char *, unsigned long long, struct buf *, const unsigned char *, long long), const unsigned char *x, long long xlen) {
unsigned char bspace[10];
struct buf b;
buf_init(&b, bspace, spacelen);
op(__FILE__, __LINE__, &b, x, xlen);
}
static void _test1b3(long long spacelen, int (*op)(const char *, unsigned long long, struct buf *, const char *), const char *x) {
unsigned char bspace[10];
struct buf b;
buf_init(&b, bspace, spacelen);
op(__FILE__, __LINE__, &b, x);
}
static void test1(void) {
long long i;
int r;
for (i = 0; testvectors1[i].op; ++i) {
r = _test1a1(testvectors1[i].spacelen, testvectors1[i].op, testvectors1[i].xlen);
if (r == 0) fail("failure");
_test1b1(testvectors1[i].spacelen, testvectors1[i].op, testvectors1[i].xlen);
}
for (i = 0; testvectors2[i].op; ++i) {
r = _test1a2(testvectors2[i].spacelen, testvectors2[i].op, testvectors2[i].x, testvectors2[i].xlen);
if (r == 0) fail("failure");
_test1b2(testvectors2[i].spacelen, testvectors2[i].op, testvectors2[i].x, testvectors2[i].xlen);
}
for (i = 0; testvectors3[i].op; ++i) {
r = _test1a3(testvectors3[i].spacelen, testvectors3[i].op, testvectors3[i].x);
if (r == 0) fail("failure");
_test1b3(testvectors3[i].spacelen, testvectors3[i].op, testvectors3[i].x);
}
}
static void test2(void) {
unsigned char bspace[2];
struct buf b;
unsigned char ch = 0;
long long i;
buf_init(&b, bspace, sizeof bspace);
for (i = 0; i < 10; ++i) {
buf_put(&b, &ch, 1);
buf_purge(&b);
}
}
struct vectors64 {
const char *in;
long long inlen;
const char *out;
} testvectors64[] = {
{ "\107\303\221\307\306\077\106\014\235\115\356\215\375", 13, "R8ORx8Y/RgydTe6N/Q==" },
{ "\133\253\044\246\070\374", 6, "W6skpjj8" },
{ "\253\374\323\142\326", 5, "q/zTYtY=" },
{ "\335\251\125\150\245\321\040\143\174\152", 10, "3alVaKXRIGN8ag==" },
{ "\155\065\344\122\353", 5, "bTXkUus=" },
{ "\266\071\073\373\072\035\270\151\201", 9, "tjk7+zoduGmB" },
{ "\302\373\135\206\370\012\365", 7, "wvtdhvgK9Q==" },
{ "\071\203", 2, "OYM=" },
{ "\210\236\076\336\014\122\125\050\016\076\063", 11, "iJ4+3gxSVSgOPjM=" },
{ "\241\330\251\122\325\061\142\167\174\315\201\000\275\157\056", 15, "odipUtUxYnd8zYEAvW8u" },
{ "\334\306\014\014\021\323\000\120\347\363\335", 11, "3MYMDBHTAFDn890=" },
{ "\356\243\102\105\343\146\154\064\006\316\360\301\256\164", 14, "7qNCReNmbDQGzvDBrnQ=" },
{ "\250\211\165\344\276\224\031\205\162\315", 10, "qIl15L6UGYVyzQ==" },
{ "\356\104\051\125\022\121\070\074\332\301\014\377\303\254\140", 15, "7kQpVRJRODzawQz/w6xg" },
{ "\065\340\116\113\133\334\100", 7, "NeBOS1vcQA==" },
{ "\151\340\101\120\376", 5, "aeBBUP4=" },
{ "\345", 1, "5Q==" },
{ "\010\134", 2, "CFw=" },
{ "\221\044\355\143\047\351\127\165\314\370\017\347\365", 13, "kSTtYyfpV3XM+A/n9Q==" },
{ "\222\237\301\021\214\011\002\367", 8, "kp/BEYwJAvc=" },
{ "\235\245\251\304\303\232\223\046\063\062\252\366", 12, "naWpxMOakyYzMqr2" },
{ "\215\267\333\017\237\313\210\114\067\164\067\337\024\211\174", 15, "jbfbD5/LiEw3dDffFIl8" },
{ "\344\122\212\142\231\251\146\253", 8, "5FKKYpmpZqs=" },
{ "\147\105", 2, "Z0U=" },
{ "\013\235\177\100\212\167\123\172\201", 9, "C51/QIp3U3qB" },
{ "\102\136\120\260\230\125\046\253\323\305\044", 11, "Ql5QsJhVJqvTxSQ=" },
{ "\101\152\200\060\134\014\124\202\023\057\250\115\341", 13, "QWqAMFwMVIITL6hN4Q==" },
{ "\012\310\224\166\265\072\072\270\052\262\147\145\022", 13, "CsiUdrU6OrgqsmdlEg==" },
{ "\021\131\104\067\051\316", 6, "EVlENynO" },
{ "\104\323", 2, "RNM=" },
{ "\070\274\150\150\014\077", 6, "OLxoaAw/" },
{ "\100\132\201\357\023\222\243\301\357", 9, "QFqB7xOSo8Hv" },
{ "\225\244", 2, "laQ=" },
{ "\212\270\067\052\145\203", 6, "irg3KmWD" },
{ "\363\252\326\213\370\065\072\154\077\335\202\242\236\274", 14, "86rWi/g1Omw/3YKinrw=" },
{ "\141\041\315\033", 4, "YSHNGw==" },
{ "\216\257\025\305\362\044\264\133", 8, "jq8VxfIktFs=" },
{ "\342\377\135\236", 4, "4v9dng==" },
{ "\121\100\077\162\374\162\274\121\100", 9, "UUA/cvxyvFFA" },
{ "\204", 1, "hA==" },
{ "\306\345\332\023\241\273\064\227\020\326\102\123\003", 13, "xuXaE6G7NJcQ1kJTAw==" },
{ "\227\142\207\137\322\344\074\317\007\245\120", 11, "l2KHX9LkPM8HpVA=" },
{ "\267\051\051", 3, "tykp" },
{ "\005\244", 2, "BaQ=" },
{ "\215\060\165\046\210", 5, "jTB1Jog=" },
{ "\100\376\271\317\250\013\264\360\330\012\325\103", 12, "QP65z6gLtPDYCtVD" },
{ "\233\340\212\127\160\167\077", 7, "m+CKV3B3Pw==" },
{ "\200\041\036\206\273\067", 6, "gCEehrs3" },
{ "\207\067\003\324\025\351\033\223\226\300\002\255\167\342\316", 15, "hzcD1BXpG5OWwAKtd+LO" },
{ "\263\364\115\054\347\350", 6, "s/RNLOfo" },
{ "\211\252\065\167\224", 5, "iao1d5Q=" },
{ "\024\327\120\076\031\035\104\003\247", 9, "FNdQPhkdRAOn" },
{ "\143\302\131\030\204\134\036\023\305\203\010\236\204\303", 14, "Y8JZGIRcHhPFgwiehMM=" },
{ "\124\225\066\007", 4, "VJU2Bw==" },
{ "\173\043\162\031\330\351", 6, "eyNyGdjp" },
{ "\323\112\227\176\021\120\311\202\035\041\153\326\137", 13, "00qXfhFQyYIdIWvWXw==" },
{ "\235\006\017\301\200\121\013\230\373\264\215\256\322\126\111", 15, "nQYPwYBRC5j7tI2u0lZJ" },
{ "\317\113\144\056\014\120\246\143\325\272", 10, "z0tkLgxQpmPVug==" },
{ "\106\136\226\023\146\054\366\070\007\270\345\321\245\304\177\147", 16, "Rl6WE2Ys9jgHuOXRpcR/Zw==" },
{ "\042\163\374\234\332\173\055\166", 8, "InP8nNp7LXY=" },
{ "\375\011\321\370\300", 5, "/QnR+MA=" },
{ "\034", 1, "HA==" },
{ "\350", 1, "6A==" },
{ "\147\136\210\264\353\267\311\341\073\110\270\071\033", 13, "Z16ItOu3yeE7SLg5Gw==" },
{ "\133\341\131\206\211\171", 6, "W+FZhol5" },
{ "\146\176\236\340\264\370\270\313\261\304\217", 11, "Zn6e4LT4uMuxxI8=" },
{ "\347\111\263\244\131\103\022\272\163\100\337\324\340\247\006", 15, "50mzpFlDErpzQN/U4KcG" },
{ "\132\167\314\125\023\172\223\140\264\146\167\156\245", 13, "WnfMVRN6k2C0ZndupQ==" },
{ "\206", 1, "hg==" },
{ "\000\346\367\051\051\116", 6, "AOb3KSlO" },
{ "\253\117\134\331", 4, "q09c2Q==" },
{ "\267\130\307\170", 4, "t1jHeA==" },
{ "\252\367\311\250\126\031\001\065\107", 9, "qvfJqFYZATVH" },
{ "\204\011\351\022\206\076\056\334\100", 9, "hAnpEoY+LtxA" },
{ "\004\302\141\333\230\255\215", 7, "BMJh25itjQ==" },
{ "\052\357\233\266\237\017\260\101\000", 9, "Ku+btp8PsEEA" },
{ "\302\024\373\144\071\312\012\044\304\340\026\222\066\216", 14, "whT7ZDnKCiTE4BaSNo4=" },
{ "\342\054\344\331\312\200\052", 7, "4izk2cqAKg==" },
{ "\156\234\310\023\077\041\310\005\137\175\034\307\247", 13, "bpzIEz8hyAVffRzHpw==" },
{ "\051\316\243\225\076\257", 6, "Kc6jlT6v" },
{ "\275\263\026\127\315\140\172\110\002\365\067\061\270\331", 14, "vbMWV81gekgC9TcxuNk=" },
{ "\240\021", 2, "oBE=" },
{ "\125\161\171\026\354", 5, "VXF5Fuw=" },
{ "\052\131", 2, "Klk=" },
{ "\335\234\230\006\054\265\273\124\147\131\015\054\036\335\353", 15, "3ZyYBiy1u1RnWQ0sHt3r" },
{ "\073\126\160\312\341\345\234\353\264\245\115\220\316\063\102", 15, "O1ZwyuHlnOu0pU2QzjNC" },
{ "\200\070\242\226\226\027\147", 7, "gDiilpYXZw==" },
{ "\132\111\013\325\224\115\107\236\124\310\144\262\156\001\004\227", 16, "WkkL1ZRNR55UyGSybgEElw==" },
{ "\340\357\121\156\255\173\153\221\125\024", 10, "4O9Rbq17a5FVFA==" },
{ "\060\037\251\063\073\022\206\033", 8, "MB+pMzsShhs=" },
{ "\355\241", 2, "7aE=" },
{ "\144\033\132\321\153\017\244\145\211\027\313\067\166\167\104", 15, "ZBta0WsPpGWJF8s3dndE" },
{ "\073\227\264\070\151\002", 6, "O5e0OGkC" },
{ "\201\364\206\002\033\125\075\110\036\152\347\011\146\077\023\354", 16, "gfSGAhtVPUgeaucJZj8T7A==" },
{ "\232\205\305\006\214\266\355\107\007\314\223\254\142\055\045\260", 16, "moXFBoy27UcHzJOsYi0lsA==" },
{ "\053\221\122\341\163", 5, "K5FS4XM=" },
{ "\245\113\335\066\012\245\334\335\006\350\373\254\121\346", 14, "pUvdNgql3N0G6PusUeY=" },
{ "\250\126\360\135\053\301\342\200", 8, "qFbwXSvB4oA=" },
{ "\154\323\054\236\175\252\270\270\220", 9, "bNMsnn2quLiQ" },
{ "\322\260\320\175\263", 5, "0rDQfbM=" },
{ "\136\073\307\102\376\033\002\243", 8, "XjvHQv4bAqM=" },
{ "\361\323\236", 3, "8dOe" },
{ "\143\007\375\015", 4, "Ywf9DQ==" },
{ "\122\240\036\350\132\212\037\134\114", 9, "UqAe6FqKH1xM" },
{ "\213\004\377\313\312\314\144\350\055\147\062\064\270\273\150\221", 16, "iwT/y8rMZOgtZzI0uLtokQ==" },
{ "\246\346\106\301\277\300\100", 7, "puZGwb/AQA==" },
{ "\176\034\360\143\160\016\072\017\322", 9, "fhzwY3AOOg/S" },
{ "\046\335\103\356\145\364\266\165\356\146", 10, "Jt1D7mX0tnXuZg==" },
{ "\147\231\300\372\053\373\375\363\257\071", 10, "Z5nA+iv7/fOvOQ==" },
{ "\241", 1, "oQ==" },
{ "\044\231\150\021\346\347", 6, "JJloEebn" },
{ "\026\361\151\071\101", 5, "FvFpOUE=" },
{ "\274\021\324\260\123\343", 6, "vBHUsFPj" },
{ "\255\312", 2, "rco=" },
{ "\012\362\172\166", 4, "CvJ6dg==" },
{ "\223\117\213\351\120\321", 6, "k0+L6VDR" },
{ "\314\150\017\355\321\372", 6, "zGgP7dH6" },
{ "\262\152\141\170\227\353\363\162\116\327\247\342\302\326\255\245", 16, "smpheJfr83JO16fiwtatpQ==" },
{ "\276\336\043\244\015\360\114\273\113", 9, "vt4jpA3wTLtL" },
{ "\307\075\305\152\226\265\045\170", 8, "xz3Fapa1JXg=" },
{ "\342\210\307\244\132\345", 6, "4ojHpFrl" },
{ "\370\125\040\013\267\004\057\371\155\321\107\174\241\041", 14, "+FUgC7cEL/lt0Ud8oSE=" },
{ "\327\111\202\040\314\147\164\116\217\217\220", 11, "10mCIMxndE6Pj5A=" },
{ "\176", 1, "fg==" },
{ "\107\326\002\256\146\112\137\304\013\020\020\163\264\213\145\141", 16, "R9YCrmZKX8QLEBBztItlYQ==" },
{ "\216", 1, "jg==" },
{ "\327\246\371\266\023", 5, "16b5thM=" },
{ "\027\352\164\125\266\241\266\272", 8, "F+p0Vbahtro=" },
{ "\001\135\250\345", 4, "AV2o5Q==" },
{ "\237\302\312\152\355\022\161\240\000\151\330", 11, "n8LKau0ScaAAadg=" },
{ "\343\144\171\236\255\261\275\315\300\026\346", 11, "42R5nq2xvc3AFuY=" },
{ "\371\206\264\033\200\232\373\003\237\061\120\051\353", 13, "+Ya0G4Ca+wOfMVAp6w==" },
{ "\315\220\061\106", 4, "zZAxRg==" },
{ "\007", 1, "Bw==" },
{ "\125\217\033\216\066\340\143\254\133\004\165\110\143\117\146", 15, "VY8bjjbgY6xbBHVIY09m" },
{ "\050\073\200\116\346\355\073\205\061\266\161\033\125\301", 14, "KDuATubtO4UxtnEbVcE=" },
{ "\233\140\272\145\333", 5, "m2C6Zds=" },
{ "\045\256\173\034\034\373\051\205\041\016\070\212\023\073\204\267", 16, "Ja57HBz7KYUhDjiKEzuEtw==" },
{ "\342\254\000\251\017\204\350\152\211\106\116\323\146\262\067\031", 16, "4qwAqQ+E6GqJRk7TZrI3GQ==" },
{ "\100\246\015\313\000\366\205\367\273\053", 10, "QKYNywD2hfe7Kw==" },
{ "\353\127\334\173\217\266\372\214\374", 9, "61fce4+2+oz8" },
{ "\144\243\162\123\006\211\035\337\342\174\071\157\244\316\063\154", 16, "ZKNyUwaJHd/ifDlvpM4zbA==" },
{ "\013\371\150\050", 4, "C/loKA==" },
{ "\340\214\237\210\113\145\007\077\136\351", 10, "4IyfiEtlBz9e6Q==" },
{ "\336\055\356\341\212\040", 6, "3i3u4Yog" },
{ "\354\316\211\157\113\304\374\267\010\137\264\043\220\306\210\125", 16, "7M6Jb0vE/LcIX7QjkMaIVQ==" },
{ "\355\116\363\331\314\366\005\230\253\137", 10, "7U7z2cz2BZirXw==" },
{ "\017\353\200\145\335\054\106\231", 8, "D+uAZd0sRpk=" },
{ "\017\146\253\337\150\156\326\076\105\040\026\154\133", 13, "D2ar32hu1j5FIBZsWw==" },
{ "\072", 1, "Og==" },
{ "\163\107\062\261\176\103\261\267\031\214\346\350\124\101\257", 15, "c0cysX5DsbcZjOboVEGv" },
{ "\333\005\104\376\205\323\203", 7, "2wVE/oXTgw==" },
{ "\072", 1, "Og==" },
{ "\246\270\237\262\261\252\220\273", 8, "prifsrGqkLs=" },
{ "\076\140", 2, "PmA=" },
{ "\343\043\335\346\134\003\240\244\067\271\105\311", 12, "4yPd5lwDoKQ3uUXJ" },
{ "\327\375\152\126", 4, "1/1qVg==" },
{ "\103\231\176\252\263\126\047\356\370\266\027\072\003\162", 14, "Q5l+qrNWJ+74thc6A3I=" },
{ "\373\321", 2, "+9E=" },
{ "\127\052\054\340\245\243\261", 7, "Vyos4KWjsQ==" },
{ "\027\236\317\116\373\155\111\057\026\371\247\227\055\242", 14, "F57PTvttSS8W+aeXLaI=" },
{ "\175\166\256\272\045\302\221\306\237\151\116\031\223\233", 14, "fXauuiXCkcafaU4Zk5s=" },
{ "\140\241", 2, "YKE=" },
{ "\064\332\317\246\113\370\276\341\302", 9, "NNrPpkv4vuHC" },
{ "\245\306\176\341\217\000\073\265\237\124", 10, "pcZ+4Y8AO7WfVA==" },
{ "\026\173\274\034\340\061\376\246\233\375\326\250\164\313\304\353", 16, "Fnu8HOAx/qab/daodMvE6w==" },
{ "\277\034", 2, "vxw=" },
{ "\215\120\005\160\173\000\153\373\026\123\045\074\142\337", 14, "jVAFcHsAa/sWUyU8Yt8=" },
{ "\221\122\070\352\346\035\227\270\342\066\237\170\266", 13, "kVI46uYdl7jiNp94tg==" },
{ "\274\270", 2, "vLg=" },
{ "\341\155\367\111\106\042\036\112\242\262\004\354\131\153", 14, "4W33SUYiHkqisgTsWWs=" },
{ "\254\103\176\060", 4, "rEN+MA==" },
{ "\277\305\046\061\037\111\121\315", 8, "v8UmMR9JUc0=" },
{ "\220\155\334\167\323\340\065\301\101\014\101\277", 12, "kG3cd9PgNcFBDEG/" },
{ "\117", 1, "Tw==" },
{ "\152\165\104\351\003\100\006\311\061\045", 10, "anVE6QNABskxJQ==" },
{ "\171\020\056\304\213", 5, "eRAuxIs=" },
{ "\263\317\223\332\321\036\203\241\016\355\173\163\060\121", 14, "s8+T2tEeg6EO7XtzMFE=" },
{ "\051\046\035\170\002", 5, "KSYdeAI=" },
{ "\214\324\001\125\062\247\010\122\147\376\021\031", 12, "jNQBVTKnCFJn/hEZ" },
{ "\035\126\117\235\225\176\135\370\347", 9, "HVZPnZV+Xfjn" },
{ "\334", 1, "3A==" },
{ "\203\117\166\021\144\257", 6, "g092EWSv" },
{ "\262\155", 2, "sm0=" },
{ "\241\242\031\110\014\223\340\175\311", 9, "oaIZSAyT4H3J" },
{ "\074\373\225\217\164\140\125\353\300\256\146\202\301\133", 14, "PPuVj3RgVevArmaCwVs=" },
{ "\336\354\143\220\367\007\342\114\007\040\331\362\245", 13, "3uxjkPcH4kwHINnypQ==" },
{ "\144\107\331\316\274\005\264", 7, "ZEfZzrwFtA==" },
{ "\027\371\125\116\174\275\160\220\306\266", 10, "F/lVTny9cJDGtg==" },
{ "\155\315\167\325\171\213\242\064\211\122\217\335\250\154", 14, "bc131XmLojSJUo/dqGw=" },
{ "\126\075\332\131\265\225\065\337\130\133\314\337", 12, "Vj3aWbWVNd9YW8zf" },
{ "\051\032\131\176\353\047\001\037\304\170\136\155\222\344", 14, "KRpZfusnAR/EeF5tkuQ=" },
{ "\323\011\213\013\160\037\274\235\026\155\352\234", 12, "0wmLC3AfvJ0Wbeqc" },
{ "\174\260\057\114\125\272\330\213\141\034\130\277", 12, "fLAvTFW62IthHFi/" },
{ "\234\376\012\217\376\061\152\202\177", 9, "nP4Kj/4xaoJ/" },
{ "\162\267\211\246\213\237\325\136\140\143\173", 11, "creJpouf1V5gY3s=" },
{ "\224\317\166\131\020\266\045", 7, "lM92WRC2JQ==" },
{ "\075\002\145\273\112\375\070\101\311\125\337\070\003\336\363", 15, "PQJlu0r9OEHJVd84A97z" },
{ "\177\105\134\344\106\350\034\205", 8, "f0Vc5EboHIU=" },
{ "\130\336\125\300\053\331\050", 7, "WN5VwCvZKA==" },
{ 0, 0, 0 }
};
static void test3(void) {
unsigned char bspace[100];
struct buf b;
long long i, outlen;
buf_init(&b, bspace, sizeof bspace);
for (i = 0; testvectors64[i].in; ++i) {
buf_purge(&b);
outlen = str_len(testvectors64[i].out);
buf_putbase64(&b, (unsigned char *)testvectors64[i].in, testvectors64[i].inlen);
if (b.len != outlen || !byte_isequal(b.buf, outlen, testvectors64[i].out)) {
fail("buf_putbase64 failed");
}
}
}
static void test4(void) {
unsigned char bspace[2];
struct buf b;
buf_init(&b, bspace, 1);
if (buf_ready(&b, 1)) fail("buf_ready failed");
buf_init(&b, bspace, 2);
if (!buf_ready(&b, 1)) fail("buf_ready failed");
}
struct vectorssh {
const char *in;
long long inlen;
const char *out;
long long outlen;
} testvectorssh[] = {
{ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 32, "\0\0\0\0" , 4},
{ "\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1", 32, "\0\0\0\040\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" , 36},
{ "\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1", 32, "\0\0\0\041\0\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" , 37},
{ 0, 0, 0, 0},
};
static unsigned char bspacesh[64];
static struct buf b;
static void test5(void) {
long long i;
buf_init(&b, bspacesh, sizeof bspacesh);
for (i = 0; testvectorssh[i].in; ++i) {
buf_purge(&b);
buf_putsharedsecret(&b, (unsigned char *)testvectorssh[i].in, testvectorssh[i].inlen);
if (b.len != testvectorssh[i].outlen || !byte_isequal(b.buf, b.len, testvectorssh[i].out)) {
fail("buf_putbasesharedsecret failed");
}
}
}
int main(void) {
test1();
test2();
test3();
test4();
test5();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/bytetest.c 0000664 0000000 0000000 00000003407 14544472107 0020332 0 ustar 00root root 0000000 0000000 /*
20140302
Jan Mojzis
Public domain.
*/
/*
XXX TODO
- check if byte_isequal is constant-time
*/
#include
#include "fail.h"
#include "byte.h"
int main(void) {
unsigned char b1[32];
unsigned char b2[32];
long long i, j;
const char *x = "abcdefgh";
char y[8];
/* byte_zero test */
for (i = 0; i < 32; ++i) {
for (j = 0; j < sizeof b1; ++j) b1[j] = 0;
for (j = 0; j < sizeof b2; ++j) b2[j] = 0;
b1[i] = 0xff; b2[i] = 0xff;
byte_zero(b1, sizeof b1);
if (byte_isequal(b1, 32, b2) != 0) fail("byte_zero failure");
}
/* byte_isequal test */
for (i = 0; i < sizeof b1; ++i) b1[i] = 0xff;
for (i = 0; i < sizeof b2; ++i) b2[i] = 0xff;
if (byte_isequal(b1, 32, b2) == 0) fail("byte_isequal failure");
for (i = 0; i < 32; ++i) {
b1[i] = 0;
if (byte_isequal(b1, 32, b2) != 0) fail("byte_isequal failure");
b1[i] = 0xff;
}
/* byte_copy test */
for (i = 0; i < sizeof b1; ++i) b1[i] = 0xff;
for (i = 0; i < sizeof b2; ++i) b2[i] = 0x00;
byte_copy(b1, 32, b2);
if (byte_isequal(b1, 32, b2) == 0) fail("byte_copy failure");
for (i = 0; i < 32; ++i) {
b1[i] = 0;
byte_copy(b1, 32, b2);
if (byte_isequal(b1, 32, b2) == 0) fail("byte_copy failure");
b1[i] = 0xff;
}
byte_zero(y, 8);
if (!byte_isequal(y, 8, "\0\0\0\0\0\0\0\0")) fail("byte_zero/byte_isequal failure");
byte_copy(y, 8, x);
if (!byte_isequal(y, 8, x)) fail("byte_copy/byte_isequal failure");
byte_copy(y, 7, y + 1);
if (!byte_isequal(y, 8, "bcdefghh")) fail("byte_copy/byte_isequal failure");
byte_zero(y, 8);
if (!byte_isequal(y, 8, "\0\0\0\0\0\0\0\0")) fail("byte_zero/byte_isequal failure");
return 0;
}
tinyssh-20240101/tinyssh-tests/channel_droptest.c 0000777 0000000 0000000 00000000000 14544472107 0024214 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/channel_forkptytest.c 0000777 0000000 0000000 00000000000 14544472107 0024746 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/channel_forktest.c 0000664 0000000 0000000 00000004105 14544472107 0022014 0 ustar 00root root 0000000 0000000 /*
20140416
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include
#include "fail.h"
#include "writeall.h"
#include "readall.h"
#include "byte.h"
#include "channel.h"
/* test if channel_fork pipes works from child to parent */
static void test1(void) {
int fd[3];
pid_t pid;
int status;
char buf[5];
pid = channel_fork(fd);
if (pid == -1) fail("channel_fork failure");
if (pid == 0) {
if (writeall(1, "ahoj1", 5) == -1) fail("writeall failure");
if (writeall(2, "ahoj2", 5) == -1) fail("writeall failure");
_exit(0);
}
if (fd[0] == -1) fail("channel_fork failure");
if (fd[1] == -1) fail("channel_fork failure");
if (fd[2] == -1) fail("channel_fork failure");
if (readall(fd[1], buf, 5) == -1) fail("readall failure");
if (!byte_isequal(buf, 5, "ahoj1")) fail("readall failure");
if (readall(fd[2], buf, 5) == -1) fail("readall failure");
if (!byte_isequal(buf, 5, "ahoj2")) fail("readall failure");
while (waitpid(pid, &status, 0) != pid) {};
if (!WIFEXITED(status)) fail("process killed");
if (WEXITSTATUS(status)) fail("process exited with status != 0");
}
/* test if channel_fork pipes works from parent to child */
static void test2(void) {
int fd[3];
pid_t pid;
int status;
char buf[5];
pid = channel_fork(fd);
if (pid == -1) fail("channel_fork failure");
if (pid == 0) {
if (readall(0, buf, 5) == -1) fail("readall failure");
if (!byte_isequal(buf, 5, "ahoj0")) fail("readall failure");
_exit(0);
}
if (fd[0] == -1) fail("channel_fork failure");
if (fd[1] == -1) fail("channel_fork failure");
if (fd[2] == -1) fail("channel_fork failure");
if (writeall(fd[0], "ahoj0", 5) == -1) fail("writeall failure");
while (waitpid(pid, &status, 0) != pid) {};
if (!WIFEXITED(status)) fail("process killed");
if (WEXITSTATUS(status)) fail("process exited with status != 0");
}
int main(void) {
alarm(10);
test1();
test2();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/channel_subsystemtest.c 0000664 0000000 0000000 00000003463 14544472107 0023117 0 ustar 00root root 0000000 0000000 /*
20150113
Jan Mojzis
Public domain.
*/
#include
#include "fail.h"
#include "numtostr.h"
#include "channel.h"
const char *vector[] = {
"0=0",
"1=1",
"2=2",
"3=3",
"4=4",
"5=5",
"6=6",
"7=7",
"8=8",
"9=9",
"10=10",
"11=11",
"12=12",
"13=13",
"14=14",
"15=15",
"16=16",
"17=17",
"18=18",
"19=19",
"20=20",
"21=21",
"22=22",
"23=23",
"24=24",
"25=25",
"26=26",
"27=27",
"28=28",
"29=29",
"30=30",
"31=31",
"32=32",
"33=33",
"34=34",
"35=35",
"36=36",
"37=37",
"38=38",
"39=39",
"40=40",
"41=41",
"42=42",
"43=43",
"44=44",
"45=45",
"46=46",
"47=47",
"48=48",
"49=49",
"50=50",
"51=51",
"52=52",
"53=53",
"54=54",
"55=55",
"56=56",
"57=57",
"58=58",
"59=59",
"60=60",
"61=61",
"62x=62",
"63=63x",
"64=64"
};
#if CHANNEL_SUBSYSTEM_MAX != 64
error !
#endif
static void test1(void) {
long long i;
for (i = 0; i < 64; ++i) {
if (!channel_subsystem_add(vector[i])) fail("failure");
}
if (channel_subsystem_add(vector[i])) fail("failure");
}
static void test2(void) {
long long i;
char *x, *n;
for (i = 0; i < 62; ++i) {
n = numtostr(0, i);
x = channel_subsystem_get(n);
if (!x) fail("failure");
if (strcmp(x, n)) fail("failure");
}
n = numtostr(0, 62);
x = channel_subsystem_get(n);
if (x) fail("failure");
n = numtostr(0, 63);
x = channel_subsystem_get(n);
if (!x) fail("failure");
if (!strcmp(x, n)) fail("failure");
n = numtostr(0, 64);
x = channel_subsystem_get(n);
if (x) fail("failure");
}
int main(void) {
test1();
test2();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/channeltest.c 0000664 0000000 0000000 00000014051 14544472107 0020774 0 ustar 00root root 0000000 0000000 /*
20140423
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include "crypto_uint32.h"
#include "fail.h"
#include "run.h"
#include "byte.h"
#include "channel.h"
const char *user = "user";
const char *termname = "xterm";
crypto_uint32 id = 0;
crypto_uint32 remotewindow = 100;
crypto_uint32 maxpacket = 100;
crypto_uint32 localwindow;
unsigned char ch = 'x';
static char *name(void) {
struct passwd *pw;
pw = getpwuid(geteuid());
return pw->pw_name;
}
/* channel can't be opened 2x */
static void testopen1(void) {
int r;
r = channel_open(user, id, remotewindow, maxpacket, &localwindow);
if (r != 1) fail("first channel_open not returns 1");
r = channel_open(user, id, remotewindow, maxpacket, &localwindow);
if (r != 0) fail("first channel_open not returns 0");
_exit(0);
}
/* *localwindow can't be 0 */
static void testopen2(void) {
channel_open(user, id, remotewindow, maxpacket, 0);
}
/* maxpacket can't be 0 */
static void testopen3(void) {
channel_open(user, id, remotewindow, 0, &localwindow);
}
/* remotewindow can't be 0 */
static void testopen4(void) {
channel_open(user, id, 0, maxpacket, &localwindow);
}
/* channel_openterminal() can't be called before channel_open() */
static void testtermopen1(void) {
channel_openterminal(termname, 0, 0, 0, 0);
}
/* channel_env() can't be called before channel_open() */
static void testenv1(void) {
channel_env("a", "b");
}
/* channel_env() can't be called after channel_exec() */
static void testenv2(void) {
channel_open(name(), id, remotewindow, maxpacket, &localwindow);
channel_exec("exit 0");
channel_env("a", "b");
}
/* channel_exec() can't be called before channel_open() */
static void testexec1(void) {
channel_exec("true");
}
/* channel_put() can't be called before channel_exec() */
static void testput1(void) {
channel_open(user, id, remotewindow, maxpacket, &localwindow);
channel_put(&ch, 1);
}
/* channel_puteof() can't be called before channel_exec() */
static void testputeof1(void) {
channel_open(user, id, remotewindow, maxpacket, &localwindow);
channel_puteof();
}
/* channel_read() can't be called before channel_exec() */
static void testread1(void) {
channel_open(user, id, remotewindow, maxpacket, &localwindow);
channel_read(&ch, 1);
}
/* channel_extendedread() can't be called before channel_exec() */
static void testextendedread1(void) {
channel_open(user, id, remotewindow, maxpacket, &localwindow);
channel_extendedread(&ch, 1);
}
/* channel_write() can't be called before channel_exec() */
static void testwrite1(void) {
channel_open(user, id, remotewindow, maxpacket, &localwindow);
channel_write();
}
/* OK - tests */
static void testok1(void) {
int r, s, e;
channel_open(name(), id, remotewindow, maxpacket, &localwindow);
channel_exec("exit 0");
do {
r = channel_waitnohang(&s, &e);
} while (r == 0);
if (s != 0) fail("process killed");
if (e != 0) fail("bad status");
_exit(0);
}
static void testok2(void) {
int r, s, e;
channel_open(name(), id, remotewindow, maxpacket, &localwindow);
channel_exec("exit 1");
do {
r = channel_waitnohang(&s, &e);
} while (r == 0);
if (s != 0) fail("process killed");
if (e != 1) fail("bad status");
_exit(0);
}
static void testok3(void) {
int r, s, e;
channel_open(name(), id, remotewindow, maxpacket, &localwindow);
channel_exec("kill -9 $$");
do {
r = channel_waitnohang(&s, &e);
} while (r == 0);
if (s != 9) fail("bad exit signal");
_exit(0);
}
static void testok4(void) {
int r, s, e;
unsigned char buf[10];
channel_open(name(), id, remotewindow, maxpacket, &localwindow);
channel_exec("cat");
ch = 'a';
channel_put(&ch, 1);
do {
r = channel_write();
} while (r == 0);
do {
r = channel_read(buf, sizeof buf);
} while (r == 0);
if (r != 1) fail("channel_write()/channel_read() failure");
if (buf[0] != 'a') fail("channel_write()/channel_read() failure");
channel_puteof();
do {
r = channel_waitnohang(&s, &e);
} while (r == 0);
if (s != 0) fail("process killed");
if (e != 0) fail("bad status");
_exit(0);
}
#define warn_(a, b, x) do { fprintf(stderr, "%s:%llu: warning: %s\n", (a), (unsigned long long)(b), (x)); fflush(stderr); _exit(0); } while (0);
#define warn(x) warn_(__FILE__, __LINE__, (x))
static int homedir(void) {
struct passwd *pw;
struct stat st;
pw = getpwuid(geteuid());
if (!pw) return 0;
return 1 + stat(pw->pw_dir, &st);
}
static int shell(void) {
pid_t pid;
int status;
pid = fork();
if (pid == -1) return 0;
if (pid == 0) {
struct passwd *pw;
char *run[4];
pw = getpwuid(geteuid());
if (!pw) _exit(1);
run[0] = pw->pw_shell;
run[1] = (char *)"-c";
run[2] = (char *)"exit 0";
run[3] = (char *)0;
execvp(run[0], run);
_exit(1);
}
while (waitpid(pid, &status, 0) != pid) {};
if (!WIFEXITED(status)) return 0;
if (WEXITSTATUS(status)) return 0;
return 1;
}
int main(void) {
/* don't run check when homedir not exist */
if (!homedir()) {
warn("homedir not exist - skipping tests")
_exit(0);
}
/* don't run check when shell returns non-zero */
if (!shell()) {
warn("shell returns non-zero - skipping tests")
_exit(0);
}
run_mustpass(testopen1);
run_mustfail(testopen2);
run_mustfail(testopen3);
run_mustfail(testopen4);
run_mustfail(testtermopen1);
run_mustfail(testenv1);
run_mustfail(testenv2);
run_mustfail(testexec1);
run_mustfail(testput1);
run_mustfail(testputeof1);
run_mustfail(testread1);
run_mustfail(testextendedread1);
run_mustfail(testwrite1);
/* temp. disable the rest */
_exit(0);
run_mustpass(testok1);
run_mustpass(testok2);
run_mustpass(testok3);
run_mustpass(testok4);
_exit(0);
}
tinyssh-20240101/tinyssh-tests/coetest.c 0000664 0000000 0000000 00000000773 14544472107 0020140 0 ustar 00root root 0000000 0000000 /*
20140302
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "fail.h"
#include "coe.h"
int main(void) {
int pi[2];
long long i;
if (pipe(pi) == -1) fail("failure");
for (i = 0; i < 2; ++i) {
if (fcntl(pi[i], F_GETFD) != 0) fail("failure");
coe_enable(pi[i]);
if (fcntl(pi[i], F_GETFD) == 0) fail("failure");
coe_disable(pi[i]);
if (fcntl(pi[i], F_GETFD) != 0) fail("failure");
}
_exit(0);
}
tinyssh-20240101/tinyssh-tests/connectioninfotest.c 0000664 0000000 0000000 00000012622 14544472107 0022401 0 ustar 00root root 0000000 0000000 /*
20140302
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "fail.h"
#include "porttostr.h"
#include "iptostr.h"
#include "connectioninfo.h"
#include "byte.h"
static void connectioninfotest_empty(void) {
char localip[IPTOSTR_LEN];
char localport[PORTTOSTR_LEN];
char remoteip[IPTOSTR_LEN];
char remoteport[PORTTOSTR_LEN];
connectioninfo(localip, localport, remoteip, remoteport);
if (strcmp(localip, "unknown")) fail("connectioninfo failed");
if (strcmp(localport, "0")) fail("connectioninfo failed");
if (strcmp(remoteip, "unknown")) fail("connectioninfo failed");
if (strcmp(remoteport, "0")) fail("connectioninfo failed");
}
static void connectioninfotest_tcpserverenv(void) {
char localip[IPTOSTR_LEN];
char localport[PORTTOSTR_LEN];
char remoteip[IPTOSTR_LEN];
char remoteport[PORTTOSTR_LEN];
if (setenv("TCPLOCALIP", "aaax", 1) == -1) fail("setenv failed")
if (setenv("TCPLOCALPORT", "bbbx", 1) == -1) fail("setenv failed")
if (setenv("TCPREMOTEIP", "cccx", 1) == -1) fail("setenv failed")
if (setenv("TCPREMOTEPORT", "dddx", 1) == -1) fail("setenv failed")
connectioninfo(localip, localport, remoteip, remoteport);
if (strcmp(localip, "aaax")) fail("connectioninfo failed");
if (strcmp(localport, "bbbx")) fail("connectioninfo failed");
if (strcmp(remoteip, "cccx")) fail("connectioninfo failed");
if (strcmp(remoteport, "dddx")) fail("connectioninfo failed");
if (unsetenv("TCPLOCALIP") == -1) fail("unsetenv failed")
if (unsetenv("TCPLOCALPORT") == -1) fail("unsetenv failed")
if (unsetenv("TCPREMOTEIP") == -1) fail("unsetenv failed")
if (unsetenv("TCPREMOTEPORT") == -1) fail("unsetenv failed")
}
static void connectioninfotest_curvecpserverenv(void) {
#ifdef TODO
char localip[IPTOSTR_LEN];
char localport[PORTTOSTR_LEN];
char remoteip[IPTOSTR_LEN];
char remoteport[PORTTOSTR_LEN];
if (setenv("CURVECPLOCALIP", "aaay", 1) == -1) fail("setenv failed")
if (setenv("CURVECPLOCALPORT", "bbby", 1) == -1) fail("setenv failed")
if (setenv("CURVECPREMOTEIP", "cccy", 1) == -1) fail("setenv failed")
if (setenv("CURVECPREMOTEPORT", "dddy", 1) == -1) fail("setenv failed")
connectioninfo(localip, localport, remoteip, remoteport);
if (strcmp(localip, "aaay")) fail("connectioninfo failed");
if (strcmp(localport, "bbby")) fail("connectioninfo failed");
if (strcmp(remoteip, "cccy")) fail("connectioninfo failed");
if (strcmp(remoteport, "dddy")) fail("connectioninfo failed");
if (unsetenv("CURVECPLOCALIP") == -1) fail("unsetenv failed")
if (unsetenv("CURVECPLOCALPORT") == -1) fail("unsetenv failed")
if (unsetenv("CURVECPREMOTEIP") == -1) fail("unsetenv failed")
if (unsetenv("CURVECPREMOTEPORT") == -1) fail("unsetenv failed")
#endif
}
static struct vectors {
const char *port;
const char *portstr;
} testvectors[] = {
{ "\377\000", "65280" },
{ "\377\001", "65281" },
{ "\377\002", "65282" },
{ "\377\003", "65283" },
{ "\377\004", "65284" },
{ "\377\005", "65285" },
{ "\377\006", "65286" },
{ "\377\007", "65287" },
{ "\377\010", "65288" },
{ "\377\011", "65289" },
{ "\377\012", "65290" },
{ "\377\013", "65291" },
{ "\377\014", "65292" },
{ "\377\015", "65293" },
{ "\377\016", "65294" },
{ "\377\017", "65295" },
{ "\377\020", "65296" },
{ "\377\021", "65297" },
{ "\377\022", "65298" },
{ "\377\023", "65299" },
{ 0, 0 }
};
static void connectioninfotest_fromfd(void) {
int fd;
struct sockaddr_in sa;
long long i, j;
char localip[IPTOSTR_LEN];
char localport[PORTTOSTR_LEN];
char remoteip[IPTOSTR_LEN];
char remoteport[PORTTOSTR_LEN];
/* create socket */
fd = socket(PF_INET, SOCK_DGRAM, 0);
if (fd == -1) fail("socket failed");
/* bind */
for (i = 0; testvectors[i].port; ++i) {
byte_zero(&sa, sizeof sa);
sa.sin_family = PF_INET;
byte_copy(&sa.sin_addr, 4, "\177\0\0\1");
byte_copy(&sa.sin_port, 2, testvectors[i].port);
if (bind(fd, (struct sockaddr *)&sa, sizeof sa) == 0) goto bind;
}
fail("bind failed");
bind:
/* connect */
for (j = i; testvectors[j].port; ++j) {
byte_zero(&sa, sizeof sa);
sa.sin_family = PF_INET;
byte_copy(&sa.sin_addr, 4, "\177\0\0\1");
byte_copy(&sa.sin_port, 2, testvectors[i].port);
if (connect(fd, (struct sockaddr *)&sa, sizeof sa) == 0) goto connect;
}
fail("connect failed");
connect:
close(0);
if (dup(fd) != 0) fail("dup failed");
close(fd);
connectioninfo(localip, localport, remoteip, remoteport);
if (strcmp(localip, "127.0.0.1")) fail("connectioninfo failed");
if (strcmp(localport, testvectors[i].portstr)) fail("connectioninfo failed");
if (strcmp(remoteip, "127.0.0.1")) fail("connectioninfo failed");
if (strcmp(remoteport, testvectors[j].portstr)) fail("connectioninfo failed");
close(0);
}
int main(void) {
connectioninfotest_empty();
connectioninfotest_tcpserverenv();
connectioninfotest_empty();
connectioninfotest_curvecpserverenv();
connectioninfotest_empty();
connectioninfotest_fromfd();
connectioninfotest_empty();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/dietest.c 0000777 0000000 0000000 00000000000 14544472107 0022321 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/dropuidgidtest.c 0000664 0000000 0000000 00000001405 14544472107 0021515 0 ustar 00root root 0000000 0000000 /*
20140320
Jan Mojzis
Public domain.
*/
#include
#include "run.h"
#include "fail.h"
#include "dropuidgid.h"
static void droproot(void) {
if (geteuid() == 0) {
if (!dropuidgid(0, 1230, 1230)) _exit(111);
}
if (geteuid() == 0) _exit(111);
}
static void test1(void) {
droproot();
if (dropuidgid(0, 1231, getegid())) _exit(111);
_exit(0);
}
static void test2(void) {
droproot();
if (!dropuidgid(0, geteuid(), getegid())) _exit(111);
if (!dropuidgid(0, geteuid(), getegid())) _exit(111);
_exit(0);
}
static void test3(void) {
droproot();
if (!dropuidgid(0, 0, 0)) _exit(111);
_exit(0);
}
int main(void) {
run_mustpass(test1);
run_mustpass(test2);
run_mustfail(test3);
_exit(0);
}
tinyssh-20240101/tinyssh-tests/emptytest.c 0000664 0000000 0000000 00000000141 14544472107 0020515 0 ustar 00root root 0000000 0000000 /*
20140319
Jan Mojzis
Public domain.
*/
#include
int main(void) {
_exit(0);
}
tinyssh-20240101/tinyssh-tests/envtest.c 0000664 0000000 0000000 00000002177 14544472107 0020162 0 ustar 00root root 0000000 0000000 /*
20130606
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include "fail.h"
#include "env.h"
static void test_zero(void) {
if (env_get(0)) fail("env_get accepts zero input");
}
static void doit(const char *d0, const char *d) {
char *s;
s = env_get(d0);
if (!s) {
if (d) fail("env_get failure");
return;
}
if (!s) fail("env_get failure");
if (strcmp(s, d)) fail("env_get failure");
return;
}
static void test_setunset(void) {
setenv("x","x",1);
doit("x", "x");
setenv("x","y",1);
doit("x", "y");
unsetenv("x");
doit("x", 0);
}
static void test_env(void) {
const char *env[10];
env[0] = "a=1";
env[1] = "a=2";
env[2] = "b=b=1";
env[3] = "c=";
env[4] = "d";
env[5] = "=null";
env[6] = "e==";
env[7] = 0;
environ = (char **)env;
doit("a", "1");
doit("b", "b=1");
doit("b=b", "1");
doit("c", "");
doit("d", 0);
doit("e", "=");
doit("", "null");
}
int main(void) {
test_zero();
test_setunset();
test_env();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/etest.c 0000664 0000000 0000000 00000000216 14544472107 0017606 0 ustar 00root root 0000000 0000000 /*
20140417
Jan Mojzis
Public domain.
*/
#include
#include "e.h"
#ifndef EPROTO
error!
#endif
int main(void) {
_exit(0);
}
tinyssh-20240101/tinyssh-tests/fail.h 0000664 0000000 0000000 00000001344 14544472107 0017405 0 ustar 00root root 0000000 0000000 #ifndef _FAIL_H____
#define _FAIL_H____
#include
#include
#include "fail.h"
#define fail_(a, b, x) do { fprintf(stderr, "%s:%llu: %s\n", (a), (unsigned long long)(b), (x)); fflush(stderr); _exit(111); } while (0);
#define fail(x) fail_(__FILE__, __LINE__, (x))
static void fail_printdata(char *text, unsigned char *data, long long len) {
long long i;
fprintf(stderr, "%s = {\n ", text);
for (i = 0; i < len; ++i) {
if (i == len - 1) {
fprintf(stderr, "0x%02x", data[i]);
}
else {
fprintf(stderr, "0x%02x, ", data[i]);
if (i % 8 == 7) fprintf(stderr, "\n ");
}
}
fprintf(stderr, "\n};\n");
fflush(stderr);
}
#endif
tinyssh-20240101/tinyssh-tests/forkptytest.c 0000777 0000000 0000000 00000000000 14544472107 0023256 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/getlntest.c 0000664 0000000 0000000 00000004015 14544472107 0020474 0 ustar 00root root 0000000 0000000 /*
20140323
Jan Mojzis
Public domain.
*/
#include
#include
#include "fail.h"
#include "savesync.h"
#include "str.h"
#include "byte.h"
#include "open.h"
#include "getln.h"
int main(void) {
char buf[6];
int fd;
int r;
/* create test file */
if (savesync("getlntest.txt", "ab\ncd", 5) == -1) fail("savesync() failure");
/* ok test */
fd = open_read("getlntest.txt");
if (fd == -1) fail("open_read() failure");
r = getln(fd, buf, sizeof buf);
if (r != 1) fail("getln() failure");
if (str_len(buf) != 3) fail("getln() failure");
if (!byte_isequal(buf, 3, "ab\n")) fail("getln() failure");
r = getln(fd, buf, sizeof buf);
if (r != 0) fail("getln() failure");
if (str_len(buf) != 2) fail("getln() failure");
if (!byte_isequal(buf, 2, "cd")) fail("getln() failure");
close(fd);
/* overflow test */
fd = open_read("getlntest.txt");
if (fd == -1) fail("open_read() failure");
r = getln(fd, buf, 3);
if (r != -1) fail("getln() failure");
close(fd);
if (unlink("getlntest.txt") == -1) fail("unlink() failure");
/* empty test */
if (savesync("getlntest.txt", "", 0) == -1) fail("savesync() failure");
fd = open_read("getlntest.txt");
if (fd == -1) fail("open_read() failure");
r = getln(fd, buf, sizeof buf);
if (r != 0) fail("getln() failure");
if (str_len(buf) != 0) fail("getln() failure");
close(fd);
if (unlink("getlntest.txt") == -1) fail("unlink() failure");
/* empty line test */
if (savesync("getlntest.txt", "\n", 1) == -1) fail("savesync() failure");
fd = open_read("getlntest.txt");
if (fd == -1) fail("open_read() failure");
r = getln(fd, buf, sizeof buf);
if (r != 1) fail("getln() failure");
if (str_len(buf) != 1) fail("getln() failure");
r = getln(fd, buf, sizeof buf);
if (r != 0) fail("getln() failure");
if (str_len(buf) != 0) fail("getln() failure");
close(fd);
if (unlink("getlntest.txt") == -1) fail("unlink() failure");
_exit(0);
}
tinyssh-20240101/tinyssh-tests/globaltest.c 0000664 0000000 0000000 00000000414 14544472107 0020622 0 ustar 00root root 0000000 0000000 /*
20140304
Jan Mojzis
Public domain.
*/
#include
#include "global.h"
#ifndef GLOBAL_BSIZE
error!
#endif
int main(void) {
global_init();
global_init();
global_purge();
global_purge();
global_init();
global_init();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/iptostrtest.c 0000664 0000000 0000000 00000145314 14544472107 0021077 0 ustar 00root root 0000000 0000000 /*
20130605
Jan Mojzis
Public domain.
*/
#include
#include "fail.h"
#include "iptostr.h"
struct vectors {
const char *ip;
const char *ipstr;
} testvectors[] = {
{ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", "::" },
{ "\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000", "1::" },
{ "\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000", "0:1::" },
{ "\000\001\000\001\000\000\000\000\000\000\000\000\000\000\000\000", "1:1::" },
{ "\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000", "0:0:1::" },
{ "\000\001\000\000\000\001\000\000\000\000\000\000\000\000\000\000", "1:0:1::" },
{ "\000\000\000\001\000\001\000\000\000\000\000\000\000\000\000\000", "0:1:1::" },
{ "\000\001\000\001\000\001\000\000\000\000\000\000\000\000\000\000", "1:1:1::" },
{ "\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000", "0:0:0:1::" },
{ "\000\001\000\000\000\000\000\001\000\000\000\000\000\000\000\000", "1:0:0:1::" },
{ "\000\000\000\001\000\000\000\001\000\000\000\000\000\000\000\000", "0:1:0:1::" },
{ "\000\001\000\001\000\000\000\001\000\000\000\000\000\000\000\000", "1:1:0:1::" },
{ "\000\000\000\000\000\001\000\001\000\000\000\000\000\000\000\000", "0:0:1:1::" },
{ "\000\001\000\000\000\001\000\001\000\000\000\000\000\000\000\000", "1:0:1:1::" },
{ "\000\000\000\001\000\001\000\001\000\000\000\000\000\000\000\000", "0:1:1:1::" },
{ "\000\001\000\001\000\001\000\001\000\000\000\000\000\000\000\000", "1:1:1:1::" },
{ "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000", "::1:0:0:0" },
{ "\000\001\000\000\000\000\000\000\000\001\000\000\000\000\000\000", "1::1:0:0:0" },
{ "\000\000\000\001\000\000\000\000\000\001\000\000\000\000\000\000", "0:1:0:0:1::" },
{ "\000\001\000\001\000\000\000\000\000\001\000\000\000\000\000\000", "1:1:0:0:1::" },
{ "\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000\000", "0:0:1:0:1::" },
{ "\000\001\000\000\000\001\000\000\000\001\000\000\000\000\000\000", "1:0:1:0:1::" },
{ "\000\000\000\001\000\001\000\000\000\001\000\000\000\000\000\000", "0:1:1:0:1::" },
{ "\000\001\000\001\000\001\000\000\000\001\000\000\000\000\000\000", "1:1:1:0:1::" },
{ "\000\000\000\000\000\000\000\001\000\001\000\000\000\000\000\000", "::1:1:0:0:0" },
{ "\000\001\000\000\000\000\000\001\000\001\000\000\000\000\000\000", "1:0:0:1:1::" },
{ "\000\000\000\001\000\000\000\001\000\001\000\000\000\000\000\000", "0:1:0:1:1::" },
{ "\000\001\000\001\000\000\000\001\000\001\000\000\000\000\000\000", "1:1:0:1:1::" },
{ "\000\000\000\000\000\001\000\001\000\001\000\000\000\000\000\000", "0:0:1:1:1::" },
{ "\000\001\000\000\000\001\000\001\000\001\000\000\000\000\000\000", "1:0:1:1:1::" },
{ "\000\000\000\001\000\001\000\001\000\001\000\000\000\000\000\000", "0:1:1:1:1::" },
{ "\000\001\000\001\000\001\000\001\000\001\000\000\000\000\000\000", "1:1:1:1:1::" },
{ "\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000", "::1:0:0" },
{ "\000\001\000\000\000\000\000\000\000\000\000\001\000\000\000\000", "1::1:0:0" },
{ "\000\000\000\001\000\000\000\000\000\000\000\001\000\000\000\000", "0:1::1:0:0" },
{ "\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\000", "1:1::1:0:0" },
{ "\000\000\000\000\000\001\000\000\000\000\000\001\000\000\000\000", "::1:0:0:1:0:0" },
{ "\000\001\000\000\000\001\000\000\000\000\000\001\000\000\000\000", "1:0:1::1:0:0" },
{ "\000\000\000\001\000\001\000\000\000\000\000\001\000\000\000\000", "0:1:1::1:0:0" },
{ "\000\001\000\001\000\001\000\000\000\000\000\001\000\000\000\000", "1:1:1::1:0:0" },
{ "\000\000\000\000\000\000\000\001\000\000\000\001\000\000\000\000", "::1:0:1:0:0" },
{ "\000\001\000\000\000\000\000\001\000\000\000\001\000\000\000\000", "1::1:0:1:0:0" },
{ "\000\000\000\001\000\000\000\001\000\000\000\001\000\000\000\000", "0:1:0:1:0:1::" },
{ "\000\001\000\001\000\000\000\001\000\000\000\001\000\000\000\000", "1:1:0:1:0:1::" },
{ "\000\000\000\000\000\001\000\001\000\000\000\001\000\000\000\000", "::1:1:0:1:0:0" },
{ "\000\001\000\000\000\001\000\001\000\000\000\001\000\000\000\000", "1:0:1:1:0:1::" },
{ "\000\000\000\001\000\001\000\001\000\000\000\001\000\000\000\000", "0:1:1:1:0:1::" },
{ "\000\001\000\001\000\001\000\001\000\000\000\001\000\000\000\000", "1:1:1:1:0:1::" },
{ "\000\000\000\000\000\000\000\000\000\001\000\001\000\000\000\000", "::1:1:0:0" },
{ "\000\001\000\000\000\000\000\000\000\001\000\001\000\000\000\000", "1::1:1:0:0" },
{ "\000\000\000\001\000\000\000\000\000\001\000\001\000\000\000\000", "0:1::1:1:0:0" },
{ "\000\001\000\001\000\000\000\000\000\001\000\001\000\000\000\000", "1:1::1:1:0:0" },
{ "\000\000\000\000\000\001\000\000\000\001\000\001\000\000\000\000", "::1:0:1:1:0:0" },
{ "\000\001\000\000\000\001\000\000\000\001\000\001\000\000\000\000", "1:0:1:0:1:1::" },
{ "\000\000\000\001\000\001\000\000\000\001\000\001\000\000\000\000", "0:1:1:0:1:1::" },
{ "\000\001\000\001\000\001\000\000\000\001\000\001\000\000\000\000", "1:1:1:0:1:1::" },
{ "\000\000\000\000\000\000\000\001\000\001\000\001\000\000\000\000", "::1:1:1:0:0" },
{ "\000\001\000\000\000\000\000\001\000\001\000\001\000\000\000\000", "1::1:1:1:0:0" },
{ "\000\000\000\001\000\000\000\001\000\001\000\001\000\000\000\000", "0:1:0:1:1:1::" },
{ "\000\001\000\001\000\000\000\001\000\001\000\001\000\000\000\000", "1:1:0:1:1:1::" },
{ "\000\000\000\000\000\001\000\001\000\001\000\001\000\000\000\000", "::1:1:1:1:0:0" },
{ "\000\001\000\000\000\001\000\001\000\001\000\001\000\000\000\000", "1:0:1:1:1:1::" },
{ "\000\000\000\001\000\001\000\001\000\001\000\001\000\000\000\000", "0:1:1:1:1:1::" },
{ "\000\001\000\001\000\001\000\001\000\001\000\001\000\000\000\000", "1:1:1:1:1:1::" },
{ "\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000", "::1:0" }, /* inet_ntop incompatible: ::0.1.0.0 */
{ "\000\001\000\000\000\000\000\000\000\000\000\000\000\001\000\000", "1::1:0" },
{ "\000\000\000\001\000\000\000\000\000\000\000\000\000\001\000\000", "0:1::1:0" },
{ "\000\001\000\001\000\000\000\000\000\000\000\000\000\001\000\000", "1:1::1:0" },
{ "\000\000\000\000\000\001\000\000\000\000\000\000\000\001\000\000", "0:0:1::1:0" },
{ "\000\001\000\000\000\001\000\000\000\000\000\000\000\001\000\000", "1:0:1::1:0" },
{ "\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\000", "0:1:1::1:0" },
{ "\000\001\000\001\000\001\000\000\000\000\000\000\000\001\000\000", "1:1:1::1:0" },
{ "\000\000\000\000\000\000\000\001\000\000\000\000\000\001\000\000", "::1:0:0:1:0" },
{ "\000\001\000\000\000\000\000\001\000\000\000\000\000\001\000\000", "1::1:0:0:1:0" },
{ "\000\000\000\001\000\000\000\001\000\000\000\000\000\001\000\000", "0:1:0:1::1:0" },
{ "\000\001\000\001\000\000\000\001\000\000\000\000\000\001\000\000", "1:1:0:1::1:0" },
{ "\000\000\000\000\000\001\000\001\000\000\000\000\000\001\000\000", "::1:1:0:0:1:0" },
{ "\000\001\000\000\000\001\000\001\000\000\000\000\000\001\000\000", "1:0:1:1::1:0" },
{ "\000\000\000\001\000\001\000\001\000\000\000\000\000\001\000\000", "0:1:1:1::1:0" },
{ "\000\001\000\001\000\001\000\001\000\000\000\000\000\001\000\000", "1:1:1:1::1:0" },
{ "\000\000\000\000\000\000\000\000\000\001\000\000\000\001\000\000", "::1:0:1:0" },
{ "\000\001\000\000\000\000\000\000\000\001\000\000\000\001\000\000", "1::1:0:1:0" },
{ "\000\000\000\001\000\000\000\000\000\001\000\000\000\001\000\000", "0:1::1:0:1:0" },
{ "\000\001\000\001\000\000\000\000\000\001\000\000\000\001\000\000", "1:1::1:0:1:0" },
{ "\000\000\000\000\000\001\000\000\000\001\000\000\000\001\000\000", "::1:0:1:0:1:0" },
{ "\000\001\000\000\000\001\000\000\000\001\000\000\000\001\000\000", "1:0:1:0:1:0:1:0" },
{ "\000\000\000\001\000\001\000\000\000\001\000\000\000\001\000\000", "0:1:1:0:1:0:1:0" },
{ "\000\001\000\001\000\001\000\000\000\001\000\000\000\001\000\000", "1:1:1:0:1:0:1:0" },
{ "\000\000\000\000\000\000\000\001\000\001\000\000\000\001\000\000", "::1:1:0:1:0" },
{ "\000\001\000\000\000\000\000\001\000\001\000\000\000\001\000\000", "1::1:1:0:1:0" },
{ "\000\000\000\001\000\000\000\001\000\001\000\000\000\001\000\000", "0:1:0:1:1:0:1:0" },
{ "\000\001\000\001\000\000\000\001\000\001\000\000\000\001\000\000", "1:1:0:1:1:0:1:0" },
{ "\000\000\000\000\000\001\000\001\000\001\000\000\000\001\000\000", "::1:1:1:0:1:0" },
{ "\000\001\000\000\000\001\000\001\000\001\000\000\000\001\000\000", "1:0:1:1:1:0:1:0" },
{ "\000\000\000\001\000\001\000\001\000\001\000\000\000\001\000\000", "0:1:1:1:1:0:1:0" },
{ "\000\001\000\001\000\001\000\001\000\001\000\000\000\001\000\000", "1:1:1:1:1:0:1:0" },
{ "\000\000\000\000\000\000\000\000\000\000\000\001\000\001\000\000", "::1:1:0" },
{ "\000\001\000\000\000\000\000\000\000\000\000\001\000\001\000\000", "1::1:1:0" },
{ "\000\000\000\001\000\000\000\000\000\000\000\001\000\001\000\000", "0:1::1:1:0" },
{ "\000\001\000\001\000\000\000\000\000\000\000\001\000\001\000\000", "1:1::1:1:0" },
{ "\000\000\000\000\000\001\000\000\000\000\000\001\000\001\000\000", "::1:0:0:1:1:0" },
{ "\000\001\000\000\000\001\000\000\000\000\000\001\000\001\000\000", "1:0:1::1:1:0" },
{ "\000\000\000\001\000\001\000\000\000\000\000\001\000\001\000\000", "0:1:1::1:1:0" },
{ "\000\001\000\001\000\001\000\000\000\000\000\001\000\001\000\000", "1:1:1::1:1:0" },
{ "\000\000\000\000\000\000\000\001\000\000\000\001\000\001\000\000", "::1:0:1:1:0" },
{ "\000\001\000\000\000\000\000\001\000\000\000\001\000\001\000\000", "1::1:0:1:1:0" },
{ "\000\000\000\001\000\000\000\001\000\000\000\001\000\001\000\000", "0:1:0:1:0:1:1:0" },
{ "\000\001\000\001\000\000\000\001\000\000\000\001\000\001\000\000", "1:1:0:1:0:1:1:0" },
{ "\000\000\000\000\000\001\000\001\000\000\000\001\000\001\000\000", "::1:1:0:1:1:0" },
{ "\000\001\000\000\000\001\000\001\000\000\000\001\000\001\000\000", "1:0:1:1:0:1:1:0" },
{ "\000\000\000\001\000\001\000\001\000\000\000\001\000\001\000\000", "0:1:1:1:0:1:1:0" },
{ "\000\001\000\001\000\001\000\001\000\000\000\001\000\001\000\000", "1:1:1:1:0:1:1:0" },
{ "\000\000\000\000\000\000\000\000\000\001\000\001\000\001\000\000", "::1:1:1:0" },
{ "\000\001\000\000\000\000\000\000\000\001\000\001\000\001\000\000", "1::1:1:1:0" },
{ "\000\000\000\001\000\000\000\000\000\001\000\001\000\001\000\000", "0:1::1:1:1:0" },
{ "\000\001\000\001\000\000\000\000\000\001\000\001\000\001\000\000", "1:1::1:1:1:0" },
{ "\000\000\000\000\000\001\000\000\000\001\000\001\000\001\000\000", "::1:0:1:1:1:0" },
{ "\000\001\000\000\000\001\000\000\000\001\000\001\000\001\000\000", "1:0:1:0:1:1:1:0" },
{ "\000\000\000\001\000\001\000\000\000\001\000\001\000\001\000\000", "0:1:1:0:1:1:1:0" },
{ "\000\001\000\001\000\001\000\000\000\001\000\001\000\001\000\000", "1:1:1:0:1:1:1:0" },
{ "\000\000\000\000\000\000\000\001\000\001\000\001\000\001\000\000", "::1:1:1:1:0" },
{ "\000\001\000\000\000\000\000\001\000\001\000\001\000\001\000\000", "1::1:1:1:1:0" },
{ "\000\000\000\001\000\000\000\001\000\001\000\001\000\001\000\000", "0:1:0:1:1:1:1:0" },
{ "\000\001\000\001\000\000\000\001\000\001\000\001\000\001\000\000", "1:1:0:1:1:1:1:0" },
{ "\000\000\000\000\000\001\000\001\000\001\000\001\000\001\000\000", "::1:1:1:1:1:0" },
{ "\000\001\000\000\000\001\000\001\000\001\000\001\000\001\000\000", "1:0:1:1:1:1:1:0" },
{ "\000\000\000\001\000\001\000\001\000\001\000\001\000\001\000\000", "0:1:1:1:1:1:1:0" },
{ "\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\000", "1:1:1:1:1:1:1:0" },
{ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001", "::1" },
{ "\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\001", "1::1" },
{ "\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\001", "0:1::1" },
{ "\000\001\000\001\000\000\000\000\000\000\000\000\000\000\000\001", "1:1::1" },
{ "\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\001", "0:0:1::1" },
{ "\000\001\000\000\000\001\000\000\000\000\000\000\000\000\000\001", "1:0:1::1" },
{ "\000\000\000\001\000\001\000\000\000\000\000\000\000\000\000\001", "0:1:1::1" },
{ "\000\001\000\001\000\001\000\000\000\000\000\000\000\000\000\001", "1:1:1::1" },
{ "\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\001", "::1:0:0:0:1" },
{ "\000\001\000\000\000\000\000\001\000\000\000\000\000\000\000\001", "1:0:0:1::1" },
{ "\000\000\000\001\000\000\000\001\000\000\000\000\000\000\000\001", "0:1:0:1::1" },
{ "\000\001\000\001\000\000\000\001\000\000\000\000\000\000\000\001", "1:1:0:1::1" },
{ "\000\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001", "0:0:1:1::1" },
{ "\000\001\000\000\000\001\000\001\000\000\000\000\000\000\000\001", "1:0:1:1::1" },
{ "\000\000\000\001\000\001\000\001\000\000\000\000\000\000\000\001", "0:1:1:1::1" },
{ "\000\001\000\001\000\001\000\001\000\000\000\000\000\000\000\001", "1:1:1:1::1" },
{ "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\001", "::1:0:0:1" },
{ "\000\001\000\000\000\000\000\000\000\001\000\000\000\000\000\001", "1::1:0:0:1" },
{ "\000\000\000\001\000\000\000\000\000\001\000\000\000\000\000\001", "0:1::1:0:0:1" },
{ "\000\001\000\001\000\000\000\000\000\001\000\000\000\000\000\001", "1:1::1:0:0:1" },
{ "\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000\001", "::1:0:1:0:0:1" },
{ "\000\001\000\000\000\001\000\000\000\001\000\000\000\000\000\001", "1:0:1:0:1::1" },
{ "\000\000\000\001\000\001\000\000\000\001\000\000\000\000\000\001", "0:1:1:0:1::1" },
{ "\000\001\000\001\000\001\000\000\000\001\000\000\000\000\000\001", "1:1:1:0:1::1" },
{ "\000\000\000\000\000\000\000\001\000\001\000\000\000\000\000\001", "::1:1:0:0:1" },
{ "\000\001\000\000\000\000\000\001\000\001\000\000\000\000\000\001", "1::1:1:0:0:1" },
{ "\000\000\000\001\000\000\000\001\000\001\000\000\000\000\000\001", "0:1:0:1:1::1" },
{ "\000\001\000\001\000\000\000\001\000\001\000\000\000\000\000\001", "1:1:0:1:1::1" },
{ "\000\000\000\000\000\001\000\001\000\001\000\000\000\000\000\001", "::1:1:1:0:0:1" },
{ "\000\001\000\000\000\001\000\001\000\001\000\000\000\000\000\001", "1:0:1:1:1::1" },
{ "\000\000\000\001\000\001\000\001\000\001\000\000\000\000\000\001", "0:1:1:1:1::1" },
{ "\000\001\000\001\000\001\000\001\000\001\000\000\000\000\000\001", "1:1:1:1:1::1" },
{ "\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\001", "::1:0:1" },
{ "\000\001\000\000\000\000\000\000\000\000\000\001\000\000\000\001", "1::1:0:1" },
{ "\000\000\000\001\000\000\000\000\000\000\000\001\000\000\000\001", "0:1::1:0:1" },
{ "\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\001", "1:1::1:0:1" },
{ "\000\000\000\000\000\001\000\000\000\000\000\001\000\000\000\001", "::1:0:0:1:0:1" },
{ "\000\001\000\000\000\001\000\000\000\000\000\001\000\000\000\001", "1:0:1::1:0:1" },
{ "\000\000\000\001\000\001\000\000\000\000\000\001\000\000\000\001", "0:1:1::1:0:1" },
{ "\000\001\000\001\000\001\000\000\000\000\000\001\000\000\000\001", "1:1:1::1:0:1" },
{ "\000\000\000\000\000\000\000\001\000\000\000\001\000\000\000\001", "::1:0:1:0:1" },
{ "\000\001\000\000\000\000\000\001\000\000\000\001\000\000\000\001", "1::1:0:1:0:1" },
{ "\000\000\000\001\000\000\000\001\000\000\000\001\000\000\000\001", "0:1:0:1:0:1:0:1" },
{ "\000\001\000\001\000\000\000\001\000\000\000\001\000\000\000\001", "1:1:0:1:0:1:0:1" },
{ "\000\000\000\000\000\001\000\001\000\000\000\001\000\000\000\001", "::1:1:0:1:0:1" },
{ "\000\001\000\000\000\001\000\001\000\000\000\001\000\000\000\001", "1:0:1:1:0:1:0:1" },
{ "\000\000\000\001\000\001\000\001\000\000\000\001\000\000\000\001", "0:1:1:1:0:1:0:1" },
{ "\000\001\000\001\000\001\000\001\000\000\000\001\000\000\000\001", "1:1:1:1:0:1:0:1" },
{ "\000\000\000\000\000\000\000\000\000\001\000\001\000\000\000\001", "::1:1:0:1" },
{ "\000\001\000\000\000\000\000\000\000\001\000\001\000\000\000\001", "1::1:1:0:1" },
{ "\000\000\000\001\000\000\000\000\000\001\000\001\000\000\000\001", "0:1::1:1:0:1" },
{ "\000\001\000\001\000\000\000\000\000\001\000\001\000\000\000\001", "1:1::1:1:0:1" },
{ "\000\000\000\000\000\001\000\000\000\001\000\001\000\000\000\001", "::1:0:1:1:0:1" },
{ "\000\001\000\000\000\001\000\000\000\001\000\001\000\000\000\001", "1:0:1:0:1:1:0:1" },
{ "\000\000\000\001\000\001\000\000\000\001\000\001\000\000\000\001", "0:1:1:0:1:1:0:1" },
{ "\000\001\000\001\000\001\000\000\000\001\000\001\000\000\000\001", "1:1:1:0:1:1:0:1" },
{ "\000\000\000\000\000\000\000\001\000\001\000\001\000\000\000\001", "::1:1:1:0:1" },
{ "\000\001\000\000\000\000\000\001\000\001\000\001\000\000\000\001", "1::1:1:1:0:1" },
{ "\000\000\000\001\000\000\000\001\000\001\000\001\000\000\000\001", "0:1:0:1:1:1:0:1" },
{ "\000\001\000\001\000\000\000\001\000\001\000\001\000\000\000\001", "1:1:0:1:1:1:0:1" },
{ "\000\000\000\000\000\001\000\001\000\001\000\001\000\000\000\001", "::1:1:1:1:0:1" },
{ "\000\001\000\000\000\001\000\001\000\001\000\001\000\000\000\001", "1:0:1:1:1:1:0:1" },
{ "\000\000\000\001\000\001\000\001\000\001\000\001\000\000\000\001", "0:1:1:1:1:1:0:1" },
{ "\000\001\000\001\000\001\000\001\000\001\000\001\000\000\000\001", "1:1:1:1:1:1:0:1" },
{ "\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001", "::1:1" }, /* inet_ntop incompatible: ::0.1.0.1 */
{ "\000\001\000\000\000\000\000\000\000\000\000\000\000\001\000\001", "1::1:1" },
{ "\000\000\000\001\000\000\000\000\000\000\000\000\000\001\000\001", "0:1::1:1" },
{ "\000\001\000\001\000\000\000\000\000\000\000\000\000\001\000\001", "1:1::1:1" },
{ "\000\000\000\000\000\001\000\000\000\000\000\000\000\001\000\001", "0:0:1::1:1" },
{ "\000\001\000\000\000\001\000\000\000\000\000\000\000\001\000\001", "1:0:1::1:1" },
{ "\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\001", "0:1:1::1:1" },
{ "\000\001\000\001\000\001\000\000\000\000\000\000\000\001\000\001", "1:1:1::1:1" },
{ "\000\000\000\000\000\000\000\001\000\000\000\000\000\001\000\001", "::1:0:0:1:1" },
{ "\000\001\000\000\000\000\000\001\000\000\000\000\000\001\000\001", "1::1:0:0:1:1" },
{ "\000\000\000\001\000\000\000\001\000\000\000\000\000\001\000\001", "0:1:0:1::1:1" },
{ "\000\001\000\001\000\000\000\001\000\000\000\000\000\001\000\001", "1:1:0:1::1:1" },
{ "\000\000\000\000\000\001\000\001\000\000\000\000\000\001\000\001", "::1:1:0:0:1:1" },
{ "\000\001\000\000\000\001\000\001\000\000\000\000\000\001\000\001", "1:0:1:1::1:1" },
{ "\000\000\000\001\000\001\000\001\000\000\000\000\000\001\000\001", "0:1:1:1::1:1" },
{ "\000\001\000\001\000\001\000\001\000\000\000\000\000\001\000\001", "1:1:1:1::1:1" },
{ "\000\000\000\000\000\000\000\000\000\001\000\000\000\001\000\001", "::1:0:1:1" },
{ "\000\001\000\000\000\000\000\000\000\001\000\000\000\001\000\001", "1::1:0:1:1" },
{ "\000\000\000\001\000\000\000\000\000\001\000\000\000\001\000\001", "0:1::1:0:1:1" },
{ "\000\001\000\001\000\000\000\000\000\001\000\000\000\001\000\001", "1:1::1:0:1:1" },
{ "\000\000\000\000\000\001\000\000\000\001\000\000\000\001\000\001", "::1:0:1:0:1:1" },
{ "\000\001\000\000\000\001\000\000\000\001\000\000\000\001\000\001", "1:0:1:0:1:0:1:1" },
{ "\000\000\000\001\000\001\000\000\000\001\000\000\000\001\000\001", "0:1:1:0:1:0:1:1" },
{ "\000\001\000\001\000\001\000\000\000\001\000\000\000\001\000\001", "1:1:1:0:1:0:1:1" },
{ "\000\000\000\000\000\000\000\001\000\001\000\000\000\001\000\001", "::1:1:0:1:1" },
{ "\000\001\000\000\000\000\000\001\000\001\000\000\000\001\000\001", "1::1:1:0:1:1" },
{ "\000\000\000\001\000\000\000\001\000\001\000\000\000\001\000\001", "0:1:0:1:1:0:1:1" },
{ "\000\001\000\001\000\000\000\001\000\001\000\000\000\001\000\001", "1:1:0:1:1:0:1:1" },
{ "\000\000\000\000\000\001\000\001\000\001\000\000\000\001\000\001", "::1:1:1:0:1:1" },
{ "\000\001\000\000\000\001\000\001\000\001\000\000\000\001\000\001", "1:0:1:1:1:0:1:1" },
{ "\000\000\000\001\000\001\000\001\000\001\000\000\000\001\000\001", "0:1:1:1:1:0:1:1" },
{ "\000\001\000\001\000\001\000\001\000\001\000\000\000\001\000\001", "1:1:1:1:1:0:1:1" },
{ "\000\000\000\000\000\000\000\000\000\000\000\001\000\001\000\001", "::1:1:1" },
{ "\000\001\000\000\000\000\000\000\000\000\000\001\000\001\000\001", "1::1:1:1" },
{ "\000\000\000\001\000\000\000\000\000\000\000\001\000\001\000\001", "0:1::1:1:1" },
{ "\000\001\000\001\000\000\000\000\000\000\000\001\000\001\000\001", "1:1::1:1:1" },
{ "\000\000\000\000\000\001\000\000\000\000\000\001\000\001\000\001", "::1:0:0:1:1:1" },
{ "\000\001\000\000\000\001\000\000\000\000\000\001\000\001\000\001", "1:0:1::1:1:1" },
{ "\000\000\000\001\000\001\000\000\000\000\000\001\000\001\000\001", "0:1:1::1:1:1" },
{ "\000\001\000\001\000\001\000\000\000\000\000\001\000\001\000\001", "1:1:1::1:1:1" },
{ "\000\000\000\000\000\000\000\001\000\000\000\001\000\001\000\001", "::1:0:1:1:1" },
{ "\000\001\000\000\000\000\000\001\000\000\000\001\000\001\000\001", "1::1:0:1:1:1" },
{ "\000\000\000\001\000\000\000\001\000\000\000\001\000\001\000\001", "0:1:0:1:0:1:1:1" },
{ "\000\001\000\001\000\000\000\001\000\000\000\001\000\001\000\001", "1:1:0:1:0:1:1:1" },
{ "\000\000\000\000\000\001\000\001\000\000\000\001\000\001\000\001", "::1:1:0:1:1:1" },
{ "\000\001\000\000\000\001\000\001\000\000\000\001\000\001\000\001", "1:0:1:1:0:1:1:1" },
{ "\000\000\000\001\000\001\000\001\000\000\000\001\000\001\000\001", "0:1:1:1:0:1:1:1" },
{ "\000\001\000\001\000\001\000\001\000\000\000\001\000\001\000\001", "1:1:1:1:0:1:1:1" },
{ "\000\000\000\000\000\000\000\000\000\001\000\001\000\001\000\001", "::1:1:1:1" },
{ "\000\001\000\000\000\000\000\000\000\001\000\001\000\001\000\001", "1::1:1:1:1" },
{ "\000\000\000\001\000\000\000\000\000\001\000\001\000\001\000\001", "0:1::1:1:1:1" },
{ "\000\001\000\001\000\000\000\000\000\001\000\001\000\001\000\001", "1:1::1:1:1:1" },
{ "\000\000\000\000\000\001\000\000\000\001\000\001\000\001\000\001", "::1:0:1:1:1:1" },
{ "\000\001\000\000\000\001\000\000\000\001\000\001\000\001\000\001", "1:0:1:0:1:1:1:1" },
{ "\000\000\000\001\000\001\000\000\000\001\000\001\000\001\000\001", "0:1:1:0:1:1:1:1" },
{ "\000\001\000\001\000\001\000\000\000\001\000\001\000\001\000\001", "1:1:1:0:1:1:1:1" },
{ "\000\000\000\000\000\000\000\001\000\001\000\001\000\001\000\001", "::1:1:1:1:1" },
{ "\000\001\000\000\000\000\000\001\000\001\000\001\000\001\000\001", "1::1:1:1:1:1" },
{ "\000\000\000\001\000\000\000\001\000\001\000\001\000\001\000\001", "0:1:0:1:1:1:1:1" },
{ "\000\001\000\001\000\000\000\001\000\001\000\001\000\001\000\001", "1:1:0:1:1:1:1:1" },
{ "\000\000\000\000\000\001\000\001\000\001\000\001\000\001\000\001", "::1:1:1:1:1:1" },
{ "\000\001\000\000\000\001\000\001\000\001\000\001\000\001\000\001", "1:0:1:1:1:1:1:1" },
{ "\000\000\000\001\000\001\000\001\000\001\000\001\000\001\000\001", "0:1:1:1:1:1:1:1" },
{ "\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001", "1:1:1:1:1:1:1:1" },
{ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", "::" },
{ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000", "ffff::" },
{ "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\000\000", "0:ffff::" },
{ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000", "ffff:ffff::" },
{ "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\000\000", "0:0:ffff::" },
{ "\377\377\000\000\377\377\000\000\000\000\000\000\000\000\000\000", "ffff:0:ffff::" },
{ "\000\000\377\377\377\377\000\000\000\000\000\000\000\000\000\000", "0:ffff:ffff::" },
{ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000", "ffff:ffff:ffff::" },
{ "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\000\000", "0:0:0:ffff::" },
{ "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\000\000", "ffff:0:0:ffff::" },
{ "\000\000\377\377\000\000\377\377\000\000\000\000\000\000\000\000", "0:ffff:0:ffff::" },
{ "\377\377\377\377\000\000\377\377\000\000\000\000\000\000\000\000", "ffff:ffff:0:ffff::" },
{ "\000\000\000\000\377\377\377\377\000\000\000\000\000\000\000\000", "0:0:ffff:ffff::" },
{ "\377\377\000\000\377\377\377\377\000\000\000\000\000\000\000\000", "ffff:0:ffff:ffff::" },
{ "\000\000\377\377\377\377\377\377\000\000\000\000\000\000\000\000", "0:ffff:ffff:ffff::" },
{ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000", "ffff:ffff:ffff:ffff::" },
{ "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\000\000", "::ffff:0:0:0" },
{ "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\000\000", "ffff::ffff:0:0:0" },
{ "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\000\000", "0:ffff:0:0:ffff::" },
{ "\377\377\377\377\000\000\000\000\377\377\000\000\000\000\000\000", "ffff:ffff:0:0:ffff::" },
{ "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\000\000", "0:0:ffff:0:ffff::" },
{ "\377\377\000\000\377\377\000\000\377\377\000\000\000\000\000\000", "ffff:0:ffff:0:ffff::" },
{ "\000\000\377\377\377\377\000\000\377\377\000\000\000\000\000\000", "0:ffff:ffff:0:ffff::" },
{ "\377\377\377\377\377\377\000\000\377\377\000\000\000\000\000\000", "ffff:ffff:ffff:0:ffff::" },
{ "\000\000\000\000\000\000\377\377\377\377\000\000\000\000\000\000", "::ffff:ffff:0:0:0" },
{ "\377\377\000\000\000\000\377\377\377\377\000\000\000\000\000\000", "ffff:0:0:ffff:ffff::" },
{ "\000\000\377\377\000\000\377\377\377\377\000\000\000\000\000\000", "0:ffff:0:ffff:ffff::" },
{ "\377\377\377\377\000\000\377\377\377\377\000\000\000\000\000\000", "ffff:ffff:0:ffff:ffff::" },
{ "\000\000\000\000\377\377\377\377\377\377\000\000\000\000\000\000", "0:0:ffff:ffff:ffff::" },
{ "\377\377\000\000\377\377\377\377\377\377\000\000\000\000\000\000", "ffff:0:ffff:ffff:ffff::" },
{ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000", "0:ffff:ffff:ffff:ffff::" },
{ "\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000", "ffff:ffff:ffff:ffff:ffff::" },
{ "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\000\000", "0.0.0.0" }, /* inet_ntop incompatible: ::ffff:0.0.0.0 */
{ "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\000\000", "ffff::ffff:0:0" },
{ "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\000\000", "0:ffff::ffff:0:0" },
{ "\377\377\377\377\000\000\000\000\000\000\377\377\000\000\000\000", "ffff:ffff::ffff:0:0" },
{ "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\000\000", "::ffff:0:0:ffff:0:0" },
{ "\377\377\000\000\377\377\000\000\000\000\377\377\000\000\000\000", "ffff:0:ffff::ffff:0:0" },
{ "\000\000\377\377\377\377\000\000\000\000\377\377\000\000\000\000", "0:ffff:ffff::ffff:0:0" },
{ "\377\377\377\377\377\377\000\000\000\000\377\377\000\000\000\000", "ffff:ffff:ffff::ffff:0:0" },
{ "\000\000\000\000\000\000\377\377\000\000\377\377\000\000\000\000", "::ffff:0:ffff:0:0" },
{ "\377\377\000\000\000\000\377\377\000\000\377\377\000\000\000\000", "ffff::ffff:0:ffff:0:0" },
{ "\000\000\377\377\000\000\377\377\000\000\377\377\000\000\000\000", "0:ffff:0:ffff:0:ffff::" },
{ "\377\377\377\377\000\000\377\377\000\000\377\377\000\000\000\000", "ffff:ffff:0:ffff:0:ffff::" },
{ "\000\000\000\000\377\377\377\377\000\000\377\377\000\000\000\000", "::ffff:ffff:0:ffff:0:0" },
{ "\377\377\000\000\377\377\377\377\000\000\377\377\000\000\000\000", "ffff:0:ffff:ffff:0:ffff::" },
{ "\000\000\377\377\377\377\377\377\000\000\377\377\000\000\000\000", "0:ffff:ffff:ffff:0:ffff::" },
{ "\377\377\377\377\377\377\377\377\000\000\377\377\000\000\000\000", "ffff:ffff:ffff:ffff:0:ffff::" },
{ "\000\000\000\000\000\000\000\000\377\377\377\377\000\000\000\000", "::ffff:ffff:0:0" },
{ "\377\377\000\000\000\000\000\000\377\377\377\377\000\000\000\000", "ffff::ffff:ffff:0:0" },
{ "\000\000\377\377\000\000\000\000\377\377\377\377\000\000\000\000", "0:ffff::ffff:ffff:0:0" },
{ "\377\377\377\377\000\000\000\000\377\377\377\377\000\000\000\000", "ffff:ffff::ffff:ffff:0:0" },
{ "\000\000\000\000\377\377\000\000\377\377\377\377\000\000\000\000", "::ffff:0:ffff:ffff:0:0" },
{ "\377\377\000\000\377\377\000\000\377\377\377\377\000\000\000\000", "ffff:0:ffff:0:ffff:ffff::" },
{ "\000\000\377\377\377\377\000\000\377\377\377\377\000\000\000\000", "0:ffff:ffff:0:ffff:ffff::" },
{ "\377\377\377\377\377\377\000\000\377\377\377\377\000\000\000\000", "ffff:ffff:ffff:0:ffff:ffff::" },
{ "\000\000\000\000\000\000\377\377\377\377\377\377\000\000\000\000", "::ffff:ffff:ffff:0:0" },
{ "\377\377\000\000\000\000\377\377\377\377\377\377\000\000\000\000", "ffff::ffff:ffff:ffff:0:0" },
{ "\000\000\377\377\000\000\377\377\377\377\377\377\000\000\000\000", "0:ffff:0:ffff:ffff:ffff::" },
{ "\377\377\377\377\000\000\377\377\377\377\377\377\000\000\000\000", "ffff:ffff:0:ffff:ffff:ffff::" },
{ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000", "::ffff:ffff:ffff:ffff:0:0" },
{ "\377\377\000\000\377\377\377\377\377\377\377\377\000\000\000\000", "ffff:0:ffff:ffff:ffff:ffff::" },
{ "\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000", "0:ffff:ffff:ffff:ffff:ffff::" },
{ "\377\377\377\377\377\377\377\377\377\377\377\377\000\000\000\000", "ffff:ffff:ffff:ffff:ffff:ffff::" },
{ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\000\000", "::ffff:0" }, /* inet_ntop incompatible: ::255.255.0.0 */
{ "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\000\000", "ffff::ffff:0" },
{ "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\000\000", "0:ffff::ffff:0" },
{ "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\000\000", "ffff:ffff::ffff:0" },
{ "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\000\000", "0:0:ffff::ffff:0" },
{ "\377\377\000\000\377\377\000\000\000\000\000\000\377\377\000\000", "ffff:0:ffff::ffff:0" },
{ "\000\000\377\377\377\377\000\000\000\000\000\000\377\377\000\000", "0:ffff:ffff::ffff:0" },
{ "\377\377\377\377\377\377\000\000\000\000\000\000\377\377\000\000", "ffff:ffff:ffff::ffff:0" },
{ "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\000\000", "::ffff:0:0:ffff:0" },
{ "\377\377\000\000\000\000\377\377\000\000\000\000\377\377\000\000", "ffff::ffff:0:0:ffff:0" },
{ "\000\000\377\377\000\000\377\377\000\000\000\000\377\377\000\000", "0:ffff:0:ffff::ffff:0" },
{ "\377\377\377\377\000\000\377\377\000\000\000\000\377\377\000\000", "ffff:ffff:0:ffff::ffff:0" },
{ "\000\000\000\000\377\377\377\377\000\000\000\000\377\377\000\000", "::ffff:ffff:0:0:ffff:0" },
{ "\377\377\000\000\377\377\377\377\000\000\000\000\377\377\000\000", "ffff:0:ffff:ffff::ffff:0" },
{ "\000\000\377\377\377\377\377\377\000\000\000\000\377\377\000\000", "0:ffff:ffff:ffff::ffff:0" },
{ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\000\000", "ffff:ffff:ffff:ffff::ffff:0" },
{ "\000\000\000\000\000\000\000\000\377\377\000\000\377\377\000\000", "::ffff:0:ffff:0" },
{ "\377\377\000\000\000\000\000\000\377\377\000\000\377\377\000\000", "ffff::ffff:0:ffff:0" },
{ "\000\000\377\377\000\000\000\000\377\377\000\000\377\377\000\000", "0:ffff::ffff:0:ffff:0" },
{ "\377\377\377\377\000\000\000\000\377\377\000\000\377\377\000\000", "ffff:ffff::ffff:0:ffff:0" },
{ "\000\000\000\000\377\377\000\000\377\377\000\000\377\377\000\000", "::ffff:0:ffff:0:ffff:0" },
{ "\377\377\000\000\377\377\000\000\377\377\000\000\377\377\000\000", "ffff:0:ffff:0:ffff:0:ffff:0" },
{ "\000\000\377\377\377\377\000\000\377\377\000\000\377\377\000\000", "0:ffff:ffff:0:ffff:0:ffff:0" },
{ "\377\377\377\377\377\377\000\000\377\377\000\000\377\377\000\000", "ffff:ffff:ffff:0:ffff:0:ffff:0" },
{ "\000\000\000\000\000\000\377\377\377\377\000\000\377\377\000\000", "::ffff:ffff:0:ffff:0" },
{ "\377\377\000\000\000\000\377\377\377\377\000\000\377\377\000\000", "ffff::ffff:ffff:0:ffff:0" },
{ "\000\000\377\377\000\000\377\377\377\377\000\000\377\377\000\000", "0:ffff:0:ffff:ffff:0:ffff:0" },
{ "\377\377\377\377\000\000\377\377\377\377\000\000\377\377\000\000", "ffff:ffff:0:ffff:ffff:0:ffff:0" },
{ "\000\000\000\000\377\377\377\377\377\377\000\000\377\377\000\000", "::ffff:ffff:ffff:0:ffff:0" },
{ "\377\377\000\000\377\377\377\377\377\377\000\000\377\377\000\000", "ffff:0:ffff:ffff:ffff:0:ffff:0" },
{ "\000\000\377\377\377\377\377\377\377\377\000\000\377\377\000\000", "0:ffff:ffff:ffff:ffff:0:ffff:0" },
{ "\377\377\377\377\377\377\377\377\377\377\000\000\377\377\000\000", "ffff:ffff:ffff:ffff:ffff:0:ffff:0" },
{ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\000\000", "255.255.0.0" }, /* inet_ntop incompatible: ::ffff:255.255.0.0 */
{ "\377\377\000\000\000\000\000\000\000\000\377\377\377\377\000\000", "ffff::ffff:ffff:0" },
{ "\000\000\377\377\000\000\000\000\000\000\377\377\377\377\000\000", "0:ffff::ffff:ffff:0" },
{ "\377\377\377\377\000\000\000\000\000\000\377\377\377\377\000\000", "ffff:ffff::ffff:ffff:0" },
{ "\000\000\000\000\377\377\000\000\000\000\377\377\377\377\000\000", "::ffff:0:0:ffff:ffff:0" },
{ "\377\377\000\000\377\377\000\000\000\000\377\377\377\377\000\000", "ffff:0:ffff::ffff:ffff:0" },
{ "\000\000\377\377\377\377\000\000\000\000\377\377\377\377\000\000", "0:ffff:ffff::ffff:ffff:0" },
{ "\377\377\377\377\377\377\000\000\000\000\377\377\377\377\000\000", "ffff:ffff:ffff::ffff:ffff:0" },
{ "\000\000\000\000\000\000\377\377\000\000\377\377\377\377\000\000", "::ffff:0:ffff:ffff:0" },
{ "\377\377\000\000\000\000\377\377\000\000\377\377\377\377\000\000", "ffff::ffff:0:ffff:ffff:0" },
{ "\000\000\377\377\000\000\377\377\000\000\377\377\377\377\000\000", "0:ffff:0:ffff:0:ffff:ffff:0" },
{ "\377\377\377\377\000\000\377\377\000\000\377\377\377\377\000\000", "ffff:ffff:0:ffff:0:ffff:ffff:0" },
{ "\000\000\000\000\377\377\377\377\000\000\377\377\377\377\000\000", "::ffff:ffff:0:ffff:ffff:0" },
{ "\377\377\000\000\377\377\377\377\000\000\377\377\377\377\000\000", "ffff:0:ffff:ffff:0:ffff:ffff:0" },
{ "\000\000\377\377\377\377\377\377\000\000\377\377\377\377\000\000", "0:ffff:ffff:ffff:0:ffff:ffff:0" },
{ "\377\377\377\377\377\377\377\377\000\000\377\377\377\377\000\000", "ffff:ffff:ffff:ffff:0:ffff:ffff:0" },
{ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\000\000", "::ffff:ffff:ffff:0" },
{ "\377\377\000\000\000\000\000\000\377\377\377\377\377\377\000\000", "ffff::ffff:ffff:ffff:0" },
{ "\000\000\377\377\000\000\000\000\377\377\377\377\377\377\000\000", "0:ffff::ffff:ffff:ffff:0" },
{ "\377\377\377\377\000\000\000\000\377\377\377\377\377\377\000\000", "ffff:ffff::ffff:ffff:ffff:0" },
{ "\000\000\000\000\377\377\000\000\377\377\377\377\377\377\000\000", "::ffff:0:ffff:ffff:ffff:0" },
{ "\377\377\000\000\377\377\000\000\377\377\377\377\377\377\000\000", "ffff:0:ffff:0:ffff:ffff:ffff:0" },
{ "\000\000\377\377\377\377\000\000\377\377\377\377\377\377\000\000", "0:ffff:ffff:0:ffff:ffff:ffff:0" },
{ "\377\377\377\377\377\377\000\000\377\377\377\377\377\377\000\000", "ffff:ffff:ffff:0:ffff:ffff:ffff:0" },
{ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000", "::ffff:ffff:ffff:ffff:0" },
{ "\377\377\000\000\000\000\377\377\377\377\377\377\377\377\000\000", "ffff::ffff:ffff:ffff:ffff:0" },
{ "\000\000\377\377\000\000\377\377\377\377\377\377\377\377\000\000", "0:ffff:0:ffff:ffff:ffff:ffff:0" },
{ "\377\377\377\377\000\000\377\377\377\377\377\377\377\377\000\000", "ffff:ffff:0:ffff:ffff:ffff:ffff:0" },
{ "\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000", "::ffff:ffff:ffff:ffff:ffff:0" },
{ "\377\377\000\000\377\377\377\377\377\377\377\377\377\377\000\000", "ffff:0:ffff:ffff:ffff:ffff:ffff:0" },
{ "\000\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000", "0:ffff:ffff:ffff:ffff:ffff:ffff:0" },
{ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" },
{ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377", "::ffff" },
{ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377", "ffff::ffff" },
{ "\000\000\377\377\000\000\000\000\000\000\000\000\000\000\377\377", "0:ffff::ffff" },
{ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\377\377", "ffff:ffff::ffff" },
{ "\000\000\000\000\377\377\000\000\000\000\000\000\000\000\377\377", "0:0:ffff::ffff" },
{ "\377\377\000\000\377\377\000\000\000\000\000\000\000\000\377\377", "ffff:0:ffff::ffff" },
{ "\000\000\377\377\377\377\000\000\000\000\000\000\000\000\377\377", "0:ffff:ffff::ffff" },
{ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377", "ffff:ffff:ffff::ffff" },
{ "\000\000\000\000\000\000\377\377\000\000\000\000\000\000\377\377", "::ffff:0:0:0:ffff" },
{ "\377\377\000\000\000\000\377\377\000\000\000\000\000\000\377\377", "ffff:0:0:ffff::ffff" },
{ "\000\000\377\377\000\000\377\377\000\000\000\000\000\000\377\377", "0:ffff:0:ffff::ffff" },
{ "\377\377\377\377\000\000\377\377\000\000\000\000\000\000\377\377", "ffff:ffff:0:ffff::ffff" },
{ "\000\000\000\000\377\377\377\377\000\000\000\000\000\000\377\377", "0:0:ffff:ffff::ffff" },
{ "\377\377\000\000\377\377\377\377\000\000\000\000\000\000\377\377", "ffff:0:ffff:ffff::ffff" },
{ "\000\000\377\377\377\377\377\377\000\000\000\000\000\000\377\377", "0:ffff:ffff:ffff::ffff" },
{ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\377\377", "ffff:ffff:ffff:ffff::ffff" },
{ "\000\000\000\000\000\000\000\000\377\377\000\000\000\000\377\377", "::ffff:0:0:ffff" },
{ "\377\377\000\000\000\000\000\000\377\377\000\000\000\000\377\377", "ffff::ffff:0:0:ffff" },
{ "\000\000\377\377\000\000\000\000\377\377\000\000\000\000\377\377", "0:ffff::ffff:0:0:ffff" },
{ "\377\377\377\377\000\000\000\000\377\377\000\000\000\000\377\377", "ffff:ffff::ffff:0:0:ffff" },
{ "\000\000\000\000\377\377\000\000\377\377\000\000\000\000\377\377", "::ffff:0:ffff:0:0:ffff" },
{ "\377\377\000\000\377\377\000\000\377\377\000\000\000\000\377\377", "ffff:0:ffff:0:ffff::ffff" },
{ "\000\000\377\377\377\377\000\000\377\377\000\000\000\000\377\377", "0:ffff:ffff:0:ffff::ffff" },
{ "\377\377\377\377\377\377\000\000\377\377\000\000\000\000\377\377", "ffff:ffff:ffff:0:ffff::ffff" },
{ "\000\000\000\000\000\000\377\377\377\377\000\000\000\000\377\377", "::ffff:ffff:0:0:ffff" },
{ "\377\377\000\000\000\000\377\377\377\377\000\000\000\000\377\377", "ffff::ffff:ffff:0:0:ffff" },
{ "\000\000\377\377\000\000\377\377\377\377\000\000\000\000\377\377", "0:ffff:0:ffff:ffff::ffff" },
{ "\377\377\377\377\000\000\377\377\377\377\000\000\000\000\377\377", "ffff:ffff:0:ffff:ffff::ffff" },
{ "\000\000\000\000\377\377\377\377\377\377\000\000\000\000\377\377", "::ffff:ffff:ffff:0:0:ffff" },
{ "\377\377\000\000\377\377\377\377\377\377\000\000\000\000\377\377", "ffff:0:ffff:ffff:ffff::ffff" },
{ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377", "0:ffff:ffff:ffff:ffff::ffff" },
{ "\377\377\377\377\377\377\377\377\377\377\000\000\000\000\377\377", "ffff:ffff:ffff:ffff:ffff::ffff" },
{ "\000\000\000\000\000\000\000\000\000\000\377\377\000\000\377\377", "0.0.255.255" }, /* inet_ntop incompatible: ::ffff:0.0.255.255 */
{ "\377\377\000\000\000\000\000\000\000\000\377\377\000\000\377\377", "ffff::ffff:0:ffff" },
{ "\000\000\377\377\000\000\000\000\000\000\377\377\000\000\377\377", "0:ffff::ffff:0:ffff" },
{ "\377\377\377\377\000\000\000\000\000\000\377\377\000\000\377\377", "ffff:ffff::ffff:0:ffff" },
{ "\000\000\000\000\377\377\000\000\000\000\377\377\000\000\377\377", "::ffff:0:0:ffff:0:ffff" },
{ "\377\377\000\000\377\377\000\000\000\000\377\377\000\000\377\377", "ffff:0:ffff::ffff:0:ffff" },
{ "\000\000\377\377\377\377\000\000\000\000\377\377\000\000\377\377", "0:ffff:ffff::ffff:0:ffff" },
{ "\377\377\377\377\377\377\000\000\000\000\377\377\000\000\377\377", "ffff:ffff:ffff::ffff:0:ffff" },
{ "\000\000\000\000\000\000\377\377\000\000\377\377\000\000\377\377", "::ffff:0:ffff:0:ffff" },
{ "\377\377\000\000\000\000\377\377\000\000\377\377\000\000\377\377", "ffff::ffff:0:ffff:0:ffff" },
{ "\000\000\377\377\000\000\377\377\000\000\377\377\000\000\377\377", "0:ffff:0:ffff:0:ffff:0:ffff" },
{ "\377\377\377\377\000\000\377\377\000\000\377\377\000\000\377\377", "ffff:ffff:0:ffff:0:ffff:0:ffff" },
{ "\000\000\000\000\377\377\377\377\000\000\377\377\000\000\377\377", "::ffff:ffff:0:ffff:0:ffff" },
{ "\377\377\000\000\377\377\377\377\000\000\377\377\000\000\377\377", "ffff:0:ffff:ffff:0:ffff:0:ffff" },
{ "\000\000\377\377\377\377\377\377\000\000\377\377\000\000\377\377", "0:ffff:ffff:ffff:0:ffff:0:ffff" },
{ "\377\377\377\377\377\377\377\377\000\000\377\377\000\000\377\377", "ffff:ffff:ffff:ffff:0:ffff:0:ffff" },
{ "\000\000\000\000\000\000\000\000\377\377\377\377\000\000\377\377", "::ffff:ffff:0:ffff" },
{ "\377\377\000\000\000\000\000\000\377\377\377\377\000\000\377\377", "ffff::ffff:ffff:0:ffff" },
{ "\000\000\377\377\000\000\000\000\377\377\377\377\000\000\377\377", "0:ffff::ffff:ffff:0:ffff" },
{ "\377\377\377\377\000\000\000\000\377\377\377\377\000\000\377\377", "ffff:ffff::ffff:ffff:0:ffff" },
{ "\000\000\000\000\377\377\000\000\377\377\377\377\000\000\377\377", "::ffff:0:ffff:ffff:0:ffff" },
{ "\377\377\000\000\377\377\000\000\377\377\377\377\000\000\377\377", "ffff:0:ffff:0:ffff:ffff:0:ffff" },
{ "\000\000\377\377\377\377\000\000\377\377\377\377\000\000\377\377", "0:ffff:ffff:0:ffff:ffff:0:ffff" },
{ "\377\377\377\377\377\377\000\000\377\377\377\377\000\000\377\377", "ffff:ffff:ffff:0:ffff:ffff:0:ffff" },
{ "\000\000\000\000\000\000\377\377\377\377\377\377\000\000\377\377", "::ffff:ffff:ffff:0:ffff" },
{ "\377\377\000\000\000\000\377\377\377\377\377\377\000\000\377\377", "ffff::ffff:ffff:ffff:0:ffff" },
{ "\000\000\377\377\000\000\377\377\377\377\377\377\000\000\377\377", "0:ffff:0:ffff:ffff:ffff:0:ffff" },
{ "\377\377\377\377\000\000\377\377\377\377\377\377\000\000\377\377", "ffff:ffff:0:ffff:ffff:ffff:0:ffff" },
{ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\377\377", "::ffff:ffff:ffff:ffff:0:ffff" },
{ "\377\377\000\000\377\377\377\377\377\377\377\377\000\000\377\377", "ffff:0:ffff:ffff:ffff:ffff:0:ffff" },
{ "\000\000\377\377\377\377\377\377\377\377\377\377\000\000\377\377", "0:ffff:ffff:ffff:ffff:ffff:0:ffff" },
{ "\377\377\377\377\377\377\377\377\377\377\377\377\000\000\377\377", "ffff:ffff:ffff:ffff:ffff:ffff:0:ffff" },
{ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377", "::ffff:ffff" }, /* inet_ntop incompatible: ::255.255.255.255 */
{ "\377\377\000\000\000\000\000\000\000\000\000\000\377\377\377\377", "ffff::ffff:ffff" },
{ "\000\000\377\377\000\000\000\000\000\000\000\000\377\377\377\377", "0:ffff::ffff:ffff" },
{ "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\377", "ffff:ffff::ffff:ffff" },
{ "\000\000\000\000\377\377\000\000\000\000\000\000\377\377\377\377", "0:0:ffff::ffff:ffff" },
{ "\377\377\000\000\377\377\000\000\000\000\000\000\377\377\377\377", "ffff:0:ffff::ffff:ffff" },
{ "\000\000\377\377\377\377\000\000\000\000\000\000\377\377\377\377", "0:ffff:ffff::ffff:ffff" },
{ "\377\377\377\377\377\377\000\000\000\000\000\000\377\377\377\377", "ffff:ffff:ffff::ffff:ffff" },
{ "\000\000\000\000\000\000\377\377\000\000\000\000\377\377\377\377", "::ffff:0:0:ffff:ffff" },
{ "\377\377\000\000\000\000\377\377\000\000\000\000\377\377\377\377", "ffff::ffff:0:0:ffff:ffff" },
{ "\000\000\377\377\000\000\377\377\000\000\000\000\377\377\377\377", "0:ffff:0:ffff::ffff:ffff" },
{ "\377\377\377\377\000\000\377\377\000\000\000\000\377\377\377\377", "ffff:ffff:0:ffff::ffff:ffff" },
{ "\000\000\000\000\377\377\377\377\000\000\000\000\377\377\377\377", "::ffff:ffff:0:0:ffff:ffff" },
{ "\377\377\000\000\377\377\377\377\000\000\000\000\377\377\377\377", "ffff:0:ffff:ffff::ffff:ffff" },
{ "\000\000\377\377\377\377\377\377\000\000\000\000\377\377\377\377", "0:ffff:ffff:ffff::ffff:ffff" },
{ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\377", "ffff:ffff:ffff:ffff::ffff:ffff" },
{ "\000\000\000\000\000\000\000\000\377\377\000\000\377\377\377\377", "::ffff:0:ffff:ffff" },
{ "\377\377\000\000\000\000\000\000\377\377\000\000\377\377\377\377", "ffff::ffff:0:ffff:ffff" },
{ "\000\000\377\377\000\000\000\000\377\377\000\000\377\377\377\377", "0:ffff::ffff:0:ffff:ffff" },
{ "\377\377\377\377\000\000\000\000\377\377\000\000\377\377\377\377", "ffff:ffff::ffff:0:ffff:ffff" },
{ "\000\000\000\000\377\377\000\000\377\377\000\000\377\377\377\377", "::ffff:0:ffff:0:ffff:ffff" },
{ "\377\377\000\000\377\377\000\000\377\377\000\000\377\377\377\377", "ffff:0:ffff:0:ffff:0:ffff:ffff" },
{ "\000\000\377\377\377\377\000\000\377\377\000\000\377\377\377\377", "0:ffff:ffff:0:ffff:0:ffff:ffff" },
{ "\377\377\377\377\377\377\000\000\377\377\000\000\377\377\377\377", "ffff:ffff:ffff:0:ffff:0:ffff:ffff" },
{ "\000\000\000\000\000\000\377\377\377\377\000\000\377\377\377\377", "::ffff:ffff:0:ffff:ffff" },
{ "\377\377\000\000\000\000\377\377\377\377\000\000\377\377\377\377", "ffff::ffff:ffff:0:ffff:ffff" },
{ "\000\000\377\377\000\000\377\377\377\377\000\000\377\377\377\377", "0:ffff:0:ffff:ffff:0:ffff:ffff" },
{ "\377\377\377\377\000\000\377\377\377\377\000\000\377\377\377\377", "ffff:ffff:0:ffff:ffff:0:ffff:ffff" },
{ "\000\000\000\000\377\377\377\377\377\377\000\000\377\377\377\377", "::ffff:ffff:ffff:0:ffff:ffff" },
{ "\377\377\000\000\377\377\377\377\377\377\000\000\377\377\377\377", "ffff:0:ffff:ffff:ffff:0:ffff:ffff" },
{ "\000\000\377\377\377\377\377\377\377\377\000\000\377\377\377\377", "0:ffff:ffff:ffff:ffff:0:ffff:ffff" },
{ "\377\377\377\377\377\377\377\377\377\377\000\000\377\377\377\377", "ffff:ffff:ffff:ffff:ffff:0:ffff:ffff" },
{ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377", "255.255.255.255" }, /* inet_ntop incompatible: ::ffff:255.255.255.255 */
{ "\377\377\000\000\000\000\000\000\000\000\377\377\377\377\377\377", "ffff::ffff:ffff:ffff" },
{ "\000\000\377\377\000\000\000\000\000\000\377\377\377\377\377\377", "0:ffff::ffff:ffff:ffff" },
{ "\377\377\377\377\000\000\000\000\000\000\377\377\377\377\377\377", "ffff:ffff::ffff:ffff:ffff" },
{ "\000\000\000\000\377\377\000\000\000\000\377\377\377\377\377\377", "::ffff:0:0:ffff:ffff:ffff" },
{ "\377\377\000\000\377\377\000\000\000\000\377\377\377\377\377\377", "ffff:0:ffff::ffff:ffff:ffff" },
{ "\000\000\377\377\377\377\000\000\000\000\377\377\377\377\377\377", "0:ffff:ffff::ffff:ffff:ffff" },
{ "\377\377\377\377\377\377\000\000\000\000\377\377\377\377\377\377", "ffff:ffff:ffff::ffff:ffff:ffff" },
{ "\000\000\000\000\000\000\377\377\000\000\377\377\377\377\377\377", "::ffff:0:ffff:ffff:ffff" },
{ "\377\377\000\000\000\000\377\377\000\000\377\377\377\377\377\377", "ffff::ffff:0:ffff:ffff:ffff" },
{ "\000\000\377\377\000\000\377\377\000\000\377\377\377\377\377\377", "0:ffff:0:ffff:0:ffff:ffff:ffff" },
{ "\377\377\377\377\000\000\377\377\000\000\377\377\377\377\377\377", "ffff:ffff:0:ffff:0:ffff:ffff:ffff" },
{ "\000\000\000\000\377\377\377\377\000\000\377\377\377\377\377\377", "::ffff:ffff:0:ffff:ffff:ffff" },
{ "\377\377\000\000\377\377\377\377\000\000\377\377\377\377\377\377", "ffff:0:ffff:ffff:0:ffff:ffff:ffff" },
{ "\000\000\377\377\377\377\377\377\000\000\377\377\377\377\377\377", "0:ffff:ffff:ffff:0:ffff:ffff:ffff" },
{ "\377\377\377\377\377\377\377\377\000\000\377\377\377\377\377\377", "ffff:ffff:ffff:ffff:0:ffff:ffff:ffff" },
{ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377", "::ffff:ffff:ffff:ffff" },
{ "\377\377\000\000\000\000\000\000\377\377\377\377\377\377\377\377", "ffff::ffff:ffff:ffff:ffff" },
{ "\000\000\377\377\000\000\000\000\377\377\377\377\377\377\377\377", "0:ffff::ffff:ffff:ffff:ffff" },
{ "\377\377\377\377\000\000\000\000\377\377\377\377\377\377\377\377", "ffff:ffff::ffff:ffff:ffff:ffff" },
{ "\000\000\000\000\377\377\000\000\377\377\377\377\377\377\377\377", "::ffff:0:ffff:ffff:ffff:ffff" },
{ "\377\377\000\000\377\377\000\000\377\377\377\377\377\377\377\377", "ffff:0:ffff:0:ffff:ffff:ffff:ffff" },
{ "\000\000\377\377\377\377\000\000\377\377\377\377\377\377\377\377", "0:ffff:ffff:0:ffff:ffff:ffff:ffff" },
{ "\377\377\377\377\377\377\000\000\377\377\377\377\377\377\377\377", "ffff:ffff:ffff:0:ffff:ffff:ffff:ffff" },
{ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377", "::ffff:ffff:ffff:ffff:ffff" },
{ "\377\377\000\000\000\000\377\377\377\377\377\377\377\377\377\377", "ffff::ffff:ffff:ffff:ffff:ffff" },
{ "\000\000\377\377\000\000\377\377\377\377\377\377\377\377\377\377", "0:ffff:0:ffff:ffff:ffff:ffff:ffff" },
{ "\377\377\377\377\000\000\377\377\377\377\377\377\377\377\377\377", "ffff:ffff:0:ffff:ffff:ffff:ffff:ffff" },
{ "\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377", "::ffff:ffff:ffff:ffff:ffff:ffff" },
{ "\377\377\000\000\377\377\377\377\377\377\377\377\377\377\377\377", "ffff:0:ffff:ffff:ffff:ffff:ffff:ffff" },
{ "\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377", "0:ffff:ffff:ffff:ffff:ffff:ffff:ffff" },
{ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" },
{ 0, 0 }
};
static void test_compress(void) {
long long i, j;
char *buf0;
char buf1[IPTOSTR_LEN];
char buf2[IPTOSTR_LEN];
for (i = 0;testvectors[i].ip; ++i) {
for (j = 0; j < IPTOSTR_LEN; ++j) { buf1[j] = (char)0xff; buf2[j] = 0; }
buf0 = iptostr(0, (unsigned char *)testvectors[i].ip);
iptostr(buf1, (unsigned char *)testvectors[i].ip);
for (j = 0; j < IPTOSTR_LEN; ++j) {
buf2[j] = testvectors[i].ipstr[j];
if (!buf2[j]) break;
}
for (j = 0; j < IPTOSTR_LEN; ++j) {
if (buf0[j] != buf2[j]) fail("bad output");
if (buf1[j] != buf2[j]) fail("bad output");
}
}
}
static void test_bufferoverflow(void) {
char buf[IPTOSTR_LEN + 16];
long long i, j;
unsigned char ip[16];
char ch[2] = {0x00, (char)0xff };
if ((IPTOSTR_LEN) < sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")) fail("IPTOSTR_LEN too small");
for (i = 0; i < 16; ++i) ip[i] = 0x11;
for (j = 0; j < 2; ++j) {
for (i = 0; i < sizeof buf; ++i) buf[i] = ch[j];
iptostr(buf + 8, ip);
for (i = 0; i < 8; ++i) if (buf[i] != ch[j]) fail("iptostr writes before output");
for (i = 0; i < 8; ++i) if (buf[i + IPTOSTR_LEN + 8] != ch[j]) fail("iptostr writes after output");
}
}
int main(void) {
test_compress();
test_bufferoverflow();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/loadtest.c 0000664 0000000 0000000 00000001401 14544472107 0020276 0 ustar 00root root 0000000 0000000 /*
20140417
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include "fail.h"
#include "open.h"
#include "randombytes.h"
#include "byte.h"
#include "load.h"
#include "writeall.h"
#define SPACELEN 1048577
unsigned char space1[SPACELEN];
unsigned char space2[SPACELEN];
static void test1(void) {
int fd;
fd = open_write("loadtest.data");
if (fd == -1) fail("failure");
randombytes(space1, sizeof space1);
if (writeall(fd, space1, sizeof space1) == -1) fail("failure");
close(fd);
if (load("loadtest.data", space2, sizeof space2) == -1) fail("failure");
if (!byte_isequal(space1, SPACELEN, space2)) fail("failure");
}
int main(void) {
test1();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/loginshelltest.c 0000664 0000000 0000000 00000002510 14544472107 0021521 0 ustar 00root root 0000000 0000000 /*
20140429
Jan Mojzis
Public domain.
*/
#include "str.h"
#include "byte.h"
#include "fail.h"
#include "loginshell.h"
static char buf[10];
static struct vector {
const char *in;
const char *out;
} vectors[] = {
{ "", "-" },
{ "/", "-" },
{ "//", "-" },
{ "///", "-" },
{ "////", "-" },
{ "/////", "-" },
{ "/a/b/c/d/", "-" },
{ "/a///d/", "-" },
{ "//b/c//", "-" },
{ "x/", "-" },
{ "x/x/xx/xxx/", "-" },
{ "sh", "-sh" },
{ "/bin/bash", "-bash" },
{ "///////dash", "-dash" },
{ "///////-ksh", "--ksh" },
/* truncation */
{ "longlongsh", "-longlong" },
{ 0, 0 }
};
static void testok(void) {
long long i, len;
for (i = 0; vectors[i].in; ++i) {
if (!loginshell(buf, sizeof buf, vectors[i].in)) fail("loginshell failure");
len = str_len(vectors[i].out);
if (str_len(buf) != len) fail("loginshell failure");
if (!byte_isequal(buf, len, vectors[i].out)) fail("loginshell failure");
}
}
static void testbad(void) {
if (loginshell(buf, -1, "")) fail("loginshell failure");
if (loginshell(buf, 0, "")) fail("loginshell failure");
if (loginshell(buf, 1, "")) fail("loginshell failure");
if (loginshell(buf, 1, "//")) fail("loginshell failure");
}
int main(void) {
testok();
testbad();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/logsystest.c 0000777 0000000 0000000 00000000000 14544472107 0023100 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/logtest.c 0000664 0000000 0000000 00000005037 14544472107 0020151 0 ustar 00root root 0000000 0000000 /*
20140319
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include "fail.h"
#include "byte.h"
#include "log.h"
static int readall(int fd, unsigned char *x, long long xlen) {
long long r;
long long len = 0;
while (xlen > 0) {
r = read(fd, x, xlen);
if (r == 0) break;
if (r <= 0) return -1;
x += r;
len += r;
xlen -= r;
}
return len;
}
static unsigned char buf[1024];
#define LINE_EXP "?????????\n????????????????????? !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????"
static void run(void (*op)(void)) {
pid_t pid;
int status, fromchild[2];
long long r, i, j;
if (pipe(fromchild) == -1) fail("pipe() failure");
pid = fork();
if (pid == -1) fail("fork() failure");
if (pid == 0) {
close(fromchild[0]);
if (dup2(fromchild[1], 2) == -1) _exit(111);
op();
_exit(0);
}
close(fromchild[1]);
r = readall(fromchild[0], buf, sizeof buf);
if (r == -1) fail("read() failure");
j = 0;
for (i = 0; i < r; ++i) {
if (buf[i] == ' ') ++j;
if (j == 3) break;
}
r -= i + 1;
byte_copy(buf, r, buf + i + 1);
for (r = r - 1; r > 0; --r) {
if (buf[r] == ' ') {
buf[r] = 0;
break;
}
}
while (waitpid(pid, &status, 0) != pid) {};
if (!WIFEXITED(status)) fail("process killed");
if (WEXITSTATUS(status)) fail("process exited with status != 0");
if (r < sizeof(LINE_EXP) - 1) fail("failure");
if (!byte_isequal(buf, sizeof(LINE_EXP) - 1, LINE_EXP)) fail("failure");
}
static char line[256];
static void feed(void) {
unsigned long long i;
for (i = 0; i < 256; ++i) line[i] = (unsigned char)(i + 1);
}
static void test_fatal(void) {
log_init(0, "x", 1, 0);
log_d1("hidden");
log_i1("hidden");
log_w1("hidden");
log_f1(line);
}
static void test_warning(void) {
log_init(1, "x", 1, 0);
log_d1("hidden");
log_i1("hidden");
log_w1(line);
}
static void test_info(void) {
log_init(1, "x", 1, 0);
log_d1("hidden");
log_i1(line);
}
static void test_debug(void) {
log_init(2, "x", 1, 0);
log_d1(line);
}
int main(void) {
return 0;
feed();
run(test_fatal);
run(test_warning);
run(test_info);
run(test_debug);
_exit(0);
}
tinyssh-20240101/tinyssh-tests/main_tinysshd_makekeytest.c 0000777 0000000 0000000 00000000000 14544472107 0026137 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/main_tinysshd_printkeytest.c 0000777 0000000 0000000 00000000000 14544472107 0026356 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/main_tinysshdtest.c 0000777 0000000 0000000 00000000000 14544472107 0024431 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/newenvtest.c 0000664 0000000 0000000 00000006657 14544472107 0020703 0 ustar 00root root 0000000 0000000 /*
20140129
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "run.h"
#include "fail.h"
#include "newenv.h"
#define SCRIPT1 "\
err='newenvtest: failed: newenv_env does not set correcty variable'\n\
[ x\"$AA1\" = x ] || ( echo $err; exit 111; ) \n\
[ x\"$AA3\" = x ] || ( echo $err; exit 111; ) \n\
[ x\"$BBB\" = xok ] || ( echo $err; exit 111; ) \n\
[ x\"$CC1\" = xok ] || ( echo $err; exit 111; ) \n\
[ x\"$CC3\" = x ] || ( echo $err; exit 111; ) \n\
[ x\"$DD1\" = xok ] || ( echo $err; exit 111; ) \n\
[ x\"$DD3\" = xok ] || ( echo $err; exit 111; ) \n\
[ x\"$EE1\" = xok ] || ( echo $err; exit 111; ) \n\
[ x\"$FF1\" = xok ] || ( echo $err; exit 111; ) \n\
[ x\"$YY1\" = xok ] || ( echo $err; exit 111; ) \n\
[ x\"$ZZ1\" = x ] || ( echo $err; exit 111; ) \n\
[ x\"$ZZ3\" = x ] || ( echo $err; exit 111; ) \n\
exit 0 \n\
"
static void test1(void) {
char *run[4];
long long i;
char buf[100];
/* normal setenv */
if (setenv("BBB", "ok", 1) == -1) fail("setenv failure");
if (!newenv_copyenv("BBB")) fail("newenv_copyenv failure");
/* normal env */
if (!newenv_env("CC1", "ok")) fail("newenv_env failure");
if (newenv_copyenv("CC3")) fail("newenv_copyenv failure");
/* replaced env */
if (!newenv_env("DD1", "failed")) fail("newenv_env failure");
if (!newenv_env("DD1", "ok")) fail("newenv_env failure");
if (setenv("DD3", "failed", 1) == -1) fail("setenv failure");
if (!newenv_copyenv("DD3")) fail("newenv_copyenv failure");
if (setenv("DD3", "ok", 1) == -1) fail("setenv failure");
if (!newenv_copyenv("DD3")) fail("newenv_copyenv failure");
/* setenv first */
if (setenv("EE1", "failed", 1) == -1) fail("setenv failure");
if (!newenv_env("EE1", "ok")) fail("newenv_env failure");
/* setenv last */
if (!newenv_env("FF1", "ok")) fail("newenv_env failure");
if (setenv("FF1", "failed", 1) == -1) fail("setenv failure");
/* replaced env - ok */
if (!newenv_env("YY1", "ok")) fail("newenv_env failure");
for (i = 0; i < 200; ++i) {
snprintf(buf, sizeof buf, "%lld", i);
newenv_env(buf, buf);
}
if (!newenv_env("YY1", "ok")) fail("newenv_env failure");
/* replaced env - overflow */
for (i = 0; i < 200; ++i) {
snprintf(buf, sizeof buf, "%lld", i);
newenv_env(buf, buf);
}
if (newenv_env("ZZ1", "failed")) fail("newenv_env failure");
if (setenv("ZZ3", "failed", 1) == -1) fail("setenv failure");
if (newenv_copyenv("ZZ3")) fail("newenv_copyenv failure");
run[0] = (char *)"/bin/sh";
run[1] = (char *)"-ec";
run[2] = (char *)SCRIPT1;
run[3] = (char *)0;
newenv_exec(*run, run);
fail("failure");
}
#define SCRIPT2 "\
err='newenvtest2: failed: environment should be empty'\n\
[ x\"$AAAA\" = x ] || ( echo $err; exit 111; ) \n\
exit 0 \n\
"
static void test2(void) {
char *run[4];
/* setenv */
if (setenv("AAAA", "failed", 1) == -1) fail("setenv failure");
run[0] = (char *)"/bin/sh";
run[1] = (char *)"-ec";
run[2] = (char *)SCRIPT2;
run[3] = 0;
newenv_exec(*run, run);
}
static void test3(void) {
for (;;) {
if (newenv_lowenv("XXX", "YYY")) break;
}
if (!newenv_env("XXX", "YYY")) fail("newenv_env failure");
}
static void testdummy(void) {
_exit(111);
}
int main(void) {
run_mustpass(test1);
run_mustpass(test2);
test3();
run_mustfail(testdummy);
_exit(0);
}
tinyssh-20240101/tinyssh-tests/numtostrtest.c 0000664 0000000 0000000 00000022773 14544472107 0021271 0 ustar 00root root 0000000 0000000 /*
20140201
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "fail.h"
#include "numtostr.h"
static long long int128max(void) {
long long x = 9223372036854775807LL;
x <<= 32;
x <<= 32;
x += 9223372036854775807LL;
x += 9223372036854775807LL;
x += 1;
return x;
}
static void test_bufferoverflow(void) {
char buf[NUMTOSTR_LEN + 16];
long long i, j;
char ch[2] = {0x00, (char)0xff };
long long llmaxnum;
long long llminnum;
long long numlen = sizeof(long long);
if (numlen == 16) {
llmaxnum = int128max();
llminnum = -llmaxnum - 1LL;
}
else if (numlen == 8) {
llmaxnum = 9223372036854775807LL;
llminnum = -llmaxnum - 1LL;
}
else {
fail("unsupported size for 'num'");
}
if ((NUMTOSTR_LEN) < sizeof("-170141183460469231731687303715884105728")) fail("NUMTOSTR_LEN too small");
for (j = 0; j < 2; ++j) {
for (i = 0; i < sizeof buf; ++i) buf[i] = ch[j];
numtostr(buf + 8, llminnum);
for (i = 0; i < 8; ++i) if (buf[i] != ch[j]) fail("numtostr() writes before output");
for (i = 0; i < 8; ++i) if (buf[i + NUMTOSTR_LEN + 8] != ch[j]) fail("numtostr() writes after output");
for (i = 0; i < sizeof buf; ++i) buf[i] = ch[j];
numtostr(buf + 8, llmaxnum);
for (i = 0; i < 8; ++i) if (buf[i] != ch[j]) fail("numtostr() writes before output");
for (i = 0; i < 8; ++i) if (buf[i + NUMTOSTR_LEN + 8] != ch[j]) fail("numtostr() writes after output");
}
}
static void test_minmax(void) {
const char *llmax;
const char *llmin;
long long llmaxnum;
long long llminnum;
char *x;
long long numlen = sizeof(long long);
if (numlen == 16) {
llmax = "170141183460469231731687303715884105727";
llmin = "-170141183460469231731687303715884105728";
llmaxnum = int128max();
llminnum = -llmaxnum - 1LL;
}
else if (numlen == 8) {
llmax = "9223372036854775807";
llmin = "-9223372036854775808";
llmaxnum = 9223372036854775807LL;
llminnum = -llmaxnum - 1LL;
}
else {
fail("unsupported size for 'num'");
}
x = numtostr(0, llmaxnum);
if (strcmp(x, llmax)) fail("numtostr() failure");
x = numtostr(0, llminnum);
if (strcmp(x, llmin)) fail("numtostr() failure");
}
struct vectors {
long long num;
const char *strnum;
} testvectors[] = {
{ -100, "-100" },
{ -99, "-99" },
{ -98, "-98" },
{ -97, "-97" },
{ -96, "-96" },
{ -95, "-95" },
{ -94, "-94" },
{ -93, "-93" },
{ -92, "-92" },
{ -91, "-91" },
{ -90, "-90" },
{ -89, "-89" },
{ -88, "-88" },
{ -87, "-87" },
{ -86, "-86" },
{ -85, "-85" },
{ -84, "-84" },
{ -83, "-83" },
{ -82, "-82" },
{ -81, "-81" },
{ -80, "-80" },
{ -79, "-79" },
{ -78, "-78" },
{ -77, "-77" },
{ -76, "-76" },
{ -75, "-75" },
{ -74, "-74" },
{ -73, "-73" },
{ -72, "-72" },
{ -71, "-71" },
{ -70, "-70" },
{ -69, "-69" },
{ -68, "-68" },
{ -67, "-67" },
{ -66, "-66" },
{ -65, "-65" },
{ -64, "-64" },
{ -63, "-63" },
{ -62, "-62" },
{ -61, "-61" },
{ -60, "-60" },
{ -59, "-59" },
{ -58, "-58" },
{ -57, "-57" },
{ -56, "-56" },
{ -55, "-55" },
{ -54, "-54" },
{ -53, "-53" },
{ -52, "-52" },
{ -51, "-51" },
{ -50, "-50" },
{ -49, "-49" },
{ -48, "-48" },
{ -47, "-47" },
{ -46, "-46" },
{ -45, "-45" },
{ -44, "-44" },
{ -43, "-43" },
{ -42, "-42" },
{ -41, "-41" },
{ -40, "-40" },
{ -39, "-39" },
{ -38, "-38" },
{ -37, "-37" },
{ -36, "-36" },
{ -35, "-35" },
{ -34, "-34" },
{ -33, "-33" },
{ -32, "-32" },
{ -31, "-31" },
{ -30, "-30" },
{ -29, "-29" },
{ -28, "-28" },
{ -27, "-27" },
{ -26, "-26" },
{ -25, "-25" },
{ -24, "-24" },
{ -23, "-23" },
{ -22, "-22" },
{ -21, "-21" },
{ -20, "-20" },
{ -19, "-19" },
{ -18, "-18" },
{ -17, "-17" },
{ -16, "-16" },
{ -15, "-15" },
{ -14, "-14" },
{ -13, "-13" },
{ -12, "-12" },
{ -11, "-11" },
{ -10, "-10" },
{ -9, "-9" },
{ -8, "-8" },
{ -7, "-7" },
{ -6, "-6" },
{ -5, "-5" },
{ -4, "-4" },
{ -3, "-3" },
{ -2, "-2" },
{ -1, "-1" },
{ 0, "0" },
{ 1, "1" },
{ 2, "2" },
{ 3, "3" },
{ 4, "4" },
{ 5, "5" },
{ 6, "6" },
{ 7, "7" },
{ 8, "8" },
{ 9, "9" },
{ 10, "10" },
{ 11, "11" },
{ 12, "12" },
{ 13, "13" },
{ 14, "14" },
{ 15, "15" },
{ 16, "16" },
{ 17, "17" },
{ 18, "18" },
{ 19, "19" },
{ 20, "20" },
{ 21, "21" },
{ 22, "22" },
{ 23, "23" },
{ 24, "24" },
{ 25, "25" },
{ 26, "26" },
{ 27, "27" },
{ 28, "28" },
{ 29, "29" },
{ 30, "30" },
{ 31, "31" },
{ 32, "32" },
{ 33, "33" },
{ 34, "34" },
{ 35, "35" },
{ 36, "36" },
{ 37, "37" },
{ 38, "38" },
{ 39, "39" },
{ 40, "40" },
{ 41, "41" },
{ 42, "42" },
{ 43, "43" },
{ 44, "44" },
{ 45, "45" },
{ 46, "46" },
{ 47, "47" },
{ 48, "48" },
{ 49, "49" },
{ 50, "50" },
{ 51, "51" },
{ 52, "52" },
{ 53, "53" },
{ 54, "54" },
{ 55, "55" },
{ 56, "56" },
{ 57, "57" },
{ 58, "58" },
{ 59, "59" },
{ 60, "60" },
{ 61, "61" },
{ 62, "62" },
{ 63, "63" },
{ 64, "64" },
{ 65, "65" },
{ 66, "66" },
{ 67, "67" },
{ 68, "68" },
{ 69, "69" },
{ 70, "70" },
{ 71, "71" },
{ 72, "72" },
{ 73, "73" },
{ 74, "74" },
{ 75, "75" },
{ 76, "76" },
{ 77, "77" },
{ 78, "78" },
{ 79, "79" },
{ 80, "80" },
{ 81, "81" },
{ 82, "82" },
{ 83, "83" },
{ 84, "84" },
{ 85, "85" },
{ 86, "86" },
{ 87, "87" },
{ 88, "88" },
{ 89, "89" },
{ 90, "90" },
{ 91, "91" },
{ 92, "92" },
{ 93, "93" },
{ 94, "94" },
{ 95, "95" },
{ 96, "96" },
{ 97, "97" },
{ 98, "98" },
{ 99, "99" },
{ 100, "100" },
{ -9223372036854775808LL, "-9223372036854775808" },
{ -9223372036854775807LL, "-9223372036854775807" },
{ -9223372036854775806LL, "-9223372036854775806" },
{ -9223372036854775805LL, "-9223372036854775805" },
{ -9223372036854775804LL, "-9223372036854775804" },
{ -9223372036854775803LL, "-9223372036854775803" },
{ -9223372036854775802LL, "-9223372036854775802" },
{ -9223372036854775801LL, "-9223372036854775801" },
{ -9223372036854775800LL, "-9223372036854775800" },
{ -9223372036854775799LL, "-9223372036854775799" },
{ -9223372036854775798LL, "-9223372036854775798" },
{ -9223372036854775797LL, "-9223372036854775797" },
{ -9223372036854775796LL, "-9223372036854775796" },
{ -9223372036854775795LL, "-9223372036854775795" },
{ -9223372036854775794LL, "-9223372036854775794" },
{ -9223372036854775793LL, "-9223372036854775793" },
{ -9223372036854775792LL, "-9223372036854775792" },
{ -9223372036854775791LL, "-9223372036854775791" },
{ -9223372036854775790LL, "-9223372036854775790" },
{ -9223372036854775789LL, "-9223372036854775789" },
{ -9223372036854775788LL, "-9223372036854775788" },
{ -9223372036854775787LL, "-9223372036854775787" },
{ -9223372036854775786LL, "-9223372036854775786" },
{ -9223372036854775785LL, "-9223372036854775785" },
{ -9223372036854775784LL, "-9223372036854775784" },
{ -9223372036854775783LL, "-9223372036854775783" },
{ -9223372036854775782LL, "-9223372036854775782" },
{ -9223372036854775781LL, "-9223372036854775781" },
{ 9223372036854775780LL, "9223372036854775780" },
{ 9223372036854775781LL, "9223372036854775781" },
{ 9223372036854775782LL, "9223372036854775782" },
{ 9223372036854775783LL, "9223372036854775783" },
{ 9223372036854775784LL, "9223372036854775784" },
{ 9223372036854775785LL, "9223372036854775785" },
{ 9223372036854775786LL, "9223372036854775786" },
{ 9223372036854775787LL, "9223372036854775787" },
{ 9223372036854775788LL, "9223372036854775788" },
{ 9223372036854775789LL, "9223372036854775789" },
{ 9223372036854775790LL, "9223372036854775790" },
{ 9223372036854775791LL, "9223372036854775791" },
{ 9223372036854775792LL, "9223372036854775792" },
{ 9223372036854775793LL, "9223372036854775793" },
{ 9223372036854775794LL, "9223372036854775794" },
{ 9223372036854775795LL, "9223372036854775795" },
{ 9223372036854775796LL, "9223372036854775796" },
{ 9223372036854775797LL, "9223372036854775797" },
{ 9223372036854775798LL, "9223372036854775798" },
{ 9223372036854775799LL, "9223372036854775799" },
{ 9223372036854775800LL, "9223372036854775800" },
{ 9223372036854775801LL, "9223372036854775801" },
{ 9223372036854775802LL, "9223372036854775802" },
{ 9223372036854775803LL, "9223372036854775803" },
{ 9223372036854775804LL, "9223372036854775804" },
{ 9223372036854775805LL, "9223372036854775805" },
{ 9223372036854775806LL, "9223372036854775806" },
{ 9223372036854775807LL, "9223372036854775807" },
{ 0, 0 }
};
static void test_vector(void) {
long long i;
char *x;
for (i = 0; testvectors[i].strnum; ++i) {
x = numtostr(0, testvectors[i].num);
if (strcmp(x, testvectors[i].strnum)) fail("numtostr() failure");
}
}
int main(void) {
test_bufferoverflow();
test_minmax();
test_vector();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/opentest.c 0000664 0000000 0000000 00000002260 14544472107 0020324 0 ustar 00root root 0000000 0000000 /*
20140410
Jan Mojzis
Public domain.
*/
#include
#include
#include "run.h"
#include "fail.h"
#include "open.h"
static void cat(void) {
char *catcmd[2] = { (char *)"cat", 0 };
execvp(*catcmd, catcmd);
}
/* test if close-on-exec works for open_read() */
static void test1(void) {
int fd;
close(0);
fd = open_read("opentest.c");
if (fd != 0) fail("unable to open opentest.c for reading");
cat();
}
/* test if close-on-exec works for open_write() */
static void test2(void) {
int fd;
close(1);
fd = open_write("opentest.data");
if (fd != 1) fail("unable to open opentest.data for writing");
cat();
}
/* test if close-on-exec works for open_pipe() */
static void test3(void) {
int fd, pi[2];
close(0);
close(1);
fd = open_pipe(pi);
if (fd == -1) fail("unable to open pipe");
if (pi[0] != 0) fail("unable to open pipe");
if (pi[1] != 1) fail("unable to open pipe");
cat();
}
/* dummy test */
static void testdummy(void) {
_exit(0);
}
int main(void) {
alarm(10);
run_mustfail(test1);
run_mustfail(test2);
run_mustfail(test3);
run_mustpass(testdummy);
_exit(0);
}
tinyssh-20240101/tinyssh-tests/packet_authtest.c 0000777 0000000 0000000 00000000000 14544472107 0024050 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packet_channel_opentest.c 0000777 0000000 0000000 00000000000 14544472107 0025540 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packet_channel_recvtest.c 0000777 0000000 0000000 00000000000 14544472107 0025536 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packet_channel_requesttest.c 0000777 0000000 0000000 00000000000 14544472107 0026267 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packet_channel_sendtest.c 0000777 0000000 0000000 00000000000 14544472107 0025530 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packet_gettest.c 0000777 0000000 0000000 00000000000 14544472107 0023666 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packet_hellotest.c 0000777 0000000 0000000 00000000000 14544472107 0024212 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packet_kexdhtest.c 0000777 0000000 0000000 00000000000 14544472107 0024212 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packet_kextest.c 0000777 0000000 0000000 00000000000 14544472107 0023676 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packet_puttest.c 0000777 0000000 0000000 00000000000 14544472107 0023717 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packet_recvtest.c 0000777 0000000 0000000 00000000000 14544472107 0024046 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packet_sendtest.c 0000777 0000000 0000000 00000000000 14544472107 0024040 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packet_unimplementedtest.c 0000777 0000000 0000000 00000000000 14544472107 0025755 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/packetparsertest.c 0000664 0000000 0000000 00000011314 14544472107 0022047 0 ustar 00root root 0000000 0000000 /*
20140303
Jan Mojzis
Public domain.
*/
#include
#include "run.h"
#include "fail.h"
#include "byte.h"
#include "packetparser.h"
/*
checks packetparser_uint8(), packetparser_uint32() function
and packetparser_end called more than once
*/
static void test1(void) {
unsigned char buf[4];
crypto_uint8 ch;
crypto_uint32 u;
long long i, pos = 0;
byte_copy(buf, 4, "abcd");
/* uint8 */
pos = 0;
for (i = 0; i < sizeof buf; ++i) {
pos = packetparser_uint8(buf, sizeof buf, pos, &ch);
if (ch != buf[i]) fail("failure");
}
if (pos != sizeof buf) fail("failure");
/* uint32 */
pos = 0;
pos = packetparser_uint8(buf, sizeof buf, 0, &ch);
pos = packetparser_uint32(buf, sizeof buf, 0, &u);
if (pos != sizeof buf) fail("failure");
pos = packetparser_end(buf, sizeof buf, pos);
pos = packetparser_end(buf, sizeof buf, pos);
pos = packetparser_end(buf, sizeof buf, pos);
}
/* checks if packetparser_skip() skips 0 bytes */
static void test2(void) {
unsigned char buf[5];
crypto_uint8 ch;
crypto_uint32 len;
long long i, pos = 0;
for (i = 0; i < sizeof buf; ++i) buf[i] = 0;
pos = packetparser_uint32(buf, sizeof buf, pos, &len);
if (len != 0) fail("failure");
pos = packetparser_skip(buf, sizeof buf, pos, len);
pos = packetparser_uint8(buf, sizeof buf, pos, &ch);
if (ch) fail("failure");
if (pos != sizeof buf) fail("failure");
pos = packetparser_end(buf, sizeof buf, pos);
pos = packetparser_end(buf, sizeof buf, pos);
pos = packetparser_end(buf, sizeof buf, pos);
}
/* checks if packetparser_copy() accepts 0 bytes */
static void test4(void) {
unsigned char buf[5];
unsigned char buf2[6];
crypto_uint8 ch;
crypto_uint32 len;
long long i, pos = 0;
for (i = 0; i < sizeof buf; ++i) buf[i] = 0;
pos = packetparser_uint32(buf, sizeof buf, pos, &len);
if (len != 0) fail("failure");
pos = packetparser_copy(buf, sizeof buf, pos, buf2, len);
pos = packetparser_uint8(buf, sizeof buf, pos, &ch);
if (ch) fail("failure");
if (pos != sizeof buf) fail("failure");
pos = packetparser_end(buf, sizeof buf, pos);
pos = packetparser_end(buf, sizeof buf, pos);
pos = packetparser_end(buf, sizeof buf, pos);
}
/* packetparser_skip() overflow */
static void _test3a(void) {
unsigned char buf[5];
long long pos = 0;
pos = packetparser_skip(buf, sizeof buf, pos, 6);
}
static void _test3aa(void) {
unsigned char buf[5];
long long len, pos;
len = pos = 9223372036854775807LL;
pos = packetparser_skip(buf, len, pos, 1);
}
/* packetparser_uint32() overflow */
static void _test3b(void) {
unsigned char buf[3];
crypto_uint32 u;
long long pos = 0;
pos = packetparser_uint32(buf, sizeof buf, pos, &u);
}
static void _test3bb(void) {
unsigned char buf[4];
crypto_uint32 u;
long long len, pos;
len = pos = 9223372036854775807LL;
pos = packetparser_uint32(buf, len, pos, &u);
}
/* packetparser_uint8() overflow */
static void _test3c(void) {
unsigned char buf[3];
crypto_uint8 ch;
long long pos = 0;
pos = packetparser_uint8(buf, sizeof buf, pos, &ch);
pos = packetparser_uint8(buf, sizeof buf, pos, &ch);
pos = packetparser_uint8(buf, sizeof buf, pos, &ch);
pos = packetparser_uint8(buf, sizeof buf, pos, &ch);
}
static void _test3cc(void) {
unsigned char buf[3];
crypto_uint8 ch;
long long len, pos;
len = pos = 9223372036854775807LL;
pos = packetparser_uint8(buf, len, pos, &ch);
}
/* packetparser_copy() overflow */
static void _test3d(void) {
unsigned char buf1[10];
unsigned char buf2[11];
long long pos = 0;
pos = packetparser_copy(buf1, sizeof buf1, pos, buf2, sizeof buf2);
}
static void _test3dd(void) {
unsigned char buf1[10];
unsigned char buf2[10];
long long len, pos;
len = pos = 9223372036854775807LL;
pos = packetparser_copy(buf1, len, pos, buf2, sizeof buf2);
}
/* packetparser_end() failure */
static void _test3e(void) {
unsigned char buf[1];
packetparser_end(buf, 0, 1);
}
static void _test3ee(void) {
unsigned char buf[1];
long long pos = 9223372036854775807LL;
packetparser_end(buf, pos, pos);
}
static void test3(void) {
run_mustfail(_test3a);
run_mustfail(_test3aa);
run_mustfail(_test3b);
run_mustfail(_test3bb);
run_mustfail(_test3c);
run_mustfail(_test3cc);
run_mustfail(_test3d);
run_mustfail(_test3dd);
run_mustfail(_test3e);
run_mustfail(_test3ee);
}
/* dummy test */
static void testdummy(void) {
_exit(0);
}
int main(void) {
test1();
test2();
test3();
test4();
run_mustpass(testdummy);
_exit(0);
}
tinyssh-20240101/tinyssh-tests/packettest.c 0000777 0000000 0000000 00000000000 14544472107 0023027 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/porttostrtest.c 0000664 0000000 0000000 00000004605 14544472107 0021450 0 ustar 00root root 0000000 0000000 /*
20140201
Jan Mojzis
Public domain.
*/
#include
#include
#include "fail.h"
#include "porttostr.h"
#include "crypto_uint16.h"
static void porttostr_bufferoverflow(void) {
char buf[PORTTOSTR_LEN + 16];
long long i, j;
unsigned char port[2] = { 5, 5 };
char ch[2] = {0x00, (char)0xff };
if ((PORTTOSTR_LEN) < sizeof("65535")) fail("PORTTOSTR_LEN too small");
for (j = 0; j < 2; ++j) {
for (i = 0; i < sizeof buf; ++i) buf[i] = ch[j];
porttostr(buf + 8, port);
for (i = 0; i < 8; ++i) if (buf[i] != ch[j]) fail("porttostr writes before output");
for (i = 0; i < 8; ++i) if (buf[i + PORTTOSTR_LEN + 8] != ch[j]) fail("porttostr writes after output");
}
}
static struct vectors {
const char *port;
const char *portstr;
} testvectors[] = {
{ "\377\377", "65535" },
{ "\000\000", "0\0\0\0\0" },
{ 0, 0 }
};
static void porttostr_testvectors(void) {
char *x, *y, *z;
long long i, j;
char buf[PORTTOSTR_LEN];
for (i = 0; testvectors[i].port; ++i) {
for (j = 0; j < sizeof buf; ++j) buf[j] = (char)0xff;
x = porttostr(buf, (unsigned char *)testvectors[i].port);
y = porttostr(0, (unsigned char *)testvectors[i].port);
z = (char *)testvectors[i].portstr;
for (j = 0; j < PORTTOSTR_LEN; ++j) {
if (buf[j] != z[j]) fail("bad output");
if (x[j] != z[j]) fail("bad output");
if (y[j] != z[j]) fail("bad output");
}
}
}
static void packport(unsigned char *y, crypto_uint16 x) {
y[1] = x & 255; x >>= 8;
y[0] = x & 255;
}
static void porttostr_full(void) {
long long i, j;
unsigned char port[2];
char *x, *y;
char buf[PORTTOSTR_LEN];
char buf2[PORTTOSTR_LEN + 10];
for (i = 0; i < 65536; ++i) {
for (j = 0; j < sizeof buf; ++j) buf[j] = (char)0xff;
for (j = 0; j < sizeof buf; ++j) buf2[j] = 0;
packport(port, i);
x = porttostr(buf, port);
y = porttostr(0, port);
snprintf(buf2, sizeof buf2, "%lld", i);
for (j = 0; j < PORTTOSTR_LEN; ++j) {
if (buf[j] != buf2[j]) fail("bad output");
if (x[j] != buf2[j]) fail("bad output");
if (y[j] != buf2[j]) fail("bad output");
}
}
}
int main(void) {
porttostr_bufferoverflow();
porttostr_testvectors();
porttostr_full();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/randommodtest.c 0000664 0000000 0000000 00000001054 14544472107 0021343 0 ustar 00root root 0000000 0000000 /*
20140416
Jan Mojzis
Public domain.
*/
#include
#include
#include "fail.h"
#include "randommod.h"
int main(void) {
long long i, r;
if (randommod(-1) != 0) fail("failure");
if (randommod(0) != 0) fail("failure");
if (randommod(1) != 0) fail("failure");
for (i = 2; i < 10; ++i) {
r = randommod(i);
if (r > i - 1 || r < 0) fail("failure");
}
for (i = 18014398509481984ULL; i < 18014398509481994ULL; ++i) {
if (randommod(i) == randommod(i)) fail("failure");
}
_exit(0);
}
tinyssh-20240101/tinyssh-tests/readalltest.c 0000664 0000000 0000000 00000001454 14544472107 0020773 0 ustar 00root root 0000000 0000000 /*
20140417
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include "fail.h"
#include "open.h"
#include "randombytes.h"
#include "byte.h"
#include "readall.h"
#include "writeall.h"
#define SPACELEN 1048577
unsigned char space1[SPACELEN];
unsigned char space2[SPACELEN];
static void test1(void) {
int fd;
fd = open_write("readall.data");
if (fd == -1) fail("failure");
randombytes(space1, sizeof space1);
if (writeall(fd, space1, sizeof space1) == -1) fail("failure");
close(fd);
fd = open_read("readall.data");
if (readall(fd, space2, sizeof space2) == -1) fail("failure");
close(fd);
if (!byte_isequal(space1, SPACELEN, space2)) fail("failure");
}
int main(void) {
test1();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/run.h 0000664 0000000 0000000 00000006420 14544472107 0017276 0 ustar 00root root 0000000 0000000 #ifndef _RUN_H____
#define _RUN_H____
#include
#include
#include
#include
#include "fail.h"
static void _run_mustfail(const char *file, unsigned long long line, void (*op)(void)) {\
\
pid_t pid; \
int status; \
\
pid = fork(); \
if (pid == -1) fail_(file, line, "unable to fork"); \
\
if (pid == 0) { \
close(2); \
op(); \
_exit(0); \
} \
\
while (waitpid(pid, &status, 0) != pid) {}; \
if (!WIFEXITED(status)) fail_(file, line, "process killed"); \
if (!WEXITSTATUS(status)) fail_(file, line, "process exited with status = 0"); \
}
static void _run_mustpass(const char *file, unsigned long long line, void (*op)(void)) {\
\
pid_t pid; \
int status; \
\
pid = fork(); \
if (pid == -1) fail_(file, line, "unable to fork"); \
\
if (pid == 0) { \
close(2); \
op(); \
_exit(111); \
} \
\
while (waitpid(pid, &status, 0) != pid) {}; \
if (!WIFEXITED(status)) fail_(file, line, "process killed"); \
if (WEXITSTATUS(status)) fail_(file, line, "process exited with status != 0"); \
}
#define run_mustfail(x) _run_mustfail(__FILE__, __LINE__, (x));
#define run_mustpass(x) _run_mustpass(__FILE__, __LINE__, (x));
#endif
tinyssh-20240101/tinyssh-tests/savesynctest.c 0000664 0000000 0000000 00000001330 14544472107 0021213 0 ustar 00root root 0000000 0000000 /*
20140417
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include "fail.h"
#include "randombytes.h"
#include "byte.h"
#include "load.h"
#include "savesync.h"
#include "writeall.h"
#define SPACELEN 1048577
unsigned char space1[SPACELEN];
unsigned char space2[SPACELEN];
static void test1(void) {
randombytes(space1, sizeof space1);
if (savesync("savesynctest.data", space1, sizeof space1) == -1) fail("savesync() failure");
if (load("savesynctest.data", space2, sizeof space2) == -1) fail("load() failure");
if (!byte_isequal(space1, SPACELEN, space2)) fail("load()/savesync() failure");
}
int main(void) {
test1();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/sshcrypto_cipher_chachapolytest.c 0000777 0000000 0000000 00000000000 14544472107 0027343 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/sshcrypto_ciphertest.c 0000777 0000000 0000000 00000000000 14544472107 0025150 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/sshcrypto_kex_curve25519test.c 0000777 0000000 0000000 00000000000 14544472107 0026277 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/sshcrypto_kex_sntrup761x25519test.c 0000777 0000000 0000000 00000000000 14544472107 0027134 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/sshcrypto_kextest.c 0000777 0000000 0000000 00000000000 14544472107 0024465 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/sshcrypto_key_ed25519test.c 0000777 0000000 0000000 00000000000 14544472107 0025544 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/sshcrypto_keytest.c 0000777 0000000 0000000 00000000000 14544472107 0024466 2emptytest.c ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh-tests/sshcryptotest.c 0000664 0000000 0000000 00000002104 14544472107 0021416 0 ustar 00root root 0000000 0000000 /*
20140417
Jan Mojzis
Public domain.
*/
#include
#include "sshcrypto.h"
/* grep "define sshcrypto_" source/tinyssh/sshcrypto.h | cut -d ' ' -f2 | while read x; do echo \#ifndef $x; echo error! ;echo \#endif; done */
#ifndef sshcrypto_kem_PUBLICKEYMAX
error!
#endif
#ifndef sshcrypto_kem_CIPHERTEXTMAX
error!
#endif
#ifndef sshcrypto_kem_MAX
error!
#endif
#ifndef sshcrypto_hash_MAX
error!
#endif
#ifndef sshcrypto_sign_PUBLICKEYMAX
error!
#endif
#ifndef sshcrypto_sign_SECRETKEYMAX
error!
#endif
#ifndef sshcrypto_sign_MAX
error!
#endif
#ifndef sshcrypto_sign_BASE64PUBLICKEYMAX
error!
#endif
#ifndef sshcrypto_sign_BASE64PUBLICKEYMIN
error!
#endif
#ifndef sshcrypto_cipher_KEYMAX
error!
#endif
int main(void) {
/* check sshcrypto_init() called called more than once */
sshcrypto_init();
sshcrypto_init();
/* check sshcrypto_purge() called called more than once */
sshcrypto_purge();
sshcrypto_purge();
/* check sshcrypto_init() called called more than once after sshcrypto_purge() */
sshcrypto_init();
sshcrypto_init();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/sshtest.c 0000664 0000000 0000000 00000003450 14544472107 0020162 0 ustar 00root root 0000000 0000000 /*
20140319
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "fail.h"
#include "ssh.h"
/*
grep SSH_ * | sed 's/.*SSH_/SSH_/g' | cut -d ',' -f1 | cut -d ' ' -f1 | cut -d ')' -f1 | cut -d ':' -f1 | cut -d '"' -f1 | cut -d ';' -f1 | sort -u | grep -v 'SSH_TTY\|SSH_CONNECTION'| while read x; do echo \#ifndef $x; echo error! ;echo \#endif; done
*/
#ifndef SSH_MSG_CHANNEL_CLOSE
error!
#endif
#ifndef SSH_MSG_CHANNEL_DATA
error!
#endif
#ifndef SSH_MSG_CHANNEL_EOF
error!
#endif
#ifndef SSH_MSG_CHANNEL_EXTENDED_DATA
error!
#endif
#ifndef SSH_MSG_CHANNEL_OPEN
error!
#endif
#ifndef SSH_MSG_CHANNEL_OPEN_CONFIRMATION
error!
#endif
#ifndef SSH_MSG_CHANNEL_OPEN_FAILURE
error!
#endif
#ifndef SSH_MSG_CHANNEL_REQUEST
error!
#endif
#ifndef SSH_MSG_CHANNEL_SUCCESS
error!
#endif
#ifndef SSH_MSG_CHANNEL_WINDOW_ADJUST
error!
#endif
#ifndef SSH_MSG_DEBUG
error!
#endif
#ifndef SSH_MSG_DISCONNECT
error!
#endif
#ifndef SSH_MSG_IGNORE
error!
#endif
#ifndef SSH_MSG_KEXDH_INIT
error!
#endif
#ifndef SSH_MSG_KEXDH_REPLY
error!
#endif
#ifndef SSH_MSG_KEXINIT
error!
#endif
#ifndef SSH_MSG_NEWKEYS
error!
#endif
#ifndef SSH_MSG_SERVICE_ACCEPT
error!
#endif
#ifndef SSH_MSG_SERVICE_REQUEST
error!
#endif
#ifndef SSH_MSG_UNIMPLEMENTED
error!
#endif
#ifndef SSH_MSG_USERAUTH_FAILURE
error!
#endif
#ifndef SSH_MSG_USERAUTH_PK_OK
error!
#endif
#ifndef SSH_MSG_USERAUTH_REQUEST
error!
#endif
#ifndef SSH_MSG_USERAUTH_SUCCESS
error!
#endif
#ifndef SSH_OPEN_ADMINISTRATIVELY_PROHIBITED
error!
#endif
int main(void) {
if (strcmp(ssh_sigstr(SIGTERM), "TERM")) fail("failure")
if (strcmp(ssh_sigstrlong(SIGTERM), "SIGTERM (termination)")) fail("failure")
if (strcmp(ssh_sigstr(-1), "UNKNOWN")) fail("failure")
if (strcmp(ssh_sigstrlong(-1), "UNKNOWN SIGNAL")) fail("failure")
_exit(0);
}
tinyssh-20240101/tinyssh-tests/stringparsertest.c 0000664 0000000 0000000 00000004022 14544472107 0022104 0 ustar 00root root 0000000 0000000 /*
20140204
Jan Mojzis
Public domain.
*/
#include
#include
#include "fail.h"
#include "str.h"
#include "byte.h"
#include "stringparser.h"
static struct vectors {
const char *buf;
} testvectors[] = {
{ "aaa,bb,c" },
{ ",aaa,bb,c" },
{ "aaa,bb,c," },
{ "aaa,,,,bb,,,,c" },
{ ",,,aaa,,,,bb,,,,c" },
{ ",,,aaa,,,,bb,,,,c,,," },
{ "aaa,bb,,c," },
{ 0 }
};
static void stringstringparser_test1(void) {
unsigned char *buf;
long long i, pos = 0;
unsigned char *x;
long long xlen, len;
for (i = 0; testvectors[i].buf; ++i) {
buf = (unsigned char *)testvectors[i].buf;
len = str_len(testvectors[i].buf);
pos = 0;
pos = stringparser(buf, len, pos, &x, &xlen); if (!pos) fail("parsing error");
if (xlen != 3) fail("parsing error");
if (!byte_isequal(x, xlen, "aaa")) fail("parsing error");
pos = stringparser(buf, len, pos, &x, &xlen); if (!pos) fail("parsing error");
if (xlen != 2) fail("parsing error");
if (!byte_isequal(x, xlen, "bb")) fail("parsing error");
pos = stringparser(buf, len, pos, &x, &xlen); if (!pos) fail("parsing error");
if (xlen != 1) fail("parsing error");
if (!byte_isequal(x, xlen, "c")) fail("parsing error");
if (stringparser(buf, len, pos, &x, &xlen)) fail("overflow");
}
}
static void stringstringparser_test2(void) {
unsigned char *buf;
long long pos = 0;
unsigned char *x;
long long xlen, len;
buf = (unsigned char *)"";
len = str_len((char *)buf);
pos = 0;
if (stringparser(buf, len, pos, &x, &xlen)) fail("overflow");
buf = (unsigned char *)",";
len = str_len((char *)buf);
pos = 0;
if (stringparser(buf, len, pos, &x, &xlen)) fail("overflow");
buf = (unsigned char *)",,,,,,,,";
len = str_len((char *)buf);
pos = 0;
if (stringparser(buf, len, pos, &x, &xlen)) fail("overflow");
}
int main(void) {
stringstringparser_test1();
stringstringparser_test2();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/strtest.c 0000664 0000000 0000000 00000005635 14544472107 0020204 0 ustar 00root root 0000000 0000000 /*
20130610
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "fail.h"
#include "str.h"
static void test_len(void) {
if (str_len("") != 0) fail("str_len return's bad length");
if (str_len("\0ahoj") != 0) fail("str_len return's bad length");
if (str_len("a\0hoj") != 1) fail("str_len return's bad length");
if (str_len("ahoj\0") != 4) fail("str_len return's bad length");
if (str_len("ahoj") != 4) fail("str_len return's bad length");
}
static void test_start(void) {
if (!str_start("","")) fail("str_start failure");
if (!str_start("x","")) fail("str_start failure");
if (str_start("","x")) fail("str_start failure");
if (!str_start("ahojx","ahoj")) fail("str_start failure");
if (str_start("ahoj","ahojx")) fail("str_start failure");
}
static void test_equal(void) {
#ifdef TODO
/* equal */
if (!str_equal("","")) fail("str_equal failure");
if (!str_equal("\0","\0")) fail("str_equal failure");
if (!str_equal("","\0")) fail("str_equal failure");
if (!str_equal("\0","")) fail("str_equal failure");
if (!str_equal("ahoj","ahoj")) fail("str_equal failure");
if (!str_equal("ahoj","ahoj\0")) fail("str_equal failure");
if (!str_equal("ahoj\0","ahoj")) fail("str_equal failure");
/* not equal */
if (str_equal("x","")) fail("str_equal failure");
if (str_equal("","x")) fail("str_equal failure");
if (str_equal("xx","x")) fail("str_equal failure");
if (str_equal("x","xx")) fail("str_equal failure");
if (str_equal("ahojx","ahoj")) fail("str_equal failure");
if (str_equal("ahoj","ahojx")) fail("str_equal failure");
#endif
}
static void test_equaln(void) {
char buf[5];
/* not equal */
if (str_equaln(buf, 0, "a")) fail("str_equaln failure");
if (str_equaln("ahoj", 4, "aho")) fail("str_equaln failure");
if (str_equaln("ahoj", 4, "ahoj!")) fail("str_equaln failure");
if (str_equaln("ahoj", 4, "ahox")) fail("str_equaln failure");
/* equal */
if (!str_equaln(buf, 0, "")) fail("str_equaln failure");
if (strncmp(buf, "", 0)) fail("strncmp failure");
if (!str_equaln("ahoj", 4, "ahoj")) fail("str_equaln failure");
if (strncmp("ahoj", "ahoj", 4)) fail("strncmp failure");
}
static void test_copyn(void) {
char buf[5];
/* bad */
if (str_copyn(buf, 0, "")) fail("str_copyn failure");
if (str_copyn(buf, 1, "a")) fail("str_copyn failure");
if (str_copyn(buf, sizeof buf, "ahoj!")) fail("str_copyn failure");
if (strcmp(buf, "ahoj")) fail("str_copyn failure");
/* ok */
if (!str_copyn(buf, sizeof buf, "ahoj")) fail("str_copyn failure");
if (strcmp(buf, "ahoj")) fail("str_copyn failure");
if (!str_copyn(buf, sizeof buf, "")) fail("str_copyn failure");
if (strcmp(buf, "")) fail("str_copyn failure");
}
int main(void) {
test_len();
test_start();
test_equal();
test_equaln();
test_copyn();
_exit(0);
}
tinyssh-20240101/tinyssh-tests/subprocess_authtest.c 0000664 0000000 0000000 00000044701 14544472107 0022602 0 ustar 00root root 0000000 0000000 /*
20140321
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include
#include "fail.h"
#include "dropuidgid.h"
#include "savesync.h"
#include "open.h"
#include "global.h"
#include "byte.h"
#include "str.h"
#include "log.h"
#include "subprocess.h"
static int readall(int fd, unsigned char *x, long long xlen) {
long long r;
long long len = 0;
while (xlen > 0) {
r = read(fd, x, xlen);
if (r == 0) break;
if (r <= 0) return -1;
x += r;
len += r;
xlen -= r;
}
return len;
}
static unsigned char logbuf[1024];
static char globalpath[4096];
static long long globalpathlen;
static void run(void (*op)(void), const char *exp) {
pid_t pid;
int status, fromchild[2];
long long r, i;
if (pipe(fromchild) == -1) fail("pipe() failure");
pid = fork();
if (pid == -1) fail("fork() failure");
if (pid == 0) {
close(fromchild[0]);
if (dup2(fromchild[1], 2) == -1) _exit(111);
op();
_exit(0);
}
close(fromchild[1]);
r = readall(fromchild[0], logbuf, sizeof logbuf);
if (r == -1) fail("read() failure");
for (i = 0; i < r; ++i) if (logbuf[i] == '\n') break;
r = i;
for (i = 0; i < r; ++i) if (logbuf[i] == '/') break;
r -= i;
byte_copy(logbuf, r, logbuf + i);
/* fprintf(stderr, "xxx: %s\n", logbuf); fflush(stderr); */
if (r < globalpathlen + 1) fail("log error");
if (!byte_isequal(globalpath, globalpathlen, logbuf)) fail("log error");
r -= globalpathlen + 1;
byte_copy(logbuf, r, logbuf + globalpathlen + 1);
for (i = 0; i < r; ++i) if (logbuf[i] == '{') break;
r = i;
logbuf[r] = 0;
while (waitpid(pid, &status, 0) != pid) {};
if (!WIFEXITED(status)) fail("process killed");
if (WEXITSTATUS(status)) fail("process exited with status != 0");
i = str_len(exp);
if (r != i) fail("failed");
if (!byte_isequal(logbuf, i, exp)) fail("failed");
}
static int run2(void (*op)(void)) {
pid_t pid;
int status;
pid = fork();
if (pid == -1) return -1;
if (pid == 0) {
close(2);
op();
_exit(0);
}
while (waitpid(pid, &status, 0) != pid) {};
if (!WIFEXITED(status)) return -1;
return WEXITSTATUS(status);
}
static void test_usernotexist(void) {
const char *account = "21ecdfcc00506bc138d004a0c04139442e24b02ac456bf05601f1e8f645baa2";
const char *keyname = "ssh-ed25519";
const char *key = "key1";
if (subprocess_auth(account, keyname, key) == 0) fail("subprocess_auth() failure");
}
static void test_usertoolong(void) {
const char *account = "21ecdfcc00506bc138d004a0c04139442e24b02ac456bf05601f1e8f645baa25";
const char *keyname = "ssh-ed25519";
const char *key = "key1";
if (subprocess_auth(account, keyname, key) == 0) fail("subprocess_auth() failure");
}
static void test_keytooshort(void) {
const char *account = "21ecdfcc00506bc138d004a0c04139442e24b02ac456bf05601f1e8f645baa2";
const char *keyname = "ssh-ed25519";
const char *key = "AAAAC3NzaC1lZDI1NTE5AAAAICj44ZR+OCpjuLbOwqys2MKHroSvAWGgEE1o7yq+UVe";
if (subprocess_auth(account, keyname, key) == 0) fail("subprocess_auth() failure");
}
static struct passwd *pw;
static void droproot(void) {
uid_t uid;
uid = geteuid();
if (uid == 0) {
pw = getpwnam("nobody");
if (!pw) fail("getpwnam() failure")
if (!dropuidgid(pw->pw_name, pw->pw_uid, pw->pw_gid)) fail("dropuidgid() failure");
}
else {
pw = getpwuid(uid);
if (!pw) fail("getpwuid() failure")
}
if (geteuid() == 0) fail("dropuidgid() failure");
}
static void test_root(void) {
const char *account = "root";
const char *keyname = "ssh-ed25519";
const char *key = "key1";
if (subprocess_auth(account, keyname, key) == 0) fail("subprocess_auth() failure");
}
#define path global_bspace2 /* reusing global buffer */
#define buf global_bspace1 /* reusing global buffer */
static void test_path_authorizedkeys_ne(void) {
umask(000);
if (mkdir("d1", 0755) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_authorizedkeys_fifo(void) {
umask(000);
if (mkdir("d1", 0755) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (mkfifo("authorized_keys", 0644) == -1) fail("mkfifo() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_authorizedkeys_perm1(void) {
umask(000);
if (mkdir("d1", 0755) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (chmod("authorized_keys", 0777) == -1) fail("chmod() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_authorizedkeys_perm2(void) {
umask(000);
if (mkdir("d1", 0755) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (chmod("authorized_keys", 0775) == -1) fail("chmod() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_authorizedkeys_perm3(void) {
umask(000);
if (mkdir("d1", 0755) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (chmod("authorized_keys", 0757) == -1) fail("chmod() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_dir_perm1(void) {
umask(000);
if (mkdir("d1", 0775) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_dir_perm2(void) {
umask(000);
if (mkdir("d1", 0777) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_dir_perm3(void) {
umask(000);
if (mkdir("d1", 0757) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_dir2_perm1(void) {
umask(000);
if (mkdir("d1", 0777) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (mkdir("d2", 0777) == -1) fail("mkdir() failure");
if (chdir("d2") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d2") == -1) fail("rmdir() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_dir2_perm2(void) {
umask(000);
if (mkdir("d1", 0777) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (mkdir("d2", 0775) == -1) fail("mkdir() failure");
if (chdir("d2") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d2") == -1) fail("rmdir() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_dir2_perm3(void) {
umask(000);
if (mkdir("d1", 0777) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (mkdir("d2", 0757) == -1) fail("mkdir() failure");
if (chdir("d2") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d2") == -1) fail("rmdir() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_dir3_perm1(void) {
umask(000);
if (mkdir("d1", 0777) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (mkdir("d2", 0755) == -1) fail("mkdir() failure");
if (chdir("d2") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d2") == -1) fail("rmdir() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_dir3_perm2(void) {
umask(000);
if (mkdir("d1", 0775) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (mkdir("d2", 0755) == -1) fail("mkdir() failure");
if (chdir("d2") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d2") == -1) fail("rmdir() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_dir3_perm3(void) {
umask(000);
if (mkdir("d1", 0757) == -1) fail("mkdir() failure");
if (chdir("d1") == -1) fail("chdir() failure");
if (mkdir("d2", 0755) == -1) fail("mkdir() failure");
if (chdir("d2") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d2") == -1) fail("rmdir() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_path_dir_symlink(void) {
umask(000);
if (mkdir("d1", 0775) == -1) fail("mkdir() failure");
if (symlink("d1", "d2") == -1) fail("symlink() failure");
if (chdir("d2") == -1) fail("chdir() failure");
if (savesync("authorized_keys", "", 0) == -1) fail("savesync() failure");
if (subprocess_auth_checkpath_((char *)path, sizeof path, geteuid())) fail("subprocess_auth_checkpath_() failure");
if (unlink("authorized_keys") == -1) fail("unlink() failure");
if (chdir("..") == -1) fail("chdir() failure");
if (unlink("d2") == -1) fail("rmdir() failure");
if (rmdir("d1") == -1) fail("rmdir() failure");
}
static void test_authorizedkeys_ne(void) {
const char *keyname = "";
const char *key = "";
if (!getcwd((char *)path, sizeof path)) fail("getcwd() failure");
if (subprocess_auth_authorizedkeys_((char *)keyname, (char *)key, (char *)path, (char *)buf, sizeof buf))
fail("subprocess_auth_authorizedkeys_() failure");
}
#define AUTHORIZED_KEYS "\
\n\
\n\
###\n\
\n\
\n\
\n\
\n\
ssh-rsa AAAAB3Nza...LiPk== user@example.net\n\
from=\"*.sales.example.net,!pc.sales.example.net\" ssh-rsa AAAAB2...19Q== john@example.net\n\
command=\"dump /home\",no-pty,no-port-forwarding ssh-dss AAAAC3...51R== example.net\n\
permitopen=\"192.0.2.1:80\",permitopen=\"192.0.2.2:25\" ssh-dss AAAAB5...21S==\n\
tunnel=\"0\",command=\"sh /etc/netstart tun0\" ssh-rsa AAAA...== jane@example.net\n\
ecdsa-sha2-nistp256 ecdsakey1 apache@apache\n\
\n\
\n\
ssh-ed25519 badkey1 note - extra ' ' before keyname\n\
ssh-ed25519 badkey2. note - '.' as separator\n\
ssh-ed255191 badkey3\n\
ssh-ed25519\tbadkey4\n\
ssh-ed25519 badkey5\n\
\n\
\n\
ssh-ed25519 key1\n\
ssh-ed25519 key2\r\n\
ssh-ed25519 key3 note - ' ' as separator\n\
ssh-ed25519 key4\0note - '\0' as separator\n\
ssh-ed25519 key5 note - last line"
static void authorizedkeys(void) {
if (savesync("authorized_keys", AUTHORIZED_KEYS, sizeof(AUTHORIZED_KEYS) - 1) == -1) fail("savesync() failure");
}
static void test_authorizedkeys_ok(void) {
const char *keyname, *key;
if (!getcwd((char *)path, sizeof path)) fail("getcwd() failure");
keyname = "ssh-ed25519"; key = "key1";
if (!subprocess_auth_authorizedkeys_((char *)keyname, (char *)key, (char *)path, (char *)buf, sizeof buf))
fail("subprocess_auth_authorizedkeys_() failure");
keyname = "ssh-ed25519"; key = "key2";
if (!subprocess_auth_authorizedkeys_((char *)keyname, (char *)key, (char *)path, (char *)buf, sizeof buf))
fail("subprocess_auth_authorizedkeys_() failure");
keyname = "ssh-ed25519"; key = "key3";
if (!subprocess_auth_authorizedkeys_((char *)keyname, (char *)key, (char *)path, (char *)buf, sizeof buf))
fail("subprocess_auth_authorizedkeys_() failure");
keyname = "ssh-ed25519"; key = "key4";
if (!subprocess_auth_authorizedkeys_((char *)keyname, (char *)key, (char *)path, (char *)buf, sizeof buf))
fail("subprocess_auth_authorizedkeys_() failure");
keyname = "ssh-ed25519"; key = "key5";
if (!subprocess_auth_authorizedkeys_((char *)keyname, (char *)key, (char *)path, (char *)buf, sizeof buf))
fail("subprocess_auth_authorizedkeys_() failure");
}
static void test_authorizedkeys_bad(void) {
const char *keyname, *key;
if (!getcwd((char *)path, sizeof path)) fail("getcwd() failure");
keyname = "ssh-ed25519"; key = "badkey1";
if (subprocess_auth_authorizedkeys_((char *)keyname, (char *)key, (char *)path, (char *)buf, sizeof buf))
fail("subprocess_auth_authorizedkeys_() failure");
keyname = "ssh-ed25519"; key = "badkey2";
if (subprocess_auth_authorizedkeys_((char *)keyname, (char *)key, (char *)path, (char *)buf, sizeof buf))
fail("subprocess_auth_authorizedkeys_() failure");
keyname = "ssh-ed25519"; key = "badkey3";
if (subprocess_auth_authorizedkeys_((char *)keyname, (char *)key, (char *)path, (char *)buf, sizeof buf))
fail("subprocess_auth_authorizedkeys_() failure");
keyname = "ssh-ed25519"; key = "badkey4";
if (subprocess_auth_authorizedkeys_((char *)keyname, (char *)key, (char *)path, (char *)buf, sizeof buf))
fail("subprocess_auth_authorizedkeys_() failure");
keyname = "ssh-ed25519"; key = "badkey5";
if (subprocess_auth_authorizedkeys_((char *)keyname, (char *)key, (char *)path, (char *)buf, sizeof buf))
fail("subprocess_auth_authorizedkeys_() failure");
}
int main(void) {
if (!getcwd(globalpath, sizeof globalpath)) fail("getcwd() failure");
globalpathlen = str_len(globalpath);
log_init(2, "xxx", 1, 0);
run(test_path_authorizedkeys_ne, "d1/authorized_keys (file does not exist)");
run(test_path_authorizedkeys_fifo, "d1/authorized_keys (access denied)");
run(test_path_authorizedkeys_perm1, "d1/authorized_keys (access denied)");
run(test_path_authorizedkeys_perm2, "d1/authorized_keys (access denied)");
run(test_path_authorizedkeys_perm3, "d1/authorized_keys (access denied)");
run(test_path_dir_perm1, "d1/ (access denied)");
run(test_path_dir_perm2, "d1/ (access denied)");
run(test_path_dir_perm3, "d1/ (access denied)");
run(test_path_dir2_perm1, "d1/d2/ (access denied)");
run(test_path_dir2_perm2, "d1/d2/ (access denied)");
run(test_path_dir2_perm3, "d1/d2/ (access denied)");
run(test_path_dir3_perm1, "d1/ (access denied)");
run(test_path_dir3_perm2, "d1/ (access denied)");
run(test_path_dir3_perm3, "d1/ (access denied)");
run(test_path_dir_symlink, "d1/ (access denied)");
log_init(-1, "xxx", 1, 0);
test_authorizedkeys_ne();
authorizedkeys();
test_authorizedkeys_ok();
test_authorizedkeys_bad();
droproot();
run2(test_usernotexist);
run2(test_usertoolong);
run2(test_keytooshort);
run2(test_root);
_exit(0);
}
tinyssh-20240101/tinyssh-tests/subprocess_signtest.c 0000664 0000000 0000000 00000005702 14544472107 0022577 0 ustar 00root root 0000000 0000000 /*
20140321
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "fail.h"
#include "savesync.h"
#include "sshcrypto.h"
#include "open.h"
#include "purge.h"
#include "byte.h"
#include "randommod.h"
#include "crypto_uint32.h"
#include "subprocess.h"
unsigned char sh[sshcrypto_hash_MAX];
unsigned char sm[sshcrypto_sign_MAX + sshcrypto_hash_MAX];
unsigned char m[sshcrypto_sign_MAX + sshcrypto_hash_MAX];
unsigned long long mlen;
unsigned char sk[sshcrypto_sign_SECRETKEYMAX];
const char *keydir = "./keydir";
static void create(const char *fn, const unsigned char *x, long long xlen) {
if (savesync(fn, x, xlen) == -1) fail("unable to create test directory");
}
int main(void) {
long long i, j;
int fd;
fd = open_cwd();
if (fd == -1) fail("open_cwd() failure");
/* make keydir */
umask(022);
if (mkdir(keydir, 0755) == -1) fail("unable to create test directory");
if (chdir(keydir) == -1) fail("unable to chdir to directory");
for (i = 0; sshcrypto_keys[i].name; ++i) {
if (sshcrypto_keys[i].sign_keypair(sshcrypto_keys[i].sign_publickey, sk) != 0) fail("unable to generate key pair");
umask(022);
create(sshcrypto_keys[i].sign_publickeyfilename, sshcrypto_keys[i].sign_publickey, sshcrypto_keys[i].sign_publickeybytes);
umask(077);
create(sshcrypto_keys[i].sign_secretkeyfilename, sk, sshcrypto_keys[i].sign_secretkeybytes);
purge(sk, sizeof sk);
}
if (fchdir(fd) == -1) fail("fchdir() failure");
for (i = 0; sshcrypto_keys[i].name; ++i) {
/* set globals */
sshcrypto_key_name = sshcrypto_keys[i].name;
sshcrypto_sign = sshcrypto_keys[i].sign;
sshcrypto_sign_publickey = sshcrypto_keys[i].sign_publickey;
sshcrypto_sign_publickeybytes = sshcrypto_keys[i].sign_publickeybytes;
sshcrypto_sign_secretkeybytes = sshcrypto_keys[i].sign_secretkeybytes;
sshcrypto_sign_bytes = sshcrypto_keys[i].sign_bytes;
sshcrypto_sign_secretkeyfilename = sshcrypto_keys[i].sign_secretkeyfilename;
sshcrypto_hash_bytes = 64;
for (j = 0; j < 100; ++j) {
/* sign */
purge(sh, sizeof sh);
if (subprocess_sign(sm, sshcrypto_sign_bytes, keydir, sh, sshcrypto_hash_bytes) != 0)
fail("unable to sign");
byte_copy(sm + sshcrypto_sign_bytes, sshcrypto_hash_bytes, sh);
/* verify */
if (sshcrypto_keys[i].sign_open(m, &mlen, sm, sshcrypto_hash_bytes + sshcrypto_sign_bytes, sshcrypto_keys[i].sign_publickey) != 0)
fail("unable to open signed box");
#if 0
/* forgery */
sm[randommod(sshcrypto_sign_bytes + sshcrypto_hash_bytes)] += 1 + randommod(255);
if (sshcrypto_keys[i].sign_open(m, &mlen, sm, sshcrypto_hash_bytes + sshcrypto_sign_bytes, sshcrypto_keys[i].sign_publickey) == 0)
fail("forgery");
#endif
}
}
_exit(0);
}
tinyssh-20240101/tinyssh-tests/trymlocktest.c 0000664 0000000 0000000 00000000323 14544472107 0021225 0 ustar 00root root 0000000 0000000 /*
20140303
Jan Mojzis
Public domain.
*/
#include
#include "trymlock.h"
unsigned char buf[100];
int main(void) {
long long i;
for (i = 81; i < 100; ++i) trymlock(buf, i);
_exit(0);
}
tinyssh-20240101/tinyssh-tests/writealltest.c 0000664 0000000 0000000 00000001411 14544472107 0021203 0 ustar 00root root 0000000 0000000 /*
20140417
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include "fail.h"
#include "open.h"
#include "randombytes.h"
#include "byte.h"
#include "load.h"
#include "writeall.h"
#define SPACELEN 1048577
unsigned char space1[SPACELEN];
unsigned char space2[SPACELEN];
static void test1(void) {
int fd;
fd = open_write("writealltest.data");
if (fd == -1) fail("failure");
randombytes(space1, sizeof space1);
if (writeall(fd, space1, sizeof space1) == -1) fail("failure");
close(fd);
if (load("writealltest.data", space2, sizeof space2) == -1) fail("failure");
if (!byte_isequal(space1, SPACELEN, space2)) fail("failure");
}
int main(void) {
test1();
_exit(0);
}
tinyssh-20240101/tinyssh/ 0000775 0000000 0000000 00000000000 14544472107 0015157 5 ustar 00root root 0000000 0000000 tinyssh-20240101/tinyssh/LIBS 0000664 0000000 0000000 00000001537 14544472107 0015641 0 ustar 00root root 0000000 0000000 blocking.o
buf.o
byte.o
channel.o
channel_drop.o
channel_fork.o
channel_forkpty.o
channel_subsystem.o
coe.o
connectioninfo.o
die.o
dropuidgid.o
e.o
env.o
getln.o
global.o
iptostr.o
load.o
log.o
loginshell.o
logsys.o
main_tinysshd.o
main_tinysshd_makekey.o
main_tinysshd_printkey.o
newenv.o
numtostr.o
open.o
packet.o
packet_auth.o
packet_channel_open.o
packet_channel_recv.o
packet_channel_request.o
packet_channel_send.o
packet_get.o
packet_hello.o
packet_kex.o
packet_kexdh.o
packet_put.o
packet_recv.o
packet_send.o
packet_unimplemented.o
packetparser.o
porttostr.o
randommod.o
readall.o
savesync.o
ssh.o
sshcrypto.o
sshcrypto_cipher.o
sshcrypto_cipher_chachapoly.o
sshcrypto_kex.o
sshcrypto_kex_curve25519.o
sshcrypto_kex_sntrup761x25519.o
sshcrypto_key.o
sshcrypto_key_ed25519.o
str.o
stringparser.o
subprocess_auth.o
subprocess_sign.o
trymlock.o
writeall.o
tinyssh-20240101/tinyssh/LINKS 0000664 0000000 0000000 00000000076 14544472107 0015765 0 ustar 00root root 0000000 0000000 tinysshd
tinysshd-makekey tinysshd
tinysshd-printkey tinysshd
tinyssh-20240101/tinyssh/SOURCES 0000664 0000000 0000000 00000001421 14544472107 0016223 0 ustar 00root root 0000000 0000000 blocking
buf
byte
channel
channel_drop
channel_fork
channel_forkpty
channel_subsystem
coe
connectioninfo
die
dropuidgid
e
env
getln
global
iptostr
load
log
loginshell
logsys
main_tinysshd
main_tinysshd_makekey
main_tinysshd_printkey
newenv
numtostr
open
packet
packet_auth
packet_channel_open
packet_channel_recv
packet_channel_request
packet_channel_send
packet_get
packet_hello
packet_kex
packet_kexdh
packet_put
packet_recv
packet_send
packet_unimplemented
packetparser
porttostr
randommod
readall
savesync
ssh
sshcrypto
sshcrypto_cipher
sshcrypto_cipher_chachapoly
sshcrypto_kex
sshcrypto_kex_curve25519
sshcrypto_kex_sntrup761x25519
sshcrypto_key
sshcrypto_key_ed25519
str
stringparser
subprocess_auth
subprocess_sign
tinysshd
tinysshd-makekey
tinysshd-printkey
trymlock
writeall
tinyssh-20240101/tinyssh/TARGETS 0000664 0000000 0000000 00000000075 14544472107 0016215 0 ustar 00root root 0000000 0000000 tinysshd
tinysshnoneauthd
tinysshd-makekey
tinysshd-printkey
tinyssh-20240101/tinyssh/blocking.c 0000664 0000000 0000000 00000000423 14544472107 0017112 0 ustar 00root root 0000000 0000000 /* taken from nacl-20110221, from curvecp/blocking.c */
#include
#include "blocking.h"
void blocking_enable(int fd)
{
fcntl(fd,F_SETFL,fcntl(fd,F_GETFL,0) & ~O_NONBLOCK);
}
void blocking_disable(int fd)
{
fcntl(fd,F_SETFL,fcntl(fd,F_GETFL,0) | O_NONBLOCK);
}
tinyssh-20240101/tinyssh/blocking.h 0000664 0000000 0000000 00000000164 14544472107 0017121 0 ustar 00root root 0000000 0000000 #ifndef BLOCKING_H
#define BLOCKING_H
extern void blocking_enable(int);
extern void blocking_disable(int);
#endif
tinyssh-20240101/tinyssh/buf.c 0000664 0000000 0000000 00000013442 14544472107 0016103 0 ustar 00root root 0000000 0000000 /*
20140108
Jan Mojzis
Public domain.
The 'buf' library holds a string in allocated space.
The string length is limited by allocated memory.
All 'buf_put*' functions checks the limit and if
the string exceeds the limit, 'buf_put*' function
immediately exits with 111 status code.
*/
#include "byte.h"
#include "str.h"
#include "purge.h"
#include "randombytes.h"
#include "uint32_pack_big.h"
#include "bug.h"
#include "buf.h"
/*
Initialize 'b' structure.
*/
void buf_init_(const char *fn, unsigned long long line,
struct buf *b, unsigned char *buf, long long alloc) {
if (!b || !buf || alloc <= 0 || alloc > 1073741824) bug_inval_(fn, line);
b->buf = buf;
b->len = 0;
b->alloc = alloc;
purge(b->buf, b->alloc);
}
/*
Remove content of 'b'.
*/
void buf_purge_(const char *fn, unsigned long long line,
struct buf *b) {
if (!b || b->len < 0 || b->len > 1073741824 || b->alloc <= 0 || b->alloc > 1073741824 || !b->buf) bug_inval_(fn, line);
purge(b->buf, b->len);
b->len = 0;
}
/*
Retun if 'b' has available space for string of length 'len'.
*/
int buf_ready_(const char *fn, unsigned long long line,
struct buf *b, long long len) {
if (!b || b->len < 0 || b->len > 1073741824 || b->alloc <= 0 || b->alloc > 1073741824 || !b->buf || len < 0 || len > 1073741824) bug_inval_(fn, line);
return (b->len + len < b->alloc);
}
/*
Put string 'x' of length 'len'.
*/
int buf_put_(const char *fn, unsigned long long line,
struct buf *b, const unsigned char *x, long long len) {
if (!b || b->len < 0 || b->len > 1073741824 || b->alloc <= 0 || b->alloc > 1073741824 || !b->buf || !x || len < 0 || len > 1073741824) bug_inval_(fn, line);
if (b->len + len >= b->alloc) bug_nomem_(fn, line);
byte_copy(b->buf + b->len, len, x);
b->len += len;
return 1;
}
/*
Put 0-terminated string 'x'.
*/
int buf_puts_(const char *fn, unsigned long long line,
struct buf *b, const char *x) {
return buf_put_(fn, line, b, (const unsigned char *)x, str_len(x));
}
/*
Put zero bytes of length 'len'.
*/
int buf_putzerobytes_(const char *fn, unsigned long long line,
struct buf *b, long long len) {
if (!b || b->len < 0 || b->len > 1073741824 || b->alloc <= 0 || b->alloc > 1073741824 || !b->buf || len < 0 || len > 1073741824) bug_inval_(fn, line);
if (b->len + len >= b->alloc) bug_nomem_(fn, line);
byte_zero(b->buf + b->len, len);
b->len += len;
return 1;
}
/*
Put random bytes of length 'len'.
*/
int buf_putrandombytes_(const char *fn, unsigned long long line,
struct buf *b, long long len) {
if (!b || b->len < 0 || b->len > 1073741824 || b->alloc <= 0 || b->alloc > 1073741824 || !b->buf || len < 0 || len > 1073741824) bug_inval_(fn, line);
if (b->len + len >= b->alloc) bug_nomem_(fn, line);
randombytes(b->buf + b->len, len);
b->len += len;
return 1;
}
/*
Put padding of length 'len'.
*/
int buf_putpadding_(const char *fn, unsigned long long line,
struct buf *b, long long len) {
if (!b || b->len < 0 || b->len > 1073741824 || b->alloc <= 0 || b->alloc > 1073741824 || !b->buf || len < 0 || len > 1073741824) bug_inval_(fn, line);
if (b->len + len >= b->alloc) bug_nomem_(fn, line);
purge(b->buf + b->len, len);
b->len += len;
return 1;
}
/*
Put 32-bit unsigned integer in big-endian format.
*/
int buf_putnum32_(const char *fn, unsigned long long line,
struct buf *b, crypto_uint32 x) {
unsigned char s[4];
uint32_pack_big(s, x);
return buf_put_(fn, line, b, s, sizeof s);
}
/*
Put 8-bit unsigned integer.
*/
int buf_putnum8_(const char *fn, unsigned long long line,
struct buf *b, crypto_uint8 u) {
return buf_put_(fn, line, b, &u, 1);
}
/*
Put string 'x' of length 'len' and format it as a SSH-string.
*/
int buf_putstringlen_(const char *fn, unsigned long long line,
struct buf *b, const unsigned char *x, long long len) {
if (!buf_putnum32_(fn, line, b, len)) return 0;
return buf_put_(fn, line, b, x, len);
}
/*
Put 0-terminated string 'x' and format it as a SSH-string.
*/
int buf_putstring_(const char *fn, unsigned long long line,
struct buf *b, const char *x) {
return buf_putstringlen_(fn, line, b, (unsigned char *)x, str_len(x));
}
/*
Put SSH shared secret (bignum formated into wire format)
*/
int buf_putsharedsecret_(const char *fn, unsigned long long line,
struct buf *b, const unsigned char *x, long long len) {
long long pos;
if (len < 0 || len > 1073741824 || !b || !x) bug_inval_(fn, line);
for (pos = 0; pos < len; ++pos) if (x[pos]) break;
if (x[pos] & 0x80) {
buf_putnum32_(fn, line, b, len - pos + 1);
buf_putnum8_(fn, line, b, 0);
}
else {
buf_putnum32_(fn, line, b, len - pos + 0);
}
return buf_put_(fn, line, b, x + pos, len - pos);
}
/*
Put string 'x' of length 'len' and encode it into base64.
*/
static const unsigned char b64chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int buf_putbase64_(const char *fn, unsigned long long line,
struct buf *b, const unsigned char *x, long long len) {
long long i;
unsigned long long bits = 0, v = 0;
unsigned char ch;
if (len < 0 || len > 1073741824 || !b || !x) bug_inval_(fn, line);
for (i = 0; i < len; ++i) {
v <<= 8; v += x[i]; bits += 8;
while (bits > 6) {
ch = b64chars[((v >> (bits - 6)) & 63)];
buf_putnum8_(fn, line, b, ch);
bits -= 6;
}
}
if (bits) {
v <<= (6 - bits);
ch = b64chars[v & 63];
buf_putnum8_(fn, line, b, ch);
}
while (b->len & 3) {
buf_putnum8_(fn, line, b, '=');
}
return 1;
}
tinyssh-20240101/tinyssh/buf.h 0000664 0000000 0000000 00000005031 14544472107 0016103 0 ustar 00root root 0000000 0000000 /*
20140108
Jan Mojzis
Public domain.
*/
#ifndef _BUF_H____
#define _BUF_H____
#include "crypto_uint8.h"
#include "crypto_uint32.h"
struct buf {
unsigned char *buf;
long long len;
long long alloc;
};
extern void buf_init_(const char *, unsigned long long, struct buf *, unsigned char *, long long);
extern void buf_purge_(const char *, unsigned long long, struct buf *);
extern int buf_ready_(const char *, unsigned long long, struct buf *, long long);
extern int buf_put_(const char *, unsigned long long, struct buf *, const unsigned char *, long long);
extern int buf_puts_(const char *, unsigned long long, struct buf *, const char *);
extern int buf_putzerobytes_(const char *, unsigned long long, struct buf *, long long);
extern int buf_putrandombytes_(const char *, unsigned long long, struct buf *, long long);
extern int buf_putpadding_(const char *, unsigned long long, struct buf *, long long);
extern int buf_putnum32_(const char *, unsigned long long, struct buf *, crypto_uint32);
extern int buf_putnum8_(const char *, unsigned long long, struct buf *, crypto_uint8);
extern int buf_putstringlen_(const char *, unsigned long long, struct buf *, const unsigned char *, long long);
extern int buf_putstring_(const char *, unsigned long long, struct buf *, const char *);
extern int buf_putsharedsecret_(const char *, unsigned long long, struct buf *, const unsigned char *, long long);
extern int buf_putbase64_(const char *, unsigned long long, struct buf *, const unsigned char *, long long);
#define buf_init(a, b, cc) buf_init_(__FILE__, __LINE__, (a), (b), (cc))
#define buf_purge(a) buf_purge_(__FILE__, __LINE__, (a))
#define buf_ready(a, b) buf_ready_(__FILE__, __LINE__, (a), (b))
#define buf_put(a, b, cc) buf_put_(__FILE__, __LINE__, (a), (b), (cc))
#define buf_puts(a, b) buf_puts_(__FILE__, __LINE__, (a), (b))
#define buf_putzerobytes(a, b) buf_putzerobytes_(__FILE__, __LINE__, (a), (b))
#define buf_putrandombytes(a, b) buf_putrandombytes_(__FILE__, __LINE__, (a), (b))
#define buf_putpadding(a, b) buf_putpadding_(__FILE__, __LINE__, (a), (b))
#define buf_putnum32(a, b) buf_putnum32_(__FILE__, __LINE__, (a), (b))
#define buf_putnum8(a, b) buf_putnum8_(__FILE__, __LINE__, (a), (b))
#define buf_putstringlen(a, b, cc) buf_putstringlen_(__FILE__, __LINE__, (a), (b), (cc))
#define buf_putstring(a, b) buf_putstring_(__FILE__, __LINE__, (a), (b))
#define buf_putsharedsecret(a, b, cc) buf_putsharedsecret_(__FILE__, __LINE__, (a), (b), (cc))
#define buf_putbase64(a, b, cc) buf_putbase64_(__FILE__, __LINE__, (a), (b), (cc))
#endif
tinyssh-20240101/tinyssh/bug.h 0000664 0000000 0000000 00000001223 14544472107 0016103 0 ustar 00root root 0000000 0000000 #ifndef _BUG_H____
#define _BUG_H____
#include
#include "global.h"
#include "e.h"
#include "log.h"
#define bug_(a, b) do { log_9_(-1, 0, a, b, 0, 0, 0, 0, 0, 0, 0, 0, 0); global_die(111); } while (0);
#define bug() bug_(__FILE__, __LINE__)
#define bug_nomem() do { errno = ENOMEM; bug(); } while (0);
#define bug_proto() do { errno = EPROTO; bug(); } while (0);
#define bug_inval() do { errno = EINVAL; bug(); } while (0);
#define bug_nomem_(a, b) do { errno = ENOMEM; bug_(a, b); } while (0);
#define bug_proto_(a, b) do { errno = EPROTO; bug_(a, b); } while (0);
#define bug_inval_(a, b) do { errno = EINVAL; bug_(a, b); } while (0);
#endif
tinyssh-20240101/tinyssh/byte.c 0000664 0000000 0000000 00000001263 14544472107 0016270 0 ustar 00root root 0000000 0000000 /* taken from nacl-20110221, from curvecp/byte_copy.c curvecp/byte_isequal.c curvecp/byte_zero.c */
#include "byte.h"
void byte_copy(void *yv,long long ylen,const void *xv)
{
char *y = (char *)yv;
const char *x = (const char *)xv;
while (ylen > 0) { *y++ = *x++; --ylen; }
}
int byte_isequal(const void *yv,long long ylen,const void *xv)
{
const unsigned char *y = (const unsigned char *)yv;
const unsigned char *x = (const unsigned char *)xv;
unsigned char diff = 0;
while (ylen > 0) { diff |= (*y++ ^ *x++); --ylen; }
return (256 - (unsigned int) diff) >> 8;
}
void byte_zero(void *yv,long long ylen)
{
char *y = (char *)yv;
while (ylen > 0) { *y++ = 0; --ylen; }
}
tinyssh-20240101/tinyssh/byte.h 0000664 0000000 0000000 00000000304 14544472107 0016270 0 ustar 00root root 0000000 0000000 #ifndef BYTE_H
#define BYTE_H
extern void byte_zero(void *,long long);
extern void byte_copy(void *,long long,const void *);
extern int byte_isequal(const void *,long long,const void *);
#endif
tinyssh-20240101/tinyssh/channel.c 0000664 0000000 0000000 00000027306 14544472107 0016743 0 ustar 00root root 0000000 0000000 /*
20140124
Jan Mojzis
Public domain.
The 'channel' library is used to handle data from/to SSH channel (rfc4254).
*/
#include
#include
#include
#include
#include
#include
#include
extern char *ptsname(int);
#include "byte.h"
#include "bug.h"
#include "newenv.h"
#include "e.h"
#include "purge.h"
#include "connectioninfo.h"
#include "iptostr.h"
#include "porttostr.h"
#include "buf.h"
#include "str.h"
#include "logsys.h"
#include "loginshell.h"
#include "trymlock.h"
#include "limit.h"
#include "channel.h"
/*
1. channel not open: maxpacket == 0, pid == 0
2. channel open: maxpacket != 0, pid == 0
3. child executed: maxpacket != 0, pid > 0, fd[01] != -1
4. child eof: maxpacket != 0, pid > 0, fd[12] == -1
5. child died: maxpacket != 0, pid == -1
*/
struct channel channel = {0};
/*
The 'channel_open' function opens the channel.
It sets 'localwindow' and maxpacket, values obtained from
from SSH_MSG_CHANNEL_OPEN message.
Function also obtaines connection information and sets
environment variables PATH, SSH_CONNECTION and MAIL.
*/
int channel_open(const char *user, crypto_uint32 id, crypto_uint32 remotewindow, crypto_uint32 maxpacket, crypto_uint32 *localwindow) {
struct buf b = { channel.buf0, 0, CHANNEL_BUFSIZE };
if (!localwindow) bug_inval();
if (!maxpacket) bug_inval();
if (!remotewindow) bug_inval();
if (channel.maxpacket != 0) return 0;
if (channel.pid != 0) return 0;
/* copy user-name */
if (!str_copyn(channel.user, sizeof channel.user, user)) bug_nomem();
/* set id, maxpacket, remotewindow, localwindow */
channel.id = id;
channel.maxpacket = maxpacket;
channel.remotewindow = remotewindow;
channel.localwindow = *localwindow = CHANNEL_BUFSIZE;
/* copy PATH */
if (!newenv_copyenv("PATH")) if (!newenv_env("PATH", "/bin:/usr/bin")) return 0;
/* create env. SSH_CONNECTION */
connectioninfo(channel.localip, channel.localport, channel.remoteip, channel.remoteport);
buf_purge(&b);
buf_puts(&b, channel.remoteip);
buf_puts(&b, " ");
buf_puts(&b, channel.remoteport);
buf_puts(&b, " ");
buf_puts(&b, channel.localip);
buf_puts(&b, " ");
buf_puts(&b, channel.localport);
buf_putnum8(&b, 0);
if (!newenv_env("SSH_CONNECTION", (char *)b.buf)) return 0;
/* create env. MAIL */
#ifdef _PATH_MAILDIR
buf_purge(&b);
buf_puts(&b, _PATH_MAILDIR);
buf_puts(&b, "/");
buf_puts(&b, user);
buf_putnum8(&b, 0);
if (!newenv_env("MAIL", (char *)b.buf)) return 0;
#endif
purge(channel.buf0, sizeof channel.buf0);
return 1;
}
/*
The 'channel_openterminal' function opens terminal,
sets environment variable TERM and initial terminal windowsize.
*/
int channel_openterminal(const char *name, crypto_uint32 a, crypto_uint32 b, crypto_uint32 x, crypto_uint32 y) {
if (channel.maxpacket == 0) bug_proto();
if (channel.pid != 0) bug_proto();
if (channel.flagterminal == 1) bug_proto();
if (!channel_openpty(&channel.master, &channel.slave)) return 0;
if (!newenv_env("TERM", name)) return 0;
channel.flagterminal = 1;
channel.a = a;
channel.b = b;
channel.x = x;
channel.y = y;
return 1;
}
/*
The 'channel_ptyresize' function sets new
terminal windowsize.
*/
void channel_ptyresize(crypto_uint32 a, crypto_uint32 b, crypto_uint32 x, crypto_uint32 y) {
struct winsize w;
if (channel.maxpacket == 0) bug_proto();
if (channel.pid <= 0) bug_proto();
if (!a && !b && !x && !y) return;
w.ws_col = a;
w.ws_row = b;
w.ws_xpixel = x;
w.ws_ypixel = y;
ioctl(channel.fd0, TIOCSWINSZ, &w);
}
/*
The 'channel_env' adds new environment variable
sent from client.
*/
int channel_env(const char *x, const char *y) {
if (channel.maxpacket == 0) bug_proto();
if (channel.pid != 0) bug_proto();
if (!x || !y) bug_inval();
return newenv_lowenv(x, y);
}
/*
The 'channel_exec' function executes new process.
If terminal is requsted, than users shell is executed,
if exec is requested, than command 'cmd' is executed.
Process is executed under appropriate users UID.
*/
int channel_exec(const char *cmd) {
char *run[4];
char *shell;
char *name;
int fd[3];
char ln[NAME_MAX + 2];
if (channel.maxpacket == 0) bug_proto();
if (channel.pid != 0 ) bug_proto();
if (channel.flagterminal) {
channel.pid = channel_forkpty(fd, channel.master, channel.slave);
if (channel.pid > 0) {
name = ptsname(fd[0]);
if (!name) bug();
if (!str_copyn(channel.termname, sizeof channel.termname, name)) bug_nomem();
}
}
else {
channel.pid = channel_fork(fd);
}
if (channel.pid == -1) return 0;
if (channel.pid == 0) {
logsys_login(channel.user, channel.remoteip, 0, 0);
if (!channel_droppriv(channel.user, &shell)) _exit(111);
if (cmd) {
run[0] = shell;
run[1] = (char *)"-c";
run[2] = (char *)cmd;
run[3] = 0;
}
else {
if (!loginshell(ln, sizeof ln, shell)) bug();
run[0] = ln;
run[1] = 0;
}
signal(SIGPIPE, SIG_DFL);
newenv_exec(shell, run);
_exit(111);
}
channel.fd0 = fd[0];
channel.fd1 = fd[1];
channel.fd2 = fd[2];
channel.len0 = 0;
newenv_purge();
if (channel.flagterminal && channel.pid > 0) channel_ptyresize(channel.a, channel.b, channel.x, channel.y);
return 1;
}
/*
The 'channel_put' function adds data from
client to childs buffer.
*/
void channel_put(unsigned char *buf, long long len) {
if (channel.maxpacket == 0) bug_proto();
if (channel.pid <= 0 ) bug_proto();
if (channel.fd0 == -1) bug_proto();
if (!buf || len < 0) bug_inval();
if (channel.len0 + len > CHANNEL_BUFSIZE) bug_nomem();
byte_copy(channel.buf0 + channel.len0, len, buf);
channel.len0 += len;
channel.localwindow -= len;
}
/*
The 'channel_puteof' function adds information
that remote side closed standard output.
*/
void channel_puteof(void) {
if (channel.maxpacket == 0) bug_proto();
if (channel.pid == 0) bug_proto();
if (channel.fd0 == -1) bug_proto();
channel.remoteeof = 1;
if (channel.len0 == 0 && !channel.flagterminal) {
close(channel.fd0);
channel.fd0 = -1;
}
}
/*
The 'channel_putisready' function returns
if child is ready accept data.
*/
int channel_putisready(void) {
if (channel.maxpacket == 0) return 0;
if (channel.pid <= 0) return 0;
if (channel.fd0 == -1) return 0;
return (CHANNEL_BUFSIZE > channel.len0);
}
/*
The 'channel_read' function reads
data from childs standard output.
*/
long long channel_read(unsigned char *buf, long long len) {
long long r;
if (channel.maxpacket == 0) bug_proto();
if (channel.pid <= 0 ) bug_proto();
if (channel.fd1 == -1) bug_proto();
if (!buf || len < 0) bug_inval();
if (channel.remotewindow <= 0) return 0;
r = len;
if (r > 1048576) r = 1048576;
if (r > channel.remotewindow) r = channel.remotewindow;
r = read(channel.fd1, buf, r);
if (r == -1) {
if (errno == EINTR) return 0;
if (errno == EAGAIN) return 0;
if (errno == EWOULDBLOCK) return 0;
}
if (r <= 0) {
channel.fd1 = -1;
return 0;
}
channel.remotewindow -= r;
return r;
}
/*
The 'channel_extendedread' function reads
data from childs error output.
*/
long long channel_extendedread(unsigned char *buf, long long len) {
long long r;
if (channel.maxpacket == 0) bug_proto();
if (channel.pid <= 0 ) bug_proto();
if (channel.fd2 == -1) bug_proto();
if (!buf || len < 0) bug_inval();
if (channel.remotewindow <= 0) return 0;
r = len;
if (r > 1048576) r = 1048576;
if (r > channel.remotewindow) r = channel.remotewindow;
r = read(channel.fd2, buf, r);
if (r == -1) {
if (errno == EINTR) return 0;
if (errno == EAGAIN) return 0;
if (errno == EWOULDBLOCK) return 0;
}
if (r <= 0) {
channel.fd2 = -1;
return 0;
}
channel.remotewindow -= r;
return r;
}
/*
The 'channel_readisready' function returns
if we can read data from childs standard output.
*/
int channel_readisready(void) {
if (channel.maxpacket == 0 || channel.pid == 0) return 0;
if (channel.fd1 == -1) return 0;
return (channel.remotewindow > 0);
}
/*
The 'channel_extendedreadisready' function returns
if we can read data from childs error output.
*/
int channel_extendedreadisready(void) {
if (channel.maxpacket == 0 || channel.pid == 0) return 0;
if (channel.fd2 == -1) return 0;
return (channel.remotewindow > 0);
}
/*
The 'channel_write' function writes
data to childs standard input.
*/
int channel_write(void) {
long long w;
if (channel.maxpacket == 0) bug_proto();
if (channel.pid <= 0 ) bug_proto();
if (channel.fd0 == -1) bug_proto();
if (channel.len0 <= 0) return 1;
w = write(channel.fd0, channel.buf0, channel.len0);
if (w == -1) {
if (errno == EINTR) return 1;
if (errno == EAGAIN) return 1;
if (errno == EWOULDBLOCK) return 1;
}
if (w <= 0) {
channel.fd0 = -1;
return 0;
}
byte_copy(channel.buf0, channel.len0 - w, channel.buf0 + w);
purge(channel.buf0 + channel.len0 - w, w);
channel.len0 -= w;
if (channel.remoteeof && channel.len0 == 0 && !channel.flagterminal) { close(channel.fd0); channel.fd0 = -1; }
return 1;
}
/*
The 'channel_writeisready' function returns
if we can write data to childs standard input.
*/
int channel_writeisready(void) {
if (channel.maxpacket == 0) return 0;
if (channel.pid <= 0 ) return 0;
if (channel.fd0 == -1) return 0;
return (channel.len0 > 0);
}
/*
The 'channel_iseof' function returns
if child closed standard and error output.
*/
int channel_iseof(void) {
if (channel.maxpacket == 0) return 0;
if (channel.pid == 0) return 0;
if (channel.pid == -1) return 1;
return (channel.fd1 == -1 && channel.fd2 == -1);
}
/*
The 'channel_waitnohang' function returns
if child exited or was killed.
*/
int channel_waitnohang(int *s, int *e) {
int r, status;
if (!s || !e) bug_inval();
if (channel.maxpacket == 0) bug_proto();
if (channel.pid <= 0 ) return 0;
do {
r = waitpid(channel.pid, &status, WNOHANG);
} while (r == -1 && errno == EINTR);
if (r <= 0) return 0;
if (channel.flagterminal) logsys_logout(channel.user, channel.remoteip, channel.termname, channel.pid);
if (WIFEXITED(status)) {
*e = WEXITSTATUS(status);
*s = 0;
}
else if (WIFSIGNALED(status)) {
*e = 0;
*s = WTERMSIG(status);
}
else {
*e = *s = -1;
}
channel.pid = -1;
return 1;
}
/*
Remove sentitive data from allocated memory.
*/
void channel_purge(void) {
purge(&channel, sizeof channel);
trymunlock(&channel, sizeof channel);
}
/*
Initialize channel structure.
*/
void channel_init(void) {
trymlock(&channel, sizeof channel);
purge(&channel, sizeof channel);
channel.maxpacket = 0;
channel.remoteeof = 0;
channel.len0 = 0;
channel.pid = 0;
channel.flagterminal = 0;
channel.master = -1;
channel.slave = -1;
}
int channel_getfd0(void) { return channel.fd0; }
int channel_getfd1(void) { return channel.fd1; }
int channel_getfd2(void) { return channel.fd2; }
long long channel_getlen0(void) { return channel.len0; }
crypto_uint32 channel_getid(void) { return channel.id; }
crypto_uint32 channel_getlocalwindow(void) { return channel.localwindow; }
void channel_incrementremotewindow(crypto_uint32 x) { channel.remotewindow += x; }
void channel_incrementlocalwindow(crypto_uint32 x) { channel.localwindow += x; }
tinyssh-20240101/tinyssh/channel.h 0000664 0000000 0000000 00000005156 14544472107 0016747 0 ustar 00root root 0000000 0000000 #ifndef _CHANNEL_H____
#define _CHANNEL_H____
#include "crypto_uint32.h"
#include "iptostr.h"
#include "porttostr.h"
#include "limit.h"
#define CHANNEL_BUFSIZE 131072
struct channel {
/* channel */
crypto_uint32 maxpacket;
crypto_uint32 id;
crypto_uint32 localwindow;
crypto_uint32 remotewindow;
/* child */
unsigned char buf0[CHANNEL_BUFSIZE];
long long len0;
long long pid;
int fd0;
int fd1;
int fd2;
int status;
/* ip */
char localip[IPTOSTR_LEN];
char localport[PORTTOSTR_LEN];
char remoteip[IPTOSTR_LEN];
char remoteport[PORTTOSTR_LEN];
/* terminal */
char user[LOGIN_NAME_MAX + 1];
char termname[TTY_NAME_MAX + 1];
int flagterminal;
int master;
int slave;
int a;
int b;
int x;
int y;
/* channel */
int remoteeof;
};
extern struct channel channel;
/* channel_drop.c */
extern int channel_droppriv(char *, char **);
/* channel_fork.c */
extern long long channel_fork(int *);
/* channel_forkpty.c */
extern long long channel_forkpty(int *, int, int);
extern int channel_openpty(int *, int *);
/* channel.c */
extern void channel_purge(void);
extern int channel_open(const char *, crypto_uint32, crypto_uint32, crypto_uint32, crypto_uint32 *);
extern int channel_openterminal(const char *, crypto_uint32, crypto_uint32, crypto_uint32, crypto_uint32);
extern void channel_ptyresize(crypto_uint32, crypto_uint32, crypto_uint32, crypto_uint32);
extern int channel_env(const char *, const char *);
extern int channel_exec(const char *);
extern void channel_put(unsigned char *, long long);
extern void channel_puteof(void);
extern int channel_putisready(void);
extern long long channel_read(unsigned char *, long long);
extern long long channel_extendedread(unsigned char *, long long);
extern int channel_readisready(void);
extern int channel_extendedreadisready(void);
extern int channel_write(void);
extern int channel_writeisready(void);
extern int channel_iseof(void);
extern int channel_waitnohang(int *, int *);
extern void channel_purge(void);
extern void channel_init(void);
extern int channel_getfd0(void);
extern int channel_getfd1(void);
extern int channel_getfd2(void);
extern long long channel_getlen0(void);
extern crypto_uint32 channel_getid(void);
extern crypto_uint32 channel_getlocalwindow(void);
extern void channel_incrementremotewindow(crypto_uint32);
extern void channel_incrementlocalwindow(crypto_uint32);
/* channel subsystem.c */
#define CHANNEL_SUBSYSTEM_MAX 64
extern int channel_subsystem_add(const char *);
extern char *channel_subsystem_get(const char *);
extern void channel_subsystem_log(void);
#endif
tinyssh-20240101/tinyssh/channel_drop.c 0000664 0000000 0000000 00000002000 14544472107 0017747 0 ustar 00root root 0000000 0000000 /*
20140129
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "dropuidgid.h"
#include "newenv.h"
#include "channel.h"
int channel_droppriv(char *user, char **shell) {
struct passwd *pw;
char *name;
pw = getpwnam(user);
if (!pw) return 0;
if (isatty(0)) {
name = ttyname(0);
if (!name) return 0;
if (!newenv_env("SSH_TTY", name)) return 0;
/* setowner */
if (chown(name, pw->pw_uid, pw->pw_gid) == -1) return 0;
if (chmod(name, 0600) == -1) return 0;
}
/* drop privileges */
if (!dropuidgid(pw->pw_name, pw->pw_uid, pw->pw_gid)) return 0;
if (chdir(pw->pw_dir) == -1) return 0;
if (!newenv_env("HOME", pw->pw_dir)) return 0;
if (!newenv_env("USER", pw->pw_name)) return 0;
if (!newenv_env("LOGNAME", pw->pw_name)) return 0;
if (!newenv_env("LOGIN", pw->pw_name)) return 0;
if (!newenv_env("SHELL", pw->pw_shell)) return 0;
*shell = pw->pw_shell;
return 1;
}
tinyssh-20240101/tinyssh/channel_fork.c 0000664 0000000 0000000 00000002135 14544472107 0017755 0 ustar 00root root 0000000 0000000 /*
20140129
Jan Mojzis
Public domain.
*/
#include
#include "blocking.h"
#include "open.h"
#include "channel.h"
/*
The 'channel_fork' function is used to create a new process.
Function creates 3 pipes from/to child:
fd[0] is pipe to childs standard input
fd[1] is pipe from childs standard output
fd[2] is pipe from childs error output
Function returns also childs PID.
*/
long long channel_fork(int fd[3]) {
int pi[2], pa[3], ch[3];
long long i, pid;
for (i = 0; i < 3; ++i) pa[i] = ch[i] = fd[i] = -1;
for (i = 0; i < 3; ++i) {
if (open_pipe(pi) == -1) goto cleanup;
pa[i] = pi[i ? 0 : 1];
ch[i] = pi[i ? 1 : 0];
}
pid = fork();
if (pid == -1) goto cleanup;
if (pid == 0) {
for (i = 0; i < 3; ++i) {
close(pa[i]); close(i);
blocking_enable(ch[i]);
if (dup(ch[i]) != i) _exit(111);
}
return 0;
}
for (i = 0; i < 3; ++i) {
close(ch[i]);
fd[i] = pa[i];
}
return pid;
cleanup:
for (i = 0; i < 3; ++i) { close(pa[i]); close(ch[i]); }
return -1;
}
tinyssh-20240101/tinyssh/channel_forkpty.c 0000664 0000000 0000000 00000007542 14544472107 0020521 0 ustar 00root root 0000000 0000000 /*
20150212
Jan Mojzis
Public domain.
*/
#include
#if defined(sun) || defined(__hpux)
#include
#endif
#include
#include
#include
#include
#include
extern char *ptsname(int);
extern int grantpt(int);
extern int unlockpt(int);
#include "hasopenpty.h"
#ifdef HASOPENPTY
extern int openpty(int *, int *, char *, struct termios *, struct winsize *);
#endif
#include "haslogintty.h"
#ifdef HASLOGINTTY
extern int login_tty(int);
#endif
#include "e.h"
#include "coe.h"
#include "blocking.h"
#include "global.h"
#include "channel.h"
static int _login_tty(int fd) {
char *name;
setsid();
#ifdef TIOCSCTTY
if (ioctl(fd, TIOCSCTTY, (char *)0) == -1) return -1;
#endif
name = ttyname(fd);
if (!name) return -1;
#ifndef TIOCSCTTY
if (fd != 0) close(0);
if (fd != 1) close(1);
if (fd != 2) close(2);
close(open(name, O_RDWR));
#endif
if (dup2(fd, 0) == -1) return -1;
if (dup2(fd, 1) == -1) return -1;
if (dup2(fd, 2) == -1) return -1;
if (fd > 2) close(fd);
return 0;
}
static int _openpty(int *amaster, int *aslave) {
int master = -1, slave = -1;
char *slave_name;
static const char *fn[] = { "/dev/ptmx", "/dev/ptc", 0 };
long long i;
for (i = 0; fn[i]; ++i) {
master = open(fn[i], O_RDWR | O_NOCTTY);
if (master != -1) break;
}
if (master == -1) return -1;
if (grantpt(master) == -1) { close(master); return -1; }
if (unlockpt(master) == -1) { close(master); return -1; }
slave_name = ptsname(master);
if (!slave_name) { close(master); return -1; }
slave = open(slave_name, O_RDWR | O_NOCTTY);
if (slave == -1) { close(master); return -1; }
#if defined(sun) || defined(__hpux)
ioctl(slave, I_PUSH, "ptem");
ioctl(slave, I_PUSH, "ldterm");
#endif
#if defined(sun)
ioctl(slave, I_PUSH, "ttcompat");
#endif
if (amaster) *amaster = master;
if (aslave) *aslave = slave;
return 0;
}
int channel_openpty(int *amaster, int *aslave) {
#ifdef HASOPENPTY
if (openpty(amaster, aslave, 0, 0, 0) == -1) return 0;
#else
if (_openpty(amaster, aslave) == -1) return 0;
#endif
if (!ttyname(*aslave)) {
close(*amaster);
close(*aslave);
return 0;
}
return 1;
}
/*
The 'channel_forkpty' function is used to create a new process
operating in a pseudoterminal. Function sets 3 integers in 'fd[3]':
fd[0] and fd[1] is pseudoterminal fd
fd[2] is always -1
*/
long long channel_forkpty(int fd[3], int master, int slave) {
long long pid, r;
char ch;
int pi[2];
if (!ttyname(slave)) return -1;
if (pipe(pi) == -1) return -1;
fd[0] = fd[1] = master;
fd[2] = -1;
pid = fork();
switch (pid) {
case -1:
close(pi[0]);
close(pi[1]);
close(slave);
close(master);
return -1;
case 0:
close(master);
close(pi[0]);
#ifdef HASLOGINTTY
if (login_tty(slave) == -1) global_die(111);
#else
if (_login_tty(slave) == -1) global_die(111);
#endif
/* Trigger a read event on the other side of the pipe. */
do {
r = write(pi[1], "", 1);
} while (r == -1 && errno == EINTR);
close(pi[1]);
return 0;
default:
close(pi[1]);
coe_enable(master);
blocking_disable(master);
/*
Wait until child calls login_tty(slave), so that we can safely
close(slave). Fixes race condition between close(slave) in parent
and login_tty(slave) in child process.
*/
do {
r = read(pi[0], &ch, sizeof ch);
} while (r == -1 && errno == EINTR);
close(pi[0]);
close(slave);
return pid;
}
}
tinyssh-20240101/tinyssh/channel_subsystem.c 0000664 0000000 0000000 00000001742 14544472107 0021055 0 ustar 00root root 0000000 0000000 /*
20150114
Jan Mojzis
Public domain.
*/
#include "str.h"
#include "log.h"
#include "e.h"
#include "channel.h"
static long long channel_subsystem_pos = 0;
static char *channel_subsystem[CHANNEL_SUBSYSTEM_MAX] = {0};
int channel_subsystem_add(const char *x) {
if (channel_subsystem_pos >= CHANNEL_SUBSYSTEM_MAX) return 0;
channel_subsystem[channel_subsystem_pos++] = (char *)x;
return 1;
}
char *channel_subsystem_get(const char *x) {
long long len, i;
if (!x) return 0;
len = str_len(x);
for (i = 0; i < CHANNEL_SUBSYSTEM_MAX; ++i) {
if (!channel_subsystem[i]) break;
if (str_start(channel_subsystem[i], x) && (channel_subsystem[i][len] == '='))
return channel_subsystem[i] + len + 1;
}
return 0;
}
void channel_subsystem_log(void) {
long long i;
for (i = 0; i < CHANNEL_SUBSYSTEM_MAX; ++i) {
if (!channel_subsystem[i]) break;
log_d3("subsystem: ", channel_subsystem[i], " registered");
}
}
tinyssh-20240101/tinyssh/coe.c 0000664 0000000 0000000 00000000575 14544472107 0016100 0 ustar 00root root 0000000 0000000 /*
20140414
Jan Mojzis
Public domain.
*/
#include
#include "coe.h"
/*
The 'coe_enable(fd)' function enables
the close-on-exec flag on a file-descriptor 'fd'.
*/
void coe_enable(int fd) {
fcntl(fd, F_SETFD, 1);
}
/*
The 'coe_disable(fd)' function disables
the close-on-exec flag on a file-descriptor 'fd'.
*/
void coe_disable(int fd) {
fcntl(fd, F_SETFD, 0);
}
tinyssh-20240101/tinyssh/coe.h 0000664 0000000 0000000 00000000152 14544472107 0016074 0 ustar 00root root 0000000 0000000 #ifndef _COE_H____
#define _COE_H____
extern void coe_enable(int);
extern void coe_disable(int);
#endif
tinyssh-20240101/tinyssh/connectioninfo.c 0000664 0000000 0000000 00000007037 14544472107 0020345 0 ustar 00root root 0000000 0000000 /*
20140131
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include
#include "e.h"
#include "byte.h"
#include "iptostr.h"
#include "porttostr.h"
#include "env.h"
#include "str.h"
#include "connectioninfo.h"
/*
The connectioninfo_fromfd function gets
informations about TCP connection from
getsockname(), getpeername() libc functions.
*/
static int connectioninfo_fromfd(char *localip, char *localport, char *remoteip, char *remoteport) {
long long i;
struct sockaddr_storage sa;
socklen_t salen;
int fd = 0;
unsigned char ip[16];
unsigned char port[2];
char *ipstr[2];
char *portstr[2];
int (*op[2])(int, struct sockaddr *, socklen_t *) = { getsockname, getpeername };
ipstr[0] = localip; portstr[0] = localport;
ipstr[1] = remoteip; portstr[1] = remoteport;
for (i = 0; i < 2; ++i) {
salen = sizeof sa;
if (op[i](fd, (struct sockaddr *)&sa, &salen) == -1) return 0;
if (sa.ss_family == PF_INET) {
struct sockaddr_in *sin = (struct sockaddr_in *)&sa;
byte_copy(ip, 12, "\0\0\0\0\0\0\0\0\0\0\377\377");
byte_copy(ip + 12, 4, &sin->sin_addr);
byte_copy(port, 2, &sin->sin_port);
}
#ifdef PF_INET6
else if (sa.ss_family == PF_INET6) {
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;
byte_copy(ip, 16, &sin6->sin6_addr);
byte_copy(port, 2, &sin6->sin6_port);
}
#endif
else {
errno = EPROTONOSUPPORT;
return 0;
}
iptostr(ipstr[i], ip);
porttostr(portstr[i], port);
}
return 1;
}
static int env(char *y, long long ylen, const char *e) {
char *x;
x = env_get(e);
if (!x) return 0;
if (!str_copyn(y, ylen, x)) return 0;
return 1;
}
/*
The connectioninfo_fromtcpserverenv function gets
informations about TCP connection from environment.
*/
static int connectioninfo_fromtcpserverenv(char *localip, char *localport, char *remoteip, char *remoteport) {
if (!env(localip, IPTOSTR_LEN, "TCPLOCALIP")) return 0;
if (!env(localport, PORTTOSTR_LEN, "TCPLOCALPORT")) return 0;
if (!env(remoteip, IPTOSTR_LEN, "TCPREMOTEIP")) return 0;
if (!env(remoteport, PORTTOSTR_LEN, "TCPREMOTEPORT")) return 0;
return 1;
}
/*
The connectioninfo_fromcurvecpserverenv function gets
informations about CurveCP connection from environment.
*/
static int connectioninfo_fromcurvecpserverenv(char *localip, char *localport, char *remoteip, char *remoteport) {
if (!env(localip, IPTOSTR_LEN, "CURVECPLOCALIP")) return 0;
if (!env(localport, PORTTOSTR_LEN, "CURVECPLOCALPORT")) return 0;
if (!env(remoteip, IPTOSTR_LEN, "CURVECPREMOTEIP")) return 0;
if (!env(remoteport, PORTTOSTR_LEN, "CURVECPREMOTEPORT")) return 0;
return 1;
}
#define unknown "unknown"
#define port0 "0"
/*
The connectioninfo function gets informations about TCP/CurveCP connection.
*/
void connectioninfo(char *localip, char *localport, char *remoteip, char *remoteport) {
if (connectioninfo_fromtcpserverenv(localip, localport, remoteip, remoteport)) return;
if (connectioninfo_fromcurvecpserverenv(localip, localport, remoteip, remoteport)) return;
if (connectioninfo_fromfd(localip, localport, remoteip, remoteport)) return;
byte_copy(localip, sizeof unknown, unknown);
byte_copy(remoteip, sizeof unknown, unknown);
byte_copy(localport, sizeof port0, port0);
byte_copy(remoteport, sizeof port0, port0);
return;
}
tinyssh-20240101/tinyssh/connectioninfo.h 0000664 0000000 0000000 00000000201 14544472107 0020334 0 ustar 00root root 0000000 0000000 #ifndef _CONNECTIONINFO_H____
#define _CONNECTIONINFO_H____
extern void connectioninfo(char *, char *, char *, char *);
#endif
tinyssh-20240101/tinyssh/die.c 0000664 0000000 0000000 00000000776 14544472107 0016076 0 ustar 00root root 0000000 0000000 #include "global.h"
#include "log.h"
#include "die.h"
void die_usage(const char *x) {
log_u1(x);
global_die(100);
}
void die_fatal_(const char *fn, unsigned long long line, const char *trouble, const char *d, const char *f) {
if (d) {
if (f) log_9_(1, 0, fn, line, trouble, " ", d, "/", f, 0, 0, 0, 0);
else log_9_(1, 0, fn, line, trouble, " ", d, 0, 0, 0, 0, 0, 0);
}
else {
log_9_(1, 0, fn, line, trouble, 0, 0, 0, 0, 0, 0, 0, 0);
}
global_die(111);
}
tinyssh-20240101/tinyssh/die.h 0000664 0000000 0000000 00000000403 14544472107 0016066 0 ustar 00root root 0000000 0000000 #ifndef _DIE_H____
#define _DIE_H____
extern void die_usage(const char *);
extern void die_fatal_(const char *, unsigned long long, const char *, const char *, const char *);
#define die_fatal(a, b, cc) die_fatal_(__FILE__, __LINE__, (a), (b), (cc))
#endif
tinyssh-20240101/tinyssh/dropuidgid.c 0000664 0000000 0000000 00000001524 14544472107 0017457 0 ustar 00root root 0000000 0000000 /*
20140420
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "e.h"
#include "dropuidgid.h"
/*
The 'dropuidgid' function is used to drop root privileges.
If the process has appropriate permittions, the 'dropuidgid'
function sets user ID and group ID of calling process to
uid and gid.
The 'dropuidgid' function also initialize supplementary group IDs.
*/
int dropuidgid(const char *name, uid_t uid, gid_t gid) {
/* we can change group only as the root */
if (geteuid() == 0) {
if (setgid(gid) == -1) return 0;
if (getgid() != gid) { errno = EPERM; return 0; }
if (name) if (initgroups(name, gid) == -1) return 0;
}
if (geteuid() != uid) {
if (setuid(uid) == -1) return 0;
if (getuid() != uid) { errno = EPERM; return 0; }
}
return 1;
}
tinyssh-20240101/tinyssh/dropuidgid.h 0000664 0000000 0000000 00000000207 14544472107 0017461 0 ustar 00root root 0000000 0000000 #ifndef _DROPUIDGID_H____
#define _DROPUIDGID_H____
#include
extern int dropuidgid(const char *, uid_t, gid_t);
#endif
tinyssh-20240101/tinyssh/e.c 0000664 0000000 0000000 00000007030 14544472107 0015547 0 ustar 00root root 0000000 0000000 /* taken from nacl-20110221, from curvecp/e.c */
#include "e.h"
#define X(e,s) if (i == e) return s;
const char *e_str(int i)
{
X(0,"no error");
X(EINTR,"interrupted system call")
X(ENOMEM,"out of memory")
X(ENOENT,"file does not exist")
X(ETXTBSY,"text busy")
X(EIO,"input/output error")
X(EEXIST,"file already exists")
X(ETIMEDOUT,"timed out")
X(EINPROGRESS,"operation in progress")
X(EAGAIN,"temporary failure")
X(EWOULDBLOCK,"input/output would block")
X(EPIPE,"broken pipe")
X(EPERM,"permission denied")
X(EACCES,"access denied")
X(ENODEV,"device not configured")
X(EPROTO,"protocol error")
X(EISDIR,"is a directory")
X(ESRCH,"no such process")
X(E2BIG,"argument list too long")
X(ENOEXEC,"exec format error")
X(EBADF,"file descriptor not open")
X(ECHILD,"no child processes")
X(EDEADLK,"operation would cause deadlock")
X(EFAULT,"bad address")
X(ENOTBLK,"not a block device")
X(EBUSY,"device busy")
X(EXDEV,"cross-device link")
X(ENODEV,"device does not support operation")
X(ENOTDIR,"not a directory")
X(EINVAL,"invalid argument")
X(ENFILE,"system cannot open more files")
X(EMFILE,"process cannot open more files")
X(ENOTTY,"not a tty")
X(EFBIG,"file too big")
X(ENOSPC,"out of disk space")
X(ESPIPE,"unseekable descriptor")
X(EROFS,"read-only file system")
X(EMLINK,"too many links")
X(EDOM,"input out of range")
X(ERANGE,"output out of range")
X(EALREADY,"operation already in progress")
X(ENOTSOCK,"not a socket")
X(EDESTADDRREQ,"destination address required")
X(EMSGSIZE,"message too long")
X(EPROTOTYPE,"incorrect protocol type")
X(ENOPROTOOPT,"protocol not available")
X(EPROTONOSUPPORT,"protocol not supported")
X(ESOCKTNOSUPPORT,"socket type not supported")
X(EOPNOTSUPP,"operation not supported")
X(EPFNOSUPPORT,"protocol family not supported")
X(EAFNOSUPPORT,"address family not supported")
X(EADDRINUSE,"address already used")
X(EADDRNOTAVAIL,"address not available")
X(ENETDOWN,"network down")
X(ENETUNREACH,"network unreachable")
X(ENETRESET,"network reset")
X(ECONNABORTED,"connection aborted")
X(ECONNRESET,"connection reset")
X(ENOBUFS,"out of buffer space")
X(EISCONN,"already connected")
X(ENOTCONN,"not connected")
X(ESHUTDOWN,"socket shut down")
X(ETOOMANYREFS,"too many references")
X(ECONNREFUSED,"connection refused")
X(ELOOP,"symbolic link loop")
X(ENAMETOOLONG,"file name too long")
X(EHOSTDOWN,"host down")
X(EHOSTUNREACH,"host unreachable")
X(ENOTEMPTY,"directory not empty")
X(EPROCLIM,"too many processes")
X(EUSERS,"too many users")
X(EDQUOT,"disk quota exceeded")
X(ESTALE,"stale NFS file handle")
X(EREMOTE,"too many levels of remote in path")
X(EBADRPC,"RPC structure is bad")
X(ERPCMISMATCH,"RPC version mismatch")
X(EPROGUNAVAIL,"RPC program unavailable")
X(EPROGMISMATCH,"program version mismatch")
X(EPROCUNAVAIL,"bad procedure for program")
X(ENOLCK,"no locks available")
X(ENOSYS,"system call not available")
X(EFTYPE,"bad file type")
X(EAUTH,"authentication error")
X(ENEEDAUTH,"not authenticated")
X(ENOSTR,"not a stream device")
X(ETIME,"timer expired")
X(ENOSR,"out of stream resources")
X(ENOMSG,"no message of desired type")
X(EBADMSG,"bad message type")
X(EIDRM,"identifier removed")
X(ENONET,"machine not on network")
X(EREMOTE,"object not local")
X(ENOLINK,"link severed")
X(EADV,"advertise error")
X(ESRMNT,"srmount error")
X(ECOMM,"communication error")
X(EMULTIHOP,"multihop attempted")
X(EREMCHG,"remote address changed")
return "unknown error";
}
tinyssh-20240101/tinyssh/e.h 0000664 0000000 0000000 00000015506 14544472107 0015563 0 ustar 00root root 0000000 0000000 #ifndef E_H
#define E_H
#include
extern const char *e_str(int);
#ifndef EPERM
#define EPERM (-5001)
#endif
#ifndef ENOENT
#define ENOENT (-5002)
#endif
#ifndef ESRCH
#define ESRCH (-5003)
#endif
#ifndef EINTR
#define EINTR (-5004)
#endif
#ifndef EIO
#define EIO (-5005)
#endif
#ifndef ENXIO
#define ENXIO (-5006)
#endif
#ifndef E2BIG
#define E2BIG (-5007)
#endif
#ifndef ENOEXEC
#define ENOEXEC (-5008)
#endif
#ifndef EBADF
#define EBADF (-5009)
#endif
#ifndef ECHILD
#define ECHILD (-5010)
#endif
#ifndef EAGAIN
#define EAGAIN (-5011)
#endif
#ifndef EWOULDBLOCK
#define EWOULDBLOCK (-7011)
#endif
#ifndef ENOMEM
#define ENOMEM (-5012)
#endif
#ifndef EACCES
#define EACCES (-5013)
#endif
#ifndef EFAULT
#define EFAULT (-5014)
#endif
#ifndef ENOTBLK
#define ENOTBLK (-5015)
#endif
#ifndef EBUSY
#define EBUSY (-5016)
#endif
#ifndef EEXIST
#define EEXIST (-5017)
#endif
#ifndef EXDEV
#define EXDEV (-5018)
#endif
#ifndef ENODEV
#define ENODEV (-5019)
#endif
#ifndef ENOTDIR
#define ENOTDIR (-5020)
#endif
#ifndef EISDIR
#define EISDIR (-5021)
#endif
#ifndef EINVAL
#define EINVAL (-5022)
#endif
#ifndef ENFILE
#define ENFILE (-5023)
#endif
#ifndef EMFILE
#define EMFILE (-5024)
#endif
#ifndef ENOTTY
#define ENOTTY (-5025)
#endif
#ifndef ETXTBSY
#define ETXTBSY (-5026)
#endif
#ifndef EFBIG
#define EFBIG (-5027)
#endif
#ifndef ENOSPC
#define ENOSPC (-5028)
#endif
#ifndef ESPIPE
#define ESPIPE (-5029)
#endif
#ifndef EROFS
#define EROFS (-5030)
#endif
#ifndef EMLINK
#define EMLINK (-5031)
#endif
#ifndef EPIPE
#define EPIPE (-5032)
#endif
#ifndef EDOM
#define EDOM (-5033)
#endif
#ifndef ERANGE
#define ERANGE (-5034)
#endif
#ifndef EDEADLK
#define EDEADLK (-5035)
#endif
#ifndef EDEADLOCK
#define EDEADLOCK (-7035)
#endif
#ifndef ENAMETOOLONG
#define ENAMETOOLONG (-5036)
#endif
#ifndef ENOLCK
#define ENOLCK (-5037)
#endif
#ifndef ENOSYS
#define ENOSYS (-5038)
#endif
#ifndef ENOTEMPTY
#define ENOTEMPTY (-5039)
#endif
#ifndef ELOOP
#define ELOOP (-5040)
#endif
#ifndef ENOMSG
#define ENOMSG (-5042)
#endif
#ifndef EIDRM
#define EIDRM (-5043)
#endif
#ifndef ECHRNG
#define ECHRNG (-5044)
#endif
#ifndef EL2NSYNC
#define EL2NSYNC (-5045)
#endif
#ifndef EL3HLT
#define EL3HLT (-5046)
#endif
#ifndef EL3RST
#define EL3RST (-5047)
#endif
#ifndef ELNRNG
#define ELNRNG (-5048)
#endif
#ifndef EUNATCH
#define EUNATCH (-5049)
#endif
#ifndef ENOCSI
#define ENOCSI (-5050)
#endif
#ifndef EL2HLT
#define EL2HLT (-5051)
#endif
#ifndef EBADE
#define EBADE (-5052)
#endif
#ifndef EBADR
#define EBADR (-5053)
#endif
#ifndef EXFULL
#define EXFULL (-5054)
#endif
#ifndef ENOANO
#define ENOANO (-5055)
#endif
#ifndef EBADRQC
#define EBADRQC (-5056)
#endif
#ifndef EBADSLT
#define EBADSLT (-5057)
#endif
#ifndef EBFONT
#define EBFONT (-5059)
#endif
#ifndef ENOSTR
#define ENOSTR (-5060)
#endif
#ifndef ENODATA
#define ENODATA (-5061)
#endif
#ifndef ETIME
#define ETIME (-5062)
#endif
#ifndef ENOSR
#define ENOSR (-5063)
#endif
#ifndef ENONET
#define ENONET (-5064)
#endif
#ifndef ENOPKG
#define ENOPKG (-5065)
#endif
#ifndef EREMOTE
#define EREMOTE (-5066)
#endif
#ifndef ENOLINK
#define ENOLINK (-5067)
#endif
#ifndef EADV
#define EADV (-5068)
#endif
#ifndef ESRMNT
#define ESRMNT (-5069)
#endif
#ifndef ECOMM
#define ECOMM (-5070)
#endif
#ifndef EPROTO
#define EPROTO (-5071)
#endif
#ifndef EMULTIHOP
#define EMULTIHOP (-5072)
#endif
#ifndef EDOTDOT
#define EDOTDOT (-5073)
#endif
#ifndef EBADMSG
#define EBADMSG (-5074)
#endif
#ifndef EOVERFLOW
#define EOVERFLOW (-5075)
#endif
#ifndef ENOTUNIQ
#define ENOTUNIQ (-5076)
#endif
#ifndef EBADFD
#define EBADFD (-5077)
#endif
#ifndef EREMCHG
#define EREMCHG (-5078)
#endif
#ifndef ELIBACC
#define ELIBACC (-5079)
#endif
#ifndef ELIBBAD
#define ELIBBAD (-5080)
#endif
#ifndef ELIBSCN
#define ELIBSCN (-5081)
#endif
#ifndef ELIBMAX
#define ELIBMAX (-5082)
#endif
#ifndef ELIBEXEC
#define ELIBEXEC (-5083)
#endif
#ifndef EILSEQ
#define EILSEQ (-5084)
#endif
#ifndef ERESTART
#define ERESTART (-5085)
#endif
#ifndef ESTRPIPE
#define ESTRPIPE (-5086)
#endif
#ifndef EUSERS
#define EUSERS (-5087)
#endif
#ifndef ENOTSOCK
#define ENOTSOCK (-5088)
#endif
#ifndef EDESTADDRREQ
#define EDESTADDRREQ (-5089)
#endif
#ifndef EMSGSIZE
#define EMSGSIZE (-5090)
#endif
#ifndef EPROTOTYPE
#define EPROTOTYPE (-5091)
#endif
#ifndef ENOPROTOOPT
#define ENOPROTOOPT (-5092)
#endif
#ifndef EPROTONOSUPPORT
#define EPROTONOSUPPORT (-5093)
#endif
#ifndef ESOCKTNOSUPPORT
#define ESOCKTNOSUPPORT (-5094)
#endif
#ifndef EOPNOTSUPP
#define EOPNOTSUPP (-5095)
#endif
#ifndef EPFNOSUPPORT
#define EPFNOSUPPORT (-5096)
#endif
#ifndef EAFNOSUPPORT
#define EAFNOSUPPORT (-5097)
#endif
#ifndef EADDRINUSE
#define EADDRINUSE (-5098)
#endif
#ifndef EADDRNOTAVAIL
#define EADDRNOTAVAIL (-5099)
#endif
#ifndef ENETDOWN
#define ENETDOWN (-5100)
#endif
#ifndef ENETUNREACH
#define ENETUNREACH (-5101)
#endif
#ifndef ENETRESET
#define ENETRESET (-5102)
#endif
#ifndef ECONNABORTED
#define ECONNABORTED (-5103)
#endif
#ifndef ECONNRESET
#define ECONNRESET (-5104)
#endif
#ifndef ENOBUFS
#define ENOBUFS (-5105)
#endif
#ifndef EISCONN
#define EISCONN (-5106)
#endif
#ifndef ENOTCONN
#define ENOTCONN (-5107)
#endif
#ifndef ESHUTDOWN
#define ESHUTDOWN (-5108)
#endif
#ifndef ETOOMANYREFS
#define ETOOMANYREFS (-5109)
#endif
#ifndef ETIMEDOUT
#define ETIMEDOUT (-5110)
#endif
#ifndef ECONNREFUSED
#define ECONNREFUSED (-5111)
#endif
#ifndef EHOSTDOWN
#define EHOSTDOWN (-5112)
#endif
#ifndef EHOSTUNREACH
#define EHOSTUNREACH (-5113)
#endif
#ifndef EALREADY
#define EALREADY (-5114)
#endif
#ifndef EINPROGRESS
#define EINPROGRESS (-5115)
#endif
#ifndef ESTALE
#define ESTALE (-5116)
#endif
#ifndef EUCLEAN
#define EUCLEAN (-5117)
#endif
#ifndef ENOTNAM
#define ENOTNAM (-5118)
#endif
#ifndef ENAVAIL
#define ENAVAIL (-5119)
#endif
#ifndef EISNAM
#define EISNAM (-5120)
#endif
#ifndef EREMOTEIO
#define EREMOTEIO (-5121)
#endif
#ifndef EDQUOT
#define EDQUOT (-5122)
#endif
#ifndef ENOMEDIUM
#define ENOMEDIUM (-5123)
#endif
#ifndef EMEDIUMTYPE
#define EMEDIUMTYPE (-5124)
#endif
#ifndef ECANCELED
#define ECANCELED (-5125)
#endif
#ifndef ENOKEY
#define ENOKEY (-5126)
#endif
#ifndef EKEYEXPIRED
#define EKEYEXPIRED (-5127)
#endif
#ifndef EKEYREVOKED
#define EKEYREVOKED (-5128)
#endif
#ifndef EKEYREJECTED
#define EKEYREJECTED (-5129)
#endif
#ifndef EOWNERDEAD
#define EOWNERDEAD (-5130)
#endif
#ifndef ENOTRECOVERABLE
#define ENOTRECOVERABLE (-5131)
#endif
#ifndef ERFKILL
#define ERFKILL (-5132)
#endif
#ifndef EPROCLIM
#define EPROCLIM (-6067)
#endif
#ifndef EBADRPC
#define EBADRPC (-6072)
#endif
#ifndef ERPCMISMATCH
#define ERPCMISMATCH (-6073)
#endif
#ifndef EPROGUNAVAIL
#define EPROGUNAVAIL (-6074)
#endif
#ifndef EPROGMISMATCH
#define EPROGMISMATCH (-6075)
#endif
#ifndef EPROCUNAVAIL
#define EPROCUNAVAIL (-6076)
#endif
#ifndef EFTYPE
#define EFTYPE (-6079)
#endif
#ifndef EAUTH
#define EAUTH (-6080)
#endif
#ifndef ENEEDAUTH
#define ENEEDAUTH (-6081)
#endif
#ifndef ENOATTR
#define ENOATTR (-6087)
#endif
#ifndef ENOTCAPABLE
#define ENOTCAPABLE (-6093)
#endif
#endif
tinyssh-20240101/tinyssh/env.c 0000664 0000000 0000000 00000000676 14544472107 0016124 0 ustar 00root root 0000000 0000000 #include "str.h"
#include "env.h"
/*
The 'env_get(name)' function returns the value of the first environment
variable whose name is 'name', or 0 if there is no such variable.
*/
char *env_get(const char *name) {
long long len, i;
if (!name) return 0;
len = str_len(name);
for (i = 0; environ[i]; ++i)
if (str_start(environ[i], name) && (environ[i][len] == '='))
return environ[i] + len + 1;
return 0;
}
tinyssh-20240101/tinyssh/env.h 0000664 0000000 0000000 00000000420 14544472107 0016114 0 ustar 00root root 0000000 0000000 #ifndef _ENV_H____
#define _ENV_H____
/*
The environment 'environ', is a 0-terminated array
of 0-terminated strings, called environment variables.
Each environment variable is of the form name=value.
*/
extern char **environ;
extern char *env_get(const char *);
#endif
tinyssh-20240101/tinyssh/getln.c 0000664 0000000 0000000 00000002160 14544472107 0016433 0 ustar 00root root 0000000 0000000 /*
20140323
Jan Mojzis
Public domain.
*/
#include
#include
#include "e.h"
#include "getln.h"
static int getch(int fd, char *x) {
int r;
struct pollfd p;
for (;;) {
r = read(fd, x, 1);
if (r == -1) {
if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) {
p.fd = fd;
p.events = POLLIN | POLLERR;
poll(&p, 1, -1);
continue;
}
}
break;
}
return r;
}
/*
The function 'getln' reads line from filedescriptor 'fd' into
buffer 'xv' of length 'xmax'.
*/
int getln(int fd, void *xv, long long xmax) {
long long xlen;
int r;
char ch;
char *x = (char *)xv;
if (xmax < 1) { errno = EINVAL; return -1; }
x[0] = 0;
if (fd < 0) { errno = EBADF; return -1; }
xlen = 0;
for (;;) {
if (xlen >= xmax - 1) { x[xmax - 1] = 0; errno = ENOMEM; return -1; }
r = getch(fd, &ch);
if (r != 1) break;
if (ch == 0) ch = '\n';
x[xlen++] = ch;
if (ch == '\n') break;
}
x[xlen] = 0;
return r;
}
tinyssh-20240101/tinyssh/getln.h 0000664 0000000 0000000 00000000135 14544472107 0016440 0 ustar 00root root 0000000 0000000 #ifndef _GETLN_H____
#define _GETLN_H____
extern int getln(int, void *, long long);
#endif
tinyssh-20240101/tinyssh/global.c 0000664 0000000 0000000 00000002537 14544472107 0016572 0 ustar 00root root 0000000 0000000 /*
20140214
Jan Mojzis
Public domain.
The 'global' library is used for global memory
initializition and global memory cleanup.
The 'global' library also has space
for 2 versatile buffers.
*/
#include
#include "newenv.h"
#include "channel.h"
#include "packet.h"
#include "sshcrypto.h"
#include "purge.h"
#include "trymlock.h"
#include "global.h"
unsigned char global_bspace1[GLOBAL_BSIZE];
unsigned char global_bspace2[GLOBAL_BSIZE];
/*
Initialize memory space.
*/
void global_init(void) {
packet_init();
channel_init();
newenv_init();
sshcrypto_init();
trymlock(global_bspace1, sizeof global_bspace1);
trymlock(global_bspace2, sizeof global_bspace2);
purge(global_bspace1, sizeof global_bspace1);
purge(global_bspace2, sizeof global_bspace2);
}
/*
Remove sentitive data from allocated memory.
*/
void global_purge(void) {
unsigned char stack[4096];
purge(stack, sizeof stack);
packet_purge();
channel_purge();
newenv_purge();
sshcrypto_purge();
purge(global_bspace1, sizeof global_bspace1);
purge(global_bspace2, sizeof global_bspace2);
trymunlock(global_bspace1, sizeof global_bspace1);
trymunlock(global_bspace2, sizeof global_bspace2);
}
/*
Remove sentitive data from allocated memory
and exit with status 'x'.
*/
void global_die(int x) {
global_purge();
_exit(x);
}
tinyssh-20240101/tinyssh/global.h 0000664 0000000 0000000 00000000423 14544472107 0016567 0 ustar 00root root 0000000 0000000 #ifndef _GLOBAL_H____
#define _GLOBAL_H____
#define GLOBAL_BSIZE 65536
extern unsigned char global_bspace1[GLOBAL_BSIZE];
extern unsigned char global_bspace2[GLOBAL_BSIZE];
extern void global_init(void);
extern void global_purge(void);
extern void global_die(int);
#endif
tinyssh-20240101/tinyssh/iptostr.c 0000664 0000000 0000000 00000005573 14544472107 0017041 0 ustar 00root root 0000000 0000000 /*
20130604
Jan Mojzis
Public domain.
*/
#include "byte.h"
#include "iptostr.h"
static char *iptostr4(char *, const unsigned char *);
static char *iptostr6(char *, const unsigned char *);
/*
The 'iptostr(strbuf,ip)' function converts IP address 'ip'
from network byte order into the 0-terminated string.
The 'ip' length is always 16 bytes. The caller must
allocate at least IPTOSTR_LEN bytes for 'strbuf'.
*/
char *iptostr(char *strbuf, const unsigned char *ip) {
static char staticbuf[IPTOSTR_LEN];
if (!strbuf) strbuf = staticbuf; /* not thread-safe */
if (byte_isequal("\0\0\0\0\0\0\0\0\0\0\377\377", 12, ip)) {
return iptostr4(strbuf, ip + 12);
}
return iptostr6(strbuf, ip);
}
/* convert IPv4 address */
static char *iptostr4(char *strbuf, const unsigned char *ip) {
long long i, len = 0;
unsigned long long num;
for (i = 3; i >= 0; --i) {
num = ip[i];
do {
num /= 10; ++len;
} while (num);
if (i > 0) ++len;
}
strbuf += len;
for (i = 3; i >= 0; --i) {
num = ip[i];
do {
*--strbuf = '0' + (num % 10);
num /= 10;
} while (num);
if (i > 0) *--strbuf = '.';
}
while (len < IPTOSTR_LEN) strbuf[len++] = 0;
return strbuf;
}
/*
The 'ip' is splited into 8 16-bit blocks and
the 'countz' function counts successive zeros and
searches for largest zero-block.
'first' ... first position of the zero-block
'last' ... last position of the zero-block
*/
static void countz(long long *first, long long *last, const unsigned long long *ip) {
long long i, j, e;
long long count[8];
for (i = 7; i >= 0; --i) count[i] = 0;
e = 8;
for (i = 7; i >= 0; --i) {
if (!ip[i]) {
for (j = i; j < e; ++j) ++count[j];
}
else {
e = i;
}
}
e = 0; j = 0;
for (i = 7; i >= 0; --i) {
if (count[i]) {
if (count[i] >= e) { e = count[i]; j = i; }
}
}
*first = j - count[j] + 1;
*last = j;
}
/* convert IPv6 address */
static char *iptostr6(char *strbuf, const unsigned char *ip) {
long long first, last, i;
unsigned long long ip2[8];
char *s = strbuf;
for (i = 7; i >= 0; --i) {
ip2[i] = ip[2 * i];
ip2[i] <<= 8;
ip2[i] += ip[2 * i + 1];
}
countz(&first, &last, ip2);
strbuf += IPTOSTR_LEN - 1;
*strbuf = 0;
for (i = 7; i >= 0; --i) {
if (i <= last && i >= first && first != last) {
if (i == last) *--strbuf = ':';
if (i == 7) *--strbuf = ':';
continue;
}
do {
*--strbuf = "0123456789abcdef"[ip2[i] & 15];
ip2[i] >>= 4;
} while (ip2[i]);
if (i > 0) *--strbuf = ':';
}
i = strbuf - s;
byte_copy(s, IPTOSTR_LEN - i, strbuf);
byte_zero(s + IPTOSTR_LEN - i, i);
return s;
}
tinyssh-20240101/tinyssh/iptostr.h 0000664 0000000 0000000 00000000204 14544472107 0017030 0 ustar 00root root 0000000 0000000 #ifndef _IPTOSTR_H____
#define _IPTOSTR_H____
#define IPTOSTR_LEN 46
extern char *iptostr(char *, const unsigned char *);
#endif
tinyssh-20240101/tinyssh/limit.h 0000664 0000000 0000000 00000000423 14544472107 0016445 0 ustar 00root root 0000000 0000000 #ifndef _LIMIT_H____
#define _LIMIT_H____
#include "haslimits.h"
#ifdef HASLIMITS
#include
#endif
#ifndef LOGIN_NAME_MAX
#define LOGIN_NAME_MAX 256
#endif
#ifndef NAME_MAX
#define NAME_MAX 255
#endif
#ifndef TTY_NAME_MAX
#define TTY_NAME_MAX 32
#endif
#endif
tinyssh-20240101/tinyssh/load.c 0000664 0000000 0000000 00000000474 14544472107 0016247 0 ustar 00root root 0000000 0000000 /* taken from nacl-20110221, from curvecp/load.c */
#include
#include "readall.h"
#include "open.h"
#include "e.h"
#include "load.h"
int load(const char *fn,void *x,long long xlen)
{
int fd;
int r;
fd = open_read(fn);
if (fd == -1) return -1;
r = readall(fd,x,xlen);
close(fd);
return r;
}
tinyssh-20240101/tinyssh/load.h 0000664 0000000 0000000 00000000127 14544472107 0016247 0 ustar 00root root 0000000 0000000 #ifndef LOAD_H
#define LOAD_H
extern int load(const char *,void *,long long);
#endif
tinyssh-20240101/tinyssh/log.c 0000664 0000000 0000000 00000010073 14544472107 0016105 0 ustar 00root root 0000000 0000000 /*
20140202
Jan Mojzis
Public domain.
The 'log' library is used to write log messages
on standard error output including source file,
function and line number.
Non-printable characters are replaced using '?'.
The 'log' library also supports syslog.
*/
#include
#include "writeall.h"
#include "randommod.h"
#include "purge.h"
#include "numtostr.h"
#include "e.h"
#include "log.h"
static const char *logtext = "x";
static char logstring[9] = "________";
int loglevel = 1;
static int logflagfnln = 1;
static int logflagsyslog = 0;
static char chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRTSUVWXYZ0123456789";
void log_init(int level, const char *text, int line, int flagsyslog) {
long long i;
loglevel = level;
logtext = text;
logflagfnln = line;
for (i = 0; i < sizeof logstring; ++i) {
logstring[i] = chars[randommod(sizeof chars - 1)];
}
logstring[sizeof logstring - 1] = 0;
if (flagsyslog) {
openlog(text, 0, LOG_DAEMON);
logflagsyslog = 1;
}
errno = 0;
}
char *log_string(void) {
return logstring;
}
static char buf[257];
static long long buflen = 0;
static void flush(void) {
if (logflagsyslog) {
buf[buflen] = 0;
syslog(LOG_INFO, "%s", buf);
}
else {
writeall(2, buf, buflen);
}
buflen = 0;
purge(buf, buflen);
}
static void outs(const char *x) {
long long i;
for(i = 0; x[i]; ++i) {
if (buflen >= sizeof buf - 1) flush();
if (x[i] == '\n') buf[buflen++] = '\n';
else if (x[i] < 32) buf[buflen++] = '?';
else if (x[i] > 126) buf[buflen++] = '?';
else buf[buflen++] = x[i];
}
}
static void outnum(unsigned long long n) {
char b[NUMTOSTR_LEN];
outs(numtostr(b, n));
}
void log_9_(
int level
,int ignoreerrno
,const char *f
,unsigned long long l
,const char *s0
,const char *s1
,const char *s2
,const char *s3
,const char *s4
,const char *s5
,const char *s6
,const char *s7
,const char *s8
)
{
const char *s[9];
long long i;
const char *m;
if (level > loglevel) return;
s[0] = s0; s[1] = s1; s[2] = s2; s[3] = s3;
s[4] = s4; s[5] = s5; s[6] = s6; s[7] = s7;
s[8] = s8;
switch (level) {
case -1:
m = "BUG";
break;
case 0:
m = "usage";
break;
case 1:
m = "fatal";
break;
case 2:
if (!ignoreerrno) m = "warning";
else m = "info";
break;
case 3:
m = "debug";
break;
case 4:
m = "tracing";
break;
default:
m = "unknown";
break;
}
/* name: session: level: message (error){file:line} */
/* 'name:' */
do {
if (level == 0) break; /* don't print in usage level */
if (logflagsyslog) break; /* don't print in syslog mode */
outs(logtext); outs(": ");
} while (0);
/* 'session:' */
do {
if (level == 0) break; /* don't print in usage level */
if (!logflagfnln) break; /* don't print when disabled */
outs(logstring); outs(": ");
} while (0);
/* 'level:' */
do {
if (level == 0) break; /* don't print in usage level */
outs(m); outs(": ");
} while (0);
/* 'message' */
for (i = 0; i < 9 && s[i]; ++i) outs(s[i]);
outs(" ");
/* '(error)' */
do {
if (!errno) break; /* don't print when errno = 0 */
if (ignoreerrno) break; /* don't print when disabled */
outs("("); outs(e_str(errno)); outs(")");
} while (0);
/* {file:line} */
do {
if (level == 0) break; /* don't print in usage level */
if (!f) break; /* don't print when no f */
if (!l) break; /* don't print when no l */
if (!logflagfnln && level != -1) break; /* don't print when disabled */
outs("{"); outs(f); outs(":"); outnum(l); outs("}");
} while (0);
outs("\n");
flush();
return;
}
tinyssh-20240101/tinyssh/log.h 0000664 0000000 0000000 00000010462 14544472107 0016114 0 ustar 00root root 0000000 0000000 #ifndef _LOG_H____
#define _LOG_H____
extern void log_init(int, const char *, int, int);
extern char *log_string(void);
extern int loglevel;
extern void log_9_(
int,
int,
const char *,
unsigned long long,
const char *,
const char *,
const char *,
const char *,
const char *,
const char *,
const char *,
const char *,
const char *);
/* usage */
#define log_u(a,b,c,d,e,f,g,h,i,j,k) \
do { \
if (loglevel < 0) break; \
log_9_(0,1,a,b,c,d,e,f,g,h,i,j,k); \
} while (0)
#define log_u9(a,b,c,d,e,f,g,h,i) log_u(__FILE__,__LINE__,a,b,c,d,e,f,g,h,i)
#define log_u8(a,b,c,d,e,f,g,h) log_u9(a,b,c,d,e,f,g,h,0)
#define log_u7(a,b,c,d,e,f,g) log_u8(a,b,c,d,e,f,g,0)
#define log_u6(a,b,c,d,e,f) log_u7(a,b,c,d,e,f,0)
#define log_u5(a,b,c,d,e) log_u6(a,b,c,d,e,0)
#define log_u4(a,b,c,d) log_u5(a,b,c,d,0)
#define log_u3(a,b,c) log_u4(a,b,c,0)
#define log_u2(a,b) log_u3(a,b,0)
#define log_u1(a) log_u2(a,0)
/* fatal */
#define log_f(a,b,c,d,e,f,g,h,i,j,k) \
do { \
if (loglevel < 1) break; \
log_9_(1,0,a,b,c,d,e,f,g,h,i,j,k); \
} while (0)
#define log_f9(a,b,c,d,e,f,g,h,i) log_f(__FILE__,__LINE__,a,b,c,d,e,f,g,h,i)
#define log_f8(a,b,c,d,e,f,g,h) log_f9(a,b,c,d,e,f,g,h,0)
#define log_f7(a,b,c,d,e,f,g) log_f8(a,b,c,d,e,f,g,0)
#define log_f6(a,b,c,d,e,f) log_f7(a,b,c,d,e,f,0)
#define log_f5(a,b,c,d,e) log_f6(a,b,c,d,e,0)
#define log_f4(a,b,c,d) log_f5(a,b,c,d,0)
#define log_f3(a,b,c) log_f4(a,b,c,0)
#define log_f2(a,b) log_f3(a,b,0)
#define log_f1(a) log_f2(a,0)
/* warning */
#define log_w(a,b,c,d,e,f,g,h,i,j,k) \
do { \
if (loglevel < 2) break; \
log_9_(2,0,a,b,c,d,e,f,g,h,i,j,k); \
} while (0)
#define log_w9(a,b,c,d,e,f,g,h,i) log_w(__FILE__,__LINE__,a,b,c,d,e,f,g,h,i)
#define log_w8(a,b,c,d,e,f,g,h) log_w9(a,b,c,d,e,f,g,h,0)
#define log_w7(a,b,c,d,e,f,g) log_w8(a,b,c,d,e,f,g,0)
#define log_w6(a,b,c,d,e,f) log_w7(a,b,c,d,e,f,0)
#define log_w5(a,b,c,d,e) log_w6(a,b,c,d,e,0)
#define log_w4(a,b,c,d) log_w5(a,b,c,d,0)
#define log_w3(a,b,c) log_w4(a,b,c,0)
#define log_w2(a,b) log_w3(a,b,0)
#define log_w1(a) log_w2(a,0)
/* info */
#define log_i(a,b,c,d,e,f,g,h,i,j,k) \
do { \
if (loglevel < 2) break; \
log_9_(2,1,a,b,c,d,e,f,g,h,i,j,k); \
} while (0)
#define log_i9(a,b,c,d,e,f,g,h,i) log_i(__FILE__,__LINE__,a,b,c,d,e,f,g,h,i)
#define log_i8(a,b,c,d,e,f,g,h) log_i9(a,b,c,d,e,f,g,h,0)
#define log_i7(a,b,c,d,e,f,g) log_i8(a,b,c,d,e,f,g,0)
#define log_i6(a,b,c,d,e,f) log_i7(a,b,c,d,e,f,0)
#define log_i5(a,b,c,d,e) log_i6(a,b,c,d,e,0)
#define log_i4(a,b,c,d) log_i5(a,b,c,d,0)
#define log_i3(a,b,c) log_i4(a,b,c,0)
#define log_i2(a,b) log_i3(a,b,0)
#define log_i1(a) log_i2(a,0)
/* debug */
#define log_d(a,b,c,d,e,f,g,h,i,j,k) \
do { \
if (loglevel < 3) break; \
log_9_(3,1,a,b,c,d,e,f,g,h,i,j,k); \
} while (0)
#define log_d9(a,b,c,d,e,f,g,h,i) log_d(__FILE__,__LINE__,a,b,c,d,e,f,g,h,i)
#define log_d8(a,b,c,d,e,f,g,h) log_d9(a,b,c,d,e,f,g,h,0)
#define log_d7(a,b,c,d,e,f,g) log_d8(a,b,c,d,e,f,g,0)
#define log_d6(a,b,c,d,e,f) log_d7(a,b,c,d,e,f,0)
#define log_d5(a,b,c,d,e) log_d6(a,b,c,d,e,0)
#define log_d4(a,b,c,d) log_d5(a,b,c,d,0)
#define log_d3(a,b,c) log_d4(a,b,c,0)
#define log_d2(a,b) log_d3(a,b,0)
#define log_d1(a) log_d2(a,0)
/* tracing */
#define log_t(a,b,c,d,e,f,g,h,i,j,k) \
do { \
if (loglevel < 4) break; \
log_9_(4,1,a,b,c,d,e,f,g,h,i,j,k); \
} while (0)
#define log_t9(a,b,c,d,e,f,g,h,i) log_t(__FILE__,__LINE__,a,b,c,d,e,f,g,h,i)
#define log_t8(a,b,c,d,e,f,g,h) log_t9(a,b,c,d,e,f,g,h,0)
#define log_t7(a,b,c,d,e,f,g) log_t8(a,b,c,d,e,f,g,0)
#define log_t6(a,b,c,d,e,f) log_t7(a,b,c,d,e,f,0)
#define log_t5(a,b,c,d,e) log_t6(a,b,c,d,e,0)
#define log_t4(a,b,c,d) log_t5(a,b,c,d,0)
#define log_t3(a,b,c) log_t4(a,b,c,0)
#define log_t2(a,b) log_t3(a,b,0)
#define log_t1(a) log_t2(a,0)
#endif
tinyssh-20240101/tinyssh/loginshell.c 0000664 0000000 0000000 00000001202 14544472107 0017456 0 ustar 00root root 0000000 0000000 /*
20140429
Jan Mojzis
Public domain.
*/
#include "e.h"
#include "loginshell.h"
/*
The 'loginshell()' function converts shell path
into -shell name. For example:
'/bin/sh' -> '-sh'
'/usr/pkg/bin/bash' -> '-bash'
*/
int loginshell(char *out, long long outlen, const char *in) {
long long len, pos = -1;
if (!out || !in || outlen < 2) { errno = EINVAL; return 0; }
for (len = 0; in[len]; ++len) if (in[len] == '/') pos = len;
in += pos + 1;
len -= pos + 1;
if (len > outlen - 2) len = outlen - 2; /* truncate name */
*out++ = '-';
while (len > 0) { *out++ = *in++; --len; }
*out = 0;
return 1;
}
tinyssh-20240101/tinyssh/loginshell.h 0000664 0000000 0000000 00000000165 14544472107 0017472 0 ustar 00root root 0000000 0000000 #ifndef _LOGINSHELL_H____
#define _LOGINSHELL_H____
extern int loginshell(char *, long long, const char *);
#endif
tinyssh-20240101/tinyssh/logsys.c 0000664 0000000 0000000 00000010315 14544472107 0016643 0 ustar 00root root 0000000 0000000 /*
20140212
Jan Mojzis
Public domain.
The 'logsys' library is used to login recording
and logout recording in the system using
utmp/utmpx ...
Portability - HELL !!
*/
/*
tested on:
FreeBSD 9.2
OpenBSD 5.3
NetBSD 6.1.2
Linux Debian 7.0
SunOS 5.11
*/
#include
#include
#include
#include
#include
#include "hasutilh.h"
#ifdef HASUTILH
#include
#endif
#include "hasutmpx.h"
#ifdef HASUTMPX
#include
#endif
#include "hasutmpxupdwtmpx.h"
#include "hasutmpxsyslen.h"
#include "hasutmpxaddrv6.h"
#include "hasutmp.h"
#ifdef HASUTMP
#include
#endif
#include "hasutmpname.h"
#include "hasutmppid.h"
#include "hasutmptime.h"
#include "hasutmptv.h"
#include "hasutmptype.h"
#include "hasutmphost.h"
#include "hasutmpuser.h"
#include "hasutmplogwtmp.h"
#include "hasutmploginlogout.h"
#include "hasutmpaddrv6.h"
#include "str.h"
#include "byte.h"
#include "logsys.h"
static void logsys_utmpx(const char *user, const char *host, const char *name, long long pid, int flaglogin) {
#ifdef HASUTMPX
struct timeval tv;
struct utmpx ut;
byte_zero(&ut, sizeof ut);
/* line */
if (!name) name = ttyname(0);
if (!name) return;
if (str_start(name, "/dev/")) name += 5;
str_copyn(ut.ut_line, sizeof ut.ut_line, name);
/* host */
if (flaglogin)
str_copyn(ut.ut_host, sizeof ut.ut_host, host);
else
byte_zero(ut.ut_host, sizeof ut.ut_host);
#ifdef HASUTMPXSYSLEN
ut.ut_syslen = str_len(ut.ut_host) + 1;
#endif
#ifdef HASUTMPXADDRV6
if (inet_pton(AF_INET6, ut.ut_host, &ut.ut_addr_v6) <= 0)
inet_pton(AF_INET, ut.ut_host, &ut.ut_addr_v6[0]) ;
#endif
/* user */
if (flaglogin)
str_copyn(ut.ut_user, sizeof ut.ut_user, user);
else
byte_zero(ut.ut_user, sizeof ut.ut_user);
gettimeofday(&tv, 0);
ut.ut_tv.tv_sec = tv.tv_sec;
ut.ut_tv.tv_usec = tv.tv_usec;
/* pid */
if (pid == 0) pid = getpid();
ut.ut_pid = pid;
/* type */
if (flaglogin) ut.ut_type = USER_PROCESS;
else ut.ut_type = DEAD_PROCESS;
/* update utmpx */
setutxent();
pututxline(&ut);
endutxent();
/* update wtmpx */
#ifdef HASUTMPXUPDWTMPX
#if defined(_PATH_WTMPX)
updwtmpx(_PATH_WTMPX, &ut);
#elif defined (WTMPX_FILE)
updwtmpx(WTMPX_FILE, &ut);
#endif
#endif
#endif
}
static void logsys_utmp(const char *user, const char *host, const char *name, long long pid, int flaglogin) {
#ifdef HASUTMP
struct timeval tv;
struct utmp ut;
byte_zero(&ut, sizeof ut);
/* line */
if (!name) name = ttyname(0);
if (!name) return;
if (str_start(name, "/dev/")) name += 5;
str_copyn(ut.ut_line, sizeof ut.ut_line, name);
/* host */
#ifdef HASUTMPHOST
str_copyn(ut.ut_host, sizeof ut.ut_host, host);
# ifdef HASUTMPADDRV6
if (inet_pton(AF_INET6, ut.ut_host, &ut.ut_addr_v6) <= 0)
inet_pton(AF_INET, ut.ut_host, &ut.ut_addr_v6[0]) ;
# endif
#endif
/* user */
#ifdef HASUTMPNAME
str_copyn(ut.ut_name, sizeof ut.ut_name, user);
#endif
#ifdef HASUTMPUSER
str_copyn(ut.ut_user, sizeof ut.ut_user, user);
#endif
/* time */
gettimeofday(&tv, 0);
#ifdef HASUTMPTIME
ut.ut_time = tv.tv_sec;
#endif
#ifdef HASUTMPTV
ut.ut_tv.tv_sec = tv.tv_sec;
ut.ut_tv.tv_usec = tv.tv_usec;
#endif
/* pid */
#ifdef HASUTMPPID
if (pid == 0) pid = getpid();
ut.ut_pid = pid;
#endif
/* type */
#ifdef HASUTMPTYPE
if (flaglogin) ut.ut_type = USER_PROCESS;
else ut.ut_type = DEAD_PROCESS;
#endif
if (flaglogin) {
#ifdef HASUTMPLOGINLOGOUT
login(&ut);
#else
setutent();
pututline(&ut);
endutent();
#endif
}
else {
#ifdef HASUTMPLOGINLOGOUT
logout(ut.ut_line);
#else
setutent();
pututline(&ut);
endutent();
#endif
#if defined(HASUTMPLOGWTMP)
logwtmp(ut.ut_line, "", "");
#endif
}
#endif
}
void logsys_login(const char *user, const char *host, const char *name, long long pid) {
logsys_utmp(user, host, name, pid, 1);
logsys_utmpx(user, host, name, pid, 1);
}
void logsys_logout(const char *user, const char *host, const char *name, long long pid) {
logsys_utmp(user, host, name, pid, 0);
logsys_utmpx(user, host, name, pid, 0);
}
tinyssh-20240101/tinyssh/logsys.h 0000664 0000000 0000000 00000000334 14544472107 0016650 0 ustar 00root root 0000000 0000000 /* Public domain. */
#ifndef _LOGSYS_H____
#define _LOGSYS_H____
void logsys_login(const char *, const char *, const char *, long long);
void logsys_logout(const char *, const char *, const char *, long long);
#endif
tinyssh-20240101/tinyssh/main.h 0000664 0000000 0000000 00000000310 14544472107 0016246 0 ustar 00root root 0000000 0000000 #ifndef _MAIN_H____
#define _MAIN_H____
extern int main_tinysshd(int, char **, const char *);
extern int main_tinysshd_printkey(int, char **);
extern int main_tinysshd_makekey(int, char **);
#endif
tinyssh-20240101/tinyssh/main_tinysshd.c 0000664 0000000 0000000 00000026322 14544472107 0020201 0 ustar 00root root 0000000 0000000 /*
20140107
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include
#include "blocking.h"
#include "ssh.h"
#include "purge.h"
#include "open.h"
#include "load.h"
#include "e.h"
#include "byte.h"
#include "buf.h"
#include "packet.h"
#include "channel.h"
#include "log.h"
#include "sshcrypto.h"
#include "subprocess.h"
#include "global.h"
#include "connectioninfo.h"
#include "die.h"
#include "str.h"
#include "main.h"
static unsigned int cryptotypeselected = sshcrypto_TYPENEWCRYPTO | sshcrypto_TYPEPQCRYPTO;
static int flagverbose = 1;
static int fdwd;
static int flaglogger = 0;
static const char *customcmd = 0;
static int flagnoneauth = 0;
static struct buf b1 = {global_bspace1, 0, sizeof global_bspace1};
static struct buf b2 = {global_bspace2, 0, sizeof global_bspace2};
static void timeout(int x) {
errno = x = ETIMEDOUT;
die_fatal("closing connection", 0, 0);
}
static int selfpipe[2] = { -1, -1 };
static void trigger(int x) {
errno = 0;
x = write(selfpipe[1], "", 1);
}
int main_tinysshd(int argc, char **argv, const char *binaryname) {
char *x;
const char *keydir = 0;
long long i;
struct pollfd p[6];
struct pollfd *q;
struct pollfd *watch0;
struct pollfd *watch1;
struct pollfd *watchtochild;
struct pollfd *watchfromchild1;
struct pollfd *watchfromchild2;
struct pollfd *watchselfpipe;
int exitsignal, exitcode;
long long binarynamelen = str_len(binaryname);
const char *usage;
signal(SIGPIPE, SIG_IGN);
signal(SIGALRM, timeout);
log_init(0, binaryname, 0, 0);
if (str_equaln(binaryname, binarynamelen, "tinysshnoneauthd")) {
usage = "usage: tinysshnoneauthd [options] keydir";
}
else {
usage = "usage: tinysshd [options] keydir";
}
if (argc < 2) die_usage(usage);
if (!argv[0]) die_usage(usage);
for (;;) {
if (!argv[1]) break;
if (argv[1][0] != '-') break;
x = *++argv;
if (x[0] == '-' && x[1] == 0) break;
if (x[0] == '-' && x[1] == '-' && x[2] == 0) break;
while (*++x) {
if (*x == 'q') { flagverbose = 0; continue; }
if (*x == 'Q') { flagverbose = 1; continue; }
if (*x == 'v') { ++flagverbose; if (flagverbose >= 4) flagverbose = 4; continue; }
if (*x == 'o') { cryptotypeselected |= sshcrypto_TYPEOLDCRYPTO; continue; }
if (*x == 'O') { cryptotypeselected &= ~sshcrypto_TYPEOLDCRYPTO; continue; }
if (*x == 's') { cryptotypeselected |= sshcrypto_TYPENEWCRYPTO; continue; }
if (*x == 'S') { cryptotypeselected &= ~sshcrypto_TYPENEWCRYPTO; continue; }
if (*x == 'p') { cryptotypeselected |= sshcrypto_TYPEPQCRYPTO; continue; }
if (*x == 'P') { cryptotypeselected &= ~sshcrypto_TYPEPQCRYPTO; continue; }
if (*x == 'l') { flaglogger = 1; continue; }
if (*x == 'L') { flaglogger = 0; continue; }
if (*x == 'x') {
if (x[1]) { channel_subsystem_add(x + 1); break; }
if (argv[1]) { channel_subsystem_add(*++argv); break; }
}
if (*x == 'e') {
if (x[1]) { customcmd = x + 1; break; }
if (argv[1]) { customcmd = *++argv; break; }
}
die_usage(usage);
}
}
keydir = *++argv; if (!keydir) die_usage(usage);
log_init(flagverbose, binaryname, 1, flaglogger);
if (str_equaln(binaryname, binarynamelen, "tinysshnoneauthd")) {
if (!customcmd) die_fatal("rejecting to run without -e customprogram", 0, 0);
if (geteuid() == 0) die_fatal("rejecting to run under UID=0", 0, 0);
flagnoneauth = 1;
}
connectioninfo(channel.localip, channel.localport, channel.remoteip, channel.remoteport);
log_i4("connection from ", channel.remoteip, ":", channel.remoteport);
channel_subsystem_log();
global_init();
blocking_disable(0);
blocking_disable(1);
blocking_disable(2);
/* get server longterm keys */
fdwd = open_cwd();
if (fdwd == -1) die_fatal("unable to open current directory", 0, 0);
if (chdir(keydir) == -1) die_fatal("unable to chdir to", keydir, 0);
for (i = 0; sshcrypto_keys[i].name; ++i) sshcrypto_keys[i].sign_flagserver |= sshcrypto_keys[i].cryptotype & cryptotypeselected;
for (i = 0; sshcrypto_keys[i].name; ++i) sshcrypto_keys[i].sign_flagclient |= sshcrypto_keys[i].cryptotype & cryptotypeselected;
for (i = 0; sshcrypto_kexs[i].name; ++i) sshcrypto_kexs[i].flagenabled |= sshcrypto_kexs[i].cryptotype & cryptotypeselected;
for (i = 0; sshcrypto_ciphers[i].name; ++i) sshcrypto_ciphers[i].flagenabled |= sshcrypto_ciphers[i].cryptotype & cryptotypeselected;
/* read public keys */
for (i = 0; sshcrypto_keys[i].name; ++i) {
if (!sshcrypto_keys[i].sign_flagserver) continue;
if (load(sshcrypto_keys[i].sign_publickeyfilename, sshcrypto_keys[i].sign_publickey, sshcrypto_keys[i].sign_publickeybytes) == -1) {
sshcrypto_keys[i].sign_flagserver = 0;
if (errno == ENOENT) continue;
die_fatal("unable to read public key from file", keydir, sshcrypto_keys[i].sign_publickeyfilename);
}
}
if (fchdir(fdwd) == -1) die_fatal("unable to change directory to working directory", 0, 0);
close(fdwd);
/* set timeout */
alarm(60);
/* send and receive hello */
if (!packet_hello_send()) die_fatal("unable to send hello-string", 0, 0);
if (!packet_hello_receive()) die_fatal("unable to receive hello-string", 0, 0);
/* send and receive kex */
if (!packet_kex_send()) die_fatal("unable to send kex-message", 0, 0);
if (!packet_kex_receive()) die_fatal("unable to receive kex-message", 0, 0);
rekeying:
/* rekeying */
alarm(60);
if (packet.flagrekeying == 1) {
buf_purge(&packet.kexrecv);
buf_put(&packet.kexrecv, b1.buf, b1.len);
if (!packet_kex_send()) die_fatal("unable to send kex-message", 0, 0);
}
/* send and receive kexdh */
if (!packet_kexdh(keydir, &b1, &b2)) die_fatal("unable to process kexdh", 0, 0);
if (packet.flagkeys) log_d1("rekeying: done");
packet.flagkeys = 1;
/* note: communication is encrypted */
/* authentication + authorization */
if (packet.flagauthorized == 0) {
if (!packet_auth(&b1, &b2, flagnoneauth)) die_fatal("authentication failed", 0, 0);
packet.flagauthorized = 1;
}
/* note: user is authenticated and authorized */
alarm(3600);
/* main loop */
for (;;) {
if (channel_iseof())
if (!packet.sendbuf.len)
if (packet.flagchanneleofreceived)
break;
watch0 = watch1 = 0;
watchtochild = watchfromchild1 = watchfromchild2 = 0;
watchselfpipe = 0;
q = p;
if (packet_sendisready()) { watch1 = q; q->fd = 1; q->events = POLLOUT; ++q; }
if (packet_recvisready()) { watch0 = q; q->fd = 0; q->events = POLLIN; ++q; }
if (channel_writeisready()) { watchtochild = q; q->fd = channel_getfd0(); q->events = POLLOUT; ++q; }
if (channel_readisready() && packet_putisready()) { watchfromchild1 = q; q->fd = channel_getfd1(); q->events = POLLIN; ++q; }
if (channel_extendedreadisready() && packet_putisready()) { watchfromchild2 = q; q->fd = channel_getfd2(); q->events = POLLIN; ++q; }
if (selfpipe[0] != -1) { watchselfpipe = q; q->fd = selfpipe[0]; q->events = POLLIN; ++q; }
if (poll(p, q - p, 60000) < 0) {
watch0 = watch1 = 0;
watchtochild = watchfromchild1 = watchfromchild2 = 0;
watchselfpipe = 0;
}
else {
if (watch0) if (!watch0->revents) watch0 = 0;
if (watch1) if (!watch1->revents) watch1 = 0;
if (watchfromchild1) if (!watchfromchild1->revents) watchfromchild1 = 0;
if (watchfromchild2) if (!watchfromchild2->revents) watchfromchild2 = 0;
if (watchtochild) if (!watchtochild->revents) watchtochild = 0;
if (watchselfpipe) if (!watchselfpipe->revents) watchselfpipe = 0;
}
if (watchtochild) {
/* write data to child */
if (!channel_write()) die_fatal("unable to write data to child", 0, 0);
/* try to adjust window */
if (!packet_channel_send_windowadjust(&b1)) die_fatal("unable to send data to network", 0, 0);
}
/* read data from child */
if (watchfromchild1) packet_channel_send_data(&b2);
if (watchfromchild2) packet_channel_send_extendeddata(&b2);
/* check child */
if (channel_iseof()) {
if (selfpipe[0] == -1) if (open_pipe(selfpipe) == -1) die_fatal("unable to open pipe", 0, 0);
signal(SIGCHLD, trigger);
if (channel_waitnohang(&exitsignal, &exitcode)) {
packet_channel_send_eof(&b2);
if (!packet_channel_send_close(&b2, exitsignal, exitcode)) die_fatal("unable to close channel", 0, 0);
}
}
/* send data to network */
if (watch1) if (!packet_send()) die_fatal("unable to send data to network", 0, 0);
/* receive data from network */
if (watch0) {
alarm(3600); /* refresh timeout */
if (!packet_recv()) {
if (channel_iseof()) break; /* XXX */
die_fatal("unable to receive data from network", 0, 0);
}
}
/* process packets */
for (;;) {
if (!packet_get(&b1, 0)) {
if (!errno) break;
die_fatal("unable to get packets from network", 0, 0);
}
if (b1.len < 1) break; /* XXX */
switch (b1.buf[0]) {
case SSH_MSG_CHANNEL_OPEN:
if (!packet_channel_open(&b1, &b2)) die_fatal("unable to open channel", 0, 0);
break;
case SSH_MSG_CHANNEL_REQUEST:
if (!packet_channel_request(&b1, &b2, customcmd)) die_fatal("unable to handle channel-request", 0, 0);
break;
case SSH_MSG_CHANNEL_DATA:
if (!packet_channel_recv_data(&b1)) die_fatal("unable to handle channel-data", 0, 0);
break;
case SSH_MSG_CHANNEL_EXTENDED_DATA:
if (!packet_channel_recv_extendeddata(&b1)) die_fatal("unable to handle channel-extended-data", 0, 0);
break;
case SSH_MSG_CHANNEL_WINDOW_ADJUST:
if (!packet_channel_recv_windowadjust(&b1)) die_fatal("unable to handle channel-window-adjust", 0, 0);
break;
case SSH_MSG_CHANNEL_EOF:
if (!packet_channel_recv_eof(&b1)) die_fatal("unable to handle channel-eof", 0, 0);
break;
case SSH_MSG_CHANNEL_CLOSE:
if (!packet_channel_recv_close(&b1)) die_fatal("unable to handle channel-close", 0, 0);
break;
case SSH_MSG_KEXINIT:
goto rekeying;
default:
if (!packet_unimplemented(&b1)) die_fatal("unable to send SSH_MSG_UNIMPLEMENTED message", 0, 0);
}
}
}
log_i1("finished");
global_die(0); return 111;
}
tinyssh-20240101/tinyssh/main_tinysshd_makekey.c 0000664 0000000 0000000 00000003537 14544472107 0021712 0 ustar 00root root 0000000 0000000 /*
20121022
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "savesync.h"
#include "log.h"
#include "sshcrypto.h"
#include "global.h"
#include "die.h"
#include "main.h"
#define sk global_bspace1 /* reusing global buffer */
#define pk global_bspace2 /* reusing global buffer */
#define USAGE "usage: tinysshd-makekey keydir"
static void create(const char *d, const char *fn, const unsigned char *x, long long xlen) {
if (savesync(fn, x, xlen) == -1) die_fatal("unable to create", d, fn);
}
static int flagverbose = 1;
int main_tinysshd_makekey(int argc, char **argv) {
char *x;
long long i;
log_init(flagverbose, "tinysshd-makekey", 0, 0);
if (argc < 2) die_usage(USAGE);
if (!argv[0]) die_usage(USAGE);
for (;;) {
if (!argv[1]) break;
if (argv[1][0] != '-') break;
x = *++argv;
if (x[0] == '-' && x[1] == 0) break;
if (x[0] == '-' && x[1] == '-' && x[2] == 0) break;
while (*++x) {
if (*x == 'q') { flagverbose = 0; continue; }
if (*x == 'Q') { flagverbose = 1; continue; }
die_usage(USAGE);
}
}
x = *++argv; if (!x) die_usage(USAGE);
log_init(flagverbose, "tinysshd-makekey", 0, 0);
umask(022);
if (mkdir(x, 0755) == -1) die_fatal("unable to create directory", x, 0);
if (chdir(x) == -1) die_fatal("unable to chdir to directory", x, 0);
for (i = 0; sshcrypto_keys[i].name; ++i) {
if (sshcrypto_keys[i].sign_keypair(pk, sk) != 0) die_fatal("unable to generate key pair", x, 0);
umask(022);
create(x, sshcrypto_keys[i].sign_publickeyfilename, pk, sshcrypto_keys[i].sign_publickeybytes);
umask(077);
create(x, sshcrypto_keys[i].sign_secretkeyfilename, sk, sshcrypto_keys[i].sign_secretkeybytes);
}
global_die(0); return 111;
}
tinyssh-20240101/tinyssh/main_tinysshd_printkey.c 0000664 0000000 0000000 00000003654 14544472107 0022131 0 ustar 00root root 0000000 0000000 /*
20150124
Jan Mojzis
Public domain.
*/
#include
#include "e.h"
#include "load.h"
#include "sshcrypto.h"
#include "crypto.h"
#include "global.h"
#include "buf.h"
#include "log.h"
#include "writeall.h"
#include "die.h"
#include "main.h"
static struct buf b1 = { global_bspace1, 0, sizeof global_bspace1 }; /* reusing global buffer */
static struct buf b2 = { global_bspace2, 0, sizeof global_bspace2 }; /* reusing global buffer */
static unsigned char pk[sshcrypto_sign_PUBLICKEYMAX];
#define USAGE "usage: tinysshd-printkey keydir"
int main_tinysshd_printkey(int argc, char **argv) {
char *x;
long long i;
log_init(3, "tinysshd-printkey", 0, 0);
if (argc < 2) die_usage(USAGE);
if (!argv[0]) die_usage(USAGE);
for (;;) {
if (!argv[1]) break;
if (argv[1][0] != '-') break;
x = *++argv;
if (x[0] == '-' && x[1] == 0) break;
if (x[0] == '-' && x[1] == '-' && x[2] == 0) break;
while (*++x) {
die_usage(USAGE);
}
}
x = *++argv; if (!x) die_usage(USAGE);
if (chdir(x) == -1) die_fatal("unable to chdir to directory", x, 0);
/* read public keys */
for (i = 0; sshcrypto_keys[i].name; ++i) {
if (load(sshcrypto_keys[i].sign_publickeyfilename, pk, sshcrypto_keys[i].sign_publickeybytes) == -1) {
if (errno == ENOENT) continue;
die_fatal("unable to read public key from file", x, sshcrypto_keys[i].sign_publickeyfilename);
}
buf_purge(&b1);
sshcrypto_keys[i].buf_putsignpk(&b1, pk);
if (b1.len < 4) die_fatal("unable to get publickey", 0, 0);
/* base64 */
buf_purge(&b2);
buf_puts(&b2, sshcrypto_keys[i].name);
buf_puts(&b2, " ");
buf_putbase64(&b2, b1.buf + 4, b1.len - 4);
buf_puts(&b2, "\n");
if (writeall(1, b2.buf, b2.len) == -1) die_fatal("unable to write output", 0, 0);
}
global_die(0); return 111;
}
tinyssh-20240101/tinyssh/newenv.c 0000664 0000000 0000000 00000004372 14544472107 0016633 0 ustar 00root root 0000000 0000000 /*
20140215
Jan Mojzis
Public domain.
The 'newenv' library is used to execute process in completely new environment.
*/
#include
#include "e.h"
#include "byte.h"
#include "str.h"
#include "purge.h"
#include "bug.h"
#include "env.h"
#include "trymlock.h"
#include "newenv.h"
#define NEWENV_LEN 128
#define NEWENV_SPACE 2048
static struct newenv {
char *e[NEWENV_LEN];
long long elen;
char es[NEWENV_SPACE];
long long eslen;
} n = { {0}, 0, {0}, 0 };
/*
Remove sentitive data from allocated memory.
*/
void newenv_purge(void) {
purge(&n, sizeof n);
n.elen = NEWENV_LEN;
n.eslen = NEWENV_SPACE;
trymunlock(&n, sizeof n);
}
/*
Initialize newenv structure.
*/
void newenv_init(void) {
trymlock(&n, sizeof n);
purge(&n, sizeof n);
n.e[0] = 0;
n.elen = n.eslen = 0;
}
/*
The 'newenv_env/newenv_lowenv' function adds the variable
into new environment.
The newenv_lowenv is limited to a half of the buffer-space.
*/
int newenv_env_(int x, const char *s, const char *t) {
long long slen, tlen, len, i;
if (!x || !s || !t) bug_inval();
if (n.elen < 0) bug_inval();
if (n.eslen < 0) bug_inval();
slen = str_len(s);
tlen = str_len(t);
len = slen + tlen + 2;
if (!n.elen) newenv_init();
for (i = 0; n.e[i]; ++i) {
if (str_start(n.e[i], s) && (n.e[i][slen] == '=')) {
n.e[i] = n.e[--n.elen];
break;
}
}
if (n.elen + 2 > NEWENV_LEN / x) { errno = ENOMEM; return 0; }
if (n.eslen + len > NEWENV_SPACE / x) { errno = ENOMEM; return 0; }
byte_copy(n.es + n.eslen, slen, s); n.eslen += slen; n.es[n.eslen++] = '=';
byte_copy(n.es + n.eslen, tlen, t); n.eslen += tlen; n.es[n.eslen++] = 0;
n.e[n.elen++] = n.es + n.eslen - len;
n.e[n.elen] = 0;
return 1;
}
/*
The 'newenv_copyenv' function copies the variable
from current environment into new environment.
*/
int newenv_copyenv(const char *s) {
char *t;
if (!s) bug_inval();
t = env_get(s);
if (!t) { errno = ENOENT; return 0; }
return newenv_env_(1, s, t);
}
/*
The 'newenv_exec' function executes the command
in new environment.
*/
void newenv_exec(char *filename, char **argv) {
if (!argv || !filename) bug_inval();
execve(filename, argv, n.e);
}
tinyssh-20240101/tinyssh/newenv.h 0000664 0000000 0000000 00000000550 14544472107 0016632 0 ustar 00root root 0000000 0000000 #ifndef _NEWENV_H____
#define _NEWENV_H____
extern int newenv_env_(int, const char *, const char *);
#define newenv_env(x, y) newenv_env_(1, (x), (y))
#define newenv_lowenv(x, y) newenv_env_(2, (x), (y))
extern int newenv_copyenv(const char *);
extern void newenv_exec(char *, char **);
extern void newenv_init(void);
extern void newenv_purge(void);
#endif
tinyssh-20240101/tinyssh/numtostr.c 0000664 0000000 0000000 00000001632 14544472107 0017220 0 ustar 00root root 0000000 0000000 /*
20130604
Jan Mojzis
Public domain.
*/
#include "numtostr.h"
/*
The 'numtostr(strbuf,n)' converts number 'n' into the 0-terminated string.
The caller must allocate at least NUMTOSTR_LEN bytes for 'strbuf'.
The 'numtostr' function is ready for 128-bit integer.
*/
char *numtostr(char *strbuf, long long n) {
long long len = 0;
unsigned long long n1, n2;
static char staticbuf[NUMTOSTR_LEN];
int flagsign = 0;
if (!strbuf) strbuf = staticbuf; /* not thread-safe */
if (n < 0) {
n1 = n2 = -(unsigned long long)n;
flagsign = 1;
}
else {
n1 = n2 = (unsigned long long)n;
}
do {
n1 /= 10; ++len;
} while (n1);
if (flagsign) ++len;
strbuf += len;
do {
*--strbuf = '0' + (n2 % 10);
n2 /= 10;
} while (n2);
if (flagsign) *--strbuf = '-';
while (len < NUMTOSTR_LEN) strbuf[len++] = 0;
return strbuf;
}
tinyssh-20240101/tinyssh/numtostr.h 0000664 0000000 0000000 00000000174 14544472107 0017225 0 ustar 00root root 0000000 0000000 #ifndef _NUMTOSTR_H____
#define _NUMTOSTR_H____
#define NUMTOSTR_LEN 41
extern char *numtostr(char *, long long);
#endif
tinyssh-20240101/tinyssh/open.c 0000664 0000000 0000000 00000001653 14544472107 0016271 0 ustar 00root root 0000000 0000000 /* taken from nacl-20110221, from curvecp/open_cwd.c curvecp/open_pipe.c curvecp/open_read.c curvecp/open_write.c */
#include
#include
#include
#include
#include "blocking.h"
#include "open.h"
int open_cwd(void)
{
return open_read(".");
}
int open_pipe(int *fd)
{
int i;
if (pipe(fd) == -1) return -1;
for (i = 0;i < 2;++i) {
fcntl(fd[i],F_SETFD,1);
blocking_disable(fd[i]);
}
return 0;
}
int open_read(const char *fn)
{
#ifdef O_CLOEXEC
return open(fn,O_RDONLY | O_NONBLOCK | O_CLOEXEC);
#else
int fd = open(fn,O_RDONLY | O_NONBLOCK);
if (fd == -1) return -1;
fcntl(fd,F_SETFD,1);
return fd;
#endif
}
int open_write(const char *fn)
{
#ifdef O_CLOEXEC
return open(fn,O_CREAT | O_WRONLY | O_NONBLOCK | O_CLOEXEC,0644);
#else
int fd = open(fn,O_CREAT | O_WRONLY | O_NONBLOCK,0644);
if (fd == -1) return -1;
fcntl(fd,F_SETFD,1);
return fd;
#endif
}
tinyssh-20240101/tinyssh/open.h 0000664 0000000 0000000 00000000314 14544472107 0016267 0 ustar 00root root 0000000 0000000 #ifndef OPEN_H
#define OPEN_H
extern int open_read(const char *);
extern int open_write(const char *);
extern int open_lock(const char *);
extern int open_cwd(void);
extern int open_pipe(int *);
#endif
tinyssh-20240101/tinyssh/packet.c 0000664 0000000 0000000 00000002253 14544472107 0016574 0 ustar 00root root 0000000 0000000 /*
20140222
Jan Mojzis
Public domain.
*/
#include "purge.h"
#include "trymlock.h"
#include "packet.h"
struct packet packet = {0};
void packet_purge(void) {
purge(&packet, sizeof packet);
trymunlock(&packet, sizeof packet);
}
void packet_init(void) {
trymlock(&packet, sizeof packet);
purge(&packet, sizeof packet);
packet.flagkeys = 0;
packet.flagauthorized = 0;
packet.flagrekeying = 0;
packet.flagclosesent = 0;
packet.flageofsent = 0;
packet.flagchanneleofreceived = 0;
packet.sendpacketid = 0;
packet.receivepacketid = 0;
packet.packet_length = 0;
buf_init(&packet.hellosend, packet.hellosendspace, sizeof packet.hellosendspace);
buf_init(&packet.helloreceive, packet.helloreceivespace, sizeof packet.helloreceivespace);
buf_init(&packet.kexsend, packet.kexsendspace, sizeof packet.kexsendspace);
buf_init(&packet.kexrecv, packet.kexrecvspace, sizeof packet.kexrecvspace);
buf_init(&packet.hashbuf, packet.hashbufspace, sizeof packet.hashbufspace);
buf_init(&packet.sendbuf, packet.sendbufspace, sizeof packet.sendbufspace);
buf_init(&packet.recvbuf, packet.recvbufspace, sizeof packet.recvbufspace);
}
tinyssh-20240101/tinyssh/packet.h 0000664 0000000 0000000 00000006716 14544472107 0016611 0 ustar 00root root 0000000 0000000 /*
20140108
Jan Mojzis
Public domain.
*/
#ifndef _PACKET_H____
#define _PACKET_H____
#include "buf.h"
#include "crypto_uint32.h"
#include "crypto_uint8.h"
#include "sshcrypto.h"
#include "limit.h"
#include "channel.h"
#define PACKET_UNAUTHENTICATED_MESSAGES 30
#define PACKET_LIMIT 32768
#define PACKET_FULLLIMIT 35000
#define PACKET_RECVLIMIT 131072
#define PACKET_ZEROBYTES 64
struct packet {
/* flags */
int flagkeys;
int flagauthorized;
int flagrekeying;
/* channel */
int flageofsent;
int flagclosesent;
int flagchanneleofreceived;
/* packet id */
crypto_uint32 sendpacketid;
crypto_uint32 receivepacketid;
/* keys */
unsigned char serverkey[sshcrypto_cipher_KEYMAX];
unsigned char clientkey[sshcrypto_cipher_KEYMAX];
unsigned char servermackey[sshcrypto_cipher_KEYMAX];
unsigned char clientmackey[sshcrypto_cipher_KEYMAX];
unsigned char servernonce[sshcrypto_cipher_KEYMAX];
unsigned char clientnonce[sshcrypto_cipher_KEYMAX];
unsigned char sessionid[sshcrypto_hash_MAX];
char name[LOGIN_NAME_MAX + 1];
crypto_uint8 kex_packet_follows;
crypto_uint8 kex_guess;
/* buffers */
unsigned char hellosendspace[256];
unsigned char helloreceivespace[256];
unsigned char kexsendspace[1024];
unsigned char kexrecvspace[65536];
unsigned char hashbufspace[65536];
struct buf hellosend;
struct buf helloreceive;
struct buf kexsend;
struct buf kexrecv;
struct buf hashbuf;
/* send/recv */
unsigned char recvbufspace[4 * PACKET_FULLLIMIT + 1 + PACKET_ZEROBYTES];
unsigned char sendbufspace[4 * PACKET_FULLLIMIT + 1];
struct buf recvbuf;
struct buf sendbuf;
crypto_uint32 packet_length;
};
/* packet.c */
extern struct packet packet;
extern void packet_purge(void);
extern void packet_init(void);
/* packet_send.c */
extern int packet_sendisready(void);
extern int packet_send(void);
extern int packet_sendall(void);
/* packet_recv.c */
extern int packet_recvisready(void);
extern int packet_recv(void);
/* packet_get.c */
extern int packet_get(struct buf *, crypto_uint8);
extern int packet_getall(struct buf *, crypto_uint8);
/* packet_put.c */
extern void packet_put(struct buf *);
extern int packet_putisready(void);
/* packet_hello.c */
extern int packet_hello_send(void);
extern int packet_hello_receive(void);
/* packet_kex.c */
extern int packet_kex_send(void);
extern int packet_kex_receive(void);
/* packet_kexdh.c */
extern int packet_kexdh(const char *, struct buf *, struct buf *);
/* packet_auth.c */
extern int packet_auth(struct buf *, struct buf *, int);
/* packet_channel_open.c */
extern int packet_channel_open(struct buf *, struct buf *);
/* packet_channel_request.c */
extern int packet_channel_request(struct buf *, struct buf *, const char *);
/* packet_channel_recv.c */
extern int packet_channel_recv_data(struct buf *);
extern int packet_channel_recv_extendeddata(struct buf *);
extern int packet_channel_recv_windowadjust(struct buf *);
extern int packet_channel_recv_eof(struct buf *);
extern int packet_channel_recv_close(struct buf *);
/* packet_channel_send.c */
extern void packet_channel_send_data(struct buf *);
extern void packet_channel_send_extendeddata(struct buf *);
extern int packet_channel_send_windowadjust(struct buf *);
extern void packet_channel_send_eof(struct buf *);
extern int packet_channel_send_close(struct buf *, int, int);
/* packet_unimplemented.c */
extern int packet_unimplemented(struct buf *);
#endif
tinyssh-20240101/tinyssh/packet_auth.c 0000664 0000000 0000000 00000016131 14544472107 0017615 0 ustar 00root root 0000000 0000000 /*
20140110
Jan Mojzis
Public domain.
*/
#include
#include "buf.h"
#include "ssh.h"
#include "e.h"
#include "str.h"
#include "packetparser.h"
#include "subprocess.h"
#include "sshcrypto.h"
#include "bug.h"
#include "purge.h"
#include "log.h"
#include "packet.h"
int packet_auth(struct buf *b, struct buf *b2, int flagnoneauth) {
crypto_uint8 ch, flagsignature;
long long pos, i, count, sign_bytes = 0;
crypto_uint32 len;
const char *pkname;
int (*sign_open)(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *) = 0;
int (*parsesignpk)(unsigned char *, const unsigned char *, long long) = 0;
int (*parsesignature)(unsigned char *, const unsigned char *, long long) = 0;
void (*putsignpk)(struct buf *, const unsigned char *) = 0;
void (*putsignpkbase64)(struct buf *, const unsigned char *) = 0;
unsigned char pk[sshcrypto_sign_PUBLICKEYMAX];
unsigned char sig[sshcrypto_sign_MAX];
unsigned long long smlen;
buf_purge(b);
/* parse "ssh-userauth" */
pos = 0;
if (!packet_getall(b, SSH_MSG_SERVICE_REQUEST)) return 0;
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* SSH_MSG_SERVICE_REQUEST */
if (ch != SSH_MSG_SERVICE_REQUEST) bug_proto();
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* "ssh-userauth" */
pos = packetparser_skip(b->buf, b->len, pos, len);
if (!str_equaln((char *)b->buf + pos - len, len, "ssh-userauth")) bug_proto();
pos = packetparser_end(b->buf, b->len, pos);
/* send service accept */
b->buf[0] = SSH_MSG_SERVICE_ACCEPT;
packet_put(b);
if (!packet_sendall()) return 0;
for (count = 0; count < 32; ++count) {
/* receive userauth request */
pkname = "unknown";
pos = 0;
buf_purge(b);
if (!packet_getall(b, SSH_MSG_USERAUTH_REQUEST)) return 0;
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* SSH_MSG_USERAUTH_REQUEST */
if (ch != SSH_MSG_USERAUTH_REQUEST) bug_proto();
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* name */
if (len >= sizeof packet.name) bug_proto();
pos = packetparser_copy(b->buf, b->len, pos, (unsigned char *)packet.name, len);
packet.name[len] = 0;
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* "ssh-connection" */
pos = packetparser_skip(b->buf, b->len, pos, len);
if (!str_equaln((char *)b->buf + pos - len, len, "ssh-connection")) bug_proto();
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* publickey/password/hostbased/none */
pos = packetparser_skip(b->buf, b->len, pos, len);
if (str_equaln((char *)b->buf + pos - len, len, "none")) {
/*
if auth. none is enabled get the user from UID
*/
if (flagnoneauth) {
struct passwd *pw;
pkname = "none";
pw = getpwuid(geteuid());
if (!pw) bug();
str_copyn(packet.name, sizeof packet.name, pw->pw_name);
b->len = 0; b->buf[0] = 0;
goto authorized;
}
}
if (str_equaln((char *)b->buf + pos - len, len, "password")) pkname = "password";
if (str_equaln((char *)b->buf + pos - len, len, "hostbased")) pkname = "hostbased";
if (str_equaln((char *)b->buf + pos - len, len, "publickey")) {
pos = packetparser_uint8(b->buf, b->len, pos, &flagsignature);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* public key algorithm name */
pos = packetparser_skip(b->buf, b->len, pos, len);
if (b->buf[pos] != 0) bug_proto();
pkname = (char *)b->buf + pos - len; /* XXX */
sign_open = 0; parsesignpk = 0; putsignpk = 0; putsignpkbase64 = 0; parsesignature = 0; sign_bytes = 0;
for (i = 0; sshcrypto_keys[i].name; ++i) {
if (!sshcrypto_keys[i].sign_flagclient) continue;
if (!str_equaln(pkname, len, sshcrypto_keys[i].name)) continue;
pkname = sshcrypto_keys[i].name;
sign_open = sshcrypto_keys[i].sign_open;
parsesignature = sshcrypto_keys[i].parsesignature;
parsesignpk = sshcrypto_keys[i].parsesignpk;
putsignpk = sshcrypto_keys[i].buf_putsignpk;
putsignpkbase64 = sshcrypto_keys[i].buf_putsignpkbase64;
sign_bytes = sshcrypto_keys[i].sign_bytes;
break;
}
if (sign_open && parsesignpk && putsignpk && putsignpkbase64 && parsesignature) {
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* public key blob */
pos = packetparser_skip(b->buf, b->len, pos, len);
if (!parsesignpk(pk, b->buf + pos - len, len)) bug_proto();
if (!flagsignature) {
/* 'publickey' ... without signature */
buf_purge(b);
buf_putnum8(b, SSH_MSG_USERAUTH_PK_OK);
buf_putstring(b, pkname);
putsignpk(b, pk);
packet_put(b);
if (!packet_sendall()) return 0;
continue;
}
/* 'publickey' ... with signature */
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* signature blob */
pos = packetparser_skip(b->buf, b->len, pos, len);
if (!parsesignature(sig, b->buf + pos - len, len)) bug_proto();
pos = packetparser_end(b->buf, b->len, pos);
purge(b->buf + b->len - len - 4, len + 4);
b->len -= len + 4;
/* authenticate user - verify signature */
buf_purge(b2);
buf_put(b2, sig, sign_bytes);
buf_putstringlen(b2, packet.sessionid, sshcrypto_hash_bytes);
buf_put(b2, b->buf, b->len);
buf_purge(b);
if (b->alloc <= b2->len) bug_nomem();
if (sign_open(b->buf, &smlen, b2->buf, b2->len, pk) != 0) { errno = EAUTH; bug(); }
b->len = smlen; buf_purge(b);
/* authorize user - using authorized_keys */
buf_purge(b);
putsignpkbase64(b, pk);
buf_putnum8(b, 0);
if (subprocess_auth(packet.name, pkname, (char *)b->buf) == 0) goto authorized;
}
}
/* reject */
log_d5("auth: ", packet.name, ": ", pkname, " rejected");
buf_purge(b);
buf_putnum8(b, SSH_MSG_USERAUTH_FAILURE);
buf_putstring(b,"publickey");
buf_putnum8(b, 0);
packet_put(b);
if (!packet_sendall()) return 0;
}
log_w1("auth: too many authentication tries");
return 0;
authorized:
/* authenticated + authorized */
log_i7("auth: ", packet.name, ": ", pkname, " ", (char *)b->buf, " accepted");
buf_purge(b);
buf_putnum8(b, SSH_MSG_USERAUTH_SUCCESS);
packet_put(b);
if (!packet_sendall()) return 0;
purge(pk, sizeof pk);
purge(sig, sizeof sig);
return 1;
}
tinyssh-20240101/tinyssh/packet_channel_open.c 0000664 0000000 0000000 00000005717 14544472107 0021315 0 ustar 00root root 0000000 0000000 /*
20140120
Jan Mojzis
Public domain.
*/
#include "buf.h"
#include "ssh.h"
#include "e.h"
#include "bug.h"
#include "packetparser.h"
#include "str.h"
#include "packet.h"
int packet_channel_open(struct buf *b1, struct buf *b2) {
crypto_uint32 id, remotewindow, localwindow, maxpacket, chanlen;
long long pos = 0;
crypto_uint8 ch;
char *chan = (char *)b1->buf + pos;
/* parse packet */
pos = packetparser_uint8(b1->buf, b1->len, pos, &ch); /* byte SSH_MSG_CHANNEL_OPEN */
if (ch != SSH_MSG_CHANNEL_OPEN) bug_proto();
pos = packetparser_uint32(b1->buf, b1->len, pos, &chanlen); /* string channel type in US-ASCII only */
chan = (char *)b1->buf + pos;
pos = packetparser_skip(b1->buf, b1->len, pos, chanlen);
pos = packetparser_uint32(b1->buf, b1->len, pos, &id); /* uint32 sender channel */
pos = packetparser_uint32(b1->buf, b1->len, pos, &remotewindow); /* uint32 initial window size */
pos = packetparser_uint32(b1->buf, b1->len, pos, &maxpacket); /* uint32 maximum packet size */
if (maxpacket > PACKET_LIMIT) maxpacket = PACKET_LIMIT;
if (str_equaln(chan, chanlen, "session")) {
/* byte SSH_MSG_CHANNEL_OPEN
string "session"
uint32 sender channel
uint32 initial window size
uint32 maximum packet size
*/
pos = packetparser_end(b1->buf, b1->len, pos);
/* send confirmation */
buf_purge(b1);
if (channel_open(packet.name, id, remotewindow, maxpacket, &localwindow)) {
buf_purge(b2);
buf_putnum8(b2, SSH_MSG_CHANNEL_OPEN_CONFIRMATION); /* byte SSH_MSG_CHANNEL_OPEN_CONFIRMATION */
buf_putnum32(b2, id); /* uint32 recipient channel */
buf_putnum32(b2, id); /* uint32 sender channel */
buf_putnum32(b2, localwindow); /* uint32 initial window size */
/*
XXX
use PACKET_LIMIT/2 as maximum packet size,
workaround for miscalculated packet_length
*/
buf_putnum32(b2, PACKET_LIMIT / 2); /* uint32 maximum packet size */
packet_put(b2);
buf_purge(b2);
return 1;
}
}
/* reject channel */
buf_purge(b2);
buf_putnum8(b2, SSH_MSG_CHANNEL_OPEN_FAILURE); /* byte SSH_MSG_CHANNEL_OPEN_FAILURE */
buf_putnum32(b2, id); /* uint32 recipient channel */
buf_putnum32(b2, SSH_OPEN_ADMINISTRATIVELY_PROHIBITED); /* uint32 reason code */
buf_putstring(b2, "only one 'session' channel allowed"); /* string description in ISO-10646 UTF-8 encoding [RFC3629] */
buf_putstring(b2, ""); /* string language tag [RFC3066] */
packet_put(b2);
buf_purge(b1); buf_purge(b2);
return 1;
}
tinyssh-20240101/tinyssh/packet_channel_recv.c 0000664 0000000 0000000 00000005422 14544472107 0021304 0 ustar 00root root 0000000 0000000 /*
20140210
Jan Mojzis
Public domain.
*/
#include "bug.h"
#include "buf.h"
#include "channel.h"
#include "ssh.h"
#include "packetparser.h"
#include "packet.h"
int packet_channel_recv_data(struct buf *b) {
long long pos = 0;
crypto_uint32 len, id;
crypto_uint8 ch;
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* byte SSH_MSG_CHANNEL_DATA */
if (ch != SSH_MSG_CHANNEL_DATA) bug_proto();
pos = packetparser_uint32(b->buf, b->len, pos, &id); /* uint32 recipient channel */
if (id != channel_getid()) bug_proto();
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* string data */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_end(b->buf, b->len, pos);
channel_put(b->buf + pos - len, len);
buf_purge(b);
return 1;
}
int packet_channel_recv_extendeddata(struct buf *b) {
/* ignore extended data */
buf_purge(b);
return 1;
}
int packet_channel_recv_windowadjust(struct buf *b) {
long long pos = 0;
crypto_uint32 len, id;
crypto_uint8 ch;
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* byte SSH_MSG_CHANNEL_WINDOW_ADJUST */
if (ch != SSH_MSG_CHANNEL_WINDOW_ADJUST) bug_proto();
pos = packetparser_uint32(b->buf, b->len, pos, &id); /* uint32 recipient channel */
if (id != channel_getid()) bug_proto();
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* uint32 bytes to add */
pos = packetparser_end(b->buf, b->len, pos);
channel_incrementremotewindow(len);
buf_purge(b);
return 1;
}
int packet_channel_recv_eof(struct buf *b) {
long long pos = 0;
crypto_uint32 id;
crypto_uint8 ch;
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* byte SSH_MSG_CHANNEL_EOF */
if (ch != SSH_MSG_CHANNEL_EOF) bug_proto();
pos = packetparser_uint32(b->buf, b->len, pos, &id); /* uint32 recipient channel */
if (id != channel_getid()) bug_proto();
pos = packetparser_end(b->buf, b->len, pos);
log_d1("packet=SSH_MSG_CHANNEL_EOF received");
channel_puteof();
buf_purge(b);
return 1;
}
int packet_channel_recv_close(struct buf *b) {
long long pos = 0;
crypto_uint32 id;
crypto_uint8 ch;
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* byte SSH_MSG_CHANNEL_CLOSE */
if (ch != SSH_MSG_CHANNEL_CLOSE) bug_proto();
pos = packetparser_uint32(b->buf, b->len, pos, &id); /* uint32 recipient channel */
if (id != channel_getid()) bug_proto();
pos = packetparser_end(b->buf, b->len, pos);
log_d1("packet=SSH_MSG_CHANNEL_CLOSE received");
packet_channel_send_eof(b);
packet.flagchanneleofreceived = 1;
buf_purge(b);
return 1;
}
tinyssh-20240101/tinyssh/packet_channel_request.c 0000664 0000000 0000000 00000017160 14544472107 0022037 0 ustar 00root root 0000000 0000000 /*
20140120
Jan Mojzis
Public domain.
*/
#include "buf.h"
#include "ssh.h"
#include "e.h"
#include "bug.h"
#include "str.h"
#include "log.h"
#include "packetparser.h"
#include "packet.h"
int packet_channel_request(struct buf *b1, struct buf *b2, const char *customcmd) {
long long pos = 0;
crypto_uint8 ch, wantreply;
crypto_uint32 id, a, b, x, y;
char *cmd;
crypto_uint32 cmdlen;
char *p1, *p2;
crypto_uint32 plen1, plen2;
pos = packetparser_uint8(b1->buf, b1->len, pos, &ch); /* byte SSH_MSG_CHANNEL_REQUEST */
if (ch != SSH_MSG_CHANNEL_REQUEST) bug_proto();
pos = packetparser_uint32(b1->buf, b1->len, pos, &id); /* uint32 recipient channel */
if (id != channel_getid()) bug_proto();
pos = packetparser_uint32(b1->buf, b1->len, pos, &cmdlen); /* string request type in US-ASCII characters only */
cmd = (char *)b1->buf + pos;
pos = packetparser_skip(b1->buf, b1->len, pos, cmdlen);
pos = packetparser_uint8(b1->buf, b1->len, pos, &wantreply); /* boolean want reply */
cmd[cmdlen] = 0;
if (str_equaln(cmd, cmdlen, "exec")) {
/* byte SSH_MSG_CHANNEL_REQUEST
uint32 recipient channel
string "exec"
boolean want reply
string command
*/
pos = packetparser_uint32(b1->buf, b1->len, pos, &plen1);
p1 = (char *)b1->buf + pos;
pos = packetparser_skip(b1->buf, b1->len, pos, plen1);
pos = packetparser_end(b1->buf, b1->len, pos);
buf_putnum8(b1, 0);
p1[plen1] = 0;
if (customcmd) {
log_d4("packet=SSH_MSG_CHANNEL_REQUEST, exec ", p1, ", rejected: custom program is selected using param. -e ", customcmd);
goto reject;
}
if (!channel_exec(p1)) bug();
log_d3("packet=SSH_MSG_CHANNEL_REQUEST, exec ", p1, ", accepted");
goto accept;
}
if (str_equaln(cmd, cmdlen, "subsystem")) {
/* byte SSH_MSG_CHANNEL_REQUEST
uint32 recipient channel
string "subsystem"
boolean want reply
string subsystem name
*/
pos = packetparser_uint32(b1->buf, b1->len, pos, &plen1);
p1 = (char *)b1->buf + pos;
pos = packetparser_skip(b1->buf, b1->len, pos, plen1);
pos = packetparser_end(b1->buf, b1->len, pos);
buf_putnum8(b1, 0);
p1[plen1] = 0;
if (customcmd) {
log_d4("packet=SSH_MSG_CHANNEL_REQUEST, subsystem ", p1, ", rejected: custom program is selected using param. -e ", customcmd);
goto reject;
}
p2 = channel_subsystem_get(p1);
if (!p2) {
log_d3("packet=SSH_MSG_CHANNEL_REQUEST, subsystem ", p1, ", rejected");
goto reject;
}
if (!channel_exec(p2)) bug();
log_d5("packet=SSH_MSG_CHANNEL_REQUEST, subsystem ", p1, "=", p2, ", accepted");
goto accept;
}
if (str_equaln(cmd, cmdlen, "shell")) {
/* byte SSH_MSG_CHANNEL_REQUEST
uint32 recipient channel
string "shell"
boolean want reply
*/
pos = packetparser_end(b1->buf, b1->len, pos);
if (customcmd) {
if (!channel_exec(customcmd)) bug();
log_d3("packet=SSH_MSG_CHANNEL_REQUEST, shell, accepted, executing custom shell '", customcmd, "'");
}
else {
if (!channel_exec(0)) bug();
log_d1("packet=SSH_MSG_CHANNEL_REQUEST, shell, accepted");
}
goto accept;
}
if (str_equaln(cmd, cmdlen, "env")) {
/* byte SSH_MSG_CHANNEL_REQUEST
uint32 recipient channel
string "env"
boolean want reply
string variable name
string variable value
*/
/**/
pos = packetparser_uint32(b1->buf, b1->len, pos, &plen1); /* string variable name */
p1 = (char *)b1->buf + pos;
pos = packetparser_skip(b1->buf, b1->len, pos, plen1);
pos = packetparser_uint32(b1->buf, b1->len, pos, &plen2); /* string variable value */
p2 = (char *)b1->buf + pos;
pos = packetparser_skip(b1->buf, b1->len, pos, plen2);
pos = packetparser_end(b1->buf, b1->len, pos);
buf_putnum8(b1, 0);
p1[plen1] = 0;
p2[plen2] = 0;
if (channel_env(p1, p2)) {
log_d5("packet=SSH_MSG_CHANNEL_REQUEST, env ", p1, "=", p2, ", accepted");
goto accept;
}
else {
log_d5("packet=SSH_MSG_CHANNEL_REQUEST, env ", p1, "=", p2, ", rejected");
goto reject;
}
}
if (str_equaln(cmd, cmdlen, "pty-req")) {
/*
byte SSH_MSG_CHANNEL_REQUEST
uint32 recipient channel
string "pty-req"
boolean want_reply
string TERM environment variable value (e.g., vt100)
uint32 terminal width, characters (e.g., 80)
uint32 terminal height, rows (e.g., 24)
uint32 terminal width, pixels (e.g., 640)
uint32 terminal height, pixels (e.g., 480)
string encoded terminal modes
*/
pos = packetparser_uint32(b1->buf, b1->len, pos, &plen1);
p1 = (char *)b1->buf + pos;
pos = packetparser_skip(b1->buf, b1->len, pos, plen1);
pos = packetparser_uint32(b1->buf, b1->len, pos, &a);
pos = packetparser_uint32(b1->buf, b1->len, pos, &b);
pos = packetparser_uint32(b1->buf, b1->len, pos, &x);
pos = packetparser_uint32(b1->buf, b1->len, pos, &y);
pos = packetparser_uint32(b1->buf, b1->len, pos, &plen2);
p2 = (char *)b1->buf + pos;
pos = packetparser_skip(b1->buf, b1->len, pos, plen2);
pos = packetparser_end(b1->buf, b1->len, pos);
buf_putnum8(b1, 0);
/* XXX TODO encoded terminal modes (p2, plen2) */
p1[plen1] = 0;
p2[plen2] = 0;
if (!channel_openterminal(p1, a, b, x, y)) {
log_w1("unable to open terminal");
log_d3("packet=SSH_MSG_CHANNEL_REQUEST, pty-req ", p1, ", rejected");
goto reject;
}
log_d3("packet=SSH_MSG_CHANNEL_REQUEST, pty-req ", p1, ", accepted");
goto accept;
}
if (str_equaln(cmd, cmdlen, "window-change")) {
/*
byte SSH_MSG_CHANNEL_REQUEST
uint32 recipient channel
string "window-change"
boolean FALSE
uint32 terminal width, columns
uint32 terminal height, rows
uint32 terminal width, pixels
uint32 terminal height, pixels
*/
pos = packetparser_uint32(b1->buf, b1->len, pos, &a);
pos = packetparser_uint32(b1->buf, b1->len, pos, &b);
pos = packetparser_uint32(b1->buf, b1->len, pos, &x);
pos = packetparser_uint32(b1->buf, b1->len, pos, &y);
pos = packetparser_end(b1->buf, b1->len, pos);
channel_ptyresize(a, b, x, y);
log_d1("packet=SSH_MSG_CHANNEL_REQUEST, window-change, accepted");
goto accept;
}
log_d3("packet=SSH_MSG_CHANNEL_REQUEST, ", cmd, ", rejected or ignored");
reject:
/* reject channel request */
if (!wantreply) goto done;
buf_purge(b2);
buf_putnum8(b2, SSH_MSG_CHANNEL_FAILURE); /* byte SSH_MSG_CHANNEL_SUCCESS */
buf_putnum32(b2, id); /* uint32 recipient channel */
packet_put(b2);
buf_purge(b1); buf_purge(b2);
return 1;
accept:
if (!wantreply) goto done;
buf_purge(b2);
buf_putnum8(b2, SSH_MSG_CHANNEL_SUCCESS); /* byte SSH_MSG_CHANNEL_SUCCESS */
buf_putnum32(b2, id); /* uint32 recipient channel */
packet_put(b2);
buf_purge(b1); buf_purge(b2);
return 1;
done:
buf_purge(b1); buf_purge(b2);
return 1;
}
tinyssh-20240101/tinyssh/packet_channel_send.c 0000664 0000000 0000000 00000010677 14544472107 0021306 0 ustar 00root root 0000000 0000000 /*
20140211
Jan Mojzis
Public domain.
*/
#include "bug.h"
#include "buf.h"
#include "channel.h"
#include "ssh.h"
#include "bug.h"
#include "uint32_pack_big.h"
#include "packet.h"
void packet_channel_send_data(struct buf *b) {
long long r;
long long limit = PACKET_LIMIT;
if (channel.maxpacket > 0) {
if (channel.maxpacket < PACKET_LIMIT) {
limit = channel.maxpacket;
}
}
buf_purge(b);
if (b->alloc <= PACKET_LIMIT) bug_nomem();
if (!packet_putisready()) return;
r = channel_read(b->buf + 9, limit - 9);
if (r == 0) return;
b->len = r + 9;
b->buf[0] = SSH_MSG_CHANNEL_DATA; /* byte SSH_MSG_CHANNEL_DATA */
uint32_pack_big(b->buf + 1, channel_getid()); /* uint32 recipient channel */
uint32_pack_big(b->buf + 5, r); /* string data */
packet_put(b);
buf_purge(b);
return;
}
void packet_channel_send_extendeddata(struct buf *b) {
long long r;
long long limit = PACKET_LIMIT;
if (channel.maxpacket > 0) {
if (channel.maxpacket < PACKET_LIMIT) {
limit = channel.maxpacket;
}
}
buf_purge(b);
if (b->alloc <= PACKET_LIMIT) bug_nomem();
if (!packet_putisready()) return;
r = channel_extendedread(b->buf + 13, limit - 13);
if (r == 0) return;
b->len = r + 13;
b->buf[0] = SSH_MSG_CHANNEL_EXTENDED_DATA; /* byte SSH_MSG_CHANNEL_EXTENDED_DATA */
uint32_pack_big(b->buf + 1, channel_getid()); /* uint32 recipient channel */
uint32_pack_big(b->buf + 5, 1); /* uint32 data_type_code (1 = stderr) */
uint32_pack_big(b->buf + 9, r); /* string data */
packet_put(b);
buf_purge(b);
return;
}
int packet_channel_send_windowadjust(struct buf *b) {
crypto_uint32 plus;
if (channel_getlen0() > CHANNEL_BUFSIZE / 2) return 1;
if (channel_getlocalwindow() > CHANNEL_BUFSIZE / 2) return 1;
buf_purge(b);
buf_putnum8(b, SSH_MSG_CHANNEL_WINDOW_ADJUST);
buf_putnum32(b, channel_getid());
plus = CHANNEL_BUFSIZE - channel_getlen0() - channel_getlocalwindow();
buf_putnum32(b, plus);
channel_incrementlocalwindow(plus);
packet_put(b);
buf_purge(b);
return 1;
}
void packet_channel_send_eof(struct buf *b) {
if (packet.flageofsent) return;
buf_purge(b);
buf_putnum8(b, SSH_MSG_CHANNEL_EOF);
buf_putnum32(b, channel_getid());
packet_put(b);
buf_purge(b);
packet.flageofsent = 1;
}
int packet_channel_send_close(struct buf *b, int exitsignal, int exitcode) {
packet_channel_send_eof(b);
if (packet.flagclosesent) return 1;
if (exitsignal > 0) {
buf_purge(b);
buf_putnum8(b, SSH_MSG_CHANNEL_REQUEST); /* byte SSH_MSG_CHANNEL_REQUEST */
buf_putnum32(b, channel_getid()); /* uint32 recipient channel */
buf_putstring(b, "exit-signal"); /* string "exit-signal" */
buf_putnum8(b, 0); /* boolean FALSE */
buf_putstring(b, ssh_sigstr(exitsignal)); /* string signal name (without the "SIG" prefix) */
buf_putnum8(b, 0); /* boolean core dumped */
buf_putstring(b, ssh_sigstrlong(exitsignal)); /* string error message in ISO-10646 UTF-8 encoding */
buf_putstring(b, ""); /* string language tag [RFC3066] */
packet_put(b);
buf_purge(b);
if (!packet_sendall()) return 0;
}
else {
buf_purge(b);
buf_putnum8(b, SSH_MSG_CHANNEL_REQUEST); /* byte SSH_MSG_CHANNEL_REQUEST */
buf_putnum32(b, channel_getid()); /* uint32 recipient channel */
buf_putstring(b, "exit-status"); /* string "exit-status" */
buf_putnum8(b, 0); /* boolean FALSE */
buf_putnum32(b, exitcode); /* uint32 exit_status */
packet_put(b);
buf_purge(b);
if (!packet_sendall()) return 0;
}
buf_purge(b);
buf_putnum8(b, SSH_MSG_CHANNEL_CLOSE); /* byte SSH_MSG_CHANNEL_CLOSE */
buf_putnum32(b, channel_getid()); /* uint32 recipient channel */
packet_put(b);
if (!packet_sendall()) return 0;
buf_purge(b);
packet.flagclosesent = 1;
return 1;
}
tinyssh-20240101/tinyssh/packet_get.c 0000664 0000000 0000000 00000006524 14544472107 0017440 0 ustar 00root root 0000000 0000000 /*
20140126
Jan Mojzis
Public domain.
*/
#include
#include
#include "byte.h"
#include "e.h"
#include "bug.h"
#include "uint32_unpack_big.h"
#include "purge.h"
#include "ssh.h"
#include "sshcrypto.h"
#include "numtostr.h"
#include "packet.h"
static int packet_get_plain_(struct buf *b) {
crypto_uint32 packet_length;
long long len;
struct buf *recvbuf = &packet.recvbuf;
unsigned char *pp;
long long l;
pp = recvbuf->buf + PACKET_ZEROBYTES;
l = recvbuf->len - PACKET_ZEROBYTES;
/* we need at least 4 bytes */
if (l < 4) return 1;
/* parse length */
packet_length = uint32_unpack_big(pp);
if (packet_length > PACKET_LIMIT) {
char buf1[NUMTOSTR_LEN];
char buf2[NUMTOSTR_LEN];
errno = EPROTO;
log_f4("packet length ", numtostr(buf1, packet_length), " > PACKET_LIMIT ", numtostr(buf2, PACKET_LIMIT));
global_die(111);
}
if (packet_length + 4 > l) return 1;
/* we have full packet */
len = packet_length;
len -= recvbuf->buf[PACKET_ZEROBYTES + 4] + 1;
if (len <= 0) bug_proto();
buf_put(b, recvbuf->buf + PACKET_ZEROBYTES + 5, len);
byte_copy(pp, l - packet_length + 4, pp + packet_length + 4);
purge(pp + l - packet_length + 4, packet_length + 4);
recvbuf->len -= packet_length + 4;
packet.receivepacketid++;
return 1;
}
static int packet_get_(struct buf *b) {
if (packet.flagkeys) {
return sshcrypto_packet_get(b);
}
else {
return packet_get_plain_(b);
}
/* overflow check */
if (!packet.receivepacketid) {
log_f1("receivepacketid overflow");
global_die(111);
}
}
int packet_get(struct buf *b, crypto_uint8 x) {
buf_purge(b);
if (!packet_get_(b)) return 0;
if (b->len <= 0) return 1;
if (!packet.flagauthorized) if (packet.receivepacketid > PACKET_UNAUTHENTICATED_MESSAGES) {
errno = EPROTO;
log_f1("too many unauthenticated messages");
global_die(111);
}
switch (b->buf[0]) {
case SSH_MSG_DISCONNECT:
errno = 0;
return 0;
case SSH_MSG_IGNORE:
case SSH_MSG_DEBUG:
if (!packet.flagkeys) {
log_f1("SSH_MSG_IGNORE/SSH_MSG_DEBUG packet rejected in plain-text mode");
global_die(111);
}
buf_purge(b);
break;
case SSH_MSG_NEWKEYS:
/* strict kex - reset receivepacketid */
if (sshcrypto_kex_flags & sshcrypto_FLAGSTRICTKEX) {
packet.receivepacketid = 0;
}
default:
if (x && x != b->buf[0]) {
char buf1[NUMTOSTR_LEN];
char buf2[NUMTOSTR_LEN];
errno = EPROTO;
log_f4("expected packet type ", numtostr(buf1, x), ", got ", numtostr(buf2, b->buf[0]));
global_die(111);
}
break;
}
return 1;
}
int packet_getall(struct buf *b, crypto_uint8 ch) {
struct pollfd x;
long long before;
buf_purge(b);
for (;;) {
before = packet.recvbuf.len;
if (!packet_get(b, ch)) return 0;
if (b->len > 0) break;
if (before != packet.recvbuf.len) continue;
x.fd = 0;
x.events = POLLIN | POLLERR;
poll(&x, 1, -1);
if (!packet_recv()) return 0;
}
return 1;
}
tinyssh-20240101/tinyssh/packet_hello.c 0000664 0000000 0000000 00000003222 14544472107 0017754 0 ustar 00root root 0000000 0000000 /*
20140125
Jan Mojzis
Public domain.
*/
#include "buf.h"
#include "byte.h"
#include "writeall.h"
#include "purge.h"
#include "log.h"
#include "str.h"
#include "getln.h"
#include "e.h"
#include "packet.h"
/*
The 'packet_hello_send()' function sends SSH hello string to the client.
See RFC 4253 4.2. Protocol Version Exchange.
Example: SSH-2.0-tinyssh_20160201 iX512l8j
*/
int packet_hello_send(void) {
struct buf *b = &packet.hellosend;
buf_purge(b);
buf_puts(b, "SSH-2.0-tinyssh");
#ifdef VERSION
buf_puts(b, "_");
buf_puts(b, VERSION);
#endif
buf_puts(b, " ");
buf_puts(b, log_string());
buf_puts(b, "\r\n");
if (writeall(1, b->buf, b->len) == -1) return 0;
b->len -= 2; /* remove "\r\n" */
b->buf[b->len] = 0;
log_d2("hello: server: ", (char *)(b->buf));
purge(b->buf + b->len, b->alloc - b->len);
return 1;
}
/*
The 'packet_hello_receive()' function receives SSH hello string from the client.
See RFC 4253 4.2. Protocol Version Exchange.
Example: SSH-2.0-OpenSSH_6.6.1p1 Debian-4~bpo70+1
*/
int packet_hello_receive(void) {
int r;
struct buf *b = &packet.helloreceive;
r = getln(0, b->buf, b->alloc);
if (r == 0) { errno = ECONNRESET; return 0; }
if (r != 1) return 0;
b->len = str_len((char *)b->buf);
if (b->len < 6) { errno = EPROTO; return 0; }
if (b->buf[b->len - 1] == '\n') --(b->len); /* remove '\n' */
if (b->buf[b->len - 1] == '\r') --(b->len); /* remove '\r' */
b->buf[b->len] = 0;
if (!byte_isequal(b->buf, 4, "SSH-")) { errno = EPROTO; return 0; }
log_d2("hello: client: ", (char *)b->buf);
purge(b->buf + b->len, b->alloc - b->len);
return 1;
}
tinyssh-20240101/tinyssh/packet_kex.c 0000664 0000000 0000000 00000007753 14544472107 0017455 0 ustar 00root root 0000000 0000000 /*
20140110
Jan Mojzis
Public domain.
*/
#include "buf.h"
#include "ssh.h"
#include "sshcrypto.h"
#include "packetparser.h"
#include "bug.h"
#include "packet.h"
int packet_kex_send(void) {
struct buf *b = &packet.kexsend;
/* send server kex_init */
buf_purge(b);
buf_putnum8(b, SSH_MSG_KEXINIT); /* SSH_MSG_KEXINIT */
buf_putrandombytes(b, 16); /* cookie */
sshcrypto_kex_put(b); /* kex algorithms */
sshcrypto_key_put(b); /* server host key algorithms */
sshcrypto_cipher_put(b); /* encryption algorithms client to server */
sshcrypto_cipher_put(b); /* encryption algorithms server to client */
sshcrypto_cipher_macput(b); /* mac algorithms client to server */
sshcrypto_cipher_macput(b); /* mac algorithms server to client */
buf_putstring(b, "none"); /* compress algorithms client to server */
buf_putstring(b, "none"); /* compress algorithms server to client */
buf_putstring(b, ""); /* languages client to server */
buf_putstring(b, ""); /* languages server to client */
buf_putnum8(b, 0); /* kex first packet follows */
buf_putnum32(b, 0); /* reserved */
packet_put(b);
return packet_sendall();
}
int packet_kex_receive(void) {
struct buf *b = &packet.kexrecv;
long long pos = 0;
crypto_uint8 ch;
crypto_uint32 len;
if (!packet_getall(b, SSH_MSG_KEXINIT)) return 0;
/* parse packet */
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* SSH_MSG_KEXINIT */
if (ch != SSH_MSG_KEXINIT) bug_proto();
pos = packetparser_skip(b->buf, b->len, pos, 16); /* cookie */
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* kex algorithms */
pos = packetparser_skip(b->buf, b->len, pos, len);
if (!sshcrypto_kex_select(b->buf + pos - len, len, &packet.kex_guess)) return 0;
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* server host key algorithms */
pos = packetparser_skip(b->buf, b->len, pos, len);
if (!sshcrypto_key_select(b->buf + pos - len, len)) return 0;
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* encryption algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
if (!sshcrypto_cipher_select(b->buf + pos - len, len)) return 0;
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* encryption algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
/* XXX assuming same as encryption algorithms client to server */
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* mac algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
if (!sshcrypto_cipher_macselect(b->buf + pos - len, len)) return 0;
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* mac algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* compress algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* compress algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* languages client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* languages server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* kex first packet follows */
packet.kex_packet_follows = ch;
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* reserved */
pos = packetparser_end(b->buf, b->len, pos);
return 1;
}
tinyssh-20240101/tinyssh/packet_kexdh.c 0000664 0000000 0000000 00000011204 14544472107 0017753 0 ustar 00root root 0000000 0000000 /*
20141025
Jan Mojzis
Public domain.
*/
#include "buf.h"
#include "ssh.h"
#include "e.h"
#include "uint32_unpack_big.h"
#include "byte.h"
#include "sshcrypto.h"
#include "packetparser.h"
#include "bug.h"
#include "log.h"
#include "purge.h"
#include "subprocess.h"
#include "packet.h"
int packet_kexdh(const char *keydir, struct buf *b1, struct buf *b2) {
unsigned char clientpk[sshcrypto_kem_PUBLICKEYMAX];
unsigned char serverpk[sshcrypto_kem_CIPHERTEXTMAX];
unsigned char sharedsecret[sshcrypto_kem_MAX];
unsigned char sm[sshcrypto_sign_MAX];
unsigned char key[sshcrypto_cipher_KEYMAX];
unsigned char hash[sshcrypto_hash_MAX];
long long pos = 0;
crypto_uint8 ch;
crypto_uint32 len;
long long i;
if (packet.kex_packet_follows && !packet.kex_guess) {
buf_purge(b1);
if (!packet_getall(b1, SSH_MSG_KEXDH_INIT)) return 0;
}
buf_purge(b1);
if (!packet_getall(b1, SSH_MSG_KEXDH_INIT)) return 0;
pos = packetparser_uint8(b1->buf, b1->len, pos, &ch); /* byte SSH_MSG_KEXDH_INIT */
if (ch != SSH_MSG_KEXDH_INIT) bug_proto();
pos = packetparser_uint32(b1->buf, b1->len, pos, &len); /* string client's public key */
if (len != sshcrypto_kem_publickeybytes) bug_proto();
pos = packetparser_copy(b1->buf, b1->len, pos, clientpk, len);
pos = packetparser_end(b1->buf, b1->len, pos);
buf_purge(b1);
/* generate key and compute shared secret */
do {
/* XXX - workaroud for bug in OpenSSH 6.5 - 6.6 */
if (sshcrypto_enc(serverpk, sharedsecret, clientpk) != 0) bug_proto();
} while(sharedsecret[0] == 0 && sshcrypto_kem_publickeybytes == 32);
/* create hash */
buf_purge(&packet.hashbuf);
buf_putstringlen(&packet.hashbuf, packet.helloreceive.buf, packet.helloreceive.len);
buf_putstringlen(&packet.hashbuf, packet.hellosend.buf, packet.hellosend.len);
buf_putstringlen(&packet.hashbuf, packet.kexrecv.buf, packet.kexrecv.len);
buf_putstringlen(&packet.hashbuf, packet.kexsend.buf, packet.kexsend.len);
sshcrypto_buf_putsignpk(&packet.hashbuf, sshcrypto_sign_publickey);
buf_putstringlen(&packet.hashbuf, clientpk, sshcrypto_kem_publickeybytes);
buf_putstringlen(&packet.hashbuf, serverpk, sshcrypto_kem_ciphertextbytes);
sshcrypto_buf_putkemkey(&packet.hashbuf, sharedsecret);
sshcrypto_hash(hash, packet.hashbuf.buf, packet.hashbuf.len);
/* session id */
if (!packet.flagrekeying) byte_copy(packet.sessionid, sshcrypto_hash_bytes, hash);
packet.flagrekeying = 1;
/* signature */
if (subprocess_sign(sm, sshcrypto_sign_bytes, keydir, hash, sshcrypto_hash_bytes) != 0) return 0;
buf_purge(b1); buf_purge(b2);
/* send server kex_ecdh_reply */
buf_putnum8(b2, SSH_MSG_KEXDH_REPLY); /* SSH_MSG_KEXDH_REPLY */
sshcrypto_buf_putsignpk(b2, sshcrypto_sign_publickey); /* public key */
buf_putstringlen(b2, serverpk, sshcrypto_kem_ciphertextbytes); /* servers's public key */
sshcrypto_buf_putsignature(b2, sm); /* signature */
packet_put(b2);
/* send server newkeys */
buf_purge(b2);
buf_putnum8(b2, SSH_MSG_NEWKEYS);
packet_put(b2);
if (!packet_sendall()) return 0;
/* receive new keys */
do {
buf_purge(b2);
if (!packet_getall(b2, 0)) return 0;
} while (b2->buf[0] != SSH_MSG_NEWKEYS);
/* key derivation */
for(i = 0; i < 6; ++i) {
buf_purge(b1);
sshcrypto_buf_putkemkey(b1, sharedsecret);
buf_put(b1, hash, sshcrypto_hash_bytes);
buf_putnum8(b1, 'A' + i);
buf_put(b1, packet.sessionid, sshcrypto_hash_bytes);
sshcrypto_hash(key, b1->buf, b1->len);
/* one extend */
buf_purge(b1);
sshcrypto_buf_putkemkey(b1, sharedsecret);
buf_put(b1, hash, sshcrypto_hash_bytes);
buf_put(b1, key, sshcrypto_hash_bytes);
sshcrypto_hash(key + sshcrypto_hash_bytes, b1->buf, b1->len);
if (i == 0) byte_copy(packet.clientnonce, sshcrypto_cipher_KEYMAX, key);
if (i == 1) byte_copy(packet.servernonce, sshcrypto_cipher_KEYMAX, key);
if (i == 2) byte_copy(packet.clientkey, sshcrypto_cipher_KEYMAX, key);
if (i == 3) byte_copy(packet.serverkey, sshcrypto_cipher_KEYMAX, key);
if (i == 4) byte_copy(packet.clientmackey, sshcrypto_cipher_KEYMAX, key);
if (i == 5) byte_copy(packet.servermackey, sshcrypto_cipher_KEYMAX, key);
}
purge(clientpk, sizeof clientpk);
purge(serverpk, sizeof serverpk);
purge(sharedsecret, sizeof sharedsecret);
purge(sm, sizeof sm);
purge(key, sizeof key);
purge(hash, sizeof hash);
return 1;
}
tinyssh-20240101/tinyssh/packet_put.c 0000664 0000000 0000000 00000002553 14544472107 0017467 0 ustar 00root root 0000000 0000000 /*
20140207
Jan Mojzis
Public domain.
*/
#include "uint32_pack_big.h"
#include "buf.h"
#include "sshcrypto.h"
#include "ssh.h"
#include "log.h"
#include "packet.h"
static void packet_put_plain_(struct buf *b) {
long long pos;
crypto_uint8 paddinglen;
struct buf *sendbuf = &packet.sendbuf;
pos = sendbuf->len; /* get position */
buf_putnum32(sendbuf, 0); /* length */
buf_putnum8(sendbuf, 0); /* padding length */
buf_put(sendbuf, b->buf, b->len); /* add data */
packet.sendpacketid++; /* increment id */
/* padding */
paddinglen = 2 * 8 - ((sendbuf->len - pos) % 8);
buf_putzerobytes(sendbuf, paddinglen);
sendbuf->buf[pos + 4] = paddinglen;
/* add packet length */
uint32_pack_big(sendbuf->buf + pos, sendbuf->len - pos - 4);
}
int packet_putisready(void) {
return buf_ready(&packet.sendbuf, PACKET_FULLLIMIT);
}
void packet_put(struct buf *b) {
if (packet.flagkeys) {
sshcrypto_packet_put(b);
}
else {
packet_put_plain_(b);
}
/* overflow check */
if (!packet.sendpacketid) {
log_f1("sendpacketid overflow");
global_die(111);
}
/* strict kex - reset sendpacketid */
if (b->buf[0] == SSH_MSG_NEWKEYS && sshcrypto_kex_flags & sshcrypto_FLAGSTRICTKEX) {
packet.sendpacketid = 0;
}
}
tinyssh-20240101/tinyssh/packet_recv.c 0000664 0000000 0000000 00000001376 14544472107 0017620 0 ustar 00root root 0000000 0000000 /*
20140120
Jan Mojzis
Public domain.
*/
#include
#include "e.h"
#include "buf.h"
#include "purge.h"
#include "packet.h"
int packet_recvisready(void) {
return buf_ready(&packet.recvbuf, PACKET_FULLLIMIT);
}
int packet_recv(void) {
long long r;
struct buf *b = &packet.recvbuf;
if (b->len < PACKET_ZEROBYTES) {
b->len = PACKET_ZEROBYTES;
purge(b->buf, PACKET_ZEROBYTES);
}
if (!packet_recvisready()) return 1;
r = read(0, b->buf + b->len, PACKET_FULLLIMIT);
if (r == 0) { errno = ECONNRESET; return 0; }
if (r == -1) {
if (errno == EINTR) return 1;
if (errno == EAGAIN) return 1;
if (errno == EWOULDBLOCK) return 1;
return 0;
}
b->len += r;
return 1;
}
tinyssh-20240101/tinyssh/packet_send.c 0000664 0000000 0000000 00000001617 14544472107 0017610 0 ustar 00root root 0000000 0000000 /*
20140120
Jan Mojzis
Public domain.
*/
#include
#include "writeall.h"
#include "e.h"
#include "byte.h"
#include "purge.h"
#include "packet.h"
int packet_sendisready(void) {
return (packet.sendbuf.len > 0);
}
int packet_send(void) {
struct buf *sendbuf = &packet.sendbuf;
long long w;
if (sendbuf->len <= 0) return 1;
w = write(1, sendbuf->buf, sendbuf->len);
if (w == -1) {
if (errno == EINTR) return 1;
if (errno == EAGAIN) return 1;
if (errno == EWOULDBLOCK) return 1;
return 0;
}
byte_copy(sendbuf->buf, sendbuf->len - w, sendbuf->buf + w);
sendbuf->len -= w;
purge(sendbuf->buf + sendbuf->len, w);
return 1;
}
int packet_sendall(void) {
if (writeall(1, packet.sendbuf.buf, packet.sendbuf.len) == -1) return 0;
purge(packet.sendbuf.buf, packet.sendbuf.len);
packet.sendbuf.len = 0;
return 1;
}
tinyssh-20240101/tinyssh/packet_unimplemented.c 0000664 0000000 0000000 00000001062 14544472107 0021517 0 ustar 00root root 0000000 0000000 /*
20150719
Jan Mojzis
Public domain.
*/
#include "buf.h"
#include "ssh.h"
#include "log.h"
#include "numtostr.h"
#include "packet.h"
int packet_unimplemented(struct buf *b) {
char strnum[NUMTOSTR_LEN];
/* note that b->buf[0] contains packetid */
log_d3("packet=", numtostr(strnum, b->buf[0]),", sending SSH_MSG_UNIMPLEMENTED message");
buf_purge(b);
buf_putnum8(b, SSH_MSG_UNIMPLEMENTED); /* SSH_MSG_UNIMPLEMENTED */
buf_putnum32(b, packet.receivepacketid); /* packeid */
packet_put(b);
return packet_sendall();
}
tinyssh-20240101/tinyssh/packetparser.c 0000664 0000000 0000000 00000005014 14544472107 0020007 0 ustar 00root root 0000000 0000000 /*
20140210
Jan Mojzis
Public domain.
The 'packetparser' library is used to parse SSH packets.
The 'packetparser_*' function has always information about buffer, buffer length
and position in the buffer. Before parsing checks if the position
is not exceeding the buffer length. If the position exceeds the buffer length,
packetparser_* function immediately exits with 111 status code.
*/
#include "e.h"
#include "uint32_unpack_big.h"
#include "bug.h"
#include "byte.h"
#include "packetparser.h"
/*
Parse one-byte character.
*/
long long packetparser_uint8_(const char *fn, unsigned long long line,
const unsigned char *buf, long long len, long long pos, crypto_uint8 *out) {
if (!buf || len < 0 || len > 1073741824 || pos < 0 || pos > 1073741824 || !out) bug_inval_(fn, line);
if (pos + 1 > len) bug_proto_(fn, line);
*out = buf[pos];
return pos + 1;
}
/*
Parse the unsigned 32-bit number.
*/
long long packetparser_uint32_(const char *fn, unsigned long long line,
const unsigned char *buf, long long len, long long pos, crypto_uint32 *out) {
if (!buf || len < 0 || len > 1073741824 || pos < 0 || pos > 1073741824 || !out) bug_inval_(fn, line);
if (pos + 4 > len) bug_proto_(fn, line);
*out = uint32_unpack_big(buf + pos);
return pos + 4;
}
/*
Parse the string and copy it.
*/
long long packetparser_copy_(const char *fn, unsigned long long line,
const unsigned char *buf, long long len, long long pos, unsigned char *out, long long outlen) {
if (!buf || len < 0 || len > 1073741824 || pos < 0 || pos > 1073741824 || !out || outlen < 0 || outlen > 1073741824) bug_inval_(fn, line);
if (pos + outlen > len) bug_proto_(fn, line);
byte_copy(out, outlen, buf + pos);
return pos + outlen;
}
/*
Skip 'len' bytes.
*/
long long packetparser_skip_(const char *fn, unsigned long long line,
const unsigned char *buf, long long len, long long pos, long long skip) {
if (!buf || len < 0 || len > 1073741824 || pos < 0 || pos > 1073741824 || skip < 0 || skip > 1073741824) bug_inval_(fn, line);
if (pos + skip > len) bug_proto_(fn, line);
return pos + skip;
}
/*
Check if the position is end-position.
*/
long long packetparser_end_(const char *fn, unsigned long long line,
const unsigned char *buf, long long len, long long pos) {
if (!buf || len < 0 || len > 1073741824 || pos < 0 || pos > 1073741824) bug_inval_(fn, line);
if (pos != len) bug_proto_(fn, line);
return pos;
}
tinyssh-20240101/tinyssh/packetparser.h 0000664 0000000 0000000 00000002372 14544472107 0020020 0 ustar 00root root 0000000 0000000 #ifndef _PACKETPARSER_H____
#define _PACKETPARSER_H____
#include "crypto_uint32.h"
#include "crypto_uint8.h"
extern long long packetparser_uint8_(const char *, unsigned long long, const unsigned char *, long long, long long, crypto_uint8 *);
extern long long packetparser_uint32_(const char *, unsigned long long, const unsigned char *, long long, long long, crypto_uint32 *);
extern long long packetparser_copy_(const char *, unsigned long long, const unsigned char *, long long, long long, unsigned char *, long long);
extern long long packetparser_skip_(const char *, unsigned long long, const unsigned char *, long long, long long, long long);
extern long long packetparser_end_(const char *, unsigned long long, const unsigned char *, long long, long long);
#define packetparser_uint8(a, b, cc, d) packetparser_uint8_(__FILE__, __LINE__, (a), (b), (cc), (d))
#define packetparser_uint32(a, b, cc, d) packetparser_uint32_(__FILE__, __LINE__, (a), (b), (cc), (d))
#define packetparser_copy(a, b, cc, d, e) packetparser_copy_(__FILE__, __LINE__, (a), (b), (cc), (d), (e))
#define packetparser_skip(a, b, cc, d) packetparser_skip_(__FILE__, __LINE__, (a), (b), (cc), (d))
#define packetparser_end(a, b, cc) packetparser_end_(__FILE__, __LINE__, (a), (b), (cc))
#endif
tinyssh-20240101/tinyssh/porttostr.c 0000664 0000000 0000000 00000001504 14544472107 0017403 0 ustar 00root root 0000000 0000000 /*
20130604
Jan Mojzis
Public domain.
*/
#include "crypto_uint16.h"
#include "porttostr.h"
/*
The 'porttostr(strbuf,port)' converts 'port' from network byte order
into the 0-terminated string. The 'port' length is always 2 bytes.
The caller must allocate at least PORTTOSTR_LEN bytes for 'strbuf'.
*/
char *porttostr(char *strbuf, const unsigned char *port) {
long long len = 0;
crypto_uint16 num;
static char staticbuf[PORTTOSTR_LEN];
if (!strbuf) strbuf = staticbuf; /* not thread-safe */
num = port[0]; num <<= 8; num |= port[1];
do {
num /= 10; ++len;
} while (num);
strbuf += len;
num = port[0]; num <<= 8; num |= port[1];
do {
*--strbuf = '0' + (num % 10);
num /= 10;
} while (num);
while (len < PORTTOSTR_LEN) strbuf[len++] = 0;
return strbuf;
}
tinyssh-20240101/tinyssh/porttostr.h 0000664 0000000 0000000 00000000213 14544472107 0017404 0 ustar 00root root 0000000 0000000 #ifndef _PORTTOSTR_H____
#define _PORTTOSTR_H____
#define PORTTOSTR_LEN 6
extern char *porttostr(char *, const unsigned char *);
#endif
tinyssh-20240101/tinyssh/purge.h 0000664 0000000 0000000 00000000137 14544472107 0016453 0 ustar 00root root 0000000 0000000 #ifndef _PURGE_H____
#define _PURGE_H____
#include "cleanup.h"
#define purge cleanup_
#endif
tinyssh-20240101/tinyssh/randommod.c 0000664 0000000 0000000 00000000625 14544472107 0017306 0 ustar 00root root 0000000 0000000 /* taken from nacl-20110221, from curvecp/randommod.c */
#include "randombytes.h"
#include "randommod.h"
/* XXX: current implementation is limited to n<2^55 */
long long randommod(long long n)
{
long long result = 0;
long long j;
unsigned char r[32];
if (n <= 1) return 0;
randombytes(r,32);
for (j = 0;j < 32;++j) result = (result * 256 + (unsigned long long) r[j]) % n;
return result;
}
tinyssh-20240101/tinyssh/randommod.h 0000664 0000000 0000000 00000000142 14544472107 0017305 0 ustar 00root root 0000000 0000000 #ifndef _RANDOMMOD_H____
#define _RANDOMMOD_H____
extern long long randommod(long long);
#endif
tinyssh-20240101/tinyssh/readall.c 0000664 0000000 0000000 00000001060 14544472107 0016724 0 ustar 00root root 0000000 0000000 /* taken from nacl-20110221, from curvecp/load.c */
#include
#include "e.h"
#include "readall.h"
int readall(int fd, void *xv, long long xlen) {
long long r;
unsigned char *x = (unsigned char *)xv;
while (xlen > 0) {
r = xlen;
if (r > 1048576) r = 1048576;
r = read(fd, x, r);
if (r == 0) errno = EPROTO;
if (r <= 0) {
if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) continue;
return -1;
}
x += r;
xlen -= r;
}
return 0;
}
tinyssh-20240101/tinyssh/readall.h 0000664 0000000 0000000 00000000143 14544472107 0016732 0 ustar 00root root 0000000 0000000 #ifndef _READALL_H____
#define _READALL_H____
extern int readall(int, void *, long long);
#endif
tinyssh-20240101/tinyssh/savesync.c 0000664 0000000 0000000 00000001002 14544472107 0017147 0 ustar 00root root 0000000 0000000 /* taken from nacl-20110221, from curvecp/savesync.c */
#include
#include