From 74d288e05c2d0cb97186f51049813b3e5b5bb0cd Mon Sep 17 00:00:00 2001 From: Dimitri John Ledkov Date: Wed, 18 Oct 2017 13:15:59 +0100 Subject: New upstream release. --- .gitignore | 1 - .travis.yml | 35 +- Android.mk | 2 +- CHANGES | 60 + Documentation/Makefile.in | 22 +- Documentation/btrfs-balance.8.gz | Bin 6027 -> 6045 bytes Documentation/btrfs-balance.asciidoc | 20 +- Documentation/btrfs-check.8.gz | Bin 2525 -> 2692 bytes Documentation/btrfs-check.asciidoc | 14 +- Documentation/btrfs-convert.8.gz | Bin 2519 -> 2711 bytes Documentation/btrfs-convert.asciidoc | 27 +- Documentation/btrfs-device.8.gz | Bin 4490 -> 4494 bytes Documentation/btrfs-filesystem.8.gz | Bin 5843 -> 5853 bytes Documentation/btrfs-filesystem.asciidoc | 2 +- Documentation/btrfs-find-root.8.gz | Bin 846 -> 850 bytes Documentation/btrfs-image.8.gz | Bin 1451 -> 1454 bytes Documentation/btrfs-inspect-internal.8.gz | Bin 3029 -> 3034 bytes Documentation/btrfs-ioctl.asciidoc | 140 + Documentation/btrfs-man5.asciidoc | 8 +- Documentation/btrfs-map-logical.8.gz | Bin 863 -> 867 bytes Documentation/btrfs-property.8.gz | Bin 1415 -> 1423 bytes Documentation/btrfs-property.asciidoc | 2 +- Documentation/btrfs-qgroup.8.gz | Bin 2365 -> 2368 bytes Documentation/btrfs-quota.8.gz | Bin 4720 -> 4887 bytes Documentation/btrfs-quota.asciidoc | 18 +- Documentation/btrfs-receive.8.gz | Bin 2014 -> 2017 bytes Documentation/btrfs-replace.8.gz | Bin 1622 -> 1624 bytes Documentation/btrfs-rescue.8.gz | Bin 1707 -> 1710 bytes Documentation/btrfs-rescue.asciidoc | 1 + Documentation/btrfs-restore.8.gz | Bin 1968 -> 1972 bytes Documentation/btrfs-scrub.8.gz | Bin 2145 -> 2148 bytes Documentation/btrfs-select-super.8.gz | Bin 1252 -> 1258 bytes Documentation/btrfs-send.8.gz | Bin 1704 -> 1708 bytes Documentation/btrfs-subvolume.8.gz | Bin 3117 -> 3121 bytes Documentation/btrfs.5.gz | Bin 9198 -> 9228 bytes Documentation/btrfs.8.gz | Bin 2202 -> 2205 bytes Documentation/btrfstune.8.gz | Bin 1995 -> 1997 bytes Documentation/fsck.btrfs.8.gz | Bin 1114 -> 1119 bytes Documentation/mkfs.btrfs.8.gz | Bin 6250 -> 6254 bytes INSTALL | 1 + Makefile | 82 +- Makefile.inc.in | 8 +- README.md | 7 +- backref.c | 133 +- btrfs-calc-size.c | 1 - btrfs-completion | 227 +- btrfs-corrupt-block.c | 14 +- btrfs-debug-tree.c | 1 - btrfs-debugfs | 9 +- btrfs-list.c | 26 +- btrfs-map-logical.c | 2 +- btrfs-zero-log.c | 1 + btrfstune.c | 4 +- chunk-recover.c | 1 + cmds-check.c | 615 +- cmds-fi-du.c | 26 +- cmds-fi-du.h | 23 - cmds-fi-usage.c | 3 +- cmds-fi-usage.h | 3 - cmds-filesystem.c | 105 +- cmds-inspect-dump-super.c | 12 +- cmds-inspect-dump-super.h | 26 - cmds-inspect-dump-tree.c | 41 +- cmds-inspect-dump-tree.h | 24 - cmds-inspect-tree-stats.c | 2 - cmds-inspect-tree-stats.h | 26 - cmds-inspect.c | 5 +- cmds-property.c | 30 - cmds-receive.c | 2 +- cmds-rescue.c | 1 + cmds-restore.c | 55 +- cmds-subvolume.c | 109 +- commands.h | 10 + configure | 395 +- configure.ac | 58 +- convert/main.c | 163 +- convert/source-ext2.c | 44 +- convert/source-ext2.h | 42 - convert/source-fs.c | 50 +- convert/source-fs.h | 58 +- convert/source-reiserfs.c | 976 ++ convert/source-reiserfs.h | 73 + ctree.c | 9 +- ctree.h | 27 +- debian/changelog | 6 + debian/patches/cross.patch | 8 +- dir-test.c | 1 + disk-io.c | 195 +- disk-io.h | 9 +- extent-tree.c | 19 +- extent_io.c | 73 +- extent_io.h | 4 + file-item.c | 2 +- find-root.c | 2 +- free-space-cache.c | 2 +- fsfeatures.h | 2 +- help.c | 3 + help.h | 9 +- image/main.c | 208 +- inode.c | 130 + kernel-lib/tables.c | 10362 +++++++++++++++++++ messages.h | 6 +- mkfs/common.c | 174 +- mkfs/common.h | 16 +- mkfs/main.c | 150 +- print-tree.c | 363 +- print-tree.h | 2 +- qgroup-verify.c | 2 +- quick-test.c | 5 + random-test.c | 1 + tests/README.md | 15 +- tests/build-tests.sh | 22 + tests/cli-tests/007-check-force/test.sh | 32 + tests/common | 77 +- tests/common.convert | 49 +- tests/common.local | 11 +- tests/convert-tests.sh | 11 +- tests/convert-tests/001-ext2-basic/test.sh | 1 + tests/convert-tests/002-ext3-basic/test.sh | 1 + tests/convert-tests/003-ext4-basic/test.sh | 1 + .../convert-tests/005-delete-all-rollback/test.sh | 3 +- tests/convert-tests/006-large-hole-extent/test.sh | 1 + .../007-unsupported-block-sizes/test.sh | 1 + tests/convert-tests/008-readonly-image/test.sh | 7 +- tests/convert-tests/009-common-inode-flags/test.sh | 5 +- tests/convert-tests/010-reiserfs-basic/test.sh | 21 + .../011-reiserfs-delete-all-rollback/test.sh | 72 + .../012-reiserfs-large-hole-extent/test.sh | 28 + .../013-reiserfs-common-inode-flags/test.sh | 42 + .../014-reiserfs-tail-handling/test.sh | 79 + .../026-bad-dir-item-name/default_case.img.xz | Bin 0 -> 1924 bytes tests/fsck-tests/026-bad-dir-item-name/test.sh | 13 + .../images/bko-155551-unaligned-tree-block.raw.txt | 49 + .../images/bko-155551-unaligned-tree-block.raw.xz | Bin 0 -> 3692 bytes .../misc-tests/006-image-on-missing-device/test.sh | 40 +- tests/misc-tests/011-delete-missing-device/test.sh | 41 +- .../022-filesystem-du-on-empty-subvol/test.sh | 26 + .../023-device-usage-with-missing-device/test.sh | 40 + .../misc-tests/024-inspect-internal-rootid/test.sh | 57 + .../025-zstd-compression/compress.raw.xz | Bin 0 -> 18220 bytes tests/misc-tests/025-zstd-compression/test.sh | 56 + .../026-image-non-printable-chars/test.sh | 30 + .../027-subvol-list-deleted-toplevel/test.sh | 18 + tests/mkfs-tests/001-basic-profiles/test.sh | 35 +- .../005-long-device-name-for-ssd/test.sh | 1 + tests/mkfs-tests/006-partitioned-loopdev/test.sh | 1 + .../009-special-files-for-rootdir/test.sh | 36 + tests/scan-results.sh | 2 + tests/sha-private.h | 4 + tests/sha224-256.c | 20 - transaction.c | 185 + transaction.h | 32 +- travis/should-run-test | 24 + utils.c | 133 +- utils.h | 20 + version.sh | 2 +- volumes.c | 28 +- 157 files changed, 15213 insertions(+), 1795 deletions(-) create mode 100644 Documentation/btrfs-ioctl.asciidoc delete mode 100644 cmds-fi-du.h delete mode 100644 cmds-inspect-dump-super.h delete mode 100644 cmds-inspect-dump-tree.h delete mode 100644 cmds-inspect-tree-stats.h create mode 100644 convert/source-reiserfs.c create mode 100644 convert/source-reiserfs.h create mode 100644 kernel-lib/tables.c create mode 100755 tests/cli-tests/007-check-force/test.sh create mode 100755 tests/convert-tests/010-reiserfs-basic/test.sh create mode 100755 tests/convert-tests/011-reiserfs-delete-all-rollback/test.sh create mode 100755 tests/convert-tests/012-reiserfs-large-hole-extent/test.sh create mode 100755 tests/convert-tests/013-reiserfs-common-inode-flags/test.sh create mode 100755 tests/convert-tests/014-reiserfs-tail-handling/test.sh create mode 100644 tests/fsck-tests/026-bad-dir-item-name/default_case.img.xz create mode 100755 tests/fsck-tests/026-bad-dir-item-name/test.sh create mode 100644 tests/fuzz-tests/images/bko-155551-unaligned-tree-block.raw.txt create mode 100644 tests/fuzz-tests/images/bko-155551-unaligned-tree-block.raw.xz create mode 100755 tests/misc-tests/022-filesystem-du-on-empty-subvol/test.sh create mode 100755 tests/misc-tests/023-device-usage-with-missing-device/test.sh create mode 100755 tests/misc-tests/024-inspect-internal-rootid/test.sh create mode 100644 tests/misc-tests/025-zstd-compression/compress.raw.xz create mode 100755 tests/misc-tests/025-zstd-compression/test.sh create mode 100755 tests/misc-tests/026-image-non-printable-chars/test.sh create mode 100755 tests/misc-tests/027-subvol-list-deleted-toplevel/test.sh create mode 100755 tests/mkfs-tests/009-special-files-for-rootdir/test.sh create mode 100644 transaction.c create mode 100755 travis/should-run-test diff --git a/.gitignore b/.gitignore index 7d7a5482..8e607f6e 100644 --- a/.gitignore +++ b/.gitignore @@ -36,7 +36,6 @@ btrfs-calc-size btrfs-crc btrfstune mktables -kernel-lib/tables.c libbtrfs.a libbtrfs.so libbtrfs.so.0 diff --git a/.travis.yml b/.travis.yml index 15313df4..50b3c1c8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,7 +23,8 @@ compiler: - gcc - clang -cache: ccache +cache: + ccache: true git: depth: 2 @@ -46,8 +47,28 @@ env: before_install: - sudo apt-get update -qq - - sudo apt-get install -qq e2fslibs-dev gcc libacl1-dev libblkid-dev liblzo2-dev make pkg-config udev zlib1g-dev + - sudo apt-get install -qq e2fslibs-dev gcc libacl1-dev libblkid-dev liblzo2-dev make pkg-config udev zlib1g-dev acl attr reiserfsprogs - echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca- + - "mkdir tmp-reiser; + cd tmp-reiser; + wget https://www.kernel.org/pub/linux/kernel/people/jeffm/reiserfsprogs/v3.6.27/reiserfsprogs-3.6.27.tar.xz; + tar xf reiserfsprogs-3.6.27.tar.xz; + cd reiserfsprogs-3.6.27; + ./configure --prefix=/usr; + make all; + sudo make install; + cd ../.. + " + - "mkdir tmp-zstd; + cd tmp-zstd; + wget https://github.com/facebook/zstd/archive/v1.3.1.tar.gz; + tar xf v1.3.1.tar.gz; + cd zstd-1.3.1; + make; + sudo make install PREFIX=/usr; + cd ../.. + " + - "./autogen.sh && ./configure --disable-documentation && make" addons: coverity_scan: @@ -60,8 +81,8 @@ addons: branch_pattern: coverity_scan script: - - "./autogen.sh && ./configure --disable-documentation && make" - - "make TEST_LOG=dump test-cli" - - "make TEST_LOG=dump test-mkfs" - - "make TEST_LOG=dump test-check" - - "make TEST_LOG=dump test-misc" + - "if ./travis-should-run-test; then make TEST_LOG=dump test-cli; fi" + - "if ./travis-should-run-test; then make TEST_LOG=dump test-mkfs; fi" + - "if ./travis-should-run-test; then make TEST_LOG=dump test-check; fi" + - "if ./travis-should-run-test; then make TEST_LOG=dump test-misc; fi" + - "if [ $TRAVIS_BRANCH = release-test ]; then make TEST_LOG=dump test-convert; fi" diff --git a/Android.mk b/Android.mk index c417dbf0..958b8bd7 100644 --- a/Android.mk +++ b/Android.mk @@ -23,7 +23,7 @@ objects := ctree.c disk-io.c kernel-lib/radix-tree.c extent-tree.c print-tree.c qgroup.c free-space-cache.c kernel-lib/list_sort.c props.c \ kernel-shared/ulist.c qgroup-verify.c backref.c string-table.c task-utils.c \ inode.c file.c find-root.c free-space-tree.c help.c send-dump.c \ - fsfeatures.c kernel-lib/tables.c kernel-lib/raid56.c + fsfeatures.c kernel-lib/tables.c kernel-lib/raid56.c transaction.c cmds_objects := cmds-subvolume.c cmds-filesystem.c cmds-device.c cmds-scrub.c \ cmds-inspect.c cmds-balance.c cmds-send.c cmds-receive.c \ cmds-quota.c cmds-qgroup.c cmds-replace.c cmds-check.c \ diff --git a/CHANGES b/CHANGES index db24f7c6..1bf16f8a 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,63 @@ +btrfs-progs-4.13.3 (2017-10-16) + * check: fix --force, wrong check for a mounted block device + * build: fix --with-convert parsing + * subvol list: don't list TOPLEVEL + * other: update tests + +btrfs-progs-4.13.2 (2017-10-06) + * subvol list: + * don't list toplevel subvolume among deleted (broken since 4.8.3) + * minor adjustments of uuid print format + * subvol delete: + * fix swapped behaviour of --commit-each and --commit-after + * fix potentially lost sync if subvolumes are from different filesystems + * check: add cache for metadata blocks, should improve performance + * other: + * new tests, testsuite updates + * doc updates + * cleanups + +btrfs-progs-4.13.1 (2017-09-25) + * image: speed up generating the sanitized names, do not generate unprintable chars + * completion: add missing commands, better mount point detection + * restore: add zstd support; libzstd detected automatically, will be + requested by default in the future, or can be configured out + * other: + * misc fixes found by sparse + * doc enhancements, ioctl manual page started + * updated and new tests + * build fixes + +btrfs-progs-4.13 (2017-09-08) + * convert: reiserfs support + * check: new option --force to allow check of a mounted filesystem (no repair) + * mkfs: --rootdir will now copy special files + * dump-tree: minor output changes + * inspect rootid: accept file as arugment + * dev usage: don't calculate slack space for missing devices + * fi du: don't print error on EMPTY_SUBVOL (inode number 2) + * build: + * fixed support for sanitization features on gcc (tsan, asan, ubsan) + * fix PIE build + * other: + * misc cleanups and stability fixes + * travis CI enhancements + * new tests, fuzzed images + * testsuite cleanups + +btrfs-progs-4.12.1 (2017-08-25) + * build: + * fix cross-compilation + * use gnu90 explicitly + * dump-tree: more relaxed checks so -b can print block on a damaged fs + * convert: fix the 1MB range exclusion + * check: more dir_item hash checks + * other + * added missing getopt spec for some options + * doc fixes + * cleanups + * test updates + btrfs-progs-4.12 (2017-07-26) * subvol show: new options --rootid, --uuid to show subvol by the given spec * convert: progress report fixes, found by tsan diff --git a/Documentation/Makefile.in b/Documentation/Makefile.in index 539c6b55..bdc3dc3f 100644 --- a/Documentation/Makefile.in +++ b/Documentation/Makefile.in @@ -32,19 +32,19 @@ MAN8_TXT += btrfs-property.asciidoc # Category 5 manual page MAN5_TXT += btrfs-man5.asciidoc -MAN_TXT = $(MAN8_TXT) $(MAN5_TXT) +MAN3_TXT += btrfs-ioctl.asciidoc + +MAN_TXT = $(MAN3_TXT) $(MAN8_TXT) $(MAN5_TXT) MAN_XML = $(patsubst %.asciidoc,%.xml,$(MAN_TXT)) MAN_HTML = $(patsubst %.asciidoc,%.html,$(MAN_TXT)) - -DOC_MAN5 = $(patsubst %.asciidoc,%.5,$(MAN5_TXT)) +GZ_MAN3 = $(patsubst %.asciidoc,%.3.gz,$(MAN3_TXT)) GZ_MAN5 = $(patsubst %.asciidoc,%.5.gz,$(MAN5_TXT)) - -DOC_MAN8 = $(patsubst %.asciidoc,%.8,$(MAN8_TXT)) GZ_MAN8 = $(patsubst %.asciidoc,%.8.gz,$(MAN8_TXT)) mandir ?= $(prefix)/share/man -man8dir = $(mandir)/man8 +man3dir = $(mandir)/man3 man5dir = $(mandir)/man5 +man8dir = $(mandir)/man8 ASCIIDOC = @ASCIIDOC@ ASCIIDOC_EXTRA = @@ -72,7 +72,8 @@ endif endif all: man -man: man5 man8 +man: man3 man5 man8 +man3: $(GZ_MAN3) man5: $(GZ_MAN5) man8: $(GZ_MAN8) html: $(MAN_HTML) @@ -99,12 +100,19 @@ uninstall: clean: $(QUIET_RM)$(RM) -f *.xml *.xml+ *.5 *.5.gz *.8 *.8.gz *.html +%.3.gz : %.3 + $(QUIET_GZIP)$(GZIPCMD) -n -c $< > $@ + %.5.gz : %.5 $(QUIET_GZIP)$(GZIPCMD) -n -c $< > $@ %.8.gz : %.8 $(QUIET_GZIP)$(GZIPCMD) -n -c $< > $@ +%.3 : %.xml + $(QUIET_XMLTO)$(RM) -f $@ && \ + $(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $< + %.5 : %.xml $(QUIET_XMLTO)$(RM) -f $@ && \ $(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $< diff --git a/Documentation/btrfs-balance.8.gz b/Documentation/btrfs-balance.8.gz index 23cc2625..1d553317 100644 Binary files a/Documentation/btrfs-balance.8.gz and b/Documentation/btrfs-balance.8.gz differ diff --git a/Documentation/btrfs-balance.asciidoc b/Documentation/btrfs-balance.asciidoc index fba55140..cc81de91 100644 --- a/Documentation/btrfs-balance.asciidoc +++ b/Documentation/btrfs-balance.asciidoc @@ -45,29 +45,27 @@ COMPATIBILITY NOTE: The balance subcommand also exists under the *btrfs filesystem* namespace. This still works for backward compatibility but is deprecated and -should not be used anymore. +should not be used any more. NOTE: A short syntax *btrfs balance * works due to backward compatibility -but is deprecated and should not be used anymore. Use *btrfs balance start* +but is deprecated and should not be used any more. Use *btrfs balance start* command instead. PERFORMANCE IMPLICATIONS ------------------------ -Balance operation is intense namely in the IO respect, but can be also CPU -intense. It affects other actions on the filesystem. There are typically lots -of data being copied from one location to another, and lots of metadata get -updated. +Balancing operations are very IO intensive and can also be quite CPU intensive, +impacting other ongoing filesystem operations. Typically large amounts of data +are copied from one location to another, with corresponding metadata updates. -Depending on the actual block group layout, it can be also seek-heavy. The -performance on rotational devices is noticeably worse than on SSDs or fast -arrays. +Depending upon the block group layout, it can also be seek heavy. Performance +on rotational devices is noticeably worse compared to SSDs or fast arrays. SUBCOMMAND ---------- *cancel* :: -cancel running or paused balance, the command will block and wait until the -actually processed blockgroup is finished +cancels a running or paused balance, the command will block and wait until the +current blockgroup being processed completes *pause* :: pause running balance operation, this will store the state of the balance diff --git a/Documentation/btrfs-check.8.gz b/Documentation/btrfs-check.8.gz index 05538321..9f5c4bca 100644 Binary files a/Documentation/btrfs-check.8.gz and b/Documentation/btrfs-check.8.gz differ diff --git a/Documentation/btrfs-check.asciidoc b/Documentation/btrfs-check.asciidoc index 28ed9dd7..fbf48847 100644 --- a/Documentation/btrfs-check.asciidoc +++ b/Documentation/btrfs-check.asciidoc @@ -3,7 +3,7 @@ btrfs-check(8) NAME ---- -btrfs-check - check or repair an unmounted btrfs filesystem +btrfs-check - check or repair a btrfs filesystem SYNOPSIS -------- @@ -13,7 +13,9 @@ DESCRIPTION ----------- The filesystem checker is used to verify structural integrity of a filesystem -and attempt to repair it if requested. The filesystem must be unmounted. +and attempt to repair it if requested. It is recommended to unmount the +filesystem prior to running the check, but it is possible to start checking a +mounted filesystem (see '--force'). By default, *btrfs check* will not modify the device but you can reaffirm that by the option '--readonly'. @@ -60,7 +62,7 @@ show extent state for the given subvolume -p|--progress:: indicate progress at various checking phases ---qgroup-report:: +-Q|--qgroup-report:: verify qgroup accounting and compare against filesystem accounting -r|--tree-root :: @@ -120,6 +122,12 @@ needs to re-read blocks when needed. This may increase run time. NOTE: 'lowmem' mode does not work with '--repair' yet, and is still considered experimental. +--force:: +allow to work on a mounted filesystem. Note that this should work fine on a +quiescent or read-only mounted filesystem but may crash if the device is +changed externally, eg. by the kernel module. Repair without mount checks is +not supported right now. + EXIT STATUS ----------- *btrfs check* returns a zero exit status if it succeeds. Non zero is diff --git a/Documentation/btrfs-convert.8.gz b/Documentation/btrfs-convert.8.gz index 2ee31c05..9758a080 100644 Binary files a/Documentation/btrfs-convert.8.gz and b/Documentation/btrfs-convert.8.gz differ diff --git a/Documentation/btrfs-convert.asciidoc b/Documentation/btrfs-convert.asciidoc index cbc1c730..07ff608a 100644 --- a/Documentation/btrfs-convert.asciidoc +++ b/Documentation/btrfs-convert.asciidoc @@ -3,7 +3,7 @@ btrfs-convert(8) NAME ---- -btrfs-convert - convert from ext2/3/4 filesystem to btrfs in-place +btrfs-convert - convert from ext2/3/4 or reiserfs filesystem to btrfs in-place SYNOPSIS -------- @@ -11,13 +11,22 @@ SYNOPSIS DESCRIPTION ----------- -*btrfs-convert* is used to convert existing ext2/3/4 filesystem image to a -btrfs filesystem in-place. The original filesystem image is accessible -subvolume named 'ext2_saved' as file 'image'. +*btrfs-convert* is used to convert existing source filesystem image to a btrfs +filesystem in-place. The original filesystem image is accessible in subvolume +named like 'ext2_saved' as file 'image'. -WARNING: If you are going to perform rollback to ext2/3/4, you should not -execute *btrfs balance* command on the converted filesystem. This will change -the extent layout and make *btrfs-convert* unable to rollback. +Supported filesystems: + +* ext2, ext3, ext4 -- original feature, always built in + +* reiserfs -- since version 4.13, opptinally built, requires libreiserfscore 3.6.27 + +The list of supported source filesystem by a given binary is listed at the end +of help (option '--help'). + +WARNING: If you are going to perform rollback to the original filesystem, you +should not execute *btrfs balance* command on the converted filesystem. This +will change the extent layout and make *btrfs-convert* unable to rollback. The conversion utilizes free space of the original filesystem. The exact estimate of the required space cannot be foretold. The final btrfs metadata @@ -38,8 +47,8 @@ NOTE: The source filesystem should be clean, you are encouraged to run the **REMOVE THE ORIGINAL FILESYSTEM METADATA** -By removing the 'ext2_saved' subvolume, all metadata of the original filesystem -will be removed: +By removing the subvolume named like 'ext2_saved' or 'reiserfs_saved', all +metadata of the original filesystem will be removed: # btrfs subvolume delete /mnt/ext2_saved diff --git a/Documentation/btrfs-device.8.gz b/Documentation/btrfs-device.8.gz index f9a2bb44..a457c952 100644 Binary files a/Documentation/btrfs-device.8.gz and b/Documentation/btrfs-device.8.gz differ diff --git a/Documentation/btrfs-filesystem.8.gz b/Documentation/btrfs-filesystem.8.gz index 1dac3e56..b1628e4c 100644 Binary files a/Documentation/btrfs-filesystem.8.gz and b/Documentation/btrfs-filesystem.8.gz differ diff --git a/Documentation/btrfs-filesystem.asciidoc b/Documentation/btrfs-filesystem.asciidoc index b60ef74b..41b30320 100644 --- a/Documentation/btrfs-filesystem.asciidoc +++ b/Documentation/btrfs-filesystem.asciidoc @@ -112,7 +112,7 @@ KiB, MiB, GiB, TiB, PiB, or EiB, respectively (case does not matter). be verbose, print file names as they're submitted for defragmentation -c[]:::: compress file contents while defragmenting. Optional argument selects the compression -algorithm, 'zlib' (default) or 'lzo'. Currently it's not possible to select no +algorithm, 'zlib' (default), 'lzo' or 'zstd'. Currently it's not possible to select no compression. See also section 'EXAMPLES'. -r:::: defragment files recursively in given directories diff --git a/Documentation/btrfs-find-root.8.gz b/Documentation/btrfs-find-root.8.gz index beda326d..bbe8ad41 100644 Binary files a/Documentation/btrfs-find-root.8.gz and b/Documentation/btrfs-find-root.8.gz differ diff --git a/Documentation/btrfs-image.8.gz b/Documentation/btrfs-image.8.gz index 518b0714..cc7fc7ba 100644 Binary files a/Documentation/btrfs-image.8.gz and b/Documentation/btrfs-image.8.gz differ diff --git a/Documentation/btrfs-inspect-internal.8.gz b/Documentation/btrfs-inspect-internal.8.gz index 3072fda0..145bbb3d 100644 Binary files a/Documentation/btrfs-inspect-internal.8.gz and b/Documentation/btrfs-inspect-internal.8.gz differ diff --git a/Documentation/btrfs-ioctl.asciidoc b/Documentation/btrfs-ioctl.asciidoc new file mode 100644 index 00000000..11bf62b1 --- /dev/null +++ b/Documentation/btrfs-ioctl.asciidoc @@ -0,0 +1,140 @@ +btrfs-ioctl(3) +================ + +NAME +---- + +btrfs-ioctl - documentation for the ioctl interface to btrfs + +DATA STRUCTURES AND DEFINITIONS +------------------------------- + +[verse] +struct btrfs_ioctl_vol_args { + __s64 fd; + char name[BTRFS_PATH_NAME_MAX + 1]; +}; + +[verse] +struct btrfs_ioctl_vol_args_v2 { + \__s64 fd; + \__u64 transid; + \__u64 flags; + union { + struct { + \__u64 size; + struct btrfs_qgroup_inherit \__user *qgroup_inherit; + }; + __u64 unused[4]; + }; + char name[BTRFS_SUBVOL_NAME_MAX + 1]; +}; + +[verse] +BTRFS_SUBVOL_NAME_MAX = 4039 +BTRFS_PATH_NAME_MAX = 4087 + +LIST OF IOCTLS +-------------- + + BTRFS_IOC_SUBVOL_CREATE -- (obsolete) create a subvolume + BTRFS_IOC_SNAP_CREATE + BTRFS_IOC_DEFRAG + BTRFS_IOC_RESIZE + BTRFS_IOC_SCAN_DEV + BTRFS_IOC_TRANS_START + BTRFS_IOC_TRANS_END + BTRFS_IOC_SYNC + BTRFS_IOC_CLONE + BTRFS_IOC_ADD_DEV + BTRFS_IOC_RM_DEV + BTRFS_IOC_BALANCE + BTRFS_IOC_CLONE_RANGE + BTRFS_IOC_SUBVOL_CREATE + BTRFS_IOC_SNAP_DESTROY + BTRFS_IOC_DEFRAG_RANGE + BTRFS_IOC_TREE_SEARCH + BTRFS_IOC_TREE_SEARCH_V2 + BTRFS_IOC_INO_LOOKUP + BTRFS_IOC_DEFAULT_SUBVOL + BTRFS_IOC_SPACE_INFO + BTRFS_IOC_START_SYNC + BTRFS_IOC_WAIT_SYNC + BTRFS_IOC_SNAP_CREATE_V2 + BTRFS_IOC_SUBVOL_CREATE_V2 -- create a subvolume + BTRFS_IOC_SUBVOL_GETFLAGS + BTRFS_IOC_SUBVOL_SETFLAGS + BTRFS_IOC_SCRUB + BTRFS_IOC_SCRUB_CANCEL + BTRFS_IOC_SCRUB_PROGRESS + BTRFS_IOC_DEV_INFO + BTRFS_IOC_FS_INFO + BTRFS_IOC_BALANCE_V2 + BTRFS_IOC_BALANCE_CTL + BTRFS_IOC_BALANCE_PROGRESS + BTRFS_IOC_INO_PATHS + BTRFS_IOC_LOGICAL_INO + BTRFS_IOC_SET_RECEIVED_SUBVOL + BTRFS_IOC_SEND + BTRFS_IOC_DEVICES_READY + BTRFS_IOC_QUOTA_CTL + BTRFS_IOC_QGROUP_ASSIGN + BTRFS_IOC_QGROUP_CREATE + BTRFS_IOC_QGROUP_LIMIT + BTRFS_IOC_QUOTA_RESCAN + BTRFS_IOC_QUOTA_RESCAN_STATUS + BTRFS_IOC_QUOTA_RESCAN_WAIT + BTRFS_IOC_GET_FSLABEL + BTRFS_IOC_SET_FSLABEL + BTRFS_IOC_GET_DEV_STATS + BTRFS_IOC_DEV_REPLACE + BTRFS_IOC_FILE_EXTENT_SAME + BTRFS_IOC_GET_FEATURES + BTRFS_IOC_SET_FEATURES + BTRFS_IOC_GET_SUPPORTED_FEATURES + +DETAILED DESCRIPTION +-------------------- + +BTRFS_IOC_SUBVOL_CREATE +~~~~~~~~~~~~~~~~~~~~~~~ +NOTE: obsoleted by BTRFS_IOC_SUBVOL_CREATE_V2 + +_(since: 3.0, obsoleted: 4.0)_ Create a subvolume. + +ioctl fd:: file descriptor of the parent directory of the new subvolume +argument:: struct btrfs_ioctl_vol_args +fd:: ignored +name:: name of the subvolume, although the buffer can be almost 4k, the file +size is limited by linux VFS to 255 characters and must not contain a slash +('/') + + +BTRFS_IOC_SUBVOL_CREATE_V2 +~~~~~~~~~~~~~~~~~~~~~~~~~~ +NOTE: obsoletes BTRFS_IOC_SUBVOL_CREATE + +_(since: 3.6)_ Create a subvolume, qgroup inheritance can be specified. + +ioctl fd:: file descriptor of the parent directory of the new subvolume +argument:: struct btrfs_ioctl_vol_args_v2 +fd:: ignored +transid:: ignored +flags:: ignored +size:: ... +qgroup_inherit:: ... +name:: name of the subvolume, although the buffer can be almost 4k, the file +size is limited by linux VFS to 255 characters and must not contain a slash +('/') +devid:: ... + + +AVAILABILITY +------------ +*btrfs* is part of btrfs-progs. +Please refer to the btrfs wiki http://btrfs.wiki.kernel.org for +further details. + +SEE ALSO +-------- +`ioctl`(2) diff --git a/Documentation/btrfs-man5.asciidoc b/Documentation/btrfs-man5.asciidoc index 8d9031f5..3981435e 100644 --- a/Documentation/btrfs-man5.asciidoc +++ b/Documentation/btrfs-man5.asciidoc @@ -118,7 +118,7 @@ but a warning is printed if it's more than 300 seconds (5 minutes). (default: off) + Control BTRFS file data compression. Type may be specified as 'zlib', -'lzo' or 'no' (for no compression, used for remounting). If no type +'lzo', 'zstd' or 'no' (for no compression, used for remounting). If no type is specified, 'zlib' is used. If 'compress-force' is specified, the compression will allways be attempted, but the data may end up uncompressed if the compression would make them larger. @@ -472,6 +472,12 @@ page size the 'lzo' compression has been used on the filesystem, either as a mount option or via *btrfs filesystem defrag*. +*compress_zstd*:: +(since: 4.14) ++ +the 'zstd' compression has been used on the filesystem, either as a mount option +or via *btrfs filesystem defrag*. + *default_subvol*:: (since: 2.6.34) + diff --git a/Documentation/btrfs-map-logical.8.gz b/Documentation/btrfs-map-logical.8.gz index e8f26048..ce04a33a 100644 Binary files a/Documentation/btrfs-map-logical.8.gz and b/Documentation/btrfs-map-logical.8.gz differ diff --git a/Documentation/btrfs-property.8.gz b/Documentation/btrfs-property.8.gz index 34e80ae4..e8a46fc9 100644 Binary files a/Documentation/btrfs-property.8.gz and b/Documentation/btrfs-property.8.gz differ diff --git a/Documentation/btrfs-property.asciidoc b/Documentation/btrfs-property.asciidoc index 05ab0bc7..7ed6a7df 100644 --- a/Documentation/btrfs-property.asciidoc +++ b/Documentation/btrfs-property.asciidoc @@ -43,7 +43,7 @@ read-only flag of subvolume: true or false label:::: label of device compression:::: -compression setting for an inode: lzo, zlib, or "" (empty string) +compression setting for an inode: lzo, zlib, zstd, or "" (empty string) *list* [-t ] :: Lists available properties with their descriptions for the given object. diff --git a/Documentation/btrfs-qgroup.8.gz b/Documentation/btrfs-qgroup.8.gz index d6b7b036..8201a6e9 100644 Binary files a/Documentation/btrfs-qgroup.8.gz and b/Documentation/btrfs-qgroup.8.gz differ diff --git a/Documentation/btrfs-quota.8.gz b/Documentation/btrfs-quota.8.gz index cef3cede..7c6c3001 100644 Binary files a/Documentation/btrfs-quota.8.gz and b/Documentation/btrfs-quota.8.gz differ diff --git a/Documentation/btrfs-quota.asciidoc b/Documentation/btrfs-quota.asciidoc index ef2e5d33..f882647d 100644 --- a/Documentation/btrfs-quota.asciidoc +++ b/Documentation/btrfs-quota.asciidoc @@ -96,7 +96,23 @@ instead of '0/ID'. For all higher levels, the ID can be chosen freely. Each qgroup can contain a set of lower level qgroups, thus creating a hierarchy of qgroups. Figure 1 shows an example qgroup tree. -// TODO: insert Figure 1 + +---+ + |2/1| + +---+ + / \ + +---+/ \+---+ + |1/1| |1/2| + +---+ +---+ + / \ / \ + +---+/ \+---+/ \+---+ +qgroups |0/1| |0/2| |0/3| + +-+-+ +---+ +---+ + | / \ / \ + | / \ / \ + | / \ / \ +extents 1 2 3 4 + +Figure1: Sample qgroup hierarchy At the bottom, some extents are depicted showing which qgroups reference which extents. It is important to understand the notion of 'referenced' vs diff --git a/Documentation/btrfs-receive.8.gz b/Documentation/btrfs-receive.8.gz index f06a31a0..4b53e360 100644 Binary files a/Documentation/btrfs-receive.8.gz and b/Documentation/btrfs-receive.8.gz differ diff --git a/Documentation/btrfs-replace.8.gz b/Documentation/btrfs-replace.8.gz index 9e69a725..75fce06e 100644 Binary files a/Documentation/btrfs-replace.8.gz and b/Documentation/btrfs-replace.8.gz differ diff --git a/Documentation/btrfs-rescue.8.gz b/Documentation/btrfs-rescue.8.gz index fba9170b..cbf07923 100644 Binary files a/Documentation/btrfs-rescue.8.gz and b/Documentation/btrfs-rescue.8.gz differ diff --git a/Documentation/btrfs-rescue.asciidoc b/Documentation/btrfs-rescue.asciidoc index a9b471fe..24b619c6 100644 --- a/Documentation/btrfs-rescue.asciidoc +++ b/Documentation/btrfs-rescue.asciidoc @@ -57,6 +57,7 @@ or less if the commit was implied by other filesystem activity. + One can determine whether *zero-log* is needed according to the kernel backtrace: ++ ---- ? replay_one_dir_item+0xb5/0xb5 [btrfs] ? walk_log_tree+0x9c/0x19d [btrfs] diff --git a/Documentation/btrfs-restore.8.gz b/Documentation/btrfs-restore.8.gz index 33da7fc7..2fa149f6 100644 Binary files a/Documentation/btrfs-restore.8.gz and b/Documentation/btrfs-restore.8.gz differ diff --git a/Documentation/btrfs-scrub.8.gz b/Documentation/btrfs-scrub.8.gz index 4ebd23dd..edfc4390 100644 Binary files a/Documentation/btrfs-scrub.8.gz and b/Documentation/btrfs-scrub.8.gz differ diff --git a/Documentation/btrfs-select-super.8.gz b/Documentation/btrfs-select-super.8.gz index 87f421d8..2cf064db 100644 Binary files a/Documentation/btrfs-select-super.8.gz and b/Documentation/btrfs-select-super.8.gz differ diff --git a/Documentation/btrfs-send.8.gz b/Documentation/btrfs-send.8.gz index 100458c8..06002bd1 100644 Binary files a/Documentation/btrfs-send.8.gz and b/Documentation/btrfs-send.8.gz differ diff --git a/Documentation/btrfs-subvolume.8.gz b/Documentation/btrfs-subvolume.8.gz index 262073ff..3d8519a5 100644 Binary files a/Documentation/btrfs-subvolume.8.gz and b/Documentation/btrfs-subvolume.8.gz differ diff --git a/Documentation/btrfs.5.gz b/Documentation/btrfs.5.gz index 9b97da35..b72078a8 100644 Binary files a/Documentation/btrfs.5.gz and b/Documentation/btrfs.5.gz differ diff --git a/Documentation/btrfs.8.gz b/Documentation/btrfs.8.gz index 4c151f07..0330e855 100644 Binary files a/Documentation/btrfs.8.gz and b/Documentation/btrfs.8.gz differ diff --git a/Documentation/btrfstune.8.gz b/Documentation/btrfstune.8.gz index 0d2d6445..30a81a82 100644 Binary files a/Documentation/btrfstune.8.gz and b/Documentation/btrfstune.8.gz differ diff --git a/Documentation/fsck.btrfs.8.gz b/Documentation/fsck.btrfs.8.gz index 77706f2f..86c8bfc6 100644 Binary files a/Documentation/fsck.btrfs.8.gz and b/Documentation/fsck.btrfs.8.gz differ diff --git a/Documentation/mkfs.btrfs.8.gz b/Documentation/mkfs.btrfs.8.gz index c6fc318d..11956269 100644 Binary files a/Documentation/mkfs.btrfs.8.gz and b/Documentation/mkfs.btrfs.8.gz differ diff --git a/INSTALL b/INSTALL index 0465fb02..e7f81849 100644 --- a/INSTALL +++ b/INSTALL @@ -7,6 +7,7 @@ The Btrfs utility programs require the following libraries/tools to build: - libblkid - block device id library - liblzo2 - LZO data compression library - zlib - ZLIB data compression library +- libzstd - ZSTD data compression library version >= 1.0.0 (optional) For the btrfs-convert utility: diff --git a/Makefile b/Makefile index b3e2b636..d0657aae 100644 --- a/Makefile +++ b/Makefile @@ -55,10 +55,17 @@ DEBUG_CFLAGS_DEFAULT = -O0 -U_FORTIFY_SOURCE -ggdb3 DEBUG_CFLAGS_INTERNAL = DEBUG_CFLAGS := -TOPDIR := $(shell pwd) +DEBUG_LDFLAGS_DEFAULT = +DEBUG_LDFLAGS_INTERNAL = +DEBUG_LDFLAGS := + +ABSTOPDIR = $(shell pwd) +TOPDIR := . # Common build flags +CSTD = -std=gnu90 CFLAGS = $(SUBST_CFLAGS) \ + $(CSTD) \ -include config.h \ -DBTRFS_FLAT_INCLUDES \ -D_XOPEN_SOURCE=700 \ @@ -71,7 +78,9 @@ CFLAGS = $(SUBST_CFLAGS) \ $(EXTRA_CFLAGS) LDFLAGS = $(SUBST_LDFLAGS) \ - -rdynamic -L$(TOPDIR) $(EXTRA_LDFLAGS) + -rdynamic -L$(TOPDIR) \ + $(DEBUG_LDFLAGS_INTERNAL) \ + $(EXTRA_LDFLAGS) LIBS = $(LIBS_BASE) LIBBTRFS_LIBS = $(LIBS_BASE) @@ -84,11 +93,12 @@ STATIC_LIBS = $(STATIC_LIBS_BASE) # don't use FORTIFY with sparse because glibc with FORTIFY can # generate so many sparse errors that sparse stops parsing, # which masks real errors that we want to see. +# Note: additional flags might get added per-target later CHECKER := sparse check_defs := .cc-defines.h CHECKER_FLAGS := -include $(check_defs) -D__CHECKER__ \ -D__CHECK_ENDIAN__ -Wbitwise -Wuninitialized -Wshadow -Wundef \ - -U_FORTIFY_SOURCE + -U_FORTIFY_SOURCE -Wdeclaration-after-statement -Wdefault-bitfield-sign objects = ctree.o disk-io.o kernel-lib/radix-tree.o extent-tree.o print-tree.o \ root-tree.o dir-item.o file-item.o inode-item.o inode-map.o \ @@ -96,7 +106,7 @@ objects = ctree.o disk-io.o kernel-lib/radix-tree.o extent-tree.o print-tree.o \ qgroup.o free-space-cache.o kernel-lib/list_sort.o props.o \ kernel-shared/ulist.o qgroup-verify.o backref.o string-table.o task-utils.o \ inode.o file.o find-root.o free-space-tree.o help.o send-dump.o \ - fsfeatures.o kernel-lib/tables.o kernel-lib/raid56.o + fsfeatures.o kernel-lib/tables.o kernel-lib/raid56.o transaction.o cmds_objects = cmds-subvolume.o cmds-filesystem.o cmds-device.o cmds-scrub.o \ cmds-inspect.o cmds-balance.o cmds-send.o cmds-receive.o \ cmds-quota.o cmds-qgroup.o cmds-replace.o cmds-check.o \ @@ -112,8 +122,11 @@ libbtrfs_headers = send-stream.h send-utils.h send.h kernel-lib/rbtree.h btrfs-l kernel-lib/radix-tree.h kernel-lib/sizes.h kernel-lib/raid56.h \ extent-cache.h extent_io.h ioctl.h ctree.h btrfsck.h version.h convert_objects = convert/main.o convert/common.o convert/source-fs.o \ - convert/source-ext2.o + convert/source-ext2.o convert/source-reiserfs.o mkfs_objects = mkfs/main.o mkfs/common.o +image_objects = image/main.o +all_objects = $(objects) $(cmds_objects) $(libbtrfs_objects) $(convert_objects) \ + $(mkfs_objects) $(image_objects) TESTS = fsck-tests.sh convert-tests.sh @@ -134,6 +147,7 @@ endif ifeq ("$(origin D)", "command line") DEBUG_CFLAGS_INTERNAL = $(DEBUG_CFLAGS_DEFAULT) $(DEBUG_CFLAGS) + DEBUG_LDFLAGS_INTERNAL = $(DEBUG_LDFLAGS_DEFAULT) $(DEBUG_LDFLAGS) endif ifneq (,$(findstring verbose,$(D))) @@ -156,15 +170,17 @@ endif ifneq (,$(findstring asan,$(D))) DEBUG_CFLAGS_INTERNAL += -fsanitize=address + DEBUG_LDFLAGS_INTERNAL += -fsanitize=address -lasan endif ifneq (,$(findstring tsan,$(D))) - DEBUG_CFLAGS_INTERNAL += -fsanitize=thread -fPIE - LD_FLAGS += -fsanitize=thread -ltsan -pie + DEBUG_CFLAGS_INTERNAL += -fsanitize=thread -fPIC + DEBUG_LDFLAGS_INTERNAL += -fsanitize=thread -ltsan -pie endif ifneq (,$(findstring ubsan,$(D))) DEBUG_CFLAGS_INTERNAL += -fsanitize=undefined + DEBUG_LDFLAGS_INTERNAL += -fsanitize=undefined -lubsan endif ifneq (,$(findstring bcheck,$(D))) @@ -194,10 +210,14 @@ endif # external libs required by various binaries; for btrfs-foo, # specify btrfs_foo_libs = ; see $($(subst...)) rules below btrfs_convert_cflags = -DBTRFSCONVERT_EXT2=$(BTRFSCONVERT_EXT2) +btrfs_convert_cflags += -DBTRFSCONVERT_REISERFS=$(BTRFSCONVERT_REISERFS) btrfs_fragments_libs = -lgd -lpng -ljpeg -lfreetype btrfs_debug_tree_objects = cmds-inspect-dump-tree.o btrfs_show_super_objects = cmds-inspect-dump-super.o btrfs_calc_size_objects = cmds-inspect-tree-stats.o +cmds_restore_cflags = -DBTRFSRESTORE_ZSTD=$(BTRFSRESTORE_ZSTD) + +CHECKER_FLAGS += $(btrfs_convert_cflags) # collect values of the variables above standalone_deps = $(foreach dep,$(patsubst %,%_objects,$(subst -,_,$(filter btrfs-%, $(progs)))),$($(dep))) @@ -244,13 +264,14 @@ ifdef C grep -v __SIZE_TYPE__ > $(check_defs)) check = $(CHECKER) check_echo = echo + CSTD = -std=gnu89 else check = true check_echo = true endif %.o.d: %.c - $(Q)$(CC) -MD -MM -MG -MF $@ -MT $(@:.o.d=.o) -MT $(@:.o.d=.static.o) -MT $@ $(CFLAGS) $< + $(Q)$(CC) -MM -MG -MF $@ -MT $(@:.o.d=.o) -MT $(@:.o.d=.static.o) -MT $@ $(CFLAGS) $< # # Pick from per-file variables, btrfs_*_cflags @@ -325,7 +346,9 @@ mktables: kernel-lib/mktables.c @echo " [CC] $@" $(Q)$(CC) $(CFLAGS) $< -o $@ -kernel-lib/tables.c: mktables +# the target can be regenerated manually using mktables, but a local copy is +# kept so the build process is simpler +kernel-lib/tables.c: @echo " [TABLE] $@" $(Q)./mktables > $@ || ($(RM) -f $@ && exit 1) @@ -356,25 +379,25 @@ $(lib_links): btrfs-%.static: btrfs-%.static.o $(static_objects) $(patsubst %.o,%.static.o,$(standalone_deps)) $(static_libbtrfs_objects) @echo " [LD] $@" - $(Q)$(CC) $(STATIC_CFLAGS) -o $@ $@.o $(static_objects) \ + $(Q)$(CC) -o $@ $@.o $(static_objects) \ $(patsubst %.o, %.static.o, $($(subst -,_,$(subst .static,,$@)-objects))) \ $(static_libbtrfs_objects) $(STATIC_LDFLAGS) \ $($(subst -,_,$(subst .static,,$@)-libs)) $(STATIC_LIBS) btrfs-%: btrfs-%.o $(objects) $(standalone_deps) $(libs_static) @echo " [LD] $@" - $(Q)$(CC) $(CFLAGS) -o $@ $(objects) $@.o \ + $(Q)$(CC) -o $@ $(objects) $@.o \ $($(subst -,_,$@-objects)) \ $(libs_static) \ $(LDFLAGS) $(LIBS) $($(subst -,_,$@-libs)) btrfs: btrfs.o $(objects) $(cmds_objects) $(libs_static) @echo " [LD] $@" - $(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(LIBS_COMP) + $(Q)$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(LIBS_COMP) btrfs.static: btrfs.static.o $(static_objects) $(static_cmds_objects) $(static_libbtrfs_objects) @echo " [LD] $@" - $(Q)$(CC) $(STATIC_CFLAGS) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS) $(STATIC_LIBS_COMP) + $(Q)$(CC) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS) $(STATIC_LIBS_COMP) # For backward compatibility, 'btrfs' changes behaviour to fsck if it's named 'btrfsck' btrfsck: btrfs @@ -387,43 +410,43 @@ btrfsck.static: btrfs.static mkfs.btrfs: $(mkfs_objects) $(objects) $(libs_static) @echo " [LD] $@" - $(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) + $(Q)$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) mkfs.btrfs.static: $(static_mkfs_objects) $(static_objects) $(static_libbtrfs_objects) @echo " [LD] $@" - $(Q)$(CC) $(STATIC_CFLAGS) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS) + $(Q)$(CC) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS) btrfstune: btrfstune.o $(objects) $(libs_static) @echo " [LD] $@" - $(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) + $(Q)$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) btrfstune.static: btrfstune.static.o $(static_objects) $(static_libbtrfs_objects) @echo " [LD] $@" - $(Q)$(CC) $(STATIC_CFLAGS) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS) + $(Q)$(CC) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS) btrfs-image: image/main.o $(objects) $(libs_static) @echo " [LD] $@" - $(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(LIBS_COMP) + $(Q)$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(LIBS_COMP) btrfs-image.static: image/main.static.o $(static_objects) $(static_libbtrfs_objects) @echo " [LD] $@" - $(Q)$(CC) $(STATIC_CFLAGS) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS) $(STATIC_LIBS_COMP) + $(Q)$(CC) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS) $(STATIC_LIBS_COMP) btrfs-convert: $(convert_objects) $(objects) $(libs_static) @echo " [LD] $@" - $(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(btrfs_convert_libs) $(LIBS) + $(Q)$(CC) -o $@ $^ $(LDFLAGS) $(btrfs_convert_libs) $(LIBS) btrfs-convert.static: $(static_convert_objects) $(static_objects) $(static_libbtrfs_objects) @echo " [LD] $@" - $(Q)$(CC) $(STATIC_CFLAGS) -o $@ $^ $(STATIC_LDFLAGS) $(btrfs_convert_libs) $(STATIC_LIBS) + $(Q)$(CC) -o $@ $^ $(STATIC_LDFLAGS) $(btrfs_convert_libs) $(STATIC_LIBS) dir-test: dir-test.o $(objects) $(libs) @echo " [LD] $@" - $(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) + $(Q)$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) quick-test: quick-test.o $(objects) $(libs) @echo " [LD] $@" - $(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) + $(Q)$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) ioctl-test.o: ioctl-test.c ioctl.h kerncompat.h ctree.h @echo " [CC] $@" @@ -445,13 +468,13 @@ ioctl-test: ioctl-test.o ioctl-test-32: ioctl-test-32.o @echo " [LD32] $@" - $(Q)$(CC) $(CFLAGS) -m32 -o $@ $< $(LDFLAGS) + $(Q)$(CC) -m32 -o $@ $< $(LDFLAGS) @echo " ?[PAHOLE] $@.pahole" -$(Q)pahole $@ > $@.pahole ioctl-test-64: ioctl-test-64.o @echo " [LD64] $@" - $(Q)$(CC) $(CFLAGS) -m64 -o $@ $< $(LDFLAGS) + $(Q)$(CC) -m64 -o $@ $< $(LDFLAGS) @echo " ?[PAHOLE] $@.pahole" -$(Q)pahole $@ > $@.pahole @@ -465,7 +488,7 @@ library-test: library-test.c $(libs_shared) @echo " [TEST PREP] $@"$(eval TMPD=$(shell mktemp -d)) $(Q)mkdir -p $(TMPD)/include/btrfs && \ cp $(libbtrfs_headers) $(TMPD)/include/btrfs && \ - cd $(TMPD) && $(CC) -I$(TMPD)/include -o $@ $(addprefix $(TOPDIR)/,$^) -Wl,-rpath=$(TOPDIR) -lbtrfs + cd $(TMPD) && $(CC) -I$(TMPD)/include -o $@ $(addprefix $(ABSTOPDIR)/,$^) -Wl,-rpath=$(ABSTOPDIR) -lbtrfs @echo " [TEST RUN] $@" $(Q)cd $(TMPD) && ./$@ @echo " [TEST CLEAN] $@" @@ -475,14 +498,14 @@ library-test.static: library-test.c $(libs_static) @echo " [TEST PREP] $@"$(eval TMPD=$(shell mktemp -d)) $(Q)mkdir -p $(TMPD)/include/btrfs && \ cp $(libbtrfs_headers) $(TMPD)/include/btrfs && \ - cd $(TMPD) && $(CC) -I$(TMPD)/include -o $@ $(addprefix $(TOPDIR)/,$^) $(STATIC_LDFLAGS) $(STATIC_LIBS) + cd $(TMPD) && $(CC) -I$(TMPD)/include -o $@ $(addprefix $(ABSTOPDIR)/,$^) $(STATIC_LDFLAGS) $(STATIC_LIBS) @echo " [TEST RUN] $@" $(Q)cd $(TMPD) && ./$@ @echo " [TEST CLEAN] $@" $(Q)$(RM) -rf -- $(TMPD) fssum: tests/fssum.c tests/sha224-256.c - @echo " [LD] $@" + @echo " [LD] $@" $(Q)$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) test-build: test-build-pre test-build-real @@ -518,7 +541,6 @@ clean: $(CLEANDIRS) $(Q)$(RM) -f -- $(progs) *.o *.o.d \ kernel-lib/*.o kernel-lib/*.o.d \ kernel-shared/*.o kernel-shared/*.o.d \ - kernel-lib/tables.c \ image/*.o image/*.o.d \ convert/*.o convert/*.o.d \ mkfs/*.o mkfs/*.o.d \ @@ -579,5 +601,5 @@ uninstall: cd $(DESTDIR)$(bindir); $(RM) -f -- btrfsck fsck.btrfs $(progs_install) ifneq ($(MAKECMDGOALS),clean) --include $(objects:.o=.o.d) $(cmds_objects:.o=.o.d) $(subst .btrfs,, $(filter-out btrfsck.o.d, $(progs:=.o.d))) +-include $(all_objects:.o=.o.d) $(subst .btrfs,, $(filter-out btrfsck.o.d, $(progs:=.o.d))) endif diff --git a/Makefile.inc.in b/Makefile.inc.in index 4e1b68cb..56271903 100644 --- a/Makefile.inc.in +++ b/Makefile.inc.in @@ -12,14 +12,16 @@ INSTALL = @INSTALL@ DISABLE_DOCUMENTATION = @DISABLE_DOCUMENTATION@ DISABLE_BTRFSCONVERT = @DISABLE_BTRFSCONVERT@ BTRFSCONVERT_EXT2 = @BTRFSCONVERT_EXT2@ +BTRFSCONVERT_REISERFS = @BTRFSCONVERT_REISERFS@ +BTRFSRESTORE_ZSTD = @BTRFSRESTORE_ZSTD@ SUBST_CFLAGS = @CFLAGS@ SUBST_LDFLAGS = @LDFLAGS@ LIBS_BASE = @UUID_LIBS@ @BLKID_LIBS@ -L. -pthread -LIBS_COMP = @ZLIB_LIBS@ @LZO2_LIBS@ +LIBS_COMP = @ZLIB_LIBS@ @LZO2_LIBS@ @ZSTD_LIBS@ STATIC_LIBS_BASE = @UUID_LIBS_STATIC@ @BLKID_LIBS_STATIC@ -L. -pthread -STATIC_LIBS_COMP = @ZLIB_LIBS_STATIC@ @LZO2_LIBS_STATIC@ +STATIC_LIBS_COMP = @ZLIB_LIBS_STATIC@ @LZO2_LIBS_STATIC@ @ZSTD_LIBS_STATIC@ prefix ?= @prefix@ exec_prefix = @exec_prefix@ @@ -31,6 +33,6 @@ udevruledir = ${udevdir}/rules.d # external libs required by various binaries; for btrfs-foo, # specify btrfs_foo_libs = ; see $($(subst...)) rules in Makefile -btrfs_convert_libs = @EXT2FS_LIBS@ @COM_ERR_LIBS@ +btrfs_convert_libs = @EXT2FS_LIBS@ @COM_ERR_LIBS@ @REISERFS_LIBS@ MAKEFILE_INC_INCLUDED = yes diff --git a/README.md b/README.md index 7a1af26c..7534ccb5 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,12 @@ the patches meet some criteria (often lacking in github contributions): effects of the bug or the fix, _how_ does an improvement help or the intended _usecase_ * the **Signed-off-by** line: this documents who authored the change, you can read - more about the _The Developer's Certificate of Origin_ [here (chapter 11)](https://www.kernel.org/doc/Documentation/SubmittingPatches) + more about the + [The Developer's Certificate of Origin (chapter 11)](https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin) + * if you are not used to the signed-off style, your contributions won't be + rejected just because of it's missing, the _Author:_ tag will be added as a + substitute in order to allow contributions without much bothering with + formalities Documentation updates --------------------- diff --git a/backref.c b/backref.c index ce12bbdf..8615f6b8 100644 --- a/backref.c +++ b/backref.c @@ -130,6 +130,24 @@ struct __prelim_ref { u64 wanted_disk_byte; }; +static struct __prelim_ref *list_first_pref(struct list_head *head) +{ + return list_first_entry(head, struct __prelim_ref, list); +} + +struct pref_state { + struct list_head pending; + struct list_head pending_missing_keys; + struct list_head pending_indirect_refs; +}; + +static void init_pref_state(struct pref_state *prefstate) +{ + INIT_LIST_HEAD(&prefstate->pending); + INIT_LIST_HEAD(&prefstate->pending_missing_keys); + INIT_LIST_HEAD(&prefstate->pending_indirect_refs); +} + /* * the rules for all callers of this function are: * - obtaining the parent is the goal @@ -169,11 +187,12 @@ struct __prelim_ref { * block might help in merging entries to gain some speed. */ -static int __add_prelim_ref(struct list_head *head, u64 root_id, +static int __add_prelim_ref(struct pref_state *prefstate, u64 root_id, struct btrfs_key *key, int level, u64 parent, u64 wanted_disk_byte, int count, gfp_t gfp_mask) { + struct list_head *head; struct __prelim_ref *ref; if (root_id == BTRFS_DATA_RELOC_TREE_OBJECTID) @@ -184,16 +203,20 @@ static int __add_prelim_ref(struct list_head *head, u64 root_id, return -ENOMEM; ref->root_id = root_id; - if (key) + if (key) { ref->key_for_search = *key; - else + head = &prefstate->pending; + } else { memset(&ref->key_for_search, 0, sizeof(ref->key_for_search)); + head = &prefstate->pending_missing_keys; + } ref->inode_list = NULL; ref->level = level; ref->count = count; ref->parent = parent; ref->wanted_disk_byte = wanted_disk_byte; + list_add_tail(&ref->list, head); return 0; @@ -345,14 +368,14 @@ out: * resolve all indirect backrefs from the list */ static int __resolve_indirect_refs(struct btrfs_fs_info *fs_info, + struct pref_state *prefstate, struct btrfs_path *path, u64 time_seq, - struct list_head *head, const u64 *extent_item_pos, u64 total_refs) { + struct list_head *head = &prefstate->pending_indirect_refs; int err; int ret = 0; struct __prelim_ref *ref; - struct __prelim_ref *ref_safe; struct __prelim_ref *new_ref; struct ulist *parents; struct ulist_node *node; @@ -362,16 +385,11 @@ static int __resolve_indirect_refs(struct btrfs_fs_info *fs_info, if (!parents) return -ENOMEM; - /* - * _safe allows us to insert directly after the current item without - * iterating over the newly inserted items. - * we're also allowed to re-assign ref during iteration. - */ - list_for_each_entry_safe(ref, ref_safe, head, list) { - if (ref->parent) /* already direct */ - continue; - if (ref->count == 0) - continue; + while (!list_empty(head)) { + ref = list_first_pref(head); + list_move(&ref->list, &prefstate->pending); + ASSERT(!ref->parent); /* already direct */ + ASSERT(ref->count); err = __resolve_indirect_ref(fs_info, path, time_seq, ref, parents, extent_item_pos, total_refs); @@ -404,7 +422,7 @@ static int __resolve_indirect_refs(struct btrfs_fs_info *fs_info, new_ref->parent = node->val; new_ref->inode_list = (struct extent_inode_elem *) (uintptr_t)node->aux; - list_add(&new_ref->list, &ref->list); + list_add_tail(&new_ref->list, &prefstate->pending); } ulist_reinit(parents); } @@ -436,22 +454,20 @@ static inline int ref_for_same_block(struct __prelim_ref *ref1, * read tree blocks and add keys where required. */ static int __add_missing_keys(struct btrfs_fs_info *fs_info, - struct list_head *head) + struct pref_state *prefstate) { - struct list_head *pos; struct extent_buffer *eb; - list_for_each(pos, head) { + while (!list_empty(&prefstate->pending_missing_keys)) { struct __prelim_ref *ref; - ref = list_entry(pos, struct __prelim_ref, list); - if (ref->parent) - continue; - if (ref->key_for_search.type) - continue; + ref = list_first_pref(&prefstate->pending_missing_keys); + + ASSERT(ref->root_id); + ASSERT(!ref->parent); + ASSERT(!ref->key_for_search.type); BUG_ON(!ref->wanted_disk_byte); - eb = read_tree_block(fs_info, ref->wanted_disk_byte, - fs_info->nodesize, 0); + eb = read_tree_block(fs_info, ref->wanted_disk_byte, 0); if (!extent_buffer_uptodate(eb)) { free_extent_buffer(eb); return -EIO; @@ -461,6 +477,7 @@ static int __add_missing_keys(struct btrfs_fs_info *fs_info, else btrfs_node_key_to_cpu(eb, &ref->key_for_search, 0); free_extent_buffer(eb); + list_move(&ref->list, &prefstate->pending); } return 0; } @@ -475,8 +492,9 @@ static int __add_missing_keys(struct btrfs_fs_info *fs_info, * having a parent). * mode = 2: merge identical parents */ -static void __merge_refs(struct list_head *head, int mode) +static void __merge_refs(struct pref_state *prefstate, int mode) { + struct list_head *head = &prefstate->pending; struct list_head *pos1; list_for_each(pos1, head) { @@ -527,9 +545,9 @@ static void __merge_refs(struct list_head *head, int mode) * add all inline backrefs for bytenr to the list */ static int __add_inline_refs(struct btrfs_fs_info *fs_info, + struct pref_state *prefstate, struct btrfs_path *path, u64 bytenr, - int *info_level, struct list_head *prefs, - u64 *total_refs) + int *info_level, u64 *total_refs) { int ret = 0; int slot; @@ -541,7 +559,6 @@ static int __add_inline_refs(struct btrfs_fs_info *fs_info, struct btrfs_extent_item *ei; u64 flags; u64 item_size; - /* * enumerate all inline refs */ @@ -584,7 +601,7 @@ static int __add_inline_refs(struct btrfs_fs_info *fs_info, switch (type) { case BTRFS_SHARED_BLOCK_REF_KEY: - ret = __add_prelim_ref(prefs, 0, NULL, + ret = __add_prelim_ref(prefstate, 0, NULL, *info_level + 1, offset, bytenr, 1, GFP_NOFS); break; @@ -594,12 +611,12 @@ static int __add_inline_refs(struct btrfs_fs_info *fs_info, sdref = (struct btrfs_shared_data_ref *)(iref + 1); count = btrfs_shared_data_ref_count(leaf, sdref); - ret = __add_prelim_ref(prefs, 0, NULL, 0, offset, + ret = __add_prelim_ref(prefstate, 0, NULL, 0, offset, bytenr, count, GFP_NOFS); break; } case BTRFS_TREE_BLOCK_REF_KEY: - ret = __add_prelim_ref(prefs, offset, NULL, + ret = __add_prelim_ref(prefstate, offset, NULL, *info_level + 1, 0, bytenr, 1, GFP_NOFS); break; @@ -615,7 +632,7 @@ static int __add_inline_refs(struct btrfs_fs_info *fs_info, key.type = BTRFS_EXTENT_DATA_KEY; key.offset = btrfs_extent_data_ref_offset(leaf, dref); root = btrfs_extent_data_ref_root(leaf, dref); - ret = __add_prelim_ref(prefs, root, &key, 0, 0, + ret = __add_prelim_ref(prefstate, root, &key, 0, 0, bytenr, count, GFP_NOFS); break; } @@ -634,8 +651,9 @@ static int __add_inline_refs(struct btrfs_fs_info *fs_info, * add all non-inline backrefs for bytenr to the list */ static int __add_keyed_refs(struct btrfs_fs_info *fs_info, + struct pref_state *prefstate, struct btrfs_path *path, u64 bytenr, - int info_level, struct list_head *prefs) + int info_level) { struct btrfs_root *extent_root = fs_info->extent_root; int ret; @@ -665,7 +683,7 @@ static int __add_keyed_refs(struct btrfs_fs_info *fs_info, switch (key.type) { case BTRFS_SHARED_BLOCK_REF_KEY: - ret = __add_prelim_ref(prefs, 0, NULL, + ret = __add_prelim_ref(prefstate, 0, NULL, info_level + 1, key.offset, bytenr, 1, GFP_NOFS); break; @@ -676,12 +694,12 @@ static int __add_keyed_refs(struct btrfs_fs_info *fs_info, sdref = btrfs_item_ptr(leaf, slot, struct btrfs_shared_data_ref); count = btrfs_shared_data_ref_count(leaf, sdref); - ret = __add_prelim_ref(prefs, 0, NULL, 0, key.offset, + ret = __add_prelim_ref(prefstate, 0, NULL, 0, key.offset, bytenr, count, GFP_NOFS); break; } case BTRFS_TREE_BLOCK_REF_KEY: - ret = __add_prelim_ref(prefs, key.offset, NULL, + ret = __add_prelim_ref(prefstate, key.offset, NULL, info_level + 1, 0, bytenr, 1, GFP_NOFS); break; @@ -698,7 +716,7 @@ static int __add_keyed_refs(struct btrfs_fs_info *fs_info, key.type = BTRFS_EXTENT_DATA_KEY; key.offset = btrfs_extent_data_ref_offset(leaf, dref); root = btrfs_extent_data_ref_root(leaf, dref); - ret = __add_prelim_ref(prefs, root, &key, 0, 0, + ret = __add_prelim_ref(prefstate, root, &key, 0, 0, bytenr, count, GFP_NOFS); break; } @@ -730,12 +748,12 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans, struct btrfs_path *path; int info_level = 0; int ret; - struct list_head prefs; + struct pref_state prefstate; struct __prelim_ref *ref; struct extent_inode_elem *eie = NULL; u64 total_refs = 0; - INIT_LIST_HEAD(&prefs); + init_pref_state(&prefstate); key.objectid = bytenr; key.offset = (u64)-1; @@ -764,34 +782,37 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans, if (key.objectid == bytenr && (key.type == BTRFS_EXTENT_ITEM_KEY || key.type == BTRFS_METADATA_ITEM_KEY)) { - ret = __add_inline_refs(fs_info, path, bytenr, - &info_level, &prefs, + ret = __add_inline_refs(fs_info, &prefstate, path, + bytenr, &info_level, &total_refs); if (ret) goto out; - ret = __add_keyed_refs(fs_info, path, bytenr, - info_level, &prefs); + ret = __add_keyed_refs(fs_info, &prefstate, path, + bytenr, info_level); if (ret) goto out; } } btrfs_release_path(path); - ret = __add_missing_keys(fs_info, &prefs); + ret = __add_missing_keys(fs_info, &prefstate); if (ret) goto out; - __merge_refs(&prefs, 1); + __merge_refs(&prefstate, 1); - ret = __resolve_indirect_refs(fs_info, path, time_seq, &prefs, + ret = __resolve_indirect_refs(fs_info, &prefstate, path, time_seq, extent_item_pos, total_refs); if (ret) goto out; - __merge_refs(&prefs, 2); + __merge_refs(&prefstate, 2); - while (!list_empty(&prefs)) { - ref = list_first_entry(&prefs, struct __prelim_ref, list); + BUG_ON(!list_empty(&prefstate.pending_missing_keys)); + BUG_ON(!list_empty(&prefstate.pending_indirect_refs)); + + while (!list_empty(&prefstate.pending)) { + ref = list_first_pref(&prefstate.pending); WARN_ON(ref->count < 0); if (roots && ref->count && ref->root_id && ref->parent == 0) { /* no parent == root of tree */ @@ -802,11 +823,9 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans, if (ref->count && ref->parent) { if (extent_item_pos && !ref->inode_list && ref->level == 0) { - u32 bsz; struct extent_buffer *eb; - bsz = fs_info->nodesize; - eb = read_tree_block(fs_info, - ref->parent, bsz, 0); + + eb = read_tree_block(fs_info, ref->parent, 0); if (!extent_buffer_uptodate(eb)) { free_extent_buffer(eb); ret = -EIO; @@ -842,8 +861,8 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans, out: btrfs_free_path(path); - while (!list_empty(&prefs)) { - ref = list_first_entry(&prefs, struct __prelim_ref, list); + while (!list_empty(&prefstate.pending)) { + ref = list_first_pref(&prefstate.pending); list_del(&ref->list); kfree(ref); } diff --git a/btrfs-calc-size.c b/btrfs-calc-size.c index 1c5c61df..1ac7c785 100644 --- a/btrfs-calc-size.c +++ b/btrfs-calc-size.c @@ -19,7 +19,6 @@ #include "volumes.h" #include "utils.h" #include "commands.h" -#include "cmds-inspect-tree-stats.h" int main(int argc, char **argv) { diff --git a/btrfs-completion b/btrfs-completion index 3ede77b6..ae683f4e 100644 --- a/btrfs-completion +++ b/btrfs-completion @@ -6,8 +6,8 @@ _btrfs_devs() { - local DEVS - DEVS=''; while read dev; do DEVS+="$dev "; done < <(lsblk -pnro name) + local DEVS + DEVS=''; while read dev; do DEVS+="$dev "; done < <(lsblk -pnro name) COMPREPLY+=( $( compgen -W "$DEVS" -- "$cur" ) ) } @@ -16,137 +16,164 @@ _btrfs_mnts() local MNTS MNTS='' while read mnt; do MNTS+="$mnt " - done < <(mount | awk '{print $3}') + done < <(mount -t btrfs | awk '{print $3}') COMPREPLY+=( $( compgen -W "$MNTS" -- "$cur" ) ) } _btrfs() { local cur prev words cword - _init_completion || return + _init_completion || return - COMPREPLY=() + COMPREPLY=() local cmd=${words[1]} - commands='subvolume filesystem balance device scrub check rescue restore inspect-internal property send receive quota qgroup replace help version' - commands_subvolume='create delete list snapshot find-new get-default set-default show sync' - commands_filesystem='defragment sync resize show df label usage' - commands_balance='start pause cancel resume status' - commands_device='scan add delete remove ready stats usage' - commands_scrub='start cancel resume status' - commands_rescue='chunk-recover super-recover' - commands_inspect_internal='inode-resolve logical-resolve subvolid-resolve rootid min-dev-size dump-tree dump-super tree-stats' - commands_property='get set list' - commands_quota='enable disable rescan' - commands_qgroup='assign remove create destroy show limit' - commands_replace='start status cancel' + commands='subvolume filesystem balance device scrub check rescue restore inspect-internal property send receive quota qgroup replace help version' + commands_subvolume='create delete list snapshot find-new get-default set-default show sync' + commands_filesystem='defragment sync resize show df du label usage' + commands_balance='start pause cancel resume status' + commands_device='scan add delete remove ready stats usage' + commands_scrub='start cancel resume status' + commands_rescue='chunk-recover super-recover zero-log' + commands_inspect_internal='inode-resolve logical-resolve subvolid-resolve rootid min-dev-size dump-tree dump-super tree-stats' + commands_property='get set list' + commands_quota='enable disable rescan' + commands_qgroup='assign remove create destroy show limit' + commands_replace='start status cancel' if [[ "$cur" == -* && $cword -le 3 && "$cmd" != "help" ]]; then COMPREPLY=( $( compgen -W '--help' -- "$cur" ) ) return 0 fi - if [[ $cword -eq 1 ]]; then - COMPREPLY=( $( compgen -W "$commands" -- "$cur" ) ) - return 0 - elif [[ $cword -eq 2 ]]; then - case $cmd in - subvolume) - opts="$commands_subvolume" - ;; - filesystem) - opts="$commands_filesystem" - ;; - balance) - opts="$commands_balance" - ;; - device) - opts="$commands_device" - ;; - scrub) - opts="$commands_scrub" - ;; - check) - _btrfs_devs + if [[ $cword -eq 1 ]]; then + COMPREPLY=( $( compgen -W "$commands" -- "$cur" ) ) + return 0 + elif [[ $cword -eq 2 ]]; then + case $cmd in + subvolume) + opts="$commands_subvolume" + ;; + filesystem) + opts="$commands_filesystem" + ;; + balance) + opts="$commands_balance" + ;; + device) + opts="$commands_device" + ;; + scrub) + opts="$commands_scrub" + ;; + check) + _btrfs_devs + return 0 + ;; + rescue) + opts="$commands_rescue" + ;; + restore) + _btrfs_devs + return 0 + ;; + inspect-internal) + opts="$commands_inspect_internal" + ;; + property) + opts="$commands_property" + ;; + send|receive) + _filedir -d return 0 - ;; - rescue) - opts="$commands_rescue" - ;; - restore) - _btrfs_devs + ;; + quota) + opts="$commands_quota" + ;; + qgroup) + opts="$commands_qgroup" + ;; + replace) + opts="$commands_replace" + ;; + help) + opts="--full" + ;; + version) return 0 - ;; - inspect-internal) - opts="$commands_inspect_internal" - ;; - property) - opts="$commands_property" - ;; - send|receive) - _filedir -d - return 0 - ;; - quota) - opts="$commands_quota" - ;; - qgroup) - opts="$commands_qgroup" - ;; - replace) - opts="$commands_replace" - ;; - help) - opts="--full" - ;; - version) - return 0 - ;; - esac - COMPREPLY=( $( compgen -W "$opts" -- "$cur" ) ) - return 0 - elif [[ $cword -eq 3 ]]; then - case $cmd in - filesystem) + ;; + esac + COMPREPLY=( $( compgen -W "$opts" -- "$cur" ) ) + return 0 + elif [[ $cword -eq 3 ]]; then + case $cmd in + filesystem) case $prev in defragment) _filedir return 0 ;; + df|usage) + _btrfs_mnts + return 0 + ;; label) _btrfs_mnts _btrfs_devs return 0 ;; esac - ;; - device|rescue) + ;; + device|rescue) _btrfs_devs - return 0 - ;; - replace) - case $prev in - status|cancel) + return 0 + ;; + inspect-internal) + case $prev in + min-dev-size) + _btrfs_mnts + return 0 + ;; + rootid) + _filedir + return 0 + ;; + esac + ;; + receive) + case $prev in + -f) + _filedir + return 0 + ;; + esac + ;; + replace) + case $prev in + status|cancel) _btrfs_mnts - return 0 - ;; - start) + return 0 + ;; + start) _btrfs_devs - return 0 - ;; - esac - ;; - esac - fi - - if [[ "$cmd" == "receive" && "$prev" == "-f" ]]; then - _filedir - return 0 - fi + return 0 + ;; + esac + ;; + subvolume) + case $prev in + list) + _btrfs_mnts + return 0 + ;; + esac + ;; + esac + fi - _filedir -d - return 0 + _filedir -d + return 0 } complete -F _btrfs btrfs diff --git a/btrfs-corrupt-block.c b/btrfs-corrupt-block.c index 3269de5c..59ee1b45 100644 --- a/btrfs-corrupt-block.c +++ b/btrfs-corrupt-block.c @@ -168,7 +168,7 @@ static int corrupt_keys_in_block(struct btrfs_fs_info *fs_info, u64 bytenr) { struct extent_buffer *eb; - eb = read_tree_block(fs_info, bytenr, fs_info->nodesize, 0); + eb = read_tree_block(fs_info, bytenr, 0); if (!extent_buffer_uptodate(eb)) return -EIO;; @@ -297,7 +297,6 @@ static void btrfs_corrupt_extent_tree(struct btrfs_trans_handle *trans, struct extent_buffer *next; next = read_tree_block(fs_info, btrfs_node_blockptr(eb, i), - fs_info->nodesize, btrfs_node_ptr_generation(eb, i)); if (!extent_buffer_uptodate(next)) continue; @@ -765,7 +764,7 @@ static int corrupt_metadata_block(struct btrfs_fs_info *fs_info, u64 block, return -EINVAL; } - eb = read_tree_block(fs_info, block, fs_info->nodesize, 0); + eb = read_tree_block(fs_info, block, 0); if (!extent_buffer_uptodate(eb)) { fprintf(stderr, "Couldn't read in tree block %s\n", field); return -EINVAL; @@ -1227,13 +1226,16 @@ int main(int argc, char **argv) if (logical == (u64)-1) print_usage(1); trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); ret = corrupt_extent(trans, root, logical); btrfs_commit_transaction(trans, root); goto out_close; } if (extent_tree) { struct btrfs_trans_handle *trans; + trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); btrfs_corrupt_extent_tree(trans, root->fs_info->extent_root, root->fs_info->extent_root->node); btrfs_commit_transaction(trans, root); @@ -1259,6 +1261,7 @@ int main(int argc, char **argv) goto out_close; } trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); ret = corrupt_item_nocow(trans, root->fs_info->chunk_root, path, del); if (ret < 0) @@ -1268,7 +1271,9 @@ int main(int argc, char **argv) } if (chunk_tree) { struct btrfs_trans_handle *trans; + trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); ret = corrupt_chunk_tree(trans, root->fs_info->chunk_root); if (ret < 0) fprintf(stderr, "Failed to corrupt chunk tree\n"); @@ -1282,6 +1287,7 @@ int main(int argc, char **argv) print_usage(1); trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); if (file_extent == (u64)-1) { printf("corrupting inode\n"); ret = corrupt_inode(trans, root, inode, field); @@ -1365,7 +1371,7 @@ int main(int argc, char **argv) struct extent_buffer *eb; eb = btrfs_find_create_tree_block(root->fs_info, - logical, root->fs_info->sectorsize); + logical); if (!eb) { error( "not enough memory to allocate extent buffer for bytenr %llu", diff --git a/btrfs-debug-tree.c b/btrfs-debug-tree.c index 5caae602..7bee018f 100644 --- a/btrfs-debug-tree.c +++ b/btrfs-debug-tree.c @@ -20,7 +20,6 @@ #include "volumes.h" #include "utils.h" #include "commands.h" -#include "cmds-inspect-dump-tree.h" #include "help.h" int main(int argc, char **argv) diff --git a/btrfs-debugfs b/btrfs-debugfs index dfb88539..a7ecd16d 100755 --- a/btrfs-debugfs +++ b/btrfs-debugfs @@ -356,8 +356,13 @@ def print_block_groups(mountpoint): ctypes.memmove(ctypes.addressof(bg), p, ctypes.sizeof(bg)) if bg.flags & BTRFS_BLOCK_GROUP_DATA: - print "block group offset %Lu len %Lu used %Lu chunk_objectid %Lu flags %Lu usage %.2f" %\ - (header.objectid, header.offset, bg.used, bg.chunk_objectid, bg.flags, float(bg.used) / float(header.offset)) + print "block group offset %s len %s used %s chunk_objectid %Lu flags %Lu usage %.2f" %\ + ('{:>14}'.format(header.objectid), + '{:>10}'.format(header.offset), + '{:>10}'.format(bg.used), + bg.chunk_objectid, + bg.flags, + float(bg.used) / float(header.offset)) total_free += (header.offset - bg.used) if min_used >= bg.used: diff --git a/btrfs-list.c b/btrfs-list.c index 92a537f4..b6d76585 100644 --- a/btrfs-list.c +++ b/btrfs-list.c @@ -1273,8 +1273,18 @@ static void filter_and_sort_subvol(struct root_lookup *all_subvols, ret = resolve_root(all_subvols, entry, top_id); if (ret == -ENOENT) { - entry->full_path = strdup("DELETED"); - entry->deleted = 1; + if (entry->root_id != BTRFS_FS_TREE_OBJECTID) { + entry->full_path = strdup("DELETED"); + entry->deleted = 1; + } else { + /* + * The full path is not supposed to be printed, + * but we don't want to print an empty string, + * in case it appears somewhere. + */ + entry->full_path = strdup("TOPLEVEL"); + entry->deleted = 0; + } } ret = filter_root(entry, filter_set); if (ret) @@ -1340,21 +1350,21 @@ static void print_subvolume_column(struct root_info *subv, strcpy(uuidparse, "-"); else uuid_unparse(subv->uuid, uuidparse); - printf("%s", uuidparse); + printf("%-36s", uuidparse); break; case BTRFS_LIST_PUUID: if (uuid_is_null(subv->puuid)) strcpy(uuidparse, "-"); else uuid_unparse(subv->puuid, uuidparse); - printf("%s", uuidparse); + printf("%-36s", uuidparse); break; case BTRFS_LIST_RUUID: if (uuid_is_null(subv->ruuid)) strcpy(uuidparse, "-"); else uuid_unparse(subv->ruuid, uuidparse); - printf("%s", uuidparse); + printf("%-36s", uuidparse); break; case BTRFS_LIST_PATH: BUG_ON(!subv->full_path); @@ -1459,6 +1469,11 @@ static void print_all_subvol_info(struct root_lookup *sorted_tree, n = rb_first(&sorted_tree->root); while (n) { entry = rb_entry(n, struct root_info, sort_node); + + /* The toplevel subvolume is not listed by default */ + if (entry->root_id == BTRFS_FS_TREE_OBJECTID) + goto next; + switch (layout) { case BTRFS_LIST_LAYOUT_DEFAULT: print_one_subvol_info_default(entry); @@ -1470,6 +1485,7 @@ static void print_all_subvol_info(struct root_lookup *sorted_tree, print_one_subvol_info_raw(entry, raw_prefix); break; } +next: n = rb_next(n); } } diff --git a/btrfs-map-logical.c b/btrfs-map-logical.c index 9d049955..7a8bcff9 100644 --- a/btrfs-map-logical.c +++ b/btrfs-map-logical.c @@ -190,7 +190,7 @@ static int write_extent_content(struct btrfs_fs_info *fs_info, int out_fd, return ret; } -static void print_usage(void) __attribute__((noreturn)); +__attribute__((noreturn)) static void print_usage(void) { printf("usage: btrfs-map-logical [options] device\n"); diff --git a/btrfs-zero-log.c b/btrfs-zero-log.c index 697026aa..2fce59e9 100644 --- a/btrfs-zero-log.c +++ b/btrfs-zero-log.c @@ -68,6 +68,7 @@ int main(int argc, char **argv) (unsigned long long)btrfs_super_log_root(sb), (unsigned)btrfs_super_log_root_level(sb)); trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); btrfs_set_super_log_root(root->fs_info->super_copy, 0); btrfs_set_super_log_root_level(root->fs_info->super_copy, 0); btrfs_commit_transaction(trans, root); diff --git a/btrfstune.c b/btrfstune.c index 1ed73a92..eccedf79 100644 --- a/btrfstune.c +++ b/btrfstune.c @@ -66,6 +66,7 @@ static int update_seeding_flag(struct btrfs_root *root, int set_flag) } trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); btrfs_set_super_flags(disk_super, super_flags); ret = btrfs_commit_transaction(trans, root); @@ -83,6 +84,7 @@ static int set_super_incompat_flags(struct btrfs_root *root, u64 flags) super_flags = btrfs_super_incompat_flags(disk_super); super_flags |= flags; trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); btrfs_set_super_incompat_flags(disk_super, super_flags); ret = btrfs_commit_transaction(trans, root); @@ -149,7 +151,7 @@ static int change_extents_uuid(struct btrfs_fs_info *fs_info) goto next; bytenr = key.objectid; - eb = read_tree_block(fs_info, bytenr, fs_info->nodesize, 0); + eb = read_tree_block(fs_info, bytenr, 0); if (IS_ERR(eb)) { error("failed to read tree block: %llu", bytenr); ret = PTR_ERR(eb); diff --git a/chunk-recover.c b/chunk-recover.c index f1fa7504..4a6d7141 100644 --- a/chunk-recover.c +++ b/chunk-recover.c @@ -2389,6 +2389,7 @@ int btrfs_recover_chunk_tree(char *path, int verbose, int yes) } trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); ret = remove_chunk_extent_item(trans, &rc, root); BUG_ON(ret); diff --git a/cmds-check.c b/cmds-check.c index c5faa2b3..5c822b84 100644 --- a/cmds-check.c +++ b/cmds-check.c @@ -66,7 +66,6 @@ static u64 total_extent_tree_bytes = 0; static u64 btree_space_waste = 0; static u64 data_bytes_allocated = 0; static u64 data_bytes_referenced = 0; -static int found_old_backref = 0; static LIST_HEAD(duplicate_extents); static LIST_HEAD(delete_items); static int no_holes = 0; @@ -86,7 +85,7 @@ enum btrfs_check_mode { static enum btrfs_check_mode check_mode = CHECK_MODE_DEFAULT; struct extent_backref { - struct list_head list; + struct rb_node node; unsigned int is_data:1; unsigned int found_extent_tree:1; unsigned int full_backref:1; @@ -94,9 +93,9 @@ struct extent_backref { unsigned int broken:1; }; -static inline struct extent_backref* to_extent_backref(struct list_head *entry) +static inline struct extent_backref* rb_node_to_extent_backref(struct rb_node *node) { - return list_entry(entry, struct extent_backref, list); + return rb_entry(node, struct extent_backref, node); } struct data_backref { @@ -137,6 +136,51 @@ static inline struct data_backref* to_data_backref(struct extent_backref *back) return container_of(back, struct data_backref, node); } +static int compare_data_backref(struct rb_node *node1, struct rb_node *node2) +{ + struct extent_backref *ext1 = rb_node_to_extent_backref(node1); + struct extent_backref *ext2 = rb_node_to_extent_backref(node2); + struct data_backref *back1 = to_data_backref(ext1); + struct data_backref *back2 = to_data_backref(ext2); + + WARN_ON(!ext1->is_data); + WARN_ON(!ext2->is_data); + + /* parent and root are a union, so this covers both */ + if (back1->parent > back2->parent) + return 1; + if (back1->parent < back2->parent) + return -1; + + /* This is a full backref and the parents match. */ + if (back1->node.full_backref) + return 0; + + if (back1->owner > back2->owner) + return 1; + if (back1->owner < back2->owner) + return -1; + + if (back1->offset > back2->offset) + return 1; + if (back1->offset < back2->offset) + return -1; + + if (back1->found_ref && back2->found_ref) { + if (back1->disk_bytenr > back2->disk_bytenr) + return 1; + if (back1->disk_bytenr < back2->disk_bytenr) + return -1; + + if (back1->bytes > back2->bytes) + return 1; + if (back1->bytes < back2->bytes) + return -1; + } + + return 0; +} + /* * Much like data_backref, just removed the undetermined members * and change it to use list_head. @@ -165,12 +209,54 @@ static inline struct tree_backref* to_tree_backref(struct extent_backref *back) return container_of(back, struct tree_backref, node); } +static int compare_tree_backref(struct rb_node *node1, struct rb_node *node2) +{ + struct extent_backref *ext1 = rb_node_to_extent_backref(node1); + struct extent_backref *ext2 = rb_node_to_extent_backref(node2); + struct tree_backref *back1 = to_tree_backref(ext1); + struct tree_backref *back2 = to_tree_backref(ext2); + + WARN_ON(ext1->is_data); + WARN_ON(ext2->is_data); + + /* parent and root are a union, so this covers both */ + if (back1->parent > back2->parent) + return 1; + if (back1->parent < back2->parent) + return -1; + + return 0; +} + +static int compare_extent_backref(struct rb_node *node1, struct rb_node *node2) +{ + struct extent_backref *ext1 = rb_node_to_extent_backref(node1); + struct extent_backref *ext2 = rb_node_to_extent_backref(node2); + + if (ext1->is_data > ext2->is_data) + return 1; + + if (ext1->is_data < ext2->is_data) + return -1; + + if (ext1->full_backref > ext2->full_backref) + return 1; + if (ext1->full_backref < ext2->full_backref) + return -1; + + if (ext1->is_data) + return compare_data_backref(node1, node2); + else + return compare_tree_backref(node1, node2); +} + /* Explicit initialization for extent_record::flag_block_full_backref */ enum { FLAG_UNSET = 2 }; struct extent_record { struct list_head backrefs; struct list_head dups; + struct rb_root backref_tree; struct list_head list; struct cache_extent cache; struct btrfs_disk_key parent_key; @@ -226,7 +312,6 @@ struct root_item_record { u64 last_snapshot; u8 level; u8 drop_level; - int level_size; struct btrfs_key drop_key; }; @@ -1528,6 +1613,14 @@ static int process_dir_item(struct extent_buffer *eb, read_extent_buffer(eb, namebuf, (unsigned long)(di + 1), len); + if (key->type == BTRFS_DIR_ITEM_KEY && + key->offset != btrfs_name_hash(namebuf, len)) { + rec->errors |= I_ERR_ODD_DIR_ITEM; + error("DIR_ITEM[%llu %llu] name %s namelen %u filetype %u mismatch with its hash, wanted %llu have %llu", + key->objectid, key->offset, namebuf, len, filetype, + key->offset, btrfs_name_hash(namebuf, len)); + } + if (location.type == BTRFS_INODE_ITEM_KEY) { add_inode_backref(inode_cache, location.objectid, key->objectid, key->offset, namebuf, @@ -1971,7 +2064,6 @@ static void reada_walk_down(struct btrfs_root *root, u64 bytenr; u64 ptr_gen; u32 nritems; - u32 blocksize; int i; int level; @@ -1980,11 +2072,10 @@ static void reada_walk_down(struct btrfs_root *root, return; nritems = btrfs_header_nritems(node); - blocksize = fs_info->nodesize; for (i = slot; i < nritems; i++) { bytenr = btrfs_node_blockptr(node, i); ptr_gen = btrfs_node_ptr_generation(node, i); - readahead_tree_block(fs_info, bytenr, blocksize, ptr_gen); + readahead_tree_block(fs_info, bytenr, ptr_gen); } } @@ -2108,7 +2199,6 @@ static int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, struct btrfs_fs_info *fs_info = root->fs_info; struct extent_buffer *next; struct extent_buffer *cur; - u32 blocksize; int ret, err = 0; u64 refs; @@ -2157,7 +2247,6 @@ static int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, } bytenr = btrfs_node_blockptr(cur, path->slots[*level]); ptr_gen = btrfs_node_ptr_generation(cur, path->slots[*level]); - blocksize = fs_info->nodesize; if (bytenr == nrefs->bytenr[*level - 1]) { refs = nrefs->refs[*level - 1]; @@ -2181,12 +2270,11 @@ static int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, } } - next = btrfs_find_tree_block(fs_info, bytenr, blocksize); + next = btrfs_find_tree_block(fs_info, bytenr, fs_info->nodesize); if (!next || !btrfs_buffer_uptodate(next, ptr_gen)) { free_extent_buffer(next); reada_walk_down(root, cur, path->slots[*level]); - next = read_tree_block(root->fs_info, bytenr, blocksize, - ptr_gen); + next = read_tree_block(root->fs_info, bytenr, ptr_gen); if (!extent_buffer_uptodate(next)) { struct btrfs_key node_key; @@ -2247,7 +2335,6 @@ static int walk_down_tree_v2(struct btrfs_root *root, struct btrfs_path *path, struct btrfs_fs_info *fs_info = root->fs_info; struct extent_buffer *next; struct extent_buffer *cur; - u32 blocksize; int ret; WARN_ON(*level < 0); @@ -2287,7 +2374,6 @@ static int walk_down_tree_v2(struct btrfs_root *root, struct btrfs_path *path, } bytenr = btrfs_node_blockptr(cur, path->slots[*level]); ptr_gen = btrfs_node_ptr_generation(cur, path->slots[*level]); - blocksize = fs_info->nodesize; ret = update_nodes_refs(root, bytenr, nrefs, *level - 1); if (ret) @@ -2297,12 +2383,11 @@ static int walk_down_tree_v2(struct btrfs_root *root, struct btrfs_path *path, continue; } - next = btrfs_find_tree_block(fs_info, bytenr, blocksize); + next = btrfs_find_tree_block(fs_info, bytenr, fs_info->nodesize); if (!next || !btrfs_buffer_uptodate(next, ptr_gen)) { free_extent_buffer(next); reada_walk_down(root, cur, path->slots[*level]); - next = read_tree_block(fs_info, bytenr, blocksize, - ptr_gen); + next = read_tree_block(fs_info, bytenr, ptr_gen); if (!extent_buffer_uptodate(next)) { struct btrfs_key node_key; @@ -4052,7 +4137,7 @@ static int fs_root_objectid(u64 objectid) return is_fstree(objectid); } -static int check_fs_roots(struct btrfs_root *root, +static int check_fs_roots(struct btrfs_fs_info *fs_info, struct cache_tree *root_cache) { struct btrfs_path path; @@ -4060,7 +4145,7 @@ static int check_fs_roots(struct btrfs_root *root, struct walk_control wc; struct extent_buffer *leaf, *tree_node; struct btrfs_root *tmp_root; - struct btrfs_root *tree_root = root->fs_info->tree_root; + struct btrfs_root *tree_root = fs_info->tree_root; int ret; int err = 0; @@ -4074,7 +4159,7 @@ static int check_fs_roots(struct btrfs_root *root, * reflected into the free space cache yet. */ if (repair) - reset_cached_block_groups(root->fs_info); + reset_cached_block_groups(fs_info); memset(&wc, 0, sizeof(wc)); cache_tree_init(&wc.shared); btrfs_init_path(&path); @@ -4110,11 +4195,11 @@ again: fs_root_objectid(key.objectid)) { if (key.objectid == BTRFS_TREE_RELOC_OBJECTID) { tmp_root = btrfs_read_fs_root_no_cache( - root->fs_info, &key); + fs_info, &key); } else { key.offset = (u64)-1; tmp_root = btrfs_read_fs_root( - root->fs_info, &key); + fs_info, &key); } if (IS_ERR(tmp_root)) { err = 1; @@ -4672,6 +4757,15 @@ static int check_dir_item(struct btrfs_root *root, struct btrfs_key *key, read_extent_buffer(node, namebuf, (unsigned long)(di + 1), len); filetype = btrfs_dir_type(node, di); + if (key->type == BTRFS_DIR_ITEM_KEY && + key->offset != btrfs_name_hash(namebuf, len)) { + err |= -EIO; + error("root %llu DIR_ITEM[%llu %llu] name %s namelen %u filetype %u mismatch with its hash, wanted %llu have %llu", + root->objectid, key->objectid, key->offset, + namebuf, len, filetype, key->offset, + btrfs_name_hash(namebuf, len)); + } + btrfs_init_path(&path); btrfs_dir_item_key_to_cpu(node, di, &location); @@ -5060,6 +5154,65 @@ out: return ret; } +static struct tree_backref *find_tree_backref(struct extent_record *rec, + u64 parent, u64 root) +{ + struct rb_node *node; + struct tree_backref *back = NULL; + struct tree_backref match = { + .node = { + .is_data = 0, + }, + }; + + if (parent) { + match.parent = parent; + match.node.full_backref = 1; + } else { + match.root = root; + } + + node = rb_search(&rec->backref_tree, &match.node.node, + (rb_compare_keys)compare_extent_backref, NULL); + if (node) + back = to_tree_backref(rb_node_to_extent_backref(node)); + + return back; +} + +static struct data_backref *find_data_backref(struct extent_record *rec, + u64 parent, u64 root, + u64 owner, u64 offset, + int found_ref, + u64 disk_bytenr, u64 bytes) +{ + struct rb_node *node; + struct data_backref *back = NULL; + struct data_backref match = { + .node = { + .is_data = 1, + }, + .owner = owner, + .offset = offset, + .bytes = bytes, + .found_ref = found_ref, + .disk_bytenr = disk_bytenr, + }; + + if (parent) { + match.parent = parent; + match.node.full_backref = 1; + } else { + match.root = root; + } + + node = rb_search(&rec->backref_tree, &match.node.node, + (rb_compare_keys)compare_extent_backref, NULL); + if (node) + back = to_data_backref(rb_node_to_extent_backref(node)); + + return back; +} /* * Iterate all item on the tree and call check_inode_item() to check. * @@ -5307,25 +5460,38 @@ out: return err; } +static int do_check_fs_roots(struct btrfs_fs_info *fs_info, + struct cache_tree *root_cache) +{ + int ret; + + if (!ctx.progress_enabled) + fprintf(stderr, "checking fs roots\n"); + if (check_mode == CHECK_MODE_LOWMEM) + ret = check_fs_roots_v2(fs_info); + else + ret = check_fs_roots(fs_info, root_cache); + + return ret; +} + static int all_backpointers_checked(struct extent_record *rec, int print_errs) { - struct list_head *cur = rec->backrefs.next; - struct extent_backref *back; + struct extent_backref *back, *tmp; struct tree_backref *tback; struct data_backref *dback; u64 found = 0; int err = 0; - while(cur != &rec->backrefs) { - back = to_extent_backref(cur); - cur = cur->next; + rbtree_postorder_for_each_entry_safe(back, tmp, + &rec->backref_tree, node) { if (!back->found_extent_tree) { err = 1; if (!print_errs) goto out; if (back->is_data) { dback = to_data_backref(back); - fprintf(stderr, "Backref %llu %s %llu" + fprintf(stderr, "Data backref %llu %s %llu" " owner %llu offset %llu num_refs %lu" " not found in extent tree\n", (unsigned long long)rec->start, @@ -5339,7 +5505,7 @@ static int all_backpointers_checked(struct extent_record *rec, int print_errs) (unsigned long)dback->num_refs); } else { tback = to_tree_backref(back); - fprintf(stderr, "Backref %llu parent %llu" + fprintf(stderr, "Tree backref %llu parent %llu" " root %llu not found in extent tree\n", (unsigned long long)rec->start, (unsigned long long)tback->parent, @@ -5421,17 +5587,16 @@ out: return err; } -static int free_all_extent_backrefs(struct extent_record *rec) +static void __free_one_backref(struct rb_node *node) { - struct extent_backref *back; - struct list_head *cur; - while (!list_empty(&rec->backrefs)) { - cur = rec->backrefs.next; - back = to_extent_backref(cur); - list_del(cur); - free(back); - } - return 0; + struct extent_backref *back = rb_node_to_extent_backref(node); + + free(back); +} + +static void free_all_extent_backrefs(struct extent_record *rec) +{ + rb_free_nodes(&rec->backref_tree, __free_one_backref); } static void free_extent_record_cache(struct cache_tree *extent_cache) @@ -5470,7 +5635,7 @@ static int check_owner_ref(struct btrfs_root *root, struct extent_record *rec, struct extent_buffer *buf) { - struct extent_backref *node; + struct extent_backref *node, *tmp; struct tree_backref *back; struct btrfs_root *ref_root; struct btrfs_key key; @@ -5480,7 +5645,8 @@ static int check_owner_ref(struct btrfs_root *root, int found = 0; int ret; - list_for_each_entry(node, &rec->backrefs, list) { + rbtree_postorder_for_each_entry_safe(node, tmp, + &rec->backref_tree, node) { if (node->is_data) continue; if (!node->found_ref) @@ -5525,14 +5691,12 @@ static int check_owner_ref(struct btrfs_root *root, static int is_extent_tree_record(struct extent_record *rec) { - struct list_head *cur = rec->backrefs.next; - struct extent_backref *node; + struct extent_backref *node, *tmp; struct tree_backref *back; int is_extent = 0; - while(cur != &rec->backrefs) { - node = to_extent_backref(cur); - cur = cur->next; + rbtree_postorder_for_each_entry_safe(node, tmp, + &rec->backref_tree, node) { if (node->is_data) return 0; back = to_tree_backref(node); @@ -5897,6 +6061,7 @@ static int check_block(struct btrfs_root *root, return ret; } +#if 0 static struct tree_backref *find_tree_backref(struct extent_record *rec, u64 parent, u64 root) { @@ -5924,6 +6089,7 @@ static struct tree_backref *find_tree_backref(struct extent_record *rec, } return NULL; } +#endif static struct tree_backref *alloc_tree_backref(struct extent_record *rec, u64 parent, u64 root) @@ -5940,11 +6106,11 @@ static struct tree_backref *alloc_tree_backref(struct extent_record *rec, ref->root = root; ref->node.full_backref = 0; } - list_add_tail(&ref->node.list, &rec->backrefs); return ref; } +#if 0 static struct data_backref *find_data_backref(struct extent_record *rec, u64 parent, u64 root, u64 owner, u64 offset, @@ -5981,6 +6147,7 @@ static struct data_backref *find_data_backref(struct extent_record *rec, } return NULL; } +#endif static struct data_backref *alloc_data_backref(struct extent_record *rec, u64 parent, u64 root, @@ -6008,7 +6175,6 @@ static struct data_backref *alloc_data_backref(struct extent_record *rec, ref->bytes = max_size; ref->found_ref = 0; ref->num_refs = 0; - list_add_tail(&ref->node.list, &rec->backrefs); if (max_size > rec->max_size) rec->max_size = max_size; return ref; @@ -6041,12 +6207,12 @@ static void check_extent_type(struct extent_record *rec) * Check SYSTEM extent, as it's also marked as metadata, we can only * make sure it's a SYSTEM extent by its backref */ - if (!list_empty(&rec->backrefs)) { + if (!RB_EMPTY_ROOT(&rec->backref_tree)) { struct extent_backref *node; struct tree_backref *tback; u64 bg_type; - node = to_extent_backref(rec->backrefs.next); + node = rb_node_to_extent_backref(rb_first(&rec->backref_tree)); if (node->is_data) { /* tree block shouldn't have data backref */ rec->wrong_chunk_type = 1; @@ -6097,6 +6263,7 @@ static int add_extent_rec_nolookup(struct cache_tree *extent_cache, INIT_LIST_HEAD(&rec->backrefs); INIT_LIST_HEAD(&rec->dups); INIT_LIST_HEAD(&rec->list); + rec->backref_tree = RB_ROOT; memcpy(&rec->parent_key, &tmpl->parent_key, sizeof(tmpl->parent_key)); rec->cache.start = tmpl->start; rec->cache.size = tmpl->nr; @@ -6229,6 +6396,7 @@ static int add_tree_backref(struct cache_tree *extent_cache, u64 bytenr, struct tree_backref *back; struct cache_extent *cache; int ret; + bool insert = false; cache = lookup_cache_extent(extent_cache, bytenr, 1); if (!cache) { @@ -6263,6 +6431,7 @@ static int add_tree_backref(struct cache_tree *extent_cache, u64 bytenr, back = alloc_tree_backref(rec, parent, root); if (!back) return -ENOMEM; + insert = true; } if (found_ref) { @@ -6284,6 +6453,9 @@ static int add_tree_backref(struct cache_tree *extent_cache, u64 bytenr, } back->node.found_extent_tree = 1; } + if (insert) + WARN_ON(rb_insert(&rec->backref_tree, &back->node.node, + compare_extent_backref)); check_extent_type(rec); maybe_free_extent_rec(extent_cache, rec); return 0; @@ -6297,6 +6469,7 @@ static int add_data_backref(struct cache_tree *extent_cache, u64 bytenr, struct data_backref *back; struct cache_extent *cache; int ret; + bool insert = false; cache = lookup_cache_extent(extent_cache, bytenr, 1); if (!cache) { @@ -6336,6 +6509,7 @@ static int add_data_backref(struct cache_tree *extent_cache, u64 bytenr, back = alloc_data_backref(rec, parent, root, owner, offset, max_size); BUG_ON(!back); + insert = true; } if (found_ref) { @@ -6344,8 +6518,16 @@ static int add_data_backref(struct cache_tree *extent_cache, u64 bytenr, BUG_ON(back->bytes != max_size); back->node.found_ref = 1; back->found_ref += 1; - back->bytes = max_size; - back->disk_bytenr = bytenr; + if (back->bytes != max_size || back->disk_bytenr != bytenr) { + back->bytes = max_size; + back->disk_bytenr = bytenr; + + /* Need to reinsert if not already in the tree */ + if (!insert) { + rb_erase(&back->node.node, &rec->backref_tree); + insert = true; + } + } rec->refs += 1; rec->content_checked = 1; rec->owner_ref_checked = 1; @@ -6364,6 +6546,10 @@ static int add_data_backref(struct cache_tree *extent_cache, u64 bytenr, back->num_refs = num_refs; back->node.found_extent_tree = 1; } + if (insert) + WARN_ON(rb_insert(&rec->backref_tree, &back->node.node, + compare_extent_backref)); + maybe_free_extent_rec(extent_cache, rec); return 0; } @@ -7641,8 +7827,7 @@ static int run_next_block(struct btrfs_root *root, continue; /* fixme, get the parent transid */ - readahead_tree_block(fs_info, bits[i].start, - bits[i].size, 0); + readahead_tree_block(fs_info, bits[i].start, 0); } } *last = bits[0].start; @@ -7671,7 +7856,7 @@ static int run_next_block(struct btrfs_root *root, } /* fixme, get the real parent transid */ - buf = read_tree_block(root->fs_info, bytenr, size, gen); + buf = read_tree_block(root->fs_info, bytenr, gen); if (!extent_buffer_uptodate(buf)) { record_bad_block_io(root->fs_info, extent_cache, bytenr, size); @@ -7938,11 +8123,6 @@ static int run_next_block(struct btrfs_root *root, total_fs_tree_bytes += buf->len; if (btrfs_header_owner(buf) == BTRFS_EXTENT_TREE_OBJECTID) total_extent_tree_bytes += buf->len; - if (!found_old_backref && - btrfs_header_owner(buf) == BTRFS_TREE_RELOC_OBJECTID && - btrfs_header_backref_rev(buf) == BTRFS_MIXED_BACKREF_REV && - !btrfs_header_flag(buf, BTRFS_HEADER_FLAG_RELOC)) - found_old_backref = 1; out: free_extent_buffer(buf); return ret; @@ -8025,7 +8205,7 @@ static int free_extent_hook(struct btrfs_trans_handle *trans, back->node.found_extent_tree = 0; if (!back->node.found_extent_tree && back->node.found_ref) { - list_del(&back->node.list); + rb_erase(&back->node.node, &rec->backref_tree); free(back); } } else { @@ -8044,7 +8224,7 @@ static int free_extent_hook(struct btrfs_trans_handle *trans, back->node.found_extent_tree = 0; } if (!back->node.found_extent_tree && back->node.found_ref) { - list_del(&back->node.list); + rb_erase(&back->node.node, &rec->backref_tree); free(back); } } @@ -8485,7 +8665,7 @@ out: static int verify_backrefs(struct btrfs_fs_info *info, struct btrfs_path *path, struct extent_record *rec) { - struct extent_backref *back; + struct extent_backref *back, *tmp; struct data_backref *dback; struct extent_entry *entry, *best = NULL; LIST_HEAD(entries); @@ -8501,7 +8681,8 @@ static int verify_backrefs(struct btrfs_fs_info *info, struct btrfs_path *path, if (rec->metadata) return 0; - list_for_each_entry(back, &rec->backrefs, list) { + rbtree_postorder_for_each_entry_safe(back, tmp, + &rec->backref_tree, node) { if (back->full_backref || !back->is_data) continue; @@ -8627,7 +8808,8 @@ static int verify_backrefs(struct btrfs_fs_info *info, struct btrfs_path *path, * Ok great we all agreed on an extent record, let's go find the real * references and fix up the ones that don't match. */ - list_for_each_entry(back, &rec->backrefs, list) { + rbtree_postorder_for_each_entry_safe(back, tmp, + &rec->backref_tree, node) { if (back->full_backref || !back->is_data) continue; @@ -8851,7 +9033,7 @@ static int find_possible_backrefs(struct btrfs_fs_info *info, struct extent_record *rec) { struct btrfs_root *root; - struct extent_backref *back; + struct extent_backref *back, *tmp; struct data_backref *dback; struct cache_extent *cache; struct btrfs_file_extent_item *fi; @@ -8859,7 +9041,8 @@ static int find_possible_backrefs(struct btrfs_fs_info *info, u64 bytenr, bytes; int ret; - list_for_each_entry(back, &rec->backrefs, list) { + rbtree_postorder_for_each_entry_safe(back, tmp, + &rec->backref_tree, node) { /* Don't care about full backrefs (poor unloved backrefs) */ if (back->full_backref || !back->is_data) continue; @@ -8947,7 +9130,7 @@ static int record_orphan_data_extents(struct btrfs_fs_info *fs_info, { struct btrfs_key key; struct btrfs_root *dest_root; - struct extent_backref *back; + struct extent_backref *back, *tmp; struct data_backref *dback; struct orphan_data_extent *orphan; struct btrfs_path path; @@ -8957,7 +9140,8 @@ static int record_orphan_data_extents(struct btrfs_fs_info *fs_info, if (rec->metadata) return 1; btrfs_init_path(&path); - list_for_each_entry(back, &rec->backrefs, list) { + rbtree_postorder_for_each_entry_safe(back, tmp, + &rec->backref_tree, node) { if (back->full_backref || !back->is_data || !back->found_extent_tree) continue; @@ -9025,9 +9209,8 @@ static int fixup_extent_refs(struct btrfs_fs_info *info, struct btrfs_trans_handle *trans = NULL; int ret; struct btrfs_path path; - struct list_head *cur = rec->backrefs.next; struct cache_extent *cache; - struct extent_backref *back; + struct extent_backref *back, *tmp; int allocated = 0; u64 flags = 0; @@ -9075,10 +9258,8 @@ static int fixup_extent_refs(struct btrfs_fs_info *info, } /* step three, recreate all the refs we did find */ - while(cur != &rec->backrefs) { - back = to_extent_backref(cur); - cur = cur->next; - + rbtree_postorder_for_each_entry_safe(back, tmp, + &rec->backref_tree, node) { /* * if we didn't find any references, don't create a * new extent record @@ -9460,7 +9641,9 @@ repair_abort: goto repair_abort; } - btrfs_fix_block_accounting(trans, root); + ret = btrfs_fix_block_accounting(trans, root); + if (ret) + goto repair_abort; ret = btrfs_commit_transaction(trans, root); if (ret) goto repair_abort; @@ -9729,7 +9912,7 @@ static int check_devices(struct rb_root *dev_cache, static int add_root_item_to_list(struct list_head *head, u64 objectid, u64 bytenr, u64 last_snapshot, u8 level, u8 drop_level, - int level_size, struct btrfs_key *drop_key) + struct btrfs_key *drop_key) { struct root_item_record *ri_rec; @@ -9739,7 +9922,6 @@ static int add_root_item_to_list(struct list_head *head, ri_rec->bytenr = bytenr; ri_rec->objectid = objectid; ri_rec->level = level; - ri_rec->level_size = level_size; ri_rec->drop_level = drop_level; ri_rec->last_snapshot = last_snapshot; if (drop_key) @@ -9784,8 +9966,7 @@ static int deal_root_from_list(struct list_head *list, rec = list_entry(list->next, struct root_item_record, list); last = 0; - buf = read_tree_block(root->fs_info, - rec->bytenr, rec->level_size, 0); + buf = read_tree_block(root->fs_info, rec->bytenr, 0); if (!extent_buffer_uptodate(buf)) { free_extent_buffer(buf); ret = -EIO; @@ -9829,7 +10010,7 @@ static int deal_root_from_list(struct list_head *list, return ret; } -static int check_chunks_and_extents(struct btrfs_root *root) +static int check_chunks_and_extents(struct btrfs_fs_info *fs_info) { struct rb_root dev_cache; struct cache_tree chunk_cache; @@ -9854,10 +10035,11 @@ static int check_chunks_and_extents(struct btrfs_root *root) struct list_head dropping_trees; struct list_head normal_trees; struct btrfs_root *root1; + struct btrfs_root *root; u64 objectid; - u32 level_size; u8 level; + root = fs_info->fs_root; dev_cache = RB_ROOT; cache_tree_init(&chunk_cache); block_group_tree_init(&block_group_cache); @@ -9874,10 +10056,10 @@ static int check_chunks_and_extents(struct btrfs_root *root) INIT_LIST_HEAD(&normal_trees); if (repair) { - root->fs_info->excluded_extents = &excluded_extents; - root->fs_info->fsck_extent_cache = &extent_cache; - root->fs_info->free_extent_hook = free_extent_hook; - root->fs_info->corrupt_blocks = &corrupt_blocks; + fs_info->excluded_extents = &excluded_extents; + fs_info->fsck_extent_cache = &extent_cache; + fs_info->free_extent_hook = free_extent_hook; + fs_info->corrupt_blocks = &corrupt_blocks; } bits_nr = 1024; @@ -9893,26 +10075,23 @@ static int check_chunks_and_extents(struct btrfs_root *root) } again: - root1 = root->fs_info->tree_root; + root1 = fs_info->tree_root; level = btrfs_header_level(root1->node); ret = add_root_item_to_list(&normal_trees, root1->root_key.objectid, - root1->node->start, 0, level, 0, - root1->fs_info->nodesize, NULL); + root1->node->start, 0, level, 0, NULL); if (ret < 0) goto out; - root1 = root->fs_info->chunk_root; + root1 = fs_info->chunk_root; level = btrfs_header_level(root1->node); ret = add_root_item_to_list(&normal_trees, root1->root_key.objectid, - root1->node->start, 0, level, 0, - root1->fs_info->nodesize, NULL); + root1->node->start, 0, level, 0, NULL); if (ret < 0) goto out; btrfs_init_path(&path); key.offset = 0; key.objectid = 0; key.type = BTRFS_ROOT_ITEM_KEY; - ret = btrfs_search_slot(NULL, root->fs_info->tree_root, - &key, &path, 0, 0); + ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, &path, 0, 0); if (ret < 0) goto out; while(1) { @@ -9935,17 +10114,15 @@ again: last_snapshot = btrfs_root_last_snapshot(&ri); if (btrfs_disk_key_objectid(&ri.drop_progress) == 0) { level = btrfs_root_level(&ri); - level_size = root->fs_info->nodesize; ret = add_root_item_to_list(&normal_trees, found_key.objectid, btrfs_root_bytenr(&ri), last_snapshot, level, - 0, level_size, NULL); + 0, NULL); if (ret < 0) goto out; } else { level = btrfs_root_level(&ri); - level_size = root->fs_info->nodesize; objectid = found_key.objectid; btrfs_disk_key_to_cpu(&found_key, &ri.drop_progress); @@ -9953,8 +10130,7 @@ again: objectid, btrfs_root_bytenr(&ri), last_snapshot, level, - ri.drop_level, - level_size, &found_key); + ri.drop_level, &found_key); if (ret < 0) goto out; } @@ -10009,12 +10185,12 @@ again: out: task_stop(ctx.info); if (repair) { - free_corrupt_blocks_tree(root->fs_info->corrupt_blocks); + free_corrupt_blocks_tree(fs_info->corrupt_blocks); extent_io_tree_cleanup(&excluded_extents); - root->fs_info->fsck_extent_cache = NULL; - root->fs_info->free_extent_hook = NULL; - root->fs_info->corrupt_blocks = NULL; - root->fs_info->excluded_extents = NULL; + fs_info->fsck_extent_cache = NULL; + fs_info->free_extent_hook = NULL; + fs_info->corrupt_blocks = NULL; + fs_info->excluded_extents = NULL; } free(bits); free_chunk_cache_tree(&chunk_cache); @@ -10029,7 +10205,7 @@ out: free_root_item_list(&dropping_trees); return ret; loop: - free_corrupt_blocks_tree(root->fs_info->corrupt_blocks); + free_corrupt_blocks_tree(fs_info->corrupt_blocks); free_extent_cache_tree(&seen); free_extent_cache_tree(&pending); free_extent_cache_tree(&reada); @@ -10384,7 +10560,6 @@ static int query_tree_block_level(struct btrfs_fs_info *fs_info, u64 bytenr) struct btrfs_extent_item *ei; u64 flags; u64 transid; - u32 nodesize = btrfs_super_nodesize(fs_info->super_copy); u8 backref_level; u8 header_level; int ret; @@ -10430,7 +10605,7 @@ static int query_tree_block_level(struct btrfs_fs_info *fs_info, u64 bytenr) btrfs_release_path(&path); /* Get level from tree block as an alternative source */ - eb = read_tree_block(fs_info, bytenr, nodesize, transid); + eb = read_tree_block(fs_info, bytenr, transid); if (!extent_buffer_uptodate(eb)) { free_extent_buffer(eb); return -EIO; @@ -10483,7 +10658,7 @@ static int check_tree_block_backref(struct btrfs_fs_info *fs_info, u64 root_id, } /* Read out the tree block to get item/node key */ - eb = read_tree_block(fs_info, bytenr, root->fs_info->nodesize, 0); + eb = read_tree_block(fs_info, bytenr, 0); if (!extent_buffer_uptodate(eb)) { err |= REFERENCER_MISSING; free_extent_buffer(eb); @@ -10580,12 +10755,11 @@ static int check_shared_block_backref(struct btrfs_fs_info *fs_info, u64 parent, u64 bytenr, int level) { struct extent_buffer *eb; - u32 nodesize = btrfs_super_nodesize(fs_info->super_copy); u32 nr; int found_parent = 0; int i; - eb = read_tree_block(fs_info, parent, nodesize, 0); + eb = read_tree_block(fs_info, parent, 0); if (!extent_buffer_uptodate(eb)) goto out; @@ -10616,7 +10790,7 @@ out: if (!found_parent) { error( "shared extent[%llu %u] lost its parent (parent: %llu, level: %u)", - bytenr, nodesize, parent, level); + bytenr, fs_info->nodesize, parent, level); return REFERENCER_MISSING; } return 0; @@ -10734,12 +10908,11 @@ static int check_shared_data_backref(struct btrfs_fs_info *fs_info, struct extent_buffer *eb; struct btrfs_key key; struct btrfs_file_extent_item *fi; - u32 nodesize = btrfs_super_nodesize(fs_info->super_copy); u32 nr; int found_parent = 0; int i; - eb = read_tree_block(fs_info, parent, nodesize, 0); + eb = read_tree_block(fs_info, parent, 0); if (!extent_buffer_uptodate(eb)) goto out; @@ -11458,11 +11631,6 @@ static int traverse_tree_block(struct btrfs_root *root, total_fs_tree_bytes += node->len; if (btrfs_header_owner(node) == BTRFS_EXTENT_TREE_OBJECTID) total_extent_tree_bytes += node->len; - if (!found_old_backref && - btrfs_header_owner(node) == BTRFS_TREE_RELOC_OBJECTID && - btrfs_header_backref_rev(node) == BTRFS_MIXED_BACKREF_REV && - !btrfs_header_flag(node, BTRFS_HEADER_FLAG_RELOC)) - found_old_backref = 1; /* pre-order tranversal, check itself first */ level = btrfs_header_level(node); @@ -11501,8 +11669,7 @@ static int traverse_tree_block(struct btrfs_root *root, * As a btrfs tree has most 8 levels (0..7), so it's quite safe * to call the function itself. */ - eb = read_tree_block(root->fs_info, blocknr, - root->fs_info->nodesize, 0); + eb = read_tree_block(root->fs_info, blocknr, 0); if (extent_buffer_uptodate(eb)) { ret = traverse_tree_block(root, eb); err |= ret; @@ -11516,15 +11683,18 @@ static int traverse_tree_block(struct btrfs_root *root, /* * Low memory usage version check_chunks_and_extents. */ -static int check_chunks_and_extents_v2(struct btrfs_root *root) +static int check_chunks_and_extents_v2(struct btrfs_fs_info *fs_info) { struct btrfs_path path; struct btrfs_key key; struct btrfs_root *root1; + struct btrfs_root *root; struct btrfs_root *cur_root; int err = 0; int ret; + root = fs_info->fs_root; + root1 = root->fs_info->chunk_root; ret = traverse_tree_block(root1, root1->node); err |= ret; @@ -11576,6 +11746,20 @@ out: return err; } +static int do_check_chunks_and_extents(struct btrfs_fs_info *fs_info) +{ + int ret; + + if (!ctx.progress_enabled) + fprintf(stderr, "checking extents\n"); + if (check_mode == CHECK_MODE_LOWMEM) + ret = check_chunks_and_extents_v2(fs_info); + else + ret = check_chunks_and_extents(fs_info); + + return ret; +} + static int btrfs_fsck_reinit_root(struct btrfs_trans_handle *trans, struct btrfs_root *root, int overwrite) { @@ -11650,7 +11834,6 @@ static int pin_down_tree_blocks(struct btrfs_fs_info *fs_info, struct btrfs_root_item *ri; struct btrfs_key key; u64 bytenr; - u32 nodesize; int level = btrfs_header_level(eb); int nritems; int ret; @@ -11667,7 +11850,6 @@ static int pin_down_tree_blocks(struct btrfs_fs_info *fs_info, btrfs_pin_extent(fs_info, eb->start, eb->len); - nodesize = btrfs_super_nodesize(fs_info->super_copy); nritems = btrfs_header_nritems(eb); for (i = 0; i < nritems; i++) { if (level == 0) { @@ -11688,7 +11870,7 @@ static int pin_down_tree_blocks(struct btrfs_fs_info *fs_info, * in, but for now this doesn't actually use the root so * just pass in extent_root. */ - tmp = read_tree_block(fs_info, bytenr, nodesize, 0); + tmp = read_tree_block(fs_info, bytenr, 0); if (!extent_buffer_uptodate(tmp)) { fprintf(stderr, "Error reading root block\n"); return -EIO; @@ -11702,12 +11884,12 @@ static int pin_down_tree_blocks(struct btrfs_fs_info *fs_info, /* If we aren't the tree root don't read the block */ if (level == 1 && !tree_root) { - btrfs_pin_extent(fs_info, bytenr, nodesize); + btrfs_pin_extent(fs_info, bytenr, + fs_info->nodesize); continue; } - tmp = read_tree_block(fs_info, bytenr, - nodesize, 0); + tmp = read_tree_block(fs_info, bytenr, 0); if (!extent_buffer_uptodate(tmp)) { fprintf(stderr, "Error reading tree block\n"); return -EIO; @@ -12664,6 +12846,45 @@ static int clear_free_space_cache(struct btrfs_fs_info *fs_info) return ret; } +static int do_clear_free_space_cache(struct btrfs_fs_info *fs_info, + int clear_version) +{ + int ret = 0; + + if (clear_version == 1) { + if (btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) { + error( + "free space cache v2 detected, use --clear-space-cache v2"); + ret = 1; + goto close_out; + } + printf("Clearing free space cache\n"); + ret = clear_free_space_cache(fs_info); + if (ret) { + error("failed to clear free space cache"); + ret = 1; + } else { + printf("Free space cache cleared\n"); + } + } else if (clear_version == 2) { + if (!btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) { + printf("no free space cache v2 to clear\n"); + ret = 0; + goto close_out; + } + printf("Clear free space cache v2\n"); + ret = btrfs_clear_free_space_tree(fs_info); + if (ret) { + error("failed to clear free space cache v2: %d", ret); + ret = 1; + } else { + printf("free space cache v2 cleared\n"); + } + } +close_out: + return ret; +} + const char * const cmd_check_usage[] = { "btrfs check [options] ", "Check structural integrity of a filesystem (unmounted).", @@ -12674,6 +12895,7 @@ const char * const cmd_check_usage[] = { "", "-s|--super use this superblock copy", "-b|--backup use the first valid backup root copy", + "--force skip mount checks, repair is not possible", "--repair try to repair the filesystem", "--readonly run in read-only mode (default)", "--init-csum-tree create a new CRC tree", @@ -12705,7 +12927,7 @@ int cmd_check(int argc, char **argv) u64 tree_root_bytenr = 0; u64 chunk_root_bytenr = 0; char uuidbuf[BTRFS_UUID_UNPARSED_SIZE]; - int ret; + int ret = 0; int err = 0; u64 num; int init_csum_tree = 0; @@ -12714,13 +12936,15 @@ int cmd_check(int argc, char **argv) int qgroup_report = 0; int qgroups_repaired = 0; unsigned ctree_flags = OPEN_CTREE_EXCLUSIVE; + int force = 0; while(1) { int c; enum { GETOPT_VAL_REPAIR = 257, GETOPT_VAL_INIT_CSUM, GETOPT_VAL_INIT_EXTENT, GETOPT_VAL_CHECK_CSUM, GETOPT_VAL_READONLY, GETOPT_VAL_CHUNK_TREE, - GETOPT_VAL_MODE, GETOPT_VAL_CLEAR_SPACE_CACHE }; + GETOPT_VAL_MODE, GETOPT_VAL_CLEAR_SPACE_CACHE, + GETOPT_VAL_FORCE }; static const struct option long_options[] = { { "super", required_argument, NULL, 's' }, { "repair", no_argument, NULL, GETOPT_VAL_REPAIR }, @@ -12742,10 +12966,11 @@ int cmd_check(int argc, char **argv) GETOPT_VAL_MODE }, { "clear-space-cache", required_argument, NULL, GETOPT_VAL_CLEAR_SPACE_CACHE}, + { "force", no_argument, NULL, GETOPT_VAL_FORCE }, { NULL, 0, NULL, 0} }; - c = getopt_long(argc, argv, "as:br:p", long_options, NULL); + c = getopt_long(argc, argv, "as:br:pEQ", long_options, NULL); if (c < 0) break; switch(c) { @@ -12826,6 +13051,9 @@ int cmd_check(int argc, char **argv) } ctree_flags |= OPEN_CTREE_WRITES; break; + case GETOPT_VAL_FORCE: + force = 1; + break; } } @@ -12854,15 +13082,38 @@ int cmd_check(int argc, char **argv) radix_tree_init(); cache_tree_init(&root_cache); - if((ret = check_mounted(argv[optind])) < 0) { - error("could not check mount status: %s", strerror(-ret)); - err |= !!ret; - goto err_out; - } else if(ret) { - error("%s is currently mounted, aborting", argv[optind]); - ret = -EBUSY; - err |= !!ret; - goto err_out; + ret = check_mounted(argv[optind]); + if (!force) { + if (ret < 0) { + error("could not check mount status: %s", + strerror(-ret)); + err |= !!ret; + goto err_out; + } else if (ret) { + error( +"%s is currently mounted, use --force if you really intend to check the filesystem", + argv[optind]); + ret = -EBUSY; + err |= !!ret; + goto err_out; + } + } else { + if (repair) { + error("repair and --force is not yet supported"); + ret = 1; + err |= !!ret; + goto err_out; + } + if (ret < 0) { + warning( +"cannot check mount status of %s, the filesystem could be mounted, continuing because of --force", + argv[optind]); + } else if (ret) { + warning( + "filesystem mounted, continuing because of --force"); + } + /* A block device is mounted in exclusive mode by kernel */ + ctree_flags &= ~OPEN_CTREE_EXCLUSIVE; } /* only allow partial opening under repair mode */ @@ -12880,36 +13131,26 @@ int cmd_check(int argc, char **argv) global_info = info; root = info->fs_root; - if (clear_space_cache == 1) { - if (btrfs_fs_compat_ro(info, FREE_SPACE_TREE)) { - error( - "free space cache v2 detected, use --clear-space-cache v2"); - ret = 1; - goto close_out; - } - printf("Clearing free space cache\n"); - ret = clear_free_space_cache(info); - if (ret) { - error("failed to clear free space cache"); - ret = 1; - } else { - printf("Free space cache cleared\n"); - } + uuid_unparse(info->super_copy->fsid, uuidbuf); + + printf("Checking filesystem on %s\nUUID: %s\n", argv[optind], uuidbuf); + + /* + * Check the bare minimum before starting anything else that could rely + * on it, namely the tree roots, any local consistency checks + */ + if (!extent_buffer_uptodate(info->tree_root->node) || + !extent_buffer_uptodate(info->dev_root->node) || + !extent_buffer_uptodate(info->chunk_root->node)) { + error("critical roots corrupted, unable to check the filesystem"); + err |= !!ret; + ret = -EIO; goto close_out; - } else if (clear_space_cache == 2) { - if (!btrfs_fs_compat_ro(info, FREE_SPACE_TREE)) { - printf("no free space cache v2 to clear\n"); - ret = 0; - goto close_out; - } - printf("Clear free space cache v2\n"); - ret = btrfs_clear_free_space_tree(info); - if (ret) { - error("failed to clear free space cache v2: %d", ret); - ret = 1; - } else { - printf("free space cache v2 cleared\n"); - } + } + + if (clear_space_cache) { + ret = do_clear_free_space_cache(info, clear_space_cache); + err |= !!ret; goto close_out; } @@ -12932,7 +13173,6 @@ int cmd_check(int argc, char **argv) } } - uuid_unparse(info->super_copy->fsid, uuidbuf); if (qgroup_report) { printf("Print quota groups for %s\nUUID: %s\n", argv[optind], uuidbuf); @@ -12949,16 +13189,6 @@ int cmd_check(int argc, char **argv) err |= !!ret; goto close_out; } - printf("Checking filesystem on %s\nUUID: %s\n", argv[optind], uuidbuf); - - if (!extent_buffer_uptodate(info->tree_root->node) || - !extent_buffer_uptodate(info->dev_root->node) || - !extent_buffer_uptodate(info->chunk_root->node)) { - error("critical roots corrupted, unable to check the filesystem"); - err |= !!ret; - ret = -EIO; - goto close_out; - } if (init_extent_tree || init_csum_tree) { struct btrfs_trans_handle *trans; @@ -13020,12 +13250,7 @@ int cmd_check(int argc, char **argv) goto close_out; } - if (!ctx.progress_enabled) - fprintf(stderr, "checking extents\n"); - if (check_mode == CHECK_MODE_LOWMEM) - ret = check_chunks_and_extents_v2(root); - else - ret = check_chunks_and_extents(root); + ret = do_check_chunks_and_extents(info); err |= !!ret; if (ret) error( @@ -13074,12 +13299,7 @@ int cmd_check(int argc, char **argv) * ignore it when this happens. */ no_holes = btrfs_fs_incompat(root->fs_info, NO_HOLES); - if (!ctx.progress_enabled) - fprintf(stderr, "checking fs roots\n"); - if (check_mode == CHECK_MODE_LOWMEM) - ret = check_fs_roots_v2(root->fs_info); - else - ret = check_fs_roots(root, &root_cache); + ret = do_check_fs_roots(info, &root_cache); err |= !!ret; if (ret) { error("errors found in fs roots"); @@ -13155,17 +13375,6 @@ int cmd_check(int argc, char **argv) err |= !!ret; } out: - if (found_old_backref) { /* - * there was a disk format change when mixed - * backref was in testing tree. The old format - * existed about one week. - */ - printf("\n * Found old mixed backref format. " - "The old format is not supported! *" - "\n * Please mount the FS in readonly mode, " - "backup data and re-format the FS. *\n\n"); - err |= 1; - } printf("found %llu bytes used, ", (unsigned long long)bytes_used); if (err) diff --git a/cmds-fi-du.c b/cmds-fi-du.c index f106f45b..8a44665c 100644 --- a/cmds-fi-du.c +++ b/cmds-fi-du.c @@ -403,6 +403,7 @@ static int du_walk_dir(struct du_dir_ctxt *ctxt, struct rb_root *shared_extents) shared_extents, &tot, &shr, 0); if (ret == -ENOTTY) { + ret = 0; continue; } else if (ret) { fprintf(stderr, @@ -432,7 +433,6 @@ static int du_add_file(const char *filename, int dirfd, u64 file_total = 0; u64 file_shared = 0; u64 dir_set_shared = 0; - u64 subvol; int fd; DIR *dirstream = NULL; @@ -461,16 +461,24 @@ static int du_add_file(const char *filename, int dirfd, goto out; } - ret = lookup_path_rootid(fd, &subvol); - if (ret) - goto out_close; + /* + * If st.st_ino == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID ==2, there is no any + * related tree + */ + if (st.st_ino != BTRFS_EMPTY_SUBVOL_DIR_OBJECTID) { + u64 subvol; - if (inode_seen(st.st_ino, subvol)) - goto out_close; + ret = lookup_path_rootid(fd, &subvol); + if (ret) + goto out_close; - ret = mark_inode_seen(st.st_ino, subvol); - if (ret) - goto out_close; + if (inode_seen(st.st_ino, subvol)) + goto out_close; + + ret = mark_inode_seen(st.st_ino, subvol); + if (ret) + goto out_close; + } if (S_ISREG(st.st_mode)) { ret = du_calc_file_space(fd, shared_extents, &file_total, diff --git a/cmds-fi-du.h b/cmds-fi-du.h deleted file mode 100644 index 86e8f24a..00000000 --- a/cmds-fi-du.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License v2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 021110-1307, USA. - */ - -#ifndef __CMDS_FILESYSTEM_DU_H__ -#define __CMDS_FILESYSTEM_DU_H__ - -extern const char * const cmd_filesystem_du_usage[]; -int cmd_filesystem_du(int argc, char **argv); - -#endif /* __CMDS_FILESYSTEM_DU_H__ */ diff --git a/cmds-fi-usage.c b/cmds-fi-usage.c index 101a0c4e..6c846c15 100644 --- a/cmds-fi-usage.c +++ b/cmds-fi-usage.c @@ -1040,6 +1040,7 @@ void print_device_sizes(struct device_info *devinfo, unsigned unit_mode) pretty_size_mode(devinfo->device_size, unit_mode)); printf(" Device slack: %*s%10s\n", (int)(20 - strlen("Device slack")), "", - pretty_size_mode(devinfo->device_size - devinfo->size, + pretty_size_mode(devinfo->device_size > 0 ? + devinfo->device_size - devinfo->size : 0, unit_mode)); } diff --git a/cmds-fi-usage.h b/cmds-fi-usage.h index f967ba8b..a399517f 100644 --- a/cmds-fi-usage.h +++ b/cmds-fi-usage.h @@ -22,9 +22,6 @@ #include "kerncompat.h" #include "ioctl.h" -extern const char * const cmd_filesystem_usage_usage[]; -int cmd_filesystem_usage(int argc, char **argv); - struct device_info { u64 devid; char path[BTRFS_DEVICE_PATH_NAME_MAX]; diff --git a/cmds-filesystem.c b/cmds-filesystem.c index e2e41e91..c39f2d15 100644 --- a/cmds-filesystem.c +++ b/cmds-filesystem.c @@ -30,99 +30,20 @@ #include "kerncompat.h" #include "ctree.h" -#include "ioctl.h" #include "utils.h" #include "volumes.h" #include "commands.h" #include "cmds-fi-usage.h" #include "list_sort.h" #include "disk-io.h" -#include "cmds-fi-du.h" #include "help.h" /* * for btrfs fi show, we maintain a hash of fsids we've already printed. * This way we don't print dups if a given FS is mounted more than once. */ -#define SEEN_FSID_HASH_SIZE 256 - -struct seen_fsid { - u8 fsid[BTRFS_FSID_SIZE]; - struct seen_fsid *next; -}; - static struct seen_fsid *seen_fsid_hash[SEEN_FSID_HASH_SIZE] = {NULL,}; -static int is_seen_fsid(u8 *fsid) -{ - u8 hash = fsid[0]; - int slot = hash % SEEN_FSID_HASH_SIZE; - struct seen_fsid *seen = seen_fsid_hash[slot]; - - while (seen) { - if (memcmp(seen->fsid, fsid, BTRFS_FSID_SIZE) == 0) - return 1; - - seen = seen->next; - } - - return 0; -} - -static int add_seen_fsid(u8 *fsid) -{ - u8 hash = fsid[0]; - int slot = hash % SEEN_FSID_HASH_SIZE; - struct seen_fsid *seen = seen_fsid_hash[slot]; - struct seen_fsid *alloc; - - if (!seen) - goto insert; - - while (1) { - if (memcmp(seen->fsid, fsid, BTRFS_FSID_SIZE) == 0) - return -EEXIST; - - if (!seen->next) - break; - - seen = seen->next; - } - -insert: - - alloc = malloc(sizeof(*alloc)); - if (!alloc) - return -ENOMEM; - - alloc->next = NULL; - memcpy(alloc->fsid, fsid, BTRFS_FSID_SIZE); - - if (seen) - seen->next = alloc; - else - seen_fsid_hash[slot] = alloc; - - return 0; -} - -static void free_seen_fsid(void) -{ - int slot; - struct seen_fsid *seen; - struct seen_fsid *next; - - for (slot = 0; slot < SEEN_FSID_HASH_SIZE; slot++) { - seen = seen_fsid_hash[slot]; - while (seen) { - next = seen->next; - free(seen); - seen = next; - } - seen_fsid_hash[slot] = NULL; - } -} - static const char * const filesystem_cmd_group_usage[] = { "btrfs filesystem [] []", NULL @@ -356,7 +277,7 @@ static void print_one_uuid(struct btrfs_fs_devices *fs_devices, u64 devs_found = 0; u64 total; - if (add_seen_fsid(fs_devices->fsid)) + if (add_seen_fsid(fs_devices->fsid, seen_fsid_hash, -1, NULL)) return; uuid_unparse(fs_devices->fsid, uuidbuf); @@ -403,7 +324,7 @@ static int print_one_fs(struct btrfs_ioctl_fs_info_args *fs_info, struct btrfs_ioctl_dev_info_args *tmp_dev_info; int ret; - ret = add_seen_fsid(fs_info->fsid); + ret = add_seen_fsid(fs_info->fsid, seen_fsid_hash, -1, NULL); if (ret == -EEXIST) return 0; else if (ret) @@ -475,7 +396,7 @@ static int btrfs_scan_kernel(void *search, unsigned unit_mode) goto out; /* skip all fs already shown as mounted fs */ - if (is_seen_fsid(fs_info_arg.fsid)) + if (is_seen_fsid(fs_info_arg.fsid, seen_fsid_hash)) continue; ret = get_label_mounted(mnt->mnt_dir, label); @@ -677,7 +598,7 @@ static int search_umounted_fs_uuids(struct list_head *all_uuids, } /* skip all fs already shown as mounted fs */ - if (is_seen_fsid(cur_fs->fsid)) + if (is_seen_fsid(cur_fs->fsid, seen_fsid_hash)) continue; fs_copy = calloc(1, sizeof(*fs_copy)); @@ -909,7 +830,7 @@ devs_only: free_fs_devices(fs_devices); } out: - free_seen_fsid(); + free_seen_fsid(seen_fsid_hash); return ret; } @@ -953,6 +874,8 @@ static int parse_compress_type(char *s) return BTRFS_COMPRESS_ZLIB; else if (strcmp(optarg, "lzo") == 0) return BTRFS_COMPRESS_LZO; + else if (strcmp(optarg, "zstd") == 0) + return BTRFS_COMPRESS_ZSTD; else { error("unknown compression type %s", s); exit(1); @@ -963,13 +886,13 @@ static const char * const cmd_filesystem_defrag_usage[] = { "btrfs filesystem defragment [options] | [|...]", "Defragment a file or a directory", "", - "-v be verbose", - "-r defragment files recursively", - "-c[zlib,lzo] compress the file while defragmenting", - "-f flush data to disk immediately after defragmenting", - "-s start defragment only from byte onward", - "-l len defragment only up to len bytes", - "-t size target extent size hint (default: 32M)", + "-v be verbose", + "-r defragment files recursively", + "-c[zlib,lzo,zstd] compress the file while defragmenting", + "-f flush data to disk immediately after defragmenting", + "-s start defragment only from byte onward", + "-l len defragment only up to len bytes", + "-t size target extent size hint (default: 32M)", NULL }; diff --git a/cmds-inspect-dump-super.c b/cmds-inspect-dump-super.c index 98e0270a..23a71155 100644 --- a/cmds-inspect-dump-super.c +++ b/cmds-inspect-dump-super.c @@ -33,7 +33,6 @@ #include "utils.h" #include "commands.h" #include "crc32c.h" -#include "cmds-inspect-dump-super.h" #include "help.h" static int check_csum_sblock(void *sb, int csum_size) @@ -119,7 +118,7 @@ static void print_sys_chunk_array(struct btrfs_super_block *sb) len = btrfs_chunk_item_size(num_stripes); if (cur_offset + len > array_size) goto out_short_read; - print_chunk(buf, chunk); + print_chunk_item(buf, chunk); } else { error("unexpected item type %u in sys_array at offset %u", (u32)key.type, cur_offset); @@ -224,7 +223,7 @@ static struct readable_flag_entry incompat_flags_array[] = { DEF_INCOMPAT_FLAG_ENTRY(DEFAULT_SUBVOL), DEF_INCOMPAT_FLAG_ENTRY(MIXED_GROUPS), DEF_INCOMPAT_FLAG_ENTRY(COMPRESS_LZO), - DEF_INCOMPAT_FLAG_ENTRY(COMPRESS_LZOv2), + DEF_INCOMPAT_FLAG_ENTRY(COMPRESS_ZSTD), DEF_INCOMPAT_FLAG_ENTRY(BIG_METADATA), DEF_INCOMPAT_FLAG_ENTRY(EXTENDED_IREF), DEF_INCOMPAT_FLAG_ENTRY(RAID56), @@ -519,8 +518,10 @@ int cmd_inspect_dump_super(int argc, char **argv) while (1) { int c; + enum { GETOPT_VAL_BYTENR = 257 }; static const struct option long_options[] = { {"all", no_argument, NULL, 'a'}, + {"bytenr", required_argument, NULL, GETOPT_VAL_BYTENR }, {"full", no_argument, NULL, 'f'}, {"force", no_argument, NULL, 'F'}, {"super", required_argument, NULL, 's' }, @@ -565,6 +566,11 @@ int cmd_inspect_dump_super(int argc, char **argv) } all = 0; break; + case GETOPT_VAL_BYTENR: + arg = arg_strtou64(optarg); + sb_bytenr = arg; + all = 0; + break; default: usage(cmd_inspect_dump_super_usage); } diff --git a/cmds-inspect-dump-super.h b/cmds-inspect-dump-super.h deleted file mode 100644 index ffab81d7..00000000 --- a/cmds-inspect-dump-super.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2012 STRATO AG. All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License v2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 021110-1307, USA. - */ - -#ifndef __CMDS_INSPECT_DUMP_SUPER_H__ -#define __CMDS_INSPECT_DUMP_SUPER_H__ - -int cmd_inspect_dump_super(int argc, char **argv); - -extern const char * const cmd_inspect_dump_super_usage[]; - -#endif diff --git a/cmds-inspect-dump-tree.c b/cmds-inspect-dump-tree.c index 93dff086..4e72c08a 100644 --- a/cmds-inspect-dump-tree.c +++ b/cmds-inspect-dump-tree.c @@ -31,7 +31,6 @@ #include "volumes.h" #include "commands.h" #include "utils.h" -#include "cmds-inspect-dump-tree.h" #include "help.h" static void print_extents(struct btrfs_root *root, struct extent_buffer *eb) @@ -39,7 +38,6 @@ static void print_extents(struct btrfs_root *root, struct extent_buffer *eb) struct extent_buffer *next; int i; u32 nr; - u32 size; if (!eb) return; @@ -49,12 +47,11 @@ static void print_extents(struct btrfs_root *root, struct extent_buffer *eb) return; } - size = root->fs_info->nodesize; nr = btrfs_header_nritems(eb); for (i = 0; i < nr; i++) { next = read_tree_block(root->fs_info, btrfs_node_blockptr(eb, i), - size, btrfs_node_ptr_generation(eb, i)); + btrfs_node_ptr_generation(eb, i)); if (!extent_buffer_uptodate(next)) continue; if (btrfs_is_leaf(next) && btrfs_header_level(eb) != 1) { @@ -222,6 +219,7 @@ int cmd_inspect_dump_tree(int argc, char **argv) int uuid_tree_only = 0; int roots_only = 0; int root_backups = 0; + unsigned open_ctree_flags = OPEN_CTREE_FS_PARTIAL; u64 block_only = 0; struct btrfs_root *tree_root_scan; u64 tree_id = 0; @@ -260,6 +258,11 @@ int cmd_inspect_dump_tree(int argc, char **argv) root_backups = 1; break; case 'b': + /* + * If only showing one block, no need to fill roots + * other than chunk root + */ + open_ctree_flags |= __OPEN_CTREE_RETURN_CHUNK_ROOT; block_only = arg_strtou64(optarg); break; case 't': { @@ -299,34 +302,23 @@ int cmd_inspect_dump_tree(int argc, char **argv) printf("%s\n", PACKAGE_STRING); - info = open_ctree_fs_info(argv[optind], 0, 0, 0, OPEN_CTREE_PARTIAL); + info = open_ctree_fs_info(argv[optind], 0, 0, 0, open_ctree_flags); if (!info) { error("unable to open %s", argv[optind]); goto out; } - root = info->fs_root; - if (!root) { - error("unable to open %s", argv[optind]); - goto out; - } - if (block_only) { - leaf = read_tree_block(info, - block_only, - info->nodesize, 0); - + root = info->chunk_root; + leaf = read_tree_block(info, block_only, 0); if (extent_buffer_uptodate(leaf) && btrfs_header_level(leaf) != 0) { free_extent_buffer(leaf); leaf = NULL; } - if (!leaf) { - leaf = read_tree_block(info, - block_only, - info->nodesize, 0); - } + if (!leaf) + leaf = read_tree_block(info, block_only, 0); if (!extent_buffer_uptodate(leaf)) { error("failed to read %llu", (unsigned long long)block_only); @@ -337,6 +329,12 @@ int cmd_inspect_dump_tree(int argc, char **argv) goto close_root; } + root = info->fs_root; + if (!root) { + error("unable to open %s", argv[optind]); + goto out; + } + if (!(extent_only || uuid_tree_only || tree_id)) { if (roots_only) { printf("root tree: %llu level %d\n", @@ -440,8 +438,7 @@ again: offset = btrfs_item_ptr_offset(leaf, slot); read_extent_buffer(leaf, &ri, offset, sizeof(ri)); - buf = read_tree_block(info, btrfs_root_bytenr(&ri), - info->nodesize, 0); + buf = read_tree_block(info, btrfs_root_bytenr(&ri), 0); if (!extent_buffer_uptodate(buf)) goto next; if (tree_id && found_key.objectid != tree_id) { diff --git a/cmds-inspect-dump-tree.h b/cmds-inspect-dump-tree.h deleted file mode 100644 index 755fb4b1..00000000 --- a/cmds-inspect-dump-tree.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License v2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 021110-1307, USA. - */ - -#ifndef __CMDS_INSPECT_DUMP_TREE_H__ -#define __CMDS_INSPECT_DUMP_TREE_H__ - -int cmd_inspect_dump_tree(int argc, char **argv); - -extern const char * const cmd_inspect_dump_tree_usage[]; - -#endif diff --git a/cmds-inspect-tree-stats.c b/cmds-inspect-tree-stats.c index 05f4f616..82a6a16c 100644 --- a/cmds-inspect-tree-stats.c +++ b/cmds-inspect-tree-stats.c @@ -35,7 +35,6 @@ #include "volumes.h" #include "utils.h" #include "commands.h" -#include "cmds-inspect-tree-stats.h" #include "help.h" static int verbose = 0; @@ -154,7 +153,6 @@ static int walk_nodes(struct btrfs_root *root, struct btrfs_path *path, path->slots[level] = i; if ((level - 1) > 0 || find_inline) { tmp = read_tree_block(root->fs_info, cur_blocknr, - nodesize, btrfs_node_ptr_generation(b, i)); if (!extent_buffer_uptodate(tmp)) { error("failed to read blocknr %llu", diff --git a/cmds-inspect-tree-stats.h b/cmds-inspect-tree-stats.h deleted file mode 100644 index eb401dac..00000000 --- a/cmds-inspect-tree-stats.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2011 Red Hat. All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License v2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 021110-1307, USA. - */ - -#ifndef __CMDS_INSPECT_TREE_STATS_H__ -#define __CMDS_INSPECT_TREE_STATS_H__ - -int cmd_inspect_tree_stats(int argc, char **argv); - -extern const char * const cmd_inspect_tree_stats_usage[]; - -#endif diff --git a/cmds-inspect.c b/cmds-inspect.c index 58b59560..885f3abe 100644 --- a/cmds-inspect.c +++ b/cmds-inspect.c @@ -31,9 +31,6 @@ #include "disk-io.h" #include "commands.h" #include "btrfs-list.h" -#include "cmds-inspect-dump-tree.h" -#include "cmds-inspect-dump-super.h" -#include "cmds-inspect-tree-stats.h" #include "help.h" static const char * const inspect_cmd_group_usage[] = { @@ -321,7 +318,7 @@ static int cmd_inspect_rootid(int argc, char **argv) if (check_argc_exact(argc - optind, 1)) usage(cmd_inspect_rootid_usage); - fd = btrfs_open_dir(argv[optind], &dirstream, 1); + fd = btrfs_open_file_or_dir(argv[optind], &dirstream, 1); if (fd < 0) { ret = -ENOENT; goto out; diff --git a/cmds-property.c b/cmds-property.c index 9ae12460..03bafa05 100644 --- a/cmds-property.c +++ b/cmds-property.c @@ -48,36 +48,6 @@ static int parse_prop(const char *arg, const struct prop_handler *props, return -1; } -static int get_fsid(const char *path, u8 *fsid, int silent) -{ - int ret; - int fd; - struct btrfs_ioctl_fs_info_args args; - - fd = open(path, O_RDONLY); - if (fd < 0) { - ret = -errno; - if (!silent) - error("failed to open %s: %s", path, - strerror(-ret)); - goto out; - } - - ret = ioctl(fd, BTRFS_IOC_FS_INFO, &args); - if (ret < 0) { - ret = -errno; - goto out; - } - - memcpy(fsid, args.fsid, BTRFS_FSID_SIZE); - ret = 0; - -out: - if (fd != -1) - close(fd); - return ret; -} - static int check_btrfs_object(const char *object) { int ret; diff --git a/cmds-receive.c b/cmds-receive.c index 72e9c8f3..e584cef0 100644 --- a/cmds-receive.c +++ b/cmds-receive.c @@ -1277,7 +1277,7 @@ int cmd_receive(int argc, char **argv) { NULL, 0, NULL, 0 } }; - c = getopt_long(argc, argv, "Cevf:m:", long_opts, NULL); + c = getopt_long(argc, argv, "Cevf:m:E:", long_opts, NULL); if (c < 0) break; diff --git a/cmds-rescue.c b/cmds-rescue.c index 7e7344ee..d1bec021 100644 --- a/cmds-rescue.c +++ b/cmds-rescue.c @@ -191,6 +191,7 @@ static int cmd_rescue_zero_log(int argc, char **argv) (unsigned long long)btrfs_super_log_root(sb), (unsigned)btrfs_super_log_root_level(sb)); trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); btrfs_set_super_log_root(sb, 0); btrfs_set_super_log_root_level(sb, 0); btrfs_commit_transaction(trans, root); diff --git a/cmds-restore.c b/cmds-restore.c index c174bdd5..6196a1ed 100644 --- a/cmds-restore.c +++ b/cmds-restore.c @@ -29,6 +29,9 @@ #include #include #include +#if BTRFSRESTORE_ZSTD +#include +#endif #include #include #include @@ -156,6 +159,50 @@ static int decompress_lzo(struct btrfs_root *root, unsigned char *inbuf, return 0; } +static int decompress_zstd(const char *inbuf, char *outbuf, u64 compress_len, + u64 decompress_len) +{ +#if !BTRFSRESTORE_ZSTD + error("btrfs not compiled with zstd support"); + return -1; +#else + ZSTD_DStream *strm; + size_t zret; + int ret = 0; + ZSTD_inBuffer in = {inbuf, compress_len, 0}; + ZSTD_outBuffer out = {outbuf, decompress_len, 0}; + + strm = ZSTD_createDStream(); + if (!strm) { + error("zstd create failed"); + return -1; + } + + zret = ZSTD_initDStream(strm); + if (ZSTD_isError(zret)) { + error("zstd init failed: %s", ZSTD_getErrorName(zret)); + ret = -1; + goto out; + } + + zret = ZSTD_decompressStream(strm, &out, &in); + if (ZSTD_isError(zret)) { + error("zstd decompress failed %s\n", ZSTD_getErrorName(zret)); + ret = -1; + goto out; + } + if (zret != 0) { + error("zstd frame incomplete"); + ret = -1; + goto out; + } + +out: + ZSTD_freeDStream(strm); + return ret; +#endif +} + static int decompress(struct btrfs_root *root, char *inbuf, char *outbuf, u64 compress_len, u64 *decompress_len, int compress) { @@ -166,6 +213,9 @@ static int decompress(struct btrfs_root *root, char *inbuf, char *outbuf, case BTRFS_COMPRESS_LZO: return decompress_lzo(root, (unsigned char *)inbuf, outbuf, compress_len, decompress_len); + case BTRFS_COMPRESS_ZSTD: + return decompress_zstd(inbuf, outbuf, compress_len, + *decompress_len); default: break; } @@ -1255,7 +1305,7 @@ static struct btrfs_root *open_fs(const char *dev, u64 root_location, root_location = btrfs_super_root(fs_info->super_copy); generation = btrfs_super_generation(fs_info->super_copy); root->node = read_tree_block(fs_info, root_location, - fs_info->nodesize, generation); + generation); if (!extent_buffer_uptodate(root->node)) { fprintf(stderr, "Error opening tree root\n"); close_ctree(root); @@ -1501,8 +1551,7 @@ int cmd_restore(int argc, char **argv) if (fs_location != 0) { free_extent_buffer(root->node); - root->node = read_tree_block(root->fs_info, fs_location, - root->fs_info->nodesize, 0); + root->node = read_tree_block(root->fs_info, fs_location, 0); if (!extent_buffer_uptodate(root->node)) { fprintf(stderr, "Failed to read fs location\n"); ret = 1; diff --git a/cmds-subvolume.c b/cmds-subvolume.c index 666f6e05..e7caa05a 100644 --- a/cmds-subvolume.c +++ b/cmds-subvolume.c @@ -263,12 +263,16 @@ static int cmd_subvol_delete(int argc, char **argv) DIR *dirstream = NULL; int verbose = 0; int commit_mode = 0; + u8 fsid[BTRFS_FSID_SIZE]; + char uuidbuf[BTRFS_UUID_UNPARSED_SIZE]; + struct seen_fsid *seen_fsid_hash[SEEN_FSID_HASH_SIZE] = { NULL, }; + enum { COMMIT_AFTER = 1, COMMIT_EACH = 2 }; while (1) { int c; static const struct option long_options[] = { - {"commit-after", no_argument, NULL, 'c'}, /* commit mode 1 */ - {"commit-each", no_argument, NULL, 'C'}, /* commit mode 2 */ + {"commit-after", no_argument, NULL, 'c'}, + {"commit-each", no_argument, NULL, 'C'}, {"verbose", no_argument, NULL, 'v'}, {NULL, 0, NULL, 0} }; @@ -279,10 +283,10 @@ static int cmd_subvol_delete(int argc, char **argv) switch(c) { case 'c': - commit_mode = 1; + commit_mode = COMMIT_AFTER; break; case 'C': - commit_mode = 2; + commit_mode = COMMIT_EACH; break; case 'v': verbose++; @@ -298,7 +302,7 @@ static int cmd_subvol_delete(int argc, char **argv) if (verbose > 0) { printf("Transaction commit: %s\n", !commit_mode ? "none (default)" : - commit_mode == 1 ? "at the end" : "after each"); + commit_mode == COMMIT_AFTER ? "at the end" : "after each"); } cnt = optind; @@ -338,7 +342,7 @@ again: } printf("Delete subvolume (%s): '%s/%s'\n", - commit_mode == 2 || (commit_mode == 1 && cnt + 1 == argc) + commit_mode == COMMIT_EACH || (commit_mode == COMMIT_AFTER && cnt + 1 == argc) ? "commit" : "no-commit", dname, vname); memset(&args, 0, sizeof(args)); strncpy_null(args.name, vname); @@ -350,38 +354,81 @@ again: goto out; } - if (commit_mode == 1) { + if (commit_mode == COMMIT_EACH) { res = wait_for_commit(fd); if (res < 0) { error("unable to wait for commit after '%s': %s", path, strerror(errno)); ret = 1; } + } else if (commit_mode == COMMIT_AFTER) { + res = get_fsid(dname, fsid, 0); + if (res < 0) { + error("unable to get fsid for '%s': %s", + path, strerror(-res)); + error( + "delete suceeded but commit may not be done in the end"); + ret = 1; + goto out; + } + + if (add_seen_fsid(fsid, seen_fsid_hash, fd, dirstream) == 0) { + if (verbose > 0) { + uuid_unparse(fsid, uuidbuf); + printf(" new fs is found for '%s', fsid: %s\n", + path, uuidbuf); + } + /* + * This is the first time a subvolume on this + * filesystem is deleted, keep fd in order to issue + * SYNC ioctl in the end + */ + goto keep_fd; + } } out: + close_file_or_dir(fd, dirstream); +keep_fd: + fd = -1; + dirstream = NULL; free(dupdname); free(dupvname); dupdname = NULL; dupvname = NULL; cnt++; - if (cnt < argc) { - close_file_or_dir(fd, dirstream); - /* avoid double free */ - fd = -1; - dirstream = NULL; + if (cnt < argc) goto again; - } - if (commit_mode == 2 && fd != -1) { - res = wait_for_commit(fd); - if (res < 0) { - error("unable to do final sync after deletion: %s", - strerror(errno)); - ret = 1; + if (commit_mode == COMMIT_AFTER) { + int slot; + + /* + * Traverse seen_fsid_hash and issue SYNC ioctl on each + * filesystem + */ + for (slot = 0; slot < SEEN_FSID_HASH_SIZE; slot++) { + struct seen_fsid *seen = seen_fsid_hash[slot]; + + while (seen) { + res = wait_for_commit(seen->fd); + if (res < 0) { + uuid_unparse(seen->fsid, uuidbuf); + error( + "unable to do final sync after deletion: %s, fsid: %s", + strerror(errno), uuidbuf); + ret = 1; + } else if (verbose > 0) { + uuid_unparse(seen->fsid, uuidbuf); + printf("final sync is done for fsid: %s\n", + uuidbuf); + } + seen = seen->next; + } } + /* fd will also be closed in free_seen_fsid */ + free_seen_fsid(seen_fsid_hash); } - close_file_or_dir(fd, dirstream); return ret; } @@ -392,24 +439,32 @@ out: * - lowercase for enabling specific items in the output */ static const char * const cmd_subvol_list_usage[] = { - "btrfs subvolume list [options] [-G [+|-]value] [-C [+|-]value] " - "[--sort=gen,ogen,rootid,path] ", - "List subvolumes (and snapshots)", + "btrfs subvolume list [options] ", + "List subvolumes and snapshots in the filesystem.", "", - "-p print parent ID", + "Path filtering:", + "-o print only subvolumes below specified path", "-a print all the subvolumes in the filesystem and", " distinguish absolute and relative path with respect", " to the given ", + "", + "Field selection:", + "-p print parent ID", "-c print the ogeneration of the subvolume", "-g print the generation of the subvolume", - "-o print only subvolumes below specified path", "-u print the uuid of subvolumes (and snapshots)", "-q print the parent uuid of the snapshots", "-R print the uuid of the received snapshots", - "-t print the result as a table", - "-s list snapshots only in the filesystem", + "", + "Type filtering:", + "-s list only snapshots", "-r list readonly subvolumes (including snapshots)", "-d list deleted subvolumes that are not yet cleaned", + "", + "Other:", + "-t print the result as a table", + "", + "Sorting:", "-G [+|-]value", " filter the subvolumes by generation", " (+value: >= value; -value: <= value; value: = value)", diff --git a/commands.h b/commands.h index 01bf387e..76991f2b 100644 --- a/commands.h +++ b/commands.h @@ -89,9 +89,16 @@ extern const char * const cmd_chunk_recover_usage[]; extern const char * const cmd_super_recover_usage[]; extern const char * const cmd_restore_usage[]; extern const char * const cmd_rescue_usage[]; +extern const char * const cmd_inspect_dump_super_usage[]; +extern const char * const cmd_inspect_dump_tree_usage[]; +extern const char * const cmd_inspect_tree_stats_usage[]; +extern const char * const cmd_filesystem_du_usage[]; +extern const char * const cmd_filesystem_usage_usage[]; int cmd_subvolume(int argc, char **argv); int cmd_filesystem(int argc, char **argv); +int cmd_filesystem_du(int argc, char **argv); +int cmd_filesystem_usage(int argc, char **argv); int cmd_balance(int argc, char **argv); int cmd_device(int argc, char **argv); int cmd_scrub(int argc, char **argv); @@ -99,6 +106,9 @@ int cmd_check(int argc, char **argv); int cmd_chunk_recover(int argc, char **argv); int cmd_super_recover(int argc, char **argv); int cmd_inspect(int argc, char **argv); +int cmd_inspect_dump_super(int argc, char **argv); +int cmd_inspect_dump_tree(int argc, char **argv); +int cmd_inspect_tree_stats(int argc, char **argv); int cmd_property(int argc, char **argv); int cmd_send(int argc, char **argv); int cmd_receive(int argc, char **argv); diff --git a/configure b/configure index 5b91d293..4f280e16 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for btrfs-progs v4.12. +# Generated by GNU Autoconf 2.69 for btrfs-progs v4.13.3. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='btrfs-progs' PACKAGE_TARNAME='btrfs-progs' -PACKAGE_VERSION='v4.12' -PACKAGE_STRING='btrfs-progs v4.12' +PACKAGE_VERSION='v4.13.3' +PACKAGE_STRING='btrfs-progs v4.13.3' PACKAGE_BUGREPORT='linux-btrfs@vger.kernel.org' PACKAGE_URL='http://btrfs.wiki.kernel.org' @@ -632,6 +632,10 @@ LZO2_CFLAGS LZO2_LIBS_STATIC LZO2_LIBS UDEVDIR +BTRFSRESTORE_ZSTD +ZSTD_LIBS_STATIC +ZSTD_LIBS +ZSTD_CFLAGS ZLIB_LIBS_STATIC ZLIB_LIBS ZLIB_CFLAGS @@ -641,7 +645,10 @@ UUID_CFLAGS BLKID_LIBS_STATIC BLKID_LIBS BLKID_CFLAGS +BTRFSCONVERT_REISERFS BTRFSCONVERT_EXT2 +REISERFS_LIBS +REISERFS_CFLAGS COM_ERR_LIBS COM_ERR_CFLAGS EXT2FS_LIBS @@ -727,6 +734,7 @@ enable_backtrace enable_documentation enable_convert with_convert +enable_zstd ' ac_precious_vars='build_alias host_alias @@ -744,12 +752,16 @@ EXT2FS_CFLAGS EXT2FS_LIBS COM_ERR_CFLAGS COM_ERR_LIBS +REISERFS_CFLAGS +REISERFS_LIBS BLKID_CFLAGS BLKID_LIBS UUID_CFLAGS UUID_LIBS ZLIB_CFLAGS -ZLIB_LIBS' +ZLIB_LIBS +ZSTD_CFLAGS +ZSTD_LIBS' # Initialize some variables set by options. @@ -1290,7 +1302,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures btrfs-progs v4.12 to adapt to many kinds of systems. +\`configure' configures btrfs-progs v4.13.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1355,7 +1367,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of btrfs-progs v4.12:";; + short | recursive ) echo "Configuration of btrfs-progs v4.13.3:";; esac cat <<\_ACEOF @@ -1367,13 +1379,14 @@ Optional Features: --disable-backtrace disable btrfs backtrace --disable-documentation do not build domumentation --disable-convert do not build btrfs-convert + --enable-zstd[=auto] build with zstd support (default: auto) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-convert[=auto] built-in filesystems for convert (default: auto) - supported (comma separated list): ext2 + supported (comma separated list): ext2,reiserfs Some influential environment variables: CC C compiler command @@ -1396,6 +1409,10 @@ Some influential environment variables: C compiler flags for COM_ERR, overriding pkg-config COM_ERR_LIBS linker flags for COM_ERR, overriding pkg-config + REISERFS_CFLAGS + C compiler flags for REISERFS, overriding pkg-config + REISERFS_LIBS + linker flags for REISERFS, overriding pkg-config BLKID_CFLAGS C compiler flags for BLKID, overriding pkg-config BLKID_LIBS linker flags for BLKID, overriding pkg-config @@ -1403,6 +1420,8 @@ Some influential environment variables: UUID_LIBS linker flags for UUID, overriding pkg-config ZLIB_CFLAGS C compiler flags for ZLIB, overriding pkg-config ZLIB_LIBS linker flags for ZLIB, overriding pkg-config + ZSTD_CFLAGS C compiler flags for ZSTD, overriding pkg-config + ZSTD_LIBS linker flags for ZSTD, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1471,7 +1490,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -btrfs-progs configure v4.12 +btrfs-progs configure v4.13.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1840,7 +1859,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by btrfs-progs $as_me v4.12, which was +It was created by btrfs-progs $as_me v4.13.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -5389,6 +5408,7 @@ fi convertfs= BTRFSCONVERT_EXT2=0 +BTRFSCONVERT_REISERFS=0 if test "x$enable_convert" = xyes; then if test "x$with_convert" = "xauto" || echo "$with_convert" | grep -q "ext2"; then @@ -5742,11 +5762,180 @@ fi convertfs="${convertfs:+$convertfs,}ext2" BTRFSCONVERT_EXT2=1 fi + if test "x$with_convert" = "xauto"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for REISERFS" >&5 +$as_echo_n "checking for REISERFS... " >&6; } + +if test -n "$REISERFS_CFLAGS"; then + pkg_cv_REISERFS_CFLAGS="$REISERFS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"reiserfscore >= 3.6.27\""; } >&5 + ($PKG_CONFIG --exists --print-errors "reiserfscore >= 3.6.27") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_REISERFS_CFLAGS=`$PKG_CONFIG --cflags "reiserfscore >= 3.6.27" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$REISERFS_LIBS"; then + pkg_cv_REISERFS_LIBS="$REISERFS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"reiserfscore >= 3.6.27\""; } >&5 + ($PKG_CONFIG --exists --print-errors "reiserfscore >= 3.6.27") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_REISERFS_LIBS=`$PKG_CONFIG --libs "reiserfscore >= 3.6.27" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + REISERFS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "reiserfscore >= 3.6.27" 2>&1` + else + REISERFS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "reiserfscore >= 3.6.27" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$REISERFS_PKG_ERRORS" >&5 + + BTRFSCONVERT_REISERFS=0 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + BTRFSCONVERT_REISERFS=0 +else + REISERFS_CFLAGS=$pkg_cv_REISERFS_CFLAGS + REISERFS_LIBS=$pkg_cv_REISERFS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + BTRFSCONVERT_REISERFS=1 +fi + elif echo "$with_convert" | grep -q "reiserfs"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for REISERFS" >&5 +$as_echo_n "checking for REISERFS... " >&6; } + +if test -n "$REISERFS_CFLAGS"; then + pkg_cv_REISERFS_CFLAGS="$REISERFS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"reiserfscore >= 3.6.27\""; } >&5 + ($PKG_CONFIG --exists --print-errors "reiserfscore >= 3.6.27") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_REISERFS_CFLAGS=`$PKG_CONFIG --cflags "reiserfscore >= 3.6.27" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$REISERFS_LIBS"; then + pkg_cv_REISERFS_LIBS="$REISERFS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"reiserfscore >= 3.6.27\""; } >&5 + ($PKG_CONFIG --exists --print-errors "reiserfscore >= 3.6.27") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_REISERFS_LIBS=`$PKG_CONFIG --libs "reiserfscore >= 3.6.27" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + REISERFS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "reiserfscore >= 3.6.27" 2>&1` + else + REISERFS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "reiserfscore >= 3.6.27" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$REISERFS_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (reiserfscore >= 3.6.27) were not met: + +$REISERFS_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables REISERFS_CFLAGS +and REISERFS_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables REISERFS_CFLAGS +and REISERFS_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + REISERFS_CFLAGS=$pkg_cv_REISERFS_CFLAGS + REISERFS_LIBS=$pkg_cv_REISERFS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + BTRFSCONVERT_REISERFS=1 +fi + fi + if test "$BTRFSCONVERT_REISERFS" = 1; then + convertfs="${convertfs:+$convertfs,}reiserfs" + fi +fi + # catch typos -tmp=$(echo "$with_convert" | sed -e 's/auto//' | sed -e 's/ext2//' | sed -e 's/,\+/,/') +tmp=$(echo "$with_convert" | sed -e 's/auto//' | sed -e 's/ext2//' | sed -e 's/reiserfs//' | sed -e 's/,\+//') if ! test "x$tmp" = "x"; then as_fn_error $? "unknown tokens for --with-convert: $tmp" "$LINENO" 5 fi @@ -6119,6 +6308,141 @@ fi fi +# Check whether --enable-zstd was given. +if test "${enable_zstd+set}" = set; then : + enableval=$enable_zstd; +else + enable_zstd=auto + +fi + + +if test "x$enable_zstd" = xauto; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libzstd >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libzstd >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + enable_zstd=yes +else + enable_zstd=no +fi +fi + +if test "x$enable_zstd" = xyes; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZSTD" >&5 +$as_echo_n "checking for ZSTD... " >&6; } + +if test -n "$ZSTD_CFLAGS"; then + pkg_cv_ZSTD_CFLAGS="$ZSTD_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libzstd >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libzstd >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_ZSTD_CFLAGS=`$PKG_CONFIG --cflags "libzstd >= 1.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$ZSTD_LIBS"; then + pkg_cv_ZSTD_LIBS="$ZSTD_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libzstd >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libzstd >= 1.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_ZSTD_LIBS=`$PKG_CONFIG --libs "libzstd >= 1.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + ZSTD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libzstd >= 1.0.0" 2>&1` + else + ZSTD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libzstd >= 1.0.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$ZSTD_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (libzstd >= 1.0.0) were not met: + +$ZSTD_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables ZSTD_CFLAGS +and ZSTD_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables ZSTD_CFLAGS +and ZSTD_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + ZSTD_CFLAGS=$pkg_cv_ZSTD_CFLAGS + ZSTD_LIBS=$pkg_cv_ZSTD_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + + if { { $as_echo "$as_me:${as_lineno-$LINENO}: pkg-config --exists --print-errors \"libzstd\""; } >&5 + (pkg-config --exists --print-errors "libzstd") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + ZSTD_LIBS_STATIC=`pkg-config --libs --static "libzstd"` + + else + as_fn_error $? "pkg-config description of libzstd, needed for static build, is not available" "$LINENO" 5 + fi + +fi + +if test "x$enable_zstd" = xyes; then : + BTRFSRESTORE_ZSTD=1 +else + BTRFSRESTORE_ZSTD=0 +fi + + # udev v190 introduced the btrfs builtin and a udev rule to use it. # Our udev rule gives us the friendly dm names but isn't required (or valid) # on earlier releases. @@ -6697,7 +7021,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by btrfs-progs $as_me v4.12, which was +This file was extended by btrfs-progs $as_me v4.13.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6760,7 +7084,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -btrfs-progs config.status v4.12 +btrfs-progs config.status v4.13.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -7476,41 +7800,42 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${PACKAGE_NAME} ${PACKAGE_VERSION} - prefix: ${prefix} - exec prefix: ${exec_prefix} + prefix: ${prefix} + exec prefix: ${exec_prefix} - bindir: ${bindir} - libdir: ${libdir} - includedir: ${includedir} + bindir: ${bindir} + libdir: ${libdir} + includedir: ${includedir} - compiler: ${CC} - cflags: ${CFLAGS} - ldflags: ${LDFLAGS} + compiler: ${CC} + cflags: ${CFLAGS} + ldflags: ${LDFLAGS} - documentation: ${enable_documentation} - backtrace support: ${enable_backtrace} - btrfs-convert: ${enable_convert} ${convertfs:+($convertfs)} + documentation: ${enable_documentation} + backtrace support: ${enable_backtrace} + btrfs-convert: ${enable_convert} ${convertfs:+($convertfs)} + btrfs-restore zstd: ${enable_zstd} Type 'make' to compile. " >&5 $as_echo " ${PACKAGE_NAME} ${PACKAGE_VERSION} - prefix: ${prefix} - exec prefix: ${exec_prefix} + prefix: ${prefix} + exec prefix: ${exec_prefix} - bindir: ${bindir} - libdir: ${libdir} - includedir: ${includedir} + bindir: ${bindir} + libdir: ${libdir} + includedir: ${includedir} - compiler: ${CC} - cflags: ${CFLAGS} - ldflags: ${LDFLAGS} + compiler: ${CC} + cflags: ${CFLAGS} + ldflags: ${LDFLAGS} - documentation: ${enable_documentation} - backtrace support: ${enable_backtrace} - btrfs-convert: ${enable_convert} ${convertfs:+($convertfs)} + documentation: ${enable_documentation} + backtrace support: ${enable_backtrace} + btrfs-convert: ${enable_convert} ${convertfs:+($convertfs)} + btrfs-restore zstd: ${enable_zstd} Type 'make' to compile. " >&6; } - diff --git a/configure.ac b/configure.ac index 99c18694..330fb0cc 100644 --- a/configure.ac +++ b/configure.ac @@ -106,7 +106,7 @@ AC_SUBST([DISABLE_BTRFSCONVERT]) AC_ARG_WITH([convert], AS_HELP_STRING([[[]--with-convert[[=auto]]]], [built-in filesystems for convert (default: auto) -supported (comma separated list): ext2]), +supported (comma separated list): ext2,reiserfs]), [], [with_convert=auto] ) @@ -120,6 +120,7 @@ fi convertfs= BTRFSCONVERT_EXT2=0 +BTRFSCONVERT_REISERFS=0 if test "x$enable_convert" = xyes; then if test "x$with_convert" = "xauto" || echo "$with_convert" | grep -q "ext2"; then PKG_CHECK_MODULES(EXT2FS, [ext2fs >= 1.42],, @@ -131,11 +132,23 @@ if test "x$enable_convert" = xyes; then convertfs="${convertfs:+$convertfs,}ext2" BTRFSCONVERT_EXT2=1 fi + if test "x$with_convert" = "xauto"; then + PKG_CHECK_MODULES(REISERFS, [reiserfscore >= 3.6.27], + [BTRFSCONVERT_REISERFS=1], + [BTRFSCONVERT_REISERFS=0]) + elif echo "$with_convert" | grep -q "reiserfs"; then + PKG_CHECK_MODULES(REISERFS, [reiserfscore >= 3.6.27], + [BTRFSCONVERT_REISERFS=1],[]) + fi + if test "$BTRFSCONVERT_REISERFS" = 1; then + convertfs="${convertfs:+$convertfs,}reiserfs" + fi fi AC_SUBST([BTRFSCONVERT_EXT2]) +AC_SUBST([BTRFSCONVERT_REISERFS]) # catch typos -tmp=$(echo "$with_convert" | sed -e 's/auto//' | sed -e 's/ext2//' | sed -e 's/,\+/,/') +tmp=$(echo "$with_convert" | sed -e 's/auto//' | sed -e 's/ext2//' | sed -e 's/reiserfs//' | sed -e 's/,\+//') if ! test "x$tmp" = "x"; then AC_MSG_ERROR([unknown tokens for --with-convert: $tmp]) fi @@ -169,6 +182,23 @@ PKG_STATIC(UUID_LIBS_STATIC, [uuid]) PKG_CHECK_MODULES(ZLIB, [zlib]) PKG_STATIC(ZLIB_LIBS_STATIC, [zlib]) +AC_ARG_ENABLE([zstd], + AS_HELP_STRING([--enable-zstd@<:@=auto@:>@], [build with zstd support (default: auto)]), + [], [enable_zstd=auto] +) + +if test "x$enable_zstd" = xauto; then + PKG_CHECK_EXISTS([libzstd >= 1.0.0], [enable_zstd=yes], [enable_zstd=no]) +fi + +if test "x$enable_zstd" = xyes; then + PKG_CHECK_MODULES(ZSTD, [libzstd >= 1.0.0]) + PKG_STATIC(ZSTD_LIBS_STATIC, [libzstd]) +fi + +AS_IF([test "x$enable_zstd" = xyes], [BTRFSRESTORE_ZSTD=1], [BTRFSRESTORE_ZSTD=0]) +AC_SUBST(BTRFSRESTORE_ZSTD) + # udev v190 introduced the btrfs builtin and a udev rule to use it. # Our udev rule gives us the friendly dm names but isn't required (or valid) # on earlier releases. @@ -208,21 +238,21 @@ AC_OUTPUT AC_MSG_RESULT([ ${PACKAGE_NAME} ${PACKAGE_VERSION} - prefix: ${prefix} - exec prefix: ${exec_prefix} + prefix: ${prefix} + exec prefix: ${exec_prefix} - bindir: ${bindir} - libdir: ${libdir} - includedir: ${includedir} + bindir: ${bindir} + libdir: ${libdir} + includedir: ${includedir} - compiler: ${CC} - cflags: ${CFLAGS} - ldflags: ${LDFLAGS} + compiler: ${CC} + cflags: ${CFLAGS} + ldflags: ${LDFLAGS} - documentation: ${enable_documentation} - backtrace support: ${enable_backtrace} - btrfs-convert: ${enable_convert} ${convertfs:+($convertfs)} + documentation: ${enable_documentation} + backtrace support: ${enable_backtrace} + btrfs-convert: ${enable_convert} ${convertfs:+($convertfs)} + btrfs-restore zstd: ${enable_zstd} Type 'make' to compile. ]) - diff --git a/convert/main.c b/convert/main.c index 0deccd9c..882daf7c 100644 --- a/convert/main.c +++ b/convert/main.c @@ -103,12 +103,16 @@ #include "convert/source-fs.h" #include "fsfeatures.h" -const struct btrfs_convert_operations ext2_convert_ops; +extern const struct btrfs_convert_operations ext2_convert_ops; +extern const struct btrfs_convert_operations reiserfs_convert_ops; static const struct btrfs_convert_operations *convert_operations[] = { #if BTRFSCONVERT_EXT2 &ext2_convert_ops, #endif +#if BTRFSCONVERT_REISERFS + &reiserfs_convert_ops, +#endif }; static void *print_copied_inodes(void *p) @@ -343,10 +347,12 @@ static int migrate_one_reserved_range(struct btrfs_trans_handle *trans, * migrate ranges that covered by old fs data. */ while (cur_off < range_end(range)) { - cache = lookup_cache_extent(used, cur_off, cur_len); + cache = search_cache_extent(used, cur_off); if (!cache) break; cur_off = max(cache->start, cur_off); + if (cur_off >= range_end(range)) + break; cur_len = min(cache->start + cache->size, range_end(range)) - cur_off; BUG_ON(cur_len < root->fs_info->sectorsize); @@ -414,7 +420,7 @@ static int migrate_one_reserved_range(struct btrfs_trans_handle *trans, } /* - * Relocate the used ext2 data in reserved ranges + * Relocate the used source fs data in reserved ranges */ static int migrate_reserved_ranges(struct btrfs_trans_handle *trans, struct btrfs_root *root, @@ -633,7 +639,7 @@ static int calculate_available_space(struct btrfs_convert_context *cctx) * Twice the minimal chunk size, to allow later wipe_reserved_ranges() * works without need to consider overlap */ - u64 min_stripe_size = 2 * 16 * 1024 * 1024; + u64 min_stripe_size = SZ_32M; int ret; /* Calculate data_chunks */ @@ -745,8 +751,8 @@ static int create_image(struct btrfs_root *root, flags |= BTRFS_INODE_NODATASUM; trans = btrfs_start_transaction(root, 1); - if (!trans) - return -ENOMEM; + if (IS_ERR(trans)) + return PTR_ERR(trans); cache_tree_init(&used_tmp); btrfs_init_path(&path); @@ -798,7 +804,7 @@ static int create_image(struct btrfs_root *root, * Start from 1M, as 0~1M is reserved, and create_image_file_range() * can't handle bytenr 0(will consider it as a hole) */ - cur = 1024 * 1024; + cur = SZ_1M; while (cur < size) { u64 len = size - cur; @@ -832,129 +838,6 @@ out: return ret; } -static struct btrfs_root* link_subvol(struct btrfs_root *root, - const char *base, u64 root_objectid) -{ - struct btrfs_trans_handle *trans; - struct btrfs_fs_info *fs_info = root->fs_info; - struct btrfs_root *tree_root = fs_info->tree_root; - struct btrfs_root *new_root = NULL; - struct btrfs_path path; - struct btrfs_inode_item *inode_item; - struct extent_buffer *leaf; - struct btrfs_key key; - u64 dirid = btrfs_root_dirid(&root->root_item); - u64 index = 2; - char buf[BTRFS_NAME_LEN + 1]; /* for snprintf null */ - int len; - int i; - int ret; - - len = strlen(base); - if (len == 0 || len > BTRFS_NAME_LEN) - return NULL; - - btrfs_init_path(&path); - key.objectid = dirid; - key.type = BTRFS_DIR_INDEX_KEY; - key.offset = (u64)-1; - - ret = btrfs_search_slot(NULL, root, &key, &path, 0, 0); - if (ret <= 0) { - error("search for DIR_INDEX dirid %llu failed: %d", - (unsigned long long)dirid, ret); - goto fail; - } - - if (path.slots[0] > 0) { - path.slots[0]--; - btrfs_item_key_to_cpu(path.nodes[0], &key, path.slots[0]); - if (key.objectid == dirid && key.type == BTRFS_DIR_INDEX_KEY) - index = key.offset + 1; - } - btrfs_release_path(&path); - - trans = btrfs_start_transaction(root, 1); - if (!trans) { - error("unable to start transaction"); - goto fail; - } - - key.objectid = dirid; - key.offset = 0; - key.type = BTRFS_INODE_ITEM_KEY; - - ret = btrfs_lookup_inode(trans, root, &path, &key, 1); - if (ret) { - error("search for INODE_ITEM %llu failed: %d", - (unsigned long long)dirid, ret); - goto fail; - } - leaf = path.nodes[0]; - inode_item = btrfs_item_ptr(leaf, path.slots[0], - struct btrfs_inode_item); - - key.objectid = root_objectid; - key.offset = (u64)-1; - key.type = BTRFS_ROOT_ITEM_KEY; - - memcpy(buf, base, len); - for (i = 0; i < 1024; i++) { - ret = btrfs_insert_dir_item(trans, root, buf, len, - dirid, &key, BTRFS_FT_DIR, index); - if (ret != -EEXIST) - break; - len = snprintf(buf, ARRAY_SIZE(buf), "%s%d", base, i); - if (len < 1 || len > BTRFS_NAME_LEN) { - ret = -EINVAL; - break; - } - } - if (ret) - goto fail; - - btrfs_set_inode_size(leaf, inode_item, len * 2 + - btrfs_inode_size(leaf, inode_item)); - btrfs_mark_buffer_dirty(leaf); - btrfs_release_path(&path); - - /* add the backref first */ - ret = btrfs_add_root_ref(trans, tree_root, root_objectid, - BTRFS_ROOT_BACKREF_KEY, - root->root_key.objectid, - dirid, index, buf, len); - if (ret) { - error("unable to add root backref for %llu: %d", - root->root_key.objectid, ret); - goto fail; - } - - /* now add the forward ref */ - ret = btrfs_add_root_ref(trans, tree_root, root->root_key.objectid, - BTRFS_ROOT_REF_KEY, root_objectid, - dirid, index, buf, len); - if (ret) { - error("unable to add root ref for %llu: %d", - root->root_key.objectid, ret); - goto fail; - } - - ret = btrfs_commit_transaction(trans, root); - if (ret) { - error("transaction commit failed: %d", ret); - goto fail; - } - - new_root = btrfs_read_fs_root(fs_info, &key); - if (IS_ERR(new_root)) { - error("unable to fs read root: %lu", PTR_ERR(new_root)); - new_root = NULL; - } -fail: - btrfs_init_path(&path); - return new_root; -} - static int create_subvol(struct btrfs_trans_handle *trans, struct btrfs_root *root, u64 root_objectid) { @@ -1013,7 +896,7 @@ static int make_convert_data_block_groups(struct btrfs_trans_handle *trans, * And for single chunk, don't create chunk larger than 1G. */ max_chunk_size = cfg->num_bytes / 10; - max_chunk_size = min((u64)(1024 * 1024 * 1024), max_chunk_size); + max_chunk_size = min((u64)(SZ_1G), max_chunk_size); max_chunk_size = round_down(max_chunk_size, extent_root->fs_info->sectorsize); @@ -1071,9 +954,9 @@ static int init_btrfs(struct btrfs_mkfs_config *cfg, struct btrfs_root *root, fs_info->avoid_sys_chunk_alloc = 1; fs_info->avoid_meta_chunk_alloc = 1; trans = btrfs_start_transaction(root, 1); - if (!trans) { + if (IS_ERR(trans)) { error("unable to start transaction"); - ret = -EINVAL; + ret = PTR_ERR(trans); goto err; } ret = btrfs_fix_block_accounting(trans, root); @@ -1289,7 +1172,7 @@ static int do_convert(const char *devname, u32 convert_flags, u32 nodesize, goto fail; } - printf("creating btrfs metadata"); + printf("creating btrfs metadata\n"); ret = pthread_mutex_init(&ctx.mutex, NULL); if (ret) { error("failed to initialize mutex: %d", ret); @@ -1313,7 +1196,8 @@ static int do_convert(const char *devname, u32 convert_flags, u32 nodesize, task_deinit(ctx.info); } - image_root = link_subvol(root, subvol_name, CONV_IMAGE_SUBVOL_OBJECTID); + image_root = btrfs_mksubvol(root, subvol_name, + CONV_IMAGE_SUBVOL_OBJECTID, true); if (!image_root) { error("unable to link subvolume %s", subvol_name); goto fail; @@ -1357,7 +1241,7 @@ static int do_convert(const char *devname, u32 convert_flags, u32 nodesize, close_ctree(root); close(fd); - printf("conversion complete"); + printf("conversion complete\n"); return 0; fail: clean_convert_context(&cctx); @@ -1595,7 +1479,7 @@ next: * | RSV 1 | | Old | | RSV 2 | | Old | | RSV 3 | * | 0~1M | | Fs | | SB2 + 64K | | Fs | | SB3 + 64K | * - * On the other hande, the converted fs image in btrfs is a completely + * On the other hand, the converted fs image in btrfs is a completely * valid old fs. * * |<-----------------Converted fs image in btrfs-------------------->| @@ -1664,11 +1548,11 @@ static int do_rollback(const char *devname) ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, &path, 0, 0); btrfs_release_path(&path); if (ret > 0) { - error("unable to find ext2 image subvolume, is it deleted?"); + error("unable to find source fs image subvolume, is it deleted?"); ret = -ENOENT; goto close_fs; } else if (ret < 0) { - error("failed to find ext2 image subvolume: %s", + error("failed to find source fs image subvolume: %s", strerror(-ret)); goto close_fs; } @@ -1786,6 +1670,7 @@ static void print_usage(void) printf("\n"); printf("Supported filesystems:\n"); printf("\text2/3/4: %s\n", BTRFSCONVERT_EXT2 ? "yes" : "no"); + printf("\treiserfs: %s\n", BTRFSCONVERT_REISERFS ? "yes" : "no"); } int main(int argc, char *argv[]) diff --git a/convert/source-ext2.c b/convert/source-ext2.c index 24744e22..e9277213 100644 --- a/convert/source-ext2.c +++ b/convert/source-ext2.c @@ -39,7 +39,8 @@ static int ext2_open_fs(struct btrfs_convert_context *cctx, const char *name) ret = ext2fs_open(name, open_flag, 0, 0, unix_io_manager, &ext2_fs); if (ret) { - fprintf(stderr, "ext2fs_open: %s\n", error_message(ret)); + if (ret != EXT2_ET_BAD_MAGIC) + fprintf(stderr, "ext2fs_open: %s\n", error_message(ret)); return -1; } /* @@ -154,7 +155,8 @@ static int ext2_read_used_space(struct btrfs_convert_context *cctx) block_nbytes * 8, block_bitmap); if (ret) { error("fail to get bitmap from ext2, %s", - strerror(-ret)); + error_message(ret)); + ret = -EINVAL; break; } ret = __ext2_add_one_block(fs, block_bitmap, i, used_tree); @@ -424,27 +426,6 @@ static int ext2_xattr_check_entry(struct ext2_ext_attr_entry *entry, return 0; } -static inline int ext2_acl_count(size_t size) -{ - ssize_t s; - size -= sizeof(ext2_acl_header); - s = size - 4 * sizeof(ext2_acl_entry_short); - if (s < 0) { - if (size % sizeof(ext2_acl_entry_short)) - return -1; - return size / sizeof(ext2_acl_entry_short); - } else { - if (s % sizeof(ext2_acl_entry)) - return -1; - return s / sizeof(ext2_acl_entry) + 4; - } -} - -static inline size_t acl_ea_size(int count) -{ - return sizeof(acl_ea_header) + count * sizeof(acl_ea_entry); -} - static int ext2_acl_to_xattr(void *dst, const void *src, size_t dst_size, size_t src_size) { @@ -659,21 +640,12 @@ out: free(ext2_inode); return ret; } -#define MINORBITS 20 -#define MKDEV(ma, mi) (((ma) << MINORBITS) | (mi)) static inline dev_t old_decode_dev(u16 val) { return MKDEV((val >> 8) & 255, val & 255); } -static inline dev_t new_decode_dev(u32 dev) -{ - unsigned major = (dev & 0xfff00) >> 8; - unsigned minor = (dev & 0xff) | ((dev >> 12) & 0xfff00); - return MKDEV(major, minor); -} - static void ext2_copy_inode_item(struct btrfs_inode_item *dst, struct ext2_inode *src, u32 blocksize) { @@ -713,7 +685,7 @@ static void ext2_copy_inode_item(struct btrfs_inode_item *dst, old_decode_dev(src->i_block[0])); } else { btrfs_set_stack_inode_rdev(dst, - new_decode_dev(src->i_block[1])); + decode_dev(src->i_block[1])); } } memset(&dst->reserved, 0, sizeof(dst->reserved)); @@ -833,8 +805,8 @@ static int ext2_copy_inodes(struct btrfs_convert_context *cctx, struct btrfs_trans_handle *trans; trans = btrfs_start_transaction(root, 1); - if (!trans) - return -ENOMEM; + if (IS_ERR(trans)) + return PTR_ERR(trans); err = ext2fs_open_inode_scan(ext2_fs, 0, &ext2_scan); if (err) { fprintf(stderr, "ext2fs_open_inode_scan: %s\n", error_message(err)); @@ -860,7 +832,7 @@ static int ext2_copy_inodes(struct btrfs_convert_context *cctx, ret = btrfs_commit_transaction(trans, root); BUG_ON(ret); trans = btrfs_start_transaction(root, 1); - BUG_ON(!trans); + BUG_ON(IS_ERR(trans)); } } if (err) { diff --git a/convert/source-ext2.h b/convert/source-ext2.h index 20a278ed..80833b21 100644 --- a/convert/source-ext2.h +++ b/convert/source-ext2.h @@ -66,48 +66,6 @@ struct dir_iterate_data { #define EXT2_ACL_VERSION 0x0001 -/* 23.2.5 acl_tag_t values */ - -#define ACL_UNDEFINED_TAG (0x00) -#define ACL_USER_OBJ (0x01) -#define ACL_USER (0x02) -#define ACL_GROUP_OBJ (0x04) -#define ACL_GROUP (0x08) -#define ACL_MASK (0x10) -#define ACL_OTHER (0x20) - -/* 23.2.7 ACL qualifier constants */ - -#define ACL_UNDEFINED_ID ((id_t)-1) - -typedef struct { - __le16 e_tag; - __le16 e_perm; - __le32 e_id; -} ext2_acl_entry; - -typedef struct { - __le16 e_tag; - __le16 e_perm; -} ext2_acl_entry_short; - -typedef struct { - __le32 a_version; -} ext2_acl_header; - -#define ACL_EA_VERSION 0x0002 - -typedef struct { - __le16 e_tag; - __le16 e_perm; - __le32 e_id; -} acl_ea_entry; - -typedef struct { - __le32 a_version; - acl_ea_entry a_entries[0]; -} acl_ea_header; - #endif /* BTRFSCONVERT_EXT2 */ #endif diff --git a/convert/source-fs.c b/convert/source-fs.c index 59e36095..b6d08370 100644 --- a/convert/source-fs.c +++ b/convert/source-fs.c @@ -28,18 +28,41 @@ const struct simple_range btrfs_reserved_ranges[3] = { { BTRFS_SB_MIRROR_OFFSET(2), SZ_64K } }; -static int intersect_with_sb(u64 bytenr, u64 num_bytes) +dev_t decode_dev(u32 dev) +{ + unsigned major = (dev & 0xfff00) >> 8; + unsigned minor = (dev & 0xff) | ((dev >> 12) & 0xfff00); + + return MKDEV(major, minor); +} + +int ext2_acl_count(size_t size) +{ + ssize_t s; + + size -= sizeof(ext2_acl_header); + s = size - 4 * sizeof(ext2_acl_entry_short); + if (s < 0) { + if (size % sizeof(ext2_acl_entry_short)) + return -1; + return size / sizeof(ext2_acl_entry_short); + } else { + if (s % sizeof(ext2_acl_entry)) + return -1; + return s / sizeof(ext2_acl_entry) + 4; + } +} + +static u64 intersect_with_reserved(u64 bytenr, u64 num_bytes) { int i; - u64 offset; - for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) { - offset = btrfs_sb_offset(i); - offset &= ~((u64)BTRFS_STRIPE_LEN - 1); + for (i = 0; i < ARRAY_SIZE(btrfs_reserved_ranges); i++) { + const struct simple_range *range = &btrfs_reserved_ranges[i]; - if (bytenr < offset + BTRFS_STRIPE_LEN && - bytenr + num_bytes > offset) - return 1; + if (bytenr < range_end(range) && + bytenr + num_bytes >= range->start) + return range_end(range); } return 0; } @@ -64,15 +87,15 @@ int block_iterate_proc(u64 disk_block, u64 file_block, struct blk_iterate_data *idata) { int ret = 0; - int sb_region; + u64 reserved_boundary; int do_barrier; struct btrfs_root *root = idata->root; struct btrfs_block_group_cache *cache; u32 sectorsize = root->fs_info->sectorsize; u64 bytenr = disk_block * sectorsize; - sb_region = intersect_with_sb(bytenr, sectorsize); - do_barrier = sb_region || disk_block >= idata->boundary; + reserved_boundary = intersect_with_reserved(bytenr, sectorsize); + do_barrier = reserved_boundary || disk_block >= idata->boundary; if ((idata->num_blocks > 0 && do_barrier) || (file_block > idata->first_block + idata->num_blocks) || (disk_block != idata->disk_block + idata->num_blocks)) { @@ -92,9 +115,8 @@ int block_iterate_proc(u64 disk_block, u64 file_block, goto fail; } - if (sb_region) { - bytenr += BTRFS_STRIPE_LEN - 1; - bytenr &= ~((u64)BTRFS_STRIPE_LEN - 1); + if (reserved_boundary) { + bytenr = reserved_boundary; } else { cache = btrfs_lookup_block_group(root->fs_info, bytenr); BUG_ON(!cache); diff --git a/convert/source-fs.h b/convert/source-fs.h index 3a6fa46c..23f33567 100644 --- a/convert/source-fs.h +++ b/convert/source-fs.h @@ -18,9 +18,9 @@ #define __BTRFS_CONVERT_SOURCE_FS_H__ #include "kerncompat.h" +#include #include - #define CONV_IMAGE_SUBVOL_OBJECTID BTRFS_FIRST_FREE_OBJECTID /* @@ -55,6 +55,62 @@ struct btrfs_convert_context; #define CONVERT_FLAG_COPY_LABEL (1U << 3) #define CONVERT_FLAG_SET_LABEL (1U << 4) +/* 23.2.5 acl_tag_t values */ + +#define ACL_UNDEFINED_TAG (0x00) +#define ACL_USER_OBJ (0x01) +#define ACL_USER (0x02) +#define ACL_GROUP_OBJ (0x04) +#define ACL_GROUP (0x08) +#define ACL_MASK (0x10) +#define ACL_OTHER (0x20) + +/* 23.2.7 ACL qualifier constants */ + +#define ACL_UNDEFINED_ID ((id_t)-1) + +#define ACL_EA_VERSION 0x0002 + +typedef struct { + __le16 e_tag; + __le16 e_perm; + __le32 e_id; +} acl_ea_entry; + +typedef struct { + __le32 a_version; + acl_ea_entry a_entries[0]; +} acl_ea_header; + +typedef struct { + __le16 e_tag; + __le16 e_perm; + __le32 e_id; +} ext2_acl_entry; + +typedef struct { + __le16 e_tag; + __le16 e_perm; +} ext2_acl_entry_short; + +typedef struct { + __le32 a_version; +} ext2_acl_header; + +static inline size_t acl_ea_size(int count) +{ + return sizeof(acl_ea_header) + count * sizeof(acl_ea_entry); +} + +int ext2_acl_count(size_t size); + +#ifndef MKDEV +#define MINORBITS 20 +#define MKDEV(ma, mi) (((ma) << MINORBITS) | (mi)) +#endif + +dev_t decode_dev(u32 dev); + struct btrfs_convert_operations { const char name[SOURCE_FS_NAME_LEN]; int (*open_fs)(struct btrfs_convert_context *cctx, const char *devname); diff --git a/convert/source-reiserfs.c b/convert/source-reiserfs.c new file mode 100644 index 00000000..be79d8e2 --- /dev/null +++ b/convert/source-reiserfs.c @@ -0,0 +1,976 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License v2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 021110-1307, USA. + */ + +#if BTRFSCONVERT_REISERFS + +#include "kerncompat.h" +#include +#include +#include +#include +#include +#include "disk-io.h" +#include "transaction.h" +#include "utils.h" +#include "bitops.h" +#include "convert/common.h" +#include "convert/source-reiserfs.h" + +static inline u8 mode_to_file_type(u32 mode) +{ + switch (mode & S_IFMT) { + case S_IFREG: return BTRFS_FT_REG_FILE; + case S_IFDIR: return BTRFS_FT_DIR; + case S_IFCHR: return BTRFS_FT_CHRDEV; + case S_IFBLK: return BTRFS_FT_BLKDEV; + case S_IFIFO: return BTRFS_FT_FIFO; + case S_IFSOCK: return BTRFS_FT_SOCK; + case S_IFLNK: return BTRFS_FT_SYMLINK; + }; + + return BTRFS_FT_UNKNOWN; +} + +static u32 reiserfs_count_objectids(reiserfs_filsys_t fs) +{ + struct reiserfs_super_block *sb = fs->fs_ondisk_sb; + u32 count = 0; + u32 *map; + int i; + + if (fs->fs_format == REISERFS_FORMAT_3_6) + map = (u32 *) (sb + 1); + else + map = (u32 *)((struct reiserfs_super_block_v1 *)sb + 1); + + for (i = 0; i < get_sb_oid_cursize(sb); i += 2) + count += le32_to_cpu(map[i + 1]) - (le32_to_cpu(map[i]) + 1); + + return count; +} + + +static int reiserfs_open_fs(struct btrfs_convert_context *cxt, const char *name) +{ + struct reiserfs_convert_info *info; + reiserfs_filsys_t fs; + long error; + + fs = reiserfs_open(name, O_RDONLY, &error, NULL, 0); + if (!fs) + return -1; + + error = reiserfs_open_ondisk_bitmap(fs); + if (error) { + reiserfs_close(fs); + return -1; + } + + cxt->fs_data = fs; + cxt->blocksize = fs->fs_blocksize; + cxt->block_count = get_sb_block_count(fs->fs_ondisk_sb); + cxt->total_bytes = cxt->blocksize * cxt->block_count; + cxt->volume_name = strndup(fs->fs_ondisk_sb->s_label, 16); + cxt->first_data_block = 0; + cxt->inodes_count = reiserfs_count_objectids(fs); + cxt->free_inodes_count = 0; + info = calloc(1, sizeof(*info)); + if (!info) { + reiserfs_close(fs); + return -1; + } + + /* + * Inode attributes are somewhat of a hack on reiserfs and it was + * once possible to have garbage in the flags field. A superblock + * field now indicates that the field has been cleared and can + * be considered valid, but only on v3.6 format file systems. + */ + if (fs->fs_format == REISERFS_FORMAT_3_6 && + get_sb_v2_flag(fs->fs_ondisk_sb, reiserfs_attrs_cleared)) + info->copy_attrs = true; + + fs->fs_vp = info; + return 0; +} + +static void reiserfs_close_fs(struct btrfs_convert_context *cxt) +{ + reiserfs_filsys_t fs = cxt->fs_data; + struct reiserfs_convert_info *info = fs->fs_vp; + + if (info) { + if (info->objectids) + free(info->objectids); + free(info); + fs->fs_vp = NULL; + } + + /* We don't want changes to be persistent */ + fs->fs_bitmap2->bm_dirty = 0; + + reiserfs_close(fs); +} + +static int compare_objectids(const void *p1, const void *p2) +{ + u64 v1 = *(u64 *)p1; + u64 v2 = *(u64 *)p2; + + if (v1 > v2) + return 1; + else if (v1 < v2) + return -1; + return 0; +} + +static int lookup_cached_objectid(reiserfs_filsys_t fs, u64 objectid) +{ + struct reiserfs_convert_info *info = fs->fs_vp; + u64 *result; + + if (!info->objectids) + return 0; + result = bsearch(&objectid, info->objectids, info->used_slots, + sizeof(u64), compare_objectids); + return result != NULL; +} + +static int insert_cached_objectid(reiserfs_filsys_t fs, u64 objectid) +{ + struct reiserfs_convert_info *info = fs->fs_vp; + + if (info->used_slots + 1 >= info->alloced_slots) { + u64 *objectids = realloc(info->objectids, + (info->alloced_slots + 1000) * sizeof(u64)); + + if (!objectids) + return -ENOMEM; + info->objectids = objectids; + info->alloced_slots += 1000; + } + info->objectids[info->used_slots++] = objectid; + + qsort(info->objectids, info->used_slots, sizeof(u64), compare_objectids); + return 0; +} + +static int reiserfs_locate_privroot(reiserfs_filsys_t fs) +{ + int err; + unsigned generation; + struct reiserfs_convert_info *info = fs->fs_vp; + struct reiserfs_key key = root_dir_key; + + err = reiserfs_find_entry(fs, &key, ".reiserfs_priv", + &generation, &info->privroot_key); + if (err == 1) { + err = reiserfs_find_entry(fs, &info->privroot_key, "xattrs", + &generation, &info->xattr_key); + if (err != 1) + memset(&info->xattr_key, 0, sizeof(info->xattr_key)); + } + + return 0; +} + +static void reiserfs_convert_inode_flags(struct btrfs_inode_item *inode, + const struct stat_data *sd) +{ + u16 attrs = sd_v2_sd_attrs(sd); + u64 new_flags = 0; + + if (attrs & FS_IMMUTABLE_FL) + new_flags |= BTRFS_INODE_IMMUTABLE; + + if (attrs & FS_APPEND_FL) + new_flags |= BTRFS_INODE_APPEND; + + if (attrs & FS_SYNC_FL) + new_flags |= BTRFS_INODE_SYNC; + + if (attrs & FS_NOATIME_FL) + new_flags |= BTRFS_INODE_NOATIME; + + if (attrs & FS_NODUMP_FL) + new_flags |= BTRFS_INODE_NODUMP; + + if (attrs & FS_NODUMP_FL) + new_flags |= BTRFS_INODE_NODUMP; + + btrfs_set_stack_inode_flags(inode, new_flags); + +} + +static void reiserfs_copy_inode_item(struct btrfs_inode_item *inode, + struct item_head *ih, void *stat_data, + bool copy_inode_flags) +{ + u32 mode; + u32 rdev = 0; + + memset(inode, 0, sizeof(*inode)); + btrfs_set_stack_inode_generation(inode, 1); + if (get_ih_key_format(ih) == KEY_FORMAT_1) { + struct stat_data_v1 *sd = stat_data; + + mode = sd_v1_mode(sd); + btrfs_set_stack_inode_size(inode, sd_v1_size(sd)); + btrfs_set_stack_inode_nlink(inode, sd_v1_nlink(sd)); + btrfs_set_stack_inode_uid(inode, sd_v1_uid(sd)); + btrfs_set_stack_inode_gid(inode, sd_v1_gid(sd)); + btrfs_set_stack_timespec_sec(&inode->atime, sd_v1_atime(sd)); + btrfs_set_stack_timespec_sec(&inode->ctime, sd_v1_ctime(sd)); + btrfs_set_stack_timespec_sec(&inode->mtime, sd_v1_mtime(sd)); + + if (!S_ISREG(mode) && !S_ISDIR(mode) && !S_ISLNK(mode)) + rdev = decode_dev(sd_v1_rdev(sd)); + } else { + struct stat_data *sd = stat_data; + + mode = sd_v2_mode(sd); + btrfs_set_stack_inode_size(inode, sd_v2_size(sd)); + btrfs_set_stack_inode_nlink(inode, sd_v2_nlink(sd)); + btrfs_set_stack_inode_uid(inode, sd_v2_uid(sd)); + btrfs_set_stack_inode_gid(inode, sd_v2_gid(sd)); + btrfs_set_stack_timespec_sec(&inode->atime, sd_v2_atime(sd)); + btrfs_set_stack_timespec_sec(&inode->ctime, sd_v2_ctime(sd)); + btrfs_set_stack_timespec_sec(&inode->mtime, sd_v2_mtime(sd)); + + if (!S_ISREG(mode) && !S_ISDIR(mode) && !S_ISLNK(mode)) + rdev = decode_dev(sd_v2_rdev(sd)); + + if (copy_inode_flags) + reiserfs_convert_inode_flags(inode, sd); + + } + if (S_ISDIR(mode)) { + btrfs_set_stack_inode_size(inode, 0); + btrfs_set_stack_inode_nlink(inode, 1); + } + btrfs_set_stack_inode_mode(inode, mode); + btrfs_set_stack_inode_rdev(inode, rdev); +} + +static void init_reiserfs_blk_iterate_data( + struct reiserfs_blk_iterate_data *data, + struct btrfs_trans_handle *trans, + struct btrfs_root *root, + struct btrfs_inode_item *inode, + u64 objectid, u32 convert_flags) +{ + init_blk_iterate_data(&data->blk_data, trans, root, inode, objectid, + convert_flags & CONVERT_FLAG_DATACSUM); + data->inline_data = NULL; + data->inline_offset = (u64)-1; + data->inline_length = 0; +} + +static int reiserfs_record_indirect_extent(reiserfs_filsys_t fs, u64 position, + u64 size, int num_ptrs, + u32 *ptrs, void *data) +{ + struct reiserfs_blk_iterate_data *bdata = data; + u32 file_block = position / fs->fs_blocksize; + int i; + int ret = 0; + + for (i = 0; i < num_ptrs; i++, file_block++) { + u32 block = d32_get(ptrs, i); + + ret = block_iterate_proc(block, file_block, &bdata->blk_data); + if (ret) + break; + } + + return ret; +} + +/* + * Unlike btrfs inline extents, reiserfs can have multiple inline extents. + * This handles concatanating multiple tails into one inline extent + * for insertion. + */ +static int reiserfs_record_direct_extent(reiserfs_filsys_t fs, __u64 position, + __u64 size, const char *body, + size_t len, void *data) +{ + struct reiserfs_blk_iterate_data *bdata = data; + char *inline_data; + + if (bdata->inline_offset == (u64)-1) + bdata->inline_offset = position; + else if (bdata->inline_offset + bdata->inline_length != position) { + /* + * This condition shouldn't actually happen, but better to + * catch it than break silently. + */ + error( +"source fs contains file with multiple tails but they are not contiguous"); + return -EINVAL; + } + + inline_data = realloc(bdata->inline_data, bdata->inline_length + len); + if (!inline_data) + return -ENOMEM; + + bdata->inline_data = inline_data; + memcpy(bdata->inline_data + bdata->inline_length, body, len); + bdata->inline_length += len; + + return 0; +} + +static int convert_direct(struct btrfs_trans_handle *trans, + struct btrfs_root *root, u64 objectid, + struct btrfs_inode_item *inode, const char *body, + u32 length, u64 offset, u32 convert_flags) +{ + struct btrfs_key key; + u32 sectorsize = root->fs_info->sectorsize; + int ret; + struct extent_buffer *eb; + + BUG_ON(length > sectorsize); + ret = btrfs_reserve_extent(trans, root, sectorsize, + 0, 0, -1ULL, &key, 1); + if (ret) + return ret; + + eb = alloc_extent_buffer(&root->fs_info->extent_cache, key.objectid, + sectorsize); + + if (!eb) + return -ENOMEM; + + write_extent_buffer(eb, body, 0, length); + ret = write_and_map_eb(root->fs_info, eb); + free_extent_buffer(eb); + if (ret) + return ret; + + return btrfs_record_file_extent(trans, root, objectid, inode, offset, + key.objectid, sectorsize); +} + +static int reiserfs_convert_tail(struct btrfs_trans_handle *trans, + struct btrfs_root *root, + struct btrfs_inode_item *inode, + u64 objectid, u64 offset, + const void *body, unsigned length, + u32 convert_flags) +{ + u64 isize; + int ret; + + if (length >= BTRFS_MAX_INLINE_DATA_SIZE(root)) + return convert_direct(trans, root, objectid, inode, body, + length, offset, convert_flags); + + ret = btrfs_insert_inline_extent(trans, root, objectid, + offset, body, length); + if (ret) + return ret; + + isize = btrfs_stack_inode_nbytes(inode); + btrfs_set_stack_inode_nbytes(inode, isize + length); + + return 0; +} + +static inline u32 block_count(u64 size, u32 blocksize) +{ + return round_up(size, blocksize) / blocksize; +} + +static int reiserfs_record_file_extents(reiserfs_filsys_t fs, + struct btrfs_trans_handle *trans, + struct btrfs_root *root, + u64 objectid, + struct btrfs_inode_item *inode, + struct reiserfs_key *sd_key, + u32 convert_flags) + +{ + int ret; + u32 blocksize = fs->fs_blocksize; + u64 inode_size = btrfs_stack_inode_size(inode); + u32 last_block; + struct reiserfs_blk_iterate_data data; + + init_reiserfs_blk_iterate_data(&data, trans, root, inode, + objectid, convert_flags); + + ret = reiserfs_iterate_file_data(fs, sd_key, + reiserfs_record_indirect_extent, + reiserfs_record_direct_extent, &data); + if (ret) + return ret; + + /* + * blk_iterate_block has no idea that we're done iterating, so record + * the final range if any. This range can end and still have a tail + * after it. + */ + if (data.blk_data.num_blocks) { + ret = record_file_blocks(&data.blk_data, + data.blk_data.first_block, + data.blk_data.disk_block, + data.blk_data.num_blocks); + if (ret) + goto fail; + data.blk_data.first_block += data.blk_data.num_blocks; + data.blk_data.num_blocks = 0; + } + + /* + * Handle a hole at the end of the file. ReiserFS will + * not write a tail followed by a hole but it will write a hole + * followed by a tail. + */ + last_block = block_count(inode_size - data.inline_length, blocksize); + if (last_block > data.blk_data.first_block) { + ret = record_file_blocks(&data.blk_data, + data.blk_data.first_block, 0, + last_block - data.blk_data.first_block); + if (ret) + goto fail; + } + + if (data.inline_length) { + ret = reiserfs_convert_tail(trans, root, inode, objectid, + data.inline_offset, + data.inline_data, + data.inline_length, convert_flags); + if (ret) + goto fail; + } + + ret = 0; +fail: + return ret; +} + +static int reiserfs_copy_meta(reiserfs_filsys_t fs, struct btrfs_root *root, + u32 convert_flags, u32 deh_dirid, + u32 deh_objectid, u8 *type); + +static int reiserfs_copy_dirent(reiserfs_filsys_t fs, + const struct reiserfs_key *dir_short_key, + const char *name, size_t len, + __u32 deh_dirid, __u32 deh_objectid, + void *cb_data) +{ + int ret; + u8 type; + struct btrfs_trans_handle *trans; + u64 objectid = deh_objectid + OID_OFFSET; + struct reiserfs_convert_info *info = fs->fs_vp; + struct reiserfs_dirent_data *dirent_data = cb_data; + struct btrfs_root *root = dirent_data->root; + __u32 dir_objectid = get_key_objectid(dir_short_key) + OID_OFFSET; + + /* + * These are the extended attributes and shouldn't appear as files + * in the converted file systems. + */ + if (deh_objectid == get_key_objectid(&info->privroot_key)) + return 0; + + ret = reiserfs_copy_meta(fs, root, dirent_data->convert_flags, + deh_dirid, deh_objectid, &type); + if (ret) { + error( + "an error occured while converting \"%.*s\", reiserfs key [%u %u]: %s", + (int)len, name, deh_dirid, deh_objectid, + strerror(-ret)); + return ret; + } + trans = btrfs_start_transaction(root, 1); + if (IS_ERR(trans)) + return PTR_ERR(trans); + + ret = convert_insert_dirent(trans, root, name, len, dir_objectid, + objectid, type, dirent_data->index++, + dirent_data->inode); + return btrfs_commit_transaction(trans, root); +} + +static int reiserfs_copy_symlink(struct btrfs_trans_handle *trans, + struct btrfs_root *root, u64 objectid, + struct btrfs_inode_item *btrfs_inode, + reiserfs_filsys_t fs, + struct reiserfs_path *sd_path) +{ + INITIALIZE_REISERFS_PATH(path); + struct item_head *ih = tp_item_head(sd_path); + struct reiserfs_key key = ih->ih_key; + int ret; + char *symlink; + int len; + + set_key_uniqueness(&key, type2uniqueness(TYPE_DIRECT)); + set_key_offset_v1(&key, 1); + + ret = reiserfs_search_by_key_3(fs, &key, &path); + if (ret != ITEM_FOUND) { + ret = -ENOENT; + goto fail; + } + + symlink = tp_item_body(&path); + len = get_ih_item_len(tp_item_head(&path)); + + ret = btrfs_insert_inline_extent(trans, root, objectid, 0, + symlink, len + 1); + btrfs_set_stack_inode_nbytes(btrfs_inode, len + 1); +fail: + pathrelse(&path); + return ret; +} + +static int reiserfs_copy_meta(reiserfs_filsys_t fs, struct btrfs_root *root, + u32 convert_flags, u32 deh_dirid, + u32 deh_objectid, u8 *type) +{ + INITIALIZE_REISERFS_PATH(path); + int ret = 0; + struct item_head *ih; + struct reiserfs_key key; + struct btrfs_inode_item btrfs_inode; + struct btrfs_trans_handle *trans = NULL; + struct reiserfs_convert_info *info = fs->fs_vp; + u32 mode; + u64 objectid = deh_objectid + OID_OFFSET; + u64 parent = deh_dirid + OID_OFFSET; + struct reiserfs_dirent_data dirent_data = { + .index = 2, + .convert_flags = convert_flags, + .inode = &btrfs_inode, + .root = root, + }; + + /* The root directory's dirid in reiserfs points to an object + * that does't exist. In btrfs it's self-referential. + */ + if (deh_dirid == REISERFS_ROOT_PARENT_OBJECTID) + parent = objectid; + + set_key_dirid(&key, deh_dirid); + set_key_objectid(&key, deh_objectid); + set_key_offset_v2(&key, 0); + set_key_type_v2(&key, TYPE_STAT_DATA); + + ret = reiserfs_search_by_key_3(fs, &key, &path); + if (ret != ITEM_FOUND) { + ret = -ENOENT; + goto fail; + } + + ih = tp_item_head(&path); + if (!is_stat_data_ih(ih)) { + ret = -EINVAL; + goto fail; + } + + reiserfs_copy_inode_item(&btrfs_inode, ih, tp_item_body(&path), + info->copy_attrs); + mode = btrfs_stack_inode_mode(&btrfs_inode); + *type = mode_to_file_type(mode); + + if (S_ISREG(mode)) { + /* Inodes with hardlinks should only be inserted once */ + if (btrfs_stack_inode_nlink(&btrfs_inode) > 1) { + if (lookup_cached_objectid(fs, deh_objectid)) { + ret = 0; + goto fail; /* Not a failure */ + } + ret = insert_cached_objectid(fs, deh_objectid); + if (ret) + goto fail; + } + } + + if (!(convert_flags & CONVERT_FLAG_DATACSUM)) { + u32 flags = btrfs_stack_inode_flags(&btrfs_inode) | + BTRFS_INODE_NODATASUM; + btrfs_set_stack_inode_flags(&btrfs_inode, flags); + } + + switch (mode & S_IFMT) { + case S_IFREG: + trans = btrfs_start_transaction(root, 1); + if (IS_ERR(trans)) { + ret = PTR_ERR(trans); + goto fail; + } + ret = reiserfs_record_file_extents(fs, trans, root, objectid, + &btrfs_inode, &ih->ih_key, + convert_flags); + if (ret) + goto fail; + break; + case S_IFDIR: + ret = reiserfs_iterate_dir(fs, &ih->ih_key, + reiserfs_copy_dirent, &dirent_data); + if (ret) + goto fail; + trans = btrfs_start_transaction(root, 1); + if (IS_ERR(trans)) { + ret = PTR_ERR(trans); + goto fail; + } + + ret = btrfs_insert_inode_ref(trans, root, "..", 2, parent, + objectid, 0); + break; + case S_IFLNK: + trans = btrfs_start_transaction(root, 1); + if (IS_ERR(trans)) { + ret = PTR_ERR(trans); + goto fail; + } + ret = reiserfs_copy_symlink(trans, root, objectid, + &btrfs_inode, fs, &path); + if (ret) + goto fail; + break; + default: + trans = btrfs_start_transaction(root, 1); + if (IS_ERR(trans)) { + ret = PTR_ERR(trans); + goto fail; + } + } + + ret = btrfs_insert_inode(trans, root, objectid, &btrfs_inode); + if (ret) + goto fail; + ret = btrfs_commit_transaction(trans, root); + info->progress->cur_copy_inodes++; + +fail: + pathrelse(&path); + return ret; +} + +static int reiserfs_xattr_indirect_fn(reiserfs_filsys_t fs, u64 position, + u64 size, int num_blocks, + u32 *blocks, void *data) +{ + int i; + struct reiserfs_xattr_data *xa_data = data; + size_t alloc = min(position + num_blocks * fs->fs_blocksize, size); + char *body; + + if (size > BTRFS_LEAF_DATA_SIZE(xa_data->root) - + sizeof(struct btrfs_item) - sizeof(struct btrfs_dir_item)) { + fprintf(stderr, "skip large xattr on objectid %llu name %.*s\n", + xa_data->target_oid, (int)xa_data->namelen, + xa_data->name); + return -E2BIG; + } + + body = realloc(xa_data->body, alloc); + if (!body) + return -ENOMEM; + + xa_data->body = body; + xa_data->len = alloc; + + for (i = 0; i < num_blocks; i++) { + int ret; + u32 block = d32_get(blocks, i); + u64 offset = (u64)block * fs->fs_blocksize; + size_t chunk = min_t(u64, size - position, fs->fs_blocksize); + char *buffer = xa_data->body + position; + + ret = read_disk_extent(xa_data->root, offset, chunk, buffer); + if (ret) + return ret; + position += chunk; + } + + return 0; +} + +static int reiserfs_xattr_direct_fn(reiserfs_filsys_t fs, __u64 position, + __u64 size, const char *body, size_t len, + void *data) +{ + struct reiserfs_xattr_data *xa_data = data; + char *newbody; + + if (size > BTRFS_LEAF_DATA_SIZE(xa_data->root) - + sizeof(struct btrfs_item) - sizeof(struct btrfs_dir_item)) { + fprintf(stderr, "skip large xattr on objectid %llu name %.*s\n", + xa_data->target_oid, (int)xa_data->namelen, + xa_data->name); + return -E2BIG; + } + + newbody = realloc(xa_data->body, position + len); + if (!newbody) + return -ENOMEM; + xa_data->body = newbody; + xa_data->len = position + len; + memcpy(xa_data->body + position, body, len); + return 0; +} + +static int reiserfs_acl_to_xattr(void *dst, const void *src, + size_t dst_size, size_t src_size) +{ + int i, count; + const void *end = src + src_size; + acl_ea_header *ext_acl = (acl_ea_header *)dst; + acl_ea_entry *dst_entry = ext_acl->a_entries; + struct reiserfs_acl_entry *src_entry; + + if (src_size < sizeof(struct reiserfs_acl_header)) + goto fail; + if (((struct reiserfs_acl_header *)src)->a_version != + cpu_to_le32(REISERFS_ACL_VERSION)) + goto fail; + src += sizeof(struct reiserfs_acl_header); + count = reiserfs_acl_count(src_size); + if (count <= 0) + goto fail; + + BUG_ON(dst_size < acl_ea_size(count)); + ext_acl->a_version = cpu_to_le32(ACL_EA_VERSION); + for (i = 0; i < count; i++, dst_entry++) { + src_entry = (struct reiserfs_acl_entry *)src; + if (src + sizeof(struct reiserfs_acl_entry_short) > end) + goto fail; + dst_entry->e_tag = src_entry->e_tag; + dst_entry->e_perm = src_entry->e_perm; + switch (le16_to_cpu(src_entry->e_tag)) { + case ACL_USER_OBJ: + case ACL_GROUP_OBJ: + case ACL_MASK: + case ACL_OTHER: + src += sizeof(struct reiserfs_acl_entry_short); + dst_entry->e_id = cpu_to_le32(ACL_UNDEFINED_ID); + break; + case ACL_USER: + case ACL_GROUP: + src += sizeof(struct reiserfs_acl_entry); + if (src > end) + goto fail; + dst_entry->e_id = src_entry->e_id; + break; + default: + goto fail; + } + } + if (src != end) + goto fail; + return 0; +fail: + return -EINVAL; +} + +static int reiserfs_copy_one_xattr(reiserfs_filsys_t fs, + const struct reiserfs_key *dir_short_key, + const char *name, size_t namelen, + __u32 deh_dirid, + __u32 deh_objectid, void *cb_data) +{ + struct reiserfs_convert_info *info = fs->fs_vp; + struct reiserfs_xattr_data *xa_data = cb_data; + struct reiserfs_key key = { + .k2_dir_id = deh_dirid, + .k2_objectid = deh_objectid, + }; + void *body = NULL; + int len; + int ret; + + xa_data->name = name; + xa_data->namelen = namelen; + + ret = reiserfs_iterate_file_data(fs, &key, reiserfs_xattr_indirect_fn, + reiserfs_xattr_direct_fn, cb_data); + if (ret) + goto out; + + if (!reiserfs_check_xattr(xa_data->body, xa_data->len)) { + fprintf(stderr, + "skip corrupted xattr on objectid %u name %.*s\n", + deh_objectid, (int)xa_data->namelen, + xa_data->name); + goto out; + } + + body = xa_data->body + sizeof(struct reiserfs_xattr_header); + len = xa_data->len - sizeof(struct reiserfs_xattr_header); + + if (!strncmp("system.posix_acl_default", name, namelen) || + !strncmp("system.posix_acl_access", name, namelen)) { + size_t bufsize = acl_ea_size(ext2_acl_count(len)); + char *databuf = malloc(bufsize); + + if (!databuf) + goto out; + ret = reiserfs_acl_to_xattr(databuf, body, bufsize, len); + if (ret) + goto out; + body = databuf; + len = bufsize; + } + + ret = btrfs_insert_xattr_item(xa_data->trans, xa_data->root, + name, namelen, body, len, + xa_data->target_oid); + + info->progress->cur_copy_inodes++; +out: + if (body && + body != xa_data->body + sizeof(struct reiserfs_xattr_header)) + free(body); + if (xa_data->body) + free(xa_data->body); + xa_data->body = NULL; + xa_data->len = 0; + + return ret; +} + +static int reiserfs_copy_xattr_dir(reiserfs_filsys_t fs, + const struct reiserfs_key *dir_short_key, + const char *name, size_t len, + __u32 deh_dirid, __u32 deh_objectid, + void *cb_data) +{ + struct reiserfs_convert_info *info = fs->fs_vp; + struct reiserfs_xattr_data *xa_data = cb_data; + struct reiserfs_key dir_key = { + .k2_dir_id = deh_dirid, + .k2_objectid = deh_objectid, + }; + int ret, err; + + errno = 0; + xa_data->target_oid = strtoull(name, NULL, 16); + if (xa_data->target_oid == ULLONG_MAX && errno) + return -errno; + + xa_data->target_oid += OID_OFFSET; + + xa_data->trans = btrfs_start_transaction(xa_data->root, 1); + if (IS_ERR(xa_data->trans)) + return PTR_ERR(xa_data->trans); + + ret = reiserfs_iterate_dir(fs, &dir_key, + reiserfs_copy_one_xattr, xa_data); + + err = btrfs_commit_transaction(xa_data->trans, xa_data->root); + info->progress->cur_copy_inodes++; + xa_data->trans = NULL; + return ret ?: err; +} + +static int reiserfs_copy_xattrs(reiserfs_filsys_t fs, struct btrfs_root *root) +{ + struct reiserfs_convert_info *info = fs->fs_vp; + struct reiserfs_xattr_data data = { + .root = root, + }; + + if (get_key_objectid(&info->xattr_key) == 0) + return 0; + + return reiserfs_iterate_dir(fs, &info->xattr_key, + reiserfs_copy_xattr_dir, &data); +} + +static int reiserfs_copy_inodes(struct btrfs_convert_context *cxt, + struct btrfs_root *root, + u32 convert_flags, + struct task_ctx *p) +{ + reiserfs_filsys_t fs = cxt->fs_data; + struct reiserfs_convert_info *info = fs->fs_vp; + int ret; + u8 type; + + info->progress = p; + + ret = reiserfs_locate_privroot(fs); + if (ret) + goto out; + + ret = reiserfs_copy_meta(fs, root, convert_flags, + REISERFS_ROOT_PARENT_OBJECTID, + REISERFS_ROOT_OBJECTID, &type); + if (ret) + goto out; + + if (convert_flags & CONVERT_FLAG_XATTR) + ret = reiserfs_copy_xattrs(fs, root); + +out: + info->progress = NULL; + return ret; +} + +static int reiserfs_read_used_space(struct btrfs_convert_context *cxt) +{ + reiserfs_filsys_t fs = cxt->fs_data; + u64 start, end = 0; + unsigned int size = get_sb_block_count(fs->fs_ondisk_sb); + unsigned long *bitmap = (unsigned long *)fs->fs_bitmap2->bm_map; + int ret = 0; + + /* + * We have the entire bitmap loaded so we can just ping pong with + * ffz and ffs + */ + while (end < size) { + u64 offset, length; + + start = find_next_bit(bitmap, size, end); + if (start >= size) + break; + end = find_next_zero_bit(bitmap, size, start); + if (end > size) + end = size; + offset = start * fs->fs_blocksize; + length = (end - start) * fs->fs_blocksize; + ret = add_merge_cache_extent(&cxt->used_space, offset, length); + if (ret < 0) + break; + } + + return ret; +} + +static int reiserfs_check_state(struct btrfs_convert_context *cxt) +{ + return 0; +} + +const struct btrfs_convert_operations reiserfs_convert_ops = { + .name = "reiserfs", + .open_fs = reiserfs_open_fs, + .read_used_space = reiserfs_read_used_space, + .copy_inodes = reiserfs_copy_inodes, + .close_fs = reiserfs_close_fs, + .check_state = reiserfs_check_state, +}; + +#endif /* BTRFSCONVERT_REISERFS */ diff --git a/convert/source-reiserfs.h b/convert/source-reiserfs.h new file mode 100644 index 00000000..a4e14392 --- /dev/null +++ b/convert/source-reiserfs.h @@ -0,0 +1,73 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License v2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 021110-1307, USA. + */ + +#ifndef __BTRFS_CONVERT_SOURCE_REISERFS_H__ +#define __BTRFS_CONVERT_SOURCE_REISERFS_H__ + +#if BTRFSCONVERT_REISERFS + +#include "kerncompat.h" +#include +#include +#include +#include +#include "convert/source-fs.h" + +#define REISERFS_ACL_VERSION 0x0001 + +#define OID_OFFSET (BTRFS_FIRST_FREE_OBJECTID - REISERFS_ROOT_OBJECTID) + +struct reiserfs_convert_info { + bool copy_attrs; + struct reiserfs_key privroot_key; + struct reiserfs_key xattr_key; + + /* only set during copy_inodes */ + struct task_ctx *progress; + + /* used to track hardlinks */ + unsigned used_slots; + unsigned alloced_slots; + u64 *objectids; +}; + +struct reiserfs_blk_iterate_data { + struct blk_iterate_data blk_data; + char *inline_data; + u64 inline_offset; + u32 inline_length; +}; + +struct reiserfs_dirent_data { + u64 index; + u32 convert_flags; + struct btrfs_inode_item *inode; + struct btrfs_root *root; +}; + +struct reiserfs_xattr_data { + struct btrfs_root *root; + struct btrfs_trans_handle *trans; + u64 target_oid; + const char *name; + size_t namelen; + void *body; + size_t len; +}; + +#endif /* BTRFSCONVERT_REISERFS */ + +#endif diff --git a/ctree.c b/ctree.c index f3c13e1c..4fc33b14 100644 --- a/ctree.c +++ b/ctree.c @@ -650,7 +650,6 @@ struct extent_buffer *read_node_slot(struct btrfs_fs_info *fs_info, return NULL; return read_tree_block(fs_info, btrfs_node_blockptr(parent, slot), - fs_info->nodesize, btrfs_node_ptr_generation(parent, slot)); } @@ -979,7 +978,6 @@ void reada_for_search(struct btrfs_root *root, struct btrfs_path *path, int direction = path->reada; struct extent_buffer *eb; u32 nr; - u32 blocksize; u32 nscan = 0; if (level != 1) @@ -990,8 +988,7 @@ void reada_for_search(struct btrfs_root *root, struct btrfs_path *path, node = path->nodes[level]; search = btrfs_node_blockptr(node, slot); - blocksize = fs_info->nodesize; - eb = btrfs_find_tree_block(fs_info, search, blocksize); + eb = btrfs_find_tree_block(fs_info, search, fs_info->nodesize); if (eb) { free_extent_buffer(eb); return; @@ -1021,9 +1018,9 @@ void reada_for_search(struct btrfs_root *root, struct btrfs_path *path, if ((search >= lowest_read && search <= highest_read) || (search < lowest_read && lowest_read - search <= 32768) || (search > highest_read && search - highest_read <= 32768)) { - readahead_tree_block(fs_info, search, blocksize, + readahead_tree_block(fs_info, search, btrfs_node_ptr_generation(node, nr)); - nread += blocksize; + nread += fs_info->nodesize; } nscan++; if (path->reada < 2 && (nread > SZ_256K || nscan > 32)) diff --git a/ctree.h b/ctree.h index 48ae8903..22806599 100644 --- a/ctree.h +++ b/ctree.h @@ -19,6 +19,8 @@ #ifndef __BTRFS_CTREE_H__ #define __BTRFS_CTREE_H__ +#include + #if BTRFS_FLAT_INCLUDES #include "list.h" #include "kerncompat.h" @@ -138,6 +140,8 @@ struct btrfs_free_space_ctl; */ #define BTRFS_DEV_ITEMS_OBJECTID 1ULL +#define BTRFS_EMPTY_SUBVOL_DIR_OBJECTID 2ULL + /* * the max metadata block size. This limit is somewhat artificial, * but the memmove costs go through the roof for larger blocks. @@ -482,14 +486,7 @@ struct btrfs_super_block { #define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL (1ULL << 1) #define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS (1ULL << 2) #define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO (1ULL << 3) - -/* - * some patches floated around with a second compression method - * lets save that incompat here for when they do get in - * Note we don't actually support it, we're just reserving the - * number - */ -#define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2 (1ULL << 4) +#define BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD (1ULL << 4) /* * older kernels tried to do bigger metadata blocks, but the @@ -514,6 +511,7 @@ struct btrfs_super_block { (BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF | \ BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL | \ BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO | \ + BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD | \ BTRFS_FEATURE_INCOMPAT_BIG_METADATA | \ BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF | \ BTRFS_FEATURE_INCOMPAT_RAID56 | \ @@ -675,8 +673,9 @@ typedef enum { BTRFS_COMPRESS_NONE = 0, BTRFS_COMPRESS_ZLIB = 1, BTRFS_COMPRESS_LZO = 2, - BTRFS_COMPRESS_TYPES = 2, - BTRFS_COMPRESS_LAST = 3, + BTRFS_COMPRESS_ZSTD = 3, + BTRFS_COMPRESS_TYPES = 3, + BTRFS_COMPRESS_LAST = 4, } btrfs_compression_type; /* we don't understand any encryption methods right now */ @@ -1126,8 +1125,8 @@ struct btrfs_fs_info { struct btrfs_fs_devices *fs_devices; struct list_head space_info; - int system_allocs; + unsigned int system_allocs:1; unsigned int readonly:1; unsigned int on_restoring:1; unsigned int is_chunk_recover:1; @@ -1139,6 +1138,8 @@ struct btrfs_fs_info { unsigned int avoid_sys_chunk_alloc:1; unsigned int finalize_on_close:1; + int transaction_aborted; + int (*free_extent_hook)(struct btrfs_trans_handle *trans, struct btrfs_root *root, u64 bytenr, u64 num_bytes, u64 parent, @@ -2707,7 +2708,7 @@ int btrfs_insert_file_extent(struct btrfs_trans_handle *trans, u64 num_bytes); int btrfs_insert_inline_extent(struct btrfs_trans_handle *trans, struct btrfs_root *root, u64 objectid, - u64 offset, char *buffer, size_t size); + u64 offset, const char *buffer, size_t size); int btrfs_csum_file_block(struct btrfs_trans_handle *trans, struct btrfs_root *root, u64 alloc_end, u64 bytenr, char *data, size_t len); @@ -2746,6 +2747,8 @@ int btrfs_add_orphan_item(struct btrfs_trans_handle *trans, u64 ino); int btrfs_mkdir(struct btrfs_trans_handle *trans, struct btrfs_root *root, char *name, int namelen, u64 parent_ino, u64 *ino, int mode); +struct btrfs_root *btrfs_mksubvol(struct btrfs_root *root, const char *base, + u64 root_objectid, bool convert); /* file.c */ int btrfs_get_extent(struct btrfs_trans_handle *trans, diff --git a/debian/changelog b/debian/changelog index 012ede29..1fe77d5a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +btrfs-progs (4.13.3-1) unstable; urgency=medium + + * New upstream release. + + -- Dimitri John Ledkov Wed, 18 Oct 2017 13:15:37 +0100 + btrfs-progs (4.12-1) unstable; urgency=medium [ Dimitri John Ledkov ] diff --git a/debian/patches/cross.patch b/debian/patches/cross.patch index b78bdbea..e3242426 100644 --- a/debian/patches/cross.patch +++ b/debian/patches/cross.patch @@ -4,10 +4,8 @@ Subject: use PKG_PROG_PKG_CONFIG correctly Using $PKG_CONFIG allows PKG_PROG_PKG_CONFIG to add $ac_tool_prefix which is crucial for cross compilation. -Index: btrfs-progs-4.7.3/configure.ac -=================================================================== ---- btrfs-progs-4.7.3.orig/configure.ac -+++ btrfs-progs-4.7.3/configure.ac +--- a/configure.ac ++++ b/configure.ac @@ -55,8 +55,8 @@ dnl Calls pkg-config --static dnl @@ -19,7 +17,7 @@ Index: btrfs-progs-4.7.3/configure.ac AC_SUBST([$1]) else AC_MSG_ERROR([pkg-config description of $2, needed for static build, is not available]) -@@ -165,8 +165,8 @@ +@@ -203,8 +203,8 @@ # Our udev rule gives us the friendly dm names but isn't required (or valid) # on earlier releases. UDEVDIR= diff --git a/dir-test.c b/dir-test.c index 24f2c2e3..cfb77f2a 100644 --- a/dir-test.c +++ b/dir-test.c @@ -443,6 +443,7 @@ int main(int ac, char **av) } trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); dir_oid = btrfs_super_root_dir(&super); diff --git a/disk-io.c b/disk-io.c index 8cf800ea..f5edc479 100644 --- a/disk-io.c +++ b/disk-io.c @@ -182,27 +182,28 @@ struct extent_buffer *btrfs_find_tree_block(struct btrfs_fs_info *fs_info, } struct extent_buffer* btrfs_find_create_tree_block( - struct btrfs_fs_info *fs_info, u64 bytenr, u32 blocksize) + struct btrfs_fs_info *fs_info, u64 bytenr) { - return alloc_extent_buffer(&fs_info->extent_cache, bytenr, blocksize); + return alloc_extent_buffer(&fs_info->extent_cache, bytenr, + fs_info->nodesize); } void readahead_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr, - u32 blocksize, u64 parent_transid) + u64 parent_transid) { struct extent_buffer *eb; u64 length; struct btrfs_multi_bio *multi = NULL; struct btrfs_device *device; - eb = btrfs_find_tree_block(fs_info, bytenr, blocksize); + eb = btrfs_find_tree_block(fs_info, bytenr, fs_info->nodesize); if (!(eb && btrfs_buffer_uptodate(eb, parent_transid)) && !btrfs_map_block(fs_info, READ, bytenr, &length, &multi, 0, NULL)) { device = multi->stripes[0].dev; device->total_ios++; - blocksize = min(blocksize, (u32)SZ_64K); - readahead(device->fd, multi->stripes[0].physical, blocksize); + readahead(device->fd, multi->stripes[0].physical, + fs_info->nodesize); } free_extent_buffer(eb); @@ -299,15 +300,13 @@ int read_whole_eb(struct btrfs_fs_info *info, struct extent_buffer *eb, int mirr return 0; } -struct extent_buffer* read_tree_block( - struct btrfs_fs_info *fs_info, u64 bytenr, u32 blocksize, +struct extent_buffer* read_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr, u64 parent_transid) { int ret; struct extent_buffer *eb; u64 best_transid = 0; u32 sectorsize = fs_info->sectorsize; - u32 nodesize = fs_info->nodesize; int mirror_num = 0; int good_mirror = 0; int num_copies; @@ -324,13 +323,8 @@ struct extent_buffer* read_tree_block( bytenr, sectorsize); return ERR_PTR(-EIO); } - if (blocksize < nodesize || !IS_ALIGNED(blocksize, nodesize)) { - error("tree block size %u is not aligned to nodesize %u", - blocksize, nodesize); - return ERR_PTR(-EIO); - } - eb = btrfs_find_create_tree_block(fs_info, bytenr, blocksize); + eb = btrfs_find_create_tree_block(fs_info, bytenr); if (!eb) return ERR_PTR(-ENOMEM); @@ -487,135 +481,11 @@ void btrfs_setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info, root->root_key.objectid = objectid; } -static int update_cowonly_root(struct btrfs_trans_handle *trans, - struct btrfs_root *root) -{ - int ret; - u64 old_root_bytenr; - struct btrfs_root *tree_root = root->fs_info->tree_root; - - btrfs_write_dirty_block_groups(trans, root); - while(1) { - old_root_bytenr = btrfs_root_bytenr(&root->root_item); - if (old_root_bytenr == root->node->start) - break; - btrfs_set_root_bytenr(&root->root_item, - root->node->start); - btrfs_set_root_generation(&root->root_item, - trans->transid); - root->root_item.level = btrfs_header_level(root->node); - ret = btrfs_update_root(trans, tree_root, - &root->root_key, - &root->root_item); - BUG_ON(ret); - btrfs_write_dirty_block_groups(trans, root); - } - return 0; -} - -static int commit_tree_roots(struct btrfs_trans_handle *trans, - struct btrfs_fs_info *fs_info) -{ - struct btrfs_root *root; - struct list_head *next; - struct extent_buffer *eb; - int ret; - - if (fs_info->readonly) - return 0; - - eb = fs_info->tree_root->node; - extent_buffer_get(eb); - ret = btrfs_cow_block(trans, fs_info->tree_root, eb, NULL, 0, &eb); - free_extent_buffer(eb); - if (ret) - return ret; - - while(!list_empty(&fs_info->dirty_cowonly_roots)) { - next = fs_info->dirty_cowonly_roots.next; - list_del_init(next); - root = list_entry(next, struct btrfs_root, dirty_list); - update_cowonly_root(trans, root); - free_extent_buffer(root->commit_root); - root->commit_root = NULL; - } - - return 0; -} - -static int __commit_transaction(struct btrfs_trans_handle *trans, - struct btrfs_root *root) -{ - u64 start; - u64 end; - struct btrfs_fs_info *fs_info = root->fs_info; - struct extent_buffer *eb; - struct extent_io_tree *tree = &fs_info->extent_cache; - int ret; - - while(1) { - ret = find_first_extent_bit(tree, 0, &start, &end, - EXTENT_DIRTY); - if (ret) - break; - while(start <= end) { - eb = find_first_extent_buffer(tree, start); - BUG_ON(!eb || eb->start != start); - ret = write_tree_block(trans, fs_info, eb); - BUG_ON(ret); - start += eb->len; - clear_extent_buffer_dirty(eb); - free_extent_buffer(eb); - } - } - return 0; -} - -int btrfs_commit_transaction(struct btrfs_trans_handle *trans, - struct btrfs_root *root) -{ - u64 transid = trans->transid; - int ret = 0; - struct btrfs_fs_info *fs_info = root->fs_info; - - if (root->commit_root == root->node) - goto commit_tree; - if (root == root->fs_info->tree_root) - goto commit_tree; - if (root == root->fs_info->chunk_root) - goto commit_tree; - - free_extent_buffer(root->commit_root); - root->commit_root = NULL; - - btrfs_set_root_bytenr(&root->root_item, root->node->start); - btrfs_set_root_generation(&root->root_item, trans->transid); - root->root_item.level = btrfs_header_level(root->node); - ret = btrfs_update_root(trans, root->fs_info->tree_root, - &root->root_key, &root->root_item); - BUG_ON(ret); -commit_tree: - ret = commit_tree_roots(trans, fs_info); - BUG_ON(ret); - ret = __commit_transaction(trans, root); - BUG_ON(ret); - write_ctree_super(trans, fs_info); - btrfs_finish_extent_commit(trans, fs_info->extent_root, - &fs_info->pinned_extents); - kfree(trans); - free_extent_buffer(root->commit_root); - root->commit_root = NULL; - fs_info->running_transaction = NULL; - fs_info->last_trans_committed = transid; - return 0; -} - static int find_and_setup_root(struct btrfs_root *tree_root, struct btrfs_fs_info *fs_info, u64 objectid, struct btrfs_root *root) { int ret; - u32 blocksize; u64 generation; btrfs_setup_root(root, fs_info, objectid); @@ -624,11 +494,9 @@ static int find_and_setup_root(struct btrfs_root *tree_root, if (ret) return ret; - blocksize = fs_info->nodesize; generation = btrfs_root_generation(&root->root_item); root->node = read_tree_block(fs_info, - btrfs_root_bytenr(&root->root_item), - blocksize, generation); + btrfs_root_bytenr(&root->root_item), generation); if (!extent_buffer_uptodate(root->node)) return -EIO; @@ -639,7 +507,6 @@ static int find_and_setup_log_root(struct btrfs_root *tree_root, struct btrfs_fs_info *fs_info, struct btrfs_super_block *disk_super) { - u32 blocksize; u64 blocknr = btrfs_super_log_root(disk_super); struct btrfs_root *log_root = malloc(sizeof(struct btrfs_root)); @@ -651,13 +518,10 @@ static int find_and_setup_log_root(struct btrfs_root *tree_root, return 0; } - blocksize = fs_info->nodesize; - btrfs_setup_root(log_root, fs_info, BTRFS_TREE_LOG_OBJECTID); log_root->node = read_tree_block(fs_info, blocknr, - blocksize, btrfs_super_generation(disk_super) + 1); fs_info->log_root_tree = log_root; @@ -700,7 +564,6 @@ struct btrfs_root *btrfs_read_fs_root_no_cache(struct btrfs_fs_info *fs_info, struct btrfs_path *path; struct extent_buffer *l; u64 generation; - u32 blocksize; int ret = 0; root = calloc(1, sizeof(*root)); @@ -744,10 +607,8 @@ out: return ERR_PTR(ret); } generation = btrfs_root_generation(&root->root_item); - blocksize = fs_info->nodesize; root->node = read_tree_block(fs_info, - btrfs_root_bytenr(&root->root_item), - blocksize, generation); + btrfs_root_bytenr(&root->root_item), generation); if (!extent_buffer_uptodate(root->node)) { free(root); return ERR_PTR(-EIO); @@ -953,9 +814,7 @@ static int setup_root_or_create_block(struct btrfs_fs_info *fs_info, struct btrfs_root *info_root, u64 objectid, char *str) { - struct btrfs_super_block *sb = fs_info->super_copy; struct btrfs_root *root = fs_info->tree_root; - u32 nodesize = btrfs_super_nodesize(sb); int ret; ret = find_and_setup_root(root, fs_info, objectid, info_root); @@ -968,7 +827,7 @@ static int setup_root_or_create_block(struct btrfs_fs_info *fs_info, * million of places that assume a root has a valid ->node */ info_root->node = - btrfs_find_create_tree_block(fs_info, 0, nodesize); + btrfs_find_create_tree_block(fs_info, 0); if (!info_root->node) return -ENOMEM; clear_extent_buffer_uptodate(info_root->node); @@ -984,12 +843,10 @@ int btrfs_setup_all_roots(struct btrfs_fs_info *fs_info, u64 root_tree_bytenr, struct btrfs_root *root; struct btrfs_key key; u64 generation; - u32 blocksize; int ret; root = fs_info->tree_root; btrfs_setup_root(root, fs_info, BTRFS_ROOT_TREE_OBJECTID); - blocksize = fs_info->nodesize; generation = btrfs_super_generation(sb); if (!root_tree_bytenr && !(flags & OPEN_CTREE_BACKUP_ROOT)) { @@ -1006,8 +863,7 @@ int btrfs_setup_all_roots(struct btrfs_fs_info *fs_info, u64 root_tree_bytenr, generation = btrfs_backup_tree_root_gen(backup); } - root->node = read_tree_block(fs_info, root_tree_bytenr, blocksize, - generation); + root->node = read_tree_block(fs_info, root_tree_bytenr, generation); if (!extent_buffer_uptodate(root->node)) { fprintf(stderr, "Couldn't read tree root\n"); return -EIO; @@ -1062,8 +918,16 @@ int btrfs_setup_all_roots(struct btrfs_fs_info *fs_info, u64 root_tree_bytenr, fs_info->generation = generation; fs_info->last_trans_committed = generation; if (extent_buffer_uptodate(fs_info->extent_root->node) && - !(flags & OPEN_CTREE_NO_BLOCK_GROUPS)) - btrfs_read_block_groups(fs_info->tree_root); + !(flags & OPEN_CTREE_NO_BLOCK_GROUPS)) { + ret = btrfs_read_block_groups(fs_info->tree_root); + /* + * If we don't find any blockgroups (ENOENT) we're either + * restoring or creating the filesystem, where it's expected, + * anything else is error + */ + if (ret != -ENOENT) + return -EIO; + } key.objectid = BTRFS_FS_TREE_OBJECTID; key.type = BTRFS_ROOT_ITEM_KEY; @@ -1193,7 +1057,6 @@ int btrfs_setup_chunk_tree_and_device_map(struct btrfs_fs_info *fs_info, fs_info->chunk_root->node = read_tree_block(fs_info, chunk_root_bytenr, - fs_info->nodesize, generation); if (!extent_buffer_uptodate(fs_info->chunk_root->node)) { if (fs_info->ignore_chunk_tree_error) { @@ -1760,6 +1623,7 @@ int write_ctree_super(struct btrfs_trans_handle *trans, int close_ctree_fs_info(struct btrfs_fs_info *fs_info) { int ret; + int err = 0; struct btrfs_trans_handle *trans; struct btrfs_root *root = fs_info->tree_root; @@ -1767,8 +1631,13 @@ int close_ctree_fs_info(struct btrfs_fs_info *fs_info) fs_info->generation) { BUG_ON(!root); trans = btrfs_start_transaction(root, 1); + if (IS_ERR(trans)) { + err = PTR_ERR(trans); + goto skip_commit; + } btrfs_commit_transaction(trans, root); trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); ret = commit_tree_roots(trans, fs_info); BUG_ON(ret); ret = __commit_transaction(trans, root); @@ -1785,6 +1654,8 @@ int close_ctree_fs_info(struct btrfs_fs_info *fs_info) fprintf(stderr, "failed to write new super block err %d\n", ret); } + +skip_commit: btrfs_free_block_groups(fs_info); free_fs_roots_tree(&fs_info->fs_root_tree); @@ -1793,7 +1664,9 @@ int close_ctree_fs_info(struct btrfs_fs_info *fs_info) ret = btrfs_close_devices(fs_info->fs_devices); btrfs_cleanup_all_caches(fs_info); btrfs_free_fs_info(fs_info); - return ret; + if (!err) + err = ret; + return err; } int clean_tree_block(struct btrfs_trans_handle *trans, struct btrfs_root *root, diff --git a/disk-io.h b/disk-io.h index dfe4cf01..f6a422f2 100644 --- a/disk-io.h +++ b/disk-io.h @@ -115,16 +115,15 @@ static inline u64 btrfs_sb_offset(int mirror) struct btrfs_device; int read_whole_eb(struct btrfs_fs_info *info, struct extent_buffer *eb, int mirror); -struct extent_buffer* read_tree_block( - struct btrfs_fs_info *fs_info, u64 bytenr, u32 blocksize, +struct extent_buffer* read_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr, u64 parent_transid); int read_extent_data(struct btrfs_fs_info *fs_info, char *data, u64 logical, u64 *len, int mirror); void readahead_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr, - u32 blocksize, u64 parent_transid); + u64 parent_transid); struct extent_buffer* btrfs_find_create_tree_block( - struct btrfs_fs_info *fs_info, u64 bytenr, u32 blocksize); + struct btrfs_fs_info *fs_info, u64 bytenr); void btrfs_setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info, u64 objectid); @@ -181,8 +180,6 @@ int btrfs_set_buffer_uptodate(struct extent_buffer *buf); u32 btrfs_csum_data(char *data, u32 seed, size_t len); void btrfs_csum_final(u32 crc, u8 *result); -int btrfs_commit_transaction(struct btrfs_trans_handle *trans, - struct btrfs_root *root); int btrfs_open_device(struct btrfs_device *dev); int csum_tree_block_size(struct extent_buffer *buf, u16 csum_sectorsize, int verify); diff --git a/extent-tree.c b/extent-tree.c index 46b8a05c..525a237e 100644 --- a/extent-tree.c +++ b/extent-tree.c @@ -284,7 +284,7 @@ out: if (!cache) { printk("Unable to find block group for %llu\n", (unsigned long long)search_start); - WARN_ON(1); + return -ENOENT; } return -ENOSPC; @@ -2663,8 +2663,7 @@ int btrfs_reserve_extent(struct btrfs_trans_handle *trans, alloc_profile = info->avail_data_alloc_bits & info->data_alloc_profile; data = BTRFS_BLOCK_GROUP_DATA | alloc_profile; - } else if ((info->system_allocs > 0 || root == info->chunk_root) && - info->system_allocs >= 0) { + } else if (info->system_allocs == 1 || root == info->chunk_root) { alloc_profile = info->avail_system_alloc_bits & info->system_alloc_profile; data = BTRFS_BLOCK_GROUP_SYSTEM | alloc_profile; @@ -2818,8 +2817,7 @@ struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans, return ERR_PTR(ret); } - buf = btrfs_find_create_tree_block(root->fs_info, ins.objectid, - blocksize); + buf = btrfs_find_create_tree_block(root->fs_info, ins.objectid); if (!buf) { btrfs_free_extent(trans, root, ins.objectid, ins.offset, 0, root->root_key.objectid, level, 0); @@ -3726,7 +3724,7 @@ static int free_block_group_cache(struct btrfs_trans_handle *trans, btrfs_remove_free_space_cache(cache); kfree(cache->free_space_ctl); } - clear_extent_bits(&fs_info->block_group_cache, bytenr, bytenr + len, + clear_extent_bits(&fs_info->block_group_cache, bytenr, bytenr + len - 1, (unsigned int)-1); ret = free_space_info(fs_info, flags, len, 0, NULL); if (ret < 0) @@ -3842,7 +3840,7 @@ out: int btrfs_fix_block_accounting(struct btrfs_trans_handle *trans, struct btrfs_root *root) { - int ret; + int ret = 0; int slot; u64 start = 0; u64 bytes_used = 0; @@ -3906,13 +3904,16 @@ int btrfs_fix_block_accounting(struct btrfs_trans_handle *trans, bytes_used += fs_info->nodesize; ret = btrfs_update_block_group(trans, root, key.objectid, fs_info->nodesize, 1, 0); - BUG_ON(ret); + if (ret) + goto out; } path.slots[0]++; } btrfs_set_super_bytes_used(root->fs_info->super_copy, bytes_used); + ret = 0; +out: btrfs_release_path(&path); - return 0; + return ret; } static void __get_extent_size(struct btrfs_root *root, struct btrfs_path *path, diff --git a/extent_io.c b/extent_io.c index 1c6c1425..eda1fb6f 100644 --- a/extent_io.c +++ b/extent_io.c @@ -22,11 +22,13 @@ #include #include #include +#include #include "kerncompat.h" #include "extent_io.h" #include "list.h" #include "ctree.h" #include "volumes.h" +#include "utils.h" #include "internal.h" void extent_io_tree_init(struct extent_io_tree *tree) @@ -35,6 +37,14 @@ void extent_io_tree_init(struct extent_io_tree *tree) cache_tree_init(&tree->cache); INIT_LIST_HEAD(&tree->lru); tree->cache_size = 0; + tree->max_cache_size = (u64)total_memory() / 4; +} + +void extent_io_tree_init_cache_max(struct extent_io_tree *tree, + u64 max_cache_size) +{ + extent_io_tree_init(tree); + tree->max_cache_size = max_cache_size; } static struct extent_state *alloc_extent_state(void) @@ -67,16 +77,21 @@ static void free_extent_state_func(struct cache_extent *cache) btrfs_free_extent_state(es); } +static void free_extent_buffer_final(struct extent_buffer *eb); void extent_io_tree_cleanup(struct extent_io_tree *tree) { struct extent_buffer *eb; while(!list_empty(&tree->lru)) { eb = list_entry(tree->lru.next, struct extent_buffer, lru); - fprintf(stderr, "extent buffer leak: " - "start %llu len %u\n", - (unsigned long long)eb->start, eb->len); - free_extent_buffer(eb); + if (eb->refs) { + fprintf(stderr, + "extent buffer leak: start %llu len %u\n", + (unsigned long long)eb->start, eb->len); + free_extent_buffer_nocache(eb); + } else { + free_extent_buffer_final(eb); + } } cache_tree_free_extents(&tree->state, free_extent_state_func); @@ -567,7 +582,21 @@ struct extent_buffer *btrfs_clone_extent_buffer(struct extent_buffer *src) return new; } -void free_extent_buffer(struct extent_buffer *eb) +static void free_extent_buffer_final(struct extent_buffer *eb) +{ + struct extent_io_tree *tree = eb->tree; + + BUG_ON(eb->refs); + BUG_ON(tree->cache_size < eb->len); + list_del_init(&eb->lru); + if (!(eb->flags & EXTENT_BUFFER_DUMMY)) { + remove_cache_extent(&tree->cache, &eb->cache_node); + tree->cache_size -= eb->len; + } + free(eb); +} + +static void free_extent_buffer_internal(struct extent_buffer *eb, bool free_now) { if (!eb || IS_ERR(eb)) return; @@ -575,19 +604,23 @@ void free_extent_buffer(struct extent_buffer *eb) eb->refs--; BUG_ON(eb->refs < 0); if (eb->refs == 0) { - struct extent_io_tree *tree = eb->tree; BUG_ON(eb->flags & EXTENT_DIRTY); - list_del_init(&eb->lru); list_del_init(&eb->recow); - if (!(eb->flags & EXTENT_BUFFER_DUMMY)) { - BUG_ON(tree->cache_size < eb->len); - remove_cache_extent(&tree->cache, &eb->cache_node); - tree->cache_size -= eb->len; - } - free(eb); + if (eb->flags & EXTENT_BUFFER_DUMMY || free_now) + free_extent_buffer_final(eb); } } +void free_extent_buffer(struct extent_buffer *eb) +{ + free_extent_buffer_internal(eb, 0); +} + +void free_extent_buffer_nocache(struct extent_buffer *eb) +{ + free_extent_buffer_internal(eb, 1); +} + struct extent_buffer *find_extent_buffer(struct extent_io_tree *tree, u64 bytenr, u32 blocksize) { @@ -619,6 +652,18 @@ struct extent_buffer *find_first_extent_buffer(struct extent_io_tree *tree, return eb; } +static void trim_extent_buffer_cache(struct extent_io_tree *tree) +{ + struct extent_buffer *eb, *tmp; + + list_for_each_entry_safe(eb, tmp, &tree->lru, lru) { + if (eb->refs == 0) + free_extent_buffer_final(eb); + if (tree->cache_size <= ((tree->max_cache_size * 9) / 10)) + break; + } +} + struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree, u64 bytenr, u32 blocksize) { @@ -649,6 +694,8 @@ struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree, } list_add_tail(&eb->lru, &tree->lru); tree->cache_size += blocksize; + if (tree->cache_size >= tree->max_cache_size) + trim_extent_buffer_cache(tree); } return eb; } diff --git a/extent_io.h b/extent_io.h index e6174894..17a4a829 100644 --- a/extent_io.h +++ b/extent_io.h @@ -75,6 +75,7 @@ struct extent_io_tree { struct cache_tree cache; struct list_head lru; u64 cache_size; + u64 max_cache_size; }; struct extent_state { @@ -106,6 +107,8 @@ static inline void extent_buffer_get(struct extent_buffer *eb) } void extent_io_tree_init(struct extent_io_tree *tree); +void extent_io_tree_init_cache_max(struct extent_io_tree *tree, + u64 max_cache_size); void extent_io_tree_cleanup(struct extent_io_tree *tree); int set_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, int bits); int clear_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, int bits); @@ -146,6 +149,7 @@ struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree, u64 bytenr, u32 blocksize); struct extent_buffer *btrfs_clone_extent_buffer(struct extent_buffer *src); void free_extent_buffer(struct extent_buffer *eb); +void free_extent_buffer_nocache(struct extent_buffer *eb); int read_extent_from_disk(struct extent_buffer *eb, unsigned long offset, unsigned long len); int write_extent_to_disk(struct extent_buffer *eb); diff --git a/file-item.c b/file-item.c index 6877a1a9..8e169e18 100644 --- a/file-item.c +++ b/file-item.c @@ -86,7 +86,7 @@ out: int btrfs_insert_inline_extent(struct btrfs_trans_handle *trans, struct btrfs_root *root, u64 objectid, - u64 offset, char *buffer, size_t size) + u64 offset, const char *buffer, size_t size) { struct btrfs_key key; struct btrfs_path *path; diff --git a/find-root.c b/find-root.c index 1765adf8..7e4c51f6 100644 --- a/find-root.c +++ b/find-root.c @@ -133,7 +133,7 @@ int btrfs_find_root_search(struct btrfs_fs_info *fs_info, for (offset = chunk_offset; offset < chunk_offset + chunk_size; offset += nodesize) { - eb = read_tree_block(fs_info, offset, nodesize, 0); + eb = read_tree_block(fs_info, offset, 0); if (!eb || IS_ERR(eb)) continue; ret = add_eb_to_result(eb, result, nodesize, filter, diff --git a/free-space-cache.c b/free-space-cache.c index 4bf4a6cb..50356d04 100644 --- a/free-space-cache.c +++ b/free-space-cache.c @@ -918,7 +918,7 @@ int btrfs_clear_free_space_cache(struct btrfs_fs_info *fs_info, slot = path.slots[0]; sc_header = btrfs_item_ptr(node, slot, struct btrfs_free_space_header); btrfs_free_space_key(node, sc_header, &location); - ino = location.objectid; + ino = btrfs_disk_key_objectid(&location); /* Delete the free space header, as we have the ino to continue */ ret = btrfs_del_item(trans, tree_root, &path); diff --git a/fsfeatures.h b/fsfeatures.h index 513ed1e7..3cc9452a 100644 --- a/fsfeatures.h +++ b/fsfeatures.h @@ -31,7 +31,7 @@ (BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF \ | BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL \ | BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO \ - | BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2 \ + | BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD \ | BTRFS_FEATURE_INCOMPAT_BIG_METADATA \ | BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF \ | BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA \ diff --git a/help.c b/help.c index 19b0d357..99097db8 100644 --- a/help.c +++ b/help.c @@ -218,6 +218,7 @@ void usage_command(const struct cmd_struct *cmd, int full, int err) usage_command_usagestr(cmd->usagestr, cmd->token, full, err); } +__attribute__((noreturn)) void usage(const char * const *usagestr) { usage_command_usagestr(usagestr, NULL, 1, 1); @@ -325,6 +326,7 @@ void usage_command_group(const struct cmd_group *grp, int full, int err) fprintf(outf, "%s\n", grp->infostr); } +__attribute__((noreturn)) void help_unknown_token(const char *arg, const struct cmd_group *grp) { fprintf(stderr, "%s: unknown token '%s'\n", get_argv0_buf(), arg); @@ -332,6 +334,7 @@ void help_unknown_token(const char *arg, const struct cmd_group *grp) exit(1); } +__attribute__((noreturn)) void help_ambiguous_token(const char *arg, const struct cmd_group *grp) { const struct cmd_struct *cmd = grp->commands; diff --git a/help.h b/help.h index 7458e745..efeded30 100644 --- a/help.h +++ b/help.h @@ -55,13 +55,16 @@ struct cmd_struct; struct cmd_group; -void usage(const char * const *usagestr) __attribute__((noreturn)); +__attribute__((noreturn)) +void usage(const char * const *usagestr); void usage_command(const struct cmd_struct *cmd, int full, int err); void usage_command_group(const struct cmd_group *grp, int all, int err); void usage_command_group_short(const struct cmd_group *grp); -void help_unknown_token(const char *arg, const struct cmd_group *grp) __attribute__((noreturn)); -void help_ambiguous_token(const char *arg, const struct cmd_group *grp) __attribute__((noreturn)); +__attribute__((noreturn)) +void help_unknown_token(const char *arg, const struct cmd_group *grp); +__attribute__((noreturn)) +void help_ambiguous_token(const char *arg, const struct cmd_group *grp); void help_command_group(const struct cmd_group *grp, int argc, char **argv); diff --git a/image/main.c b/image/main.c index 80588e81..4cffbdba 100644 --- a/image/main.c +++ b/image/main.c @@ -338,61 +338,146 @@ static u64 logical_to_physical(struct mdrestore_struct *mdres, u64 logical, return fs_chunk->physical + offset; } +/* + * Reverse CRC-32C table + */ +static const u32 crc32c_rev_table[256] = { + 0x00000000L,0x05EC76F1L,0x0BD8EDE2L,0x0E349B13L, + 0x17B1DBC4L,0x125DAD35L,0x1C693626L,0x198540D7L, + 0x2F63B788L,0x2A8FC179L,0x24BB5A6AL,0x21572C9BL, + 0x38D26C4CL,0x3D3E1ABDL,0x330A81AEL,0x36E6F75FL, + 0x5EC76F10L,0x5B2B19E1L,0x551F82F2L,0x50F3F403L, + 0x4976B4D4L,0x4C9AC225L,0x42AE5936L,0x47422FC7L, + 0x71A4D898L,0x7448AE69L,0x7A7C357AL,0x7F90438BL, + 0x6615035CL,0x63F975ADL,0x6DCDEEBEL,0x6821984FL, + 0xBD8EDE20L,0xB862A8D1L,0xB65633C2L,0xB3BA4533L, + 0xAA3F05E4L,0xAFD37315L,0xA1E7E806L,0xA40B9EF7L, + 0x92ED69A8L,0x97011F59L,0x9935844AL,0x9CD9F2BBL, + 0x855CB26CL,0x80B0C49DL,0x8E845F8EL,0x8B68297FL, + 0xE349B130L,0xE6A5C7C1L,0xE8915CD2L,0xED7D2A23L, + 0xF4F86AF4L,0xF1141C05L,0xFF208716L,0xFACCF1E7L, + 0xCC2A06B8L,0xC9C67049L,0xC7F2EB5AL,0xC21E9DABL, + 0xDB9BDD7CL,0xDE77AB8DL,0xD043309EL,0xD5AF466FL, + 0x7EF1CAB1L,0x7B1DBC40L,0x75292753L,0x70C551A2L, + 0x69401175L,0x6CAC6784L,0x6298FC97L,0x67748A66L, + 0x51927D39L,0x547E0BC8L,0x5A4A90DBL,0x5FA6E62AL, + 0x4623A6FDL,0x43CFD00CL,0x4DFB4B1FL,0x48173DEEL, + 0x2036A5A1L,0x25DAD350L,0x2BEE4843L,0x2E023EB2L, + 0x37877E65L,0x326B0894L,0x3C5F9387L,0x39B3E576L, + 0x0F551229L,0x0AB964D8L,0x048DFFCBL,0x0161893AL, + 0x18E4C9EDL,0x1D08BF1CL,0x133C240FL,0x16D052FEL, + 0xC37F1491L,0xC6936260L,0xC8A7F973L,0xCD4B8F82L, + 0xD4CECF55L,0xD122B9A4L,0xDF1622B7L,0xDAFA5446L, + 0xEC1CA319L,0xE9F0D5E8L,0xE7C44EFBL,0xE228380AL, + 0xFBAD78DDL,0xFE410E2CL,0xF075953FL,0xF599E3CEL, + 0x9DB87B81L,0x98540D70L,0x96609663L,0x938CE092L, + 0x8A09A045L,0x8FE5D6B4L,0x81D14DA7L,0x843D3B56L, + 0xB2DBCC09L,0xB737BAF8L,0xB90321EBL,0xBCEF571AL, + 0xA56A17CDL,0xA086613CL,0xAEB2FA2FL,0xAB5E8CDEL, + 0xFDE39562L,0xF80FE393L,0xF63B7880L,0xF3D70E71L, + 0xEA524EA6L,0xEFBE3857L,0xE18AA344L,0xE466D5B5L, + 0xD28022EAL,0xD76C541BL,0xD958CF08L,0xDCB4B9F9L, + 0xC531F92EL,0xC0DD8FDFL,0xCEE914CCL,0xCB05623DL, + 0xA324FA72L,0xA6C88C83L,0xA8FC1790L,0xAD106161L, + 0xB49521B6L,0xB1795747L,0xBF4DCC54L,0xBAA1BAA5L, + 0x8C474DFAL,0x89AB3B0BL,0x879FA018L,0x8273D6E9L, + 0x9BF6963EL,0x9E1AE0CFL,0x902E7BDCL,0x95C20D2DL, + 0x406D4B42L,0x45813DB3L,0x4BB5A6A0L,0x4E59D051L, + 0x57DC9086L,0x5230E677L,0x5C047D64L,0x59E80B95L, + 0x6F0EFCCAL,0x6AE28A3BL,0x64D61128L,0x613A67D9L, + 0x78BF270EL,0x7D5351FFL,0x7367CAECL,0x768BBC1DL, + 0x1EAA2452L,0x1B4652A3L,0x1572C9B0L,0x109EBF41L, + 0x091BFF96L,0x0CF78967L,0x02C31274L,0x072F6485L, + 0x31C993DAL,0x3425E52BL,0x3A117E38L,0x3FFD08C9L, + 0x2678481EL,0x23943EEFL,0x2DA0A5FCL,0x284CD30DL, + 0x83125FD3L,0x86FE2922L,0x88CAB231L,0x8D26C4C0L, + 0x94A38417L,0x914FF2E6L,0x9F7B69F5L,0x9A971F04L, + 0xAC71E85BL,0xA99D9EAAL,0xA7A905B9L,0xA2457348L, + 0xBBC0339FL,0xBE2C456EL,0xB018DE7DL,0xB5F4A88CL, + 0xDDD530C3L,0xD8394632L,0xD60DDD21L,0xD3E1ABD0L, + 0xCA64EB07L,0xCF889DF6L,0xC1BC06E5L,0xC4507014L, + 0xF2B6874BL,0xF75AF1BAL,0xF96E6AA9L,0xFC821C58L, + 0xE5075C8FL,0xE0EB2A7EL,0xEEDFB16DL,0xEB33C79CL, + 0x3E9C81F3L,0x3B70F702L,0x35446C11L,0x30A81AE0L, + 0x292D5A37L,0x2CC12CC6L,0x22F5B7D5L,0x2719C124L, + 0x11FF367BL,0x1413408AL,0x1A27DB99L,0x1FCBAD68L, + 0x064EEDBFL,0x03A29B4EL,0x0D96005DL,0x087A76ACL, + 0x605BEEE3L,0x65B79812L,0x6B830301L,0x6E6F75F0L, + 0x77EA3527L,0x720643D6L,0x7C32D8C5L,0x79DEAE34L, + 0x4F38596BL,0x4AD42F9AL,0x44E0B489L,0x410CC278L, + 0x588982AFL,0x5D65F45EL,0x53516F4DL,0x56BD19BCL +}; -static char *find_collision(struct metadump_struct *md, char *name, - u32 name_len) +/* + * Calculate a 4-byte suffix to match desired CRC32C + * + * @current_crc: CRC32C checksum of all bytes before the suffix + * @desired_crc: the checksum that we want to get after adding the suffix + * + * Outputs: @suffix: pointer to where the suffix will be written (4-bytes) + */ +static void find_collision_calc_suffix(unsigned long current_crc, + unsigned long desired_crc, + char *suffix) { - struct name *val; - struct rb_node *entry; - struct name tmp; - unsigned long checksum; - int found = 0; int i; - tmp.val = name; - tmp.len = name_len; - entry = tree_search(&md->name_tree, &tmp.n, name_cmp, 0); - if (entry) { - val = rb_entry(entry, struct name, n); - free(name); - return val->sub; - } - - val = malloc(sizeof(struct name)); - if (!val) { - error("cannot sanitize name, not enough memory"); - free(name); - return NULL; + for(i = 3; i >= 0; i--) { + desired_crc = (desired_crc << 8) + ^ crc32c_rev_table[desired_crc >> 24 & 0xFF] + ^ ((current_crc >> i * 8) & 0xFF); } + for (i = 0; i < 4; i++) + suffix[i] = (desired_crc >> i * 8) & 0xFF; +} - memset(val, 0, sizeof(*val)); +/* + * Check if suffix is valid according to our file name conventions + */ +static int find_collision_is_suffix_valid(const char *suffix) +{ + int i; + char c; - val->val = name; - val->len = name_len; - val->sub = malloc(name_len); - if (!val->sub) { - error("cannot sanitize name, not enough memory"); - free(val); - free(name); - return NULL; + for (i = 0; i < 4; i++) { + c = suffix[i]; + if (c < ' ' || c > 126 || c == '/') + return 0; } + return 1; +} + +static int find_collision_reverse_crc32c(struct name *val, u32 name_len) +{ + unsigned long checksum; + unsigned long current_checksum; + int found = 0; + int i; + /* There are no same length collisions of 4 or less bytes */ + if (name_len <= 4) + return 0; checksum = crc32c(~1, val->val, name_len); + name_len -= 4; memset(val->sub, ' ', name_len); i = 0; while (1) { - if (crc32c(~1, val->sub, name_len) == checksum && + current_checksum = crc32c(~1, val->sub, name_len); + find_collision_calc_suffix(current_checksum, + checksum, + val->sub + name_len); + if (find_collision_is_suffix_valid(val->sub + name_len) && memcmp(val->sub, val->val, val->len)) { found = 1; break; } - if (val->sub[i] == 127) { + if (val->sub[i] == 126) { do { i++; if (i >= name_len) break; - } while (val->sub[i] == 127); + } while (val->sub[i] == 126); if (i >= name_len) break; @@ -408,6 +493,47 @@ static char *find_collision(struct metadump_struct *md, char *name, val->sub[i]++; } } + return found; +} + +static char *find_collision(struct metadump_struct *md, char *name, + u32 name_len) +{ + struct name *val; + struct rb_node *entry; + struct name tmp; + int found; + int i; + + tmp.val = name; + tmp.len = name_len; + entry = tree_search(&md->name_tree, &tmp.n, name_cmp, 0); + if (entry) { + val = rb_entry(entry, struct name, n); + free(name); + return val->sub; + } + + val = malloc(sizeof(struct name)); + if (!val) { + error("cannot sanitize name, not enough memory"); + free(name); + return NULL; + } + + memset(val, 0, sizeof(*val)); + + val->val = name; + val->len = name_len; + val->sub = malloc(name_len); + if (!val->sub) { + error("cannot sanitize name, not enough memory"); + free(val); + free(name); + return NULL; + } + + found = find_collision_reverse_crc32c(val, name_len); if (!found) { warning( @@ -919,7 +1045,6 @@ static int flush_pending(struct metadump_struct *md, int done) { struct async_work *async = NULL; struct extent_buffer *eb; - u64 blocksize = md->root->fs_info->nodesize; u64 start = 0; u64 size; size_t offset; @@ -972,9 +1097,10 @@ static int flush_pending(struct metadump_struct *md, int done) } while (!md->data && size > 0) { - u64 this_read = min(blocksize, size); - eb = read_tree_block(md->root->fs_info, start, - this_read, 0); + u64 this_read = min((u64)md->root->fs_info->nodesize, + size); + + eb = read_tree_block(md->root->fs_info, start, 0); if (!extent_buffer_uptodate(eb)) { free(async->buffer); free(async); @@ -1029,7 +1155,7 @@ static int add_extent(u64 start, u64 size, struct metadump_struct *md, return ret; md->pending_start = start; } - readahead_tree_block(md->root->fs_info, start, size, 0); + readahead_tree_block(md->root->fs_info, start, 0); md->pending_size += size; md->data = data; return 0; @@ -1105,8 +1231,7 @@ static int copy_tree_blocks(struct btrfs_root *root, struct extent_buffer *eb, continue; ri = btrfs_item_ptr(eb, i, struct btrfs_root_item); bytenr = btrfs_disk_root_bytenr(eb, ri); - tmp = read_tree_block(fs_info, bytenr, - fs_info->nodesize, 0); + tmp = read_tree_block(fs_info, bytenr, 0); if (!extent_buffer_uptodate(tmp)) { error("unable to read log root block"); return -EIO; @@ -1117,8 +1242,7 @@ static int copy_tree_blocks(struct btrfs_root *root, struct extent_buffer *eb, return ret; } else { bytenr = btrfs_node_blockptr(eb, i); - tmp = read_tree_block(fs_info, bytenr, - fs_info->nodesize, 0); + tmp = read_tree_block(fs_info, bytenr, 0); if (!extent_buffer_uptodate(tmp)) { error("unable to read log root block"); return -EIO; diff --git a/inode.c b/inode.c index 6b8bf40f..ea812ce8 100644 --- a/inode.c +++ b/inode.c @@ -28,6 +28,7 @@ #include "transaction.h" #include "disk-io.h" #include "time.h" +#include "messages.h" /* * Find a free inode index for later btrfs_add_link(). @@ -570,3 +571,132 @@ out: *ino = ret_ino; return ret; } + +struct btrfs_root *btrfs_mksubvol(struct btrfs_root *root, + const char *base, u64 root_objectid, + bool convert) +{ + struct btrfs_trans_handle *trans; + struct btrfs_fs_info *fs_info = root->fs_info; + struct btrfs_root *tree_root = fs_info->tree_root; + struct btrfs_root *new_root = NULL; + struct btrfs_path path; + struct btrfs_inode_item *inode_item; + struct extent_buffer *leaf; + struct btrfs_key key; + u64 dirid = btrfs_root_dirid(&root->root_item); + u64 index = 2; + char buf[BTRFS_NAME_LEN + 1]; /* for snprintf null */ + int len; + int i; + int ret; + + len = strlen(base); + if (len == 0 || len > BTRFS_NAME_LEN) + return NULL; + + btrfs_init_path(&path); + key.objectid = dirid; + key.type = BTRFS_DIR_INDEX_KEY; + key.offset = (u64)-1; + + ret = btrfs_search_slot(NULL, root, &key, &path, 0, 0); + if (ret <= 0) { + error("search for DIR_INDEX dirid %llu failed: %d", + (unsigned long long)dirid, ret); + goto fail; + } + + if (path.slots[0] > 0) { + path.slots[0]--; + btrfs_item_key_to_cpu(path.nodes[0], &key, path.slots[0]); + if (key.objectid == dirid && key.type == BTRFS_DIR_INDEX_KEY) + index = key.offset + 1; + } + btrfs_release_path(&path); + + trans = btrfs_start_transaction(root, 1); + if (IS_ERR(trans)) { + error("unable to start transaction"); + goto fail; + } + + key.objectid = dirid; + key.offset = 0; + key.type = BTRFS_INODE_ITEM_KEY; + + ret = btrfs_lookup_inode(trans, root, &path, &key, 1); + if (ret) { + error("search for INODE_ITEM %llu failed: %d", + (unsigned long long)dirid, ret); + goto fail; + } + leaf = path.nodes[0]; + inode_item = btrfs_item_ptr(leaf, path.slots[0], + struct btrfs_inode_item); + + key.objectid = root_objectid; + key.offset = (u64)-1; + key.type = BTRFS_ROOT_ITEM_KEY; + + memcpy(buf, base, len); + if (convert) { + for (i = 0; i < 1024; i++) { + ret = btrfs_insert_dir_item(trans, root, buf, len, + dirid, &key, BTRFS_FT_DIR, index); + if (ret != -EEXIST) + break; + len = snprintf(buf, ARRAY_SIZE(buf), "%s%d", base, i); + if (len < 1 || len > BTRFS_NAME_LEN) { + ret = -EINVAL; + break; + } + } + } else { + ret = btrfs_insert_dir_item(trans, root, buf, len, dirid, &key, + BTRFS_FT_DIR, index); + } + if (ret) + goto fail; + + btrfs_set_inode_size(leaf, inode_item, len * 2 + + btrfs_inode_size(leaf, inode_item)); + btrfs_mark_buffer_dirty(leaf); + btrfs_release_path(&path); + + /* add the backref first */ + ret = btrfs_add_root_ref(trans, tree_root, root_objectid, + BTRFS_ROOT_BACKREF_KEY, + root->root_key.objectid, + dirid, index, buf, len); + if (ret) { + error("unable to add root backref for %llu: %d", + root->root_key.objectid, ret); + goto fail; + } + + /* now add the forward ref */ + ret = btrfs_add_root_ref(trans, tree_root, root->root_key.objectid, + BTRFS_ROOT_REF_KEY, root_objectid, + dirid, index, buf, len); + if (ret) { + error("unable to add root ref for %llu: %d", + root->root_key.objectid, ret); + goto fail; + } + + ret = btrfs_commit_transaction(trans, root); + if (ret) { + error("transaction commit failed: %d", ret); + goto fail; + } + + new_root = btrfs_read_fs_root(fs_info, &key); + if (IS_ERR(new_root)) { + error("unable to fs read root: %lu", PTR_ERR(new_root)); + new_root = NULL; + } +fail: + btrfs_init_path(&path); + return new_root; +} diff --git a/kernel-lib/tables.c b/kernel-lib/tables.c new file mode 100644 index 00000000..5db4b900 --- /dev/null +++ b/kernel-lib/tables.c @@ -0,0 +1,10362 @@ +#include "kerncompat.h" + +const u8 __attribute__((aligned(256))) +raid6_gfmul[256][256] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 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, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + }, + { + 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, + 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, + 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, + 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, + 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, + 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, + 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, + 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, + 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, + 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, + 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, + 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, + 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, + 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, + 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, + 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, + 0x1d, 0x1f, 0x19, 0x1b, 0x15, 0x17, 0x11, 0x13, + 0x0d, 0x0f, 0x09, 0x0b, 0x05, 0x07, 0x01, 0x03, + 0x3d, 0x3f, 0x39, 0x3b, 0x35, 0x37, 0x31, 0x33, + 0x2d, 0x2f, 0x29, 0x2b, 0x25, 0x27, 0x21, 0x23, + 0x5d, 0x5f, 0x59, 0x5b, 0x55, 0x57, 0x51, 0x53, + 0x4d, 0x4f, 0x49, 0x4b, 0x45, 0x47, 0x41, 0x43, + 0x7d, 0x7f, 0x79, 0x7b, 0x75, 0x77, 0x71, 0x73, + 0x6d, 0x6f, 0x69, 0x6b, 0x65, 0x67, 0x61, 0x63, + 0x9d, 0x9f, 0x99, 0x9b, 0x95, 0x97, 0x91, 0x93, + 0x8d, 0x8f, 0x89, 0x8b, 0x85, 0x87, 0x81, 0x83, + 0xbd, 0xbf, 0xb9, 0xbb, 0xb5, 0xb7, 0xb1, 0xb3, + 0xad, 0xaf, 0xa9, 0xab, 0xa5, 0xa7, 0xa1, 0xa3, + 0xdd, 0xdf, 0xd9, 0xdb, 0xd5, 0xd7, 0xd1, 0xd3, + 0xcd, 0xcf, 0xc9, 0xcb, 0xc5, 0xc7, 0xc1, 0xc3, + 0xfd, 0xff, 0xf9, 0xfb, 0xf5, 0xf7, 0xf1, 0xf3, + 0xed, 0xef, 0xe9, 0xeb, 0xe5, 0xe7, 0xe1, 0xe3, + }, + { + 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, + 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11, + 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, + 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, + 0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, + 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71, + 0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, + 0x48, 0x4b, 0x4e, 0x4d, 0x44, 0x47, 0x42, 0x41, + 0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9, + 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, + 0xf0, 0xf3, 0xf6, 0xf5, 0xfc, 0xff, 0xfa, 0xf9, + 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1, + 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9, + 0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1, + 0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99, + 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, + 0x9d, 0x9e, 0x9b, 0x98, 0x91, 0x92, 0x97, 0x94, + 0x85, 0x86, 0x83, 0x80, 0x89, 0x8a, 0x8f, 0x8c, + 0xad, 0xae, 0xab, 0xa8, 0xa1, 0xa2, 0xa7, 0xa4, + 0xb5, 0xb6, 0xb3, 0xb0, 0xb9, 0xba, 0xbf, 0xbc, + 0xfd, 0xfe, 0xfb, 0xf8, 0xf1, 0xf2, 0xf7, 0xf4, + 0xe5, 0xe6, 0xe3, 0xe0, 0xe9, 0xea, 0xef, 0xec, + 0xcd, 0xce, 0xcb, 0xc8, 0xc1, 0xc2, 0xc7, 0xc4, + 0xd5, 0xd6, 0xd3, 0xd0, 0xd9, 0xda, 0xdf, 0xdc, + 0x5d, 0x5e, 0x5b, 0x58, 0x51, 0x52, 0x57, 0x54, + 0x45, 0x46, 0x43, 0x40, 0x49, 0x4a, 0x4f, 0x4c, + 0x6d, 0x6e, 0x6b, 0x68, 0x61, 0x62, 0x67, 0x64, + 0x75, 0x76, 0x73, 0x70, 0x79, 0x7a, 0x7f, 0x7c, + 0x3d, 0x3e, 0x3b, 0x38, 0x31, 0x32, 0x37, 0x34, + 0x25, 0x26, 0x23, 0x20, 0x29, 0x2a, 0x2f, 0x2c, + 0x0d, 0x0e, 0x0b, 0x08, 0x01, 0x02, 0x07, 0x04, + 0x15, 0x16, 0x13, 0x10, 0x19, 0x1a, 0x1f, 0x1c, + }, + { + 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, 0x18, 0x1c, + 0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c, + 0x40, 0x44, 0x48, 0x4c, 0x50, 0x54, 0x58, 0x5c, + 0x60, 0x64, 0x68, 0x6c, 0x70, 0x74, 0x78, 0x7c, + 0x80, 0x84, 0x88, 0x8c, 0x90, 0x94, 0x98, 0x9c, + 0xa0, 0xa4, 0xa8, 0xac, 0xb0, 0xb4, 0xb8, 0xbc, + 0xc0, 0xc4, 0xc8, 0xcc, 0xd0, 0xd4, 0xd8, 0xdc, + 0xe0, 0xe4, 0xe8, 0xec, 0xf0, 0xf4, 0xf8, 0xfc, + 0x1d, 0x19, 0x15, 0x11, 0x0d, 0x09, 0x05, 0x01, + 0x3d, 0x39, 0x35, 0x31, 0x2d, 0x29, 0x25, 0x21, + 0x5d, 0x59, 0x55, 0x51, 0x4d, 0x49, 0x45, 0x41, + 0x7d, 0x79, 0x75, 0x71, 0x6d, 0x69, 0x65, 0x61, + 0x9d, 0x99, 0x95, 0x91, 0x8d, 0x89, 0x85, 0x81, + 0xbd, 0xb9, 0xb5, 0xb1, 0xad, 0xa9, 0xa5, 0xa1, + 0xdd, 0xd9, 0xd5, 0xd1, 0xcd, 0xc9, 0xc5, 0xc1, + 0xfd, 0xf9, 0xf5, 0xf1, 0xed, 0xe9, 0xe5, 0xe1, + 0x3a, 0x3e, 0x32, 0x36, 0x2a, 0x2e, 0x22, 0x26, + 0x1a, 0x1e, 0x12, 0x16, 0x0a, 0x0e, 0x02, 0x06, + 0x7a, 0x7e, 0x72, 0x76, 0x6a, 0x6e, 0x62, 0x66, + 0x5a, 0x5e, 0x52, 0x56, 0x4a, 0x4e, 0x42, 0x46, + 0xba, 0xbe, 0xb2, 0xb6, 0xaa, 0xae, 0xa2, 0xa6, + 0x9a, 0x9e, 0x92, 0x96, 0x8a, 0x8e, 0x82, 0x86, + 0xfa, 0xfe, 0xf2, 0xf6, 0xea, 0xee, 0xe2, 0xe6, + 0xda, 0xde, 0xd2, 0xd6, 0xca, 0xce, 0xc2, 0xc6, + 0x27, 0x23, 0x2f, 0x2b, 0x37, 0x33, 0x3f, 0x3b, + 0x07, 0x03, 0x0f, 0x0b, 0x17, 0x13, 0x1f, 0x1b, + 0x67, 0x63, 0x6f, 0x6b, 0x77, 0x73, 0x7f, 0x7b, + 0x47, 0x43, 0x4f, 0x4b, 0x57, 0x53, 0x5f, 0x5b, + 0xa7, 0xa3, 0xaf, 0xab, 0xb7, 0xb3, 0xbf, 0xbb, + 0x87, 0x83, 0x8f, 0x8b, 0x97, 0x93, 0x9f, 0x9b, + 0xe7, 0xe3, 0xef, 0xeb, 0xf7, 0xf3, 0xff, 0xfb, + 0xc7, 0xc3, 0xcf, 0xcb, 0xd7, 0xd3, 0xdf, 0xdb, + }, + { + 0x00, 0x05, 0x0a, 0x0f, 0x14, 0x11, 0x1e, 0x1b, + 0x28, 0x2d, 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33, + 0x50, 0x55, 0x5a, 0x5f, 0x44, 0x41, 0x4e, 0x4b, + 0x78, 0x7d, 0x72, 0x77, 0x6c, 0x69, 0x66, 0x63, + 0xa0, 0xa5, 0xaa, 0xaf, 0xb4, 0xb1, 0xbe, 0xbb, + 0x88, 0x8d, 0x82, 0x87, 0x9c, 0x99, 0x96, 0x93, + 0xf0, 0xf5, 0xfa, 0xff, 0xe4, 0xe1, 0xee, 0xeb, + 0xd8, 0xdd, 0xd2, 0xd7, 0xcc, 0xc9, 0xc6, 0xc3, + 0x5d, 0x58, 0x57, 0x52, 0x49, 0x4c, 0x43, 0x46, + 0x75, 0x70, 0x7f, 0x7a, 0x61, 0x64, 0x6b, 0x6e, + 0x0d, 0x08, 0x07, 0x02, 0x19, 0x1c, 0x13, 0x16, + 0x25, 0x20, 0x2f, 0x2a, 0x31, 0x34, 0x3b, 0x3e, + 0xfd, 0xf8, 0xf7, 0xf2, 0xe9, 0xec, 0xe3, 0xe6, + 0xd5, 0xd0, 0xdf, 0xda, 0xc1, 0xc4, 0xcb, 0xce, + 0xad, 0xa8, 0xa7, 0xa2, 0xb9, 0xbc, 0xb3, 0xb6, + 0x85, 0x80, 0x8f, 0x8a, 0x91, 0x94, 0x9b, 0x9e, + 0xba, 0xbf, 0xb0, 0xb5, 0xae, 0xab, 0xa4, 0xa1, + 0x92, 0x97, 0x98, 0x9d, 0x86, 0x83, 0x8c, 0x89, + 0xea, 0xef, 0xe0, 0xe5, 0xfe, 0xfb, 0xf4, 0xf1, + 0xc2, 0xc7, 0xc8, 0xcd, 0xd6, 0xd3, 0xdc, 0xd9, + 0x1a, 0x1f, 0x10, 0x15, 0x0e, 0x0b, 0x04, 0x01, + 0x32, 0x37, 0x38, 0x3d, 0x26, 0x23, 0x2c, 0x29, + 0x4a, 0x4f, 0x40, 0x45, 0x5e, 0x5b, 0x54, 0x51, + 0x62, 0x67, 0x68, 0x6d, 0x76, 0x73, 0x7c, 0x79, + 0xe7, 0xe2, 0xed, 0xe8, 0xf3, 0xf6, 0xf9, 0xfc, + 0xcf, 0xca, 0xc5, 0xc0, 0xdb, 0xde, 0xd1, 0xd4, + 0xb7, 0xb2, 0xbd, 0xb8, 0xa3, 0xa6, 0xa9, 0xac, + 0x9f, 0x9a, 0x95, 0x90, 0x8b, 0x8e, 0x81, 0x84, + 0x47, 0x42, 0x4d, 0x48, 0x53, 0x56, 0x59, 0x5c, + 0x6f, 0x6a, 0x65, 0x60, 0x7b, 0x7e, 0x71, 0x74, + 0x17, 0x12, 0x1d, 0x18, 0x03, 0x06, 0x09, 0x0c, + 0x3f, 0x3a, 0x35, 0x30, 0x2b, 0x2e, 0x21, 0x24, + }, + { + 0x00, 0x06, 0x0c, 0x0a, 0x18, 0x1e, 0x14, 0x12, + 0x30, 0x36, 0x3c, 0x3a, 0x28, 0x2e, 0x24, 0x22, + 0x60, 0x66, 0x6c, 0x6a, 0x78, 0x7e, 0x74, 0x72, + 0x50, 0x56, 0x5c, 0x5a, 0x48, 0x4e, 0x44, 0x42, + 0xc0, 0xc6, 0xcc, 0xca, 0xd8, 0xde, 0xd4, 0xd2, + 0xf0, 0xf6, 0xfc, 0xfa, 0xe8, 0xee, 0xe4, 0xe2, + 0xa0, 0xa6, 0xac, 0xaa, 0xb8, 0xbe, 0xb4, 0xb2, + 0x90, 0x96, 0x9c, 0x9a, 0x88, 0x8e, 0x84, 0x82, + 0x9d, 0x9b, 0x91, 0x97, 0x85, 0x83, 0x89, 0x8f, + 0xad, 0xab, 0xa1, 0xa7, 0xb5, 0xb3, 0xb9, 0xbf, + 0xfd, 0xfb, 0xf1, 0xf7, 0xe5, 0xe3, 0xe9, 0xef, + 0xcd, 0xcb, 0xc1, 0xc7, 0xd5, 0xd3, 0xd9, 0xdf, + 0x5d, 0x5b, 0x51, 0x57, 0x45, 0x43, 0x49, 0x4f, + 0x6d, 0x6b, 0x61, 0x67, 0x75, 0x73, 0x79, 0x7f, + 0x3d, 0x3b, 0x31, 0x37, 0x25, 0x23, 0x29, 0x2f, + 0x0d, 0x0b, 0x01, 0x07, 0x15, 0x13, 0x19, 0x1f, + 0x27, 0x21, 0x2b, 0x2d, 0x3f, 0x39, 0x33, 0x35, + 0x17, 0x11, 0x1b, 0x1d, 0x0f, 0x09, 0x03, 0x05, + 0x47, 0x41, 0x4b, 0x4d, 0x5f, 0x59, 0x53, 0x55, + 0x77, 0x71, 0x7b, 0x7d, 0x6f, 0x69, 0x63, 0x65, + 0xe7, 0xe1, 0xeb, 0xed, 0xff, 0xf9, 0xf3, 0xf5, + 0xd7, 0xd1, 0xdb, 0xdd, 0xcf, 0xc9, 0xc3, 0xc5, + 0x87, 0x81, 0x8b, 0x8d, 0x9f, 0x99, 0x93, 0x95, + 0xb7, 0xb1, 0xbb, 0xbd, 0xaf, 0xa9, 0xa3, 0xa5, + 0xba, 0xbc, 0xb6, 0xb0, 0xa2, 0xa4, 0xae, 0xa8, + 0x8a, 0x8c, 0x86, 0x80, 0x92, 0x94, 0x9e, 0x98, + 0xda, 0xdc, 0xd6, 0xd0, 0xc2, 0xc4, 0xce, 0xc8, + 0xea, 0xec, 0xe6, 0xe0, 0xf2, 0xf4, 0xfe, 0xf8, + 0x7a, 0x7c, 0x76, 0x70, 0x62, 0x64, 0x6e, 0x68, + 0x4a, 0x4c, 0x46, 0x40, 0x52, 0x54, 0x5e, 0x58, + 0x1a, 0x1c, 0x16, 0x10, 0x02, 0x04, 0x0e, 0x08, + 0x2a, 0x2c, 0x26, 0x20, 0x32, 0x34, 0x3e, 0x38, + }, + { + 0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, + 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, + 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, + 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, + 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, + 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, + 0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, + 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd, + 0xdd, 0xda, 0xd3, 0xd4, 0xc1, 0xc6, 0xcf, 0xc8, + 0xe5, 0xe2, 0xeb, 0xec, 0xf9, 0xfe, 0xf7, 0xf0, + 0xad, 0xaa, 0xa3, 0xa4, 0xb1, 0xb6, 0xbf, 0xb8, + 0x95, 0x92, 0x9b, 0x9c, 0x89, 0x8e, 0x87, 0x80, + 0x3d, 0x3a, 0x33, 0x34, 0x21, 0x26, 0x2f, 0x28, + 0x05, 0x02, 0x0b, 0x0c, 0x19, 0x1e, 0x17, 0x10, + 0x4d, 0x4a, 0x43, 0x44, 0x51, 0x56, 0x5f, 0x58, + 0x75, 0x72, 0x7b, 0x7c, 0x69, 0x6e, 0x67, 0x60, + 0xa7, 0xa0, 0xa9, 0xae, 0xbb, 0xbc, 0xb5, 0xb2, + 0x9f, 0x98, 0x91, 0x96, 0x83, 0x84, 0x8d, 0x8a, + 0xd7, 0xd0, 0xd9, 0xde, 0xcb, 0xcc, 0xc5, 0xc2, + 0xef, 0xe8, 0xe1, 0xe6, 0xf3, 0xf4, 0xfd, 0xfa, + 0x47, 0x40, 0x49, 0x4e, 0x5b, 0x5c, 0x55, 0x52, + 0x7f, 0x78, 0x71, 0x76, 0x63, 0x64, 0x6d, 0x6a, + 0x37, 0x30, 0x39, 0x3e, 0x2b, 0x2c, 0x25, 0x22, + 0x0f, 0x08, 0x01, 0x06, 0x13, 0x14, 0x1d, 0x1a, + 0x7a, 0x7d, 0x74, 0x73, 0x66, 0x61, 0x68, 0x6f, + 0x42, 0x45, 0x4c, 0x4b, 0x5e, 0x59, 0x50, 0x57, + 0x0a, 0x0d, 0x04, 0x03, 0x16, 0x11, 0x18, 0x1f, + 0x32, 0x35, 0x3c, 0x3b, 0x2e, 0x29, 0x20, 0x27, + 0x9a, 0x9d, 0x94, 0x93, 0x86, 0x81, 0x88, 0x8f, + 0xa2, 0xa5, 0xac, 0xab, 0xbe, 0xb9, 0xb0, 0xb7, + 0xea, 0xed, 0xe4, 0xe3, 0xf6, 0xf1, 0xf8, 0xff, + 0xd2, 0xd5, 0xdc, 0xdb, 0xce, 0xc9, 0xc0, 0xc7, + }, + { + 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, + 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78, + 0x80, 0x88, 0x90, 0x98, 0xa0, 0xa8, 0xb0, 0xb8, + 0xc0, 0xc8, 0xd0, 0xd8, 0xe0, 0xe8, 0xf0, 0xf8, + 0x1d, 0x15, 0x0d, 0x05, 0x3d, 0x35, 0x2d, 0x25, + 0x5d, 0x55, 0x4d, 0x45, 0x7d, 0x75, 0x6d, 0x65, + 0x9d, 0x95, 0x8d, 0x85, 0xbd, 0xb5, 0xad, 0xa5, + 0xdd, 0xd5, 0xcd, 0xc5, 0xfd, 0xf5, 0xed, 0xe5, + 0x3a, 0x32, 0x2a, 0x22, 0x1a, 0x12, 0x0a, 0x02, + 0x7a, 0x72, 0x6a, 0x62, 0x5a, 0x52, 0x4a, 0x42, + 0xba, 0xb2, 0xaa, 0xa2, 0x9a, 0x92, 0x8a, 0x82, + 0xfa, 0xf2, 0xea, 0xe2, 0xda, 0xd2, 0xca, 0xc2, + 0x27, 0x2f, 0x37, 0x3f, 0x07, 0x0f, 0x17, 0x1f, + 0x67, 0x6f, 0x77, 0x7f, 0x47, 0x4f, 0x57, 0x5f, + 0xa7, 0xaf, 0xb7, 0xbf, 0x87, 0x8f, 0x97, 0x9f, + 0xe7, 0xef, 0xf7, 0xff, 0xc7, 0xcf, 0xd7, 0xdf, + 0x74, 0x7c, 0x64, 0x6c, 0x54, 0x5c, 0x44, 0x4c, + 0x34, 0x3c, 0x24, 0x2c, 0x14, 0x1c, 0x04, 0x0c, + 0xf4, 0xfc, 0xe4, 0xec, 0xd4, 0xdc, 0xc4, 0xcc, + 0xb4, 0xbc, 0xa4, 0xac, 0x94, 0x9c, 0x84, 0x8c, + 0x69, 0x61, 0x79, 0x71, 0x49, 0x41, 0x59, 0x51, + 0x29, 0x21, 0x39, 0x31, 0x09, 0x01, 0x19, 0x11, + 0xe9, 0xe1, 0xf9, 0xf1, 0xc9, 0xc1, 0xd9, 0xd1, + 0xa9, 0xa1, 0xb9, 0xb1, 0x89, 0x81, 0x99, 0x91, + 0x4e, 0x46, 0x5e, 0x56, 0x6e, 0x66, 0x7e, 0x76, + 0x0e, 0x06, 0x1e, 0x16, 0x2e, 0x26, 0x3e, 0x36, + 0xce, 0xc6, 0xde, 0xd6, 0xee, 0xe6, 0xfe, 0xf6, + 0x8e, 0x86, 0x9e, 0x96, 0xae, 0xa6, 0xbe, 0xb6, + 0x53, 0x5b, 0x43, 0x4b, 0x73, 0x7b, 0x63, 0x6b, + 0x13, 0x1b, 0x03, 0x0b, 0x33, 0x3b, 0x23, 0x2b, + 0xd3, 0xdb, 0xc3, 0xcb, 0xf3, 0xfb, 0xe3, 0xeb, + 0x93, 0x9b, 0x83, 0x8b, 0xb3, 0xbb, 0xa3, 0xab, + }, + { + 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, + 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, + 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, + 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, + 0x3d, 0x34, 0x2f, 0x26, 0x19, 0x10, 0x0b, 0x02, + 0x75, 0x7c, 0x67, 0x6e, 0x51, 0x58, 0x43, 0x4a, + 0xad, 0xa4, 0xbf, 0xb6, 0x89, 0x80, 0x9b, 0x92, + 0xe5, 0xec, 0xf7, 0xfe, 0xc1, 0xc8, 0xd3, 0xda, + 0x7a, 0x73, 0x68, 0x61, 0x5e, 0x57, 0x4c, 0x45, + 0x32, 0x3b, 0x20, 0x29, 0x16, 0x1f, 0x04, 0x0d, + 0xea, 0xe3, 0xf8, 0xf1, 0xce, 0xc7, 0xdc, 0xd5, + 0xa2, 0xab, 0xb0, 0xb9, 0x86, 0x8f, 0x94, 0x9d, + 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, + 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, + 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, + 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, + 0xf4, 0xfd, 0xe6, 0xef, 0xd0, 0xd9, 0xc2, 0xcb, + 0xbc, 0xb5, 0xae, 0xa7, 0x98, 0x91, 0x8a, 0x83, + 0x64, 0x6d, 0x76, 0x7f, 0x40, 0x49, 0x52, 0x5b, + 0x2c, 0x25, 0x3e, 0x37, 0x08, 0x01, 0x1a, 0x13, + 0xc9, 0xc0, 0xdb, 0xd2, 0xed, 0xe4, 0xff, 0xf6, + 0x81, 0x88, 0x93, 0x9a, 0xa5, 0xac, 0xb7, 0xbe, + 0x59, 0x50, 0x4b, 0x42, 0x7d, 0x74, 0x6f, 0x66, + 0x11, 0x18, 0x03, 0x0a, 0x35, 0x3c, 0x27, 0x2e, + 0x8e, 0x87, 0x9c, 0x95, 0xaa, 0xa3, 0xb8, 0xb1, + 0xc6, 0xcf, 0xd4, 0xdd, 0xe2, 0xeb, 0xf0, 0xf9, + 0x1e, 0x17, 0x0c, 0x05, 0x3a, 0x33, 0x28, 0x21, + 0x56, 0x5f, 0x44, 0x4d, 0x72, 0x7b, 0x60, 0x69, + 0xb3, 0xba, 0xa1, 0xa8, 0x97, 0x9e, 0x85, 0x8c, + 0xfb, 0xf2, 0xe9, 0xe0, 0xdf, 0xd6, 0xcd, 0xc4, + 0x23, 0x2a, 0x31, 0x38, 0x07, 0x0e, 0x15, 0x1c, + 0x6b, 0x62, 0x79, 0x70, 0x4f, 0x46, 0x5d, 0x54, + }, + { + 0x00, 0x0a, 0x14, 0x1e, 0x28, 0x22, 0x3c, 0x36, + 0x50, 0x5a, 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66, + 0xa0, 0xaa, 0xb4, 0xbe, 0x88, 0x82, 0x9c, 0x96, + 0xf0, 0xfa, 0xe4, 0xee, 0xd8, 0xd2, 0xcc, 0xc6, + 0x5d, 0x57, 0x49, 0x43, 0x75, 0x7f, 0x61, 0x6b, + 0x0d, 0x07, 0x19, 0x13, 0x25, 0x2f, 0x31, 0x3b, + 0xfd, 0xf7, 0xe9, 0xe3, 0xd5, 0xdf, 0xc1, 0xcb, + 0xad, 0xa7, 0xb9, 0xb3, 0x85, 0x8f, 0x91, 0x9b, + 0xba, 0xb0, 0xae, 0xa4, 0x92, 0x98, 0x86, 0x8c, + 0xea, 0xe0, 0xfe, 0xf4, 0xc2, 0xc8, 0xd6, 0xdc, + 0x1a, 0x10, 0x0e, 0x04, 0x32, 0x38, 0x26, 0x2c, + 0x4a, 0x40, 0x5e, 0x54, 0x62, 0x68, 0x76, 0x7c, + 0xe7, 0xed, 0xf3, 0xf9, 0xcf, 0xc5, 0xdb, 0xd1, + 0xb7, 0xbd, 0xa3, 0xa9, 0x9f, 0x95, 0x8b, 0x81, + 0x47, 0x4d, 0x53, 0x59, 0x6f, 0x65, 0x7b, 0x71, + 0x17, 0x1d, 0x03, 0x09, 0x3f, 0x35, 0x2b, 0x21, + 0x69, 0x63, 0x7d, 0x77, 0x41, 0x4b, 0x55, 0x5f, + 0x39, 0x33, 0x2d, 0x27, 0x11, 0x1b, 0x05, 0x0f, + 0xc9, 0xc3, 0xdd, 0xd7, 0xe1, 0xeb, 0xf5, 0xff, + 0x99, 0x93, 0x8d, 0x87, 0xb1, 0xbb, 0xa5, 0xaf, + 0x34, 0x3e, 0x20, 0x2a, 0x1c, 0x16, 0x08, 0x02, + 0x64, 0x6e, 0x70, 0x7a, 0x4c, 0x46, 0x58, 0x52, + 0x94, 0x9e, 0x80, 0x8a, 0xbc, 0xb6, 0xa8, 0xa2, + 0xc4, 0xce, 0xd0, 0xda, 0xec, 0xe6, 0xf8, 0xf2, + 0xd3, 0xd9, 0xc7, 0xcd, 0xfb, 0xf1, 0xef, 0xe5, + 0x83, 0x89, 0x97, 0x9d, 0xab, 0xa1, 0xbf, 0xb5, + 0x73, 0x79, 0x67, 0x6d, 0x5b, 0x51, 0x4f, 0x45, + 0x23, 0x29, 0x37, 0x3d, 0x0b, 0x01, 0x1f, 0x15, + 0x8e, 0x84, 0x9a, 0x90, 0xa6, 0xac, 0xb2, 0xb8, + 0xde, 0xd4, 0xca, 0xc0, 0xf6, 0xfc, 0xe2, 0xe8, + 0x2e, 0x24, 0x3a, 0x30, 0x06, 0x0c, 0x12, 0x18, + 0x7e, 0x74, 0x6a, 0x60, 0x56, 0x5c, 0x42, 0x48, + }, + { + 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, + 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, + 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, + 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, + 0x7d, 0x76, 0x6b, 0x60, 0x51, 0x5a, 0x47, 0x4c, + 0x25, 0x2e, 0x33, 0x38, 0x09, 0x02, 0x1f, 0x14, + 0xcd, 0xc6, 0xdb, 0xd0, 0xe1, 0xea, 0xf7, 0xfc, + 0x95, 0x9e, 0x83, 0x88, 0xb9, 0xb2, 0xaf, 0xa4, + 0xfa, 0xf1, 0xec, 0xe7, 0xd6, 0xdd, 0xc0, 0xcb, + 0xa2, 0xa9, 0xb4, 0xbf, 0x8e, 0x85, 0x98, 0x93, + 0x4a, 0x41, 0x5c, 0x57, 0x66, 0x6d, 0x70, 0x7b, + 0x12, 0x19, 0x04, 0x0f, 0x3e, 0x35, 0x28, 0x23, + 0x87, 0x8c, 0x91, 0x9a, 0xab, 0xa0, 0xbd, 0xb6, + 0xdf, 0xd4, 0xc9, 0xc2, 0xf3, 0xf8, 0xe5, 0xee, + 0x37, 0x3c, 0x21, 0x2a, 0x1b, 0x10, 0x0d, 0x06, + 0x6f, 0x64, 0x79, 0x72, 0x43, 0x48, 0x55, 0x5e, + 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, + 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, + 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, + 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, + 0x94, 0x9f, 0x82, 0x89, 0xb8, 0xb3, 0xae, 0xa5, + 0xcc, 0xc7, 0xda, 0xd1, 0xe0, 0xeb, 0xf6, 0xfd, + 0x24, 0x2f, 0x32, 0x39, 0x08, 0x03, 0x1e, 0x15, + 0x7c, 0x77, 0x6a, 0x61, 0x50, 0x5b, 0x46, 0x4d, + 0x13, 0x18, 0x05, 0x0e, 0x3f, 0x34, 0x29, 0x22, + 0x4b, 0x40, 0x5d, 0x56, 0x67, 0x6c, 0x71, 0x7a, + 0xa3, 0xa8, 0xb5, 0xbe, 0x8f, 0x84, 0x99, 0x92, + 0xfb, 0xf0, 0xed, 0xe6, 0xd7, 0xdc, 0xc1, 0xca, + 0x6e, 0x65, 0x78, 0x73, 0x42, 0x49, 0x54, 0x5f, + 0x36, 0x3d, 0x20, 0x2b, 0x1a, 0x11, 0x0c, 0x07, + 0xde, 0xd5, 0xc8, 0xc3, 0xf2, 0xf9, 0xe4, 0xef, + 0x86, 0x8d, 0x90, 0x9b, 0xaa, 0xa1, 0xbc, 0xb7, + }, + { + 0x00, 0x0c, 0x18, 0x14, 0x30, 0x3c, 0x28, 0x24, + 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44, + 0xc0, 0xcc, 0xd8, 0xd4, 0xf0, 0xfc, 0xe8, 0xe4, + 0xa0, 0xac, 0xb8, 0xb4, 0x90, 0x9c, 0x88, 0x84, + 0x9d, 0x91, 0x85, 0x89, 0xad, 0xa1, 0xb5, 0xb9, + 0xfd, 0xf1, 0xe5, 0xe9, 0xcd, 0xc1, 0xd5, 0xd9, + 0x5d, 0x51, 0x45, 0x49, 0x6d, 0x61, 0x75, 0x79, + 0x3d, 0x31, 0x25, 0x29, 0x0d, 0x01, 0x15, 0x19, + 0x27, 0x2b, 0x3f, 0x33, 0x17, 0x1b, 0x0f, 0x03, + 0x47, 0x4b, 0x5f, 0x53, 0x77, 0x7b, 0x6f, 0x63, + 0xe7, 0xeb, 0xff, 0xf3, 0xd7, 0xdb, 0xcf, 0xc3, + 0x87, 0x8b, 0x9f, 0x93, 0xb7, 0xbb, 0xaf, 0xa3, + 0xba, 0xb6, 0xa2, 0xae, 0x8a, 0x86, 0x92, 0x9e, + 0xda, 0xd6, 0xc2, 0xce, 0xea, 0xe6, 0xf2, 0xfe, + 0x7a, 0x76, 0x62, 0x6e, 0x4a, 0x46, 0x52, 0x5e, + 0x1a, 0x16, 0x02, 0x0e, 0x2a, 0x26, 0x32, 0x3e, + 0x4e, 0x42, 0x56, 0x5a, 0x7e, 0x72, 0x66, 0x6a, + 0x2e, 0x22, 0x36, 0x3a, 0x1e, 0x12, 0x06, 0x0a, + 0x8e, 0x82, 0x96, 0x9a, 0xbe, 0xb2, 0xa6, 0xaa, + 0xee, 0xe2, 0xf6, 0xfa, 0xde, 0xd2, 0xc6, 0xca, + 0xd3, 0xdf, 0xcb, 0xc7, 0xe3, 0xef, 0xfb, 0xf7, + 0xb3, 0xbf, 0xab, 0xa7, 0x83, 0x8f, 0x9b, 0x97, + 0x13, 0x1f, 0x0b, 0x07, 0x23, 0x2f, 0x3b, 0x37, + 0x73, 0x7f, 0x6b, 0x67, 0x43, 0x4f, 0x5b, 0x57, + 0x69, 0x65, 0x71, 0x7d, 0x59, 0x55, 0x41, 0x4d, + 0x09, 0x05, 0x11, 0x1d, 0x39, 0x35, 0x21, 0x2d, + 0xa9, 0xa5, 0xb1, 0xbd, 0x99, 0x95, 0x81, 0x8d, + 0xc9, 0xc5, 0xd1, 0xdd, 0xf9, 0xf5, 0xe1, 0xed, + 0xf4, 0xf8, 0xec, 0xe0, 0xc4, 0xc8, 0xdc, 0xd0, + 0x94, 0x98, 0x8c, 0x80, 0xa4, 0xa8, 0xbc, 0xb0, + 0x34, 0x38, 0x2c, 0x20, 0x04, 0x08, 0x1c, 0x10, + 0x54, 0x58, 0x4c, 0x40, 0x64, 0x68, 0x7c, 0x70, + }, + { + 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, + 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, + 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, + 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, + 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, + 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, + 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, + 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, + 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, + 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, + 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, + 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, + 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, + 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, + 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, + 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, + 0xce, 0xc3, 0xd4, 0xd9, 0xfa, 0xf7, 0xe0, 0xed, + 0xa6, 0xab, 0xbc, 0xb1, 0x92, 0x9f, 0x88, 0x85, + 0x1e, 0x13, 0x04, 0x09, 0x2a, 0x27, 0x30, 0x3d, + 0x76, 0x7b, 0x6c, 0x61, 0x42, 0x4f, 0x58, 0x55, + 0x73, 0x7e, 0x69, 0x64, 0x47, 0x4a, 0x5d, 0x50, + 0x1b, 0x16, 0x01, 0x0c, 0x2f, 0x22, 0x35, 0x38, + 0xa3, 0xae, 0xb9, 0xb4, 0x97, 0x9a, 0x8d, 0x80, + 0xcb, 0xc6, 0xd1, 0xdc, 0xff, 0xf2, 0xe5, 0xe8, + 0xa9, 0xa4, 0xb3, 0xbe, 0x9d, 0x90, 0x87, 0x8a, + 0xc1, 0xcc, 0xdb, 0xd6, 0xf5, 0xf8, 0xef, 0xe2, + 0x79, 0x74, 0x63, 0x6e, 0x4d, 0x40, 0x57, 0x5a, + 0x11, 0x1c, 0x0b, 0x06, 0x25, 0x28, 0x3f, 0x32, + 0x14, 0x19, 0x0e, 0x03, 0x20, 0x2d, 0x3a, 0x37, + 0x7c, 0x71, 0x66, 0x6b, 0x48, 0x45, 0x52, 0x5f, + 0xc4, 0xc9, 0xde, 0xd3, 0xf0, 0xfd, 0xea, 0xe7, + 0xac, 0xa1, 0xb6, 0xbb, 0x98, 0x95, 0x82, 0x8f, + }, + { + 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, + 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, + 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, + 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, + 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, + 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, + 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, + 0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, + 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d, + 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, + 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, + 0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, + 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, + 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, + 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, + 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, + 0x53, 0x5d, 0x4f, 0x41, 0x6b, 0x65, 0x77, 0x79, + 0x23, 0x2d, 0x3f, 0x31, 0x1b, 0x15, 0x07, 0x09, + 0xb3, 0xbd, 0xaf, 0xa1, 0x8b, 0x85, 0x97, 0x99, + 0xc3, 0xcd, 0xdf, 0xd1, 0xfb, 0xf5, 0xe7, 0xe9, + 0x8e, 0x80, 0x92, 0x9c, 0xb6, 0xb8, 0xaa, 0xa4, + 0xfe, 0xf0, 0xe2, 0xec, 0xc6, 0xc8, 0xda, 0xd4, + 0x6e, 0x60, 0x72, 0x7c, 0x56, 0x58, 0x4a, 0x44, + 0x1e, 0x10, 0x02, 0x0c, 0x26, 0x28, 0x3a, 0x34, + 0xf4, 0xfa, 0xe8, 0xe6, 0xcc, 0xc2, 0xd0, 0xde, + 0x84, 0x8a, 0x98, 0x96, 0xbc, 0xb2, 0xa0, 0xae, + 0x14, 0x1a, 0x08, 0x06, 0x2c, 0x22, 0x30, 0x3e, + 0x64, 0x6a, 0x78, 0x76, 0x5c, 0x52, 0x40, 0x4e, + 0x29, 0x27, 0x35, 0x3b, 0x11, 0x1f, 0x0d, 0x03, + 0x59, 0x57, 0x45, 0x4b, 0x61, 0x6f, 0x7d, 0x73, + 0xc9, 0xc7, 0xd5, 0xdb, 0xf1, 0xff, 0xed, 0xe3, + 0xb9, 0xb7, 0xa5, 0xab, 0x81, 0x8f, 0x9d, 0x93, + }, + { + 0x00, 0x0f, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, + 0x78, 0x77, 0x66, 0x69, 0x44, 0x4b, 0x5a, 0x55, + 0xf0, 0xff, 0xee, 0xe1, 0xcc, 0xc3, 0xd2, 0xdd, + 0x88, 0x87, 0x96, 0x99, 0xb4, 0xbb, 0xaa, 0xa5, + 0xfd, 0xf2, 0xe3, 0xec, 0xc1, 0xce, 0xdf, 0xd0, + 0x85, 0x8a, 0x9b, 0x94, 0xb9, 0xb6, 0xa7, 0xa8, + 0x0d, 0x02, 0x13, 0x1c, 0x31, 0x3e, 0x2f, 0x20, + 0x75, 0x7a, 0x6b, 0x64, 0x49, 0x46, 0x57, 0x58, + 0xe7, 0xe8, 0xf9, 0xf6, 0xdb, 0xd4, 0xc5, 0xca, + 0x9f, 0x90, 0x81, 0x8e, 0xa3, 0xac, 0xbd, 0xb2, + 0x17, 0x18, 0x09, 0x06, 0x2b, 0x24, 0x35, 0x3a, + 0x6f, 0x60, 0x71, 0x7e, 0x53, 0x5c, 0x4d, 0x42, + 0x1a, 0x15, 0x04, 0x0b, 0x26, 0x29, 0x38, 0x37, + 0x62, 0x6d, 0x7c, 0x73, 0x5e, 0x51, 0x40, 0x4f, + 0xea, 0xe5, 0xf4, 0xfb, 0xd6, 0xd9, 0xc8, 0xc7, + 0x92, 0x9d, 0x8c, 0x83, 0xae, 0xa1, 0xb0, 0xbf, + 0xd3, 0xdc, 0xcd, 0xc2, 0xef, 0xe0, 0xf1, 0xfe, + 0xab, 0xa4, 0xb5, 0xba, 0x97, 0x98, 0x89, 0x86, + 0x23, 0x2c, 0x3d, 0x32, 0x1f, 0x10, 0x01, 0x0e, + 0x5b, 0x54, 0x45, 0x4a, 0x67, 0x68, 0x79, 0x76, + 0x2e, 0x21, 0x30, 0x3f, 0x12, 0x1d, 0x0c, 0x03, + 0x56, 0x59, 0x48, 0x47, 0x6a, 0x65, 0x74, 0x7b, + 0xde, 0xd1, 0xc0, 0xcf, 0xe2, 0xed, 0xfc, 0xf3, + 0xa6, 0xa9, 0xb8, 0xb7, 0x9a, 0x95, 0x84, 0x8b, + 0x34, 0x3b, 0x2a, 0x25, 0x08, 0x07, 0x16, 0x19, + 0x4c, 0x43, 0x52, 0x5d, 0x70, 0x7f, 0x6e, 0x61, + 0xc4, 0xcb, 0xda, 0xd5, 0xf8, 0xf7, 0xe6, 0xe9, + 0xbc, 0xb3, 0xa2, 0xad, 0x80, 0x8f, 0x9e, 0x91, + 0xc9, 0xc6, 0xd7, 0xd8, 0xf5, 0xfa, 0xeb, 0xe4, + 0xb1, 0xbe, 0xaf, 0xa0, 0x8d, 0x82, 0x93, 0x9c, + 0x39, 0x36, 0x27, 0x28, 0x05, 0x0a, 0x1b, 0x14, + 0x41, 0x4e, 0x5f, 0x50, 0x7d, 0x72, 0x63, 0x6c, + }, + { + 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0, + 0x1d, 0x0d, 0x3d, 0x2d, 0x5d, 0x4d, 0x7d, 0x6d, + 0x9d, 0x8d, 0xbd, 0xad, 0xdd, 0xcd, 0xfd, 0xed, + 0x3a, 0x2a, 0x1a, 0x0a, 0x7a, 0x6a, 0x5a, 0x4a, + 0xba, 0xaa, 0x9a, 0x8a, 0xfa, 0xea, 0xda, 0xca, + 0x27, 0x37, 0x07, 0x17, 0x67, 0x77, 0x47, 0x57, + 0xa7, 0xb7, 0x87, 0x97, 0xe7, 0xf7, 0xc7, 0xd7, + 0x74, 0x64, 0x54, 0x44, 0x34, 0x24, 0x14, 0x04, + 0xf4, 0xe4, 0xd4, 0xc4, 0xb4, 0xa4, 0x94, 0x84, + 0x69, 0x79, 0x49, 0x59, 0x29, 0x39, 0x09, 0x19, + 0xe9, 0xf9, 0xc9, 0xd9, 0xa9, 0xb9, 0x89, 0x99, + 0x4e, 0x5e, 0x6e, 0x7e, 0x0e, 0x1e, 0x2e, 0x3e, + 0xce, 0xde, 0xee, 0xfe, 0x8e, 0x9e, 0xae, 0xbe, + 0x53, 0x43, 0x73, 0x63, 0x13, 0x03, 0x33, 0x23, + 0xd3, 0xc3, 0xf3, 0xe3, 0x93, 0x83, 0xb3, 0xa3, + 0xe8, 0xf8, 0xc8, 0xd8, 0xa8, 0xb8, 0x88, 0x98, + 0x68, 0x78, 0x48, 0x58, 0x28, 0x38, 0x08, 0x18, + 0xf5, 0xe5, 0xd5, 0xc5, 0xb5, 0xa5, 0x95, 0x85, + 0x75, 0x65, 0x55, 0x45, 0x35, 0x25, 0x15, 0x05, + 0xd2, 0xc2, 0xf2, 0xe2, 0x92, 0x82, 0xb2, 0xa2, + 0x52, 0x42, 0x72, 0x62, 0x12, 0x02, 0x32, 0x22, + 0xcf, 0xdf, 0xef, 0xff, 0x8f, 0x9f, 0xaf, 0xbf, + 0x4f, 0x5f, 0x6f, 0x7f, 0x0f, 0x1f, 0x2f, 0x3f, + 0x9c, 0x8c, 0xbc, 0xac, 0xdc, 0xcc, 0xfc, 0xec, + 0x1c, 0x0c, 0x3c, 0x2c, 0x5c, 0x4c, 0x7c, 0x6c, + 0x81, 0x91, 0xa1, 0xb1, 0xc1, 0xd1, 0xe1, 0xf1, + 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, + 0xa6, 0xb6, 0x86, 0x96, 0xe6, 0xf6, 0xc6, 0xd6, + 0x26, 0x36, 0x06, 0x16, 0x66, 0x76, 0x46, 0x56, + 0xbb, 0xab, 0x9b, 0x8b, 0xfb, 0xeb, 0xdb, 0xcb, + 0x3b, 0x2b, 0x1b, 0x0b, 0x7b, 0x6b, 0x5b, 0x4b, + }, + { + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, + 0x0d, 0x1c, 0x2f, 0x3e, 0x49, 0x58, 0x6b, 0x7a, + 0x85, 0x94, 0xa7, 0xb6, 0xc1, 0xd0, 0xe3, 0xf2, + 0x1a, 0x0b, 0x38, 0x29, 0x5e, 0x4f, 0x7c, 0x6d, + 0x92, 0x83, 0xb0, 0xa1, 0xd6, 0xc7, 0xf4, 0xe5, + 0x17, 0x06, 0x35, 0x24, 0x53, 0x42, 0x71, 0x60, + 0x9f, 0x8e, 0xbd, 0xac, 0xdb, 0xca, 0xf9, 0xe8, + 0x34, 0x25, 0x16, 0x07, 0x70, 0x61, 0x52, 0x43, + 0xbc, 0xad, 0x9e, 0x8f, 0xf8, 0xe9, 0xda, 0xcb, + 0x39, 0x28, 0x1b, 0x0a, 0x7d, 0x6c, 0x5f, 0x4e, + 0xb1, 0xa0, 0x93, 0x82, 0xf5, 0xe4, 0xd7, 0xc6, + 0x2e, 0x3f, 0x0c, 0x1d, 0x6a, 0x7b, 0x48, 0x59, + 0xa6, 0xb7, 0x84, 0x95, 0xe2, 0xf3, 0xc0, 0xd1, + 0x23, 0x32, 0x01, 0x10, 0x67, 0x76, 0x45, 0x54, + 0xab, 0xba, 0x89, 0x98, 0xef, 0xfe, 0xcd, 0xdc, + 0x68, 0x79, 0x4a, 0x5b, 0x2c, 0x3d, 0x0e, 0x1f, + 0xe0, 0xf1, 0xc2, 0xd3, 0xa4, 0xb5, 0x86, 0x97, + 0x65, 0x74, 0x47, 0x56, 0x21, 0x30, 0x03, 0x12, + 0xed, 0xfc, 0xcf, 0xde, 0xa9, 0xb8, 0x8b, 0x9a, + 0x72, 0x63, 0x50, 0x41, 0x36, 0x27, 0x14, 0x05, + 0xfa, 0xeb, 0xd8, 0xc9, 0xbe, 0xaf, 0x9c, 0x8d, + 0x7f, 0x6e, 0x5d, 0x4c, 0x3b, 0x2a, 0x19, 0x08, + 0xf7, 0xe6, 0xd5, 0xc4, 0xb3, 0xa2, 0x91, 0x80, + 0x5c, 0x4d, 0x7e, 0x6f, 0x18, 0x09, 0x3a, 0x2b, + 0xd4, 0xc5, 0xf6, 0xe7, 0x90, 0x81, 0xb2, 0xa3, + 0x51, 0x40, 0x73, 0x62, 0x15, 0x04, 0x37, 0x26, + 0xd9, 0xc8, 0xfb, 0xea, 0x9d, 0x8c, 0xbf, 0xae, + 0x46, 0x57, 0x64, 0x75, 0x02, 0x13, 0x20, 0x31, + 0xce, 0xdf, 0xec, 0xfd, 0x8a, 0x9b, 0xa8, 0xb9, + 0x4b, 0x5a, 0x69, 0x78, 0x0f, 0x1e, 0x2d, 0x3c, + 0xc3, 0xd2, 0xe1, 0xf0, 0x87, 0x96, 0xa5, 0xb4, + }, + { + 0x00, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, + 0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee, + 0x3d, 0x2f, 0x19, 0x0b, 0x75, 0x67, 0x51, 0x43, + 0xad, 0xbf, 0x89, 0x9b, 0xe5, 0xf7, 0xc1, 0xd3, + 0x7a, 0x68, 0x5e, 0x4c, 0x32, 0x20, 0x16, 0x04, + 0xea, 0xf8, 0xce, 0xdc, 0xa2, 0xb0, 0x86, 0x94, + 0x47, 0x55, 0x63, 0x71, 0x0f, 0x1d, 0x2b, 0x39, + 0xd7, 0xc5, 0xf3, 0xe1, 0x9f, 0x8d, 0xbb, 0xa9, + 0xf4, 0xe6, 0xd0, 0xc2, 0xbc, 0xae, 0x98, 0x8a, + 0x64, 0x76, 0x40, 0x52, 0x2c, 0x3e, 0x08, 0x1a, + 0xc9, 0xdb, 0xed, 0xff, 0x81, 0x93, 0xa5, 0xb7, + 0x59, 0x4b, 0x7d, 0x6f, 0x11, 0x03, 0x35, 0x27, + 0x8e, 0x9c, 0xaa, 0xb8, 0xc6, 0xd4, 0xe2, 0xf0, + 0x1e, 0x0c, 0x3a, 0x28, 0x56, 0x44, 0x72, 0x60, + 0xb3, 0xa1, 0x97, 0x85, 0xfb, 0xe9, 0xdf, 0xcd, + 0x23, 0x31, 0x07, 0x15, 0x6b, 0x79, 0x4f, 0x5d, + 0xf5, 0xe7, 0xd1, 0xc3, 0xbd, 0xaf, 0x99, 0x8b, + 0x65, 0x77, 0x41, 0x53, 0x2d, 0x3f, 0x09, 0x1b, + 0xc8, 0xda, 0xec, 0xfe, 0x80, 0x92, 0xa4, 0xb6, + 0x58, 0x4a, 0x7c, 0x6e, 0x10, 0x02, 0x34, 0x26, + 0x8f, 0x9d, 0xab, 0xb9, 0xc7, 0xd5, 0xe3, 0xf1, + 0x1f, 0x0d, 0x3b, 0x29, 0x57, 0x45, 0x73, 0x61, + 0xb2, 0xa0, 0x96, 0x84, 0xfa, 0xe8, 0xde, 0xcc, + 0x22, 0x30, 0x06, 0x14, 0x6a, 0x78, 0x4e, 0x5c, + 0x01, 0x13, 0x25, 0x37, 0x49, 0x5b, 0x6d, 0x7f, + 0x91, 0x83, 0xb5, 0xa7, 0xd9, 0xcb, 0xfd, 0xef, + 0x3c, 0x2e, 0x18, 0x0a, 0x74, 0x66, 0x50, 0x42, + 0xac, 0xbe, 0x88, 0x9a, 0xe4, 0xf6, 0xc0, 0xd2, + 0x7b, 0x69, 0x5f, 0x4d, 0x33, 0x21, 0x17, 0x05, + 0xeb, 0xf9, 0xcf, 0xdd, 0xa3, 0xb1, 0x87, 0x95, + 0x46, 0x54, 0x62, 0x70, 0x0e, 0x1c, 0x2a, 0x38, + 0xd6, 0xc4, 0xf2, 0xe0, 0x9e, 0x8c, 0xba, 0xa8, + }, + { + 0x00, 0x13, 0x26, 0x35, 0x4c, 0x5f, 0x6a, 0x79, + 0x98, 0x8b, 0xbe, 0xad, 0xd4, 0xc7, 0xf2, 0xe1, + 0x2d, 0x3e, 0x0b, 0x18, 0x61, 0x72, 0x47, 0x54, + 0xb5, 0xa6, 0x93, 0x80, 0xf9, 0xea, 0xdf, 0xcc, + 0x5a, 0x49, 0x7c, 0x6f, 0x16, 0x05, 0x30, 0x23, + 0xc2, 0xd1, 0xe4, 0xf7, 0x8e, 0x9d, 0xa8, 0xbb, + 0x77, 0x64, 0x51, 0x42, 0x3b, 0x28, 0x1d, 0x0e, + 0xef, 0xfc, 0xc9, 0xda, 0xa3, 0xb0, 0x85, 0x96, + 0xb4, 0xa7, 0x92, 0x81, 0xf8, 0xeb, 0xde, 0xcd, + 0x2c, 0x3f, 0x0a, 0x19, 0x60, 0x73, 0x46, 0x55, + 0x99, 0x8a, 0xbf, 0xac, 0xd5, 0xc6, 0xf3, 0xe0, + 0x01, 0x12, 0x27, 0x34, 0x4d, 0x5e, 0x6b, 0x78, + 0xee, 0xfd, 0xc8, 0xdb, 0xa2, 0xb1, 0x84, 0x97, + 0x76, 0x65, 0x50, 0x43, 0x3a, 0x29, 0x1c, 0x0f, + 0xc3, 0xd0, 0xe5, 0xf6, 0x8f, 0x9c, 0xa9, 0xba, + 0x5b, 0x48, 0x7d, 0x6e, 0x17, 0x04, 0x31, 0x22, + 0x75, 0x66, 0x53, 0x40, 0x39, 0x2a, 0x1f, 0x0c, + 0xed, 0xfe, 0xcb, 0xd8, 0xa1, 0xb2, 0x87, 0x94, + 0x58, 0x4b, 0x7e, 0x6d, 0x14, 0x07, 0x32, 0x21, + 0xc0, 0xd3, 0xe6, 0xf5, 0x8c, 0x9f, 0xaa, 0xb9, + 0x2f, 0x3c, 0x09, 0x1a, 0x63, 0x70, 0x45, 0x56, + 0xb7, 0xa4, 0x91, 0x82, 0xfb, 0xe8, 0xdd, 0xce, + 0x02, 0x11, 0x24, 0x37, 0x4e, 0x5d, 0x68, 0x7b, + 0x9a, 0x89, 0xbc, 0xaf, 0xd6, 0xc5, 0xf0, 0xe3, + 0xc1, 0xd2, 0xe7, 0xf4, 0x8d, 0x9e, 0xab, 0xb8, + 0x59, 0x4a, 0x7f, 0x6c, 0x15, 0x06, 0x33, 0x20, + 0xec, 0xff, 0xca, 0xd9, 0xa0, 0xb3, 0x86, 0x95, + 0x74, 0x67, 0x52, 0x41, 0x38, 0x2b, 0x1e, 0x0d, + 0x9b, 0x88, 0xbd, 0xae, 0xd7, 0xc4, 0xf1, 0xe2, + 0x03, 0x10, 0x25, 0x36, 0x4f, 0x5c, 0x69, 0x7a, + 0xb6, 0xa5, 0x90, 0x83, 0xfa, 0xe9, 0xdc, 0xcf, + 0x2e, 0x3d, 0x08, 0x1b, 0x62, 0x71, 0x44, 0x57, + }, + { + 0x00, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, + 0xa0, 0xb4, 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc, + 0x5d, 0x49, 0x75, 0x61, 0x0d, 0x19, 0x25, 0x31, + 0xfd, 0xe9, 0xd5, 0xc1, 0xad, 0xb9, 0x85, 0x91, + 0xba, 0xae, 0x92, 0x86, 0xea, 0xfe, 0xc2, 0xd6, + 0x1a, 0x0e, 0x32, 0x26, 0x4a, 0x5e, 0x62, 0x76, + 0xe7, 0xf3, 0xcf, 0xdb, 0xb7, 0xa3, 0x9f, 0x8b, + 0x47, 0x53, 0x6f, 0x7b, 0x17, 0x03, 0x3f, 0x2b, + 0x69, 0x7d, 0x41, 0x55, 0x39, 0x2d, 0x11, 0x05, + 0xc9, 0xdd, 0xe1, 0xf5, 0x99, 0x8d, 0xb1, 0xa5, + 0x34, 0x20, 0x1c, 0x08, 0x64, 0x70, 0x4c, 0x58, + 0x94, 0x80, 0xbc, 0xa8, 0xc4, 0xd0, 0xec, 0xf8, + 0xd3, 0xc7, 0xfb, 0xef, 0x83, 0x97, 0xab, 0xbf, + 0x73, 0x67, 0x5b, 0x4f, 0x23, 0x37, 0x0b, 0x1f, + 0x8e, 0x9a, 0xa6, 0xb2, 0xde, 0xca, 0xf6, 0xe2, + 0x2e, 0x3a, 0x06, 0x12, 0x7e, 0x6a, 0x56, 0x42, + 0xd2, 0xc6, 0xfa, 0xee, 0x82, 0x96, 0xaa, 0xbe, + 0x72, 0x66, 0x5a, 0x4e, 0x22, 0x36, 0x0a, 0x1e, + 0x8f, 0x9b, 0xa7, 0xb3, 0xdf, 0xcb, 0xf7, 0xe3, + 0x2f, 0x3b, 0x07, 0x13, 0x7f, 0x6b, 0x57, 0x43, + 0x68, 0x7c, 0x40, 0x54, 0x38, 0x2c, 0x10, 0x04, + 0xc8, 0xdc, 0xe0, 0xf4, 0x98, 0x8c, 0xb0, 0xa4, + 0x35, 0x21, 0x1d, 0x09, 0x65, 0x71, 0x4d, 0x59, + 0x95, 0x81, 0xbd, 0xa9, 0xc5, 0xd1, 0xed, 0xf9, + 0xbb, 0xaf, 0x93, 0x87, 0xeb, 0xff, 0xc3, 0xd7, + 0x1b, 0x0f, 0x33, 0x27, 0x4b, 0x5f, 0x63, 0x77, + 0xe6, 0xf2, 0xce, 0xda, 0xb6, 0xa2, 0x9e, 0x8a, + 0x46, 0x52, 0x6e, 0x7a, 0x16, 0x02, 0x3e, 0x2a, + 0x01, 0x15, 0x29, 0x3d, 0x51, 0x45, 0x79, 0x6d, + 0xa1, 0xb5, 0x89, 0x9d, 0xf1, 0xe5, 0xd9, 0xcd, + 0x5c, 0x48, 0x74, 0x60, 0x0c, 0x18, 0x24, 0x30, + 0xfc, 0xe8, 0xd4, 0xc0, 0xac, 0xb8, 0x84, 0x90, + }, + { + 0x00, 0x15, 0x2a, 0x3f, 0x54, 0x41, 0x7e, 0x6b, + 0xa8, 0xbd, 0x82, 0x97, 0xfc, 0xe9, 0xd6, 0xc3, + 0x4d, 0x58, 0x67, 0x72, 0x19, 0x0c, 0x33, 0x26, + 0xe5, 0xf0, 0xcf, 0xda, 0xb1, 0xa4, 0x9b, 0x8e, + 0x9a, 0x8f, 0xb0, 0xa5, 0xce, 0xdb, 0xe4, 0xf1, + 0x32, 0x27, 0x18, 0x0d, 0x66, 0x73, 0x4c, 0x59, + 0xd7, 0xc2, 0xfd, 0xe8, 0x83, 0x96, 0xa9, 0xbc, + 0x7f, 0x6a, 0x55, 0x40, 0x2b, 0x3e, 0x01, 0x14, + 0x29, 0x3c, 0x03, 0x16, 0x7d, 0x68, 0x57, 0x42, + 0x81, 0x94, 0xab, 0xbe, 0xd5, 0xc0, 0xff, 0xea, + 0x64, 0x71, 0x4e, 0x5b, 0x30, 0x25, 0x1a, 0x0f, + 0xcc, 0xd9, 0xe6, 0xf3, 0x98, 0x8d, 0xb2, 0xa7, + 0xb3, 0xa6, 0x99, 0x8c, 0xe7, 0xf2, 0xcd, 0xd8, + 0x1b, 0x0e, 0x31, 0x24, 0x4f, 0x5a, 0x65, 0x70, + 0xfe, 0xeb, 0xd4, 0xc1, 0xaa, 0xbf, 0x80, 0x95, + 0x56, 0x43, 0x7c, 0x69, 0x02, 0x17, 0x28, 0x3d, + 0x52, 0x47, 0x78, 0x6d, 0x06, 0x13, 0x2c, 0x39, + 0xfa, 0xef, 0xd0, 0xc5, 0xae, 0xbb, 0x84, 0x91, + 0x1f, 0x0a, 0x35, 0x20, 0x4b, 0x5e, 0x61, 0x74, + 0xb7, 0xa2, 0x9d, 0x88, 0xe3, 0xf6, 0xc9, 0xdc, + 0xc8, 0xdd, 0xe2, 0xf7, 0x9c, 0x89, 0xb6, 0xa3, + 0x60, 0x75, 0x4a, 0x5f, 0x34, 0x21, 0x1e, 0x0b, + 0x85, 0x90, 0xaf, 0xba, 0xd1, 0xc4, 0xfb, 0xee, + 0x2d, 0x38, 0x07, 0x12, 0x79, 0x6c, 0x53, 0x46, + 0x7b, 0x6e, 0x51, 0x44, 0x2f, 0x3a, 0x05, 0x10, + 0xd3, 0xc6, 0xf9, 0xec, 0x87, 0x92, 0xad, 0xb8, + 0x36, 0x23, 0x1c, 0x09, 0x62, 0x77, 0x48, 0x5d, + 0x9e, 0x8b, 0xb4, 0xa1, 0xca, 0xdf, 0xe0, 0xf5, + 0xe1, 0xf4, 0xcb, 0xde, 0xb5, 0xa0, 0x9f, 0x8a, + 0x49, 0x5c, 0x63, 0x76, 0x1d, 0x08, 0x37, 0x22, + 0xac, 0xb9, 0x86, 0x93, 0xf8, 0xed, 0xd2, 0xc7, + 0x04, 0x11, 0x2e, 0x3b, 0x50, 0x45, 0x7a, 0x6f, + }, + { + 0x00, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, + 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2, + 0x7d, 0x6b, 0x51, 0x47, 0x25, 0x33, 0x09, 0x1f, + 0xcd, 0xdb, 0xe1, 0xf7, 0x95, 0x83, 0xb9, 0xaf, + 0xfa, 0xec, 0xd6, 0xc0, 0xa2, 0xb4, 0x8e, 0x98, + 0x4a, 0x5c, 0x66, 0x70, 0x12, 0x04, 0x3e, 0x28, + 0x87, 0x91, 0xab, 0xbd, 0xdf, 0xc9, 0xf3, 0xe5, + 0x37, 0x21, 0x1b, 0x0d, 0x6f, 0x79, 0x43, 0x55, + 0xe9, 0xff, 0xc5, 0xd3, 0xb1, 0xa7, 0x9d, 0x8b, + 0x59, 0x4f, 0x75, 0x63, 0x01, 0x17, 0x2d, 0x3b, + 0x94, 0x82, 0xb8, 0xae, 0xcc, 0xda, 0xe0, 0xf6, + 0x24, 0x32, 0x08, 0x1e, 0x7c, 0x6a, 0x50, 0x46, + 0x13, 0x05, 0x3f, 0x29, 0x4b, 0x5d, 0x67, 0x71, + 0xa3, 0xb5, 0x8f, 0x99, 0xfb, 0xed, 0xd7, 0xc1, + 0x6e, 0x78, 0x42, 0x54, 0x36, 0x20, 0x1a, 0x0c, + 0xde, 0xc8, 0xf2, 0xe4, 0x86, 0x90, 0xaa, 0xbc, + 0xcf, 0xd9, 0xe3, 0xf5, 0x97, 0x81, 0xbb, 0xad, + 0x7f, 0x69, 0x53, 0x45, 0x27, 0x31, 0x0b, 0x1d, + 0xb2, 0xa4, 0x9e, 0x88, 0xea, 0xfc, 0xc6, 0xd0, + 0x02, 0x14, 0x2e, 0x38, 0x5a, 0x4c, 0x76, 0x60, + 0x35, 0x23, 0x19, 0x0f, 0x6d, 0x7b, 0x41, 0x57, + 0x85, 0x93, 0xa9, 0xbf, 0xdd, 0xcb, 0xf1, 0xe7, + 0x48, 0x5e, 0x64, 0x72, 0x10, 0x06, 0x3c, 0x2a, + 0xf8, 0xee, 0xd4, 0xc2, 0xa0, 0xb6, 0x8c, 0x9a, + 0x26, 0x30, 0x0a, 0x1c, 0x7e, 0x68, 0x52, 0x44, + 0x96, 0x80, 0xba, 0xac, 0xce, 0xd8, 0xe2, 0xf4, + 0x5b, 0x4d, 0x77, 0x61, 0x03, 0x15, 0x2f, 0x39, + 0xeb, 0xfd, 0xc7, 0xd1, 0xb3, 0xa5, 0x9f, 0x89, + 0xdc, 0xca, 0xf0, 0xe6, 0x84, 0x92, 0xa8, 0xbe, + 0x6c, 0x7a, 0x40, 0x56, 0x34, 0x22, 0x18, 0x0e, + 0xa1, 0xb7, 0x8d, 0x9b, 0xf9, 0xef, 0xd5, 0xc3, + 0x11, 0x07, 0x3d, 0x2b, 0x49, 0x5f, 0x65, 0x73, + }, + { + 0x00, 0x17, 0x2e, 0x39, 0x5c, 0x4b, 0x72, 0x65, + 0xb8, 0xaf, 0x96, 0x81, 0xe4, 0xf3, 0xca, 0xdd, + 0x6d, 0x7a, 0x43, 0x54, 0x31, 0x26, 0x1f, 0x08, + 0xd5, 0xc2, 0xfb, 0xec, 0x89, 0x9e, 0xa7, 0xb0, + 0xda, 0xcd, 0xf4, 0xe3, 0x86, 0x91, 0xa8, 0xbf, + 0x62, 0x75, 0x4c, 0x5b, 0x3e, 0x29, 0x10, 0x07, + 0xb7, 0xa0, 0x99, 0x8e, 0xeb, 0xfc, 0xc5, 0xd2, + 0x0f, 0x18, 0x21, 0x36, 0x53, 0x44, 0x7d, 0x6a, + 0xa9, 0xbe, 0x87, 0x90, 0xf5, 0xe2, 0xdb, 0xcc, + 0x11, 0x06, 0x3f, 0x28, 0x4d, 0x5a, 0x63, 0x74, + 0xc4, 0xd3, 0xea, 0xfd, 0x98, 0x8f, 0xb6, 0xa1, + 0x7c, 0x6b, 0x52, 0x45, 0x20, 0x37, 0x0e, 0x19, + 0x73, 0x64, 0x5d, 0x4a, 0x2f, 0x38, 0x01, 0x16, + 0xcb, 0xdc, 0xe5, 0xf2, 0x97, 0x80, 0xb9, 0xae, + 0x1e, 0x09, 0x30, 0x27, 0x42, 0x55, 0x6c, 0x7b, + 0xa6, 0xb1, 0x88, 0x9f, 0xfa, 0xed, 0xd4, 0xc3, + 0x4f, 0x58, 0x61, 0x76, 0x13, 0x04, 0x3d, 0x2a, + 0xf7, 0xe0, 0xd9, 0xce, 0xab, 0xbc, 0x85, 0x92, + 0x22, 0x35, 0x0c, 0x1b, 0x7e, 0x69, 0x50, 0x47, + 0x9a, 0x8d, 0xb4, 0xa3, 0xc6, 0xd1, 0xe8, 0xff, + 0x95, 0x82, 0xbb, 0xac, 0xc9, 0xde, 0xe7, 0xf0, + 0x2d, 0x3a, 0x03, 0x14, 0x71, 0x66, 0x5f, 0x48, + 0xf8, 0xef, 0xd6, 0xc1, 0xa4, 0xb3, 0x8a, 0x9d, + 0x40, 0x57, 0x6e, 0x79, 0x1c, 0x0b, 0x32, 0x25, + 0xe6, 0xf1, 0xc8, 0xdf, 0xba, 0xad, 0x94, 0x83, + 0x5e, 0x49, 0x70, 0x67, 0x02, 0x15, 0x2c, 0x3b, + 0x8b, 0x9c, 0xa5, 0xb2, 0xd7, 0xc0, 0xf9, 0xee, + 0x33, 0x24, 0x1d, 0x0a, 0x6f, 0x78, 0x41, 0x56, + 0x3c, 0x2b, 0x12, 0x05, 0x60, 0x77, 0x4e, 0x59, + 0x84, 0x93, 0xaa, 0xbd, 0xd8, 0xcf, 0xf6, 0xe1, + 0x51, 0x46, 0x7f, 0x68, 0x0d, 0x1a, 0x23, 0x34, + 0xe9, 0xfe, 0xc7, 0xd0, 0xb5, 0xa2, 0x9b, 0x8c, + }, + { + 0x00, 0x18, 0x30, 0x28, 0x60, 0x78, 0x50, 0x48, + 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88, + 0x9d, 0x85, 0xad, 0xb5, 0xfd, 0xe5, 0xcd, 0xd5, + 0x5d, 0x45, 0x6d, 0x75, 0x3d, 0x25, 0x0d, 0x15, + 0x27, 0x3f, 0x17, 0x0f, 0x47, 0x5f, 0x77, 0x6f, + 0xe7, 0xff, 0xd7, 0xcf, 0x87, 0x9f, 0xb7, 0xaf, + 0xba, 0xa2, 0x8a, 0x92, 0xda, 0xc2, 0xea, 0xf2, + 0x7a, 0x62, 0x4a, 0x52, 0x1a, 0x02, 0x2a, 0x32, + 0x4e, 0x56, 0x7e, 0x66, 0x2e, 0x36, 0x1e, 0x06, + 0x8e, 0x96, 0xbe, 0xa6, 0xee, 0xf6, 0xde, 0xc6, + 0xd3, 0xcb, 0xe3, 0xfb, 0xb3, 0xab, 0x83, 0x9b, + 0x13, 0x0b, 0x23, 0x3b, 0x73, 0x6b, 0x43, 0x5b, + 0x69, 0x71, 0x59, 0x41, 0x09, 0x11, 0x39, 0x21, + 0xa9, 0xb1, 0x99, 0x81, 0xc9, 0xd1, 0xf9, 0xe1, + 0xf4, 0xec, 0xc4, 0xdc, 0x94, 0x8c, 0xa4, 0xbc, + 0x34, 0x2c, 0x04, 0x1c, 0x54, 0x4c, 0x64, 0x7c, + 0x9c, 0x84, 0xac, 0xb4, 0xfc, 0xe4, 0xcc, 0xd4, + 0x5c, 0x44, 0x6c, 0x74, 0x3c, 0x24, 0x0c, 0x14, + 0x01, 0x19, 0x31, 0x29, 0x61, 0x79, 0x51, 0x49, + 0xc1, 0xd9, 0xf1, 0xe9, 0xa1, 0xb9, 0x91, 0x89, + 0xbb, 0xa3, 0x8b, 0x93, 0xdb, 0xc3, 0xeb, 0xf3, + 0x7b, 0x63, 0x4b, 0x53, 0x1b, 0x03, 0x2b, 0x33, + 0x26, 0x3e, 0x16, 0x0e, 0x46, 0x5e, 0x76, 0x6e, + 0xe6, 0xfe, 0xd6, 0xce, 0x86, 0x9e, 0xb6, 0xae, + 0xd2, 0xca, 0xe2, 0xfa, 0xb2, 0xaa, 0x82, 0x9a, + 0x12, 0x0a, 0x22, 0x3a, 0x72, 0x6a, 0x42, 0x5a, + 0x4f, 0x57, 0x7f, 0x67, 0x2f, 0x37, 0x1f, 0x07, + 0x8f, 0x97, 0xbf, 0xa7, 0xef, 0xf7, 0xdf, 0xc7, + 0xf5, 0xed, 0xc5, 0xdd, 0x95, 0x8d, 0xa5, 0xbd, + 0x35, 0x2d, 0x05, 0x1d, 0x55, 0x4d, 0x65, 0x7d, + 0x68, 0x70, 0x58, 0x40, 0x08, 0x10, 0x38, 0x20, + 0xa8, 0xb0, 0x98, 0x80, 0xc8, 0xd0, 0xf8, 0xe0, + }, + { + 0x00, 0x19, 0x32, 0x2b, 0x64, 0x7d, 0x56, 0x4f, + 0xc8, 0xd1, 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87, + 0x8d, 0x94, 0xbf, 0xa6, 0xe9, 0xf0, 0xdb, 0xc2, + 0x45, 0x5c, 0x77, 0x6e, 0x21, 0x38, 0x13, 0x0a, + 0x07, 0x1e, 0x35, 0x2c, 0x63, 0x7a, 0x51, 0x48, + 0xcf, 0xd6, 0xfd, 0xe4, 0xab, 0xb2, 0x99, 0x80, + 0x8a, 0x93, 0xb8, 0xa1, 0xee, 0xf7, 0xdc, 0xc5, + 0x42, 0x5b, 0x70, 0x69, 0x26, 0x3f, 0x14, 0x0d, + 0x0e, 0x17, 0x3c, 0x25, 0x6a, 0x73, 0x58, 0x41, + 0xc6, 0xdf, 0xf4, 0xed, 0xa2, 0xbb, 0x90, 0x89, + 0x83, 0x9a, 0xb1, 0xa8, 0xe7, 0xfe, 0xd5, 0xcc, + 0x4b, 0x52, 0x79, 0x60, 0x2f, 0x36, 0x1d, 0x04, + 0x09, 0x10, 0x3b, 0x22, 0x6d, 0x74, 0x5f, 0x46, + 0xc1, 0xd8, 0xf3, 0xea, 0xa5, 0xbc, 0x97, 0x8e, + 0x84, 0x9d, 0xb6, 0xaf, 0xe0, 0xf9, 0xd2, 0xcb, + 0x4c, 0x55, 0x7e, 0x67, 0x28, 0x31, 0x1a, 0x03, + 0x1c, 0x05, 0x2e, 0x37, 0x78, 0x61, 0x4a, 0x53, + 0xd4, 0xcd, 0xe6, 0xff, 0xb0, 0xa9, 0x82, 0x9b, + 0x91, 0x88, 0xa3, 0xba, 0xf5, 0xec, 0xc7, 0xde, + 0x59, 0x40, 0x6b, 0x72, 0x3d, 0x24, 0x0f, 0x16, + 0x1b, 0x02, 0x29, 0x30, 0x7f, 0x66, 0x4d, 0x54, + 0xd3, 0xca, 0xe1, 0xf8, 0xb7, 0xae, 0x85, 0x9c, + 0x96, 0x8f, 0xa4, 0xbd, 0xf2, 0xeb, 0xc0, 0xd9, + 0x5e, 0x47, 0x6c, 0x75, 0x3a, 0x23, 0x08, 0x11, + 0x12, 0x0b, 0x20, 0x39, 0x76, 0x6f, 0x44, 0x5d, + 0xda, 0xc3, 0xe8, 0xf1, 0xbe, 0xa7, 0x8c, 0x95, + 0x9f, 0x86, 0xad, 0xb4, 0xfb, 0xe2, 0xc9, 0xd0, + 0x57, 0x4e, 0x65, 0x7c, 0x33, 0x2a, 0x01, 0x18, + 0x15, 0x0c, 0x27, 0x3e, 0x71, 0x68, 0x43, 0x5a, + 0xdd, 0xc4, 0xef, 0xf6, 0xb9, 0xa0, 0x8b, 0x92, + 0x98, 0x81, 0xaa, 0xb3, 0xfc, 0xe5, 0xce, 0xd7, + 0x50, 0x49, 0x62, 0x7b, 0x34, 0x2d, 0x06, 0x1f, + }, + { + 0x00, 0x1a, 0x34, 0x2e, 0x68, 0x72, 0x5c, 0x46, + 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, 0x8c, 0x96, + 0xbd, 0xa7, 0x89, 0x93, 0xd5, 0xcf, 0xe1, 0xfb, + 0x6d, 0x77, 0x59, 0x43, 0x05, 0x1f, 0x31, 0x2b, + 0x67, 0x7d, 0x53, 0x49, 0x0f, 0x15, 0x3b, 0x21, + 0xb7, 0xad, 0x83, 0x99, 0xdf, 0xc5, 0xeb, 0xf1, + 0xda, 0xc0, 0xee, 0xf4, 0xb2, 0xa8, 0x86, 0x9c, + 0x0a, 0x10, 0x3e, 0x24, 0x62, 0x78, 0x56, 0x4c, + 0xce, 0xd4, 0xfa, 0xe0, 0xa6, 0xbc, 0x92, 0x88, + 0x1e, 0x04, 0x2a, 0x30, 0x76, 0x6c, 0x42, 0x58, + 0x73, 0x69, 0x47, 0x5d, 0x1b, 0x01, 0x2f, 0x35, + 0xa3, 0xb9, 0x97, 0x8d, 0xcb, 0xd1, 0xff, 0xe5, + 0xa9, 0xb3, 0x9d, 0x87, 0xc1, 0xdb, 0xf5, 0xef, + 0x79, 0x63, 0x4d, 0x57, 0x11, 0x0b, 0x25, 0x3f, + 0x14, 0x0e, 0x20, 0x3a, 0x7c, 0x66, 0x48, 0x52, + 0xc4, 0xde, 0xf0, 0xea, 0xac, 0xb6, 0x98, 0x82, + 0x81, 0x9b, 0xb5, 0xaf, 0xe9, 0xf3, 0xdd, 0xc7, + 0x51, 0x4b, 0x65, 0x7f, 0x39, 0x23, 0x0d, 0x17, + 0x3c, 0x26, 0x08, 0x12, 0x54, 0x4e, 0x60, 0x7a, + 0xec, 0xf6, 0xd8, 0xc2, 0x84, 0x9e, 0xb0, 0xaa, + 0xe6, 0xfc, 0xd2, 0xc8, 0x8e, 0x94, 0xba, 0xa0, + 0x36, 0x2c, 0x02, 0x18, 0x5e, 0x44, 0x6a, 0x70, + 0x5b, 0x41, 0x6f, 0x75, 0x33, 0x29, 0x07, 0x1d, + 0x8b, 0x91, 0xbf, 0xa5, 0xe3, 0xf9, 0xd7, 0xcd, + 0x4f, 0x55, 0x7b, 0x61, 0x27, 0x3d, 0x13, 0x09, + 0x9f, 0x85, 0xab, 0xb1, 0xf7, 0xed, 0xc3, 0xd9, + 0xf2, 0xe8, 0xc6, 0xdc, 0x9a, 0x80, 0xae, 0xb4, + 0x22, 0x38, 0x16, 0x0c, 0x4a, 0x50, 0x7e, 0x64, + 0x28, 0x32, 0x1c, 0x06, 0x40, 0x5a, 0x74, 0x6e, + 0xf8, 0xe2, 0xcc, 0xd6, 0x90, 0x8a, 0xa4, 0xbe, + 0x95, 0x8f, 0xa1, 0xbb, 0xfd, 0xe7, 0xc9, 0xd3, + 0x45, 0x5f, 0x71, 0x6b, 0x2d, 0x37, 0x19, 0x03, + }, + { + 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41, + 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99, + 0xad, 0xb6, 0x9b, 0x80, 0xc1, 0xda, 0xf7, 0xec, + 0x75, 0x6e, 0x43, 0x58, 0x19, 0x02, 0x2f, 0x34, + 0x47, 0x5c, 0x71, 0x6a, 0x2b, 0x30, 0x1d, 0x06, + 0x9f, 0x84, 0xa9, 0xb2, 0xf3, 0xe8, 0xc5, 0xde, + 0xea, 0xf1, 0xdc, 0xc7, 0x86, 0x9d, 0xb0, 0xab, + 0x32, 0x29, 0x04, 0x1f, 0x5e, 0x45, 0x68, 0x73, + 0x8e, 0x95, 0xb8, 0xa3, 0xe2, 0xf9, 0xd4, 0xcf, + 0x56, 0x4d, 0x60, 0x7b, 0x3a, 0x21, 0x0c, 0x17, + 0x23, 0x38, 0x15, 0x0e, 0x4f, 0x54, 0x79, 0x62, + 0xfb, 0xe0, 0xcd, 0xd6, 0x97, 0x8c, 0xa1, 0xba, + 0xc9, 0xd2, 0xff, 0xe4, 0xa5, 0xbe, 0x93, 0x88, + 0x11, 0x0a, 0x27, 0x3c, 0x7d, 0x66, 0x4b, 0x50, + 0x64, 0x7f, 0x52, 0x49, 0x08, 0x13, 0x3e, 0x25, + 0xbc, 0xa7, 0x8a, 0x91, 0xd0, 0xcb, 0xe6, 0xfd, + 0x01, 0x1a, 0x37, 0x2c, 0x6d, 0x76, 0x5b, 0x40, + 0xd9, 0xc2, 0xef, 0xf4, 0xb5, 0xae, 0x83, 0x98, + 0xac, 0xb7, 0x9a, 0x81, 0xc0, 0xdb, 0xf6, 0xed, + 0x74, 0x6f, 0x42, 0x59, 0x18, 0x03, 0x2e, 0x35, + 0x46, 0x5d, 0x70, 0x6b, 0x2a, 0x31, 0x1c, 0x07, + 0x9e, 0x85, 0xa8, 0xb3, 0xf2, 0xe9, 0xc4, 0xdf, + 0xeb, 0xf0, 0xdd, 0xc6, 0x87, 0x9c, 0xb1, 0xaa, + 0x33, 0x28, 0x05, 0x1e, 0x5f, 0x44, 0x69, 0x72, + 0x8f, 0x94, 0xb9, 0xa2, 0xe3, 0xf8, 0xd5, 0xce, + 0x57, 0x4c, 0x61, 0x7a, 0x3b, 0x20, 0x0d, 0x16, + 0x22, 0x39, 0x14, 0x0f, 0x4e, 0x55, 0x78, 0x63, + 0xfa, 0xe1, 0xcc, 0xd7, 0x96, 0x8d, 0xa0, 0xbb, + 0xc8, 0xd3, 0xfe, 0xe5, 0xa4, 0xbf, 0x92, 0x89, + 0x10, 0x0b, 0x26, 0x3d, 0x7c, 0x67, 0x4a, 0x51, + 0x65, 0x7e, 0x53, 0x48, 0x09, 0x12, 0x3f, 0x24, + 0xbd, 0xa6, 0x8b, 0x90, 0xd1, 0xca, 0xe7, 0xfc, + }, + { + 0x00, 0x1c, 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, + 0xe0, 0xfc, 0xd8, 0xc4, 0x90, 0x8c, 0xa8, 0xb4, + 0xdd, 0xc1, 0xe5, 0xf9, 0xad, 0xb1, 0x95, 0x89, + 0x3d, 0x21, 0x05, 0x19, 0x4d, 0x51, 0x75, 0x69, + 0xa7, 0xbb, 0x9f, 0x83, 0xd7, 0xcb, 0xef, 0xf3, + 0x47, 0x5b, 0x7f, 0x63, 0x37, 0x2b, 0x0f, 0x13, + 0x7a, 0x66, 0x42, 0x5e, 0x0a, 0x16, 0x32, 0x2e, + 0x9a, 0x86, 0xa2, 0xbe, 0xea, 0xf6, 0xd2, 0xce, + 0x53, 0x4f, 0x6b, 0x77, 0x23, 0x3f, 0x1b, 0x07, + 0xb3, 0xaf, 0x8b, 0x97, 0xc3, 0xdf, 0xfb, 0xe7, + 0x8e, 0x92, 0xb6, 0xaa, 0xfe, 0xe2, 0xc6, 0xda, + 0x6e, 0x72, 0x56, 0x4a, 0x1e, 0x02, 0x26, 0x3a, + 0xf4, 0xe8, 0xcc, 0xd0, 0x84, 0x98, 0xbc, 0xa0, + 0x14, 0x08, 0x2c, 0x30, 0x64, 0x78, 0x5c, 0x40, + 0x29, 0x35, 0x11, 0x0d, 0x59, 0x45, 0x61, 0x7d, + 0xc9, 0xd5, 0xf1, 0xed, 0xb9, 0xa5, 0x81, 0x9d, + 0xa6, 0xba, 0x9e, 0x82, 0xd6, 0xca, 0xee, 0xf2, + 0x46, 0x5a, 0x7e, 0x62, 0x36, 0x2a, 0x0e, 0x12, + 0x7b, 0x67, 0x43, 0x5f, 0x0b, 0x17, 0x33, 0x2f, + 0x9b, 0x87, 0xa3, 0xbf, 0xeb, 0xf7, 0xd3, 0xcf, + 0x01, 0x1d, 0x39, 0x25, 0x71, 0x6d, 0x49, 0x55, + 0xe1, 0xfd, 0xd9, 0xc5, 0x91, 0x8d, 0xa9, 0xb5, + 0xdc, 0xc0, 0xe4, 0xf8, 0xac, 0xb0, 0x94, 0x88, + 0x3c, 0x20, 0x04, 0x18, 0x4c, 0x50, 0x74, 0x68, + 0xf5, 0xe9, 0xcd, 0xd1, 0x85, 0x99, 0xbd, 0xa1, + 0x15, 0x09, 0x2d, 0x31, 0x65, 0x79, 0x5d, 0x41, + 0x28, 0x34, 0x10, 0x0c, 0x58, 0x44, 0x60, 0x7c, + 0xc8, 0xd4, 0xf0, 0xec, 0xb8, 0xa4, 0x80, 0x9c, + 0x52, 0x4e, 0x6a, 0x76, 0x22, 0x3e, 0x1a, 0x06, + 0xb2, 0xae, 0x8a, 0x96, 0xc2, 0xde, 0xfa, 0xe6, + 0x8f, 0x93, 0xb7, 0xab, 0xff, 0xe3, 0xc7, 0xdb, + 0x6f, 0x73, 0x57, 0x4b, 0x1f, 0x03, 0x27, 0x3b, + }, + { + 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb, + 0xcd, 0xd0, 0xf7, 0xea, 0xb9, 0xa4, 0x83, 0x9e, + 0x25, 0x38, 0x1f, 0x02, 0x51, 0x4c, 0x6b, 0x76, + 0x87, 0x9a, 0xbd, 0xa0, 0xf3, 0xee, 0xc9, 0xd4, + 0x6f, 0x72, 0x55, 0x48, 0x1b, 0x06, 0x21, 0x3c, + 0x4a, 0x57, 0x70, 0x6d, 0x3e, 0x23, 0x04, 0x19, + 0xa2, 0xbf, 0x98, 0x85, 0xd6, 0xcb, 0xec, 0xf1, + 0x13, 0x0e, 0x29, 0x34, 0x67, 0x7a, 0x5d, 0x40, + 0xfb, 0xe6, 0xc1, 0xdc, 0x8f, 0x92, 0xb5, 0xa8, + 0xde, 0xc3, 0xe4, 0xf9, 0xaa, 0xb7, 0x90, 0x8d, + 0x36, 0x2b, 0x0c, 0x11, 0x42, 0x5f, 0x78, 0x65, + 0x94, 0x89, 0xae, 0xb3, 0xe0, 0xfd, 0xda, 0xc7, + 0x7c, 0x61, 0x46, 0x5b, 0x08, 0x15, 0x32, 0x2f, + 0x59, 0x44, 0x63, 0x7e, 0x2d, 0x30, 0x17, 0x0a, + 0xb1, 0xac, 0x8b, 0x96, 0xc5, 0xd8, 0xff, 0xe2, + 0x26, 0x3b, 0x1c, 0x01, 0x52, 0x4f, 0x68, 0x75, + 0xce, 0xd3, 0xf4, 0xe9, 0xba, 0xa7, 0x80, 0x9d, + 0xeb, 0xf6, 0xd1, 0xcc, 0x9f, 0x82, 0xa5, 0xb8, + 0x03, 0x1e, 0x39, 0x24, 0x77, 0x6a, 0x4d, 0x50, + 0xa1, 0xbc, 0x9b, 0x86, 0xd5, 0xc8, 0xef, 0xf2, + 0x49, 0x54, 0x73, 0x6e, 0x3d, 0x20, 0x07, 0x1a, + 0x6c, 0x71, 0x56, 0x4b, 0x18, 0x05, 0x22, 0x3f, + 0x84, 0x99, 0xbe, 0xa3, 0xf0, 0xed, 0xca, 0xd7, + 0x35, 0x28, 0x0f, 0x12, 0x41, 0x5c, 0x7b, 0x66, + 0xdd, 0xc0, 0xe7, 0xfa, 0xa9, 0xb4, 0x93, 0x8e, + 0xf8, 0xe5, 0xc2, 0xdf, 0x8c, 0x91, 0xb6, 0xab, + 0x10, 0x0d, 0x2a, 0x37, 0x64, 0x79, 0x5e, 0x43, + 0xb2, 0xaf, 0x88, 0x95, 0xc6, 0xdb, 0xfc, 0xe1, + 0x5a, 0x47, 0x60, 0x7d, 0x2e, 0x33, 0x14, 0x09, + 0x7f, 0x62, 0x45, 0x58, 0x0b, 0x16, 0x31, 0x2c, + 0x97, 0x8a, 0xad, 0xb0, 0xe3, 0xfe, 0xd9, 0xc4, + }, + { + 0x00, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, + 0xf0, 0xee, 0xcc, 0xd2, 0x88, 0x96, 0xb4, 0xaa, + 0xfd, 0xe3, 0xc1, 0xdf, 0x85, 0x9b, 0xb9, 0xa7, + 0x0d, 0x13, 0x31, 0x2f, 0x75, 0x6b, 0x49, 0x57, + 0xe7, 0xf9, 0xdb, 0xc5, 0x9f, 0x81, 0xa3, 0xbd, + 0x17, 0x09, 0x2b, 0x35, 0x6f, 0x71, 0x53, 0x4d, + 0x1a, 0x04, 0x26, 0x38, 0x62, 0x7c, 0x5e, 0x40, + 0xea, 0xf4, 0xd6, 0xc8, 0x92, 0x8c, 0xae, 0xb0, + 0xd3, 0xcd, 0xef, 0xf1, 0xab, 0xb5, 0x97, 0x89, + 0x23, 0x3d, 0x1f, 0x01, 0x5b, 0x45, 0x67, 0x79, + 0x2e, 0x30, 0x12, 0x0c, 0x56, 0x48, 0x6a, 0x74, + 0xde, 0xc0, 0xe2, 0xfc, 0xa6, 0xb8, 0x9a, 0x84, + 0x34, 0x2a, 0x08, 0x16, 0x4c, 0x52, 0x70, 0x6e, + 0xc4, 0xda, 0xf8, 0xe6, 0xbc, 0xa2, 0x80, 0x9e, + 0xc9, 0xd7, 0xf5, 0xeb, 0xb1, 0xaf, 0x8d, 0x93, + 0x39, 0x27, 0x05, 0x1b, 0x41, 0x5f, 0x7d, 0x63, + 0xbb, 0xa5, 0x87, 0x99, 0xc3, 0xdd, 0xff, 0xe1, + 0x4b, 0x55, 0x77, 0x69, 0x33, 0x2d, 0x0f, 0x11, + 0x46, 0x58, 0x7a, 0x64, 0x3e, 0x20, 0x02, 0x1c, + 0xb6, 0xa8, 0x8a, 0x94, 0xce, 0xd0, 0xf2, 0xec, + 0x5c, 0x42, 0x60, 0x7e, 0x24, 0x3a, 0x18, 0x06, + 0xac, 0xb2, 0x90, 0x8e, 0xd4, 0xca, 0xe8, 0xf6, + 0xa1, 0xbf, 0x9d, 0x83, 0xd9, 0xc7, 0xe5, 0xfb, + 0x51, 0x4f, 0x6d, 0x73, 0x29, 0x37, 0x15, 0x0b, + 0x68, 0x76, 0x54, 0x4a, 0x10, 0x0e, 0x2c, 0x32, + 0x98, 0x86, 0xa4, 0xba, 0xe0, 0xfe, 0xdc, 0xc2, + 0x95, 0x8b, 0xa9, 0xb7, 0xed, 0xf3, 0xd1, 0xcf, + 0x65, 0x7b, 0x59, 0x47, 0x1d, 0x03, 0x21, 0x3f, + 0x8f, 0x91, 0xb3, 0xad, 0xf7, 0xe9, 0xcb, 0xd5, + 0x7f, 0x61, 0x43, 0x5d, 0x07, 0x19, 0x3b, 0x25, + 0x72, 0x6c, 0x4e, 0x50, 0x0a, 0x14, 0x36, 0x28, + 0x82, 0x9c, 0xbe, 0xa0, 0xfa, 0xe4, 0xc6, 0xd8, + }, + { + 0x00, 0x1f, 0x3e, 0x21, 0x7c, 0x63, 0x42, 0x5d, + 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, 0xba, 0xa5, + 0xed, 0xf2, 0xd3, 0xcc, 0x91, 0x8e, 0xaf, 0xb0, + 0x15, 0x0a, 0x2b, 0x34, 0x69, 0x76, 0x57, 0x48, + 0xc7, 0xd8, 0xf9, 0xe6, 0xbb, 0xa4, 0x85, 0x9a, + 0x3f, 0x20, 0x01, 0x1e, 0x43, 0x5c, 0x7d, 0x62, + 0x2a, 0x35, 0x14, 0x0b, 0x56, 0x49, 0x68, 0x77, + 0xd2, 0xcd, 0xec, 0xf3, 0xae, 0xb1, 0x90, 0x8f, + 0x93, 0x8c, 0xad, 0xb2, 0xef, 0xf0, 0xd1, 0xce, + 0x6b, 0x74, 0x55, 0x4a, 0x17, 0x08, 0x29, 0x36, + 0x7e, 0x61, 0x40, 0x5f, 0x02, 0x1d, 0x3c, 0x23, + 0x86, 0x99, 0xb8, 0xa7, 0xfa, 0xe5, 0xc4, 0xdb, + 0x54, 0x4b, 0x6a, 0x75, 0x28, 0x37, 0x16, 0x09, + 0xac, 0xb3, 0x92, 0x8d, 0xd0, 0xcf, 0xee, 0xf1, + 0xb9, 0xa6, 0x87, 0x98, 0xc5, 0xda, 0xfb, 0xe4, + 0x41, 0x5e, 0x7f, 0x60, 0x3d, 0x22, 0x03, 0x1c, + 0x3b, 0x24, 0x05, 0x1a, 0x47, 0x58, 0x79, 0x66, + 0xc3, 0xdc, 0xfd, 0xe2, 0xbf, 0xa0, 0x81, 0x9e, + 0xd6, 0xc9, 0xe8, 0xf7, 0xaa, 0xb5, 0x94, 0x8b, + 0x2e, 0x31, 0x10, 0x0f, 0x52, 0x4d, 0x6c, 0x73, + 0xfc, 0xe3, 0xc2, 0xdd, 0x80, 0x9f, 0xbe, 0xa1, + 0x04, 0x1b, 0x3a, 0x25, 0x78, 0x67, 0x46, 0x59, + 0x11, 0x0e, 0x2f, 0x30, 0x6d, 0x72, 0x53, 0x4c, + 0xe9, 0xf6, 0xd7, 0xc8, 0x95, 0x8a, 0xab, 0xb4, + 0xa8, 0xb7, 0x96, 0x89, 0xd4, 0xcb, 0xea, 0xf5, + 0x50, 0x4f, 0x6e, 0x71, 0x2c, 0x33, 0x12, 0x0d, + 0x45, 0x5a, 0x7b, 0x64, 0x39, 0x26, 0x07, 0x18, + 0xbd, 0xa2, 0x83, 0x9c, 0xc1, 0xde, 0xff, 0xe0, + 0x6f, 0x70, 0x51, 0x4e, 0x13, 0x0c, 0x2d, 0x32, + 0x97, 0x88, 0xa9, 0xb6, 0xeb, 0xf4, 0xd5, 0xca, + 0x82, 0x9d, 0xbc, 0xa3, 0xfe, 0xe1, 0xc0, 0xdf, + 0x7a, 0x65, 0x44, 0x5b, 0x06, 0x19, 0x38, 0x27, + }, + { + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x1d, 0x3d, 0x5d, 0x7d, 0x9d, 0xbd, 0xdd, 0xfd, + 0x3a, 0x1a, 0x7a, 0x5a, 0xba, 0x9a, 0xfa, 0xda, + 0x27, 0x07, 0x67, 0x47, 0xa7, 0x87, 0xe7, 0xc7, + 0x74, 0x54, 0x34, 0x14, 0xf4, 0xd4, 0xb4, 0x94, + 0x69, 0x49, 0x29, 0x09, 0xe9, 0xc9, 0xa9, 0x89, + 0x4e, 0x6e, 0x0e, 0x2e, 0xce, 0xee, 0x8e, 0xae, + 0x53, 0x73, 0x13, 0x33, 0xd3, 0xf3, 0x93, 0xb3, + 0xe8, 0xc8, 0xa8, 0x88, 0x68, 0x48, 0x28, 0x08, + 0xf5, 0xd5, 0xb5, 0x95, 0x75, 0x55, 0x35, 0x15, + 0xd2, 0xf2, 0x92, 0xb2, 0x52, 0x72, 0x12, 0x32, + 0xcf, 0xef, 0x8f, 0xaf, 0x4f, 0x6f, 0x0f, 0x2f, + 0x9c, 0xbc, 0xdc, 0xfc, 0x1c, 0x3c, 0x5c, 0x7c, + 0x81, 0xa1, 0xc1, 0xe1, 0x01, 0x21, 0x41, 0x61, + 0xa6, 0x86, 0xe6, 0xc6, 0x26, 0x06, 0x66, 0x46, + 0xbb, 0x9b, 0xfb, 0xdb, 0x3b, 0x1b, 0x7b, 0x5b, + 0xcd, 0xed, 0x8d, 0xad, 0x4d, 0x6d, 0x0d, 0x2d, + 0xd0, 0xf0, 0x90, 0xb0, 0x50, 0x70, 0x10, 0x30, + 0xf7, 0xd7, 0xb7, 0x97, 0x77, 0x57, 0x37, 0x17, + 0xea, 0xca, 0xaa, 0x8a, 0x6a, 0x4a, 0x2a, 0x0a, + 0xb9, 0x99, 0xf9, 0xd9, 0x39, 0x19, 0x79, 0x59, + 0xa4, 0x84, 0xe4, 0xc4, 0x24, 0x04, 0x64, 0x44, + 0x83, 0xa3, 0xc3, 0xe3, 0x03, 0x23, 0x43, 0x63, + 0x9e, 0xbe, 0xde, 0xfe, 0x1e, 0x3e, 0x5e, 0x7e, + 0x25, 0x05, 0x65, 0x45, 0xa5, 0x85, 0xe5, 0xc5, + 0x38, 0x18, 0x78, 0x58, 0xb8, 0x98, 0xf8, 0xd8, + 0x1f, 0x3f, 0x5f, 0x7f, 0x9f, 0xbf, 0xdf, 0xff, + 0x02, 0x22, 0x42, 0x62, 0x82, 0xa2, 0xc2, 0xe2, + 0x51, 0x71, 0x11, 0x31, 0xd1, 0xf1, 0x91, 0xb1, + 0x4c, 0x6c, 0x0c, 0x2c, 0xcc, 0xec, 0x8c, 0xac, + 0x6b, 0x4b, 0x2b, 0x0b, 0xeb, 0xcb, 0xab, 0x8b, + 0x76, 0x56, 0x36, 0x16, 0xf6, 0xd6, 0xb6, 0x96, + }, + { + 0x00, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, + 0x15, 0x34, 0x57, 0x76, 0x91, 0xb0, 0xd3, 0xf2, + 0x2a, 0x0b, 0x68, 0x49, 0xae, 0x8f, 0xec, 0xcd, + 0x3f, 0x1e, 0x7d, 0x5c, 0xbb, 0x9a, 0xf9, 0xd8, + 0x54, 0x75, 0x16, 0x37, 0xd0, 0xf1, 0x92, 0xb3, + 0x41, 0x60, 0x03, 0x22, 0xc5, 0xe4, 0x87, 0xa6, + 0x7e, 0x5f, 0x3c, 0x1d, 0xfa, 0xdb, 0xb8, 0x99, + 0x6b, 0x4a, 0x29, 0x08, 0xef, 0xce, 0xad, 0x8c, + 0xa8, 0x89, 0xea, 0xcb, 0x2c, 0x0d, 0x6e, 0x4f, + 0xbd, 0x9c, 0xff, 0xde, 0x39, 0x18, 0x7b, 0x5a, + 0x82, 0xa3, 0xc0, 0xe1, 0x06, 0x27, 0x44, 0x65, + 0x97, 0xb6, 0xd5, 0xf4, 0x13, 0x32, 0x51, 0x70, + 0xfc, 0xdd, 0xbe, 0x9f, 0x78, 0x59, 0x3a, 0x1b, + 0xe9, 0xc8, 0xab, 0x8a, 0x6d, 0x4c, 0x2f, 0x0e, + 0xd6, 0xf7, 0x94, 0xb5, 0x52, 0x73, 0x10, 0x31, + 0xc3, 0xe2, 0x81, 0xa0, 0x47, 0x66, 0x05, 0x24, + 0x4d, 0x6c, 0x0f, 0x2e, 0xc9, 0xe8, 0x8b, 0xaa, + 0x58, 0x79, 0x1a, 0x3b, 0xdc, 0xfd, 0x9e, 0xbf, + 0x67, 0x46, 0x25, 0x04, 0xe3, 0xc2, 0xa1, 0x80, + 0x72, 0x53, 0x30, 0x11, 0xf6, 0xd7, 0xb4, 0x95, + 0x19, 0x38, 0x5b, 0x7a, 0x9d, 0xbc, 0xdf, 0xfe, + 0x0c, 0x2d, 0x4e, 0x6f, 0x88, 0xa9, 0xca, 0xeb, + 0x33, 0x12, 0x71, 0x50, 0xb7, 0x96, 0xf5, 0xd4, + 0x26, 0x07, 0x64, 0x45, 0xa2, 0x83, 0xe0, 0xc1, + 0xe5, 0xc4, 0xa7, 0x86, 0x61, 0x40, 0x23, 0x02, + 0xf0, 0xd1, 0xb2, 0x93, 0x74, 0x55, 0x36, 0x17, + 0xcf, 0xee, 0x8d, 0xac, 0x4b, 0x6a, 0x09, 0x28, + 0xda, 0xfb, 0x98, 0xb9, 0x5e, 0x7f, 0x1c, 0x3d, + 0xb1, 0x90, 0xf3, 0xd2, 0x35, 0x14, 0x77, 0x56, + 0xa4, 0x85, 0xe6, 0xc7, 0x20, 0x01, 0x62, 0x43, + 0x9b, 0xba, 0xd9, 0xf8, 0x1f, 0x3e, 0x5d, 0x7c, + 0x8e, 0xaf, 0xcc, 0xed, 0x0a, 0x2b, 0x48, 0x69, + }, + { + 0x00, 0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, + 0x0d, 0x2f, 0x49, 0x6b, 0x85, 0xa7, 0xc1, 0xe3, + 0x1a, 0x38, 0x5e, 0x7c, 0x92, 0xb0, 0xd6, 0xf4, + 0x17, 0x35, 0x53, 0x71, 0x9f, 0xbd, 0xdb, 0xf9, + 0x34, 0x16, 0x70, 0x52, 0xbc, 0x9e, 0xf8, 0xda, + 0x39, 0x1b, 0x7d, 0x5f, 0xb1, 0x93, 0xf5, 0xd7, + 0x2e, 0x0c, 0x6a, 0x48, 0xa6, 0x84, 0xe2, 0xc0, + 0x23, 0x01, 0x67, 0x45, 0xab, 0x89, 0xef, 0xcd, + 0x68, 0x4a, 0x2c, 0x0e, 0xe0, 0xc2, 0xa4, 0x86, + 0x65, 0x47, 0x21, 0x03, 0xed, 0xcf, 0xa9, 0x8b, + 0x72, 0x50, 0x36, 0x14, 0xfa, 0xd8, 0xbe, 0x9c, + 0x7f, 0x5d, 0x3b, 0x19, 0xf7, 0xd5, 0xb3, 0x91, + 0x5c, 0x7e, 0x18, 0x3a, 0xd4, 0xf6, 0x90, 0xb2, + 0x51, 0x73, 0x15, 0x37, 0xd9, 0xfb, 0x9d, 0xbf, + 0x46, 0x64, 0x02, 0x20, 0xce, 0xec, 0x8a, 0xa8, + 0x4b, 0x69, 0x0f, 0x2d, 0xc3, 0xe1, 0x87, 0xa5, + 0xd0, 0xf2, 0x94, 0xb6, 0x58, 0x7a, 0x1c, 0x3e, + 0xdd, 0xff, 0x99, 0xbb, 0x55, 0x77, 0x11, 0x33, + 0xca, 0xe8, 0x8e, 0xac, 0x42, 0x60, 0x06, 0x24, + 0xc7, 0xe5, 0x83, 0xa1, 0x4f, 0x6d, 0x0b, 0x29, + 0xe4, 0xc6, 0xa0, 0x82, 0x6c, 0x4e, 0x28, 0x0a, + 0xe9, 0xcb, 0xad, 0x8f, 0x61, 0x43, 0x25, 0x07, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, + 0xf3, 0xd1, 0xb7, 0x95, 0x7b, 0x59, 0x3f, 0x1d, + 0xb8, 0x9a, 0xfc, 0xde, 0x30, 0x12, 0x74, 0x56, + 0xb5, 0x97, 0xf1, 0xd3, 0x3d, 0x1f, 0x79, 0x5b, + 0xa2, 0x80, 0xe6, 0xc4, 0x2a, 0x08, 0x6e, 0x4c, + 0xaf, 0x8d, 0xeb, 0xc9, 0x27, 0x05, 0x63, 0x41, + 0x8c, 0xae, 0xc8, 0xea, 0x04, 0x26, 0x40, 0x62, + 0x81, 0xa3, 0xc5, 0xe7, 0x09, 0x2b, 0x4d, 0x6f, + 0x96, 0xb4, 0xd2, 0xf0, 0x1e, 0x3c, 0x5a, 0x78, + 0x9b, 0xb9, 0xdf, 0xfd, 0x13, 0x31, 0x57, 0x75, + }, + { + 0x00, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, + 0x05, 0x26, 0x43, 0x60, 0x89, 0xaa, 0xcf, 0xec, + 0x0a, 0x29, 0x4c, 0x6f, 0x86, 0xa5, 0xc0, 0xe3, + 0x0f, 0x2c, 0x49, 0x6a, 0x83, 0xa0, 0xc5, 0xe6, + 0x14, 0x37, 0x52, 0x71, 0x98, 0xbb, 0xde, 0xfd, + 0x11, 0x32, 0x57, 0x74, 0x9d, 0xbe, 0xdb, 0xf8, + 0x1e, 0x3d, 0x58, 0x7b, 0x92, 0xb1, 0xd4, 0xf7, + 0x1b, 0x38, 0x5d, 0x7e, 0x97, 0xb4, 0xd1, 0xf2, + 0x28, 0x0b, 0x6e, 0x4d, 0xa4, 0x87, 0xe2, 0xc1, + 0x2d, 0x0e, 0x6b, 0x48, 0xa1, 0x82, 0xe7, 0xc4, + 0x22, 0x01, 0x64, 0x47, 0xae, 0x8d, 0xe8, 0xcb, + 0x27, 0x04, 0x61, 0x42, 0xab, 0x88, 0xed, 0xce, + 0x3c, 0x1f, 0x7a, 0x59, 0xb0, 0x93, 0xf6, 0xd5, + 0x39, 0x1a, 0x7f, 0x5c, 0xb5, 0x96, 0xf3, 0xd0, + 0x36, 0x15, 0x70, 0x53, 0xba, 0x99, 0xfc, 0xdf, + 0x33, 0x10, 0x75, 0x56, 0xbf, 0x9c, 0xf9, 0xda, + 0x50, 0x73, 0x16, 0x35, 0xdc, 0xff, 0x9a, 0xb9, + 0x55, 0x76, 0x13, 0x30, 0xd9, 0xfa, 0x9f, 0xbc, + 0x5a, 0x79, 0x1c, 0x3f, 0xd6, 0xf5, 0x90, 0xb3, + 0x5f, 0x7c, 0x19, 0x3a, 0xd3, 0xf0, 0x95, 0xb6, + 0x44, 0x67, 0x02, 0x21, 0xc8, 0xeb, 0x8e, 0xad, + 0x41, 0x62, 0x07, 0x24, 0xcd, 0xee, 0x8b, 0xa8, + 0x4e, 0x6d, 0x08, 0x2b, 0xc2, 0xe1, 0x84, 0xa7, + 0x4b, 0x68, 0x0d, 0x2e, 0xc7, 0xe4, 0x81, 0xa2, + 0x78, 0x5b, 0x3e, 0x1d, 0xf4, 0xd7, 0xb2, 0x91, + 0x7d, 0x5e, 0x3b, 0x18, 0xf1, 0xd2, 0xb7, 0x94, + 0x72, 0x51, 0x34, 0x17, 0xfe, 0xdd, 0xb8, 0x9b, + 0x77, 0x54, 0x31, 0x12, 0xfb, 0xd8, 0xbd, 0x9e, + 0x6c, 0x4f, 0x2a, 0x09, 0xe0, 0xc3, 0xa6, 0x85, + 0x69, 0x4a, 0x2f, 0x0c, 0xe5, 0xc6, 0xa3, 0x80, + 0x66, 0x45, 0x20, 0x03, 0xea, 0xc9, 0xac, 0x8f, + 0x63, 0x40, 0x25, 0x06, 0xef, 0xcc, 0xa9, 0x8a, + }, + { + 0x00, 0x24, 0x48, 0x6c, 0x90, 0xb4, 0xd8, 0xfc, + 0x3d, 0x19, 0x75, 0x51, 0xad, 0x89, 0xe5, 0xc1, + 0x7a, 0x5e, 0x32, 0x16, 0xea, 0xce, 0xa2, 0x86, + 0x47, 0x63, 0x0f, 0x2b, 0xd7, 0xf3, 0x9f, 0xbb, + 0xf4, 0xd0, 0xbc, 0x98, 0x64, 0x40, 0x2c, 0x08, + 0xc9, 0xed, 0x81, 0xa5, 0x59, 0x7d, 0x11, 0x35, + 0x8e, 0xaa, 0xc6, 0xe2, 0x1e, 0x3a, 0x56, 0x72, + 0xb3, 0x97, 0xfb, 0xdf, 0x23, 0x07, 0x6b, 0x4f, + 0xf5, 0xd1, 0xbd, 0x99, 0x65, 0x41, 0x2d, 0x09, + 0xc8, 0xec, 0x80, 0xa4, 0x58, 0x7c, 0x10, 0x34, + 0x8f, 0xab, 0xc7, 0xe3, 0x1f, 0x3b, 0x57, 0x73, + 0xb2, 0x96, 0xfa, 0xde, 0x22, 0x06, 0x6a, 0x4e, + 0x01, 0x25, 0x49, 0x6d, 0x91, 0xb5, 0xd9, 0xfd, + 0x3c, 0x18, 0x74, 0x50, 0xac, 0x88, 0xe4, 0xc0, + 0x7b, 0x5f, 0x33, 0x17, 0xeb, 0xcf, 0xa3, 0x87, + 0x46, 0x62, 0x0e, 0x2a, 0xd6, 0xf2, 0x9e, 0xba, + 0xf7, 0xd3, 0xbf, 0x9b, 0x67, 0x43, 0x2f, 0x0b, + 0xca, 0xee, 0x82, 0xa6, 0x5a, 0x7e, 0x12, 0x36, + 0x8d, 0xa9, 0xc5, 0xe1, 0x1d, 0x39, 0x55, 0x71, + 0xb0, 0x94, 0xf8, 0xdc, 0x20, 0x04, 0x68, 0x4c, + 0x03, 0x27, 0x4b, 0x6f, 0x93, 0xb7, 0xdb, 0xff, + 0x3e, 0x1a, 0x76, 0x52, 0xae, 0x8a, 0xe6, 0xc2, + 0x79, 0x5d, 0x31, 0x15, 0xe9, 0xcd, 0xa1, 0x85, + 0x44, 0x60, 0x0c, 0x28, 0xd4, 0xf0, 0x9c, 0xb8, + 0x02, 0x26, 0x4a, 0x6e, 0x92, 0xb6, 0xda, 0xfe, + 0x3f, 0x1b, 0x77, 0x53, 0xaf, 0x8b, 0xe7, 0xc3, + 0x78, 0x5c, 0x30, 0x14, 0xe8, 0xcc, 0xa0, 0x84, + 0x45, 0x61, 0x0d, 0x29, 0xd5, 0xf1, 0x9d, 0xb9, + 0xf6, 0xd2, 0xbe, 0x9a, 0x66, 0x42, 0x2e, 0x0a, + 0xcb, 0xef, 0x83, 0xa7, 0x5b, 0x7f, 0x13, 0x37, + 0x8c, 0xa8, 0xc4, 0xe0, 0x1c, 0x38, 0x54, 0x70, + 0xb1, 0x95, 0xf9, 0xdd, 0x21, 0x05, 0x69, 0x4d, + }, + { + 0x00, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, + 0x35, 0x10, 0x7f, 0x5a, 0xa1, 0x84, 0xeb, 0xce, + 0x6a, 0x4f, 0x20, 0x05, 0xfe, 0xdb, 0xb4, 0x91, + 0x5f, 0x7a, 0x15, 0x30, 0xcb, 0xee, 0x81, 0xa4, + 0xd4, 0xf1, 0x9e, 0xbb, 0x40, 0x65, 0x0a, 0x2f, + 0xe1, 0xc4, 0xab, 0x8e, 0x75, 0x50, 0x3f, 0x1a, + 0xbe, 0x9b, 0xf4, 0xd1, 0x2a, 0x0f, 0x60, 0x45, + 0x8b, 0xae, 0xc1, 0xe4, 0x1f, 0x3a, 0x55, 0x70, + 0xb5, 0x90, 0xff, 0xda, 0x21, 0x04, 0x6b, 0x4e, + 0x80, 0xa5, 0xca, 0xef, 0x14, 0x31, 0x5e, 0x7b, + 0xdf, 0xfa, 0x95, 0xb0, 0x4b, 0x6e, 0x01, 0x24, + 0xea, 0xcf, 0xa0, 0x85, 0x7e, 0x5b, 0x34, 0x11, + 0x61, 0x44, 0x2b, 0x0e, 0xf5, 0xd0, 0xbf, 0x9a, + 0x54, 0x71, 0x1e, 0x3b, 0xc0, 0xe5, 0x8a, 0xaf, + 0x0b, 0x2e, 0x41, 0x64, 0x9f, 0xba, 0xd5, 0xf0, + 0x3e, 0x1b, 0x74, 0x51, 0xaa, 0x8f, 0xe0, 0xc5, + 0x77, 0x52, 0x3d, 0x18, 0xe3, 0xc6, 0xa9, 0x8c, + 0x42, 0x67, 0x08, 0x2d, 0xd6, 0xf3, 0x9c, 0xb9, + 0x1d, 0x38, 0x57, 0x72, 0x89, 0xac, 0xc3, 0xe6, + 0x28, 0x0d, 0x62, 0x47, 0xbc, 0x99, 0xf6, 0xd3, + 0xa3, 0x86, 0xe9, 0xcc, 0x37, 0x12, 0x7d, 0x58, + 0x96, 0xb3, 0xdc, 0xf9, 0x02, 0x27, 0x48, 0x6d, + 0xc9, 0xec, 0x83, 0xa6, 0x5d, 0x78, 0x17, 0x32, + 0xfc, 0xd9, 0xb6, 0x93, 0x68, 0x4d, 0x22, 0x07, + 0xc2, 0xe7, 0x88, 0xad, 0x56, 0x73, 0x1c, 0x39, + 0xf7, 0xd2, 0xbd, 0x98, 0x63, 0x46, 0x29, 0x0c, + 0xa8, 0x8d, 0xe2, 0xc7, 0x3c, 0x19, 0x76, 0x53, + 0x9d, 0xb8, 0xd7, 0xf2, 0x09, 0x2c, 0x43, 0x66, + 0x16, 0x33, 0x5c, 0x79, 0x82, 0xa7, 0xc8, 0xed, + 0x23, 0x06, 0x69, 0x4c, 0xb7, 0x92, 0xfd, 0xd8, + 0x7c, 0x59, 0x36, 0x13, 0xe8, 0xcd, 0xa2, 0x87, + 0x49, 0x6c, 0x03, 0x26, 0xdd, 0xf8, 0x97, 0xb2, + }, + { + 0x00, 0x26, 0x4c, 0x6a, 0x98, 0xbe, 0xd4, 0xf2, + 0x2d, 0x0b, 0x61, 0x47, 0xb5, 0x93, 0xf9, 0xdf, + 0x5a, 0x7c, 0x16, 0x30, 0xc2, 0xe4, 0x8e, 0xa8, + 0x77, 0x51, 0x3b, 0x1d, 0xef, 0xc9, 0xa3, 0x85, + 0xb4, 0x92, 0xf8, 0xde, 0x2c, 0x0a, 0x60, 0x46, + 0x99, 0xbf, 0xd5, 0xf3, 0x01, 0x27, 0x4d, 0x6b, + 0xee, 0xc8, 0xa2, 0x84, 0x76, 0x50, 0x3a, 0x1c, + 0xc3, 0xe5, 0x8f, 0xa9, 0x5b, 0x7d, 0x17, 0x31, + 0x75, 0x53, 0x39, 0x1f, 0xed, 0xcb, 0xa1, 0x87, + 0x58, 0x7e, 0x14, 0x32, 0xc0, 0xe6, 0x8c, 0xaa, + 0x2f, 0x09, 0x63, 0x45, 0xb7, 0x91, 0xfb, 0xdd, + 0x02, 0x24, 0x4e, 0x68, 0x9a, 0xbc, 0xd6, 0xf0, + 0xc1, 0xe7, 0x8d, 0xab, 0x59, 0x7f, 0x15, 0x33, + 0xec, 0xca, 0xa0, 0x86, 0x74, 0x52, 0x38, 0x1e, + 0x9b, 0xbd, 0xd7, 0xf1, 0x03, 0x25, 0x4f, 0x69, + 0xb6, 0x90, 0xfa, 0xdc, 0x2e, 0x08, 0x62, 0x44, + 0xea, 0xcc, 0xa6, 0x80, 0x72, 0x54, 0x3e, 0x18, + 0xc7, 0xe1, 0x8b, 0xad, 0x5f, 0x79, 0x13, 0x35, + 0xb0, 0x96, 0xfc, 0xda, 0x28, 0x0e, 0x64, 0x42, + 0x9d, 0xbb, 0xd1, 0xf7, 0x05, 0x23, 0x49, 0x6f, + 0x5e, 0x78, 0x12, 0x34, 0xc6, 0xe0, 0x8a, 0xac, + 0x73, 0x55, 0x3f, 0x19, 0xeb, 0xcd, 0xa7, 0x81, + 0x04, 0x22, 0x48, 0x6e, 0x9c, 0xba, 0xd0, 0xf6, + 0x29, 0x0f, 0x65, 0x43, 0xb1, 0x97, 0xfd, 0xdb, + 0x9f, 0xb9, 0xd3, 0xf5, 0x07, 0x21, 0x4b, 0x6d, + 0xb2, 0x94, 0xfe, 0xd8, 0x2a, 0x0c, 0x66, 0x40, + 0xc5, 0xe3, 0x89, 0xaf, 0x5d, 0x7b, 0x11, 0x37, + 0xe8, 0xce, 0xa4, 0x82, 0x70, 0x56, 0x3c, 0x1a, + 0x2b, 0x0d, 0x67, 0x41, 0xb3, 0x95, 0xff, 0xd9, + 0x06, 0x20, 0x4a, 0x6c, 0x9e, 0xb8, 0xd2, 0xf4, + 0x71, 0x57, 0x3d, 0x1b, 0xe9, 0xcf, 0xa5, 0x83, + 0x5c, 0x7a, 0x10, 0x36, 0xc4, 0xe2, 0x88, 0xae, + }, + { + 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x25, 0x02, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0, + 0x4a, 0x6d, 0x04, 0x23, 0xd6, 0xf1, 0x98, 0xbf, + 0x6f, 0x48, 0x21, 0x06, 0xf3, 0xd4, 0xbd, 0x9a, + 0x94, 0xb3, 0xda, 0xfd, 0x08, 0x2f, 0x46, 0x61, + 0xb1, 0x96, 0xff, 0xd8, 0x2d, 0x0a, 0x63, 0x44, + 0xde, 0xf9, 0x90, 0xb7, 0x42, 0x65, 0x0c, 0x2b, + 0xfb, 0xdc, 0xb5, 0x92, 0x67, 0x40, 0x29, 0x0e, + 0x35, 0x12, 0x7b, 0x5c, 0xa9, 0x8e, 0xe7, 0xc0, + 0x10, 0x37, 0x5e, 0x79, 0x8c, 0xab, 0xc2, 0xe5, + 0x7f, 0x58, 0x31, 0x16, 0xe3, 0xc4, 0xad, 0x8a, + 0x5a, 0x7d, 0x14, 0x33, 0xc6, 0xe1, 0x88, 0xaf, + 0xa1, 0x86, 0xef, 0xc8, 0x3d, 0x1a, 0x73, 0x54, + 0x84, 0xa3, 0xca, 0xed, 0x18, 0x3f, 0x56, 0x71, + 0xeb, 0xcc, 0xa5, 0x82, 0x77, 0x50, 0x39, 0x1e, + 0xce, 0xe9, 0x80, 0xa7, 0x52, 0x75, 0x1c, 0x3b, + 0x6a, 0x4d, 0x24, 0x03, 0xf6, 0xd1, 0xb8, 0x9f, + 0x4f, 0x68, 0x01, 0x26, 0xd3, 0xf4, 0x9d, 0xba, + 0x20, 0x07, 0x6e, 0x49, 0xbc, 0x9b, 0xf2, 0xd5, + 0x05, 0x22, 0x4b, 0x6c, 0x99, 0xbe, 0xd7, 0xf0, + 0xfe, 0xd9, 0xb0, 0x97, 0x62, 0x45, 0x2c, 0x0b, + 0xdb, 0xfc, 0x95, 0xb2, 0x47, 0x60, 0x09, 0x2e, + 0xb4, 0x93, 0xfa, 0xdd, 0x28, 0x0f, 0x66, 0x41, + 0x91, 0xb6, 0xdf, 0xf8, 0x0d, 0x2a, 0x43, 0x64, + 0x5f, 0x78, 0x11, 0x36, 0xc3, 0xe4, 0x8d, 0xaa, + 0x7a, 0x5d, 0x34, 0x13, 0xe6, 0xc1, 0xa8, 0x8f, + 0x15, 0x32, 0x5b, 0x7c, 0x89, 0xae, 0xc7, 0xe0, + 0x30, 0x17, 0x7e, 0x59, 0xac, 0x8b, 0xe2, 0xc5, + 0xcb, 0xec, 0x85, 0xa2, 0x57, 0x70, 0x19, 0x3e, + 0xee, 0xc9, 0xa0, 0x87, 0x72, 0x55, 0x3c, 0x1b, + 0x81, 0xa6, 0xcf, 0xe8, 0x1d, 0x3a, 0x53, 0x74, + 0xa4, 0x83, 0xea, 0xcd, 0x38, 0x1f, 0x76, 0x51, + }, + { + 0x00, 0x28, 0x50, 0x78, 0xa0, 0x88, 0xf0, 0xd8, + 0x5d, 0x75, 0x0d, 0x25, 0xfd, 0xd5, 0xad, 0x85, + 0xba, 0x92, 0xea, 0xc2, 0x1a, 0x32, 0x4a, 0x62, + 0xe7, 0xcf, 0xb7, 0x9f, 0x47, 0x6f, 0x17, 0x3f, + 0x69, 0x41, 0x39, 0x11, 0xc9, 0xe1, 0x99, 0xb1, + 0x34, 0x1c, 0x64, 0x4c, 0x94, 0xbc, 0xc4, 0xec, + 0xd3, 0xfb, 0x83, 0xab, 0x73, 0x5b, 0x23, 0x0b, + 0x8e, 0xa6, 0xde, 0xf6, 0x2e, 0x06, 0x7e, 0x56, + 0xd2, 0xfa, 0x82, 0xaa, 0x72, 0x5a, 0x22, 0x0a, + 0x8f, 0xa7, 0xdf, 0xf7, 0x2f, 0x07, 0x7f, 0x57, + 0x68, 0x40, 0x38, 0x10, 0xc8, 0xe0, 0x98, 0xb0, + 0x35, 0x1d, 0x65, 0x4d, 0x95, 0xbd, 0xc5, 0xed, + 0xbb, 0x93, 0xeb, 0xc3, 0x1b, 0x33, 0x4b, 0x63, + 0xe6, 0xce, 0xb6, 0x9e, 0x46, 0x6e, 0x16, 0x3e, + 0x01, 0x29, 0x51, 0x79, 0xa1, 0x89, 0xf1, 0xd9, + 0x5c, 0x74, 0x0c, 0x24, 0xfc, 0xd4, 0xac, 0x84, + 0xb9, 0x91, 0xe9, 0xc1, 0x19, 0x31, 0x49, 0x61, + 0xe4, 0xcc, 0xb4, 0x9c, 0x44, 0x6c, 0x14, 0x3c, + 0x03, 0x2b, 0x53, 0x7b, 0xa3, 0x8b, 0xf3, 0xdb, + 0x5e, 0x76, 0x0e, 0x26, 0xfe, 0xd6, 0xae, 0x86, + 0xd0, 0xf8, 0x80, 0xa8, 0x70, 0x58, 0x20, 0x08, + 0x8d, 0xa5, 0xdd, 0xf5, 0x2d, 0x05, 0x7d, 0x55, + 0x6a, 0x42, 0x3a, 0x12, 0xca, 0xe2, 0x9a, 0xb2, + 0x37, 0x1f, 0x67, 0x4f, 0x97, 0xbf, 0xc7, 0xef, + 0x6b, 0x43, 0x3b, 0x13, 0xcb, 0xe3, 0x9b, 0xb3, + 0x36, 0x1e, 0x66, 0x4e, 0x96, 0xbe, 0xc6, 0xee, + 0xd1, 0xf9, 0x81, 0xa9, 0x71, 0x59, 0x21, 0x09, + 0x8c, 0xa4, 0xdc, 0xf4, 0x2c, 0x04, 0x7c, 0x54, + 0x02, 0x2a, 0x52, 0x7a, 0xa2, 0x8a, 0xf2, 0xda, + 0x5f, 0x77, 0x0f, 0x27, 0xff, 0xd7, 0xaf, 0x87, + 0xb8, 0x90, 0xe8, 0xc0, 0x18, 0x30, 0x48, 0x60, + 0xe5, 0xcd, 0xb5, 0x9d, 0x45, 0x6d, 0x15, 0x3d, + }, + { + 0x00, 0x29, 0x52, 0x7b, 0xa4, 0x8d, 0xf6, 0xdf, + 0x55, 0x7c, 0x07, 0x2e, 0xf1, 0xd8, 0xa3, 0x8a, + 0xaa, 0x83, 0xf8, 0xd1, 0x0e, 0x27, 0x5c, 0x75, + 0xff, 0xd6, 0xad, 0x84, 0x5b, 0x72, 0x09, 0x20, + 0x49, 0x60, 0x1b, 0x32, 0xed, 0xc4, 0xbf, 0x96, + 0x1c, 0x35, 0x4e, 0x67, 0xb8, 0x91, 0xea, 0xc3, + 0xe3, 0xca, 0xb1, 0x98, 0x47, 0x6e, 0x15, 0x3c, + 0xb6, 0x9f, 0xe4, 0xcd, 0x12, 0x3b, 0x40, 0x69, + 0x92, 0xbb, 0xc0, 0xe9, 0x36, 0x1f, 0x64, 0x4d, + 0xc7, 0xee, 0x95, 0xbc, 0x63, 0x4a, 0x31, 0x18, + 0x38, 0x11, 0x6a, 0x43, 0x9c, 0xb5, 0xce, 0xe7, + 0x6d, 0x44, 0x3f, 0x16, 0xc9, 0xe0, 0x9b, 0xb2, + 0xdb, 0xf2, 0x89, 0xa0, 0x7f, 0x56, 0x2d, 0x04, + 0x8e, 0xa7, 0xdc, 0xf5, 0x2a, 0x03, 0x78, 0x51, + 0x71, 0x58, 0x23, 0x0a, 0xd5, 0xfc, 0x87, 0xae, + 0x24, 0x0d, 0x76, 0x5f, 0x80, 0xa9, 0xd2, 0xfb, + 0x39, 0x10, 0x6b, 0x42, 0x9d, 0xb4, 0xcf, 0xe6, + 0x6c, 0x45, 0x3e, 0x17, 0xc8, 0xe1, 0x9a, 0xb3, + 0x93, 0xba, 0xc1, 0xe8, 0x37, 0x1e, 0x65, 0x4c, + 0xc6, 0xef, 0x94, 0xbd, 0x62, 0x4b, 0x30, 0x19, + 0x70, 0x59, 0x22, 0x0b, 0xd4, 0xfd, 0x86, 0xaf, + 0x25, 0x0c, 0x77, 0x5e, 0x81, 0xa8, 0xd3, 0xfa, + 0xda, 0xf3, 0x88, 0xa1, 0x7e, 0x57, 0x2c, 0x05, + 0x8f, 0xa6, 0xdd, 0xf4, 0x2b, 0x02, 0x79, 0x50, + 0xab, 0x82, 0xf9, 0xd0, 0x0f, 0x26, 0x5d, 0x74, + 0xfe, 0xd7, 0xac, 0x85, 0x5a, 0x73, 0x08, 0x21, + 0x01, 0x28, 0x53, 0x7a, 0xa5, 0x8c, 0xf7, 0xde, + 0x54, 0x7d, 0x06, 0x2f, 0xf0, 0xd9, 0xa2, 0x8b, + 0xe2, 0xcb, 0xb0, 0x99, 0x46, 0x6f, 0x14, 0x3d, + 0xb7, 0x9e, 0xe5, 0xcc, 0x13, 0x3a, 0x41, 0x68, + 0x48, 0x61, 0x1a, 0x33, 0xec, 0xc5, 0xbe, 0x97, + 0x1d, 0x34, 0x4f, 0x66, 0xb9, 0x90, 0xeb, 0xc2, + }, + { + 0x00, 0x2a, 0x54, 0x7e, 0xa8, 0x82, 0xfc, 0xd6, + 0x4d, 0x67, 0x19, 0x33, 0xe5, 0xcf, 0xb1, 0x9b, + 0x9a, 0xb0, 0xce, 0xe4, 0x32, 0x18, 0x66, 0x4c, + 0xd7, 0xfd, 0x83, 0xa9, 0x7f, 0x55, 0x2b, 0x01, + 0x29, 0x03, 0x7d, 0x57, 0x81, 0xab, 0xd5, 0xff, + 0x64, 0x4e, 0x30, 0x1a, 0xcc, 0xe6, 0x98, 0xb2, + 0xb3, 0x99, 0xe7, 0xcd, 0x1b, 0x31, 0x4f, 0x65, + 0xfe, 0xd4, 0xaa, 0x80, 0x56, 0x7c, 0x02, 0x28, + 0x52, 0x78, 0x06, 0x2c, 0xfa, 0xd0, 0xae, 0x84, + 0x1f, 0x35, 0x4b, 0x61, 0xb7, 0x9d, 0xe3, 0xc9, + 0xc8, 0xe2, 0x9c, 0xb6, 0x60, 0x4a, 0x34, 0x1e, + 0x85, 0xaf, 0xd1, 0xfb, 0x2d, 0x07, 0x79, 0x53, + 0x7b, 0x51, 0x2f, 0x05, 0xd3, 0xf9, 0x87, 0xad, + 0x36, 0x1c, 0x62, 0x48, 0x9e, 0xb4, 0xca, 0xe0, + 0xe1, 0xcb, 0xb5, 0x9f, 0x49, 0x63, 0x1d, 0x37, + 0xac, 0x86, 0xf8, 0xd2, 0x04, 0x2e, 0x50, 0x7a, + 0xa4, 0x8e, 0xf0, 0xda, 0x0c, 0x26, 0x58, 0x72, + 0xe9, 0xc3, 0xbd, 0x97, 0x41, 0x6b, 0x15, 0x3f, + 0x3e, 0x14, 0x6a, 0x40, 0x96, 0xbc, 0xc2, 0xe8, + 0x73, 0x59, 0x27, 0x0d, 0xdb, 0xf1, 0x8f, 0xa5, + 0x8d, 0xa7, 0xd9, 0xf3, 0x25, 0x0f, 0x71, 0x5b, + 0xc0, 0xea, 0x94, 0xbe, 0x68, 0x42, 0x3c, 0x16, + 0x17, 0x3d, 0x43, 0x69, 0xbf, 0x95, 0xeb, 0xc1, + 0x5a, 0x70, 0x0e, 0x24, 0xf2, 0xd8, 0xa6, 0x8c, + 0xf6, 0xdc, 0xa2, 0x88, 0x5e, 0x74, 0x0a, 0x20, + 0xbb, 0x91, 0xef, 0xc5, 0x13, 0x39, 0x47, 0x6d, + 0x6c, 0x46, 0x38, 0x12, 0xc4, 0xee, 0x90, 0xba, + 0x21, 0x0b, 0x75, 0x5f, 0x89, 0xa3, 0xdd, 0xf7, + 0xdf, 0xf5, 0x8b, 0xa1, 0x77, 0x5d, 0x23, 0x09, + 0x92, 0xb8, 0xc6, 0xec, 0x3a, 0x10, 0x6e, 0x44, + 0x45, 0x6f, 0x11, 0x3b, 0xed, 0xc7, 0xb9, 0x93, + 0x08, 0x22, 0x5c, 0x76, 0xa0, 0x8a, 0xf4, 0xde, + }, + { + 0x00, 0x2b, 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, + 0x45, 0x6e, 0x13, 0x38, 0xe9, 0xc2, 0xbf, 0x94, + 0x8a, 0xa1, 0xdc, 0xf7, 0x26, 0x0d, 0x70, 0x5b, + 0xcf, 0xe4, 0x99, 0xb2, 0x63, 0x48, 0x35, 0x1e, + 0x09, 0x22, 0x5f, 0x74, 0xa5, 0x8e, 0xf3, 0xd8, + 0x4c, 0x67, 0x1a, 0x31, 0xe0, 0xcb, 0xb6, 0x9d, + 0x83, 0xa8, 0xd5, 0xfe, 0x2f, 0x04, 0x79, 0x52, + 0xc6, 0xed, 0x90, 0xbb, 0x6a, 0x41, 0x3c, 0x17, + 0x12, 0x39, 0x44, 0x6f, 0xbe, 0x95, 0xe8, 0xc3, + 0x57, 0x7c, 0x01, 0x2a, 0xfb, 0xd0, 0xad, 0x86, + 0x98, 0xb3, 0xce, 0xe5, 0x34, 0x1f, 0x62, 0x49, + 0xdd, 0xf6, 0x8b, 0xa0, 0x71, 0x5a, 0x27, 0x0c, + 0x1b, 0x30, 0x4d, 0x66, 0xb7, 0x9c, 0xe1, 0xca, + 0x5e, 0x75, 0x08, 0x23, 0xf2, 0xd9, 0xa4, 0x8f, + 0x91, 0xba, 0xc7, 0xec, 0x3d, 0x16, 0x6b, 0x40, + 0xd4, 0xff, 0x82, 0xa9, 0x78, 0x53, 0x2e, 0x05, + 0x24, 0x0f, 0x72, 0x59, 0x88, 0xa3, 0xde, 0xf5, + 0x61, 0x4a, 0x37, 0x1c, 0xcd, 0xe6, 0x9b, 0xb0, + 0xae, 0x85, 0xf8, 0xd3, 0x02, 0x29, 0x54, 0x7f, + 0xeb, 0xc0, 0xbd, 0x96, 0x47, 0x6c, 0x11, 0x3a, + 0x2d, 0x06, 0x7b, 0x50, 0x81, 0xaa, 0xd7, 0xfc, + 0x68, 0x43, 0x3e, 0x15, 0xc4, 0xef, 0x92, 0xb9, + 0xa7, 0x8c, 0xf1, 0xda, 0x0b, 0x20, 0x5d, 0x76, + 0xe2, 0xc9, 0xb4, 0x9f, 0x4e, 0x65, 0x18, 0x33, + 0x36, 0x1d, 0x60, 0x4b, 0x9a, 0xb1, 0xcc, 0xe7, + 0x73, 0x58, 0x25, 0x0e, 0xdf, 0xf4, 0x89, 0xa2, + 0xbc, 0x97, 0xea, 0xc1, 0x10, 0x3b, 0x46, 0x6d, + 0xf9, 0xd2, 0xaf, 0x84, 0x55, 0x7e, 0x03, 0x28, + 0x3f, 0x14, 0x69, 0x42, 0x93, 0xb8, 0xc5, 0xee, + 0x7a, 0x51, 0x2c, 0x07, 0xd6, 0xfd, 0x80, 0xab, + 0xb5, 0x9e, 0xe3, 0xc8, 0x19, 0x32, 0x4f, 0x64, + 0xf0, 0xdb, 0xa6, 0x8d, 0x5c, 0x77, 0x0a, 0x21, + }, + { + 0x00, 0x2c, 0x58, 0x74, 0xb0, 0x9c, 0xe8, 0xc4, + 0x7d, 0x51, 0x25, 0x09, 0xcd, 0xe1, 0x95, 0xb9, + 0xfa, 0xd6, 0xa2, 0x8e, 0x4a, 0x66, 0x12, 0x3e, + 0x87, 0xab, 0xdf, 0xf3, 0x37, 0x1b, 0x6f, 0x43, + 0xe9, 0xc5, 0xb1, 0x9d, 0x59, 0x75, 0x01, 0x2d, + 0x94, 0xb8, 0xcc, 0xe0, 0x24, 0x08, 0x7c, 0x50, + 0x13, 0x3f, 0x4b, 0x67, 0xa3, 0x8f, 0xfb, 0xd7, + 0x6e, 0x42, 0x36, 0x1a, 0xde, 0xf2, 0x86, 0xaa, + 0xcf, 0xe3, 0x97, 0xbb, 0x7f, 0x53, 0x27, 0x0b, + 0xb2, 0x9e, 0xea, 0xc6, 0x02, 0x2e, 0x5a, 0x76, + 0x35, 0x19, 0x6d, 0x41, 0x85, 0xa9, 0xdd, 0xf1, + 0x48, 0x64, 0x10, 0x3c, 0xf8, 0xd4, 0xa0, 0x8c, + 0x26, 0x0a, 0x7e, 0x52, 0x96, 0xba, 0xce, 0xe2, + 0x5b, 0x77, 0x03, 0x2f, 0xeb, 0xc7, 0xb3, 0x9f, + 0xdc, 0xf0, 0x84, 0xa8, 0x6c, 0x40, 0x34, 0x18, + 0xa1, 0x8d, 0xf9, 0xd5, 0x11, 0x3d, 0x49, 0x65, + 0x83, 0xaf, 0xdb, 0xf7, 0x33, 0x1f, 0x6b, 0x47, + 0xfe, 0xd2, 0xa6, 0x8a, 0x4e, 0x62, 0x16, 0x3a, + 0x79, 0x55, 0x21, 0x0d, 0xc9, 0xe5, 0x91, 0xbd, + 0x04, 0x28, 0x5c, 0x70, 0xb4, 0x98, 0xec, 0xc0, + 0x6a, 0x46, 0x32, 0x1e, 0xda, 0xf6, 0x82, 0xae, + 0x17, 0x3b, 0x4f, 0x63, 0xa7, 0x8b, 0xff, 0xd3, + 0x90, 0xbc, 0xc8, 0xe4, 0x20, 0x0c, 0x78, 0x54, + 0xed, 0xc1, 0xb5, 0x99, 0x5d, 0x71, 0x05, 0x29, + 0x4c, 0x60, 0x14, 0x38, 0xfc, 0xd0, 0xa4, 0x88, + 0x31, 0x1d, 0x69, 0x45, 0x81, 0xad, 0xd9, 0xf5, + 0xb6, 0x9a, 0xee, 0xc2, 0x06, 0x2a, 0x5e, 0x72, + 0xcb, 0xe7, 0x93, 0xbf, 0x7b, 0x57, 0x23, 0x0f, + 0xa5, 0x89, 0xfd, 0xd1, 0x15, 0x39, 0x4d, 0x61, + 0xd8, 0xf4, 0x80, 0xac, 0x68, 0x44, 0x30, 0x1c, + 0x5f, 0x73, 0x07, 0x2b, 0xef, 0xc3, 0xb7, 0x9b, + 0x22, 0x0e, 0x7a, 0x56, 0x92, 0xbe, 0xca, 0xe6, + }, + { + 0x00, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, + 0x75, 0x58, 0x2f, 0x02, 0xc1, 0xec, 0x9b, 0xb6, + 0xea, 0xc7, 0xb0, 0x9d, 0x5e, 0x73, 0x04, 0x29, + 0x9f, 0xb2, 0xc5, 0xe8, 0x2b, 0x06, 0x71, 0x5c, + 0xc9, 0xe4, 0x93, 0xbe, 0x7d, 0x50, 0x27, 0x0a, + 0xbc, 0x91, 0xe6, 0xcb, 0x08, 0x25, 0x52, 0x7f, + 0x23, 0x0e, 0x79, 0x54, 0x97, 0xba, 0xcd, 0xe0, + 0x56, 0x7b, 0x0c, 0x21, 0xe2, 0xcf, 0xb8, 0x95, + 0x8f, 0xa2, 0xd5, 0xf8, 0x3b, 0x16, 0x61, 0x4c, + 0xfa, 0xd7, 0xa0, 0x8d, 0x4e, 0x63, 0x14, 0x39, + 0x65, 0x48, 0x3f, 0x12, 0xd1, 0xfc, 0x8b, 0xa6, + 0x10, 0x3d, 0x4a, 0x67, 0xa4, 0x89, 0xfe, 0xd3, + 0x46, 0x6b, 0x1c, 0x31, 0xf2, 0xdf, 0xa8, 0x85, + 0x33, 0x1e, 0x69, 0x44, 0x87, 0xaa, 0xdd, 0xf0, + 0xac, 0x81, 0xf6, 0xdb, 0x18, 0x35, 0x42, 0x6f, + 0xd9, 0xf4, 0x83, 0xae, 0x6d, 0x40, 0x37, 0x1a, + 0x03, 0x2e, 0x59, 0x74, 0xb7, 0x9a, 0xed, 0xc0, + 0x76, 0x5b, 0x2c, 0x01, 0xc2, 0xef, 0x98, 0xb5, + 0xe9, 0xc4, 0xb3, 0x9e, 0x5d, 0x70, 0x07, 0x2a, + 0x9c, 0xb1, 0xc6, 0xeb, 0x28, 0x05, 0x72, 0x5f, + 0xca, 0xe7, 0x90, 0xbd, 0x7e, 0x53, 0x24, 0x09, + 0xbf, 0x92, 0xe5, 0xc8, 0x0b, 0x26, 0x51, 0x7c, + 0x20, 0x0d, 0x7a, 0x57, 0x94, 0xb9, 0xce, 0xe3, + 0x55, 0x78, 0x0f, 0x22, 0xe1, 0xcc, 0xbb, 0x96, + 0x8c, 0xa1, 0xd6, 0xfb, 0x38, 0x15, 0x62, 0x4f, + 0xf9, 0xd4, 0xa3, 0x8e, 0x4d, 0x60, 0x17, 0x3a, + 0x66, 0x4b, 0x3c, 0x11, 0xd2, 0xff, 0x88, 0xa5, + 0x13, 0x3e, 0x49, 0x64, 0xa7, 0x8a, 0xfd, 0xd0, + 0x45, 0x68, 0x1f, 0x32, 0xf1, 0xdc, 0xab, 0x86, + 0x30, 0x1d, 0x6a, 0x47, 0x84, 0xa9, 0xde, 0xf3, + 0xaf, 0x82, 0xf5, 0xd8, 0x1b, 0x36, 0x41, 0x6c, + 0xda, 0xf7, 0x80, 0xad, 0x6e, 0x43, 0x34, 0x19, + }, + { + 0x00, 0x2e, 0x5c, 0x72, 0xb8, 0x96, 0xe4, 0xca, + 0x6d, 0x43, 0x31, 0x1f, 0xd5, 0xfb, 0x89, 0xa7, + 0xda, 0xf4, 0x86, 0xa8, 0x62, 0x4c, 0x3e, 0x10, + 0xb7, 0x99, 0xeb, 0xc5, 0x0f, 0x21, 0x53, 0x7d, + 0xa9, 0x87, 0xf5, 0xdb, 0x11, 0x3f, 0x4d, 0x63, + 0xc4, 0xea, 0x98, 0xb6, 0x7c, 0x52, 0x20, 0x0e, + 0x73, 0x5d, 0x2f, 0x01, 0xcb, 0xe5, 0x97, 0xb9, + 0x1e, 0x30, 0x42, 0x6c, 0xa6, 0x88, 0xfa, 0xd4, + 0x4f, 0x61, 0x13, 0x3d, 0xf7, 0xd9, 0xab, 0x85, + 0x22, 0x0c, 0x7e, 0x50, 0x9a, 0xb4, 0xc6, 0xe8, + 0x95, 0xbb, 0xc9, 0xe7, 0x2d, 0x03, 0x71, 0x5f, + 0xf8, 0xd6, 0xa4, 0x8a, 0x40, 0x6e, 0x1c, 0x32, + 0xe6, 0xc8, 0xba, 0x94, 0x5e, 0x70, 0x02, 0x2c, + 0x8b, 0xa5, 0xd7, 0xf9, 0x33, 0x1d, 0x6f, 0x41, + 0x3c, 0x12, 0x60, 0x4e, 0x84, 0xaa, 0xd8, 0xf6, + 0x51, 0x7f, 0x0d, 0x23, 0xe9, 0xc7, 0xb5, 0x9b, + 0x9e, 0xb0, 0xc2, 0xec, 0x26, 0x08, 0x7a, 0x54, + 0xf3, 0xdd, 0xaf, 0x81, 0x4b, 0x65, 0x17, 0x39, + 0x44, 0x6a, 0x18, 0x36, 0xfc, 0xd2, 0xa0, 0x8e, + 0x29, 0x07, 0x75, 0x5b, 0x91, 0xbf, 0xcd, 0xe3, + 0x37, 0x19, 0x6b, 0x45, 0x8f, 0xa1, 0xd3, 0xfd, + 0x5a, 0x74, 0x06, 0x28, 0xe2, 0xcc, 0xbe, 0x90, + 0xed, 0xc3, 0xb1, 0x9f, 0x55, 0x7b, 0x09, 0x27, + 0x80, 0xae, 0xdc, 0xf2, 0x38, 0x16, 0x64, 0x4a, + 0xd1, 0xff, 0x8d, 0xa3, 0x69, 0x47, 0x35, 0x1b, + 0xbc, 0x92, 0xe0, 0xce, 0x04, 0x2a, 0x58, 0x76, + 0x0b, 0x25, 0x57, 0x79, 0xb3, 0x9d, 0xef, 0xc1, + 0x66, 0x48, 0x3a, 0x14, 0xde, 0xf0, 0x82, 0xac, + 0x78, 0x56, 0x24, 0x0a, 0xc0, 0xee, 0x9c, 0xb2, + 0x15, 0x3b, 0x49, 0x67, 0xad, 0x83, 0xf1, 0xdf, + 0xa2, 0x8c, 0xfe, 0xd0, 0x1a, 0x34, 0x46, 0x68, + 0xcf, 0xe1, 0x93, 0xbd, 0x77, 0x59, 0x2b, 0x05, + }, + { + 0x00, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, + 0x65, 0x4a, 0x3b, 0x14, 0xd9, 0xf6, 0x87, 0xa8, + 0xca, 0xe5, 0x94, 0xbb, 0x76, 0x59, 0x28, 0x07, + 0xaf, 0x80, 0xf1, 0xde, 0x13, 0x3c, 0x4d, 0x62, + 0x89, 0xa6, 0xd7, 0xf8, 0x35, 0x1a, 0x6b, 0x44, + 0xec, 0xc3, 0xb2, 0x9d, 0x50, 0x7f, 0x0e, 0x21, + 0x43, 0x6c, 0x1d, 0x32, 0xff, 0xd0, 0xa1, 0x8e, + 0x26, 0x09, 0x78, 0x57, 0x9a, 0xb5, 0xc4, 0xeb, + 0x0f, 0x20, 0x51, 0x7e, 0xb3, 0x9c, 0xed, 0xc2, + 0x6a, 0x45, 0x34, 0x1b, 0xd6, 0xf9, 0x88, 0xa7, + 0xc5, 0xea, 0x9b, 0xb4, 0x79, 0x56, 0x27, 0x08, + 0xa0, 0x8f, 0xfe, 0xd1, 0x1c, 0x33, 0x42, 0x6d, + 0x86, 0xa9, 0xd8, 0xf7, 0x3a, 0x15, 0x64, 0x4b, + 0xe3, 0xcc, 0xbd, 0x92, 0x5f, 0x70, 0x01, 0x2e, + 0x4c, 0x63, 0x12, 0x3d, 0xf0, 0xdf, 0xae, 0x81, + 0x29, 0x06, 0x77, 0x58, 0x95, 0xba, 0xcb, 0xe4, + 0x1e, 0x31, 0x40, 0x6f, 0xa2, 0x8d, 0xfc, 0xd3, + 0x7b, 0x54, 0x25, 0x0a, 0xc7, 0xe8, 0x99, 0xb6, + 0xd4, 0xfb, 0x8a, 0xa5, 0x68, 0x47, 0x36, 0x19, + 0xb1, 0x9e, 0xef, 0xc0, 0x0d, 0x22, 0x53, 0x7c, + 0x97, 0xb8, 0xc9, 0xe6, 0x2b, 0x04, 0x75, 0x5a, + 0xf2, 0xdd, 0xac, 0x83, 0x4e, 0x61, 0x10, 0x3f, + 0x5d, 0x72, 0x03, 0x2c, 0xe1, 0xce, 0xbf, 0x90, + 0x38, 0x17, 0x66, 0x49, 0x84, 0xab, 0xda, 0xf5, + 0x11, 0x3e, 0x4f, 0x60, 0xad, 0x82, 0xf3, 0xdc, + 0x74, 0x5b, 0x2a, 0x05, 0xc8, 0xe7, 0x96, 0xb9, + 0xdb, 0xf4, 0x85, 0xaa, 0x67, 0x48, 0x39, 0x16, + 0xbe, 0x91, 0xe0, 0xcf, 0x02, 0x2d, 0x5c, 0x73, + 0x98, 0xb7, 0xc6, 0xe9, 0x24, 0x0b, 0x7a, 0x55, + 0xfd, 0xd2, 0xa3, 0x8c, 0x41, 0x6e, 0x1f, 0x30, + 0x52, 0x7d, 0x0c, 0x23, 0xee, 0xc1, 0xb0, 0x9f, + 0x37, 0x18, 0x69, 0x46, 0x8b, 0xa4, 0xd5, 0xfa, + }, + { + 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x9d, 0xad, 0xfd, 0xcd, 0x5d, 0x6d, 0x3d, 0x0d, + 0x27, 0x17, 0x47, 0x77, 0xe7, 0xd7, 0x87, 0xb7, + 0xba, 0x8a, 0xda, 0xea, 0x7a, 0x4a, 0x1a, 0x2a, + 0x4e, 0x7e, 0x2e, 0x1e, 0x8e, 0xbe, 0xee, 0xde, + 0xd3, 0xe3, 0xb3, 0x83, 0x13, 0x23, 0x73, 0x43, + 0x69, 0x59, 0x09, 0x39, 0xa9, 0x99, 0xc9, 0xf9, + 0xf4, 0xc4, 0x94, 0xa4, 0x34, 0x04, 0x54, 0x64, + 0x9c, 0xac, 0xfc, 0xcc, 0x5c, 0x6c, 0x3c, 0x0c, + 0x01, 0x31, 0x61, 0x51, 0xc1, 0xf1, 0xa1, 0x91, + 0xbb, 0x8b, 0xdb, 0xeb, 0x7b, 0x4b, 0x1b, 0x2b, + 0x26, 0x16, 0x46, 0x76, 0xe6, 0xd6, 0x86, 0xb6, + 0xd2, 0xe2, 0xb2, 0x82, 0x12, 0x22, 0x72, 0x42, + 0x4f, 0x7f, 0x2f, 0x1f, 0x8f, 0xbf, 0xef, 0xdf, + 0xf5, 0xc5, 0x95, 0xa5, 0x35, 0x05, 0x55, 0x65, + 0x68, 0x58, 0x08, 0x38, 0xa8, 0x98, 0xc8, 0xf8, + 0x25, 0x15, 0x45, 0x75, 0xe5, 0xd5, 0x85, 0xb5, + 0xb8, 0x88, 0xd8, 0xe8, 0x78, 0x48, 0x18, 0x28, + 0x02, 0x32, 0x62, 0x52, 0xc2, 0xf2, 0xa2, 0x92, + 0x9f, 0xaf, 0xff, 0xcf, 0x5f, 0x6f, 0x3f, 0x0f, + 0x6b, 0x5b, 0x0b, 0x3b, 0xab, 0x9b, 0xcb, 0xfb, + 0xf6, 0xc6, 0x96, 0xa6, 0x36, 0x06, 0x56, 0x66, + 0x4c, 0x7c, 0x2c, 0x1c, 0x8c, 0xbc, 0xec, 0xdc, + 0xd1, 0xe1, 0xb1, 0x81, 0x11, 0x21, 0x71, 0x41, + 0xb9, 0x89, 0xd9, 0xe9, 0x79, 0x49, 0x19, 0x29, + 0x24, 0x14, 0x44, 0x74, 0xe4, 0xd4, 0x84, 0xb4, + 0x9e, 0xae, 0xfe, 0xce, 0x5e, 0x6e, 0x3e, 0x0e, + 0x03, 0x33, 0x63, 0x53, 0xc3, 0xf3, 0xa3, 0x93, + 0xf7, 0xc7, 0x97, 0xa7, 0x37, 0x07, 0x57, 0x67, + 0x6a, 0x5a, 0x0a, 0x3a, 0xaa, 0x9a, 0xca, 0xfa, + 0xd0, 0xe0, 0xb0, 0x80, 0x10, 0x20, 0x70, 0x40, + 0x4d, 0x7d, 0x2d, 0x1d, 0x8d, 0xbd, 0xed, 0xdd, + }, + { + 0x00, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, + 0x95, 0xa4, 0xf7, 0xc6, 0x51, 0x60, 0x33, 0x02, + 0x37, 0x06, 0x55, 0x64, 0xf3, 0xc2, 0x91, 0xa0, + 0xa2, 0x93, 0xc0, 0xf1, 0x66, 0x57, 0x04, 0x35, + 0x6e, 0x5f, 0x0c, 0x3d, 0xaa, 0x9b, 0xc8, 0xf9, + 0xfb, 0xca, 0x99, 0xa8, 0x3f, 0x0e, 0x5d, 0x6c, + 0x59, 0x68, 0x3b, 0x0a, 0x9d, 0xac, 0xff, 0xce, + 0xcc, 0xfd, 0xae, 0x9f, 0x08, 0x39, 0x6a, 0x5b, + 0xdc, 0xed, 0xbe, 0x8f, 0x18, 0x29, 0x7a, 0x4b, + 0x49, 0x78, 0x2b, 0x1a, 0x8d, 0xbc, 0xef, 0xde, + 0xeb, 0xda, 0x89, 0xb8, 0x2f, 0x1e, 0x4d, 0x7c, + 0x7e, 0x4f, 0x1c, 0x2d, 0xba, 0x8b, 0xd8, 0xe9, + 0xb2, 0x83, 0xd0, 0xe1, 0x76, 0x47, 0x14, 0x25, + 0x27, 0x16, 0x45, 0x74, 0xe3, 0xd2, 0x81, 0xb0, + 0x85, 0xb4, 0xe7, 0xd6, 0x41, 0x70, 0x23, 0x12, + 0x10, 0x21, 0x72, 0x43, 0xd4, 0xe5, 0xb6, 0x87, + 0xa5, 0x94, 0xc7, 0xf6, 0x61, 0x50, 0x03, 0x32, + 0x30, 0x01, 0x52, 0x63, 0xf4, 0xc5, 0x96, 0xa7, + 0x92, 0xa3, 0xf0, 0xc1, 0x56, 0x67, 0x34, 0x05, + 0x07, 0x36, 0x65, 0x54, 0xc3, 0xf2, 0xa1, 0x90, + 0xcb, 0xfa, 0xa9, 0x98, 0x0f, 0x3e, 0x6d, 0x5c, + 0x5e, 0x6f, 0x3c, 0x0d, 0x9a, 0xab, 0xf8, 0xc9, + 0xfc, 0xcd, 0x9e, 0xaf, 0x38, 0x09, 0x5a, 0x6b, + 0x69, 0x58, 0x0b, 0x3a, 0xad, 0x9c, 0xcf, 0xfe, + 0x79, 0x48, 0x1b, 0x2a, 0xbd, 0x8c, 0xdf, 0xee, + 0xec, 0xdd, 0x8e, 0xbf, 0x28, 0x19, 0x4a, 0x7b, + 0x4e, 0x7f, 0x2c, 0x1d, 0x8a, 0xbb, 0xe8, 0xd9, + 0xdb, 0xea, 0xb9, 0x88, 0x1f, 0x2e, 0x7d, 0x4c, + 0x17, 0x26, 0x75, 0x44, 0xd3, 0xe2, 0xb1, 0x80, + 0x82, 0xb3, 0xe0, 0xd1, 0x46, 0x77, 0x24, 0x15, + 0x20, 0x11, 0x42, 0x73, 0xe4, 0xd5, 0x86, 0xb7, + 0xb5, 0x84, 0xd7, 0xe6, 0x71, 0x40, 0x13, 0x22, + }, + { + 0x00, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, + 0x8d, 0xbf, 0xe9, 0xdb, 0x45, 0x77, 0x21, 0x13, + 0x07, 0x35, 0x63, 0x51, 0xcf, 0xfd, 0xab, 0x99, + 0x8a, 0xb8, 0xee, 0xdc, 0x42, 0x70, 0x26, 0x14, + 0x0e, 0x3c, 0x6a, 0x58, 0xc6, 0xf4, 0xa2, 0x90, + 0x83, 0xb1, 0xe7, 0xd5, 0x4b, 0x79, 0x2f, 0x1d, + 0x09, 0x3b, 0x6d, 0x5f, 0xc1, 0xf3, 0xa5, 0x97, + 0x84, 0xb6, 0xe0, 0xd2, 0x4c, 0x7e, 0x28, 0x1a, + 0x1c, 0x2e, 0x78, 0x4a, 0xd4, 0xe6, 0xb0, 0x82, + 0x91, 0xa3, 0xf5, 0xc7, 0x59, 0x6b, 0x3d, 0x0f, + 0x1b, 0x29, 0x7f, 0x4d, 0xd3, 0xe1, 0xb7, 0x85, + 0x96, 0xa4, 0xf2, 0xc0, 0x5e, 0x6c, 0x3a, 0x08, + 0x12, 0x20, 0x76, 0x44, 0xda, 0xe8, 0xbe, 0x8c, + 0x9f, 0xad, 0xfb, 0xc9, 0x57, 0x65, 0x33, 0x01, + 0x15, 0x27, 0x71, 0x43, 0xdd, 0xef, 0xb9, 0x8b, + 0x98, 0xaa, 0xfc, 0xce, 0x50, 0x62, 0x34, 0x06, + 0x38, 0x0a, 0x5c, 0x6e, 0xf0, 0xc2, 0x94, 0xa6, + 0xb5, 0x87, 0xd1, 0xe3, 0x7d, 0x4f, 0x19, 0x2b, + 0x3f, 0x0d, 0x5b, 0x69, 0xf7, 0xc5, 0x93, 0xa1, + 0xb2, 0x80, 0xd6, 0xe4, 0x7a, 0x48, 0x1e, 0x2c, + 0x36, 0x04, 0x52, 0x60, 0xfe, 0xcc, 0x9a, 0xa8, + 0xbb, 0x89, 0xdf, 0xed, 0x73, 0x41, 0x17, 0x25, + 0x31, 0x03, 0x55, 0x67, 0xf9, 0xcb, 0x9d, 0xaf, + 0xbc, 0x8e, 0xd8, 0xea, 0x74, 0x46, 0x10, 0x22, + 0x24, 0x16, 0x40, 0x72, 0xec, 0xde, 0x88, 0xba, + 0xa9, 0x9b, 0xcd, 0xff, 0x61, 0x53, 0x05, 0x37, + 0x23, 0x11, 0x47, 0x75, 0xeb, 0xd9, 0x8f, 0xbd, + 0xae, 0x9c, 0xca, 0xf8, 0x66, 0x54, 0x02, 0x30, + 0x2a, 0x18, 0x4e, 0x7c, 0xe2, 0xd0, 0x86, 0xb4, + 0xa7, 0x95, 0xc3, 0xf1, 0x6f, 0x5d, 0x0b, 0x39, + 0x2d, 0x1f, 0x49, 0x7b, 0xe5, 0xd7, 0x81, 0xb3, + 0xa0, 0x92, 0xc4, 0xf6, 0x68, 0x5a, 0x0c, 0x3e, + }, + { + 0x00, 0x33, 0x66, 0x55, 0xcc, 0xff, 0xaa, 0x99, + 0x85, 0xb6, 0xe3, 0xd0, 0x49, 0x7a, 0x2f, 0x1c, + 0x17, 0x24, 0x71, 0x42, 0xdb, 0xe8, 0xbd, 0x8e, + 0x92, 0xa1, 0xf4, 0xc7, 0x5e, 0x6d, 0x38, 0x0b, + 0x2e, 0x1d, 0x48, 0x7b, 0xe2, 0xd1, 0x84, 0xb7, + 0xab, 0x98, 0xcd, 0xfe, 0x67, 0x54, 0x01, 0x32, + 0x39, 0x0a, 0x5f, 0x6c, 0xf5, 0xc6, 0x93, 0xa0, + 0xbc, 0x8f, 0xda, 0xe9, 0x70, 0x43, 0x16, 0x25, + 0x5c, 0x6f, 0x3a, 0x09, 0x90, 0xa3, 0xf6, 0xc5, + 0xd9, 0xea, 0xbf, 0x8c, 0x15, 0x26, 0x73, 0x40, + 0x4b, 0x78, 0x2d, 0x1e, 0x87, 0xb4, 0xe1, 0xd2, + 0xce, 0xfd, 0xa8, 0x9b, 0x02, 0x31, 0x64, 0x57, + 0x72, 0x41, 0x14, 0x27, 0xbe, 0x8d, 0xd8, 0xeb, + 0xf7, 0xc4, 0x91, 0xa2, 0x3b, 0x08, 0x5d, 0x6e, + 0x65, 0x56, 0x03, 0x30, 0xa9, 0x9a, 0xcf, 0xfc, + 0xe0, 0xd3, 0x86, 0xb5, 0x2c, 0x1f, 0x4a, 0x79, + 0xb8, 0x8b, 0xde, 0xed, 0x74, 0x47, 0x12, 0x21, + 0x3d, 0x0e, 0x5b, 0x68, 0xf1, 0xc2, 0x97, 0xa4, + 0xaf, 0x9c, 0xc9, 0xfa, 0x63, 0x50, 0x05, 0x36, + 0x2a, 0x19, 0x4c, 0x7f, 0xe6, 0xd5, 0x80, 0xb3, + 0x96, 0xa5, 0xf0, 0xc3, 0x5a, 0x69, 0x3c, 0x0f, + 0x13, 0x20, 0x75, 0x46, 0xdf, 0xec, 0xb9, 0x8a, + 0x81, 0xb2, 0xe7, 0xd4, 0x4d, 0x7e, 0x2b, 0x18, + 0x04, 0x37, 0x62, 0x51, 0xc8, 0xfb, 0xae, 0x9d, + 0xe4, 0xd7, 0x82, 0xb1, 0x28, 0x1b, 0x4e, 0x7d, + 0x61, 0x52, 0x07, 0x34, 0xad, 0x9e, 0xcb, 0xf8, + 0xf3, 0xc0, 0x95, 0xa6, 0x3f, 0x0c, 0x59, 0x6a, + 0x76, 0x45, 0x10, 0x23, 0xba, 0x89, 0xdc, 0xef, + 0xca, 0xf9, 0xac, 0x9f, 0x06, 0x35, 0x60, 0x53, + 0x4f, 0x7c, 0x29, 0x1a, 0x83, 0xb0, 0xe5, 0xd6, + 0xdd, 0xee, 0xbb, 0x88, 0x11, 0x22, 0x77, 0x44, + 0x58, 0x6b, 0x3e, 0x0d, 0x94, 0xa7, 0xf2, 0xc1, + }, + { + 0x00, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, + 0xbd, 0x89, 0xd5, 0xe1, 0x6d, 0x59, 0x05, 0x31, + 0x67, 0x53, 0x0f, 0x3b, 0xb7, 0x83, 0xdf, 0xeb, + 0xda, 0xee, 0xb2, 0x86, 0x0a, 0x3e, 0x62, 0x56, + 0xce, 0xfa, 0xa6, 0x92, 0x1e, 0x2a, 0x76, 0x42, + 0x73, 0x47, 0x1b, 0x2f, 0xa3, 0x97, 0xcb, 0xff, + 0xa9, 0x9d, 0xc1, 0xf5, 0x79, 0x4d, 0x11, 0x25, + 0x14, 0x20, 0x7c, 0x48, 0xc4, 0xf0, 0xac, 0x98, + 0x81, 0xb5, 0xe9, 0xdd, 0x51, 0x65, 0x39, 0x0d, + 0x3c, 0x08, 0x54, 0x60, 0xec, 0xd8, 0x84, 0xb0, + 0xe6, 0xd2, 0x8e, 0xba, 0x36, 0x02, 0x5e, 0x6a, + 0x5b, 0x6f, 0x33, 0x07, 0x8b, 0xbf, 0xe3, 0xd7, + 0x4f, 0x7b, 0x27, 0x13, 0x9f, 0xab, 0xf7, 0xc3, + 0xf2, 0xc6, 0x9a, 0xae, 0x22, 0x16, 0x4a, 0x7e, + 0x28, 0x1c, 0x40, 0x74, 0xf8, 0xcc, 0x90, 0xa4, + 0x95, 0xa1, 0xfd, 0xc9, 0x45, 0x71, 0x2d, 0x19, + 0x1f, 0x2b, 0x77, 0x43, 0xcf, 0xfb, 0xa7, 0x93, + 0xa2, 0x96, 0xca, 0xfe, 0x72, 0x46, 0x1a, 0x2e, + 0x78, 0x4c, 0x10, 0x24, 0xa8, 0x9c, 0xc0, 0xf4, + 0xc5, 0xf1, 0xad, 0x99, 0x15, 0x21, 0x7d, 0x49, + 0xd1, 0xe5, 0xb9, 0x8d, 0x01, 0x35, 0x69, 0x5d, + 0x6c, 0x58, 0x04, 0x30, 0xbc, 0x88, 0xd4, 0xe0, + 0xb6, 0x82, 0xde, 0xea, 0x66, 0x52, 0x0e, 0x3a, + 0x0b, 0x3f, 0x63, 0x57, 0xdb, 0xef, 0xb3, 0x87, + 0x9e, 0xaa, 0xf6, 0xc2, 0x4e, 0x7a, 0x26, 0x12, + 0x23, 0x17, 0x4b, 0x7f, 0xf3, 0xc7, 0x9b, 0xaf, + 0xf9, 0xcd, 0x91, 0xa5, 0x29, 0x1d, 0x41, 0x75, + 0x44, 0x70, 0x2c, 0x18, 0x94, 0xa0, 0xfc, 0xc8, + 0x50, 0x64, 0x38, 0x0c, 0x80, 0xb4, 0xe8, 0xdc, + 0xed, 0xd9, 0x85, 0xb1, 0x3d, 0x09, 0x55, 0x61, + 0x37, 0x03, 0x5f, 0x6b, 0xe7, 0xd3, 0x8f, 0xbb, + 0x8a, 0xbe, 0xe2, 0xd6, 0x5a, 0x6e, 0x32, 0x06, + }, + { + 0x00, 0x35, 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, 0x8b, + 0xb5, 0x80, 0xdf, 0xea, 0x61, 0x54, 0x0b, 0x3e, + 0x77, 0x42, 0x1d, 0x28, 0xa3, 0x96, 0xc9, 0xfc, + 0xc2, 0xf7, 0xa8, 0x9d, 0x16, 0x23, 0x7c, 0x49, + 0xee, 0xdb, 0x84, 0xb1, 0x3a, 0x0f, 0x50, 0x65, + 0x5b, 0x6e, 0x31, 0x04, 0x8f, 0xba, 0xe5, 0xd0, + 0x99, 0xac, 0xf3, 0xc6, 0x4d, 0x78, 0x27, 0x12, + 0x2c, 0x19, 0x46, 0x73, 0xf8, 0xcd, 0x92, 0xa7, + 0xc1, 0xf4, 0xab, 0x9e, 0x15, 0x20, 0x7f, 0x4a, + 0x74, 0x41, 0x1e, 0x2b, 0xa0, 0x95, 0xca, 0xff, + 0xb6, 0x83, 0xdc, 0xe9, 0x62, 0x57, 0x08, 0x3d, + 0x03, 0x36, 0x69, 0x5c, 0xd7, 0xe2, 0xbd, 0x88, + 0x2f, 0x1a, 0x45, 0x70, 0xfb, 0xce, 0x91, 0xa4, + 0x9a, 0xaf, 0xf0, 0xc5, 0x4e, 0x7b, 0x24, 0x11, + 0x58, 0x6d, 0x32, 0x07, 0x8c, 0xb9, 0xe6, 0xd3, + 0xed, 0xd8, 0x87, 0xb2, 0x39, 0x0c, 0x53, 0x66, + 0x9f, 0xaa, 0xf5, 0xc0, 0x4b, 0x7e, 0x21, 0x14, + 0x2a, 0x1f, 0x40, 0x75, 0xfe, 0xcb, 0x94, 0xa1, + 0xe8, 0xdd, 0x82, 0xb7, 0x3c, 0x09, 0x56, 0x63, + 0x5d, 0x68, 0x37, 0x02, 0x89, 0xbc, 0xe3, 0xd6, + 0x71, 0x44, 0x1b, 0x2e, 0xa5, 0x90, 0xcf, 0xfa, + 0xc4, 0xf1, 0xae, 0x9b, 0x10, 0x25, 0x7a, 0x4f, + 0x06, 0x33, 0x6c, 0x59, 0xd2, 0xe7, 0xb8, 0x8d, + 0xb3, 0x86, 0xd9, 0xec, 0x67, 0x52, 0x0d, 0x38, + 0x5e, 0x6b, 0x34, 0x01, 0x8a, 0xbf, 0xe0, 0xd5, + 0xeb, 0xde, 0x81, 0xb4, 0x3f, 0x0a, 0x55, 0x60, + 0x29, 0x1c, 0x43, 0x76, 0xfd, 0xc8, 0x97, 0xa2, + 0x9c, 0xa9, 0xf6, 0xc3, 0x48, 0x7d, 0x22, 0x17, + 0xb0, 0x85, 0xda, 0xef, 0x64, 0x51, 0x0e, 0x3b, + 0x05, 0x30, 0x6f, 0x5a, 0xd1, 0xe4, 0xbb, 0x8e, + 0xc7, 0xf2, 0xad, 0x98, 0x13, 0x26, 0x79, 0x4c, + 0x72, 0x47, 0x18, 0x2d, 0xa6, 0x93, 0xcc, 0xf9, + }, + { + 0x00, 0x36, 0x6c, 0x5a, 0xd8, 0xee, 0xb4, 0x82, + 0xad, 0x9b, 0xc1, 0xf7, 0x75, 0x43, 0x19, 0x2f, + 0x47, 0x71, 0x2b, 0x1d, 0x9f, 0xa9, 0xf3, 0xc5, + 0xea, 0xdc, 0x86, 0xb0, 0x32, 0x04, 0x5e, 0x68, + 0x8e, 0xb8, 0xe2, 0xd4, 0x56, 0x60, 0x3a, 0x0c, + 0x23, 0x15, 0x4f, 0x79, 0xfb, 0xcd, 0x97, 0xa1, + 0xc9, 0xff, 0xa5, 0x93, 0x11, 0x27, 0x7d, 0x4b, + 0x64, 0x52, 0x08, 0x3e, 0xbc, 0x8a, 0xd0, 0xe6, + 0x01, 0x37, 0x6d, 0x5b, 0xd9, 0xef, 0xb5, 0x83, + 0xac, 0x9a, 0xc0, 0xf6, 0x74, 0x42, 0x18, 0x2e, + 0x46, 0x70, 0x2a, 0x1c, 0x9e, 0xa8, 0xf2, 0xc4, + 0xeb, 0xdd, 0x87, 0xb1, 0x33, 0x05, 0x5f, 0x69, + 0x8f, 0xb9, 0xe3, 0xd5, 0x57, 0x61, 0x3b, 0x0d, + 0x22, 0x14, 0x4e, 0x78, 0xfa, 0xcc, 0x96, 0xa0, + 0xc8, 0xfe, 0xa4, 0x92, 0x10, 0x26, 0x7c, 0x4a, + 0x65, 0x53, 0x09, 0x3f, 0xbd, 0x8b, 0xd1, 0xe7, + 0x02, 0x34, 0x6e, 0x58, 0xda, 0xec, 0xb6, 0x80, + 0xaf, 0x99, 0xc3, 0xf5, 0x77, 0x41, 0x1b, 0x2d, + 0x45, 0x73, 0x29, 0x1f, 0x9d, 0xab, 0xf1, 0xc7, + 0xe8, 0xde, 0x84, 0xb2, 0x30, 0x06, 0x5c, 0x6a, + 0x8c, 0xba, 0xe0, 0xd6, 0x54, 0x62, 0x38, 0x0e, + 0x21, 0x17, 0x4d, 0x7b, 0xf9, 0xcf, 0x95, 0xa3, + 0xcb, 0xfd, 0xa7, 0x91, 0x13, 0x25, 0x7f, 0x49, + 0x66, 0x50, 0x0a, 0x3c, 0xbe, 0x88, 0xd2, 0xe4, + 0x03, 0x35, 0x6f, 0x59, 0xdb, 0xed, 0xb7, 0x81, + 0xae, 0x98, 0xc2, 0xf4, 0x76, 0x40, 0x1a, 0x2c, + 0x44, 0x72, 0x28, 0x1e, 0x9c, 0xaa, 0xf0, 0xc6, + 0xe9, 0xdf, 0x85, 0xb3, 0x31, 0x07, 0x5d, 0x6b, + 0x8d, 0xbb, 0xe1, 0xd7, 0x55, 0x63, 0x39, 0x0f, + 0x20, 0x16, 0x4c, 0x7a, 0xf8, 0xce, 0x94, 0xa2, + 0xca, 0xfc, 0xa6, 0x90, 0x12, 0x24, 0x7e, 0x48, + 0x67, 0x51, 0x0b, 0x3d, 0xbf, 0x89, 0xd3, 0xe5, + }, + { + 0x00, 0x37, 0x6e, 0x59, 0xdc, 0xeb, 0xb2, 0x85, + 0xa5, 0x92, 0xcb, 0xfc, 0x79, 0x4e, 0x17, 0x20, + 0x57, 0x60, 0x39, 0x0e, 0x8b, 0xbc, 0xe5, 0xd2, + 0xf2, 0xc5, 0x9c, 0xab, 0x2e, 0x19, 0x40, 0x77, + 0xae, 0x99, 0xc0, 0xf7, 0x72, 0x45, 0x1c, 0x2b, + 0x0b, 0x3c, 0x65, 0x52, 0xd7, 0xe0, 0xb9, 0x8e, + 0xf9, 0xce, 0x97, 0xa0, 0x25, 0x12, 0x4b, 0x7c, + 0x5c, 0x6b, 0x32, 0x05, 0x80, 0xb7, 0xee, 0xd9, + 0x41, 0x76, 0x2f, 0x18, 0x9d, 0xaa, 0xf3, 0xc4, + 0xe4, 0xd3, 0x8a, 0xbd, 0x38, 0x0f, 0x56, 0x61, + 0x16, 0x21, 0x78, 0x4f, 0xca, 0xfd, 0xa4, 0x93, + 0xb3, 0x84, 0xdd, 0xea, 0x6f, 0x58, 0x01, 0x36, + 0xef, 0xd8, 0x81, 0xb6, 0x33, 0x04, 0x5d, 0x6a, + 0x4a, 0x7d, 0x24, 0x13, 0x96, 0xa1, 0xf8, 0xcf, + 0xb8, 0x8f, 0xd6, 0xe1, 0x64, 0x53, 0x0a, 0x3d, + 0x1d, 0x2a, 0x73, 0x44, 0xc1, 0xf6, 0xaf, 0x98, + 0x82, 0xb5, 0xec, 0xdb, 0x5e, 0x69, 0x30, 0x07, + 0x27, 0x10, 0x49, 0x7e, 0xfb, 0xcc, 0x95, 0xa2, + 0xd5, 0xe2, 0xbb, 0x8c, 0x09, 0x3e, 0x67, 0x50, + 0x70, 0x47, 0x1e, 0x29, 0xac, 0x9b, 0xc2, 0xf5, + 0x2c, 0x1b, 0x42, 0x75, 0xf0, 0xc7, 0x9e, 0xa9, + 0x89, 0xbe, 0xe7, 0xd0, 0x55, 0x62, 0x3b, 0x0c, + 0x7b, 0x4c, 0x15, 0x22, 0xa7, 0x90, 0xc9, 0xfe, + 0xde, 0xe9, 0xb0, 0x87, 0x02, 0x35, 0x6c, 0x5b, + 0xc3, 0xf4, 0xad, 0x9a, 0x1f, 0x28, 0x71, 0x46, + 0x66, 0x51, 0x08, 0x3f, 0xba, 0x8d, 0xd4, 0xe3, + 0x94, 0xa3, 0xfa, 0xcd, 0x48, 0x7f, 0x26, 0x11, + 0x31, 0x06, 0x5f, 0x68, 0xed, 0xda, 0x83, 0xb4, + 0x6d, 0x5a, 0x03, 0x34, 0xb1, 0x86, 0xdf, 0xe8, + 0xc8, 0xff, 0xa6, 0x91, 0x14, 0x23, 0x7a, 0x4d, + 0x3a, 0x0d, 0x54, 0x63, 0xe6, 0xd1, 0x88, 0xbf, + 0x9f, 0xa8, 0xf1, 0xc6, 0x43, 0x74, 0x2d, 0x1a, + }, + { + 0x00, 0x38, 0x70, 0x48, 0xe0, 0xd8, 0x90, 0xa8, + 0xdd, 0xe5, 0xad, 0x95, 0x3d, 0x05, 0x4d, 0x75, + 0xa7, 0x9f, 0xd7, 0xef, 0x47, 0x7f, 0x37, 0x0f, + 0x7a, 0x42, 0x0a, 0x32, 0x9a, 0xa2, 0xea, 0xd2, + 0x53, 0x6b, 0x23, 0x1b, 0xb3, 0x8b, 0xc3, 0xfb, + 0x8e, 0xb6, 0xfe, 0xc6, 0x6e, 0x56, 0x1e, 0x26, + 0xf4, 0xcc, 0x84, 0xbc, 0x14, 0x2c, 0x64, 0x5c, + 0x29, 0x11, 0x59, 0x61, 0xc9, 0xf1, 0xb9, 0x81, + 0xa6, 0x9e, 0xd6, 0xee, 0x46, 0x7e, 0x36, 0x0e, + 0x7b, 0x43, 0x0b, 0x33, 0x9b, 0xa3, 0xeb, 0xd3, + 0x01, 0x39, 0x71, 0x49, 0xe1, 0xd9, 0x91, 0xa9, + 0xdc, 0xe4, 0xac, 0x94, 0x3c, 0x04, 0x4c, 0x74, + 0xf5, 0xcd, 0x85, 0xbd, 0x15, 0x2d, 0x65, 0x5d, + 0x28, 0x10, 0x58, 0x60, 0xc8, 0xf0, 0xb8, 0x80, + 0x52, 0x6a, 0x22, 0x1a, 0xb2, 0x8a, 0xc2, 0xfa, + 0x8f, 0xb7, 0xff, 0xc7, 0x6f, 0x57, 0x1f, 0x27, + 0x51, 0x69, 0x21, 0x19, 0xb1, 0x89, 0xc1, 0xf9, + 0x8c, 0xb4, 0xfc, 0xc4, 0x6c, 0x54, 0x1c, 0x24, + 0xf6, 0xce, 0x86, 0xbe, 0x16, 0x2e, 0x66, 0x5e, + 0x2b, 0x13, 0x5b, 0x63, 0xcb, 0xf3, 0xbb, 0x83, + 0x02, 0x3a, 0x72, 0x4a, 0xe2, 0xda, 0x92, 0xaa, + 0xdf, 0xe7, 0xaf, 0x97, 0x3f, 0x07, 0x4f, 0x77, + 0xa5, 0x9d, 0xd5, 0xed, 0x45, 0x7d, 0x35, 0x0d, + 0x78, 0x40, 0x08, 0x30, 0x98, 0xa0, 0xe8, 0xd0, + 0xf7, 0xcf, 0x87, 0xbf, 0x17, 0x2f, 0x67, 0x5f, + 0x2a, 0x12, 0x5a, 0x62, 0xca, 0xf2, 0xba, 0x82, + 0x50, 0x68, 0x20, 0x18, 0xb0, 0x88, 0xc0, 0xf8, + 0x8d, 0xb5, 0xfd, 0xc5, 0x6d, 0x55, 0x1d, 0x25, + 0xa4, 0x9c, 0xd4, 0xec, 0x44, 0x7c, 0x34, 0x0c, + 0x79, 0x41, 0x09, 0x31, 0x99, 0xa1, 0xe9, 0xd1, + 0x03, 0x3b, 0x73, 0x4b, 0xe3, 0xdb, 0x93, 0xab, + 0xde, 0xe6, 0xae, 0x96, 0x3e, 0x06, 0x4e, 0x76, + }, + { + 0x00, 0x39, 0x72, 0x4b, 0xe4, 0xdd, 0x96, 0xaf, + 0xd5, 0xec, 0xa7, 0x9e, 0x31, 0x08, 0x43, 0x7a, + 0xb7, 0x8e, 0xc5, 0xfc, 0x53, 0x6a, 0x21, 0x18, + 0x62, 0x5b, 0x10, 0x29, 0x86, 0xbf, 0xf4, 0xcd, + 0x73, 0x4a, 0x01, 0x38, 0x97, 0xae, 0xe5, 0xdc, + 0xa6, 0x9f, 0xd4, 0xed, 0x42, 0x7b, 0x30, 0x09, + 0xc4, 0xfd, 0xb6, 0x8f, 0x20, 0x19, 0x52, 0x6b, + 0x11, 0x28, 0x63, 0x5a, 0xf5, 0xcc, 0x87, 0xbe, + 0xe6, 0xdf, 0x94, 0xad, 0x02, 0x3b, 0x70, 0x49, + 0x33, 0x0a, 0x41, 0x78, 0xd7, 0xee, 0xa5, 0x9c, + 0x51, 0x68, 0x23, 0x1a, 0xb5, 0x8c, 0xc7, 0xfe, + 0x84, 0xbd, 0xf6, 0xcf, 0x60, 0x59, 0x12, 0x2b, + 0x95, 0xac, 0xe7, 0xde, 0x71, 0x48, 0x03, 0x3a, + 0x40, 0x79, 0x32, 0x0b, 0xa4, 0x9d, 0xd6, 0xef, + 0x22, 0x1b, 0x50, 0x69, 0xc6, 0xff, 0xb4, 0x8d, + 0xf7, 0xce, 0x85, 0xbc, 0x13, 0x2a, 0x61, 0x58, + 0xd1, 0xe8, 0xa3, 0x9a, 0x35, 0x0c, 0x47, 0x7e, + 0x04, 0x3d, 0x76, 0x4f, 0xe0, 0xd9, 0x92, 0xab, + 0x66, 0x5f, 0x14, 0x2d, 0x82, 0xbb, 0xf0, 0xc9, + 0xb3, 0x8a, 0xc1, 0xf8, 0x57, 0x6e, 0x25, 0x1c, + 0xa2, 0x9b, 0xd0, 0xe9, 0x46, 0x7f, 0x34, 0x0d, + 0x77, 0x4e, 0x05, 0x3c, 0x93, 0xaa, 0xe1, 0xd8, + 0x15, 0x2c, 0x67, 0x5e, 0xf1, 0xc8, 0x83, 0xba, + 0xc0, 0xf9, 0xb2, 0x8b, 0x24, 0x1d, 0x56, 0x6f, + 0x37, 0x0e, 0x45, 0x7c, 0xd3, 0xea, 0xa1, 0x98, + 0xe2, 0xdb, 0x90, 0xa9, 0x06, 0x3f, 0x74, 0x4d, + 0x80, 0xb9, 0xf2, 0xcb, 0x64, 0x5d, 0x16, 0x2f, + 0x55, 0x6c, 0x27, 0x1e, 0xb1, 0x88, 0xc3, 0xfa, + 0x44, 0x7d, 0x36, 0x0f, 0xa0, 0x99, 0xd2, 0xeb, + 0x91, 0xa8, 0xe3, 0xda, 0x75, 0x4c, 0x07, 0x3e, + 0xf3, 0xca, 0x81, 0xb8, 0x17, 0x2e, 0x65, 0x5c, + 0x26, 0x1f, 0x54, 0x6d, 0xc2, 0xfb, 0xb0, 0x89, + }, + { + 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b, + 0x87, 0xbd, 0xf3, 0xc9, 0x6f, 0x55, 0x1b, 0x21, + 0x4a, 0x70, 0x3e, 0x04, 0xa2, 0x98, 0xd6, 0xec, + 0x13, 0x29, 0x67, 0x5d, 0xfb, 0xc1, 0x8f, 0xb5, + 0xde, 0xe4, 0xaa, 0x90, 0x36, 0x0c, 0x42, 0x78, + 0x94, 0xae, 0xe0, 0xda, 0x7c, 0x46, 0x08, 0x32, + 0x59, 0x63, 0x2d, 0x17, 0xb1, 0x8b, 0xc5, 0xff, + 0x26, 0x1c, 0x52, 0x68, 0xce, 0xf4, 0xba, 0x80, + 0xeb, 0xd1, 0x9f, 0xa5, 0x03, 0x39, 0x77, 0x4d, + 0xa1, 0x9b, 0xd5, 0xef, 0x49, 0x73, 0x3d, 0x07, + 0x6c, 0x56, 0x18, 0x22, 0x84, 0xbe, 0xf0, 0xca, + 0x35, 0x0f, 0x41, 0x7b, 0xdd, 0xe7, 0xa9, 0x93, + 0xf8, 0xc2, 0x8c, 0xb6, 0x10, 0x2a, 0x64, 0x5e, + 0xb2, 0x88, 0xc6, 0xfc, 0x5a, 0x60, 0x2e, 0x14, + 0x7f, 0x45, 0x0b, 0x31, 0x97, 0xad, 0xe3, 0xd9, + 0x4c, 0x76, 0x38, 0x02, 0xa4, 0x9e, 0xd0, 0xea, + 0x81, 0xbb, 0xf5, 0xcf, 0x69, 0x53, 0x1d, 0x27, + 0xcb, 0xf1, 0xbf, 0x85, 0x23, 0x19, 0x57, 0x6d, + 0x06, 0x3c, 0x72, 0x48, 0xee, 0xd4, 0x9a, 0xa0, + 0x5f, 0x65, 0x2b, 0x11, 0xb7, 0x8d, 0xc3, 0xf9, + 0x92, 0xa8, 0xe6, 0xdc, 0x7a, 0x40, 0x0e, 0x34, + 0xd8, 0xe2, 0xac, 0x96, 0x30, 0x0a, 0x44, 0x7e, + 0x15, 0x2f, 0x61, 0x5b, 0xfd, 0xc7, 0x89, 0xb3, + 0x6a, 0x50, 0x1e, 0x24, 0x82, 0xb8, 0xf6, 0xcc, + 0xa7, 0x9d, 0xd3, 0xe9, 0x4f, 0x75, 0x3b, 0x01, + 0xed, 0xd7, 0x99, 0xa3, 0x05, 0x3f, 0x71, 0x4b, + 0x20, 0x1a, 0x54, 0x6e, 0xc8, 0xf2, 0xbc, 0x86, + 0x79, 0x43, 0x0d, 0x37, 0x91, 0xab, 0xe5, 0xdf, + 0xb4, 0x8e, 0xc0, 0xfa, 0x5c, 0x66, 0x28, 0x12, + 0xfe, 0xc4, 0x8a, 0xb0, 0x16, 0x2c, 0x62, 0x58, + 0x33, 0x09, 0x47, 0x7d, 0xdb, 0xe1, 0xaf, 0x95, + }, + { + 0x00, 0x3b, 0x76, 0x4d, 0xec, 0xd7, 0x9a, 0xa1, + 0xc5, 0xfe, 0xb3, 0x88, 0x29, 0x12, 0x5f, 0x64, + 0x97, 0xac, 0xe1, 0xda, 0x7b, 0x40, 0x0d, 0x36, + 0x52, 0x69, 0x24, 0x1f, 0xbe, 0x85, 0xc8, 0xf3, + 0x33, 0x08, 0x45, 0x7e, 0xdf, 0xe4, 0xa9, 0x92, + 0xf6, 0xcd, 0x80, 0xbb, 0x1a, 0x21, 0x6c, 0x57, + 0xa4, 0x9f, 0xd2, 0xe9, 0x48, 0x73, 0x3e, 0x05, + 0x61, 0x5a, 0x17, 0x2c, 0x8d, 0xb6, 0xfb, 0xc0, + 0x66, 0x5d, 0x10, 0x2b, 0x8a, 0xb1, 0xfc, 0xc7, + 0xa3, 0x98, 0xd5, 0xee, 0x4f, 0x74, 0x39, 0x02, + 0xf1, 0xca, 0x87, 0xbc, 0x1d, 0x26, 0x6b, 0x50, + 0x34, 0x0f, 0x42, 0x79, 0xd8, 0xe3, 0xae, 0x95, + 0x55, 0x6e, 0x23, 0x18, 0xb9, 0x82, 0xcf, 0xf4, + 0x90, 0xab, 0xe6, 0xdd, 0x7c, 0x47, 0x0a, 0x31, + 0xc2, 0xf9, 0xb4, 0x8f, 0x2e, 0x15, 0x58, 0x63, + 0x07, 0x3c, 0x71, 0x4a, 0xeb, 0xd0, 0x9d, 0xa6, + 0xcc, 0xf7, 0xba, 0x81, 0x20, 0x1b, 0x56, 0x6d, + 0x09, 0x32, 0x7f, 0x44, 0xe5, 0xde, 0x93, 0xa8, + 0x5b, 0x60, 0x2d, 0x16, 0xb7, 0x8c, 0xc1, 0xfa, + 0x9e, 0xa5, 0xe8, 0xd3, 0x72, 0x49, 0x04, 0x3f, + 0xff, 0xc4, 0x89, 0xb2, 0x13, 0x28, 0x65, 0x5e, + 0x3a, 0x01, 0x4c, 0x77, 0xd6, 0xed, 0xa0, 0x9b, + 0x68, 0x53, 0x1e, 0x25, 0x84, 0xbf, 0xf2, 0xc9, + 0xad, 0x96, 0xdb, 0xe0, 0x41, 0x7a, 0x37, 0x0c, + 0xaa, 0x91, 0xdc, 0xe7, 0x46, 0x7d, 0x30, 0x0b, + 0x6f, 0x54, 0x19, 0x22, 0x83, 0xb8, 0xf5, 0xce, + 0x3d, 0x06, 0x4b, 0x70, 0xd1, 0xea, 0xa7, 0x9c, + 0xf8, 0xc3, 0x8e, 0xb5, 0x14, 0x2f, 0x62, 0x59, + 0x99, 0xa2, 0xef, 0xd4, 0x75, 0x4e, 0x03, 0x38, + 0x5c, 0x67, 0x2a, 0x11, 0xb0, 0x8b, 0xc6, 0xfd, + 0x0e, 0x35, 0x78, 0x43, 0xe2, 0xd9, 0x94, 0xaf, + 0xcb, 0xf0, 0xbd, 0x86, 0x27, 0x1c, 0x51, 0x6a, + }, + { + 0x00, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, + 0xfd, 0xc1, 0x85, 0xb9, 0x0d, 0x31, 0x75, 0x49, + 0xe7, 0xdb, 0x9f, 0xa3, 0x17, 0x2b, 0x6f, 0x53, + 0x1a, 0x26, 0x62, 0x5e, 0xea, 0xd6, 0x92, 0xae, + 0xd3, 0xef, 0xab, 0x97, 0x23, 0x1f, 0x5b, 0x67, + 0x2e, 0x12, 0x56, 0x6a, 0xde, 0xe2, 0xa6, 0x9a, + 0x34, 0x08, 0x4c, 0x70, 0xc4, 0xf8, 0xbc, 0x80, + 0xc9, 0xf5, 0xb1, 0x8d, 0x39, 0x05, 0x41, 0x7d, + 0xbb, 0x87, 0xc3, 0xff, 0x4b, 0x77, 0x33, 0x0f, + 0x46, 0x7a, 0x3e, 0x02, 0xb6, 0x8a, 0xce, 0xf2, + 0x5c, 0x60, 0x24, 0x18, 0xac, 0x90, 0xd4, 0xe8, + 0xa1, 0x9d, 0xd9, 0xe5, 0x51, 0x6d, 0x29, 0x15, + 0x68, 0x54, 0x10, 0x2c, 0x98, 0xa4, 0xe0, 0xdc, + 0x95, 0xa9, 0xed, 0xd1, 0x65, 0x59, 0x1d, 0x21, + 0x8f, 0xb3, 0xf7, 0xcb, 0x7f, 0x43, 0x07, 0x3b, + 0x72, 0x4e, 0x0a, 0x36, 0x82, 0xbe, 0xfa, 0xc6, + 0x6b, 0x57, 0x13, 0x2f, 0x9b, 0xa7, 0xe3, 0xdf, + 0x96, 0xaa, 0xee, 0xd2, 0x66, 0x5a, 0x1e, 0x22, + 0x8c, 0xb0, 0xf4, 0xc8, 0x7c, 0x40, 0x04, 0x38, + 0x71, 0x4d, 0x09, 0x35, 0x81, 0xbd, 0xf9, 0xc5, + 0xb8, 0x84, 0xc0, 0xfc, 0x48, 0x74, 0x30, 0x0c, + 0x45, 0x79, 0x3d, 0x01, 0xb5, 0x89, 0xcd, 0xf1, + 0x5f, 0x63, 0x27, 0x1b, 0xaf, 0x93, 0xd7, 0xeb, + 0xa2, 0x9e, 0xda, 0xe6, 0x52, 0x6e, 0x2a, 0x16, + 0xd0, 0xec, 0xa8, 0x94, 0x20, 0x1c, 0x58, 0x64, + 0x2d, 0x11, 0x55, 0x69, 0xdd, 0xe1, 0xa5, 0x99, + 0x37, 0x0b, 0x4f, 0x73, 0xc7, 0xfb, 0xbf, 0x83, + 0xca, 0xf6, 0xb2, 0x8e, 0x3a, 0x06, 0x42, 0x7e, + 0x03, 0x3f, 0x7b, 0x47, 0xf3, 0xcf, 0x8b, 0xb7, + 0xfe, 0xc2, 0x86, 0xba, 0x0e, 0x32, 0x76, 0x4a, + 0xe4, 0xd8, 0x9c, 0xa0, 0x14, 0x28, 0x6c, 0x50, + 0x19, 0x25, 0x61, 0x5d, 0xe9, 0xd5, 0x91, 0xad, + }, + { + 0x00, 0x3d, 0x7a, 0x47, 0xf4, 0xc9, 0x8e, 0xb3, + 0xf5, 0xc8, 0x8f, 0xb2, 0x01, 0x3c, 0x7b, 0x46, + 0xf7, 0xca, 0x8d, 0xb0, 0x03, 0x3e, 0x79, 0x44, + 0x02, 0x3f, 0x78, 0x45, 0xf6, 0xcb, 0x8c, 0xb1, + 0xf3, 0xce, 0x89, 0xb4, 0x07, 0x3a, 0x7d, 0x40, + 0x06, 0x3b, 0x7c, 0x41, 0xf2, 0xcf, 0x88, 0xb5, + 0x04, 0x39, 0x7e, 0x43, 0xf0, 0xcd, 0x8a, 0xb7, + 0xf1, 0xcc, 0x8b, 0xb6, 0x05, 0x38, 0x7f, 0x42, + 0xfb, 0xc6, 0x81, 0xbc, 0x0f, 0x32, 0x75, 0x48, + 0x0e, 0x33, 0x74, 0x49, 0xfa, 0xc7, 0x80, 0xbd, + 0x0c, 0x31, 0x76, 0x4b, 0xf8, 0xc5, 0x82, 0xbf, + 0xf9, 0xc4, 0x83, 0xbe, 0x0d, 0x30, 0x77, 0x4a, + 0x08, 0x35, 0x72, 0x4f, 0xfc, 0xc1, 0x86, 0xbb, + 0xfd, 0xc0, 0x87, 0xba, 0x09, 0x34, 0x73, 0x4e, + 0xff, 0xc2, 0x85, 0xb8, 0x0b, 0x36, 0x71, 0x4c, + 0x0a, 0x37, 0x70, 0x4d, 0xfe, 0xc3, 0x84, 0xb9, + 0xeb, 0xd6, 0x91, 0xac, 0x1f, 0x22, 0x65, 0x58, + 0x1e, 0x23, 0x64, 0x59, 0xea, 0xd7, 0x90, 0xad, + 0x1c, 0x21, 0x66, 0x5b, 0xe8, 0xd5, 0x92, 0xaf, + 0xe9, 0xd4, 0x93, 0xae, 0x1d, 0x20, 0x67, 0x5a, + 0x18, 0x25, 0x62, 0x5f, 0xec, 0xd1, 0x96, 0xab, + 0xed, 0xd0, 0x97, 0xaa, 0x19, 0x24, 0x63, 0x5e, + 0xef, 0xd2, 0x95, 0xa8, 0x1b, 0x26, 0x61, 0x5c, + 0x1a, 0x27, 0x60, 0x5d, 0xee, 0xd3, 0x94, 0xa9, + 0x10, 0x2d, 0x6a, 0x57, 0xe4, 0xd9, 0x9e, 0xa3, + 0xe5, 0xd8, 0x9f, 0xa2, 0x11, 0x2c, 0x6b, 0x56, + 0xe7, 0xda, 0x9d, 0xa0, 0x13, 0x2e, 0x69, 0x54, + 0x12, 0x2f, 0x68, 0x55, 0xe6, 0xdb, 0x9c, 0xa1, + 0xe3, 0xde, 0x99, 0xa4, 0x17, 0x2a, 0x6d, 0x50, + 0x16, 0x2b, 0x6c, 0x51, 0xe2, 0xdf, 0x98, 0xa5, + 0x14, 0x29, 0x6e, 0x53, 0xe0, 0xdd, 0x9a, 0xa7, + 0xe1, 0xdc, 0x9b, 0xa6, 0x15, 0x28, 0x6f, 0x52, + }, + { + 0x00, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, + 0xed, 0xd3, 0x91, 0xaf, 0x15, 0x2b, 0x69, 0x57, + 0xc7, 0xf9, 0xbb, 0x85, 0x3f, 0x01, 0x43, 0x7d, + 0x2a, 0x14, 0x56, 0x68, 0xd2, 0xec, 0xae, 0x90, + 0x93, 0xad, 0xef, 0xd1, 0x6b, 0x55, 0x17, 0x29, + 0x7e, 0x40, 0x02, 0x3c, 0x86, 0xb8, 0xfa, 0xc4, + 0x54, 0x6a, 0x28, 0x16, 0xac, 0x92, 0xd0, 0xee, + 0xb9, 0x87, 0xc5, 0xfb, 0x41, 0x7f, 0x3d, 0x03, + 0x3b, 0x05, 0x47, 0x79, 0xc3, 0xfd, 0xbf, 0x81, + 0xd6, 0xe8, 0xaa, 0x94, 0x2e, 0x10, 0x52, 0x6c, + 0xfc, 0xc2, 0x80, 0xbe, 0x04, 0x3a, 0x78, 0x46, + 0x11, 0x2f, 0x6d, 0x53, 0xe9, 0xd7, 0x95, 0xab, + 0xa8, 0x96, 0xd4, 0xea, 0x50, 0x6e, 0x2c, 0x12, + 0x45, 0x7b, 0x39, 0x07, 0xbd, 0x83, 0xc1, 0xff, + 0x6f, 0x51, 0x13, 0x2d, 0x97, 0xa9, 0xeb, 0xd5, + 0x82, 0xbc, 0xfe, 0xc0, 0x7a, 0x44, 0x06, 0x38, + 0x76, 0x48, 0x0a, 0x34, 0x8e, 0xb0, 0xf2, 0xcc, + 0x9b, 0xa5, 0xe7, 0xd9, 0x63, 0x5d, 0x1f, 0x21, + 0xb1, 0x8f, 0xcd, 0xf3, 0x49, 0x77, 0x35, 0x0b, + 0x5c, 0x62, 0x20, 0x1e, 0xa4, 0x9a, 0xd8, 0xe6, + 0xe5, 0xdb, 0x99, 0xa7, 0x1d, 0x23, 0x61, 0x5f, + 0x08, 0x36, 0x74, 0x4a, 0xf0, 0xce, 0x8c, 0xb2, + 0x22, 0x1c, 0x5e, 0x60, 0xda, 0xe4, 0xa6, 0x98, + 0xcf, 0xf1, 0xb3, 0x8d, 0x37, 0x09, 0x4b, 0x75, + 0x4d, 0x73, 0x31, 0x0f, 0xb5, 0x8b, 0xc9, 0xf7, + 0xa0, 0x9e, 0xdc, 0xe2, 0x58, 0x66, 0x24, 0x1a, + 0x8a, 0xb4, 0xf6, 0xc8, 0x72, 0x4c, 0x0e, 0x30, + 0x67, 0x59, 0x1b, 0x25, 0x9f, 0xa1, 0xe3, 0xdd, + 0xde, 0xe0, 0xa2, 0x9c, 0x26, 0x18, 0x5a, 0x64, + 0x33, 0x0d, 0x4f, 0x71, 0xcb, 0xf5, 0xb7, 0x89, + 0x19, 0x27, 0x65, 0x5b, 0xe1, 0xdf, 0x9d, 0xa3, + 0xf4, 0xca, 0x88, 0xb6, 0x0c, 0x32, 0x70, 0x4e, + }, + { + 0x00, 0x3f, 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, + 0xe5, 0xda, 0x9b, 0xa4, 0x19, 0x26, 0x67, 0x58, + 0xd7, 0xe8, 0xa9, 0x96, 0x2b, 0x14, 0x55, 0x6a, + 0x32, 0x0d, 0x4c, 0x73, 0xce, 0xf1, 0xb0, 0x8f, + 0xb3, 0x8c, 0xcd, 0xf2, 0x4f, 0x70, 0x31, 0x0e, + 0x56, 0x69, 0x28, 0x17, 0xaa, 0x95, 0xd4, 0xeb, + 0x64, 0x5b, 0x1a, 0x25, 0x98, 0xa7, 0xe6, 0xd9, + 0x81, 0xbe, 0xff, 0xc0, 0x7d, 0x42, 0x03, 0x3c, + 0x7b, 0x44, 0x05, 0x3a, 0x87, 0xb8, 0xf9, 0xc6, + 0x9e, 0xa1, 0xe0, 0xdf, 0x62, 0x5d, 0x1c, 0x23, + 0xac, 0x93, 0xd2, 0xed, 0x50, 0x6f, 0x2e, 0x11, + 0x49, 0x76, 0x37, 0x08, 0xb5, 0x8a, 0xcb, 0xf4, + 0xc8, 0xf7, 0xb6, 0x89, 0x34, 0x0b, 0x4a, 0x75, + 0x2d, 0x12, 0x53, 0x6c, 0xd1, 0xee, 0xaf, 0x90, + 0x1f, 0x20, 0x61, 0x5e, 0xe3, 0xdc, 0x9d, 0xa2, + 0xfa, 0xc5, 0x84, 0xbb, 0x06, 0x39, 0x78, 0x47, + 0xf6, 0xc9, 0x88, 0xb7, 0x0a, 0x35, 0x74, 0x4b, + 0x13, 0x2c, 0x6d, 0x52, 0xef, 0xd0, 0x91, 0xae, + 0x21, 0x1e, 0x5f, 0x60, 0xdd, 0xe2, 0xa3, 0x9c, + 0xc4, 0xfb, 0xba, 0x85, 0x38, 0x07, 0x46, 0x79, + 0x45, 0x7a, 0x3b, 0x04, 0xb9, 0x86, 0xc7, 0xf8, + 0xa0, 0x9f, 0xde, 0xe1, 0x5c, 0x63, 0x22, 0x1d, + 0x92, 0xad, 0xec, 0xd3, 0x6e, 0x51, 0x10, 0x2f, + 0x77, 0x48, 0x09, 0x36, 0x8b, 0xb4, 0xf5, 0xca, + 0x8d, 0xb2, 0xf3, 0xcc, 0x71, 0x4e, 0x0f, 0x30, + 0x68, 0x57, 0x16, 0x29, 0x94, 0xab, 0xea, 0xd5, + 0x5a, 0x65, 0x24, 0x1b, 0xa6, 0x99, 0xd8, 0xe7, + 0xbf, 0x80, 0xc1, 0xfe, 0x43, 0x7c, 0x3d, 0x02, + 0x3e, 0x01, 0x40, 0x7f, 0xc2, 0xfd, 0xbc, 0x83, + 0xdb, 0xe4, 0xa5, 0x9a, 0x27, 0x18, 0x59, 0x66, + 0xe9, 0xd6, 0x97, 0xa8, 0x15, 0x2a, 0x6b, 0x54, + 0x0c, 0x33, 0x72, 0x4d, 0xf0, 0xcf, 0x8e, 0xb1, + }, + { + 0x00, 0x40, 0x80, 0xc0, 0x1d, 0x5d, 0x9d, 0xdd, + 0x3a, 0x7a, 0xba, 0xfa, 0x27, 0x67, 0xa7, 0xe7, + 0x74, 0x34, 0xf4, 0xb4, 0x69, 0x29, 0xe9, 0xa9, + 0x4e, 0x0e, 0xce, 0x8e, 0x53, 0x13, 0xd3, 0x93, + 0xe8, 0xa8, 0x68, 0x28, 0xf5, 0xb5, 0x75, 0x35, + 0xd2, 0x92, 0x52, 0x12, 0xcf, 0x8f, 0x4f, 0x0f, + 0x9c, 0xdc, 0x1c, 0x5c, 0x81, 0xc1, 0x01, 0x41, + 0xa6, 0xe6, 0x26, 0x66, 0xbb, 0xfb, 0x3b, 0x7b, + 0xcd, 0x8d, 0x4d, 0x0d, 0xd0, 0x90, 0x50, 0x10, + 0xf7, 0xb7, 0x77, 0x37, 0xea, 0xaa, 0x6a, 0x2a, + 0xb9, 0xf9, 0x39, 0x79, 0xa4, 0xe4, 0x24, 0x64, + 0x83, 0xc3, 0x03, 0x43, 0x9e, 0xde, 0x1e, 0x5e, + 0x25, 0x65, 0xa5, 0xe5, 0x38, 0x78, 0xb8, 0xf8, + 0x1f, 0x5f, 0x9f, 0xdf, 0x02, 0x42, 0x82, 0xc2, + 0x51, 0x11, 0xd1, 0x91, 0x4c, 0x0c, 0xcc, 0x8c, + 0x6b, 0x2b, 0xeb, 0xab, 0x76, 0x36, 0xf6, 0xb6, + 0x87, 0xc7, 0x07, 0x47, 0x9a, 0xda, 0x1a, 0x5a, + 0xbd, 0xfd, 0x3d, 0x7d, 0xa0, 0xe0, 0x20, 0x60, + 0xf3, 0xb3, 0x73, 0x33, 0xee, 0xae, 0x6e, 0x2e, + 0xc9, 0x89, 0x49, 0x09, 0xd4, 0x94, 0x54, 0x14, + 0x6f, 0x2f, 0xef, 0xaf, 0x72, 0x32, 0xf2, 0xb2, + 0x55, 0x15, 0xd5, 0x95, 0x48, 0x08, 0xc8, 0x88, + 0x1b, 0x5b, 0x9b, 0xdb, 0x06, 0x46, 0x86, 0xc6, + 0x21, 0x61, 0xa1, 0xe1, 0x3c, 0x7c, 0xbc, 0xfc, + 0x4a, 0x0a, 0xca, 0x8a, 0x57, 0x17, 0xd7, 0x97, + 0x70, 0x30, 0xf0, 0xb0, 0x6d, 0x2d, 0xed, 0xad, + 0x3e, 0x7e, 0xbe, 0xfe, 0x23, 0x63, 0xa3, 0xe3, + 0x04, 0x44, 0x84, 0xc4, 0x19, 0x59, 0x99, 0xd9, + 0xa2, 0xe2, 0x22, 0x62, 0xbf, 0xff, 0x3f, 0x7f, + 0x98, 0xd8, 0x18, 0x58, 0x85, 0xc5, 0x05, 0x45, + 0xd6, 0x96, 0x56, 0x16, 0xcb, 0x8b, 0x4b, 0x0b, + 0xec, 0xac, 0x6c, 0x2c, 0xf1, 0xb1, 0x71, 0x31, + }, + { + 0x00, 0x41, 0x82, 0xc3, 0x19, 0x58, 0x9b, 0xda, + 0x32, 0x73, 0xb0, 0xf1, 0x2b, 0x6a, 0xa9, 0xe8, + 0x64, 0x25, 0xe6, 0xa7, 0x7d, 0x3c, 0xff, 0xbe, + 0x56, 0x17, 0xd4, 0x95, 0x4f, 0x0e, 0xcd, 0x8c, + 0xc8, 0x89, 0x4a, 0x0b, 0xd1, 0x90, 0x53, 0x12, + 0xfa, 0xbb, 0x78, 0x39, 0xe3, 0xa2, 0x61, 0x20, + 0xac, 0xed, 0x2e, 0x6f, 0xb5, 0xf4, 0x37, 0x76, + 0x9e, 0xdf, 0x1c, 0x5d, 0x87, 0xc6, 0x05, 0x44, + 0x8d, 0xcc, 0x0f, 0x4e, 0x94, 0xd5, 0x16, 0x57, + 0xbf, 0xfe, 0x3d, 0x7c, 0xa6, 0xe7, 0x24, 0x65, + 0xe9, 0xa8, 0x6b, 0x2a, 0xf0, 0xb1, 0x72, 0x33, + 0xdb, 0x9a, 0x59, 0x18, 0xc2, 0x83, 0x40, 0x01, + 0x45, 0x04, 0xc7, 0x86, 0x5c, 0x1d, 0xde, 0x9f, + 0x77, 0x36, 0xf5, 0xb4, 0x6e, 0x2f, 0xec, 0xad, + 0x21, 0x60, 0xa3, 0xe2, 0x38, 0x79, 0xba, 0xfb, + 0x13, 0x52, 0x91, 0xd0, 0x0a, 0x4b, 0x88, 0xc9, + 0x07, 0x46, 0x85, 0xc4, 0x1e, 0x5f, 0x9c, 0xdd, + 0x35, 0x74, 0xb7, 0xf6, 0x2c, 0x6d, 0xae, 0xef, + 0x63, 0x22, 0xe1, 0xa0, 0x7a, 0x3b, 0xf8, 0xb9, + 0x51, 0x10, 0xd3, 0x92, 0x48, 0x09, 0xca, 0x8b, + 0xcf, 0x8e, 0x4d, 0x0c, 0xd6, 0x97, 0x54, 0x15, + 0xfd, 0xbc, 0x7f, 0x3e, 0xe4, 0xa5, 0x66, 0x27, + 0xab, 0xea, 0x29, 0x68, 0xb2, 0xf3, 0x30, 0x71, + 0x99, 0xd8, 0x1b, 0x5a, 0x80, 0xc1, 0x02, 0x43, + 0x8a, 0xcb, 0x08, 0x49, 0x93, 0xd2, 0x11, 0x50, + 0xb8, 0xf9, 0x3a, 0x7b, 0xa1, 0xe0, 0x23, 0x62, + 0xee, 0xaf, 0x6c, 0x2d, 0xf7, 0xb6, 0x75, 0x34, + 0xdc, 0x9d, 0x5e, 0x1f, 0xc5, 0x84, 0x47, 0x06, + 0x42, 0x03, 0xc0, 0x81, 0x5b, 0x1a, 0xd9, 0x98, + 0x70, 0x31, 0xf2, 0xb3, 0x69, 0x28, 0xeb, 0xaa, + 0x26, 0x67, 0xa4, 0xe5, 0x3f, 0x7e, 0xbd, 0xfc, + 0x14, 0x55, 0x96, 0xd7, 0x0d, 0x4c, 0x8f, 0xce, + }, + { + 0x00, 0x42, 0x84, 0xc6, 0x15, 0x57, 0x91, 0xd3, + 0x2a, 0x68, 0xae, 0xec, 0x3f, 0x7d, 0xbb, 0xf9, + 0x54, 0x16, 0xd0, 0x92, 0x41, 0x03, 0xc5, 0x87, + 0x7e, 0x3c, 0xfa, 0xb8, 0x6b, 0x29, 0xef, 0xad, + 0xa8, 0xea, 0x2c, 0x6e, 0xbd, 0xff, 0x39, 0x7b, + 0x82, 0xc0, 0x06, 0x44, 0x97, 0xd5, 0x13, 0x51, + 0xfc, 0xbe, 0x78, 0x3a, 0xe9, 0xab, 0x6d, 0x2f, + 0xd6, 0x94, 0x52, 0x10, 0xc3, 0x81, 0x47, 0x05, + 0x4d, 0x0f, 0xc9, 0x8b, 0x58, 0x1a, 0xdc, 0x9e, + 0x67, 0x25, 0xe3, 0xa1, 0x72, 0x30, 0xf6, 0xb4, + 0x19, 0x5b, 0x9d, 0xdf, 0x0c, 0x4e, 0x88, 0xca, + 0x33, 0x71, 0xb7, 0xf5, 0x26, 0x64, 0xa2, 0xe0, + 0xe5, 0xa7, 0x61, 0x23, 0xf0, 0xb2, 0x74, 0x36, + 0xcf, 0x8d, 0x4b, 0x09, 0xda, 0x98, 0x5e, 0x1c, + 0xb1, 0xf3, 0x35, 0x77, 0xa4, 0xe6, 0x20, 0x62, + 0x9b, 0xd9, 0x1f, 0x5d, 0x8e, 0xcc, 0x0a, 0x48, + 0x9a, 0xd8, 0x1e, 0x5c, 0x8f, 0xcd, 0x0b, 0x49, + 0xb0, 0xf2, 0x34, 0x76, 0xa5, 0xe7, 0x21, 0x63, + 0xce, 0x8c, 0x4a, 0x08, 0xdb, 0x99, 0x5f, 0x1d, + 0xe4, 0xa6, 0x60, 0x22, 0xf1, 0xb3, 0x75, 0x37, + 0x32, 0x70, 0xb6, 0xf4, 0x27, 0x65, 0xa3, 0xe1, + 0x18, 0x5a, 0x9c, 0xde, 0x0d, 0x4f, 0x89, 0xcb, + 0x66, 0x24, 0xe2, 0xa0, 0x73, 0x31, 0xf7, 0xb5, + 0x4c, 0x0e, 0xc8, 0x8a, 0x59, 0x1b, 0xdd, 0x9f, + 0xd7, 0x95, 0x53, 0x11, 0xc2, 0x80, 0x46, 0x04, + 0xfd, 0xbf, 0x79, 0x3b, 0xe8, 0xaa, 0x6c, 0x2e, + 0x83, 0xc1, 0x07, 0x45, 0x96, 0xd4, 0x12, 0x50, + 0xa9, 0xeb, 0x2d, 0x6f, 0xbc, 0xfe, 0x38, 0x7a, + 0x7f, 0x3d, 0xfb, 0xb9, 0x6a, 0x28, 0xee, 0xac, + 0x55, 0x17, 0xd1, 0x93, 0x40, 0x02, 0xc4, 0x86, + 0x2b, 0x69, 0xaf, 0xed, 0x3e, 0x7c, 0xba, 0xf8, + 0x01, 0x43, 0x85, 0xc7, 0x14, 0x56, 0x90, 0xd2, + }, + { + 0x00, 0x43, 0x86, 0xc5, 0x11, 0x52, 0x97, 0xd4, + 0x22, 0x61, 0xa4, 0xe7, 0x33, 0x70, 0xb5, 0xf6, + 0x44, 0x07, 0xc2, 0x81, 0x55, 0x16, 0xd3, 0x90, + 0x66, 0x25, 0xe0, 0xa3, 0x77, 0x34, 0xf1, 0xb2, + 0x88, 0xcb, 0x0e, 0x4d, 0x99, 0xda, 0x1f, 0x5c, + 0xaa, 0xe9, 0x2c, 0x6f, 0xbb, 0xf8, 0x3d, 0x7e, + 0xcc, 0x8f, 0x4a, 0x09, 0xdd, 0x9e, 0x5b, 0x18, + 0xee, 0xad, 0x68, 0x2b, 0xff, 0xbc, 0x79, 0x3a, + 0x0d, 0x4e, 0x8b, 0xc8, 0x1c, 0x5f, 0x9a, 0xd9, + 0x2f, 0x6c, 0xa9, 0xea, 0x3e, 0x7d, 0xb8, 0xfb, + 0x49, 0x0a, 0xcf, 0x8c, 0x58, 0x1b, 0xde, 0x9d, + 0x6b, 0x28, 0xed, 0xae, 0x7a, 0x39, 0xfc, 0xbf, + 0x85, 0xc6, 0x03, 0x40, 0x94, 0xd7, 0x12, 0x51, + 0xa7, 0xe4, 0x21, 0x62, 0xb6, 0xf5, 0x30, 0x73, + 0xc1, 0x82, 0x47, 0x04, 0xd0, 0x93, 0x56, 0x15, + 0xe3, 0xa0, 0x65, 0x26, 0xf2, 0xb1, 0x74, 0x37, + 0x1a, 0x59, 0x9c, 0xdf, 0x0b, 0x48, 0x8d, 0xce, + 0x38, 0x7b, 0xbe, 0xfd, 0x29, 0x6a, 0xaf, 0xec, + 0x5e, 0x1d, 0xd8, 0x9b, 0x4f, 0x0c, 0xc9, 0x8a, + 0x7c, 0x3f, 0xfa, 0xb9, 0x6d, 0x2e, 0xeb, 0xa8, + 0x92, 0xd1, 0x14, 0x57, 0x83, 0xc0, 0x05, 0x46, + 0xb0, 0xf3, 0x36, 0x75, 0xa1, 0xe2, 0x27, 0x64, + 0xd6, 0x95, 0x50, 0x13, 0xc7, 0x84, 0x41, 0x02, + 0xf4, 0xb7, 0x72, 0x31, 0xe5, 0xa6, 0x63, 0x20, + 0x17, 0x54, 0x91, 0xd2, 0x06, 0x45, 0x80, 0xc3, + 0x35, 0x76, 0xb3, 0xf0, 0x24, 0x67, 0xa2, 0xe1, + 0x53, 0x10, 0xd5, 0x96, 0x42, 0x01, 0xc4, 0x87, + 0x71, 0x32, 0xf7, 0xb4, 0x60, 0x23, 0xe6, 0xa5, + 0x9f, 0xdc, 0x19, 0x5a, 0x8e, 0xcd, 0x08, 0x4b, + 0xbd, 0xfe, 0x3b, 0x78, 0xac, 0xef, 0x2a, 0x69, + 0xdb, 0x98, 0x5d, 0x1e, 0xca, 0x89, 0x4c, 0x0f, + 0xf9, 0xba, 0x7f, 0x3c, 0xe8, 0xab, 0x6e, 0x2d, + }, + { + 0x00, 0x44, 0x88, 0xcc, 0x0d, 0x49, 0x85, 0xc1, + 0x1a, 0x5e, 0x92, 0xd6, 0x17, 0x53, 0x9f, 0xdb, + 0x34, 0x70, 0xbc, 0xf8, 0x39, 0x7d, 0xb1, 0xf5, + 0x2e, 0x6a, 0xa6, 0xe2, 0x23, 0x67, 0xab, 0xef, + 0x68, 0x2c, 0xe0, 0xa4, 0x65, 0x21, 0xed, 0xa9, + 0x72, 0x36, 0xfa, 0xbe, 0x7f, 0x3b, 0xf7, 0xb3, + 0x5c, 0x18, 0xd4, 0x90, 0x51, 0x15, 0xd9, 0x9d, + 0x46, 0x02, 0xce, 0x8a, 0x4b, 0x0f, 0xc3, 0x87, + 0xd0, 0x94, 0x58, 0x1c, 0xdd, 0x99, 0x55, 0x11, + 0xca, 0x8e, 0x42, 0x06, 0xc7, 0x83, 0x4f, 0x0b, + 0xe4, 0xa0, 0x6c, 0x28, 0xe9, 0xad, 0x61, 0x25, + 0xfe, 0xba, 0x76, 0x32, 0xf3, 0xb7, 0x7b, 0x3f, + 0xb8, 0xfc, 0x30, 0x74, 0xb5, 0xf1, 0x3d, 0x79, + 0xa2, 0xe6, 0x2a, 0x6e, 0xaf, 0xeb, 0x27, 0x63, + 0x8c, 0xc8, 0x04, 0x40, 0x81, 0xc5, 0x09, 0x4d, + 0x96, 0xd2, 0x1e, 0x5a, 0x9b, 0xdf, 0x13, 0x57, + 0xbd, 0xf9, 0x35, 0x71, 0xb0, 0xf4, 0x38, 0x7c, + 0xa7, 0xe3, 0x2f, 0x6b, 0xaa, 0xee, 0x22, 0x66, + 0x89, 0xcd, 0x01, 0x45, 0x84, 0xc0, 0x0c, 0x48, + 0x93, 0xd7, 0x1b, 0x5f, 0x9e, 0xda, 0x16, 0x52, + 0xd5, 0x91, 0x5d, 0x19, 0xd8, 0x9c, 0x50, 0x14, + 0xcf, 0x8b, 0x47, 0x03, 0xc2, 0x86, 0x4a, 0x0e, + 0xe1, 0xa5, 0x69, 0x2d, 0xec, 0xa8, 0x64, 0x20, + 0xfb, 0xbf, 0x73, 0x37, 0xf6, 0xb2, 0x7e, 0x3a, + 0x6d, 0x29, 0xe5, 0xa1, 0x60, 0x24, 0xe8, 0xac, + 0x77, 0x33, 0xff, 0xbb, 0x7a, 0x3e, 0xf2, 0xb6, + 0x59, 0x1d, 0xd1, 0x95, 0x54, 0x10, 0xdc, 0x98, + 0x43, 0x07, 0xcb, 0x8f, 0x4e, 0x0a, 0xc6, 0x82, + 0x05, 0x41, 0x8d, 0xc9, 0x08, 0x4c, 0x80, 0xc4, + 0x1f, 0x5b, 0x97, 0xd3, 0x12, 0x56, 0x9a, 0xde, + 0x31, 0x75, 0xb9, 0xfd, 0x3c, 0x78, 0xb4, 0xf0, + 0x2b, 0x6f, 0xa3, 0xe7, 0x26, 0x62, 0xae, 0xea, + }, + { + 0x00, 0x45, 0x8a, 0xcf, 0x09, 0x4c, 0x83, 0xc6, + 0x12, 0x57, 0x98, 0xdd, 0x1b, 0x5e, 0x91, 0xd4, + 0x24, 0x61, 0xae, 0xeb, 0x2d, 0x68, 0xa7, 0xe2, + 0x36, 0x73, 0xbc, 0xf9, 0x3f, 0x7a, 0xb5, 0xf0, + 0x48, 0x0d, 0xc2, 0x87, 0x41, 0x04, 0xcb, 0x8e, + 0x5a, 0x1f, 0xd0, 0x95, 0x53, 0x16, 0xd9, 0x9c, + 0x6c, 0x29, 0xe6, 0xa3, 0x65, 0x20, 0xef, 0xaa, + 0x7e, 0x3b, 0xf4, 0xb1, 0x77, 0x32, 0xfd, 0xb8, + 0x90, 0xd5, 0x1a, 0x5f, 0x99, 0xdc, 0x13, 0x56, + 0x82, 0xc7, 0x08, 0x4d, 0x8b, 0xce, 0x01, 0x44, + 0xb4, 0xf1, 0x3e, 0x7b, 0xbd, 0xf8, 0x37, 0x72, + 0xa6, 0xe3, 0x2c, 0x69, 0xaf, 0xea, 0x25, 0x60, + 0xd8, 0x9d, 0x52, 0x17, 0xd1, 0x94, 0x5b, 0x1e, + 0xca, 0x8f, 0x40, 0x05, 0xc3, 0x86, 0x49, 0x0c, + 0xfc, 0xb9, 0x76, 0x33, 0xf5, 0xb0, 0x7f, 0x3a, + 0xee, 0xab, 0x64, 0x21, 0xe7, 0xa2, 0x6d, 0x28, + 0x3d, 0x78, 0xb7, 0xf2, 0x34, 0x71, 0xbe, 0xfb, + 0x2f, 0x6a, 0xa5, 0xe0, 0x26, 0x63, 0xac, 0xe9, + 0x19, 0x5c, 0x93, 0xd6, 0x10, 0x55, 0x9a, 0xdf, + 0x0b, 0x4e, 0x81, 0xc4, 0x02, 0x47, 0x88, 0xcd, + 0x75, 0x30, 0xff, 0xba, 0x7c, 0x39, 0xf6, 0xb3, + 0x67, 0x22, 0xed, 0xa8, 0x6e, 0x2b, 0xe4, 0xa1, + 0x51, 0x14, 0xdb, 0x9e, 0x58, 0x1d, 0xd2, 0x97, + 0x43, 0x06, 0xc9, 0x8c, 0x4a, 0x0f, 0xc0, 0x85, + 0xad, 0xe8, 0x27, 0x62, 0xa4, 0xe1, 0x2e, 0x6b, + 0xbf, 0xfa, 0x35, 0x70, 0xb6, 0xf3, 0x3c, 0x79, + 0x89, 0xcc, 0x03, 0x46, 0x80, 0xc5, 0x0a, 0x4f, + 0x9b, 0xde, 0x11, 0x54, 0x92, 0xd7, 0x18, 0x5d, + 0xe5, 0xa0, 0x6f, 0x2a, 0xec, 0xa9, 0x66, 0x23, + 0xf7, 0xb2, 0x7d, 0x38, 0xfe, 0xbb, 0x74, 0x31, + 0xc1, 0x84, 0x4b, 0x0e, 0xc8, 0x8d, 0x42, 0x07, + 0xd3, 0x96, 0x59, 0x1c, 0xda, 0x9f, 0x50, 0x15, + }, + { + 0x00, 0x46, 0x8c, 0xca, 0x05, 0x43, 0x89, 0xcf, + 0x0a, 0x4c, 0x86, 0xc0, 0x0f, 0x49, 0x83, 0xc5, + 0x14, 0x52, 0x98, 0xde, 0x11, 0x57, 0x9d, 0xdb, + 0x1e, 0x58, 0x92, 0xd4, 0x1b, 0x5d, 0x97, 0xd1, + 0x28, 0x6e, 0xa4, 0xe2, 0x2d, 0x6b, 0xa1, 0xe7, + 0x22, 0x64, 0xae, 0xe8, 0x27, 0x61, 0xab, 0xed, + 0x3c, 0x7a, 0xb0, 0xf6, 0x39, 0x7f, 0xb5, 0xf3, + 0x36, 0x70, 0xba, 0xfc, 0x33, 0x75, 0xbf, 0xf9, + 0x50, 0x16, 0xdc, 0x9a, 0x55, 0x13, 0xd9, 0x9f, + 0x5a, 0x1c, 0xd6, 0x90, 0x5f, 0x19, 0xd3, 0x95, + 0x44, 0x02, 0xc8, 0x8e, 0x41, 0x07, 0xcd, 0x8b, + 0x4e, 0x08, 0xc2, 0x84, 0x4b, 0x0d, 0xc7, 0x81, + 0x78, 0x3e, 0xf4, 0xb2, 0x7d, 0x3b, 0xf1, 0xb7, + 0x72, 0x34, 0xfe, 0xb8, 0x77, 0x31, 0xfb, 0xbd, + 0x6c, 0x2a, 0xe0, 0xa6, 0x69, 0x2f, 0xe5, 0xa3, + 0x66, 0x20, 0xea, 0xac, 0x63, 0x25, 0xef, 0xa9, + 0xa0, 0xe6, 0x2c, 0x6a, 0xa5, 0xe3, 0x29, 0x6f, + 0xaa, 0xec, 0x26, 0x60, 0xaf, 0xe9, 0x23, 0x65, + 0xb4, 0xf2, 0x38, 0x7e, 0xb1, 0xf7, 0x3d, 0x7b, + 0xbe, 0xf8, 0x32, 0x74, 0xbb, 0xfd, 0x37, 0x71, + 0x88, 0xce, 0x04, 0x42, 0x8d, 0xcb, 0x01, 0x47, + 0x82, 0xc4, 0x0e, 0x48, 0x87, 0xc1, 0x0b, 0x4d, + 0x9c, 0xda, 0x10, 0x56, 0x99, 0xdf, 0x15, 0x53, + 0x96, 0xd0, 0x1a, 0x5c, 0x93, 0xd5, 0x1f, 0x59, + 0xf0, 0xb6, 0x7c, 0x3a, 0xf5, 0xb3, 0x79, 0x3f, + 0xfa, 0xbc, 0x76, 0x30, 0xff, 0xb9, 0x73, 0x35, + 0xe4, 0xa2, 0x68, 0x2e, 0xe1, 0xa7, 0x6d, 0x2b, + 0xee, 0xa8, 0x62, 0x24, 0xeb, 0xad, 0x67, 0x21, + 0xd8, 0x9e, 0x54, 0x12, 0xdd, 0x9b, 0x51, 0x17, + 0xd2, 0x94, 0x5e, 0x18, 0xd7, 0x91, 0x5b, 0x1d, + 0xcc, 0x8a, 0x40, 0x06, 0xc9, 0x8f, 0x45, 0x03, + 0xc6, 0x80, 0x4a, 0x0c, 0xc3, 0x85, 0x4f, 0x09, + }, + { + 0x00, 0x47, 0x8e, 0xc9, 0x01, 0x46, 0x8f, 0xc8, + 0x02, 0x45, 0x8c, 0xcb, 0x03, 0x44, 0x8d, 0xca, + 0x04, 0x43, 0x8a, 0xcd, 0x05, 0x42, 0x8b, 0xcc, + 0x06, 0x41, 0x88, 0xcf, 0x07, 0x40, 0x89, 0xce, + 0x08, 0x4f, 0x86, 0xc1, 0x09, 0x4e, 0x87, 0xc0, + 0x0a, 0x4d, 0x84, 0xc3, 0x0b, 0x4c, 0x85, 0xc2, + 0x0c, 0x4b, 0x82, 0xc5, 0x0d, 0x4a, 0x83, 0xc4, + 0x0e, 0x49, 0x80, 0xc7, 0x0f, 0x48, 0x81, 0xc6, + 0x10, 0x57, 0x9e, 0xd9, 0x11, 0x56, 0x9f, 0xd8, + 0x12, 0x55, 0x9c, 0xdb, 0x13, 0x54, 0x9d, 0xda, + 0x14, 0x53, 0x9a, 0xdd, 0x15, 0x52, 0x9b, 0xdc, + 0x16, 0x51, 0x98, 0xdf, 0x17, 0x50, 0x99, 0xde, + 0x18, 0x5f, 0x96, 0xd1, 0x19, 0x5e, 0x97, 0xd0, + 0x1a, 0x5d, 0x94, 0xd3, 0x1b, 0x5c, 0x95, 0xd2, + 0x1c, 0x5b, 0x92, 0xd5, 0x1d, 0x5a, 0x93, 0xd4, + 0x1e, 0x59, 0x90, 0xd7, 0x1f, 0x58, 0x91, 0xd6, + 0x20, 0x67, 0xae, 0xe9, 0x21, 0x66, 0xaf, 0xe8, + 0x22, 0x65, 0xac, 0xeb, 0x23, 0x64, 0xad, 0xea, + 0x24, 0x63, 0xaa, 0xed, 0x25, 0x62, 0xab, 0xec, + 0x26, 0x61, 0xa8, 0xef, 0x27, 0x60, 0xa9, 0xee, + 0x28, 0x6f, 0xa6, 0xe1, 0x29, 0x6e, 0xa7, 0xe0, + 0x2a, 0x6d, 0xa4, 0xe3, 0x2b, 0x6c, 0xa5, 0xe2, + 0x2c, 0x6b, 0xa2, 0xe5, 0x2d, 0x6a, 0xa3, 0xe4, + 0x2e, 0x69, 0xa0, 0xe7, 0x2f, 0x68, 0xa1, 0xe6, + 0x30, 0x77, 0xbe, 0xf9, 0x31, 0x76, 0xbf, 0xf8, + 0x32, 0x75, 0xbc, 0xfb, 0x33, 0x74, 0xbd, 0xfa, + 0x34, 0x73, 0xba, 0xfd, 0x35, 0x72, 0xbb, 0xfc, + 0x36, 0x71, 0xb8, 0xff, 0x37, 0x70, 0xb9, 0xfe, + 0x38, 0x7f, 0xb6, 0xf1, 0x39, 0x7e, 0xb7, 0xf0, + 0x3a, 0x7d, 0xb4, 0xf3, 0x3b, 0x7c, 0xb5, 0xf2, + 0x3c, 0x7b, 0xb2, 0xf5, 0x3d, 0x7a, 0xb3, 0xf4, + 0x3e, 0x79, 0xb0, 0xf7, 0x3f, 0x78, 0xb1, 0xf6, + }, + { + 0x00, 0x48, 0x90, 0xd8, 0x3d, 0x75, 0xad, 0xe5, + 0x7a, 0x32, 0xea, 0xa2, 0x47, 0x0f, 0xd7, 0x9f, + 0xf4, 0xbc, 0x64, 0x2c, 0xc9, 0x81, 0x59, 0x11, + 0x8e, 0xc6, 0x1e, 0x56, 0xb3, 0xfb, 0x23, 0x6b, + 0xf5, 0xbd, 0x65, 0x2d, 0xc8, 0x80, 0x58, 0x10, + 0x8f, 0xc7, 0x1f, 0x57, 0xb2, 0xfa, 0x22, 0x6a, + 0x01, 0x49, 0x91, 0xd9, 0x3c, 0x74, 0xac, 0xe4, + 0x7b, 0x33, 0xeb, 0xa3, 0x46, 0x0e, 0xd6, 0x9e, + 0xf7, 0xbf, 0x67, 0x2f, 0xca, 0x82, 0x5a, 0x12, + 0x8d, 0xc5, 0x1d, 0x55, 0xb0, 0xf8, 0x20, 0x68, + 0x03, 0x4b, 0x93, 0xdb, 0x3e, 0x76, 0xae, 0xe6, + 0x79, 0x31, 0xe9, 0xa1, 0x44, 0x0c, 0xd4, 0x9c, + 0x02, 0x4a, 0x92, 0xda, 0x3f, 0x77, 0xaf, 0xe7, + 0x78, 0x30, 0xe8, 0xa0, 0x45, 0x0d, 0xd5, 0x9d, + 0xf6, 0xbe, 0x66, 0x2e, 0xcb, 0x83, 0x5b, 0x13, + 0x8c, 0xc4, 0x1c, 0x54, 0xb1, 0xf9, 0x21, 0x69, + 0xf3, 0xbb, 0x63, 0x2b, 0xce, 0x86, 0x5e, 0x16, + 0x89, 0xc1, 0x19, 0x51, 0xb4, 0xfc, 0x24, 0x6c, + 0x07, 0x4f, 0x97, 0xdf, 0x3a, 0x72, 0xaa, 0xe2, + 0x7d, 0x35, 0xed, 0xa5, 0x40, 0x08, 0xd0, 0x98, + 0x06, 0x4e, 0x96, 0xde, 0x3b, 0x73, 0xab, 0xe3, + 0x7c, 0x34, 0xec, 0xa4, 0x41, 0x09, 0xd1, 0x99, + 0xf2, 0xba, 0x62, 0x2a, 0xcf, 0x87, 0x5f, 0x17, + 0x88, 0xc0, 0x18, 0x50, 0xb5, 0xfd, 0x25, 0x6d, + 0x04, 0x4c, 0x94, 0xdc, 0x39, 0x71, 0xa9, 0xe1, + 0x7e, 0x36, 0xee, 0xa6, 0x43, 0x0b, 0xd3, 0x9b, + 0xf0, 0xb8, 0x60, 0x28, 0xcd, 0x85, 0x5d, 0x15, + 0x8a, 0xc2, 0x1a, 0x52, 0xb7, 0xff, 0x27, 0x6f, + 0xf1, 0xb9, 0x61, 0x29, 0xcc, 0x84, 0x5c, 0x14, + 0x8b, 0xc3, 0x1b, 0x53, 0xb6, 0xfe, 0x26, 0x6e, + 0x05, 0x4d, 0x95, 0xdd, 0x38, 0x70, 0xa8, 0xe0, + 0x7f, 0x37, 0xef, 0xa7, 0x42, 0x0a, 0xd2, 0x9a, + }, + { + 0x00, 0x49, 0x92, 0xdb, 0x39, 0x70, 0xab, 0xe2, + 0x72, 0x3b, 0xe0, 0xa9, 0x4b, 0x02, 0xd9, 0x90, + 0xe4, 0xad, 0x76, 0x3f, 0xdd, 0x94, 0x4f, 0x06, + 0x96, 0xdf, 0x04, 0x4d, 0xaf, 0xe6, 0x3d, 0x74, + 0xd5, 0x9c, 0x47, 0x0e, 0xec, 0xa5, 0x7e, 0x37, + 0xa7, 0xee, 0x35, 0x7c, 0x9e, 0xd7, 0x0c, 0x45, + 0x31, 0x78, 0xa3, 0xea, 0x08, 0x41, 0x9a, 0xd3, + 0x43, 0x0a, 0xd1, 0x98, 0x7a, 0x33, 0xe8, 0xa1, + 0xb7, 0xfe, 0x25, 0x6c, 0x8e, 0xc7, 0x1c, 0x55, + 0xc5, 0x8c, 0x57, 0x1e, 0xfc, 0xb5, 0x6e, 0x27, + 0x53, 0x1a, 0xc1, 0x88, 0x6a, 0x23, 0xf8, 0xb1, + 0x21, 0x68, 0xb3, 0xfa, 0x18, 0x51, 0x8a, 0xc3, + 0x62, 0x2b, 0xf0, 0xb9, 0x5b, 0x12, 0xc9, 0x80, + 0x10, 0x59, 0x82, 0xcb, 0x29, 0x60, 0xbb, 0xf2, + 0x86, 0xcf, 0x14, 0x5d, 0xbf, 0xf6, 0x2d, 0x64, + 0xf4, 0xbd, 0x66, 0x2f, 0xcd, 0x84, 0x5f, 0x16, + 0x73, 0x3a, 0xe1, 0xa8, 0x4a, 0x03, 0xd8, 0x91, + 0x01, 0x48, 0x93, 0xda, 0x38, 0x71, 0xaa, 0xe3, + 0x97, 0xde, 0x05, 0x4c, 0xae, 0xe7, 0x3c, 0x75, + 0xe5, 0xac, 0x77, 0x3e, 0xdc, 0x95, 0x4e, 0x07, + 0xa6, 0xef, 0x34, 0x7d, 0x9f, 0xd6, 0x0d, 0x44, + 0xd4, 0x9d, 0x46, 0x0f, 0xed, 0xa4, 0x7f, 0x36, + 0x42, 0x0b, 0xd0, 0x99, 0x7b, 0x32, 0xe9, 0xa0, + 0x30, 0x79, 0xa2, 0xeb, 0x09, 0x40, 0x9b, 0xd2, + 0xc4, 0x8d, 0x56, 0x1f, 0xfd, 0xb4, 0x6f, 0x26, + 0xb6, 0xff, 0x24, 0x6d, 0x8f, 0xc6, 0x1d, 0x54, + 0x20, 0x69, 0xb2, 0xfb, 0x19, 0x50, 0x8b, 0xc2, + 0x52, 0x1b, 0xc0, 0x89, 0x6b, 0x22, 0xf9, 0xb0, + 0x11, 0x58, 0x83, 0xca, 0x28, 0x61, 0xba, 0xf3, + 0x63, 0x2a, 0xf1, 0xb8, 0x5a, 0x13, 0xc8, 0x81, + 0xf5, 0xbc, 0x67, 0x2e, 0xcc, 0x85, 0x5e, 0x17, + 0x87, 0xce, 0x15, 0x5c, 0xbe, 0xf7, 0x2c, 0x65, + }, + { + 0x00, 0x4a, 0x94, 0xde, 0x35, 0x7f, 0xa1, 0xeb, + 0x6a, 0x20, 0xfe, 0xb4, 0x5f, 0x15, 0xcb, 0x81, + 0xd4, 0x9e, 0x40, 0x0a, 0xe1, 0xab, 0x75, 0x3f, + 0xbe, 0xf4, 0x2a, 0x60, 0x8b, 0xc1, 0x1f, 0x55, + 0xb5, 0xff, 0x21, 0x6b, 0x80, 0xca, 0x14, 0x5e, + 0xdf, 0x95, 0x4b, 0x01, 0xea, 0xa0, 0x7e, 0x34, + 0x61, 0x2b, 0xf5, 0xbf, 0x54, 0x1e, 0xc0, 0x8a, + 0x0b, 0x41, 0x9f, 0xd5, 0x3e, 0x74, 0xaa, 0xe0, + 0x77, 0x3d, 0xe3, 0xa9, 0x42, 0x08, 0xd6, 0x9c, + 0x1d, 0x57, 0x89, 0xc3, 0x28, 0x62, 0xbc, 0xf6, + 0xa3, 0xe9, 0x37, 0x7d, 0x96, 0xdc, 0x02, 0x48, + 0xc9, 0x83, 0x5d, 0x17, 0xfc, 0xb6, 0x68, 0x22, + 0xc2, 0x88, 0x56, 0x1c, 0xf7, 0xbd, 0x63, 0x29, + 0xa8, 0xe2, 0x3c, 0x76, 0x9d, 0xd7, 0x09, 0x43, + 0x16, 0x5c, 0x82, 0xc8, 0x23, 0x69, 0xb7, 0xfd, + 0x7c, 0x36, 0xe8, 0xa2, 0x49, 0x03, 0xdd, 0x97, + 0xee, 0xa4, 0x7a, 0x30, 0xdb, 0x91, 0x4f, 0x05, + 0x84, 0xce, 0x10, 0x5a, 0xb1, 0xfb, 0x25, 0x6f, + 0x3a, 0x70, 0xae, 0xe4, 0x0f, 0x45, 0x9b, 0xd1, + 0x50, 0x1a, 0xc4, 0x8e, 0x65, 0x2f, 0xf1, 0xbb, + 0x5b, 0x11, 0xcf, 0x85, 0x6e, 0x24, 0xfa, 0xb0, + 0x31, 0x7b, 0xa5, 0xef, 0x04, 0x4e, 0x90, 0xda, + 0x8f, 0xc5, 0x1b, 0x51, 0xba, 0xf0, 0x2e, 0x64, + 0xe5, 0xaf, 0x71, 0x3b, 0xd0, 0x9a, 0x44, 0x0e, + 0x99, 0xd3, 0x0d, 0x47, 0xac, 0xe6, 0x38, 0x72, + 0xf3, 0xb9, 0x67, 0x2d, 0xc6, 0x8c, 0x52, 0x18, + 0x4d, 0x07, 0xd9, 0x93, 0x78, 0x32, 0xec, 0xa6, + 0x27, 0x6d, 0xb3, 0xf9, 0x12, 0x58, 0x86, 0xcc, + 0x2c, 0x66, 0xb8, 0xf2, 0x19, 0x53, 0x8d, 0xc7, + 0x46, 0x0c, 0xd2, 0x98, 0x73, 0x39, 0xe7, 0xad, + 0xf8, 0xb2, 0x6c, 0x26, 0xcd, 0x87, 0x59, 0x13, + 0x92, 0xd8, 0x06, 0x4c, 0xa7, 0xed, 0x33, 0x79, + }, + { + 0x00, 0x4b, 0x96, 0xdd, 0x31, 0x7a, 0xa7, 0xec, + 0x62, 0x29, 0xf4, 0xbf, 0x53, 0x18, 0xc5, 0x8e, + 0xc4, 0x8f, 0x52, 0x19, 0xf5, 0xbe, 0x63, 0x28, + 0xa6, 0xed, 0x30, 0x7b, 0x97, 0xdc, 0x01, 0x4a, + 0x95, 0xde, 0x03, 0x48, 0xa4, 0xef, 0x32, 0x79, + 0xf7, 0xbc, 0x61, 0x2a, 0xc6, 0x8d, 0x50, 0x1b, + 0x51, 0x1a, 0xc7, 0x8c, 0x60, 0x2b, 0xf6, 0xbd, + 0x33, 0x78, 0xa5, 0xee, 0x02, 0x49, 0x94, 0xdf, + 0x37, 0x7c, 0xa1, 0xea, 0x06, 0x4d, 0x90, 0xdb, + 0x55, 0x1e, 0xc3, 0x88, 0x64, 0x2f, 0xf2, 0xb9, + 0xf3, 0xb8, 0x65, 0x2e, 0xc2, 0x89, 0x54, 0x1f, + 0x91, 0xda, 0x07, 0x4c, 0xa0, 0xeb, 0x36, 0x7d, + 0xa2, 0xe9, 0x34, 0x7f, 0x93, 0xd8, 0x05, 0x4e, + 0xc0, 0x8b, 0x56, 0x1d, 0xf1, 0xba, 0x67, 0x2c, + 0x66, 0x2d, 0xf0, 0xbb, 0x57, 0x1c, 0xc1, 0x8a, + 0x04, 0x4f, 0x92, 0xd9, 0x35, 0x7e, 0xa3, 0xe8, + 0x6e, 0x25, 0xf8, 0xb3, 0x5f, 0x14, 0xc9, 0x82, + 0x0c, 0x47, 0x9a, 0xd1, 0x3d, 0x76, 0xab, 0xe0, + 0xaa, 0xe1, 0x3c, 0x77, 0x9b, 0xd0, 0x0d, 0x46, + 0xc8, 0x83, 0x5e, 0x15, 0xf9, 0xb2, 0x6f, 0x24, + 0xfb, 0xb0, 0x6d, 0x26, 0xca, 0x81, 0x5c, 0x17, + 0x99, 0xd2, 0x0f, 0x44, 0xa8, 0xe3, 0x3e, 0x75, + 0x3f, 0x74, 0xa9, 0xe2, 0x0e, 0x45, 0x98, 0xd3, + 0x5d, 0x16, 0xcb, 0x80, 0x6c, 0x27, 0xfa, 0xb1, + 0x59, 0x12, 0xcf, 0x84, 0x68, 0x23, 0xfe, 0xb5, + 0x3b, 0x70, 0xad, 0xe6, 0x0a, 0x41, 0x9c, 0xd7, + 0x9d, 0xd6, 0x0b, 0x40, 0xac, 0xe7, 0x3a, 0x71, + 0xff, 0xb4, 0x69, 0x22, 0xce, 0x85, 0x58, 0x13, + 0xcc, 0x87, 0x5a, 0x11, 0xfd, 0xb6, 0x6b, 0x20, + 0xae, 0xe5, 0x38, 0x73, 0x9f, 0xd4, 0x09, 0x42, + 0x08, 0x43, 0x9e, 0xd5, 0x39, 0x72, 0xaf, 0xe4, + 0x6a, 0x21, 0xfc, 0xb7, 0x5b, 0x10, 0xcd, 0x86, + }, + { + 0x00, 0x4c, 0x98, 0xd4, 0x2d, 0x61, 0xb5, 0xf9, + 0x5a, 0x16, 0xc2, 0x8e, 0x77, 0x3b, 0xef, 0xa3, + 0xb4, 0xf8, 0x2c, 0x60, 0x99, 0xd5, 0x01, 0x4d, + 0xee, 0xa2, 0x76, 0x3a, 0xc3, 0x8f, 0x5b, 0x17, + 0x75, 0x39, 0xed, 0xa1, 0x58, 0x14, 0xc0, 0x8c, + 0x2f, 0x63, 0xb7, 0xfb, 0x02, 0x4e, 0x9a, 0xd6, + 0xc1, 0x8d, 0x59, 0x15, 0xec, 0xa0, 0x74, 0x38, + 0x9b, 0xd7, 0x03, 0x4f, 0xb6, 0xfa, 0x2e, 0x62, + 0xea, 0xa6, 0x72, 0x3e, 0xc7, 0x8b, 0x5f, 0x13, + 0xb0, 0xfc, 0x28, 0x64, 0x9d, 0xd1, 0x05, 0x49, + 0x5e, 0x12, 0xc6, 0x8a, 0x73, 0x3f, 0xeb, 0xa7, + 0x04, 0x48, 0x9c, 0xd0, 0x29, 0x65, 0xb1, 0xfd, + 0x9f, 0xd3, 0x07, 0x4b, 0xb2, 0xfe, 0x2a, 0x66, + 0xc5, 0x89, 0x5d, 0x11, 0xe8, 0xa4, 0x70, 0x3c, + 0x2b, 0x67, 0xb3, 0xff, 0x06, 0x4a, 0x9e, 0xd2, + 0x71, 0x3d, 0xe9, 0xa5, 0x5c, 0x10, 0xc4, 0x88, + 0xc9, 0x85, 0x51, 0x1d, 0xe4, 0xa8, 0x7c, 0x30, + 0x93, 0xdf, 0x0b, 0x47, 0xbe, 0xf2, 0x26, 0x6a, + 0x7d, 0x31, 0xe5, 0xa9, 0x50, 0x1c, 0xc8, 0x84, + 0x27, 0x6b, 0xbf, 0xf3, 0x0a, 0x46, 0x92, 0xde, + 0xbc, 0xf0, 0x24, 0x68, 0x91, 0xdd, 0x09, 0x45, + 0xe6, 0xaa, 0x7e, 0x32, 0xcb, 0x87, 0x53, 0x1f, + 0x08, 0x44, 0x90, 0xdc, 0x25, 0x69, 0xbd, 0xf1, + 0x52, 0x1e, 0xca, 0x86, 0x7f, 0x33, 0xe7, 0xab, + 0x23, 0x6f, 0xbb, 0xf7, 0x0e, 0x42, 0x96, 0xda, + 0x79, 0x35, 0xe1, 0xad, 0x54, 0x18, 0xcc, 0x80, + 0x97, 0xdb, 0x0f, 0x43, 0xba, 0xf6, 0x22, 0x6e, + 0xcd, 0x81, 0x55, 0x19, 0xe0, 0xac, 0x78, 0x34, + 0x56, 0x1a, 0xce, 0x82, 0x7b, 0x37, 0xe3, 0xaf, + 0x0c, 0x40, 0x94, 0xd8, 0x21, 0x6d, 0xb9, 0xf5, + 0xe2, 0xae, 0x7a, 0x36, 0xcf, 0x83, 0x57, 0x1b, + 0xb8, 0xf4, 0x20, 0x6c, 0x95, 0xd9, 0x0d, 0x41, + }, + { + 0x00, 0x4d, 0x9a, 0xd7, 0x29, 0x64, 0xb3, 0xfe, + 0x52, 0x1f, 0xc8, 0x85, 0x7b, 0x36, 0xe1, 0xac, + 0xa4, 0xe9, 0x3e, 0x73, 0x8d, 0xc0, 0x17, 0x5a, + 0xf6, 0xbb, 0x6c, 0x21, 0xdf, 0x92, 0x45, 0x08, + 0x55, 0x18, 0xcf, 0x82, 0x7c, 0x31, 0xe6, 0xab, + 0x07, 0x4a, 0x9d, 0xd0, 0x2e, 0x63, 0xb4, 0xf9, + 0xf1, 0xbc, 0x6b, 0x26, 0xd8, 0x95, 0x42, 0x0f, + 0xa3, 0xee, 0x39, 0x74, 0x8a, 0xc7, 0x10, 0x5d, + 0xaa, 0xe7, 0x30, 0x7d, 0x83, 0xce, 0x19, 0x54, + 0xf8, 0xb5, 0x62, 0x2f, 0xd1, 0x9c, 0x4b, 0x06, + 0x0e, 0x43, 0x94, 0xd9, 0x27, 0x6a, 0xbd, 0xf0, + 0x5c, 0x11, 0xc6, 0x8b, 0x75, 0x38, 0xef, 0xa2, + 0xff, 0xb2, 0x65, 0x28, 0xd6, 0x9b, 0x4c, 0x01, + 0xad, 0xe0, 0x37, 0x7a, 0x84, 0xc9, 0x1e, 0x53, + 0x5b, 0x16, 0xc1, 0x8c, 0x72, 0x3f, 0xe8, 0xa5, + 0x09, 0x44, 0x93, 0xde, 0x20, 0x6d, 0xba, 0xf7, + 0x49, 0x04, 0xd3, 0x9e, 0x60, 0x2d, 0xfa, 0xb7, + 0x1b, 0x56, 0x81, 0xcc, 0x32, 0x7f, 0xa8, 0xe5, + 0xed, 0xa0, 0x77, 0x3a, 0xc4, 0x89, 0x5e, 0x13, + 0xbf, 0xf2, 0x25, 0x68, 0x96, 0xdb, 0x0c, 0x41, + 0x1c, 0x51, 0x86, 0xcb, 0x35, 0x78, 0xaf, 0xe2, + 0x4e, 0x03, 0xd4, 0x99, 0x67, 0x2a, 0xfd, 0xb0, + 0xb8, 0xf5, 0x22, 0x6f, 0x91, 0xdc, 0x0b, 0x46, + 0xea, 0xa7, 0x70, 0x3d, 0xc3, 0x8e, 0x59, 0x14, + 0xe3, 0xae, 0x79, 0x34, 0xca, 0x87, 0x50, 0x1d, + 0xb1, 0xfc, 0x2b, 0x66, 0x98, 0xd5, 0x02, 0x4f, + 0x47, 0x0a, 0xdd, 0x90, 0x6e, 0x23, 0xf4, 0xb9, + 0x15, 0x58, 0x8f, 0xc2, 0x3c, 0x71, 0xa6, 0xeb, + 0xb6, 0xfb, 0x2c, 0x61, 0x9f, 0xd2, 0x05, 0x48, + 0xe4, 0xa9, 0x7e, 0x33, 0xcd, 0x80, 0x57, 0x1a, + 0x12, 0x5f, 0x88, 0xc5, 0x3b, 0x76, 0xa1, 0xec, + 0x40, 0x0d, 0xda, 0x97, 0x69, 0x24, 0xf3, 0xbe, + }, + { + 0x00, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, + 0x4a, 0x04, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd, + 0x94, 0xda, 0x08, 0x46, 0xb1, 0xff, 0x2d, 0x63, + 0xde, 0x90, 0x42, 0x0c, 0xfb, 0xb5, 0x67, 0x29, + 0x35, 0x7b, 0xa9, 0xe7, 0x10, 0x5e, 0x8c, 0xc2, + 0x7f, 0x31, 0xe3, 0xad, 0x5a, 0x14, 0xc6, 0x88, + 0xa1, 0xef, 0x3d, 0x73, 0x84, 0xca, 0x18, 0x56, + 0xeb, 0xa5, 0x77, 0x39, 0xce, 0x80, 0x52, 0x1c, + 0x6a, 0x24, 0xf6, 0xb8, 0x4f, 0x01, 0xd3, 0x9d, + 0x20, 0x6e, 0xbc, 0xf2, 0x05, 0x4b, 0x99, 0xd7, + 0xfe, 0xb0, 0x62, 0x2c, 0xdb, 0x95, 0x47, 0x09, + 0xb4, 0xfa, 0x28, 0x66, 0x91, 0xdf, 0x0d, 0x43, + 0x5f, 0x11, 0xc3, 0x8d, 0x7a, 0x34, 0xe6, 0xa8, + 0x15, 0x5b, 0x89, 0xc7, 0x30, 0x7e, 0xac, 0xe2, + 0xcb, 0x85, 0x57, 0x19, 0xee, 0xa0, 0x72, 0x3c, + 0x81, 0xcf, 0x1d, 0x53, 0xa4, 0xea, 0x38, 0x76, + 0xd4, 0x9a, 0x48, 0x06, 0xf1, 0xbf, 0x6d, 0x23, + 0x9e, 0xd0, 0x02, 0x4c, 0xbb, 0xf5, 0x27, 0x69, + 0x40, 0x0e, 0xdc, 0x92, 0x65, 0x2b, 0xf9, 0xb7, + 0x0a, 0x44, 0x96, 0xd8, 0x2f, 0x61, 0xb3, 0xfd, + 0xe1, 0xaf, 0x7d, 0x33, 0xc4, 0x8a, 0x58, 0x16, + 0xab, 0xe5, 0x37, 0x79, 0x8e, 0xc0, 0x12, 0x5c, + 0x75, 0x3b, 0xe9, 0xa7, 0x50, 0x1e, 0xcc, 0x82, + 0x3f, 0x71, 0xa3, 0xed, 0x1a, 0x54, 0x86, 0xc8, + 0xbe, 0xf0, 0x22, 0x6c, 0x9b, 0xd5, 0x07, 0x49, + 0xf4, 0xba, 0x68, 0x26, 0xd1, 0x9f, 0x4d, 0x03, + 0x2a, 0x64, 0xb6, 0xf8, 0x0f, 0x41, 0x93, 0xdd, + 0x60, 0x2e, 0xfc, 0xb2, 0x45, 0x0b, 0xd9, 0x97, + 0x8b, 0xc5, 0x17, 0x59, 0xae, 0xe0, 0x32, 0x7c, + 0xc1, 0x8f, 0x5d, 0x13, 0xe4, 0xaa, 0x78, 0x36, + 0x1f, 0x51, 0x83, 0xcd, 0x3a, 0x74, 0xa6, 0xe8, + 0x55, 0x1b, 0xc9, 0x87, 0x70, 0x3e, 0xec, 0xa2, + }, + { + 0x00, 0x4f, 0x9e, 0xd1, 0x21, 0x6e, 0xbf, 0xf0, + 0x42, 0x0d, 0xdc, 0x93, 0x63, 0x2c, 0xfd, 0xb2, + 0x84, 0xcb, 0x1a, 0x55, 0xa5, 0xea, 0x3b, 0x74, + 0xc6, 0x89, 0x58, 0x17, 0xe7, 0xa8, 0x79, 0x36, + 0x15, 0x5a, 0x8b, 0xc4, 0x34, 0x7b, 0xaa, 0xe5, + 0x57, 0x18, 0xc9, 0x86, 0x76, 0x39, 0xe8, 0xa7, + 0x91, 0xde, 0x0f, 0x40, 0xb0, 0xff, 0x2e, 0x61, + 0xd3, 0x9c, 0x4d, 0x02, 0xf2, 0xbd, 0x6c, 0x23, + 0x2a, 0x65, 0xb4, 0xfb, 0x0b, 0x44, 0x95, 0xda, + 0x68, 0x27, 0xf6, 0xb9, 0x49, 0x06, 0xd7, 0x98, + 0xae, 0xe1, 0x30, 0x7f, 0x8f, 0xc0, 0x11, 0x5e, + 0xec, 0xa3, 0x72, 0x3d, 0xcd, 0x82, 0x53, 0x1c, + 0x3f, 0x70, 0xa1, 0xee, 0x1e, 0x51, 0x80, 0xcf, + 0x7d, 0x32, 0xe3, 0xac, 0x5c, 0x13, 0xc2, 0x8d, + 0xbb, 0xf4, 0x25, 0x6a, 0x9a, 0xd5, 0x04, 0x4b, + 0xf9, 0xb6, 0x67, 0x28, 0xd8, 0x97, 0x46, 0x09, + 0x54, 0x1b, 0xca, 0x85, 0x75, 0x3a, 0xeb, 0xa4, + 0x16, 0x59, 0x88, 0xc7, 0x37, 0x78, 0xa9, 0xe6, + 0xd0, 0x9f, 0x4e, 0x01, 0xf1, 0xbe, 0x6f, 0x20, + 0x92, 0xdd, 0x0c, 0x43, 0xb3, 0xfc, 0x2d, 0x62, + 0x41, 0x0e, 0xdf, 0x90, 0x60, 0x2f, 0xfe, 0xb1, + 0x03, 0x4c, 0x9d, 0xd2, 0x22, 0x6d, 0xbc, 0xf3, + 0xc5, 0x8a, 0x5b, 0x14, 0xe4, 0xab, 0x7a, 0x35, + 0x87, 0xc8, 0x19, 0x56, 0xa6, 0xe9, 0x38, 0x77, + 0x7e, 0x31, 0xe0, 0xaf, 0x5f, 0x10, 0xc1, 0x8e, + 0x3c, 0x73, 0xa2, 0xed, 0x1d, 0x52, 0x83, 0xcc, + 0xfa, 0xb5, 0x64, 0x2b, 0xdb, 0x94, 0x45, 0x0a, + 0xb8, 0xf7, 0x26, 0x69, 0x99, 0xd6, 0x07, 0x48, + 0x6b, 0x24, 0xf5, 0xba, 0x4a, 0x05, 0xd4, 0x9b, + 0x29, 0x66, 0xb7, 0xf8, 0x08, 0x47, 0x96, 0xd9, + 0xef, 0xa0, 0x71, 0x3e, 0xce, 0x81, 0x50, 0x1f, + 0xad, 0xe2, 0x33, 0x7c, 0x8c, 0xc3, 0x12, 0x5d, + }, + { + 0x00, 0x50, 0xa0, 0xf0, 0x5d, 0x0d, 0xfd, 0xad, + 0xba, 0xea, 0x1a, 0x4a, 0xe7, 0xb7, 0x47, 0x17, + 0x69, 0x39, 0xc9, 0x99, 0x34, 0x64, 0x94, 0xc4, + 0xd3, 0x83, 0x73, 0x23, 0x8e, 0xde, 0x2e, 0x7e, + 0xd2, 0x82, 0x72, 0x22, 0x8f, 0xdf, 0x2f, 0x7f, + 0x68, 0x38, 0xc8, 0x98, 0x35, 0x65, 0x95, 0xc5, + 0xbb, 0xeb, 0x1b, 0x4b, 0xe6, 0xb6, 0x46, 0x16, + 0x01, 0x51, 0xa1, 0xf1, 0x5c, 0x0c, 0xfc, 0xac, + 0xb9, 0xe9, 0x19, 0x49, 0xe4, 0xb4, 0x44, 0x14, + 0x03, 0x53, 0xa3, 0xf3, 0x5e, 0x0e, 0xfe, 0xae, + 0xd0, 0x80, 0x70, 0x20, 0x8d, 0xdd, 0x2d, 0x7d, + 0x6a, 0x3a, 0xca, 0x9a, 0x37, 0x67, 0x97, 0xc7, + 0x6b, 0x3b, 0xcb, 0x9b, 0x36, 0x66, 0x96, 0xc6, + 0xd1, 0x81, 0x71, 0x21, 0x8c, 0xdc, 0x2c, 0x7c, + 0x02, 0x52, 0xa2, 0xf2, 0x5f, 0x0f, 0xff, 0xaf, + 0xb8, 0xe8, 0x18, 0x48, 0xe5, 0xb5, 0x45, 0x15, + 0x6f, 0x3f, 0xcf, 0x9f, 0x32, 0x62, 0x92, 0xc2, + 0xd5, 0x85, 0x75, 0x25, 0x88, 0xd8, 0x28, 0x78, + 0x06, 0x56, 0xa6, 0xf6, 0x5b, 0x0b, 0xfb, 0xab, + 0xbc, 0xec, 0x1c, 0x4c, 0xe1, 0xb1, 0x41, 0x11, + 0xbd, 0xed, 0x1d, 0x4d, 0xe0, 0xb0, 0x40, 0x10, + 0x07, 0x57, 0xa7, 0xf7, 0x5a, 0x0a, 0xfa, 0xaa, + 0xd4, 0x84, 0x74, 0x24, 0x89, 0xd9, 0x29, 0x79, + 0x6e, 0x3e, 0xce, 0x9e, 0x33, 0x63, 0x93, 0xc3, + 0xd6, 0x86, 0x76, 0x26, 0x8b, 0xdb, 0x2b, 0x7b, + 0x6c, 0x3c, 0xcc, 0x9c, 0x31, 0x61, 0x91, 0xc1, + 0xbf, 0xef, 0x1f, 0x4f, 0xe2, 0xb2, 0x42, 0x12, + 0x05, 0x55, 0xa5, 0xf5, 0x58, 0x08, 0xf8, 0xa8, + 0x04, 0x54, 0xa4, 0xf4, 0x59, 0x09, 0xf9, 0xa9, + 0xbe, 0xee, 0x1e, 0x4e, 0xe3, 0xb3, 0x43, 0x13, + 0x6d, 0x3d, 0xcd, 0x9d, 0x30, 0x60, 0x90, 0xc0, + 0xd7, 0x87, 0x77, 0x27, 0x8a, 0xda, 0x2a, 0x7a, + }, + { + 0x00, 0x51, 0xa2, 0xf3, 0x59, 0x08, 0xfb, 0xaa, + 0xb2, 0xe3, 0x10, 0x41, 0xeb, 0xba, 0x49, 0x18, + 0x79, 0x28, 0xdb, 0x8a, 0x20, 0x71, 0x82, 0xd3, + 0xcb, 0x9a, 0x69, 0x38, 0x92, 0xc3, 0x30, 0x61, + 0xf2, 0xa3, 0x50, 0x01, 0xab, 0xfa, 0x09, 0x58, + 0x40, 0x11, 0xe2, 0xb3, 0x19, 0x48, 0xbb, 0xea, + 0x8b, 0xda, 0x29, 0x78, 0xd2, 0x83, 0x70, 0x21, + 0x39, 0x68, 0x9b, 0xca, 0x60, 0x31, 0xc2, 0x93, + 0xf9, 0xa8, 0x5b, 0x0a, 0xa0, 0xf1, 0x02, 0x53, + 0x4b, 0x1a, 0xe9, 0xb8, 0x12, 0x43, 0xb0, 0xe1, + 0x80, 0xd1, 0x22, 0x73, 0xd9, 0x88, 0x7b, 0x2a, + 0x32, 0x63, 0x90, 0xc1, 0x6b, 0x3a, 0xc9, 0x98, + 0x0b, 0x5a, 0xa9, 0xf8, 0x52, 0x03, 0xf0, 0xa1, + 0xb9, 0xe8, 0x1b, 0x4a, 0xe0, 0xb1, 0x42, 0x13, + 0x72, 0x23, 0xd0, 0x81, 0x2b, 0x7a, 0x89, 0xd8, + 0xc0, 0x91, 0x62, 0x33, 0x99, 0xc8, 0x3b, 0x6a, + 0xef, 0xbe, 0x4d, 0x1c, 0xb6, 0xe7, 0x14, 0x45, + 0x5d, 0x0c, 0xff, 0xae, 0x04, 0x55, 0xa6, 0xf7, + 0x96, 0xc7, 0x34, 0x65, 0xcf, 0x9e, 0x6d, 0x3c, + 0x24, 0x75, 0x86, 0xd7, 0x7d, 0x2c, 0xdf, 0x8e, + 0x1d, 0x4c, 0xbf, 0xee, 0x44, 0x15, 0xe6, 0xb7, + 0xaf, 0xfe, 0x0d, 0x5c, 0xf6, 0xa7, 0x54, 0x05, + 0x64, 0x35, 0xc6, 0x97, 0x3d, 0x6c, 0x9f, 0xce, + 0xd6, 0x87, 0x74, 0x25, 0x8f, 0xde, 0x2d, 0x7c, + 0x16, 0x47, 0xb4, 0xe5, 0x4f, 0x1e, 0xed, 0xbc, + 0xa4, 0xf5, 0x06, 0x57, 0xfd, 0xac, 0x5f, 0x0e, + 0x6f, 0x3e, 0xcd, 0x9c, 0x36, 0x67, 0x94, 0xc5, + 0xdd, 0x8c, 0x7f, 0x2e, 0x84, 0xd5, 0x26, 0x77, + 0xe4, 0xb5, 0x46, 0x17, 0xbd, 0xec, 0x1f, 0x4e, + 0x56, 0x07, 0xf4, 0xa5, 0x0f, 0x5e, 0xad, 0xfc, + 0x9d, 0xcc, 0x3f, 0x6e, 0xc4, 0x95, 0x66, 0x37, + 0x2f, 0x7e, 0x8d, 0xdc, 0x76, 0x27, 0xd4, 0x85, + }, + { + 0x00, 0x52, 0xa4, 0xf6, 0x55, 0x07, 0xf1, 0xa3, + 0xaa, 0xf8, 0x0e, 0x5c, 0xff, 0xad, 0x5b, 0x09, + 0x49, 0x1b, 0xed, 0xbf, 0x1c, 0x4e, 0xb8, 0xea, + 0xe3, 0xb1, 0x47, 0x15, 0xb6, 0xe4, 0x12, 0x40, + 0x92, 0xc0, 0x36, 0x64, 0xc7, 0x95, 0x63, 0x31, + 0x38, 0x6a, 0x9c, 0xce, 0x6d, 0x3f, 0xc9, 0x9b, + 0xdb, 0x89, 0x7f, 0x2d, 0x8e, 0xdc, 0x2a, 0x78, + 0x71, 0x23, 0xd5, 0x87, 0x24, 0x76, 0x80, 0xd2, + 0x39, 0x6b, 0x9d, 0xcf, 0x6c, 0x3e, 0xc8, 0x9a, + 0x93, 0xc1, 0x37, 0x65, 0xc6, 0x94, 0x62, 0x30, + 0x70, 0x22, 0xd4, 0x86, 0x25, 0x77, 0x81, 0xd3, + 0xda, 0x88, 0x7e, 0x2c, 0x8f, 0xdd, 0x2b, 0x79, + 0xab, 0xf9, 0x0f, 0x5d, 0xfe, 0xac, 0x5a, 0x08, + 0x01, 0x53, 0xa5, 0xf7, 0x54, 0x06, 0xf0, 0xa2, + 0xe2, 0xb0, 0x46, 0x14, 0xb7, 0xe5, 0x13, 0x41, + 0x48, 0x1a, 0xec, 0xbe, 0x1d, 0x4f, 0xb9, 0xeb, + 0x72, 0x20, 0xd6, 0x84, 0x27, 0x75, 0x83, 0xd1, + 0xd8, 0x8a, 0x7c, 0x2e, 0x8d, 0xdf, 0x29, 0x7b, + 0x3b, 0x69, 0x9f, 0xcd, 0x6e, 0x3c, 0xca, 0x98, + 0x91, 0xc3, 0x35, 0x67, 0xc4, 0x96, 0x60, 0x32, + 0xe0, 0xb2, 0x44, 0x16, 0xb5, 0xe7, 0x11, 0x43, + 0x4a, 0x18, 0xee, 0xbc, 0x1f, 0x4d, 0xbb, 0xe9, + 0xa9, 0xfb, 0x0d, 0x5f, 0xfc, 0xae, 0x58, 0x0a, + 0x03, 0x51, 0xa7, 0xf5, 0x56, 0x04, 0xf2, 0xa0, + 0x4b, 0x19, 0xef, 0xbd, 0x1e, 0x4c, 0xba, 0xe8, + 0xe1, 0xb3, 0x45, 0x17, 0xb4, 0xe6, 0x10, 0x42, + 0x02, 0x50, 0xa6, 0xf4, 0x57, 0x05, 0xf3, 0xa1, + 0xa8, 0xfa, 0x0c, 0x5e, 0xfd, 0xaf, 0x59, 0x0b, + 0xd9, 0x8b, 0x7d, 0x2f, 0x8c, 0xde, 0x28, 0x7a, + 0x73, 0x21, 0xd7, 0x85, 0x26, 0x74, 0x82, 0xd0, + 0x90, 0xc2, 0x34, 0x66, 0xc5, 0x97, 0x61, 0x33, + 0x3a, 0x68, 0x9e, 0xcc, 0x6f, 0x3d, 0xcb, 0x99, + }, + { + 0x00, 0x53, 0xa6, 0xf5, 0x51, 0x02, 0xf7, 0xa4, + 0xa2, 0xf1, 0x04, 0x57, 0xf3, 0xa0, 0x55, 0x06, + 0x59, 0x0a, 0xff, 0xac, 0x08, 0x5b, 0xae, 0xfd, + 0xfb, 0xa8, 0x5d, 0x0e, 0xaa, 0xf9, 0x0c, 0x5f, + 0xb2, 0xe1, 0x14, 0x47, 0xe3, 0xb0, 0x45, 0x16, + 0x10, 0x43, 0xb6, 0xe5, 0x41, 0x12, 0xe7, 0xb4, + 0xeb, 0xb8, 0x4d, 0x1e, 0xba, 0xe9, 0x1c, 0x4f, + 0x49, 0x1a, 0xef, 0xbc, 0x18, 0x4b, 0xbe, 0xed, + 0x79, 0x2a, 0xdf, 0x8c, 0x28, 0x7b, 0x8e, 0xdd, + 0xdb, 0x88, 0x7d, 0x2e, 0x8a, 0xd9, 0x2c, 0x7f, + 0x20, 0x73, 0x86, 0xd5, 0x71, 0x22, 0xd7, 0x84, + 0x82, 0xd1, 0x24, 0x77, 0xd3, 0x80, 0x75, 0x26, + 0xcb, 0x98, 0x6d, 0x3e, 0x9a, 0xc9, 0x3c, 0x6f, + 0x69, 0x3a, 0xcf, 0x9c, 0x38, 0x6b, 0x9e, 0xcd, + 0x92, 0xc1, 0x34, 0x67, 0xc3, 0x90, 0x65, 0x36, + 0x30, 0x63, 0x96, 0xc5, 0x61, 0x32, 0xc7, 0x94, + 0xf2, 0xa1, 0x54, 0x07, 0xa3, 0xf0, 0x05, 0x56, + 0x50, 0x03, 0xf6, 0xa5, 0x01, 0x52, 0xa7, 0xf4, + 0xab, 0xf8, 0x0d, 0x5e, 0xfa, 0xa9, 0x5c, 0x0f, + 0x09, 0x5a, 0xaf, 0xfc, 0x58, 0x0b, 0xfe, 0xad, + 0x40, 0x13, 0xe6, 0xb5, 0x11, 0x42, 0xb7, 0xe4, + 0xe2, 0xb1, 0x44, 0x17, 0xb3, 0xe0, 0x15, 0x46, + 0x19, 0x4a, 0xbf, 0xec, 0x48, 0x1b, 0xee, 0xbd, + 0xbb, 0xe8, 0x1d, 0x4e, 0xea, 0xb9, 0x4c, 0x1f, + 0x8b, 0xd8, 0x2d, 0x7e, 0xda, 0x89, 0x7c, 0x2f, + 0x29, 0x7a, 0x8f, 0xdc, 0x78, 0x2b, 0xde, 0x8d, + 0xd2, 0x81, 0x74, 0x27, 0x83, 0xd0, 0x25, 0x76, + 0x70, 0x23, 0xd6, 0x85, 0x21, 0x72, 0x87, 0xd4, + 0x39, 0x6a, 0x9f, 0xcc, 0x68, 0x3b, 0xce, 0x9d, + 0x9b, 0xc8, 0x3d, 0x6e, 0xca, 0x99, 0x6c, 0x3f, + 0x60, 0x33, 0xc6, 0x95, 0x31, 0x62, 0x97, 0xc4, + 0xc2, 0x91, 0x64, 0x37, 0x93, 0xc0, 0x35, 0x66, + }, + { + 0x00, 0x54, 0xa8, 0xfc, 0x4d, 0x19, 0xe5, 0xb1, + 0x9a, 0xce, 0x32, 0x66, 0xd7, 0x83, 0x7f, 0x2b, + 0x29, 0x7d, 0x81, 0xd5, 0x64, 0x30, 0xcc, 0x98, + 0xb3, 0xe7, 0x1b, 0x4f, 0xfe, 0xaa, 0x56, 0x02, + 0x52, 0x06, 0xfa, 0xae, 0x1f, 0x4b, 0xb7, 0xe3, + 0xc8, 0x9c, 0x60, 0x34, 0x85, 0xd1, 0x2d, 0x79, + 0x7b, 0x2f, 0xd3, 0x87, 0x36, 0x62, 0x9e, 0xca, + 0xe1, 0xb5, 0x49, 0x1d, 0xac, 0xf8, 0x04, 0x50, + 0xa4, 0xf0, 0x0c, 0x58, 0xe9, 0xbd, 0x41, 0x15, + 0x3e, 0x6a, 0x96, 0xc2, 0x73, 0x27, 0xdb, 0x8f, + 0x8d, 0xd9, 0x25, 0x71, 0xc0, 0x94, 0x68, 0x3c, + 0x17, 0x43, 0xbf, 0xeb, 0x5a, 0x0e, 0xf2, 0xa6, + 0xf6, 0xa2, 0x5e, 0x0a, 0xbb, 0xef, 0x13, 0x47, + 0x6c, 0x38, 0xc4, 0x90, 0x21, 0x75, 0x89, 0xdd, + 0xdf, 0x8b, 0x77, 0x23, 0x92, 0xc6, 0x3a, 0x6e, + 0x45, 0x11, 0xed, 0xb9, 0x08, 0x5c, 0xa0, 0xf4, + 0x55, 0x01, 0xfd, 0xa9, 0x18, 0x4c, 0xb0, 0xe4, + 0xcf, 0x9b, 0x67, 0x33, 0x82, 0xd6, 0x2a, 0x7e, + 0x7c, 0x28, 0xd4, 0x80, 0x31, 0x65, 0x99, 0xcd, + 0xe6, 0xb2, 0x4e, 0x1a, 0xab, 0xff, 0x03, 0x57, + 0x07, 0x53, 0xaf, 0xfb, 0x4a, 0x1e, 0xe2, 0xb6, + 0x9d, 0xc9, 0x35, 0x61, 0xd0, 0x84, 0x78, 0x2c, + 0x2e, 0x7a, 0x86, 0xd2, 0x63, 0x37, 0xcb, 0x9f, + 0xb4, 0xe0, 0x1c, 0x48, 0xf9, 0xad, 0x51, 0x05, + 0xf1, 0xa5, 0x59, 0x0d, 0xbc, 0xe8, 0x14, 0x40, + 0x6b, 0x3f, 0xc3, 0x97, 0x26, 0x72, 0x8e, 0xda, + 0xd8, 0x8c, 0x70, 0x24, 0x95, 0xc1, 0x3d, 0x69, + 0x42, 0x16, 0xea, 0xbe, 0x0f, 0x5b, 0xa7, 0xf3, + 0xa3, 0xf7, 0x0b, 0x5f, 0xee, 0xba, 0x46, 0x12, + 0x39, 0x6d, 0x91, 0xc5, 0x74, 0x20, 0xdc, 0x88, + 0x8a, 0xde, 0x22, 0x76, 0xc7, 0x93, 0x6f, 0x3b, + 0x10, 0x44, 0xb8, 0xec, 0x5d, 0x09, 0xf5, 0xa1, + }, + { + 0x00, 0x55, 0xaa, 0xff, 0x49, 0x1c, 0xe3, 0xb6, + 0x92, 0xc7, 0x38, 0x6d, 0xdb, 0x8e, 0x71, 0x24, + 0x39, 0x6c, 0x93, 0xc6, 0x70, 0x25, 0xda, 0x8f, + 0xab, 0xfe, 0x01, 0x54, 0xe2, 0xb7, 0x48, 0x1d, + 0x72, 0x27, 0xd8, 0x8d, 0x3b, 0x6e, 0x91, 0xc4, + 0xe0, 0xb5, 0x4a, 0x1f, 0xa9, 0xfc, 0x03, 0x56, + 0x4b, 0x1e, 0xe1, 0xb4, 0x02, 0x57, 0xa8, 0xfd, + 0xd9, 0x8c, 0x73, 0x26, 0x90, 0xc5, 0x3a, 0x6f, + 0xe4, 0xb1, 0x4e, 0x1b, 0xad, 0xf8, 0x07, 0x52, + 0x76, 0x23, 0xdc, 0x89, 0x3f, 0x6a, 0x95, 0xc0, + 0xdd, 0x88, 0x77, 0x22, 0x94, 0xc1, 0x3e, 0x6b, + 0x4f, 0x1a, 0xe5, 0xb0, 0x06, 0x53, 0xac, 0xf9, + 0x96, 0xc3, 0x3c, 0x69, 0xdf, 0x8a, 0x75, 0x20, + 0x04, 0x51, 0xae, 0xfb, 0x4d, 0x18, 0xe7, 0xb2, + 0xaf, 0xfa, 0x05, 0x50, 0xe6, 0xb3, 0x4c, 0x19, + 0x3d, 0x68, 0x97, 0xc2, 0x74, 0x21, 0xde, 0x8b, + 0xd5, 0x80, 0x7f, 0x2a, 0x9c, 0xc9, 0x36, 0x63, + 0x47, 0x12, 0xed, 0xb8, 0x0e, 0x5b, 0xa4, 0xf1, + 0xec, 0xb9, 0x46, 0x13, 0xa5, 0xf0, 0x0f, 0x5a, + 0x7e, 0x2b, 0xd4, 0x81, 0x37, 0x62, 0x9d, 0xc8, + 0xa7, 0xf2, 0x0d, 0x58, 0xee, 0xbb, 0x44, 0x11, + 0x35, 0x60, 0x9f, 0xca, 0x7c, 0x29, 0xd6, 0x83, + 0x9e, 0xcb, 0x34, 0x61, 0xd7, 0x82, 0x7d, 0x28, + 0x0c, 0x59, 0xa6, 0xf3, 0x45, 0x10, 0xef, 0xba, + 0x31, 0x64, 0x9b, 0xce, 0x78, 0x2d, 0xd2, 0x87, + 0xa3, 0xf6, 0x09, 0x5c, 0xea, 0xbf, 0x40, 0x15, + 0x08, 0x5d, 0xa2, 0xf7, 0x41, 0x14, 0xeb, 0xbe, + 0x9a, 0xcf, 0x30, 0x65, 0xd3, 0x86, 0x79, 0x2c, + 0x43, 0x16, 0xe9, 0xbc, 0x0a, 0x5f, 0xa0, 0xf5, + 0xd1, 0x84, 0x7b, 0x2e, 0x98, 0xcd, 0x32, 0x67, + 0x7a, 0x2f, 0xd0, 0x85, 0x33, 0x66, 0x99, 0xcc, + 0xe8, 0xbd, 0x42, 0x17, 0xa1, 0xf4, 0x0b, 0x5e, + }, + { + 0x00, 0x56, 0xac, 0xfa, 0x45, 0x13, 0xe9, 0xbf, + 0x8a, 0xdc, 0x26, 0x70, 0xcf, 0x99, 0x63, 0x35, + 0x09, 0x5f, 0xa5, 0xf3, 0x4c, 0x1a, 0xe0, 0xb6, + 0x83, 0xd5, 0x2f, 0x79, 0xc6, 0x90, 0x6a, 0x3c, + 0x12, 0x44, 0xbe, 0xe8, 0x57, 0x01, 0xfb, 0xad, + 0x98, 0xce, 0x34, 0x62, 0xdd, 0x8b, 0x71, 0x27, + 0x1b, 0x4d, 0xb7, 0xe1, 0x5e, 0x08, 0xf2, 0xa4, + 0x91, 0xc7, 0x3d, 0x6b, 0xd4, 0x82, 0x78, 0x2e, + 0x24, 0x72, 0x88, 0xde, 0x61, 0x37, 0xcd, 0x9b, + 0xae, 0xf8, 0x02, 0x54, 0xeb, 0xbd, 0x47, 0x11, + 0x2d, 0x7b, 0x81, 0xd7, 0x68, 0x3e, 0xc4, 0x92, + 0xa7, 0xf1, 0x0b, 0x5d, 0xe2, 0xb4, 0x4e, 0x18, + 0x36, 0x60, 0x9a, 0xcc, 0x73, 0x25, 0xdf, 0x89, + 0xbc, 0xea, 0x10, 0x46, 0xf9, 0xaf, 0x55, 0x03, + 0x3f, 0x69, 0x93, 0xc5, 0x7a, 0x2c, 0xd6, 0x80, + 0xb5, 0xe3, 0x19, 0x4f, 0xf0, 0xa6, 0x5c, 0x0a, + 0x48, 0x1e, 0xe4, 0xb2, 0x0d, 0x5b, 0xa1, 0xf7, + 0xc2, 0x94, 0x6e, 0x38, 0x87, 0xd1, 0x2b, 0x7d, + 0x41, 0x17, 0xed, 0xbb, 0x04, 0x52, 0xa8, 0xfe, + 0xcb, 0x9d, 0x67, 0x31, 0x8e, 0xd8, 0x22, 0x74, + 0x5a, 0x0c, 0xf6, 0xa0, 0x1f, 0x49, 0xb3, 0xe5, + 0xd0, 0x86, 0x7c, 0x2a, 0x95, 0xc3, 0x39, 0x6f, + 0x53, 0x05, 0xff, 0xa9, 0x16, 0x40, 0xba, 0xec, + 0xd9, 0x8f, 0x75, 0x23, 0x9c, 0xca, 0x30, 0x66, + 0x6c, 0x3a, 0xc0, 0x96, 0x29, 0x7f, 0x85, 0xd3, + 0xe6, 0xb0, 0x4a, 0x1c, 0xa3, 0xf5, 0x0f, 0x59, + 0x65, 0x33, 0xc9, 0x9f, 0x20, 0x76, 0x8c, 0xda, + 0xef, 0xb9, 0x43, 0x15, 0xaa, 0xfc, 0x06, 0x50, + 0x7e, 0x28, 0xd2, 0x84, 0x3b, 0x6d, 0x97, 0xc1, + 0xf4, 0xa2, 0x58, 0x0e, 0xb1, 0xe7, 0x1d, 0x4b, + 0x77, 0x21, 0xdb, 0x8d, 0x32, 0x64, 0x9e, 0xc8, + 0xfd, 0xab, 0x51, 0x07, 0xb8, 0xee, 0x14, 0x42, + }, + { + 0x00, 0x57, 0xae, 0xf9, 0x41, 0x16, 0xef, 0xb8, + 0x82, 0xd5, 0x2c, 0x7b, 0xc3, 0x94, 0x6d, 0x3a, + 0x19, 0x4e, 0xb7, 0xe0, 0x58, 0x0f, 0xf6, 0xa1, + 0x9b, 0xcc, 0x35, 0x62, 0xda, 0x8d, 0x74, 0x23, + 0x32, 0x65, 0x9c, 0xcb, 0x73, 0x24, 0xdd, 0x8a, + 0xb0, 0xe7, 0x1e, 0x49, 0xf1, 0xa6, 0x5f, 0x08, + 0x2b, 0x7c, 0x85, 0xd2, 0x6a, 0x3d, 0xc4, 0x93, + 0xa9, 0xfe, 0x07, 0x50, 0xe8, 0xbf, 0x46, 0x11, + 0x64, 0x33, 0xca, 0x9d, 0x25, 0x72, 0x8b, 0xdc, + 0xe6, 0xb1, 0x48, 0x1f, 0xa7, 0xf0, 0x09, 0x5e, + 0x7d, 0x2a, 0xd3, 0x84, 0x3c, 0x6b, 0x92, 0xc5, + 0xff, 0xa8, 0x51, 0x06, 0xbe, 0xe9, 0x10, 0x47, + 0x56, 0x01, 0xf8, 0xaf, 0x17, 0x40, 0xb9, 0xee, + 0xd4, 0x83, 0x7a, 0x2d, 0x95, 0xc2, 0x3b, 0x6c, + 0x4f, 0x18, 0xe1, 0xb6, 0x0e, 0x59, 0xa0, 0xf7, + 0xcd, 0x9a, 0x63, 0x34, 0x8c, 0xdb, 0x22, 0x75, + 0xc8, 0x9f, 0x66, 0x31, 0x89, 0xde, 0x27, 0x70, + 0x4a, 0x1d, 0xe4, 0xb3, 0x0b, 0x5c, 0xa5, 0xf2, + 0xd1, 0x86, 0x7f, 0x28, 0x90, 0xc7, 0x3e, 0x69, + 0x53, 0x04, 0xfd, 0xaa, 0x12, 0x45, 0xbc, 0xeb, + 0xfa, 0xad, 0x54, 0x03, 0xbb, 0xec, 0x15, 0x42, + 0x78, 0x2f, 0xd6, 0x81, 0x39, 0x6e, 0x97, 0xc0, + 0xe3, 0xb4, 0x4d, 0x1a, 0xa2, 0xf5, 0x0c, 0x5b, + 0x61, 0x36, 0xcf, 0x98, 0x20, 0x77, 0x8e, 0xd9, + 0xac, 0xfb, 0x02, 0x55, 0xed, 0xba, 0x43, 0x14, + 0x2e, 0x79, 0x80, 0xd7, 0x6f, 0x38, 0xc1, 0x96, + 0xb5, 0xe2, 0x1b, 0x4c, 0xf4, 0xa3, 0x5a, 0x0d, + 0x37, 0x60, 0x99, 0xce, 0x76, 0x21, 0xd8, 0x8f, + 0x9e, 0xc9, 0x30, 0x67, 0xdf, 0x88, 0x71, 0x26, + 0x1c, 0x4b, 0xb2, 0xe5, 0x5d, 0x0a, 0xf3, 0xa4, + 0x87, 0xd0, 0x29, 0x7e, 0xc6, 0x91, 0x68, 0x3f, + 0x05, 0x52, 0xab, 0xfc, 0x44, 0x13, 0xea, 0xbd, + }, + { + 0x00, 0x58, 0xb0, 0xe8, 0x7d, 0x25, 0xcd, 0x95, + 0xfa, 0xa2, 0x4a, 0x12, 0x87, 0xdf, 0x37, 0x6f, + 0xe9, 0xb1, 0x59, 0x01, 0x94, 0xcc, 0x24, 0x7c, + 0x13, 0x4b, 0xa3, 0xfb, 0x6e, 0x36, 0xde, 0x86, + 0xcf, 0x97, 0x7f, 0x27, 0xb2, 0xea, 0x02, 0x5a, + 0x35, 0x6d, 0x85, 0xdd, 0x48, 0x10, 0xf8, 0xa0, + 0x26, 0x7e, 0x96, 0xce, 0x5b, 0x03, 0xeb, 0xb3, + 0xdc, 0x84, 0x6c, 0x34, 0xa1, 0xf9, 0x11, 0x49, + 0x83, 0xdb, 0x33, 0x6b, 0xfe, 0xa6, 0x4e, 0x16, + 0x79, 0x21, 0xc9, 0x91, 0x04, 0x5c, 0xb4, 0xec, + 0x6a, 0x32, 0xda, 0x82, 0x17, 0x4f, 0xa7, 0xff, + 0x90, 0xc8, 0x20, 0x78, 0xed, 0xb5, 0x5d, 0x05, + 0x4c, 0x14, 0xfc, 0xa4, 0x31, 0x69, 0x81, 0xd9, + 0xb6, 0xee, 0x06, 0x5e, 0xcb, 0x93, 0x7b, 0x23, + 0xa5, 0xfd, 0x15, 0x4d, 0xd8, 0x80, 0x68, 0x30, + 0x5f, 0x07, 0xef, 0xb7, 0x22, 0x7a, 0x92, 0xca, + 0x1b, 0x43, 0xab, 0xf3, 0x66, 0x3e, 0xd6, 0x8e, + 0xe1, 0xb9, 0x51, 0x09, 0x9c, 0xc4, 0x2c, 0x74, + 0xf2, 0xaa, 0x42, 0x1a, 0x8f, 0xd7, 0x3f, 0x67, + 0x08, 0x50, 0xb8, 0xe0, 0x75, 0x2d, 0xc5, 0x9d, + 0xd4, 0x8c, 0x64, 0x3c, 0xa9, 0xf1, 0x19, 0x41, + 0x2e, 0x76, 0x9e, 0xc6, 0x53, 0x0b, 0xe3, 0xbb, + 0x3d, 0x65, 0x8d, 0xd5, 0x40, 0x18, 0xf0, 0xa8, + 0xc7, 0x9f, 0x77, 0x2f, 0xba, 0xe2, 0x0a, 0x52, + 0x98, 0xc0, 0x28, 0x70, 0xe5, 0xbd, 0x55, 0x0d, + 0x62, 0x3a, 0xd2, 0x8a, 0x1f, 0x47, 0xaf, 0xf7, + 0x71, 0x29, 0xc1, 0x99, 0x0c, 0x54, 0xbc, 0xe4, + 0x8b, 0xd3, 0x3b, 0x63, 0xf6, 0xae, 0x46, 0x1e, + 0x57, 0x0f, 0xe7, 0xbf, 0x2a, 0x72, 0x9a, 0xc2, + 0xad, 0xf5, 0x1d, 0x45, 0xd0, 0x88, 0x60, 0x38, + 0xbe, 0xe6, 0x0e, 0x56, 0xc3, 0x9b, 0x73, 0x2b, + 0x44, 0x1c, 0xf4, 0xac, 0x39, 0x61, 0x89, 0xd1, + }, + { + 0x00, 0x59, 0xb2, 0xeb, 0x79, 0x20, 0xcb, 0x92, + 0xf2, 0xab, 0x40, 0x19, 0x8b, 0xd2, 0x39, 0x60, + 0xf9, 0xa0, 0x4b, 0x12, 0x80, 0xd9, 0x32, 0x6b, + 0x0b, 0x52, 0xb9, 0xe0, 0x72, 0x2b, 0xc0, 0x99, + 0xef, 0xb6, 0x5d, 0x04, 0x96, 0xcf, 0x24, 0x7d, + 0x1d, 0x44, 0xaf, 0xf6, 0x64, 0x3d, 0xd6, 0x8f, + 0x16, 0x4f, 0xa4, 0xfd, 0x6f, 0x36, 0xdd, 0x84, + 0xe4, 0xbd, 0x56, 0x0f, 0x9d, 0xc4, 0x2f, 0x76, + 0xc3, 0x9a, 0x71, 0x28, 0xba, 0xe3, 0x08, 0x51, + 0x31, 0x68, 0x83, 0xda, 0x48, 0x11, 0xfa, 0xa3, + 0x3a, 0x63, 0x88, 0xd1, 0x43, 0x1a, 0xf1, 0xa8, + 0xc8, 0x91, 0x7a, 0x23, 0xb1, 0xe8, 0x03, 0x5a, + 0x2c, 0x75, 0x9e, 0xc7, 0x55, 0x0c, 0xe7, 0xbe, + 0xde, 0x87, 0x6c, 0x35, 0xa7, 0xfe, 0x15, 0x4c, + 0xd5, 0x8c, 0x67, 0x3e, 0xac, 0xf5, 0x1e, 0x47, + 0x27, 0x7e, 0x95, 0xcc, 0x5e, 0x07, 0xec, 0xb5, + 0x9b, 0xc2, 0x29, 0x70, 0xe2, 0xbb, 0x50, 0x09, + 0x69, 0x30, 0xdb, 0x82, 0x10, 0x49, 0xa2, 0xfb, + 0x62, 0x3b, 0xd0, 0x89, 0x1b, 0x42, 0xa9, 0xf0, + 0x90, 0xc9, 0x22, 0x7b, 0xe9, 0xb0, 0x5b, 0x02, + 0x74, 0x2d, 0xc6, 0x9f, 0x0d, 0x54, 0xbf, 0xe6, + 0x86, 0xdf, 0x34, 0x6d, 0xff, 0xa6, 0x4d, 0x14, + 0x8d, 0xd4, 0x3f, 0x66, 0xf4, 0xad, 0x46, 0x1f, + 0x7f, 0x26, 0xcd, 0x94, 0x06, 0x5f, 0xb4, 0xed, + 0x58, 0x01, 0xea, 0xb3, 0x21, 0x78, 0x93, 0xca, + 0xaa, 0xf3, 0x18, 0x41, 0xd3, 0x8a, 0x61, 0x38, + 0xa1, 0xf8, 0x13, 0x4a, 0xd8, 0x81, 0x6a, 0x33, + 0x53, 0x0a, 0xe1, 0xb8, 0x2a, 0x73, 0x98, 0xc1, + 0xb7, 0xee, 0x05, 0x5c, 0xce, 0x97, 0x7c, 0x25, + 0x45, 0x1c, 0xf7, 0xae, 0x3c, 0x65, 0x8e, 0xd7, + 0x4e, 0x17, 0xfc, 0xa5, 0x37, 0x6e, 0x85, 0xdc, + 0xbc, 0xe5, 0x0e, 0x57, 0xc5, 0x9c, 0x77, 0x2e, + }, + { + 0x00, 0x5a, 0xb4, 0xee, 0x75, 0x2f, 0xc1, 0x9b, + 0xea, 0xb0, 0x5e, 0x04, 0x9f, 0xc5, 0x2b, 0x71, + 0xc9, 0x93, 0x7d, 0x27, 0xbc, 0xe6, 0x08, 0x52, + 0x23, 0x79, 0x97, 0xcd, 0x56, 0x0c, 0xe2, 0xb8, + 0x8f, 0xd5, 0x3b, 0x61, 0xfa, 0xa0, 0x4e, 0x14, + 0x65, 0x3f, 0xd1, 0x8b, 0x10, 0x4a, 0xa4, 0xfe, + 0x46, 0x1c, 0xf2, 0xa8, 0x33, 0x69, 0x87, 0xdd, + 0xac, 0xf6, 0x18, 0x42, 0xd9, 0x83, 0x6d, 0x37, + 0x03, 0x59, 0xb7, 0xed, 0x76, 0x2c, 0xc2, 0x98, + 0xe9, 0xb3, 0x5d, 0x07, 0x9c, 0xc6, 0x28, 0x72, + 0xca, 0x90, 0x7e, 0x24, 0xbf, 0xe5, 0x0b, 0x51, + 0x20, 0x7a, 0x94, 0xce, 0x55, 0x0f, 0xe1, 0xbb, + 0x8c, 0xd6, 0x38, 0x62, 0xf9, 0xa3, 0x4d, 0x17, + 0x66, 0x3c, 0xd2, 0x88, 0x13, 0x49, 0xa7, 0xfd, + 0x45, 0x1f, 0xf1, 0xab, 0x30, 0x6a, 0x84, 0xde, + 0xaf, 0xf5, 0x1b, 0x41, 0xda, 0x80, 0x6e, 0x34, + 0x06, 0x5c, 0xb2, 0xe8, 0x73, 0x29, 0xc7, 0x9d, + 0xec, 0xb6, 0x58, 0x02, 0x99, 0xc3, 0x2d, 0x77, + 0xcf, 0x95, 0x7b, 0x21, 0xba, 0xe0, 0x0e, 0x54, + 0x25, 0x7f, 0x91, 0xcb, 0x50, 0x0a, 0xe4, 0xbe, + 0x89, 0xd3, 0x3d, 0x67, 0xfc, 0xa6, 0x48, 0x12, + 0x63, 0x39, 0xd7, 0x8d, 0x16, 0x4c, 0xa2, 0xf8, + 0x40, 0x1a, 0xf4, 0xae, 0x35, 0x6f, 0x81, 0xdb, + 0xaa, 0xf0, 0x1e, 0x44, 0xdf, 0x85, 0x6b, 0x31, + 0x05, 0x5f, 0xb1, 0xeb, 0x70, 0x2a, 0xc4, 0x9e, + 0xef, 0xb5, 0x5b, 0x01, 0x9a, 0xc0, 0x2e, 0x74, + 0xcc, 0x96, 0x78, 0x22, 0xb9, 0xe3, 0x0d, 0x57, + 0x26, 0x7c, 0x92, 0xc8, 0x53, 0x09, 0xe7, 0xbd, + 0x8a, 0xd0, 0x3e, 0x64, 0xff, 0xa5, 0x4b, 0x11, + 0x60, 0x3a, 0xd4, 0x8e, 0x15, 0x4f, 0xa1, 0xfb, + 0x43, 0x19, 0xf7, 0xad, 0x36, 0x6c, 0x82, 0xd8, + 0xa9, 0xf3, 0x1d, 0x47, 0xdc, 0x86, 0x68, 0x32, + }, + { + 0x00, 0x5b, 0xb6, 0xed, 0x71, 0x2a, 0xc7, 0x9c, + 0xe2, 0xb9, 0x54, 0x0f, 0x93, 0xc8, 0x25, 0x7e, + 0xd9, 0x82, 0x6f, 0x34, 0xa8, 0xf3, 0x1e, 0x45, + 0x3b, 0x60, 0x8d, 0xd6, 0x4a, 0x11, 0xfc, 0xa7, + 0xaf, 0xf4, 0x19, 0x42, 0xde, 0x85, 0x68, 0x33, + 0x4d, 0x16, 0xfb, 0xa0, 0x3c, 0x67, 0x8a, 0xd1, + 0x76, 0x2d, 0xc0, 0x9b, 0x07, 0x5c, 0xb1, 0xea, + 0x94, 0xcf, 0x22, 0x79, 0xe5, 0xbe, 0x53, 0x08, + 0x43, 0x18, 0xf5, 0xae, 0x32, 0x69, 0x84, 0xdf, + 0xa1, 0xfa, 0x17, 0x4c, 0xd0, 0x8b, 0x66, 0x3d, + 0x9a, 0xc1, 0x2c, 0x77, 0xeb, 0xb0, 0x5d, 0x06, + 0x78, 0x23, 0xce, 0x95, 0x09, 0x52, 0xbf, 0xe4, + 0xec, 0xb7, 0x5a, 0x01, 0x9d, 0xc6, 0x2b, 0x70, + 0x0e, 0x55, 0xb8, 0xe3, 0x7f, 0x24, 0xc9, 0x92, + 0x35, 0x6e, 0x83, 0xd8, 0x44, 0x1f, 0xf2, 0xa9, + 0xd7, 0x8c, 0x61, 0x3a, 0xa6, 0xfd, 0x10, 0x4b, + 0x86, 0xdd, 0x30, 0x6b, 0xf7, 0xac, 0x41, 0x1a, + 0x64, 0x3f, 0xd2, 0x89, 0x15, 0x4e, 0xa3, 0xf8, + 0x5f, 0x04, 0xe9, 0xb2, 0x2e, 0x75, 0x98, 0xc3, + 0xbd, 0xe6, 0x0b, 0x50, 0xcc, 0x97, 0x7a, 0x21, + 0x29, 0x72, 0x9f, 0xc4, 0x58, 0x03, 0xee, 0xb5, + 0xcb, 0x90, 0x7d, 0x26, 0xba, 0xe1, 0x0c, 0x57, + 0xf0, 0xab, 0x46, 0x1d, 0x81, 0xda, 0x37, 0x6c, + 0x12, 0x49, 0xa4, 0xff, 0x63, 0x38, 0xd5, 0x8e, + 0xc5, 0x9e, 0x73, 0x28, 0xb4, 0xef, 0x02, 0x59, + 0x27, 0x7c, 0x91, 0xca, 0x56, 0x0d, 0xe0, 0xbb, + 0x1c, 0x47, 0xaa, 0xf1, 0x6d, 0x36, 0xdb, 0x80, + 0xfe, 0xa5, 0x48, 0x13, 0x8f, 0xd4, 0x39, 0x62, + 0x6a, 0x31, 0xdc, 0x87, 0x1b, 0x40, 0xad, 0xf6, + 0x88, 0xd3, 0x3e, 0x65, 0xf9, 0xa2, 0x4f, 0x14, + 0xb3, 0xe8, 0x05, 0x5e, 0xc2, 0x99, 0x74, 0x2f, + 0x51, 0x0a, 0xe7, 0xbc, 0x20, 0x7b, 0x96, 0xcd, + }, + { + 0x00, 0x5c, 0xb8, 0xe4, 0x6d, 0x31, 0xd5, 0x89, + 0xda, 0x86, 0x62, 0x3e, 0xb7, 0xeb, 0x0f, 0x53, + 0xa9, 0xf5, 0x11, 0x4d, 0xc4, 0x98, 0x7c, 0x20, + 0x73, 0x2f, 0xcb, 0x97, 0x1e, 0x42, 0xa6, 0xfa, + 0x4f, 0x13, 0xf7, 0xab, 0x22, 0x7e, 0x9a, 0xc6, + 0x95, 0xc9, 0x2d, 0x71, 0xf8, 0xa4, 0x40, 0x1c, + 0xe6, 0xba, 0x5e, 0x02, 0x8b, 0xd7, 0x33, 0x6f, + 0x3c, 0x60, 0x84, 0xd8, 0x51, 0x0d, 0xe9, 0xb5, + 0x9e, 0xc2, 0x26, 0x7a, 0xf3, 0xaf, 0x4b, 0x17, + 0x44, 0x18, 0xfc, 0xa0, 0x29, 0x75, 0x91, 0xcd, + 0x37, 0x6b, 0x8f, 0xd3, 0x5a, 0x06, 0xe2, 0xbe, + 0xed, 0xb1, 0x55, 0x09, 0x80, 0xdc, 0x38, 0x64, + 0xd1, 0x8d, 0x69, 0x35, 0xbc, 0xe0, 0x04, 0x58, + 0x0b, 0x57, 0xb3, 0xef, 0x66, 0x3a, 0xde, 0x82, + 0x78, 0x24, 0xc0, 0x9c, 0x15, 0x49, 0xad, 0xf1, + 0xa2, 0xfe, 0x1a, 0x46, 0xcf, 0x93, 0x77, 0x2b, + 0x21, 0x7d, 0x99, 0xc5, 0x4c, 0x10, 0xf4, 0xa8, + 0xfb, 0xa7, 0x43, 0x1f, 0x96, 0xca, 0x2e, 0x72, + 0x88, 0xd4, 0x30, 0x6c, 0xe5, 0xb9, 0x5d, 0x01, + 0x52, 0x0e, 0xea, 0xb6, 0x3f, 0x63, 0x87, 0xdb, + 0x6e, 0x32, 0xd6, 0x8a, 0x03, 0x5f, 0xbb, 0xe7, + 0xb4, 0xe8, 0x0c, 0x50, 0xd9, 0x85, 0x61, 0x3d, + 0xc7, 0x9b, 0x7f, 0x23, 0xaa, 0xf6, 0x12, 0x4e, + 0x1d, 0x41, 0xa5, 0xf9, 0x70, 0x2c, 0xc8, 0x94, + 0xbf, 0xe3, 0x07, 0x5b, 0xd2, 0x8e, 0x6a, 0x36, + 0x65, 0x39, 0xdd, 0x81, 0x08, 0x54, 0xb0, 0xec, + 0x16, 0x4a, 0xae, 0xf2, 0x7b, 0x27, 0xc3, 0x9f, + 0xcc, 0x90, 0x74, 0x28, 0xa1, 0xfd, 0x19, 0x45, + 0xf0, 0xac, 0x48, 0x14, 0x9d, 0xc1, 0x25, 0x79, + 0x2a, 0x76, 0x92, 0xce, 0x47, 0x1b, 0xff, 0xa3, + 0x59, 0x05, 0xe1, 0xbd, 0x34, 0x68, 0x8c, 0xd0, + 0x83, 0xdf, 0x3b, 0x67, 0xee, 0xb2, 0x56, 0x0a, + }, + { + 0x00, 0x5d, 0xba, 0xe7, 0x69, 0x34, 0xd3, 0x8e, + 0xd2, 0x8f, 0x68, 0x35, 0xbb, 0xe6, 0x01, 0x5c, + 0xb9, 0xe4, 0x03, 0x5e, 0xd0, 0x8d, 0x6a, 0x37, + 0x6b, 0x36, 0xd1, 0x8c, 0x02, 0x5f, 0xb8, 0xe5, + 0x6f, 0x32, 0xd5, 0x88, 0x06, 0x5b, 0xbc, 0xe1, + 0xbd, 0xe0, 0x07, 0x5a, 0xd4, 0x89, 0x6e, 0x33, + 0xd6, 0x8b, 0x6c, 0x31, 0xbf, 0xe2, 0x05, 0x58, + 0x04, 0x59, 0xbe, 0xe3, 0x6d, 0x30, 0xd7, 0x8a, + 0xde, 0x83, 0x64, 0x39, 0xb7, 0xea, 0x0d, 0x50, + 0x0c, 0x51, 0xb6, 0xeb, 0x65, 0x38, 0xdf, 0x82, + 0x67, 0x3a, 0xdd, 0x80, 0x0e, 0x53, 0xb4, 0xe9, + 0xb5, 0xe8, 0x0f, 0x52, 0xdc, 0x81, 0x66, 0x3b, + 0xb1, 0xec, 0x0b, 0x56, 0xd8, 0x85, 0x62, 0x3f, + 0x63, 0x3e, 0xd9, 0x84, 0x0a, 0x57, 0xb0, 0xed, + 0x08, 0x55, 0xb2, 0xef, 0x61, 0x3c, 0xdb, 0x86, + 0xda, 0x87, 0x60, 0x3d, 0xb3, 0xee, 0x09, 0x54, + 0xa1, 0xfc, 0x1b, 0x46, 0xc8, 0x95, 0x72, 0x2f, + 0x73, 0x2e, 0xc9, 0x94, 0x1a, 0x47, 0xa0, 0xfd, + 0x18, 0x45, 0xa2, 0xff, 0x71, 0x2c, 0xcb, 0x96, + 0xca, 0x97, 0x70, 0x2d, 0xa3, 0xfe, 0x19, 0x44, + 0xce, 0x93, 0x74, 0x29, 0xa7, 0xfa, 0x1d, 0x40, + 0x1c, 0x41, 0xa6, 0xfb, 0x75, 0x28, 0xcf, 0x92, + 0x77, 0x2a, 0xcd, 0x90, 0x1e, 0x43, 0xa4, 0xf9, + 0xa5, 0xf8, 0x1f, 0x42, 0xcc, 0x91, 0x76, 0x2b, + 0x7f, 0x22, 0xc5, 0x98, 0x16, 0x4b, 0xac, 0xf1, + 0xad, 0xf0, 0x17, 0x4a, 0xc4, 0x99, 0x7e, 0x23, + 0xc6, 0x9b, 0x7c, 0x21, 0xaf, 0xf2, 0x15, 0x48, + 0x14, 0x49, 0xae, 0xf3, 0x7d, 0x20, 0xc7, 0x9a, + 0x10, 0x4d, 0xaa, 0xf7, 0x79, 0x24, 0xc3, 0x9e, + 0xc2, 0x9f, 0x78, 0x25, 0xab, 0xf6, 0x11, 0x4c, + 0xa9, 0xf4, 0x13, 0x4e, 0xc0, 0x9d, 0x7a, 0x27, + 0x7b, 0x26, 0xc1, 0x9c, 0x12, 0x4f, 0xa8, 0xf5, + }, + { + 0x00, 0x5e, 0xbc, 0xe2, 0x65, 0x3b, 0xd9, 0x87, + 0xca, 0x94, 0x76, 0x28, 0xaf, 0xf1, 0x13, 0x4d, + 0x89, 0xd7, 0x35, 0x6b, 0xec, 0xb2, 0x50, 0x0e, + 0x43, 0x1d, 0xff, 0xa1, 0x26, 0x78, 0x9a, 0xc4, + 0x0f, 0x51, 0xb3, 0xed, 0x6a, 0x34, 0xd6, 0x88, + 0xc5, 0x9b, 0x79, 0x27, 0xa0, 0xfe, 0x1c, 0x42, + 0x86, 0xd8, 0x3a, 0x64, 0xe3, 0xbd, 0x5f, 0x01, + 0x4c, 0x12, 0xf0, 0xae, 0x29, 0x77, 0x95, 0xcb, + 0x1e, 0x40, 0xa2, 0xfc, 0x7b, 0x25, 0xc7, 0x99, + 0xd4, 0x8a, 0x68, 0x36, 0xb1, 0xef, 0x0d, 0x53, + 0x97, 0xc9, 0x2b, 0x75, 0xf2, 0xac, 0x4e, 0x10, + 0x5d, 0x03, 0xe1, 0xbf, 0x38, 0x66, 0x84, 0xda, + 0x11, 0x4f, 0xad, 0xf3, 0x74, 0x2a, 0xc8, 0x96, + 0xdb, 0x85, 0x67, 0x39, 0xbe, 0xe0, 0x02, 0x5c, + 0x98, 0xc6, 0x24, 0x7a, 0xfd, 0xa3, 0x41, 0x1f, + 0x52, 0x0c, 0xee, 0xb0, 0x37, 0x69, 0x8b, 0xd5, + 0x3c, 0x62, 0x80, 0xde, 0x59, 0x07, 0xe5, 0xbb, + 0xf6, 0xa8, 0x4a, 0x14, 0x93, 0xcd, 0x2f, 0x71, + 0xb5, 0xeb, 0x09, 0x57, 0xd0, 0x8e, 0x6c, 0x32, + 0x7f, 0x21, 0xc3, 0x9d, 0x1a, 0x44, 0xa6, 0xf8, + 0x33, 0x6d, 0x8f, 0xd1, 0x56, 0x08, 0xea, 0xb4, + 0xf9, 0xa7, 0x45, 0x1b, 0x9c, 0xc2, 0x20, 0x7e, + 0xba, 0xe4, 0x06, 0x58, 0xdf, 0x81, 0x63, 0x3d, + 0x70, 0x2e, 0xcc, 0x92, 0x15, 0x4b, 0xa9, 0xf7, + 0x22, 0x7c, 0x9e, 0xc0, 0x47, 0x19, 0xfb, 0xa5, + 0xe8, 0xb6, 0x54, 0x0a, 0x8d, 0xd3, 0x31, 0x6f, + 0xab, 0xf5, 0x17, 0x49, 0xce, 0x90, 0x72, 0x2c, + 0x61, 0x3f, 0xdd, 0x83, 0x04, 0x5a, 0xb8, 0xe6, + 0x2d, 0x73, 0x91, 0xcf, 0x48, 0x16, 0xf4, 0xaa, + 0xe7, 0xb9, 0x5b, 0x05, 0x82, 0xdc, 0x3e, 0x60, + 0xa4, 0xfa, 0x18, 0x46, 0xc1, 0x9f, 0x7d, 0x23, + 0x6e, 0x30, 0xd2, 0x8c, 0x0b, 0x55, 0xb7, 0xe9, + }, + { + 0x00, 0x5f, 0xbe, 0xe1, 0x61, 0x3e, 0xdf, 0x80, + 0xc2, 0x9d, 0x7c, 0x23, 0xa3, 0xfc, 0x1d, 0x42, + 0x99, 0xc6, 0x27, 0x78, 0xf8, 0xa7, 0x46, 0x19, + 0x5b, 0x04, 0xe5, 0xba, 0x3a, 0x65, 0x84, 0xdb, + 0x2f, 0x70, 0x91, 0xce, 0x4e, 0x11, 0xf0, 0xaf, + 0xed, 0xb2, 0x53, 0x0c, 0x8c, 0xd3, 0x32, 0x6d, + 0xb6, 0xe9, 0x08, 0x57, 0xd7, 0x88, 0x69, 0x36, + 0x74, 0x2b, 0xca, 0x95, 0x15, 0x4a, 0xab, 0xf4, + 0x5e, 0x01, 0xe0, 0xbf, 0x3f, 0x60, 0x81, 0xde, + 0x9c, 0xc3, 0x22, 0x7d, 0xfd, 0xa2, 0x43, 0x1c, + 0xc7, 0x98, 0x79, 0x26, 0xa6, 0xf9, 0x18, 0x47, + 0x05, 0x5a, 0xbb, 0xe4, 0x64, 0x3b, 0xda, 0x85, + 0x71, 0x2e, 0xcf, 0x90, 0x10, 0x4f, 0xae, 0xf1, + 0xb3, 0xec, 0x0d, 0x52, 0xd2, 0x8d, 0x6c, 0x33, + 0xe8, 0xb7, 0x56, 0x09, 0x89, 0xd6, 0x37, 0x68, + 0x2a, 0x75, 0x94, 0xcb, 0x4b, 0x14, 0xf5, 0xaa, + 0xbc, 0xe3, 0x02, 0x5d, 0xdd, 0x82, 0x63, 0x3c, + 0x7e, 0x21, 0xc0, 0x9f, 0x1f, 0x40, 0xa1, 0xfe, + 0x25, 0x7a, 0x9b, 0xc4, 0x44, 0x1b, 0xfa, 0xa5, + 0xe7, 0xb8, 0x59, 0x06, 0x86, 0xd9, 0x38, 0x67, + 0x93, 0xcc, 0x2d, 0x72, 0xf2, 0xad, 0x4c, 0x13, + 0x51, 0x0e, 0xef, 0xb0, 0x30, 0x6f, 0x8e, 0xd1, + 0x0a, 0x55, 0xb4, 0xeb, 0x6b, 0x34, 0xd5, 0x8a, + 0xc8, 0x97, 0x76, 0x29, 0xa9, 0xf6, 0x17, 0x48, + 0xe2, 0xbd, 0x5c, 0x03, 0x83, 0xdc, 0x3d, 0x62, + 0x20, 0x7f, 0x9e, 0xc1, 0x41, 0x1e, 0xff, 0xa0, + 0x7b, 0x24, 0xc5, 0x9a, 0x1a, 0x45, 0xa4, 0xfb, + 0xb9, 0xe6, 0x07, 0x58, 0xd8, 0x87, 0x66, 0x39, + 0xcd, 0x92, 0x73, 0x2c, 0xac, 0xf3, 0x12, 0x4d, + 0x0f, 0x50, 0xb1, 0xee, 0x6e, 0x31, 0xd0, 0x8f, + 0x54, 0x0b, 0xea, 0xb5, 0x35, 0x6a, 0x8b, 0xd4, + 0x96, 0xc9, 0x28, 0x77, 0xf7, 0xa8, 0x49, 0x16, + }, + { + 0x00, 0x60, 0xc0, 0xa0, 0x9d, 0xfd, 0x5d, 0x3d, + 0x27, 0x47, 0xe7, 0x87, 0xba, 0xda, 0x7a, 0x1a, + 0x4e, 0x2e, 0x8e, 0xee, 0xd3, 0xb3, 0x13, 0x73, + 0x69, 0x09, 0xa9, 0xc9, 0xf4, 0x94, 0x34, 0x54, + 0x9c, 0xfc, 0x5c, 0x3c, 0x01, 0x61, 0xc1, 0xa1, + 0xbb, 0xdb, 0x7b, 0x1b, 0x26, 0x46, 0xe6, 0x86, + 0xd2, 0xb2, 0x12, 0x72, 0x4f, 0x2f, 0x8f, 0xef, + 0xf5, 0x95, 0x35, 0x55, 0x68, 0x08, 0xa8, 0xc8, + 0x25, 0x45, 0xe5, 0x85, 0xb8, 0xd8, 0x78, 0x18, + 0x02, 0x62, 0xc2, 0xa2, 0x9f, 0xff, 0x5f, 0x3f, + 0x6b, 0x0b, 0xab, 0xcb, 0xf6, 0x96, 0x36, 0x56, + 0x4c, 0x2c, 0x8c, 0xec, 0xd1, 0xb1, 0x11, 0x71, + 0xb9, 0xd9, 0x79, 0x19, 0x24, 0x44, 0xe4, 0x84, + 0x9e, 0xfe, 0x5e, 0x3e, 0x03, 0x63, 0xc3, 0xa3, + 0xf7, 0x97, 0x37, 0x57, 0x6a, 0x0a, 0xaa, 0xca, + 0xd0, 0xb0, 0x10, 0x70, 0x4d, 0x2d, 0x8d, 0xed, + 0x4a, 0x2a, 0x8a, 0xea, 0xd7, 0xb7, 0x17, 0x77, + 0x6d, 0x0d, 0xad, 0xcd, 0xf0, 0x90, 0x30, 0x50, + 0x04, 0x64, 0xc4, 0xa4, 0x99, 0xf9, 0x59, 0x39, + 0x23, 0x43, 0xe3, 0x83, 0xbe, 0xde, 0x7e, 0x1e, + 0xd6, 0xb6, 0x16, 0x76, 0x4b, 0x2b, 0x8b, 0xeb, + 0xf1, 0x91, 0x31, 0x51, 0x6c, 0x0c, 0xac, 0xcc, + 0x98, 0xf8, 0x58, 0x38, 0x05, 0x65, 0xc5, 0xa5, + 0xbf, 0xdf, 0x7f, 0x1f, 0x22, 0x42, 0xe2, 0x82, + 0x6f, 0x0f, 0xaf, 0xcf, 0xf2, 0x92, 0x32, 0x52, + 0x48, 0x28, 0x88, 0xe8, 0xd5, 0xb5, 0x15, 0x75, + 0x21, 0x41, 0xe1, 0x81, 0xbc, 0xdc, 0x7c, 0x1c, + 0x06, 0x66, 0xc6, 0xa6, 0x9b, 0xfb, 0x5b, 0x3b, + 0xf3, 0x93, 0x33, 0x53, 0x6e, 0x0e, 0xae, 0xce, + 0xd4, 0xb4, 0x14, 0x74, 0x49, 0x29, 0x89, 0xe9, + 0xbd, 0xdd, 0x7d, 0x1d, 0x20, 0x40, 0xe0, 0x80, + 0x9a, 0xfa, 0x5a, 0x3a, 0x07, 0x67, 0xc7, 0xa7, + }, + { + 0x00, 0x61, 0xc2, 0xa3, 0x99, 0xf8, 0x5b, 0x3a, + 0x2f, 0x4e, 0xed, 0x8c, 0xb6, 0xd7, 0x74, 0x15, + 0x5e, 0x3f, 0x9c, 0xfd, 0xc7, 0xa6, 0x05, 0x64, + 0x71, 0x10, 0xb3, 0xd2, 0xe8, 0x89, 0x2a, 0x4b, + 0xbc, 0xdd, 0x7e, 0x1f, 0x25, 0x44, 0xe7, 0x86, + 0x93, 0xf2, 0x51, 0x30, 0x0a, 0x6b, 0xc8, 0xa9, + 0xe2, 0x83, 0x20, 0x41, 0x7b, 0x1a, 0xb9, 0xd8, + 0xcd, 0xac, 0x0f, 0x6e, 0x54, 0x35, 0x96, 0xf7, + 0x65, 0x04, 0xa7, 0xc6, 0xfc, 0x9d, 0x3e, 0x5f, + 0x4a, 0x2b, 0x88, 0xe9, 0xd3, 0xb2, 0x11, 0x70, + 0x3b, 0x5a, 0xf9, 0x98, 0xa2, 0xc3, 0x60, 0x01, + 0x14, 0x75, 0xd6, 0xb7, 0x8d, 0xec, 0x4f, 0x2e, + 0xd9, 0xb8, 0x1b, 0x7a, 0x40, 0x21, 0x82, 0xe3, + 0xf6, 0x97, 0x34, 0x55, 0x6f, 0x0e, 0xad, 0xcc, + 0x87, 0xe6, 0x45, 0x24, 0x1e, 0x7f, 0xdc, 0xbd, + 0xa8, 0xc9, 0x6a, 0x0b, 0x31, 0x50, 0xf3, 0x92, + 0xca, 0xab, 0x08, 0x69, 0x53, 0x32, 0x91, 0xf0, + 0xe5, 0x84, 0x27, 0x46, 0x7c, 0x1d, 0xbe, 0xdf, + 0x94, 0xf5, 0x56, 0x37, 0x0d, 0x6c, 0xcf, 0xae, + 0xbb, 0xda, 0x79, 0x18, 0x22, 0x43, 0xe0, 0x81, + 0x76, 0x17, 0xb4, 0xd5, 0xef, 0x8e, 0x2d, 0x4c, + 0x59, 0x38, 0x9b, 0xfa, 0xc0, 0xa1, 0x02, 0x63, + 0x28, 0x49, 0xea, 0x8b, 0xb1, 0xd0, 0x73, 0x12, + 0x07, 0x66, 0xc5, 0xa4, 0x9e, 0xff, 0x5c, 0x3d, + 0xaf, 0xce, 0x6d, 0x0c, 0x36, 0x57, 0xf4, 0x95, + 0x80, 0xe1, 0x42, 0x23, 0x19, 0x78, 0xdb, 0xba, + 0xf1, 0x90, 0x33, 0x52, 0x68, 0x09, 0xaa, 0xcb, + 0xde, 0xbf, 0x1c, 0x7d, 0x47, 0x26, 0x85, 0xe4, + 0x13, 0x72, 0xd1, 0xb0, 0x8a, 0xeb, 0x48, 0x29, + 0x3c, 0x5d, 0xfe, 0x9f, 0xa5, 0xc4, 0x67, 0x06, + 0x4d, 0x2c, 0x8f, 0xee, 0xd4, 0xb5, 0x16, 0x77, + 0x62, 0x03, 0xa0, 0xc1, 0xfb, 0x9a, 0x39, 0x58, + }, + { + 0x00, 0x62, 0xc4, 0xa6, 0x95, 0xf7, 0x51, 0x33, + 0x37, 0x55, 0xf3, 0x91, 0xa2, 0xc0, 0x66, 0x04, + 0x6e, 0x0c, 0xaa, 0xc8, 0xfb, 0x99, 0x3f, 0x5d, + 0x59, 0x3b, 0x9d, 0xff, 0xcc, 0xae, 0x08, 0x6a, + 0xdc, 0xbe, 0x18, 0x7a, 0x49, 0x2b, 0x8d, 0xef, + 0xeb, 0x89, 0x2f, 0x4d, 0x7e, 0x1c, 0xba, 0xd8, + 0xb2, 0xd0, 0x76, 0x14, 0x27, 0x45, 0xe3, 0x81, + 0x85, 0xe7, 0x41, 0x23, 0x10, 0x72, 0xd4, 0xb6, + 0xa5, 0xc7, 0x61, 0x03, 0x30, 0x52, 0xf4, 0x96, + 0x92, 0xf0, 0x56, 0x34, 0x07, 0x65, 0xc3, 0xa1, + 0xcb, 0xa9, 0x0f, 0x6d, 0x5e, 0x3c, 0x9a, 0xf8, + 0xfc, 0x9e, 0x38, 0x5a, 0x69, 0x0b, 0xad, 0xcf, + 0x79, 0x1b, 0xbd, 0xdf, 0xec, 0x8e, 0x28, 0x4a, + 0x4e, 0x2c, 0x8a, 0xe8, 0xdb, 0xb9, 0x1f, 0x7d, + 0x17, 0x75, 0xd3, 0xb1, 0x82, 0xe0, 0x46, 0x24, + 0x20, 0x42, 0xe4, 0x86, 0xb5, 0xd7, 0x71, 0x13, + 0x57, 0x35, 0x93, 0xf1, 0xc2, 0xa0, 0x06, 0x64, + 0x60, 0x02, 0xa4, 0xc6, 0xf5, 0x97, 0x31, 0x53, + 0x39, 0x5b, 0xfd, 0x9f, 0xac, 0xce, 0x68, 0x0a, + 0x0e, 0x6c, 0xca, 0xa8, 0x9b, 0xf9, 0x5f, 0x3d, + 0x8b, 0xe9, 0x4f, 0x2d, 0x1e, 0x7c, 0xda, 0xb8, + 0xbc, 0xde, 0x78, 0x1a, 0x29, 0x4b, 0xed, 0x8f, + 0xe5, 0x87, 0x21, 0x43, 0x70, 0x12, 0xb4, 0xd6, + 0xd2, 0xb0, 0x16, 0x74, 0x47, 0x25, 0x83, 0xe1, + 0xf2, 0x90, 0x36, 0x54, 0x67, 0x05, 0xa3, 0xc1, + 0xc5, 0xa7, 0x01, 0x63, 0x50, 0x32, 0x94, 0xf6, + 0x9c, 0xfe, 0x58, 0x3a, 0x09, 0x6b, 0xcd, 0xaf, + 0xab, 0xc9, 0x6f, 0x0d, 0x3e, 0x5c, 0xfa, 0x98, + 0x2e, 0x4c, 0xea, 0x88, 0xbb, 0xd9, 0x7f, 0x1d, + 0x19, 0x7b, 0xdd, 0xbf, 0x8c, 0xee, 0x48, 0x2a, + 0x40, 0x22, 0x84, 0xe6, 0xd5, 0xb7, 0x11, 0x73, + 0x77, 0x15, 0xb3, 0xd1, 0xe2, 0x80, 0x26, 0x44, + }, + { + 0x00, 0x63, 0xc6, 0xa5, 0x91, 0xf2, 0x57, 0x34, + 0x3f, 0x5c, 0xf9, 0x9a, 0xae, 0xcd, 0x68, 0x0b, + 0x7e, 0x1d, 0xb8, 0xdb, 0xef, 0x8c, 0x29, 0x4a, + 0x41, 0x22, 0x87, 0xe4, 0xd0, 0xb3, 0x16, 0x75, + 0xfc, 0x9f, 0x3a, 0x59, 0x6d, 0x0e, 0xab, 0xc8, + 0xc3, 0xa0, 0x05, 0x66, 0x52, 0x31, 0x94, 0xf7, + 0x82, 0xe1, 0x44, 0x27, 0x13, 0x70, 0xd5, 0xb6, + 0xbd, 0xde, 0x7b, 0x18, 0x2c, 0x4f, 0xea, 0x89, + 0xe5, 0x86, 0x23, 0x40, 0x74, 0x17, 0xb2, 0xd1, + 0xda, 0xb9, 0x1c, 0x7f, 0x4b, 0x28, 0x8d, 0xee, + 0x9b, 0xf8, 0x5d, 0x3e, 0x0a, 0x69, 0xcc, 0xaf, + 0xa4, 0xc7, 0x62, 0x01, 0x35, 0x56, 0xf3, 0x90, + 0x19, 0x7a, 0xdf, 0xbc, 0x88, 0xeb, 0x4e, 0x2d, + 0x26, 0x45, 0xe0, 0x83, 0xb7, 0xd4, 0x71, 0x12, + 0x67, 0x04, 0xa1, 0xc2, 0xf6, 0x95, 0x30, 0x53, + 0x58, 0x3b, 0x9e, 0xfd, 0xc9, 0xaa, 0x0f, 0x6c, + 0xd7, 0xb4, 0x11, 0x72, 0x46, 0x25, 0x80, 0xe3, + 0xe8, 0x8b, 0x2e, 0x4d, 0x79, 0x1a, 0xbf, 0xdc, + 0xa9, 0xca, 0x6f, 0x0c, 0x38, 0x5b, 0xfe, 0x9d, + 0x96, 0xf5, 0x50, 0x33, 0x07, 0x64, 0xc1, 0xa2, + 0x2b, 0x48, 0xed, 0x8e, 0xba, 0xd9, 0x7c, 0x1f, + 0x14, 0x77, 0xd2, 0xb1, 0x85, 0xe6, 0x43, 0x20, + 0x55, 0x36, 0x93, 0xf0, 0xc4, 0xa7, 0x02, 0x61, + 0x6a, 0x09, 0xac, 0xcf, 0xfb, 0x98, 0x3d, 0x5e, + 0x32, 0x51, 0xf4, 0x97, 0xa3, 0xc0, 0x65, 0x06, + 0x0d, 0x6e, 0xcb, 0xa8, 0x9c, 0xff, 0x5a, 0x39, + 0x4c, 0x2f, 0x8a, 0xe9, 0xdd, 0xbe, 0x1b, 0x78, + 0x73, 0x10, 0xb5, 0xd6, 0xe2, 0x81, 0x24, 0x47, + 0xce, 0xad, 0x08, 0x6b, 0x5f, 0x3c, 0x99, 0xfa, + 0xf1, 0x92, 0x37, 0x54, 0x60, 0x03, 0xa6, 0xc5, + 0xb0, 0xd3, 0x76, 0x15, 0x21, 0x42, 0xe7, 0x84, + 0x8f, 0xec, 0x49, 0x2a, 0x1e, 0x7d, 0xd8, 0xbb, + }, + { + 0x00, 0x64, 0xc8, 0xac, 0x8d, 0xe9, 0x45, 0x21, + 0x07, 0x63, 0xcf, 0xab, 0x8a, 0xee, 0x42, 0x26, + 0x0e, 0x6a, 0xc6, 0xa2, 0x83, 0xe7, 0x4b, 0x2f, + 0x09, 0x6d, 0xc1, 0xa5, 0x84, 0xe0, 0x4c, 0x28, + 0x1c, 0x78, 0xd4, 0xb0, 0x91, 0xf5, 0x59, 0x3d, + 0x1b, 0x7f, 0xd3, 0xb7, 0x96, 0xf2, 0x5e, 0x3a, + 0x12, 0x76, 0xda, 0xbe, 0x9f, 0xfb, 0x57, 0x33, + 0x15, 0x71, 0xdd, 0xb9, 0x98, 0xfc, 0x50, 0x34, + 0x38, 0x5c, 0xf0, 0x94, 0xb5, 0xd1, 0x7d, 0x19, + 0x3f, 0x5b, 0xf7, 0x93, 0xb2, 0xd6, 0x7a, 0x1e, + 0x36, 0x52, 0xfe, 0x9a, 0xbb, 0xdf, 0x73, 0x17, + 0x31, 0x55, 0xf9, 0x9d, 0xbc, 0xd8, 0x74, 0x10, + 0x24, 0x40, 0xec, 0x88, 0xa9, 0xcd, 0x61, 0x05, + 0x23, 0x47, 0xeb, 0x8f, 0xae, 0xca, 0x66, 0x02, + 0x2a, 0x4e, 0xe2, 0x86, 0xa7, 0xc3, 0x6f, 0x0b, + 0x2d, 0x49, 0xe5, 0x81, 0xa0, 0xc4, 0x68, 0x0c, + 0x70, 0x14, 0xb8, 0xdc, 0xfd, 0x99, 0x35, 0x51, + 0x77, 0x13, 0xbf, 0xdb, 0xfa, 0x9e, 0x32, 0x56, + 0x7e, 0x1a, 0xb6, 0xd2, 0xf3, 0x97, 0x3b, 0x5f, + 0x79, 0x1d, 0xb1, 0xd5, 0xf4, 0x90, 0x3c, 0x58, + 0x6c, 0x08, 0xa4, 0xc0, 0xe1, 0x85, 0x29, 0x4d, + 0x6b, 0x0f, 0xa3, 0xc7, 0xe6, 0x82, 0x2e, 0x4a, + 0x62, 0x06, 0xaa, 0xce, 0xef, 0x8b, 0x27, 0x43, + 0x65, 0x01, 0xad, 0xc9, 0xe8, 0x8c, 0x20, 0x44, + 0x48, 0x2c, 0x80, 0xe4, 0xc5, 0xa1, 0x0d, 0x69, + 0x4f, 0x2b, 0x87, 0xe3, 0xc2, 0xa6, 0x0a, 0x6e, + 0x46, 0x22, 0x8e, 0xea, 0xcb, 0xaf, 0x03, 0x67, + 0x41, 0x25, 0x89, 0xed, 0xcc, 0xa8, 0x04, 0x60, + 0x54, 0x30, 0x9c, 0xf8, 0xd9, 0xbd, 0x11, 0x75, + 0x53, 0x37, 0x9b, 0xff, 0xde, 0xba, 0x16, 0x72, + 0x5a, 0x3e, 0x92, 0xf6, 0xd7, 0xb3, 0x1f, 0x7b, + 0x5d, 0x39, 0x95, 0xf1, 0xd0, 0xb4, 0x18, 0x7c, + }, + { + 0x00, 0x65, 0xca, 0xaf, 0x89, 0xec, 0x43, 0x26, + 0x0f, 0x6a, 0xc5, 0xa0, 0x86, 0xe3, 0x4c, 0x29, + 0x1e, 0x7b, 0xd4, 0xb1, 0x97, 0xf2, 0x5d, 0x38, + 0x11, 0x74, 0xdb, 0xbe, 0x98, 0xfd, 0x52, 0x37, + 0x3c, 0x59, 0xf6, 0x93, 0xb5, 0xd0, 0x7f, 0x1a, + 0x33, 0x56, 0xf9, 0x9c, 0xba, 0xdf, 0x70, 0x15, + 0x22, 0x47, 0xe8, 0x8d, 0xab, 0xce, 0x61, 0x04, + 0x2d, 0x48, 0xe7, 0x82, 0xa4, 0xc1, 0x6e, 0x0b, + 0x78, 0x1d, 0xb2, 0xd7, 0xf1, 0x94, 0x3b, 0x5e, + 0x77, 0x12, 0xbd, 0xd8, 0xfe, 0x9b, 0x34, 0x51, + 0x66, 0x03, 0xac, 0xc9, 0xef, 0x8a, 0x25, 0x40, + 0x69, 0x0c, 0xa3, 0xc6, 0xe0, 0x85, 0x2a, 0x4f, + 0x44, 0x21, 0x8e, 0xeb, 0xcd, 0xa8, 0x07, 0x62, + 0x4b, 0x2e, 0x81, 0xe4, 0xc2, 0xa7, 0x08, 0x6d, + 0x5a, 0x3f, 0x90, 0xf5, 0xd3, 0xb6, 0x19, 0x7c, + 0x55, 0x30, 0x9f, 0xfa, 0xdc, 0xb9, 0x16, 0x73, + 0xf0, 0x95, 0x3a, 0x5f, 0x79, 0x1c, 0xb3, 0xd6, + 0xff, 0x9a, 0x35, 0x50, 0x76, 0x13, 0xbc, 0xd9, + 0xee, 0x8b, 0x24, 0x41, 0x67, 0x02, 0xad, 0xc8, + 0xe1, 0x84, 0x2b, 0x4e, 0x68, 0x0d, 0xa2, 0xc7, + 0xcc, 0xa9, 0x06, 0x63, 0x45, 0x20, 0x8f, 0xea, + 0xc3, 0xa6, 0x09, 0x6c, 0x4a, 0x2f, 0x80, 0xe5, + 0xd2, 0xb7, 0x18, 0x7d, 0x5b, 0x3e, 0x91, 0xf4, + 0xdd, 0xb8, 0x17, 0x72, 0x54, 0x31, 0x9e, 0xfb, + 0x88, 0xed, 0x42, 0x27, 0x01, 0x64, 0xcb, 0xae, + 0x87, 0xe2, 0x4d, 0x28, 0x0e, 0x6b, 0xc4, 0xa1, + 0x96, 0xf3, 0x5c, 0x39, 0x1f, 0x7a, 0xd5, 0xb0, + 0x99, 0xfc, 0x53, 0x36, 0x10, 0x75, 0xda, 0xbf, + 0xb4, 0xd1, 0x7e, 0x1b, 0x3d, 0x58, 0xf7, 0x92, + 0xbb, 0xde, 0x71, 0x14, 0x32, 0x57, 0xf8, 0x9d, + 0xaa, 0xcf, 0x60, 0x05, 0x23, 0x46, 0xe9, 0x8c, + 0xa5, 0xc0, 0x6f, 0x0a, 0x2c, 0x49, 0xe6, 0x83, + }, + { + 0x00, 0x66, 0xcc, 0xaa, 0x85, 0xe3, 0x49, 0x2f, + 0x17, 0x71, 0xdb, 0xbd, 0x92, 0xf4, 0x5e, 0x38, + 0x2e, 0x48, 0xe2, 0x84, 0xab, 0xcd, 0x67, 0x01, + 0x39, 0x5f, 0xf5, 0x93, 0xbc, 0xda, 0x70, 0x16, + 0x5c, 0x3a, 0x90, 0xf6, 0xd9, 0xbf, 0x15, 0x73, + 0x4b, 0x2d, 0x87, 0xe1, 0xce, 0xa8, 0x02, 0x64, + 0x72, 0x14, 0xbe, 0xd8, 0xf7, 0x91, 0x3b, 0x5d, + 0x65, 0x03, 0xa9, 0xcf, 0xe0, 0x86, 0x2c, 0x4a, + 0xb8, 0xde, 0x74, 0x12, 0x3d, 0x5b, 0xf1, 0x97, + 0xaf, 0xc9, 0x63, 0x05, 0x2a, 0x4c, 0xe6, 0x80, + 0x96, 0xf0, 0x5a, 0x3c, 0x13, 0x75, 0xdf, 0xb9, + 0x81, 0xe7, 0x4d, 0x2b, 0x04, 0x62, 0xc8, 0xae, + 0xe4, 0x82, 0x28, 0x4e, 0x61, 0x07, 0xad, 0xcb, + 0xf3, 0x95, 0x3f, 0x59, 0x76, 0x10, 0xba, 0xdc, + 0xca, 0xac, 0x06, 0x60, 0x4f, 0x29, 0x83, 0xe5, + 0xdd, 0xbb, 0x11, 0x77, 0x58, 0x3e, 0x94, 0xf2, + 0x6d, 0x0b, 0xa1, 0xc7, 0xe8, 0x8e, 0x24, 0x42, + 0x7a, 0x1c, 0xb6, 0xd0, 0xff, 0x99, 0x33, 0x55, + 0x43, 0x25, 0x8f, 0xe9, 0xc6, 0xa0, 0x0a, 0x6c, + 0x54, 0x32, 0x98, 0xfe, 0xd1, 0xb7, 0x1d, 0x7b, + 0x31, 0x57, 0xfd, 0x9b, 0xb4, 0xd2, 0x78, 0x1e, + 0x26, 0x40, 0xea, 0x8c, 0xa3, 0xc5, 0x6f, 0x09, + 0x1f, 0x79, 0xd3, 0xb5, 0x9a, 0xfc, 0x56, 0x30, + 0x08, 0x6e, 0xc4, 0xa2, 0x8d, 0xeb, 0x41, 0x27, + 0xd5, 0xb3, 0x19, 0x7f, 0x50, 0x36, 0x9c, 0xfa, + 0xc2, 0xa4, 0x0e, 0x68, 0x47, 0x21, 0x8b, 0xed, + 0xfb, 0x9d, 0x37, 0x51, 0x7e, 0x18, 0xb2, 0xd4, + 0xec, 0x8a, 0x20, 0x46, 0x69, 0x0f, 0xa5, 0xc3, + 0x89, 0xef, 0x45, 0x23, 0x0c, 0x6a, 0xc0, 0xa6, + 0x9e, 0xf8, 0x52, 0x34, 0x1b, 0x7d, 0xd7, 0xb1, + 0xa7, 0xc1, 0x6b, 0x0d, 0x22, 0x44, 0xee, 0x88, + 0xb0, 0xd6, 0x7c, 0x1a, 0x35, 0x53, 0xf9, 0x9f, + }, + { + 0x00, 0x67, 0xce, 0xa9, 0x81, 0xe6, 0x4f, 0x28, + 0x1f, 0x78, 0xd1, 0xb6, 0x9e, 0xf9, 0x50, 0x37, + 0x3e, 0x59, 0xf0, 0x97, 0xbf, 0xd8, 0x71, 0x16, + 0x21, 0x46, 0xef, 0x88, 0xa0, 0xc7, 0x6e, 0x09, + 0x7c, 0x1b, 0xb2, 0xd5, 0xfd, 0x9a, 0x33, 0x54, + 0x63, 0x04, 0xad, 0xca, 0xe2, 0x85, 0x2c, 0x4b, + 0x42, 0x25, 0x8c, 0xeb, 0xc3, 0xa4, 0x0d, 0x6a, + 0x5d, 0x3a, 0x93, 0xf4, 0xdc, 0xbb, 0x12, 0x75, + 0xf8, 0x9f, 0x36, 0x51, 0x79, 0x1e, 0xb7, 0xd0, + 0xe7, 0x80, 0x29, 0x4e, 0x66, 0x01, 0xa8, 0xcf, + 0xc6, 0xa1, 0x08, 0x6f, 0x47, 0x20, 0x89, 0xee, + 0xd9, 0xbe, 0x17, 0x70, 0x58, 0x3f, 0x96, 0xf1, + 0x84, 0xe3, 0x4a, 0x2d, 0x05, 0x62, 0xcb, 0xac, + 0x9b, 0xfc, 0x55, 0x32, 0x1a, 0x7d, 0xd4, 0xb3, + 0xba, 0xdd, 0x74, 0x13, 0x3b, 0x5c, 0xf5, 0x92, + 0xa5, 0xc2, 0x6b, 0x0c, 0x24, 0x43, 0xea, 0x8d, + 0xed, 0x8a, 0x23, 0x44, 0x6c, 0x0b, 0xa2, 0xc5, + 0xf2, 0x95, 0x3c, 0x5b, 0x73, 0x14, 0xbd, 0xda, + 0xd3, 0xb4, 0x1d, 0x7a, 0x52, 0x35, 0x9c, 0xfb, + 0xcc, 0xab, 0x02, 0x65, 0x4d, 0x2a, 0x83, 0xe4, + 0x91, 0xf6, 0x5f, 0x38, 0x10, 0x77, 0xde, 0xb9, + 0x8e, 0xe9, 0x40, 0x27, 0x0f, 0x68, 0xc1, 0xa6, + 0xaf, 0xc8, 0x61, 0x06, 0x2e, 0x49, 0xe0, 0x87, + 0xb0, 0xd7, 0x7e, 0x19, 0x31, 0x56, 0xff, 0x98, + 0x15, 0x72, 0xdb, 0xbc, 0x94, 0xf3, 0x5a, 0x3d, + 0x0a, 0x6d, 0xc4, 0xa3, 0x8b, 0xec, 0x45, 0x22, + 0x2b, 0x4c, 0xe5, 0x82, 0xaa, 0xcd, 0x64, 0x03, + 0x34, 0x53, 0xfa, 0x9d, 0xb5, 0xd2, 0x7b, 0x1c, + 0x69, 0x0e, 0xa7, 0xc0, 0xe8, 0x8f, 0x26, 0x41, + 0x76, 0x11, 0xb8, 0xdf, 0xf7, 0x90, 0x39, 0x5e, + 0x57, 0x30, 0x99, 0xfe, 0xd6, 0xb1, 0x18, 0x7f, + 0x48, 0x2f, 0x86, 0xe1, 0xc9, 0xae, 0x07, 0x60, + }, + { + 0x00, 0x68, 0xd0, 0xb8, 0xbd, 0xd5, 0x6d, 0x05, + 0x67, 0x0f, 0xb7, 0xdf, 0xda, 0xb2, 0x0a, 0x62, + 0xce, 0xa6, 0x1e, 0x76, 0x73, 0x1b, 0xa3, 0xcb, + 0xa9, 0xc1, 0x79, 0x11, 0x14, 0x7c, 0xc4, 0xac, + 0x81, 0xe9, 0x51, 0x39, 0x3c, 0x54, 0xec, 0x84, + 0xe6, 0x8e, 0x36, 0x5e, 0x5b, 0x33, 0x8b, 0xe3, + 0x4f, 0x27, 0x9f, 0xf7, 0xf2, 0x9a, 0x22, 0x4a, + 0x28, 0x40, 0xf8, 0x90, 0x95, 0xfd, 0x45, 0x2d, + 0x1f, 0x77, 0xcf, 0xa7, 0xa2, 0xca, 0x72, 0x1a, + 0x78, 0x10, 0xa8, 0xc0, 0xc5, 0xad, 0x15, 0x7d, + 0xd1, 0xb9, 0x01, 0x69, 0x6c, 0x04, 0xbc, 0xd4, + 0xb6, 0xde, 0x66, 0x0e, 0x0b, 0x63, 0xdb, 0xb3, + 0x9e, 0xf6, 0x4e, 0x26, 0x23, 0x4b, 0xf3, 0x9b, + 0xf9, 0x91, 0x29, 0x41, 0x44, 0x2c, 0x94, 0xfc, + 0x50, 0x38, 0x80, 0xe8, 0xed, 0x85, 0x3d, 0x55, + 0x37, 0x5f, 0xe7, 0x8f, 0x8a, 0xe2, 0x5a, 0x32, + 0x3e, 0x56, 0xee, 0x86, 0x83, 0xeb, 0x53, 0x3b, + 0x59, 0x31, 0x89, 0xe1, 0xe4, 0x8c, 0x34, 0x5c, + 0xf0, 0x98, 0x20, 0x48, 0x4d, 0x25, 0x9d, 0xf5, + 0x97, 0xff, 0x47, 0x2f, 0x2a, 0x42, 0xfa, 0x92, + 0xbf, 0xd7, 0x6f, 0x07, 0x02, 0x6a, 0xd2, 0xba, + 0xd8, 0xb0, 0x08, 0x60, 0x65, 0x0d, 0xb5, 0xdd, + 0x71, 0x19, 0xa1, 0xc9, 0xcc, 0xa4, 0x1c, 0x74, + 0x16, 0x7e, 0xc6, 0xae, 0xab, 0xc3, 0x7b, 0x13, + 0x21, 0x49, 0xf1, 0x99, 0x9c, 0xf4, 0x4c, 0x24, + 0x46, 0x2e, 0x96, 0xfe, 0xfb, 0x93, 0x2b, 0x43, + 0xef, 0x87, 0x3f, 0x57, 0x52, 0x3a, 0x82, 0xea, + 0x88, 0xe0, 0x58, 0x30, 0x35, 0x5d, 0xe5, 0x8d, + 0xa0, 0xc8, 0x70, 0x18, 0x1d, 0x75, 0xcd, 0xa5, + 0xc7, 0xaf, 0x17, 0x7f, 0x7a, 0x12, 0xaa, 0xc2, + 0x6e, 0x06, 0xbe, 0xd6, 0xd3, 0xbb, 0x03, 0x6b, + 0x09, 0x61, 0xd9, 0xb1, 0xb4, 0xdc, 0x64, 0x0c, + }, + { + 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, + 0x6f, 0x06, 0xbd, 0xd4, 0xd6, 0xbf, 0x04, 0x6d, + 0xde, 0xb7, 0x0c, 0x65, 0x67, 0x0e, 0xb5, 0xdc, + 0xb1, 0xd8, 0x63, 0x0a, 0x08, 0x61, 0xda, 0xb3, + 0xa1, 0xc8, 0x73, 0x1a, 0x18, 0x71, 0xca, 0xa3, + 0xce, 0xa7, 0x1c, 0x75, 0x77, 0x1e, 0xa5, 0xcc, + 0x7f, 0x16, 0xad, 0xc4, 0xc6, 0xaf, 0x14, 0x7d, + 0x10, 0x79, 0xc2, 0xab, 0xa9, 0xc0, 0x7b, 0x12, + 0x5f, 0x36, 0x8d, 0xe4, 0xe6, 0x8f, 0x34, 0x5d, + 0x30, 0x59, 0xe2, 0x8b, 0x89, 0xe0, 0x5b, 0x32, + 0x81, 0xe8, 0x53, 0x3a, 0x38, 0x51, 0xea, 0x83, + 0xee, 0x87, 0x3c, 0x55, 0x57, 0x3e, 0x85, 0xec, + 0xfe, 0x97, 0x2c, 0x45, 0x47, 0x2e, 0x95, 0xfc, + 0x91, 0xf8, 0x43, 0x2a, 0x28, 0x41, 0xfa, 0x93, + 0x20, 0x49, 0xf2, 0x9b, 0x99, 0xf0, 0x4b, 0x22, + 0x4f, 0x26, 0x9d, 0xf4, 0xf6, 0x9f, 0x24, 0x4d, + 0xbe, 0xd7, 0x6c, 0x05, 0x07, 0x6e, 0xd5, 0xbc, + 0xd1, 0xb8, 0x03, 0x6a, 0x68, 0x01, 0xba, 0xd3, + 0x60, 0x09, 0xb2, 0xdb, 0xd9, 0xb0, 0x0b, 0x62, + 0x0f, 0x66, 0xdd, 0xb4, 0xb6, 0xdf, 0x64, 0x0d, + 0x1f, 0x76, 0xcd, 0xa4, 0xa6, 0xcf, 0x74, 0x1d, + 0x70, 0x19, 0xa2, 0xcb, 0xc9, 0xa0, 0x1b, 0x72, + 0xc1, 0xa8, 0x13, 0x7a, 0x78, 0x11, 0xaa, 0xc3, + 0xae, 0xc7, 0x7c, 0x15, 0x17, 0x7e, 0xc5, 0xac, + 0xe1, 0x88, 0x33, 0x5a, 0x58, 0x31, 0x8a, 0xe3, + 0x8e, 0xe7, 0x5c, 0x35, 0x37, 0x5e, 0xe5, 0x8c, + 0x3f, 0x56, 0xed, 0x84, 0x86, 0xef, 0x54, 0x3d, + 0x50, 0x39, 0x82, 0xeb, 0xe9, 0x80, 0x3b, 0x52, + 0x40, 0x29, 0x92, 0xfb, 0xf9, 0x90, 0x2b, 0x42, + 0x2f, 0x46, 0xfd, 0x94, 0x96, 0xff, 0x44, 0x2d, + 0x9e, 0xf7, 0x4c, 0x25, 0x27, 0x4e, 0xf5, 0x9c, + 0xf1, 0x98, 0x23, 0x4a, 0x48, 0x21, 0x9a, 0xf3, + }, + { + 0x00, 0x6a, 0xd4, 0xbe, 0xb5, 0xdf, 0x61, 0x0b, + 0x77, 0x1d, 0xa3, 0xc9, 0xc2, 0xa8, 0x16, 0x7c, + 0xee, 0x84, 0x3a, 0x50, 0x5b, 0x31, 0x8f, 0xe5, + 0x99, 0xf3, 0x4d, 0x27, 0x2c, 0x46, 0xf8, 0x92, + 0xc1, 0xab, 0x15, 0x7f, 0x74, 0x1e, 0xa0, 0xca, + 0xb6, 0xdc, 0x62, 0x08, 0x03, 0x69, 0xd7, 0xbd, + 0x2f, 0x45, 0xfb, 0x91, 0x9a, 0xf0, 0x4e, 0x24, + 0x58, 0x32, 0x8c, 0xe6, 0xed, 0x87, 0x39, 0x53, + 0x9f, 0xf5, 0x4b, 0x21, 0x2a, 0x40, 0xfe, 0x94, + 0xe8, 0x82, 0x3c, 0x56, 0x5d, 0x37, 0x89, 0xe3, + 0x71, 0x1b, 0xa5, 0xcf, 0xc4, 0xae, 0x10, 0x7a, + 0x06, 0x6c, 0xd2, 0xb8, 0xb3, 0xd9, 0x67, 0x0d, + 0x5e, 0x34, 0x8a, 0xe0, 0xeb, 0x81, 0x3f, 0x55, + 0x29, 0x43, 0xfd, 0x97, 0x9c, 0xf6, 0x48, 0x22, + 0xb0, 0xda, 0x64, 0x0e, 0x05, 0x6f, 0xd1, 0xbb, + 0xc7, 0xad, 0x13, 0x79, 0x72, 0x18, 0xa6, 0xcc, + 0x23, 0x49, 0xf7, 0x9d, 0x96, 0xfc, 0x42, 0x28, + 0x54, 0x3e, 0x80, 0xea, 0xe1, 0x8b, 0x35, 0x5f, + 0xcd, 0xa7, 0x19, 0x73, 0x78, 0x12, 0xac, 0xc6, + 0xba, 0xd0, 0x6e, 0x04, 0x0f, 0x65, 0xdb, 0xb1, + 0xe2, 0x88, 0x36, 0x5c, 0x57, 0x3d, 0x83, 0xe9, + 0x95, 0xff, 0x41, 0x2b, 0x20, 0x4a, 0xf4, 0x9e, + 0x0c, 0x66, 0xd8, 0xb2, 0xb9, 0xd3, 0x6d, 0x07, + 0x7b, 0x11, 0xaf, 0xc5, 0xce, 0xa4, 0x1a, 0x70, + 0xbc, 0xd6, 0x68, 0x02, 0x09, 0x63, 0xdd, 0xb7, + 0xcb, 0xa1, 0x1f, 0x75, 0x7e, 0x14, 0xaa, 0xc0, + 0x52, 0x38, 0x86, 0xec, 0xe7, 0x8d, 0x33, 0x59, + 0x25, 0x4f, 0xf1, 0x9b, 0x90, 0xfa, 0x44, 0x2e, + 0x7d, 0x17, 0xa9, 0xc3, 0xc8, 0xa2, 0x1c, 0x76, + 0x0a, 0x60, 0xde, 0xb4, 0xbf, 0xd5, 0x6b, 0x01, + 0x93, 0xf9, 0x47, 0x2d, 0x26, 0x4c, 0xf2, 0x98, + 0xe4, 0x8e, 0x30, 0x5a, 0x51, 0x3b, 0x85, 0xef, + }, + { + 0x00, 0x6b, 0xd6, 0xbd, 0xb1, 0xda, 0x67, 0x0c, + 0x7f, 0x14, 0xa9, 0xc2, 0xce, 0xa5, 0x18, 0x73, + 0xfe, 0x95, 0x28, 0x43, 0x4f, 0x24, 0x99, 0xf2, + 0x81, 0xea, 0x57, 0x3c, 0x30, 0x5b, 0xe6, 0x8d, + 0xe1, 0x8a, 0x37, 0x5c, 0x50, 0x3b, 0x86, 0xed, + 0x9e, 0xf5, 0x48, 0x23, 0x2f, 0x44, 0xf9, 0x92, + 0x1f, 0x74, 0xc9, 0xa2, 0xae, 0xc5, 0x78, 0x13, + 0x60, 0x0b, 0xb6, 0xdd, 0xd1, 0xba, 0x07, 0x6c, + 0xdf, 0xb4, 0x09, 0x62, 0x6e, 0x05, 0xb8, 0xd3, + 0xa0, 0xcb, 0x76, 0x1d, 0x11, 0x7a, 0xc7, 0xac, + 0x21, 0x4a, 0xf7, 0x9c, 0x90, 0xfb, 0x46, 0x2d, + 0x5e, 0x35, 0x88, 0xe3, 0xef, 0x84, 0x39, 0x52, + 0x3e, 0x55, 0xe8, 0x83, 0x8f, 0xe4, 0x59, 0x32, + 0x41, 0x2a, 0x97, 0xfc, 0xf0, 0x9b, 0x26, 0x4d, + 0xc0, 0xab, 0x16, 0x7d, 0x71, 0x1a, 0xa7, 0xcc, + 0xbf, 0xd4, 0x69, 0x02, 0x0e, 0x65, 0xd8, 0xb3, + 0xa3, 0xc8, 0x75, 0x1e, 0x12, 0x79, 0xc4, 0xaf, + 0xdc, 0xb7, 0x0a, 0x61, 0x6d, 0x06, 0xbb, 0xd0, + 0x5d, 0x36, 0x8b, 0xe0, 0xec, 0x87, 0x3a, 0x51, + 0x22, 0x49, 0xf4, 0x9f, 0x93, 0xf8, 0x45, 0x2e, + 0x42, 0x29, 0x94, 0xff, 0xf3, 0x98, 0x25, 0x4e, + 0x3d, 0x56, 0xeb, 0x80, 0x8c, 0xe7, 0x5a, 0x31, + 0xbc, 0xd7, 0x6a, 0x01, 0x0d, 0x66, 0xdb, 0xb0, + 0xc3, 0xa8, 0x15, 0x7e, 0x72, 0x19, 0xa4, 0xcf, + 0x7c, 0x17, 0xaa, 0xc1, 0xcd, 0xa6, 0x1b, 0x70, + 0x03, 0x68, 0xd5, 0xbe, 0xb2, 0xd9, 0x64, 0x0f, + 0x82, 0xe9, 0x54, 0x3f, 0x33, 0x58, 0xe5, 0x8e, + 0xfd, 0x96, 0x2b, 0x40, 0x4c, 0x27, 0x9a, 0xf1, + 0x9d, 0xf6, 0x4b, 0x20, 0x2c, 0x47, 0xfa, 0x91, + 0xe2, 0x89, 0x34, 0x5f, 0x53, 0x38, 0x85, 0xee, + 0x63, 0x08, 0xb5, 0xde, 0xd2, 0xb9, 0x04, 0x6f, + 0x1c, 0x77, 0xca, 0xa1, 0xad, 0xc6, 0x7b, 0x10, + }, + { + 0x00, 0x6c, 0xd8, 0xb4, 0xad, 0xc1, 0x75, 0x19, + 0x47, 0x2b, 0x9f, 0xf3, 0xea, 0x86, 0x32, 0x5e, + 0x8e, 0xe2, 0x56, 0x3a, 0x23, 0x4f, 0xfb, 0x97, + 0xc9, 0xa5, 0x11, 0x7d, 0x64, 0x08, 0xbc, 0xd0, + 0x01, 0x6d, 0xd9, 0xb5, 0xac, 0xc0, 0x74, 0x18, + 0x46, 0x2a, 0x9e, 0xf2, 0xeb, 0x87, 0x33, 0x5f, + 0x8f, 0xe3, 0x57, 0x3b, 0x22, 0x4e, 0xfa, 0x96, + 0xc8, 0xa4, 0x10, 0x7c, 0x65, 0x09, 0xbd, 0xd1, + 0x02, 0x6e, 0xda, 0xb6, 0xaf, 0xc3, 0x77, 0x1b, + 0x45, 0x29, 0x9d, 0xf1, 0xe8, 0x84, 0x30, 0x5c, + 0x8c, 0xe0, 0x54, 0x38, 0x21, 0x4d, 0xf9, 0x95, + 0xcb, 0xa7, 0x13, 0x7f, 0x66, 0x0a, 0xbe, 0xd2, + 0x03, 0x6f, 0xdb, 0xb7, 0xae, 0xc2, 0x76, 0x1a, + 0x44, 0x28, 0x9c, 0xf0, 0xe9, 0x85, 0x31, 0x5d, + 0x8d, 0xe1, 0x55, 0x39, 0x20, 0x4c, 0xf8, 0x94, + 0xca, 0xa6, 0x12, 0x7e, 0x67, 0x0b, 0xbf, 0xd3, + 0x04, 0x68, 0xdc, 0xb0, 0xa9, 0xc5, 0x71, 0x1d, + 0x43, 0x2f, 0x9b, 0xf7, 0xee, 0x82, 0x36, 0x5a, + 0x8a, 0xe6, 0x52, 0x3e, 0x27, 0x4b, 0xff, 0x93, + 0xcd, 0xa1, 0x15, 0x79, 0x60, 0x0c, 0xb8, 0xd4, + 0x05, 0x69, 0xdd, 0xb1, 0xa8, 0xc4, 0x70, 0x1c, + 0x42, 0x2e, 0x9a, 0xf6, 0xef, 0x83, 0x37, 0x5b, + 0x8b, 0xe7, 0x53, 0x3f, 0x26, 0x4a, 0xfe, 0x92, + 0xcc, 0xa0, 0x14, 0x78, 0x61, 0x0d, 0xb9, 0xd5, + 0x06, 0x6a, 0xde, 0xb2, 0xab, 0xc7, 0x73, 0x1f, + 0x41, 0x2d, 0x99, 0xf5, 0xec, 0x80, 0x34, 0x58, + 0x88, 0xe4, 0x50, 0x3c, 0x25, 0x49, 0xfd, 0x91, + 0xcf, 0xa3, 0x17, 0x7b, 0x62, 0x0e, 0xba, 0xd6, + 0x07, 0x6b, 0xdf, 0xb3, 0xaa, 0xc6, 0x72, 0x1e, + 0x40, 0x2c, 0x98, 0xf4, 0xed, 0x81, 0x35, 0x59, + 0x89, 0xe5, 0x51, 0x3d, 0x24, 0x48, 0xfc, 0x90, + 0xce, 0xa2, 0x16, 0x7a, 0x63, 0x0f, 0xbb, 0xd7, + }, + { + 0x00, 0x6d, 0xda, 0xb7, 0xa9, 0xc4, 0x73, 0x1e, + 0x4f, 0x22, 0x95, 0xf8, 0xe6, 0x8b, 0x3c, 0x51, + 0x9e, 0xf3, 0x44, 0x29, 0x37, 0x5a, 0xed, 0x80, + 0xd1, 0xbc, 0x0b, 0x66, 0x78, 0x15, 0xa2, 0xcf, + 0x21, 0x4c, 0xfb, 0x96, 0x88, 0xe5, 0x52, 0x3f, + 0x6e, 0x03, 0xb4, 0xd9, 0xc7, 0xaa, 0x1d, 0x70, + 0xbf, 0xd2, 0x65, 0x08, 0x16, 0x7b, 0xcc, 0xa1, + 0xf0, 0x9d, 0x2a, 0x47, 0x59, 0x34, 0x83, 0xee, + 0x42, 0x2f, 0x98, 0xf5, 0xeb, 0x86, 0x31, 0x5c, + 0x0d, 0x60, 0xd7, 0xba, 0xa4, 0xc9, 0x7e, 0x13, + 0xdc, 0xb1, 0x06, 0x6b, 0x75, 0x18, 0xaf, 0xc2, + 0x93, 0xfe, 0x49, 0x24, 0x3a, 0x57, 0xe0, 0x8d, + 0x63, 0x0e, 0xb9, 0xd4, 0xca, 0xa7, 0x10, 0x7d, + 0x2c, 0x41, 0xf6, 0x9b, 0x85, 0xe8, 0x5f, 0x32, + 0xfd, 0x90, 0x27, 0x4a, 0x54, 0x39, 0x8e, 0xe3, + 0xb2, 0xdf, 0x68, 0x05, 0x1b, 0x76, 0xc1, 0xac, + 0x84, 0xe9, 0x5e, 0x33, 0x2d, 0x40, 0xf7, 0x9a, + 0xcb, 0xa6, 0x11, 0x7c, 0x62, 0x0f, 0xb8, 0xd5, + 0x1a, 0x77, 0xc0, 0xad, 0xb3, 0xde, 0x69, 0x04, + 0x55, 0x38, 0x8f, 0xe2, 0xfc, 0x91, 0x26, 0x4b, + 0xa5, 0xc8, 0x7f, 0x12, 0x0c, 0x61, 0xd6, 0xbb, + 0xea, 0x87, 0x30, 0x5d, 0x43, 0x2e, 0x99, 0xf4, + 0x3b, 0x56, 0xe1, 0x8c, 0x92, 0xff, 0x48, 0x25, + 0x74, 0x19, 0xae, 0xc3, 0xdd, 0xb0, 0x07, 0x6a, + 0xc6, 0xab, 0x1c, 0x71, 0x6f, 0x02, 0xb5, 0xd8, + 0x89, 0xe4, 0x53, 0x3e, 0x20, 0x4d, 0xfa, 0x97, + 0x58, 0x35, 0x82, 0xef, 0xf1, 0x9c, 0x2b, 0x46, + 0x17, 0x7a, 0xcd, 0xa0, 0xbe, 0xd3, 0x64, 0x09, + 0xe7, 0x8a, 0x3d, 0x50, 0x4e, 0x23, 0x94, 0xf9, + 0xa8, 0xc5, 0x72, 0x1f, 0x01, 0x6c, 0xdb, 0xb6, + 0x79, 0x14, 0xa3, 0xce, 0xd0, 0xbd, 0x0a, 0x67, + 0x36, 0x5b, 0xec, 0x81, 0x9f, 0xf2, 0x45, 0x28, + }, + { + 0x00, 0x6e, 0xdc, 0xb2, 0xa5, 0xcb, 0x79, 0x17, + 0x57, 0x39, 0x8b, 0xe5, 0xf2, 0x9c, 0x2e, 0x40, + 0xae, 0xc0, 0x72, 0x1c, 0x0b, 0x65, 0xd7, 0xb9, + 0xf9, 0x97, 0x25, 0x4b, 0x5c, 0x32, 0x80, 0xee, + 0x41, 0x2f, 0x9d, 0xf3, 0xe4, 0x8a, 0x38, 0x56, + 0x16, 0x78, 0xca, 0xa4, 0xb3, 0xdd, 0x6f, 0x01, + 0xef, 0x81, 0x33, 0x5d, 0x4a, 0x24, 0x96, 0xf8, + 0xb8, 0xd6, 0x64, 0x0a, 0x1d, 0x73, 0xc1, 0xaf, + 0x82, 0xec, 0x5e, 0x30, 0x27, 0x49, 0xfb, 0x95, + 0xd5, 0xbb, 0x09, 0x67, 0x70, 0x1e, 0xac, 0xc2, + 0x2c, 0x42, 0xf0, 0x9e, 0x89, 0xe7, 0x55, 0x3b, + 0x7b, 0x15, 0xa7, 0xc9, 0xde, 0xb0, 0x02, 0x6c, + 0xc3, 0xad, 0x1f, 0x71, 0x66, 0x08, 0xba, 0xd4, + 0x94, 0xfa, 0x48, 0x26, 0x31, 0x5f, 0xed, 0x83, + 0x6d, 0x03, 0xb1, 0xdf, 0xc8, 0xa6, 0x14, 0x7a, + 0x3a, 0x54, 0xe6, 0x88, 0x9f, 0xf1, 0x43, 0x2d, + 0x19, 0x77, 0xc5, 0xab, 0xbc, 0xd2, 0x60, 0x0e, + 0x4e, 0x20, 0x92, 0xfc, 0xeb, 0x85, 0x37, 0x59, + 0xb7, 0xd9, 0x6b, 0x05, 0x12, 0x7c, 0xce, 0xa0, + 0xe0, 0x8e, 0x3c, 0x52, 0x45, 0x2b, 0x99, 0xf7, + 0x58, 0x36, 0x84, 0xea, 0xfd, 0x93, 0x21, 0x4f, + 0x0f, 0x61, 0xd3, 0xbd, 0xaa, 0xc4, 0x76, 0x18, + 0xf6, 0x98, 0x2a, 0x44, 0x53, 0x3d, 0x8f, 0xe1, + 0xa1, 0xcf, 0x7d, 0x13, 0x04, 0x6a, 0xd8, 0xb6, + 0x9b, 0xf5, 0x47, 0x29, 0x3e, 0x50, 0xe2, 0x8c, + 0xcc, 0xa2, 0x10, 0x7e, 0x69, 0x07, 0xb5, 0xdb, + 0x35, 0x5b, 0xe9, 0x87, 0x90, 0xfe, 0x4c, 0x22, + 0x62, 0x0c, 0xbe, 0xd0, 0xc7, 0xa9, 0x1b, 0x75, + 0xda, 0xb4, 0x06, 0x68, 0x7f, 0x11, 0xa3, 0xcd, + 0x8d, 0xe3, 0x51, 0x3f, 0x28, 0x46, 0xf4, 0x9a, + 0x74, 0x1a, 0xa8, 0xc6, 0xd1, 0xbf, 0x0d, 0x63, + 0x23, 0x4d, 0xff, 0x91, 0x86, 0xe8, 0x5a, 0x34, + }, + { + 0x00, 0x6f, 0xde, 0xb1, 0xa1, 0xce, 0x7f, 0x10, + 0x5f, 0x30, 0x81, 0xee, 0xfe, 0x91, 0x20, 0x4f, + 0xbe, 0xd1, 0x60, 0x0f, 0x1f, 0x70, 0xc1, 0xae, + 0xe1, 0x8e, 0x3f, 0x50, 0x40, 0x2f, 0x9e, 0xf1, + 0x61, 0x0e, 0xbf, 0xd0, 0xc0, 0xaf, 0x1e, 0x71, + 0x3e, 0x51, 0xe0, 0x8f, 0x9f, 0xf0, 0x41, 0x2e, + 0xdf, 0xb0, 0x01, 0x6e, 0x7e, 0x11, 0xa0, 0xcf, + 0x80, 0xef, 0x5e, 0x31, 0x21, 0x4e, 0xff, 0x90, + 0xc2, 0xad, 0x1c, 0x73, 0x63, 0x0c, 0xbd, 0xd2, + 0x9d, 0xf2, 0x43, 0x2c, 0x3c, 0x53, 0xe2, 0x8d, + 0x7c, 0x13, 0xa2, 0xcd, 0xdd, 0xb2, 0x03, 0x6c, + 0x23, 0x4c, 0xfd, 0x92, 0x82, 0xed, 0x5c, 0x33, + 0xa3, 0xcc, 0x7d, 0x12, 0x02, 0x6d, 0xdc, 0xb3, + 0xfc, 0x93, 0x22, 0x4d, 0x5d, 0x32, 0x83, 0xec, + 0x1d, 0x72, 0xc3, 0xac, 0xbc, 0xd3, 0x62, 0x0d, + 0x42, 0x2d, 0x9c, 0xf3, 0xe3, 0x8c, 0x3d, 0x52, + 0x99, 0xf6, 0x47, 0x28, 0x38, 0x57, 0xe6, 0x89, + 0xc6, 0xa9, 0x18, 0x77, 0x67, 0x08, 0xb9, 0xd6, + 0x27, 0x48, 0xf9, 0x96, 0x86, 0xe9, 0x58, 0x37, + 0x78, 0x17, 0xa6, 0xc9, 0xd9, 0xb6, 0x07, 0x68, + 0xf8, 0x97, 0x26, 0x49, 0x59, 0x36, 0x87, 0xe8, + 0xa7, 0xc8, 0x79, 0x16, 0x06, 0x69, 0xd8, 0xb7, + 0x46, 0x29, 0x98, 0xf7, 0xe7, 0x88, 0x39, 0x56, + 0x19, 0x76, 0xc7, 0xa8, 0xb8, 0xd7, 0x66, 0x09, + 0x5b, 0x34, 0x85, 0xea, 0xfa, 0x95, 0x24, 0x4b, + 0x04, 0x6b, 0xda, 0xb5, 0xa5, 0xca, 0x7b, 0x14, + 0xe5, 0x8a, 0x3b, 0x54, 0x44, 0x2b, 0x9a, 0xf5, + 0xba, 0xd5, 0x64, 0x0b, 0x1b, 0x74, 0xc5, 0xaa, + 0x3a, 0x55, 0xe4, 0x8b, 0x9b, 0xf4, 0x45, 0x2a, + 0x65, 0x0a, 0xbb, 0xd4, 0xc4, 0xab, 0x1a, 0x75, + 0x84, 0xeb, 0x5a, 0x35, 0x25, 0x4a, 0xfb, 0x94, + 0xdb, 0xb4, 0x05, 0x6a, 0x7a, 0x15, 0xa4, 0xcb, + }, + { + 0x00, 0x70, 0xe0, 0x90, 0xdd, 0xad, 0x3d, 0x4d, + 0xa7, 0xd7, 0x47, 0x37, 0x7a, 0x0a, 0x9a, 0xea, + 0x53, 0x23, 0xb3, 0xc3, 0x8e, 0xfe, 0x6e, 0x1e, + 0xf4, 0x84, 0x14, 0x64, 0x29, 0x59, 0xc9, 0xb9, + 0xa6, 0xd6, 0x46, 0x36, 0x7b, 0x0b, 0x9b, 0xeb, + 0x01, 0x71, 0xe1, 0x91, 0xdc, 0xac, 0x3c, 0x4c, + 0xf5, 0x85, 0x15, 0x65, 0x28, 0x58, 0xc8, 0xb8, + 0x52, 0x22, 0xb2, 0xc2, 0x8f, 0xff, 0x6f, 0x1f, + 0x51, 0x21, 0xb1, 0xc1, 0x8c, 0xfc, 0x6c, 0x1c, + 0xf6, 0x86, 0x16, 0x66, 0x2b, 0x5b, 0xcb, 0xbb, + 0x02, 0x72, 0xe2, 0x92, 0xdf, 0xaf, 0x3f, 0x4f, + 0xa5, 0xd5, 0x45, 0x35, 0x78, 0x08, 0x98, 0xe8, + 0xf7, 0x87, 0x17, 0x67, 0x2a, 0x5a, 0xca, 0xba, + 0x50, 0x20, 0xb0, 0xc0, 0x8d, 0xfd, 0x6d, 0x1d, + 0xa4, 0xd4, 0x44, 0x34, 0x79, 0x09, 0x99, 0xe9, + 0x03, 0x73, 0xe3, 0x93, 0xde, 0xae, 0x3e, 0x4e, + 0xa2, 0xd2, 0x42, 0x32, 0x7f, 0x0f, 0x9f, 0xef, + 0x05, 0x75, 0xe5, 0x95, 0xd8, 0xa8, 0x38, 0x48, + 0xf1, 0x81, 0x11, 0x61, 0x2c, 0x5c, 0xcc, 0xbc, + 0x56, 0x26, 0xb6, 0xc6, 0x8b, 0xfb, 0x6b, 0x1b, + 0x04, 0x74, 0xe4, 0x94, 0xd9, 0xa9, 0x39, 0x49, + 0xa3, 0xd3, 0x43, 0x33, 0x7e, 0x0e, 0x9e, 0xee, + 0x57, 0x27, 0xb7, 0xc7, 0x8a, 0xfa, 0x6a, 0x1a, + 0xf0, 0x80, 0x10, 0x60, 0x2d, 0x5d, 0xcd, 0xbd, + 0xf3, 0x83, 0x13, 0x63, 0x2e, 0x5e, 0xce, 0xbe, + 0x54, 0x24, 0xb4, 0xc4, 0x89, 0xf9, 0x69, 0x19, + 0xa0, 0xd0, 0x40, 0x30, 0x7d, 0x0d, 0x9d, 0xed, + 0x07, 0x77, 0xe7, 0x97, 0xda, 0xaa, 0x3a, 0x4a, + 0x55, 0x25, 0xb5, 0xc5, 0x88, 0xf8, 0x68, 0x18, + 0xf2, 0x82, 0x12, 0x62, 0x2f, 0x5f, 0xcf, 0xbf, + 0x06, 0x76, 0xe6, 0x96, 0xdb, 0xab, 0x3b, 0x4b, + 0xa1, 0xd1, 0x41, 0x31, 0x7c, 0x0c, 0x9c, 0xec, + }, + { + 0x00, 0x71, 0xe2, 0x93, 0xd9, 0xa8, 0x3b, 0x4a, + 0xaf, 0xde, 0x4d, 0x3c, 0x76, 0x07, 0x94, 0xe5, + 0x43, 0x32, 0xa1, 0xd0, 0x9a, 0xeb, 0x78, 0x09, + 0xec, 0x9d, 0x0e, 0x7f, 0x35, 0x44, 0xd7, 0xa6, + 0x86, 0xf7, 0x64, 0x15, 0x5f, 0x2e, 0xbd, 0xcc, + 0x29, 0x58, 0xcb, 0xba, 0xf0, 0x81, 0x12, 0x63, + 0xc5, 0xb4, 0x27, 0x56, 0x1c, 0x6d, 0xfe, 0x8f, + 0x6a, 0x1b, 0x88, 0xf9, 0xb3, 0xc2, 0x51, 0x20, + 0x11, 0x60, 0xf3, 0x82, 0xc8, 0xb9, 0x2a, 0x5b, + 0xbe, 0xcf, 0x5c, 0x2d, 0x67, 0x16, 0x85, 0xf4, + 0x52, 0x23, 0xb0, 0xc1, 0x8b, 0xfa, 0x69, 0x18, + 0xfd, 0x8c, 0x1f, 0x6e, 0x24, 0x55, 0xc6, 0xb7, + 0x97, 0xe6, 0x75, 0x04, 0x4e, 0x3f, 0xac, 0xdd, + 0x38, 0x49, 0xda, 0xab, 0xe1, 0x90, 0x03, 0x72, + 0xd4, 0xa5, 0x36, 0x47, 0x0d, 0x7c, 0xef, 0x9e, + 0x7b, 0x0a, 0x99, 0xe8, 0xa2, 0xd3, 0x40, 0x31, + 0x22, 0x53, 0xc0, 0xb1, 0xfb, 0x8a, 0x19, 0x68, + 0x8d, 0xfc, 0x6f, 0x1e, 0x54, 0x25, 0xb6, 0xc7, + 0x61, 0x10, 0x83, 0xf2, 0xb8, 0xc9, 0x5a, 0x2b, + 0xce, 0xbf, 0x2c, 0x5d, 0x17, 0x66, 0xf5, 0x84, + 0xa4, 0xd5, 0x46, 0x37, 0x7d, 0x0c, 0x9f, 0xee, + 0x0b, 0x7a, 0xe9, 0x98, 0xd2, 0xa3, 0x30, 0x41, + 0xe7, 0x96, 0x05, 0x74, 0x3e, 0x4f, 0xdc, 0xad, + 0x48, 0x39, 0xaa, 0xdb, 0x91, 0xe0, 0x73, 0x02, + 0x33, 0x42, 0xd1, 0xa0, 0xea, 0x9b, 0x08, 0x79, + 0x9c, 0xed, 0x7e, 0x0f, 0x45, 0x34, 0xa7, 0xd6, + 0x70, 0x01, 0x92, 0xe3, 0xa9, 0xd8, 0x4b, 0x3a, + 0xdf, 0xae, 0x3d, 0x4c, 0x06, 0x77, 0xe4, 0x95, + 0xb5, 0xc4, 0x57, 0x26, 0x6c, 0x1d, 0x8e, 0xff, + 0x1a, 0x6b, 0xf8, 0x89, 0xc3, 0xb2, 0x21, 0x50, + 0xf6, 0x87, 0x14, 0x65, 0x2f, 0x5e, 0xcd, 0xbc, + 0x59, 0x28, 0xbb, 0xca, 0x80, 0xf1, 0x62, 0x13, + }, + { + 0x00, 0x72, 0xe4, 0x96, 0xd5, 0xa7, 0x31, 0x43, + 0xb7, 0xc5, 0x53, 0x21, 0x62, 0x10, 0x86, 0xf4, + 0x73, 0x01, 0x97, 0xe5, 0xa6, 0xd4, 0x42, 0x30, + 0xc4, 0xb6, 0x20, 0x52, 0x11, 0x63, 0xf5, 0x87, + 0xe6, 0x94, 0x02, 0x70, 0x33, 0x41, 0xd7, 0xa5, + 0x51, 0x23, 0xb5, 0xc7, 0x84, 0xf6, 0x60, 0x12, + 0x95, 0xe7, 0x71, 0x03, 0x40, 0x32, 0xa4, 0xd6, + 0x22, 0x50, 0xc6, 0xb4, 0xf7, 0x85, 0x13, 0x61, + 0xd1, 0xa3, 0x35, 0x47, 0x04, 0x76, 0xe0, 0x92, + 0x66, 0x14, 0x82, 0xf0, 0xb3, 0xc1, 0x57, 0x25, + 0xa2, 0xd0, 0x46, 0x34, 0x77, 0x05, 0x93, 0xe1, + 0x15, 0x67, 0xf1, 0x83, 0xc0, 0xb2, 0x24, 0x56, + 0x37, 0x45, 0xd3, 0xa1, 0xe2, 0x90, 0x06, 0x74, + 0x80, 0xf2, 0x64, 0x16, 0x55, 0x27, 0xb1, 0xc3, + 0x44, 0x36, 0xa0, 0xd2, 0x91, 0xe3, 0x75, 0x07, + 0xf3, 0x81, 0x17, 0x65, 0x26, 0x54, 0xc2, 0xb0, + 0xbf, 0xcd, 0x5b, 0x29, 0x6a, 0x18, 0x8e, 0xfc, + 0x08, 0x7a, 0xec, 0x9e, 0xdd, 0xaf, 0x39, 0x4b, + 0xcc, 0xbe, 0x28, 0x5a, 0x19, 0x6b, 0xfd, 0x8f, + 0x7b, 0x09, 0x9f, 0xed, 0xae, 0xdc, 0x4a, 0x38, + 0x59, 0x2b, 0xbd, 0xcf, 0x8c, 0xfe, 0x68, 0x1a, + 0xee, 0x9c, 0x0a, 0x78, 0x3b, 0x49, 0xdf, 0xad, + 0x2a, 0x58, 0xce, 0xbc, 0xff, 0x8d, 0x1b, 0x69, + 0x9d, 0xef, 0x79, 0x0b, 0x48, 0x3a, 0xac, 0xde, + 0x6e, 0x1c, 0x8a, 0xf8, 0xbb, 0xc9, 0x5f, 0x2d, + 0xd9, 0xab, 0x3d, 0x4f, 0x0c, 0x7e, 0xe8, 0x9a, + 0x1d, 0x6f, 0xf9, 0x8b, 0xc8, 0xba, 0x2c, 0x5e, + 0xaa, 0xd8, 0x4e, 0x3c, 0x7f, 0x0d, 0x9b, 0xe9, + 0x88, 0xfa, 0x6c, 0x1e, 0x5d, 0x2f, 0xb9, 0xcb, + 0x3f, 0x4d, 0xdb, 0xa9, 0xea, 0x98, 0x0e, 0x7c, + 0xfb, 0x89, 0x1f, 0x6d, 0x2e, 0x5c, 0xca, 0xb8, + 0x4c, 0x3e, 0xa8, 0xda, 0x99, 0xeb, 0x7d, 0x0f, + }, + { + 0x00, 0x73, 0xe6, 0x95, 0xd1, 0xa2, 0x37, 0x44, + 0xbf, 0xcc, 0x59, 0x2a, 0x6e, 0x1d, 0x88, 0xfb, + 0x63, 0x10, 0x85, 0xf6, 0xb2, 0xc1, 0x54, 0x27, + 0xdc, 0xaf, 0x3a, 0x49, 0x0d, 0x7e, 0xeb, 0x98, + 0xc6, 0xb5, 0x20, 0x53, 0x17, 0x64, 0xf1, 0x82, + 0x79, 0x0a, 0x9f, 0xec, 0xa8, 0xdb, 0x4e, 0x3d, + 0xa5, 0xd6, 0x43, 0x30, 0x74, 0x07, 0x92, 0xe1, + 0x1a, 0x69, 0xfc, 0x8f, 0xcb, 0xb8, 0x2d, 0x5e, + 0x91, 0xe2, 0x77, 0x04, 0x40, 0x33, 0xa6, 0xd5, + 0x2e, 0x5d, 0xc8, 0xbb, 0xff, 0x8c, 0x19, 0x6a, + 0xf2, 0x81, 0x14, 0x67, 0x23, 0x50, 0xc5, 0xb6, + 0x4d, 0x3e, 0xab, 0xd8, 0x9c, 0xef, 0x7a, 0x09, + 0x57, 0x24, 0xb1, 0xc2, 0x86, 0xf5, 0x60, 0x13, + 0xe8, 0x9b, 0x0e, 0x7d, 0x39, 0x4a, 0xdf, 0xac, + 0x34, 0x47, 0xd2, 0xa1, 0xe5, 0x96, 0x03, 0x70, + 0x8b, 0xf8, 0x6d, 0x1e, 0x5a, 0x29, 0xbc, 0xcf, + 0x3f, 0x4c, 0xd9, 0xaa, 0xee, 0x9d, 0x08, 0x7b, + 0x80, 0xf3, 0x66, 0x15, 0x51, 0x22, 0xb7, 0xc4, + 0x5c, 0x2f, 0xba, 0xc9, 0x8d, 0xfe, 0x6b, 0x18, + 0xe3, 0x90, 0x05, 0x76, 0x32, 0x41, 0xd4, 0xa7, + 0xf9, 0x8a, 0x1f, 0x6c, 0x28, 0x5b, 0xce, 0xbd, + 0x46, 0x35, 0xa0, 0xd3, 0x97, 0xe4, 0x71, 0x02, + 0x9a, 0xe9, 0x7c, 0x0f, 0x4b, 0x38, 0xad, 0xde, + 0x25, 0x56, 0xc3, 0xb0, 0xf4, 0x87, 0x12, 0x61, + 0xae, 0xdd, 0x48, 0x3b, 0x7f, 0x0c, 0x99, 0xea, + 0x11, 0x62, 0xf7, 0x84, 0xc0, 0xb3, 0x26, 0x55, + 0xcd, 0xbe, 0x2b, 0x58, 0x1c, 0x6f, 0xfa, 0x89, + 0x72, 0x01, 0x94, 0xe7, 0xa3, 0xd0, 0x45, 0x36, + 0x68, 0x1b, 0x8e, 0xfd, 0xb9, 0xca, 0x5f, 0x2c, + 0xd7, 0xa4, 0x31, 0x42, 0x06, 0x75, 0xe0, 0x93, + 0x0b, 0x78, 0xed, 0x9e, 0xda, 0xa9, 0x3c, 0x4f, + 0xb4, 0xc7, 0x52, 0x21, 0x65, 0x16, 0x83, 0xf0, + }, + { + 0x00, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, + 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6, + 0x13, 0x67, 0xfb, 0x8f, 0xde, 0xaa, 0x36, 0x42, + 0x94, 0xe0, 0x7c, 0x08, 0x59, 0x2d, 0xb1, 0xc5, + 0x26, 0x52, 0xce, 0xba, 0xeb, 0x9f, 0x03, 0x77, + 0xa1, 0xd5, 0x49, 0x3d, 0x6c, 0x18, 0x84, 0xf0, + 0x35, 0x41, 0xdd, 0xa9, 0xf8, 0x8c, 0x10, 0x64, + 0xb2, 0xc6, 0x5a, 0x2e, 0x7f, 0x0b, 0x97, 0xe3, + 0x4c, 0x38, 0xa4, 0xd0, 0x81, 0xf5, 0x69, 0x1d, + 0xcb, 0xbf, 0x23, 0x57, 0x06, 0x72, 0xee, 0x9a, + 0x5f, 0x2b, 0xb7, 0xc3, 0x92, 0xe6, 0x7a, 0x0e, + 0xd8, 0xac, 0x30, 0x44, 0x15, 0x61, 0xfd, 0x89, + 0x6a, 0x1e, 0x82, 0xf6, 0xa7, 0xd3, 0x4f, 0x3b, + 0xed, 0x99, 0x05, 0x71, 0x20, 0x54, 0xc8, 0xbc, + 0x79, 0x0d, 0x91, 0xe5, 0xb4, 0xc0, 0x5c, 0x28, + 0xfe, 0x8a, 0x16, 0x62, 0x33, 0x47, 0xdb, 0xaf, + 0x98, 0xec, 0x70, 0x04, 0x55, 0x21, 0xbd, 0xc9, + 0x1f, 0x6b, 0xf7, 0x83, 0xd2, 0xa6, 0x3a, 0x4e, + 0x8b, 0xff, 0x63, 0x17, 0x46, 0x32, 0xae, 0xda, + 0x0c, 0x78, 0xe4, 0x90, 0xc1, 0xb5, 0x29, 0x5d, + 0xbe, 0xca, 0x56, 0x22, 0x73, 0x07, 0x9b, 0xef, + 0x39, 0x4d, 0xd1, 0xa5, 0xf4, 0x80, 0x1c, 0x68, + 0xad, 0xd9, 0x45, 0x31, 0x60, 0x14, 0x88, 0xfc, + 0x2a, 0x5e, 0xc2, 0xb6, 0xe7, 0x93, 0x0f, 0x7b, + 0xd4, 0xa0, 0x3c, 0x48, 0x19, 0x6d, 0xf1, 0x85, + 0x53, 0x27, 0xbb, 0xcf, 0x9e, 0xea, 0x76, 0x02, + 0xc7, 0xb3, 0x2f, 0x5b, 0x0a, 0x7e, 0xe2, 0x96, + 0x40, 0x34, 0xa8, 0xdc, 0x8d, 0xf9, 0x65, 0x11, + 0xf2, 0x86, 0x1a, 0x6e, 0x3f, 0x4b, 0xd7, 0xa3, + 0x75, 0x01, 0x9d, 0xe9, 0xb8, 0xcc, 0x50, 0x24, + 0xe1, 0x95, 0x09, 0x7d, 0x2c, 0x58, 0xc4, 0xb0, + 0x66, 0x12, 0x8e, 0xfa, 0xab, 0xdf, 0x43, 0x37, + }, + { + 0x00, 0x75, 0xea, 0x9f, 0xc9, 0xbc, 0x23, 0x56, + 0x8f, 0xfa, 0x65, 0x10, 0x46, 0x33, 0xac, 0xd9, + 0x03, 0x76, 0xe9, 0x9c, 0xca, 0xbf, 0x20, 0x55, + 0x8c, 0xf9, 0x66, 0x13, 0x45, 0x30, 0xaf, 0xda, + 0x06, 0x73, 0xec, 0x99, 0xcf, 0xba, 0x25, 0x50, + 0x89, 0xfc, 0x63, 0x16, 0x40, 0x35, 0xaa, 0xdf, + 0x05, 0x70, 0xef, 0x9a, 0xcc, 0xb9, 0x26, 0x53, + 0x8a, 0xff, 0x60, 0x15, 0x43, 0x36, 0xa9, 0xdc, + 0x0c, 0x79, 0xe6, 0x93, 0xc5, 0xb0, 0x2f, 0x5a, + 0x83, 0xf6, 0x69, 0x1c, 0x4a, 0x3f, 0xa0, 0xd5, + 0x0f, 0x7a, 0xe5, 0x90, 0xc6, 0xb3, 0x2c, 0x59, + 0x80, 0xf5, 0x6a, 0x1f, 0x49, 0x3c, 0xa3, 0xd6, + 0x0a, 0x7f, 0xe0, 0x95, 0xc3, 0xb6, 0x29, 0x5c, + 0x85, 0xf0, 0x6f, 0x1a, 0x4c, 0x39, 0xa6, 0xd3, + 0x09, 0x7c, 0xe3, 0x96, 0xc0, 0xb5, 0x2a, 0x5f, + 0x86, 0xf3, 0x6c, 0x19, 0x4f, 0x3a, 0xa5, 0xd0, + 0x18, 0x6d, 0xf2, 0x87, 0xd1, 0xa4, 0x3b, 0x4e, + 0x97, 0xe2, 0x7d, 0x08, 0x5e, 0x2b, 0xb4, 0xc1, + 0x1b, 0x6e, 0xf1, 0x84, 0xd2, 0xa7, 0x38, 0x4d, + 0x94, 0xe1, 0x7e, 0x0b, 0x5d, 0x28, 0xb7, 0xc2, + 0x1e, 0x6b, 0xf4, 0x81, 0xd7, 0xa2, 0x3d, 0x48, + 0x91, 0xe4, 0x7b, 0x0e, 0x58, 0x2d, 0xb2, 0xc7, + 0x1d, 0x68, 0xf7, 0x82, 0xd4, 0xa1, 0x3e, 0x4b, + 0x92, 0xe7, 0x78, 0x0d, 0x5b, 0x2e, 0xb1, 0xc4, + 0x14, 0x61, 0xfe, 0x8b, 0xdd, 0xa8, 0x37, 0x42, + 0x9b, 0xee, 0x71, 0x04, 0x52, 0x27, 0xb8, 0xcd, + 0x17, 0x62, 0xfd, 0x88, 0xde, 0xab, 0x34, 0x41, + 0x98, 0xed, 0x72, 0x07, 0x51, 0x24, 0xbb, 0xce, + 0x12, 0x67, 0xf8, 0x8d, 0xdb, 0xae, 0x31, 0x44, + 0x9d, 0xe8, 0x77, 0x02, 0x54, 0x21, 0xbe, 0xcb, + 0x11, 0x64, 0xfb, 0x8e, 0xd8, 0xad, 0x32, 0x47, + 0x9e, 0xeb, 0x74, 0x01, 0x57, 0x22, 0xbd, 0xc8, + }, + { + 0x00, 0x76, 0xec, 0x9a, 0xc5, 0xb3, 0x29, 0x5f, + 0x97, 0xe1, 0x7b, 0x0d, 0x52, 0x24, 0xbe, 0xc8, + 0x33, 0x45, 0xdf, 0xa9, 0xf6, 0x80, 0x1a, 0x6c, + 0xa4, 0xd2, 0x48, 0x3e, 0x61, 0x17, 0x8d, 0xfb, + 0x66, 0x10, 0x8a, 0xfc, 0xa3, 0xd5, 0x4f, 0x39, + 0xf1, 0x87, 0x1d, 0x6b, 0x34, 0x42, 0xd8, 0xae, + 0x55, 0x23, 0xb9, 0xcf, 0x90, 0xe6, 0x7c, 0x0a, + 0xc2, 0xb4, 0x2e, 0x58, 0x07, 0x71, 0xeb, 0x9d, + 0xcc, 0xba, 0x20, 0x56, 0x09, 0x7f, 0xe5, 0x93, + 0x5b, 0x2d, 0xb7, 0xc1, 0x9e, 0xe8, 0x72, 0x04, + 0xff, 0x89, 0x13, 0x65, 0x3a, 0x4c, 0xd6, 0xa0, + 0x68, 0x1e, 0x84, 0xf2, 0xad, 0xdb, 0x41, 0x37, + 0xaa, 0xdc, 0x46, 0x30, 0x6f, 0x19, 0x83, 0xf5, + 0x3d, 0x4b, 0xd1, 0xa7, 0xf8, 0x8e, 0x14, 0x62, + 0x99, 0xef, 0x75, 0x03, 0x5c, 0x2a, 0xb0, 0xc6, + 0x0e, 0x78, 0xe2, 0x94, 0xcb, 0xbd, 0x27, 0x51, + 0x85, 0xf3, 0x69, 0x1f, 0x40, 0x36, 0xac, 0xda, + 0x12, 0x64, 0xfe, 0x88, 0xd7, 0xa1, 0x3b, 0x4d, + 0xb6, 0xc0, 0x5a, 0x2c, 0x73, 0x05, 0x9f, 0xe9, + 0x21, 0x57, 0xcd, 0xbb, 0xe4, 0x92, 0x08, 0x7e, + 0xe3, 0x95, 0x0f, 0x79, 0x26, 0x50, 0xca, 0xbc, + 0x74, 0x02, 0x98, 0xee, 0xb1, 0xc7, 0x5d, 0x2b, + 0xd0, 0xa6, 0x3c, 0x4a, 0x15, 0x63, 0xf9, 0x8f, + 0x47, 0x31, 0xab, 0xdd, 0x82, 0xf4, 0x6e, 0x18, + 0x49, 0x3f, 0xa5, 0xd3, 0x8c, 0xfa, 0x60, 0x16, + 0xde, 0xa8, 0x32, 0x44, 0x1b, 0x6d, 0xf7, 0x81, + 0x7a, 0x0c, 0x96, 0xe0, 0xbf, 0xc9, 0x53, 0x25, + 0xed, 0x9b, 0x01, 0x77, 0x28, 0x5e, 0xc4, 0xb2, + 0x2f, 0x59, 0xc3, 0xb5, 0xea, 0x9c, 0x06, 0x70, + 0xb8, 0xce, 0x54, 0x22, 0x7d, 0x0b, 0x91, 0xe7, + 0x1c, 0x6a, 0xf0, 0x86, 0xd9, 0xaf, 0x35, 0x43, + 0x8b, 0xfd, 0x67, 0x11, 0x4e, 0x38, 0xa2, 0xd4, + }, + { + 0x00, 0x77, 0xee, 0x99, 0xc1, 0xb6, 0x2f, 0x58, + 0x9f, 0xe8, 0x71, 0x06, 0x5e, 0x29, 0xb0, 0xc7, + 0x23, 0x54, 0xcd, 0xba, 0xe2, 0x95, 0x0c, 0x7b, + 0xbc, 0xcb, 0x52, 0x25, 0x7d, 0x0a, 0x93, 0xe4, + 0x46, 0x31, 0xa8, 0xdf, 0x87, 0xf0, 0x69, 0x1e, + 0xd9, 0xae, 0x37, 0x40, 0x18, 0x6f, 0xf6, 0x81, + 0x65, 0x12, 0x8b, 0xfc, 0xa4, 0xd3, 0x4a, 0x3d, + 0xfa, 0x8d, 0x14, 0x63, 0x3b, 0x4c, 0xd5, 0xa2, + 0x8c, 0xfb, 0x62, 0x15, 0x4d, 0x3a, 0xa3, 0xd4, + 0x13, 0x64, 0xfd, 0x8a, 0xd2, 0xa5, 0x3c, 0x4b, + 0xaf, 0xd8, 0x41, 0x36, 0x6e, 0x19, 0x80, 0xf7, + 0x30, 0x47, 0xde, 0xa9, 0xf1, 0x86, 0x1f, 0x68, + 0xca, 0xbd, 0x24, 0x53, 0x0b, 0x7c, 0xe5, 0x92, + 0x55, 0x22, 0xbb, 0xcc, 0x94, 0xe3, 0x7a, 0x0d, + 0xe9, 0x9e, 0x07, 0x70, 0x28, 0x5f, 0xc6, 0xb1, + 0x76, 0x01, 0x98, 0xef, 0xb7, 0xc0, 0x59, 0x2e, + 0x05, 0x72, 0xeb, 0x9c, 0xc4, 0xb3, 0x2a, 0x5d, + 0x9a, 0xed, 0x74, 0x03, 0x5b, 0x2c, 0xb5, 0xc2, + 0x26, 0x51, 0xc8, 0xbf, 0xe7, 0x90, 0x09, 0x7e, + 0xb9, 0xce, 0x57, 0x20, 0x78, 0x0f, 0x96, 0xe1, + 0x43, 0x34, 0xad, 0xda, 0x82, 0xf5, 0x6c, 0x1b, + 0xdc, 0xab, 0x32, 0x45, 0x1d, 0x6a, 0xf3, 0x84, + 0x60, 0x17, 0x8e, 0xf9, 0xa1, 0xd6, 0x4f, 0x38, + 0xff, 0x88, 0x11, 0x66, 0x3e, 0x49, 0xd0, 0xa7, + 0x89, 0xfe, 0x67, 0x10, 0x48, 0x3f, 0xa6, 0xd1, + 0x16, 0x61, 0xf8, 0x8f, 0xd7, 0xa0, 0x39, 0x4e, + 0xaa, 0xdd, 0x44, 0x33, 0x6b, 0x1c, 0x85, 0xf2, + 0x35, 0x42, 0xdb, 0xac, 0xf4, 0x83, 0x1a, 0x6d, + 0xcf, 0xb8, 0x21, 0x56, 0x0e, 0x79, 0xe0, 0x97, + 0x50, 0x27, 0xbe, 0xc9, 0x91, 0xe6, 0x7f, 0x08, + 0xec, 0x9b, 0x02, 0x75, 0x2d, 0x5a, 0xc3, 0xb4, + 0x73, 0x04, 0x9d, 0xea, 0xb2, 0xc5, 0x5c, 0x2b, + }, + { + 0x00, 0x78, 0xf0, 0x88, 0xfd, 0x85, 0x0d, 0x75, + 0xe7, 0x9f, 0x17, 0x6f, 0x1a, 0x62, 0xea, 0x92, + 0xd3, 0xab, 0x23, 0x5b, 0x2e, 0x56, 0xde, 0xa6, + 0x34, 0x4c, 0xc4, 0xbc, 0xc9, 0xb1, 0x39, 0x41, + 0xbb, 0xc3, 0x4b, 0x33, 0x46, 0x3e, 0xb6, 0xce, + 0x5c, 0x24, 0xac, 0xd4, 0xa1, 0xd9, 0x51, 0x29, + 0x68, 0x10, 0x98, 0xe0, 0x95, 0xed, 0x65, 0x1d, + 0x8f, 0xf7, 0x7f, 0x07, 0x72, 0x0a, 0x82, 0xfa, + 0x6b, 0x13, 0x9b, 0xe3, 0x96, 0xee, 0x66, 0x1e, + 0x8c, 0xf4, 0x7c, 0x04, 0x71, 0x09, 0x81, 0xf9, + 0xb8, 0xc0, 0x48, 0x30, 0x45, 0x3d, 0xb5, 0xcd, + 0x5f, 0x27, 0xaf, 0xd7, 0xa2, 0xda, 0x52, 0x2a, + 0xd0, 0xa8, 0x20, 0x58, 0x2d, 0x55, 0xdd, 0xa5, + 0x37, 0x4f, 0xc7, 0xbf, 0xca, 0xb2, 0x3a, 0x42, + 0x03, 0x7b, 0xf3, 0x8b, 0xfe, 0x86, 0x0e, 0x76, + 0xe4, 0x9c, 0x14, 0x6c, 0x19, 0x61, 0xe9, 0x91, + 0xd6, 0xae, 0x26, 0x5e, 0x2b, 0x53, 0xdb, 0xa3, + 0x31, 0x49, 0xc1, 0xb9, 0xcc, 0xb4, 0x3c, 0x44, + 0x05, 0x7d, 0xf5, 0x8d, 0xf8, 0x80, 0x08, 0x70, + 0xe2, 0x9a, 0x12, 0x6a, 0x1f, 0x67, 0xef, 0x97, + 0x6d, 0x15, 0x9d, 0xe5, 0x90, 0xe8, 0x60, 0x18, + 0x8a, 0xf2, 0x7a, 0x02, 0x77, 0x0f, 0x87, 0xff, + 0xbe, 0xc6, 0x4e, 0x36, 0x43, 0x3b, 0xb3, 0xcb, + 0x59, 0x21, 0xa9, 0xd1, 0xa4, 0xdc, 0x54, 0x2c, + 0xbd, 0xc5, 0x4d, 0x35, 0x40, 0x38, 0xb0, 0xc8, + 0x5a, 0x22, 0xaa, 0xd2, 0xa7, 0xdf, 0x57, 0x2f, + 0x6e, 0x16, 0x9e, 0xe6, 0x93, 0xeb, 0x63, 0x1b, + 0x89, 0xf1, 0x79, 0x01, 0x74, 0x0c, 0x84, 0xfc, + 0x06, 0x7e, 0xf6, 0x8e, 0xfb, 0x83, 0x0b, 0x73, + 0xe1, 0x99, 0x11, 0x69, 0x1c, 0x64, 0xec, 0x94, + 0xd5, 0xad, 0x25, 0x5d, 0x28, 0x50, 0xd8, 0xa0, + 0x32, 0x4a, 0xc2, 0xba, 0xcf, 0xb7, 0x3f, 0x47, + }, + { + 0x00, 0x79, 0xf2, 0x8b, 0xf9, 0x80, 0x0b, 0x72, + 0xef, 0x96, 0x1d, 0x64, 0x16, 0x6f, 0xe4, 0x9d, + 0xc3, 0xba, 0x31, 0x48, 0x3a, 0x43, 0xc8, 0xb1, + 0x2c, 0x55, 0xde, 0xa7, 0xd5, 0xac, 0x27, 0x5e, + 0x9b, 0xe2, 0x69, 0x10, 0x62, 0x1b, 0x90, 0xe9, + 0x74, 0x0d, 0x86, 0xff, 0x8d, 0xf4, 0x7f, 0x06, + 0x58, 0x21, 0xaa, 0xd3, 0xa1, 0xd8, 0x53, 0x2a, + 0xb7, 0xce, 0x45, 0x3c, 0x4e, 0x37, 0xbc, 0xc5, + 0x2b, 0x52, 0xd9, 0xa0, 0xd2, 0xab, 0x20, 0x59, + 0xc4, 0xbd, 0x36, 0x4f, 0x3d, 0x44, 0xcf, 0xb6, + 0xe8, 0x91, 0x1a, 0x63, 0x11, 0x68, 0xe3, 0x9a, + 0x07, 0x7e, 0xf5, 0x8c, 0xfe, 0x87, 0x0c, 0x75, + 0xb0, 0xc9, 0x42, 0x3b, 0x49, 0x30, 0xbb, 0xc2, + 0x5f, 0x26, 0xad, 0xd4, 0xa6, 0xdf, 0x54, 0x2d, + 0x73, 0x0a, 0x81, 0xf8, 0x8a, 0xf3, 0x78, 0x01, + 0x9c, 0xe5, 0x6e, 0x17, 0x65, 0x1c, 0x97, 0xee, + 0x56, 0x2f, 0xa4, 0xdd, 0xaf, 0xd6, 0x5d, 0x24, + 0xb9, 0xc0, 0x4b, 0x32, 0x40, 0x39, 0xb2, 0xcb, + 0x95, 0xec, 0x67, 0x1e, 0x6c, 0x15, 0x9e, 0xe7, + 0x7a, 0x03, 0x88, 0xf1, 0x83, 0xfa, 0x71, 0x08, + 0xcd, 0xb4, 0x3f, 0x46, 0x34, 0x4d, 0xc6, 0xbf, + 0x22, 0x5b, 0xd0, 0xa9, 0xdb, 0xa2, 0x29, 0x50, + 0x0e, 0x77, 0xfc, 0x85, 0xf7, 0x8e, 0x05, 0x7c, + 0xe1, 0x98, 0x13, 0x6a, 0x18, 0x61, 0xea, 0x93, + 0x7d, 0x04, 0x8f, 0xf6, 0x84, 0xfd, 0x76, 0x0f, + 0x92, 0xeb, 0x60, 0x19, 0x6b, 0x12, 0x99, 0xe0, + 0xbe, 0xc7, 0x4c, 0x35, 0x47, 0x3e, 0xb5, 0xcc, + 0x51, 0x28, 0xa3, 0xda, 0xa8, 0xd1, 0x5a, 0x23, + 0xe6, 0x9f, 0x14, 0x6d, 0x1f, 0x66, 0xed, 0x94, + 0x09, 0x70, 0xfb, 0x82, 0xf0, 0x89, 0x02, 0x7b, + 0x25, 0x5c, 0xd7, 0xae, 0xdc, 0xa5, 0x2e, 0x57, + 0xca, 0xb3, 0x38, 0x41, 0x33, 0x4a, 0xc1, 0xb8, + }, + { + 0x00, 0x7a, 0xf4, 0x8e, 0xf5, 0x8f, 0x01, 0x7b, + 0xf7, 0x8d, 0x03, 0x79, 0x02, 0x78, 0xf6, 0x8c, + 0xf3, 0x89, 0x07, 0x7d, 0x06, 0x7c, 0xf2, 0x88, + 0x04, 0x7e, 0xf0, 0x8a, 0xf1, 0x8b, 0x05, 0x7f, + 0xfb, 0x81, 0x0f, 0x75, 0x0e, 0x74, 0xfa, 0x80, + 0x0c, 0x76, 0xf8, 0x82, 0xf9, 0x83, 0x0d, 0x77, + 0x08, 0x72, 0xfc, 0x86, 0xfd, 0x87, 0x09, 0x73, + 0xff, 0x85, 0x0b, 0x71, 0x0a, 0x70, 0xfe, 0x84, + 0xeb, 0x91, 0x1f, 0x65, 0x1e, 0x64, 0xea, 0x90, + 0x1c, 0x66, 0xe8, 0x92, 0xe9, 0x93, 0x1d, 0x67, + 0x18, 0x62, 0xec, 0x96, 0xed, 0x97, 0x19, 0x63, + 0xef, 0x95, 0x1b, 0x61, 0x1a, 0x60, 0xee, 0x94, + 0x10, 0x6a, 0xe4, 0x9e, 0xe5, 0x9f, 0x11, 0x6b, + 0xe7, 0x9d, 0x13, 0x69, 0x12, 0x68, 0xe6, 0x9c, + 0xe3, 0x99, 0x17, 0x6d, 0x16, 0x6c, 0xe2, 0x98, + 0x14, 0x6e, 0xe0, 0x9a, 0xe1, 0x9b, 0x15, 0x6f, + 0xcb, 0xb1, 0x3f, 0x45, 0x3e, 0x44, 0xca, 0xb0, + 0x3c, 0x46, 0xc8, 0xb2, 0xc9, 0xb3, 0x3d, 0x47, + 0x38, 0x42, 0xcc, 0xb6, 0xcd, 0xb7, 0x39, 0x43, + 0xcf, 0xb5, 0x3b, 0x41, 0x3a, 0x40, 0xce, 0xb4, + 0x30, 0x4a, 0xc4, 0xbe, 0xc5, 0xbf, 0x31, 0x4b, + 0xc7, 0xbd, 0x33, 0x49, 0x32, 0x48, 0xc6, 0xbc, + 0xc3, 0xb9, 0x37, 0x4d, 0x36, 0x4c, 0xc2, 0xb8, + 0x34, 0x4e, 0xc0, 0xba, 0xc1, 0xbb, 0x35, 0x4f, + 0x20, 0x5a, 0xd4, 0xae, 0xd5, 0xaf, 0x21, 0x5b, + 0xd7, 0xad, 0x23, 0x59, 0x22, 0x58, 0xd6, 0xac, + 0xd3, 0xa9, 0x27, 0x5d, 0x26, 0x5c, 0xd2, 0xa8, + 0x24, 0x5e, 0xd0, 0xaa, 0xd1, 0xab, 0x25, 0x5f, + 0xdb, 0xa1, 0x2f, 0x55, 0x2e, 0x54, 0xda, 0xa0, + 0x2c, 0x56, 0xd8, 0xa2, 0xd9, 0xa3, 0x2d, 0x57, + 0x28, 0x52, 0xdc, 0xa6, 0xdd, 0xa7, 0x29, 0x53, + 0xdf, 0xa5, 0x2b, 0x51, 0x2a, 0x50, 0xde, 0xa4, + }, + { + 0x00, 0x7b, 0xf6, 0x8d, 0xf1, 0x8a, 0x07, 0x7c, + 0xff, 0x84, 0x09, 0x72, 0x0e, 0x75, 0xf8, 0x83, + 0xe3, 0x98, 0x15, 0x6e, 0x12, 0x69, 0xe4, 0x9f, + 0x1c, 0x67, 0xea, 0x91, 0xed, 0x96, 0x1b, 0x60, + 0xdb, 0xa0, 0x2d, 0x56, 0x2a, 0x51, 0xdc, 0xa7, + 0x24, 0x5f, 0xd2, 0xa9, 0xd5, 0xae, 0x23, 0x58, + 0x38, 0x43, 0xce, 0xb5, 0xc9, 0xb2, 0x3f, 0x44, + 0xc7, 0xbc, 0x31, 0x4a, 0x36, 0x4d, 0xc0, 0xbb, + 0xab, 0xd0, 0x5d, 0x26, 0x5a, 0x21, 0xac, 0xd7, + 0x54, 0x2f, 0xa2, 0xd9, 0xa5, 0xde, 0x53, 0x28, + 0x48, 0x33, 0xbe, 0xc5, 0xb9, 0xc2, 0x4f, 0x34, + 0xb7, 0xcc, 0x41, 0x3a, 0x46, 0x3d, 0xb0, 0xcb, + 0x70, 0x0b, 0x86, 0xfd, 0x81, 0xfa, 0x77, 0x0c, + 0x8f, 0xf4, 0x79, 0x02, 0x7e, 0x05, 0x88, 0xf3, + 0x93, 0xe8, 0x65, 0x1e, 0x62, 0x19, 0x94, 0xef, + 0x6c, 0x17, 0x9a, 0xe1, 0x9d, 0xe6, 0x6b, 0x10, + 0x4b, 0x30, 0xbd, 0xc6, 0xba, 0xc1, 0x4c, 0x37, + 0xb4, 0xcf, 0x42, 0x39, 0x45, 0x3e, 0xb3, 0xc8, + 0xa8, 0xd3, 0x5e, 0x25, 0x59, 0x22, 0xaf, 0xd4, + 0x57, 0x2c, 0xa1, 0xda, 0xa6, 0xdd, 0x50, 0x2b, + 0x90, 0xeb, 0x66, 0x1d, 0x61, 0x1a, 0x97, 0xec, + 0x6f, 0x14, 0x99, 0xe2, 0x9e, 0xe5, 0x68, 0x13, + 0x73, 0x08, 0x85, 0xfe, 0x82, 0xf9, 0x74, 0x0f, + 0x8c, 0xf7, 0x7a, 0x01, 0x7d, 0x06, 0x8b, 0xf0, + 0xe0, 0x9b, 0x16, 0x6d, 0x11, 0x6a, 0xe7, 0x9c, + 0x1f, 0x64, 0xe9, 0x92, 0xee, 0x95, 0x18, 0x63, + 0x03, 0x78, 0xf5, 0x8e, 0xf2, 0x89, 0x04, 0x7f, + 0xfc, 0x87, 0x0a, 0x71, 0x0d, 0x76, 0xfb, 0x80, + 0x3b, 0x40, 0xcd, 0xb6, 0xca, 0xb1, 0x3c, 0x47, + 0xc4, 0xbf, 0x32, 0x49, 0x35, 0x4e, 0xc3, 0xb8, + 0xd8, 0xa3, 0x2e, 0x55, 0x29, 0x52, 0xdf, 0xa4, + 0x27, 0x5c, 0xd1, 0xaa, 0xd6, 0xad, 0x20, 0x5b, + }, + { + 0x00, 0x7c, 0xf8, 0x84, 0xed, 0x91, 0x15, 0x69, + 0xc7, 0xbb, 0x3f, 0x43, 0x2a, 0x56, 0xd2, 0xae, + 0x93, 0xef, 0x6b, 0x17, 0x7e, 0x02, 0x86, 0xfa, + 0x54, 0x28, 0xac, 0xd0, 0xb9, 0xc5, 0x41, 0x3d, + 0x3b, 0x47, 0xc3, 0xbf, 0xd6, 0xaa, 0x2e, 0x52, + 0xfc, 0x80, 0x04, 0x78, 0x11, 0x6d, 0xe9, 0x95, + 0xa8, 0xd4, 0x50, 0x2c, 0x45, 0x39, 0xbd, 0xc1, + 0x6f, 0x13, 0x97, 0xeb, 0x82, 0xfe, 0x7a, 0x06, + 0x76, 0x0a, 0x8e, 0xf2, 0x9b, 0xe7, 0x63, 0x1f, + 0xb1, 0xcd, 0x49, 0x35, 0x5c, 0x20, 0xa4, 0xd8, + 0xe5, 0x99, 0x1d, 0x61, 0x08, 0x74, 0xf0, 0x8c, + 0x22, 0x5e, 0xda, 0xa6, 0xcf, 0xb3, 0x37, 0x4b, + 0x4d, 0x31, 0xb5, 0xc9, 0xa0, 0xdc, 0x58, 0x24, + 0x8a, 0xf6, 0x72, 0x0e, 0x67, 0x1b, 0x9f, 0xe3, + 0xde, 0xa2, 0x26, 0x5a, 0x33, 0x4f, 0xcb, 0xb7, + 0x19, 0x65, 0xe1, 0x9d, 0xf4, 0x88, 0x0c, 0x70, + 0xec, 0x90, 0x14, 0x68, 0x01, 0x7d, 0xf9, 0x85, + 0x2b, 0x57, 0xd3, 0xaf, 0xc6, 0xba, 0x3e, 0x42, + 0x7f, 0x03, 0x87, 0xfb, 0x92, 0xee, 0x6a, 0x16, + 0xb8, 0xc4, 0x40, 0x3c, 0x55, 0x29, 0xad, 0xd1, + 0xd7, 0xab, 0x2f, 0x53, 0x3a, 0x46, 0xc2, 0xbe, + 0x10, 0x6c, 0xe8, 0x94, 0xfd, 0x81, 0x05, 0x79, + 0x44, 0x38, 0xbc, 0xc0, 0xa9, 0xd5, 0x51, 0x2d, + 0x83, 0xff, 0x7b, 0x07, 0x6e, 0x12, 0x96, 0xea, + 0x9a, 0xe6, 0x62, 0x1e, 0x77, 0x0b, 0x8f, 0xf3, + 0x5d, 0x21, 0xa5, 0xd9, 0xb0, 0xcc, 0x48, 0x34, + 0x09, 0x75, 0xf1, 0x8d, 0xe4, 0x98, 0x1c, 0x60, + 0xce, 0xb2, 0x36, 0x4a, 0x23, 0x5f, 0xdb, 0xa7, + 0xa1, 0xdd, 0x59, 0x25, 0x4c, 0x30, 0xb4, 0xc8, + 0x66, 0x1a, 0x9e, 0xe2, 0x8b, 0xf7, 0x73, 0x0f, + 0x32, 0x4e, 0xca, 0xb6, 0xdf, 0xa3, 0x27, 0x5b, + 0xf5, 0x89, 0x0d, 0x71, 0x18, 0x64, 0xe0, 0x9c, + }, + { + 0x00, 0x7d, 0xfa, 0x87, 0xe9, 0x94, 0x13, 0x6e, + 0xcf, 0xb2, 0x35, 0x48, 0x26, 0x5b, 0xdc, 0xa1, + 0x83, 0xfe, 0x79, 0x04, 0x6a, 0x17, 0x90, 0xed, + 0x4c, 0x31, 0xb6, 0xcb, 0xa5, 0xd8, 0x5f, 0x22, + 0x1b, 0x66, 0xe1, 0x9c, 0xf2, 0x8f, 0x08, 0x75, + 0xd4, 0xa9, 0x2e, 0x53, 0x3d, 0x40, 0xc7, 0xba, + 0x98, 0xe5, 0x62, 0x1f, 0x71, 0x0c, 0x8b, 0xf6, + 0x57, 0x2a, 0xad, 0xd0, 0xbe, 0xc3, 0x44, 0x39, + 0x36, 0x4b, 0xcc, 0xb1, 0xdf, 0xa2, 0x25, 0x58, + 0xf9, 0x84, 0x03, 0x7e, 0x10, 0x6d, 0xea, 0x97, + 0xb5, 0xc8, 0x4f, 0x32, 0x5c, 0x21, 0xa6, 0xdb, + 0x7a, 0x07, 0x80, 0xfd, 0x93, 0xee, 0x69, 0x14, + 0x2d, 0x50, 0xd7, 0xaa, 0xc4, 0xb9, 0x3e, 0x43, + 0xe2, 0x9f, 0x18, 0x65, 0x0b, 0x76, 0xf1, 0x8c, + 0xae, 0xd3, 0x54, 0x29, 0x47, 0x3a, 0xbd, 0xc0, + 0x61, 0x1c, 0x9b, 0xe6, 0x88, 0xf5, 0x72, 0x0f, + 0x6c, 0x11, 0x96, 0xeb, 0x85, 0xf8, 0x7f, 0x02, + 0xa3, 0xde, 0x59, 0x24, 0x4a, 0x37, 0xb0, 0xcd, + 0xef, 0x92, 0x15, 0x68, 0x06, 0x7b, 0xfc, 0x81, + 0x20, 0x5d, 0xda, 0xa7, 0xc9, 0xb4, 0x33, 0x4e, + 0x77, 0x0a, 0x8d, 0xf0, 0x9e, 0xe3, 0x64, 0x19, + 0xb8, 0xc5, 0x42, 0x3f, 0x51, 0x2c, 0xab, 0xd6, + 0xf4, 0x89, 0x0e, 0x73, 0x1d, 0x60, 0xe7, 0x9a, + 0x3b, 0x46, 0xc1, 0xbc, 0xd2, 0xaf, 0x28, 0x55, + 0x5a, 0x27, 0xa0, 0xdd, 0xb3, 0xce, 0x49, 0x34, + 0x95, 0xe8, 0x6f, 0x12, 0x7c, 0x01, 0x86, 0xfb, + 0xd9, 0xa4, 0x23, 0x5e, 0x30, 0x4d, 0xca, 0xb7, + 0x16, 0x6b, 0xec, 0x91, 0xff, 0x82, 0x05, 0x78, + 0x41, 0x3c, 0xbb, 0xc6, 0xa8, 0xd5, 0x52, 0x2f, + 0x8e, 0xf3, 0x74, 0x09, 0x67, 0x1a, 0x9d, 0xe0, + 0xc2, 0xbf, 0x38, 0x45, 0x2b, 0x56, 0xd1, 0xac, + 0x0d, 0x70, 0xf7, 0x8a, 0xe4, 0x99, 0x1e, 0x63, + }, + { + 0x00, 0x7e, 0xfc, 0x82, 0xe5, 0x9b, 0x19, 0x67, + 0xd7, 0xa9, 0x2b, 0x55, 0x32, 0x4c, 0xce, 0xb0, + 0xb3, 0xcd, 0x4f, 0x31, 0x56, 0x28, 0xaa, 0xd4, + 0x64, 0x1a, 0x98, 0xe6, 0x81, 0xff, 0x7d, 0x03, + 0x7b, 0x05, 0x87, 0xf9, 0x9e, 0xe0, 0x62, 0x1c, + 0xac, 0xd2, 0x50, 0x2e, 0x49, 0x37, 0xb5, 0xcb, + 0xc8, 0xb6, 0x34, 0x4a, 0x2d, 0x53, 0xd1, 0xaf, + 0x1f, 0x61, 0xe3, 0x9d, 0xfa, 0x84, 0x06, 0x78, + 0xf6, 0x88, 0x0a, 0x74, 0x13, 0x6d, 0xef, 0x91, + 0x21, 0x5f, 0xdd, 0xa3, 0xc4, 0xba, 0x38, 0x46, + 0x45, 0x3b, 0xb9, 0xc7, 0xa0, 0xde, 0x5c, 0x22, + 0x92, 0xec, 0x6e, 0x10, 0x77, 0x09, 0x8b, 0xf5, + 0x8d, 0xf3, 0x71, 0x0f, 0x68, 0x16, 0x94, 0xea, + 0x5a, 0x24, 0xa6, 0xd8, 0xbf, 0xc1, 0x43, 0x3d, + 0x3e, 0x40, 0xc2, 0xbc, 0xdb, 0xa5, 0x27, 0x59, + 0xe9, 0x97, 0x15, 0x6b, 0x0c, 0x72, 0xf0, 0x8e, + 0xf1, 0x8f, 0x0d, 0x73, 0x14, 0x6a, 0xe8, 0x96, + 0x26, 0x58, 0xda, 0xa4, 0xc3, 0xbd, 0x3f, 0x41, + 0x42, 0x3c, 0xbe, 0xc0, 0xa7, 0xd9, 0x5b, 0x25, + 0x95, 0xeb, 0x69, 0x17, 0x70, 0x0e, 0x8c, 0xf2, + 0x8a, 0xf4, 0x76, 0x08, 0x6f, 0x11, 0x93, 0xed, + 0x5d, 0x23, 0xa1, 0xdf, 0xb8, 0xc6, 0x44, 0x3a, + 0x39, 0x47, 0xc5, 0xbb, 0xdc, 0xa2, 0x20, 0x5e, + 0xee, 0x90, 0x12, 0x6c, 0x0b, 0x75, 0xf7, 0x89, + 0x07, 0x79, 0xfb, 0x85, 0xe2, 0x9c, 0x1e, 0x60, + 0xd0, 0xae, 0x2c, 0x52, 0x35, 0x4b, 0xc9, 0xb7, + 0xb4, 0xca, 0x48, 0x36, 0x51, 0x2f, 0xad, 0xd3, + 0x63, 0x1d, 0x9f, 0xe1, 0x86, 0xf8, 0x7a, 0x04, + 0x7c, 0x02, 0x80, 0xfe, 0x99, 0xe7, 0x65, 0x1b, + 0xab, 0xd5, 0x57, 0x29, 0x4e, 0x30, 0xb2, 0xcc, + 0xcf, 0xb1, 0x33, 0x4d, 0x2a, 0x54, 0xd6, 0xa8, + 0x18, 0x66, 0xe4, 0x9a, 0xfd, 0x83, 0x01, 0x7f, + }, + { + 0x00, 0x7f, 0xfe, 0x81, 0xe1, 0x9e, 0x1f, 0x60, + 0xdf, 0xa0, 0x21, 0x5e, 0x3e, 0x41, 0xc0, 0xbf, + 0xa3, 0xdc, 0x5d, 0x22, 0x42, 0x3d, 0xbc, 0xc3, + 0x7c, 0x03, 0x82, 0xfd, 0x9d, 0xe2, 0x63, 0x1c, + 0x5b, 0x24, 0xa5, 0xda, 0xba, 0xc5, 0x44, 0x3b, + 0x84, 0xfb, 0x7a, 0x05, 0x65, 0x1a, 0x9b, 0xe4, + 0xf8, 0x87, 0x06, 0x79, 0x19, 0x66, 0xe7, 0x98, + 0x27, 0x58, 0xd9, 0xa6, 0xc6, 0xb9, 0x38, 0x47, + 0xb6, 0xc9, 0x48, 0x37, 0x57, 0x28, 0xa9, 0xd6, + 0x69, 0x16, 0x97, 0xe8, 0x88, 0xf7, 0x76, 0x09, + 0x15, 0x6a, 0xeb, 0x94, 0xf4, 0x8b, 0x0a, 0x75, + 0xca, 0xb5, 0x34, 0x4b, 0x2b, 0x54, 0xd5, 0xaa, + 0xed, 0x92, 0x13, 0x6c, 0x0c, 0x73, 0xf2, 0x8d, + 0x32, 0x4d, 0xcc, 0xb3, 0xd3, 0xac, 0x2d, 0x52, + 0x4e, 0x31, 0xb0, 0xcf, 0xaf, 0xd0, 0x51, 0x2e, + 0x91, 0xee, 0x6f, 0x10, 0x70, 0x0f, 0x8e, 0xf1, + 0x71, 0x0e, 0x8f, 0xf0, 0x90, 0xef, 0x6e, 0x11, + 0xae, 0xd1, 0x50, 0x2f, 0x4f, 0x30, 0xb1, 0xce, + 0xd2, 0xad, 0x2c, 0x53, 0x33, 0x4c, 0xcd, 0xb2, + 0x0d, 0x72, 0xf3, 0x8c, 0xec, 0x93, 0x12, 0x6d, + 0x2a, 0x55, 0xd4, 0xab, 0xcb, 0xb4, 0x35, 0x4a, + 0xf5, 0x8a, 0x0b, 0x74, 0x14, 0x6b, 0xea, 0x95, + 0x89, 0xf6, 0x77, 0x08, 0x68, 0x17, 0x96, 0xe9, + 0x56, 0x29, 0xa8, 0xd7, 0xb7, 0xc8, 0x49, 0x36, + 0xc7, 0xb8, 0x39, 0x46, 0x26, 0x59, 0xd8, 0xa7, + 0x18, 0x67, 0xe6, 0x99, 0xf9, 0x86, 0x07, 0x78, + 0x64, 0x1b, 0x9a, 0xe5, 0x85, 0xfa, 0x7b, 0x04, + 0xbb, 0xc4, 0x45, 0x3a, 0x5a, 0x25, 0xa4, 0xdb, + 0x9c, 0xe3, 0x62, 0x1d, 0x7d, 0x02, 0x83, 0xfc, + 0x43, 0x3c, 0xbd, 0xc2, 0xa2, 0xdd, 0x5c, 0x23, + 0x3f, 0x40, 0xc1, 0xbe, 0xde, 0xa1, 0x20, 0x5f, + 0xe0, 0x9f, 0x1e, 0x61, 0x01, 0x7e, 0xff, 0x80, + }, + { + 0x00, 0x80, 0x1d, 0x9d, 0x3a, 0xba, 0x27, 0xa7, + 0x74, 0xf4, 0x69, 0xe9, 0x4e, 0xce, 0x53, 0xd3, + 0xe8, 0x68, 0xf5, 0x75, 0xd2, 0x52, 0xcf, 0x4f, + 0x9c, 0x1c, 0x81, 0x01, 0xa6, 0x26, 0xbb, 0x3b, + 0xcd, 0x4d, 0xd0, 0x50, 0xf7, 0x77, 0xea, 0x6a, + 0xb9, 0x39, 0xa4, 0x24, 0x83, 0x03, 0x9e, 0x1e, + 0x25, 0xa5, 0x38, 0xb8, 0x1f, 0x9f, 0x02, 0x82, + 0x51, 0xd1, 0x4c, 0xcc, 0x6b, 0xeb, 0x76, 0xf6, + 0x87, 0x07, 0x9a, 0x1a, 0xbd, 0x3d, 0xa0, 0x20, + 0xf3, 0x73, 0xee, 0x6e, 0xc9, 0x49, 0xd4, 0x54, + 0x6f, 0xef, 0x72, 0xf2, 0x55, 0xd5, 0x48, 0xc8, + 0x1b, 0x9b, 0x06, 0x86, 0x21, 0xa1, 0x3c, 0xbc, + 0x4a, 0xca, 0x57, 0xd7, 0x70, 0xf0, 0x6d, 0xed, + 0x3e, 0xbe, 0x23, 0xa3, 0x04, 0x84, 0x19, 0x99, + 0xa2, 0x22, 0xbf, 0x3f, 0x98, 0x18, 0x85, 0x05, + 0xd6, 0x56, 0xcb, 0x4b, 0xec, 0x6c, 0xf1, 0x71, + 0x13, 0x93, 0x0e, 0x8e, 0x29, 0xa9, 0x34, 0xb4, + 0x67, 0xe7, 0x7a, 0xfa, 0x5d, 0xdd, 0x40, 0xc0, + 0xfb, 0x7b, 0xe6, 0x66, 0xc1, 0x41, 0xdc, 0x5c, + 0x8f, 0x0f, 0x92, 0x12, 0xb5, 0x35, 0xa8, 0x28, + 0xde, 0x5e, 0xc3, 0x43, 0xe4, 0x64, 0xf9, 0x79, + 0xaa, 0x2a, 0xb7, 0x37, 0x90, 0x10, 0x8d, 0x0d, + 0x36, 0xb6, 0x2b, 0xab, 0x0c, 0x8c, 0x11, 0x91, + 0x42, 0xc2, 0x5f, 0xdf, 0x78, 0xf8, 0x65, 0xe5, + 0x94, 0x14, 0x89, 0x09, 0xae, 0x2e, 0xb3, 0x33, + 0xe0, 0x60, 0xfd, 0x7d, 0xda, 0x5a, 0xc7, 0x47, + 0x7c, 0xfc, 0x61, 0xe1, 0x46, 0xc6, 0x5b, 0xdb, + 0x08, 0x88, 0x15, 0x95, 0x32, 0xb2, 0x2f, 0xaf, + 0x59, 0xd9, 0x44, 0xc4, 0x63, 0xe3, 0x7e, 0xfe, + 0x2d, 0xad, 0x30, 0xb0, 0x17, 0x97, 0x0a, 0x8a, + 0xb1, 0x31, 0xac, 0x2c, 0x8b, 0x0b, 0x96, 0x16, + 0xc5, 0x45, 0xd8, 0x58, 0xff, 0x7f, 0xe2, 0x62, + }, + { + 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, + 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc, + 0xf8, 0x79, 0xe7, 0x66, 0xc6, 0x47, 0xd9, 0x58, + 0x84, 0x05, 0x9b, 0x1a, 0xba, 0x3b, 0xa5, 0x24, + 0xed, 0x6c, 0xf2, 0x73, 0xd3, 0x52, 0xcc, 0x4d, + 0x91, 0x10, 0x8e, 0x0f, 0xaf, 0x2e, 0xb0, 0x31, + 0x15, 0x94, 0x0a, 0x8b, 0x2b, 0xaa, 0x34, 0xb5, + 0x69, 0xe8, 0x76, 0xf7, 0x57, 0xd6, 0x48, 0xc9, + 0xc7, 0x46, 0xd8, 0x59, 0xf9, 0x78, 0xe6, 0x67, + 0xbb, 0x3a, 0xa4, 0x25, 0x85, 0x04, 0x9a, 0x1b, + 0x3f, 0xbe, 0x20, 0xa1, 0x01, 0x80, 0x1e, 0x9f, + 0x43, 0xc2, 0x5c, 0xdd, 0x7d, 0xfc, 0x62, 0xe3, + 0x2a, 0xab, 0x35, 0xb4, 0x14, 0x95, 0x0b, 0x8a, + 0x56, 0xd7, 0x49, 0xc8, 0x68, 0xe9, 0x77, 0xf6, + 0xd2, 0x53, 0xcd, 0x4c, 0xec, 0x6d, 0xf3, 0x72, + 0xae, 0x2f, 0xb1, 0x30, 0x90, 0x11, 0x8f, 0x0e, + 0x93, 0x12, 0x8c, 0x0d, 0xad, 0x2c, 0xb2, 0x33, + 0xef, 0x6e, 0xf0, 0x71, 0xd1, 0x50, 0xce, 0x4f, + 0x6b, 0xea, 0x74, 0xf5, 0x55, 0xd4, 0x4a, 0xcb, + 0x17, 0x96, 0x08, 0x89, 0x29, 0xa8, 0x36, 0xb7, + 0x7e, 0xff, 0x61, 0xe0, 0x40, 0xc1, 0x5f, 0xde, + 0x02, 0x83, 0x1d, 0x9c, 0x3c, 0xbd, 0x23, 0xa2, + 0x86, 0x07, 0x99, 0x18, 0xb8, 0x39, 0xa7, 0x26, + 0xfa, 0x7b, 0xe5, 0x64, 0xc4, 0x45, 0xdb, 0x5a, + 0x54, 0xd5, 0x4b, 0xca, 0x6a, 0xeb, 0x75, 0xf4, + 0x28, 0xa9, 0x37, 0xb6, 0x16, 0x97, 0x09, 0x88, + 0xac, 0x2d, 0xb3, 0x32, 0x92, 0x13, 0x8d, 0x0c, + 0xd0, 0x51, 0xcf, 0x4e, 0xee, 0x6f, 0xf1, 0x70, + 0xb9, 0x38, 0xa6, 0x27, 0x87, 0x06, 0x98, 0x19, + 0xc5, 0x44, 0xda, 0x5b, 0xfb, 0x7a, 0xe4, 0x65, + 0x41, 0xc0, 0x5e, 0xdf, 0x7f, 0xfe, 0x60, 0xe1, + 0x3d, 0xbc, 0x22, 0xa3, 0x03, 0x82, 0x1c, 0x9d, + }, + { + 0x00, 0x82, 0x19, 0x9b, 0x32, 0xb0, 0x2b, 0xa9, + 0x64, 0xe6, 0x7d, 0xff, 0x56, 0xd4, 0x4f, 0xcd, + 0xc8, 0x4a, 0xd1, 0x53, 0xfa, 0x78, 0xe3, 0x61, + 0xac, 0x2e, 0xb5, 0x37, 0x9e, 0x1c, 0x87, 0x05, + 0x8d, 0x0f, 0x94, 0x16, 0xbf, 0x3d, 0xa6, 0x24, + 0xe9, 0x6b, 0xf0, 0x72, 0xdb, 0x59, 0xc2, 0x40, + 0x45, 0xc7, 0x5c, 0xde, 0x77, 0xf5, 0x6e, 0xec, + 0x21, 0xa3, 0x38, 0xba, 0x13, 0x91, 0x0a, 0x88, + 0x07, 0x85, 0x1e, 0x9c, 0x35, 0xb7, 0x2c, 0xae, + 0x63, 0xe1, 0x7a, 0xf8, 0x51, 0xd3, 0x48, 0xca, + 0xcf, 0x4d, 0xd6, 0x54, 0xfd, 0x7f, 0xe4, 0x66, + 0xab, 0x29, 0xb2, 0x30, 0x99, 0x1b, 0x80, 0x02, + 0x8a, 0x08, 0x93, 0x11, 0xb8, 0x3a, 0xa1, 0x23, + 0xee, 0x6c, 0xf7, 0x75, 0xdc, 0x5e, 0xc5, 0x47, + 0x42, 0xc0, 0x5b, 0xd9, 0x70, 0xf2, 0x69, 0xeb, + 0x26, 0xa4, 0x3f, 0xbd, 0x14, 0x96, 0x0d, 0x8f, + 0x0e, 0x8c, 0x17, 0x95, 0x3c, 0xbe, 0x25, 0xa7, + 0x6a, 0xe8, 0x73, 0xf1, 0x58, 0xda, 0x41, 0xc3, + 0xc6, 0x44, 0xdf, 0x5d, 0xf4, 0x76, 0xed, 0x6f, + 0xa2, 0x20, 0xbb, 0x39, 0x90, 0x12, 0x89, 0x0b, + 0x83, 0x01, 0x9a, 0x18, 0xb1, 0x33, 0xa8, 0x2a, + 0xe7, 0x65, 0xfe, 0x7c, 0xd5, 0x57, 0xcc, 0x4e, + 0x4b, 0xc9, 0x52, 0xd0, 0x79, 0xfb, 0x60, 0xe2, + 0x2f, 0xad, 0x36, 0xb4, 0x1d, 0x9f, 0x04, 0x86, + 0x09, 0x8b, 0x10, 0x92, 0x3b, 0xb9, 0x22, 0xa0, + 0x6d, 0xef, 0x74, 0xf6, 0x5f, 0xdd, 0x46, 0xc4, + 0xc1, 0x43, 0xd8, 0x5a, 0xf3, 0x71, 0xea, 0x68, + 0xa5, 0x27, 0xbc, 0x3e, 0x97, 0x15, 0x8e, 0x0c, + 0x84, 0x06, 0x9d, 0x1f, 0xb6, 0x34, 0xaf, 0x2d, + 0xe0, 0x62, 0xf9, 0x7b, 0xd2, 0x50, 0xcb, 0x49, + 0x4c, 0xce, 0x55, 0xd7, 0x7e, 0xfc, 0x67, 0xe5, + 0x28, 0xaa, 0x31, 0xb3, 0x1a, 0x98, 0x03, 0x81, + }, + { + 0x00, 0x83, 0x1b, 0x98, 0x36, 0xb5, 0x2d, 0xae, + 0x6c, 0xef, 0x77, 0xf4, 0x5a, 0xd9, 0x41, 0xc2, + 0xd8, 0x5b, 0xc3, 0x40, 0xee, 0x6d, 0xf5, 0x76, + 0xb4, 0x37, 0xaf, 0x2c, 0x82, 0x01, 0x99, 0x1a, + 0xad, 0x2e, 0xb6, 0x35, 0x9b, 0x18, 0x80, 0x03, + 0xc1, 0x42, 0xda, 0x59, 0xf7, 0x74, 0xec, 0x6f, + 0x75, 0xf6, 0x6e, 0xed, 0x43, 0xc0, 0x58, 0xdb, + 0x19, 0x9a, 0x02, 0x81, 0x2f, 0xac, 0x34, 0xb7, + 0x47, 0xc4, 0x5c, 0xdf, 0x71, 0xf2, 0x6a, 0xe9, + 0x2b, 0xa8, 0x30, 0xb3, 0x1d, 0x9e, 0x06, 0x85, + 0x9f, 0x1c, 0x84, 0x07, 0xa9, 0x2a, 0xb2, 0x31, + 0xf3, 0x70, 0xe8, 0x6b, 0xc5, 0x46, 0xde, 0x5d, + 0xea, 0x69, 0xf1, 0x72, 0xdc, 0x5f, 0xc7, 0x44, + 0x86, 0x05, 0x9d, 0x1e, 0xb0, 0x33, 0xab, 0x28, + 0x32, 0xb1, 0x29, 0xaa, 0x04, 0x87, 0x1f, 0x9c, + 0x5e, 0xdd, 0x45, 0xc6, 0x68, 0xeb, 0x73, 0xf0, + 0x8e, 0x0d, 0x95, 0x16, 0xb8, 0x3b, 0xa3, 0x20, + 0xe2, 0x61, 0xf9, 0x7a, 0xd4, 0x57, 0xcf, 0x4c, + 0x56, 0xd5, 0x4d, 0xce, 0x60, 0xe3, 0x7b, 0xf8, + 0x3a, 0xb9, 0x21, 0xa2, 0x0c, 0x8f, 0x17, 0x94, + 0x23, 0xa0, 0x38, 0xbb, 0x15, 0x96, 0x0e, 0x8d, + 0x4f, 0xcc, 0x54, 0xd7, 0x79, 0xfa, 0x62, 0xe1, + 0xfb, 0x78, 0xe0, 0x63, 0xcd, 0x4e, 0xd6, 0x55, + 0x97, 0x14, 0x8c, 0x0f, 0xa1, 0x22, 0xba, 0x39, + 0xc9, 0x4a, 0xd2, 0x51, 0xff, 0x7c, 0xe4, 0x67, + 0xa5, 0x26, 0xbe, 0x3d, 0x93, 0x10, 0x88, 0x0b, + 0x11, 0x92, 0x0a, 0x89, 0x27, 0xa4, 0x3c, 0xbf, + 0x7d, 0xfe, 0x66, 0xe5, 0x4b, 0xc8, 0x50, 0xd3, + 0x64, 0xe7, 0x7f, 0xfc, 0x52, 0xd1, 0x49, 0xca, + 0x08, 0x8b, 0x13, 0x90, 0x3e, 0xbd, 0x25, 0xa6, + 0xbc, 0x3f, 0xa7, 0x24, 0x8a, 0x09, 0x91, 0x12, + 0xd0, 0x53, 0xcb, 0x48, 0xe6, 0x65, 0xfd, 0x7e, + }, + { + 0x00, 0x84, 0x15, 0x91, 0x2a, 0xae, 0x3f, 0xbb, + 0x54, 0xd0, 0x41, 0xc5, 0x7e, 0xfa, 0x6b, 0xef, + 0xa8, 0x2c, 0xbd, 0x39, 0x82, 0x06, 0x97, 0x13, + 0xfc, 0x78, 0xe9, 0x6d, 0xd6, 0x52, 0xc3, 0x47, + 0x4d, 0xc9, 0x58, 0xdc, 0x67, 0xe3, 0x72, 0xf6, + 0x19, 0x9d, 0x0c, 0x88, 0x33, 0xb7, 0x26, 0xa2, + 0xe5, 0x61, 0xf0, 0x74, 0xcf, 0x4b, 0xda, 0x5e, + 0xb1, 0x35, 0xa4, 0x20, 0x9b, 0x1f, 0x8e, 0x0a, + 0x9a, 0x1e, 0x8f, 0x0b, 0xb0, 0x34, 0xa5, 0x21, + 0xce, 0x4a, 0xdb, 0x5f, 0xe4, 0x60, 0xf1, 0x75, + 0x32, 0xb6, 0x27, 0xa3, 0x18, 0x9c, 0x0d, 0x89, + 0x66, 0xe2, 0x73, 0xf7, 0x4c, 0xc8, 0x59, 0xdd, + 0xd7, 0x53, 0xc2, 0x46, 0xfd, 0x79, 0xe8, 0x6c, + 0x83, 0x07, 0x96, 0x12, 0xa9, 0x2d, 0xbc, 0x38, + 0x7f, 0xfb, 0x6a, 0xee, 0x55, 0xd1, 0x40, 0xc4, + 0x2b, 0xaf, 0x3e, 0xba, 0x01, 0x85, 0x14, 0x90, + 0x29, 0xad, 0x3c, 0xb8, 0x03, 0x87, 0x16, 0x92, + 0x7d, 0xf9, 0x68, 0xec, 0x57, 0xd3, 0x42, 0xc6, + 0x81, 0x05, 0x94, 0x10, 0xab, 0x2f, 0xbe, 0x3a, + 0xd5, 0x51, 0xc0, 0x44, 0xff, 0x7b, 0xea, 0x6e, + 0x64, 0xe0, 0x71, 0xf5, 0x4e, 0xca, 0x5b, 0xdf, + 0x30, 0xb4, 0x25, 0xa1, 0x1a, 0x9e, 0x0f, 0x8b, + 0xcc, 0x48, 0xd9, 0x5d, 0xe6, 0x62, 0xf3, 0x77, + 0x98, 0x1c, 0x8d, 0x09, 0xb2, 0x36, 0xa7, 0x23, + 0xb3, 0x37, 0xa6, 0x22, 0x99, 0x1d, 0x8c, 0x08, + 0xe7, 0x63, 0xf2, 0x76, 0xcd, 0x49, 0xd8, 0x5c, + 0x1b, 0x9f, 0x0e, 0x8a, 0x31, 0xb5, 0x24, 0xa0, + 0x4f, 0xcb, 0x5a, 0xde, 0x65, 0xe1, 0x70, 0xf4, + 0xfe, 0x7a, 0xeb, 0x6f, 0xd4, 0x50, 0xc1, 0x45, + 0xaa, 0x2e, 0xbf, 0x3b, 0x80, 0x04, 0x95, 0x11, + 0x56, 0xd2, 0x43, 0xc7, 0x7c, 0xf8, 0x69, 0xed, + 0x02, 0x86, 0x17, 0x93, 0x28, 0xac, 0x3d, 0xb9, + }, + { + 0x00, 0x85, 0x17, 0x92, 0x2e, 0xab, 0x39, 0xbc, + 0x5c, 0xd9, 0x4b, 0xce, 0x72, 0xf7, 0x65, 0xe0, + 0xb8, 0x3d, 0xaf, 0x2a, 0x96, 0x13, 0x81, 0x04, + 0xe4, 0x61, 0xf3, 0x76, 0xca, 0x4f, 0xdd, 0x58, + 0x6d, 0xe8, 0x7a, 0xff, 0x43, 0xc6, 0x54, 0xd1, + 0x31, 0xb4, 0x26, 0xa3, 0x1f, 0x9a, 0x08, 0x8d, + 0xd5, 0x50, 0xc2, 0x47, 0xfb, 0x7e, 0xec, 0x69, + 0x89, 0x0c, 0x9e, 0x1b, 0xa7, 0x22, 0xb0, 0x35, + 0xda, 0x5f, 0xcd, 0x48, 0xf4, 0x71, 0xe3, 0x66, + 0x86, 0x03, 0x91, 0x14, 0xa8, 0x2d, 0xbf, 0x3a, + 0x62, 0xe7, 0x75, 0xf0, 0x4c, 0xc9, 0x5b, 0xde, + 0x3e, 0xbb, 0x29, 0xac, 0x10, 0x95, 0x07, 0x82, + 0xb7, 0x32, 0xa0, 0x25, 0x99, 0x1c, 0x8e, 0x0b, + 0xeb, 0x6e, 0xfc, 0x79, 0xc5, 0x40, 0xd2, 0x57, + 0x0f, 0x8a, 0x18, 0x9d, 0x21, 0xa4, 0x36, 0xb3, + 0x53, 0xd6, 0x44, 0xc1, 0x7d, 0xf8, 0x6a, 0xef, + 0xa9, 0x2c, 0xbe, 0x3b, 0x87, 0x02, 0x90, 0x15, + 0xf5, 0x70, 0xe2, 0x67, 0xdb, 0x5e, 0xcc, 0x49, + 0x11, 0x94, 0x06, 0x83, 0x3f, 0xba, 0x28, 0xad, + 0x4d, 0xc8, 0x5a, 0xdf, 0x63, 0xe6, 0x74, 0xf1, + 0xc4, 0x41, 0xd3, 0x56, 0xea, 0x6f, 0xfd, 0x78, + 0x98, 0x1d, 0x8f, 0x0a, 0xb6, 0x33, 0xa1, 0x24, + 0x7c, 0xf9, 0x6b, 0xee, 0x52, 0xd7, 0x45, 0xc0, + 0x20, 0xa5, 0x37, 0xb2, 0x0e, 0x8b, 0x19, 0x9c, + 0x73, 0xf6, 0x64, 0xe1, 0x5d, 0xd8, 0x4a, 0xcf, + 0x2f, 0xaa, 0x38, 0xbd, 0x01, 0x84, 0x16, 0x93, + 0xcb, 0x4e, 0xdc, 0x59, 0xe5, 0x60, 0xf2, 0x77, + 0x97, 0x12, 0x80, 0x05, 0xb9, 0x3c, 0xae, 0x2b, + 0x1e, 0x9b, 0x09, 0x8c, 0x30, 0xb5, 0x27, 0xa2, + 0x42, 0xc7, 0x55, 0xd0, 0x6c, 0xe9, 0x7b, 0xfe, + 0xa6, 0x23, 0xb1, 0x34, 0x88, 0x0d, 0x9f, 0x1a, + 0xfa, 0x7f, 0xed, 0x68, 0xd4, 0x51, 0xc3, 0x46, + }, + { + 0x00, 0x86, 0x11, 0x97, 0x22, 0xa4, 0x33, 0xb5, + 0x44, 0xc2, 0x55, 0xd3, 0x66, 0xe0, 0x77, 0xf1, + 0x88, 0x0e, 0x99, 0x1f, 0xaa, 0x2c, 0xbb, 0x3d, + 0xcc, 0x4a, 0xdd, 0x5b, 0xee, 0x68, 0xff, 0x79, + 0x0d, 0x8b, 0x1c, 0x9a, 0x2f, 0xa9, 0x3e, 0xb8, + 0x49, 0xcf, 0x58, 0xde, 0x6b, 0xed, 0x7a, 0xfc, + 0x85, 0x03, 0x94, 0x12, 0xa7, 0x21, 0xb6, 0x30, + 0xc1, 0x47, 0xd0, 0x56, 0xe3, 0x65, 0xf2, 0x74, + 0x1a, 0x9c, 0x0b, 0x8d, 0x38, 0xbe, 0x29, 0xaf, + 0x5e, 0xd8, 0x4f, 0xc9, 0x7c, 0xfa, 0x6d, 0xeb, + 0x92, 0x14, 0x83, 0x05, 0xb0, 0x36, 0xa1, 0x27, + 0xd6, 0x50, 0xc7, 0x41, 0xf4, 0x72, 0xe5, 0x63, + 0x17, 0x91, 0x06, 0x80, 0x35, 0xb3, 0x24, 0xa2, + 0x53, 0xd5, 0x42, 0xc4, 0x71, 0xf7, 0x60, 0xe6, + 0x9f, 0x19, 0x8e, 0x08, 0xbd, 0x3b, 0xac, 0x2a, + 0xdb, 0x5d, 0xca, 0x4c, 0xf9, 0x7f, 0xe8, 0x6e, + 0x34, 0xb2, 0x25, 0xa3, 0x16, 0x90, 0x07, 0x81, + 0x70, 0xf6, 0x61, 0xe7, 0x52, 0xd4, 0x43, 0xc5, + 0xbc, 0x3a, 0xad, 0x2b, 0x9e, 0x18, 0x8f, 0x09, + 0xf8, 0x7e, 0xe9, 0x6f, 0xda, 0x5c, 0xcb, 0x4d, + 0x39, 0xbf, 0x28, 0xae, 0x1b, 0x9d, 0x0a, 0x8c, + 0x7d, 0xfb, 0x6c, 0xea, 0x5f, 0xd9, 0x4e, 0xc8, + 0xb1, 0x37, 0xa0, 0x26, 0x93, 0x15, 0x82, 0x04, + 0xf5, 0x73, 0xe4, 0x62, 0xd7, 0x51, 0xc6, 0x40, + 0x2e, 0xa8, 0x3f, 0xb9, 0x0c, 0x8a, 0x1d, 0x9b, + 0x6a, 0xec, 0x7b, 0xfd, 0x48, 0xce, 0x59, 0xdf, + 0xa6, 0x20, 0xb7, 0x31, 0x84, 0x02, 0x95, 0x13, + 0xe2, 0x64, 0xf3, 0x75, 0xc0, 0x46, 0xd1, 0x57, + 0x23, 0xa5, 0x32, 0xb4, 0x01, 0x87, 0x10, 0x96, + 0x67, 0xe1, 0x76, 0xf0, 0x45, 0xc3, 0x54, 0xd2, + 0xab, 0x2d, 0xba, 0x3c, 0x89, 0x0f, 0x98, 0x1e, + 0xef, 0x69, 0xfe, 0x78, 0xcd, 0x4b, 0xdc, 0x5a, + }, + { + 0x00, 0x87, 0x13, 0x94, 0x26, 0xa1, 0x35, 0xb2, + 0x4c, 0xcb, 0x5f, 0xd8, 0x6a, 0xed, 0x79, 0xfe, + 0x98, 0x1f, 0x8b, 0x0c, 0xbe, 0x39, 0xad, 0x2a, + 0xd4, 0x53, 0xc7, 0x40, 0xf2, 0x75, 0xe1, 0x66, + 0x2d, 0xaa, 0x3e, 0xb9, 0x0b, 0x8c, 0x18, 0x9f, + 0x61, 0xe6, 0x72, 0xf5, 0x47, 0xc0, 0x54, 0xd3, + 0xb5, 0x32, 0xa6, 0x21, 0x93, 0x14, 0x80, 0x07, + 0xf9, 0x7e, 0xea, 0x6d, 0xdf, 0x58, 0xcc, 0x4b, + 0x5a, 0xdd, 0x49, 0xce, 0x7c, 0xfb, 0x6f, 0xe8, + 0x16, 0x91, 0x05, 0x82, 0x30, 0xb7, 0x23, 0xa4, + 0xc2, 0x45, 0xd1, 0x56, 0xe4, 0x63, 0xf7, 0x70, + 0x8e, 0x09, 0x9d, 0x1a, 0xa8, 0x2f, 0xbb, 0x3c, + 0x77, 0xf0, 0x64, 0xe3, 0x51, 0xd6, 0x42, 0xc5, + 0x3b, 0xbc, 0x28, 0xaf, 0x1d, 0x9a, 0x0e, 0x89, + 0xef, 0x68, 0xfc, 0x7b, 0xc9, 0x4e, 0xda, 0x5d, + 0xa3, 0x24, 0xb0, 0x37, 0x85, 0x02, 0x96, 0x11, + 0xb4, 0x33, 0xa7, 0x20, 0x92, 0x15, 0x81, 0x06, + 0xf8, 0x7f, 0xeb, 0x6c, 0xde, 0x59, 0xcd, 0x4a, + 0x2c, 0xab, 0x3f, 0xb8, 0x0a, 0x8d, 0x19, 0x9e, + 0x60, 0xe7, 0x73, 0xf4, 0x46, 0xc1, 0x55, 0xd2, + 0x99, 0x1e, 0x8a, 0x0d, 0xbf, 0x38, 0xac, 0x2b, + 0xd5, 0x52, 0xc6, 0x41, 0xf3, 0x74, 0xe0, 0x67, + 0x01, 0x86, 0x12, 0x95, 0x27, 0xa0, 0x34, 0xb3, + 0x4d, 0xca, 0x5e, 0xd9, 0x6b, 0xec, 0x78, 0xff, + 0xee, 0x69, 0xfd, 0x7a, 0xc8, 0x4f, 0xdb, 0x5c, + 0xa2, 0x25, 0xb1, 0x36, 0x84, 0x03, 0x97, 0x10, + 0x76, 0xf1, 0x65, 0xe2, 0x50, 0xd7, 0x43, 0xc4, + 0x3a, 0xbd, 0x29, 0xae, 0x1c, 0x9b, 0x0f, 0x88, + 0xc3, 0x44, 0xd0, 0x57, 0xe5, 0x62, 0xf6, 0x71, + 0x8f, 0x08, 0x9c, 0x1b, 0xa9, 0x2e, 0xba, 0x3d, + 0x5b, 0xdc, 0x48, 0xcf, 0x7d, 0xfa, 0x6e, 0xe9, + 0x17, 0x90, 0x04, 0x83, 0x31, 0xb6, 0x22, 0xa5, + }, + { + 0x00, 0x88, 0x0d, 0x85, 0x1a, 0x92, 0x17, 0x9f, + 0x34, 0xbc, 0x39, 0xb1, 0x2e, 0xa6, 0x23, 0xab, + 0x68, 0xe0, 0x65, 0xed, 0x72, 0xfa, 0x7f, 0xf7, + 0x5c, 0xd4, 0x51, 0xd9, 0x46, 0xce, 0x4b, 0xc3, + 0xd0, 0x58, 0xdd, 0x55, 0xca, 0x42, 0xc7, 0x4f, + 0xe4, 0x6c, 0xe9, 0x61, 0xfe, 0x76, 0xf3, 0x7b, + 0xb8, 0x30, 0xb5, 0x3d, 0xa2, 0x2a, 0xaf, 0x27, + 0x8c, 0x04, 0x81, 0x09, 0x96, 0x1e, 0x9b, 0x13, + 0xbd, 0x35, 0xb0, 0x38, 0xa7, 0x2f, 0xaa, 0x22, + 0x89, 0x01, 0x84, 0x0c, 0x93, 0x1b, 0x9e, 0x16, + 0xd5, 0x5d, 0xd8, 0x50, 0xcf, 0x47, 0xc2, 0x4a, + 0xe1, 0x69, 0xec, 0x64, 0xfb, 0x73, 0xf6, 0x7e, + 0x6d, 0xe5, 0x60, 0xe8, 0x77, 0xff, 0x7a, 0xf2, + 0x59, 0xd1, 0x54, 0xdc, 0x43, 0xcb, 0x4e, 0xc6, + 0x05, 0x8d, 0x08, 0x80, 0x1f, 0x97, 0x12, 0x9a, + 0x31, 0xb9, 0x3c, 0xb4, 0x2b, 0xa3, 0x26, 0xae, + 0x67, 0xef, 0x6a, 0xe2, 0x7d, 0xf5, 0x70, 0xf8, + 0x53, 0xdb, 0x5e, 0xd6, 0x49, 0xc1, 0x44, 0xcc, + 0x0f, 0x87, 0x02, 0x8a, 0x15, 0x9d, 0x18, 0x90, + 0x3b, 0xb3, 0x36, 0xbe, 0x21, 0xa9, 0x2c, 0xa4, + 0xb7, 0x3f, 0xba, 0x32, 0xad, 0x25, 0xa0, 0x28, + 0x83, 0x0b, 0x8e, 0x06, 0x99, 0x11, 0x94, 0x1c, + 0xdf, 0x57, 0xd2, 0x5a, 0xc5, 0x4d, 0xc8, 0x40, + 0xeb, 0x63, 0xe6, 0x6e, 0xf1, 0x79, 0xfc, 0x74, + 0xda, 0x52, 0xd7, 0x5f, 0xc0, 0x48, 0xcd, 0x45, + 0xee, 0x66, 0xe3, 0x6b, 0xf4, 0x7c, 0xf9, 0x71, + 0xb2, 0x3a, 0xbf, 0x37, 0xa8, 0x20, 0xa5, 0x2d, + 0x86, 0x0e, 0x8b, 0x03, 0x9c, 0x14, 0x91, 0x19, + 0x0a, 0x82, 0x07, 0x8f, 0x10, 0x98, 0x1d, 0x95, + 0x3e, 0xb6, 0x33, 0xbb, 0x24, 0xac, 0x29, 0xa1, + 0x62, 0xea, 0x6f, 0xe7, 0x78, 0xf0, 0x75, 0xfd, + 0x56, 0xde, 0x5b, 0xd3, 0x4c, 0xc4, 0x41, 0xc9, + }, + { + 0x00, 0x89, 0x0f, 0x86, 0x1e, 0x97, 0x11, 0x98, + 0x3c, 0xb5, 0x33, 0xba, 0x22, 0xab, 0x2d, 0xa4, + 0x78, 0xf1, 0x77, 0xfe, 0x66, 0xef, 0x69, 0xe0, + 0x44, 0xcd, 0x4b, 0xc2, 0x5a, 0xd3, 0x55, 0xdc, + 0xf0, 0x79, 0xff, 0x76, 0xee, 0x67, 0xe1, 0x68, + 0xcc, 0x45, 0xc3, 0x4a, 0xd2, 0x5b, 0xdd, 0x54, + 0x88, 0x01, 0x87, 0x0e, 0x96, 0x1f, 0x99, 0x10, + 0xb4, 0x3d, 0xbb, 0x32, 0xaa, 0x23, 0xa5, 0x2c, + 0xfd, 0x74, 0xf2, 0x7b, 0xe3, 0x6a, 0xec, 0x65, + 0xc1, 0x48, 0xce, 0x47, 0xdf, 0x56, 0xd0, 0x59, + 0x85, 0x0c, 0x8a, 0x03, 0x9b, 0x12, 0x94, 0x1d, + 0xb9, 0x30, 0xb6, 0x3f, 0xa7, 0x2e, 0xa8, 0x21, + 0x0d, 0x84, 0x02, 0x8b, 0x13, 0x9a, 0x1c, 0x95, + 0x31, 0xb8, 0x3e, 0xb7, 0x2f, 0xa6, 0x20, 0xa9, + 0x75, 0xfc, 0x7a, 0xf3, 0x6b, 0xe2, 0x64, 0xed, + 0x49, 0xc0, 0x46, 0xcf, 0x57, 0xde, 0x58, 0xd1, + 0xe7, 0x6e, 0xe8, 0x61, 0xf9, 0x70, 0xf6, 0x7f, + 0xdb, 0x52, 0xd4, 0x5d, 0xc5, 0x4c, 0xca, 0x43, + 0x9f, 0x16, 0x90, 0x19, 0x81, 0x08, 0x8e, 0x07, + 0xa3, 0x2a, 0xac, 0x25, 0xbd, 0x34, 0xb2, 0x3b, + 0x17, 0x9e, 0x18, 0x91, 0x09, 0x80, 0x06, 0x8f, + 0x2b, 0xa2, 0x24, 0xad, 0x35, 0xbc, 0x3a, 0xb3, + 0x6f, 0xe6, 0x60, 0xe9, 0x71, 0xf8, 0x7e, 0xf7, + 0x53, 0xda, 0x5c, 0xd5, 0x4d, 0xc4, 0x42, 0xcb, + 0x1a, 0x93, 0x15, 0x9c, 0x04, 0x8d, 0x0b, 0x82, + 0x26, 0xaf, 0x29, 0xa0, 0x38, 0xb1, 0x37, 0xbe, + 0x62, 0xeb, 0x6d, 0xe4, 0x7c, 0xf5, 0x73, 0xfa, + 0x5e, 0xd7, 0x51, 0xd8, 0x40, 0xc9, 0x4f, 0xc6, + 0xea, 0x63, 0xe5, 0x6c, 0xf4, 0x7d, 0xfb, 0x72, + 0xd6, 0x5f, 0xd9, 0x50, 0xc8, 0x41, 0xc7, 0x4e, + 0x92, 0x1b, 0x9d, 0x14, 0x8c, 0x05, 0x83, 0x0a, + 0xae, 0x27, 0xa1, 0x28, 0xb0, 0x39, 0xbf, 0x36, + }, + { + 0x00, 0x8a, 0x09, 0x83, 0x12, 0x98, 0x1b, 0x91, + 0x24, 0xae, 0x2d, 0xa7, 0x36, 0xbc, 0x3f, 0xb5, + 0x48, 0xc2, 0x41, 0xcb, 0x5a, 0xd0, 0x53, 0xd9, + 0x6c, 0xe6, 0x65, 0xef, 0x7e, 0xf4, 0x77, 0xfd, + 0x90, 0x1a, 0x99, 0x13, 0x82, 0x08, 0x8b, 0x01, + 0xb4, 0x3e, 0xbd, 0x37, 0xa6, 0x2c, 0xaf, 0x25, + 0xd8, 0x52, 0xd1, 0x5b, 0xca, 0x40, 0xc3, 0x49, + 0xfc, 0x76, 0xf5, 0x7f, 0xee, 0x64, 0xe7, 0x6d, + 0x3d, 0xb7, 0x34, 0xbe, 0x2f, 0xa5, 0x26, 0xac, + 0x19, 0x93, 0x10, 0x9a, 0x0b, 0x81, 0x02, 0x88, + 0x75, 0xff, 0x7c, 0xf6, 0x67, 0xed, 0x6e, 0xe4, + 0x51, 0xdb, 0x58, 0xd2, 0x43, 0xc9, 0x4a, 0xc0, + 0xad, 0x27, 0xa4, 0x2e, 0xbf, 0x35, 0xb6, 0x3c, + 0x89, 0x03, 0x80, 0x0a, 0x9b, 0x11, 0x92, 0x18, + 0xe5, 0x6f, 0xec, 0x66, 0xf7, 0x7d, 0xfe, 0x74, + 0xc1, 0x4b, 0xc8, 0x42, 0xd3, 0x59, 0xda, 0x50, + 0x7a, 0xf0, 0x73, 0xf9, 0x68, 0xe2, 0x61, 0xeb, + 0x5e, 0xd4, 0x57, 0xdd, 0x4c, 0xc6, 0x45, 0xcf, + 0x32, 0xb8, 0x3b, 0xb1, 0x20, 0xaa, 0x29, 0xa3, + 0x16, 0x9c, 0x1f, 0x95, 0x04, 0x8e, 0x0d, 0x87, + 0xea, 0x60, 0xe3, 0x69, 0xf8, 0x72, 0xf1, 0x7b, + 0xce, 0x44, 0xc7, 0x4d, 0xdc, 0x56, 0xd5, 0x5f, + 0xa2, 0x28, 0xab, 0x21, 0xb0, 0x3a, 0xb9, 0x33, + 0x86, 0x0c, 0x8f, 0x05, 0x94, 0x1e, 0x9d, 0x17, + 0x47, 0xcd, 0x4e, 0xc4, 0x55, 0xdf, 0x5c, 0xd6, + 0x63, 0xe9, 0x6a, 0xe0, 0x71, 0xfb, 0x78, 0xf2, + 0x0f, 0x85, 0x06, 0x8c, 0x1d, 0x97, 0x14, 0x9e, + 0x2b, 0xa1, 0x22, 0xa8, 0x39, 0xb3, 0x30, 0xba, + 0xd7, 0x5d, 0xde, 0x54, 0xc5, 0x4f, 0xcc, 0x46, + 0xf3, 0x79, 0xfa, 0x70, 0xe1, 0x6b, 0xe8, 0x62, + 0x9f, 0x15, 0x96, 0x1c, 0x8d, 0x07, 0x84, 0x0e, + 0xbb, 0x31, 0xb2, 0x38, 0xa9, 0x23, 0xa0, 0x2a, + }, + { + 0x00, 0x8b, 0x0b, 0x80, 0x16, 0x9d, 0x1d, 0x96, + 0x2c, 0xa7, 0x27, 0xac, 0x3a, 0xb1, 0x31, 0xba, + 0x58, 0xd3, 0x53, 0xd8, 0x4e, 0xc5, 0x45, 0xce, + 0x74, 0xff, 0x7f, 0xf4, 0x62, 0xe9, 0x69, 0xe2, + 0xb0, 0x3b, 0xbb, 0x30, 0xa6, 0x2d, 0xad, 0x26, + 0x9c, 0x17, 0x97, 0x1c, 0x8a, 0x01, 0x81, 0x0a, + 0xe8, 0x63, 0xe3, 0x68, 0xfe, 0x75, 0xf5, 0x7e, + 0xc4, 0x4f, 0xcf, 0x44, 0xd2, 0x59, 0xd9, 0x52, + 0x7d, 0xf6, 0x76, 0xfd, 0x6b, 0xe0, 0x60, 0xeb, + 0x51, 0xda, 0x5a, 0xd1, 0x47, 0xcc, 0x4c, 0xc7, + 0x25, 0xae, 0x2e, 0xa5, 0x33, 0xb8, 0x38, 0xb3, + 0x09, 0x82, 0x02, 0x89, 0x1f, 0x94, 0x14, 0x9f, + 0xcd, 0x46, 0xc6, 0x4d, 0xdb, 0x50, 0xd0, 0x5b, + 0xe1, 0x6a, 0xea, 0x61, 0xf7, 0x7c, 0xfc, 0x77, + 0x95, 0x1e, 0x9e, 0x15, 0x83, 0x08, 0x88, 0x03, + 0xb9, 0x32, 0xb2, 0x39, 0xaf, 0x24, 0xa4, 0x2f, + 0xfa, 0x71, 0xf1, 0x7a, 0xec, 0x67, 0xe7, 0x6c, + 0xd6, 0x5d, 0xdd, 0x56, 0xc0, 0x4b, 0xcb, 0x40, + 0xa2, 0x29, 0xa9, 0x22, 0xb4, 0x3f, 0xbf, 0x34, + 0x8e, 0x05, 0x85, 0x0e, 0x98, 0x13, 0x93, 0x18, + 0x4a, 0xc1, 0x41, 0xca, 0x5c, 0xd7, 0x57, 0xdc, + 0x66, 0xed, 0x6d, 0xe6, 0x70, 0xfb, 0x7b, 0xf0, + 0x12, 0x99, 0x19, 0x92, 0x04, 0x8f, 0x0f, 0x84, + 0x3e, 0xb5, 0x35, 0xbe, 0x28, 0xa3, 0x23, 0xa8, + 0x87, 0x0c, 0x8c, 0x07, 0x91, 0x1a, 0x9a, 0x11, + 0xab, 0x20, 0xa0, 0x2b, 0xbd, 0x36, 0xb6, 0x3d, + 0xdf, 0x54, 0xd4, 0x5f, 0xc9, 0x42, 0xc2, 0x49, + 0xf3, 0x78, 0xf8, 0x73, 0xe5, 0x6e, 0xee, 0x65, + 0x37, 0xbc, 0x3c, 0xb7, 0x21, 0xaa, 0x2a, 0xa1, + 0x1b, 0x90, 0x10, 0x9b, 0x0d, 0x86, 0x06, 0x8d, + 0x6f, 0xe4, 0x64, 0xef, 0x79, 0xf2, 0x72, 0xf9, + 0x43, 0xc8, 0x48, 0xc3, 0x55, 0xde, 0x5e, 0xd5, + }, + { + 0x00, 0x8c, 0x05, 0x89, 0x0a, 0x86, 0x0f, 0x83, + 0x14, 0x98, 0x11, 0x9d, 0x1e, 0x92, 0x1b, 0x97, + 0x28, 0xa4, 0x2d, 0xa1, 0x22, 0xae, 0x27, 0xab, + 0x3c, 0xb0, 0x39, 0xb5, 0x36, 0xba, 0x33, 0xbf, + 0x50, 0xdc, 0x55, 0xd9, 0x5a, 0xd6, 0x5f, 0xd3, + 0x44, 0xc8, 0x41, 0xcd, 0x4e, 0xc2, 0x4b, 0xc7, + 0x78, 0xf4, 0x7d, 0xf1, 0x72, 0xfe, 0x77, 0xfb, + 0x6c, 0xe0, 0x69, 0xe5, 0x66, 0xea, 0x63, 0xef, + 0xa0, 0x2c, 0xa5, 0x29, 0xaa, 0x26, 0xaf, 0x23, + 0xb4, 0x38, 0xb1, 0x3d, 0xbe, 0x32, 0xbb, 0x37, + 0x88, 0x04, 0x8d, 0x01, 0x82, 0x0e, 0x87, 0x0b, + 0x9c, 0x10, 0x99, 0x15, 0x96, 0x1a, 0x93, 0x1f, + 0xf0, 0x7c, 0xf5, 0x79, 0xfa, 0x76, 0xff, 0x73, + 0xe4, 0x68, 0xe1, 0x6d, 0xee, 0x62, 0xeb, 0x67, + 0xd8, 0x54, 0xdd, 0x51, 0xd2, 0x5e, 0xd7, 0x5b, + 0xcc, 0x40, 0xc9, 0x45, 0xc6, 0x4a, 0xc3, 0x4f, + 0x5d, 0xd1, 0x58, 0xd4, 0x57, 0xdb, 0x52, 0xde, + 0x49, 0xc5, 0x4c, 0xc0, 0x43, 0xcf, 0x46, 0xca, + 0x75, 0xf9, 0x70, 0xfc, 0x7f, 0xf3, 0x7a, 0xf6, + 0x61, 0xed, 0x64, 0xe8, 0x6b, 0xe7, 0x6e, 0xe2, + 0x0d, 0x81, 0x08, 0x84, 0x07, 0x8b, 0x02, 0x8e, + 0x19, 0x95, 0x1c, 0x90, 0x13, 0x9f, 0x16, 0x9a, + 0x25, 0xa9, 0x20, 0xac, 0x2f, 0xa3, 0x2a, 0xa6, + 0x31, 0xbd, 0x34, 0xb8, 0x3b, 0xb7, 0x3e, 0xb2, + 0xfd, 0x71, 0xf8, 0x74, 0xf7, 0x7b, 0xf2, 0x7e, + 0xe9, 0x65, 0xec, 0x60, 0xe3, 0x6f, 0xe6, 0x6a, + 0xd5, 0x59, 0xd0, 0x5c, 0xdf, 0x53, 0xda, 0x56, + 0xc1, 0x4d, 0xc4, 0x48, 0xcb, 0x47, 0xce, 0x42, + 0xad, 0x21, 0xa8, 0x24, 0xa7, 0x2b, 0xa2, 0x2e, + 0xb9, 0x35, 0xbc, 0x30, 0xb3, 0x3f, 0xb6, 0x3a, + 0x85, 0x09, 0x80, 0x0c, 0x8f, 0x03, 0x8a, 0x06, + 0x91, 0x1d, 0x94, 0x18, 0x9b, 0x17, 0x9e, 0x12, + }, + { + 0x00, 0x8d, 0x07, 0x8a, 0x0e, 0x83, 0x09, 0x84, + 0x1c, 0x91, 0x1b, 0x96, 0x12, 0x9f, 0x15, 0x98, + 0x38, 0xb5, 0x3f, 0xb2, 0x36, 0xbb, 0x31, 0xbc, + 0x24, 0xa9, 0x23, 0xae, 0x2a, 0xa7, 0x2d, 0xa0, + 0x70, 0xfd, 0x77, 0xfa, 0x7e, 0xf3, 0x79, 0xf4, + 0x6c, 0xe1, 0x6b, 0xe6, 0x62, 0xef, 0x65, 0xe8, + 0x48, 0xc5, 0x4f, 0xc2, 0x46, 0xcb, 0x41, 0xcc, + 0x54, 0xd9, 0x53, 0xde, 0x5a, 0xd7, 0x5d, 0xd0, + 0xe0, 0x6d, 0xe7, 0x6a, 0xee, 0x63, 0xe9, 0x64, + 0xfc, 0x71, 0xfb, 0x76, 0xf2, 0x7f, 0xf5, 0x78, + 0xd8, 0x55, 0xdf, 0x52, 0xd6, 0x5b, 0xd1, 0x5c, + 0xc4, 0x49, 0xc3, 0x4e, 0xca, 0x47, 0xcd, 0x40, + 0x90, 0x1d, 0x97, 0x1a, 0x9e, 0x13, 0x99, 0x14, + 0x8c, 0x01, 0x8b, 0x06, 0x82, 0x0f, 0x85, 0x08, + 0xa8, 0x25, 0xaf, 0x22, 0xa6, 0x2b, 0xa1, 0x2c, + 0xb4, 0x39, 0xb3, 0x3e, 0xba, 0x37, 0xbd, 0x30, + 0xdd, 0x50, 0xda, 0x57, 0xd3, 0x5e, 0xd4, 0x59, + 0xc1, 0x4c, 0xc6, 0x4b, 0xcf, 0x42, 0xc8, 0x45, + 0xe5, 0x68, 0xe2, 0x6f, 0xeb, 0x66, 0xec, 0x61, + 0xf9, 0x74, 0xfe, 0x73, 0xf7, 0x7a, 0xf0, 0x7d, + 0xad, 0x20, 0xaa, 0x27, 0xa3, 0x2e, 0xa4, 0x29, + 0xb1, 0x3c, 0xb6, 0x3b, 0xbf, 0x32, 0xb8, 0x35, + 0x95, 0x18, 0x92, 0x1f, 0x9b, 0x16, 0x9c, 0x11, + 0x89, 0x04, 0x8e, 0x03, 0x87, 0x0a, 0x80, 0x0d, + 0x3d, 0xb0, 0x3a, 0xb7, 0x33, 0xbe, 0x34, 0xb9, + 0x21, 0xac, 0x26, 0xab, 0x2f, 0xa2, 0x28, 0xa5, + 0x05, 0x88, 0x02, 0x8f, 0x0b, 0x86, 0x0c, 0x81, + 0x19, 0x94, 0x1e, 0x93, 0x17, 0x9a, 0x10, 0x9d, + 0x4d, 0xc0, 0x4a, 0xc7, 0x43, 0xce, 0x44, 0xc9, + 0x51, 0xdc, 0x56, 0xdb, 0x5f, 0xd2, 0x58, 0xd5, + 0x75, 0xf8, 0x72, 0xff, 0x7b, 0xf6, 0x7c, 0xf1, + 0x69, 0xe4, 0x6e, 0xe3, 0x67, 0xea, 0x60, 0xed, + }, + { + 0x00, 0x8e, 0x01, 0x8f, 0x02, 0x8c, 0x03, 0x8d, + 0x04, 0x8a, 0x05, 0x8b, 0x06, 0x88, 0x07, 0x89, + 0x08, 0x86, 0x09, 0x87, 0x0a, 0x84, 0x0b, 0x85, + 0x0c, 0x82, 0x0d, 0x83, 0x0e, 0x80, 0x0f, 0x81, + 0x10, 0x9e, 0x11, 0x9f, 0x12, 0x9c, 0x13, 0x9d, + 0x14, 0x9a, 0x15, 0x9b, 0x16, 0x98, 0x17, 0x99, + 0x18, 0x96, 0x19, 0x97, 0x1a, 0x94, 0x1b, 0x95, + 0x1c, 0x92, 0x1d, 0x93, 0x1e, 0x90, 0x1f, 0x91, + 0x20, 0xae, 0x21, 0xaf, 0x22, 0xac, 0x23, 0xad, + 0x24, 0xaa, 0x25, 0xab, 0x26, 0xa8, 0x27, 0xa9, + 0x28, 0xa6, 0x29, 0xa7, 0x2a, 0xa4, 0x2b, 0xa5, + 0x2c, 0xa2, 0x2d, 0xa3, 0x2e, 0xa0, 0x2f, 0xa1, + 0x30, 0xbe, 0x31, 0xbf, 0x32, 0xbc, 0x33, 0xbd, + 0x34, 0xba, 0x35, 0xbb, 0x36, 0xb8, 0x37, 0xb9, + 0x38, 0xb6, 0x39, 0xb7, 0x3a, 0xb4, 0x3b, 0xb5, + 0x3c, 0xb2, 0x3d, 0xb3, 0x3e, 0xb0, 0x3f, 0xb1, + 0x40, 0xce, 0x41, 0xcf, 0x42, 0xcc, 0x43, 0xcd, + 0x44, 0xca, 0x45, 0xcb, 0x46, 0xc8, 0x47, 0xc9, + 0x48, 0xc6, 0x49, 0xc7, 0x4a, 0xc4, 0x4b, 0xc5, + 0x4c, 0xc2, 0x4d, 0xc3, 0x4e, 0xc0, 0x4f, 0xc1, + 0x50, 0xde, 0x51, 0xdf, 0x52, 0xdc, 0x53, 0xdd, + 0x54, 0xda, 0x55, 0xdb, 0x56, 0xd8, 0x57, 0xd9, + 0x58, 0xd6, 0x59, 0xd7, 0x5a, 0xd4, 0x5b, 0xd5, + 0x5c, 0xd2, 0x5d, 0xd3, 0x5e, 0xd0, 0x5f, 0xd1, + 0x60, 0xee, 0x61, 0xef, 0x62, 0xec, 0x63, 0xed, + 0x64, 0xea, 0x65, 0xeb, 0x66, 0xe8, 0x67, 0xe9, + 0x68, 0xe6, 0x69, 0xe7, 0x6a, 0xe4, 0x6b, 0xe5, + 0x6c, 0xe2, 0x6d, 0xe3, 0x6e, 0xe0, 0x6f, 0xe1, + 0x70, 0xfe, 0x71, 0xff, 0x72, 0xfc, 0x73, 0xfd, + 0x74, 0xfa, 0x75, 0xfb, 0x76, 0xf8, 0x77, 0xf9, + 0x78, 0xf6, 0x79, 0xf7, 0x7a, 0xf4, 0x7b, 0xf5, + 0x7c, 0xf2, 0x7d, 0xf3, 0x7e, 0xf0, 0x7f, 0xf1, + }, + { + 0x00, 0x8f, 0x03, 0x8c, 0x06, 0x89, 0x05, 0x8a, + 0x0c, 0x83, 0x0f, 0x80, 0x0a, 0x85, 0x09, 0x86, + 0x18, 0x97, 0x1b, 0x94, 0x1e, 0x91, 0x1d, 0x92, + 0x14, 0x9b, 0x17, 0x98, 0x12, 0x9d, 0x11, 0x9e, + 0x30, 0xbf, 0x33, 0xbc, 0x36, 0xb9, 0x35, 0xba, + 0x3c, 0xb3, 0x3f, 0xb0, 0x3a, 0xb5, 0x39, 0xb6, + 0x28, 0xa7, 0x2b, 0xa4, 0x2e, 0xa1, 0x2d, 0xa2, + 0x24, 0xab, 0x27, 0xa8, 0x22, 0xad, 0x21, 0xae, + 0x60, 0xef, 0x63, 0xec, 0x66, 0xe9, 0x65, 0xea, + 0x6c, 0xe3, 0x6f, 0xe0, 0x6a, 0xe5, 0x69, 0xe6, + 0x78, 0xf7, 0x7b, 0xf4, 0x7e, 0xf1, 0x7d, 0xf2, + 0x74, 0xfb, 0x77, 0xf8, 0x72, 0xfd, 0x71, 0xfe, + 0x50, 0xdf, 0x53, 0xdc, 0x56, 0xd9, 0x55, 0xda, + 0x5c, 0xd3, 0x5f, 0xd0, 0x5a, 0xd5, 0x59, 0xd6, + 0x48, 0xc7, 0x4b, 0xc4, 0x4e, 0xc1, 0x4d, 0xc2, + 0x44, 0xcb, 0x47, 0xc8, 0x42, 0xcd, 0x41, 0xce, + 0xc0, 0x4f, 0xc3, 0x4c, 0xc6, 0x49, 0xc5, 0x4a, + 0xcc, 0x43, 0xcf, 0x40, 0xca, 0x45, 0xc9, 0x46, + 0xd8, 0x57, 0xdb, 0x54, 0xde, 0x51, 0xdd, 0x52, + 0xd4, 0x5b, 0xd7, 0x58, 0xd2, 0x5d, 0xd1, 0x5e, + 0xf0, 0x7f, 0xf3, 0x7c, 0xf6, 0x79, 0xf5, 0x7a, + 0xfc, 0x73, 0xff, 0x70, 0xfa, 0x75, 0xf9, 0x76, + 0xe8, 0x67, 0xeb, 0x64, 0xee, 0x61, 0xed, 0x62, + 0xe4, 0x6b, 0xe7, 0x68, 0xe2, 0x6d, 0xe1, 0x6e, + 0xa0, 0x2f, 0xa3, 0x2c, 0xa6, 0x29, 0xa5, 0x2a, + 0xac, 0x23, 0xaf, 0x20, 0xaa, 0x25, 0xa9, 0x26, + 0xb8, 0x37, 0xbb, 0x34, 0xbe, 0x31, 0xbd, 0x32, + 0xb4, 0x3b, 0xb7, 0x38, 0xb2, 0x3d, 0xb1, 0x3e, + 0x90, 0x1f, 0x93, 0x1c, 0x96, 0x19, 0x95, 0x1a, + 0x9c, 0x13, 0x9f, 0x10, 0x9a, 0x15, 0x99, 0x16, + 0x88, 0x07, 0x8b, 0x04, 0x8e, 0x01, 0x8d, 0x02, + 0x84, 0x0b, 0x87, 0x08, 0x82, 0x0d, 0x81, 0x0e, + }, + { + 0x00, 0x90, 0x3d, 0xad, 0x7a, 0xea, 0x47, 0xd7, + 0xf4, 0x64, 0xc9, 0x59, 0x8e, 0x1e, 0xb3, 0x23, + 0xf5, 0x65, 0xc8, 0x58, 0x8f, 0x1f, 0xb2, 0x22, + 0x01, 0x91, 0x3c, 0xac, 0x7b, 0xeb, 0x46, 0xd6, + 0xf7, 0x67, 0xca, 0x5a, 0x8d, 0x1d, 0xb0, 0x20, + 0x03, 0x93, 0x3e, 0xae, 0x79, 0xe9, 0x44, 0xd4, + 0x02, 0x92, 0x3f, 0xaf, 0x78, 0xe8, 0x45, 0xd5, + 0xf6, 0x66, 0xcb, 0x5b, 0x8c, 0x1c, 0xb1, 0x21, + 0xf3, 0x63, 0xce, 0x5e, 0x89, 0x19, 0xb4, 0x24, + 0x07, 0x97, 0x3a, 0xaa, 0x7d, 0xed, 0x40, 0xd0, + 0x06, 0x96, 0x3b, 0xab, 0x7c, 0xec, 0x41, 0xd1, + 0xf2, 0x62, 0xcf, 0x5f, 0x88, 0x18, 0xb5, 0x25, + 0x04, 0x94, 0x39, 0xa9, 0x7e, 0xee, 0x43, 0xd3, + 0xf0, 0x60, 0xcd, 0x5d, 0x8a, 0x1a, 0xb7, 0x27, + 0xf1, 0x61, 0xcc, 0x5c, 0x8b, 0x1b, 0xb6, 0x26, + 0x05, 0x95, 0x38, 0xa8, 0x7f, 0xef, 0x42, 0xd2, + 0xfb, 0x6b, 0xc6, 0x56, 0x81, 0x11, 0xbc, 0x2c, + 0x0f, 0x9f, 0x32, 0xa2, 0x75, 0xe5, 0x48, 0xd8, + 0x0e, 0x9e, 0x33, 0xa3, 0x74, 0xe4, 0x49, 0xd9, + 0xfa, 0x6a, 0xc7, 0x57, 0x80, 0x10, 0xbd, 0x2d, + 0x0c, 0x9c, 0x31, 0xa1, 0x76, 0xe6, 0x4b, 0xdb, + 0xf8, 0x68, 0xc5, 0x55, 0x82, 0x12, 0xbf, 0x2f, + 0xf9, 0x69, 0xc4, 0x54, 0x83, 0x13, 0xbe, 0x2e, + 0x0d, 0x9d, 0x30, 0xa0, 0x77, 0xe7, 0x4a, 0xda, + 0x08, 0x98, 0x35, 0xa5, 0x72, 0xe2, 0x4f, 0xdf, + 0xfc, 0x6c, 0xc1, 0x51, 0x86, 0x16, 0xbb, 0x2b, + 0xfd, 0x6d, 0xc0, 0x50, 0x87, 0x17, 0xba, 0x2a, + 0x09, 0x99, 0x34, 0xa4, 0x73, 0xe3, 0x4e, 0xde, + 0xff, 0x6f, 0xc2, 0x52, 0x85, 0x15, 0xb8, 0x28, + 0x0b, 0x9b, 0x36, 0xa6, 0x71, 0xe1, 0x4c, 0xdc, + 0x0a, 0x9a, 0x37, 0xa7, 0x70, 0xe0, 0x4d, 0xdd, + 0xfe, 0x6e, 0xc3, 0x53, 0x84, 0x14, 0xb9, 0x29, + }, + { + 0x00, 0x91, 0x3f, 0xae, 0x7e, 0xef, 0x41, 0xd0, + 0xfc, 0x6d, 0xc3, 0x52, 0x82, 0x13, 0xbd, 0x2c, + 0xe5, 0x74, 0xda, 0x4b, 0x9b, 0x0a, 0xa4, 0x35, + 0x19, 0x88, 0x26, 0xb7, 0x67, 0xf6, 0x58, 0xc9, + 0xd7, 0x46, 0xe8, 0x79, 0xa9, 0x38, 0x96, 0x07, + 0x2b, 0xba, 0x14, 0x85, 0x55, 0xc4, 0x6a, 0xfb, + 0x32, 0xa3, 0x0d, 0x9c, 0x4c, 0xdd, 0x73, 0xe2, + 0xce, 0x5f, 0xf1, 0x60, 0xb0, 0x21, 0x8f, 0x1e, + 0xb3, 0x22, 0x8c, 0x1d, 0xcd, 0x5c, 0xf2, 0x63, + 0x4f, 0xde, 0x70, 0xe1, 0x31, 0xa0, 0x0e, 0x9f, + 0x56, 0xc7, 0x69, 0xf8, 0x28, 0xb9, 0x17, 0x86, + 0xaa, 0x3b, 0x95, 0x04, 0xd4, 0x45, 0xeb, 0x7a, + 0x64, 0xf5, 0x5b, 0xca, 0x1a, 0x8b, 0x25, 0xb4, + 0x98, 0x09, 0xa7, 0x36, 0xe6, 0x77, 0xd9, 0x48, + 0x81, 0x10, 0xbe, 0x2f, 0xff, 0x6e, 0xc0, 0x51, + 0x7d, 0xec, 0x42, 0xd3, 0x03, 0x92, 0x3c, 0xad, + 0x7b, 0xea, 0x44, 0xd5, 0x05, 0x94, 0x3a, 0xab, + 0x87, 0x16, 0xb8, 0x29, 0xf9, 0x68, 0xc6, 0x57, + 0x9e, 0x0f, 0xa1, 0x30, 0xe0, 0x71, 0xdf, 0x4e, + 0x62, 0xf3, 0x5d, 0xcc, 0x1c, 0x8d, 0x23, 0xb2, + 0xac, 0x3d, 0x93, 0x02, 0xd2, 0x43, 0xed, 0x7c, + 0x50, 0xc1, 0x6f, 0xfe, 0x2e, 0xbf, 0x11, 0x80, + 0x49, 0xd8, 0x76, 0xe7, 0x37, 0xa6, 0x08, 0x99, + 0xb5, 0x24, 0x8a, 0x1b, 0xcb, 0x5a, 0xf4, 0x65, + 0xc8, 0x59, 0xf7, 0x66, 0xb6, 0x27, 0x89, 0x18, + 0x34, 0xa5, 0x0b, 0x9a, 0x4a, 0xdb, 0x75, 0xe4, + 0x2d, 0xbc, 0x12, 0x83, 0x53, 0xc2, 0x6c, 0xfd, + 0xd1, 0x40, 0xee, 0x7f, 0xaf, 0x3e, 0x90, 0x01, + 0x1f, 0x8e, 0x20, 0xb1, 0x61, 0xf0, 0x5e, 0xcf, + 0xe3, 0x72, 0xdc, 0x4d, 0x9d, 0x0c, 0xa2, 0x33, + 0xfa, 0x6b, 0xc5, 0x54, 0x84, 0x15, 0xbb, 0x2a, + 0x06, 0x97, 0x39, 0xa8, 0x78, 0xe9, 0x47, 0xd6, + }, + { + 0x00, 0x92, 0x39, 0xab, 0x72, 0xe0, 0x4b, 0xd9, + 0xe4, 0x76, 0xdd, 0x4f, 0x96, 0x04, 0xaf, 0x3d, + 0xd5, 0x47, 0xec, 0x7e, 0xa7, 0x35, 0x9e, 0x0c, + 0x31, 0xa3, 0x08, 0x9a, 0x43, 0xd1, 0x7a, 0xe8, + 0xb7, 0x25, 0x8e, 0x1c, 0xc5, 0x57, 0xfc, 0x6e, + 0x53, 0xc1, 0x6a, 0xf8, 0x21, 0xb3, 0x18, 0x8a, + 0x62, 0xf0, 0x5b, 0xc9, 0x10, 0x82, 0x29, 0xbb, + 0x86, 0x14, 0xbf, 0x2d, 0xf4, 0x66, 0xcd, 0x5f, + 0x73, 0xe1, 0x4a, 0xd8, 0x01, 0x93, 0x38, 0xaa, + 0x97, 0x05, 0xae, 0x3c, 0xe5, 0x77, 0xdc, 0x4e, + 0xa6, 0x34, 0x9f, 0x0d, 0xd4, 0x46, 0xed, 0x7f, + 0x42, 0xd0, 0x7b, 0xe9, 0x30, 0xa2, 0x09, 0x9b, + 0xc4, 0x56, 0xfd, 0x6f, 0xb6, 0x24, 0x8f, 0x1d, + 0x20, 0xb2, 0x19, 0x8b, 0x52, 0xc0, 0x6b, 0xf9, + 0x11, 0x83, 0x28, 0xba, 0x63, 0xf1, 0x5a, 0xc8, + 0xf5, 0x67, 0xcc, 0x5e, 0x87, 0x15, 0xbe, 0x2c, + 0xe6, 0x74, 0xdf, 0x4d, 0x94, 0x06, 0xad, 0x3f, + 0x02, 0x90, 0x3b, 0xa9, 0x70, 0xe2, 0x49, 0xdb, + 0x33, 0xa1, 0x0a, 0x98, 0x41, 0xd3, 0x78, 0xea, + 0xd7, 0x45, 0xee, 0x7c, 0xa5, 0x37, 0x9c, 0x0e, + 0x51, 0xc3, 0x68, 0xfa, 0x23, 0xb1, 0x1a, 0x88, + 0xb5, 0x27, 0x8c, 0x1e, 0xc7, 0x55, 0xfe, 0x6c, + 0x84, 0x16, 0xbd, 0x2f, 0xf6, 0x64, 0xcf, 0x5d, + 0x60, 0xf2, 0x59, 0xcb, 0x12, 0x80, 0x2b, 0xb9, + 0x95, 0x07, 0xac, 0x3e, 0xe7, 0x75, 0xde, 0x4c, + 0x71, 0xe3, 0x48, 0xda, 0x03, 0x91, 0x3a, 0xa8, + 0x40, 0xd2, 0x79, 0xeb, 0x32, 0xa0, 0x0b, 0x99, + 0xa4, 0x36, 0x9d, 0x0f, 0xd6, 0x44, 0xef, 0x7d, + 0x22, 0xb0, 0x1b, 0x89, 0x50, 0xc2, 0x69, 0xfb, + 0xc6, 0x54, 0xff, 0x6d, 0xb4, 0x26, 0x8d, 0x1f, + 0xf7, 0x65, 0xce, 0x5c, 0x85, 0x17, 0xbc, 0x2e, + 0x13, 0x81, 0x2a, 0xb8, 0x61, 0xf3, 0x58, 0xca, + }, + { + 0x00, 0x93, 0x3b, 0xa8, 0x76, 0xe5, 0x4d, 0xde, + 0xec, 0x7f, 0xd7, 0x44, 0x9a, 0x09, 0xa1, 0x32, + 0xc5, 0x56, 0xfe, 0x6d, 0xb3, 0x20, 0x88, 0x1b, + 0x29, 0xba, 0x12, 0x81, 0x5f, 0xcc, 0x64, 0xf7, + 0x97, 0x04, 0xac, 0x3f, 0xe1, 0x72, 0xda, 0x49, + 0x7b, 0xe8, 0x40, 0xd3, 0x0d, 0x9e, 0x36, 0xa5, + 0x52, 0xc1, 0x69, 0xfa, 0x24, 0xb7, 0x1f, 0x8c, + 0xbe, 0x2d, 0x85, 0x16, 0xc8, 0x5b, 0xf3, 0x60, + 0x33, 0xa0, 0x08, 0x9b, 0x45, 0xd6, 0x7e, 0xed, + 0xdf, 0x4c, 0xe4, 0x77, 0xa9, 0x3a, 0x92, 0x01, + 0xf6, 0x65, 0xcd, 0x5e, 0x80, 0x13, 0xbb, 0x28, + 0x1a, 0x89, 0x21, 0xb2, 0x6c, 0xff, 0x57, 0xc4, + 0xa4, 0x37, 0x9f, 0x0c, 0xd2, 0x41, 0xe9, 0x7a, + 0x48, 0xdb, 0x73, 0xe0, 0x3e, 0xad, 0x05, 0x96, + 0x61, 0xf2, 0x5a, 0xc9, 0x17, 0x84, 0x2c, 0xbf, + 0x8d, 0x1e, 0xb6, 0x25, 0xfb, 0x68, 0xc0, 0x53, + 0x66, 0xf5, 0x5d, 0xce, 0x10, 0x83, 0x2b, 0xb8, + 0x8a, 0x19, 0xb1, 0x22, 0xfc, 0x6f, 0xc7, 0x54, + 0xa3, 0x30, 0x98, 0x0b, 0xd5, 0x46, 0xee, 0x7d, + 0x4f, 0xdc, 0x74, 0xe7, 0x39, 0xaa, 0x02, 0x91, + 0xf1, 0x62, 0xca, 0x59, 0x87, 0x14, 0xbc, 0x2f, + 0x1d, 0x8e, 0x26, 0xb5, 0x6b, 0xf8, 0x50, 0xc3, + 0x34, 0xa7, 0x0f, 0x9c, 0x42, 0xd1, 0x79, 0xea, + 0xd8, 0x4b, 0xe3, 0x70, 0xae, 0x3d, 0x95, 0x06, + 0x55, 0xc6, 0x6e, 0xfd, 0x23, 0xb0, 0x18, 0x8b, + 0xb9, 0x2a, 0x82, 0x11, 0xcf, 0x5c, 0xf4, 0x67, + 0x90, 0x03, 0xab, 0x38, 0xe6, 0x75, 0xdd, 0x4e, + 0x7c, 0xef, 0x47, 0xd4, 0x0a, 0x99, 0x31, 0xa2, + 0xc2, 0x51, 0xf9, 0x6a, 0xb4, 0x27, 0x8f, 0x1c, + 0x2e, 0xbd, 0x15, 0x86, 0x58, 0xcb, 0x63, 0xf0, + 0x07, 0x94, 0x3c, 0xaf, 0x71, 0xe2, 0x4a, 0xd9, + 0xeb, 0x78, 0xd0, 0x43, 0x9d, 0x0e, 0xa6, 0x35, + }, + { + 0x00, 0x94, 0x35, 0xa1, 0x6a, 0xfe, 0x5f, 0xcb, + 0xd4, 0x40, 0xe1, 0x75, 0xbe, 0x2a, 0x8b, 0x1f, + 0xb5, 0x21, 0x80, 0x14, 0xdf, 0x4b, 0xea, 0x7e, + 0x61, 0xf5, 0x54, 0xc0, 0x0b, 0x9f, 0x3e, 0xaa, + 0x77, 0xe3, 0x42, 0xd6, 0x1d, 0x89, 0x28, 0xbc, + 0xa3, 0x37, 0x96, 0x02, 0xc9, 0x5d, 0xfc, 0x68, + 0xc2, 0x56, 0xf7, 0x63, 0xa8, 0x3c, 0x9d, 0x09, + 0x16, 0x82, 0x23, 0xb7, 0x7c, 0xe8, 0x49, 0xdd, + 0xee, 0x7a, 0xdb, 0x4f, 0x84, 0x10, 0xb1, 0x25, + 0x3a, 0xae, 0x0f, 0x9b, 0x50, 0xc4, 0x65, 0xf1, + 0x5b, 0xcf, 0x6e, 0xfa, 0x31, 0xa5, 0x04, 0x90, + 0x8f, 0x1b, 0xba, 0x2e, 0xe5, 0x71, 0xd0, 0x44, + 0x99, 0x0d, 0xac, 0x38, 0xf3, 0x67, 0xc6, 0x52, + 0x4d, 0xd9, 0x78, 0xec, 0x27, 0xb3, 0x12, 0x86, + 0x2c, 0xb8, 0x19, 0x8d, 0x46, 0xd2, 0x73, 0xe7, + 0xf8, 0x6c, 0xcd, 0x59, 0x92, 0x06, 0xa7, 0x33, + 0xc1, 0x55, 0xf4, 0x60, 0xab, 0x3f, 0x9e, 0x0a, + 0x15, 0x81, 0x20, 0xb4, 0x7f, 0xeb, 0x4a, 0xde, + 0x74, 0xe0, 0x41, 0xd5, 0x1e, 0x8a, 0x2b, 0xbf, + 0xa0, 0x34, 0x95, 0x01, 0xca, 0x5e, 0xff, 0x6b, + 0xb6, 0x22, 0x83, 0x17, 0xdc, 0x48, 0xe9, 0x7d, + 0x62, 0xf6, 0x57, 0xc3, 0x08, 0x9c, 0x3d, 0xa9, + 0x03, 0x97, 0x36, 0xa2, 0x69, 0xfd, 0x5c, 0xc8, + 0xd7, 0x43, 0xe2, 0x76, 0xbd, 0x29, 0x88, 0x1c, + 0x2f, 0xbb, 0x1a, 0x8e, 0x45, 0xd1, 0x70, 0xe4, + 0xfb, 0x6f, 0xce, 0x5a, 0x91, 0x05, 0xa4, 0x30, + 0x9a, 0x0e, 0xaf, 0x3b, 0xf0, 0x64, 0xc5, 0x51, + 0x4e, 0xda, 0x7b, 0xef, 0x24, 0xb0, 0x11, 0x85, + 0x58, 0xcc, 0x6d, 0xf9, 0x32, 0xa6, 0x07, 0x93, + 0x8c, 0x18, 0xb9, 0x2d, 0xe6, 0x72, 0xd3, 0x47, + 0xed, 0x79, 0xd8, 0x4c, 0x87, 0x13, 0xb2, 0x26, + 0x39, 0xad, 0x0c, 0x98, 0x53, 0xc7, 0x66, 0xf2, + }, + { + 0x00, 0x95, 0x37, 0xa2, 0x6e, 0xfb, 0x59, 0xcc, + 0xdc, 0x49, 0xeb, 0x7e, 0xb2, 0x27, 0x85, 0x10, + 0xa5, 0x30, 0x92, 0x07, 0xcb, 0x5e, 0xfc, 0x69, + 0x79, 0xec, 0x4e, 0xdb, 0x17, 0x82, 0x20, 0xb5, + 0x57, 0xc2, 0x60, 0xf5, 0x39, 0xac, 0x0e, 0x9b, + 0x8b, 0x1e, 0xbc, 0x29, 0xe5, 0x70, 0xd2, 0x47, + 0xf2, 0x67, 0xc5, 0x50, 0x9c, 0x09, 0xab, 0x3e, + 0x2e, 0xbb, 0x19, 0x8c, 0x40, 0xd5, 0x77, 0xe2, + 0xae, 0x3b, 0x99, 0x0c, 0xc0, 0x55, 0xf7, 0x62, + 0x72, 0xe7, 0x45, 0xd0, 0x1c, 0x89, 0x2b, 0xbe, + 0x0b, 0x9e, 0x3c, 0xa9, 0x65, 0xf0, 0x52, 0xc7, + 0xd7, 0x42, 0xe0, 0x75, 0xb9, 0x2c, 0x8e, 0x1b, + 0xf9, 0x6c, 0xce, 0x5b, 0x97, 0x02, 0xa0, 0x35, + 0x25, 0xb0, 0x12, 0x87, 0x4b, 0xde, 0x7c, 0xe9, + 0x5c, 0xc9, 0x6b, 0xfe, 0x32, 0xa7, 0x05, 0x90, + 0x80, 0x15, 0xb7, 0x22, 0xee, 0x7b, 0xd9, 0x4c, + 0x41, 0xd4, 0x76, 0xe3, 0x2f, 0xba, 0x18, 0x8d, + 0x9d, 0x08, 0xaa, 0x3f, 0xf3, 0x66, 0xc4, 0x51, + 0xe4, 0x71, 0xd3, 0x46, 0x8a, 0x1f, 0xbd, 0x28, + 0x38, 0xad, 0x0f, 0x9a, 0x56, 0xc3, 0x61, 0xf4, + 0x16, 0x83, 0x21, 0xb4, 0x78, 0xed, 0x4f, 0xda, + 0xca, 0x5f, 0xfd, 0x68, 0xa4, 0x31, 0x93, 0x06, + 0xb3, 0x26, 0x84, 0x11, 0xdd, 0x48, 0xea, 0x7f, + 0x6f, 0xfa, 0x58, 0xcd, 0x01, 0x94, 0x36, 0xa3, + 0xef, 0x7a, 0xd8, 0x4d, 0x81, 0x14, 0xb6, 0x23, + 0x33, 0xa6, 0x04, 0x91, 0x5d, 0xc8, 0x6a, 0xff, + 0x4a, 0xdf, 0x7d, 0xe8, 0x24, 0xb1, 0x13, 0x86, + 0x96, 0x03, 0xa1, 0x34, 0xf8, 0x6d, 0xcf, 0x5a, + 0xb8, 0x2d, 0x8f, 0x1a, 0xd6, 0x43, 0xe1, 0x74, + 0x64, 0xf1, 0x53, 0xc6, 0x0a, 0x9f, 0x3d, 0xa8, + 0x1d, 0x88, 0x2a, 0xbf, 0x73, 0xe6, 0x44, 0xd1, + 0xc1, 0x54, 0xf6, 0x63, 0xaf, 0x3a, 0x98, 0x0d, + }, + { + 0x00, 0x96, 0x31, 0xa7, 0x62, 0xf4, 0x53, 0xc5, + 0xc4, 0x52, 0xf5, 0x63, 0xa6, 0x30, 0x97, 0x01, + 0x95, 0x03, 0xa4, 0x32, 0xf7, 0x61, 0xc6, 0x50, + 0x51, 0xc7, 0x60, 0xf6, 0x33, 0xa5, 0x02, 0x94, + 0x37, 0xa1, 0x06, 0x90, 0x55, 0xc3, 0x64, 0xf2, + 0xf3, 0x65, 0xc2, 0x54, 0x91, 0x07, 0xa0, 0x36, + 0xa2, 0x34, 0x93, 0x05, 0xc0, 0x56, 0xf1, 0x67, + 0x66, 0xf0, 0x57, 0xc1, 0x04, 0x92, 0x35, 0xa3, + 0x6e, 0xf8, 0x5f, 0xc9, 0x0c, 0x9a, 0x3d, 0xab, + 0xaa, 0x3c, 0x9b, 0x0d, 0xc8, 0x5e, 0xf9, 0x6f, + 0xfb, 0x6d, 0xca, 0x5c, 0x99, 0x0f, 0xa8, 0x3e, + 0x3f, 0xa9, 0x0e, 0x98, 0x5d, 0xcb, 0x6c, 0xfa, + 0x59, 0xcf, 0x68, 0xfe, 0x3b, 0xad, 0x0a, 0x9c, + 0x9d, 0x0b, 0xac, 0x3a, 0xff, 0x69, 0xce, 0x58, + 0xcc, 0x5a, 0xfd, 0x6b, 0xae, 0x38, 0x9f, 0x09, + 0x08, 0x9e, 0x39, 0xaf, 0x6a, 0xfc, 0x5b, 0xcd, + 0xdc, 0x4a, 0xed, 0x7b, 0xbe, 0x28, 0x8f, 0x19, + 0x18, 0x8e, 0x29, 0xbf, 0x7a, 0xec, 0x4b, 0xdd, + 0x49, 0xdf, 0x78, 0xee, 0x2b, 0xbd, 0x1a, 0x8c, + 0x8d, 0x1b, 0xbc, 0x2a, 0xef, 0x79, 0xde, 0x48, + 0xeb, 0x7d, 0xda, 0x4c, 0x89, 0x1f, 0xb8, 0x2e, + 0x2f, 0xb9, 0x1e, 0x88, 0x4d, 0xdb, 0x7c, 0xea, + 0x7e, 0xe8, 0x4f, 0xd9, 0x1c, 0x8a, 0x2d, 0xbb, + 0xba, 0x2c, 0x8b, 0x1d, 0xd8, 0x4e, 0xe9, 0x7f, + 0xb2, 0x24, 0x83, 0x15, 0xd0, 0x46, 0xe1, 0x77, + 0x76, 0xe0, 0x47, 0xd1, 0x14, 0x82, 0x25, 0xb3, + 0x27, 0xb1, 0x16, 0x80, 0x45, 0xd3, 0x74, 0xe2, + 0xe3, 0x75, 0xd2, 0x44, 0x81, 0x17, 0xb0, 0x26, + 0x85, 0x13, 0xb4, 0x22, 0xe7, 0x71, 0xd6, 0x40, + 0x41, 0xd7, 0x70, 0xe6, 0x23, 0xb5, 0x12, 0x84, + 0x10, 0x86, 0x21, 0xb7, 0x72, 0xe4, 0x43, 0xd5, + 0xd4, 0x42, 0xe5, 0x73, 0xb6, 0x20, 0x87, 0x11, + }, + { + 0x00, 0x97, 0x33, 0xa4, 0x66, 0xf1, 0x55, 0xc2, + 0xcc, 0x5b, 0xff, 0x68, 0xaa, 0x3d, 0x99, 0x0e, + 0x85, 0x12, 0xb6, 0x21, 0xe3, 0x74, 0xd0, 0x47, + 0x49, 0xde, 0x7a, 0xed, 0x2f, 0xb8, 0x1c, 0x8b, + 0x17, 0x80, 0x24, 0xb3, 0x71, 0xe6, 0x42, 0xd5, + 0xdb, 0x4c, 0xe8, 0x7f, 0xbd, 0x2a, 0x8e, 0x19, + 0x92, 0x05, 0xa1, 0x36, 0xf4, 0x63, 0xc7, 0x50, + 0x5e, 0xc9, 0x6d, 0xfa, 0x38, 0xaf, 0x0b, 0x9c, + 0x2e, 0xb9, 0x1d, 0x8a, 0x48, 0xdf, 0x7b, 0xec, + 0xe2, 0x75, 0xd1, 0x46, 0x84, 0x13, 0xb7, 0x20, + 0xab, 0x3c, 0x98, 0x0f, 0xcd, 0x5a, 0xfe, 0x69, + 0x67, 0xf0, 0x54, 0xc3, 0x01, 0x96, 0x32, 0xa5, + 0x39, 0xae, 0x0a, 0x9d, 0x5f, 0xc8, 0x6c, 0xfb, + 0xf5, 0x62, 0xc6, 0x51, 0x93, 0x04, 0xa0, 0x37, + 0xbc, 0x2b, 0x8f, 0x18, 0xda, 0x4d, 0xe9, 0x7e, + 0x70, 0xe7, 0x43, 0xd4, 0x16, 0x81, 0x25, 0xb2, + 0x5c, 0xcb, 0x6f, 0xf8, 0x3a, 0xad, 0x09, 0x9e, + 0x90, 0x07, 0xa3, 0x34, 0xf6, 0x61, 0xc5, 0x52, + 0xd9, 0x4e, 0xea, 0x7d, 0xbf, 0x28, 0x8c, 0x1b, + 0x15, 0x82, 0x26, 0xb1, 0x73, 0xe4, 0x40, 0xd7, + 0x4b, 0xdc, 0x78, 0xef, 0x2d, 0xba, 0x1e, 0x89, + 0x87, 0x10, 0xb4, 0x23, 0xe1, 0x76, 0xd2, 0x45, + 0xce, 0x59, 0xfd, 0x6a, 0xa8, 0x3f, 0x9b, 0x0c, + 0x02, 0x95, 0x31, 0xa6, 0x64, 0xf3, 0x57, 0xc0, + 0x72, 0xe5, 0x41, 0xd6, 0x14, 0x83, 0x27, 0xb0, + 0xbe, 0x29, 0x8d, 0x1a, 0xd8, 0x4f, 0xeb, 0x7c, + 0xf7, 0x60, 0xc4, 0x53, 0x91, 0x06, 0xa2, 0x35, + 0x3b, 0xac, 0x08, 0x9f, 0x5d, 0xca, 0x6e, 0xf9, + 0x65, 0xf2, 0x56, 0xc1, 0x03, 0x94, 0x30, 0xa7, + 0xa9, 0x3e, 0x9a, 0x0d, 0xcf, 0x58, 0xfc, 0x6b, + 0xe0, 0x77, 0xd3, 0x44, 0x86, 0x11, 0xb5, 0x22, + 0x2c, 0xbb, 0x1f, 0x88, 0x4a, 0xdd, 0x79, 0xee, + }, + { + 0x00, 0x98, 0x2d, 0xb5, 0x5a, 0xc2, 0x77, 0xef, + 0xb4, 0x2c, 0x99, 0x01, 0xee, 0x76, 0xc3, 0x5b, + 0x75, 0xed, 0x58, 0xc0, 0x2f, 0xb7, 0x02, 0x9a, + 0xc1, 0x59, 0xec, 0x74, 0x9b, 0x03, 0xb6, 0x2e, + 0xea, 0x72, 0xc7, 0x5f, 0xb0, 0x28, 0x9d, 0x05, + 0x5e, 0xc6, 0x73, 0xeb, 0x04, 0x9c, 0x29, 0xb1, + 0x9f, 0x07, 0xb2, 0x2a, 0xc5, 0x5d, 0xe8, 0x70, + 0x2b, 0xb3, 0x06, 0x9e, 0x71, 0xe9, 0x5c, 0xc4, + 0xc9, 0x51, 0xe4, 0x7c, 0x93, 0x0b, 0xbe, 0x26, + 0x7d, 0xe5, 0x50, 0xc8, 0x27, 0xbf, 0x0a, 0x92, + 0xbc, 0x24, 0x91, 0x09, 0xe6, 0x7e, 0xcb, 0x53, + 0x08, 0x90, 0x25, 0xbd, 0x52, 0xca, 0x7f, 0xe7, + 0x23, 0xbb, 0x0e, 0x96, 0x79, 0xe1, 0x54, 0xcc, + 0x97, 0x0f, 0xba, 0x22, 0xcd, 0x55, 0xe0, 0x78, + 0x56, 0xce, 0x7b, 0xe3, 0x0c, 0x94, 0x21, 0xb9, + 0xe2, 0x7a, 0xcf, 0x57, 0xb8, 0x20, 0x95, 0x0d, + 0x8f, 0x17, 0xa2, 0x3a, 0xd5, 0x4d, 0xf8, 0x60, + 0x3b, 0xa3, 0x16, 0x8e, 0x61, 0xf9, 0x4c, 0xd4, + 0xfa, 0x62, 0xd7, 0x4f, 0xa0, 0x38, 0x8d, 0x15, + 0x4e, 0xd6, 0x63, 0xfb, 0x14, 0x8c, 0x39, 0xa1, + 0x65, 0xfd, 0x48, 0xd0, 0x3f, 0xa7, 0x12, 0x8a, + 0xd1, 0x49, 0xfc, 0x64, 0x8b, 0x13, 0xa6, 0x3e, + 0x10, 0x88, 0x3d, 0xa5, 0x4a, 0xd2, 0x67, 0xff, + 0xa4, 0x3c, 0x89, 0x11, 0xfe, 0x66, 0xd3, 0x4b, + 0x46, 0xde, 0x6b, 0xf3, 0x1c, 0x84, 0x31, 0xa9, + 0xf2, 0x6a, 0xdf, 0x47, 0xa8, 0x30, 0x85, 0x1d, + 0x33, 0xab, 0x1e, 0x86, 0x69, 0xf1, 0x44, 0xdc, + 0x87, 0x1f, 0xaa, 0x32, 0xdd, 0x45, 0xf0, 0x68, + 0xac, 0x34, 0x81, 0x19, 0xf6, 0x6e, 0xdb, 0x43, + 0x18, 0x80, 0x35, 0xad, 0x42, 0xda, 0x6f, 0xf7, + 0xd9, 0x41, 0xf4, 0x6c, 0x83, 0x1b, 0xae, 0x36, + 0x6d, 0xf5, 0x40, 0xd8, 0x37, 0xaf, 0x1a, 0x82, + }, + { + 0x00, 0x99, 0x2f, 0xb6, 0x5e, 0xc7, 0x71, 0xe8, + 0xbc, 0x25, 0x93, 0x0a, 0xe2, 0x7b, 0xcd, 0x54, + 0x65, 0xfc, 0x4a, 0xd3, 0x3b, 0xa2, 0x14, 0x8d, + 0xd9, 0x40, 0xf6, 0x6f, 0x87, 0x1e, 0xa8, 0x31, + 0xca, 0x53, 0xe5, 0x7c, 0x94, 0x0d, 0xbb, 0x22, + 0x76, 0xef, 0x59, 0xc0, 0x28, 0xb1, 0x07, 0x9e, + 0xaf, 0x36, 0x80, 0x19, 0xf1, 0x68, 0xde, 0x47, + 0x13, 0x8a, 0x3c, 0xa5, 0x4d, 0xd4, 0x62, 0xfb, + 0x89, 0x10, 0xa6, 0x3f, 0xd7, 0x4e, 0xf8, 0x61, + 0x35, 0xac, 0x1a, 0x83, 0x6b, 0xf2, 0x44, 0xdd, + 0xec, 0x75, 0xc3, 0x5a, 0xb2, 0x2b, 0x9d, 0x04, + 0x50, 0xc9, 0x7f, 0xe6, 0x0e, 0x97, 0x21, 0xb8, + 0x43, 0xda, 0x6c, 0xf5, 0x1d, 0x84, 0x32, 0xab, + 0xff, 0x66, 0xd0, 0x49, 0xa1, 0x38, 0x8e, 0x17, + 0x26, 0xbf, 0x09, 0x90, 0x78, 0xe1, 0x57, 0xce, + 0x9a, 0x03, 0xb5, 0x2c, 0xc4, 0x5d, 0xeb, 0x72, + 0x0f, 0x96, 0x20, 0xb9, 0x51, 0xc8, 0x7e, 0xe7, + 0xb3, 0x2a, 0x9c, 0x05, 0xed, 0x74, 0xc2, 0x5b, + 0x6a, 0xf3, 0x45, 0xdc, 0x34, 0xad, 0x1b, 0x82, + 0xd6, 0x4f, 0xf9, 0x60, 0x88, 0x11, 0xa7, 0x3e, + 0xc5, 0x5c, 0xea, 0x73, 0x9b, 0x02, 0xb4, 0x2d, + 0x79, 0xe0, 0x56, 0xcf, 0x27, 0xbe, 0x08, 0x91, + 0xa0, 0x39, 0x8f, 0x16, 0xfe, 0x67, 0xd1, 0x48, + 0x1c, 0x85, 0x33, 0xaa, 0x42, 0xdb, 0x6d, 0xf4, + 0x86, 0x1f, 0xa9, 0x30, 0xd8, 0x41, 0xf7, 0x6e, + 0x3a, 0xa3, 0x15, 0x8c, 0x64, 0xfd, 0x4b, 0xd2, + 0xe3, 0x7a, 0xcc, 0x55, 0xbd, 0x24, 0x92, 0x0b, + 0x5f, 0xc6, 0x70, 0xe9, 0x01, 0x98, 0x2e, 0xb7, + 0x4c, 0xd5, 0x63, 0xfa, 0x12, 0x8b, 0x3d, 0xa4, + 0xf0, 0x69, 0xdf, 0x46, 0xae, 0x37, 0x81, 0x18, + 0x29, 0xb0, 0x06, 0x9f, 0x77, 0xee, 0x58, 0xc1, + 0x95, 0x0c, 0xba, 0x23, 0xcb, 0x52, 0xe4, 0x7d, + }, + { + 0x00, 0x9a, 0x29, 0xb3, 0x52, 0xc8, 0x7b, 0xe1, + 0xa4, 0x3e, 0x8d, 0x17, 0xf6, 0x6c, 0xdf, 0x45, + 0x55, 0xcf, 0x7c, 0xe6, 0x07, 0x9d, 0x2e, 0xb4, + 0xf1, 0x6b, 0xd8, 0x42, 0xa3, 0x39, 0x8a, 0x10, + 0xaa, 0x30, 0x83, 0x19, 0xf8, 0x62, 0xd1, 0x4b, + 0x0e, 0x94, 0x27, 0xbd, 0x5c, 0xc6, 0x75, 0xef, + 0xff, 0x65, 0xd6, 0x4c, 0xad, 0x37, 0x84, 0x1e, + 0x5b, 0xc1, 0x72, 0xe8, 0x09, 0x93, 0x20, 0xba, + 0x49, 0xd3, 0x60, 0xfa, 0x1b, 0x81, 0x32, 0xa8, + 0xed, 0x77, 0xc4, 0x5e, 0xbf, 0x25, 0x96, 0x0c, + 0x1c, 0x86, 0x35, 0xaf, 0x4e, 0xd4, 0x67, 0xfd, + 0xb8, 0x22, 0x91, 0x0b, 0xea, 0x70, 0xc3, 0x59, + 0xe3, 0x79, 0xca, 0x50, 0xb1, 0x2b, 0x98, 0x02, + 0x47, 0xdd, 0x6e, 0xf4, 0x15, 0x8f, 0x3c, 0xa6, + 0xb6, 0x2c, 0x9f, 0x05, 0xe4, 0x7e, 0xcd, 0x57, + 0x12, 0x88, 0x3b, 0xa1, 0x40, 0xda, 0x69, 0xf3, + 0x92, 0x08, 0xbb, 0x21, 0xc0, 0x5a, 0xe9, 0x73, + 0x36, 0xac, 0x1f, 0x85, 0x64, 0xfe, 0x4d, 0xd7, + 0xc7, 0x5d, 0xee, 0x74, 0x95, 0x0f, 0xbc, 0x26, + 0x63, 0xf9, 0x4a, 0xd0, 0x31, 0xab, 0x18, 0x82, + 0x38, 0xa2, 0x11, 0x8b, 0x6a, 0xf0, 0x43, 0xd9, + 0x9c, 0x06, 0xb5, 0x2f, 0xce, 0x54, 0xe7, 0x7d, + 0x6d, 0xf7, 0x44, 0xde, 0x3f, 0xa5, 0x16, 0x8c, + 0xc9, 0x53, 0xe0, 0x7a, 0x9b, 0x01, 0xb2, 0x28, + 0xdb, 0x41, 0xf2, 0x68, 0x89, 0x13, 0xa0, 0x3a, + 0x7f, 0xe5, 0x56, 0xcc, 0x2d, 0xb7, 0x04, 0x9e, + 0x8e, 0x14, 0xa7, 0x3d, 0xdc, 0x46, 0xf5, 0x6f, + 0x2a, 0xb0, 0x03, 0x99, 0x78, 0xe2, 0x51, 0xcb, + 0x71, 0xeb, 0x58, 0xc2, 0x23, 0xb9, 0x0a, 0x90, + 0xd5, 0x4f, 0xfc, 0x66, 0x87, 0x1d, 0xae, 0x34, + 0x24, 0xbe, 0x0d, 0x97, 0x76, 0xec, 0x5f, 0xc5, + 0x80, 0x1a, 0xa9, 0x33, 0xd2, 0x48, 0xfb, 0x61, + }, + { + 0x00, 0x9b, 0x2b, 0xb0, 0x56, 0xcd, 0x7d, 0xe6, + 0xac, 0x37, 0x87, 0x1c, 0xfa, 0x61, 0xd1, 0x4a, + 0x45, 0xde, 0x6e, 0xf5, 0x13, 0x88, 0x38, 0xa3, + 0xe9, 0x72, 0xc2, 0x59, 0xbf, 0x24, 0x94, 0x0f, + 0x8a, 0x11, 0xa1, 0x3a, 0xdc, 0x47, 0xf7, 0x6c, + 0x26, 0xbd, 0x0d, 0x96, 0x70, 0xeb, 0x5b, 0xc0, + 0xcf, 0x54, 0xe4, 0x7f, 0x99, 0x02, 0xb2, 0x29, + 0x63, 0xf8, 0x48, 0xd3, 0x35, 0xae, 0x1e, 0x85, + 0x09, 0x92, 0x22, 0xb9, 0x5f, 0xc4, 0x74, 0xef, + 0xa5, 0x3e, 0x8e, 0x15, 0xf3, 0x68, 0xd8, 0x43, + 0x4c, 0xd7, 0x67, 0xfc, 0x1a, 0x81, 0x31, 0xaa, + 0xe0, 0x7b, 0xcb, 0x50, 0xb6, 0x2d, 0x9d, 0x06, + 0x83, 0x18, 0xa8, 0x33, 0xd5, 0x4e, 0xfe, 0x65, + 0x2f, 0xb4, 0x04, 0x9f, 0x79, 0xe2, 0x52, 0xc9, + 0xc6, 0x5d, 0xed, 0x76, 0x90, 0x0b, 0xbb, 0x20, + 0x6a, 0xf1, 0x41, 0xda, 0x3c, 0xa7, 0x17, 0x8c, + 0x12, 0x89, 0x39, 0xa2, 0x44, 0xdf, 0x6f, 0xf4, + 0xbe, 0x25, 0x95, 0x0e, 0xe8, 0x73, 0xc3, 0x58, + 0x57, 0xcc, 0x7c, 0xe7, 0x01, 0x9a, 0x2a, 0xb1, + 0xfb, 0x60, 0xd0, 0x4b, 0xad, 0x36, 0x86, 0x1d, + 0x98, 0x03, 0xb3, 0x28, 0xce, 0x55, 0xe5, 0x7e, + 0x34, 0xaf, 0x1f, 0x84, 0x62, 0xf9, 0x49, 0xd2, + 0xdd, 0x46, 0xf6, 0x6d, 0x8b, 0x10, 0xa0, 0x3b, + 0x71, 0xea, 0x5a, 0xc1, 0x27, 0xbc, 0x0c, 0x97, + 0x1b, 0x80, 0x30, 0xab, 0x4d, 0xd6, 0x66, 0xfd, + 0xb7, 0x2c, 0x9c, 0x07, 0xe1, 0x7a, 0xca, 0x51, + 0x5e, 0xc5, 0x75, 0xee, 0x08, 0x93, 0x23, 0xb8, + 0xf2, 0x69, 0xd9, 0x42, 0xa4, 0x3f, 0x8f, 0x14, + 0x91, 0x0a, 0xba, 0x21, 0xc7, 0x5c, 0xec, 0x77, + 0x3d, 0xa6, 0x16, 0x8d, 0x6b, 0xf0, 0x40, 0xdb, + 0xd4, 0x4f, 0xff, 0x64, 0x82, 0x19, 0xa9, 0x32, + 0x78, 0xe3, 0x53, 0xc8, 0x2e, 0xb5, 0x05, 0x9e, + }, + { + 0x00, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, + 0x94, 0x08, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67, + 0x35, 0xa9, 0x10, 0x8c, 0x7f, 0xe3, 0x5a, 0xc6, + 0xa1, 0x3d, 0x84, 0x18, 0xeb, 0x77, 0xce, 0x52, + 0x6a, 0xf6, 0x4f, 0xd3, 0x20, 0xbc, 0x05, 0x99, + 0xfe, 0x62, 0xdb, 0x47, 0xb4, 0x28, 0x91, 0x0d, + 0x5f, 0xc3, 0x7a, 0xe6, 0x15, 0x89, 0x30, 0xac, + 0xcb, 0x57, 0xee, 0x72, 0x81, 0x1d, 0xa4, 0x38, + 0xd4, 0x48, 0xf1, 0x6d, 0x9e, 0x02, 0xbb, 0x27, + 0x40, 0xdc, 0x65, 0xf9, 0x0a, 0x96, 0x2f, 0xb3, + 0xe1, 0x7d, 0xc4, 0x58, 0xab, 0x37, 0x8e, 0x12, + 0x75, 0xe9, 0x50, 0xcc, 0x3f, 0xa3, 0x1a, 0x86, + 0xbe, 0x22, 0x9b, 0x07, 0xf4, 0x68, 0xd1, 0x4d, + 0x2a, 0xb6, 0x0f, 0x93, 0x60, 0xfc, 0x45, 0xd9, + 0x8b, 0x17, 0xae, 0x32, 0xc1, 0x5d, 0xe4, 0x78, + 0x1f, 0x83, 0x3a, 0xa6, 0x55, 0xc9, 0x70, 0xec, + 0xb5, 0x29, 0x90, 0x0c, 0xff, 0x63, 0xda, 0x46, + 0x21, 0xbd, 0x04, 0x98, 0x6b, 0xf7, 0x4e, 0xd2, + 0x80, 0x1c, 0xa5, 0x39, 0xca, 0x56, 0xef, 0x73, + 0x14, 0x88, 0x31, 0xad, 0x5e, 0xc2, 0x7b, 0xe7, + 0xdf, 0x43, 0xfa, 0x66, 0x95, 0x09, 0xb0, 0x2c, + 0x4b, 0xd7, 0x6e, 0xf2, 0x01, 0x9d, 0x24, 0xb8, + 0xea, 0x76, 0xcf, 0x53, 0xa0, 0x3c, 0x85, 0x19, + 0x7e, 0xe2, 0x5b, 0xc7, 0x34, 0xa8, 0x11, 0x8d, + 0x61, 0xfd, 0x44, 0xd8, 0x2b, 0xb7, 0x0e, 0x92, + 0xf5, 0x69, 0xd0, 0x4c, 0xbf, 0x23, 0x9a, 0x06, + 0x54, 0xc8, 0x71, 0xed, 0x1e, 0x82, 0x3b, 0xa7, + 0xc0, 0x5c, 0xe5, 0x79, 0x8a, 0x16, 0xaf, 0x33, + 0x0b, 0x97, 0x2e, 0xb2, 0x41, 0xdd, 0x64, 0xf8, + 0x9f, 0x03, 0xba, 0x26, 0xd5, 0x49, 0xf0, 0x6c, + 0x3e, 0xa2, 0x1b, 0x87, 0x74, 0xe8, 0x51, 0xcd, + 0xaa, 0x36, 0x8f, 0x13, 0xe0, 0x7c, 0xc5, 0x59, + }, + { + 0x00, 0x9d, 0x27, 0xba, 0x4e, 0xd3, 0x69, 0xf4, + 0x9c, 0x01, 0xbb, 0x26, 0xd2, 0x4f, 0xf5, 0x68, + 0x25, 0xb8, 0x02, 0x9f, 0x6b, 0xf6, 0x4c, 0xd1, + 0xb9, 0x24, 0x9e, 0x03, 0xf7, 0x6a, 0xd0, 0x4d, + 0x4a, 0xd7, 0x6d, 0xf0, 0x04, 0x99, 0x23, 0xbe, + 0xd6, 0x4b, 0xf1, 0x6c, 0x98, 0x05, 0xbf, 0x22, + 0x6f, 0xf2, 0x48, 0xd5, 0x21, 0xbc, 0x06, 0x9b, + 0xf3, 0x6e, 0xd4, 0x49, 0xbd, 0x20, 0x9a, 0x07, + 0x94, 0x09, 0xb3, 0x2e, 0xda, 0x47, 0xfd, 0x60, + 0x08, 0x95, 0x2f, 0xb2, 0x46, 0xdb, 0x61, 0xfc, + 0xb1, 0x2c, 0x96, 0x0b, 0xff, 0x62, 0xd8, 0x45, + 0x2d, 0xb0, 0x0a, 0x97, 0x63, 0xfe, 0x44, 0xd9, + 0xde, 0x43, 0xf9, 0x64, 0x90, 0x0d, 0xb7, 0x2a, + 0x42, 0xdf, 0x65, 0xf8, 0x0c, 0x91, 0x2b, 0xb6, + 0xfb, 0x66, 0xdc, 0x41, 0xb5, 0x28, 0x92, 0x0f, + 0x67, 0xfa, 0x40, 0xdd, 0x29, 0xb4, 0x0e, 0x93, + 0x35, 0xa8, 0x12, 0x8f, 0x7b, 0xe6, 0x5c, 0xc1, + 0xa9, 0x34, 0x8e, 0x13, 0xe7, 0x7a, 0xc0, 0x5d, + 0x10, 0x8d, 0x37, 0xaa, 0x5e, 0xc3, 0x79, 0xe4, + 0x8c, 0x11, 0xab, 0x36, 0xc2, 0x5f, 0xe5, 0x78, + 0x7f, 0xe2, 0x58, 0xc5, 0x31, 0xac, 0x16, 0x8b, + 0xe3, 0x7e, 0xc4, 0x59, 0xad, 0x30, 0x8a, 0x17, + 0x5a, 0xc7, 0x7d, 0xe0, 0x14, 0x89, 0x33, 0xae, + 0xc6, 0x5b, 0xe1, 0x7c, 0x88, 0x15, 0xaf, 0x32, + 0xa1, 0x3c, 0x86, 0x1b, 0xef, 0x72, 0xc8, 0x55, + 0x3d, 0xa0, 0x1a, 0x87, 0x73, 0xee, 0x54, 0xc9, + 0x84, 0x19, 0xa3, 0x3e, 0xca, 0x57, 0xed, 0x70, + 0x18, 0x85, 0x3f, 0xa2, 0x56, 0xcb, 0x71, 0xec, + 0xeb, 0x76, 0xcc, 0x51, 0xa5, 0x38, 0x82, 0x1f, + 0x77, 0xea, 0x50, 0xcd, 0x39, 0xa4, 0x1e, 0x83, + 0xce, 0x53, 0xe9, 0x74, 0x80, 0x1d, 0xa7, 0x3a, + 0x52, 0xcf, 0x75, 0xe8, 0x1c, 0x81, 0x3b, 0xa6, + }, + { + 0x00, 0x9e, 0x21, 0xbf, 0x42, 0xdc, 0x63, 0xfd, + 0x84, 0x1a, 0xa5, 0x3b, 0xc6, 0x58, 0xe7, 0x79, + 0x15, 0x8b, 0x34, 0xaa, 0x57, 0xc9, 0x76, 0xe8, + 0x91, 0x0f, 0xb0, 0x2e, 0xd3, 0x4d, 0xf2, 0x6c, + 0x2a, 0xb4, 0x0b, 0x95, 0x68, 0xf6, 0x49, 0xd7, + 0xae, 0x30, 0x8f, 0x11, 0xec, 0x72, 0xcd, 0x53, + 0x3f, 0xa1, 0x1e, 0x80, 0x7d, 0xe3, 0x5c, 0xc2, + 0xbb, 0x25, 0x9a, 0x04, 0xf9, 0x67, 0xd8, 0x46, + 0x54, 0xca, 0x75, 0xeb, 0x16, 0x88, 0x37, 0xa9, + 0xd0, 0x4e, 0xf1, 0x6f, 0x92, 0x0c, 0xb3, 0x2d, + 0x41, 0xdf, 0x60, 0xfe, 0x03, 0x9d, 0x22, 0xbc, + 0xc5, 0x5b, 0xe4, 0x7a, 0x87, 0x19, 0xa6, 0x38, + 0x7e, 0xe0, 0x5f, 0xc1, 0x3c, 0xa2, 0x1d, 0x83, + 0xfa, 0x64, 0xdb, 0x45, 0xb8, 0x26, 0x99, 0x07, + 0x6b, 0xf5, 0x4a, 0xd4, 0x29, 0xb7, 0x08, 0x96, + 0xef, 0x71, 0xce, 0x50, 0xad, 0x33, 0x8c, 0x12, + 0xa8, 0x36, 0x89, 0x17, 0xea, 0x74, 0xcb, 0x55, + 0x2c, 0xb2, 0x0d, 0x93, 0x6e, 0xf0, 0x4f, 0xd1, + 0xbd, 0x23, 0x9c, 0x02, 0xff, 0x61, 0xde, 0x40, + 0x39, 0xa7, 0x18, 0x86, 0x7b, 0xe5, 0x5a, 0xc4, + 0x82, 0x1c, 0xa3, 0x3d, 0xc0, 0x5e, 0xe1, 0x7f, + 0x06, 0x98, 0x27, 0xb9, 0x44, 0xda, 0x65, 0xfb, + 0x97, 0x09, 0xb6, 0x28, 0xd5, 0x4b, 0xf4, 0x6a, + 0x13, 0x8d, 0x32, 0xac, 0x51, 0xcf, 0x70, 0xee, + 0xfc, 0x62, 0xdd, 0x43, 0xbe, 0x20, 0x9f, 0x01, + 0x78, 0xe6, 0x59, 0xc7, 0x3a, 0xa4, 0x1b, 0x85, + 0xe9, 0x77, 0xc8, 0x56, 0xab, 0x35, 0x8a, 0x14, + 0x6d, 0xf3, 0x4c, 0xd2, 0x2f, 0xb1, 0x0e, 0x90, + 0xd6, 0x48, 0xf7, 0x69, 0x94, 0x0a, 0xb5, 0x2b, + 0x52, 0xcc, 0x73, 0xed, 0x10, 0x8e, 0x31, 0xaf, + 0xc3, 0x5d, 0xe2, 0x7c, 0x81, 0x1f, 0xa0, 0x3e, + 0x47, 0xd9, 0x66, 0xf8, 0x05, 0x9b, 0x24, 0xba, + }, + { + 0x00, 0x9f, 0x23, 0xbc, 0x46, 0xd9, 0x65, 0xfa, + 0x8c, 0x13, 0xaf, 0x30, 0xca, 0x55, 0xe9, 0x76, + 0x05, 0x9a, 0x26, 0xb9, 0x43, 0xdc, 0x60, 0xff, + 0x89, 0x16, 0xaa, 0x35, 0xcf, 0x50, 0xec, 0x73, + 0x0a, 0x95, 0x29, 0xb6, 0x4c, 0xd3, 0x6f, 0xf0, + 0x86, 0x19, 0xa5, 0x3a, 0xc0, 0x5f, 0xe3, 0x7c, + 0x0f, 0x90, 0x2c, 0xb3, 0x49, 0xd6, 0x6a, 0xf5, + 0x83, 0x1c, 0xa0, 0x3f, 0xc5, 0x5a, 0xe6, 0x79, + 0x14, 0x8b, 0x37, 0xa8, 0x52, 0xcd, 0x71, 0xee, + 0x98, 0x07, 0xbb, 0x24, 0xde, 0x41, 0xfd, 0x62, + 0x11, 0x8e, 0x32, 0xad, 0x57, 0xc8, 0x74, 0xeb, + 0x9d, 0x02, 0xbe, 0x21, 0xdb, 0x44, 0xf8, 0x67, + 0x1e, 0x81, 0x3d, 0xa2, 0x58, 0xc7, 0x7b, 0xe4, + 0x92, 0x0d, 0xb1, 0x2e, 0xd4, 0x4b, 0xf7, 0x68, + 0x1b, 0x84, 0x38, 0xa7, 0x5d, 0xc2, 0x7e, 0xe1, + 0x97, 0x08, 0xb4, 0x2b, 0xd1, 0x4e, 0xf2, 0x6d, + 0x28, 0xb7, 0x0b, 0x94, 0x6e, 0xf1, 0x4d, 0xd2, + 0xa4, 0x3b, 0x87, 0x18, 0xe2, 0x7d, 0xc1, 0x5e, + 0x2d, 0xb2, 0x0e, 0x91, 0x6b, 0xf4, 0x48, 0xd7, + 0xa1, 0x3e, 0x82, 0x1d, 0xe7, 0x78, 0xc4, 0x5b, + 0x22, 0xbd, 0x01, 0x9e, 0x64, 0xfb, 0x47, 0xd8, + 0xae, 0x31, 0x8d, 0x12, 0xe8, 0x77, 0xcb, 0x54, + 0x27, 0xb8, 0x04, 0x9b, 0x61, 0xfe, 0x42, 0xdd, + 0xab, 0x34, 0x88, 0x17, 0xed, 0x72, 0xce, 0x51, + 0x3c, 0xa3, 0x1f, 0x80, 0x7a, 0xe5, 0x59, 0xc6, + 0xb0, 0x2f, 0x93, 0x0c, 0xf6, 0x69, 0xd5, 0x4a, + 0x39, 0xa6, 0x1a, 0x85, 0x7f, 0xe0, 0x5c, 0xc3, + 0xb5, 0x2a, 0x96, 0x09, 0xf3, 0x6c, 0xd0, 0x4f, + 0x36, 0xa9, 0x15, 0x8a, 0x70, 0xef, 0x53, 0xcc, + 0xba, 0x25, 0x99, 0x06, 0xfc, 0x63, 0xdf, 0x40, + 0x33, 0xac, 0x10, 0x8f, 0x75, 0xea, 0x56, 0xc9, + 0xbf, 0x20, 0x9c, 0x03, 0xf9, 0x66, 0xda, 0x45, + }, + { + 0x00, 0xa0, 0x5d, 0xfd, 0xba, 0x1a, 0xe7, 0x47, + 0x69, 0xc9, 0x34, 0x94, 0xd3, 0x73, 0x8e, 0x2e, + 0xd2, 0x72, 0x8f, 0x2f, 0x68, 0xc8, 0x35, 0x95, + 0xbb, 0x1b, 0xe6, 0x46, 0x01, 0xa1, 0x5c, 0xfc, + 0xb9, 0x19, 0xe4, 0x44, 0x03, 0xa3, 0x5e, 0xfe, + 0xd0, 0x70, 0x8d, 0x2d, 0x6a, 0xca, 0x37, 0x97, + 0x6b, 0xcb, 0x36, 0x96, 0xd1, 0x71, 0x8c, 0x2c, + 0x02, 0xa2, 0x5f, 0xff, 0xb8, 0x18, 0xe5, 0x45, + 0x6f, 0xcf, 0x32, 0x92, 0xd5, 0x75, 0x88, 0x28, + 0x06, 0xa6, 0x5b, 0xfb, 0xbc, 0x1c, 0xe1, 0x41, + 0xbd, 0x1d, 0xe0, 0x40, 0x07, 0xa7, 0x5a, 0xfa, + 0xd4, 0x74, 0x89, 0x29, 0x6e, 0xce, 0x33, 0x93, + 0xd6, 0x76, 0x8b, 0x2b, 0x6c, 0xcc, 0x31, 0x91, + 0xbf, 0x1f, 0xe2, 0x42, 0x05, 0xa5, 0x58, 0xf8, + 0x04, 0xa4, 0x59, 0xf9, 0xbe, 0x1e, 0xe3, 0x43, + 0x6d, 0xcd, 0x30, 0x90, 0xd7, 0x77, 0x8a, 0x2a, + 0xde, 0x7e, 0x83, 0x23, 0x64, 0xc4, 0x39, 0x99, + 0xb7, 0x17, 0xea, 0x4a, 0x0d, 0xad, 0x50, 0xf0, + 0x0c, 0xac, 0x51, 0xf1, 0xb6, 0x16, 0xeb, 0x4b, + 0x65, 0xc5, 0x38, 0x98, 0xdf, 0x7f, 0x82, 0x22, + 0x67, 0xc7, 0x3a, 0x9a, 0xdd, 0x7d, 0x80, 0x20, + 0x0e, 0xae, 0x53, 0xf3, 0xb4, 0x14, 0xe9, 0x49, + 0xb5, 0x15, 0xe8, 0x48, 0x0f, 0xaf, 0x52, 0xf2, + 0xdc, 0x7c, 0x81, 0x21, 0x66, 0xc6, 0x3b, 0x9b, + 0xb1, 0x11, 0xec, 0x4c, 0x0b, 0xab, 0x56, 0xf6, + 0xd8, 0x78, 0x85, 0x25, 0x62, 0xc2, 0x3f, 0x9f, + 0x63, 0xc3, 0x3e, 0x9e, 0xd9, 0x79, 0x84, 0x24, + 0x0a, 0xaa, 0x57, 0xf7, 0xb0, 0x10, 0xed, 0x4d, + 0x08, 0xa8, 0x55, 0xf5, 0xb2, 0x12, 0xef, 0x4f, + 0x61, 0xc1, 0x3c, 0x9c, 0xdb, 0x7b, 0x86, 0x26, + 0xda, 0x7a, 0x87, 0x27, 0x60, 0xc0, 0x3d, 0x9d, + 0xb3, 0x13, 0xee, 0x4e, 0x09, 0xa9, 0x54, 0xf4, + }, + { + 0x00, 0xa1, 0x5f, 0xfe, 0xbe, 0x1f, 0xe1, 0x40, + 0x61, 0xc0, 0x3e, 0x9f, 0xdf, 0x7e, 0x80, 0x21, + 0xc2, 0x63, 0x9d, 0x3c, 0x7c, 0xdd, 0x23, 0x82, + 0xa3, 0x02, 0xfc, 0x5d, 0x1d, 0xbc, 0x42, 0xe3, + 0x99, 0x38, 0xc6, 0x67, 0x27, 0x86, 0x78, 0xd9, + 0xf8, 0x59, 0xa7, 0x06, 0x46, 0xe7, 0x19, 0xb8, + 0x5b, 0xfa, 0x04, 0xa5, 0xe5, 0x44, 0xba, 0x1b, + 0x3a, 0x9b, 0x65, 0xc4, 0x84, 0x25, 0xdb, 0x7a, + 0x2f, 0x8e, 0x70, 0xd1, 0x91, 0x30, 0xce, 0x6f, + 0x4e, 0xef, 0x11, 0xb0, 0xf0, 0x51, 0xaf, 0x0e, + 0xed, 0x4c, 0xb2, 0x13, 0x53, 0xf2, 0x0c, 0xad, + 0x8c, 0x2d, 0xd3, 0x72, 0x32, 0x93, 0x6d, 0xcc, + 0xb6, 0x17, 0xe9, 0x48, 0x08, 0xa9, 0x57, 0xf6, + 0xd7, 0x76, 0x88, 0x29, 0x69, 0xc8, 0x36, 0x97, + 0x74, 0xd5, 0x2b, 0x8a, 0xca, 0x6b, 0x95, 0x34, + 0x15, 0xb4, 0x4a, 0xeb, 0xab, 0x0a, 0xf4, 0x55, + 0x5e, 0xff, 0x01, 0xa0, 0xe0, 0x41, 0xbf, 0x1e, + 0x3f, 0x9e, 0x60, 0xc1, 0x81, 0x20, 0xde, 0x7f, + 0x9c, 0x3d, 0xc3, 0x62, 0x22, 0x83, 0x7d, 0xdc, + 0xfd, 0x5c, 0xa2, 0x03, 0x43, 0xe2, 0x1c, 0xbd, + 0xc7, 0x66, 0x98, 0x39, 0x79, 0xd8, 0x26, 0x87, + 0xa6, 0x07, 0xf9, 0x58, 0x18, 0xb9, 0x47, 0xe6, + 0x05, 0xa4, 0x5a, 0xfb, 0xbb, 0x1a, 0xe4, 0x45, + 0x64, 0xc5, 0x3b, 0x9a, 0xda, 0x7b, 0x85, 0x24, + 0x71, 0xd0, 0x2e, 0x8f, 0xcf, 0x6e, 0x90, 0x31, + 0x10, 0xb1, 0x4f, 0xee, 0xae, 0x0f, 0xf1, 0x50, + 0xb3, 0x12, 0xec, 0x4d, 0x0d, 0xac, 0x52, 0xf3, + 0xd2, 0x73, 0x8d, 0x2c, 0x6c, 0xcd, 0x33, 0x92, + 0xe8, 0x49, 0xb7, 0x16, 0x56, 0xf7, 0x09, 0xa8, + 0x89, 0x28, 0xd6, 0x77, 0x37, 0x96, 0x68, 0xc9, + 0x2a, 0x8b, 0x75, 0xd4, 0x94, 0x35, 0xcb, 0x6a, + 0x4b, 0xea, 0x14, 0xb5, 0xf5, 0x54, 0xaa, 0x0b, + }, + { + 0x00, 0xa2, 0x59, 0xfb, 0xb2, 0x10, 0xeb, 0x49, + 0x79, 0xdb, 0x20, 0x82, 0xcb, 0x69, 0x92, 0x30, + 0xf2, 0x50, 0xab, 0x09, 0x40, 0xe2, 0x19, 0xbb, + 0x8b, 0x29, 0xd2, 0x70, 0x39, 0x9b, 0x60, 0xc2, + 0xf9, 0x5b, 0xa0, 0x02, 0x4b, 0xe9, 0x12, 0xb0, + 0x80, 0x22, 0xd9, 0x7b, 0x32, 0x90, 0x6b, 0xc9, + 0x0b, 0xa9, 0x52, 0xf0, 0xb9, 0x1b, 0xe0, 0x42, + 0x72, 0xd0, 0x2b, 0x89, 0xc0, 0x62, 0x99, 0x3b, + 0xef, 0x4d, 0xb6, 0x14, 0x5d, 0xff, 0x04, 0xa6, + 0x96, 0x34, 0xcf, 0x6d, 0x24, 0x86, 0x7d, 0xdf, + 0x1d, 0xbf, 0x44, 0xe6, 0xaf, 0x0d, 0xf6, 0x54, + 0x64, 0xc6, 0x3d, 0x9f, 0xd6, 0x74, 0x8f, 0x2d, + 0x16, 0xb4, 0x4f, 0xed, 0xa4, 0x06, 0xfd, 0x5f, + 0x6f, 0xcd, 0x36, 0x94, 0xdd, 0x7f, 0x84, 0x26, + 0xe4, 0x46, 0xbd, 0x1f, 0x56, 0xf4, 0x0f, 0xad, + 0x9d, 0x3f, 0xc4, 0x66, 0x2f, 0x8d, 0x76, 0xd4, + 0xc3, 0x61, 0x9a, 0x38, 0x71, 0xd3, 0x28, 0x8a, + 0xba, 0x18, 0xe3, 0x41, 0x08, 0xaa, 0x51, 0xf3, + 0x31, 0x93, 0x68, 0xca, 0x83, 0x21, 0xda, 0x78, + 0x48, 0xea, 0x11, 0xb3, 0xfa, 0x58, 0xa3, 0x01, + 0x3a, 0x98, 0x63, 0xc1, 0x88, 0x2a, 0xd1, 0x73, + 0x43, 0xe1, 0x1a, 0xb8, 0xf1, 0x53, 0xa8, 0x0a, + 0xc8, 0x6a, 0x91, 0x33, 0x7a, 0xd8, 0x23, 0x81, + 0xb1, 0x13, 0xe8, 0x4a, 0x03, 0xa1, 0x5a, 0xf8, + 0x2c, 0x8e, 0x75, 0xd7, 0x9e, 0x3c, 0xc7, 0x65, + 0x55, 0xf7, 0x0c, 0xae, 0xe7, 0x45, 0xbe, 0x1c, + 0xde, 0x7c, 0x87, 0x25, 0x6c, 0xce, 0x35, 0x97, + 0xa7, 0x05, 0xfe, 0x5c, 0x15, 0xb7, 0x4c, 0xee, + 0xd5, 0x77, 0x8c, 0x2e, 0x67, 0xc5, 0x3e, 0x9c, + 0xac, 0x0e, 0xf5, 0x57, 0x1e, 0xbc, 0x47, 0xe5, + 0x27, 0x85, 0x7e, 0xdc, 0x95, 0x37, 0xcc, 0x6e, + 0x5e, 0xfc, 0x07, 0xa5, 0xec, 0x4e, 0xb5, 0x17, + }, + { + 0x00, 0xa3, 0x5b, 0xf8, 0xb6, 0x15, 0xed, 0x4e, + 0x71, 0xd2, 0x2a, 0x89, 0xc7, 0x64, 0x9c, 0x3f, + 0xe2, 0x41, 0xb9, 0x1a, 0x54, 0xf7, 0x0f, 0xac, + 0x93, 0x30, 0xc8, 0x6b, 0x25, 0x86, 0x7e, 0xdd, + 0xd9, 0x7a, 0x82, 0x21, 0x6f, 0xcc, 0x34, 0x97, + 0xa8, 0x0b, 0xf3, 0x50, 0x1e, 0xbd, 0x45, 0xe6, + 0x3b, 0x98, 0x60, 0xc3, 0x8d, 0x2e, 0xd6, 0x75, + 0x4a, 0xe9, 0x11, 0xb2, 0xfc, 0x5f, 0xa7, 0x04, + 0xaf, 0x0c, 0xf4, 0x57, 0x19, 0xba, 0x42, 0xe1, + 0xde, 0x7d, 0x85, 0x26, 0x68, 0xcb, 0x33, 0x90, + 0x4d, 0xee, 0x16, 0xb5, 0xfb, 0x58, 0xa0, 0x03, + 0x3c, 0x9f, 0x67, 0xc4, 0x8a, 0x29, 0xd1, 0x72, + 0x76, 0xd5, 0x2d, 0x8e, 0xc0, 0x63, 0x9b, 0x38, + 0x07, 0xa4, 0x5c, 0xff, 0xb1, 0x12, 0xea, 0x49, + 0x94, 0x37, 0xcf, 0x6c, 0x22, 0x81, 0x79, 0xda, + 0xe5, 0x46, 0xbe, 0x1d, 0x53, 0xf0, 0x08, 0xab, + 0x43, 0xe0, 0x18, 0xbb, 0xf5, 0x56, 0xae, 0x0d, + 0x32, 0x91, 0x69, 0xca, 0x84, 0x27, 0xdf, 0x7c, + 0xa1, 0x02, 0xfa, 0x59, 0x17, 0xb4, 0x4c, 0xef, + 0xd0, 0x73, 0x8b, 0x28, 0x66, 0xc5, 0x3d, 0x9e, + 0x9a, 0x39, 0xc1, 0x62, 0x2c, 0x8f, 0x77, 0xd4, + 0xeb, 0x48, 0xb0, 0x13, 0x5d, 0xfe, 0x06, 0xa5, + 0x78, 0xdb, 0x23, 0x80, 0xce, 0x6d, 0x95, 0x36, + 0x09, 0xaa, 0x52, 0xf1, 0xbf, 0x1c, 0xe4, 0x47, + 0xec, 0x4f, 0xb7, 0x14, 0x5a, 0xf9, 0x01, 0xa2, + 0x9d, 0x3e, 0xc6, 0x65, 0x2b, 0x88, 0x70, 0xd3, + 0x0e, 0xad, 0x55, 0xf6, 0xb8, 0x1b, 0xe3, 0x40, + 0x7f, 0xdc, 0x24, 0x87, 0xc9, 0x6a, 0x92, 0x31, + 0x35, 0x96, 0x6e, 0xcd, 0x83, 0x20, 0xd8, 0x7b, + 0x44, 0xe7, 0x1f, 0xbc, 0xf2, 0x51, 0xa9, 0x0a, + 0xd7, 0x74, 0x8c, 0x2f, 0x61, 0xc2, 0x3a, 0x99, + 0xa6, 0x05, 0xfd, 0x5e, 0x10, 0xb3, 0x4b, 0xe8, + }, + { + 0x00, 0xa4, 0x55, 0xf1, 0xaa, 0x0e, 0xff, 0x5b, + 0x49, 0xed, 0x1c, 0xb8, 0xe3, 0x47, 0xb6, 0x12, + 0x92, 0x36, 0xc7, 0x63, 0x38, 0x9c, 0x6d, 0xc9, + 0xdb, 0x7f, 0x8e, 0x2a, 0x71, 0xd5, 0x24, 0x80, + 0x39, 0x9d, 0x6c, 0xc8, 0x93, 0x37, 0xc6, 0x62, + 0x70, 0xd4, 0x25, 0x81, 0xda, 0x7e, 0x8f, 0x2b, + 0xab, 0x0f, 0xfe, 0x5a, 0x01, 0xa5, 0x54, 0xf0, + 0xe2, 0x46, 0xb7, 0x13, 0x48, 0xec, 0x1d, 0xb9, + 0x72, 0xd6, 0x27, 0x83, 0xd8, 0x7c, 0x8d, 0x29, + 0x3b, 0x9f, 0x6e, 0xca, 0x91, 0x35, 0xc4, 0x60, + 0xe0, 0x44, 0xb5, 0x11, 0x4a, 0xee, 0x1f, 0xbb, + 0xa9, 0x0d, 0xfc, 0x58, 0x03, 0xa7, 0x56, 0xf2, + 0x4b, 0xef, 0x1e, 0xba, 0xe1, 0x45, 0xb4, 0x10, + 0x02, 0xa6, 0x57, 0xf3, 0xa8, 0x0c, 0xfd, 0x59, + 0xd9, 0x7d, 0x8c, 0x28, 0x73, 0xd7, 0x26, 0x82, + 0x90, 0x34, 0xc5, 0x61, 0x3a, 0x9e, 0x6f, 0xcb, + 0xe4, 0x40, 0xb1, 0x15, 0x4e, 0xea, 0x1b, 0xbf, + 0xad, 0x09, 0xf8, 0x5c, 0x07, 0xa3, 0x52, 0xf6, + 0x76, 0xd2, 0x23, 0x87, 0xdc, 0x78, 0x89, 0x2d, + 0x3f, 0x9b, 0x6a, 0xce, 0x95, 0x31, 0xc0, 0x64, + 0xdd, 0x79, 0x88, 0x2c, 0x77, 0xd3, 0x22, 0x86, + 0x94, 0x30, 0xc1, 0x65, 0x3e, 0x9a, 0x6b, 0xcf, + 0x4f, 0xeb, 0x1a, 0xbe, 0xe5, 0x41, 0xb0, 0x14, + 0x06, 0xa2, 0x53, 0xf7, 0xac, 0x08, 0xf9, 0x5d, + 0x96, 0x32, 0xc3, 0x67, 0x3c, 0x98, 0x69, 0xcd, + 0xdf, 0x7b, 0x8a, 0x2e, 0x75, 0xd1, 0x20, 0x84, + 0x04, 0xa0, 0x51, 0xf5, 0xae, 0x0a, 0xfb, 0x5f, + 0x4d, 0xe9, 0x18, 0xbc, 0xe7, 0x43, 0xb2, 0x16, + 0xaf, 0x0b, 0xfa, 0x5e, 0x05, 0xa1, 0x50, 0xf4, + 0xe6, 0x42, 0xb3, 0x17, 0x4c, 0xe8, 0x19, 0xbd, + 0x3d, 0x99, 0x68, 0xcc, 0x97, 0x33, 0xc2, 0x66, + 0x74, 0xd0, 0x21, 0x85, 0xde, 0x7a, 0x8b, 0x2f, + }, + { + 0x00, 0xa5, 0x57, 0xf2, 0xae, 0x0b, 0xf9, 0x5c, + 0x41, 0xe4, 0x16, 0xb3, 0xef, 0x4a, 0xb8, 0x1d, + 0x82, 0x27, 0xd5, 0x70, 0x2c, 0x89, 0x7b, 0xde, + 0xc3, 0x66, 0x94, 0x31, 0x6d, 0xc8, 0x3a, 0x9f, + 0x19, 0xbc, 0x4e, 0xeb, 0xb7, 0x12, 0xe0, 0x45, + 0x58, 0xfd, 0x0f, 0xaa, 0xf6, 0x53, 0xa1, 0x04, + 0x9b, 0x3e, 0xcc, 0x69, 0x35, 0x90, 0x62, 0xc7, + 0xda, 0x7f, 0x8d, 0x28, 0x74, 0xd1, 0x23, 0x86, + 0x32, 0x97, 0x65, 0xc0, 0x9c, 0x39, 0xcb, 0x6e, + 0x73, 0xd6, 0x24, 0x81, 0xdd, 0x78, 0x8a, 0x2f, + 0xb0, 0x15, 0xe7, 0x42, 0x1e, 0xbb, 0x49, 0xec, + 0xf1, 0x54, 0xa6, 0x03, 0x5f, 0xfa, 0x08, 0xad, + 0x2b, 0x8e, 0x7c, 0xd9, 0x85, 0x20, 0xd2, 0x77, + 0x6a, 0xcf, 0x3d, 0x98, 0xc4, 0x61, 0x93, 0x36, + 0xa9, 0x0c, 0xfe, 0x5b, 0x07, 0xa2, 0x50, 0xf5, + 0xe8, 0x4d, 0xbf, 0x1a, 0x46, 0xe3, 0x11, 0xb4, + 0x64, 0xc1, 0x33, 0x96, 0xca, 0x6f, 0x9d, 0x38, + 0x25, 0x80, 0x72, 0xd7, 0x8b, 0x2e, 0xdc, 0x79, + 0xe6, 0x43, 0xb1, 0x14, 0x48, 0xed, 0x1f, 0xba, + 0xa7, 0x02, 0xf0, 0x55, 0x09, 0xac, 0x5e, 0xfb, + 0x7d, 0xd8, 0x2a, 0x8f, 0xd3, 0x76, 0x84, 0x21, + 0x3c, 0x99, 0x6b, 0xce, 0x92, 0x37, 0xc5, 0x60, + 0xff, 0x5a, 0xa8, 0x0d, 0x51, 0xf4, 0x06, 0xa3, + 0xbe, 0x1b, 0xe9, 0x4c, 0x10, 0xb5, 0x47, 0xe2, + 0x56, 0xf3, 0x01, 0xa4, 0xf8, 0x5d, 0xaf, 0x0a, + 0x17, 0xb2, 0x40, 0xe5, 0xb9, 0x1c, 0xee, 0x4b, + 0xd4, 0x71, 0x83, 0x26, 0x7a, 0xdf, 0x2d, 0x88, + 0x95, 0x30, 0xc2, 0x67, 0x3b, 0x9e, 0x6c, 0xc9, + 0x4f, 0xea, 0x18, 0xbd, 0xe1, 0x44, 0xb6, 0x13, + 0x0e, 0xab, 0x59, 0xfc, 0xa0, 0x05, 0xf7, 0x52, + 0xcd, 0x68, 0x9a, 0x3f, 0x63, 0xc6, 0x34, 0x91, + 0x8c, 0x29, 0xdb, 0x7e, 0x22, 0x87, 0x75, 0xd0, + }, + { + 0x00, 0xa6, 0x51, 0xf7, 0xa2, 0x04, 0xf3, 0x55, + 0x59, 0xff, 0x08, 0xae, 0xfb, 0x5d, 0xaa, 0x0c, + 0xb2, 0x14, 0xe3, 0x45, 0x10, 0xb6, 0x41, 0xe7, + 0xeb, 0x4d, 0xba, 0x1c, 0x49, 0xef, 0x18, 0xbe, + 0x79, 0xdf, 0x28, 0x8e, 0xdb, 0x7d, 0x8a, 0x2c, + 0x20, 0x86, 0x71, 0xd7, 0x82, 0x24, 0xd3, 0x75, + 0xcb, 0x6d, 0x9a, 0x3c, 0x69, 0xcf, 0x38, 0x9e, + 0x92, 0x34, 0xc3, 0x65, 0x30, 0x96, 0x61, 0xc7, + 0xf2, 0x54, 0xa3, 0x05, 0x50, 0xf6, 0x01, 0xa7, + 0xab, 0x0d, 0xfa, 0x5c, 0x09, 0xaf, 0x58, 0xfe, + 0x40, 0xe6, 0x11, 0xb7, 0xe2, 0x44, 0xb3, 0x15, + 0x19, 0xbf, 0x48, 0xee, 0xbb, 0x1d, 0xea, 0x4c, + 0x8b, 0x2d, 0xda, 0x7c, 0x29, 0x8f, 0x78, 0xde, + 0xd2, 0x74, 0x83, 0x25, 0x70, 0xd6, 0x21, 0x87, + 0x39, 0x9f, 0x68, 0xce, 0x9b, 0x3d, 0xca, 0x6c, + 0x60, 0xc6, 0x31, 0x97, 0xc2, 0x64, 0x93, 0x35, + 0xf9, 0x5f, 0xa8, 0x0e, 0x5b, 0xfd, 0x0a, 0xac, + 0xa0, 0x06, 0xf1, 0x57, 0x02, 0xa4, 0x53, 0xf5, + 0x4b, 0xed, 0x1a, 0xbc, 0xe9, 0x4f, 0xb8, 0x1e, + 0x12, 0xb4, 0x43, 0xe5, 0xb0, 0x16, 0xe1, 0x47, + 0x80, 0x26, 0xd1, 0x77, 0x22, 0x84, 0x73, 0xd5, + 0xd9, 0x7f, 0x88, 0x2e, 0x7b, 0xdd, 0x2a, 0x8c, + 0x32, 0x94, 0x63, 0xc5, 0x90, 0x36, 0xc1, 0x67, + 0x6b, 0xcd, 0x3a, 0x9c, 0xc9, 0x6f, 0x98, 0x3e, + 0x0b, 0xad, 0x5a, 0xfc, 0xa9, 0x0f, 0xf8, 0x5e, + 0x52, 0xf4, 0x03, 0xa5, 0xf0, 0x56, 0xa1, 0x07, + 0xb9, 0x1f, 0xe8, 0x4e, 0x1b, 0xbd, 0x4a, 0xec, + 0xe0, 0x46, 0xb1, 0x17, 0x42, 0xe4, 0x13, 0xb5, + 0x72, 0xd4, 0x23, 0x85, 0xd0, 0x76, 0x81, 0x27, + 0x2b, 0x8d, 0x7a, 0xdc, 0x89, 0x2f, 0xd8, 0x7e, + 0xc0, 0x66, 0x91, 0x37, 0x62, 0xc4, 0x33, 0x95, + 0x99, 0x3f, 0xc8, 0x6e, 0x3b, 0x9d, 0x6a, 0xcc, + }, + { + 0x00, 0xa7, 0x53, 0xf4, 0xa6, 0x01, 0xf5, 0x52, + 0x51, 0xf6, 0x02, 0xa5, 0xf7, 0x50, 0xa4, 0x03, + 0xa2, 0x05, 0xf1, 0x56, 0x04, 0xa3, 0x57, 0xf0, + 0xf3, 0x54, 0xa0, 0x07, 0x55, 0xf2, 0x06, 0xa1, + 0x59, 0xfe, 0x0a, 0xad, 0xff, 0x58, 0xac, 0x0b, + 0x08, 0xaf, 0x5b, 0xfc, 0xae, 0x09, 0xfd, 0x5a, + 0xfb, 0x5c, 0xa8, 0x0f, 0x5d, 0xfa, 0x0e, 0xa9, + 0xaa, 0x0d, 0xf9, 0x5e, 0x0c, 0xab, 0x5f, 0xf8, + 0xb2, 0x15, 0xe1, 0x46, 0x14, 0xb3, 0x47, 0xe0, + 0xe3, 0x44, 0xb0, 0x17, 0x45, 0xe2, 0x16, 0xb1, + 0x10, 0xb7, 0x43, 0xe4, 0xb6, 0x11, 0xe5, 0x42, + 0x41, 0xe6, 0x12, 0xb5, 0xe7, 0x40, 0xb4, 0x13, + 0xeb, 0x4c, 0xb8, 0x1f, 0x4d, 0xea, 0x1e, 0xb9, + 0xba, 0x1d, 0xe9, 0x4e, 0x1c, 0xbb, 0x4f, 0xe8, + 0x49, 0xee, 0x1a, 0xbd, 0xef, 0x48, 0xbc, 0x1b, + 0x18, 0xbf, 0x4b, 0xec, 0xbe, 0x19, 0xed, 0x4a, + 0x79, 0xde, 0x2a, 0x8d, 0xdf, 0x78, 0x8c, 0x2b, + 0x28, 0x8f, 0x7b, 0xdc, 0x8e, 0x29, 0xdd, 0x7a, + 0xdb, 0x7c, 0x88, 0x2f, 0x7d, 0xda, 0x2e, 0x89, + 0x8a, 0x2d, 0xd9, 0x7e, 0x2c, 0x8b, 0x7f, 0xd8, + 0x20, 0x87, 0x73, 0xd4, 0x86, 0x21, 0xd5, 0x72, + 0x71, 0xd6, 0x22, 0x85, 0xd7, 0x70, 0x84, 0x23, + 0x82, 0x25, 0xd1, 0x76, 0x24, 0x83, 0x77, 0xd0, + 0xd3, 0x74, 0x80, 0x27, 0x75, 0xd2, 0x26, 0x81, + 0xcb, 0x6c, 0x98, 0x3f, 0x6d, 0xca, 0x3e, 0x99, + 0x9a, 0x3d, 0xc9, 0x6e, 0x3c, 0x9b, 0x6f, 0xc8, + 0x69, 0xce, 0x3a, 0x9d, 0xcf, 0x68, 0x9c, 0x3b, + 0x38, 0x9f, 0x6b, 0xcc, 0x9e, 0x39, 0xcd, 0x6a, + 0x92, 0x35, 0xc1, 0x66, 0x34, 0x93, 0x67, 0xc0, + 0xc3, 0x64, 0x90, 0x37, 0x65, 0xc2, 0x36, 0x91, + 0x30, 0x97, 0x63, 0xc4, 0x96, 0x31, 0xc5, 0x62, + 0x61, 0xc6, 0x32, 0x95, 0xc7, 0x60, 0x94, 0x33, + }, + { + 0x00, 0xa8, 0x4d, 0xe5, 0x9a, 0x32, 0xd7, 0x7f, + 0x29, 0x81, 0x64, 0xcc, 0xb3, 0x1b, 0xfe, 0x56, + 0x52, 0xfa, 0x1f, 0xb7, 0xc8, 0x60, 0x85, 0x2d, + 0x7b, 0xd3, 0x36, 0x9e, 0xe1, 0x49, 0xac, 0x04, + 0xa4, 0x0c, 0xe9, 0x41, 0x3e, 0x96, 0x73, 0xdb, + 0x8d, 0x25, 0xc0, 0x68, 0x17, 0xbf, 0x5a, 0xf2, + 0xf6, 0x5e, 0xbb, 0x13, 0x6c, 0xc4, 0x21, 0x89, + 0xdf, 0x77, 0x92, 0x3a, 0x45, 0xed, 0x08, 0xa0, + 0x55, 0xfd, 0x18, 0xb0, 0xcf, 0x67, 0x82, 0x2a, + 0x7c, 0xd4, 0x31, 0x99, 0xe6, 0x4e, 0xab, 0x03, + 0x07, 0xaf, 0x4a, 0xe2, 0x9d, 0x35, 0xd0, 0x78, + 0x2e, 0x86, 0x63, 0xcb, 0xb4, 0x1c, 0xf9, 0x51, + 0xf1, 0x59, 0xbc, 0x14, 0x6b, 0xc3, 0x26, 0x8e, + 0xd8, 0x70, 0x95, 0x3d, 0x42, 0xea, 0x0f, 0xa7, + 0xa3, 0x0b, 0xee, 0x46, 0x39, 0x91, 0x74, 0xdc, + 0x8a, 0x22, 0xc7, 0x6f, 0x10, 0xb8, 0x5d, 0xf5, + 0xaa, 0x02, 0xe7, 0x4f, 0x30, 0x98, 0x7d, 0xd5, + 0x83, 0x2b, 0xce, 0x66, 0x19, 0xb1, 0x54, 0xfc, + 0xf8, 0x50, 0xb5, 0x1d, 0x62, 0xca, 0x2f, 0x87, + 0xd1, 0x79, 0x9c, 0x34, 0x4b, 0xe3, 0x06, 0xae, + 0x0e, 0xa6, 0x43, 0xeb, 0x94, 0x3c, 0xd9, 0x71, + 0x27, 0x8f, 0x6a, 0xc2, 0xbd, 0x15, 0xf0, 0x58, + 0x5c, 0xf4, 0x11, 0xb9, 0xc6, 0x6e, 0x8b, 0x23, + 0x75, 0xdd, 0x38, 0x90, 0xef, 0x47, 0xa2, 0x0a, + 0xff, 0x57, 0xb2, 0x1a, 0x65, 0xcd, 0x28, 0x80, + 0xd6, 0x7e, 0x9b, 0x33, 0x4c, 0xe4, 0x01, 0xa9, + 0xad, 0x05, 0xe0, 0x48, 0x37, 0x9f, 0x7a, 0xd2, + 0x84, 0x2c, 0xc9, 0x61, 0x1e, 0xb6, 0x53, 0xfb, + 0x5b, 0xf3, 0x16, 0xbe, 0xc1, 0x69, 0x8c, 0x24, + 0x72, 0xda, 0x3f, 0x97, 0xe8, 0x40, 0xa5, 0x0d, + 0x09, 0xa1, 0x44, 0xec, 0x93, 0x3b, 0xde, 0x76, + 0x20, 0x88, 0x6d, 0xc5, 0xba, 0x12, 0xf7, 0x5f, + }, + { + 0x00, 0xa9, 0x4f, 0xe6, 0x9e, 0x37, 0xd1, 0x78, + 0x21, 0x88, 0x6e, 0xc7, 0xbf, 0x16, 0xf0, 0x59, + 0x42, 0xeb, 0x0d, 0xa4, 0xdc, 0x75, 0x93, 0x3a, + 0x63, 0xca, 0x2c, 0x85, 0xfd, 0x54, 0xb2, 0x1b, + 0x84, 0x2d, 0xcb, 0x62, 0x1a, 0xb3, 0x55, 0xfc, + 0xa5, 0x0c, 0xea, 0x43, 0x3b, 0x92, 0x74, 0xdd, + 0xc6, 0x6f, 0x89, 0x20, 0x58, 0xf1, 0x17, 0xbe, + 0xe7, 0x4e, 0xa8, 0x01, 0x79, 0xd0, 0x36, 0x9f, + 0x15, 0xbc, 0x5a, 0xf3, 0x8b, 0x22, 0xc4, 0x6d, + 0x34, 0x9d, 0x7b, 0xd2, 0xaa, 0x03, 0xe5, 0x4c, + 0x57, 0xfe, 0x18, 0xb1, 0xc9, 0x60, 0x86, 0x2f, + 0x76, 0xdf, 0x39, 0x90, 0xe8, 0x41, 0xa7, 0x0e, + 0x91, 0x38, 0xde, 0x77, 0x0f, 0xa6, 0x40, 0xe9, + 0xb0, 0x19, 0xff, 0x56, 0x2e, 0x87, 0x61, 0xc8, + 0xd3, 0x7a, 0x9c, 0x35, 0x4d, 0xe4, 0x02, 0xab, + 0xf2, 0x5b, 0xbd, 0x14, 0x6c, 0xc5, 0x23, 0x8a, + 0x2a, 0x83, 0x65, 0xcc, 0xb4, 0x1d, 0xfb, 0x52, + 0x0b, 0xa2, 0x44, 0xed, 0x95, 0x3c, 0xda, 0x73, + 0x68, 0xc1, 0x27, 0x8e, 0xf6, 0x5f, 0xb9, 0x10, + 0x49, 0xe0, 0x06, 0xaf, 0xd7, 0x7e, 0x98, 0x31, + 0xae, 0x07, 0xe1, 0x48, 0x30, 0x99, 0x7f, 0xd6, + 0x8f, 0x26, 0xc0, 0x69, 0x11, 0xb8, 0x5e, 0xf7, + 0xec, 0x45, 0xa3, 0x0a, 0x72, 0xdb, 0x3d, 0x94, + 0xcd, 0x64, 0x82, 0x2b, 0x53, 0xfa, 0x1c, 0xb5, + 0x3f, 0x96, 0x70, 0xd9, 0xa1, 0x08, 0xee, 0x47, + 0x1e, 0xb7, 0x51, 0xf8, 0x80, 0x29, 0xcf, 0x66, + 0x7d, 0xd4, 0x32, 0x9b, 0xe3, 0x4a, 0xac, 0x05, + 0x5c, 0xf5, 0x13, 0xba, 0xc2, 0x6b, 0x8d, 0x24, + 0xbb, 0x12, 0xf4, 0x5d, 0x25, 0x8c, 0x6a, 0xc3, + 0x9a, 0x33, 0xd5, 0x7c, 0x04, 0xad, 0x4b, 0xe2, + 0xf9, 0x50, 0xb6, 0x1f, 0x67, 0xce, 0x28, 0x81, + 0xd8, 0x71, 0x97, 0x3e, 0x46, 0xef, 0x09, 0xa0, + }, + { + 0x00, 0xaa, 0x49, 0xe3, 0x92, 0x38, 0xdb, 0x71, + 0x39, 0x93, 0x70, 0xda, 0xab, 0x01, 0xe2, 0x48, + 0x72, 0xd8, 0x3b, 0x91, 0xe0, 0x4a, 0xa9, 0x03, + 0x4b, 0xe1, 0x02, 0xa8, 0xd9, 0x73, 0x90, 0x3a, + 0xe4, 0x4e, 0xad, 0x07, 0x76, 0xdc, 0x3f, 0x95, + 0xdd, 0x77, 0x94, 0x3e, 0x4f, 0xe5, 0x06, 0xac, + 0x96, 0x3c, 0xdf, 0x75, 0x04, 0xae, 0x4d, 0xe7, + 0xaf, 0x05, 0xe6, 0x4c, 0x3d, 0x97, 0x74, 0xde, + 0xd5, 0x7f, 0x9c, 0x36, 0x47, 0xed, 0x0e, 0xa4, + 0xec, 0x46, 0xa5, 0x0f, 0x7e, 0xd4, 0x37, 0x9d, + 0xa7, 0x0d, 0xee, 0x44, 0x35, 0x9f, 0x7c, 0xd6, + 0x9e, 0x34, 0xd7, 0x7d, 0x0c, 0xa6, 0x45, 0xef, + 0x31, 0x9b, 0x78, 0xd2, 0xa3, 0x09, 0xea, 0x40, + 0x08, 0xa2, 0x41, 0xeb, 0x9a, 0x30, 0xd3, 0x79, + 0x43, 0xe9, 0x0a, 0xa0, 0xd1, 0x7b, 0x98, 0x32, + 0x7a, 0xd0, 0x33, 0x99, 0xe8, 0x42, 0xa1, 0x0b, + 0xb7, 0x1d, 0xfe, 0x54, 0x25, 0x8f, 0x6c, 0xc6, + 0x8e, 0x24, 0xc7, 0x6d, 0x1c, 0xb6, 0x55, 0xff, + 0xc5, 0x6f, 0x8c, 0x26, 0x57, 0xfd, 0x1e, 0xb4, + 0xfc, 0x56, 0xb5, 0x1f, 0x6e, 0xc4, 0x27, 0x8d, + 0x53, 0xf9, 0x1a, 0xb0, 0xc1, 0x6b, 0x88, 0x22, + 0x6a, 0xc0, 0x23, 0x89, 0xf8, 0x52, 0xb1, 0x1b, + 0x21, 0x8b, 0x68, 0xc2, 0xb3, 0x19, 0xfa, 0x50, + 0x18, 0xb2, 0x51, 0xfb, 0x8a, 0x20, 0xc3, 0x69, + 0x62, 0xc8, 0x2b, 0x81, 0xf0, 0x5a, 0xb9, 0x13, + 0x5b, 0xf1, 0x12, 0xb8, 0xc9, 0x63, 0x80, 0x2a, + 0x10, 0xba, 0x59, 0xf3, 0x82, 0x28, 0xcb, 0x61, + 0x29, 0x83, 0x60, 0xca, 0xbb, 0x11, 0xf2, 0x58, + 0x86, 0x2c, 0xcf, 0x65, 0x14, 0xbe, 0x5d, 0xf7, + 0xbf, 0x15, 0xf6, 0x5c, 0x2d, 0x87, 0x64, 0xce, + 0xf4, 0x5e, 0xbd, 0x17, 0x66, 0xcc, 0x2f, 0x85, + 0xcd, 0x67, 0x84, 0x2e, 0x5f, 0xf5, 0x16, 0xbc, + }, + { + 0x00, 0xab, 0x4b, 0xe0, 0x96, 0x3d, 0xdd, 0x76, + 0x31, 0x9a, 0x7a, 0xd1, 0xa7, 0x0c, 0xec, 0x47, + 0x62, 0xc9, 0x29, 0x82, 0xf4, 0x5f, 0xbf, 0x14, + 0x53, 0xf8, 0x18, 0xb3, 0xc5, 0x6e, 0x8e, 0x25, + 0xc4, 0x6f, 0x8f, 0x24, 0x52, 0xf9, 0x19, 0xb2, + 0xf5, 0x5e, 0xbe, 0x15, 0x63, 0xc8, 0x28, 0x83, + 0xa6, 0x0d, 0xed, 0x46, 0x30, 0x9b, 0x7b, 0xd0, + 0x97, 0x3c, 0xdc, 0x77, 0x01, 0xaa, 0x4a, 0xe1, + 0x95, 0x3e, 0xde, 0x75, 0x03, 0xa8, 0x48, 0xe3, + 0xa4, 0x0f, 0xef, 0x44, 0x32, 0x99, 0x79, 0xd2, + 0xf7, 0x5c, 0xbc, 0x17, 0x61, 0xca, 0x2a, 0x81, + 0xc6, 0x6d, 0x8d, 0x26, 0x50, 0xfb, 0x1b, 0xb0, + 0x51, 0xfa, 0x1a, 0xb1, 0xc7, 0x6c, 0x8c, 0x27, + 0x60, 0xcb, 0x2b, 0x80, 0xf6, 0x5d, 0xbd, 0x16, + 0x33, 0x98, 0x78, 0xd3, 0xa5, 0x0e, 0xee, 0x45, + 0x02, 0xa9, 0x49, 0xe2, 0x94, 0x3f, 0xdf, 0x74, + 0x37, 0x9c, 0x7c, 0xd7, 0xa1, 0x0a, 0xea, 0x41, + 0x06, 0xad, 0x4d, 0xe6, 0x90, 0x3b, 0xdb, 0x70, + 0x55, 0xfe, 0x1e, 0xb5, 0xc3, 0x68, 0x88, 0x23, + 0x64, 0xcf, 0x2f, 0x84, 0xf2, 0x59, 0xb9, 0x12, + 0xf3, 0x58, 0xb8, 0x13, 0x65, 0xce, 0x2e, 0x85, + 0xc2, 0x69, 0x89, 0x22, 0x54, 0xff, 0x1f, 0xb4, + 0x91, 0x3a, 0xda, 0x71, 0x07, 0xac, 0x4c, 0xe7, + 0xa0, 0x0b, 0xeb, 0x40, 0x36, 0x9d, 0x7d, 0xd6, + 0xa2, 0x09, 0xe9, 0x42, 0x34, 0x9f, 0x7f, 0xd4, + 0x93, 0x38, 0xd8, 0x73, 0x05, 0xae, 0x4e, 0xe5, + 0xc0, 0x6b, 0x8b, 0x20, 0x56, 0xfd, 0x1d, 0xb6, + 0xf1, 0x5a, 0xba, 0x11, 0x67, 0xcc, 0x2c, 0x87, + 0x66, 0xcd, 0x2d, 0x86, 0xf0, 0x5b, 0xbb, 0x10, + 0x57, 0xfc, 0x1c, 0xb7, 0xc1, 0x6a, 0x8a, 0x21, + 0x04, 0xaf, 0x4f, 0xe4, 0x92, 0x39, 0xd9, 0x72, + 0x35, 0x9e, 0x7e, 0xd5, 0xa3, 0x08, 0xe8, 0x43, + }, + { + 0x00, 0xac, 0x45, 0xe9, 0x8a, 0x26, 0xcf, 0x63, + 0x09, 0xa5, 0x4c, 0xe0, 0x83, 0x2f, 0xc6, 0x6a, + 0x12, 0xbe, 0x57, 0xfb, 0x98, 0x34, 0xdd, 0x71, + 0x1b, 0xb7, 0x5e, 0xf2, 0x91, 0x3d, 0xd4, 0x78, + 0x24, 0x88, 0x61, 0xcd, 0xae, 0x02, 0xeb, 0x47, + 0x2d, 0x81, 0x68, 0xc4, 0xa7, 0x0b, 0xe2, 0x4e, + 0x36, 0x9a, 0x73, 0xdf, 0xbc, 0x10, 0xf9, 0x55, + 0x3f, 0x93, 0x7a, 0xd6, 0xb5, 0x19, 0xf0, 0x5c, + 0x48, 0xe4, 0x0d, 0xa1, 0xc2, 0x6e, 0x87, 0x2b, + 0x41, 0xed, 0x04, 0xa8, 0xcb, 0x67, 0x8e, 0x22, + 0x5a, 0xf6, 0x1f, 0xb3, 0xd0, 0x7c, 0x95, 0x39, + 0x53, 0xff, 0x16, 0xba, 0xd9, 0x75, 0x9c, 0x30, + 0x6c, 0xc0, 0x29, 0x85, 0xe6, 0x4a, 0xa3, 0x0f, + 0x65, 0xc9, 0x20, 0x8c, 0xef, 0x43, 0xaa, 0x06, + 0x7e, 0xd2, 0x3b, 0x97, 0xf4, 0x58, 0xb1, 0x1d, + 0x77, 0xdb, 0x32, 0x9e, 0xfd, 0x51, 0xb8, 0x14, + 0x90, 0x3c, 0xd5, 0x79, 0x1a, 0xb6, 0x5f, 0xf3, + 0x99, 0x35, 0xdc, 0x70, 0x13, 0xbf, 0x56, 0xfa, + 0x82, 0x2e, 0xc7, 0x6b, 0x08, 0xa4, 0x4d, 0xe1, + 0x8b, 0x27, 0xce, 0x62, 0x01, 0xad, 0x44, 0xe8, + 0xb4, 0x18, 0xf1, 0x5d, 0x3e, 0x92, 0x7b, 0xd7, + 0xbd, 0x11, 0xf8, 0x54, 0x37, 0x9b, 0x72, 0xde, + 0xa6, 0x0a, 0xe3, 0x4f, 0x2c, 0x80, 0x69, 0xc5, + 0xaf, 0x03, 0xea, 0x46, 0x25, 0x89, 0x60, 0xcc, + 0xd8, 0x74, 0x9d, 0x31, 0x52, 0xfe, 0x17, 0xbb, + 0xd1, 0x7d, 0x94, 0x38, 0x5b, 0xf7, 0x1e, 0xb2, + 0xca, 0x66, 0x8f, 0x23, 0x40, 0xec, 0x05, 0xa9, + 0xc3, 0x6f, 0x86, 0x2a, 0x49, 0xe5, 0x0c, 0xa0, + 0xfc, 0x50, 0xb9, 0x15, 0x76, 0xda, 0x33, 0x9f, + 0xf5, 0x59, 0xb0, 0x1c, 0x7f, 0xd3, 0x3a, 0x96, + 0xee, 0x42, 0xab, 0x07, 0x64, 0xc8, 0x21, 0x8d, + 0xe7, 0x4b, 0xa2, 0x0e, 0x6d, 0xc1, 0x28, 0x84, + }, + { + 0x00, 0xad, 0x47, 0xea, 0x8e, 0x23, 0xc9, 0x64, + 0x01, 0xac, 0x46, 0xeb, 0x8f, 0x22, 0xc8, 0x65, + 0x02, 0xaf, 0x45, 0xe8, 0x8c, 0x21, 0xcb, 0x66, + 0x03, 0xae, 0x44, 0xe9, 0x8d, 0x20, 0xca, 0x67, + 0x04, 0xa9, 0x43, 0xee, 0x8a, 0x27, 0xcd, 0x60, + 0x05, 0xa8, 0x42, 0xef, 0x8b, 0x26, 0xcc, 0x61, + 0x06, 0xab, 0x41, 0xec, 0x88, 0x25, 0xcf, 0x62, + 0x07, 0xaa, 0x40, 0xed, 0x89, 0x24, 0xce, 0x63, + 0x08, 0xa5, 0x4f, 0xe2, 0x86, 0x2b, 0xc1, 0x6c, + 0x09, 0xa4, 0x4e, 0xe3, 0x87, 0x2a, 0xc0, 0x6d, + 0x0a, 0xa7, 0x4d, 0xe0, 0x84, 0x29, 0xc3, 0x6e, + 0x0b, 0xa6, 0x4c, 0xe1, 0x85, 0x28, 0xc2, 0x6f, + 0x0c, 0xa1, 0x4b, 0xe6, 0x82, 0x2f, 0xc5, 0x68, + 0x0d, 0xa0, 0x4a, 0xe7, 0x83, 0x2e, 0xc4, 0x69, + 0x0e, 0xa3, 0x49, 0xe4, 0x80, 0x2d, 0xc7, 0x6a, + 0x0f, 0xa2, 0x48, 0xe5, 0x81, 0x2c, 0xc6, 0x6b, + 0x10, 0xbd, 0x57, 0xfa, 0x9e, 0x33, 0xd9, 0x74, + 0x11, 0xbc, 0x56, 0xfb, 0x9f, 0x32, 0xd8, 0x75, + 0x12, 0xbf, 0x55, 0xf8, 0x9c, 0x31, 0xdb, 0x76, + 0x13, 0xbe, 0x54, 0xf9, 0x9d, 0x30, 0xda, 0x77, + 0x14, 0xb9, 0x53, 0xfe, 0x9a, 0x37, 0xdd, 0x70, + 0x15, 0xb8, 0x52, 0xff, 0x9b, 0x36, 0xdc, 0x71, + 0x16, 0xbb, 0x51, 0xfc, 0x98, 0x35, 0xdf, 0x72, + 0x17, 0xba, 0x50, 0xfd, 0x99, 0x34, 0xde, 0x73, + 0x18, 0xb5, 0x5f, 0xf2, 0x96, 0x3b, 0xd1, 0x7c, + 0x19, 0xb4, 0x5e, 0xf3, 0x97, 0x3a, 0xd0, 0x7d, + 0x1a, 0xb7, 0x5d, 0xf0, 0x94, 0x39, 0xd3, 0x7e, + 0x1b, 0xb6, 0x5c, 0xf1, 0x95, 0x38, 0xd2, 0x7f, + 0x1c, 0xb1, 0x5b, 0xf6, 0x92, 0x3f, 0xd5, 0x78, + 0x1d, 0xb0, 0x5a, 0xf7, 0x93, 0x3e, 0xd4, 0x79, + 0x1e, 0xb3, 0x59, 0xf4, 0x90, 0x3d, 0xd7, 0x7a, + 0x1f, 0xb2, 0x58, 0xf5, 0x91, 0x3c, 0xd6, 0x7b, + }, + { + 0x00, 0xae, 0x41, 0xef, 0x82, 0x2c, 0xc3, 0x6d, + 0x19, 0xb7, 0x58, 0xf6, 0x9b, 0x35, 0xda, 0x74, + 0x32, 0x9c, 0x73, 0xdd, 0xb0, 0x1e, 0xf1, 0x5f, + 0x2b, 0x85, 0x6a, 0xc4, 0xa9, 0x07, 0xe8, 0x46, + 0x64, 0xca, 0x25, 0x8b, 0xe6, 0x48, 0xa7, 0x09, + 0x7d, 0xd3, 0x3c, 0x92, 0xff, 0x51, 0xbe, 0x10, + 0x56, 0xf8, 0x17, 0xb9, 0xd4, 0x7a, 0x95, 0x3b, + 0x4f, 0xe1, 0x0e, 0xa0, 0xcd, 0x63, 0x8c, 0x22, + 0xc8, 0x66, 0x89, 0x27, 0x4a, 0xe4, 0x0b, 0xa5, + 0xd1, 0x7f, 0x90, 0x3e, 0x53, 0xfd, 0x12, 0xbc, + 0xfa, 0x54, 0xbb, 0x15, 0x78, 0xd6, 0x39, 0x97, + 0xe3, 0x4d, 0xa2, 0x0c, 0x61, 0xcf, 0x20, 0x8e, + 0xac, 0x02, 0xed, 0x43, 0x2e, 0x80, 0x6f, 0xc1, + 0xb5, 0x1b, 0xf4, 0x5a, 0x37, 0x99, 0x76, 0xd8, + 0x9e, 0x30, 0xdf, 0x71, 0x1c, 0xb2, 0x5d, 0xf3, + 0x87, 0x29, 0xc6, 0x68, 0x05, 0xab, 0x44, 0xea, + 0x8d, 0x23, 0xcc, 0x62, 0x0f, 0xa1, 0x4e, 0xe0, + 0x94, 0x3a, 0xd5, 0x7b, 0x16, 0xb8, 0x57, 0xf9, + 0xbf, 0x11, 0xfe, 0x50, 0x3d, 0x93, 0x7c, 0xd2, + 0xa6, 0x08, 0xe7, 0x49, 0x24, 0x8a, 0x65, 0xcb, + 0xe9, 0x47, 0xa8, 0x06, 0x6b, 0xc5, 0x2a, 0x84, + 0xf0, 0x5e, 0xb1, 0x1f, 0x72, 0xdc, 0x33, 0x9d, + 0xdb, 0x75, 0x9a, 0x34, 0x59, 0xf7, 0x18, 0xb6, + 0xc2, 0x6c, 0x83, 0x2d, 0x40, 0xee, 0x01, 0xaf, + 0x45, 0xeb, 0x04, 0xaa, 0xc7, 0x69, 0x86, 0x28, + 0x5c, 0xf2, 0x1d, 0xb3, 0xde, 0x70, 0x9f, 0x31, + 0x77, 0xd9, 0x36, 0x98, 0xf5, 0x5b, 0xb4, 0x1a, + 0x6e, 0xc0, 0x2f, 0x81, 0xec, 0x42, 0xad, 0x03, + 0x21, 0x8f, 0x60, 0xce, 0xa3, 0x0d, 0xe2, 0x4c, + 0x38, 0x96, 0x79, 0xd7, 0xba, 0x14, 0xfb, 0x55, + 0x13, 0xbd, 0x52, 0xfc, 0x91, 0x3f, 0xd0, 0x7e, + 0x0a, 0xa4, 0x4b, 0xe5, 0x88, 0x26, 0xc9, 0x67, + }, + { + 0x00, 0xaf, 0x43, 0xec, 0x86, 0x29, 0xc5, 0x6a, + 0x11, 0xbe, 0x52, 0xfd, 0x97, 0x38, 0xd4, 0x7b, + 0x22, 0x8d, 0x61, 0xce, 0xa4, 0x0b, 0xe7, 0x48, + 0x33, 0x9c, 0x70, 0xdf, 0xb5, 0x1a, 0xf6, 0x59, + 0x44, 0xeb, 0x07, 0xa8, 0xc2, 0x6d, 0x81, 0x2e, + 0x55, 0xfa, 0x16, 0xb9, 0xd3, 0x7c, 0x90, 0x3f, + 0x66, 0xc9, 0x25, 0x8a, 0xe0, 0x4f, 0xa3, 0x0c, + 0x77, 0xd8, 0x34, 0x9b, 0xf1, 0x5e, 0xb2, 0x1d, + 0x88, 0x27, 0xcb, 0x64, 0x0e, 0xa1, 0x4d, 0xe2, + 0x99, 0x36, 0xda, 0x75, 0x1f, 0xb0, 0x5c, 0xf3, + 0xaa, 0x05, 0xe9, 0x46, 0x2c, 0x83, 0x6f, 0xc0, + 0xbb, 0x14, 0xf8, 0x57, 0x3d, 0x92, 0x7e, 0xd1, + 0xcc, 0x63, 0x8f, 0x20, 0x4a, 0xe5, 0x09, 0xa6, + 0xdd, 0x72, 0x9e, 0x31, 0x5b, 0xf4, 0x18, 0xb7, + 0xee, 0x41, 0xad, 0x02, 0x68, 0xc7, 0x2b, 0x84, + 0xff, 0x50, 0xbc, 0x13, 0x79, 0xd6, 0x3a, 0x95, + 0x0d, 0xa2, 0x4e, 0xe1, 0x8b, 0x24, 0xc8, 0x67, + 0x1c, 0xb3, 0x5f, 0xf0, 0x9a, 0x35, 0xd9, 0x76, + 0x2f, 0x80, 0x6c, 0xc3, 0xa9, 0x06, 0xea, 0x45, + 0x3e, 0x91, 0x7d, 0xd2, 0xb8, 0x17, 0xfb, 0x54, + 0x49, 0xe6, 0x0a, 0xa5, 0xcf, 0x60, 0x8c, 0x23, + 0x58, 0xf7, 0x1b, 0xb4, 0xde, 0x71, 0x9d, 0x32, + 0x6b, 0xc4, 0x28, 0x87, 0xed, 0x42, 0xae, 0x01, + 0x7a, 0xd5, 0x39, 0x96, 0xfc, 0x53, 0xbf, 0x10, + 0x85, 0x2a, 0xc6, 0x69, 0x03, 0xac, 0x40, 0xef, + 0x94, 0x3b, 0xd7, 0x78, 0x12, 0xbd, 0x51, 0xfe, + 0xa7, 0x08, 0xe4, 0x4b, 0x21, 0x8e, 0x62, 0xcd, + 0xb6, 0x19, 0xf5, 0x5a, 0x30, 0x9f, 0x73, 0xdc, + 0xc1, 0x6e, 0x82, 0x2d, 0x47, 0xe8, 0x04, 0xab, + 0xd0, 0x7f, 0x93, 0x3c, 0x56, 0xf9, 0x15, 0xba, + 0xe3, 0x4c, 0xa0, 0x0f, 0x65, 0xca, 0x26, 0x89, + 0xf2, 0x5d, 0xb1, 0x1e, 0x74, 0xdb, 0x37, 0x98, + }, + { + 0x00, 0xb0, 0x7d, 0xcd, 0xfa, 0x4a, 0x87, 0x37, + 0xe9, 0x59, 0x94, 0x24, 0x13, 0xa3, 0x6e, 0xde, + 0xcf, 0x7f, 0xb2, 0x02, 0x35, 0x85, 0x48, 0xf8, + 0x26, 0x96, 0x5b, 0xeb, 0xdc, 0x6c, 0xa1, 0x11, + 0x83, 0x33, 0xfe, 0x4e, 0x79, 0xc9, 0x04, 0xb4, + 0x6a, 0xda, 0x17, 0xa7, 0x90, 0x20, 0xed, 0x5d, + 0x4c, 0xfc, 0x31, 0x81, 0xb6, 0x06, 0xcb, 0x7b, + 0xa5, 0x15, 0xd8, 0x68, 0x5f, 0xef, 0x22, 0x92, + 0x1b, 0xab, 0x66, 0xd6, 0xe1, 0x51, 0x9c, 0x2c, + 0xf2, 0x42, 0x8f, 0x3f, 0x08, 0xb8, 0x75, 0xc5, + 0xd4, 0x64, 0xa9, 0x19, 0x2e, 0x9e, 0x53, 0xe3, + 0x3d, 0x8d, 0x40, 0xf0, 0xc7, 0x77, 0xba, 0x0a, + 0x98, 0x28, 0xe5, 0x55, 0x62, 0xd2, 0x1f, 0xaf, + 0x71, 0xc1, 0x0c, 0xbc, 0x8b, 0x3b, 0xf6, 0x46, + 0x57, 0xe7, 0x2a, 0x9a, 0xad, 0x1d, 0xd0, 0x60, + 0xbe, 0x0e, 0xc3, 0x73, 0x44, 0xf4, 0x39, 0x89, + 0x36, 0x86, 0x4b, 0xfb, 0xcc, 0x7c, 0xb1, 0x01, + 0xdf, 0x6f, 0xa2, 0x12, 0x25, 0x95, 0x58, 0xe8, + 0xf9, 0x49, 0x84, 0x34, 0x03, 0xb3, 0x7e, 0xce, + 0x10, 0xa0, 0x6d, 0xdd, 0xea, 0x5a, 0x97, 0x27, + 0xb5, 0x05, 0xc8, 0x78, 0x4f, 0xff, 0x32, 0x82, + 0x5c, 0xec, 0x21, 0x91, 0xa6, 0x16, 0xdb, 0x6b, + 0x7a, 0xca, 0x07, 0xb7, 0x80, 0x30, 0xfd, 0x4d, + 0x93, 0x23, 0xee, 0x5e, 0x69, 0xd9, 0x14, 0xa4, + 0x2d, 0x9d, 0x50, 0xe0, 0xd7, 0x67, 0xaa, 0x1a, + 0xc4, 0x74, 0xb9, 0x09, 0x3e, 0x8e, 0x43, 0xf3, + 0xe2, 0x52, 0x9f, 0x2f, 0x18, 0xa8, 0x65, 0xd5, + 0x0b, 0xbb, 0x76, 0xc6, 0xf1, 0x41, 0x8c, 0x3c, + 0xae, 0x1e, 0xd3, 0x63, 0x54, 0xe4, 0x29, 0x99, + 0x47, 0xf7, 0x3a, 0x8a, 0xbd, 0x0d, 0xc0, 0x70, + 0x61, 0xd1, 0x1c, 0xac, 0x9b, 0x2b, 0xe6, 0x56, + 0x88, 0x38, 0xf5, 0x45, 0x72, 0xc2, 0x0f, 0xbf, + }, + { + 0x00, 0xb1, 0x7f, 0xce, 0xfe, 0x4f, 0x81, 0x30, + 0xe1, 0x50, 0x9e, 0x2f, 0x1f, 0xae, 0x60, 0xd1, + 0xdf, 0x6e, 0xa0, 0x11, 0x21, 0x90, 0x5e, 0xef, + 0x3e, 0x8f, 0x41, 0xf0, 0xc0, 0x71, 0xbf, 0x0e, + 0xa3, 0x12, 0xdc, 0x6d, 0x5d, 0xec, 0x22, 0x93, + 0x42, 0xf3, 0x3d, 0x8c, 0xbc, 0x0d, 0xc3, 0x72, + 0x7c, 0xcd, 0x03, 0xb2, 0x82, 0x33, 0xfd, 0x4c, + 0x9d, 0x2c, 0xe2, 0x53, 0x63, 0xd2, 0x1c, 0xad, + 0x5b, 0xea, 0x24, 0x95, 0xa5, 0x14, 0xda, 0x6b, + 0xba, 0x0b, 0xc5, 0x74, 0x44, 0xf5, 0x3b, 0x8a, + 0x84, 0x35, 0xfb, 0x4a, 0x7a, 0xcb, 0x05, 0xb4, + 0x65, 0xd4, 0x1a, 0xab, 0x9b, 0x2a, 0xe4, 0x55, + 0xf8, 0x49, 0x87, 0x36, 0x06, 0xb7, 0x79, 0xc8, + 0x19, 0xa8, 0x66, 0xd7, 0xe7, 0x56, 0x98, 0x29, + 0x27, 0x96, 0x58, 0xe9, 0xd9, 0x68, 0xa6, 0x17, + 0xc6, 0x77, 0xb9, 0x08, 0x38, 0x89, 0x47, 0xf6, + 0xb6, 0x07, 0xc9, 0x78, 0x48, 0xf9, 0x37, 0x86, + 0x57, 0xe6, 0x28, 0x99, 0xa9, 0x18, 0xd6, 0x67, + 0x69, 0xd8, 0x16, 0xa7, 0x97, 0x26, 0xe8, 0x59, + 0x88, 0x39, 0xf7, 0x46, 0x76, 0xc7, 0x09, 0xb8, + 0x15, 0xa4, 0x6a, 0xdb, 0xeb, 0x5a, 0x94, 0x25, + 0xf4, 0x45, 0x8b, 0x3a, 0x0a, 0xbb, 0x75, 0xc4, + 0xca, 0x7b, 0xb5, 0x04, 0x34, 0x85, 0x4b, 0xfa, + 0x2b, 0x9a, 0x54, 0xe5, 0xd5, 0x64, 0xaa, 0x1b, + 0xed, 0x5c, 0x92, 0x23, 0x13, 0xa2, 0x6c, 0xdd, + 0x0c, 0xbd, 0x73, 0xc2, 0xf2, 0x43, 0x8d, 0x3c, + 0x32, 0x83, 0x4d, 0xfc, 0xcc, 0x7d, 0xb3, 0x02, + 0xd3, 0x62, 0xac, 0x1d, 0x2d, 0x9c, 0x52, 0xe3, + 0x4e, 0xff, 0x31, 0x80, 0xb0, 0x01, 0xcf, 0x7e, + 0xaf, 0x1e, 0xd0, 0x61, 0x51, 0xe0, 0x2e, 0x9f, + 0x91, 0x20, 0xee, 0x5f, 0x6f, 0xde, 0x10, 0xa1, + 0x70, 0xc1, 0x0f, 0xbe, 0x8e, 0x3f, 0xf1, 0x40, + }, + { + 0x00, 0xb2, 0x79, 0xcb, 0xf2, 0x40, 0x8b, 0x39, + 0xf9, 0x4b, 0x80, 0x32, 0x0b, 0xb9, 0x72, 0xc0, + 0xef, 0x5d, 0x96, 0x24, 0x1d, 0xaf, 0x64, 0xd6, + 0x16, 0xa4, 0x6f, 0xdd, 0xe4, 0x56, 0x9d, 0x2f, + 0xc3, 0x71, 0xba, 0x08, 0x31, 0x83, 0x48, 0xfa, + 0x3a, 0x88, 0x43, 0xf1, 0xc8, 0x7a, 0xb1, 0x03, + 0x2c, 0x9e, 0x55, 0xe7, 0xde, 0x6c, 0xa7, 0x15, + 0xd5, 0x67, 0xac, 0x1e, 0x27, 0x95, 0x5e, 0xec, + 0x9b, 0x29, 0xe2, 0x50, 0x69, 0xdb, 0x10, 0xa2, + 0x62, 0xd0, 0x1b, 0xa9, 0x90, 0x22, 0xe9, 0x5b, + 0x74, 0xc6, 0x0d, 0xbf, 0x86, 0x34, 0xff, 0x4d, + 0x8d, 0x3f, 0xf4, 0x46, 0x7f, 0xcd, 0x06, 0xb4, + 0x58, 0xea, 0x21, 0x93, 0xaa, 0x18, 0xd3, 0x61, + 0xa1, 0x13, 0xd8, 0x6a, 0x53, 0xe1, 0x2a, 0x98, + 0xb7, 0x05, 0xce, 0x7c, 0x45, 0xf7, 0x3c, 0x8e, + 0x4e, 0xfc, 0x37, 0x85, 0xbc, 0x0e, 0xc5, 0x77, + 0x2b, 0x99, 0x52, 0xe0, 0xd9, 0x6b, 0xa0, 0x12, + 0xd2, 0x60, 0xab, 0x19, 0x20, 0x92, 0x59, 0xeb, + 0xc4, 0x76, 0xbd, 0x0f, 0x36, 0x84, 0x4f, 0xfd, + 0x3d, 0x8f, 0x44, 0xf6, 0xcf, 0x7d, 0xb6, 0x04, + 0xe8, 0x5a, 0x91, 0x23, 0x1a, 0xa8, 0x63, 0xd1, + 0x11, 0xa3, 0x68, 0xda, 0xe3, 0x51, 0x9a, 0x28, + 0x07, 0xb5, 0x7e, 0xcc, 0xf5, 0x47, 0x8c, 0x3e, + 0xfe, 0x4c, 0x87, 0x35, 0x0c, 0xbe, 0x75, 0xc7, + 0xb0, 0x02, 0xc9, 0x7b, 0x42, 0xf0, 0x3b, 0x89, + 0x49, 0xfb, 0x30, 0x82, 0xbb, 0x09, 0xc2, 0x70, + 0x5f, 0xed, 0x26, 0x94, 0xad, 0x1f, 0xd4, 0x66, + 0xa6, 0x14, 0xdf, 0x6d, 0x54, 0xe6, 0x2d, 0x9f, + 0x73, 0xc1, 0x0a, 0xb8, 0x81, 0x33, 0xf8, 0x4a, + 0x8a, 0x38, 0xf3, 0x41, 0x78, 0xca, 0x01, 0xb3, + 0x9c, 0x2e, 0xe5, 0x57, 0x6e, 0xdc, 0x17, 0xa5, + 0x65, 0xd7, 0x1c, 0xae, 0x97, 0x25, 0xee, 0x5c, + }, + { + 0x00, 0xb3, 0x7b, 0xc8, 0xf6, 0x45, 0x8d, 0x3e, + 0xf1, 0x42, 0x8a, 0x39, 0x07, 0xb4, 0x7c, 0xcf, + 0xff, 0x4c, 0x84, 0x37, 0x09, 0xba, 0x72, 0xc1, + 0x0e, 0xbd, 0x75, 0xc6, 0xf8, 0x4b, 0x83, 0x30, + 0xe3, 0x50, 0x98, 0x2b, 0x15, 0xa6, 0x6e, 0xdd, + 0x12, 0xa1, 0x69, 0xda, 0xe4, 0x57, 0x9f, 0x2c, + 0x1c, 0xaf, 0x67, 0xd4, 0xea, 0x59, 0x91, 0x22, + 0xed, 0x5e, 0x96, 0x25, 0x1b, 0xa8, 0x60, 0xd3, + 0xdb, 0x68, 0xa0, 0x13, 0x2d, 0x9e, 0x56, 0xe5, + 0x2a, 0x99, 0x51, 0xe2, 0xdc, 0x6f, 0xa7, 0x14, + 0x24, 0x97, 0x5f, 0xec, 0xd2, 0x61, 0xa9, 0x1a, + 0xd5, 0x66, 0xae, 0x1d, 0x23, 0x90, 0x58, 0xeb, + 0x38, 0x8b, 0x43, 0xf0, 0xce, 0x7d, 0xb5, 0x06, + 0xc9, 0x7a, 0xb2, 0x01, 0x3f, 0x8c, 0x44, 0xf7, + 0xc7, 0x74, 0xbc, 0x0f, 0x31, 0x82, 0x4a, 0xf9, + 0x36, 0x85, 0x4d, 0xfe, 0xc0, 0x73, 0xbb, 0x08, + 0xab, 0x18, 0xd0, 0x63, 0x5d, 0xee, 0x26, 0x95, + 0x5a, 0xe9, 0x21, 0x92, 0xac, 0x1f, 0xd7, 0x64, + 0x54, 0xe7, 0x2f, 0x9c, 0xa2, 0x11, 0xd9, 0x6a, + 0xa5, 0x16, 0xde, 0x6d, 0x53, 0xe0, 0x28, 0x9b, + 0x48, 0xfb, 0x33, 0x80, 0xbe, 0x0d, 0xc5, 0x76, + 0xb9, 0x0a, 0xc2, 0x71, 0x4f, 0xfc, 0x34, 0x87, + 0xb7, 0x04, 0xcc, 0x7f, 0x41, 0xf2, 0x3a, 0x89, + 0x46, 0xf5, 0x3d, 0x8e, 0xb0, 0x03, 0xcb, 0x78, + 0x70, 0xc3, 0x0b, 0xb8, 0x86, 0x35, 0xfd, 0x4e, + 0x81, 0x32, 0xfa, 0x49, 0x77, 0xc4, 0x0c, 0xbf, + 0x8f, 0x3c, 0xf4, 0x47, 0x79, 0xca, 0x02, 0xb1, + 0x7e, 0xcd, 0x05, 0xb6, 0x88, 0x3b, 0xf3, 0x40, + 0x93, 0x20, 0xe8, 0x5b, 0x65, 0xd6, 0x1e, 0xad, + 0x62, 0xd1, 0x19, 0xaa, 0x94, 0x27, 0xef, 0x5c, + 0x6c, 0xdf, 0x17, 0xa4, 0x9a, 0x29, 0xe1, 0x52, + 0x9d, 0x2e, 0xe6, 0x55, 0x6b, 0xd8, 0x10, 0xa3, + }, + { + 0x00, 0xb4, 0x75, 0xc1, 0xea, 0x5e, 0x9f, 0x2b, + 0xc9, 0x7d, 0xbc, 0x08, 0x23, 0x97, 0x56, 0xe2, + 0x8f, 0x3b, 0xfa, 0x4e, 0x65, 0xd1, 0x10, 0xa4, + 0x46, 0xf2, 0x33, 0x87, 0xac, 0x18, 0xd9, 0x6d, + 0x03, 0xb7, 0x76, 0xc2, 0xe9, 0x5d, 0x9c, 0x28, + 0xca, 0x7e, 0xbf, 0x0b, 0x20, 0x94, 0x55, 0xe1, + 0x8c, 0x38, 0xf9, 0x4d, 0x66, 0xd2, 0x13, 0xa7, + 0x45, 0xf1, 0x30, 0x84, 0xaf, 0x1b, 0xda, 0x6e, + 0x06, 0xb2, 0x73, 0xc7, 0xec, 0x58, 0x99, 0x2d, + 0xcf, 0x7b, 0xba, 0x0e, 0x25, 0x91, 0x50, 0xe4, + 0x89, 0x3d, 0xfc, 0x48, 0x63, 0xd7, 0x16, 0xa2, + 0x40, 0xf4, 0x35, 0x81, 0xaa, 0x1e, 0xdf, 0x6b, + 0x05, 0xb1, 0x70, 0xc4, 0xef, 0x5b, 0x9a, 0x2e, + 0xcc, 0x78, 0xb9, 0x0d, 0x26, 0x92, 0x53, 0xe7, + 0x8a, 0x3e, 0xff, 0x4b, 0x60, 0xd4, 0x15, 0xa1, + 0x43, 0xf7, 0x36, 0x82, 0xa9, 0x1d, 0xdc, 0x68, + 0x0c, 0xb8, 0x79, 0xcd, 0xe6, 0x52, 0x93, 0x27, + 0xc5, 0x71, 0xb0, 0x04, 0x2f, 0x9b, 0x5a, 0xee, + 0x83, 0x37, 0xf6, 0x42, 0x69, 0xdd, 0x1c, 0xa8, + 0x4a, 0xfe, 0x3f, 0x8b, 0xa0, 0x14, 0xd5, 0x61, + 0x0f, 0xbb, 0x7a, 0xce, 0xe5, 0x51, 0x90, 0x24, + 0xc6, 0x72, 0xb3, 0x07, 0x2c, 0x98, 0x59, 0xed, + 0x80, 0x34, 0xf5, 0x41, 0x6a, 0xde, 0x1f, 0xab, + 0x49, 0xfd, 0x3c, 0x88, 0xa3, 0x17, 0xd6, 0x62, + 0x0a, 0xbe, 0x7f, 0xcb, 0xe0, 0x54, 0x95, 0x21, + 0xc3, 0x77, 0xb6, 0x02, 0x29, 0x9d, 0x5c, 0xe8, + 0x85, 0x31, 0xf0, 0x44, 0x6f, 0xdb, 0x1a, 0xae, + 0x4c, 0xf8, 0x39, 0x8d, 0xa6, 0x12, 0xd3, 0x67, + 0x09, 0xbd, 0x7c, 0xc8, 0xe3, 0x57, 0x96, 0x22, + 0xc0, 0x74, 0xb5, 0x01, 0x2a, 0x9e, 0x5f, 0xeb, + 0x86, 0x32, 0xf3, 0x47, 0x6c, 0xd8, 0x19, 0xad, + 0x4f, 0xfb, 0x3a, 0x8e, 0xa5, 0x11, 0xd0, 0x64, + }, + { + 0x00, 0xb5, 0x77, 0xc2, 0xee, 0x5b, 0x99, 0x2c, + 0xc1, 0x74, 0xb6, 0x03, 0x2f, 0x9a, 0x58, 0xed, + 0x9f, 0x2a, 0xe8, 0x5d, 0x71, 0xc4, 0x06, 0xb3, + 0x5e, 0xeb, 0x29, 0x9c, 0xb0, 0x05, 0xc7, 0x72, + 0x23, 0x96, 0x54, 0xe1, 0xcd, 0x78, 0xba, 0x0f, + 0xe2, 0x57, 0x95, 0x20, 0x0c, 0xb9, 0x7b, 0xce, + 0xbc, 0x09, 0xcb, 0x7e, 0x52, 0xe7, 0x25, 0x90, + 0x7d, 0xc8, 0x0a, 0xbf, 0x93, 0x26, 0xe4, 0x51, + 0x46, 0xf3, 0x31, 0x84, 0xa8, 0x1d, 0xdf, 0x6a, + 0x87, 0x32, 0xf0, 0x45, 0x69, 0xdc, 0x1e, 0xab, + 0xd9, 0x6c, 0xae, 0x1b, 0x37, 0x82, 0x40, 0xf5, + 0x18, 0xad, 0x6f, 0xda, 0xf6, 0x43, 0x81, 0x34, + 0x65, 0xd0, 0x12, 0xa7, 0x8b, 0x3e, 0xfc, 0x49, + 0xa4, 0x11, 0xd3, 0x66, 0x4a, 0xff, 0x3d, 0x88, + 0xfa, 0x4f, 0x8d, 0x38, 0x14, 0xa1, 0x63, 0xd6, + 0x3b, 0x8e, 0x4c, 0xf9, 0xd5, 0x60, 0xa2, 0x17, + 0x8c, 0x39, 0xfb, 0x4e, 0x62, 0xd7, 0x15, 0xa0, + 0x4d, 0xf8, 0x3a, 0x8f, 0xa3, 0x16, 0xd4, 0x61, + 0x13, 0xa6, 0x64, 0xd1, 0xfd, 0x48, 0x8a, 0x3f, + 0xd2, 0x67, 0xa5, 0x10, 0x3c, 0x89, 0x4b, 0xfe, + 0xaf, 0x1a, 0xd8, 0x6d, 0x41, 0xf4, 0x36, 0x83, + 0x6e, 0xdb, 0x19, 0xac, 0x80, 0x35, 0xf7, 0x42, + 0x30, 0x85, 0x47, 0xf2, 0xde, 0x6b, 0xa9, 0x1c, + 0xf1, 0x44, 0x86, 0x33, 0x1f, 0xaa, 0x68, 0xdd, + 0xca, 0x7f, 0xbd, 0x08, 0x24, 0x91, 0x53, 0xe6, + 0x0b, 0xbe, 0x7c, 0xc9, 0xe5, 0x50, 0x92, 0x27, + 0x55, 0xe0, 0x22, 0x97, 0xbb, 0x0e, 0xcc, 0x79, + 0x94, 0x21, 0xe3, 0x56, 0x7a, 0xcf, 0x0d, 0xb8, + 0xe9, 0x5c, 0x9e, 0x2b, 0x07, 0xb2, 0x70, 0xc5, + 0x28, 0x9d, 0x5f, 0xea, 0xc6, 0x73, 0xb1, 0x04, + 0x76, 0xc3, 0x01, 0xb4, 0x98, 0x2d, 0xef, 0x5a, + 0xb7, 0x02, 0xc0, 0x75, 0x59, 0xec, 0x2e, 0x9b, + }, + { + 0x00, 0xb6, 0x71, 0xc7, 0xe2, 0x54, 0x93, 0x25, + 0xd9, 0x6f, 0xa8, 0x1e, 0x3b, 0x8d, 0x4a, 0xfc, + 0xaf, 0x19, 0xde, 0x68, 0x4d, 0xfb, 0x3c, 0x8a, + 0x76, 0xc0, 0x07, 0xb1, 0x94, 0x22, 0xe5, 0x53, + 0x43, 0xf5, 0x32, 0x84, 0xa1, 0x17, 0xd0, 0x66, + 0x9a, 0x2c, 0xeb, 0x5d, 0x78, 0xce, 0x09, 0xbf, + 0xec, 0x5a, 0x9d, 0x2b, 0x0e, 0xb8, 0x7f, 0xc9, + 0x35, 0x83, 0x44, 0xf2, 0xd7, 0x61, 0xa6, 0x10, + 0x86, 0x30, 0xf7, 0x41, 0x64, 0xd2, 0x15, 0xa3, + 0x5f, 0xe9, 0x2e, 0x98, 0xbd, 0x0b, 0xcc, 0x7a, + 0x29, 0x9f, 0x58, 0xee, 0xcb, 0x7d, 0xba, 0x0c, + 0xf0, 0x46, 0x81, 0x37, 0x12, 0xa4, 0x63, 0xd5, + 0xc5, 0x73, 0xb4, 0x02, 0x27, 0x91, 0x56, 0xe0, + 0x1c, 0xaa, 0x6d, 0xdb, 0xfe, 0x48, 0x8f, 0x39, + 0x6a, 0xdc, 0x1b, 0xad, 0x88, 0x3e, 0xf9, 0x4f, + 0xb3, 0x05, 0xc2, 0x74, 0x51, 0xe7, 0x20, 0x96, + 0x11, 0xa7, 0x60, 0xd6, 0xf3, 0x45, 0x82, 0x34, + 0xc8, 0x7e, 0xb9, 0x0f, 0x2a, 0x9c, 0x5b, 0xed, + 0xbe, 0x08, 0xcf, 0x79, 0x5c, 0xea, 0x2d, 0x9b, + 0x67, 0xd1, 0x16, 0xa0, 0x85, 0x33, 0xf4, 0x42, + 0x52, 0xe4, 0x23, 0x95, 0xb0, 0x06, 0xc1, 0x77, + 0x8b, 0x3d, 0xfa, 0x4c, 0x69, 0xdf, 0x18, 0xae, + 0xfd, 0x4b, 0x8c, 0x3a, 0x1f, 0xa9, 0x6e, 0xd8, + 0x24, 0x92, 0x55, 0xe3, 0xc6, 0x70, 0xb7, 0x01, + 0x97, 0x21, 0xe6, 0x50, 0x75, 0xc3, 0x04, 0xb2, + 0x4e, 0xf8, 0x3f, 0x89, 0xac, 0x1a, 0xdd, 0x6b, + 0x38, 0x8e, 0x49, 0xff, 0xda, 0x6c, 0xab, 0x1d, + 0xe1, 0x57, 0x90, 0x26, 0x03, 0xb5, 0x72, 0xc4, + 0xd4, 0x62, 0xa5, 0x13, 0x36, 0x80, 0x47, 0xf1, + 0x0d, 0xbb, 0x7c, 0xca, 0xef, 0x59, 0x9e, 0x28, + 0x7b, 0xcd, 0x0a, 0xbc, 0x99, 0x2f, 0xe8, 0x5e, + 0xa2, 0x14, 0xd3, 0x65, 0x40, 0xf6, 0x31, 0x87, + }, + { + 0x00, 0xb7, 0x73, 0xc4, 0xe6, 0x51, 0x95, 0x22, + 0xd1, 0x66, 0xa2, 0x15, 0x37, 0x80, 0x44, 0xf3, + 0xbf, 0x08, 0xcc, 0x7b, 0x59, 0xee, 0x2a, 0x9d, + 0x6e, 0xd9, 0x1d, 0xaa, 0x88, 0x3f, 0xfb, 0x4c, + 0x63, 0xd4, 0x10, 0xa7, 0x85, 0x32, 0xf6, 0x41, + 0xb2, 0x05, 0xc1, 0x76, 0x54, 0xe3, 0x27, 0x90, + 0xdc, 0x6b, 0xaf, 0x18, 0x3a, 0x8d, 0x49, 0xfe, + 0x0d, 0xba, 0x7e, 0xc9, 0xeb, 0x5c, 0x98, 0x2f, + 0xc6, 0x71, 0xb5, 0x02, 0x20, 0x97, 0x53, 0xe4, + 0x17, 0xa0, 0x64, 0xd3, 0xf1, 0x46, 0x82, 0x35, + 0x79, 0xce, 0x0a, 0xbd, 0x9f, 0x28, 0xec, 0x5b, + 0xa8, 0x1f, 0xdb, 0x6c, 0x4e, 0xf9, 0x3d, 0x8a, + 0xa5, 0x12, 0xd6, 0x61, 0x43, 0xf4, 0x30, 0x87, + 0x74, 0xc3, 0x07, 0xb0, 0x92, 0x25, 0xe1, 0x56, + 0x1a, 0xad, 0x69, 0xde, 0xfc, 0x4b, 0x8f, 0x38, + 0xcb, 0x7c, 0xb8, 0x0f, 0x2d, 0x9a, 0x5e, 0xe9, + 0x91, 0x26, 0xe2, 0x55, 0x77, 0xc0, 0x04, 0xb3, + 0x40, 0xf7, 0x33, 0x84, 0xa6, 0x11, 0xd5, 0x62, + 0x2e, 0x99, 0x5d, 0xea, 0xc8, 0x7f, 0xbb, 0x0c, + 0xff, 0x48, 0x8c, 0x3b, 0x19, 0xae, 0x6a, 0xdd, + 0xf2, 0x45, 0x81, 0x36, 0x14, 0xa3, 0x67, 0xd0, + 0x23, 0x94, 0x50, 0xe7, 0xc5, 0x72, 0xb6, 0x01, + 0x4d, 0xfa, 0x3e, 0x89, 0xab, 0x1c, 0xd8, 0x6f, + 0x9c, 0x2b, 0xef, 0x58, 0x7a, 0xcd, 0x09, 0xbe, + 0x57, 0xe0, 0x24, 0x93, 0xb1, 0x06, 0xc2, 0x75, + 0x86, 0x31, 0xf5, 0x42, 0x60, 0xd7, 0x13, 0xa4, + 0xe8, 0x5f, 0x9b, 0x2c, 0x0e, 0xb9, 0x7d, 0xca, + 0x39, 0x8e, 0x4a, 0xfd, 0xdf, 0x68, 0xac, 0x1b, + 0x34, 0x83, 0x47, 0xf0, 0xd2, 0x65, 0xa1, 0x16, + 0xe5, 0x52, 0x96, 0x21, 0x03, 0xb4, 0x70, 0xc7, + 0x8b, 0x3c, 0xf8, 0x4f, 0x6d, 0xda, 0x1e, 0xa9, + 0x5a, 0xed, 0x29, 0x9e, 0xbc, 0x0b, 0xcf, 0x78, + }, + { + 0x00, 0xb8, 0x6d, 0xd5, 0xda, 0x62, 0xb7, 0x0f, + 0xa9, 0x11, 0xc4, 0x7c, 0x73, 0xcb, 0x1e, 0xa6, + 0x4f, 0xf7, 0x22, 0x9a, 0x95, 0x2d, 0xf8, 0x40, + 0xe6, 0x5e, 0x8b, 0x33, 0x3c, 0x84, 0x51, 0xe9, + 0x9e, 0x26, 0xf3, 0x4b, 0x44, 0xfc, 0x29, 0x91, + 0x37, 0x8f, 0x5a, 0xe2, 0xed, 0x55, 0x80, 0x38, + 0xd1, 0x69, 0xbc, 0x04, 0x0b, 0xb3, 0x66, 0xde, + 0x78, 0xc0, 0x15, 0xad, 0xa2, 0x1a, 0xcf, 0x77, + 0x21, 0x99, 0x4c, 0xf4, 0xfb, 0x43, 0x96, 0x2e, + 0x88, 0x30, 0xe5, 0x5d, 0x52, 0xea, 0x3f, 0x87, + 0x6e, 0xd6, 0x03, 0xbb, 0xb4, 0x0c, 0xd9, 0x61, + 0xc7, 0x7f, 0xaa, 0x12, 0x1d, 0xa5, 0x70, 0xc8, + 0xbf, 0x07, 0xd2, 0x6a, 0x65, 0xdd, 0x08, 0xb0, + 0x16, 0xae, 0x7b, 0xc3, 0xcc, 0x74, 0xa1, 0x19, + 0xf0, 0x48, 0x9d, 0x25, 0x2a, 0x92, 0x47, 0xff, + 0x59, 0xe1, 0x34, 0x8c, 0x83, 0x3b, 0xee, 0x56, + 0x42, 0xfa, 0x2f, 0x97, 0x98, 0x20, 0xf5, 0x4d, + 0xeb, 0x53, 0x86, 0x3e, 0x31, 0x89, 0x5c, 0xe4, + 0x0d, 0xb5, 0x60, 0xd8, 0xd7, 0x6f, 0xba, 0x02, + 0xa4, 0x1c, 0xc9, 0x71, 0x7e, 0xc6, 0x13, 0xab, + 0xdc, 0x64, 0xb1, 0x09, 0x06, 0xbe, 0x6b, 0xd3, + 0x75, 0xcd, 0x18, 0xa0, 0xaf, 0x17, 0xc2, 0x7a, + 0x93, 0x2b, 0xfe, 0x46, 0x49, 0xf1, 0x24, 0x9c, + 0x3a, 0x82, 0x57, 0xef, 0xe0, 0x58, 0x8d, 0x35, + 0x63, 0xdb, 0x0e, 0xb6, 0xb9, 0x01, 0xd4, 0x6c, + 0xca, 0x72, 0xa7, 0x1f, 0x10, 0xa8, 0x7d, 0xc5, + 0x2c, 0x94, 0x41, 0xf9, 0xf6, 0x4e, 0x9b, 0x23, + 0x85, 0x3d, 0xe8, 0x50, 0x5f, 0xe7, 0x32, 0x8a, + 0xfd, 0x45, 0x90, 0x28, 0x27, 0x9f, 0x4a, 0xf2, + 0x54, 0xec, 0x39, 0x81, 0x8e, 0x36, 0xe3, 0x5b, + 0xb2, 0x0a, 0xdf, 0x67, 0x68, 0xd0, 0x05, 0xbd, + 0x1b, 0xa3, 0x76, 0xce, 0xc1, 0x79, 0xac, 0x14, + }, + { + 0x00, 0xb9, 0x6f, 0xd6, 0xde, 0x67, 0xb1, 0x08, + 0xa1, 0x18, 0xce, 0x77, 0x7f, 0xc6, 0x10, 0xa9, + 0x5f, 0xe6, 0x30, 0x89, 0x81, 0x38, 0xee, 0x57, + 0xfe, 0x47, 0x91, 0x28, 0x20, 0x99, 0x4f, 0xf6, + 0xbe, 0x07, 0xd1, 0x68, 0x60, 0xd9, 0x0f, 0xb6, + 0x1f, 0xa6, 0x70, 0xc9, 0xc1, 0x78, 0xae, 0x17, + 0xe1, 0x58, 0x8e, 0x37, 0x3f, 0x86, 0x50, 0xe9, + 0x40, 0xf9, 0x2f, 0x96, 0x9e, 0x27, 0xf1, 0x48, + 0x61, 0xd8, 0x0e, 0xb7, 0xbf, 0x06, 0xd0, 0x69, + 0xc0, 0x79, 0xaf, 0x16, 0x1e, 0xa7, 0x71, 0xc8, + 0x3e, 0x87, 0x51, 0xe8, 0xe0, 0x59, 0x8f, 0x36, + 0x9f, 0x26, 0xf0, 0x49, 0x41, 0xf8, 0x2e, 0x97, + 0xdf, 0x66, 0xb0, 0x09, 0x01, 0xb8, 0x6e, 0xd7, + 0x7e, 0xc7, 0x11, 0xa8, 0xa0, 0x19, 0xcf, 0x76, + 0x80, 0x39, 0xef, 0x56, 0x5e, 0xe7, 0x31, 0x88, + 0x21, 0x98, 0x4e, 0xf7, 0xff, 0x46, 0x90, 0x29, + 0xc2, 0x7b, 0xad, 0x14, 0x1c, 0xa5, 0x73, 0xca, + 0x63, 0xda, 0x0c, 0xb5, 0xbd, 0x04, 0xd2, 0x6b, + 0x9d, 0x24, 0xf2, 0x4b, 0x43, 0xfa, 0x2c, 0x95, + 0x3c, 0x85, 0x53, 0xea, 0xe2, 0x5b, 0x8d, 0x34, + 0x7c, 0xc5, 0x13, 0xaa, 0xa2, 0x1b, 0xcd, 0x74, + 0xdd, 0x64, 0xb2, 0x0b, 0x03, 0xba, 0x6c, 0xd5, + 0x23, 0x9a, 0x4c, 0xf5, 0xfd, 0x44, 0x92, 0x2b, + 0x82, 0x3b, 0xed, 0x54, 0x5c, 0xe5, 0x33, 0x8a, + 0xa3, 0x1a, 0xcc, 0x75, 0x7d, 0xc4, 0x12, 0xab, + 0x02, 0xbb, 0x6d, 0xd4, 0xdc, 0x65, 0xb3, 0x0a, + 0xfc, 0x45, 0x93, 0x2a, 0x22, 0x9b, 0x4d, 0xf4, + 0x5d, 0xe4, 0x32, 0x8b, 0x83, 0x3a, 0xec, 0x55, + 0x1d, 0xa4, 0x72, 0xcb, 0xc3, 0x7a, 0xac, 0x15, + 0xbc, 0x05, 0xd3, 0x6a, 0x62, 0xdb, 0x0d, 0xb4, + 0x42, 0xfb, 0x2d, 0x94, 0x9c, 0x25, 0xf3, 0x4a, + 0xe3, 0x5a, 0x8c, 0x35, 0x3d, 0x84, 0x52, 0xeb, + }, + { + 0x00, 0xba, 0x69, 0xd3, 0xd2, 0x68, 0xbb, 0x01, + 0xb9, 0x03, 0xd0, 0x6a, 0x6b, 0xd1, 0x02, 0xb8, + 0x6f, 0xd5, 0x06, 0xbc, 0xbd, 0x07, 0xd4, 0x6e, + 0xd6, 0x6c, 0xbf, 0x05, 0x04, 0xbe, 0x6d, 0xd7, + 0xde, 0x64, 0xb7, 0x0d, 0x0c, 0xb6, 0x65, 0xdf, + 0x67, 0xdd, 0x0e, 0xb4, 0xb5, 0x0f, 0xdc, 0x66, + 0xb1, 0x0b, 0xd8, 0x62, 0x63, 0xd9, 0x0a, 0xb0, + 0x08, 0xb2, 0x61, 0xdb, 0xda, 0x60, 0xb3, 0x09, + 0xa1, 0x1b, 0xc8, 0x72, 0x73, 0xc9, 0x1a, 0xa0, + 0x18, 0xa2, 0x71, 0xcb, 0xca, 0x70, 0xa3, 0x19, + 0xce, 0x74, 0xa7, 0x1d, 0x1c, 0xa6, 0x75, 0xcf, + 0x77, 0xcd, 0x1e, 0xa4, 0xa5, 0x1f, 0xcc, 0x76, + 0x7f, 0xc5, 0x16, 0xac, 0xad, 0x17, 0xc4, 0x7e, + 0xc6, 0x7c, 0xaf, 0x15, 0x14, 0xae, 0x7d, 0xc7, + 0x10, 0xaa, 0x79, 0xc3, 0xc2, 0x78, 0xab, 0x11, + 0xa9, 0x13, 0xc0, 0x7a, 0x7b, 0xc1, 0x12, 0xa8, + 0x5f, 0xe5, 0x36, 0x8c, 0x8d, 0x37, 0xe4, 0x5e, + 0xe6, 0x5c, 0x8f, 0x35, 0x34, 0x8e, 0x5d, 0xe7, + 0x30, 0x8a, 0x59, 0xe3, 0xe2, 0x58, 0x8b, 0x31, + 0x89, 0x33, 0xe0, 0x5a, 0x5b, 0xe1, 0x32, 0x88, + 0x81, 0x3b, 0xe8, 0x52, 0x53, 0xe9, 0x3a, 0x80, + 0x38, 0x82, 0x51, 0xeb, 0xea, 0x50, 0x83, 0x39, + 0xee, 0x54, 0x87, 0x3d, 0x3c, 0x86, 0x55, 0xef, + 0x57, 0xed, 0x3e, 0x84, 0x85, 0x3f, 0xec, 0x56, + 0xfe, 0x44, 0x97, 0x2d, 0x2c, 0x96, 0x45, 0xff, + 0x47, 0xfd, 0x2e, 0x94, 0x95, 0x2f, 0xfc, 0x46, + 0x91, 0x2b, 0xf8, 0x42, 0x43, 0xf9, 0x2a, 0x90, + 0x28, 0x92, 0x41, 0xfb, 0xfa, 0x40, 0x93, 0x29, + 0x20, 0x9a, 0x49, 0xf3, 0xf2, 0x48, 0x9b, 0x21, + 0x99, 0x23, 0xf0, 0x4a, 0x4b, 0xf1, 0x22, 0x98, + 0x4f, 0xf5, 0x26, 0x9c, 0x9d, 0x27, 0xf4, 0x4e, + 0xf6, 0x4c, 0x9f, 0x25, 0x24, 0x9e, 0x4d, 0xf7, + }, + { + 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, + 0xb1, 0x0a, 0xda, 0x61, 0x67, 0xdc, 0x0c, 0xb7, + 0x7f, 0xc4, 0x14, 0xaf, 0xa9, 0x12, 0xc2, 0x79, + 0xce, 0x75, 0xa5, 0x1e, 0x18, 0xa3, 0x73, 0xc8, + 0xfe, 0x45, 0x95, 0x2e, 0x28, 0x93, 0x43, 0xf8, + 0x4f, 0xf4, 0x24, 0x9f, 0x99, 0x22, 0xf2, 0x49, + 0x81, 0x3a, 0xea, 0x51, 0x57, 0xec, 0x3c, 0x87, + 0x30, 0x8b, 0x5b, 0xe0, 0xe6, 0x5d, 0x8d, 0x36, + 0xe1, 0x5a, 0x8a, 0x31, 0x37, 0x8c, 0x5c, 0xe7, + 0x50, 0xeb, 0x3b, 0x80, 0x86, 0x3d, 0xed, 0x56, + 0x9e, 0x25, 0xf5, 0x4e, 0x48, 0xf3, 0x23, 0x98, + 0x2f, 0x94, 0x44, 0xff, 0xf9, 0x42, 0x92, 0x29, + 0x1f, 0xa4, 0x74, 0xcf, 0xc9, 0x72, 0xa2, 0x19, + 0xae, 0x15, 0xc5, 0x7e, 0x78, 0xc3, 0x13, 0xa8, + 0x60, 0xdb, 0x0b, 0xb0, 0xb6, 0x0d, 0xdd, 0x66, + 0xd1, 0x6a, 0xba, 0x01, 0x07, 0xbc, 0x6c, 0xd7, + 0xdf, 0x64, 0xb4, 0x0f, 0x09, 0xb2, 0x62, 0xd9, + 0x6e, 0xd5, 0x05, 0xbe, 0xb8, 0x03, 0xd3, 0x68, + 0xa0, 0x1b, 0xcb, 0x70, 0x76, 0xcd, 0x1d, 0xa6, + 0x11, 0xaa, 0x7a, 0xc1, 0xc7, 0x7c, 0xac, 0x17, + 0x21, 0x9a, 0x4a, 0xf1, 0xf7, 0x4c, 0x9c, 0x27, + 0x90, 0x2b, 0xfb, 0x40, 0x46, 0xfd, 0x2d, 0x96, + 0x5e, 0xe5, 0x35, 0x8e, 0x88, 0x33, 0xe3, 0x58, + 0xef, 0x54, 0x84, 0x3f, 0x39, 0x82, 0x52, 0xe9, + 0x3e, 0x85, 0x55, 0xee, 0xe8, 0x53, 0x83, 0x38, + 0x8f, 0x34, 0xe4, 0x5f, 0x59, 0xe2, 0x32, 0x89, + 0x41, 0xfa, 0x2a, 0x91, 0x97, 0x2c, 0xfc, 0x47, + 0xf0, 0x4b, 0x9b, 0x20, 0x26, 0x9d, 0x4d, 0xf6, + 0xc0, 0x7b, 0xab, 0x10, 0x16, 0xad, 0x7d, 0xc6, + 0x71, 0xca, 0x1a, 0xa1, 0xa7, 0x1c, 0xcc, 0x77, + 0xbf, 0x04, 0xd4, 0x6f, 0x69, 0xd2, 0x02, 0xb9, + 0x0e, 0xb5, 0x65, 0xde, 0xd8, 0x63, 0xb3, 0x08, + }, + { + 0x00, 0xbc, 0x65, 0xd9, 0xca, 0x76, 0xaf, 0x13, + 0x89, 0x35, 0xec, 0x50, 0x43, 0xff, 0x26, 0x9a, + 0x0f, 0xb3, 0x6a, 0xd6, 0xc5, 0x79, 0xa0, 0x1c, + 0x86, 0x3a, 0xe3, 0x5f, 0x4c, 0xf0, 0x29, 0x95, + 0x1e, 0xa2, 0x7b, 0xc7, 0xd4, 0x68, 0xb1, 0x0d, + 0x97, 0x2b, 0xf2, 0x4e, 0x5d, 0xe1, 0x38, 0x84, + 0x11, 0xad, 0x74, 0xc8, 0xdb, 0x67, 0xbe, 0x02, + 0x98, 0x24, 0xfd, 0x41, 0x52, 0xee, 0x37, 0x8b, + 0x3c, 0x80, 0x59, 0xe5, 0xf6, 0x4a, 0x93, 0x2f, + 0xb5, 0x09, 0xd0, 0x6c, 0x7f, 0xc3, 0x1a, 0xa6, + 0x33, 0x8f, 0x56, 0xea, 0xf9, 0x45, 0x9c, 0x20, + 0xba, 0x06, 0xdf, 0x63, 0x70, 0xcc, 0x15, 0xa9, + 0x22, 0x9e, 0x47, 0xfb, 0xe8, 0x54, 0x8d, 0x31, + 0xab, 0x17, 0xce, 0x72, 0x61, 0xdd, 0x04, 0xb8, + 0x2d, 0x91, 0x48, 0xf4, 0xe7, 0x5b, 0x82, 0x3e, + 0xa4, 0x18, 0xc1, 0x7d, 0x6e, 0xd2, 0x0b, 0xb7, + 0x78, 0xc4, 0x1d, 0xa1, 0xb2, 0x0e, 0xd7, 0x6b, + 0xf1, 0x4d, 0x94, 0x28, 0x3b, 0x87, 0x5e, 0xe2, + 0x77, 0xcb, 0x12, 0xae, 0xbd, 0x01, 0xd8, 0x64, + 0xfe, 0x42, 0x9b, 0x27, 0x34, 0x88, 0x51, 0xed, + 0x66, 0xda, 0x03, 0xbf, 0xac, 0x10, 0xc9, 0x75, + 0xef, 0x53, 0x8a, 0x36, 0x25, 0x99, 0x40, 0xfc, + 0x69, 0xd5, 0x0c, 0xb0, 0xa3, 0x1f, 0xc6, 0x7a, + 0xe0, 0x5c, 0x85, 0x39, 0x2a, 0x96, 0x4f, 0xf3, + 0x44, 0xf8, 0x21, 0x9d, 0x8e, 0x32, 0xeb, 0x57, + 0xcd, 0x71, 0xa8, 0x14, 0x07, 0xbb, 0x62, 0xde, + 0x4b, 0xf7, 0x2e, 0x92, 0x81, 0x3d, 0xe4, 0x58, + 0xc2, 0x7e, 0xa7, 0x1b, 0x08, 0xb4, 0x6d, 0xd1, + 0x5a, 0xe6, 0x3f, 0x83, 0x90, 0x2c, 0xf5, 0x49, + 0xd3, 0x6f, 0xb6, 0x0a, 0x19, 0xa5, 0x7c, 0xc0, + 0x55, 0xe9, 0x30, 0x8c, 0x9f, 0x23, 0xfa, 0x46, + 0xdc, 0x60, 0xb9, 0x05, 0x16, 0xaa, 0x73, 0xcf, + }, + { + 0x00, 0xbd, 0x67, 0xda, 0xce, 0x73, 0xa9, 0x14, + 0x81, 0x3c, 0xe6, 0x5b, 0x4f, 0xf2, 0x28, 0x95, + 0x1f, 0xa2, 0x78, 0xc5, 0xd1, 0x6c, 0xb6, 0x0b, + 0x9e, 0x23, 0xf9, 0x44, 0x50, 0xed, 0x37, 0x8a, + 0x3e, 0x83, 0x59, 0xe4, 0xf0, 0x4d, 0x97, 0x2a, + 0xbf, 0x02, 0xd8, 0x65, 0x71, 0xcc, 0x16, 0xab, + 0x21, 0x9c, 0x46, 0xfb, 0xef, 0x52, 0x88, 0x35, + 0xa0, 0x1d, 0xc7, 0x7a, 0x6e, 0xd3, 0x09, 0xb4, + 0x7c, 0xc1, 0x1b, 0xa6, 0xb2, 0x0f, 0xd5, 0x68, + 0xfd, 0x40, 0x9a, 0x27, 0x33, 0x8e, 0x54, 0xe9, + 0x63, 0xde, 0x04, 0xb9, 0xad, 0x10, 0xca, 0x77, + 0xe2, 0x5f, 0x85, 0x38, 0x2c, 0x91, 0x4b, 0xf6, + 0x42, 0xff, 0x25, 0x98, 0x8c, 0x31, 0xeb, 0x56, + 0xc3, 0x7e, 0xa4, 0x19, 0x0d, 0xb0, 0x6a, 0xd7, + 0x5d, 0xe0, 0x3a, 0x87, 0x93, 0x2e, 0xf4, 0x49, + 0xdc, 0x61, 0xbb, 0x06, 0x12, 0xaf, 0x75, 0xc8, + 0xf8, 0x45, 0x9f, 0x22, 0x36, 0x8b, 0x51, 0xec, + 0x79, 0xc4, 0x1e, 0xa3, 0xb7, 0x0a, 0xd0, 0x6d, + 0xe7, 0x5a, 0x80, 0x3d, 0x29, 0x94, 0x4e, 0xf3, + 0x66, 0xdb, 0x01, 0xbc, 0xa8, 0x15, 0xcf, 0x72, + 0xc6, 0x7b, 0xa1, 0x1c, 0x08, 0xb5, 0x6f, 0xd2, + 0x47, 0xfa, 0x20, 0x9d, 0x89, 0x34, 0xee, 0x53, + 0xd9, 0x64, 0xbe, 0x03, 0x17, 0xaa, 0x70, 0xcd, + 0x58, 0xe5, 0x3f, 0x82, 0x96, 0x2b, 0xf1, 0x4c, + 0x84, 0x39, 0xe3, 0x5e, 0x4a, 0xf7, 0x2d, 0x90, + 0x05, 0xb8, 0x62, 0xdf, 0xcb, 0x76, 0xac, 0x11, + 0x9b, 0x26, 0xfc, 0x41, 0x55, 0xe8, 0x32, 0x8f, + 0x1a, 0xa7, 0x7d, 0xc0, 0xd4, 0x69, 0xb3, 0x0e, + 0xba, 0x07, 0xdd, 0x60, 0x74, 0xc9, 0x13, 0xae, + 0x3b, 0x86, 0x5c, 0xe1, 0xf5, 0x48, 0x92, 0x2f, + 0xa5, 0x18, 0xc2, 0x7f, 0x6b, 0xd6, 0x0c, 0xb1, + 0x24, 0x99, 0x43, 0xfe, 0xea, 0x57, 0x8d, 0x30, + }, + { + 0x00, 0xbe, 0x61, 0xdf, 0xc2, 0x7c, 0xa3, 0x1d, + 0x99, 0x27, 0xf8, 0x46, 0x5b, 0xe5, 0x3a, 0x84, + 0x2f, 0x91, 0x4e, 0xf0, 0xed, 0x53, 0x8c, 0x32, + 0xb6, 0x08, 0xd7, 0x69, 0x74, 0xca, 0x15, 0xab, + 0x5e, 0xe0, 0x3f, 0x81, 0x9c, 0x22, 0xfd, 0x43, + 0xc7, 0x79, 0xa6, 0x18, 0x05, 0xbb, 0x64, 0xda, + 0x71, 0xcf, 0x10, 0xae, 0xb3, 0x0d, 0xd2, 0x6c, + 0xe8, 0x56, 0x89, 0x37, 0x2a, 0x94, 0x4b, 0xf5, + 0xbc, 0x02, 0xdd, 0x63, 0x7e, 0xc0, 0x1f, 0xa1, + 0x25, 0x9b, 0x44, 0xfa, 0xe7, 0x59, 0x86, 0x38, + 0x93, 0x2d, 0xf2, 0x4c, 0x51, 0xef, 0x30, 0x8e, + 0x0a, 0xb4, 0x6b, 0xd5, 0xc8, 0x76, 0xa9, 0x17, + 0xe2, 0x5c, 0x83, 0x3d, 0x20, 0x9e, 0x41, 0xff, + 0x7b, 0xc5, 0x1a, 0xa4, 0xb9, 0x07, 0xd8, 0x66, + 0xcd, 0x73, 0xac, 0x12, 0x0f, 0xb1, 0x6e, 0xd0, + 0x54, 0xea, 0x35, 0x8b, 0x96, 0x28, 0xf7, 0x49, + 0x65, 0xdb, 0x04, 0xba, 0xa7, 0x19, 0xc6, 0x78, + 0xfc, 0x42, 0x9d, 0x23, 0x3e, 0x80, 0x5f, 0xe1, + 0x4a, 0xf4, 0x2b, 0x95, 0x88, 0x36, 0xe9, 0x57, + 0xd3, 0x6d, 0xb2, 0x0c, 0x11, 0xaf, 0x70, 0xce, + 0x3b, 0x85, 0x5a, 0xe4, 0xf9, 0x47, 0x98, 0x26, + 0xa2, 0x1c, 0xc3, 0x7d, 0x60, 0xde, 0x01, 0xbf, + 0x14, 0xaa, 0x75, 0xcb, 0xd6, 0x68, 0xb7, 0x09, + 0x8d, 0x33, 0xec, 0x52, 0x4f, 0xf1, 0x2e, 0x90, + 0xd9, 0x67, 0xb8, 0x06, 0x1b, 0xa5, 0x7a, 0xc4, + 0x40, 0xfe, 0x21, 0x9f, 0x82, 0x3c, 0xe3, 0x5d, + 0xf6, 0x48, 0x97, 0x29, 0x34, 0x8a, 0x55, 0xeb, + 0x6f, 0xd1, 0x0e, 0xb0, 0xad, 0x13, 0xcc, 0x72, + 0x87, 0x39, 0xe6, 0x58, 0x45, 0xfb, 0x24, 0x9a, + 0x1e, 0xa0, 0x7f, 0xc1, 0xdc, 0x62, 0xbd, 0x03, + 0xa8, 0x16, 0xc9, 0x77, 0x6a, 0xd4, 0x0b, 0xb5, + 0x31, 0x8f, 0x50, 0xee, 0xf3, 0x4d, 0x92, 0x2c, + }, + { + 0x00, 0xbf, 0x63, 0xdc, 0xc6, 0x79, 0xa5, 0x1a, + 0x91, 0x2e, 0xf2, 0x4d, 0x57, 0xe8, 0x34, 0x8b, + 0x3f, 0x80, 0x5c, 0xe3, 0xf9, 0x46, 0x9a, 0x25, + 0xae, 0x11, 0xcd, 0x72, 0x68, 0xd7, 0x0b, 0xb4, + 0x7e, 0xc1, 0x1d, 0xa2, 0xb8, 0x07, 0xdb, 0x64, + 0xef, 0x50, 0x8c, 0x33, 0x29, 0x96, 0x4a, 0xf5, + 0x41, 0xfe, 0x22, 0x9d, 0x87, 0x38, 0xe4, 0x5b, + 0xd0, 0x6f, 0xb3, 0x0c, 0x16, 0xa9, 0x75, 0xca, + 0xfc, 0x43, 0x9f, 0x20, 0x3a, 0x85, 0x59, 0xe6, + 0x6d, 0xd2, 0x0e, 0xb1, 0xab, 0x14, 0xc8, 0x77, + 0xc3, 0x7c, 0xa0, 0x1f, 0x05, 0xba, 0x66, 0xd9, + 0x52, 0xed, 0x31, 0x8e, 0x94, 0x2b, 0xf7, 0x48, + 0x82, 0x3d, 0xe1, 0x5e, 0x44, 0xfb, 0x27, 0x98, + 0x13, 0xac, 0x70, 0xcf, 0xd5, 0x6a, 0xb6, 0x09, + 0xbd, 0x02, 0xde, 0x61, 0x7b, 0xc4, 0x18, 0xa7, + 0x2c, 0x93, 0x4f, 0xf0, 0xea, 0x55, 0x89, 0x36, + 0xe5, 0x5a, 0x86, 0x39, 0x23, 0x9c, 0x40, 0xff, + 0x74, 0xcb, 0x17, 0xa8, 0xb2, 0x0d, 0xd1, 0x6e, + 0xda, 0x65, 0xb9, 0x06, 0x1c, 0xa3, 0x7f, 0xc0, + 0x4b, 0xf4, 0x28, 0x97, 0x8d, 0x32, 0xee, 0x51, + 0x9b, 0x24, 0xf8, 0x47, 0x5d, 0xe2, 0x3e, 0x81, + 0x0a, 0xb5, 0x69, 0xd6, 0xcc, 0x73, 0xaf, 0x10, + 0xa4, 0x1b, 0xc7, 0x78, 0x62, 0xdd, 0x01, 0xbe, + 0x35, 0x8a, 0x56, 0xe9, 0xf3, 0x4c, 0x90, 0x2f, + 0x19, 0xa6, 0x7a, 0xc5, 0xdf, 0x60, 0xbc, 0x03, + 0x88, 0x37, 0xeb, 0x54, 0x4e, 0xf1, 0x2d, 0x92, + 0x26, 0x99, 0x45, 0xfa, 0xe0, 0x5f, 0x83, 0x3c, + 0xb7, 0x08, 0xd4, 0x6b, 0x71, 0xce, 0x12, 0xad, + 0x67, 0xd8, 0x04, 0xbb, 0xa1, 0x1e, 0xc2, 0x7d, + 0xf6, 0x49, 0x95, 0x2a, 0x30, 0x8f, 0x53, 0xec, + 0x58, 0xe7, 0x3b, 0x84, 0x9e, 0x21, 0xfd, 0x42, + 0xc9, 0x76, 0xaa, 0x15, 0x0f, 0xb0, 0x6c, 0xd3, + }, + { + 0x00, 0xc0, 0x9d, 0x5d, 0x27, 0xe7, 0xba, 0x7a, + 0x4e, 0x8e, 0xd3, 0x13, 0x69, 0xa9, 0xf4, 0x34, + 0x9c, 0x5c, 0x01, 0xc1, 0xbb, 0x7b, 0x26, 0xe6, + 0xd2, 0x12, 0x4f, 0x8f, 0xf5, 0x35, 0x68, 0xa8, + 0x25, 0xe5, 0xb8, 0x78, 0x02, 0xc2, 0x9f, 0x5f, + 0x6b, 0xab, 0xf6, 0x36, 0x4c, 0x8c, 0xd1, 0x11, + 0xb9, 0x79, 0x24, 0xe4, 0x9e, 0x5e, 0x03, 0xc3, + 0xf7, 0x37, 0x6a, 0xaa, 0xd0, 0x10, 0x4d, 0x8d, + 0x4a, 0x8a, 0xd7, 0x17, 0x6d, 0xad, 0xf0, 0x30, + 0x04, 0xc4, 0x99, 0x59, 0x23, 0xe3, 0xbe, 0x7e, + 0xd6, 0x16, 0x4b, 0x8b, 0xf1, 0x31, 0x6c, 0xac, + 0x98, 0x58, 0x05, 0xc5, 0xbf, 0x7f, 0x22, 0xe2, + 0x6f, 0xaf, 0xf2, 0x32, 0x48, 0x88, 0xd5, 0x15, + 0x21, 0xe1, 0xbc, 0x7c, 0x06, 0xc6, 0x9b, 0x5b, + 0xf3, 0x33, 0x6e, 0xae, 0xd4, 0x14, 0x49, 0x89, + 0xbd, 0x7d, 0x20, 0xe0, 0x9a, 0x5a, 0x07, 0xc7, + 0x94, 0x54, 0x09, 0xc9, 0xb3, 0x73, 0x2e, 0xee, + 0xda, 0x1a, 0x47, 0x87, 0xfd, 0x3d, 0x60, 0xa0, + 0x08, 0xc8, 0x95, 0x55, 0x2f, 0xef, 0xb2, 0x72, + 0x46, 0x86, 0xdb, 0x1b, 0x61, 0xa1, 0xfc, 0x3c, + 0xb1, 0x71, 0x2c, 0xec, 0x96, 0x56, 0x0b, 0xcb, + 0xff, 0x3f, 0x62, 0xa2, 0xd8, 0x18, 0x45, 0x85, + 0x2d, 0xed, 0xb0, 0x70, 0x0a, 0xca, 0x97, 0x57, + 0x63, 0xa3, 0xfe, 0x3e, 0x44, 0x84, 0xd9, 0x19, + 0xde, 0x1e, 0x43, 0x83, 0xf9, 0x39, 0x64, 0xa4, + 0x90, 0x50, 0x0d, 0xcd, 0xb7, 0x77, 0x2a, 0xea, + 0x42, 0x82, 0xdf, 0x1f, 0x65, 0xa5, 0xf8, 0x38, + 0x0c, 0xcc, 0x91, 0x51, 0x2b, 0xeb, 0xb6, 0x76, + 0xfb, 0x3b, 0x66, 0xa6, 0xdc, 0x1c, 0x41, 0x81, + 0xb5, 0x75, 0x28, 0xe8, 0x92, 0x52, 0x0f, 0xcf, + 0x67, 0xa7, 0xfa, 0x3a, 0x40, 0x80, 0xdd, 0x1d, + 0x29, 0xe9, 0xb4, 0x74, 0x0e, 0xce, 0x93, 0x53, + }, + { + 0x00, 0xc1, 0x9f, 0x5e, 0x23, 0xe2, 0xbc, 0x7d, + 0x46, 0x87, 0xd9, 0x18, 0x65, 0xa4, 0xfa, 0x3b, + 0x8c, 0x4d, 0x13, 0xd2, 0xaf, 0x6e, 0x30, 0xf1, + 0xca, 0x0b, 0x55, 0x94, 0xe9, 0x28, 0x76, 0xb7, + 0x05, 0xc4, 0x9a, 0x5b, 0x26, 0xe7, 0xb9, 0x78, + 0x43, 0x82, 0xdc, 0x1d, 0x60, 0xa1, 0xff, 0x3e, + 0x89, 0x48, 0x16, 0xd7, 0xaa, 0x6b, 0x35, 0xf4, + 0xcf, 0x0e, 0x50, 0x91, 0xec, 0x2d, 0x73, 0xb2, + 0x0a, 0xcb, 0x95, 0x54, 0x29, 0xe8, 0xb6, 0x77, + 0x4c, 0x8d, 0xd3, 0x12, 0x6f, 0xae, 0xf0, 0x31, + 0x86, 0x47, 0x19, 0xd8, 0xa5, 0x64, 0x3a, 0xfb, + 0xc0, 0x01, 0x5f, 0x9e, 0xe3, 0x22, 0x7c, 0xbd, + 0x0f, 0xce, 0x90, 0x51, 0x2c, 0xed, 0xb3, 0x72, + 0x49, 0x88, 0xd6, 0x17, 0x6a, 0xab, 0xf5, 0x34, + 0x83, 0x42, 0x1c, 0xdd, 0xa0, 0x61, 0x3f, 0xfe, + 0xc5, 0x04, 0x5a, 0x9b, 0xe6, 0x27, 0x79, 0xb8, + 0x14, 0xd5, 0x8b, 0x4a, 0x37, 0xf6, 0xa8, 0x69, + 0x52, 0x93, 0xcd, 0x0c, 0x71, 0xb0, 0xee, 0x2f, + 0x98, 0x59, 0x07, 0xc6, 0xbb, 0x7a, 0x24, 0xe5, + 0xde, 0x1f, 0x41, 0x80, 0xfd, 0x3c, 0x62, 0xa3, + 0x11, 0xd0, 0x8e, 0x4f, 0x32, 0xf3, 0xad, 0x6c, + 0x57, 0x96, 0xc8, 0x09, 0x74, 0xb5, 0xeb, 0x2a, + 0x9d, 0x5c, 0x02, 0xc3, 0xbe, 0x7f, 0x21, 0xe0, + 0xdb, 0x1a, 0x44, 0x85, 0xf8, 0x39, 0x67, 0xa6, + 0x1e, 0xdf, 0x81, 0x40, 0x3d, 0xfc, 0xa2, 0x63, + 0x58, 0x99, 0xc7, 0x06, 0x7b, 0xba, 0xe4, 0x25, + 0x92, 0x53, 0x0d, 0xcc, 0xb1, 0x70, 0x2e, 0xef, + 0xd4, 0x15, 0x4b, 0x8a, 0xf7, 0x36, 0x68, 0xa9, + 0x1b, 0xda, 0x84, 0x45, 0x38, 0xf9, 0xa7, 0x66, + 0x5d, 0x9c, 0xc2, 0x03, 0x7e, 0xbf, 0xe1, 0x20, + 0x97, 0x56, 0x08, 0xc9, 0xb4, 0x75, 0x2b, 0xea, + 0xd1, 0x10, 0x4e, 0x8f, 0xf2, 0x33, 0x6d, 0xac, + }, + { + 0x00, 0xc2, 0x99, 0x5b, 0x2f, 0xed, 0xb6, 0x74, + 0x5e, 0x9c, 0xc7, 0x05, 0x71, 0xb3, 0xe8, 0x2a, + 0xbc, 0x7e, 0x25, 0xe7, 0x93, 0x51, 0x0a, 0xc8, + 0xe2, 0x20, 0x7b, 0xb9, 0xcd, 0x0f, 0x54, 0x96, + 0x65, 0xa7, 0xfc, 0x3e, 0x4a, 0x88, 0xd3, 0x11, + 0x3b, 0xf9, 0xa2, 0x60, 0x14, 0xd6, 0x8d, 0x4f, + 0xd9, 0x1b, 0x40, 0x82, 0xf6, 0x34, 0x6f, 0xad, + 0x87, 0x45, 0x1e, 0xdc, 0xa8, 0x6a, 0x31, 0xf3, + 0xca, 0x08, 0x53, 0x91, 0xe5, 0x27, 0x7c, 0xbe, + 0x94, 0x56, 0x0d, 0xcf, 0xbb, 0x79, 0x22, 0xe0, + 0x76, 0xb4, 0xef, 0x2d, 0x59, 0x9b, 0xc0, 0x02, + 0x28, 0xea, 0xb1, 0x73, 0x07, 0xc5, 0x9e, 0x5c, + 0xaf, 0x6d, 0x36, 0xf4, 0x80, 0x42, 0x19, 0xdb, + 0xf1, 0x33, 0x68, 0xaa, 0xde, 0x1c, 0x47, 0x85, + 0x13, 0xd1, 0x8a, 0x48, 0x3c, 0xfe, 0xa5, 0x67, + 0x4d, 0x8f, 0xd4, 0x16, 0x62, 0xa0, 0xfb, 0x39, + 0x89, 0x4b, 0x10, 0xd2, 0xa6, 0x64, 0x3f, 0xfd, + 0xd7, 0x15, 0x4e, 0x8c, 0xf8, 0x3a, 0x61, 0xa3, + 0x35, 0xf7, 0xac, 0x6e, 0x1a, 0xd8, 0x83, 0x41, + 0x6b, 0xa9, 0xf2, 0x30, 0x44, 0x86, 0xdd, 0x1f, + 0xec, 0x2e, 0x75, 0xb7, 0xc3, 0x01, 0x5a, 0x98, + 0xb2, 0x70, 0x2b, 0xe9, 0x9d, 0x5f, 0x04, 0xc6, + 0x50, 0x92, 0xc9, 0x0b, 0x7f, 0xbd, 0xe6, 0x24, + 0x0e, 0xcc, 0x97, 0x55, 0x21, 0xe3, 0xb8, 0x7a, + 0x43, 0x81, 0xda, 0x18, 0x6c, 0xae, 0xf5, 0x37, + 0x1d, 0xdf, 0x84, 0x46, 0x32, 0xf0, 0xab, 0x69, + 0xff, 0x3d, 0x66, 0xa4, 0xd0, 0x12, 0x49, 0x8b, + 0xa1, 0x63, 0x38, 0xfa, 0x8e, 0x4c, 0x17, 0xd5, + 0x26, 0xe4, 0xbf, 0x7d, 0x09, 0xcb, 0x90, 0x52, + 0x78, 0xba, 0xe1, 0x23, 0x57, 0x95, 0xce, 0x0c, + 0x9a, 0x58, 0x03, 0xc1, 0xb5, 0x77, 0x2c, 0xee, + 0xc4, 0x06, 0x5d, 0x9f, 0xeb, 0x29, 0x72, 0xb0, + }, + { + 0x00, 0xc3, 0x9b, 0x58, 0x2b, 0xe8, 0xb0, 0x73, + 0x56, 0x95, 0xcd, 0x0e, 0x7d, 0xbe, 0xe6, 0x25, + 0xac, 0x6f, 0x37, 0xf4, 0x87, 0x44, 0x1c, 0xdf, + 0xfa, 0x39, 0x61, 0xa2, 0xd1, 0x12, 0x4a, 0x89, + 0x45, 0x86, 0xde, 0x1d, 0x6e, 0xad, 0xf5, 0x36, + 0x13, 0xd0, 0x88, 0x4b, 0x38, 0xfb, 0xa3, 0x60, + 0xe9, 0x2a, 0x72, 0xb1, 0xc2, 0x01, 0x59, 0x9a, + 0xbf, 0x7c, 0x24, 0xe7, 0x94, 0x57, 0x0f, 0xcc, + 0x8a, 0x49, 0x11, 0xd2, 0xa1, 0x62, 0x3a, 0xf9, + 0xdc, 0x1f, 0x47, 0x84, 0xf7, 0x34, 0x6c, 0xaf, + 0x26, 0xe5, 0xbd, 0x7e, 0x0d, 0xce, 0x96, 0x55, + 0x70, 0xb3, 0xeb, 0x28, 0x5b, 0x98, 0xc0, 0x03, + 0xcf, 0x0c, 0x54, 0x97, 0xe4, 0x27, 0x7f, 0xbc, + 0x99, 0x5a, 0x02, 0xc1, 0xb2, 0x71, 0x29, 0xea, + 0x63, 0xa0, 0xf8, 0x3b, 0x48, 0x8b, 0xd3, 0x10, + 0x35, 0xf6, 0xae, 0x6d, 0x1e, 0xdd, 0x85, 0x46, + 0x09, 0xca, 0x92, 0x51, 0x22, 0xe1, 0xb9, 0x7a, + 0x5f, 0x9c, 0xc4, 0x07, 0x74, 0xb7, 0xef, 0x2c, + 0xa5, 0x66, 0x3e, 0xfd, 0x8e, 0x4d, 0x15, 0xd6, + 0xf3, 0x30, 0x68, 0xab, 0xd8, 0x1b, 0x43, 0x80, + 0x4c, 0x8f, 0xd7, 0x14, 0x67, 0xa4, 0xfc, 0x3f, + 0x1a, 0xd9, 0x81, 0x42, 0x31, 0xf2, 0xaa, 0x69, + 0xe0, 0x23, 0x7b, 0xb8, 0xcb, 0x08, 0x50, 0x93, + 0xb6, 0x75, 0x2d, 0xee, 0x9d, 0x5e, 0x06, 0xc5, + 0x83, 0x40, 0x18, 0xdb, 0xa8, 0x6b, 0x33, 0xf0, + 0xd5, 0x16, 0x4e, 0x8d, 0xfe, 0x3d, 0x65, 0xa6, + 0x2f, 0xec, 0xb4, 0x77, 0x04, 0xc7, 0x9f, 0x5c, + 0x79, 0xba, 0xe2, 0x21, 0x52, 0x91, 0xc9, 0x0a, + 0xc6, 0x05, 0x5d, 0x9e, 0xed, 0x2e, 0x76, 0xb5, + 0x90, 0x53, 0x0b, 0xc8, 0xbb, 0x78, 0x20, 0xe3, + 0x6a, 0xa9, 0xf1, 0x32, 0x41, 0x82, 0xda, 0x19, + 0x3c, 0xff, 0xa7, 0x64, 0x17, 0xd4, 0x8c, 0x4f, + }, + { + 0x00, 0xc4, 0x95, 0x51, 0x37, 0xf3, 0xa2, 0x66, + 0x6e, 0xaa, 0xfb, 0x3f, 0x59, 0x9d, 0xcc, 0x08, + 0xdc, 0x18, 0x49, 0x8d, 0xeb, 0x2f, 0x7e, 0xba, + 0xb2, 0x76, 0x27, 0xe3, 0x85, 0x41, 0x10, 0xd4, + 0xa5, 0x61, 0x30, 0xf4, 0x92, 0x56, 0x07, 0xc3, + 0xcb, 0x0f, 0x5e, 0x9a, 0xfc, 0x38, 0x69, 0xad, + 0x79, 0xbd, 0xec, 0x28, 0x4e, 0x8a, 0xdb, 0x1f, + 0x17, 0xd3, 0x82, 0x46, 0x20, 0xe4, 0xb5, 0x71, + 0x57, 0x93, 0xc2, 0x06, 0x60, 0xa4, 0xf5, 0x31, + 0x39, 0xfd, 0xac, 0x68, 0x0e, 0xca, 0x9b, 0x5f, + 0x8b, 0x4f, 0x1e, 0xda, 0xbc, 0x78, 0x29, 0xed, + 0xe5, 0x21, 0x70, 0xb4, 0xd2, 0x16, 0x47, 0x83, + 0xf2, 0x36, 0x67, 0xa3, 0xc5, 0x01, 0x50, 0x94, + 0x9c, 0x58, 0x09, 0xcd, 0xab, 0x6f, 0x3e, 0xfa, + 0x2e, 0xea, 0xbb, 0x7f, 0x19, 0xdd, 0x8c, 0x48, + 0x40, 0x84, 0xd5, 0x11, 0x77, 0xb3, 0xe2, 0x26, + 0xae, 0x6a, 0x3b, 0xff, 0x99, 0x5d, 0x0c, 0xc8, + 0xc0, 0x04, 0x55, 0x91, 0xf7, 0x33, 0x62, 0xa6, + 0x72, 0xb6, 0xe7, 0x23, 0x45, 0x81, 0xd0, 0x14, + 0x1c, 0xd8, 0x89, 0x4d, 0x2b, 0xef, 0xbe, 0x7a, + 0x0b, 0xcf, 0x9e, 0x5a, 0x3c, 0xf8, 0xa9, 0x6d, + 0x65, 0xa1, 0xf0, 0x34, 0x52, 0x96, 0xc7, 0x03, + 0xd7, 0x13, 0x42, 0x86, 0xe0, 0x24, 0x75, 0xb1, + 0xb9, 0x7d, 0x2c, 0xe8, 0x8e, 0x4a, 0x1b, 0xdf, + 0xf9, 0x3d, 0x6c, 0xa8, 0xce, 0x0a, 0x5b, 0x9f, + 0x97, 0x53, 0x02, 0xc6, 0xa0, 0x64, 0x35, 0xf1, + 0x25, 0xe1, 0xb0, 0x74, 0x12, 0xd6, 0x87, 0x43, + 0x4b, 0x8f, 0xde, 0x1a, 0x7c, 0xb8, 0xe9, 0x2d, + 0x5c, 0x98, 0xc9, 0x0d, 0x6b, 0xaf, 0xfe, 0x3a, + 0x32, 0xf6, 0xa7, 0x63, 0x05, 0xc1, 0x90, 0x54, + 0x80, 0x44, 0x15, 0xd1, 0xb7, 0x73, 0x22, 0xe6, + 0xee, 0x2a, 0x7b, 0xbf, 0xd9, 0x1d, 0x4c, 0x88, + }, + { + 0x00, 0xc5, 0x97, 0x52, 0x33, 0xf6, 0xa4, 0x61, + 0x66, 0xa3, 0xf1, 0x34, 0x55, 0x90, 0xc2, 0x07, + 0xcc, 0x09, 0x5b, 0x9e, 0xff, 0x3a, 0x68, 0xad, + 0xaa, 0x6f, 0x3d, 0xf8, 0x99, 0x5c, 0x0e, 0xcb, + 0x85, 0x40, 0x12, 0xd7, 0xb6, 0x73, 0x21, 0xe4, + 0xe3, 0x26, 0x74, 0xb1, 0xd0, 0x15, 0x47, 0x82, + 0x49, 0x8c, 0xde, 0x1b, 0x7a, 0xbf, 0xed, 0x28, + 0x2f, 0xea, 0xb8, 0x7d, 0x1c, 0xd9, 0x8b, 0x4e, + 0x17, 0xd2, 0x80, 0x45, 0x24, 0xe1, 0xb3, 0x76, + 0x71, 0xb4, 0xe6, 0x23, 0x42, 0x87, 0xd5, 0x10, + 0xdb, 0x1e, 0x4c, 0x89, 0xe8, 0x2d, 0x7f, 0xba, + 0xbd, 0x78, 0x2a, 0xef, 0x8e, 0x4b, 0x19, 0xdc, + 0x92, 0x57, 0x05, 0xc0, 0xa1, 0x64, 0x36, 0xf3, + 0xf4, 0x31, 0x63, 0xa6, 0xc7, 0x02, 0x50, 0x95, + 0x5e, 0x9b, 0xc9, 0x0c, 0x6d, 0xa8, 0xfa, 0x3f, + 0x38, 0xfd, 0xaf, 0x6a, 0x0b, 0xce, 0x9c, 0x59, + 0x2e, 0xeb, 0xb9, 0x7c, 0x1d, 0xd8, 0x8a, 0x4f, + 0x48, 0x8d, 0xdf, 0x1a, 0x7b, 0xbe, 0xec, 0x29, + 0xe2, 0x27, 0x75, 0xb0, 0xd1, 0x14, 0x46, 0x83, + 0x84, 0x41, 0x13, 0xd6, 0xb7, 0x72, 0x20, 0xe5, + 0xab, 0x6e, 0x3c, 0xf9, 0x98, 0x5d, 0x0f, 0xca, + 0xcd, 0x08, 0x5a, 0x9f, 0xfe, 0x3b, 0x69, 0xac, + 0x67, 0xa2, 0xf0, 0x35, 0x54, 0x91, 0xc3, 0x06, + 0x01, 0xc4, 0x96, 0x53, 0x32, 0xf7, 0xa5, 0x60, + 0x39, 0xfc, 0xae, 0x6b, 0x0a, 0xcf, 0x9d, 0x58, + 0x5f, 0x9a, 0xc8, 0x0d, 0x6c, 0xa9, 0xfb, 0x3e, + 0xf5, 0x30, 0x62, 0xa7, 0xc6, 0x03, 0x51, 0x94, + 0x93, 0x56, 0x04, 0xc1, 0xa0, 0x65, 0x37, 0xf2, + 0xbc, 0x79, 0x2b, 0xee, 0x8f, 0x4a, 0x18, 0xdd, + 0xda, 0x1f, 0x4d, 0x88, 0xe9, 0x2c, 0x7e, 0xbb, + 0x70, 0xb5, 0xe7, 0x22, 0x43, 0x86, 0xd4, 0x11, + 0x16, 0xd3, 0x81, 0x44, 0x25, 0xe0, 0xb2, 0x77, + }, + { + 0x00, 0xc6, 0x91, 0x57, 0x3f, 0xf9, 0xae, 0x68, + 0x7e, 0xb8, 0xef, 0x29, 0x41, 0x87, 0xd0, 0x16, + 0xfc, 0x3a, 0x6d, 0xab, 0xc3, 0x05, 0x52, 0x94, + 0x82, 0x44, 0x13, 0xd5, 0xbd, 0x7b, 0x2c, 0xea, + 0xe5, 0x23, 0x74, 0xb2, 0xda, 0x1c, 0x4b, 0x8d, + 0x9b, 0x5d, 0x0a, 0xcc, 0xa4, 0x62, 0x35, 0xf3, + 0x19, 0xdf, 0x88, 0x4e, 0x26, 0xe0, 0xb7, 0x71, + 0x67, 0xa1, 0xf6, 0x30, 0x58, 0x9e, 0xc9, 0x0f, + 0xd7, 0x11, 0x46, 0x80, 0xe8, 0x2e, 0x79, 0xbf, + 0xa9, 0x6f, 0x38, 0xfe, 0x96, 0x50, 0x07, 0xc1, + 0x2b, 0xed, 0xba, 0x7c, 0x14, 0xd2, 0x85, 0x43, + 0x55, 0x93, 0xc4, 0x02, 0x6a, 0xac, 0xfb, 0x3d, + 0x32, 0xf4, 0xa3, 0x65, 0x0d, 0xcb, 0x9c, 0x5a, + 0x4c, 0x8a, 0xdd, 0x1b, 0x73, 0xb5, 0xe2, 0x24, + 0xce, 0x08, 0x5f, 0x99, 0xf1, 0x37, 0x60, 0xa6, + 0xb0, 0x76, 0x21, 0xe7, 0x8f, 0x49, 0x1e, 0xd8, + 0xb3, 0x75, 0x22, 0xe4, 0x8c, 0x4a, 0x1d, 0xdb, + 0xcd, 0x0b, 0x5c, 0x9a, 0xf2, 0x34, 0x63, 0xa5, + 0x4f, 0x89, 0xde, 0x18, 0x70, 0xb6, 0xe1, 0x27, + 0x31, 0xf7, 0xa0, 0x66, 0x0e, 0xc8, 0x9f, 0x59, + 0x56, 0x90, 0xc7, 0x01, 0x69, 0xaf, 0xf8, 0x3e, + 0x28, 0xee, 0xb9, 0x7f, 0x17, 0xd1, 0x86, 0x40, + 0xaa, 0x6c, 0x3b, 0xfd, 0x95, 0x53, 0x04, 0xc2, + 0xd4, 0x12, 0x45, 0x83, 0xeb, 0x2d, 0x7a, 0xbc, + 0x64, 0xa2, 0xf5, 0x33, 0x5b, 0x9d, 0xca, 0x0c, + 0x1a, 0xdc, 0x8b, 0x4d, 0x25, 0xe3, 0xb4, 0x72, + 0x98, 0x5e, 0x09, 0xcf, 0xa7, 0x61, 0x36, 0xf0, + 0xe6, 0x20, 0x77, 0xb1, 0xd9, 0x1f, 0x48, 0x8e, + 0x81, 0x47, 0x10, 0xd6, 0xbe, 0x78, 0x2f, 0xe9, + 0xff, 0x39, 0x6e, 0xa8, 0xc0, 0x06, 0x51, 0x97, + 0x7d, 0xbb, 0xec, 0x2a, 0x42, 0x84, 0xd3, 0x15, + 0x03, 0xc5, 0x92, 0x54, 0x3c, 0xfa, 0xad, 0x6b, + }, + { + 0x00, 0xc7, 0x93, 0x54, 0x3b, 0xfc, 0xa8, 0x6f, + 0x76, 0xb1, 0xe5, 0x22, 0x4d, 0x8a, 0xde, 0x19, + 0xec, 0x2b, 0x7f, 0xb8, 0xd7, 0x10, 0x44, 0x83, + 0x9a, 0x5d, 0x09, 0xce, 0xa1, 0x66, 0x32, 0xf5, + 0xc5, 0x02, 0x56, 0x91, 0xfe, 0x39, 0x6d, 0xaa, + 0xb3, 0x74, 0x20, 0xe7, 0x88, 0x4f, 0x1b, 0xdc, + 0x29, 0xee, 0xba, 0x7d, 0x12, 0xd5, 0x81, 0x46, + 0x5f, 0x98, 0xcc, 0x0b, 0x64, 0xa3, 0xf7, 0x30, + 0x97, 0x50, 0x04, 0xc3, 0xac, 0x6b, 0x3f, 0xf8, + 0xe1, 0x26, 0x72, 0xb5, 0xda, 0x1d, 0x49, 0x8e, + 0x7b, 0xbc, 0xe8, 0x2f, 0x40, 0x87, 0xd3, 0x14, + 0x0d, 0xca, 0x9e, 0x59, 0x36, 0xf1, 0xa5, 0x62, + 0x52, 0x95, 0xc1, 0x06, 0x69, 0xae, 0xfa, 0x3d, + 0x24, 0xe3, 0xb7, 0x70, 0x1f, 0xd8, 0x8c, 0x4b, + 0xbe, 0x79, 0x2d, 0xea, 0x85, 0x42, 0x16, 0xd1, + 0xc8, 0x0f, 0x5b, 0x9c, 0xf3, 0x34, 0x60, 0xa7, + 0x33, 0xf4, 0xa0, 0x67, 0x08, 0xcf, 0x9b, 0x5c, + 0x45, 0x82, 0xd6, 0x11, 0x7e, 0xb9, 0xed, 0x2a, + 0xdf, 0x18, 0x4c, 0x8b, 0xe4, 0x23, 0x77, 0xb0, + 0xa9, 0x6e, 0x3a, 0xfd, 0x92, 0x55, 0x01, 0xc6, + 0xf6, 0x31, 0x65, 0xa2, 0xcd, 0x0a, 0x5e, 0x99, + 0x80, 0x47, 0x13, 0xd4, 0xbb, 0x7c, 0x28, 0xef, + 0x1a, 0xdd, 0x89, 0x4e, 0x21, 0xe6, 0xb2, 0x75, + 0x6c, 0xab, 0xff, 0x38, 0x57, 0x90, 0xc4, 0x03, + 0xa4, 0x63, 0x37, 0xf0, 0x9f, 0x58, 0x0c, 0xcb, + 0xd2, 0x15, 0x41, 0x86, 0xe9, 0x2e, 0x7a, 0xbd, + 0x48, 0x8f, 0xdb, 0x1c, 0x73, 0xb4, 0xe0, 0x27, + 0x3e, 0xf9, 0xad, 0x6a, 0x05, 0xc2, 0x96, 0x51, + 0x61, 0xa6, 0xf2, 0x35, 0x5a, 0x9d, 0xc9, 0x0e, + 0x17, 0xd0, 0x84, 0x43, 0x2c, 0xeb, 0xbf, 0x78, + 0x8d, 0x4a, 0x1e, 0xd9, 0xb6, 0x71, 0x25, 0xe2, + 0xfb, 0x3c, 0x68, 0xaf, 0xc0, 0x07, 0x53, 0x94, + }, + { + 0x00, 0xc8, 0x8d, 0x45, 0x07, 0xcf, 0x8a, 0x42, + 0x0e, 0xc6, 0x83, 0x4b, 0x09, 0xc1, 0x84, 0x4c, + 0x1c, 0xd4, 0x91, 0x59, 0x1b, 0xd3, 0x96, 0x5e, + 0x12, 0xda, 0x9f, 0x57, 0x15, 0xdd, 0x98, 0x50, + 0x38, 0xf0, 0xb5, 0x7d, 0x3f, 0xf7, 0xb2, 0x7a, + 0x36, 0xfe, 0xbb, 0x73, 0x31, 0xf9, 0xbc, 0x74, + 0x24, 0xec, 0xa9, 0x61, 0x23, 0xeb, 0xae, 0x66, + 0x2a, 0xe2, 0xa7, 0x6f, 0x2d, 0xe5, 0xa0, 0x68, + 0x70, 0xb8, 0xfd, 0x35, 0x77, 0xbf, 0xfa, 0x32, + 0x7e, 0xb6, 0xf3, 0x3b, 0x79, 0xb1, 0xf4, 0x3c, + 0x6c, 0xa4, 0xe1, 0x29, 0x6b, 0xa3, 0xe6, 0x2e, + 0x62, 0xaa, 0xef, 0x27, 0x65, 0xad, 0xe8, 0x20, + 0x48, 0x80, 0xc5, 0x0d, 0x4f, 0x87, 0xc2, 0x0a, + 0x46, 0x8e, 0xcb, 0x03, 0x41, 0x89, 0xcc, 0x04, + 0x54, 0x9c, 0xd9, 0x11, 0x53, 0x9b, 0xde, 0x16, + 0x5a, 0x92, 0xd7, 0x1f, 0x5d, 0x95, 0xd0, 0x18, + 0xe0, 0x28, 0x6d, 0xa5, 0xe7, 0x2f, 0x6a, 0xa2, + 0xee, 0x26, 0x63, 0xab, 0xe9, 0x21, 0x64, 0xac, + 0xfc, 0x34, 0x71, 0xb9, 0xfb, 0x33, 0x76, 0xbe, + 0xf2, 0x3a, 0x7f, 0xb7, 0xf5, 0x3d, 0x78, 0xb0, + 0xd8, 0x10, 0x55, 0x9d, 0xdf, 0x17, 0x52, 0x9a, + 0xd6, 0x1e, 0x5b, 0x93, 0xd1, 0x19, 0x5c, 0x94, + 0xc4, 0x0c, 0x49, 0x81, 0xc3, 0x0b, 0x4e, 0x86, + 0xca, 0x02, 0x47, 0x8f, 0xcd, 0x05, 0x40, 0x88, + 0x90, 0x58, 0x1d, 0xd5, 0x97, 0x5f, 0x1a, 0xd2, + 0x9e, 0x56, 0x13, 0xdb, 0x99, 0x51, 0x14, 0xdc, + 0x8c, 0x44, 0x01, 0xc9, 0x8b, 0x43, 0x06, 0xce, + 0x82, 0x4a, 0x0f, 0xc7, 0x85, 0x4d, 0x08, 0xc0, + 0xa8, 0x60, 0x25, 0xed, 0xaf, 0x67, 0x22, 0xea, + 0xa6, 0x6e, 0x2b, 0xe3, 0xa1, 0x69, 0x2c, 0xe4, + 0xb4, 0x7c, 0x39, 0xf1, 0xb3, 0x7b, 0x3e, 0xf6, + 0xba, 0x72, 0x37, 0xff, 0xbd, 0x75, 0x30, 0xf8, + }, + { + 0x00, 0xc9, 0x8f, 0x46, 0x03, 0xca, 0x8c, 0x45, + 0x06, 0xcf, 0x89, 0x40, 0x05, 0xcc, 0x8a, 0x43, + 0x0c, 0xc5, 0x83, 0x4a, 0x0f, 0xc6, 0x80, 0x49, + 0x0a, 0xc3, 0x85, 0x4c, 0x09, 0xc0, 0x86, 0x4f, + 0x18, 0xd1, 0x97, 0x5e, 0x1b, 0xd2, 0x94, 0x5d, + 0x1e, 0xd7, 0x91, 0x58, 0x1d, 0xd4, 0x92, 0x5b, + 0x14, 0xdd, 0x9b, 0x52, 0x17, 0xde, 0x98, 0x51, + 0x12, 0xdb, 0x9d, 0x54, 0x11, 0xd8, 0x9e, 0x57, + 0x30, 0xf9, 0xbf, 0x76, 0x33, 0xfa, 0xbc, 0x75, + 0x36, 0xff, 0xb9, 0x70, 0x35, 0xfc, 0xba, 0x73, + 0x3c, 0xf5, 0xb3, 0x7a, 0x3f, 0xf6, 0xb0, 0x79, + 0x3a, 0xf3, 0xb5, 0x7c, 0x39, 0xf0, 0xb6, 0x7f, + 0x28, 0xe1, 0xa7, 0x6e, 0x2b, 0xe2, 0xa4, 0x6d, + 0x2e, 0xe7, 0xa1, 0x68, 0x2d, 0xe4, 0xa2, 0x6b, + 0x24, 0xed, 0xab, 0x62, 0x27, 0xee, 0xa8, 0x61, + 0x22, 0xeb, 0xad, 0x64, 0x21, 0xe8, 0xae, 0x67, + 0x60, 0xa9, 0xef, 0x26, 0x63, 0xaa, 0xec, 0x25, + 0x66, 0xaf, 0xe9, 0x20, 0x65, 0xac, 0xea, 0x23, + 0x6c, 0xa5, 0xe3, 0x2a, 0x6f, 0xa6, 0xe0, 0x29, + 0x6a, 0xa3, 0xe5, 0x2c, 0x69, 0xa0, 0xe6, 0x2f, + 0x78, 0xb1, 0xf7, 0x3e, 0x7b, 0xb2, 0xf4, 0x3d, + 0x7e, 0xb7, 0xf1, 0x38, 0x7d, 0xb4, 0xf2, 0x3b, + 0x74, 0xbd, 0xfb, 0x32, 0x77, 0xbe, 0xf8, 0x31, + 0x72, 0xbb, 0xfd, 0x34, 0x71, 0xb8, 0xfe, 0x37, + 0x50, 0x99, 0xdf, 0x16, 0x53, 0x9a, 0xdc, 0x15, + 0x56, 0x9f, 0xd9, 0x10, 0x55, 0x9c, 0xda, 0x13, + 0x5c, 0x95, 0xd3, 0x1a, 0x5f, 0x96, 0xd0, 0x19, + 0x5a, 0x93, 0xd5, 0x1c, 0x59, 0x90, 0xd6, 0x1f, + 0x48, 0x81, 0xc7, 0x0e, 0x4b, 0x82, 0xc4, 0x0d, + 0x4e, 0x87, 0xc1, 0x08, 0x4d, 0x84, 0xc2, 0x0b, + 0x44, 0x8d, 0xcb, 0x02, 0x47, 0x8e, 0xc8, 0x01, + 0x42, 0x8b, 0xcd, 0x04, 0x41, 0x88, 0xce, 0x07, + }, + { + 0x00, 0xca, 0x89, 0x43, 0x0f, 0xc5, 0x86, 0x4c, + 0x1e, 0xd4, 0x97, 0x5d, 0x11, 0xdb, 0x98, 0x52, + 0x3c, 0xf6, 0xb5, 0x7f, 0x33, 0xf9, 0xba, 0x70, + 0x22, 0xe8, 0xab, 0x61, 0x2d, 0xe7, 0xa4, 0x6e, + 0x78, 0xb2, 0xf1, 0x3b, 0x77, 0xbd, 0xfe, 0x34, + 0x66, 0xac, 0xef, 0x25, 0x69, 0xa3, 0xe0, 0x2a, + 0x44, 0x8e, 0xcd, 0x07, 0x4b, 0x81, 0xc2, 0x08, + 0x5a, 0x90, 0xd3, 0x19, 0x55, 0x9f, 0xdc, 0x16, + 0xf0, 0x3a, 0x79, 0xb3, 0xff, 0x35, 0x76, 0xbc, + 0xee, 0x24, 0x67, 0xad, 0xe1, 0x2b, 0x68, 0xa2, + 0xcc, 0x06, 0x45, 0x8f, 0xc3, 0x09, 0x4a, 0x80, + 0xd2, 0x18, 0x5b, 0x91, 0xdd, 0x17, 0x54, 0x9e, + 0x88, 0x42, 0x01, 0xcb, 0x87, 0x4d, 0x0e, 0xc4, + 0x96, 0x5c, 0x1f, 0xd5, 0x99, 0x53, 0x10, 0xda, + 0xb4, 0x7e, 0x3d, 0xf7, 0xbb, 0x71, 0x32, 0xf8, + 0xaa, 0x60, 0x23, 0xe9, 0xa5, 0x6f, 0x2c, 0xe6, + 0xfd, 0x37, 0x74, 0xbe, 0xf2, 0x38, 0x7b, 0xb1, + 0xe3, 0x29, 0x6a, 0xa0, 0xec, 0x26, 0x65, 0xaf, + 0xc1, 0x0b, 0x48, 0x82, 0xce, 0x04, 0x47, 0x8d, + 0xdf, 0x15, 0x56, 0x9c, 0xd0, 0x1a, 0x59, 0x93, + 0x85, 0x4f, 0x0c, 0xc6, 0x8a, 0x40, 0x03, 0xc9, + 0x9b, 0x51, 0x12, 0xd8, 0x94, 0x5e, 0x1d, 0xd7, + 0xb9, 0x73, 0x30, 0xfa, 0xb6, 0x7c, 0x3f, 0xf5, + 0xa7, 0x6d, 0x2e, 0xe4, 0xa8, 0x62, 0x21, 0xeb, + 0x0d, 0xc7, 0x84, 0x4e, 0x02, 0xc8, 0x8b, 0x41, + 0x13, 0xd9, 0x9a, 0x50, 0x1c, 0xd6, 0x95, 0x5f, + 0x31, 0xfb, 0xb8, 0x72, 0x3e, 0xf4, 0xb7, 0x7d, + 0x2f, 0xe5, 0xa6, 0x6c, 0x20, 0xea, 0xa9, 0x63, + 0x75, 0xbf, 0xfc, 0x36, 0x7a, 0xb0, 0xf3, 0x39, + 0x6b, 0xa1, 0xe2, 0x28, 0x64, 0xae, 0xed, 0x27, + 0x49, 0x83, 0xc0, 0x0a, 0x46, 0x8c, 0xcf, 0x05, + 0x57, 0x9d, 0xde, 0x14, 0x58, 0x92, 0xd1, 0x1b, + }, + { + 0x00, 0xcb, 0x8b, 0x40, 0x0b, 0xc0, 0x80, 0x4b, + 0x16, 0xdd, 0x9d, 0x56, 0x1d, 0xd6, 0x96, 0x5d, + 0x2c, 0xe7, 0xa7, 0x6c, 0x27, 0xec, 0xac, 0x67, + 0x3a, 0xf1, 0xb1, 0x7a, 0x31, 0xfa, 0xba, 0x71, + 0x58, 0x93, 0xd3, 0x18, 0x53, 0x98, 0xd8, 0x13, + 0x4e, 0x85, 0xc5, 0x0e, 0x45, 0x8e, 0xce, 0x05, + 0x74, 0xbf, 0xff, 0x34, 0x7f, 0xb4, 0xf4, 0x3f, + 0x62, 0xa9, 0xe9, 0x22, 0x69, 0xa2, 0xe2, 0x29, + 0xb0, 0x7b, 0x3b, 0xf0, 0xbb, 0x70, 0x30, 0xfb, + 0xa6, 0x6d, 0x2d, 0xe6, 0xad, 0x66, 0x26, 0xed, + 0x9c, 0x57, 0x17, 0xdc, 0x97, 0x5c, 0x1c, 0xd7, + 0x8a, 0x41, 0x01, 0xca, 0x81, 0x4a, 0x0a, 0xc1, + 0xe8, 0x23, 0x63, 0xa8, 0xe3, 0x28, 0x68, 0xa3, + 0xfe, 0x35, 0x75, 0xbe, 0xf5, 0x3e, 0x7e, 0xb5, + 0xc4, 0x0f, 0x4f, 0x84, 0xcf, 0x04, 0x44, 0x8f, + 0xd2, 0x19, 0x59, 0x92, 0xd9, 0x12, 0x52, 0x99, + 0x7d, 0xb6, 0xf6, 0x3d, 0x76, 0xbd, 0xfd, 0x36, + 0x6b, 0xa0, 0xe0, 0x2b, 0x60, 0xab, 0xeb, 0x20, + 0x51, 0x9a, 0xda, 0x11, 0x5a, 0x91, 0xd1, 0x1a, + 0x47, 0x8c, 0xcc, 0x07, 0x4c, 0x87, 0xc7, 0x0c, + 0x25, 0xee, 0xae, 0x65, 0x2e, 0xe5, 0xa5, 0x6e, + 0x33, 0xf8, 0xb8, 0x73, 0x38, 0xf3, 0xb3, 0x78, + 0x09, 0xc2, 0x82, 0x49, 0x02, 0xc9, 0x89, 0x42, + 0x1f, 0xd4, 0x94, 0x5f, 0x14, 0xdf, 0x9f, 0x54, + 0xcd, 0x06, 0x46, 0x8d, 0xc6, 0x0d, 0x4d, 0x86, + 0xdb, 0x10, 0x50, 0x9b, 0xd0, 0x1b, 0x5b, 0x90, + 0xe1, 0x2a, 0x6a, 0xa1, 0xea, 0x21, 0x61, 0xaa, + 0xf7, 0x3c, 0x7c, 0xb7, 0xfc, 0x37, 0x77, 0xbc, + 0x95, 0x5e, 0x1e, 0xd5, 0x9e, 0x55, 0x15, 0xde, + 0x83, 0x48, 0x08, 0xc3, 0x88, 0x43, 0x03, 0xc8, + 0xb9, 0x72, 0x32, 0xf9, 0xb2, 0x79, 0x39, 0xf2, + 0xaf, 0x64, 0x24, 0xef, 0xa4, 0x6f, 0x2f, 0xe4, + }, + { + 0x00, 0xcc, 0x85, 0x49, 0x17, 0xdb, 0x92, 0x5e, + 0x2e, 0xe2, 0xab, 0x67, 0x39, 0xf5, 0xbc, 0x70, + 0x5c, 0x90, 0xd9, 0x15, 0x4b, 0x87, 0xce, 0x02, + 0x72, 0xbe, 0xf7, 0x3b, 0x65, 0xa9, 0xe0, 0x2c, + 0xb8, 0x74, 0x3d, 0xf1, 0xaf, 0x63, 0x2a, 0xe6, + 0x96, 0x5a, 0x13, 0xdf, 0x81, 0x4d, 0x04, 0xc8, + 0xe4, 0x28, 0x61, 0xad, 0xf3, 0x3f, 0x76, 0xba, + 0xca, 0x06, 0x4f, 0x83, 0xdd, 0x11, 0x58, 0x94, + 0x6d, 0xa1, 0xe8, 0x24, 0x7a, 0xb6, 0xff, 0x33, + 0x43, 0x8f, 0xc6, 0x0a, 0x54, 0x98, 0xd1, 0x1d, + 0x31, 0xfd, 0xb4, 0x78, 0x26, 0xea, 0xa3, 0x6f, + 0x1f, 0xd3, 0x9a, 0x56, 0x08, 0xc4, 0x8d, 0x41, + 0xd5, 0x19, 0x50, 0x9c, 0xc2, 0x0e, 0x47, 0x8b, + 0xfb, 0x37, 0x7e, 0xb2, 0xec, 0x20, 0x69, 0xa5, + 0x89, 0x45, 0x0c, 0xc0, 0x9e, 0x52, 0x1b, 0xd7, + 0xa7, 0x6b, 0x22, 0xee, 0xb0, 0x7c, 0x35, 0xf9, + 0xda, 0x16, 0x5f, 0x93, 0xcd, 0x01, 0x48, 0x84, + 0xf4, 0x38, 0x71, 0xbd, 0xe3, 0x2f, 0x66, 0xaa, + 0x86, 0x4a, 0x03, 0xcf, 0x91, 0x5d, 0x14, 0xd8, + 0xa8, 0x64, 0x2d, 0xe1, 0xbf, 0x73, 0x3a, 0xf6, + 0x62, 0xae, 0xe7, 0x2b, 0x75, 0xb9, 0xf0, 0x3c, + 0x4c, 0x80, 0xc9, 0x05, 0x5b, 0x97, 0xde, 0x12, + 0x3e, 0xf2, 0xbb, 0x77, 0x29, 0xe5, 0xac, 0x60, + 0x10, 0xdc, 0x95, 0x59, 0x07, 0xcb, 0x82, 0x4e, + 0xb7, 0x7b, 0x32, 0xfe, 0xa0, 0x6c, 0x25, 0xe9, + 0x99, 0x55, 0x1c, 0xd0, 0x8e, 0x42, 0x0b, 0xc7, + 0xeb, 0x27, 0x6e, 0xa2, 0xfc, 0x30, 0x79, 0xb5, + 0xc5, 0x09, 0x40, 0x8c, 0xd2, 0x1e, 0x57, 0x9b, + 0x0f, 0xc3, 0x8a, 0x46, 0x18, 0xd4, 0x9d, 0x51, + 0x21, 0xed, 0xa4, 0x68, 0x36, 0xfa, 0xb3, 0x7f, + 0x53, 0x9f, 0xd6, 0x1a, 0x44, 0x88, 0xc1, 0x0d, + 0x7d, 0xb1, 0xf8, 0x34, 0x6a, 0xa6, 0xef, 0x23, + }, + { + 0x00, 0xcd, 0x87, 0x4a, 0x13, 0xde, 0x94, 0x59, + 0x26, 0xeb, 0xa1, 0x6c, 0x35, 0xf8, 0xb2, 0x7f, + 0x4c, 0x81, 0xcb, 0x06, 0x5f, 0x92, 0xd8, 0x15, + 0x6a, 0xa7, 0xed, 0x20, 0x79, 0xb4, 0xfe, 0x33, + 0x98, 0x55, 0x1f, 0xd2, 0x8b, 0x46, 0x0c, 0xc1, + 0xbe, 0x73, 0x39, 0xf4, 0xad, 0x60, 0x2a, 0xe7, + 0xd4, 0x19, 0x53, 0x9e, 0xc7, 0x0a, 0x40, 0x8d, + 0xf2, 0x3f, 0x75, 0xb8, 0xe1, 0x2c, 0x66, 0xab, + 0x2d, 0xe0, 0xaa, 0x67, 0x3e, 0xf3, 0xb9, 0x74, + 0x0b, 0xc6, 0x8c, 0x41, 0x18, 0xd5, 0x9f, 0x52, + 0x61, 0xac, 0xe6, 0x2b, 0x72, 0xbf, 0xf5, 0x38, + 0x47, 0x8a, 0xc0, 0x0d, 0x54, 0x99, 0xd3, 0x1e, + 0xb5, 0x78, 0x32, 0xff, 0xa6, 0x6b, 0x21, 0xec, + 0x93, 0x5e, 0x14, 0xd9, 0x80, 0x4d, 0x07, 0xca, + 0xf9, 0x34, 0x7e, 0xb3, 0xea, 0x27, 0x6d, 0xa0, + 0xdf, 0x12, 0x58, 0x95, 0xcc, 0x01, 0x4b, 0x86, + 0x5a, 0x97, 0xdd, 0x10, 0x49, 0x84, 0xce, 0x03, + 0x7c, 0xb1, 0xfb, 0x36, 0x6f, 0xa2, 0xe8, 0x25, + 0x16, 0xdb, 0x91, 0x5c, 0x05, 0xc8, 0x82, 0x4f, + 0x30, 0xfd, 0xb7, 0x7a, 0x23, 0xee, 0xa4, 0x69, + 0xc2, 0x0f, 0x45, 0x88, 0xd1, 0x1c, 0x56, 0x9b, + 0xe4, 0x29, 0x63, 0xae, 0xf7, 0x3a, 0x70, 0xbd, + 0x8e, 0x43, 0x09, 0xc4, 0x9d, 0x50, 0x1a, 0xd7, + 0xa8, 0x65, 0x2f, 0xe2, 0xbb, 0x76, 0x3c, 0xf1, + 0x77, 0xba, 0xf0, 0x3d, 0x64, 0xa9, 0xe3, 0x2e, + 0x51, 0x9c, 0xd6, 0x1b, 0x42, 0x8f, 0xc5, 0x08, + 0x3b, 0xf6, 0xbc, 0x71, 0x28, 0xe5, 0xaf, 0x62, + 0x1d, 0xd0, 0x9a, 0x57, 0x0e, 0xc3, 0x89, 0x44, + 0xef, 0x22, 0x68, 0xa5, 0xfc, 0x31, 0x7b, 0xb6, + 0xc9, 0x04, 0x4e, 0x83, 0xda, 0x17, 0x5d, 0x90, + 0xa3, 0x6e, 0x24, 0xe9, 0xb0, 0x7d, 0x37, 0xfa, + 0x85, 0x48, 0x02, 0xcf, 0x96, 0x5b, 0x11, 0xdc, + }, + { + 0x00, 0xce, 0x81, 0x4f, 0x1f, 0xd1, 0x9e, 0x50, + 0x3e, 0xf0, 0xbf, 0x71, 0x21, 0xef, 0xa0, 0x6e, + 0x7c, 0xb2, 0xfd, 0x33, 0x63, 0xad, 0xe2, 0x2c, + 0x42, 0x8c, 0xc3, 0x0d, 0x5d, 0x93, 0xdc, 0x12, + 0xf8, 0x36, 0x79, 0xb7, 0xe7, 0x29, 0x66, 0xa8, + 0xc6, 0x08, 0x47, 0x89, 0xd9, 0x17, 0x58, 0x96, + 0x84, 0x4a, 0x05, 0xcb, 0x9b, 0x55, 0x1a, 0xd4, + 0xba, 0x74, 0x3b, 0xf5, 0xa5, 0x6b, 0x24, 0xea, + 0xed, 0x23, 0x6c, 0xa2, 0xf2, 0x3c, 0x73, 0xbd, + 0xd3, 0x1d, 0x52, 0x9c, 0xcc, 0x02, 0x4d, 0x83, + 0x91, 0x5f, 0x10, 0xde, 0x8e, 0x40, 0x0f, 0xc1, + 0xaf, 0x61, 0x2e, 0xe0, 0xb0, 0x7e, 0x31, 0xff, + 0x15, 0xdb, 0x94, 0x5a, 0x0a, 0xc4, 0x8b, 0x45, + 0x2b, 0xe5, 0xaa, 0x64, 0x34, 0xfa, 0xb5, 0x7b, + 0x69, 0xa7, 0xe8, 0x26, 0x76, 0xb8, 0xf7, 0x39, + 0x57, 0x99, 0xd6, 0x18, 0x48, 0x86, 0xc9, 0x07, + 0xc7, 0x09, 0x46, 0x88, 0xd8, 0x16, 0x59, 0x97, + 0xf9, 0x37, 0x78, 0xb6, 0xe6, 0x28, 0x67, 0xa9, + 0xbb, 0x75, 0x3a, 0xf4, 0xa4, 0x6a, 0x25, 0xeb, + 0x85, 0x4b, 0x04, 0xca, 0x9a, 0x54, 0x1b, 0xd5, + 0x3f, 0xf1, 0xbe, 0x70, 0x20, 0xee, 0xa1, 0x6f, + 0x01, 0xcf, 0x80, 0x4e, 0x1e, 0xd0, 0x9f, 0x51, + 0x43, 0x8d, 0xc2, 0x0c, 0x5c, 0x92, 0xdd, 0x13, + 0x7d, 0xb3, 0xfc, 0x32, 0x62, 0xac, 0xe3, 0x2d, + 0x2a, 0xe4, 0xab, 0x65, 0x35, 0xfb, 0xb4, 0x7a, + 0x14, 0xda, 0x95, 0x5b, 0x0b, 0xc5, 0x8a, 0x44, + 0x56, 0x98, 0xd7, 0x19, 0x49, 0x87, 0xc8, 0x06, + 0x68, 0xa6, 0xe9, 0x27, 0x77, 0xb9, 0xf6, 0x38, + 0xd2, 0x1c, 0x53, 0x9d, 0xcd, 0x03, 0x4c, 0x82, + 0xec, 0x22, 0x6d, 0xa3, 0xf3, 0x3d, 0x72, 0xbc, + 0xae, 0x60, 0x2f, 0xe1, 0xb1, 0x7f, 0x30, 0xfe, + 0x90, 0x5e, 0x11, 0xdf, 0x8f, 0x41, 0x0e, 0xc0, + }, + { + 0x00, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, + 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61, + 0x6c, 0xa3, 0xef, 0x20, 0x77, 0xb8, 0xf4, 0x3b, + 0x5a, 0x95, 0xd9, 0x16, 0x41, 0x8e, 0xc2, 0x0d, + 0xd8, 0x17, 0x5b, 0x94, 0xc3, 0x0c, 0x40, 0x8f, + 0xee, 0x21, 0x6d, 0xa2, 0xf5, 0x3a, 0x76, 0xb9, + 0xb4, 0x7b, 0x37, 0xf8, 0xaf, 0x60, 0x2c, 0xe3, + 0x82, 0x4d, 0x01, 0xce, 0x99, 0x56, 0x1a, 0xd5, + 0xad, 0x62, 0x2e, 0xe1, 0xb6, 0x79, 0x35, 0xfa, + 0x9b, 0x54, 0x18, 0xd7, 0x80, 0x4f, 0x03, 0xcc, + 0xc1, 0x0e, 0x42, 0x8d, 0xda, 0x15, 0x59, 0x96, + 0xf7, 0x38, 0x74, 0xbb, 0xec, 0x23, 0x6f, 0xa0, + 0x75, 0xba, 0xf6, 0x39, 0x6e, 0xa1, 0xed, 0x22, + 0x43, 0x8c, 0xc0, 0x0f, 0x58, 0x97, 0xdb, 0x14, + 0x19, 0xd6, 0x9a, 0x55, 0x02, 0xcd, 0x81, 0x4e, + 0x2f, 0xe0, 0xac, 0x63, 0x34, 0xfb, 0xb7, 0x78, + 0x47, 0x88, 0xc4, 0x0b, 0x5c, 0x93, 0xdf, 0x10, + 0x71, 0xbe, 0xf2, 0x3d, 0x6a, 0xa5, 0xe9, 0x26, + 0x2b, 0xe4, 0xa8, 0x67, 0x30, 0xff, 0xb3, 0x7c, + 0x1d, 0xd2, 0x9e, 0x51, 0x06, 0xc9, 0x85, 0x4a, + 0x9f, 0x50, 0x1c, 0xd3, 0x84, 0x4b, 0x07, 0xc8, + 0xa9, 0x66, 0x2a, 0xe5, 0xb2, 0x7d, 0x31, 0xfe, + 0xf3, 0x3c, 0x70, 0xbf, 0xe8, 0x27, 0x6b, 0xa4, + 0xc5, 0x0a, 0x46, 0x89, 0xde, 0x11, 0x5d, 0x92, + 0xea, 0x25, 0x69, 0xa6, 0xf1, 0x3e, 0x72, 0xbd, + 0xdc, 0x13, 0x5f, 0x90, 0xc7, 0x08, 0x44, 0x8b, + 0x86, 0x49, 0x05, 0xca, 0x9d, 0x52, 0x1e, 0xd1, + 0xb0, 0x7f, 0x33, 0xfc, 0xab, 0x64, 0x28, 0xe7, + 0x32, 0xfd, 0xb1, 0x7e, 0x29, 0xe6, 0xaa, 0x65, + 0x04, 0xcb, 0x87, 0x48, 0x1f, 0xd0, 0x9c, 0x53, + 0x5e, 0x91, 0xdd, 0x12, 0x45, 0x8a, 0xc6, 0x09, + 0x68, 0xa7, 0xeb, 0x24, 0x73, 0xbc, 0xf0, 0x3f, + }, + { + 0x00, 0xd0, 0xbd, 0x6d, 0x67, 0xb7, 0xda, 0x0a, + 0xce, 0x1e, 0x73, 0xa3, 0xa9, 0x79, 0x14, 0xc4, + 0x81, 0x51, 0x3c, 0xec, 0xe6, 0x36, 0x5b, 0x8b, + 0x4f, 0x9f, 0xf2, 0x22, 0x28, 0xf8, 0x95, 0x45, + 0x1f, 0xcf, 0xa2, 0x72, 0x78, 0xa8, 0xc5, 0x15, + 0xd1, 0x01, 0x6c, 0xbc, 0xb6, 0x66, 0x0b, 0xdb, + 0x9e, 0x4e, 0x23, 0xf3, 0xf9, 0x29, 0x44, 0x94, + 0x50, 0x80, 0xed, 0x3d, 0x37, 0xe7, 0x8a, 0x5a, + 0x3e, 0xee, 0x83, 0x53, 0x59, 0x89, 0xe4, 0x34, + 0xf0, 0x20, 0x4d, 0x9d, 0x97, 0x47, 0x2a, 0xfa, + 0xbf, 0x6f, 0x02, 0xd2, 0xd8, 0x08, 0x65, 0xb5, + 0x71, 0xa1, 0xcc, 0x1c, 0x16, 0xc6, 0xab, 0x7b, + 0x21, 0xf1, 0x9c, 0x4c, 0x46, 0x96, 0xfb, 0x2b, + 0xef, 0x3f, 0x52, 0x82, 0x88, 0x58, 0x35, 0xe5, + 0xa0, 0x70, 0x1d, 0xcd, 0xc7, 0x17, 0x7a, 0xaa, + 0x6e, 0xbe, 0xd3, 0x03, 0x09, 0xd9, 0xb4, 0x64, + 0x7c, 0xac, 0xc1, 0x11, 0x1b, 0xcb, 0xa6, 0x76, + 0xb2, 0x62, 0x0f, 0xdf, 0xd5, 0x05, 0x68, 0xb8, + 0xfd, 0x2d, 0x40, 0x90, 0x9a, 0x4a, 0x27, 0xf7, + 0x33, 0xe3, 0x8e, 0x5e, 0x54, 0x84, 0xe9, 0x39, + 0x63, 0xb3, 0xde, 0x0e, 0x04, 0xd4, 0xb9, 0x69, + 0xad, 0x7d, 0x10, 0xc0, 0xca, 0x1a, 0x77, 0xa7, + 0xe2, 0x32, 0x5f, 0x8f, 0x85, 0x55, 0x38, 0xe8, + 0x2c, 0xfc, 0x91, 0x41, 0x4b, 0x9b, 0xf6, 0x26, + 0x42, 0x92, 0xff, 0x2f, 0x25, 0xf5, 0x98, 0x48, + 0x8c, 0x5c, 0x31, 0xe1, 0xeb, 0x3b, 0x56, 0x86, + 0xc3, 0x13, 0x7e, 0xae, 0xa4, 0x74, 0x19, 0xc9, + 0x0d, 0xdd, 0xb0, 0x60, 0x6a, 0xba, 0xd7, 0x07, + 0x5d, 0x8d, 0xe0, 0x30, 0x3a, 0xea, 0x87, 0x57, + 0x93, 0x43, 0x2e, 0xfe, 0xf4, 0x24, 0x49, 0x99, + 0xdc, 0x0c, 0x61, 0xb1, 0xbb, 0x6b, 0x06, 0xd6, + 0x12, 0xc2, 0xaf, 0x7f, 0x75, 0xa5, 0xc8, 0x18, + }, + { + 0x00, 0xd1, 0xbf, 0x6e, 0x63, 0xb2, 0xdc, 0x0d, + 0xc6, 0x17, 0x79, 0xa8, 0xa5, 0x74, 0x1a, 0xcb, + 0x91, 0x40, 0x2e, 0xff, 0xf2, 0x23, 0x4d, 0x9c, + 0x57, 0x86, 0xe8, 0x39, 0x34, 0xe5, 0x8b, 0x5a, + 0x3f, 0xee, 0x80, 0x51, 0x5c, 0x8d, 0xe3, 0x32, + 0xf9, 0x28, 0x46, 0x97, 0x9a, 0x4b, 0x25, 0xf4, + 0xae, 0x7f, 0x11, 0xc0, 0xcd, 0x1c, 0x72, 0xa3, + 0x68, 0xb9, 0xd7, 0x06, 0x0b, 0xda, 0xb4, 0x65, + 0x7e, 0xaf, 0xc1, 0x10, 0x1d, 0xcc, 0xa2, 0x73, + 0xb8, 0x69, 0x07, 0xd6, 0xdb, 0x0a, 0x64, 0xb5, + 0xef, 0x3e, 0x50, 0x81, 0x8c, 0x5d, 0x33, 0xe2, + 0x29, 0xf8, 0x96, 0x47, 0x4a, 0x9b, 0xf5, 0x24, + 0x41, 0x90, 0xfe, 0x2f, 0x22, 0xf3, 0x9d, 0x4c, + 0x87, 0x56, 0x38, 0xe9, 0xe4, 0x35, 0x5b, 0x8a, + 0xd0, 0x01, 0x6f, 0xbe, 0xb3, 0x62, 0x0c, 0xdd, + 0x16, 0xc7, 0xa9, 0x78, 0x75, 0xa4, 0xca, 0x1b, + 0xfc, 0x2d, 0x43, 0x92, 0x9f, 0x4e, 0x20, 0xf1, + 0x3a, 0xeb, 0x85, 0x54, 0x59, 0x88, 0xe6, 0x37, + 0x6d, 0xbc, 0xd2, 0x03, 0x0e, 0xdf, 0xb1, 0x60, + 0xab, 0x7a, 0x14, 0xc5, 0xc8, 0x19, 0x77, 0xa6, + 0xc3, 0x12, 0x7c, 0xad, 0xa0, 0x71, 0x1f, 0xce, + 0x05, 0xd4, 0xba, 0x6b, 0x66, 0xb7, 0xd9, 0x08, + 0x52, 0x83, 0xed, 0x3c, 0x31, 0xe0, 0x8e, 0x5f, + 0x94, 0x45, 0x2b, 0xfa, 0xf7, 0x26, 0x48, 0x99, + 0x82, 0x53, 0x3d, 0xec, 0xe1, 0x30, 0x5e, 0x8f, + 0x44, 0x95, 0xfb, 0x2a, 0x27, 0xf6, 0x98, 0x49, + 0x13, 0xc2, 0xac, 0x7d, 0x70, 0xa1, 0xcf, 0x1e, + 0xd5, 0x04, 0x6a, 0xbb, 0xb6, 0x67, 0x09, 0xd8, + 0xbd, 0x6c, 0x02, 0xd3, 0xde, 0x0f, 0x61, 0xb0, + 0x7b, 0xaa, 0xc4, 0x15, 0x18, 0xc9, 0xa7, 0x76, + 0x2c, 0xfd, 0x93, 0x42, 0x4f, 0x9e, 0xf0, 0x21, + 0xea, 0x3b, 0x55, 0x84, 0x89, 0x58, 0x36, 0xe7, + }, + { + 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, + 0xde, 0x0c, 0x67, 0xb5, 0xb1, 0x63, 0x08, 0xda, + 0xa1, 0x73, 0x18, 0xca, 0xce, 0x1c, 0x77, 0xa5, + 0x7f, 0xad, 0xc6, 0x14, 0x10, 0xc2, 0xa9, 0x7b, + 0x5f, 0x8d, 0xe6, 0x34, 0x30, 0xe2, 0x89, 0x5b, + 0x81, 0x53, 0x38, 0xea, 0xee, 0x3c, 0x57, 0x85, + 0xfe, 0x2c, 0x47, 0x95, 0x91, 0x43, 0x28, 0xfa, + 0x20, 0xf2, 0x99, 0x4b, 0x4f, 0x9d, 0xf6, 0x24, + 0xbe, 0x6c, 0x07, 0xd5, 0xd1, 0x03, 0x68, 0xba, + 0x60, 0xb2, 0xd9, 0x0b, 0x0f, 0xdd, 0xb6, 0x64, + 0x1f, 0xcd, 0xa6, 0x74, 0x70, 0xa2, 0xc9, 0x1b, + 0xc1, 0x13, 0x78, 0xaa, 0xae, 0x7c, 0x17, 0xc5, + 0xe1, 0x33, 0x58, 0x8a, 0x8e, 0x5c, 0x37, 0xe5, + 0x3f, 0xed, 0x86, 0x54, 0x50, 0x82, 0xe9, 0x3b, + 0x40, 0x92, 0xf9, 0x2b, 0x2f, 0xfd, 0x96, 0x44, + 0x9e, 0x4c, 0x27, 0xf5, 0xf1, 0x23, 0x48, 0x9a, + 0x61, 0xb3, 0xd8, 0x0a, 0x0e, 0xdc, 0xb7, 0x65, + 0xbf, 0x6d, 0x06, 0xd4, 0xd0, 0x02, 0x69, 0xbb, + 0xc0, 0x12, 0x79, 0xab, 0xaf, 0x7d, 0x16, 0xc4, + 0x1e, 0xcc, 0xa7, 0x75, 0x71, 0xa3, 0xc8, 0x1a, + 0x3e, 0xec, 0x87, 0x55, 0x51, 0x83, 0xe8, 0x3a, + 0xe0, 0x32, 0x59, 0x8b, 0x8f, 0x5d, 0x36, 0xe4, + 0x9f, 0x4d, 0x26, 0xf4, 0xf0, 0x22, 0x49, 0x9b, + 0x41, 0x93, 0xf8, 0x2a, 0x2e, 0xfc, 0x97, 0x45, + 0xdf, 0x0d, 0x66, 0xb4, 0xb0, 0x62, 0x09, 0xdb, + 0x01, 0xd3, 0xb8, 0x6a, 0x6e, 0xbc, 0xd7, 0x05, + 0x7e, 0xac, 0xc7, 0x15, 0x11, 0xc3, 0xa8, 0x7a, + 0xa0, 0x72, 0x19, 0xcb, 0xcf, 0x1d, 0x76, 0xa4, + 0x80, 0x52, 0x39, 0xeb, 0xef, 0x3d, 0x56, 0x84, + 0x5e, 0x8c, 0xe7, 0x35, 0x31, 0xe3, 0x88, 0x5a, + 0x21, 0xf3, 0x98, 0x4a, 0x4e, 0x9c, 0xf7, 0x25, + 0xff, 0x2d, 0x46, 0x94, 0x90, 0x42, 0x29, 0xfb, + }, + { + 0x00, 0xd3, 0xbb, 0x68, 0x6b, 0xb8, 0xd0, 0x03, + 0xd6, 0x05, 0x6d, 0xbe, 0xbd, 0x6e, 0x06, 0xd5, + 0xb1, 0x62, 0x0a, 0xd9, 0xda, 0x09, 0x61, 0xb2, + 0x67, 0xb4, 0xdc, 0x0f, 0x0c, 0xdf, 0xb7, 0x64, + 0x7f, 0xac, 0xc4, 0x17, 0x14, 0xc7, 0xaf, 0x7c, + 0xa9, 0x7a, 0x12, 0xc1, 0xc2, 0x11, 0x79, 0xaa, + 0xce, 0x1d, 0x75, 0xa6, 0xa5, 0x76, 0x1e, 0xcd, + 0x18, 0xcb, 0xa3, 0x70, 0x73, 0xa0, 0xc8, 0x1b, + 0xfe, 0x2d, 0x45, 0x96, 0x95, 0x46, 0x2e, 0xfd, + 0x28, 0xfb, 0x93, 0x40, 0x43, 0x90, 0xf8, 0x2b, + 0x4f, 0x9c, 0xf4, 0x27, 0x24, 0xf7, 0x9f, 0x4c, + 0x99, 0x4a, 0x22, 0xf1, 0xf2, 0x21, 0x49, 0x9a, + 0x81, 0x52, 0x3a, 0xe9, 0xea, 0x39, 0x51, 0x82, + 0x57, 0x84, 0xec, 0x3f, 0x3c, 0xef, 0x87, 0x54, + 0x30, 0xe3, 0x8b, 0x58, 0x5b, 0x88, 0xe0, 0x33, + 0xe6, 0x35, 0x5d, 0x8e, 0x8d, 0x5e, 0x36, 0xe5, + 0xe1, 0x32, 0x5a, 0x89, 0x8a, 0x59, 0x31, 0xe2, + 0x37, 0xe4, 0x8c, 0x5f, 0x5c, 0x8f, 0xe7, 0x34, + 0x50, 0x83, 0xeb, 0x38, 0x3b, 0xe8, 0x80, 0x53, + 0x86, 0x55, 0x3d, 0xee, 0xed, 0x3e, 0x56, 0x85, + 0x9e, 0x4d, 0x25, 0xf6, 0xf5, 0x26, 0x4e, 0x9d, + 0x48, 0x9b, 0xf3, 0x20, 0x23, 0xf0, 0x98, 0x4b, + 0x2f, 0xfc, 0x94, 0x47, 0x44, 0x97, 0xff, 0x2c, + 0xf9, 0x2a, 0x42, 0x91, 0x92, 0x41, 0x29, 0xfa, + 0x1f, 0xcc, 0xa4, 0x77, 0x74, 0xa7, 0xcf, 0x1c, + 0xc9, 0x1a, 0x72, 0xa1, 0xa2, 0x71, 0x19, 0xca, + 0xae, 0x7d, 0x15, 0xc6, 0xc5, 0x16, 0x7e, 0xad, + 0x78, 0xab, 0xc3, 0x10, 0x13, 0xc0, 0xa8, 0x7b, + 0x60, 0xb3, 0xdb, 0x08, 0x0b, 0xd8, 0xb0, 0x63, + 0xb6, 0x65, 0x0d, 0xde, 0xdd, 0x0e, 0x66, 0xb5, + 0xd1, 0x02, 0x6a, 0xb9, 0xba, 0x69, 0x01, 0xd2, + 0x07, 0xd4, 0xbc, 0x6f, 0x6c, 0xbf, 0xd7, 0x04, + }, + { + 0x00, 0xd4, 0xb5, 0x61, 0x77, 0xa3, 0xc2, 0x16, + 0xee, 0x3a, 0x5b, 0x8f, 0x99, 0x4d, 0x2c, 0xf8, + 0xc1, 0x15, 0x74, 0xa0, 0xb6, 0x62, 0x03, 0xd7, + 0x2f, 0xfb, 0x9a, 0x4e, 0x58, 0x8c, 0xed, 0x39, + 0x9f, 0x4b, 0x2a, 0xfe, 0xe8, 0x3c, 0x5d, 0x89, + 0x71, 0xa5, 0xc4, 0x10, 0x06, 0xd2, 0xb3, 0x67, + 0x5e, 0x8a, 0xeb, 0x3f, 0x29, 0xfd, 0x9c, 0x48, + 0xb0, 0x64, 0x05, 0xd1, 0xc7, 0x13, 0x72, 0xa6, + 0x23, 0xf7, 0x96, 0x42, 0x54, 0x80, 0xe1, 0x35, + 0xcd, 0x19, 0x78, 0xac, 0xba, 0x6e, 0x0f, 0xdb, + 0xe2, 0x36, 0x57, 0x83, 0x95, 0x41, 0x20, 0xf4, + 0x0c, 0xd8, 0xb9, 0x6d, 0x7b, 0xaf, 0xce, 0x1a, + 0xbc, 0x68, 0x09, 0xdd, 0xcb, 0x1f, 0x7e, 0xaa, + 0x52, 0x86, 0xe7, 0x33, 0x25, 0xf1, 0x90, 0x44, + 0x7d, 0xa9, 0xc8, 0x1c, 0x0a, 0xde, 0xbf, 0x6b, + 0x93, 0x47, 0x26, 0xf2, 0xe4, 0x30, 0x51, 0x85, + 0x46, 0x92, 0xf3, 0x27, 0x31, 0xe5, 0x84, 0x50, + 0xa8, 0x7c, 0x1d, 0xc9, 0xdf, 0x0b, 0x6a, 0xbe, + 0x87, 0x53, 0x32, 0xe6, 0xf0, 0x24, 0x45, 0x91, + 0x69, 0xbd, 0xdc, 0x08, 0x1e, 0xca, 0xab, 0x7f, + 0xd9, 0x0d, 0x6c, 0xb8, 0xae, 0x7a, 0x1b, 0xcf, + 0x37, 0xe3, 0x82, 0x56, 0x40, 0x94, 0xf5, 0x21, + 0x18, 0xcc, 0xad, 0x79, 0x6f, 0xbb, 0xda, 0x0e, + 0xf6, 0x22, 0x43, 0x97, 0x81, 0x55, 0x34, 0xe0, + 0x65, 0xb1, 0xd0, 0x04, 0x12, 0xc6, 0xa7, 0x73, + 0x8b, 0x5f, 0x3e, 0xea, 0xfc, 0x28, 0x49, 0x9d, + 0xa4, 0x70, 0x11, 0xc5, 0xd3, 0x07, 0x66, 0xb2, + 0x4a, 0x9e, 0xff, 0x2b, 0x3d, 0xe9, 0x88, 0x5c, + 0xfa, 0x2e, 0x4f, 0x9b, 0x8d, 0x59, 0x38, 0xec, + 0x14, 0xc0, 0xa1, 0x75, 0x63, 0xb7, 0xd6, 0x02, + 0x3b, 0xef, 0x8e, 0x5a, 0x4c, 0x98, 0xf9, 0x2d, + 0xd5, 0x01, 0x60, 0xb4, 0xa2, 0x76, 0x17, 0xc3, + }, + { + 0x00, 0xd5, 0xb7, 0x62, 0x73, 0xa6, 0xc4, 0x11, + 0xe6, 0x33, 0x51, 0x84, 0x95, 0x40, 0x22, 0xf7, + 0xd1, 0x04, 0x66, 0xb3, 0xa2, 0x77, 0x15, 0xc0, + 0x37, 0xe2, 0x80, 0x55, 0x44, 0x91, 0xf3, 0x26, + 0xbf, 0x6a, 0x08, 0xdd, 0xcc, 0x19, 0x7b, 0xae, + 0x59, 0x8c, 0xee, 0x3b, 0x2a, 0xff, 0x9d, 0x48, + 0x6e, 0xbb, 0xd9, 0x0c, 0x1d, 0xc8, 0xaa, 0x7f, + 0x88, 0x5d, 0x3f, 0xea, 0xfb, 0x2e, 0x4c, 0x99, + 0x63, 0xb6, 0xd4, 0x01, 0x10, 0xc5, 0xa7, 0x72, + 0x85, 0x50, 0x32, 0xe7, 0xf6, 0x23, 0x41, 0x94, + 0xb2, 0x67, 0x05, 0xd0, 0xc1, 0x14, 0x76, 0xa3, + 0x54, 0x81, 0xe3, 0x36, 0x27, 0xf2, 0x90, 0x45, + 0xdc, 0x09, 0x6b, 0xbe, 0xaf, 0x7a, 0x18, 0xcd, + 0x3a, 0xef, 0x8d, 0x58, 0x49, 0x9c, 0xfe, 0x2b, + 0x0d, 0xd8, 0xba, 0x6f, 0x7e, 0xab, 0xc9, 0x1c, + 0xeb, 0x3e, 0x5c, 0x89, 0x98, 0x4d, 0x2f, 0xfa, + 0xc6, 0x13, 0x71, 0xa4, 0xb5, 0x60, 0x02, 0xd7, + 0x20, 0xf5, 0x97, 0x42, 0x53, 0x86, 0xe4, 0x31, + 0x17, 0xc2, 0xa0, 0x75, 0x64, 0xb1, 0xd3, 0x06, + 0xf1, 0x24, 0x46, 0x93, 0x82, 0x57, 0x35, 0xe0, + 0x79, 0xac, 0xce, 0x1b, 0x0a, 0xdf, 0xbd, 0x68, + 0x9f, 0x4a, 0x28, 0xfd, 0xec, 0x39, 0x5b, 0x8e, + 0xa8, 0x7d, 0x1f, 0xca, 0xdb, 0x0e, 0x6c, 0xb9, + 0x4e, 0x9b, 0xf9, 0x2c, 0x3d, 0xe8, 0x8a, 0x5f, + 0xa5, 0x70, 0x12, 0xc7, 0xd6, 0x03, 0x61, 0xb4, + 0x43, 0x96, 0xf4, 0x21, 0x30, 0xe5, 0x87, 0x52, + 0x74, 0xa1, 0xc3, 0x16, 0x07, 0xd2, 0xb0, 0x65, + 0x92, 0x47, 0x25, 0xf0, 0xe1, 0x34, 0x56, 0x83, + 0x1a, 0xcf, 0xad, 0x78, 0x69, 0xbc, 0xde, 0x0b, + 0xfc, 0x29, 0x4b, 0x9e, 0x8f, 0x5a, 0x38, 0xed, + 0xcb, 0x1e, 0x7c, 0xa9, 0xb8, 0x6d, 0x0f, 0xda, + 0x2d, 0xf8, 0x9a, 0x4f, 0x5e, 0x8b, 0xe9, 0x3c, + }, + { + 0x00, 0xd6, 0xb1, 0x67, 0x7f, 0xa9, 0xce, 0x18, + 0xfe, 0x28, 0x4f, 0x99, 0x81, 0x57, 0x30, 0xe6, + 0xe1, 0x37, 0x50, 0x86, 0x9e, 0x48, 0x2f, 0xf9, + 0x1f, 0xc9, 0xae, 0x78, 0x60, 0xb6, 0xd1, 0x07, + 0xdf, 0x09, 0x6e, 0xb8, 0xa0, 0x76, 0x11, 0xc7, + 0x21, 0xf7, 0x90, 0x46, 0x5e, 0x88, 0xef, 0x39, + 0x3e, 0xe8, 0x8f, 0x59, 0x41, 0x97, 0xf0, 0x26, + 0xc0, 0x16, 0x71, 0xa7, 0xbf, 0x69, 0x0e, 0xd8, + 0xa3, 0x75, 0x12, 0xc4, 0xdc, 0x0a, 0x6d, 0xbb, + 0x5d, 0x8b, 0xec, 0x3a, 0x22, 0xf4, 0x93, 0x45, + 0x42, 0x94, 0xf3, 0x25, 0x3d, 0xeb, 0x8c, 0x5a, + 0xbc, 0x6a, 0x0d, 0xdb, 0xc3, 0x15, 0x72, 0xa4, + 0x7c, 0xaa, 0xcd, 0x1b, 0x03, 0xd5, 0xb2, 0x64, + 0x82, 0x54, 0x33, 0xe5, 0xfd, 0x2b, 0x4c, 0x9a, + 0x9d, 0x4b, 0x2c, 0xfa, 0xe2, 0x34, 0x53, 0x85, + 0x63, 0xb5, 0xd2, 0x04, 0x1c, 0xca, 0xad, 0x7b, + 0x5b, 0x8d, 0xea, 0x3c, 0x24, 0xf2, 0x95, 0x43, + 0xa5, 0x73, 0x14, 0xc2, 0xda, 0x0c, 0x6b, 0xbd, + 0xba, 0x6c, 0x0b, 0xdd, 0xc5, 0x13, 0x74, 0xa2, + 0x44, 0x92, 0xf5, 0x23, 0x3b, 0xed, 0x8a, 0x5c, + 0x84, 0x52, 0x35, 0xe3, 0xfb, 0x2d, 0x4a, 0x9c, + 0x7a, 0xac, 0xcb, 0x1d, 0x05, 0xd3, 0xb4, 0x62, + 0x65, 0xb3, 0xd4, 0x02, 0x1a, 0xcc, 0xab, 0x7d, + 0x9b, 0x4d, 0x2a, 0xfc, 0xe4, 0x32, 0x55, 0x83, + 0xf8, 0x2e, 0x49, 0x9f, 0x87, 0x51, 0x36, 0xe0, + 0x06, 0xd0, 0xb7, 0x61, 0x79, 0xaf, 0xc8, 0x1e, + 0x19, 0xcf, 0xa8, 0x7e, 0x66, 0xb0, 0xd7, 0x01, + 0xe7, 0x31, 0x56, 0x80, 0x98, 0x4e, 0x29, 0xff, + 0x27, 0xf1, 0x96, 0x40, 0x58, 0x8e, 0xe9, 0x3f, + 0xd9, 0x0f, 0x68, 0xbe, 0xa6, 0x70, 0x17, 0xc1, + 0xc6, 0x10, 0x77, 0xa1, 0xb9, 0x6f, 0x08, 0xde, + 0x38, 0xee, 0x89, 0x5f, 0x47, 0x91, 0xf6, 0x20, + }, + { + 0x00, 0xd7, 0xb3, 0x64, 0x7b, 0xac, 0xc8, 0x1f, + 0xf6, 0x21, 0x45, 0x92, 0x8d, 0x5a, 0x3e, 0xe9, + 0xf1, 0x26, 0x42, 0x95, 0x8a, 0x5d, 0x39, 0xee, + 0x07, 0xd0, 0xb4, 0x63, 0x7c, 0xab, 0xcf, 0x18, + 0xff, 0x28, 0x4c, 0x9b, 0x84, 0x53, 0x37, 0xe0, + 0x09, 0xde, 0xba, 0x6d, 0x72, 0xa5, 0xc1, 0x16, + 0x0e, 0xd9, 0xbd, 0x6a, 0x75, 0xa2, 0xc6, 0x11, + 0xf8, 0x2f, 0x4b, 0x9c, 0x83, 0x54, 0x30, 0xe7, + 0xe3, 0x34, 0x50, 0x87, 0x98, 0x4f, 0x2b, 0xfc, + 0x15, 0xc2, 0xa6, 0x71, 0x6e, 0xb9, 0xdd, 0x0a, + 0x12, 0xc5, 0xa1, 0x76, 0x69, 0xbe, 0xda, 0x0d, + 0xe4, 0x33, 0x57, 0x80, 0x9f, 0x48, 0x2c, 0xfb, + 0x1c, 0xcb, 0xaf, 0x78, 0x67, 0xb0, 0xd4, 0x03, + 0xea, 0x3d, 0x59, 0x8e, 0x91, 0x46, 0x22, 0xf5, + 0xed, 0x3a, 0x5e, 0x89, 0x96, 0x41, 0x25, 0xf2, + 0x1b, 0xcc, 0xa8, 0x7f, 0x60, 0xb7, 0xd3, 0x04, + 0xdb, 0x0c, 0x68, 0xbf, 0xa0, 0x77, 0x13, 0xc4, + 0x2d, 0xfa, 0x9e, 0x49, 0x56, 0x81, 0xe5, 0x32, + 0x2a, 0xfd, 0x99, 0x4e, 0x51, 0x86, 0xe2, 0x35, + 0xdc, 0x0b, 0x6f, 0xb8, 0xa7, 0x70, 0x14, 0xc3, + 0x24, 0xf3, 0x97, 0x40, 0x5f, 0x88, 0xec, 0x3b, + 0xd2, 0x05, 0x61, 0xb6, 0xa9, 0x7e, 0x1a, 0xcd, + 0xd5, 0x02, 0x66, 0xb1, 0xae, 0x79, 0x1d, 0xca, + 0x23, 0xf4, 0x90, 0x47, 0x58, 0x8f, 0xeb, 0x3c, + 0x38, 0xef, 0x8b, 0x5c, 0x43, 0x94, 0xf0, 0x27, + 0xce, 0x19, 0x7d, 0xaa, 0xb5, 0x62, 0x06, 0xd1, + 0xc9, 0x1e, 0x7a, 0xad, 0xb2, 0x65, 0x01, 0xd6, + 0x3f, 0xe8, 0x8c, 0x5b, 0x44, 0x93, 0xf7, 0x20, + 0xc7, 0x10, 0x74, 0xa3, 0xbc, 0x6b, 0x0f, 0xd8, + 0x31, 0xe6, 0x82, 0x55, 0x4a, 0x9d, 0xf9, 0x2e, + 0x36, 0xe1, 0x85, 0x52, 0x4d, 0x9a, 0xfe, 0x29, + 0xc0, 0x17, 0x73, 0xa4, 0xbb, 0x6c, 0x08, 0xdf, + }, + { + 0x00, 0xd8, 0xad, 0x75, 0x47, 0x9f, 0xea, 0x32, + 0x8e, 0x56, 0x23, 0xfb, 0xc9, 0x11, 0x64, 0xbc, + 0x01, 0xd9, 0xac, 0x74, 0x46, 0x9e, 0xeb, 0x33, + 0x8f, 0x57, 0x22, 0xfa, 0xc8, 0x10, 0x65, 0xbd, + 0x02, 0xda, 0xaf, 0x77, 0x45, 0x9d, 0xe8, 0x30, + 0x8c, 0x54, 0x21, 0xf9, 0xcb, 0x13, 0x66, 0xbe, + 0x03, 0xdb, 0xae, 0x76, 0x44, 0x9c, 0xe9, 0x31, + 0x8d, 0x55, 0x20, 0xf8, 0xca, 0x12, 0x67, 0xbf, + 0x04, 0xdc, 0xa9, 0x71, 0x43, 0x9b, 0xee, 0x36, + 0x8a, 0x52, 0x27, 0xff, 0xcd, 0x15, 0x60, 0xb8, + 0x05, 0xdd, 0xa8, 0x70, 0x42, 0x9a, 0xef, 0x37, + 0x8b, 0x53, 0x26, 0xfe, 0xcc, 0x14, 0x61, 0xb9, + 0x06, 0xde, 0xab, 0x73, 0x41, 0x99, 0xec, 0x34, + 0x88, 0x50, 0x25, 0xfd, 0xcf, 0x17, 0x62, 0xba, + 0x07, 0xdf, 0xaa, 0x72, 0x40, 0x98, 0xed, 0x35, + 0x89, 0x51, 0x24, 0xfc, 0xce, 0x16, 0x63, 0xbb, + 0x08, 0xd0, 0xa5, 0x7d, 0x4f, 0x97, 0xe2, 0x3a, + 0x86, 0x5e, 0x2b, 0xf3, 0xc1, 0x19, 0x6c, 0xb4, + 0x09, 0xd1, 0xa4, 0x7c, 0x4e, 0x96, 0xe3, 0x3b, + 0x87, 0x5f, 0x2a, 0xf2, 0xc0, 0x18, 0x6d, 0xb5, + 0x0a, 0xd2, 0xa7, 0x7f, 0x4d, 0x95, 0xe0, 0x38, + 0x84, 0x5c, 0x29, 0xf1, 0xc3, 0x1b, 0x6e, 0xb6, + 0x0b, 0xd3, 0xa6, 0x7e, 0x4c, 0x94, 0xe1, 0x39, + 0x85, 0x5d, 0x28, 0xf0, 0xc2, 0x1a, 0x6f, 0xb7, + 0x0c, 0xd4, 0xa1, 0x79, 0x4b, 0x93, 0xe6, 0x3e, + 0x82, 0x5a, 0x2f, 0xf7, 0xc5, 0x1d, 0x68, 0xb0, + 0x0d, 0xd5, 0xa0, 0x78, 0x4a, 0x92, 0xe7, 0x3f, + 0x83, 0x5b, 0x2e, 0xf6, 0xc4, 0x1c, 0x69, 0xb1, + 0x0e, 0xd6, 0xa3, 0x7b, 0x49, 0x91, 0xe4, 0x3c, + 0x80, 0x58, 0x2d, 0xf5, 0xc7, 0x1f, 0x6a, 0xb2, + 0x0f, 0xd7, 0xa2, 0x7a, 0x48, 0x90, 0xe5, 0x3d, + 0x81, 0x59, 0x2c, 0xf4, 0xc6, 0x1e, 0x6b, 0xb3, + }, + { + 0x00, 0xd9, 0xaf, 0x76, 0x43, 0x9a, 0xec, 0x35, + 0x86, 0x5f, 0x29, 0xf0, 0xc5, 0x1c, 0x6a, 0xb3, + 0x11, 0xc8, 0xbe, 0x67, 0x52, 0x8b, 0xfd, 0x24, + 0x97, 0x4e, 0x38, 0xe1, 0xd4, 0x0d, 0x7b, 0xa2, + 0x22, 0xfb, 0x8d, 0x54, 0x61, 0xb8, 0xce, 0x17, + 0xa4, 0x7d, 0x0b, 0xd2, 0xe7, 0x3e, 0x48, 0x91, + 0x33, 0xea, 0x9c, 0x45, 0x70, 0xa9, 0xdf, 0x06, + 0xb5, 0x6c, 0x1a, 0xc3, 0xf6, 0x2f, 0x59, 0x80, + 0x44, 0x9d, 0xeb, 0x32, 0x07, 0xde, 0xa8, 0x71, + 0xc2, 0x1b, 0x6d, 0xb4, 0x81, 0x58, 0x2e, 0xf7, + 0x55, 0x8c, 0xfa, 0x23, 0x16, 0xcf, 0xb9, 0x60, + 0xd3, 0x0a, 0x7c, 0xa5, 0x90, 0x49, 0x3f, 0xe6, + 0x66, 0xbf, 0xc9, 0x10, 0x25, 0xfc, 0x8a, 0x53, + 0xe0, 0x39, 0x4f, 0x96, 0xa3, 0x7a, 0x0c, 0xd5, + 0x77, 0xae, 0xd8, 0x01, 0x34, 0xed, 0x9b, 0x42, + 0xf1, 0x28, 0x5e, 0x87, 0xb2, 0x6b, 0x1d, 0xc4, + 0x88, 0x51, 0x27, 0xfe, 0xcb, 0x12, 0x64, 0xbd, + 0x0e, 0xd7, 0xa1, 0x78, 0x4d, 0x94, 0xe2, 0x3b, + 0x99, 0x40, 0x36, 0xef, 0xda, 0x03, 0x75, 0xac, + 0x1f, 0xc6, 0xb0, 0x69, 0x5c, 0x85, 0xf3, 0x2a, + 0xaa, 0x73, 0x05, 0xdc, 0xe9, 0x30, 0x46, 0x9f, + 0x2c, 0xf5, 0x83, 0x5a, 0x6f, 0xb6, 0xc0, 0x19, + 0xbb, 0x62, 0x14, 0xcd, 0xf8, 0x21, 0x57, 0x8e, + 0x3d, 0xe4, 0x92, 0x4b, 0x7e, 0xa7, 0xd1, 0x08, + 0xcc, 0x15, 0x63, 0xba, 0x8f, 0x56, 0x20, 0xf9, + 0x4a, 0x93, 0xe5, 0x3c, 0x09, 0xd0, 0xa6, 0x7f, + 0xdd, 0x04, 0x72, 0xab, 0x9e, 0x47, 0x31, 0xe8, + 0x5b, 0x82, 0xf4, 0x2d, 0x18, 0xc1, 0xb7, 0x6e, + 0xee, 0x37, 0x41, 0x98, 0xad, 0x74, 0x02, 0xdb, + 0x68, 0xb1, 0xc7, 0x1e, 0x2b, 0xf2, 0x84, 0x5d, + 0xff, 0x26, 0x50, 0x89, 0xbc, 0x65, 0x13, 0xca, + 0x79, 0xa0, 0xd6, 0x0f, 0x3a, 0xe3, 0x95, 0x4c, + }, + { + 0x00, 0xda, 0xa9, 0x73, 0x4f, 0x95, 0xe6, 0x3c, + 0x9e, 0x44, 0x37, 0xed, 0xd1, 0x0b, 0x78, 0xa2, + 0x21, 0xfb, 0x88, 0x52, 0x6e, 0xb4, 0xc7, 0x1d, + 0xbf, 0x65, 0x16, 0xcc, 0xf0, 0x2a, 0x59, 0x83, + 0x42, 0x98, 0xeb, 0x31, 0x0d, 0xd7, 0xa4, 0x7e, + 0xdc, 0x06, 0x75, 0xaf, 0x93, 0x49, 0x3a, 0xe0, + 0x63, 0xb9, 0xca, 0x10, 0x2c, 0xf6, 0x85, 0x5f, + 0xfd, 0x27, 0x54, 0x8e, 0xb2, 0x68, 0x1b, 0xc1, + 0x84, 0x5e, 0x2d, 0xf7, 0xcb, 0x11, 0x62, 0xb8, + 0x1a, 0xc0, 0xb3, 0x69, 0x55, 0x8f, 0xfc, 0x26, + 0xa5, 0x7f, 0x0c, 0xd6, 0xea, 0x30, 0x43, 0x99, + 0x3b, 0xe1, 0x92, 0x48, 0x74, 0xae, 0xdd, 0x07, + 0xc6, 0x1c, 0x6f, 0xb5, 0x89, 0x53, 0x20, 0xfa, + 0x58, 0x82, 0xf1, 0x2b, 0x17, 0xcd, 0xbe, 0x64, + 0xe7, 0x3d, 0x4e, 0x94, 0xa8, 0x72, 0x01, 0xdb, + 0x79, 0xa3, 0xd0, 0x0a, 0x36, 0xec, 0x9f, 0x45, + 0x15, 0xcf, 0xbc, 0x66, 0x5a, 0x80, 0xf3, 0x29, + 0x8b, 0x51, 0x22, 0xf8, 0xc4, 0x1e, 0x6d, 0xb7, + 0x34, 0xee, 0x9d, 0x47, 0x7b, 0xa1, 0xd2, 0x08, + 0xaa, 0x70, 0x03, 0xd9, 0xe5, 0x3f, 0x4c, 0x96, + 0x57, 0x8d, 0xfe, 0x24, 0x18, 0xc2, 0xb1, 0x6b, + 0xc9, 0x13, 0x60, 0xba, 0x86, 0x5c, 0x2f, 0xf5, + 0x76, 0xac, 0xdf, 0x05, 0x39, 0xe3, 0x90, 0x4a, + 0xe8, 0x32, 0x41, 0x9b, 0xa7, 0x7d, 0x0e, 0xd4, + 0x91, 0x4b, 0x38, 0xe2, 0xde, 0x04, 0x77, 0xad, + 0x0f, 0xd5, 0xa6, 0x7c, 0x40, 0x9a, 0xe9, 0x33, + 0xb0, 0x6a, 0x19, 0xc3, 0xff, 0x25, 0x56, 0x8c, + 0x2e, 0xf4, 0x87, 0x5d, 0x61, 0xbb, 0xc8, 0x12, + 0xd3, 0x09, 0x7a, 0xa0, 0x9c, 0x46, 0x35, 0xef, + 0x4d, 0x97, 0xe4, 0x3e, 0x02, 0xd8, 0xab, 0x71, + 0xf2, 0x28, 0x5b, 0x81, 0xbd, 0x67, 0x14, 0xce, + 0x6c, 0xb6, 0xc5, 0x1f, 0x23, 0xf9, 0x8a, 0x50, + }, + { + 0x00, 0xdb, 0xab, 0x70, 0x4b, 0x90, 0xe0, 0x3b, + 0x96, 0x4d, 0x3d, 0xe6, 0xdd, 0x06, 0x76, 0xad, + 0x31, 0xea, 0x9a, 0x41, 0x7a, 0xa1, 0xd1, 0x0a, + 0xa7, 0x7c, 0x0c, 0xd7, 0xec, 0x37, 0x47, 0x9c, + 0x62, 0xb9, 0xc9, 0x12, 0x29, 0xf2, 0x82, 0x59, + 0xf4, 0x2f, 0x5f, 0x84, 0xbf, 0x64, 0x14, 0xcf, + 0x53, 0x88, 0xf8, 0x23, 0x18, 0xc3, 0xb3, 0x68, + 0xc5, 0x1e, 0x6e, 0xb5, 0x8e, 0x55, 0x25, 0xfe, + 0xc4, 0x1f, 0x6f, 0xb4, 0x8f, 0x54, 0x24, 0xff, + 0x52, 0x89, 0xf9, 0x22, 0x19, 0xc2, 0xb2, 0x69, + 0xf5, 0x2e, 0x5e, 0x85, 0xbe, 0x65, 0x15, 0xce, + 0x63, 0xb8, 0xc8, 0x13, 0x28, 0xf3, 0x83, 0x58, + 0xa6, 0x7d, 0x0d, 0xd6, 0xed, 0x36, 0x46, 0x9d, + 0x30, 0xeb, 0x9b, 0x40, 0x7b, 0xa0, 0xd0, 0x0b, + 0x97, 0x4c, 0x3c, 0xe7, 0xdc, 0x07, 0x77, 0xac, + 0x01, 0xda, 0xaa, 0x71, 0x4a, 0x91, 0xe1, 0x3a, + 0x95, 0x4e, 0x3e, 0xe5, 0xde, 0x05, 0x75, 0xae, + 0x03, 0xd8, 0xa8, 0x73, 0x48, 0x93, 0xe3, 0x38, + 0xa4, 0x7f, 0x0f, 0xd4, 0xef, 0x34, 0x44, 0x9f, + 0x32, 0xe9, 0x99, 0x42, 0x79, 0xa2, 0xd2, 0x09, + 0xf7, 0x2c, 0x5c, 0x87, 0xbc, 0x67, 0x17, 0xcc, + 0x61, 0xba, 0xca, 0x11, 0x2a, 0xf1, 0x81, 0x5a, + 0xc6, 0x1d, 0x6d, 0xb6, 0x8d, 0x56, 0x26, 0xfd, + 0x50, 0x8b, 0xfb, 0x20, 0x1b, 0xc0, 0xb0, 0x6b, + 0x51, 0x8a, 0xfa, 0x21, 0x1a, 0xc1, 0xb1, 0x6a, + 0xc7, 0x1c, 0x6c, 0xb7, 0x8c, 0x57, 0x27, 0xfc, + 0x60, 0xbb, 0xcb, 0x10, 0x2b, 0xf0, 0x80, 0x5b, + 0xf6, 0x2d, 0x5d, 0x86, 0xbd, 0x66, 0x16, 0xcd, + 0x33, 0xe8, 0x98, 0x43, 0x78, 0xa3, 0xd3, 0x08, + 0xa5, 0x7e, 0x0e, 0xd5, 0xee, 0x35, 0x45, 0x9e, + 0x02, 0xd9, 0xa9, 0x72, 0x49, 0x92, 0xe2, 0x39, + 0x94, 0x4f, 0x3f, 0xe4, 0xdf, 0x04, 0x74, 0xaf, + }, + { + 0x00, 0xdc, 0xa5, 0x79, 0x57, 0x8b, 0xf2, 0x2e, + 0xae, 0x72, 0x0b, 0xd7, 0xf9, 0x25, 0x5c, 0x80, + 0x41, 0x9d, 0xe4, 0x38, 0x16, 0xca, 0xb3, 0x6f, + 0xef, 0x33, 0x4a, 0x96, 0xb8, 0x64, 0x1d, 0xc1, + 0x82, 0x5e, 0x27, 0xfb, 0xd5, 0x09, 0x70, 0xac, + 0x2c, 0xf0, 0x89, 0x55, 0x7b, 0xa7, 0xde, 0x02, + 0xc3, 0x1f, 0x66, 0xba, 0x94, 0x48, 0x31, 0xed, + 0x6d, 0xb1, 0xc8, 0x14, 0x3a, 0xe6, 0x9f, 0x43, + 0x19, 0xc5, 0xbc, 0x60, 0x4e, 0x92, 0xeb, 0x37, + 0xb7, 0x6b, 0x12, 0xce, 0xe0, 0x3c, 0x45, 0x99, + 0x58, 0x84, 0xfd, 0x21, 0x0f, 0xd3, 0xaa, 0x76, + 0xf6, 0x2a, 0x53, 0x8f, 0xa1, 0x7d, 0x04, 0xd8, + 0x9b, 0x47, 0x3e, 0xe2, 0xcc, 0x10, 0x69, 0xb5, + 0x35, 0xe9, 0x90, 0x4c, 0x62, 0xbe, 0xc7, 0x1b, + 0xda, 0x06, 0x7f, 0xa3, 0x8d, 0x51, 0x28, 0xf4, + 0x74, 0xa8, 0xd1, 0x0d, 0x23, 0xff, 0x86, 0x5a, + 0x32, 0xee, 0x97, 0x4b, 0x65, 0xb9, 0xc0, 0x1c, + 0x9c, 0x40, 0x39, 0xe5, 0xcb, 0x17, 0x6e, 0xb2, + 0x73, 0xaf, 0xd6, 0x0a, 0x24, 0xf8, 0x81, 0x5d, + 0xdd, 0x01, 0x78, 0xa4, 0x8a, 0x56, 0x2f, 0xf3, + 0xb0, 0x6c, 0x15, 0xc9, 0xe7, 0x3b, 0x42, 0x9e, + 0x1e, 0xc2, 0xbb, 0x67, 0x49, 0x95, 0xec, 0x30, + 0xf1, 0x2d, 0x54, 0x88, 0xa6, 0x7a, 0x03, 0xdf, + 0x5f, 0x83, 0xfa, 0x26, 0x08, 0xd4, 0xad, 0x71, + 0x2b, 0xf7, 0x8e, 0x52, 0x7c, 0xa0, 0xd9, 0x05, + 0x85, 0x59, 0x20, 0xfc, 0xd2, 0x0e, 0x77, 0xab, + 0x6a, 0xb6, 0xcf, 0x13, 0x3d, 0xe1, 0x98, 0x44, + 0xc4, 0x18, 0x61, 0xbd, 0x93, 0x4f, 0x36, 0xea, + 0xa9, 0x75, 0x0c, 0xd0, 0xfe, 0x22, 0x5b, 0x87, + 0x07, 0xdb, 0xa2, 0x7e, 0x50, 0x8c, 0xf5, 0x29, + 0xe8, 0x34, 0x4d, 0x91, 0xbf, 0x63, 0x1a, 0xc6, + 0x46, 0x9a, 0xe3, 0x3f, 0x11, 0xcd, 0xb4, 0x68, + }, + { + 0x00, 0xdd, 0xa7, 0x7a, 0x53, 0x8e, 0xf4, 0x29, + 0xa6, 0x7b, 0x01, 0xdc, 0xf5, 0x28, 0x52, 0x8f, + 0x51, 0x8c, 0xf6, 0x2b, 0x02, 0xdf, 0xa5, 0x78, + 0xf7, 0x2a, 0x50, 0x8d, 0xa4, 0x79, 0x03, 0xde, + 0xa2, 0x7f, 0x05, 0xd8, 0xf1, 0x2c, 0x56, 0x8b, + 0x04, 0xd9, 0xa3, 0x7e, 0x57, 0x8a, 0xf0, 0x2d, + 0xf3, 0x2e, 0x54, 0x89, 0xa0, 0x7d, 0x07, 0xda, + 0x55, 0x88, 0xf2, 0x2f, 0x06, 0xdb, 0xa1, 0x7c, + 0x59, 0x84, 0xfe, 0x23, 0x0a, 0xd7, 0xad, 0x70, + 0xff, 0x22, 0x58, 0x85, 0xac, 0x71, 0x0b, 0xd6, + 0x08, 0xd5, 0xaf, 0x72, 0x5b, 0x86, 0xfc, 0x21, + 0xae, 0x73, 0x09, 0xd4, 0xfd, 0x20, 0x5a, 0x87, + 0xfb, 0x26, 0x5c, 0x81, 0xa8, 0x75, 0x0f, 0xd2, + 0x5d, 0x80, 0xfa, 0x27, 0x0e, 0xd3, 0xa9, 0x74, + 0xaa, 0x77, 0x0d, 0xd0, 0xf9, 0x24, 0x5e, 0x83, + 0x0c, 0xd1, 0xab, 0x76, 0x5f, 0x82, 0xf8, 0x25, + 0xb2, 0x6f, 0x15, 0xc8, 0xe1, 0x3c, 0x46, 0x9b, + 0x14, 0xc9, 0xb3, 0x6e, 0x47, 0x9a, 0xe0, 0x3d, + 0xe3, 0x3e, 0x44, 0x99, 0xb0, 0x6d, 0x17, 0xca, + 0x45, 0x98, 0xe2, 0x3f, 0x16, 0xcb, 0xb1, 0x6c, + 0x10, 0xcd, 0xb7, 0x6a, 0x43, 0x9e, 0xe4, 0x39, + 0xb6, 0x6b, 0x11, 0xcc, 0xe5, 0x38, 0x42, 0x9f, + 0x41, 0x9c, 0xe6, 0x3b, 0x12, 0xcf, 0xb5, 0x68, + 0xe7, 0x3a, 0x40, 0x9d, 0xb4, 0x69, 0x13, 0xce, + 0xeb, 0x36, 0x4c, 0x91, 0xb8, 0x65, 0x1f, 0xc2, + 0x4d, 0x90, 0xea, 0x37, 0x1e, 0xc3, 0xb9, 0x64, + 0xba, 0x67, 0x1d, 0xc0, 0xe9, 0x34, 0x4e, 0x93, + 0x1c, 0xc1, 0xbb, 0x66, 0x4f, 0x92, 0xe8, 0x35, + 0x49, 0x94, 0xee, 0x33, 0x1a, 0xc7, 0xbd, 0x60, + 0xef, 0x32, 0x48, 0x95, 0xbc, 0x61, 0x1b, 0xc6, + 0x18, 0xc5, 0xbf, 0x62, 0x4b, 0x96, 0xec, 0x31, + 0xbe, 0x63, 0x19, 0xc4, 0xed, 0x30, 0x4a, 0x97, + }, + { + 0x00, 0xde, 0xa1, 0x7f, 0x5f, 0x81, 0xfe, 0x20, + 0xbe, 0x60, 0x1f, 0xc1, 0xe1, 0x3f, 0x40, 0x9e, + 0x61, 0xbf, 0xc0, 0x1e, 0x3e, 0xe0, 0x9f, 0x41, + 0xdf, 0x01, 0x7e, 0xa0, 0x80, 0x5e, 0x21, 0xff, + 0xc2, 0x1c, 0x63, 0xbd, 0x9d, 0x43, 0x3c, 0xe2, + 0x7c, 0xa2, 0xdd, 0x03, 0x23, 0xfd, 0x82, 0x5c, + 0xa3, 0x7d, 0x02, 0xdc, 0xfc, 0x22, 0x5d, 0x83, + 0x1d, 0xc3, 0xbc, 0x62, 0x42, 0x9c, 0xe3, 0x3d, + 0x99, 0x47, 0x38, 0xe6, 0xc6, 0x18, 0x67, 0xb9, + 0x27, 0xf9, 0x86, 0x58, 0x78, 0xa6, 0xd9, 0x07, + 0xf8, 0x26, 0x59, 0x87, 0xa7, 0x79, 0x06, 0xd8, + 0x46, 0x98, 0xe7, 0x39, 0x19, 0xc7, 0xb8, 0x66, + 0x5b, 0x85, 0xfa, 0x24, 0x04, 0xda, 0xa5, 0x7b, + 0xe5, 0x3b, 0x44, 0x9a, 0xba, 0x64, 0x1b, 0xc5, + 0x3a, 0xe4, 0x9b, 0x45, 0x65, 0xbb, 0xc4, 0x1a, + 0x84, 0x5a, 0x25, 0xfb, 0xdb, 0x05, 0x7a, 0xa4, + 0x2f, 0xf1, 0x8e, 0x50, 0x70, 0xae, 0xd1, 0x0f, + 0x91, 0x4f, 0x30, 0xee, 0xce, 0x10, 0x6f, 0xb1, + 0x4e, 0x90, 0xef, 0x31, 0x11, 0xcf, 0xb0, 0x6e, + 0xf0, 0x2e, 0x51, 0x8f, 0xaf, 0x71, 0x0e, 0xd0, + 0xed, 0x33, 0x4c, 0x92, 0xb2, 0x6c, 0x13, 0xcd, + 0x53, 0x8d, 0xf2, 0x2c, 0x0c, 0xd2, 0xad, 0x73, + 0x8c, 0x52, 0x2d, 0xf3, 0xd3, 0x0d, 0x72, 0xac, + 0x32, 0xec, 0x93, 0x4d, 0x6d, 0xb3, 0xcc, 0x12, + 0xb6, 0x68, 0x17, 0xc9, 0xe9, 0x37, 0x48, 0x96, + 0x08, 0xd6, 0xa9, 0x77, 0x57, 0x89, 0xf6, 0x28, + 0xd7, 0x09, 0x76, 0xa8, 0x88, 0x56, 0x29, 0xf7, + 0x69, 0xb7, 0xc8, 0x16, 0x36, 0xe8, 0x97, 0x49, + 0x74, 0xaa, 0xd5, 0x0b, 0x2b, 0xf5, 0x8a, 0x54, + 0xca, 0x14, 0x6b, 0xb5, 0x95, 0x4b, 0x34, 0xea, + 0x15, 0xcb, 0xb4, 0x6a, 0x4a, 0x94, 0xeb, 0x35, + 0xab, 0x75, 0x0a, 0xd4, 0xf4, 0x2a, 0x55, 0x8b, + }, + { + 0x00, 0xdf, 0xa3, 0x7c, 0x5b, 0x84, 0xf8, 0x27, + 0xb6, 0x69, 0x15, 0xca, 0xed, 0x32, 0x4e, 0x91, + 0x71, 0xae, 0xd2, 0x0d, 0x2a, 0xf5, 0x89, 0x56, + 0xc7, 0x18, 0x64, 0xbb, 0x9c, 0x43, 0x3f, 0xe0, + 0xe2, 0x3d, 0x41, 0x9e, 0xb9, 0x66, 0x1a, 0xc5, + 0x54, 0x8b, 0xf7, 0x28, 0x0f, 0xd0, 0xac, 0x73, + 0x93, 0x4c, 0x30, 0xef, 0xc8, 0x17, 0x6b, 0xb4, + 0x25, 0xfa, 0x86, 0x59, 0x7e, 0xa1, 0xdd, 0x02, + 0xd9, 0x06, 0x7a, 0xa5, 0x82, 0x5d, 0x21, 0xfe, + 0x6f, 0xb0, 0xcc, 0x13, 0x34, 0xeb, 0x97, 0x48, + 0xa8, 0x77, 0x0b, 0xd4, 0xf3, 0x2c, 0x50, 0x8f, + 0x1e, 0xc1, 0xbd, 0x62, 0x45, 0x9a, 0xe6, 0x39, + 0x3b, 0xe4, 0x98, 0x47, 0x60, 0xbf, 0xc3, 0x1c, + 0x8d, 0x52, 0x2e, 0xf1, 0xd6, 0x09, 0x75, 0xaa, + 0x4a, 0x95, 0xe9, 0x36, 0x11, 0xce, 0xb2, 0x6d, + 0xfc, 0x23, 0x5f, 0x80, 0xa7, 0x78, 0x04, 0xdb, + 0xaf, 0x70, 0x0c, 0xd3, 0xf4, 0x2b, 0x57, 0x88, + 0x19, 0xc6, 0xba, 0x65, 0x42, 0x9d, 0xe1, 0x3e, + 0xde, 0x01, 0x7d, 0xa2, 0x85, 0x5a, 0x26, 0xf9, + 0x68, 0xb7, 0xcb, 0x14, 0x33, 0xec, 0x90, 0x4f, + 0x4d, 0x92, 0xee, 0x31, 0x16, 0xc9, 0xb5, 0x6a, + 0xfb, 0x24, 0x58, 0x87, 0xa0, 0x7f, 0x03, 0xdc, + 0x3c, 0xe3, 0x9f, 0x40, 0x67, 0xb8, 0xc4, 0x1b, + 0x8a, 0x55, 0x29, 0xf6, 0xd1, 0x0e, 0x72, 0xad, + 0x76, 0xa9, 0xd5, 0x0a, 0x2d, 0xf2, 0x8e, 0x51, + 0xc0, 0x1f, 0x63, 0xbc, 0x9b, 0x44, 0x38, 0xe7, + 0x07, 0xd8, 0xa4, 0x7b, 0x5c, 0x83, 0xff, 0x20, + 0xb1, 0x6e, 0x12, 0xcd, 0xea, 0x35, 0x49, 0x96, + 0x94, 0x4b, 0x37, 0xe8, 0xcf, 0x10, 0x6c, 0xb3, + 0x22, 0xfd, 0x81, 0x5e, 0x79, 0xa6, 0xda, 0x05, + 0xe5, 0x3a, 0x46, 0x99, 0xbe, 0x61, 0x1d, 0xc2, + 0x53, 0x8c, 0xf0, 0x2f, 0x08, 0xd7, 0xab, 0x74, + }, + { + 0x00, 0xe0, 0xdd, 0x3d, 0xa7, 0x47, 0x7a, 0x9a, + 0x53, 0xb3, 0x8e, 0x6e, 0xf4, 0x14, 0x29, 0xc9, + 0xa6, 0x46, 0x7b, 0x9b, 0x01, 0xe1, 0xdc, 0x3c, + 0xf5, 0x15, 0x28, 0xc8, 0x52, 0xb2, 0x8f, 0x6f, + 0x51, 0xb1, 0x8c, 0x6c, 0xf6, 0x16, 0x2b, 0xcb, + 0x02, 0xe2, 0xdf, 0x3f, 0xa5, 0x45, 0x78, 0x98, + 0xf7, 0x17, 0x2a, 0xca, 0x50, 0xb0, 0x8d, 0x6d, + 0xa4, 0x44, 0x79, 0x99, 0x03, 0xe3, 0xde, 0x3e, + 0xa2, 0x42, 0x7f, 0x9f, 0x05, 0xe5, 0xd8, 0x38, + 0xf1, 0x11, 0x2c, 0xcc, 0x56, 0xb6, 0x8b, 0x6b, + 0x04, 0xe4, 0xd9, 0x39, 0xa3, 0x43, 0x7e, 0x9e, + 0x57, 0xb7, 0x8a, 0x6a, 0xf0, 0x10, 0x2d, 0xcd, + 0xf3, 0x13, 0x2e, 0xce, 0x54, 0xb4, 0x89, 0x69, + 0xa0, 0x40, 0x7d, 0x9d, 0x07, 0xe7, 0xda, 0x3a, + 0x55, 0xb5, 0x88, 0x68, 0xf2, 0x12, 0x2f, 0xcf, + 0x06, 0xe6, 0xdb, 0x3b, 0xa1, 0x41, 0x7c, 0x9c, + 0x59, 0xb9, 0x84, 0x64, 0xfe, 0x1e, 0x23, 0xc3, + 0x0a, 0xea, 0xd7, 0x37, 0xad, 0x4d, 0x70, 0x90, + 0xff, 0x1f, 0x22, 0xc2, 0x58, 0xb8, 0x85, 0x65, + 0xac, 0x4c, 0x71, 0x91, 0x0b, 0xeb, 0xd6, 0x36, + 0x08, 0xe8, 0xd5, 0x35, 0xaf, 0x4f, 0x72, 0x92, + 0x5b, 0xbb, 0x86, 0x66, 0xfc, 0x1c, 0x21, 0xc1, + 0xae, 0x4e, 0x73, 0x93, 0x09, 0xe9, 0xd4, 0x34, + 0xfd, 0x1d, 0x20, 0xc0, 0x5a, 0xba, 0x87, 0x67, + 0xfb, 0x1b, 0x26, 0xc6, 0x5c, 0xbc, 0x81, 0x61, + 0xa8, 0x48, 0x75, 0x95, 0x0f, 0xef, 0xd2, 0x32, + 0x5d, 0xbd, 0x80, 0x60, 0xfa, 0x1a, 0x27, 0xc7, + 0x0e, 0xee, 0xd3, 0x33, 0xa9, 0x49, 0x74, 0x94, + 0xaa, 0x4a, 0x77, 0x97, 0x0d, 0xed, 0xd0, 0x30, + 0xf9, 0x19, 0x24, 0xc4, 0x5e, 0xbe, 0x83, 0x63, + 0x0c, 0xec, 0xd1, 0x31, 0xab, 0x4b, 0x76, 0x96, + 0x5f, 0xbf, 0x82, 0x62, 0xf8, 0x18, 0x25, 0xc5, + }, + { + 0x00, 0xe1, 0xdf, 0x3e, 0xa3, 0x42, 0x7c, 0x9d, + 0x5b, 0xba, 0x84, 0x65, 0xf8, 0x19, 0x27, 0xc6, + 0xb6, 0x57, 0x69, 0x88, 0x15, 0xf4, 0xca, 0x2b, + 0xed, 0x0c, 0x32, 0xd3, 0x4e, 0xaf, 0x91, 0x70, + 0x71, 0x90, 0xae, 0x4f, 0xd2, 0x33, 0x0d, 0xec, + 0x2a, 0xcb, 0xf5, 0x14, 0x89, 0x68, 0x56, 0xb7, + 0xc7, 0x26, 0x18, 0xf9, 0x64, 0x85, 0xbb, 0x5a, + 0x9c, 0x7d, 0x43, 0xa2, 0x3f, 0xde, 0xe0, 0x01, + 0xe2, 0x03, 0x3d, 0xdc, 0x41, 0xa0, 0x9e, 0x7f, + 0xb9, 0x58, 0x66, 0x87, 0x1a, 0xfb, 0xc5, 0x24, + 0x54, 0xb5, 0x8b, 0x6a, 0xf7, 0x16, 0x28, 0xc9, + 0x0f, 0xee, 0xd0, 0x31, 0xac, 0x4d, 0x73, 0x92, + 0x93, 0x72, 0x4c, 0xad, 0x30, 0xd1, 0xef, 0x0e, + 0xc8, 0x29, 0x17, 0xf6, 0x6b, 0x8a, 0xb4, 0x55, + 0x25, 0xc4, 0xfa, 0x1b, 0x86, 0x67, 0x59, 0xb8, + 0x7e, 0x9f, 0xa1, 0x40, 0xdd, 0x3c, 0x02, 0xe3, + 0xd9, 0x38, 0x06, 0xe7, 0x7a, 0x9b, 0xa5, 0x44, + 0x82, 0x63, 0x5d, 0xbc, 0x21, 0xc0, 0xfe, 0x1f, + 0x6f, 0x8e, 0xb0, 0x51, 0xcc, 0x2d, 0x13, 0xf2, + 0x34, 0xd5, 0xeb, 0x0a, 0x97, 0x76, 0x48, 0xa9, + 0xa8, 0x49, 0x77, 0x96, 0x0b, 0xea, 0xd4, 0x35, + 0xf3, 0x12, 0x2c, 0xcd, 0x50, 0xb1, 0x8f, 0x6e, + 0x1e, 0xff, 0xc1, 0x20, 0xbd, 0x5c, 0x62, 0x83, + 0x45, 0xa4, 0x9a, 0x7b, 0xe6, 0x07, 0x39, 0xd8, + 0x3b, 0xda, 0xe4, 0x05, 0x98, 0x79, 0x47, 0xa6, + 0x60, 0x81, 0xbf, 0x5e, 0xc3, 0x22, 0x1c, 0xfd, + 0x8d, 0x6c, 0x52, 0xb3, 0x2e, 0xcf, 0xf1, 0x10, + 0xd6, 0x37, 0x09, 0xe8, 0x75, 0x94, 0xaa, 0x4b, + 0x4a, 0xab, 0x95, 0x74, 0xe9, 0x08, 0x36, 0xd7, + 0x11, 0xf0, 0xce, 0x2f, 0xb2, 0x53, 0x6d, 0x8c, + 0xfc, 0x1d, 0x23, 0xc2, 0x5f, 0xbe, 0x80, 0x61, + 0xa7, 0x46, 0x78, 0x99, 0x04, 0xe5, 0xdb, 0x3a, + }, + { + 0x00, 0xe2, 0xd9, 0x3b, 0xaf, 0x4d, 0x76, 0x94, + 0x43, 0xa1, 0x9a, 0x78, 0xec, 0x0e, 0x35, 0xd7, + 0x86, 0x64, 0x5f, 0xbd, 0x29, 0xcb, 0xf0, 0x12, + 0xc5, 0x27, 0x1c, 0xfe, 0x6a, 0x88, 0xb3, 0x51, + 0x11, 0xf3, 0xc8, 0x2a, 0xbe, 0x5c, 0x67, 0x85, + 0x52, 0xb0, 0x8b, 0x69, 0xfd, 0x1f, 0x24, 0xc6, + 0x97, 0x75, 0x4e, 0xac, 0x38, 0xda, 0xe1, 0x03, + 0xd4, 0x36, 0x0d, 0xef, 0x7b, 0x99, 0xa2, 0x40, + 0x22, 0xc0, 0xfb, 0x19, 0x8d, 0x6f, 0x54, 0xb6, + 0x61, 0x83, 0xb8, 0x5a, 0xce, 0x2c, 0x17, 0xf5, + 0xa4, 0x46, 0x7d, 0x9f, 0x0b, 0xe9, 0xd2, 0x30, + 0xe7, 0x05, 0x3e, 0xdc, 0x48, 0xaa, 0x91, 0x73, + 0x33, 0xd1, 0xea, 0x08, 0x9c, 0x7e, 0x45, 0xa7, + 0x70, 0x92, 0xa9, 0x4b, 0xdf, 0x3d, 0x06, 0xe4, + 0xb5, 0x57, 0x6c, 0x8e, 0x1a, 0xf8, 0xc3, 0x21, + 0xf6, 0x14, 0x2f, 0xcd, 0x59, 0xbb, 0x80, 0x62, + 0x44, 0xa6, 0x9d, 0x7f, 0xeb, 0x09, 0x32, 0xd0, + 0x07, 0xe5, 0xde, 0x3c, 0xa8, 0x4a, 0x71, 0x93, + 0xc2, 0x20, 0x1b, 0xf9, 0x6d, 0x8f, 0xb4, 0x56, + 0x81, 0x63, 0x58, 0xba, 0x2e, 0xcc, 0xf7, 0x15, + 0x55, 0xb7, 0x8c, 0x6e, 0xfa, 0x18, 0x23, 0xc1, + 0x16, 0xf4, 0xcf, 0x2d, 0xb9, 0x5b, 0x60, 0x82, + 0xd3, 0x31, 0x0a, 0xe8, 0x7c, 0x9e, 0xa5, 0x47, + 0x90, 0x72, 0x49, 0xab, 0x3f, 0xdd, 0xe6, 0x04, + 0x66, 0x84, 0xbf, 0x5d, 0xc9, 0x2b, 0x10, 0xf2, + 0x25, 0xc7, 0xfc, 0x1e, 0x8a, 0x68, 0x53, 0xb1, + 0xe0, 0x02, 0x39, 0xdb, 0x4f, 0xad, 0x96, 0x74, + 0xa3, 0x41, 0x7a, 0x98, 0x0c, 0xee, 0xd5, 0x37, + 0x77, 0x95, 0xae, 0x4c, 0xd8, 0x3a, 0x01, 0xe3, + 0x34, 0xd6, 0xed, 0x0f, 0x9b, 0x79, 0x42, 0xa0, + 0xf1, 0x13, 0x28, 0xca, 0x5e, 0xbc, 0x87, 0x65, + 0xb2, 0x50, 0x6b, 0x89, 0x1d, 0xff, 0xc4, 0x26, + }, + { + 0x00, 0xe3, 0xdb, 0x38, 0xab, 0x48, 0x70, 0x93, + 0x4b, 0xa8, 0x90, 0x73, 0xe0, 0x03, 0x3b, 0xd8, + 0x96, 0x75, 0x4d, 0xae, 0x3d, 0xde, 0xe6, 0x05, + 0xdd, 0x3e, 0x06, 0xe5, 0x76, 0x95, 0xad, 0x4e, + 0x31, 0xd2, 0xea, 0x09, 0x9a, 0x79, 0x41, 0xa2, + 0x7a, 0x99, 0xa1, 0x42, 0xd1, 0x32, 0x0a, 0xe9, + 0xa7, 0x44, 0x7c, 0x9f, 0x0c, 0xef, 0xd7, 0x34, + 0xec, 0x0f, 0x37, 0xd4, 0x47, 0xa4, 0x9c, 0x7f, + 0x62, 0x81, 0xb9, 0x5a, 0xc9, 0x2a, 0x12, 0xf1, + 0x29, 0xca, 0xf2, 0x11, 0x82, 0x61, 0x59, 0xba, + 0xf4, 0x17, 0x2f, 0xcc, 0x5f, 0xbc, 0x84, 0x67, + 0xbf, 0x5c, 0x64, 0x87, 0x14, 0xf7, 0xcf, 0x2c, + 0x53, 0xb0, 0x88, 0x6b, 0xf8, 0x1b, 0x23, 0xc0, + 0x18, 0xfb, 0xc3, 0x20, 0xb3, 0x50, 0x68, 0x8b, + 0xc5, 0x26, 0x1e, 0xfd, 0x6e, 0x8d, 0xb5, 0x56, + 0x8e, 0x6d, 0x55, 0xb6, 0x25, 0xc6, 0xfe, 0x1d, + 0xc4, 0x27, 0x1f, 0xfc, 0x6f, 0x8c, 0xb4, 0x57, + 0x8f, 0x6c, 0x54, 0xb7, 0x24, 0xc7, 0xff, 0x1c, + 0x52, 0xb1, 0x89, 0x6a, 0xf9, 0x1a, 0x22, 0xc1, + 0x19, 0xfa, 0xc2, 0x21, 0xb2, 0x51, 0x69, 0x8a, + 0xf5, 0x16, 0x2e, 0xcd, 0x5e, 0xbd, 0x85, 0x66, + 0xbe, 0x5d, 0x65, 0x86, 0x15, 0xf6, 0xce, 0x2d, + 0x63, 0x80, 0xb8, 0x5b, 0xc8, 0x2b, 0x13, 0xf0, + 0x28, 0xcb, 0xf3, 0x10, 0x83, 0x60, 0x58, 0xbb, + 0xa6, 0x45, 0x7d, 0x9e, 0x0d, 0xee, 0xd6, 0x35, + 0xed, 0x0e, 0x36, 0xd5, 0x46, 0xa5, 0x9d, 0x7e, + 0x30, 0xd3, 0xeb, 0x08, 0x9b, 0x78, 0x40, 0xa3, + 0x7b, 0x98, 0xa0, 0x43, 0xd0, 0x33, 0x0b, 0xe8, + 0x97, 0x74, 0x4c, 0xaf, 0x3c, 0xdf, 0xe7, 0x04, + 0xdc, 0x3f, 0x07, 0xe4, 0x77, 0x94, 0xac, 0x4f, + 0x01, 0xe2, 0xda, 0x39, 0xaa, 0x49, 0x71, 0x92, + 0x4a, 0xa9, 0x91, 0x72, 0xe1, 0x02, 0x3a, 0xd9, + }, + { + 0x00, 0xe4, 0xd5, 0x31, 0xb7, 0x53, 0x62, 0x86, + 0x73, 0x97, 0xa6, 0x42, 0xc4, 0x20, 0x11, 0xf5, + 0xe6, 0x02, 0x33, 0xd7, 0x51, 0xb5, 0x84, 0x60, + 0x95, 0x71, 0x40, 0xa4, 0x22, 0xc6, 0xf7, 0x13, + 0xd1, 0x35, 0x04, 0xe0, 0x66, 0x82, 0xb3, 0x57, + 0xa2, 0x46, 0x77, 0x93, 0x15, 0xf1, 0xc0, 0x24, + 0x37, 0xd3, 0xe2, 0x06, 0x80, 0x64, 0x55, 0xb1, + 0x44, 0xa0, 0x91, 0x75, 0xf3, 0x17, 0x26, 0xc2, + 0xbf, 0x5b, 0x6a, 0x8e, 0x08, 0xec, 0xdd, 0x39, + 0xcc, 0x28, 0x19, 0xfd, 0x7b, 0x9f, 0xae, 0x4a, + 0x59, 0xbd, 0x8c, 0x68, 0xee, 0x0a, 0x3b, 0xdf, + 0x2a, 0xce, 0xff, 0x1b, 0x9d, 0x79, 0x48, 0xac, + 0x6e, 0x8a, 0xbb, 0x5f, 0xd9, 0x3d, 0x0c, 0xe8, + 0x1d, 0xf9, 0xc8, 0x2c, 0xaa, 0x4e, 0x7f, 0x9b, + 0x88, 0x6c, 0x5d, 0xb9, 0x3f, 0xdb, 0xea, 0x0e, + 0xfb, 0x1f, 0x2e, 0xca, 0x4c, 0xa8, 0x99, 0x7d, + 0x63, 0x87, 0xb6, 0x52, 0xd4, 0x30, 0x01, 0xe5, + 0x10, 0xf4, 0xc5, 0x21, 0xa7, 0x43, 0x72, 0x96, + 0x85, 0x61, 0x50, 0xb4, 0x32, 0xd6, 0xe7, 0x03, + 0xf6, 0x12, 0x23, 0xc7, 0x41, 0xa5, 0x94, 0x70, + 0xb2, 0x56, 0x67, 0x83, 0x05, 0xe1, 0xd0, 0x34, + 0xc1, 0x25, 0x14, 0xf0, 0x76, 0x92, 0xa3, 0x47, + 0x54, 0xb0, 0x81, 0x65, 0xe3, 0x07, 0x36, 0xd2, + 0x27, 0xc3, 0xf2, 0x16, 0x90, 0x74, 0x45, 0xa1, + 0xdc, 0x38, 0x09, 0xed, 0x6b, 0x8f, 0xbe, 0x5a, + 0xaf, 0x4b, 0x7a, 0x9e, 0x18, 0xfc, 0xcd, 0x29, + 0x3a, 0xde, 0xef, 0x0b, 0x8d, 0x69, 0x58, 0xbc, + 0x49, 0xad, 0x9c, 0x78, 0xfe, 0x1a, 0x2b, 0xcf, + 0x0d, 0xe9, 0xd8, 0x3c, 0xba, 0x5e, 0x6f, 0x8b, + 0x7e, 0x9a, 0xab, 0x4f, 0xc9, 0x2d, 0x1c, 0xf8, + 0xeb, 0x0f, 0x3e, 0xda, 0x5c, 0xb8, 0x89, 0x6d, + 0x98, 0x7c, 0x4d, 0xa9, 0x2f, 0xcb, 0xfa, 0x1e, + }, + { + 0x00, 0xe5, 0xd7, 0x32, 0xb3, 0x56, 0x64, 0x81, + 0x7b, 0x9e, 0xac, 0x49, 0xc8, 0x2d, 0x1f, 0xfa, + 0xf6, 0x13, 0x21, 0xc4, 0x45, 0xa0, 0x92, 0x77, + 0x8d, 0x68, 0x5a, 0xbf, 0x3e, 0xdb, 0xe9, 0x0c, + 0xf1, 0x14, 0x26, 0xc3, 0x42, 0xa7, 0x95, 0x70, + 0x8a, 0x6f, 0x5d, 0xb8, 0x39, 0xdc, 0xee, 0x0b, + 0x07, 0xe2, 0xd0, 0x35, 0xb4, 0x51, 0x63, 0x86, + 0x7c, 0x99, 0xab, 0x4e, 0xcf, 0x2a, 0x18, 0xfd, + 0xff, 0x1a, 0x28, 0xcd, 0x4c, 0xa9, 0x9b, 0x7e, + 0x84, 0x61, 0x53, 0xb6, 0x37, 0xd2, 0xe0, 0x05, + 0x09, 0xec, 0xde, 0x3b, 0xba, 0x5f, 0x6d, 0x88, + 0x72, 0x97, 0xa5, 0x40, 0xc1, 0x24, 0x16, 0xf3, + 0x0e, 0xeb, 0xd9, 0x3c, 0xbd, 0x58, 0x6a, 0x8f, + 0x75, 0x90, 0xa2, 0x47, 0xc6, 0x23, 0x11, 0xf4, + 0xf8, 0x1d, 0x2f, 0xca, 0x4b, 0xae, 0x9c, 0x79, + 0x83, 0x66, 0x54, 0xb1, 0x30, 0xd5, 0xe7, 0x02, + 0xe3, 0x06, 0x34, 0xd1, 0x50, 0xb5, 0x87, 0x62, + 0x98, 0x7d, 0x4f, 0xaa, 0x2b, 0xce, 0xfc, 0x19, + 0x15, 0xf0, 0xc2, 0x27, 0xa6, 0x43, 0x71, 0x94, + 0x6e, 0x8b, 0xb9, 0x5c, 0xdd, 0x38, 0x0a, 0xef, + 0x12, 0xf7, 0xc5, 0x20, 0xa1, 0x44, 0x76, 0x93, + 0x69, 0x8c, 0xbe, 0x5b, 0xda, 0x3f, 0x0d, 0xe8, + 0xe4, 0x01, 0x33, 0xd6, 0x57, 0xb2, 0x80, 0x65, + 0x9f, 0x7a, 0x48, 0xad, 0x2c, 0xc9, 0xfb, 0x1e, + 0x1c, 0xf9, 0xcb, 0x2e, 0xaf, 0x4a, 0x78, 0x9d, + 0x67, 0x82, 0xb0, 0x55, 0xd4, 0x31, 0x03, 0xe6, + 0xea, 0x0f, 0x3d, 0xd8, 0x59, 0xbc, 0x8e, 0x6b, + 0x91, 0x74, 0x46, 0xa3, 0x22, 0xc7, 0xf5, 0x10, + 0xed, 0x08, 0x3a, 0xdf, 0x5e, 0xbb, 0x89, 0x6c, + 0x96, 0x73, 0x41, 0xa4, 0x25, 0xc0, 0xf2, 0x17, + 0x1b, 0xfe, 0xcc, 0x29, 0xa8, 0x4d, 0x7f, 0x9a, + 0x60, 0x85, 0xb7, 0x52, 0xd3, 0x36, 0x04, 0xe1, + }, + { + 0x00, 0xe6, 0xd1, 0x37, 0xbf, 0x59, 0x6e, 0x88, + 0x63, 0x85, 0xb2, 0x54, 0xdc, 0x3a, 0x0d, 0xeb, + 0xc6, 0x20, 0x17, 0xf1, 0x79, 0x9f, 0xa8, 0x4e, + 0xa5, 0x43, 0x74, 0x92, 0x1a, 0xfc, 0xcb, 0x2d, + 0x91, 0x77, 0x40, 0xa6, 0x2e, 0xc8, 0xff, 0x19, + 0xf2, 0x14, 0x23, 0xc5, 0x4d, 0xab, 0x9c, 0x7a, + 0x57, 0xb1, 0x86, 0x60, 0xe8, 0x0e, 0x39, 0xdf, + 0x34, 0xd2, 0xe5, 0x03, 0x8b, 0x6d, 0x5a, 0xbc, + 0x3f, 0xd9, 0xee, 0x08, 0x80, 0x66, 0x51, 0xb7, + 0x5c, 0xba, 0x8d, 0x6b, 0xe3, 0x05, 0x32, 0xd4, + 0xf9, 0x1f, 0x28, 0xce, 0x46, 0xa0, 0x97, 0x71, + 0x9a, 0x7c, 0x4b, 0xad, 0x25, 0xc3, 0xf4, 0x12, + 0xae, 0x48, 0x7f, 0x99, 0x11, 0xf7, 0xc0, 0x26, + 0xcd, 0x2b, 0x1c, 0xfa, 0x72, 0x94, 0xa3, 0x45, + 0x68, 0x8e, 0xb9, 0x5f, 0xd7, 0x31, 0x06, 0xe0, + 0x0b, 0xed, 0xda, 0x3c, 0xb4, 0x52, 0x65, 0x83, + 0x7e, 0x98, 0xaf, 0x49, 0xc1, 0x27, 0x10, 0xf6, + 0x1d, 0xfb, 0xcc, 0x2a, 0xa2, 0x44, 0x73, 0x95, + 0xb8, 0x5e, 0x69, 0x8f, 0x07, 0xe1, 0xd6, 0x30, + 0xdb, 0x3d, 0x0a, 0xec, 0x64, 0x82, 0xb5, 0x53, + 0xef, 0x09, 0x3e, 0xd8, 0x50, 0xb6, 0x81, 0x67, + 0x8c, 0x6a, 0x5d, 0xbb, 0x33, 0xd5, 0xe2, 0x04, + 0x29, 0xcf, 0xf8, 0x1e, 0x96, 0x70, 0x47, 0xa1, + 0x4a, 0xac, 0x9b, 0x7d, 0xf5, 0x13, 0x24, 0xc2, + 0x41, 0xa7, 0x90, 0x76, 0xfe, 0x18, 0x2f, 0xc9, + 0x22, 0xc4, 0xf3, 0x15, 0x9d, 0x7b, 0x4c, 0xaa, + 0x87, 0x61, 0x56, 0xb0, 0x38, 0xde, 0xe9, 0x0f, + 0xe4, 0x02, 0x35, 0xd3, 0x5b, 0xbd, 0x8a, 0x6c, + 0xd0, 0x36, 0x01, 0xe7, 0x6f, 0x89, 0xbe, 0x58, + 0xb3, 0x55, 0x62, 0x84, 0x0c, 0xea, 0xdd, 0x3b, + 0x16, 0xf0, 0xc7, 0x21, 0xa9, 0x4f, 0x78, 0x9e, + 0x75, 0x93, 0xa4, 0x42, 0xca, 0x2c, 0x1b, 0xfd, + }, + { + 0x00, 0xe7, 0xd3, 0x34, 0xbb, 0x5c, 0x68, 0x8f, + 0x6b, 0x8c, 0xb8, 0x5f, 0xd0, 0x37, 0x03, 0xe4, + 0xd6, 0x31, 0x05, 0xe2, 0x6d, 0x8a, 0xbe, 0x59, + 0xbd, 0x5a, 0x6e, 0x89, 0x06, 0xe1, 0xd5, 0x32, + 0xb1, 0x56, 0x62, 0x85, 0x0a, 0xed, 0xd9, 0x3e, + 0xda, 0x3d, 0x09, 0xee, 0x61, 0x86, 0xb2, 0x55, + 0x67, 0x80, 0xb4, 0x53, 0xdc, 0x3b, 0x0f, 0xe8, + 0x0c, 0xeb, 0xdf, 0x38, 0xb7, 0x50, 0x64, 0x83, + 0x7f, 0x98, 0xac, 0x4b, 0xc4, 0x23, 0x17, 0xf0, + 0x14, 0xf3, 0xc7, 0x20, 0xaf, 0x48, 0x7c, 0x9b, + 0xa9, 0x4e, 0x7a, 0x9d, 0x12, 0xf5, 0xc1, 0x26, + 0xc2, 0x25, 0x11, 0xf6, 0x79, 0x9e, 0xaa, 0x4d, + 0xce, 0x29, 0x1d, 0xfa, 0x75, 0x92, 0xa6, 0x41, + 0xa5, 0x42, 0x76, 0x91, 0x1e, 0xf9, 0xcd, 0x2a, + 0x18, 0xff, 0xcb, 0x2c, 0xa3, 0x44, 0x70, 0x97, + 0x73, 0x94, 0xa0, 0x47, 0xc8, 0x2f, 0x1b, 0xfc, + 0xfe, 0x19, 0x2d, 0xca, 0x45, 0xa2, 0x96, 0x71, + 0x95, 0x72, 0x46, 0xa1, 0x2e, 0xc9, 0xfd, 0x1a, + 0x28, 0xcf, 0xfb, 0x1c, 0x93, 0x74, 0x40, 0xa7, + 0x43, 0xa4, 0x90, 0x77, 0xf8, 0x1f, 0x2b, 0xcc, + 0x4f, 0xa8, 0x9c, 0x7b, 0xf4, 0x13, 0x27, 0xc0, + 0x24, 0xc3, 0xf7, 0x10, 0x9f, 0x78, 0x4c, 0xab, + 0x99, 0x7e, 0x4a, 0xad, 0x22, 0xc5, 0xf1, 0x16, + 0xf2, 0x15, 0x21, 0xc6, 0x49, 0xae, 0x9a, 0x7d, + 0x81, 0x66, 0x52, 0xb5, 0x3a, 0xdd, 0xe9, 0x0e, + 0xea, 0x0d, 0x39, 0xde, 0x51, 0xb6, 0x82, 0x65, + 0x57, 0xb0, 0x84, 0x63, 0xec, 0x0b, 0x3f, 0xd8, + 0x3c, 0xdb, 0xef, 0x08, 0x87, 0x60, 0x54, 0xb3, + 0x30, 0xd7, 0xe3, 0x04, 0x8b, 0x6c, 0x58, 0xbf, + 0x5b, 0xbc, 0x88, 0x6f, 0xe0, 0x07, 0x33, 0xd4, + 0xe6, 0x01, 0x35, 0xd2, 0x5d, 0xba, 0x8e, 0x69, + 0x8d, 0x6a, 0x5e, 0xb9, 0x36, 0xd1, 0xe5, 0x02, + }, + { + 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, + 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1, + 0x26, 0xce, 0xeb, 0x03, 0xa1, 0x49, 0x6c, 0x84, + 0x35, 0xdd, 0xf8, 0x10, 0xb2, 0x5a, 0x7f, 0x97, + 0x4c, 0xa4, 0x81, 0x69, 0xcb, 0x23, 0x06, 0xee, + 0x5f, 0xb7, 0x92, 0x7a, 0xd8, 0x30, 0x15, 0xfd, + 0x6a, 0x82, 0xa7, 0x4f, 0xed, 0x05, 0x20, 0xc8, + 0x79, 0x91, 0xb4, 0x5c, 0xfe, 0x16, 0x33, 0xdb, + 0x98, 0x70, 0x55, 0xbd, 0x1f, 0xf7, 0xd2, 0x3a, + 0x8b, 0x63, 0x46, 0xae, 0x0c, 0xe4, 0xc1, 0x29, + 0xbe, 0x56, 0x73, 0x9b, 0x39, 0xd1, 0xf4, 0x1c, + 0xad, 0x45, 0x60, 0x88, 0x2a, 0xc2, 0xe7, 0x0f, + 0xd4, 0x3c, 0x19, 0xf1, 0x53, 0xbb, 0x9e, 0x76, + 0xc7, 0x2f, 0x0a, 0xe2, 0x40, 0xa8, 0x8d, 0x65, + 0xf2, 0x1a, 0x3f, 0xd7, 0x75, 0x9d, 0xb8, 0x50, + 0xe1, 0x09, 0x2c, 0xc4, 0x66, 0x8e, 0xab, 0x43, + 0x2d, 0xc5, 0xe0, 0x08, 0xaa, 0x42, 0x67, 0x8f, + 0x3e, 0xd6, 0xf3, 0x1b, 0xb9, 0x51, 0x74, 0x9c, + 0x0b, 0xe3, 0xc6, 0x2e, 0x8c, 0x64, 0x41, 0xa9, + 0x18, 0xf0, 0xd5, 0x3d, 0x9f, 0x77, 0x52, 0xba, + 0x61, 0x89, 0xac, 0x44, 0xe6, 0x0e, 0x2b, 0xc3, + 0x72, 0x9a, 0xbf, 0x57, 0xf5, 0x1d, 0x38, 0xd0, + 0x47, 0xaf, 0x8a, 0x62, 0xc0, 0x28, 0x0d, 0xe5, + 0x54, 0xbc, 0x99, 0x71, 0xd3, 0x3b, 0x1e, 0xf6, + 0xb5, 0x5d, 0x78, 0x90, 0x32, 0xda, 0xff, 0x17, + 0xa6, 0x4e, 0x6b, 0x83, 0x21, 0xc9, 0xec, 0x04, + 0x93, 0x7b, 0x5e, 0xb6, 0x14, 0xfc, 0xd9, 0x31, + 0x80, 0x68, 0x4d, 0xa5, 0x07, 0xef, 0xca, 0x22, + 0xf9, 0x11, 0x34, 0xdc, 0x7e, 0x96, 0xb3, 0x5b, + 0xea, 0x02, 0x27, 0xcf, 0x6d, 0x85, 0xa0, 0x48, + 0xdf, 0x37, 0x12, 0xfa, 0x58, 0xb0, 0x95, 0x7d, + 0xcc, 0x24, 0x01, 0xe9, 0x4b, 0xa3, 0x86, 0x6e, + }, + { + 0x00, 0xe9, 0xcf, 0x26, 0x83, 0x6a, 0x4c, 0xa5, + 0x1b, 0xf2, 0xd4, 0x3d, 0x98, 0x71, 0x57, 0xbe, + 0x36, 0xdf, 0xf9, 0x10, 0xb5, 0x5c, 0x7a, 0x93, + 0x2d, 0xc4, 0xe2, 0x0b, 0xae, 0x47, 0x61, 0x88, + 0x6c, 0x85, 0xa3, 0x4a, 0xef, 0x06, 0x20, 0xc9, + 0x77, 0x9e, 0xb8, 0x51, 0xf4, 0x1d, 0x3b, 0xd2, + 0x5a, 0xb3, 0x95, 0x7c, 0xd9, 0x30, 0x16, 0xff, + 0x41, 0xa8, 0x8e, 0x67, 0xc2, 0x2b, 0x0d, 0xe4, + 0xd8, 0x31, 0x17, 0xfe, 0x5b, 0xb2, 0x94, 0x7d, + 0xc3, 0x2a, 0x0c, 0xe5, 0x40, 0xa9, 0x8f, 0x66, + 0xee, 0x07, 0x21, 0xc8, 0x6d, 0x84, 0xa2, 0x4b, + 0xf5, 0x1c, 0x3a, 0xd3, 0x76, 0x9f, 0xb9, 0x50, + 0xb4, 0x5d, 0x7b, 0x92, 0x37, 0xde, 0xf8, 0x11, + 0xaf, 0x46, 0x60, 0x89, 0x2c, 0xc5, 0xe3, 0x0a, + 0x82, 0x6b, 0x4d, 0xa4, 0x01, 0xe8, 0xce, 0x27, + 0x99, 0x70, 0x56, 0xbf, 0x1a, 0xf3, 0xd5, 0x3c, + 0xad, 0x44, 0x62, 0x8b, 0x2e, 0xc7, 0xe1, 0x08, + 0xb6, 0x5f, 0x79, 0x90, 0x35, 0xdc, 0xfa, 0x13, + 0x9b, 0x72, 0x54, 0xbd, 0x18, 0xf1, 0xd7, 0x3e, + 0x80, 0x69, 0x4f, 0xa6, 0x03, 0xea, 0xcc, 0x25, + 0xc1, 0x28, 0x0e, 0xe7, 0x42, 0xab, 0x8d, 0x64, + 0xda, 0x33, 0x15, 0xfc, 0x59, 0xb0, 0x96, 0x7f, + 0xf7, 0x1e, 0x38, 0xd1, 0x74, 0x9d, 0xbb, 0x52, + 0xec, 0x05, 0x23, 0xca, 0x6f, 0x86, 0xa0, 0x49, + 0x75, 0x9c, 0xba, 0x53, 0xf6, 0x1f, 0x39, 0xd0, + 0x6e, 0x87, 0xa1, 0x48, 0xed, 0x04, 0x22, 0xcb, + 0x43, 0xaa, 0x8c, 0x65, 0xc0, 0x29, 0x0f, 0xe6, + 0x58, 0xb1, 0x97, 0x7e, 0xdb, 0x32, 0x14, 0xfd, + 0x19, 0xf0, 0xd6, 0x3f, 0x9a, 0x73, 0x55, 0xbc, + 0x02, 0xeb, 0xcd, 0x24, 0x81, 0x68, 0x4e, 0xa7, + 0x2f, 0xc6, 0xe0, 0x09, 0xac, 0x45, 0x63, 0x8a, + 0x34, 0xdd, 0xfb, 0x12, 0xb7, 0x5e, 0x78, 0x91, + }, + { + 0x00, 0xea, 0xc9, 0x23, 0x8f, 0x65, 0x46, 0xac, + 0x03, 0xe9, 0xca, 0x20, 0x8c, 0x66, 0x45, 0xaf, + 0x06, 0xec, 0xcf, 0x25, 0x89, 0x63, 0x40, 0xaa, + 0x05, 0xef, 0xcc, 0x26, 0x8a, 0x60, 0x43, 0xa9, + 0x0c, 0xe6, 0xc5, 0x2f, 0x83, 0x69, 0x4a, 0xa0, + 0x0f, 0xe5, 0xc6, 0x2c, 0x80, 0x6a, 0x49, 0xa3, + 0x0a, 0xe0, 0xc3, 0x29, 0x85, 0x6f, 0x4c, 0xa6, + 0x09, 0xe3, 0xc0, 0x2a, 0x86, 0x6c, 0x4f, 0xa5, + 0x18, 0xf2, 0xd1, 0x3b, 0x97, 0x7d, 0x5e, 0xb4, + 0x1b, 0xf1, 0xd2, 0x38, 0x94, 0x7e, 0x5d, 0xb7, + 0x1e, 0xf4, 0xd7, 0x3d, 0x91, 0x7b, 0x58, 0xb2, + 0x1d, 0xf7, 0xd4, 0x3e, 0x92, 0x78, 0x5b, 0xb1, + 0x14, 0xfe, 0xdd, 0x37, 0x9b, 0x71, 0x52, 0xb8, + 0x17, 0xfd, 0xde, 0x34, 0x98, 0x72, 0x51, 0xbb, + 0x12, 0xf8, 0xdb, 0x31, 0x9d, 0x77, 0x54, 0xbe, + 0x11, 0xfb, 0xd8, 0x32, 0x9e, 0x74, 0x57, 0xbd, + 0x30, 0xda, 0xf9, 0x13, 0xbf, 0x55, 0x76, 0x9c, + 0x33, 0xd9, 0xfa, 0x10, 0xbc, 0x56, 0x75, 0x9f, + 0x36, 0xdc, 0xff, 0x15, 0xb9, 0x53, 0x70, 0x9a, + 0x35, 0xdf, 0xfc, 0x16, 0xba, 0x50, 0x73, 0x99, + 0x3c, 0xd6, 0xf5, 0x1f, 0xb3, 0x59, 0x7a, 0x90, + 0x3f, 0xd5, 0xf6, 0x1c, 0xb0, 0x5a, 0x79, 0x93, + 0x3a, 0xd0, 0xf3, 0x19, 0xb5, 0x5f, 0x7c, 0x96, + 0x39, 0xd3, 0xf0, 0x1a, 0xb6, 0x5c, 0x7f, 0x95, + 0x28, 0xc2, 0xe1, 0x0b, 0xa7, 0x4d, 0x6e, 0x84, + 0x2b, 0xc1, 0xe2, 0x08, 0xa4, 0x4e, 0x6d, 0x87, + 0x2e, 0xc4, 0xe7, 0x0d, 0xa1, 0x4b, 0x68, 0x82, + 0x2d, 0xc7, 0xe4, 0x0e, 0xa2, 0x48, 0x6b, 0x81, + 0x24, 0xce, 0xed, 0x07, 0xab, 0x41, 0x62, 0x88, + 0x27, 0xcd, 0xee, 0x04, 0xa8, 0x42, 0x61, 0x8b, + 0x22, 0xc8, 0xeb, 0x01, 0xad, 0x47, 0x64, 0x8e, + 0x21, 0xcb, 0xe8, 0x02, 0xae, 0x44, 0x67, 0x8d, + }, + { + 0x00, 0xeb, 0xcb, 0x20, 0x8b, 0x60, 0x40, 0xab, + 0x0b, 0xe0, 0xc0, 0x2b, 0x80, 0x6b, 0x4b, 0xa0, + 0x16, 0xfd, 0xdd, 0x36, 0x9d, 0x76, 0x56, 0xbd, + 0x1d, 0xf6, 0xd6, 0x3d, 0x96, 0x7d, 0x5d, 0xb6, + 0x2c, 0xc7, 0xe7, 0x0c, 0xa7, 0x4c, 0x6c, 0x87, + 0x27, 0xcc, 0xec, 0x07, 0xac, 0x47, 0x67, 0x8c, + 0x3a, 0xd1, 0xf1, 0x1a, 0xb1, 0x5a, 0x7a, 0x91, + 0x31, 0xda, 0xfa, 0x11, 0xba, 0x51, 0x71, 0x9a, + 0x58, 0xb3, 0x93, 0x78, 0xd3, 0x38, 0x18, 0xf3, + 0x53, 0xb8, 0x98, 0x73, 0xd8, 0x33, 0x13, 0xf8, + 0x4e, 0xa5, 0x85, 0x6e, 0xc5, 0x2e, 0x0e, 0xe5, + 0x45, 0xae, 0x8e, 0x65, 0xce, 0x25, 0x05, 0xee, + 0x74, 0x9f, 0xbf, 0x54, 0xff, 0x14, 0x34, 0xdf, + 0x7f, 0x94, 0xb4, 0x5f, 0xf4, 0x1f, 0x3f, 0xd4, + 0x62, 0x89, 0xa9, 0x42, 0xe9, 0x02, 0x22, 0xc9, + 0x69, 0x82, 0xa2, 0x49, 0xe2, 0x09, 0x29, 0xc2, + 0xb0, 0x5b, 0x7b, 0x90, 0x3b, 0xd0, 0xf0, 0x1b, + 0xbb, 0x50, 0x70, 0x9b, 0x30, 0xdb, 0xfb, 0x10, + 0xa6, 0x4d, 0x6d, 0x86, 0x2d, 0xc6, 0xe6, 0x0d, + 0xad, 0x46, 0x66, 0x8d, 0x26, 0xcd, 0xed, 0x06, + 0x9c, 0x77, 0x57, 0xbc, 0x17, 0xfc, 0xdc, 0x37, + 0x97, 0x7c, 0x5c, 0xb7, 0x1c, 0xf7, 0xd7, 0x3c, + 0x8a, 0x61, 0x41, 0xaa, 0x01, 0xea, 0xca, 0x21, + 0x81, 0x6a, 0x4a, 0xa1, 0x0a, 0xe1, 0xc1, 0x2a, + 0xe8, 0x03, 0x23, 0xc8, 0x63, 0x88, 0xa8, 0x43, + 0xe3, 0x08, 0x28, 0xc3, 0x68, 0x83, 0xa3, 0x48, + 0xfe, 0x15, 0x35, 0xde, 0x75, 0x9e, 0xbe, 0x55, + 0xf5, 0x1e, 0x3e, 0xd5, 0x7e, 0x95, 0xb5, 0x5e, + 0xc4, 0x2f, 0x0f, 0xe4, 0x4f, 0xa4, 0x84, 0x6f, + 0xcf, 0x24, 0x04, 0xef, 0x44, 0xaf, 0x8f, 0x64, + 0xd2, 0x39, 0x19, 0xf2, 0x59, 0xb2, 0x92, 0x79, + 0xd9, 0x32, 0x12, 0xf9, 0x52, 0xb9, 0x99, 0x72, + }, + { + 0x00, 0xec, 0xc5, 0x29, 0x97, 0x7b, 0x52, 0xbe, + 0x33, 0xdf, 0xf6, 0x1a, 0xa4, 0x48, 0x61, 0x8d, + 0x66, 0x8a, 0xa3, 0x4f, 0xf1, 0x1d, 0x34, 0xd8, + 0x55, 0xb9, 0x90, 0x7c, 0xc2, 0x2e, 0x07, 0xeb, + 0xcc, 0x20, 0x09, 0xe5, 0x5b, 0xb7, 0x9e, 0x72, + 0xff, 0x13, 0x3a, 0xd6, 0x68, 0x84, 0xad, 0x41, + 0xaa, 0x46, 0x6f, 0x83, 0x3d, 0xd1, 0xf8, 0x14, + 0x99, 0x75, 0x5c, 0xb0, 0x0e, 0xe2, 0xcb, 0x27, + 0x85, 0x69, 0x40, 0xac, 0x12, 0xfe, 0xd7, 0x3b, + 0xb6, 0x5a, 0x73, 0x9f, 0x21, 0xcd, 0xe4, 0x08, + 0xe3, 0x0f, 0x26, 0xca, 0x74, 0x98, 0xb1, 0x5d, + 0xd0, 0x3c, 0x15, 0xf9, 0x47, 0xab, 0x82, 0x6e, + 0x49, 0xa5, 0x8c, 0x60, 0xde, 0x32, 0x1b, 0xf7, + 0x7a, 0x96, 0xbf, 0x53, 0xed, 0x01, 0x28, 0xc4, + 0x2f, 0xc3, 0xea, 0x06, 0xb8, 0x54, 0x7d, 0x91, + 0x1c, 0xf0, 0xd9, 0x35, 0x8b, 0x67, 0x4e, 0xa2, + 0x17, 0xfb, 0xd2, 0x3e, 0x80, 0x6c, 0x45, 0xa9, + 0x24, 0xc8, 0xe1, 0x0d, 0xb3, 0x5f, 0x76, 0x9a, + 0x71, 0x9d, 0xb4, 0x58, 0xe6, 0x0a, 0x23, 0xcf, + 0x42, 0xae, 0x87, 0x6b, 0xd5, 0x39, 0x10, 0xfc, + 0xdb, 0x37, 0x1e, 0xf2, 0x4c, 0xa0, 0x89, 0x65, + 0xe8, 0x04, 0x2d, 0xc1, 0x7f, 0x93, 0xba, 0x56, + 0xbd, 0x51, 0x78, 0x94, 0x2a, 0xc6, 0xef, 0x03, + 0x8e, 0x62, 0x4b, 0xa7, 0x19, 0xf5, 0xdc, 0x30, + 0x92, 0x7e, 0x57, 0xbb, 0x05, 0xe9, 0xc0, 0x2c, + 0xa1, 0x4d, 0x64, 0x88, 0x36, 0xda, 0xf3, 0x1f, + 0xf4, 0x18, 0x31, 0xdd, 0x63, 0x8f, 0xa6, 0x4a, + 0xc7, 0x2b, 0x02, 0xee, 0x50, 0xbc, 0x95, 0x79, + 0x5e, 0xb2, 0x9b, 0x77, 0xc9, 0x25, 0x0c, 0xe0, + 0x6d, 0x81, 0xa8, 0x44, 0xfa, 0x16, 0x3f, 0xd3, + 0x38, 0xd4, 0xfd, 0x11, 0xaf, 0x43, 0x6a, 0x86, + 0x0b, 0xe7, 0xce, 0x22, 0x9c, 0x70, 0x59, 0xb5, + }, + { + 0x00, 0xed, 0xc7, 0x2a, 0x93, 0x7e, 0x54, 0xb9, + 0x3b, 0xd6, 0xfc, 0x11, 0xa8, 0x45, 0x6f, 0x82, + 0x76, 0x9b, 0xb1, 0x5c, 0xe5, 0x08, 0x22, 0xcf, + 0x4d, 0xa0, 0x8a, 0x67, 0xde, 0x33, 0x19, 0xf4, + 0xec, 0x01, 0x2b, 0xc6, 0x7f, 0x92, 0xb8, 0x55, + 0xd7, 0x3a, 0x10, 0xfd, 0x44, 0xa9, 0x83, 0x6e, + 0x9a, 0x77, 0x5d, 0xb0, 0x09, 0xe4, 0xce, 0x23, + 0xa1, 0x4c, 0x66, 0x8b, 0x32, 0xdf, 0xf5, 0x18, + 0xc5, 0x28, 0x02, 0xef, 0x56, 0xbb, 0x91, 0x7c, + 0xfe, 0x13, 0x39, 0xd4, 0x6d, 0x80, 0xaa, 0x47, + 0xb3, 0x5e, 0x74, 0x99, 0x20, 0xcd, 0xe7, 0x0a, + 0x88, 0x65, 0x4f, 0xa2, 0x1b, 0xf6, 0xdc, 0x31, + 0x29, 0xc4, 0xee, 0x03, 0xba, 0x57, 0x7d, 0x90, + 0x12, 0xff, 0xd5, 0x38, 0x81, 0x6c, 0x46, 0xab, + 0x5f, 0xb2, 0x98, 0x75, 0xcc, 0x21, 0x0b, 0xe6, + 0x64, 0x89, 0xa3, 0x4e, 0xf7, 0x1a, 0x30, 0xdd, + 0x97, 0x7a, 0x50, 0xbd, 0x04, 0xe9, 0xc3, 0x2e, + 0xac, 0x41, 0x6b, 0x86, 0x3f, 0xd2, 0xf8, 0x15, + 0xe1, 0x0c, 0x26, 0xcb, 0x72, 0x9f, 0xb5, 0x58, + 0xda, 0x37, 0x1d, 0xf0, 0x49, 0xa4, 0x8e, 0x63, + 0x7b, 0x96, 0xbc, 0x51, 0xe8, 0x05, 0x2f, 0xc2, + 0x40, 0xad, 0x87, 0x6a, 0xd3, 0x3e, 0x14, 0xf9, + 0x0d, 0xe0, 0xca, 0x27, 0x9e, 0x73, 0x59, 0xb4, + 0x36, 0xdb, 0xf1, 0x1c, 0xa5, 0x48, 0x62, 0x8f, + 0x52, 0xbf, 0x95, 0x78, 0xc1, 0x2c, 0x06, 0xeb, + 0x69, 0x84, 0xae, 0x43, 0xfa, 0x17, 0x3d, 0xd0, + 0x24, 0xc9, 0xe3, 0x0e, 0xb7, 0x5a, 0x70, 0x9d, + 0x1f, 0xf2, 0xd8, 0x35, 0x8c, 0x61, 0x4b, 0xa6, + 0xbe, 0x53, 0x79, 0x94, 0x2d, 0xc0, 0xea, 0x07, + 0x85, 0x68, 0x42, 0xaf, 0x16, 0xfb, 0xd1, 0x3c, + 0xc8, 0x25, 0x0f, 0xe2, 0x5b, 0xb6, 0x9c, 0x71, + 0xf3, 0x1e, 0x34, 0xd9, 0x60, 0x8d, 0xa7, 0x4a, + }, + { + 0x00, 0xee, 0xc1, 0x2f, 0x9f, 0x71, 0x5e, 0xb0, + 0x23, 0xcd, 0xe2, 0x0c, 0xbc, 0x52, 0x7d, 0x93, + 0x46, 0xa8, 0x87, 0x69, 0xd9, 0x37, 0x18, 0xf6, + 0x65, 0x8b, 0xa4, 0x4a, 0xfa, 0x14, 0x3b, 0xd5, + 0x8c, 0x62, 0x4d, 0xa3, 0x13, 0xfd, 0xd2, 0x3c, + 0xaf, 0x41, 0x6e, 0x80, 0x30, 0xde, 0xf1, 0x1f, + 0xca, 0x24, 0x0b, 0xe5, 0x55, 0xbb, 0x94, 0x7a, + 0xe9, 0x07, 0x28, 0xc6, 0x76, 0x98, 0xb7, 0x59, + 0x05, 0xeb, 0xc4, 0x2a, 0x9a, 0x74, 0x5b, 0xb5, + 0x26, 0xc8, 0xe7, 0x09, 0xb9, 0x57, 0x78, 0x96, + 0x43, 0xad, 0x82, 0x6c, 0xdc, 0x32, 0x1d, 0xf3, + 0x60, 0x8e, 0xa1, 0x4f, 0xff, 0x11, 0x3e, 0xd0, + 0x89, 0x67, 0x48, 0xa6, 0x16, 0xf8, 0xd7, 0x39, + 0xaa, 0x44, 0x6b, 0x85, 0x35, 0xdb, 0xf4, 0x1a, + 0xcf, 0x21, 0x0e, 0xe0, 0x50, 0xbe, 0x91, 0x7f, + 0xec, 0x02, 0x2d, 0xc3, 0x73, 0x9d, 0xb2, 0x5c, + 0x0a, 0xe4, 0xcb, 0x25, 0x95, 0x7b, 0x54, 0xba, + 0x29, 0xc7, 0xe8, 0x06, 0xb6, 0x58, 0x77, 0x99, + 0x4c, 0xa2, 0x8d, 0x63, 0xd3, 0x3d, 0x12, 0xfc, + 0x6f, 0x81, 0xae, 0x40, 0xf0, 0x1e, 0x31, 0xdf, + 0x86, 0x68, 0x47, 0xa9, 0x19, 0xf7, 0xd8, 0x36, + 0xa5, 0x4b, 0x64, 0x8a, 0x3a, 0xd4, 0xfb, 0x15, + 0xc0, 0x2e, 0x01, 0xef, 0x5f, 0xb1, 0x9e, 0x70, + 0xe3, 0x0d, 0x22, 0xcc, 0x7c, 0x92, 0xbd, 0x53, + 0x0f, 0xe1, 0xce, 0x20, 0x90, 0x7e, 0x51, 0xbf, + 0x2c, 0xc2, 0xed, 0x03, 0xb3, 0x5d, 0x72, 0x9c, + 0x49, 0xa7, 0x88, 0x66, 0xd6, 0x38, 0x17, 0xf9, + 0x6a, 0x84, 0xab, 0x45, 0xf5, 0x1b, 0x34, 0xda, + 0x83, 0x6d, 0x42, 0xac, 0x1c, 0xf2, 0xdd, 0x33, + 0xa0, 0x4e, 0x61, 0x8f, 0x3f, 0xd1, 0xfe, 0x10, + 0xc5, 0x2b, 0x04, 0xea, 0x5a, 0xb4, 0x9b, 0x75, + 0xe6, 0x08, 0x27, 0xc9, 0x79, 0x97, 0xb8, 0x56, + }, + { + 0x00, 0xef, 0xc3, 0x2c, 0x9b, 0x74, 0x58, 0xb7, + 0x2b, 0xc4, 0xe8, 0x07, 0xb0, 0x5f, 0x73, 0x9c, + 0x56, 0xb9, 0x95, 0x7a, 0xcd, 0x22, 0x0e, 0xe1, + 0x7d, 0x92, 0xbe, 0x51, 0xe6, 0x09, 0x25, 0xca, + 0xac, 0x43, 0x6f, 0x80, 0x37, 0xd8, 0xf4, 0x1b, + 0x87, 0x68, 0x44, 0xab, 0x1c, 0xf3, 0xdf, 0x30, + 0xfa, 0x15, 0x39, 0xd6, 0x61, 0x8e, 0xa2, 0x4d, + 0xd1, 0x3e, 0x12, 0xfd, 0x4a, 0xa5, 0x89, 0x66, + 0x45, 0xaa, 0x86, 0x69, 0xde, 0x31, 0x1d, 0xf2, + 0x6e, 0x81, 0xad, 0x42, 0xf5, 0x1a, 0x36, 0xd9, + 0x13, 0xfc, 0xd0, 0x3f, 0x88, 0x67, 0x4b, 0xa4, + 0x38, 0xd7, 0xfb, 0x14, 0xa3, 0x4c, 0x60, 0x8f, + 0xe9, 0x06, 0x2a, 0xc5, 0x72, 0x9d, 0xb1, 0x5e, + 0xc2, 0x2d, 0x01, 0xee, 0x59, 0xb6, 0x9a, 0x75, + 0xbf, 0x50, 0x7c, 0x93, 0x24, 0xcb, 0xe7, 0x08, + 0x94, 0x7b, 0x57, 0xb8, 0x0f, 0xe0, 0xcc, 0x23, + 0x8a, 0x65, 0x49, 0xa6, 0x11, 0xfe, 0xd2, 0x3d, + 0xa1, 0x4e, 0x62, 0x8d, 0x3a, 0xd5, 0xf9, 0x16, + 0xdc, 0x33, 0x1f, 0xf0, 0x47, 0xa8, 0x84, 0x6b, + 0xf7, 0x18, 0x34, 0xdb, 0x6c, 0x83, 0xaf, 0x40, + 0x26, 0xc9, 0xe5, 0x0a, 0xbd, 0x52, 0x7e, 0x91, + 0x0d, 0xe2, 0xce, 0x21, 0x96, 0x79, 0x55, 0xba, + 0x70, 0x9f, 0xb3, 0x5c, 0xeb, 0x04, 0x28, 0xc7, + 0x5b, 0xb4, 0x98, 0x77, 0xc0, 0x2f, 0x03, 0xec, + 0xcf, 0x20, 0x0c, 0xe3, 0x54, 0xbb, 0x97, 0x78, + 0xe4, 0x0b, 0x27, 0xc8, 0x7f, 0x90, 0xbc, 0x53, + 0x99, 0x76, 0x5a, 0xb5, 0x02, 0xed, 0xc1, 0x2e, + 0xb2, 0x5d, 0x71, 0x9e, 0x29, 0xc6, 0xea, 0x05, + 0x63, 0x8c, 0xa0, 0x4f, 0xf8, 0x17, 0x3b, 0xd4, + 0x48, 0xa7, 0x8b, 0x64, 0xd3, 0x3c, 0x10, 0xff, + 0x35, 0xda, 0xf6, 0x19, 0xae, 0x41, 0x6d, 0x82, + 0x1e, 0xf1, 0xdd, 0x32, 0x85, 0x6a, 0x46, 0xa9, + }, + { + 0x00, 0xf0, 0xfd, 0x0d, 0xe7, 0x17, 0x1a, 0xea, + 0xd3, 0x23, 0x2e, 0xde, 0x34, 0xc4, 0xc9, 0x39, + 0xbb, 0x4b, 0x46, 0xb6, 0x5c, 0xac, 0xa1, 0x51, + 0x68, 0x98, 0x95, 0x65, 0x8f, 0x7f, 0x72, 0x82, + 0x6b, 0x9b, 0x96, 0x66, 0x8c, 0x7c, 0x71, 0x81, + 0xb8, 0x48, 0x45, 0xb5, 0x5f, 0xaf, 0xa2, 0x52, + 0xd0, 0x20, 0x2d, 0xdd, 0x37, 0xc7, 0xca, 0x3a, + 0x03, 0xf3, 0xfe, 0x0e, 0xe4, 0x14, 0x19, 0xe9, + 0xd6, 0x26, 0x2b, 0xdb, 0x31, 0xc1, 0xcc, 0x3c, + 0x05, 0xf5, 0xf8, 0x08, 0xe2, 0x12, 0x1f, 0xef, + 0x6d, 0x9d, 0x90, 0x60, 0x8a, 0x7a, 0x77, 0x87, + 0xbe, 0x4e, 0x43, 0xb3, 0x59, 0xa9, 0xa4, 0x54, + 0xbd, 0x4d, 0x40, 0xb0, 0x5a, 0xaa, 0xa7, 0x57, + 0x6e, 0x9e, 0x93, 0x63, 0x89, 0x79, 0x74, 0x84, + 0x06, 0xf6, 0xfb, 0x0b, 0xe1, 0x11, 0x1c, 0xec, + 0xd5, 0x25, 0x28, 0xd8, 0x32, 0xc2, 0xcf, 0x3f, + 0xb1, 0x41, 0x4c, 0xbc, 0x56, 0xa6, 0xab, 0x5b, + 0x62, 0x92, 0x9f, 0x6f, 0x85, 0x75, 0x78, 0x88, + 0x0a, 0xfa, 0xf7, 0x07, 0xed, 0x1d, 0x10, 0xe0, + 0xd9, 0x29, 0x24, 0xd4, 0x3e, 0xce, 0xc3, 0x33, + 0xda, 0x2a, 0x27, 0xd7, 0x3d, 0xcd, 0xc0, 0x30, + 0x09, 0xf9, 0xf4, 0x04, 0xee, 0x1e, 0x13, 0xe3, + 0x61, 0x91, 0x9c, 0x6c, 0x86, 0x76, 0x7b, 0x8b, + 0xb2, 0x42, 0x4f, 0xbf, 0x55, 0xa5, 0xa8, 0x58, + 0x67, 0x97, 0x9a, 0x6a, 0x80, 0x70, 0x7d, 0x8d, + 0xb4, 0x44, 0x49, 0xb9, 0x53, 0xa3, 0xae, 0x5e, + 0xdc, 0x2c, 0x21, 0xd1, 0x3b, 0xcb, 0xc6, 0x36, + 0x0f, 0xff, 0xf2, 0x02, 0xe8, 0x18, 0x15, 0xe5, + 0x0c, 0xfc, 0xf1, 0x01, 0xeb, 0x1b, 0x16, 0xe6, + 0xdf, 0x2f, 0x22, 0xd2, 0x38, 0xc8, 0xc5, 0x35, + 0xb7, 0x47, 0x4a, 0xba, 0x50, 0xa0, 0xad, 0x5d, + 0x64, 0x94, 0x99, 0x69, 0x83, 0x73, 0x7e, 0x8e, + }, + { + 0x00, 0xf1, 0xff, 0x0e, 0xe3, 0x12, 0x1c, 0xed, + 0xdb, 0x2a, 0x24, 0xd5, 0x38, 0xc9, 0xc7, 0x36, + 0xab, 0x5a, 0x54, 0xa5, 0x48, 0xb9, 0xb7, 0x46, + 0x70, 0x81, 0x8f, 0x7e, 0x93, 0x62, 0x6c, 0x9d, + 0x4b, 0xba, 0xb4, 0x45, 0xa8, 0x59, 0x57, 0xa6, + 0x90, 0x61, 0x6f, 0x9e, 0x73, 0x82, 0x8c, 0x7d, + 0xe0, 0x11, 0x1f, 0xee, 0x03, 0xf2, 0xfc, 0x0d, + 0x3b, 0xca, 0xc4, 0x35, 0xd8, 0x29, 0x27, 0xd6, + 0x96, 0x67, 0x69, 0x98, 0x75, 0x84, 0x8a, 0x7b, + 0x4d, 0xbc, 0xb2, 0x43, 0xae, 0x5f, 0x51, 0xa0, + 0x3d, 0xcc, 0xc2, 0x33, 0xde, 0x2f, 0x21, 0xd0, + 0xe6, 0x17, 0x19, 0xe8, 0x05, 0xf4, 0xfa, 0x0b, + 0xdd, 0x2c, 0x22, 0xd3, 0x3e, 0xcf, 0xc1, 0x30, + 0x06, 0xf7, 0xf9, 0x08, 0xe5, 0x14, 0x1a, 0xeb, + 0x76, 0x87, 0x89, 0x78, 0x95, 0x64, 0x6a, 0x9b, + 0xad, 0x5c, 0x52, 0xa3, 0x4e, 0xbf, 0xb1, 0x40, + 0x31, 0xc0, 0xce, 0x3f, 0xd2, 0x23, 0x2d, 0xdc, + 0xea, 0x1b, 0x15, 0xe4, 0x09, 0xf8, 0xf6, 0x07, + 0x9a, 0x6b, 0x65, 0x94, 0x79, 0x88, 0x86, 0x77, + 0x41, 0xb0, 0xbe, 0x4f, 0xa2, 0x53, 0x5d, 0xac, + 0x7a, 0x8b, 0x85, 0x74, 0x99, 0x68, 0x66, 0x97, + 0xa1, 0x50, 0x5e, 0xaf, 0x42, 0xb3, 0xbd, 0x4c, + 0xd1, 0x20, 0x2e, 0xdf, 0x32, 0xc3, 0xcd, 0x3c, + 0x0a, 0xfb, 0xf5, 0x04, 0xe9, 0x18, 0x16, 0xe7, + 0xa7, 0x56, 0x58, 0xa9, 0x44, 0xb5, 0xbb, 0x4a, + 0x7c, 0x8d, 0x83, 0x72, 0x9f, 0x6e, 0x60, 0x91, + 0x0c, 0xfd, 0xf3, 0x02, 0xef, 0x1e, 0x10, 0xe1, + 0xd7, 0x26, 0x28, 0xd9, 0x34, 0xc5, 0xcb, 0x3a, + 0xec, 0x1d, 0x13, 0xe2, 0x0f, 0xfe, 0xf0, 0x01, + 0x37, 0xc6, 0xc8, 0x39, 0xd4, 0x25, 0x2b, 0xda, + 0x47, 0xb6, 0xb8, 0x49, 0xa4, 0x55, 0x5b, 0xaa, + 0x9c, 0x6d, 0x63, 0x92, 0x7f, 0x8e, 0x80, 0x71, + }, + { + 0x00, 0xf2, 0xf9, 0x0b, 0xef, 0x1d, 0x16, 0xe4, + 0xc3, 0x31, 0x3a, 0xc8, 0x2c, 0xde, 0xd5, 0x27, + 0x9b, 0x69, 0x62, 0x90, 0x74, 0x86, 0x8d, 0x7f, + 0x58, 0xaa, 0xa1, 0x53, 0xb7, 0x45, 0x4e, 0xbc, + 0x2b, 0xd9, 0xd2, 0x20, 0xc4, 0x36, 0x3d, 0xcf, + 0xe8, 0x1a, 0x11, 0xe3, 0x07, 0xf5, 0xfe, 0x0c, + 0xb0, 0x42, 0x49, 0xbb, 0x5f, 0xad, 0xa6, 0x54, + 0x73, 0x81, 0x8a, 0x78, 0x9c, 0x6e, 0x65, 0x97, + 0x56, 0xa4, 0xaf, 0x5d, 0xb9, 0x4b, 0x40, 0xb2, + 0x95, 0x67, 0x6c, 0x9e, 0x7a, 0x88, 0x83, 0x71, + 0xcd, 0x3f, 0x34, 0xc6, 0x22, 0xd0, 0xdb, 0x29, + 0x0e, 0xfc, 0xf7, 0x05, 0xe1, 0x13, 0x18, 0xea, + 0x7d, 0x8f, 0x84, 0x76, 0x92, 0x60, 0x6b, 0x99, + 0xbe, 0x4c, 0x47, 0xb5, 0x51, 0xa3, 0xa8, 0x5a, + 0xe6, 0x14, 0x1f, 0xed, 0x09, 0xfb, 0xf0, 0x02, + 0x25, 0xd7, 0xdc, 0x2e, 0xca, 0x38, 0x33, 0xc1, + 0xac, 0x5e, 0x55, 0xa7, 0x43, 0xb1, 0xba, 0x48, + 0x6f, 0x9d, 0x96, 0x64, 0x80, 0x72, 0x79, 0x8b, + 0x37, 0xc5, 0xce, 0x3c, 0xd8, 0x2a, 0x21, 0xd3, + 0xf4, 0x06, 0x0d, 0xff, 0x1b, 0xe9, 0xe2, 0x10, + 0x87, 0x75, 0x7e, 0x8c, 0x68, 0x9a, 0x91, 0x63, + 0x44, 0xb6, 0xbd, 0x4f, 0xab, 0x59, 0x52, 0xa0, + 0x1c, 0xee, 0xe5, 0x17, 0xf3, 0x01, 0x0a, 0xf8, + 0xdf, 0x2d, 0x26, 0xd4, 0x30, 0xc2, 0xc9, 0x3b, + 0xfa, 0x08, 0x03, 0xf1, 0x15, 0xe7, 0xec, 0x1e, + 0x39, 0xcb, 0xc0, 0x32, 0xd6, 0x24, 0x2f, 0xdd, + 0x61, 0x93, 0x98, 0x6a, 0x8e, 0x7c, 0x77, 0x85, + 0xa2, 0x50, 0x5b, 0xa9, 0x4d, 0xbf, 0xb4, 0x46, + 0xd1, 0x23, 0x28, 0xda, 0x3e, 0xcc, 0xc7, 0x35, + 0x12, 0xe0, 0xeb, 0x19, 0xfd, 0x0f, 0x04, 0xf6, + 0x4a, 0xb8, 0xb3, 0x41, 0xa5, 0x57, 0x5c, 0xae, + 0x89, 0x7b, 0x70, 0x82, 0x66, 0x94, 0x9f, 0x6d, + }, + { + 0x00, 0xf3, 0xfb, 0x08, 0xeb, 0x18, 0x10, 0xe3, + 0xcb, 0x38, 0x30, 0xc3, 0x20, 0xd3, 0xdb, 0x28, + 0x8b, 0x78, 0x70, 0x83, 0x60, 0x93, 0x9b, 0x68, + 0x40, 0xb3, 0xbb, 0x48, 0xab, 0x58, 0x50, 0xa3, + 0x0b, 0xf8, 0xf0, 0x03, 0xe0, 0x13, 0x1b, 0xe8, + 0xc0, 0x33, 0x3b, 0xc8, 0x2b, 0xd8, 0xd0, 0x23, + 0x80, 0x73, 0x7b, 0x88, 0x6b, 0x98, 0x90, 0x63, + 0x4b, 0xb8, 0xb0, 0x43, 0xa0, 0x53, 0x5b, 0xa8, + 0x16, 0xe5, 0xed, 0x1e, 0xfd, 0x0e, 0x06, 0xf5, + 0xdd, 0x2e, 0x26, 0xd5, 0x36, 0xc5, 0xcd, 0x3e, + 0x9d, 0x6e, 0x66, 0x95, 0x76, 0x85, 0x8d, 0x7e, + 0x56, 0xa5, 0xad, 0x5e, 0xbd, 0x4e, 0x46, 0xb5, + 0x1d, 0xee, 0xe6, 0x15, 0xf6, 0x05, 0x0d, 0xfe, + 0xd6, 0x25, 0x2d, 0xde, 0x3d, 0xce, 0xc6, 0x35, + 0x96, 0x65, 0x6d, 0x9e, 0x7d, 0x8e, 0x86, 0x75, + 0x5d, 0xae, 0xa6, 0x55, 0xb6, 0x45, 0x4d, 0xbe, + 0x2c, 0xdf, 0xd7, 0x24, 0xc7, 0x34, 0x3c, 0xcf, + 0xe7, 0x14, 0x1c, 0xef, 0x0c, 0xff, 0xf7, 0x04, + 0xa7, 0x54, 0x5c, 0xaf, 0x4c, 0xbf, 0xb7, 0x44, + 0x6c, 0x9f, 0x97, 0x64, 0x87, 0x74, 0x7c, 0x8f, + 0x27, 0xd4, 0xdc, 0x2f, 0xcc, 0x3f, 0x37, 0xc4, + 0xec, 0x1f, 0x17, 0xe4, 0x07, 0xf4, 0xfc, 0x0f, + 0xac, 0x5f, 0x57, 0xa4, 0x47, 0xb4, 0xbc, 0x4f, + 0x67, 0x94, 0x9c, 0x6f, 0x8c, 0x7f, 0x77, 0x84, + 0x3a, 0xc9, 0xc1, 0x32, 0xd1, 0x22, 0x2a, 0xd9, + 0xf1, 0x02, 0x0a, 0xf9, 0x1a, 0xe9, 0xe1, 0x12, + 0xb1, 0x42, 0x4a, 0xb9, 0x5a, 0xa9, 0xa1, 0x52, + 0x7a, 0x89, 0x81, 0x72, 0x91, 0x62, 0x6a, 0x99, + 0x31, 0xc2, 0xca, 0x39, 0xda, 0x29, 0x21, 0xd2, + 0xfa, 0x09, 0x01, 0xf2, 0x11, 0xe2, 0xea, 0x19, + 0xba, 0x49, 0x41, 0xb2, 0x51, 0xa2, 0xaa, 0x59, + 0x71, 0x82, 0x8a, 0x79, 0x9a, 0x69, 0x61, 0x92, + }, + { + 0x00, 0xf4, 0xf5, 0x01, 0xf7, 0x03, 0x02, 0xf6, + 0xf3, 0x07, 0x06, 0xf2, 0x04, 0xf0, 0xf1, 0x05, + 0xfb, 0x0f, 0x0e, 0xfa, 0x0c, 0xf8, 0xf9, 0x0d, + 0x08, 0xfc, 0xfd, 0x09, 0xff, 0x0b, 0x0a, 0xfe, + 0xeb, 0x1f, 0x1e, 0xea, 0x1c, 0xe8, 0xe9, 0x1d, + 0x18, 0xec, 0xed, 0x19, 0xef, 0x1b, 0x1a, 0xee, + 0x10, 0xe4, 0xe5, 0x11, 0xe7, 0x13, 0x12, 0xe6, + 0xe3, 0x17, 0x16, 0xe2, 0x14, 0xe0, 0xe1, 0x15, + 0xcb, 0x3f, 0x3e, 0xca, 0x3c, 0xc8, 0xc9, 0x3d, + 0x38, 0xcc, 0xcd, 0x39, 0xcf, 0x3b, 0x3a, 0xce, + 0x30, 0xc4, 0xc5, 0x31, 0xc7, 0x33, 0x32, 0xc6, + 0xc3, 0x37, 0x36, 0xc2, 0x34, 0xc0, 0xc1, 0x35, + 0x20, 0xd4, 0xd5, 0x21, 0xd7, 0x23, 0x22, 0xd6, + 0xd3, 0x27, 0x26, 0xd2, 0x24, 0xd0, 0xd1, 0x25, + 0xdb, 0x2f, 0x2e, 0xda, 0x2c, 0xd8, 0xd9, 0x2d, + 0x28, 0xdc, 0xdd, 0x29, 0xdf, 0x2b, 0x2a, 0xde, + 0x8b, 0x7f, 0x7e, 0x8a, 0x7c, 0x88, 0x89, 0x7d, + 0x78, 0x8c, 0x8d, 0x79, 0x8f, 0x7b, 0x7a, 0x8e, + 0x70, 0x84, 0x85, 0x71, 0x87, 0x73, 0x72, 0x86, + 0x83, 0x77, 0x76, 0x82, 0x74, 0x80, 0x81, 0x75, + 0x60, 0x94, 0x95, 0x61, 0x97, 0x63, 0x62, 0x96, + 0x93, 0x67, 0x66, 0x92, 0x64, 0x90, 0x91, 0x65, + 0x9b, 0x6f, 0x6e, 0x9a, 0x6c, 0x98, 0x99, 0x6d, + 0x68, 0x9c, 0x9d, 0x69, 0x9f, 0x6b, 0x6a, 0x9e, + 0x40, 0xb4, 0xb5, 0x41, 0xb7, 0x43, 0x42, 0xb6, + 0xb3, 0x47, 0x46, 0xb2, 0x44, 0xb0, 0xb1, 0x45, + 0xbb, 0x4f, 0x4e, 0xba, 0x4c, 0xb8, 0xb9, 0x4d, + 0x48, 0xbc, 0xbd, 0x49, 0xbf, 0x4b, 0x4a, 0xbe, + 0xab, 0x5f, 0x5e, 0xaa, 0x5c, 0xa8, 0xa9, 0x5d, + 0x58, 0xac, 0xad, 0x59, 0xaf, 0x5b, 0x5a, 0xae, + 0x50, 0xa4, 0xa5, 0x51, 0xa7, 0x53, 0x52, 0xa6, + 0xa3, 0x57, 0x56, 0xa2, 0x54, 0xa0, 0xa1, 0x55, + }, + { + 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, + 0xfb, 0x0e, 0x0c, 0xf9, 0x08, 0xfd, 0xff, 0x0a, + 0xeb, 0x1e, 0x1c, 0xe9, 0x18, 0xed, 0xef, 0x1a, + 0x10, 0xe5, 0xe7, 0x12, 0xe3, 0x16, 0x14, 0xe1, + 0xcb, 0x3e, 0x3c, 0xc9, 0x38, 0xcd, 0xcf, 0x3a, + 0x30, 0xc5, 0xc7, 0x32, 0xc3, 0x36, 0x34, 0xc1, + 0x20, 0xd5, 0xd7, 0x22, 0xd3, 0x26, 0x24, 0xd1, + 0xdb, 0x2e, 0x2c, 0xd9, 0x28, 0xdd, 0xdf, 0x2a, + 0x8b, 0x7e, 0x7c, 0x89, 0x78, 0x8d, 0x8f, 0x7a, + 0x70, 0x85, 0x87, 0x72, 0x83, 0x76, 0x74, 0x81, + 0x60, 0x95, 0x97, 0x62, 0x93, 0x66, 0x64, 0x91, + 0x9b, 0x6e, 0x6c, 0x99, 0x68, 0x9d, 0x9f, 0x6a, + 0x40, 0xb5, 0xb7, 0x42, 0xb3, 0x46, 0x44, 0xb1, + 0xbb, 0x4e, 0x4c, 0xb9, 0x48, 0xbd, 0xbf, 0x4a, + 0xab, 0x5e, 0x5c, 0xa9, 0x58, 0xad, 0xaf, 0x5a, + 0x50, 0xa5, 0xa7, 0x52, 0xa3, 0x56, 0x54, 0xa1, + 0x0b, 0xfe, 0xfc, 0x09, 0xf8, 0x0d, 0x0f, 0xfa, + 0xf0, 0x05, 0x07, 0xf2, 0x03, 0xf6, 0xf4, 0x01, + 0xe0, 0x15, 0x17, 0xe2, 0x13, 0xe6, 0xe4, 0x11, + 0x1b, 0xee, 0xec, 0x19, 0xe8, 0x1d, 0x1f, 0xea, + 0xc0, 0x35, 0x37, 0xc2, 0x33, 0xc6, 0xc4, 0x31, + 0x3b, 0xce, 0xcc, 0x39, 0xc8, 0x3d, 0x3f, 0xca, + 0x2b, 0xde, 0xdc, 0x29, 0xd8, 0x2d, 0x2f, 0xda, + 0xd0, 0x25, 0x27, 0xd2, 0x23, 0xd6, 0xd4, 0x21, + 0x80, 0x75, 0x77, 0x82, 0x73, 0x86, 0x84, 0x71, + 0x7b, 0x8e, 0x8c, 0x79, 0x88, 0x7d, 0x7f, 0x8a, + 0x6b, 0x9e, 0x9c, 0x69, 0x98, 0x6d, 0x6f, 0x9a, + 0x90, 0x65, 0x67, 0x92, 0x63, 0x96, 0x94, 0x61, + 0x4b, 0xbe, 0xbc, 0x49, 0xb8, 0x4d, 0x4f, 0xba, + 0xb0, 0x45, 0x47, 0xb2, 0x43, 0xb6, 0xb4, 0x41, + 0xa0, 0x55, 0x57, 0xa2, 0x53, 0xa6, 0xa4, 0x51, + 0x5b, 0xae, 0xac, 0x59, 0xa8, 0x5d, 0x5f, 0xaa, + }, + { + 0x00, 0xf6, 0xf1, 0x07, 0xff, 0x09, 0x0e, 0xf8, + 0xe3, 0x15, 0x12, 0xe4, 0x1c, 0xea, 0xed, 0x1b, + 0xdb, 0x2d, 0x2a, 0xdc, 0x24, 0xd2, 0xd5, 0x23, + 0x38, 0xce, 0xc9, 0x3f, 0xc7, 0x31, 0x36, 0xc0, + 0xab, 0x5d, 0x5a, 0xac, 0x54, 0xa2, 0xa5, 0x53, + 0x48, 0xbe, 0xb9, 0x4f, 0xb7, 0x41, 0x46, 0xb0, + 0x70, 0x86, 0x81, 0x77, 0x8f, 0x79, 0x7e, 0x88, + 0x93, 0x65, 0x62, 0x94, 0x6c, 0x9a, 0x9d, 0x6b, + 0x4b, 0xbd, 0xba, 0x4c, 0xb4, 0x42, 0x45, 0xb3, + 0xa8, 0x5e, 0x59, 0xaf, 0x57, 0xa1, 0xa6, 0x50, + 0x90, 0x66, 0x61, 0x97, 0x6f, 0x99, 0x9e, 0x68, + 0x73, 0x85, 0x82, 0x74, 0x8c, 0x7a, 0x7d, 0x8b, + 0xe0, 0x16, 0x11, 0xe7, 0x1f, 0xe9, 0xee, 0x18, + 0x03, 0xf5, 0xf2, 0x04, 0xfc, 0x0a, 0x0d, 0xfb, + 0x3b, 0xcd, 0xca, 0x3c, 0xc4, 0x32, 0x35, 0xc3, + 0xd8, 0x2e, 0x29, 0xdf, 0x27, 0xd1, 0xd6, 0x20, + 0x96, 0x60, 0x67, 0x91, 0x69, 0x9f, 0x98, 0x6e, + 0x75, 0x83, 0x84, 0x72, 0x8a, 0x7c, 0x7b, 0x8d, + 0x4d, 0xbb, 0xbc, 0x4a, 0xb2, 0x44, 0x43, 0xb5, + 0xae, 0x58, 0x5f, 0xa9, 0x51, 0xa7, 0xa0, 0x56, + 0x3d, 0xcb, 0xcc, 0x3a, 0xc2, 0x34, 0x33, 0xc5, + 0xde, 0x28, 0x2f, 0xd9, 0x21, 0xd7, 0xd0, 0x26, + 0xe6, 0x10, 0x17, 0xe1, 0x19, 0xef, 0xe8, 0x1e, + 0x05, 0xf3, 0xf4, 0x02, 0xfa, 0x0c, 0x0b, 0xfd, + 0xdd, 0x2b, 0x2c, 0xda, 0x22, 0xd4, 0xd3, 0x25, + 0x3e, 0xc8, 0xcf, 0x39, 0xc1, 0x37, 0x30, 0xc6, + 0x06, 0xf0, 0xf7, 0x01, 0xf9, 0x0f, 0x08, 0xfe, + 0xe5, 0x13, 0x14, 0xe2, 0x1a, 0xec, 0xeb, 0x1d, + 0x76, 0x80, 0x87, 0x71, 0x89, 0x7f, 0x78, 0x8e, + 0x95, 0x63, 0x64, 0x92, 0x6a, 0x9c, 0x9b, 0x6d, + 0xad, 0x5b, 0x5c, 0xaa, 0x52, 0xa4, 0xa3, 0x55, + 0x4e, 0xb8, 0xbf, 0x49, 0xb1, 0x47, 0x40, 0xb6, + }, + { + 0x00, 0xf7, 0xf3, 0x04, 0xfb, 0x0c, 0x08, 0xff, + 0xeb, 0x1c, 0x18, 0xef, 0x10, 0xe7, 0xe3, 0x14, + 0xcb, 0x3c, 0x38, 0xcf, 0x30, 0xc7, 0xc3, 0x34, + 0x20, 0xd7, 0xd3, 0x24, 0xdb, 0x2c, 0x28, 0xdf, + 0x8b, 0x7c, 0x78, 0x8f, 0x70, 0x87, 0x83, 0x74, + 0x60, 0x97, 0x93, 0x64, 0x9b, 0x6c, 0x68, 0x9f, + 0x40, 0xb7, 0xb3, 0x44, 0xbb, 0x4c, 0x48, 0xbf, + 0xab, 0x5c, 0x58, 0xaf, 0x50, 0xa7, 0xa3, 0x54, + 0x0b, 0xfc, 0xf8, 0x0f, 0xf0, 0x07, 0x03, 0xf4, + 0xe0, 0x17, 0x13, 0xe4, 0x1b, 0xec, 0xe8, 0x1f, + 0xc0, 0x37, 0x33, 0xc4, 0x3b, 0xcc, 0xc8, 0x3f, + 0x2b, 0xdc, 0xd8, 0x2f, 0xd0, 0x27, 0x23, 0xd4, + 0x80, 0x77, 0x73, 0x84, 0x7b, 0x8c, 0x88, 0x7f, + 0x6b, 0x9c, 0x98, 0x6f, 0x90, 0x67, 0x63, 0x94, + 0x4b, 0xbc, 0xb8, 0x4f, 0xb0, 0x47, 0x43, 0xb4, + 0xa0, 0x57, 0x53, 0xa4, 0x5b, 0xac, 0xa8, 0x5f, + 0x16, 0xe1, 0xe5, 0x12, 0xed, 0x1a, 0x1e, 0xe9, + 0xfd, 0x0a, 0x0e, 0xf9, 0x06, 0xf1, 0xf5, 0x02, + 0xdd, 0x2a, 0x2e, 0xd9, 0x26, 0xd1, 0xd5, 0x22, + 0x36, 0xc1, 0xc5, 0x32, 0xcd, 0x3a, 0x3e, 0xc9, + 0x9d, 0x6a, 0x6e, 0x99, 0x66, 0x91, 0x95, 0x62, + 0x76, 0x81, 0x85, 0x72, 0x8d, 0x7a, 0x7e, 0x89, + 0x56, 0xa1, 0xa5, 0x52, 0xad, 0x5a, 0x5e, 0xa9, + 0xbd, 0x4a, 0x4e, 0xb9, 0x46, 0xb1, 0xb5, 0x42, + 0x1d, 0xea, 0xee, 0x19, 0xe6, 0x11, 0x15, 0xe2, + 0xf6, 0x01, 0x05, 0xf2, 0x0d, 0xfa, 0xfe, 0x09, + 0xd6, 0x21, 0x25, 0xd2, 0x2d, 0xda, 0xde, 0x29, + 0x3d, 0xca, 0xce, 0x39, 0xc6, 0x31, 0x35, 0xc2, + 0x96, 0x61, 0x65, 0x92, 0x6d, 0x9a, 0x9e, 0x69, + 0x7d, 0x8a, 0x8e, 0x79, 0x86, 0x71, 0x75, 0x82, + 0x5d, 0xaa, 0xae, 0x59, 0xa6, 0x51, 0x55, 0xa2, + 0xb6, 0x41, 0x45, 0xb2, 0x4d, 0xba, 0xbe, 0x49, + }, + { + 0x00, 0xf8, 0xed, 0x15, 0xc7, 0x3f, 0x2a, 0xd2, + 0x93, 0x6b, 0x7e, 0x86, 0x54, 0xac, 0xb9, 0x41, + 0x3b, 0xc3, 0xd6, 0x2e, 0xfc, 0x04, 0x11, 0xe9, + 0xa8, 0x50, 0x45, 0xbd, 0x6f, 0x97, 0x82, 0x7a, + 0x76, 0x8e, 0x9b, 0x63, 0xb1, 0x49, 0x5c, 0xa4, + 0xe5, 0x1d, 0x08, 0xf0, 0x22, 0xda, 0xcf, 0x37, + 0x4d, 0xb5, 0xa0, 0x58, 0x8a, 0x72, 0x67, 0x9f, + 0xde, 0x26, 0x33, 0xcb, 0x19, 0xe1, 0xf4, 0x0c, + 0xec, 0x14, 0x01, 0xf9, 0x2b, 0xd3, 0xc6, 0x3e, + 0x7f, 0x87, 0x92, 0x6a, 0xb8, 0x40, 0x55, 0xad, + 0xd7, 0x2f, 0x3a, 0xc2, 0x10, 0xe8, 0xfd, 0x05, + 0x44, 0xbc, 0xa9, 0x51, 0x83, 0x7b, 0x6e, 0x96, + 0x9a, 0x62, 0x77, 0x8f, 0x5d, 0xa5, 0xb0, 0x48, + 0x09, 0xf1, 0xe4, 0x1c, 0xce, 0x36, 0x23, 0xdb, + 0xa1, 0x59, 0x4c, 0xb4, 0x66, 0x9e, 0x8b, 0x73, + 0x32, 0xca, 0xdf, 0x27, 0xf5, 0x0d, 0x18, 0xe0, + 0xc5, 0x3d, 0x28, 0xd0, 0x02, 0xfa, 0xef, 0x17, + 0x56, 0xae, 0xbb, 0x43, 0x91, 0x69, 0x7c, 0x84, + 0xfe, 0x06, 0x13, 0xeb, 0x39, 0xc1, 0xd4, 0x2c, + 0x6d, 0x95, 0x80, 0x78, 0xaa, 0x52, 0x47, 0xbf, + 0xb3, 0x4b, 0x5e, 0xa6, 0x74, 0x8c, 0x99, 0x61, + 0x20, 0xd8, 0xcd, 0x35, 0xe7, 0x1f, 0x0a, 0xf2, + 0x88, 0x70, 0x65, 0x9d, 0x4f, 0xb7, 0xa2, 0x5a, + 0x1b, 0xe3, 0xf6, 0x0e, 0xdc, 0x24, 0x31, 0xc9, + 0x29, 0xd1, 0xc4, 0x3c, 0xee, 0x16, 0x03, 0xfb, + 0xba, 0x42, 0x57, 0xaf, 0x7d, 0x85, 0x90, 0x68, + 0x12, 0xea, 0xff, 0x07, 0xd5, 0x2d, 0x38, 0xc0, + 0x81, 0x79, 0x6c, 0x94, 0x46, 0xbe, 0xab, 0x53, + 0x5f, 0xa7, 0xb2, 0x4a, 0x98, 0x60, 0x75, 0x8d, + 0xcc, 0x34, 0x21, 0xd9, 0x0b, 0xf3, 0xe6, 0x1e, + 0x64, 0x9c, 0x89, 0x71, 0xa3, 0x5b, 0x4e, 0xb6, + 0xf7, 0x0f, 0x1a, 0xe2, 0x30, 0xc8, 0xdd, 0x25, + }, + { + 0x00, 0xf9, 0xef, 0x16, 0xc3, 0x3a, 0x2c, 0xd5, + 0x9b, 0x62, 0x74, 0x8d, 0x58, 0xa1, 0xb7, 0x4e, + 0x2b, 0xd2, 0xc4, 0x3d, 0xe8, 0x11, 0x07, 0xfe, + 0xb0, 0x49, 0x5f, 0xa6, 0x73, 0x8a, 0x9c, 0x65, + 0x56, 0xaf, 0xb9, 0x40, 0x95, 0x6c, 0x7a, 0x83, + 0xcd, 0x34, 0x22, 0xdb, 0x0e, 0xf7, 0xe1, 0x18, + 0x7d, 0x84, 0x92, 0x6b, 0xbe, 0x47, 0x51, 0xa8, + 0xe6, 0x1f, 0x09, 0xf0, 0x25, 0xdc, 0xca, 0x33, + 0xac, 0x55, 0x43, 0xba, 0x6f, 0x96, 0x80, 0x79, + 0x37, 0xce, 0xd8, 0x21, 0xf4, 0x0d, 0x1b, 0xe2, + 0x87, 0x7e, 0x68, 0x91, 0x44, 0xbd, 0xab, 0x52, + 0x1c, 0xe5, 0xf3, 0x0a, 0xdf, 0x26, 0x30, 0xc9, + 0xfa, 0x03, 0x15, 0xec, 0x39, 0xc0, 0xd6, 0x2f, + 0x61, 0x98, 0x8e, 0x77, 0xa2, 0x5b, 0x4d, 0xb4, + 0xd1, 0x28, 0x3e, 0xc7, 0x12, 0xeb, 0xfd, 0x04, + 0x4a, 0xb3, 0xa5, 0x5c, 0x89, 0x70, 0x66, 0x9f, + 0x45, 0xbc, 0xaa, 0x53, 0x86, 0x7f, 0x69, 0x90, + 0xde, 0x27, 0x31, 0xc8, 0x1d, 0xe4, 0xf2, 0x0b, + 0x6e, 0x97, 0x81, 0x78, 0xad, 0x54, 0x42, 0xbb, + 0xf5, 0x0c, 0x1a, 0xe3, 0x36, 0xcf, 0xd9, 0x20, + 0x13, 0xea, 0xfc, 0x05, 0xd0, 0x29, 0x3f, 0xc6, + 0x88, 0x71, 0x67, 0x9e, 0x4b, 0xb2, 0xa4, 0x5d, + 0x38, 0xc1, 0xd7, 0x2e, 0xfb, 0x02, 0x14, 0xed, + 0xa3, 0x5a, 0x4c, 0xb5, 0x60, 0x99, 0x8f, 0x76, + 0xe9, 0x10, 0x06, 0xff, 0x2a, 0xd3, 0xc5, 0x3c, + 0x72, 0x8b, 0x9d, 0x64, 0xb1, 0x48, 0x5e, 0xa7, + 0xc2, 0x3b, 0x2d, 0xd4, 0x01, 0xf8, 0xee, 0x17, + 0x59, 0xa0, 0xb6, 0x4f, 0x9a, 0x63, 0x75, 0x8c, + 0xbf, 0x46, 0x50, 0xa9, 0x7c, 0x85, 0x93, 0x6a, + 0x24, 0xdd, 0xcb, 0x32, 0xe7, 0x1e, 0x08, 0xf1, + 0x94, 0x6d, 0x7b, 0x82, 0x57, 0xae, 0xb8, 0x41, + 0x0f, 0xf6, 0xe0, 0x19, 0xcc, 0x35, 0x23, 0xda, + }, + { + 0x00, 0xfa, 0xe9, 0x13, 0xcf, 0x35, 0x26, 0xdc, + 0x83, 0x79, 0x6a, 0x90, 0x4c, 0xb6, 0xa5, 0x5f, + 0x1b, 0xe1, 0xf2, 0x08, 0xd4, 0x2e, 0x3d, 0xc7, + 0x98, 0x62, 0x71, 0x8b, 0x57, 0xad, 0xbe, 0x44, + 0x36, 0xcc, 0xdf, 0x25, 0xf9, 0x03, 0x10, 0xea, + 0xb5, 0x4f, 0x5c, 0xa6, 0x7a, 0x80, 0x93, 0x69, + 0x2d, 0xd7, 0xc4, 0x3e, 0xe2, 0x18, 0x0b, 0xf1, + 0xae, 0x54, 0x47, 0xbd, 0x61, 0x9b, 0x88, 0x72, + 0x6c, 0x96, 0x85, 0x7f, 0xa3, 0x59, 0x4a, 0xb0, + 0xef, 0x15, 0x06, 0xfc, 0x20, 0xda, 0xc9, 0x33, + 0x77, 0x8d, 0x9e, 0x64, 0xb8, 0x42, 0x51, 0xab, + 0xf4, 0x0e, 0x1d, 0xe7, 0x3b, 0xc1, 0xd2, 0x28, + 0x5a, 0xa0, 0xb3, 0x49, 0x95, 0x6f, 0x7c, 0x86, + 0xd9, 0x23, 0x30, 0xca, 0x16, 0xec, 0xff, 0x05, + 0x41, 0xbb, 0xa8, 0x52, 0x8e, 0x74, 0x67, 0x9d, + 0xc2, 0x38, 0x2b, 0xd1, 0x0d, 0xf7, 0xe4, 0x1e, + 0xd8, 0x22, 0x31, 0xcb, 0x17, 0xed, 0xfe, 0x04, + 0x5b, 0xa1, 0xb2, 0x48, 0x94, 0x6e, 0x7d, 0x87, + 0xc3, 0x39, 0x2a, 0xd0, 0x0c, 0xf6, 0xe5, 0x1f, + 0x40, 0xba, 0xa9, 0x53, 0x8f, 0x75, 0x66, 0x9c, + 0xee, 0x14, 0x07, 0xfd, 0x21, 0xdb, 0xc8, 0x32, + 0x6d, 0x97, 0x84, 0x7e, 0xa2, 0x58, 0x4b, 0xb1, + 0xf5, 0x0f, 0x1c, 0xe6, 0x3a, 0xc0, 0xd3, 0x29, + 0x76, 0x8c, 0x9f, 0x65, 0xb9, 0x43, 0x50, 0xaa, + 0xb4, 0x4e, 0x5d, 0xa7, 0x7b, 0x81, 0x92, 0x68, + 0x37, 0xcd, 0xde, 0x24, 0xf8, 0x02, 0x11, 0xeb, + 0xaf, 0x55, 0x46, 0xbc, 0x60, 0x9a, 0x89, 0x73, + 0x2c, 0xd6, 0xc5, 0x3f, 0xe3, 0x19, 0x0a, 0xf0, + 0x82, 0x78, 0x6b, 0x91, 0x4d, 0xb7, 0xa4, 0x5e, + 0x01, 0xfb, 0xe8, 0x12, 0xce, 0x34, 0x27, 0xdd, + 0x99, 0x63, 0x70, 0x8a, 0x56, 0xac, 0xbf, 0x45, + 0x1a, 0xe0, 0xf3, 0x09, 0xd5, 0x2f, 0x3c, 0xc6, + }, + { + 0x00, 0xfb, 0xeb, 0x10, 0xcb, 0x30, 0x20, 0xdb, + 0x8b, 0x70, 0x60, 0x9b, 0x40, 0xbb, 0xab, 0x50, + 0x0b, 0xf0, 0xe0, 0x1b, 0xc0, 0x3b, 0x2b, 0xd0, + 0x80, 0x7b, 0x6b, 0x90, 0x4b, 0xb0, 0xa0, 0x5b, + 0x16, 0xed, 0xfd, 0x06, 0xdd, 0x26, 0x36, 0xcd, + 0x9d, 0x66, 0x76, 0x8d, 0x56, 0xad, 0xbd, 0x46, + 0x1d, 0xe6, 0xf6, 0x0d, 0xd6, 0x2d, 0x3d, 0xc6, + 0x96, 0x6d, 0x7d, 0x86, 0x5d, 0xa6, 0xb6, 0x4d, + 0x2c, 0xd7, 0xc7, 0x3c, 0xe7, 0x1c, 0x0c, 0xf7, + 0xa7, 0x5c, 0x4c, 0xb7, 0x6c, 0x97, 0x87, 0x7c, + 0x27, 0xdc, 0xcc, 0x37, 0xec, 0x17, 0x07, 0xfc, + 0xac, 0x57, 0x47, 0xbc, 0x67, 0x9c, 0x8c, 0x77, + 0x3a, 0xc1, 0xd1, 0x2a, 0xf1, 0x0a, 0x1a, 0xe1, + 0xb1, 0x4a, 0x5a, 0xa1, 0x7a, 0x81, 0x91, 0x6a, + 0x31, 0xca, 0xda, 0x21, 0xfa, 0x01, 0x11, 0xea, + 0xba, 0x41, 0x51, 0xaa, 0x71, 0x8a, 0x9a, 0x61, + 0x58, 0xa3, 0xb3, 0x48, 0x93, 0x68, 0x78, 0x83, + 0xd3, 0x28, 0x38, 0xc3, 0x18, 0xe3, 0xf3, 0x08, + 0x53, 0xa8, 0xb8, 0x43, 0x98, 0x63, 0x73, 0x88, + 0xd8, 0x23, 0x33, 0xc8, 0x13, 0xe8, 0xf8, 0x03, + 0x4e, 0xb5, 0xa5, 0x5e, 0x85, 0x7e, 0x6e, 0x95, + 0xc5, 0x3e, 0x2e, 0xd5, 0x0e, 0xf5, 0xe5, 0x1e, + 0x45, 0xbe, 0xae, 0x55, 0x8e, 0x75, 0x65, 0x9e, + 0xce, 0x35, 0x25, 0xde, 0x05, 0xfe, 0xee, 0x15, + 0x74, 0x8f, 0x9f, 0x64, 0xbf, 0x44, 0x54, 0xaf, + 0xff, 0x04, 0x14, 0xef, 0x34, 0xcf, 0xdf, 0x24, + 0x7f, 0x84, 0x94, 0x6f, 0xb4, 0x4f, 0x5f, 0xa4, + 0xf4, 0x0f, 0x1f, 0xe4, 0x3f, 0xc4, 0xd4, 0x2f, + 0x62, 0x99, 0x89, 0x72, 0xa9, 0x52, 0x42, 0xb9, + 0xe9, 0x12, 0x02, 0xf9, 0x22, 0xd9, 0xc9, 0x32, + 0x69, 0x92, 0x82, 0x79, 0xa2, 0x59, 0x49, 0xb2, + 0xe2, 0x19, 0x09, 0xf2, 0x29, 0xd2, 0xc2, 0x39, + }, + { + 0x00, 0xfc, 0xe5, 0x19, 0xd7, 0x2b, 0x32, 0xce, + 0xb3, 0x4f, 0x56, 0xaa, 0x64, 0x98, 0x81, 0x7d, + 0x7b, 0x87, 0x9e, 0x62, 0xac, 0x50, 0x49, 0xb5, + 0xc8, 0x34, 0x2d, 0xd1, 0x1f, 0xe3, 0xfa, 0x06, + 0xf6, 0x0a, 0x13, 0xef, 0x21, 0xdd, 0xc4, 0x38, + 0x45, 0xb9, 0xa0, 0x5c, 0x92, 0x6e, 0x77, 0x8b, + 0x8d, 0x71, 0x68, 0x94, 0x5a, 0xa6, 0xbf, 0x43, + 0x3e, 0xc2, 0xdb, 0x27, 0xe9, 0x15, 0x0c, 0xf0, + 0xf1, 0x0d, 0x14, 0xe8, 0x26, 0xda, 0xc3, 0x3f, + 0x42, 0xbe, 0xa7, 0x5b, 0x95, 0x69, 0x70, 0x8c, + 0x8a, 0x76, 0x6f, 0x93, 0x5d, 0xa1, 0xb8, 0x44, + 0x39, 0xc5, 0xdc, 0x20, 0xee, 0x12, 0x0b, 0xf7, + 0x07, 0xfb, 0xe2, 0x1e, 0xd0, 0x2c, 0x35, 0xc9, + 0xb4, 0x48, 0x51, 0xad, 0x63, 0x9f, 0x86, 0x7a, + 0x7c, 0x80, 0x99, 0x65, 0xab, 0x57, 0x4e, 0xb2, + 0xcf, 0x33, 0x2a, 0xd6, 0x18, 0xe4, 0xfd, 0x01, + 0xff, 0x03, 0x1a, 0xe6, 0x28, 0xd4, 0xcd, 0x31, + 0x4c, 0xb0, 0xa9, 0x55, 0x9b, 0x67, 0x7e, 0x82, + 0x84, 0x78, 0x61, 0x9d, 0x53, 0xaf, 0xb6, 0x4a, + 0x37, 0xcb, 0xd2, 0x2e, 0xe0, 0x1c, 0x05, 0xf9, + 0x09, 0xf5, 0xec, 0x10, 0xde, 0x22, 0x3b, 0xc7, + 0xba, 0x46, 0x5f, 0xa3, 0x6d, 0x91, 0x88, 0x74, + 0x72, 0x8e, 0x97, 0x6b, 0xa5, 0x59, 0x40, 0xbc, + 0xc1, 0x3d, 0x24, 0xd8, 0x16, 0xea, 0xf3, 0x0f, + 0x0e, 0xf2, 0xeb, 0x17, 0xd9, 0x25, 0x3c, 0xc0, + 0xbd, 0x41, 0x58, 0xa4, 0x6a, 0x96, 0x8f, 0x73, + 0x75, 0x89, 0x90, 0x6c, 0xa2, 0x5e, 0x47, 0xbb, + 0xc6, 0x3a, 0x23, 0xdf, 0x11, 0xed, 0xf4, 0x08, + 0xf8, 0x04, 0x1d, 0xe1, 0x2f, 0xd3, 0xca, 0x36, + 0x4b, 0xb7, 0xae, 0x52, 0x9c, 0x60, 0x79, 0x85, + 0x83, 0x7f, 0x66, 0x9a, 0x54, 0xa8, 0xb1, 0x4d, + 0x30, 0xcc, 0xd5, 0x29, 0xe7, 0x1b, 0x02, 0xfe, + }, + { + 0x00, 0xfd, 0xe7, 0x1a, 0xd3, 0x2e, 0x34, 0xc9, + 0xbb, 0x46, 0x5c, 0xa1, 0x68, 0x95, 0x8f, 0x72, + 0x6b, 0x96, 0x8c, 0x71, 0xb8, 0x45, 0x5f, 0xa2, + 0xd0, 0x2d, 0x37, 0xca, 0x03, 0xfe, 0xe4, 0x19, + 0xd6, 0x2b, 0x31, 0xcc, 0x05, 0xf8, 0xe2, 0x1f, + 0x6d, 0x90, 0x8a, 0x77, 0xbe, 0x43, 0x59, 0xa4, + 0xbd, 0x40, 0x5a, 0xa7, 0x6e, 0x93, 0x89, 0x74, + 0x06, 0xfb, 0xe1, 0x1c, 0xd5, 0x28, 0x32, 0xcf, + 0xb1, 0x4c, 0x56, 0xab, 0x62, 0x9f, 0x85, 0x78, + 0x0a, 0xf7, 0xed, 0x10, 0xd9, 0x24, 0x3e, 0xc3, + 0xda, 0x27, 0x3d, 0xc0, 0x09, 0xf4, 0xee, 0x13, + 0x61, 0x9c, 0x86, 0x7b, 0xb2, 0x4f, 0x55, 0xa8, + 0x67, 0x9a, 0x80, 0x7d, 0xb4, 0x49, 0x53, 0xae, + 0xdc, 0x21, 0x3b, 0xc6, 0x0f, 0xf2, 0xe8, 0x15, + 0x0c, 0xf1, 0xeb, 0x16, 0xdf, 0x22, 0x38, 0xc5, + 0xb7, 0x4a, 0x50, 0xad, 0x64, 0x99, 0x83, 0x7e, + 0x7f, 0x82, 0x98, 0x65, 0xac, 0x51, 0x4b, 0xb6, + 0xc4, 0x39, 0x23, 0xde, 0x17, 0xea, 0xf0, 0x0d, + 0x14, 0xe9, 0xf3, 0x0e, 0xc7, 0x3a, 0x20, 0xdd, + 0xaf, 0x52, 0x48, 0xb5, 0x7c, 0x81, 0x9b, 0x66, + 0xa9, 0x54, 0x4e, 0xb3, 0x7a, 0x87, 0x9d, 0x60, + 0x12, 0xef, 0xf5, 0x08, 0xc1, 0x3c, 0x26, 0xdb, + 0xc2, 0x3f, 0x25, 0xd8, 0x11, 0xec, 0xf6, 0x0b, + 0x79, 0x84, 0x9e, 0x63, 0xaa, 0x57, 0x4d, 0xb0, + 0xce, 0x33, 0x29, 0xd4, 0x1d, 0xe0, 0xfa, 0x07, + 0x75, 0x88, 0x92, 0x6f, 0xa6, 0x5b, 0x41, 0xbc, + 0xa5, 0x58, 0x42, 0xbf, 0x76, 0x8b, 0x91, 0x6c, + 0x1e, 0xe3, 0xf9, 0x04, 0xcd, 0x30, 0x2a, 0xd7, + 0x18, 0xe5, 0xff, 0x02, 0xcb, 0x36, 0x2c, 0xd1, + 0xa3, 0x5e, 0x44, 0xb9, 0x70, 0x8d, 0x97, 0x6a, + 0x73, 0x8e, 0x94, 0x69, 0xa0, 0x5d, 0x47, 0xba, + 0xc8, 0x35, 0x2f, 0xd2, 0x1b, 0xe6, 0xfc, 0x01, + }, + { + 0x00, 0xfe, 0xe1, 0x1f, 0xdf, 0x21, 0x3e, 0xc0, + 0xa3, 0x5d, 0x42, 0xbc, 0x7c, 0x82, 0x9d, 0x63, + 0x5b, 0xa5, 0xba, 0x44, 0x84, 0x7a, 0x65, 0x9b, + 0xf8, 0x06, 0x19, 0xe7, 0x27, 0xd9, 0xc6, 0x38, + 0xb6, 0x48, 0x57, 0xa9, 0x69, 0x97, 0x88, 0x76, + 0x15, 0xeb, 0xf4, 0x0a, 0xca, 0x34, 0x2b, 0xd5, + 0xed, 0x13, 0x0c, 0xf2, 0x32, 0xcc, 0xd3, 0x2d, + 0x4e, 0xb0, 0xaf, 0x51, 0x91, 0x6f, 0x70, 0x8e, + 0x71, 0x8f, 0x90, 0x6e, 0xae, 0x50, 0x4f, 0xb1, + 0xd2, 0x2c, 0x33, 0xcd, 0x0d, 0xf3, 0xec, 0x12, + 0x2a, 0xd4, 0xcb, 0x35, 0xf5, 0x0b, 0x14, 0xea, + 0x89, 0x77, 0x68, 0x96, 0x56, 0xa8, 0xb7, 0x49, + 0xc7, 0x39, 0x26, 0xd8, 0x18, 0xe6, 0xf9, 0x07, + 0x64, 0x9a, 0x85, 0x7b, 0xbb, 0x45, 0x5a, 0xa4, + 0x9c, 0x62, 0x7d, 0x83, 0x43, 0xbd, 0xa2, 0x5c, + 0x3f, 0xc1, 0xde, 0x20, 0xe0, 0x1e, 0x01, 0xff, + 0xe2, 0x1c, 0x03, 0xfd, 0x3d, 0xc3, 0xdc, 0x22, + 0x41, 0xbf, 0xa0, 0x5e, 0x9e, 0x60, 0x7f, 0x81, + 0xb9, 0x47, 0x58, 0xa6, 0x66, 0x98, 0x87, 0x79, + 0x1a, 0xe4, 0xfb, 0x05, 0xc5, 0x3b, 0x24, 0xda, + 0x54, 0xaa, 0xb5, 0x4b, 0x8b, 0x75, 0x6a, 0x94, + 0xf7, 0x09, 0x16, 0xe8, 0x28, 0xd6, 0xc9, 0x37, + 0x0f, 0xf1, 0xee, 0x10, 0xd0, 0x2e, 0x31, 0xcf, + 0xac, 0x52, 0x4d, 0xb3, 0x73, 0x8d, 0x92, 0x6c, + 0x93, 0x6d, 0x72, 0x8c, 0x4c, 0xb2, 0xad, 0x53, + 0x30, 0xce, 0xd1, 0x2f, 0xef, 0x11, 0x0e, 0xf0, + 0xc8, 0x36, 0x29, 0xd7, 0x17, 0xe9, 0xf6, 0x08, + 0x6b, 0x95, 0x8a, 0x74, 0xb4, 0x4a, 0x55, 0xab, + 0x25, 0xdb, 0xc4, 0x3a, 0xfa, 0x04, 0x1b, 0xe5, + 0x86, 0x78, 0x67, 0x99, 0x59, 0xa7, 0xb8, 0x46, + 0x7e, 0x80, 0x9f, 0x61, 0xa1, 0x5f, 0x40, 0xbe, + 0xdd, 0x23, 0x3c, 0xc2, 0x02, 0xfc, 0xe3, 0x1d, + }, + { + 0x00, 0xff, 0xe3, 0x1c, 0xdb, 0x24, 0x38, 0xc7, + 0xab, 0x54, 0x48, 0xb7, 0x70, 0x8f, 0x93, 0x6c, + 0x4b, 0xb4, 0xa8, 0x57, 0x90, 0x6f, 0x73, 0x8c, + 0xe0, 0x1f, 0x03, 0xfc, 0x3b, 0xc4, 0xd8, 0x27, + 0x96, 0x69, 0x75, 0x8a, 0x4d, 0xb2, 0xae, 0x51, + 0x3d, 0xc2, 0xde, 0x21, 0xe6, 0x19, 0x05, 0xfa, + 0xdd, 0x22, 0x3e, 0xc1, 0x06, 0xf9, 0xe5, 0x1a, + 0x76, 0x89, 0x95, 0x6a, 0xad, 0x52, 0x4e, 0xb1, + 0x31, 0xce, 0xd2, 0x2d, 0xea, 0x15, 0x09, 0xf6, + 0x9a, 0x65, 0x79, 0x86, 0x41, 0xbe, 0xa2, 0x5d, + 0x7a, 0x85, 0x99, 0x66, 0xa1, 0x5e, 0x42, 0xbd, + 0xd1, 0x2e, 0x32, 0xcd, 0x0a, 0xf5, 0xe9, 0x16, + 0xa7, 0x58, 0x44, 0xbb, 0x7c, 0x83, 0x9f, 0x60, + 0x0c, 0xf3, 0xef, 0x10, 0xd7, 0x28, 0x34, 0xcb, + 0xec, 0x13, 0x0f, 0xf0, 0x37, 0xc8, 0xd4, 0x2b, + 0x47, 0xb8, 0xa4, 0x5b, 0x9c, 0x63, 0x7f, 0x80, + 0x62, 0x9d, 0x81, 0x7e, 0xb9, 0x46, 0x5a, 0xa5, + 0xc9, 0x36, 0x2a, 0xd5, 0x12, 0xed, 0xf1, 0x0e, + 0x29, 0xd6, 0xca, 0x35, 0xf2, 0x0d, 0x11, 0xee, + 0x82, 0x7d, 0x61, 0x9e, 0x59, 0xa6, 0xba, 0x45, + 0xf4, 0x0b, 0x17, 0xe8, 0x2f, 0xd0, 0xcc, 0x33, + 0x5f, 0xa0, 0xbc, 0x43, 0x84, 0x7b, 0x67, 0x98, + 0xbf, 0x40, 0x5c, 0xa3, 0x64, 0x9b, 0x87, 0x78, + 0x14, 0xeb, 0xf7, 0x08, 0xcf, 0x30, 0x2c, 0xd3, + 0x53, 0xac, 0xb0, 0x4f, 0x88, 0x77, 0x6b, 0x94, + 0xf8, 0x07, 0x1b, 0xe4, 0x23, 0xdc, 0xc0, 0x3f, + 0x18, 0xe7, 0xfb, 0x04, 0xc3, 0x3c, 0x20, 0xdf, + 0xb3, 0x4c, 0x50, 0xaf, 0x68, 0x97, 0x8b, 0x74, + 0xc5, 0x3a, 0x26, 0xd9, 0x1e, 0xe1, 0xfd, 0x02, + 0x6e, 0x91, 0x8d, 0x72, 0xb5, 0x4a, 0x56, 0xa9, + 0x8e, 0x71, 0x6d, 0x92, 0x55, 0xaa, 0xb6, 0x49, + 0x25, 0xda, 0xc6, 0x39, 0xfe, 0x01, 0x1d, 0xe2, + }, +}; + +const u8 __attribute__((aligned(256))) +raid6_vgfmul[256][32] = +{ + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 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, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0, + }, + { + 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, + 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x1d, 0x3d, 0x5d, 0x7d, 0x9d, 0xbd, 0xdd, 0xfd, + }, + { + 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, + 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11, + 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x9d, 0xad, 0xfd, 0xcd, 0x5d, 0x6d, 0x3d, 0x0d, + }, + { + 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, 0x18, 0x1c, + 0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c, + 0x00, 0x40, 0x80, 0xc0, 0x1d, 0x5d, 0x9d, 0xdd, + 0x3a, 0x7a, 0xba, 0xfa, 0x27, 0x67, 0xa7, 0xe7, + }, + { + 0x00, 0x05, 0x0a, 0x0f, 0x14, 0x11, 0x1e, 0x1b, + 0x28, 0x2d, 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33, + 0x00, 0x50, 0xa0, 0xf0, 0x5d, 0x0d, 0xfd, 0xad, + 0xba, 0xea, 0x1a, 0x4a, 0xe7, 0xb7, 0x47, 0x17, + }, + { + 0x00, 0x06, 0x0c, 0x0a, 0x18, 0x1e, 0x14, 0x12, + 0x30, 0x36, 0x3c, 0x3a, 0x28, 0x2e, 0x24, 0x22, + 0x00, 0x60, 0xc0, 0xa0, 0x9d, 0xfd, 0x5d, 0x3d, + 0x27, 0x47, 0xe7, 0x87, 0xba, 0xda, 0x7a, 0x1a, + }, + { + 0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, + 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, + 0x00, 0x70, 0xe0, 0x90, 0xdd, 0xad, 0x3d, 0x4d, + 0xa7, 0xd7, 0x47, 0x37, 0x7a, 0x0a, 0x9a, 0xea, + }, + { + 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, + 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78, + 0x00, 0x80, 0x1d, 0x9d, 0x3a, 0xba, 0x27, 0xa7, + 0x74, 0xf4, 0x69, 0xe9, 0x4e, 0xce, 0x53, 0xd3, + }, + { + 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, + 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, + 0x00, 0x90, 0x3d, 0xad, 0x7a, 0xea, 0x47, 0xd7, + 0xf4, 0x64, 0xc9, 0x59, 0x8e, 0x1e, 0xb3, 0x23, + }, + { + 0x00, 0x0a, 0x14, 0x1e, 0x28, 0x22, 0x3c, 0x36, + 0x50, 0x5a, 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66, + 0x00, 0xa0, 0x5d, 0xfd, 0xba, 0x1a, 0xe7, 0x47, + 0x69, 0xc9, 0x34, 0x94, 0xd3, 0x73, 0x8e, 0x2e, + }, + { + 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, + 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, + 0x00, 0xb0, 0x7d, 0xcd, 0xfa, 0x4a, 0x87, 0x37, + 0xe9, 0x59, 0x94, 0x24, 0x13, 0xa3, 0x6e, 0xde, + }, + { + 0x00, 0x0c, 0x18, 0x14, 0x30, 0x3c, 0x28, 0x24, + 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44, + 0x00, 0xc0, 0x9d, 0x5d, 0x27, 0xe7, 0xba, 0x7a, + 0x4e, 0x8e, 0xd3, 0x13, 0x69, 0xa9, 0xf4, 0x34, + }, + { + 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, + 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, + 0x00, 0xd0, 0xbd, 0x6d, 0x67, 0xb7, 0xda, 0x0a, + 0xce, 0x1e, 0x73, 0xa3, 0xa9, 0x79, 0x14, 0xc4, + }, + { + 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, + 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, + 0x00, 0xe0, 0xdd, 0x3d, 0xa7, 0x47, 0x7a, 0x9a, + 0x53, 0xb3, 0x8e, 0x6e, 0xf4, 0x14, 0x29, 0xc9, + }, + { + 0x00, 0x0f, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, + 0x78, 0x77, 0x66, 0x69, 0x44, 0x4b, 0x5a, 0x55, + 0x00, 0xf0, 0xfd, 0x0d, 0xe7, 0x17, 0x1a, 0xea, + 0xd3, 0x23, 0x2e, 0xde, 0x34, 0xc4, 0xc9, 0x39, + }, + { + 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0, + 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb, + }, + { + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, + 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, + 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, + }, + { + 0x00, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, + 0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee, + 0x00, 0x3d, 0x7a, 0x47, 0xf4, 0xc9, 0x8e, 0xb3, + 0xf5, 0xc8, 0x8f, 0xb2, 0x01, 0x3c, 0x7b, 0x46, + }, + { + 0x00, 0x13, 0x26, 0x35, 0x4c, 0x5f, 0x6a, 0x79, + 0x98, 0x8b, 0xbe, 0xad, 0xd4, 0xc7, 0xf2, 0xe1, + 0x00, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, + 0x75, 0x58, 0x2f, 0x02, 0xc1, 0xec, 0x9b, 0xb6, + }, + { + 0x00, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, + 0xa0, 0xb4, 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc, + 0x00, 0x5d, 0xba, 0xe7, 0x69, 0x34, 0xd3, 0x8e, + 0xd2, 0x8f, 0x68, 0x35, 0xbb, 0xe6, 0x01, 0x5c, + }, + { + 0x00, 0x15, 0x2a, 0x3f, 0x54, 0x41, 0x7e, 0x6b, + 0xa8, 0xbd, 0x82, 0x97, 0xfc, 0xe9, 0xd6, 0xc3, + 0x00, 0x4d, 0x9a, 0xd7, 0x29, 0x64, 0xb3, 0xfe, + 0x52, 0x1f, 0xc8, 0x85, 0x7b, 0x36, 0xe1, 0xac, + }, + { + 0x00, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, + 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2, + 0x00, 0x7d, 0xfa, 0x87, 0xe9, 0x94, 0x13, 0x6e, + 0xcf, 0xb2, 0x35, 0x48, 0x26, 0x5b, 0xdc, 0xa1, + }, + { + 0x00, 0x17, 0x2e, 0x39, 0x5c, 0x4b, 0x72, 0x65, + 0xb8, 0xaf, 0x96, 0x81, 0xe4, 0xf3, 0xca, 0xdd, + 0x00, 0x6d, 0xda, 0xb7, 0xa9, 0xc4, 0x73, 0x1e, + 0x4f, 0x22, 0x95, 0xf8, 0xe6, 0x8b, 0x3c, 0x51, + }, + { + 0x00, 0x18, 0x30, 0x28, 0x60, 0x78, 0x50, 0x48, + 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88, + 0x00, 0x9d, 0x27, 0xba, 0x4e, 0xd3, 0x69, 0xf4, + 0x9c, 0x01, 0xbb, 0x26, 0xd2, 0x4f, 0xf5, 0x68, + }, + { + 0x00, 0x19, 0x32, 0x2b, 0x64, 0x7d, 0x56, 0x4f, + 0xc8, 0xd1, 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87, + 0x00, 0x8d, 0x07, 0x8a, 0x0e, 0x83, 0x09, 0x84, + 0x1c, 0x91, 0x1b, 0x96, 0x12, 0x9f, 0x15, 0x98, + }, + { + 0x00, 0x1a, 0x34, 0x2e, 0x68, 0x72, 0x5c, 0x46, + 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, 0x8c, 0x96, + 0x00, 0xbd, 0x67, 0xda, 0xce, 0x73, 0xa9, 0x14, + 0x81, 0x3c, 0xe6, 0x5b, 0x4f, 0xf2, 0x28, 0x95, + }, + { + 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41, + 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99, + 0x00, 0xad, 0x47, 0xea, 0x8e, 0x23, 0xc9, 0x64, + 0x01, 0xac, 0x46, 0xeb, 0x8f, 0x22, 0xc8, 0x65, + }, + { + 0x00, 0x1c, 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, + 0xe0, 0xfc, 0xd8, 0xc4, 0x90, 0x8c, 0xa8, 0xb4, + 0x00, 0xdd, 0xa7, 0x7a, 0x53, 0x8e, 0xf4, 0x29, + 0xa6, 0x7b, 0x01, 0xdc, 0xf5, 0x28, 0x52, 0x8f, + }, + { + 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb, + 0x00, 0xcd, 0x87, 0x4a, 0x13, 0xde, 0x94, 0x59, + 0x26, 0xeb, 0xa1, 0x6c, 0x35, 0xf8, 0xb2, 0x7f, + }, + { + 0x00, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, + 0xf0, 0xee, 0xcc, 0xd2, 0x88, 0x96, 0xb4, 0xaa, + 0x00, 0xfd, 0xe7, 0x1a, 0xd3, 0x2e, 0x34, 0xc9, + 0xbb, 0x46, 0x5c, 0xa1, 0x68, 0x95, 0x8f, 0x72, + }, + { + 0x00, 0x1f, 0x3e, 0x21, 0x7c, 0x63, 0x42, 0x5d, + 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, 0xba, 0xa5, + 0x00, 0xed, 0xc7, 0x2a, 0x93, 0x7e, 0x54, 0xb9, + 0x3b, 0xd6, 0xfc, 0x11, 0xa8, 0x45, 0x6f, 0x82, + }, + { + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x1d, 0x3d, 0x5d, 0x7d, 0x9d, 0xbd, 0xdd, 0xfd, + 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b, + }, + { + 0x00, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, + 0x15, 0x34, 0x57, 0x76, 0x91, 0xb0, 0xd3, 0xf2, + 0x00, 0x2a, 0x54, 0x7e, 0xa8, 0x82, 0xfc, 0xd6, + 0x4d, 0x67, 0x19, 0x33, 0xe5, 0xcf, 0xb1, 0x9b, + }, + { + 0x00, 0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, + 0x0d, 0x2f, 0x49, 0x6b, 0x85, 0xa7, 0xc1, 0xe3, + 0x00, 0x1a, 0x34, 0x2e, 0x68, 0x72, 0x5c, 0x46, + 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, 0x8c, 0x96, + }, + { + 0x00, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, + 0x05, 0x26, 0x43, 0x60, 0x89, 0xaa, 0xcf, 0xec, + 0x00, 0x0a, 0x14, 0x1e, 0x28, 0x22, 0x3c, 0x36, + 0x50, 0x5a, 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66, + }, + { + 0x00, 0x24, 0x48, 0x6c, 0x90, 0xb4, 0xd8, 0xfc, + 0x3d, 0x19, 0x75, 0x51, 0xad, 0x89, 0xe5, 0xc1, + 0x00, 0x7a, 0xf4, 0x8e, 0xf5, 0x8f, 0x01, 0x7b, + 0xf7, 0x8d, 0x03, 0x79, 0x02, 0x78, 0xf6, 0x8c, + }, + { + 0x00, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, + 0x35, 0x10, 0x7f, 0x5a, 0xa1, 0x84, 0xeb, 0xce, + 0x00, 0x6a, 0xd4, 0xbe, 0xb5, 0xdf, 0x61, 0x0b, + 0x77, 0x1d, 0xa3, 0xc9, 0xc2, 0xa8, 0x16, 0x7c, + }, + { + 0x00, 0x26, 0x4c, 0x6a, 0x98, 0xbe, 0xd4, 0xf2, + 0x2d, 0x0b, 0x61, 0x47, 0xb5, 0x93, 0xf9, 0xdf, + 0x00, 0x5a, 0xb4, 0xee, 0x75, 0x2f, 0xc1, 0x9b, + 0xea, 0xb0, 0x5e, 0x04, 0x9f, 0xc5, 0x2b, 0x71, + }, + { + 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x25, 0x02, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0, + 0x00, 0x4a, 0x94, 0xde, 0x35, 0x7f, 0xa1, 0xeb, + 0x6a, 0x20, 0xfe, 0xb4, 0x5f, 0x15, 0xcb, 0x81, + }, + { + 0x00, 0x28, 0x50, 0x78, 0xa0, 0x88, 0xf0, 0xd8, + 0x5d, 0x75, 0x0d, 0x25, 0xfd, 0xd5, 0xad, 0x85, + 0x00, 0xba, 0x69, 0xd3, 0xd2, 0x68, 0xbb, 0x01, + 0xb9, 0x03, 0xd0, 0x6a, 0x6b, 0xd1, 0x02, 0xb8, + }, + { + 0x00, 0x29, 0x52, 0x7b, 0xa4, 0x8d, 0xf6, 0xdf, + 0x55, 0x7c, 0x07, 0x2e, 0xf1, 0xd8, 0xa3, 0x8a, + 0x00, 0xaa, 0x49, 0xe3, 0x92, 0x38, 0xdb, 0x71, + 0x39, 0x93, 0x70, 0xda, 0xab, 0x01, 0xe2, 0x48, + }, + { + 0x00, 0x2a, 0x54, 0x7e, 0xa8, 0x82, 0xfc, 0xd6, + 0x4d, 0x67, 0x19, 0x33, 0xe5, 0xcf, 0xb1, 0x9b, + 0x00, 0x9a, 0x29, 0xb3, 0x52, 0xc8, 0x7b, 0xe1, + 0xa4, 0x3e, 0x8d, 0x17, 0xf6, 0x6c, 0xdf, 0x45, + }, + { + 0x00, 0x2b, 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, + 0x45, 0x6e, 0x13, 0x38, 0xe9, 0xc2, 0xbf, 0x94, + 0x00, 0x8a, 0x09, 0x83, 0x12, 0x98, 0x1b, 0x91, + 0x24, 0xae, 0x2d, 0xa7, 0x36, 0xbc, 0x3f, 0xb5, + }, + { + 0x00, 0x2c, 0x58, 0x74, 0xb0, 0x9c, 0xe8, 0xc4, + 0x7d, 0x51, 0x25, 0x09, 0xcd, 0xe1, 0x95, 0xb9, + 0x00, 0xfa, 0xe9, 0x13, 0xcf, 0x35, 0x26, 0xdc, + 0x83, 0x79, 0x6a, 0x90, 0x4c, 0xb6, 0xa5, 0x5f, + }, + { + 0x00, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, + 0x75, 0x58, 0x2f, 0x02, 0xc1, 0xec, 0x9b, 0xb6, + 0x00, 0xea, 0xc9, 0x23, 0x8f, 0x65, 0x46, 0xac, + 0x03, 0xe9, 0xca, 0x20, 0x8c, 0x66, 0x45, 0xaf, + }, + { + 0x00, 0x2e, 0x5c, 0x72, 0xb8, 0x96, 0xe4, 0xca, + 0x6d, 0x43, 0x31, 0x1f, 0xd5, 0xfb, 0x89, 0xa7, + 0x00, 0xda, 0xa9, 0x73, 0x4f, 0x95, 0xe6, 0x3c, + 0x9e, 0x44, 0x37, 0xed, 0xd1, 0x0b, 0x78, 0xa2, + }, + { + 0x00, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, + 0x65, 0x4a, 0x3b, 0x14, 0xd9, 0xf6, 0x87, 0xa8, + 0x00, 0xca, 0x89, 0x43, 0x0f, 0xc5, 0x86, 0x4c, + 0x1e, 0xd4, 0x97, 0x5d, 0x11, 0xdb, 0x98, 0x52, + }, + { + 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x9d, 0xad, 0xfd, 0xcd, 0x5d, 0x6d, 0x3d, 0x0d, + 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x25, 0x02, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0, + }, + { + 0x00, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, + 0x95, 0xa4, 0xf7, 0xc6, 0x51, 0x60, 0x33, 0x02, + 0x00, 0x37, 0x6e, 0x59, 0xdc, 0xeb, 0xb2, 0x85, + 0xa5, 0x92, 0xcb, 0xfc, 0x79, 0x4e, 0x17, 0x20, + }, + { + 0x00, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, + 0x8d, 0xbf, 0xe9, 0xdb, 0x45, 0x77, 0x21, 0x13, + 0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, + 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, + }, + { + 0x00, 0x33, 0x66, 0x55, 0xcc, 0xff, 0xaa, 0x99, + 0x85, 0xb6, 0xe3, 0xd0, 0x49, 0x7a, 0x2f, 0x1c, + 0x00, 0x17, 0x2e, 0x39, 0x5c, 0x4b, 0x72, 0x65, + 0xb8, 0xaf, 0x96, 0x81, 0xe4, 0xf3, 0xca, 0xdd, + }, + { + 0x00, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, + 0xbd, 0x89, 0xd5, 0xe1, 0x6d, 0x59, 0x05, 0x31, + 0x00, 0x67, 0xce, 0xa9, 0x81, 0xe6, 0x4f, 0x28, + 0x1f, 0x78, 0xd1, 0xb6, 0x9e, 0xf9, 0x50, 0x37, + }, + { + 0x00, 0x35, 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, 0x8b, + 0xb5, 0x80, 0xdf, 0xea, 0x61, 0x54, 0x0b, 0x3e, + 0x00, 0x77, 0xee, 0x99, 0xc1, 0xb6, 0x2f, 0x58, + 0x9f, 0xe8, 0x71, 0x06, 0x5e, 0x29, 0xb0, 0xc7, + }, + { + 0x00, 0x36, 0x6c, 0x5a, 0xd8, 0xee, 0xb4, 0x82, + 0xad, 0x9b, 0xc1, 0xf7, 0x75, 0x43, 0x19, 0x2f, + 0x00, 0x47, 0x8e, 0xc9, 0x01, 0x46, 0x8f, 0xc8, + 0x02, 0x45, 0x8c, 0xcb, 0x03, 0x44, 0x8d, 0xca, + }, + { + 0x00, 0x37, 0x6e, 0x59, 0xdc, 0xeb, 0xb2, 0x85, + 0xa5, 0x92, 0xcb, 0xfc, 0x79, 0x4e, 0x17, 0x20, + 0x00, 0x57, 0xae, 0xf9, 0x41, 0x16, 0xef, 0xb8, + 0x82, 0xd5, 0x2c, 0x7b, 0xc3, 0x94, 0x6d, 0x3a, + }, + { + 0x00, 0x38, 0x70, 0x48, 0xe0, 0xd8, 0x90, 0xa8, + 0xdd, 0xe5, 0xad, 0x95, 0x3d, 0x05, 0x4d, 0x75, + 0x00, 0xa7, 0x53, 0xf4, 0xa6, 0x01, 0xf5, 0x52, + 0x51, 0xf6, 0x02, 0xa5, 0xf7, 0x50, 0xa4, 0x03, + }, + { + 0x00, 0x39, 0x72, 0x4b, 0xe4, 0xdd, 0x96, 0xaf, + 0xd5, 0xec, 0xa7, 0x9e, 0x31, 0x08, 0x43, 0x7a, + 0x00, 0xb7, 0x73, 0xc4, 0xe6, 0x51, 0x95, 0x22, + 0xd1, 0x66, 0xa2, 0x15, 0x37, 0x80, 0x44, 0xf3, + }, + { + 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b, + 0x00, 0x87, 0x13, 0x94, 0x26, 0xa1, 0x35, 0xb2, + 0x4c, 0xcb, 0x5f, 0xd8, 0x6a, 0xed, 0x79, 0xfe, + }, + { + 0x00, 0x3b, 0x76, 0x4d, 0xec, 0xd7, 0x9a, 0xa1, + 0xc5, 0xfe, 0xb3, 0x88, 0x29, 0x12, 0x5f, 0x64, + 0x00, 0x97, 0x33, 0xa4, 0x66, 0xf1, 0x55, 0xc2, + 0xcc, 0x5b, 0xff, 0x68, 0xaa, 0x3d, 0x99, 0x0e, + }, + { + 0x00, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, + 0xfd, 0xc1, 0x85, 0xb9, 0x0d, 0x31, 0x75, 0x49, + 0x00, 0xe7, 0xd3, 0x34, 0xbb, 0x5c, 0x68, 0x8f, + 0x6b, 0x8c, 0xb8, 0x5f, 0xd0, 0x37, 0x03, 0xe4, + }, + { + 0x00, 0x3d, 0x7a, 0x47, 0xf4, 0xc9, 0x8e, 0xb3, + 0xf5, 0xc8, 0x8f, 0xb2, 0x01, 0x3c, 0x7b, 0x46, + 0x00, 0xf7, 0xf3, 0x04, 0xfb, 0x0c, 0x08, 0xff, + 0xeb, 0x1c, 0x18, 0xef, 0x10, 0xe7, 0xe3, 0x14, + }, + { + 0x00, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, + 0xed, 0xd3, 0x91, 0xaf, 0x15, 0x2b, 0x69, 0x57, + 0x00, 0xc7, 0x93, 0x54, 0x3b, 0xfc, 0xa8, 0x6f, + 0x76, 0xb1, 0xe5, 0x22, 0x4d, 0x8a, 0xde, 0x19, + }, + { + 0x00, 0x3f, 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, + 0xe5, 0xda, 0x9b, 0xa4, 0x19, 0x26, 0x67, 0x58, + 0x00, 0xd7, 0xb3, 0x64, 0x7b, 0xac, 0xc8, 0x1f, + 0xf6, 0x21, 0x45, 0x92, 0x8d, 0x5a, 0x3e, 0xe9, + }, + { + 0x00, 0x40, 0x80, 0xc0, 0x1d, 0x5d, 0x9d, 0xdd, + 0x3a, 0x7a, 0xba, 0xfa, 0x27, 0x67, 0xa7, 0xe7, + 0x00, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, + 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6, + }, + { + 0x00, 0x41, 0x82, 0xc3, 0x19, 0x58, 0x9b, 0xda, + 0x32, 0x73, 0xb0, 0xf1, 0x2b, 0x6a, 0xa9, 0xe8, + 0x00, 0x64, 0xc8, 0xac, 0x8d, 0xe9, 0x45, 0x21, + 0x07, 0x63, 0xcf, 0xab, 0x8a, 0xee, 0x42, 0x26, + }, + { + 0x00, 0x42, 0x84, 0xc6, 0x15, 0x57, 0x91, 0xd3, + 0x2a, 0x68, 0xae, 0xec, 0x3f, 0x7d, 0xbb, 0xf9, + 0x00, 0x54, 0xa8, 0xfc, 0x4d, 0x19, 0xe5, 0xb1, + 0x9a, 0xce, 0x32, 0x66, 0xd7, 0x83, 0x7f, 0x2b, + }, + { + 0x00, 0x43, 0x86, 0xc5, 0x11, 0x52, 0x97, 0xd4, + 0x22, 0x61, 0xa4, 0xe7, 0x33, 0x70, 0xb5, 0xf6, + 0x00, 0x44, 0x88, 0xcc, 0x0d, 0x49, 0x85, 0xc1, + 0x1a, 0x5e, 0x92, 0xd6, 0x17, 0x53, 0x9f, 0xdb, + }, + { + 0x00, 0x44, 0x88, 0xcc, 0x0d, 0x49, 0x85, 0xc1, + 0x1a, 0x5e, 0x92, 0xd6, 0x17, 0x53, 0x9f, 0xdb, + 0x00, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, + 0xbd, 0x89, 0xd5, 0xe1, 0x6d, 0x59, 0x05, 0x31, + }, + { + 0x00, 0x45, 0x8a, 0xcf, 0x09, 0x4c, 0x83, 0xc6, + 0x12, 0x57, 0x98, 0xdd, 0x1b, 0x5e, 0x91, 0xd4, + 0x00, 0x24, 0x48, 0x6c, 0x90, 0xb4, 0xd8, 0xfc, + 0x3d, 0x19, 0x75, 0x51, 0xad, 0x89, 0xe5, 0xc1, + }, + { + 0x00, 0x46, 0x8c, 0xca, 0x05, 0x43, 0x89, 0xcf, + 0x0a, 0x4c, 0x86, 0xc0, 0x0f, 0x49, 0x83, 0xc5, + 0x00, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, + 0xa0, 0xb4, 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc, + }, + { + 0x00, 0x47, 0x8e, 0xc9, 0x01, 0x46, 0x8f, 0xc8, + 0x02, 0x45, 0x8c, 0xcb, 0x03, 0x44, 0x8d, 0xca, + 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, 0x18, 0x1c, + 0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c, + }, + { + 0x00, 0x48, 0x90, 0xd8, 0x3d, 0x75, 0xad, 0xe5, + 0x7a, 0x32, 0xea, 0xa2, 0x47, 0x0f, 0xd7, 0x9f, + 0x00, 0xf4, 0xf5, 0x01, 0xf7, 0x03, 0x02, 0xf6, + 0xf3, 0x07, 0x06, 0xf2, 0x04, 0xf0, 0xf1, 0x05, + }, + { + 0x00, 0x49, 0x92, 0xdb, 0x39, 0x70, 0xab, 0xe2, + 0x72, 0x3b, 0xe0, 0xa9, 0x4b, 0x02, 0xd9, 0x90, + 0x00, 0xe4, 0xd5, 0x31, 0xb7, 0x53, 0x62, 0x86, + 0x73, 0x97, 0xa6, 0x42, 0xc4, 0x20, 0x11, 0xf5, + }, + { + 0x00, 0x4a, 0x94, 0xde, 0x35, 0x7f, 0xa1, 0xeb, + 0x6a, 0x20, 0xfe, 0xb4, 0x5f, 0x15, 0xcb, 0x81, + 0x00, 0xd4, 0xb5, 0x61, 0x77, 0xa3, 0xc2, 0x16, + 0xee, 0x3a, 0x5b, 0x8f, 0x99, 0x4d, 0x2c, 0xf8, + }, + { + 0x00, 0x4b, 0x96, 0xdd, 0x31, 0x7a, 0xa7, 0xec, + 0x62, 0x29, 0xf4, 0xbf, 0x53, 0x18, 0xc5, 0x8e, + 0x00, 0xc4, 0x95, 0x51, 0x37, 0xf3, 0xa2, 0x66, + 0x6e, 0xaa, 0xfb, 0x3f, 0x59, 0x9d, 0xcc, 0x08, + }, + { + 0x00, 0x4c, 0x98, 0xd4, 0x2d, 0x61, 0xb5, 0xf9, + 0x5a, 0x16, 0xc2, 0x8e, 0x77, 0x3b, 0xef, 0xa3, + 0x00, 0xb4, 0x75, 0xc1, 0xea, 0x5e, 0x9f, 0x2b, + 0xc9, 0x7d, 0xbc, 0x08, 0x23, 0x97, 0x56, 0xe2, + }, + { + 0x00, 0x4d, 0x9a, 0xd7, 0x29, 0x64, 0xb3, 0xfe, + 0x52, 0x1f, 0xc8, 0x85, 0x7b, 0x36, 0xe1, 0xac, + 0x00, 0xa4, 0x55, 0xf1, 0xaa, 0x0e, 0xff, 0x5b, + 0x49, 0xed, 0x1c, 0xb8, 0xe3, 0x47, 0xb6, 0x12, + }, + { + 0x00, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, + 0x4a, 0x04, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd, + 0x00, 0x94, 0x35, 0xa1, 0x6a, 0xfe, 0x5f, 0xcb, + 0xd4, 0x40, 0xe1, 0x75, 0xbe, 0x2a, 0x8b, 0x1f, + }, + { + 0x00, 0x4f, 0x9e, 0xd1, 0x21, 0x6e, 0xbf, 0xf0, + 0x42, 0x0d, 0xdc, 0x93, 0x63, 0x2c, 0xfd, 0xb2, + 0x00, 0x84, 0x15, 0x91, 0x2a, 0xae, 0x3f, 0xbb, + 0x54, 0xd0, 0x41, 0xc5, 0x7e, 0xfa, 0x6b, 0xef, + }, + { + 0x00, 0x50, 0xa0, 0xf0, 0x5d, 0x0d, 0xfd, 0xad, + 0xba, 0xea, 0x1a, 0x4a, 0xe7, 0xb7, 0x47, 0x17, + 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, + 0x6f, 0x06, 0xbd, 0xd4, 0xd6, 0xbf, 0x04, 0x6d, + }, + { + 0x00, 0x51, 0xa2, 0xf3, 0x59, 0x08, 0xfb, 0xaa, + 0xb2, 0xe3, 0x10, 0x41, 0xeb, 0xba, 0x49, 0x18, + 0x00, 0x79, 0xf2, 0x8b, 0xf9, 0x80, 0x0b, 0x72, + 0xef, 0x96, 0x1d, 0x64, 0x16, 0x6f, 0xe4, 0x9d, + }, + { + 0x00, 0x52, 0xa4, 0xf6, 0x55, 0x07, 0xf1, 0xa3, + 0xaa, 0xf8, 0x0e, 0x5c, 0xff, 0xad, 0x5b, 0x09, + 0x00, 0x49, 0x92, 0xdb, 0x39, 0x70, 0xab, 0xe2, + 0x72, 0x3b, 0xe0, 0xa9, 0x4b, 0x02, 0xd9, 0x90, + }, + { + 0x00, 0x53, 0xa6, 0xf5, 0x51, 0x02, 0xf7, 0xa4, + 0xa2, 0xf1, 0x04, 0x57, 0xf3, 0xa0, 0x55, 0x06, + 0x00, 0x59, 0xb2, 0xeb, 0x79, 0x20, 0xcb, 0x92, + 0xf2, 0xab, 0x40, 0x19, 0x8b, 0xd2, 0x39, 0x60, + }, + { + 0x00, 0x54, 0xa8, 0xfc, 0x4d, 0x19, 0xe5, 0xb1, + 0x9a, 0xce, 0x32, 0x66, 0xd7, 0x83, 0x7f, 0x2b, + 0x00, 0x29, 0x52, 0x7b, 0xa4, 0x8d, 0xf6, 0xdf, + 0x55, 0x7c, 0x07, 0x2e, 0xf1, 0xd8, 0xa3, 0x8a, + }, + { + 0x00, 0x55, 0xaa, 0xff, 0x49, 0x1c, 0xe3, 0xb6, + 0x92, 0xc7, 0x38, 0x6d, 0xdb, 0x8e, 0x71, 0x24, + 0x00, 0x39, 0x72, 0x4b, 0xe4, 0xdd, 0x96, 0xaf, + 0xd5, 0xec, 0xa7, 0x9e, 0x31, 0x08, 0x43, 0x7a, + }, + { + 0x00, 0x56, 0xac, 0xfa, 0x45, 0x13, 0xe9, 0xbf, + 0x8a, 0xdc, 0x26, 0x70, 0xcf, 0x99, 0x63, 0x35, + 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, + 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, + }, + { + 0x00, 0x57, 0xae, 0xf9, 0x41, 0x16, 0xef, 0xb8, + 0x82, 0xd5, 0x2c, 0x7b, 0xc3, 0x94, 0x6d, 0x3a, + 0x00, 0x19, 0x32, 0x2b, 0x64, 0x7d, 0x56, 0x4f, + 0xc8, 0xd1, 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87, + }, + { + 0x00, 0x58, 0xb0, 0xe8, 0x7d, 0x25, 0xcd, 0x95, + 0xfa, 0xa2, 0x4a, 0x12, 0x87, 0xdf, 0x37, 0x6f, + 0x00, 0xe9, 0xcf, 0x26, 0x83, 0x6a, 0x4c, 0xa5, + 0x1b, 0xf2, 0xd4, 0x3d, 0x98, 0x71, 0x57, 0xbe, + }, + { + 0x00, 0x59, 0xb2, 0xeb, 0x79, 0x20, 0xcb, 0x92, + 0xf2, 0xab, 0x40, 0x19, 0x8b, 0xd2, 0x39, 0x60, + 0x00, 0xf9, 0xef, 0x16, 0xc3, 0x3a, 0x2c, 0xd5, + 0x9b, 0x62, 0x74, 0x8d, 0x58, 0xa1, 0xb7, 0x4e, + }, + { + 0x00, 0x5a, 0xb4, 0xee, 0x75, 0x2f, 0xc1, 0x9b, + 0xea, 0xb0, 0x5e, 0x04, 0x9f, 0xc5, 0x2b, 0x71, + 0x00, 0xc9, 0x8f, 0x46, 0x03, 0xca, 0x8c, 0x45, + 0x06, 0xcf, 0x89, 0x40, 0x05, 0xcc, 0x8a, 0x43, + }, + { + 0x00, 0x5b, 0xb6, 0xed, 0x71, 0x2a, 0xc7, 0x9c, + 0xe2, 0xb9, 0x54, 0x0f, 0x93, 0xc8, 0x25, 0x7e, + 0x00, 0xd9, 0xaf, 0x76, 0x43, 0x9a, 0xec, 0x35, + 0x86, 0x5f, 0x29, 0xf0, 0xc5, 0x1c, 0x6a, 0xb3, + }, + { + 0x00, 0x5c, 0xb8, 0xe4, 0x6d, 0x31, 0xd5, 0x89, + 0xda, 0x86, 0x62, 0x3e, 0xb7, 0xeb, 0x0f, 0x53, + 0x00, 0xa9, 0x4f, 0xe6, 0x9e, 0x37, 0xd1, 0x78, + 0x21, 0x88, 0x6e, 0xc7, 0xbf, 0x16, 0xf0, 0x59, + }, + { + 0x00, 0x5d, 0xba, 0xe7, 0x69, 0x34, 0xd3, 0x8e, + 0xd2, 0x8f, 0x68, 0x35, 0xbb, 0xe6, 0x01, 0x5c, + 0x00, 0xb9, 0x6f, 0xd6, 0xde, 0x67, 0xb1, 0x08, + 0xa1, 0x18, 0xce, 0x77, 0x7f, 0xc6, 0x10, 0xa9, + }, + { + 0x00, 0x5e, 0xbc, 0xe2, 0x65, 0x3b, 0xd9, 0x87, + 0xca, 0x94, 0x76, 0x28, 0xaf, 0xf1, 0x13, 0x4d, + 0x00, 0x89, 0x0f, 0x86, 0x1e, 0x97, 0x11, 0x98, + 0x3c, 0xb5, 0x33, 0xba, 0x22, 0xab, 0x2d, 0xa4, + }, + { + 0x00, 0x5f, 0xbe, 0xe1, 0x61, 0x3e, 0xdf, 0x80, + 0xc2, 0x9d, 0x7c, 0x23, 0xa3, 0xfc, 0x1d, 0x42, + 0x00, 0x99, 0x2f, 0xb6, 0x5e, 0xc7, 0x71, 0xe8, + 0xbc, 0x25, 0x93, 0x0a, 0xe2, 0x7b, 0xcd, 0x54, + }, + { + 0x00, 0x60, 0xc0, 0xa0, 0x9d, 0xfd, 0x5d, 0x3d, + 0x27, 0x47, 0xe7, 0x87, 0xba, 0xda, 0x7a, 0x1a, + 0x00, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, + 0x4a, 0x04, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd, + }, + { + 0x00, 0x61, 0xc2, 0xa3, 0x99, 0xf8, 0x5b, 0x3a, + 0x2f, 0x4e, 0xed, 0x8c, 0xb6, 0xd7, 0x74, 0x15, + 0x00, 0x5e, 0xbc, 0xe2, 0x65, 0x3b, 0xd9, 0x87, + 0xca, 0x94, 0x76, 0x28, 0xaf, 0xf1, 0x13, 0x4d, + }, + { + 0x00, 0x62, 0xc4, 0xa6, 0x95, 0xf7, 0x51, 0x33, + 0x37, 0x55, 0xf3, 0x91, 0xa2, 0xc0, 0x66, 0x04, + 0x00, 0x6e, 0xdc, 0xb2, 0xa5, 0xcb, 0x79, 0x17, + 0x57, 0x39, 0x8b, 0xe5, 0xf2, 0x9c, 0x2e, 0x40, + }, + { + 0x00, 0x63, 0xc6, 0xa5, 0x91, 0xf2, 0x57, 0x34, + 0x3f, 0x5c, 0xf9, 0x9a, 0xae, 0xcd, 0x68, 0x0b, + 0x00, 0x7e, 0xfc, 0x82, 0xe5, 0x9b, 0x19, 0x67, + 0xd7, 0xa9, 0x2b, 0x55, 0x32, 0x4c, 0xce, 0xb0, + }, + { + 0x00, 0x64, 0xc8, 0xac, 0x8d, 0xe9, 0x45, 0x21, + 0x07, 0x63, 0xcf, 0xab, 0x8a, 0xee, 0x42, 0x26, + 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, + 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, + }, + { + 0x00, 0x65, 0xca, 0xaf, 0x89, 0xec, 0x43, 0x26, + 0x0f, 0x6a, 0xc5, 0xa0, 0x86, 0xe3, 0x4c, 0x29, + 0x00, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, + 0xf0, 0xee, 0xcc, 0xd2, 0x88, 0x96, 0xb4, 0xaa, + }, + { + 0x00, 0x66, 0xcc, 0xaa, 0x85, 0xe3, 0x49, 0x2f, + 0x17, 0x71, 0xdb, 0xbd, 0x92, 0xf4, 0x5e, 0x38, + 0x00, 0x2e, 0x5c, 0x72, 0xb8, 0x96, 0xe4, 0xca, + 0x6d, 0x43, 0x31, 0x1f, 0xd5, 0xfb, 0x89, 0xa7, + }, + { + 0x00, 0x67, 0xce, 0xa9, 0x81, 0xe6, 0x4f, 0x28, + 0x1f, 0x78, 0xd1, 0xb6, 0x9e, 0xf9, 0x50, 0x37, + 0x00, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, + 0xed, 0xd3, 0x91, 0xaf, 0x15, 0x2b, 0x69, 0x57, + }, + { + 0x00, 0x68, 0xd0, 0xb8, 0xbd, 0xd5, 0x6d, 0x05, + 0x67, 0x0f, 0xb7, 0xdf, 0xda, 0xb2, 0x0a, 0x62, + 0x00, 0xce, 0x81, 0x4f, 0x1f, 0xd1, 0x9e, 0x50, + 0x3e, 0xf0, 0xbf, 0x71, 0x21, 0xef, 0xa0, 0x6e, + }, + { + 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, + 0x6f, 0x06, 0xbd, 0xd4, 0xd6, 0xbf, 0x04, 0x6d, + 0x00, 0xde, 0xa1, 0x7f, 0x5f, 0x81, 0xfe, 0x20, + 0xbe, 0x60, 0x1f, 0xc1, 0xe1, 0x3f, 0x40, 0x9e, + }, + { + 0x00, 0x6a, 0xd4, 0xbe, 0xb5, 0xdf, 0x61, 0x0b, + 0x77, 0x1d, 0xa3, 0xc9, 0xc2, 0xa8, 0x16, 0x7c, + 0x00, 0xee, 0xc1, 0x2f, 0x9f, 0x71, 0x5e, 0xb0, + 0x23, 0xcd, 0xe2, 0x0c, 0xbc, 0x52, 0x7d, 0x93, + }, + { + 0x00, 0x6b, 0xd6, 0xbd, 0xb1, 0xda, 0x67, 0x0c, + 0x7f, 0x14, 0xa9, 0xc2, 0xce, 0xa5, 0x18, 0x73, + 0x00, 0xfe, 0xe1, 0x1f, 0xdf, 0x21, 0x3e, 0xc0, + 0xa3, 0x5d, 0x42, 0xbc, 0x7c, 0x82, 0x9d, 0x63, + }, + { + 0x00, 0x6c, 0xd8, 0xb4, 0xad, 0xc1, 0x75, 0x19, + 0x47, 0x2b, 0x9f, 0xf3, 0xea, 0x86, 0x32, 0x5e, + 0x00, 0x8e, 0x01, 0x8f, 0x02, 0x8c, 0x03, 0x8d, + 0x04, 0x8a, 0x05, 0x8b, 0x06, 0x88, 0x07, 0x89, + }, + { + 0x00, 0x6d, 0xda, 0xb7, 0xa9, 0xc4, 0x73, 0x1e, + 0x4f, 0x22, 0x95, 0xf8, 0xe6, 0x8b, 0x3c, 0x51, + 0x00, 0x9e, 0x21, 0xbf, 0x42, 0xdc, 0x63, 0xfd, + 0x84, 0x1a, 0xa5, 0x3b, 0xc6, 0x58, 0xe7, 0x79, + }, + { + 0x00, 0x6e, 0xdc, 0xb2, 0xa5, 0xcb, 0x79, 0x17, + 0x57, 0x39, 0x8b, 0xe5, 0xf2, 0x9c, 0x2e, 0x40, + 0x00, 0xae, 0x41, 0xef, 0x82, 0x2c, 0xc3, 0x6d, + 0x19, 0xb7, 0x58, 0xf6, 0x9b, 0x35, 0xda, 0x74, + }, + { + 0x00, 0x6f, 0xde, 0xb1, 0xa1, 0xce, 0x7f, 0x10, + 0x5f, 0x30, 0x81, 0xee, 0xfe, 0x91, 0x20, 0x4f, + 0x00, 0xbe, 0x61, 0xdf, 0xc2, 0x7c, 0xa3, 0x1d, + 0x99, 0x27, 0xf8, 0x46, 0x5b, 0xe5, 0x3a, 0x84, + }, + { + 0x00, 0x70, 0xe0, 0x90, 0xdd, 0xad, 0x3d, 0x4d, + 0xa7, 0xd7, 0x47, 0x37, 0x7a, 0x0a, 0x9a, 0xea, + 0x00, 0x53, 0xa6, 0xf5, 0x51, 0x02, 0xf7, 0xa4, + 0xa2, 0xf1, 0x04, 0x57, 0xf3, 0xa0, 0x55, 0x06, + }, + { + 0x00, 0x71, 0xe2, 0x93, 0xd9, 0xa8, 0x3b, 0x4a, + 0xaf, 0xde, 0x4d, 0x3c, 0x76, 0x07, 0x94, 0xe5, + 0x00, 0x43, 0x86, 0xc5, 0x11, 0x52, 0x97, 0xd4, + 0x22, 0x61, 0xa4, 0xe7, 0x33, 0x70, 0xb5, 0xf6, + }, + { + 0x00, 0x72, 0xe4, 0x96, 0xd5, 0xa7, 0x31, 0x43, + 0xb7, 0xc5, 0x53, 0x21, 0x62, 0x10, 0x86, 0xf4, + 0x00, 0x73, 0xe6, 0x95, 0xd1, 0xa2, 0x37, 0x44, + 0xbf, 0xcc, 0x59, 0x2a, 0x6e, 0x1d, 0x88, 0xfb, + }, + { + 0x00, 0x73, 0xe6, 0x95, 0xd1, 0xa2, 0x37, 0x44, + 0xbf, 0xcc, 0x59, 0x2a, 0x6e, 0x1d, 0x88, 0xfb, + 0x00, 0x63, 0xc6, 0xa5, 0x91, 0xf2, 0x57, 0x34, + 0x3f, 0x5c, 0xf9, 0x9a, 0xae, 0xcd, 0x68, 0x0b, + }, + { + 0x00, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, + 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6, + 0x00, 0x13, 0x26, 0x35, 0x4c, 0x5f, 0x6a, 0x79, + 0x98, 0x8b, 0xbe, 0xad, 0xd4, 0xc7, 0xf2, 0xe1, + }, + { + 0x00, 0x75, 0xea, 0x9f, 0xc9, 0xbc, 0x23, 0x56, + 0x8f, 0xfa, 0x65, 0x10, 0x46, 0x33, 0xac, 0xd9, + 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, + 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11, + }, + { + 0x00, 0x76, 0xec, 0x9a, 0xc5, 0xb3, 0x29, 0x5f, + 0x97, 0xe1, 0x7b, 0x0d, 0x52, 0x24, 0xbe, 0xc8, + 0x00, 0x33, 0x66, 0x55, 0xcc, 0xff, 0xaa, 0x99, + 0x85, 0xb6, 0xe3, 0xd0, 0x49, 0x7a, 0x2f, 0x1c, + }, + { + 0x00, 0x77, 0xee, 0x99, 0xc1, 0xb6, 0x2f, 0x58, + 0x9f, 0xe8, 0x71, 0x06, 0x5e, 0x29, 0xb0, 0xc7, + 0x00, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, + 0x05, 0x26, 0x43, 0x60, 0x89, 0xaa, 0xcf, 0xec, + }, + { + 0x00, 0x78, 0xf0, 0x88, 0xfd, 0x85, 0x0d, 0x75, + 0xe7, 0x9f, 0x17, 0x6f, 0x1a, 0x62, 0xea, 0x92, + 0x00, 0xd3, 0xbb, 0x68, 0x6b, 0xb8, 0xd0, 0x03, + 0xd6, 0x05, 0x6d, 0xbe, 0xbd, 0x6e, 0x06, 0xd5, + }, + { + 0x00, 0x79, 0xf2, 0x8b, 0xf9, 0x80, 0x0b, 0x72, + 0xef, 0x96, 0x1d, 0x64, 0x16, 0x6f, 0xe4, 0x9d, + 0x00, 0xc3, 0x9b, 0x58, 0x2b, 0xe8, 0xb0, 0x73, + 0x56, 0x95, 0xcd, 0x0e, 0x7d, 0xbe, 0xe6, 0x25, + }, + { + 0x00, 0x7a, 0xf4, 0x8e, 0xf5, 0x8f, 0x01, 0x7b, + 0xf7, 0x8d, 0x03, 0x79, 0x02, 0x78, 0xf6, 0x8c, + 0x00, 0xf3, 0xfb, 0x08, 0xeb, 0x18, 0x10, 0xe3, + 0xcb, 0x38, 0x30, 0xc3, 0x20, 0xd3, 0xdb, 0x28, + }, + { + 0x00, 0x7b, 0xf6, 0x8d, 0xf1, 0x8a, 0x07, 0x7c, + 0xff, 0x84, 0x09, 0x72, 0x0e, 0x75, 0xf8, 0x83, + 0x00, 0xe3, 0xdb, 0x38, 0xab, 0x48, 0x70, 0x93, + 0x4b, 0xa8, 0x90, 0x73, 0xe0, 0x03, 0x3b, 0xd8, + }, + { + 0x00, 0x7c, 0xf8, 0x84, 0xed, 0x91, 0x15, 0x69, + 0xc7, 0xbb, 0x3f, 0x43, 0x2a, 0x56, 0xd2, 0xae, + 0x00, 0x93, 0x3b, 0xa8, 0x76, 0xe5, 0x4d, 0xde, + 0xec, 0x7f, 0xd7, 0x44, 0x9a, 0x09, 0xa1, 0x32, + }, + { + 0x00, 0x7d, 0xfa, 0x87, 0xe9, 0x94, 0x13, 0x6e, + 0xcf, 0xb2, 0x35, 0x48, 0x26, 0x5b, 0xdc, 0xa1, + 0x00, 0x83, 0x1b, 0x98, 0x36, 0xb5, 0x2d, 0xae, + 0x6c, 0xef, 0x77, 0xf4, 0x5a, 0xd9, 0x41, 0xc2, + }, + { + 0x00, 0x7e, 0xfc, 0x82, 0xe5, 0x9b, 0x19, 0x67, + 0xd7, 0xa9, 0x2b, 0x55, 0x32, 0x4c, 0xce, 0xb0, + 0x00, 0xb3, 0x7b, 0xc8, 0xf6, 0x45, 0x8d, 0x3e, + 0xf1, 0x42, 0x8a, 0x39, 0x07, 0xb4, 0x7c, 0xcf, + }, + { + 0x00, 0x7f, 0xfe, 0x81, 0xe1, 0x9e, 0x1f, 0x60, + 0xdf, 0xa0, 0x21, 0x5e, 0x3e, 0x41, 0xc0, 0xbf, + 0x00, 0xa3, 0x5b, 0xf8, 0xb6, 0x15, 0xed, 0x4e, + 0x71, 0xd2, 0x2a, 0x89, 0xc7, 0x64, 0x9c, 0x3f, + }, + { + 0x00, 0x80, 0x1d, 0x9d, 0x3a, 0xba, 0x27, 0xa7, + 0x74, 0xf4, 0x69, 0xe9, 0x4e, 0xce, 0x53, 0xd3, + 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, + 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1, + }, + { + 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, + 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc, + 0x00, 0xf8, 0xed, 0x15, 0xc7, 0x3f, 0x2a, 0xd2, + 0x93, 0x6b, 0x7e, 0x86, 0x54, 0xac, 0xb9, 0x41, + }, + { + 0x00, 0x82, 0x19, 0x9b, 0x32, 0xb0, 0x2b, 0xa9, + 0x64, 0xe6, 0x7d, 0xff, 0x56, 0xd4, 0x4f, 0xcd, + 0x00, 0xc8, 0x8d, 0x45, 0x07, 0xcf, 0x8a, 0x42, + 0x0e, 0xc6, 0x83, 0x4b, 0x09, 0xc1, 0x84, 0x4c, + }, + { + 0x00, 0x83, 0x1b, 0x98, 0x36, 0xb5, 0x2d, 0xae, + 0x6c, 0xef, 0x77, 0xf4, 0x5a, 0xd9, 0x41, 0xc2, + 0x00, 0xd8, 0xad, 0x75, 0x47, 0x9f, 0xea, 0x32, + 0x8e, 0x56, 0x23, 0xfb, 0xc9, 0x11, 0x64, 0xbc, + }, + { + 0x00, 0x84, 0x15, 0x91, 0x2a, 0xae, 0x3f, 0xbb, + 0x54, 0xd0, 0x41, 0xc5, 0x7e, 0xfa, 0x6b, 0xef, + 0x00, 0xa8, 0x4d, 0xe5, 0x9a, 0x32, 0xd7, 0x7f, + 0x29, 0x81, 0x64, 0xcc, 0xb3, 0x1b, 0xfe, 0x56, + }, + { + 0x00, 0x85, 0x17, 0x92, 0x2e, 0xab, 0x39, 0xbc, + 0x5c, 0xd9, 0x4b, 0xce, 0x72, 0xf7, 0x65, 0xe0, + 0x00, 0xb8, 0x6d, 0xd5, 0xda, 0x62, 0xb7, 0x0f, + 0xa9, 0x11, 0xc4, 0x7c, 0x73, 0xcb, 0x1e, 0xa6, + }, + { + 0x00, 0x86, 0x11, 0x97, 0x22, 0xa4, 0x33, 0xb5, + 0x44, 0xc2, 0x55, 0xd3, 0x66, 0xe0, 0x77, 0xf1, + 0x00, 0x88, 0x0d, 0x85, 0x1a, 0x92, 0x17, 0x9f, + 0x34, 0xbc, 0x39, 0xb1, 0x2e, 0xa6, 0x23, 0xab, + }, + { + 0x00, 0x87, 0x13, 0x94, 0x26, 0xa1, 0x35, 0xb2, + 0x4c, 0xcb, 0x5f, 0xd8, 0x6a, 0xed, 0x79, 0xfe, + 0x00, 0x98, 0x2d, 0xb5, 0x5a, 0xc2, 0x77, 0xef, + 0xb4, 0x2c, 0x99, 0x01, 0xee, 0x76, 0xc3, 0x5b, + }, + { + 0x00, 0x88, 0x0d, 0x85, 0x1a, 0x92, 0x17, 0x9f, + 0x34, 0xbc, 0x39, 0xb1, 0x2e, 0xa6, 0x23, 0xab, + 0x00, 0x68, 0xd0, 0xb8, 0xbd, 0xd5, 0x6d, 0x05, + 0x67, 0x0f, 0xb7, 0xdf, 0xda, 0xb2, 0x0a, 0x62, + }, + { + 0x00, 0x89, 0x0f, 0x86, 0x1e, 0x97, 0x11, 0x98, + 0x3c, 0xb5, 0x33, 0xba, 0x22, 0xab, 0x2d, 0xa4, + 0x00, 0x78, 0xf0, 0x88, 0xfd, 0x85, 0x0d, 0x75, + 0xe7, 0x9f, 0x17, 0x6f, 0x1a, 0x62, 0xea, 0x92, + }, + { + 0x00, 0x8a, 0x09, 0x83, 0x12, 0x98, 0x1b, 0x91, + 0x24, 0xae, 0x2d, 0xa7, 0x36, 0xbc, 0x3f, 0xb5, + 0x00, 0x48, 0x90, 0xd8, 0x3d, 0x75, 0xad, 0xe5, + 0x7a, 0x32, 0xea, 0xa2, 0x47, 0x0f, 0xd7, 0x9f, + }, + { + 0x00, 0x8b, 0x0b, 0x80, 0x16, 0x9d, 0x1d, 0x96, + 0x2c, 0xa7, 0x27, 0xac, 0x3a, 0xb1, 0x31, 0xba, + 0x00, 0x58, 0xb0, 0xe8, 0x7d, 0x25, 0xcd, 0x95, + 0xfa, 0xa2, 0x4a, 0x12, 0x87, 0xdf, 0x37, 0x6f, + }, + { + 0x00, 0x8c, 0x05, 0x89, 0x0a, 0x86, 0x0f, 0x83, + 0x14, 0x98, 0x11, 0x9d, 0x1e, 0x92, 0x1b, 0x97, + 0x00, 0x28, 0x50, 0x78, 0xa0, 0x88, 0xf0, 0xd8, + 0x5d, 0x75, 0x0d, 0x25, 0xfd, 0xd5, 0xad, 0x85, + }, + { + 0x00, 0x8d, 0x07, 0x8a, 0x0e, 0x83, 0x09, 0x84, + 0x1c, 0x91, 0x1b, 0x96, 0x12, 0x9f, 0x15, 0x98, + 0x00, 0x38, 0x70, 0x48, 0xe0, 0xd8, 0x90, 0xa8, + 0xdd, 0xe5, 0xad, 0x95, 0x3d, 0x05, 0x4d, 0x75, + }, + { + 0x00, 0x8e, 0x01, 0x8f, 0x02, 0x8c, 0x03, 0x8d, + 0x04, 0x8a, 0x05, 0x8b, 0x06, 0x88, 0x07, 0x89, + 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, + 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78, + }, + { + 0x00, 0x8f, 0x03, 0x8c, 0x06, 0x89, 0x05, 0x8a, + 0x0c, 0x83, 0x0f, 0x80, 0x0a, 0x85, 0x09, 0x86, + 0x00, 0x18, 0x30, 0x28, 0x60, 0x78, 0x50, 0x48, + 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88, + }, + { + 0x00, 0x90, 0x3d, 0xad, 0x7a, 0xea, 0x47, 0xd7, + 0xf4, 0x64, 0xc9, 0x59, 0x8e, 0x1e, 0xb3, 0x23, + 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, + 0xfb, 0x0e, 0x0c, 0xf9, 0x08, 0xfd, 0xff, 0x0a, + }, + { + 0x00, 0x91, 0x3f, 0xae, 0x7e, 0xef, 0x41, 0xd0, + 0xfc, 0x6d, 0xc3, 0x52, 0x82, 0x13, 0xbd, 0x2c, + 0x00, 0xe5, 0xd7, 0x32, 0xb3, 0x56, 0x64, 0x81, + 0x7b, 0x9e, 0xac, 0x49, 0xc8, 0x2d, 0x1f, 0xfa, + }, + { + 0x00, 0x92, 0x39, 0xab, 0x72, 0xe0, 0x4b, 0xd9, + 0xe4, 0x76, 0xdd, 0x4f, 0x96, 0x04, 0xaf, 0x3d, + 0x00, 0xd5, 0xb7, 0x62, 0x73, 0xa6, 0xc4, 0x11, + 0xe6, 0x33, 0x51, 0x84, 0x95, 0x40, 0x22, 0xf7, + }, + { + 0x00, 0x93, 0x3b, 0xa8, 0x76, 0xe5, 0x4d, 0xde, + 0xec, 0x7f, 0xd7, 0x44, 0x9a, 0x09, 0xa1, 0x32, + 0x00, 0xc5, 0x97, 0x52, 0x33, 0xf6, 0xa4, 0x61, + 0x66, 0xa3, 0xf1, 0x34, 0x55, 0x90, 0xc2, 0x07, + }, + { + 0x00, 0x94, 0x35, 0xa1, 0x6a, 0xfe, 0x5f, 0xcb, + 0xd4, 0x40, 0xe1, 0x75, 0xbe, 0x2a, 0x8b, 0x1f, + 0x00, 0xb5, 0x77, 0xc2, 0xee, 0x5b, 0x99, 0x2c, + 0xc1, 0x74, 0xb6, 0x03, 0x2f, 0x9a, 0x58, 0xed, + }, + { + 0x00, 0x95, 0x37, 0xa2, 0x6e, 0xfb, 0x59, 0xcc, + 0xdc, 0x49, 0xeb, 0x7e, 0xb2, 0x27, 0x85, 0x10, + 0x00, 0xa5, 0x57, 0xf2, 0xae, 0x0b, 0xf9, 0x5c, + 0x41, 0xe4, 0x16, 0xb3, 0xef, 0x4a, 0xb8, 0x1d, + }, + { + 0x00, 0x96, 0x31, 0xa7, 0x62, 0xf4, 0x53, 0xc5, + 0xc4, 0x52, 0xf5, 0x63, 0xa6, 0x30, 0x97, 0x01, + 0x00, 0x95, 0x37, 0xa2, 0x6e, 0xfb, 0x59, 0xcc, + 0xdc, 0x49, 0xeb, 0x7e, 0xb2, 0x27, 0x85, 0x10, + }, + { + 0x00, 0x97, 0x33, 0xa4, 0x66, 0xf1, 0x55, 0xc2, + 0xcc, 0x5b, 0xff, 0x68, 0xaa, 0x3d, 0x99, 0x0e, + 0x00, 0x85, 0x17, 0x92, 0x2e, 0xab, 0x39, 0xbc, + 0x5c, 0xd9, 0x4b, 0xce, 0x72, 0xf7, 0x65, 0xe0, + }, + { + 0x00, 0x98, 0x2d, 0xb5, 0x5a, 0xc2, 0x77, 0xef, + 0xb4, 0x2c, 0x99, 0x01, 0xee, 0x76, 0xc3, 0x5b, + 0x00, 0x75, 0xea, 0x9f, 0xc9, 0xbc, 0x23, 0x56, + 0x8f, 0xfa, 0x65, 0x10, 0x46, 0x33, 0xac, 0xd9, + }, + { + 0x00, 0x99, 0x2f, 0xb6, 0x5e, 0xc7, 0x71, 0xe8, + 0xbc, 0x25, 0x93, 0x0a, 0xe2, 0x7b, 0xcd, 0x54, + 0x00, 0x65, 0xca, 0xaf, 0x89, 0xec, 0x43, 0x26, + 0x0f, 0x6a, 0xc5, 0xa0, 0x86, 0xe3, 0x4c, 0x29, + }, + { + 0x00, 0x9a, 0x29, 0xb3, 0x52, 0xc8, 0x7b, 0xe1, + 0xa4, 0x3e, 0x8d, 0x17, 0xf6, 0x6c, 0xdf, 0x45, + 0x00, 0x55, 0xaa, 0xff, 0x49, 0x1c, 0xe3, 0xb6, + 0x92, 0xc7, 0x38, 0x6d, 0xdb, 0x8e, 0x71, 0x24, + }, + { + 0x00, 0x9b, 0x2b, 0xb0, 0x56, 0xcd, 0x7d, 0xe6, + 0xac, 0x37, 0x87, 0x1c, 0xfa, 0x61, 0xd1, 0x4a, + 0x00, 0x45, 0x8a, 0xcf, 0x09, 0x4c, 0x83, 0xc6, + 0x12, 0x57, 0x98, 0xdd, 0x1b, 0x5e, 0x91, 0xd4, + }, + { + 0x00, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, + 0x94, 0x08, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67, + 0x00, 0x35, 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, 0x8b, + 0xb5, 0x80, 0xdf, 0xea, 0x61, 0x54, 0x0b, 0x3e, + }, + { + 0x00, 0x9d, 0x27, 0xba, 0x4e, 0xd3, 0x69, 0xf4, + 0x9c, 0x01, 0xbb, 0x26, 0xd2, 0x4f, 0xf5, 0x68, + 0x00, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, + 0x35, 0x10, 0x7f, 0x5a, 0xa1, 0x84, 0xeb, 0xce, + }, + { + 0x00, 0x9e, 0x21, 0xbf, 0x42, 0xdc, 0x63, 0xfd, + 0x84, 0x1a, 0xa5, 0x3b, 0xc6, 0x58, 0xe7, 0x79, + 0x00, 0x15, 0x2a, 0x3f, 0x54, 0x41, 0x7e, 0x6b, + 0xa8, 0xbd, 0x82, 0x97, 0xfc, 0xe9, 0xd6, 0xc3, + }, + { + 0x00, 0x9f, 0x23, 0xbc, 0x46, 0xd9, 0x65, 0xfa, + 0x8c, 0x13, 0xaf, 0x30, 0xca, 0x55, 0xe9, 0x76, + 0x00, 0x05, 0x0a, 0x0f, 0x14, 0x11, 0x1e, 0x1b, + 0x28, 0x2d, 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33, + }, + { + 0x00, 0xa0, 0x5d, 0xfd, 0xba, 0x1a, 0xe7, 0x47, + 0x69, 0xc9, 0x34, 0x94, 0xd3, 0x73, 0x8e, 0x2e, + 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, + 0xde, 0x0c, 0x67, 0xb5, 0xb1, 0x63, 0x08, 0xda, + }, + { + 0x00, 0xa1, 0x5f, 0xfe, 0xbe, 0x1f, 0xe1, 0x40, + 0x61, 0xc0, 0x3e, 0x9f, 0xdf, 0x7e, 0x80, 0x21, + 0x00, 0xc2, 0x99, 0x5b, 0x2f, 0xed, 0xb6, 0x74, + 0x5e, 0x9c, 0xc7, 0x05, 0x71, 0xb3, 0xe8, 0x2a, + }, + { + 0x00, 0xa2, 0x59, 0xfb, 0xb2, 0x10, 0xeb, 0x49, + 0x79, 0xdb, 0x20, 0x82, 0xcb, 0x69, 0x92, 0x30, + 0x00, 0xf2, 0xf9, 0x0b, 0xef, 0x1d, 0x16, 0xe4, + 0xc3, 0x31, 0x3a, 0xc8, 0x2c, 0xde, 0xd5, 0x27, + }, + { + 0x00, 0xa3, 0x5b, 0xf8, 0xb6, 0x15, 0xed, 0x4e, + 0x71, 0xd2, 0x2a, 0x89, 0xc7, 0x64, 0x9c, 0x3f, + 0x00, 0xe2, 0xd9, 0x3b, 0xaf, 0x4d, 0x76, 0x94, + 0x43, 0xa1, 0x9a, 0x78, 0xec, 0x0e, 0x35, 0xd7, + }, + { + 0x00, 0xa4, 0x55, 0xf1, 0xaa, 0x0e, 0xff, 0x5b, + 0x49, 0xed, 0x1c, 0xb8, 0xe3, 0x47, 0xb6, 0x12, + 0x00, 0x92, 0x39, 0xab, 0x72, 0xe0, 0x4b, 0xd9, + 0xe4, 0x76, 0xdd, 0x4f, 0x96, 0x04, 0xaf, 0x3d, + }, + { + 0x00, 0xa5, 0x57, 0xf2, 0xae, 0x0b, 0xf9, 0x5c, + 0x41, 0xe4, 0x16, 0xb3, 0xef, 0x4a, 0xb8, 0x1d, + 0x00, 0x82, 0x19, 0x9b, 0x32, 0xb0, 0x2b, 0xa9, + 0x64, 0xe6, 0x7d, 0xff, 0x56, 0xd4, 0x4f, 0xcd, + }, + { + 0x00, 0xa6, 0x51, 0xf7, 0xa2, 0x04, 0xf3, 0x55, + 0x59, 0xff, 0x08, 0xae, 0xfb, 0x5d, 0xaa, 0x0c, + 0x00, 0xb2, 0x79, 0xcb, 0xf2, 0x40, 0x8b, 0x39, + 0xf9, 0x4b, 0x80, 0x32, 0x0b, 0xb9, 0x72, 0xc0, + }, + { + 0x00, 0xa7, 0x53, 0xf4, 0xa6, 0x01, 0xf5, 0x52, + 0x51, 0xf6, 0x02, 0xa5, 0xf7, 0x50, 0xa4, 0x03, + 0x00, 0xa2, 0x59, 0xfb, 0xb2, 0x10, 0xeb, 0x49, + 0x79, 0xdb, 0x20, 0x82, 0xcb, 0x69, 0x92, 0x30, + }, + { + 0x00, 0xa8, 0x4d, 0xe5, 0x9a, 0x32, 0xd7, 0x7f, + 0x29, 0x81, 0x64, 0xcc, 0xb3, 0x1b, 0xfe, 0x56, + 0x00, 0x52, 0xa4, 0xf6, 0x55, 0x07, 0xf1, 0xa3, + 0xaa, 0xf8, 0x0e, 0x5c, 0xff, 0xad, 0x5b, 0x09, + }, + { + 0x00, 0xa9, 0x4f, 0xe6, 0x9e, 0x37, 0xd1, 0x78, + 0x21, 0x88, 0x6e, 0xc7, 0xbf, 0x16, 0xf0, 0x59, + 0x00, 0x42, 0x84, 0xc6, 0x15, 0x57, 0x91, 0xd3, + 0x2a, 0x68, 0xae, 0xec, 0x3f, 0x7d, 0xbb, 0xf9, + }, + { + 0x00, 0xaa, 0x49, 0xe3, 0x92, 0x38, 0xdb, 0x71, + 0x39, 0x93, 0x70, 0xda, 0xab, 0x01, 0xe2, 0x48, + 0x00, 0x72, 0xe4, 0x96, 0xd5, 0xa7, 0x31, 0x43, + 0xb7, 0xc5, 0x53, 0x21, 0x62, 0x10, 0x86, 0xf4, + }, + { + 0x00, 0xab, 0x4b, 0xe0, 0x96, 0x3d, 0xdd, 0x76, + 0x31, 0x9a, 0x7a, 0xd1, 0xa7, 0x0c, 0xec, 0x47, + 0x00, 0x62, 0xc4, 0xa6, 0x95, 0xf7, 0x51, 0x33, + 0x37, 0x55, 0xf3, 0x91, 0xa2, 0xc0, 0x66, 0x04, + }, + { + 0x00, 0xac, 0x45, 0xe9, 0x8a, 0x26, 0xcf, 0x63, + 0x09, 0xa5, 0x4c, 0xe0, 0x83, 0x2f, 0xc6, 0x6a, + 0x00, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, + 0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee, + }, + { + 0x00, 0xad, 0x47, 0xea, 0x8e, 0x23, 0xc9, 0x64, + 0x01, 0xac, 0x46, 0xeb, 0x8f, 0x22, 0xc8, 0x65, + 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, + 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, + }, + { + 0x00, 0xae, 0x41, 0xef, 0x82, 0x2c, 0xc3, 0x6d, + 0x19, 0xb7, 0x58, 0xf6, 0x9b, 0x35, 0xda, 0x74, + 0x00, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, + 0x8d, 0xbf, 0xe9, 0xdb, 0x45, 0x77, 0x21, 0x13, + }, + { + 0x00, 0xaf, 0x43, 0xec, 0x86, 0x29, 0xc5, 0x6a, + 0x11, 0xbe, 0x52, 0xfd, 0x97, 0x38, 0xd4, 0x7b, + 0x00, 0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, + 0x0d, 0x2f, 0x49, 0x6b, 0x85, 0xa7, 0xc1, 0xe3, + }, + { + 0x00, 0xb0, 0x7d, 0xcd, 0xfa, 0x4a, 0x87, 0x37, + 0xe9, 0x59, 0x94, 0x24, 0x13, 0xa3, 0x6e, 0xde, + 0x00, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, + 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61, + }, + { + 0x00, 0xb1, 0x7f, 0xce, 0xfe, 0x4f, 0x81, 0x30, + 0xe1, 0x50, 0x9e, 0x2f, 0x1f, 0xae, 0x60, 0xd1, + 0x00, 0xdf, 0xa3, 0x7c, 0x5b, 0x84, 0xf8, 0x27, + 0xb6, 0x69, 0x15, 0xca, 0xed, 0x32, 0x4e, 0x91, + }, + { + 0x00, 0xb2, 0x79, 0xcb, 0xf2, 0x40, 0x8b, 0x39, + 0xf9, 0x4b, 0x80, 0x32, 0x0b, 0xb9, 0x72, 0xc0, + 0x00, 0xef, 0xc3, 0x2c, 0x9b, 0x74, 0x58, 0xb7, + 0x2b, 0xc4, 0xe8, 0x07, 0xb0, 0x5f, 0x73, 0x9c, + }, + { + 0x00, 0xb3, 0x7b, 0xc8, 0xf6, 0x45, 0x8d, 0x3e, + 0xf1, 0x42, 0x8a, 0x39, 0x07, 0xb4, 0x7c, 0xcf, + 0x00, 0xff, 0xe3, 0x1c, 0xdb, 0x24, 0x38, 0xc7, + 0xab, 0x54, 0x48, 0xb7, 0x70, 0x8f, 0x93, 0x6c, + }, + { + 0x00, 0xb4, 0x75, 0xc1, 0xea, 0x5e, 0x9f, 0x2b, + 0xc9, 0x7d, 0xbc, 0x08, 0x23, 0x97, 0x56, 0xe2, + 0x00, 0x8f, 0x03, 0x8c, 0x06, 0x89, 0x05, 0x8a, + 0x0c, 0x83, 0x0f, 0x80, 0x0a, 0x85, 0x09, 0x86, + }, + { + 0x00, 0xb5, 0x77, 0xc2, 0xee, 0x5b, 0x99, 0x2c, + 0xc1, 0x74, 0xb6, 0x03, 0x2f, 0x9a, 0x58, 0xed, + 0x00, 0x9f, 0x23, 0xbc, 0x46, 0xd9, 0x65, 0xfa, + 0x8c, 0x13, 0xaf, 0x30, 0xca, 0x55, 0xe9, 0x76, + }, + { + 0x00, 0xb6, 0x71, 0xc7, 0xe2, 0x54, 0x93, 0x25, + 0xd9, 0x6f, 0xa8, 0x1e, 0x3b, 0x8d, 0x4a, 0xfc, + 0x00, 0xaf, 0x43, 0xec, 0x86, 0x29, 0xc5, 0x6a, + 0x11, 0xbe, 0x52, 0xfd, 0x97, 0x38, 0xd4, 0x7b, + }, + { + 0x00, 0xb7, 0x73, 0xc4, 0xe6, 0x51, 0x95, 0x22, + 0xd1, 0x66, 0xa2, 0x15, 0x37, 0x80, 0x44, 0xf3, + 0x00, 0xbf, 0x63, 0xdc, 0xc6, 0x79, 0xa5, 0x1a, + 0x91, 0x2e, 0xf2, 0x4d, 0x57, 0xe8, 0x34, 0x8b, + }, + { + 0x00, 0xb8, 0x6d, 0xd5, 0xda, 0x62, 0xb7, 0x0f, + 0xa9, 0x11, 0xc4, 0x7c, 0x73, 0xcb, 0x1e, 0xa6, + 0x00, 0x4f, 0x9e, 0xd1, 0x21, 0x6e, 0xbf, 0xf0, + 0x42, 0x0d, 0xdc, 0x93, 0x63, 0x2c, 0xfd, 0xb2, + }, + { + 0x00, 0xb9, 0x6f, 0xd6, 0xde, 0x67, 0xb1, 0x08, + 0xa1, 0x18, 0xce, 0x77, 0x7f, 0xc6, 0x10, 0xa9, + 0x00, 0x5f, 0xbe, 0xe1, 0x61, 0x3e, 0xdf, 0x80, + 0xc2, 0x9d, 0x7c, 0x23, 0xa3, 0xfc, 0x1d, 0x42, + }, + { + 0x00, 0xba, 0x69, 0xd3, 0xd2, 0x68, 0xbb, 0x01, + 0xb9, 0x03, 0xd0, 0x6a, 0x6b, 0xd1, 0x02, 0xb8, + 0x00, 0x6f, 0xde, 0xb1, 0xa1, 0xce, 0x7f, 0x10, + 0x5f, 0x30, 0x81, 0xee, 0xfe, 0x91, 0x20, 0x4f, + }, + { + 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, + 0xb1, 0x0a, 0xda, 0x61, 0x67, 0xdc, 0x0c, 0xb7, + 0x00, 0x7f, 0xfe, 0x81, 0xe1, 0x9e, 0x1f, 0x60, + 0xdf, 0xa0, 0x21, 0x5e, 0x3e, 0x41, 0xc0, 0xbf, + }, + { + 0x00, 0xbc, 0x65, 0xd9, 0xca, 0x76, 0xaf, 0x13, + 0x89, 0x35, 0xec, 0x50, 0x43, 0xff, 0x26, 0x9a, + 0x00, 0x0f, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, + 0x78, 0x77, 0x66, 0x69, 0x44, 0x4b, 0x5a, 0x55, + }, + { + 0x00, 0xbd, 0x67, 0xda, 0xce, 0x73, 0xa9, 0x14, + 0x81, 0x3c, 0xe6, 0x5b, 0x4f, 0xf2, 0x28, 0x95, + 0x00, 0x1f, 0x3e, 0x21, 0x7c, 0x63, 0x42, 0x5d, + 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, 0xba, 0xa5, + }, + { + 0x00, 0xbe, 0x61, 0xdf, 0xc2, 0x7c, 0xa3, 0x1d, + 0x99, 0x27, 0xf8, 0x46, 0x5b, 0xe5, 0x3a, 0x84, + 0x00, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, + 0x65, 0x4a, 0x3b, 0x14, 0xd9, 0xf6, 0x87, 0xa8, + }, + { + 0x00, 0xbf, 0x63, 0xdc, 0xc6, 0x79, 0xa5, 0x1a, + 0x91, 0x2e, 0xf2, 0x4d, 0x57, 0xe8, 0x34, 0x8b, + 0x00, 0x3f, 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, + 0xe5, 0xda, 0x9b, 0xa4, 0x19, 0x26, 0x67, 0x58, + }, + { + 0x00, 0xc0, 0x9d, 0x5d, 0x27, 0xe7, 0xba, 0x7a, + 0x4e, 0x8e, 0xd3, 0x13, 0x69, 0xa9, 0xf4, 0x34, + 0x00, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, + 0x94, 0x08, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67, + }, + { + 0x00, 0xc1, 0x9f, 0x5e, 0x23, 0xe2, 0xbc, 0x7d, + 0x46, 0x87, 0xd9, 0x18, 0x65, 0xa4, 0xfa, 0x3b, + 0x00, 0x8c, 0x05, 0x89, 0x0a, 0x86, 0x0f, 0x83, + 0x14, 0x98, 0x11, 0x9d, 0x1e, 0x92, 0x1b, 0x97, + }, + { + 0x00, 0xc2, 0x99, 0x5b, 0x2f, 0xed, 0xb6, 0x74, + 0x5e, 0x9c, 0xc7, 0x05, 0x71, 0xb3, 0xe8, 0x2a, + 0x00, 0xbc, 0x65, 0xd9, 0xca, 0x76, 0xaf, 0x13, + 0x89, 0x35, 0xec, 0x50, 0x43, 0xff, 0x26, 0x9a, + }, + { + 0x00, 0xc3, 0x9b, 0x58, 0x2b, 0xe8, 0xb0, 0x73, + 0x56, 0x95, 0xcd, 0x0e, 0x7d, 0xbe, 0xe6, 0x25, + 0x00, 0xac, 0x45, 0xe9, 0x8a, 0x26, 0xcf, 0x63, + 0x09, 0xa5, 0x4c, 0xe0, 0x83, 0x2f, 0xc6, 0x6a, + }, + { + 0x00, 0xc4, 0x95, 0x51, 0x37, 0xf3, 0xa2, 0x66, + 0x6e, 0xaa, 0xfb, 0x3f, 0x59, 0x9d, 0xcc, 0x08, + 0x00, 0xdc, 0xa5, 0x79, 0x57, 0x8b, 0xf2, 0x2e, + 0xae, 0x72, 0x0b, 0xd7, 0xf9, 0x25, 0x5c, 0x80, + }, + { + 0x00, 0xc5, 0x97, 0x52, 0x33, 0xf6, 0xa4, 0x61, + 0x66, 0xa3, 0xf1, 0x34, 0x55, 0x90, 0xc2, 0x07, + 0x00, 0xcc, 0x85, 0x49, 0x17, 0xdb, 0x92, 0x5e, + 0x2e, 0xe2, 0xab, 0x67, 0x39, 0xf5, 0xbc, 0x70, + }, + { + 0x00, 0xc6, 0x91, 0x57, 0x3f, 0xf9, 0xae, 0x68, + 0x7e, 0xb8, 0xef, 0x29, 0x41, 0x87, 0xd0, 0x16, + 0x00, 0xfc, 0xe5, 0x19, 0xd7, 0x2b, 0x32, 0xce, + 0xb3, 0x4f, 0x56, 0xaa, 0x64, 0x98, 0x81, 0x7d, + }, + { + 0x00, 0xc7, 0x93, 0x54, 0x3b, 0xfc, 0xa8, 0x6f, + 0x76, 0xb1, 0xe5, 0x22, 0x4d, 0x8a, 0xde, 0x19, + 0x00, 0xec, 0xc5, 0x29, 0x97, 0x7b, 0x52, 0xbe, + 0x33, 0xdf, 0xf6, 0x1a, 0xa4, 0x48, 0x61, 0x8d, + }, + { + 0x00, 0xc8, 0x8d, 0x45, 0x07, 0xcf, 0x8a, 0x42, + 0x0e, 0xc6, 0x83, 0x4b, 0x09, 0xc1, 0x84, 0x4c, + 0x00, 0x1c, 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, + 0xe0, 0xfc, 0xd8, 0xc4, 0x90, 0x8c, 0xa8, 0xb4, + }, + { + 0x00, 0xc9, 0x8f, 0x46, 0x03, 0xca, 0x8c, 0x45, + 0x06, 0xcf, 0x89, 0x40, 0x05, 0xcc, 0x8a, 0x43, + 0x00, 0x0c, 0x18, 0x14, 0x30, 0x3c, 0x28, 0x24, + 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44, + }, + { + 0x00, 0xca, 0x89, 0x43, 0x0f, 0xc5, 0x86, 0x4c, + 0x1e, 0xd4, 0x97, 0x5d, 0x11, 0xdb, 0x98, 0x52, + 0x00, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, + 0xfd, 0xc1, 0x85, 0xb9, 0x0d, 0x31, 0x75, 0x49, + }, + { + 0x00, 0xcb, 0x8b, 0x40, 0x0b, 0xc0, 0x80, 0x4b, + 0x16, 0xdd, 0x9d, 0x56, 0x1d, 0xd6, 0x96, 0x5d, + 0x00, 0x2c, 0x58, 0x74, 0xb0, 0x9c, 0xe8, 0xc4, + 0x7d, 0x51, 0x25, 0x09, 0xcd, 0xe1, 0x95, 0xb9, + }, + { + 0x00, 0xcc, 0x85, 0x49, 0x17, 0xdb, 0x92, 0x5e, + 0x2e, 0xe2, 0xab, 0x67, 0x39, 0xf5, 0xbc, 0x70, + 0x00, 0x5c, 0xb8, 0xe4, 0x6d, 0x31, 0xd5, 0x89, + 0xda, 0x86, 0x62, 0x3e, 0xb7, 0xeb, 0x0f, 0x53, + }, + { + 0x00, 0xcd, 0x87, 0x4a, 0x13, 0xde, 0x94, 0x59, + 0x26, 0xeb, 0xa1, 0x6c, 0x35, 0xf8, 0xb2, 0x7f, + 0x00, 0x4c, 0x98, 0xd4, 0x2d, 0x61, 0xb5, 0xf9, + 0x5a, 0x16, 0xc2, 0x8e, 0x77, 0x3b, 0xef, 0xa3, + }, + { + 0x00, 0xce, 0x81, 0x4f, 0x1f, 0xd1, 0x9e, 0x50, + 0x3e, 0xf0, 0xbf, 0x71, 0x21, 0xef, 0xa0, 0x6e, + 0x00, 0x7c, 0xf8, 0x84, 0xed, 0x91, 0x15, 0x69, + 0xc7, 0xbb, 0x3f, 0x43, 0x2a, 0x56, 0xd2, 0xae, + }, + { + 0x00, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, + 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61, + 0x00, 0x6c, 0xd8, 0xb4, 0xad, 0xc1, 0x75, 0x19, + 0x47, 0x2b, 0x9f, 0xf3, 0xea, 0x86, 0x32, 0x5e, + }, + { + 0x00, 0xd0, 0xbd, 0x6d, 0x67, 0xb7, 0xda, 0x0a, + 0xce, 0x1e, 0x73, 0xa3, 0xa9, 0x79, 0x14, 0xc4, + 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, + 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc, + }, + { + 0x00, 0xd1, 0xbf, 0x6e, 0x63, 0xb2, 0xdc, 0x0d, + 0xc6, 0x17, 0x79, 0xa8, 0xa5, 0x74, 0x1a, 0xcb, + 0x00, 0x91, 0x3f, 0xae, 0x7e, 0xef, 0x41, 0xd0, + 0xfc, 0x6d, 0xc3, 0x52, 0x82, 0x13, 0xbd, 0x2c, + }, + { + 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, + 0xde, 0x0c, 0x67, 0xb5, 0xb1, 0x63, 0x08, 0xda, + 0x00, 0xa1, 0x5f, 0xfe, 0xbe, 0x1f, 0xe1, 0x40, + 0x61, 0xc0, 0x3e, 0x9f, 0xdf, 0x7e, 0x80, 0x21, + }, + { + 0x00, 0xd3, 0xbb, 0x68, 0x6b, 0xb8, 0xd0, 0x03, + 0xd6, 0x05, 0x6d, 0xbe, 0xbd, 0x6e, 0x06, 0xd5, + 0x00, 0xb1, 0x7f, 0xce, 0xfe, 0x4f, 0x81, 0x30, + 0xe1, 0x50, 0x9e, 0x2f, 0x1f, 0xae, 0x60, 0xd1, + }, + { + 0x00, 0xd4, 0xb5, 0x61, 0x77, 0xa3, 0xc2, 0x16, + 0xee, 0x3a, 0x5b, 0x8f, 0x99, 0x4d, 0x2c, 0xf8, + 0x00, 0xc1, 0x9f, 0x5e, 0x23, 0xe2, 0xbc, 0x7d, + 0x46, 0x87, 0xd9, 0x18, 0x65, 0xa4, 0xfa, 0x3b, + }, + { + 0x00, 0xd5, 0xb7, 0x62, 0x73, 0xa6, 0xc4, 0x11, + 0xe6, 0x33, 0x51, 0x84, 0x95, 0x40, 0x22, 0xf7, + 0x00, 0xd1, 0xbf, 0x6e, 0x63, 0xb2, 0xdc, 0x0d, + 0xc6, 0x17, 0x79, 0xa8, 0xa5, 0x74, 0x1a, 0xcb, + }, + { + 0x00, 0xd6, 0xb1, 0x67, 0x7f, 0xa9, 0xce, 0x18, + 0xfe, 0x28, 0x4f, 0x99, 0x81, 0x57, 0x30, 0xe6, + 0x00, 0xe1, 0xdf, 0x3e, 0xa3, 0x42, 0x7c, 0x9d, + 0x5b, 0xba, 0x84, 0x65, 0xf8, 0x19, 0x27, 0xc6, + }, + { + 0x00, 0xd7, 0xb3, 0x64, 0x7b, 0xac, 0xc8, 0x1f, + 0xf6, 0x21, 0x45, 0x92, 0x8d, 0x5a, 0x3e, 0xe9, + 0x00, 0xf1, 0xff, 0x0e, 0xe3, 0x12, 0x1c, 0xed, + 0xdb, 0x2a, 0x24, 0xd5, 0x38, 0xc9, 0xc7, 0x36, + }, + { + 0x00, 0xd8, 0xad, 0x75, 0x47, 0x9f, 0xea, 0x32, + 0x8e, 0x56, 0x23, 0xfb, 0xc9, 0x11, 0x64, 0xbc, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + }, + { + 0x00, 0xd9, 0xaf, 0x76, 0x43, 0x9a, 0xec, 0x35, + 0x86, 0x5f, 0x29, 0xf0, 0xc5, 0x1c, 0x6a, 0xb3, + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, + }, + { + 0x00, 0xda, 0xa9, 0x73, 0x4f, 0x95, 0xe6, 0x3c, + 0x9e, 0x44, 0x37, 0xed, 0xd1, 0x0b, 0x78, 0xa2, + 0x00, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, + 0x15, 0x34, 0x57, 0x76, 0x91, 0xb0, 0xd3, 0xf2, + }, + { + 0x00, 0xdb, 0xab, 0x70, 0x4b, 0x90, 0xe0, 0x3b, + 0x96, 0x4d, 0x3d, 0xe6, 0xdd, 0x06, 0x76, 0xad, + 0x00, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, + 0x95, 0xa4, 0xf7, 0xc6, 0x51, 0x60, 0x33, 0x02, + }, + { + 0x00, 0xdc, 0xa5, 0x79, 0x57, 0x8b, 0xf2, 0x2e, + 0xae, 0x72, 0x0b, 0xd7, 0xf9, 0x25, 0x5c, 0x80, + 0x00, 0x41, 0x82, 0xc3, 0x19, 0x58, 0x9b, 0xda, + 0x32, 0x73, 0xb0, 0xf1, 0x2b, 0x6a, 0xa9, 0xe8, + }, + { + 0x00, 0xdd, 0xa7, 0x7a, 0x53, 0x8e, 0xf4, 0x29, + 0xa6, 0x7b, 0x01, 0xdc, 0xf5, 0x28, 0x52, 0x8f, + 0x00, 0x51, 0xa2, 0xf3, 0x59, 0x08, 0xfb, 0xaa, + 0xb2, 0xe3, 0x10, 0x41, 0xeb, 0xba, 0x49, 0x18, + }, + { + 0x00, 0xde, 0xa1, 0x7f, 0x5f, 0x81, 0xfe, 0x20, + 0xbe, 0x60, 0x1f, 0xc1, 0xe1, 0x3f, 0x40, 0x9e, + 0x00, 0x61, 0xc2, 0xa3, 0x99, 0xf8, 0x5b, 0x3a, + 0x2f, 0x4e, 0xed, 0x8c, 0xb6, 0xd7, 0x74, 0x15, + }, + { + 0x00, 0xdf, 0xa3, 0x7c, 0x5b, 0x84, 0xf8, 0x27, + 0xb6, 0x69, 0x15, 0xca, 0xed, 0x32, 0x4e, 0x91, + 0x00, 0x71, 0xe2, 0x93, 0xd9, 0xa8, 0x3b, 0x4a, + 0xaf, 0xde, 0x4d, 0x3c, 0x76, 0x07, 0x94, 0xe5, + }, + { + 0x00, 0xe0, 0xdd, 0x3d, 0xa7, 0x47, 0x7a, 0x9a, + 0x53, 0xb3, 0x8e, 0x6e, 0xf4, 0x14, 0x29, 0xc9, + 0x00, 0xa6, 0x51, 0xf7, 0xa2, 0x04, 0xf3, 0x55, + 0x59, 0xff, 0x08, 0xae, 0xfb, 0x5d, 0xaa, 0x0c, + }, + { + 0x00, 0xe1, 0xdf, 0x3e, 0xa3, 0x42, 0x7c, 0x9d, + 0x5b, 0xba, 0x84, 0x65, 0xf8, 0x19, 0x27, 0xc6, + 0x00, 0xb6, 0x71, 0xc7, 0xe2, 0x54, 0x93, 0x25, + 0xd9, 0x6f, 0xa8, 0x1e, 0x3b, 0x8d, 0x4a, 0xfc, + }, + { + 0x00, 0xe2, 0xd9, 0x3b, 0xaf, 0x4d, 0x76, 0x94, + 0x43, 0xa1, 0x9a, 0x78, 0xec, 0x0e, 0x35, 0xd7, + 0x00, 0x86, 0x11, 0x97, 0x22, 0xa4, 0x33, 0xb5, + 0x44, 0xc2, 0x55, 0xd3, 0x66, 0xe0, 0x77, 0xf1, + }, + { + 0x00, 0xe3, 0xdb, 0x38, 0xab, 0x48, 0x70, 0x93, + 0x4b, 0xa8, 0x90, 0x73, 0xe0, 0x03, 0x3b, 0xd8, + 0x00, 0x96, 0x31, 0xa7, 0x62, 0xf4, 0x53, 0xc5, + 0xc4, 0x52, 0xf5, 0x63, 0xa6, 0x30, 0x97, 0x01, + }, + { + 0x00, 0xe4, 0xd5, 0x31, 0xb7, 0x53, 0x62, 0x86, + 0x73, 0x97, 0xa6, 0x42, 0xc4, 0x20, 0x11, 0xf5, + 0x00, 0xe6, 0xd1, 0x37, 0xbf, 0x59, 0x6e, 0x88, + 0x63, 0x85, 0xb2, 0x54, 0xdc, 0x3a, 0x0d, 0xeb, + }, + { + 0x00, 0xe5, 0xd7, 0x32, 0xb3, 0x56, 0x64, 0x81, + 0x7b, 0x9e, 0xac, 0x49, 0xc8, 0x2d, 0x1f, 0xfa, + 0x00, 0xf6, 0xf1, 0x07, 0xff, 0x09, 0x0e, 0xf8, + 0xe3, 0x15, 0x12, 0xe4, 0x1c, 0xea, 0xed, 0x1b, + }, + { + 0x00, 0xe6, 0xd1, 0x37, 0xbf, 0x59, 0x6e, 0x88, + 0x63, 0x85, 0xb2, 0x54, 0xdc, 0x3a, 0x0d, 0xeb, + 0x00, 0xc6, 0x91, 0x57, 0x3f, 0xf9, 0xae, 0x68, + 0x7e, 0xb8, 0xef, 0x29, 0x41, 0x87, 0xd0, 0x16, + }, + { + 0x00, 0xe7, 0xd3, 0x34, 0xbb, 0x5c, 0x68, 0x8f, + 0x6b, 0x8c, 0xb8, 0x5f, 0xd0, 0x37, 0x03, 0xe4, + 0x00, 0xd6, 0xb1, 0x67, 0x7f, 0xa9, 0xce, 0x18, + 0xfe, 0x28, 0x4f, 0x99, 0x81, 0x57, 0x30, 0xe6, + }, + { + 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, + 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1, + 0x00, 0x26, 0x4c, 0x6a, 0x98, 0xbe, 0xd4, 0xf2, + 0x2d, 0x0b, 0x61, 0x47, 0xb5, 0x93, 0xf9, 0xdf, + }, + { + 0x00, 0xe9, 0xcf, 0x26, 0x83, 0x6a, 0x4c, 0xa5, + 0x1b, 0xf2, 0xd4, 0x3d, 0x98, 0x71, 0x57, 0xbe, + 0x00, 0x36, 0x6c, 0x5a, 0xd8, 0xee, 0xb4, 0x82, + 0xad, 0x9b, 0xc1, 0xf7, 0x75, 0x43, 0x19, 0x2f, + }, + { + 0x00, 0xea, 0xc9, 0x23, 0x8f, 0x65, 0x46, 0xac, + 0x03, 0xe9, 0xca, 0x20, 0x8c, 0x66, 0x45, 0xaf, + 0x00, 0x06, 0x0c, 0x0a, 0x18, 0x1e, 0x14, 0x12, + 0x30, 0x36, 0x3c, 0x3a, 0x28, 0x2e, 0x24, 0x22, + }, + { + 0x00, 0xeb, 0xcb, 0x20, 0x8b, 0x60, 0x40, 0xab, + 0x0b, 0xe0, 0xc0, 0x2b, 0x80, 0x6b, 0x4b, 0xa0, + 0x00, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, + 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2, + }, + { + 0x00, 0xec, 0xc5, 0x29, 0x97, 0x7b, 0x52, 0xbe, + 0x33, 0xdf, 0xf6, 0x1a, 0xa4, 0x48, 0x61, 0x8d, + 0x00, 0x66, 0xcc, 0xaa, 0x85, 0xe3, 0x49, 0x2f, + 0x17, 0x71, 0xdb, 0xbd, 0x92, 0xf4, 0x5e, 0x38, + }, + { + 0x00, 0xed, 0xc7, 0x2a, 0x93, 0x7e, 0x54, 0xb9, + 0x3b, 0xd6, 0xfc, 0x11, 0xa8, 0x45, 0x6f, 0x82, + 0x00, 0x76, 0xec, 0x9a, 0xc5, 0xb3, 0x29, 0x5f, + 0x97, 0xe1, 0x7b, 0x0d, 0x52, 0x24, 0xbe, 0xc8, + }, + { + 0x00, 0xee, 0xc1, 0x2f, 0x9f, 0x71, 0x5e, 0xb0, + 0x23, 0xcd, 0xe2, 0x0c, 0xbc, 0x52, 0x7d, 0x93, + 0x00, 0x46, 0x8c, 0xca, 0x05, 0x43, 0x89, 0xcf, + 0x0a, 0x4c, 0x86, 0xc0, 0x0f, 0x49, 0x83, 0xc5, + }, + { + 0x00, 0xef, 0xc3, 0x2c, 0x9b, 0x74, 0x58, 0xb7, + 0x2b, 0xc4, 0xe8, 0x07, 0xb0, 0x5f, 0x73, 0x9c, + 0x00, 0x56, 0xac, 0xfa, 0x45, 0x13, 0xe9, 0xbf, + 0x8a, 0xdc, 0x26, 0x70, 0xcf, 0x99, 0x63, 0x35, + }, + { + 0x00, 0xf0, 0xfd, 0x0d, 0xe7, 0x17, 0x1a, 0xea, + 0xd3, 0x23, 0x2e, 0xde, 0x34, 0xc4, 0xc9, 0x39, + 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, + 0xb1, 0x0a, 0xda, 0x61, 0x67, 0xdc, 0x0c, 0xb7, + }, + { + 0x00, 0xf1, 0xff, 0x0e, 0xe3, 0x12, 0x1c, 0xed, + 0xdb, 0x2a, 0x24, 0xd5, 0x38, 0xc9, 0xc7, 0x36, + 0x00, 0xab, 0x4b, 0xe0, 0x96, 0x3d, 0xdd, 0x76, + 0x31, 0x9a, 0x7a, 0xd1, 0xa7, 0x0c, 0xec, 0x47, + }, + { + 0x00, 0xf2, 0xf9, 0x0b, 0xef, 0x1d, 0x16, 0xe4, + 0xc3, 0x31, 0x3a, 0xc8, 0x2c, 0xde, 0xd5, 0x27, + 0x00, 0x9b, 0x2b, 0xb0, 0x56, 0xcd, 0x7d, 0xe6, + 0xac, 0x37, 0x87, 0x1c, 0xfa, 0x61, 0xd1, 0x4a, + }, + { + 0x00, 0xf3, 0xfb, 0x08, 0xeb, 0x18, 0x10, 0xe3, + 0xcb, 0x38, 0x30, 0xc3, 0x20, 0xd3, 0xdb, 0x28, + 0x00, 0x8b, 0x0b, 0x80, 0x16, 0x9d, 0x1d, 0x96, + 0x2c, 0xa7, 0x27, 0xac, 0x3a, 0xb1, 0x31, 0xba, + }, + { + 0x00, 0xf4, 0xf5, 0x01, 0xf7, 0x03, 0x02, 0xf6, + 0xf3, 0x07, 0x06, 0xf2, 0x04, 0xf0, 0xf1, 0x05, + 0x00, 0xfb, 0xeb, 0x10, 0xcb, 0x30, 0x20, 0xdb, + 0x8b, 0x70, 0x60, 0x9b, 0x40, 0xbb, 0xab, 0x50, + }, + { + 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, + 0xfb, 0x0e, 0x0c, 0xf9, 0x08, 0xfd, 0xff, 0x0a, + 0x00, 0xeb, 0xcb, 0x20, 0x8b, 0x60, 0x40, 0xab, + 0x0b, 0xe0, 0xc0, 0x2b, 0x80, 0x6b, 0x4b, 0xa0, + }, + { + 0x00, 0xf6, 0xf1, 0x07, 0xff, 0x09, 0x0e, 0xf8, + 0xe3, 0x15, 0x12, 0xe4, 0x1c, 0xea, 0xed, 0x1b, + 0x00, 0xdb, 0xab, 0x70, 0x4b, 0x90, 0xe0, 0x3b, + 0x96, 0x4d, 0x3d, 0xe6, 0xdd, 0x06, 0x76, 0xad, + }, + { + 0x00, 0xf7, 0xf3, 0x04, 0xfb, 0x0c, 0x08, 0xff, + 0xeb, 0x1c, 0x18, 0xef, 0x10, 0xe7, 0xe3, 0x14, + 0x00, 0xcb, 0x8b, 0x40, 0x0b, 0xc0, 0x80, 0x4b, + 0x16, 0xdd, 0x9d, 0x56, 0x1d, 0xd6, 0x96, 0x5d, + }, + { + 0x00, 0xf8, 0xed, 0x15, 0xc7, 0x3f, 0x2a, 0xd2, + 0x93, 0x6b, 0x7e, 0x86, 0x54, 0xac, 0xb9, 0x41, + 0x00, 0x3b, 0x76, 0x4d, 0xec, 0xd7, 0x9a, 0xa1, + 0xc5, 0xfe, 0xb3, 0x88, 0x29, 0x12, 0x5f, 0x64, + }, + { + 0x00, 0xf9, 0xef, 0x16, 0xc3, 0x3a, 0x2c, 0xd5, + 0x9b, 0x62, 0x74, 0x8d, 0x58, 0xa1, 0xb7, 0x4e, + 0x00, 0x2b, 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, + 0x45, 0x6e, 0x13, 0x38, 0xe9, 0xc2, 0xbf, 0x94, + }, + { + 0x00, 0xfa, 0xe9, 0x13, 0xcf, 0x35, 0x26, 0xdc, + 0x83, 0x79, 0x6a, 0x90, 0x4c, 0xb6, 0xa5, 0x5f, + 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41, + 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99, + }, + { + 0x00, 0xfb, 0xeb, 0x10, 0xcb, 0x30, 0x20, 0xdb, + 0x8b, 0x70, 0x60, 0x9b, 0x40, 0xbb, 0xab, 0x50, + 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, + 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, + }, + { + 0x00, 0xfc, 0xe5, 0x19, 0xd7, 0x2b, 0x32, 0xce, + 0xb3, 0x4f, 0x56, 0xaa, 0x64, 0x98, 0x81, 0x7d, + 0x00, 0x7b, 0xf6, 0x8d, 0xf1, 0x8a, 0x07, 0x7c, + 0xff, 0x84, 0x09, 0x72, 0x0e, 0x75, 0xf8, 0x83, + }, + { + 0x00, 0xfd, 0xe7, 0x1a, 0xd3, 0x2e, 0x34, 0xc9, + 0xbb, 0x46, 0x5c, 0xa1, 0x68, 0x95, 0x8f, 0x72, + 0x00, 0x6b, 0xd6, 0xbd, 0xb1, 0xda, 0x67, 0x0c, + 0x7f, 0x14, 0xa9, 0xc2, 0xce, 0xa5, 0x18, 0x73, + }, + { + 0x00, 0xfe, 0xe1, 0x1f, 0xdf, 0x21, 0x3e, 0xc0, + 0xa3, 0x5d, 0x42, 0xbc, 0x7c, 0x82, 0x9d, 0x63, + 0x00, 0x5b, 0xb6, 0xed, 0x71, 0x2a, 0xc7, 0x9c, + 0xe2, 0xb9, 0x54, 0x0f, 0x93, 0xc8, 0x25, 0x7e, + }, + { + 0x00, 0xff, 0xe3, 0x1c, 0xdb, 0x24, 0x38, 0xc7, + 0xab, 0x54, 0x48, 0xb7, 0x70, 0x8f, 0x93, 0x6c, + 0x00, 0x4b, 0x96, 0xdd, 0x31, 0x7a, 0xa7, 0xec, + 0x62, 0x29, 0xf4, 0xbf, 0x53, 0x18, 0xc5, 0x8e, + }, +}; + +const u8 __attribute__((aligned(256))) +raid6_gfexp[256] = +{ + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, + 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26, + 0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, + 0x8f, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, + 0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, + 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23, + 0x46, 0x8c, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, + 0x5d, 0xba, 0x69, 0xd2, 0xb9, 0x6f, 0xde, 0xa1, + 0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, + 0x65, 0xca, 0x89, 0x0f, 0x1e, 0x3c, 0x78, 0xf0, + 0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, + 0xfe, 0xe1, 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2, + 0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, + 0x0d, 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce, + 0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, + 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc, + 0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, + 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54, + 0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, 0x55, 0xaa, + 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73, + 0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, + 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff, + 0xe3, 0xdb, 0xab, 0x4b, 0x96, 0x31, 0x62, 0xc4, + 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41, + 0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x07, 0x0e, + 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6, + 0x51, 0xa2, 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, + 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x09, + 0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, + 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0x0b, 0x16, + 0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, + 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e, 0x00, +}; + +const u8 __attribute__((aligned(256))) +raid6_gfinv[256] = +{ + 0x00, 0x01, 0x8e, 0xf4, 0x47, 0xa7, 0x7a, 0xba, + 0xad, 0x9d, 0xdd, 0x98, 0x3d, 0xaa, 0x5d, 0x96, + 0xd8, 0x72, 0xc0, 0x58, 0xe0, 0x3e, 0x4c, 0x66, + 0x90, 0xde, 0x55, 0x80, 0xa0, 0x83, 0x4b, 0x2a, + 0x6c, 0xed, 0x39, 0x51, 0x60, 0x56, 0x2c, 0x8a, + 0x70, 0xd0, 0x1f, 0x4a, 0x26, 0x8b, 0x33, 0x6e, + 0x48, 0x89, 0x6f, 0x2e, 0xa4, 0xc3, 0x40, 0x5e, + 0x50, 0x22, 0xcf, 0xa9, 0xab, 0x0c, 0x15, 0xe1, + 0x36, 0x5f, 0xf8, 0xd5, 0x92, 0x4e, 0xa6, 0x04, + 0x30, 0x88, 0x2b, 0x1e, 0x16, 0x67, 0x45, 0x93, + 0x38, 0x23, 0x68, 0x8c, 0x81, 0x1a, 0x25, 0x61, + 0x13, 0xc1, 0xcb, 0x63, 0x97, 0x0e, 0x37, 0x41, + 0x24, 0x57, 0xca, 0x5b, 0xb9, 0xc4, 0x17, 0x4d, + 0x52, 0x8d, 0xef, 0xb3, 0x20, 0xec, 0x2f, 0x32, + 0x28, 0xd1, 0x11, 0xd9, 0xe9, 0xfb, 0xda, 0x79, + 0xdb, 0x77, 0x06, 0xbb, 0x84, 0xcd, 0xfe, 0xfc, + 0x1b, 0x54, 0xa1, 0x1d, 0x7c, 0xcc, 0xe4, 0xb0, + 0x49, 0x31, 0x27, 0x2d, 0x53, 0x69, 0x02, 0xf5, + 0x18, 0xdf, 0x44, 0x4f, 0x9b, 0xbc, 0x0f, 0x5c, + 0x0b, 0xdc, 0xbd, 0x94, 0xac, 0x09, 0xc7, 0xa2, + 0x1c, 0x82, 0x9f, 0xc6, 0x34, 0xc2, 0x46, 0x05, + 0xce, 0x3b, 0x0d, 0x3c, 0x9c, 0x08, 0xbe, 0xb7, + 0x87, 0xe5, 0xee, 0x6b, 0xeb, 0xf2, 0xbf, 0xaf, + 0xc5, 0x64, 0x07, 0x7b, 0x95, 0x9a, 0xae, 0xb6, + 0x12, 0x59, 0xa5, 0x35, 0x65, 0xb8, 0xa3, 0x9e, + 0xd2, 0xf7, 0x62, 0x5a, 0x85, 0x7d, 0xa8, 0x3a, + 0x29, 0x71, 0xc8, 0xf6, 0xf9, 0x43, 0xd7, 0xd6, + 0x10, 0x73, 0x76, 0x78, 0x99, 0x0a, 0x19, 0x91, + 0x14, 0x3f, 0xe6, 0xf0, 0x86, 0xb1, 0xe2, 0xf1, + 0xfa, 0x74, 0xf3, 0xb4, 0x6d, 0x21, 0xb2, 0x6a, + 0xe3, 0xe7, 0xb5, 0xea, 0x03, 0x8f, 0xd3, 0xc9, + 0x42, 0xd4, 0xe8, 0x75, 0x7f, 0xff, 0x7e, 0xfd, +}; + +const u8 __attribute__((aligned(256))) +raid6_gfexi[256] = +{ + 0x00, 0xf4, 0xa7, 0x9d, 0x72, 0xed, 0x5f, 0x54, + 0xa0, 0xa9, 0xfb, 0x74, 0x85, 0xe4, 0xc0, 0x8a, + 0x67, 0xdc, 0x26, 0x63, 0xf2, 0xe9, 0xb4, 0xd2, + 0x02, 0x8e, 0xba, 0xaa, 0xde, 0x89, 0x57, 0x59, + 0xac, 0x2c, 0x93, 0x09, 0x60, 0x1e, 0xbc, 0xa4, + 0xb3, 0x43, 0xeb, 0xda, 0x6a, 0x12, 0xc7, 0x39, + 0x04, 0x69, 0x47, 0x98, 0x3e, 0xd0, 0x23, 0x82, + 0x97, 0x7b, 0x52, 0xf6, 0xc5, 0x2f, 0x91, 0x1c, + 0x37, 0xb6, 0x24, 0x35, 0x0b, 0x33, 0x41, 0x9a, + 0xb9, 0x5a, 0x49, 0x5d, 0x2a, 0x0c, 0x77, 0xe7, + 0x7f, 0xe2, 0xc8, 0x07, 0xef, 0xd6, 0x87, 0xfe, + 0xfd, 0x14, 0x19, 0x9f, 0xcb, 0xaf, 0x28, 0xf0, + 0x10, 0xbe, 0xf8, 0xb0, 0xd8, 0x51, 0x4e, 0x31, + 0x3d, 0x80, 0xc3, 0x8d, 0x71, 0x95, 0x17, 0x3a, + 0x1b, 0x4b, 0xe1, 0xcd, 0xd4, 0x6d, 0xa3, 0x44, + 0xcf, 0x79, 0x21, 0x65, 0x0f, 0x6f, 0x4d, 0x7d, + 0x7c, 0x4c, 0x6e, 0x0e, 0x64, 0x20, 0x78, 0xce, + 0x45, 0xa2, 0x6c, 0xd5, 0xcc, 0xe0, 0x4a, 0x1a, + 0x3b, 0x16, 0x94, 0x70, 0x8c, 0xc2, 0x81, 0x3c, + 0x30, 0x4f, 0x50, 0xd9, 0xb1, 0xf9, 0xbf, 0x11, + 0xf1, 0x29, 0xae, 0xca, 0x9e, 0x18, 0x15, 0xfc, + 0xff, 0x86, 0xd7, 0xee, 0x06, 0xc9, 0xe3, 0x7e, + 0xe6, 0x76, 0x0d, 0x2b, 0x5c, 0x48, 0x5b, 0xb8, + 0x9b, 0x40, 0x32, 0x0a, 0x34, 0x25, 0xb7, 0x36, + 0x1d, 0x90, 0x2e, 0xc4, 0xf7, 0x53, 0x7a, 0x96, + 0x83, 0x22, 0xd1, 0x3f, 0x99, 0x46, 0x68, 0x05, + 0x38, 0xc6, 0x13, 0x6b, 0xdb, 0xea, 0x42, 0xb2, + 0xa5, 0xbd, 0x1f, 0x61, 0x08, 0x92, 0x2d, 0xad, + 0x58, 0x56, 0x88, 0xdf, 0xab, 0xbb, 0x8f, 0x03, + 0xd3, 0xb5, 0xe8, 0xf3, 0x62, 0x27, 0xdd, 0x66, + 0x8b, 0xc1, 0xe5, 0x84, 0x75, 0xfa, 0xa8, 0xa1, + 0x55, 0x5e, 0xec, 0x73, 0x9c, 0xa6, 0xf5, 0x01, +}; diff --git a/messages.h b/messages.h index a308b4b1..4999c7b9 100644 --- a/messages.h +++ b/messages.h @@ -17,19 +17,19 @@ #ifndef __BTRFS_MESSAGES_H__ #define __BTRFS_MESSAGES_H__ -#if DEBUG_VERBOSE_ERROR +#ifdef DEBUG_VERBOSE_ERROR #define PRINT_VERBOSE_ERROR fprintf(stderr, "%s:%d:", __FILE__, __LINE__) #else #define PRINT_VERBOSE_ERROR #endif -#if DEBUG_TRACE_ON_ERROR +#ifdef DEBUG_TRACE_ON_ERROR #define PRINT_TRACE_ON_ERROR print_trace() #else #define PRINT_TRACE_ON_ERROR #endif -#if DEBUG_ABORT_ON_ERROR +#ifdef DEBUG_ABORT_ON_ERROR #define DO_ABORT_ON_ERROR abort() #else #define DO_ABORT_ON_ERROR diff --git a/mkfs/common.c b/mkfs/common.c index e4785c58..c9ce10d4 100644 --- a/mkfs/common.c +++ b/mkfs/common.c @@ -34,6 +34,67 @@ static u64 reference_root_table[] = { [6] = BTRFS_CSUM_TREE_OBJECTID, }; +static int btrfs_create_tree_root(int fd, struct btrfs_mkfs_config *cfg, + struct extent_buffer *buf) +{ + struct btrfs_root_item root_item; + struct btrfs_inode_item *inode_item; + struct btrfs_disk_key disk_key; + u32 nritems = 0; + u32 itemoff; + int ret = 0; + int blk; + + memset(buf->data + sizeof(struct btrfs_header), 0, + cfg->nodesize - sizeof(struct btrfs_header)); + memset(&root_item, 0, sizeof(root_item)); + memset(&disk_key, 0, sizeof(disk_key)); + + /* create the items for the root tree */ + inode_item = &root_item.inode; + btrfs_set_stack_inode_generation(inode_item, 1); + btrfs_set_stack_inode_size(inode_item, 3); + btrfs_set_stack_inode_nlink(inode_item, 1); + btrfs_set_stack_inode_nbytes(inode_item, cfg->nodesize); + btrfs_set_stack_inode_mode(inode_item, S_IFDIR | 0755); + btrfs_set_root_refs(&root_item, 1); + btrfs_set_root_used(&root_item, cfg->nodesize); + btrfs_set_root_generation(&root_item, 1); + + btrfs_set_disk_key_type(&disk_key, BTRFS_ROOT_ITEM_KEY); + btrfs_set_disk_key_offset(&disk_key, 0); + itemoff = __BTRFS_LEAF_DATA_SIZE(cfg->nodesize) - sizeof(root_item); + + for (blk = 0; blk < MKFS_BLOCK_COUNT; blk++) { + if (blk == MKFS_SUPER_BLOCK || blk == MKFS_ROOT_TREE + || blk == MKFS_CHUNK_TREE) + continue; + + btrfs_set_root_bytenr(&root_item, cfg->blocks[blk]); + btrfs_set_disk_key_objectid(&disk_key, + reference_root_table[blk]); + btrfs_set_item_key(buf, &disk_key, nritems); + btrfs_set_item_offset(buf, btrfs_item_nr(nritems), itemoff); + btrfs_set_item_size(buf, btrfs_item_nr(nritems), + sizeof(root_item)); + write_extent_buffer(buf, &root_item, + btrfs_item_ptr_offset(buf, nritems), + sizeof(root_item)); + nritems++; + itemoff -= sizeof(root_item); + } + + /* generate checksum */ + csum_tree_block_size(buf, BTRFS_CRC32_SIZE, 0); + + /* write back root tree */ + ret = pwrite(fd, buf->data, cfg->nodesize, cfg->blocks[MKFS_ROOT_TREE]); + if (ret != cfg->nodesize) + return (ret < 0 ? -errno : -EIO); + + return ret; +} + /* * @fs_uuid - if NULL, generates a UUID, returns back the new filesystem UUID * @@ -44,10 +105,8 @@ int make_btrfs(int fd, struct btrfs_mkfs_config *cfg) { struct btrfs_super_block super; struct extent_buffer *buf; - struct btrfs_root_item root_item; struct btrfs_disk_key disk_key; struct btrfs_extent_item *extent_item; - struct btrfs_inode_item *inode_item; struct btrfs_chunk *chunk; struct btrfs_dev_item *dev_item; struct btrfs_dev_extent *dev_extent; @@ -93,18 +152,18 @@ int make_btrfs(int fd, struct btrfs_mkfs_config *cfg) uuid_generate(super.dev_item.uuid); uuid_generate(chunk_tree_uuid); - cfg->blocks[0] = BTRFS_SUPER_INFO_OFFSET; - for (i = 1; i < 7; i++) { - cfg->blocks[i] = BTRFS_SUPER_INFO_OFFSET + 1024 * 1024 + + cfg->blocks[MKFS_SUPER_BLOCK] = BTRFS_SUPER_INFO_OFFSET; + for (i = 1; i < MKFS_BLOCK_COUNT; i++) { + cfg->blocks[i] = BTRFS_SUPER_INFO_OFFSET + SZ_1M + cfg->nodesize * i; } - btrfs_set_super_bytenr(&super, cfg->blocks[0]); + btrfs_set_super_bytenr(&super, cfg->blocks[MKFS_SUPER_BLOCK]); btrfs_set_super_num_devices(&super, 1); btrfs_set_super_magic(&super, BTRFS_MAGIC_PARTIAL); btrfs_set_super_generation(&super, 1); - btrfs_set_super_root(&super, cfg->blocks[1]); - btrfs_set_super_chunk_root(&super, cfg->blocks[3]); + btrfs_set_super_root(&super, cfg->blocks[MKFS_ROOT_TREE]); + btrfs_set_super_chunk_root(&super, cfg->blocks[MKFS_CHUNK_TREE]); btrfs_set_super_total_bytes(&super, num_bytes); btrfs_set_super_bytes_used(&super, 6 * cfg->nodesize); btrfs_set_super_sectorsize(&super, cfg->sectorsize); @@ -121,7 +180,7 @@ int make_btrfs(int fd, struct btrfs_mkfs_config *cfg) /* create the tree of root objects */ memset(buf->data, 0, cfg->nodesize); buf->len = cfg->nodesize; - btrfs_set_header_bytenr(buf, cfg->blocks[1]); + btrfs_set_header_bytenr(buf, cfg->blocks[MKFS_ROOT_TREE]); btrfs_set_header_nritems(buf, 4); btrfs_set_header_generation(buf, 1); btrfs_set_header_backref_rev(buf, BTRFS_MIXED_BACKREF_REV); @@ -133,84 +192,16 @@ int make_btrfs(int fd, struct btrfs_mkfs_config *cfg) btrfs_header_chunk_tree_uuid(buf), BTRFS_UUID_SIZE); - /* create the items for the root tree */ - memset(&root_item, 0, sizeof(root_item)); - inode_item = &root_item.inode; - btrfs_set_stack_inode_generation(inode_item, 1); - btrfs_set_stack_inode_size(inode_item, 3); - btrfs_set_stack_inode_nlink(inode_item, 1); - btrfs_set_stack_inode_nbytes(inode_item, cfg->nodesize); - btrfs_set_stack_inode_mode(inode_item, S_IFDIR | 0755); - btrfs_set_root_refs(&root_item, 1); - btrfs_set_root_used(&root_item, cfg->nodesize); - btrfs_set_root_generation(&root_item, 1); - - memset(&disk_key, 0, sizeof(disk_key)); - btrfs_set_disk_key_type(&disk_key, BTRFS_ROOT_ITEM_KEY); - btrfs_set_disk_key_offset(&disk_key, 0); - nritems = 0; - - itemoff = __BTRFS_LEAF_DATA_SIZE(cfg->nodesize) - sizeof(root_item); - btrfs_set_root_bytenr(&root_item, cfg->blocks[2]); - btrfs_set_disk_key_objectid(&disk_key, BTRFS_EXTENT_TREE_OBJECTID); - btrfs_set_item_key(buf, &disk_key, nritems); - btrfs_set_item_offset(buf, btrfs_item_nr(nritems), itemoff); - btrfs_set_item_size(buf, btrfs_item_nr(nritems), - sizeof(root_item)); - write_extent_buffer(buf, &root_item, btrfs_item_ptr_offset(buf, - nritems), sizeof(root_item)); - nritems++; - - itemoff = itemoff - sizeof(root_item); - btrfs_set_root_bytenr(&root_item, cfg->blocks[4]); - btrfs_set_disk_key_objectid(&disk_key, BTRFS_DEV_TREE_OBJECTID); - btrfs_set_item_key(buf, &disk_key, nritems); - btrfs_set_item_offset(buf, btrfs_item_nr(nritems), itemoff); - btrfs_set_item_size(buf, btrfs_item_nr(nritems), - sizeof(root_item)); - write_extent_buffer(buf, &root_item, - btrfs_item_ptr_offset(buf, nritems), - sizeof(root_item)); - nritems++; - - itemoff = itemoff - sizeof(root_item); - btrfs_set_root_bytenr(&root_item, cfg->blocks[5]); - btrfs_set_disk_key_objectid(&disk_key, BTRFS_FS_TREE_OBJECTID); - btrfs_set_item_key(buf, &disk_key, nritems); - btrfs_set_item_offset(buf, btrfs_item_nr(nritems), itemoff); - btrfs_set_item_size(buf, btrfs_item_nr(nritems), - sizeof(root_item)); - write_extent_buffer(buf, &root_item, - btrfs_item_ptr_offset(buf, nritems), - sizeof(root_item)); - nritems++; - - itemoff = itemoff - sizeof(root_item); - btrfs_set_root_bytenr(&root_item, cfg->blocks[6]); - btrfs_set_disk_key_objectid(&disk_key, BTRFS_CSUM_TREE_OBJECTID); - btrfs_set_item_key(buf, &disk_key, nritems); - btrfs_set_item_offset(buf, btrfs_item_nr(nritems), itemoff); - btrfs_set_item_size(buf, btrfs_item_nr(nritems), - sizeof(root_item)); - write_extent_buffer(buf, &root_item, - btrfs_item_ptr_offset(buf, nritems), - sizeof(root_item)); - nritems++; - - - csum_tree_block_size(buf, BTRFS_CRC32_SIZE, 0); - ret = pwrite(fd, buf->data, cfg->nodesize, cfg->blocks[1]); - if (ret != cfg->nodesize) { - ret = (ret < 0 ? -errno : -EIO); + ret = btrfs_create_tree_root(fd, cfg, buf); + if (ret < 0) goto out; - } /* create the items for the extent tree */ memset(buf->data + sizeof(struct btrfs_header), 0, cfg->nodesize - sizeof(struct btrfs_header)); nritems = 0; itemoff = __BTRFS_LEAF_DATA_SIZE(cfg->nodesize); - for (i = 1; i < 7; i++) { + for (i = 1; i < MKFS_BLOCK_COUNT; i++) { item_size = sizeof(struct btrfs_extent_item); if (!skinny_metadata) item_size += sizeof(struct btrfs_tree_block_info); @@ -267,11 +258,11 @@ int make_btrfs(int fd, struct btrfs_mkfs_config *cfg) btrfs_set_item_size(buf, btrfs_item_nr(nritems), 0); nritems++; } - btrfs_set_header_bytenr(buf, cfg->blocks[2]); + btrfs_set_header_bytenr(buf, cfg->blocks[MKFS_EXTENT_TREE]); btrfs_set_header_owner(buf, BTRFS_EXTENT_TREE_OBJECTID); btrfs_set_header_nritems(buf, nritems); csum_tree_block_size(buf, BTRFS_CRC32_SIZE, 0); - ret = pwrite(fd, buf->data, cfg->nodesize, cfg->blocks[2]); + ret = pwrite(fd, buf->data, cfg->nodesize, cfg->blocks[MKFS_EXTENT_TREE]); if (ret != cfg->nodesize) { ret = (ret < 0 ? -errno : -EIO); goto out; @@ -354,11 +345,11 @@ int make_btrfs(int fd, struct btrfs_mkfs_config *cfg) ptr += item_size; btrfs_set_super_sys_array_size(&super, array_size); - btrfs_set_header_bytenr(buf, cfg->blocks[3]); + btrfs_set_header_bytenr(buf, cfg->blocks[MKFS_CHUNK_TREE]); btrfs_set_header_owner(buf, BTRFS_CHUNK_TREE_OBJECTID); btrfs_set_header_nritems(buf, nritems); csum_tree_block_size(buf, BTRFS_CRC32_SIZE, 0); - ret = pwrite(fd, buf->data, cfg->nodesize, cfg->blocks[3]); + ret = pwrite(fd, buf->data, cfg->nodesize, cfg->blocks[MKFS_CHUNK_TREE]); if (ret != cfg->nodesize) { ret = (ret < 0 ? -errno : -EIO); goto out; @@ -393,11 +384,11 @@ int make_btrfs(int fd, struct btrfs_mkfs_config *cfg) BTRFS_MKFS_SYSTEM_GROUP_SIZE); nritems++; - btrfs_set_header_bytenr(buf, cfg->blocks[4]); + btrfs_set_header_bytenr(buf, cfg->blocks[MKFS_DEV_TREE]); btrfs_set_header_owner(buf, BTRFS_DEV_TREE_OBJECTID); btrfs_set_header_nritems(buf, nritems); csum_tree_block_size(buf, BTRFS_CRC32_SIZE, 0); - ret = pwrite(fd, buf->data, cfg->nodesize, cfg->blocks[4]); + ret = pwrite(fd, buf->data, cfg->nodesize, cfg->blocks[MKFS_DEV_TREE]); if (ret != cfg->nodesize) { ret = (ret < 0 ? -errno : -EIO); goto out; @@ -406,11 +397,11 @@ int make_btrfs(int fd, struct btrfs_mkfs_config *cfg) /* create the FS root */ memset(buf->data + sizeof(struct btrfs_header), 0, cfg->nodesize - sizeof(struct btrfs_header)); - btrfs_set_header_bytenr(buf, cfg->blocks[5]); + btrfs_set_header_bytenr(buf, cfg->blocks[MKFS_FS_TREE]); btrfs_set_header_owner(buf, BTRFS_FS_TREE_OBJECTID); btrfs_set_header_nritems(buf, 0); csum_tree_block_size(buf, BTRFS_CRC32_SIZE, 0); - ret = pwrite(fd, buf->data, cfg->nodesize, cfg->blocks[5]); + ret = pwrite(fd, buf->data, cfg->nodesize, cfg->blocks[MKFS_FS_TREE]); if (ret != cfg->nodesize) { ret = (ret < 0 ? -errno : -EIO); goto out; @@ -418,11 +409,11 @@ int make_btrfs(int fd, struct btrfs_mkfs_config *cfg) /* finally create the csum root */ memset(buf->data + sizeof(struct btrfs_header), 0, cfg->nodesize - sizeof(struct btrfs_header)); - btrfs_set_header_bytenr(buf, cfg->blocks[6]); + btrfs_set_header_bytenr(buf, cfg->blocks[MKFS_CSUM_TREE]); btrfs_set_header_owner(buf, BTRFS_CSUM_TREE_OBJECTID); btrfs_set_header_nritems(buf, 0); csum_tree_block_size(buf, BTRFS_CRC32_SIZE, 0); - ret = pwrite(fd, buf->data, cfg->nodesize, cfg->blocks[6]); + ret = pwrite(fd, buf->data, cfg->nodesize, cfg->blocks[MKFS_CSUM_TREE]); if (ret != cfg->nodesize) { ret = (ret < 0 ? -errno : -EIO); goto out; @@ -433,7 +424,8 @@ int make_btrfs(int fd, struct btrfs_mkfs_config *cfg) memcpy(buf->data, &super, sizeof(super)); buf->len = BTRFS_SUPER_INFO_SIZE; csum_tree_block_size(buf, BTRFS_CRC32_SIZE, 0); - ret = pwrite(fd, buf->data, BTRFS_SUPER_INFO_SIZE, cfg->blocks[0]); + ret = pwrite(fd, buf->data, BTRFS_SUPER_INFO_SIZE, + cfg->blocks[MKFS_SUPER_BLOCK]); if (ret != BTRFS_SUPER_INFO_SIZE) { ret = (ret < 0 ? -errno : -EIO); goto out; diff --git a/mkfs/common.h b/mkfs/common.h index 666a75b3..dee0ea97 100644 --- a/mkfs/common.h +++ b/mkfs/common.h @@ -28,6 +28,20 @@ #define BTRFS_MKFS_SYSTEM_GROUP_SIZE SZ_4M #define BTRFS_MKFS_SMALL_VOLUME_SIZE SZ_1G +/* + * Tree root blocks created during mkfs + */ +enum btrfs_mkfs_block { + MKFS_SUPER_BLOCK = 0, + MKFS_ROOT_TREE, + MKFS_EXTENT_TREE, + MKFS_CHUNK_TREE, + MKFS_DEV_TREE, + MKFS_FS_TREE, + MKFS_CSUM_TREE, + MKFS_BLOCK_COUNT +}; + struct btrfs_mkfs_config { /* Label of the new filesystem */ const char *label; @@ -43,7 +57,7 @@ struct btrfs_mkfs_config { /* Output fields, set during creation */ /* Logical addresses of superblock [0] and other tree roots */ - u64 blocks[8]; + u64 blocks[MKFS_BLOCK_COUNT + 1]; char fs_uuid[BTRFS_UUID_UNPARSED_SIZE]; char chunk_uuid[BTRFS_UUID_UNPARSED_SIZE]; diff --git a/mkfs/main.c b/mkfs/main.c index 2b109a53..1b4cabc1 100644 --- a/mkfs/main.c +++ b/mkfs/main.c @@ -47,6 +47,8 @@ #include "mkfs/common.h" #include "fsfeatures.h" +int path_cat_out(char *out, const char *p1, const char *p2); + static u64 index_cnt = 2; static int verbose = 1; @@ -75,6 +77,7 @@ static int create_metadata_block_groups(struct btrfs_root *root, int mixed, int ret; trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); bytes_used = btrfs_super_bytes_used(fs_info->super_copy); root->fs_info->system_allocs = 1; @@ -320,13 +323,12 @@ static int create_raid_groups(struct btrfs_trans_handle *trans, return ret; } -static int create_data_reloc_tree(struct btrfs_trans_handle *trans, - struct btrfs_root *root) +static int create_tree(struct btrfs_trans_handle *trans, + struct btrfs_root *root, u64 objectid) { struct btrfs_key location; struct btrfs_root_item root_item; struct extent_buffer *tmp; - u64 objectid = BTRFS_DATA_RELOC_TREE_OBJECTID; int ret; ret = btrfs_copy_root(trans, root, root->node, &tmp, objectid); @@ -435,6 +437,14 @@ static int add_directory_items(struct btrfs_trans_handle *trans, filetype = BTRFS_FT_REG_FILE; if (S_ISLNK(st->st_mode)) filetype = BTRFS_FT_SYMLINK; + if (S_ISSOCK(st->st_mode)) + filetype = BTRFS_FT_SOCK; + if (S_ISCHR(st->st_mode)) + filetype = BTRFS_FT_CHRDEV; + if (S_ISBLK(st->st_mode)) + filetype = BTRFS_FT_BLKDEV; + if (S_ISFIFO(st->st_mode)) + filetype = BTRFS_FT_FIFO; ret = btrfs_insert_dir_item(trans, root, name, name_len, parent_inum, &location, @@ -719,7 +729,7 @@ again: * keep our extent size at 1MB max, this makes it easier to work inside * the tiny block groups created during mkfs */ - cur_bytes = min(total_bytes, 1024ULL * 1024); + cur_bytes = min(total_bytes, (u64)SZ_1M); ret = btrfs_reserve_extent(trans, root, cur_bytes, 0, 0, (u64)-1, &key, 1); if (ret) @@ -785,23 +795,9 @@ end: return ret; } -static char *make_path(const char *dir, const char *name) -{ - char *path; - - path = malloc(strlen(dir) + strlen(name) + 2); - if (!path) - return NULL; - strcpy(path, dir); - if (dir[strlen(dir) - 1] != '/') - strcat(path, "/"); - strcat(path, name); - return path; -} - static int traverse_directory(struct btrfs_trans_handle *trans, struct btrfs_root *root, const char *dir_name, - struct directory_name_entry *dir_head, int out_fd) + struct directory_name_entry *dir_head) { int ret = 0; @@ -933,14 +929,28 @@ static int traverse_directory(struct btrfs_trans_handle *trans, } if (S_ISDIR(st.st_mode)) { + char tmp[PATH_MAX]; + dir_entry = malloc(sizeof(struct directory_name_entry)); if (!dir_entry) { ret = -ENOMEM; goto fail; } dir_entry->dir_name = cur_file->d_name; - dir_entry->path = make_path(parent_dir_entry->path, - cur_file->d_name); + if (path_cat_out(tmp, parent_dir_entry->path, + cur_file->d_name)) { + error("invalid path: %s/%s", + parent_dir_entry->path, + cur_file->d_name); + ret = -EINVAL; + goto fail; + } + dir_entry->path = strdup(tmp); + if (!dir_entry->path) { + error("not enough memory to store path"); + ret = -ENOMEM; + goto fail; + } dir_entry->inum = cur_inum; list_add_tail(&dir_entry->list, &dir_head->list); } else if (S_ISREG(st.st_mode)) { @@ -992,7 +1002,7 @@ static int create_chunks(struct btrfs_trans_handle *trans, u64 chunk_size; u64 meta_type = BTRFS_BLOCK_GROUP_METADATA; u64 data_type = BTRFS_BLOCK_GROUP_DATA; - u64 minimum_data_chunk_size = 8 * 1024 * 1024; + u64 minimum_data_chunk_size = SZ_8M; u64 i; int ret; @@ -1029,8 +1039,7 @@ static int create_chunks(struct btrfs_trans_handle *trans, return ret; } -static int make_image(const char *source_dir, struct btrfs_root *root, - int out_fd) +static int make_image(const char *source_dir, struct btrfs_root *root) { int ret; struct btrfs_trans_handle *trans; @@ -1048,7 +1057,8 @@ static int make_image(const char *source_dir, struct btrfs_root *root, INIT_LIST_HEAD(&dir_head.list); trans = btrfs_start_transaction(root, 1); - ret = traverse_directory(trans, root, source_dir, &dir_head, out_fd); + BUG_ON(IS_ERR(trans)); + ret = traverse_directory(trans, root, source_dir, &dir_head); if (ret) { error("unable to traverse directory %s: %d", source_dir, ret); goto fail; @@ -1096,9 +1106,9 @@ static u64 size_sourcedir(const char *dir_name, u64 sectorsize, u64 dir_size = 0; u64 total_size = 0; int ret; - u64 default_chunk_size = 8 * 1024 * 1024; /* 8MB */ - u64 allocated_meta_size = 8 * 1024 * 1024; /* 8MB */ - u64 allocated_total_size = 20 * 1024 * 1024; /* 20MB */ + u64 default_chunk_size = SZ_8M; + u64 allocated_meta_size = SZ_8M; + u64 allocated_total_size = 20 * SZ_1M; /* 20MB */ u64 num_of_meta_chunks = 0; u64 num_of_data_chunks = 0; u64 num_of_allocated_meta_chunks = @@ -1326,6 +1336,7 @@ static int cleanup_temp_chunks(struct btrfs_fs_info *fs_info, btrfs_init_path(&path); trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); key.objectid = 0; key.type = BTRFS_BLOCK_GROUP_ITEM_KEY; @@ -1410,7 +1421,7 @@ int main(int argc, char **argv) u32 sectorsize = 4096; u32 stripesize = 4096; int zero_end = 1; - int fd; + int fd = -1; int ret; int i; int mixed = 0; @@ -1496,12 +1507,12 @@ int main(int argc, char **argv) error("unrecognized filesystem feature '%s'", tmp); free(orig); - exit(1); + goto error; } free(orig); if (features & BTRFS_FEATURE_LIST_ALL) { btrfs_list_all_fs_features(0); - exit(0); + goto success; } break; } @@ -1515,8 +1526,7 @@ int main(int argc, char **argv) case 'V': printf("mkfs.btrfs, part of %s\n", PACKAGE_STRING); - exit(0); - break; + goto success; case 'r': source_dir = optarg; source_dir_set = 1; @@ -1551,7 +1561,7 @@ int main(int argc, char **argv) if (source_dir_set && dev_cnt > 1) { error("the option -r is limited to a single device"); - exit(1); + goto error; } if (*fs_uuid) { @@ -1559,11 +1569,11 @@ int main(int argc, char **argv) if (uuid_parse(fs_uuid, dummy_uuid) != 0) { error("could not parse UUID: %s", fs_uuid); - exit(1); + goto error; } if (!test_uuid_unique(fs_uuid)) { error("non-unique UUID: %s", fs_uuid); - exit(1); + goto error; } } @@ -1571,7 +1581,7 @@ int main(int argc, char **argv) file = argv[optind++]; if (is_block_device(file) == 1) if (test_dev_for_mkfs(file, force_overwrite)) - exit(1); + goto error; } optind = saved_optind; @@ -1606,7 +1616,7 @@ int main(int argc, char **argv) if (metadata_profile != data_profile) { error( "with mixed block groups data and metadata profiles must be the same"); - exit(1); + goto error; } } @@ -1628,12 +1638,12 @@ int main(int argc, char **argv) if (btrfs_check_nodesize(nodesize, sectorsize, features)) - exit(1); + goto error; if (sectorsize < sizeof(struct btrfs_super_block)) { error("sectorsize smaller than superblock: %u < %zu", sectorsize, sizeof(struct btrfs_super_block)); - exit(1); + goto error; } /* Check device/block_count after the nodesize is determined */ @@ -1642,7 +1652,7 @@ int main(int argc, char **argv) block_count); error("minimum size for btrfs filesystem is %llu", btrfs_min_dev_size(nodesize)); - exit(1); + goto error; } for (i = saved_optind; i < saved_optind + dev_cnt; i++) { char *path; @@ -1652,20 +1662,20 @@ int main(int argc, char **argv) if (ret < 0) { error("failed to check size for %s: %s", path, strerror(-ret)); - exit (1); + goto error; } if (ret > 0) { error("'%s' is too small to make a usable filesystem", path); error("minimum size for each btrfs device is %llu", btrfs_min_dev_size(nodesize)); - exit(1); + goto error; } } ret = test_num_disk_vs_raid(metadata_profile, data_profile, dev_cnt, mixed, ssd); if (ret) - exit(1); + goto error; dev_cnt--; @@ -1678,7 +1688,7 @@ int main(int argc, char **argv) fd = open(file, O_RDWR); if (fd < 0) { error("unable to open %s: %s", file, strerror(errno)); - exit(1); + goto error; } ret = btrfs_prepare_device(fd, file, &dev_block_count, block_count, @@ -1686,22 +1696,21 @@ int main(int argc, char **argv) (discard ? PREP_DEVICE_DISCARD : 0) | (verbose ? PREP_DEVICE_VERBOSE : 0)); if (ret) { - close(fd); - exit(1); + goto error; } if (block_count && block_count > dev_block_count) { error("%s is smaller than requested size, expected %llu, found %llu", file, (unsigned long long)block_count, (unsigned long long)dev_block_count); - exit(1); + goto error; } } else { fd = open(file, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH); if (fd < 0) { error("unable to open %s: %s", file, strerror(errno)); - exit(1); + goto error; } source_dir_size = size_sourcedir(source_dir, sectorsize, @@ -1711,7 +1720,7 @@ int main(int argc, char **argv) ret = zero_output_file(fd, block_count); if (ret) { error("unable to zero the output file"); - exit(1); + goto error; } /* our "device" is the new image file */ dev_block_count = block_count; @@ -1721,7 +1730,7 @@ int main(int argc, char **argv) if (dev_block_count < BTRFS_MKFS_SYSTEM_GROUP_SIZE) { error("device is too small to make filesystem, must be at least %llu", (unsigned long long)BTRFS_MKFS_SYSTEM_GROUP_SIZE); - exit(1); + goto error; } if (group_profile_max_safe_loss(metadata_profile) < @@ -1740,41 +1749,42 @@ int main(int argc, char **argv) ret = make_btrfs(fd, &mkfs_cfg); if (ret) { error("error during mkfs: %s", strerror(-ret)); - exit(1); + goto error; } fs_info = open_ctree_fs_info(file, 0, 0, 0, OPEN_CTREE_WRITES | OPEN_CTREE_FS_PARTIAL); if (!fs_info) { error("open ctree failed"); - close(fd); - exit(1); + goto error; } + close(fd); + fd = -1; root = fs_info->fs_root; fs_info->alloc_start = alloc_start; ret = create_metadata_block_groups(root, mixed, &allocation); if (ret) { error("failed to create default block groups: %d", ret); - exit(1); + goto error; } trans = btrfs_start_transaction(root, 1); - if (!trans) { + if (IS_ERR(trans)) { error("failed to start transaction"); - exit(1); + goto error; } ret = create_data_block_groups(trans, root, mixed, &allocation); if (ret) { error("failed to create default data block groups: %d", ret); - exit(1); + goto error; } ret = make_root_dir(trans, root); if (ret) { error("failed to setup the root directory: %d", ret); - exit(1); + goto error; } ret = btrfs_commit_transaction(trans, root); @@ -1784,9 +1794,9 @@ int main(int argc, char **argv) } trans = btrfs_start_transaction(root, 1); - if (!trans) { + if (IS_ERR(trans)) { error("failed to start transaction"); - exit(1); + goto error; } if (dev_cnt == 0) @@ -1803,7 +1813,7 @@ int main(int argc, char **argv) fd = open(file, O_RDWR); if (fd < 0) { error("unable to open %s: %s", file, strerror(errno)); - exit(1); + goto error; } ret = btrfs_device_already_in_root(root, fd, BTRFS_SUPER_INFO_OFFSET); @@ -1819,8 +1829,7 @@ int main(int argc, char **argv) (zero_end ? PREP_DEVICE_ZERO_END : 0) | (discard ? PREP_DEVICE_DISCARD : 0)); if (ret) { - close(fd); - exit(1); + goto error; } ret = btrfs_add_to_fsid(trans, root, fd, file, dev_block_count, @@ -1849,7 +1858,7 @@ raid_groups: } } - ret = create_data_reloc_tree(trans, root); + ret = create_tree(trans, root, BTRFS_DATA_RELOC_TREE_OBJECTID); if (ret) { error("unable to create data reloc tree: %d", ret); goto out; @@ -1863,6 +1872,7 @@ raid_groups: if (source_dir_set) { trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); ret = create_chunks(trans, root, num_of_meta_chunks, size_of_data, &allocation); @@ -1876,7 +1886,7 @@ raid_groups: goto out; } - ret = make_image(source_dir, root, fd); + ret = make_image(source_dir, root); if (ret) { error("error wihle filling filesystem: %d", ret); goto out; @@ -1944,4 +1954,12 @@ out: free(label); return !!ret; +error: + if (fd > 0) + close(fd); + + free(label); + exit(1); +success: + exit(0); } diff --git a/print-tree.c b/print-tree.c index 5927ed35..3c585e31 100644 --- a/print-tree.c +++ b/print-tree.c @@ -104,8 +104,7 @@ static void print_inode_extref_item(struct extent_buffer *eb, u32 size, read_extent_buffer(eb, namebuf, (unsigned long)(extref->name), len); - printf("\t\tinode extref index %llu parent %llu namelen %u " - "name: %.*s\n", + printf("\t\tindex %llu parent %llu namelen %u name: %.*s\n", (unsigned long long)index, (unsigned long long)parent_objid, name_len, len, namebuf); @@ -130,7 +129,7 @@ static void print_inode_ref_item(struct extent_buffer *eb, u32 size, index = btrfs_inode_ref_index(eb, ref); len = (name_len <= sizeof(namebuf))? name_len: sizeof(namebuf); read_extent_buffer(eb, namebuf, (unsigned long)(ref + 1), len); - printf("\t\tinode ref index %llu namelen %u name: %.*s\n", + printf("\t\tindex %llu namelen %u name: %.*s\n", (unsigned long long)index, name_len, len, namebuf); len = sizeof(*ref) + name_len; ref = (struct btrfs_inode_ref *)((char *)ref + len); @@ -195,13 +194,21 @@ static void qgroup_flags_to_str(u64 flags, char *ret) strcat(ret, "|INCONSISTENT"); } -void print_chunk(struct extent_buffer *eb, struct btrfs_chunk *chunk) +void print_chunk_item(struct extent_buffer *eb, struct btrfs_chunk *chunk) { u16 num_stripes = btrfs_chunk_num_stripes(eb, chunk); int i; - u32 chunk_item_size = btrfs_chunk_item_size(num_stripes); + u32 chunk_item_size; char chunk_flags_str[32] = {0}; + /* The chunk must contain at least one stripe */ + if (num_stripes < 1) { + printf("invalid num_stripes: %u\n", num_stripes); + return; + } + + chunk_item_size = btrfs_chunk_item_size(num_stripes); + if ((unsigned long)chunk + chunk_item_size > eb->len) { printf("\t\tchunk item invalid\n"); return; @@ -316,6 +323,9 @@ static void compress_type_to_str(u8 compress_type, char *ret) case BTRFS_COMPRESS_LZO: strcpy(ret, "lzo"); break; + case BTRFS_COMPRESS_ZSTD: + strcpy(ret, "zstd"); + break; default: sprintf(ret, "UNKNOWN.%d", compress_type); } @@ -417,7 +427,7 @@ void print_extent_item(struct extent_buffer *eb, int slot, int metadata) struct btrfs_extent_item_v0 *ei0; BUG_ON(item_size != sizeof(*ei0)); ei0 = btrfs_item_ptr(eb, slot, struct btrfs_extent_item_v0); - printf("\t\textent refs %u\n", + printf("\t\trefs %u\n", btrfs_extent_refs_v0(eb, ei0)); return; #else @@ -429,7 +439,7 @@ void print_extent_item(struct extent_buffer *eb, int slot, int metadata) flags = btrfs_extent_flags(eb, ei); extent_flags_to_str(flags, flags_str); - printf("\t\textent refs %llu gen %llu flags %s\n", + printf("\t\trefs %llu gen %llu flags %s\n", (unsigned long long)btrfs_extent_refs(eb, ei), (unsigned long long)btrfs_extent_generation(eb, ei), flags_str); @@ -541,7 +551,7 @@ static void root_flags_to_str(u64 flags, char *ret) strcat(ret, "none"); } -static void print_root(struct extent_buffer *leaf, int slot) +static void print_root_item(struct extent_buffer *leaf, int slot) { struct btrfs_root_item *ri; struct btrfs_root_item root_item; @@ -873,7 +883,7 @@ static void print_inode_item(struct extent_buffer *eb, memset(flags_str, 0, sizeof(flags_str)); inode_flags_to_str(btrfs_inode_flags(eb, ii), flags_str); - printf("\t\tinode generation %llu transid %llu size %llu nbytes %llu\n" + printf("\t\tgeneration %llu transid %llu size %llu nbytes %llu\n" "\t\tblock group %llu mode %o links %u uid %u gid %u rdev %llu\n" "\t\tsequence %llu flags 0x%llx(%s)\n", (unsigned long long)btrfs_inode_generation(eb, ii), @@ -956,6 +966,165 @@ static void print_dev_stats(struct extent_buffer *eb, } } +static void print_block_group_item(struct extent_buffer *eb, + struct btrfs_block_group_item *bgi) +{ + struct btrfs_block_group_item bg_item; + char flags_str[256]; + + read_extent_buffer(eb, &bg_item, (unsigned long)bgi, sizeof(bg_item)); + memset(flags_str, 0, sizeof(flags_str)); + bg_flags_to_str(btrfs_block_group_flags(&bg_item), flags_str); + printf("\t\tblock group used %llu chunk_objectid %llu flags %s\n", + (unsigned long long)btrfs_block_group_used(&bg_item), + (unsigned long long)btrfs_block_group_chunk_objectid(&bg_item), + flags_str); +} + +static void print_extent_data_ref(struct extent_buffer *eb, int slot) +{ + struct btrfs_extent_data_ref *dref; + + dref = btrfs_item_ptr(eb, slot, struct btrfs_extent_data_ref); + printf("\t\textent data backref root %llu " + "objectid %llu offset %llu count %u\n", + (unsigned long long)btrfs_extent_data_ref_root(eb, dref), + (unsigned long long)btrfs_extent_data_ref_objectid(eb, dref), + (unsigned long long)btrfs_extent_data_ref_offset(eb, dref), + btrfs_extent_data_ref_count(eb, dref)); +} + +static void print_shared_data_ref(struct extent_buffer *eb, int slot) +{ + struct btrfs_shared_data_ref *sref; + + sref = btrfs_item_ptr(eb, slot, struct btrfs_shared_data_ref); + printf("\t\tshared data backref count %u\n", + btrfs_shared_data_ref_count(eb, sref)); +} + +static void print_free_space_info(struct extent_buffer *eb, int slot) +{ + struct btrfs_free_space_info *free_info; + + free_info = btrfs_item_ptr(eb, slot, struct btrfs_free_space_info); + printf("\t\tfree space info extent count %u flags %u\n", + (unsigned)btrfs_free_space_extent_count(eb, free_info), + (unsigned)btrfs_free_space_flags(eb, free_info)); +} + +static void print_dev_extent(struct extent_buffer *eb, int slot) +{ + struct btrfs_dev_extent *dev_extent; + u8 uuid[BTRFS_UUID_SIZE]; + char uuid_str[BTRFS_UUID_UNPARSED_SIZE]; + + dev_extent = btrfs_item_ptr(eb, slot, struct btrfs_dev_extent); + read_extent_buffer(eb, uuid, + (unsigned long)btrfs_dev_extent_chunk_tree_uuid(dev_extent), + BTRFS_UUID_SIZE); + uuid_unparse(uuid, uuid_str); + printf("\t\tdev extent chunk_tree %llu\n" + "\t\tchunk_objectid %llu chunk_offset %llu " + "length %llu\n" + "\t\tchunk_tree_uuid %s\n", + (unsigned long long)btrfs_dev_extent_chunk_tree(eb, dev_extent), + (unsigned long long)btrfs_dev_extent_chunk_objectid(eb, dev_extent), + (unsigned long long)btrfs_dev_extent_chunk_offset(eb, dev_extent), + (unsigned long long)btrfs_dev_extent_length(eb, dev_extent), + uuid_str); +} + +static void print_qgroup_status(struct extent_buffer *eb, int slot) +{ + struct btrfs_qgroup_status_item *qg_status; + char flags_str[256]; + + qg_status = btrfs_item_ptr(eb, slot, struct btrfs_qgroup_status_item); + memset(flags_str, 0, sizeof(flags_str)); + qgroup_flags_to_str(btrfs_qgroup_status_flags(eb, qg_status), + flags_str); + printf("\t\tversion %llu generation %llu flags %s scan %lld\n", + (unsigned long long)btrfs_qgroup_status_version(eb, qg_status), + (unsigned long long)btrfs_qgroup_status_generation(eb, qg_status), + flags_str, + (unsigned long long)btrfs_qgroup_status_rescan(eb, qg_status)); +} + +static void print_qgroup_info(struct extent_buffer *eb, int slot) +{ + struct btrfs_qgroup_info_item *qg_info; + + qg_info = btrfs_item_ptr(eb, slot, struct btrfs_qgroup_info_item); + printf("\t\tgeneration %llu\n" + "\t\treferenced %llu referenced_compressed %llu\n" + "\t\texclusive %llu exclusive_compressed %llu\n", + (unsigned long long)btrfs_qgroup_info_generation(eb, qg_info), + (unsigned long long)btrfs_qgroup_info_referenced(eb, qg_info), + (unsigned long long)btrfs_qgroup_info_referenced_compressed(eb, + qg_info), + (unsigned long long)btrfs_qgroup_info_exclusive(eb, qg_info), + (unsigned long long)btrfs_qgroup_info_exclusive_compressed(eb, + qg_info)); +} + +static void print_qgroup_limit(struct extent_buffer *eb, int slot) +{ + struct btrfs_qgroup_limit_item *qg_limit; + + qg_limit = btrfs_item_ptr(eb, slot, struct btrfs_qgroup_limit_item); + printf("\t\tflags %llx\n" + "\t\tmax_referenced %lld max_exclusive %lld\n" + "\t\trsv_referenced %lld rsv_exclusive %lld\n", + (unsigned long long)btrfs_qgroup_limit_flags(eb, qg_limit), + (long long)btrfs_qgroup_limit_max_referenced(eb, qg_limit), + (long long)btrfs_qgroup_limit_max_exclusive(eb, qg_limit), + (long long)btrfs_qgroup_limit_rsv_referenced(eb, qg_limit), + (long long)btrfs_qgroup_limit_rsv_exclusive(eb, qg_limit)); +} + +static void print_persistent_item(struct extent_buffer *eb, void *ptr, + u32 item_size, u64 objectid, u64 offset) +{ + printf("\t\tpersistent item objectid "); + print_objectid(stdout, objectid, BTRFS_PERSISTENT_ITEM_KEY); + printf(" offset %llu\n", (unsigned long long)offset); + switch (objectid) { + case BTRFS_DEV_STATS_OBJECTID: + print_dev_stats(eb, ptr, item_size); + break; + default: + printf("\t\tunknown persistent item objectid %llu\n", objectid); + } +} + +static void print_temporary_item(struct extent_buffer *eb, void *ptr, + u64 objectid, u64 offset) +{ + printf("\t\ttemporary item objectid "); + print_objectid(stdout, objectid, BTRFS_TEMPORARY_ITEM_KEY); + printf(" offset %llu\n", (unsigned long long)offset); + switch (objectid) { + case BTRFS_BALANCE_OBJECTID: + print_balance_item(eb, ptr); + break; + default: + printf("\t\tunknown temporary item objectid %llu\n", objectid); + } +} + +static void print_extent_csum(struct extent_buffer *eb, + struct btrfs_fs_info *fs_info, u32 item_size, u64 start) +{ + u32 size; + + size = (item_size / btrfs_super_csum_size(fs_info->super_copy)) * + fs_info->sectorsize; + printf("\t\trange start %llu end %llu length %u\n", + (unsigned long long)start, + (unsigned long long)start + size, size); +} + /* Caller must ensure sizeof(*ret) >= 14 "WRITTEN|RELOC" */ static void header_flags_to_str(u64 flags, char *ret) { @@ -1003,9 +1172,6 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *eb) u64 objectid; u32 type; u64 offset; - char flags_str[256]; - char uuid_str[BTRFS_UUID_UNPARSED_SIZE]; - u8 uuid[BTRFS_UUID_SIZE]; item = btrfs_item_nr(i); item_size = btrfs_item_size(eb, item); @@ -1054,7 +1220,7 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *eb) printf("\t\torphan item\n"); break; case BTRFS_ROOT_ITEM_KEY: - print_root(eb, i); + print_root_item(eb, i); break; case BTRFS_ROOT_REF_KEY: print_root_ref(eb, i, "ref"); @@ -1074,25 +1240,12 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *eb) case BTRFS_SHARED_BLOCK_REF_KEY: printf("\t\tshared block backref\n"); break; - case BTRFS_EXTENT_DATA_REF_KEY: { - struct btrfs_extent_data_ref *dref; - - dref = btrfs_item_ptr(eb, i, struct btrfs_extent_data_ref); - printf("\t\textent data backref root %llu " - "objectid %llu offset %llu count %u\n", - (unsigned long long)btrfs_extent_data_ref_root(eb, dref), - (unsigned long long)btrfs_extent_data_ref_objectid(eb, dref), - (unsigned long long)btrfs_extent_data_ref_offset(eb, dref), - btrfs_extent_data_ref_count(eb, dref)); + case BTRFS_EXTENT_DATA_REF_KEY: + print_extent_data_ref(eb, i); break; - } - case BTRFS_SHARED_DATA_REF_KEY: { - struct btrfs_shared_data_ref *sref; - sref = btrfs_item_ptr(eb, i, struct btrfs_shared_data_ref); - printf("\t\tshared data backref count %u\n", - btrfs_shared_data_ref_count(eb, sref)); + case BTRFS_SHARED_DATA_REF_KEY: + print_shared_data_ref(eb, i); break; - } case BTRFS_EXTENT_REF_V0_KEY: #ifdef BTRFS_COMPAT_EXTENT_TREE_V0 print_extent_ref_v0(eb, i); @@ -1104,34 +1257,18 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *eb) printf("\t\tcsum item\n"); break; case BTRFS_EXTENT_CSUM_KEY: - printf("\t\textent csum item\n"); + print_extent_csum(eb, root->fs_info, item_size, + offset); break; case BTRFS_EXTENT_DATA_KEY: print_file_extent_item(eb, item, i, ptr); break; - case BTRFS_BLOCK_GROUP_ITEM_KEY: { - struct btrfs_block_group_item bg_item; - - read_extent_buffer(eb, &bg_item, (unsigned long)ptr, - sizeof(bg_item)); - memset(flags_str, 0, sizeof(flags_str)); - bg_flags_to_str(btrfs_block_group_flags(&bg_item), - flags_str); - printf("\t\tblock group used %llu chunk_objectid %llu flags %s\n", - (unsigned long long)btrfs_block_group_used(&bg_item), - (unsigned long long)btrfs_block_group_chunk_objectid(&bg_item), - flags_str); + case BTRFS_BLOCK_GROUP_ITEM_KEY: + print_block_group_item(eb, ptr); break; - } - case BTRFS_FREE_SPACE_INFO_KEY: { - struct btrfs_free_space_info *free_info; - - free_info = btrfs_item_ptr(eb, i, struct btrfs_free_space_info); - printf("\t\tfree space info extent count %u flags %u\n", - (unsigned)btrfs_free_space_extent_count(eb, free_info), - (unsigned)btrfs_free_space_flags(eb, free_info)); + case BTRFS_FREE_SPACE_INFO_KEY: + print_free_space_info(eb, i); break; - } case BTRFS_FREE_SPACE_EXTENT_KEY: printf("\t\tfree space extent\n"); break; @@ -1139,98 +1276,25 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *eb) printf("\t\tfree space bitmap\n"); break; case BTRFS_CHUNK_ITEM_KEY: - print_chunk(eb, ptr); + print_chunk_item(eb, ptr); break; case BTRFS_DEV_ITEM_KEY: print_dev_item(eb, ptr); break; - case BTRFS_DEV_EXTENT_KEY: { - struct btrfs_dev_extent *dev_extent; - - dev_extent = btrfs_item_ptr(eb, i, - struct btrfs_dev_extent); - read_extent_buffer(eb, uuid, - (unsigned long)btrfs_dev_extent_chunk_tree_uuid(dev_extent), - BTRFS_UUID_SIZE); - uuid_unparse(uuid, uuid_str); - printf("\t\tdev extent chunk_tree %llu\n" - "\t\tchunk_objectid %llu chunk_offset %llu " - "length %llu\n" - "\t\tchunk_tree_uuid %s\n", - (unsigned long long) - btrfs_dev_extent_chunk_tree(eb, dev_extent), - (unsigned long long) - btrfs_dev_extent_chunk_objectid(eb, dev_extent), - (unsigned long long) - btrfs_dev_extent_chunk_offset(eb, dev_extent), - (unsigned long long) - btrfs_dev_extent_length(eb, dev_extent), - uuid_str); + case BTRFS_DEV_EXTENT_KEY: + print_dev_extent(eb, i); break; - } - case BTRFS_QGROUP_STATUS_KEY: { - struct btrfs_qgroup_status_item *qg_status; - - qg_status = btrfs_item_ptr(eb, i, - struct btrfs_qgroup_status_item); - memset(flags_str, 0, sizeof(flags_str)); - qgroup_flags_to_str(btrfs_qgroup_status_flags(eb, qg_status), - flags_str); - printf("\t\tversion %llu generation %llu flags %s " - "scan %lld\n", - (unsigned long long) - btrfs_qgroup_status_version(eb, qg_status), - (unsigned long long) - btrfs_qgroup_status_generation(eb, qg_status), - flags_str, - (unsigned long long) - btrfs_qgroup_status_rescan(eb, qg_status)); + case BTRFS_QGROUP_STATUS_KEY: + print_qgroup_status(eb, i); break; - } case BTRFS_QGROUP_RELATION_KEY: break; - case BTRFS_QGROUP_INFO_KEY: { - struct btrfs_qgroup_info_item *qg_info; - - qg_info = btrfs_item_ptr(eb, i, - struct btrfs_qgroup_info_item); - printf("\t\tgeneration %llu\n" - "\t\treferenced %llu referenced_compressed %llu\n" - "\t\texclusive %llu exclusive_compressed %llu\n", - (unsigned long long) - btrfs_qgroup_info_generation(eb, qg_info), - (unsigned long long) - btrfs_qgroup_info_referenced(eb, qg_info), - (unsigned long long) - btrfs_qgroup_info_referenced_compressed(eb, - qg_info), - (unsigned long long) - btrfs_qgroup_info_exclusive(eb, qg_info), - (unsigned long long) - btrfs_qgroup_info_exclusive_compressed(eb, - qg_info)); + case BTRFS_QGROUP_INFO_KEY: + print_qgroup_info(eb, i); break; - } - case BTRFS_QGROUP_LIMIT_KEY: { - struct btrfs_qgroup_limit_item *qg_limit; - - qg_limit = btrfs_item_ptr(eb, i, - struct btrfs_qgroup_limit_item); - printf("\t\tflags %llx\n" - "\t\tmax_referenced %lld max_exclusive %lld\n" - "\t\trsv_referenced %lld rsv_exclusive %lld\n", - (unsigned long long) - btrfs_qgroup_limit_flags(eb, qg_limit), - (long long) - btrfs_qgroup_limit_max_referenced(eb, qg_limit), - (long long) - btrfs_qgroup_limit_max_exclusive(eb, qg_limit), - (long long) - btrfs_qgroup_limit_rsv_referenced(eb, qg_limit), - (long long) - btrfs_qgroup_limit_rsv_exclusive(eb, qg_limit)); + case BTRFS_QGROUP_LIMIT_KEY: + print_qgroup_limit(eb, i); break; - } case BTRFS_UUID_KEY_SUBVOL: case BTRFS_UUID_KEY_RECEIVED_SUBVOL: print_uuid_item(eb, btrfs_item_ptr_offset(eb, i), @@ -1243,30 +1307,11 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *eb) break; } case BTRFS_PERSISTENT_ITEM_KEY: - printf("\t\tpersistent item objectid "); - print_objectid(stdout, objectid, BTRFS_PERSISTENT_ITEM_KEY); - printf(" offset %llu\n", (unsigned long long)offset); - switch (objectid) { - case BTRFS_DEV_STATS_OBJECTID: - print_dev_stats(eb, ptr, item_size); - break; - default: - printf("\t\tunknown persistent item objectid %llu\n", - objectid); - } + print_persistent_item(eb, ptr, item_size, objectid, + offset); break; case BTRFS_TEMPORARY_ITEM_KEY: - printf("\t\ttemporary item objectid "); - print_objectid(stdout, objectid, BTRFS_TEMPORARY_ITEM_KEY); - printf(" offset %llu\n", (unsigned long long)offset); - switch (objectid) { - case BTRFS_BALANCE_OBJECTID: - print_balance_item(eb, ptr); - break; - default: - printf("\t\tunknown temporary item objectid %llu\n", - objectid); - } + print_temporary_item(eb, ptr, objectid, offset); break; }; fflush(stdout); @@ -1277,7 +1322,6 @@ void btrfs_print_tree(struct btrfs_root *root, struct extent_buffer *eb, int fol { u32 i; u32 nr; - u32 size; struct btrfs_disk_key disk_key; struct btrfs_key key; struct extent_buffer *next; @@ -1297,7 +1341,6 @@ void btrfs_print_tree(struct btrfs_root *root, struct extent_buffer *eb, int fol (unsigned long long)btrfs_header_owner(eb)); print_uuids(eb); fflush(stdout); - size = root->fs_info->nodesize; for (i = 0; i < nr; i++) { u64 blocknr = btrfs_node_blockptr(eb, i); btrfs_node_key(eb, &disk_key, i); @@ -1306,7 +1349,7 @@ void btrfs_print_tree(struct btrfs_root *root, struct extent_buffer *eb, int fol btrfs_print_key(&disk_key); printf(" block %llu (%llu) gen %llu\n", (unsigned long long)blocknr, - (unsigned long long)blocknr / size, + (unsigned long long)blocknr / root->fs_info->nodesize, (unsigned long long)btrfs_node_ptr_generation(eb, i)); fflush(stdout); } @@ -1315,7 +1358,7 @@ void btrfs_print_tree(struct btrfs_root *root, struct extent_buffer *eb, int fol for (i = 0; i < nr; i++) { next = read_tree_block(root->fs_info, - btrfs_node_blockptr(eb, i), size, + btrfs_node_blockptr(eb, i), btrfs_node_ptr_generation(eb, i)); if (!extent_buffer_uptodate(next)) { fprintf(stderr, "failed to read %llu in tree %llu\n", diff --git a/print-tree.h b/print-tree.h index 9865500b..df58b846 100644 --- a/print-tree.h +++ b/print-tree.h @@ -22,7 +22,7 @@ void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l); void btrfs_print_tree(struct btrfs_root *root, struct extent_buffer *t, int follow); void btrfs_print_key(struct btrfs_disk_key *disk_key); -void print_chunk(struct extent_buffer *eb, struct btrfs_chunk *chunk); +void print_chunk_item(struct extent_buffer *eb, struct btrfs_chunk *chunk); void print_extent_item(struct extent_buffer *eb, int slot, int metadata); void print_objectid(FILE *stream, u64 objectid, u8 type); void print_key_type(FILE *stream, u64 objectid, u8 type); diff --git a/qgroup-verify.c b/qgroup-verify.c index 5162adbb..571b4d4f 100644 --- a/qgroup-verify.c +++ b/qgroup-verify.c @@ -711,7 +711,7 @@ static int travel_tree(struct btrfs_fs_info *info, struct btrfs_root *root, // printf("travel_tree: bytenr: %llu\tnum_bytes: %llu\tref_parent: %llu\n", // bytenr, num_bytes, ref_parent); - eb = read_tree_block(info, bytenr, num_bytes, 0); + eb = read_tree_block(info, bytenr, 0); if (!extent_buffer_uptodate(eb)) return -EIO; diff --git a/quick-test.c b/quick-test.c index f99ecc38..b1e7999d 100644 --- a/quick-test.c +++ b/quick-test.c @@ -56,6 +56,7 @@ int main(int ac, char **av) { exit(1); } trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); srand(55); ins.type = BTRFS_STRING_ITEM_KEY; for (i = 0; i < run_size; i++) { @@ -72,6 +73,7 @@ int main(int ac, char **av) { if (i == run_size - 5) { btrfs_commit_transaction(trans, root); trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); } } btrfs_commit_transaction(trans, root); @@ -114,6 +116,7 @@ int main(int ac, char **av) { i = 0; srand(55); trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); for (i = 0 ; i < run_size/4; i++) { num = next_key(i, max_key); ins.objectid = num; @@ -138,6 +141,7 @@ int main(int ac, char **av) { exit(1); } trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); srand(128); for (i = 0; i < run_size; i++) { num = next_key(i, max_key); @@ -175,6 +179,7 @@ int main(int ac, char **av) { } printf("starting big long delete run\n"); trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); while(root->node && btrfs_header_nritems(root->node) > 0) { struct extent_buffer *leaf; int slot; diff --git a/random-test.c b/random-test.c index 410a110b..d5f830a9 100644 --- a/random-test.c +++ b/random-test.c @@ -380,6 +380,7 @@ int main(int ac, char **av) } printf("initial fill\n"); trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); ret = fill_tree(trans, root, &radix, init_fill_count); printf("starting run\n"); if (ret) { diff --git a/tests/README.md b/tests/README.md index a8d3a2ba..04d2ce2a 100644 --- a/tests/README.md +++ b/tests/README.md @@ -30,7 +30,7 @@ category, eg. `fsck-tests-results.txt`. ## Selective testing -The test are prefixed by a number for ordering and uniqueness. To run a +The tests are prefixed by a number for ordering and uniqueness. To run a particular test use: ```shell @@ -76,8 +76,7 @@ will run the first test in fsck-tests subdirectory. * anything that does not fit to the above, the test driver script will only execute `./test.sh` in the test directory -*tests/common:* -*tests/common.convert:* +*tests/common, tests/common.convert:* * script with shell helpers, separated by functionality @@ -146,6 +145,13 @@ the loop devices as they are managed on a per-test basis. There's a script `test-console.sh` that will run shell commands in a loop and logs the output with the testing environment set up. +### Runtime dependencies + +The tests use some common system utilities like `find`, `rm`, `dd`. Additionally, +specific tests need the following packages installed: `acl`, `attr`, +`e2fsprogs`, `reiserfsprogs` + + ## New test 1. Pick the category for the new test or fallback to `misc-tests` if not sure. For @@ -162,7 +168,7 @@ begining of `test.sh`. You don't need to add the file to git yet. 4. Write the test commands, comment anything that's not obvious. -5. Test your test. Use the `TEST` variable to jump right to your test: +5. **Test your test.** Use the `TEST` variable to jump right to your test: ```shell $ make TEST=012\* tests-misc # from top directory $ TEST=012\* ./misc-tests.sh # from tests/ @@ -172,6 +178,7 @@ $ TEST=012\* ./misc-tests.sh # from tests/ fixed the bug (or both). Subject line of the shall mention the name of the new directory for ease of search, eg. `btrfs-progs: tests: add 012-subvolume-sync-must-wait` + ### Crafted/fuzzed images Images that are create by fuzzing or specially crafted to trigger some error diff --git a/tests/build-tests.sh b/tests/build-tests.sh index 4dc8744e..15db42af 100755 --- a/tests/build-tests.sh +++ b/tests/build-tests.sh @@ -87,5 +87,27 @@ build_make_targets conf='--disable-convert' build_make_targets +conf='--with-convert=ext2' +build_make_targets + +conf='--with-convert=ext2,reiserfs' +build_make_targets + +conf='--enable-zstd' +build_make_targets + +# debugging builds, just the default targets +target='D=1' +buildme + +target='D=asan' +buildme + +target='D=tsan' +buildme + +target='D=ubsan' +buildme + echo "---------------------------------------------------" echo "$verdict" diff --git a/tests/cli-tests/007-check-force/test.sh b/tests/cli-tests/007-check-force/test.sh new file mode 100755 index 00000000..12b30205 --- /dev/null +++ b/tests/cli-tests/007-check-force/test.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# +# test 'btrfs check --force' on a mounted filesystem + +source "$TOP/tests/common" + +check_prereq mkfs.btrfs +check_prereq btrfs + +setup_root_helper + +# we need to use a real block device, because the check opens the device in +# exclusive mode, that unfortunatelly behaves differently for direct file +# access and for the real /dev/loop0 device +setup_loopdevs 1 +prepare_loopdevs +TEST_DEV=${loopdevs[1]} + +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$TEST_DEV" +run_check_mount_test_dev +run_mustfail "checking mounted filesystem without --force" \ + $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV" +run_check $SUDO_HELPER "$TOP/btrfs" check --force "$TEST_DEV" +run_mustfail "checking mounted filesystem with --force --repair" \ + $SUDO_HELPER "$TOP/btrfs" check --force --repair "$TEST_DEV" +run_check_umount_test_dev +run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV" +run_check $SUDO_HELPER "$TOP/btrfs" check --force "$TEST_DEV" +run_mustfail "--force --repair on unmounted filesystem" \ + $SUDO_HELPER "$TOP/btrfs" check --force --repair "$TEST_DEV" + +cleanup_loopdevs diff --git a/tests/common b/tests/common index bed60094..eb525a4d 100644 --- a/tests/common +++ b/tests/common @@ -21,6 +21,27 @@ _assert_path() exit 1 } +# $1: this string gets matched to files, absolute or relative path, or a +# systemwide command available via $PATH +_is_file_or_command() +{ + local msg + + msg="$1" + if [ -z "$msg" ]; then + return 1 + fi + + if [ -f "$msg" -o -d "$msg" -o -b "$msg" ]; then + return 0 + fi + msg=$(type -p -- "$msg") + if [ -f "$msg" ]; then + return 0 + fi + return 1 +} + _fail() { echo "$*" | tee -a "$RESULTS" @@ -133,9 +154,12 @@ run_check_stdout() echo "############### $@" >> "$RESULTS" 2>&1 if [[ $TEST_LOG =~ tty ]]; then echo "CMD(stdout): $@" > /dev/tty; fi if [ "$1" = 'root_helper' ]; then - "$@" 2>&1 | tee -a "$RESULTS" || _fail "failed: $@" + "$@" 2>&1 | tee -a "$RESULTS" else - $INSTRUMENT "$@" 2>&1 | tee -a "$RESULTS" || _fail "failed: $@" + $INSTRUMENT "$@" 2>&1 | tee -a "$RESULTS" + fi + if [ ${PIPESTATUS[0]} -ne 0 ]; then + _fail "failed: $@" fi } @@ -185,6 +209,11 @@ run_mustfail() msg="$1" shift + if _is_file_or_command "$msg"; then + echo "ASSERTION FAIL: 1st argument of run_mustfail must be a message" + exit 1 + fi + ins=$(_get_spec_ins "$@") spec=$(($ins-1)) cmd=$(eval echo "\${$spec}") @@ -480,7 +509,7 @@ generate_dataset() { ;; slow_symlink) - long_filename=`date +%s | sha256sum | cut -f1 -d'-'` + long_filename=`date +%s | sha256sum | cut -f1 -d ' '` run_check $SUDO_HELPER touch "$dirpath/$long_filename" for num in $(seq 1 "$DATASET_SIZE"); do run_check $SUDO_HELPER ln -s "$dirpath/$long_filename" "$dirpath/slow_slink.$num" @@ -493,6 +522,48 @@ generate_dataset() { esac } +# prepare environment for loop devices, set up the following variables +# - nloopdevs -- number of desired devices +# - loopdevs -- array containing paths to all devices (after prepare is called) +# - loopdev_prefix -- file backed images starting with this string, 'img' by default +# +# $1: number of loop devices to be set up +setup_loopdevs() +{ + if [ -z "$1" ]; then + _fail "setup_loopdevs needs a number" + fi + nloopdevs="$1" + loopdev_prefix=img + declare -a loopdevs + +} + +# create all loop devices from a given loopdev environment +prepare_loopdevs() +{ + for i in `seq $nloopdevs`; do + touch $loopdev_prefix$i + chmod a+rw $loopdev_prefix$i + truncate -s0 $loopdev_prefix$i + truncate -s2g $loopdev_prefix$i + loopdevs[$i]=`run_check_stdout $SUDO_HELPER losetup --find --show $loopdev_prefix$i` + done +} + +# detach loop devices and reset their size to 0, delete the files afterwards +cleanup_loopdevs() +{ + for dev in ${loopdevs[@]}; do + run_check $SUDO_HELPER losetup -d $dev + done + for i in `seq $nloopdevs`; do + truncate -s0 $loopdev_prefix$i + rm -- "$loopdev_prefix$i" + done + run_check $SUDO_HELPER losetup --all +} + init_env() { TEST_MNT="${TEST_MNT:-$TOP/tests/mnt}" diff --git a/tests/common.convert b/tests/common.convert index 2c19a4be..1be804cf 100644 --- a/tests/common.convert +++ b/tests/common.convert @@ -50,7 +50,7 @@ convert_test_preamble() { msg="$2" shift 3 echo " [TEST/conv] $msg, btrfs" "${features:-defaults}" - echo "creating ext image with: $@" >> "$RESULTS" + echo "creating test image with: $@" >> "$RESULTS" } # prepare TEST_DEV before conversion, create filesystem and mount it, image @@ -59,6 +59,8 @@ convert_test_preamble() { # $2+: free form, command to create the filesystem, with appended -F convert_test_prep_fs() { local fstype + local force + local mountopts fstype="$1" shift @@ -67,10 +69,21 @@ convert_test_prep_fs() { run_check truncate -s 0 "$TEST_DEV" # 256MB is the smallest acceptable btrfs image. run_check truncate -s 512M "$TEST_DEV" - run_check "$@" -F "$TEST_DEV" + force= + mountopts= + case "$fstype" in + ext[234]) + force=-F ;; + reiserfs) + force=-ff + mountopts="-o acl,user_xattr,attrs" ;; + *) + _fail "unknown filesystem to convert: $fstype" + esac + run_check "$@" $force "$TEST_DEV" # create a file to check btrfs-convert can convert regular file correct - run_check_mount_convert_dev "$fstype" + run_check_mount_convert_dev "$fstype" $mountopts # create a file inside the fs before convert, to make sure there is # data covering btrfs backup superblock range (64M) @@ -205,9 +218,21 @@ convert_test_post_checks_all() { } # do rollback and fsck +# $1: filesystem name or alias (ext2 includes ext3 and ext4), convert_test_post_rollback() { + local types + run_check "$TOP/btrfs-convert" --rollback "$TEST_DEV" - run_check fsck -n -t ext2,ext3,ext4 "$TEST_DEV" + if [ -z "$1" ]; then + _fail "missing filesystem type to check" + fi + case "$1" in + ext[234]) types=ext2,ext3,ext4 ;; + reiserfs) types=reiserfs ;; + *) _fail "unknown filesystem type to check: $1" ;; + esac + + run_check fsck -n -t "$types" "$TEST_DEV" } # simple wrapper for a convert test @@ -248,5 +273,19 @@ convert_test() { rm -- "$EXT_PERMTMP" rm -- "$EXT_ACLTMP" - convert_test_post_rollback + convert_test_post_rollback "$fstype" +} + +load_module_reiserfs() +{ + $SUDO_HELPER modprobe reiserfs +} + +check_kernel_support_reiserfs() +{ + if ! grep -iq 'reiserfs' /proc/filesystems; then + echo "WARNING: reiserfs filesystem not listed in /proc/filesystems, some tests might be skipped" + return 1 + fi + return 0 } diff --git a/tests/common.local b/tests/common.local index 4f56bb08..d2b8d073 100644 --- a/tests/common.local +++ b/tests/common.local @@ -3,14 +3,13 @@ # additional arguments to various commands # already defined, eg. via make argument -if [ -n "$TEST_ENABLE_OVERRIDE" ]; then - return -fi +if [ -z "$TEST_ENABLE_OVERRIDE" ]; then + # set to 'true' + TEST_ENABLE_OVERRIDE=false -# set to 'true' -TEST_ENABLE_OVERRIDE=false + TEST_ARGS_CHECK=--mode=lowmem +fi -TEST_ARGS_CHECK=--mode=lowmem # gets arguments of a current command and can decide if the argument insertion # should happen, eg. if some option combination does not make sense or would diff --git a/tests/convert-tests.sh b/tests/convert-tests.sh index c5663367..2a92a58b 100755 --- a/tests/convert-tests.sh +++ b/tests/convert-tests.sh @@ -22,6 +22,11 @@ export TEST_DEV rm -f "$RESULTS" check_kernel_support +check_kernel_support_reiserfs +# anything expected by common.convert +check_global_prereq getfacl +check_global_prereq setfacl +check_global_prereq md5sum run_one_test() { local testdir @@ -36,10 +41,12 @@ run_one_test() { # Only support custom test scripts ./test.sh if [ $? -ne 0 ]; then - _fail "test failed for case $testname" if [[ $TEST_LOG =~ dump ]]; then - cat "$RESULTS" + # the logs can be large and may exceed the + # limits, use 4MB for now + tail -c 3900000 "$RESULTS" fi + _fail "test failed for case $testname" fi else _fail "custom test script not found" diff --git a/tests/convert-tests/001-ext2-basic/test.sh b/tests/convert-tests/001-ext2-basic/test.sh index 7d8e87d8..d94bf0b6 100755 --- a/tests/convert-tests/001-ext2-basic/test.sh +++ b/tests/convert-tests/001-ext2-basic/test.sh @@ -6,6 +6,7 @@ source "$TOP/tests/common.convert" setup_root_helper prepare_test_dev 512M check_prereq btrfs-convert +check_global_prereq mke2fs for feature in '' 'extref' 'skinny-metadata' 'no-holes'; do convert_test ext2 "$feature" "ext2 4k nodesize" 4096 mke2fs -b 4096 diff --git a/tests/convert-tests/002-ext3-basic/test.sh b/tests/convert-tests/002-ext3-basic/test.sh index 5a33c2ca..f00e0e82 100755 --- a/tests/convert-tests/002-ext3-basic/test.sh +++ b/tests/convert-tests/002-ext3-basic/test.sh @@ -6,6 +6,7 @@ source "$TOP/tests/common.convert" setup_root_helper prepare_test_dev 512M check_prereq btrfs-convert +check_global_prereq mke2fs for feature in '' 'extref' 'skinny-metadata' 'no-holes'; do convert_test ext3 "$feature" "ext3 4k nodesize" 4096 mke2fs -j -b 4096 diff --git a/tests/convert-tests/003-ext4-basic/test.sh b/tests/convert-tests/003-ext4-basic/test.sh index df8bec28..d33f1d9a 100755 --- a/tests/convert-tests/003-ext4-basic/test.sh +++ b/tests/convert-tests/003-ext4-basic/test.sh @@ -6,6 +6,7 @@ source "$TOP/tests/common.convert" setup_root_helper prepare_test_dev 512M check_prereq btrfs-convert +check_global_prereq mke2fs for feature in '' 'extref' 'skinny-metadata' 'no-holes'; do convert_test ext4 "$feature" "ext4 4k nodesize" 4096 mke2fs -t ext4 -b 4096 diff --git a/tests/convert-tests/005-delete-all-rollback/test.sh b/tests/convert-tests/005-delete-all-rollback/test.sh index 337413bb..19aa76d4 100755 --- a/tests/convert-tests/005-delete-all-rollback/test.sh +++ b/tests/convert-tests/005-delete-all-rollback/test.sh @@ -8,6 +8,7 @@ source "$TOP/tests/common.convert" setup_root_helper prepare_test_dev 512M check_prereq btrfs-convert +check_global_prereq mke2fs # simple wrapper for a convert test # $1: btrfs features, argument to -O @@ -45,7 +46,7 @@ do_test() { cd "$here" run_check "$TOP/btrfs" filesystem sync "$TEST_MNT" run_check_umount_test_dev - convert_test_post_rollback + convert_test_post_rollback ext4 run_check_mount_convert_dev ext4 convert_test_post_check_checksums "$CHECKSUMTMP" diff --git a/tests/convert-tests/006-large-hole-extent/test.sh b/tests/convert-tests/006-large-hole-extent/test.sh index f63a1186..0edb6280 100755 --- a/tests/convert-tests/006-large-hole-extent/test.sh +++ b/tests/convert-tests/006-large-hole-extent/test.sh @@ -11,6 +11,7 @@ source "$TOP/tests/common.convert" setup_root_helper prepare_test_dev 512M check_prereq btrfs-convert +check_global_prereq mke2fs default_mke2fs="mke2fs -t ext4 -b 4096" convert_test_preamble '' 'large hole extent test' 16k "$default_mke2fs" diff --git a/tests/convert-tests/007-unsupported-block-sizes/test.sh b/tests/convert-tests/007-unsupported-block-sizes/test.sh index af8ec357..f1b29726 100755 --- a/tests/convert-tests/007-unsupported-block-sizes/test.sh +++ b/tests/convert-tests/007-unsupported-block-sizes/test.sh @@ -7,6 +7,7 @@ source "$TOP/tests/common.convert" setup_root_helper prepare_test_dev 512M check_prereq btrfs-convert +check_global_prereq mke2fs for bs in 1024 2048; do default_mke2fs="mke2fs -t ext4 -b $bs" diff --git a/tests/convert-tests/008-readonly-image/test.sh b/tests/convert-tests/008-readonly-image/test.sh index 4d5e629f..8551fb9b 100755 --- a/tests/convert-tests/008-readonly-image/test.sh +++ b/tests/convert-tests/008-readonly-image/test.sh @@ -7,6 +7,7 @@ source "$TOP/tests/common.convert" setup_root_helper prepare_test_dev 512M check_prereq btrfs-convert +check_global_prereq mke2fs default_mke2fs="mke2fs -t ext4 -b 4096" convert_test_preamble '' 'readonly image test' 16k "$default_mke2fs" @@ -16,11 +17,11 @@ convert_test_do_convert run_check_mount_test_dev # It's expected to fail -$SUDO_HELPER dd if=/dev/zero of="$TEST_MNT/ext2_save/image" bs=1M count=1 \ +$SUDO_HELPER dd if=/dev/zero of="$TEST_MNT/ext2_saved/image" bs=1M count=1 \ &> /dev/null if [ $? -ne 1 ]; then - echo "after convert ext2_save/image is not read-only" + echo "after convert ext2_saved/image is not read-only" exit 1 fi run_check_umount_test_dev -convert_test_post_rollback +convert_test_post_rollback ext4 diff --git a/tests/convert-tests/009-common-inode-flags/test.sh b/tests/convert-tests/009-common-inode-flags/test.sh index f42fb681..cd7b5111 100755 --- a/tests/convert-tests/009-common-inode-flags/test.sh +++ b/tests/convert-tests/009-common-inode-flags/test.sh @@ -7,6 +7,9 @@ source "$TOP/tests/common.convert" setup_root_helper prepare_test_dev 512M check_prereq btrfs-convert +check_global_prereq mke2fs +check_global_prereq lsattr +check_global_prereq chattr fail=0 default_mke2fs="mke2fs -t ext4 -b 4096" @@ -31,4 +34,4 @@ if [ $? -ne 0 ]; then fi run_check_umount_test_dev -convert_test_post_rollback +convert_test_post_rollback ext4 diff --git a/tests/convert-tests/010-reiserfs-basic/test.sh b/tests/convert-tests/010-reiserfs-basic/test.sh new file mode 100755 index 00000000..261f8704 --- /dev/null +++ b/tests/convert-tests/010-reiserfs-basic/test.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +source "$TOP/tests/common" +source "$TOP/tests/common.convert" + +if ! check_kernel_support_reiserfs >/dev/null; then + _not_run "no reiserfs support" +fi + +setup_root_helper +prepare_test_dev 512M +check_prereq btrfs-convert +check_global_prereq mkreiserfs + +for feature in '' 'extref' 'skinny-metadata' 'no-holes'; do + convert_test reiserfs "$feature" "reiserfs 4k nodesize" 4096 mkreiserfs -b 4096 + convert_test reiserfs "$feature" "reiserfs 8k nodesize" 8192 mkreiserfs -b 4096 + convert_test reiserfs "$feature" "reiserfs 16k nodesize" 16384 mkreiserfs -b 4096 + convert_test reiserfs "$feature" "reiserfs 32k nodesize" 32768 mkreiserfs -b 4096 + convert_test reiserfs "$feature" "reiserfs 64k nodesize" 65536 mkreiserfs -b 4096 +done diff --git a/tests/convert-tests/011-reiserfs-delete-all-rollback/test.sh b/tests/convert-tests/011-reiserfs-delete-all-rollback/test.sh new file mode 100755 index 00000000..c6c3119e --- /dev/null +++ b/tests/convert-tests/011-reiserfs-delete-all-rollback/test.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# create a base image, convert to btrfs, remove all files, rollback the reiserfs image + +source "$TOP/tests/common" +source "$TOP/tests/common.convert" + +if ! check_kernel_support_reiserfs >/dev/null; then + _not_run "no reiserfs support" +fi + +setup_root_helper +prepare_test_dev 512M +check_prereq btrfs-convert +check_global_prereq mkreiserfs + +# simple wrapper for a convert test +# $1: btrfs features, argument to -O +# $2: message +# $3: nodesize value +# $4 + rest: command to create the reiserfs image +do_test() { + local features + local msg + local nodesize + local CHECKSUMTMP + local here + + features="$1" + msg="$2" + nodesize="$3" + shift 3 + convert_test_preamble "$features" "$msg" "$nodesize" "$@" + convert_test_prep_fs reiserfs "$@" + populate_fs + CHECKSUMTMP=$(mktemp --tmpdir btrfs-progs-convert.XXXXXXXXXX) + convert_test_gen_checksums "$CHECKSUMTMP" + + run_check_umount_test_dev + + convert_test_do_convert "$features" "$nodesize" + + run_check_mount_test_dev + convert_test_post_check_checksums "$CHECKSUMTMP" + + here=$(pwd) + cd "$TEST_MNT" || _fail "cannot cd to TEST_MNT" + # reiserfs_saved/image must not be deleted + run_mayfail $SUDO_HELPER find "$TEST_MNT"/ -mindepth 1 -path '*reiserfs_saved' -prune -o -exec rm -vrf "{}" \; + cd "$here" + run_check "$TOP/btrfs" filesystem sync "$TEST_MNT" + run_check_umount_test_dev + convert_test_post_rollback reiserfs + + run_check_mount_convert_dev reiserfs + convert_test_post_check_checksums "$CHECKSUMTMP" + run_check_umount_test_dev + + # mount again and verify checksums + run_check_mount_convert_dev reiserfs + convert_test_post_check_checksums "$CHECKSUMTMP" + run_check_umount_test_dev + + rm "$CHECKSUMTMP" +} + +for feature in '' 'extref' 'skinny-metadata' 'no-holes'; do + do_test "$feature" "reiserfs 4k nodesize" 4096 mkreiserfs -b 4096 + do_test "$feature" "reiserfs 8k nodesize" 8192 mkreiserfs -b 4096 + do_test "$feature" "reiserfs 16k nodesize" 16384 mkreiserfs -b 4096 + do_test "$feature" "reiserfs 32k nodesize" 32768 mkreiserfs -b 4096 + do_test "$feature" "reiserfs 64k nodesize" 65536 mkreiserfs -b 4096 +done diff --git a/tests/convert-tests/012-reiserfs-large-hole-extent/test.sh b/tests/convert-tests/012-reiserfs-large-hole-extent/test.sh new file mode 100755 index 00000000..7a8d4972 --- /dev/null +++ b/tests/convert-tests/012-reiserfs-large-hole-extent/test.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Create a base image with large hole extent, then convert to btrfs, +# check the converted image. +# Check if btrfs-convert can handle such large hole. +# Fast pinpoint regression test. No options combination nor checksum +# verification + +source "$TOP/tests/common" +source "$TOP/tests/common.convert" + +if ! check_kernel_support_reiserfs >/dev/null; then + _not_run "no reiserfs support" +fi + +setup_root_helper +prepare_test_dev 512M +check_prereq btrfs-convert +check_global_prereq mkreiserfs + +default_mkfs="mkreiserfs -b 4096" +convert_test_preamble '' 'large hole extent test' 16k "$default_mkfs" +convert_test_prep_fs reiserfs $default_mkfs + +run_check $SUDO_HELPER dd if=/dev/zero of="$TEST_MNT/file" bs=1M \ + count=1 seek=1024 > /dev/null 2>&1 + +run_check_umount_test_dev +convert_test_do_convert diff --git a/tests/convert-tests/013-reiserfs-common-inode-flags/test.sh b/tests/convert-tests/013-reiserfs-common-inode-flags/test.sh new file mode 100755 index 00000000..e242a3b0 --- /dev/null +++ b/tests/convert-tests/013-reiserfs-common-inode-flags/test.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# Check if btrfs-convert can copy common inode flags like SYNC/IMMUTABLE + +source "$TOP/tests/common" +source "$TOP/tests/common.convert" + +if ! check_kernel_support_reiserfs >/dev/null; then + _not_run "no reiserfs support" +fi + +setup_root_helper +prepare_test_dev 512M +check_prereq btrfs-convert +check_global_prereq mkreiserfs +check_global_prereq chattr +check_global_prereq lsattr + +fail=0 +default_mkfs="mkreiserfs -b 4096" +convert_test_preamble '' 'common inode flags test' 16k "$default_mkfs" +convert_test_prep_fs reiserfs $default_mkfs + +# create file with specific flags +run_check $SUDO_HELPER touch "$TEST_MNT/flag_test" +run_check $SUDO_HELPER chattr +aAdSi "$TEST_MNT/flag_test" +run_check lsattr "$TEST_MNT/flag_test" + +run_check_umount_test_dev +convert_test_do_convert +run_check_mount_test_dev + +# Log the status +run_check lsattr "$TEST_MNT/flag_test" +# Above flags should be copied to btrfs flags, and lsattr should get them +run_check_stdout lsattr "$TEST_MNT/flag_test" | cut -f1 -d\ | grep "[aAdiS]" -q +if [ $? -ne 0 ]; then + rm tmp_output + _fail "no common inode flags are copied after convert" +fi + +run_check_umount_test_dev +convert_test_post_rollback reiserfs diff --git a/tests/convert-tests/014-reiserfs-tail-handling/test.sh b/tests/convert-tests/014-reiserfs-tail-handling/test.sh new file mode 100755 index 00000000..f6131d96 --- /dev/null +++ b/tests/convert-tests/014-reiserfs-tail-handling/test.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# Check the various combinations of real blocks, holes, and tails +# Since it's possible to have a valid extent layout that check will +# happily accept AND have garbage in the output, compare the results +# as well. +# We use separate inputs for tails and real blocks so we can determine +# if there was a failure in copying either. + +source "$TOP/tests/common" +source "$TOP/tests/common.convert" + +if ! check_kernel_support_reiserfs >/dev/null; then + _not_run "no reiserfs support" +fi + +setup_root_helper +prepare_test_dev 512M +check_prereq btrfs-convert +check_global_prereq md5sum +check_global_prereq mkreiserfs +check_global_prereq perl + +perl -e "print 'a'x8192;" > input +perl -e "print 'b'x8192;" > input2 + +default_mkfs="mkreiserfs -b 4096" +convert_test_preamble '' 'tail conversion test' 16k "$default_mkfs" +convert_test_prep_fs reiserfs $default_mkfs + +# Hole alone +run_check $SUDO_HELPER truncate -s 81920 "$TEST_MNT/hole" + +# Tail alone +run_check $SUDO_HELPER dd if=input of="$TEST_MNT/1k" bs=1k count=1 \ + > /dev/null 2>&1 + +# Single indirect block +run_check $SUDO_HELPER dd if=input of="$TEST_MNT/4k" bs=1k count=4 \ + > /dev/null 2>&1 + +# Indirect block + tail +run_check $SUDO_HELPER dd if=input of="$TEST_MNT/5k" bs=1k count=4 \ + > /dev/null 2>&1 +run_check $SUDO_HELPER dd if=input2 of="$TEST_MNT/5k" bs=1k count=1 \ + seek=4 > /dev/null 2>&1 + +# Hole followed by tail +run_check $SUDO_HELPER dd if=input of="$TEST_MNT/hole-1k" bs=1k count=1 \ + seek=4 > /dev/null 2>&1 + +# Indirect block followed by hole +run_check $SUDO_HELPER dd if=input of="$TEST_MNT/4k-hole" bs=1k count=4 \ + > /dev/null 2>&1 +run_check $SUDO_HELPER truncate -s 81920 "$TEST_MNT/4k-hole" + +# Indirect block followed by hole followed by tail +run_check $SUDO_HELPER dd if=input of="$TEST_MNT/4k-hole-1k" bs=1k count=4 \ + > /dev/null 2>&1 +run_check $SUDO_HELPER truncate -s 8192 "$TEST_MNT/4k-hole-1k" +run_check $SUDO_HELPER dd if=input2 of="$TEST_MNT/4k-hole-1k" bs=1k count=1 \ + seek=8 > /dev/null 2>&1 + +rm -f input input2 + +declare -A SUMS +for file in "$TEST_MNT"/*; do + SUM=$(md5sum "$file") + SUMS["$file"]=$SUM +done + +run_check_umount_test_dev +convert_test_do_convert + +run_check_mount_test_dev +for file in "${!SUMS[@]}"; do + SUM=$(md5sum "$file") + run_check test "$SUM" = "${SUMS[$file]}" +done +run_check_umount_test_dev diff --git a/tests/fsck-tests/026-bad-dir-item-name/default_case.img.xz b/tests/fsck-tests/026-bad-dir-item-name/default_case.img.xz new file mode 100644 index 00000000..27e8553f Binary files /dev/null and b/tests/fsck-tests/026-bad-dir-item-name/default_case.img.xz differ diff --git a/tests/fsck-tests/026-bad-dir-item-name/test.sh b/tests/fsck-tests/026-bad-dir-item-name/test.sh new file mode 100755 index 00000000..a1077a8d --- /dev/null +++ b/tests/fsck-tests/026-bad-dir-item-name/test.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# +# confirm whether check detects name and hash mismatch in dir_item + +source "$TOP/tests/common" + +check_prereq btrfs + +image=$(extract_image "./default_case.img.xz") + +run_mustfail "dir_item hash mismatch not found" "$TOP/btrfs" check "$image" + +rm -f "$image" diff --git a/tests/fuzz-tests/images/bko-155551-unaligned-tree-block.raw.txt b/tests/fuzz-tests/images/bko-155551-unaligned-tree-block.raw.txt new file mode 100644 index 00000000..498896c1 --- /dev/null +++ b/tests/fuzz-tests/images/bko-155551-unaligned-tree-block.raw.txt @@ -0,0 +1,49 @@ +URL: https://bugzilla.kernel.org/show_bug.cgi?id=155551 +Lukas Lueg 2016-08-29 20:44:04 UTC + +More news from the fuzzer. The attached image causes btrfsck to enter what +seems to be an endless loop; using btrfs-progs v4.7-42-g56e9586. + +Couldn't map the block 18446744073709551607 +No mapping for 18446744073709551607-4087 +Couldn't map the block 18446744073709551607 +bytenr mismatch, want=18446744073709551607, have=0 +checking extents +parent transid verify failed on 4194304 wanted 169 found 4 +Ignoring transid failure +parent transid verify failed on 4194304 wanted 169 found 4 +Ignoring transid failure +parent transid verify failed on 4194304 wanted 169 found 4 +Ignoring transid failure +parent transid verify failed on 4194304 wanted 169 found 4 +Ignoring transid failure +parent transid verify failed on 4194304 wanted 169 found 4 +Ignoring transid failure +parent transid verify failed on 4194304 wanted 169 found 4 +Ignoring transid failure +parent transid verify failed on 4194304 wanted 169 found 4 +Ignoring transid failure +parent transid verify failed on 4194304 wanted 169 found 4 +Ignoring transid failure +parent transid verify failed on 4194304 wanted 169 found 4 +Ignoring transid failure +Couldn't map the block 419430592 +No mapping for 419430592-419434688 +Couldn't map the block 419430592 +bytenr mismatch, want=419430592, have=0 +Couldn't map the block 36283884701696 +No mapping for 36283884701696-36283884705792 +Couldn't map the block 36283884701696 +bytenr mismatch, want=36283884701696, have=0 +Couldn't map the block 18446744073709551607 +No mapping for 18446744073709551607-4087 +Couldn't map the block 18446744073709551607 +bytenr mismatch, want=18446744073709551607, have=0 +Couldn't map the block 18446744073709551607 +No mapping for 18446744073709551607-4087 +Couldn't map the block 18446744073709551607 +bytenr mismatch, want=18446744073709551607, have=0 +Couldn't map the block 18446744073709551607 +No mapping for 18446744073709551607-4087 +Couldn't map the block 18446744073709551607 +bytenr mismatch, want=18446744073709551607, have=0 diff --git a/tests/fuzz-tests/images/bko-155551-unaligned-tree-block.raw.xz b/tests/fuzz-tests/images/bko-155551-unaligned-tree-block.raw.xz new file mode 100644 index 00000000..f60271e2 Binary files /dev/null and b/tests/fuzz-tests/images/bko-155551-unaligned-tree-block.raw.xz differ diff --git a/tests/misc-tests/006-image-on-missing-device/test.sh b/tests/misc-tests/006-image-on-missing-device/test.sh index 5b6fe065..2766fb17 100755 --- a/tests/misc-tests/006-image-on-missing-device/test.sh +++ b/tests/misc-tests/006-image-on-missing-device/test.sh @@ -10,38 +10,8 @@ check_prereq btrfs-image check_prereq mkfs.btrfs check_prereq btrfs -ndevs=2 -declare -a devs -dev1= -dev2= - setup_root_helper - -# TODO: move the helpers to common - -prepare_devices() -{ - for i in `seq $ndevs`; do - touch img$i - chmod a+rw img$i - truncate -s0 img$i - truncate -s2g img$i - devs[$i]=`run_check_stdout $SUDO_HELPER losetup --find --show img$i` - done -} - -cleanup_devices() -{ - for dev in ${devs[@]}; do - run_mayfail $SUDO_HELPER losetup -d $dev - done - for i in `seq $ndevs`; do - truncate -s0 img$i - done - run_check $SUDO_HELPER losetup --all -} - test_image_dump() { run_check $SUDO_HELPER $TOP/btrfs check $dev1 @@ -65,13 +35,15 @@ test_run() # btrfs-image must not loop run_mayfail wipefs -a $dev2 run_check $SUDO_HELPER losetup -d $dev2 + unset loopdevs[2] run_check $SUDO_HELPER $TOP/btrfs filesystem show $dev1 test_image_dump } -prepare_devices -dev1=${devs[1]} -dev2=${devs[2]} +setup_loopdevs 2 +prepare_loopdevs +dev1=${loopdevs[1]} +dev2=${loopdevs[2]} test_run -cleanup_devices +cleanup_loopdevs diff --git a/tests/misc-tests/011-delete-missing-device/test.sh b/tests/misc-tests/011-delete-missing-device/test.sh index 5b5f9786..8a1b14b1 100755 --- a/tests/misc-tests/011-delete-missing-device/test.sh +++ b/tests/misc-tests/011-delete-missing-device/test.sh @@ -6,38 +6,11 @@ source $TOP/tests/common check_prereq mkfs.btrfs check_prereq btrfs -ndevs=4 -declare -a devs -dev1= -devtodel= - setup_root_helper -prepare_devices() -{ - for i in `seq $ndevs`; do - touch img$i - chmod a+rw img$i - truncate -s0 img$i - truncate -s2g img$i - devs[$i]=`run_check_stdout $SUDO_HELPER losetup --find --show img$i` - done -} - -cleanup_devices() -{ - for dev in ${devs[@]}; do - run_mayfail $SUDO_HELPER losetup -d $dev - done - for i in `seq $ndevs`; do - truncate -s0 img$i - done - run_check $SUDO_HELPER losetup --all -} - test_do_mkfs() { - run_check $SUDO_HELPER $TOP/mkfs.btrfs -f $@ ${devs[@]} + run_check $SUDO_HELPER $TOP/mkfs.btrfs -f $@ ${loopdevs[@]} run_check $SUDO_HELPER $TOP/btrfs inspect-internal dump-super $dev1 run_check $SUDO_HELPER $TOP/btrfs check $dev1 run_check $SUDO_HELPER $TOP/btrfs filesystem show @@ -47,6 +20,7 @@ test_wipefs() { run_check $SUDO_HELPER wipefs -a $devtodel run_check $SUDO_HELPER losetup -d $devtodel + unset loopdevs[3] run_check $SUDO_HELPER losetup --all run_check $TOP/btrfs filesystem show } @@ -70,13 +44,14 @@ test_delete_missing() run_check_umount_test_dev } -prepare_devices -dev1=${devs[1]} -devtodel=${devs[3]} +setup_loopdevs 4 +prepare_loopdevs +dev1=${loopdevs[1]} +devtodel=${loopdevs[3]} TEST_DEV=$dev1 -test_do_mkfs +test_do_mkfs -m raid1 -d raid1 test_wipefs test_delete_missing -cleanup_devices +cleanup_loopdevs diff --git a/tests/misc-tests/022-filesystem-du-on-empty-subvol/test.sh b/tests/misc-tests/022-filesystem-du-on-empty-subvol/test.sh new file mode 100755 index 00000000..72cf076f --- /dev/null +++ b/tests/misc-tests/022-filesystem-du-on-empty-subvol/test.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# +# btrfs fi du should handle empty subvolumes (with ino == 2) + +source "$TOP/tests/common" + +check_prereq mkfs.btrfs +check_prereq btrfs +setup_root_helper +prepare_test_dev + +run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" +run_check_mount_test_dev + +cd "$TEST_MNT" + +run_check $SUDO_HELPER "$TOP/btrfs" subvolume create test1 +run_check $SUDO_HELPER "$TOP/btrfs" subvolume create test1/test2 +run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot test1 test1-snap +run_check $SUDO_HELPER "$TOP/btrfs" filesystem du -s test1 +run_check_stdout $SUDO_HELPER "$TOP/btrfs" filesystem du -s test1-snap | \ + grep -q "ERROR:.*ioctl" && _fail "empty subvolume not handled" + +cd .. + +run_check_umount_test_dev diff --git a/tests/misc-tests/023-device-usage-with-missing-device/test.sh b/tests/misc-tests/023-device-usage-with-missing-device/test.sh new file mode 100755 index 00000000..3c8ba85c --- /dev/null +++ b/tests/misc-tests/023-device-usage-with-missing-device/test.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# check if 'device slack' is reported as zero when a device is missing + +source "$TOP/tests/common" + +check_prereq btrfs-image +check_prereq mkfs.btrfs +check_prereq btrfs + +setup_root_helper + +test_run() +{ + # empty filesystem, with enough redundancy so degraded mount works + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f -d raid1 -m raid1 $dev1 $dev2 + + TEST_DEV="$dev1" + run_check_mount_test_dev + run_check $SUDO_HELPER "$TOP/btrfs" filesystem usage "$TEST_MNT" + run_check_stdout $SUDO_HELPER "$TOP/btrfs" device usage "$TEST_MNT" | \ + grep -q "slack.*16\\.00EiB" && _fail + run_check_umount_test_dev + + run_mayfail wipefs -a $dev2 + run_check $SUDO_HELPER losetup -d $dev2 + unset loopdevs[2] + + run_check_mount_test_dev -o degraded,ro + run_check $SUDO_HELPER "$TOP/btrfs" filesystem usage "$TEST_MNT" + run_check_stdout $SUDO_HELPER "$TOP/btrfs" device usage "$TEST_MNT" | \ + grep -q "slack.*16\\.00EiB" && _fail + run_check_umount_test_dev +} + +setup_loopdevs 2 +prepare_loopdevs +dev1=${loopdevs[1]} +dev2=${loopdevs[2]} +test_run +cleanup_loopdevs diff --git a/tests/misc-tests/024-inspect-internal-rootid/test.sh b/tests/misc-tests/024-inspect-internal-rootid/test.sh new file mode 100755 index 00000000..40e382bb --- /dev/null +++ b/tests/misc-tests/024-inspect-internal-rootid/test.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# +# test commands of inspect-internal rootid + +source "$TOP/tests/common" + +check_prereq mkfs.btrfs +check_prereq btrfs + +prepare_test_dev + +run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" +run_check_mount_test_dev +run_check $SUDO_HELPER chmod a+rw "$TEST_MNT" +cd "$TEST_MNT" + +run_check "$TOP/btrfs" subvolume create sub +run_check "$TOP/btrfs" subvolume create sub/subsub +run_check mkdir dir +run_check touch file1 +run_check touch dir/file2 +run_check touch sub/file3 + +id1=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid .) \ + || { echo $id1; exit 1; } +id2=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid sub) \ + || { echo $id2; exit 1; } +id3=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid sub/subsub) \ + || { echo $id3; exit 1; } +id4=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid dir) \ + || { echo $id4; exit 1; } +id5=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid file1) \ + || { echo $id5; exit 1; } +id6=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid dir/file2) \ + || { echo $id6; exit 1; } +id7=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid sub/file3) \ + || { echo $id7; exit 1; } + +if ! ([ $id1 -ne $id2 ] && [ $id1 -ne $id3 ] && [ $id2 -ne $id3 ]); then + _fail "inspect-internal rootid: each subvolume must have different id" +fi + +if ! ([ $id1 -eq $id4 ] && [ $id1 -eq $id5 ] && [ $id1 -eq $id6 ]); then + _fail "inspect-internal rootid: rootid mismatch found" +fi + +if ! ([ $id2 -eq $id7 ]); then + _fail "inspect-internal rootid: rootid mismatch found" +fi + +run_mustfail "should fail for non existent file" \ + "$TOP/btrfs" inspect-internal rootid no_such_file +run_mustfail "should fail for non-btrfs filesystem" \ + "$TOP/btrfs" inspect-internal rootid /dev/null + +cd .. +run_check_umount_test_dev diff --git a/tests/misc-tests/025-zstd-compression/compress.raw.xz b/tests/misc-tests/025-zstd-compression/compress.raw.xz new file mode 100644 index 00000000..67aaf17f Binary files /dev/null and b/tests/misc-tests/025-zstd-compression/compress.raw.xz differ diff --git a/tests/misc-tests/025-zstd-compression/test.sh b/tests/misc-tests/025-zstd-compression/test.sh new file mode 100755 index 00000000..e95dcb36 --- /dev/null +++ b/tests/misc-tests/025-zstd-compression/test.sh @@ -0,0 +1,56 @@ +#!/bin/bash +# Test zstd compression support on a prebuilt btrfs image + +source "$TOP/tests/common" + +check_prereq btrfs +check_global_prereq md5sum + +# Extract the test image +image=$(extract_image compress.raw.xz) + +check_dump_tree() { + local image=$1 + local string=$2 + + run_check_stdout "$TOP/btrfs" inspect-internal dump-tree "$image" \ + | grep -q "$string" \ + || _fail "btrfs inspect-internal dump-tree didn't print $string" +} + +# Check that there are blocks of each compression type +check_dump_tree "$image" "extent compression 1 (zlib)" +check_dump_tree "$image" "extent compression 2 (lzo)" +check_dump_tree "$image" "extent compression 3 (zstd)" + +# Check that the filesystem has incompat COMPRESS_ZSTD +run_check_stdout "$TOP/btrfs" inspect-internal dump-super -f "$image" \ + | grep -q COMPRESS_ZSTD \ + || _fail "btrfs inspect-internal dump-super no incompat COMPRESS_ZSTD" + +# Create a temporary directory and restore the filesystem +restore_tmp=$(mktemp --tmpdir -d btrfs-progs-022-zstd-compression.XXXXXXXXXX) +run_check "$TOP/btrfs" restore "$image" "$restore_tmp" + +# Expect 3 files +num_files=$(ls -1 "$restore_tmp" | wc -l) +[ "$num_files" == 3 ] || _fail "number of files does not match" + +check_md5() { + local file="$1" + local expect_md5="$2" + + md5=$(run_check_stdout md5sum "$file" | cut -d ' ' -f 1) + [ "$md5" == "$expect_md5" ] \ + || _fail "$file digest $md5 does not match $expect_md5" +} + +# Each should be 200K of zeros +expect_md5=$(dd if=/dev/zero bs=1K count=200 status=none | md5sum | cut -d ' ' -f 1) +check_md5 "$restore_tmp/zlib" "$expect_md5" +check_md5 "$restore_tmp/lzo" "$expect_md5" +check_md5 "$restore_tmp/zstd" "$expect_md5" + +# Clean up +rm -r -- "$restore_tmp" +rm -- "$image" diff --git a/tests/misc-tests/026-image-non-printable-chars/test.sh b/tests/misc-tests/026-image-non-printable-chars/test.sh new file mode 100755 index 00000000..8018586f --- /dev/null +++ b/tests/misc-tests/026-image-non-printable-chars/test.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# check that sanitized names with matching crc do not contain unprintable +# characters, namely 0x7f + +source "$TOP/tests/common" + +check_prereq mkfs.btrfs +check_prereq btrfs + +prepare_test_dev + +run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" +run_check_mount_test_dev +run_check $SUDO_HELPER chmod a+rw "$TEST_MNT" + +# known to produce char 0x7f == 127 +touch "$TEST_MNT/|5gp!" + +run_check_umount_test_dev + +run_check $SUDO_HELPER "$TOP/btrfs-image" -ss "$TEST_DEV" img +run_check $SUDO_HELPER "$TOP/btrfs-image" -r img img.restored +run_check_stdout $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-tree img.restored > img.dump + +ch7f=$(echo -en '\x7f') +if grep -q "$ch7f" img.dump; then + _fail "found char 0x7f in the sanitized names" +fi + +rm -f -- img img.restored img.dump diff --git a/tests/misc-tests/027-subvol-list-deleted-toplevel/test.sh b/tests/misc-tests/027-subvol-list-deleted-toplevel/test.sh new file mode 100755 index 00000000..ee41d71f --- /dev/null +++ b/tests/misc-tests/027-subvol-list-deleted-toplevel/test.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# check that the toplevel subvolume is not listed as regular or deleted + +source "$TOP/tests/common" + +check_prereq mkfs.btrfs +check_prereq btrfs + +prepare_test_dev + +run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" +run_check_mount_test_dev +run_check_stdout $SUDO_HELPER "$TOP/btrfs" subvolume list "$TEST_MNT" | + grep -i -q "id 5" && _fail "found toplevel among regular" +run_check_stdout $SUDO_HELPER "$TOP/btrfs" subvolume list -d "$TEST_MNT" | + grep -i -q "id 5.*DELETED" && _fail "found toplevel among deleted" + +run_check_umount_test_dev diff --git a/tests/mkfs-tests/001-basic-profiles/test.sh b/tests/mkfs-tests/001-basic-profiles/test.sh index 0dc9a2bd..854ee007 100755 --- a/tests/mkfs-tests/001-basic-profiles/test.sh +++ b/tests/mkfs-tests/001-basic-profiles/test.sh @@ -7,34 +7,8 @@ source $TOP/tests/common check_prereq mkfs.btrfs check_prereq btrfs -ndevs=4 -declare -a devs -dev1= - setup_root_helper -prepare_devices() -{ - for i in `seq $ndevs`; do - touch img$i - chmod a+rw img$i - truncate -s0 img$i - truncate -s2g img$i - devs[$i]=`run_check_stdout $SUDO_HELPER losetup --find --show img$i` - done -} - -cleanup_devices() -{ - for dev in ${devs[@]}; do - run_check $SUDO_HELPER losetup -d $dev - done - for i in `seq $ndevs`; do - truncate -s0 img$i - done - run_check $SUDO_HELPER losetup --all -} - test_get_info() { run_check $SUDO_HELPER $TOP/btrfs inspect-internal dump-super $dev1 @@ -58,12 +32,13 @@ test_mkfs_single() } test_mkfs_multi() { - test_do_mkfs $@ ${devs[@]} + test_do_mkfs $@ ${loopdevs[@]} test_get_info } -prepare_devices -dev1=${devs[1]} +setup_loopdevs 4 +prepare_loopdevs +dev1=${loopdevs[1]} test_mkfs_single test_mkfs_single -d single -m single @@ -89,4 +64,4 @@ test_mkfs_multi -d raid6 -m raid6 --mixed test_mkfs_multi -d dup -m dup test_mkfs_multi -d dup -m dup --mixed -cleanup_devices +cleanup_loopdevs diff --git a/tests/mkfs-tests/005-long-device-name-for-ssd/test.sh b/tests/mkfs-tests/005-long-device-name-for-ssd/test.sh index 63fb1785..5bdf50e0 100755 --- a/tests/mkfs-tests/005-long-device-name-for-ssd/test.sh +++ b/tests/mkfs-tests/005-long-device-name-for-ssd/test.sh @@ -38,3 +38,4 @@ run_check $SUDO_HELPER $TOP/btrfs inspect-internal dump-super $dmdev run_check $SUDO_HELPER dmsetup remove $dmname run_mayfail $SUDO_HELPER losetup -d $loopdev run_check truncate -s0 img +rm img diff --git a/tests/mkfs-tests/006-partitioned-loopdev/test.sh b/tests/mkfs-tests/006-partitioned-loopdev/test.sh index 12f37842..0c77e5cd 100755 --- a/tests/mkfs-tests/006-partitioned-loopdev/test.sh +++ b/tests/mkfs-tests/006-partitioned-loopdev/test.sh @@ -29,3 +29,4 @@ done # cleanup run_check $SUDO_HELPER losetup -d $loopdev run_check truncate -s0 img +rm img diff --git a/tests/mkfs-tests/009-special-files-for-rootdir/test.sh b/tests/mkfs-tests/009-special-files-for-rootdir/test.sh new file mode 100755 index 00000000..d327a0d9 --- /dev/null +++ b/tests/mkfs-tests/009-special-files-for-rootdir/test.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Check if --rootdir can handle special files (socket/fifo/char/block) correctly +# +# --rootdir had a problem of filling dir items/indexes with wrong type +# and caused btrfs check to report such error +# +# Note: sock type is skipped in this test + +source "$TOP/tests/common" + +check_prereq mkfs.btrfs +check_prereq btrfs + +setup_root_helper # For mknod +prepare_test_dev + +# mknod can create FIFO/CHAR/BLOCK file but not SOCK. +# No neat tool to create socket file, unless using python or similar. +# So no SOCK is tested here +check_global_prereq mknod +check_global_prereq dd + +tmp=$(mktemp -d --tmpdir btrfs-progs-mkfs.rootdirXXXXXXX) + +run_check mkdir "$tmp/dir" +run_check mkdir -p "$tmp/dir/in/dir" +run_check mknod "$tmp/fifo" p +run_check $SUDO_HELPER mknod "$tmp/char" c 1 1 +run_check $SUDO_HELPER mknod "$tmp/block" b 1 1 +run_check dd if=/dev/zero bs=1M count=1 of="$tmp/regular" + +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f -r "$tmp" "$TEST_DEV" + +rm -rf -- "$tmp" + +run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV" diff --git a/tests/scan-results.sh b/tests/scan-results.sh index f3ebcbc4..f935b1cd 100755 --- a/tests/scan-results.sh +++ b/tests/scan-results.sh @@ -11,7 +11,9 @@ for i in *.txt; do *Assertion*failed*) echo "ASSERTION FAILED: $last" ;; *runtime\ error*) echo "RUNTIME ERROR (sanitizer): $last" ;; *AddressSanitizer*heap-use-after-free*) echo "RUNTIME ERROR (use after free): $last" ;; + *LeakSanitizer:*leak*) echo "SANITIZER REPORT: memory leak: $last" ;; *Warning:\ assertion*failed*) echo "ASSERTION WARNING: $last" ;; + *command\ not\ found*) echo "COMMAND NOT FOUND: $last" ;; *) : ;; esac done < "$i" diff --git a/tests/sha-private.h b/tests/sha-private.h index 6e9c4520..d94d4374 100644 --- a/tests/sha-private.h +++ b/tests/sha-private.h @@ -1,5 +1,9 @@ /************************ sha-private.h ************************/ /***************** See RFC 6234 for details. *******************/ +/* Copyright (c) 2011 IETF Trust and the persons identified as */ +/* authors of the code. All rights reserved. */ +/* See sha.h for terms of use and redistribution. */ + #ifndef _SHA_PRIVATE__H #define _SHA_PRIVATE__H /* diff --git a/tests/sha224-256.c b/tests/sha224-256.c index 2d963e65..82124a03 100644 --- a/tests/sha224-256.c +++ b/tests/sha224-256.c @@ -1,23 +1,3 @@ -/* -RFC 6234 SHAs, HMAC-SHAs, and HKDF May 2011 - - -Copyright Notice - - Copyright (c) 2011 IETF Trust and the persons identified as the - document authors. All rights reserved. - - This document is subject to BCP 78 and the IETF Trust's Legal - Provisions Relating to IETF Documents - (http://trustee.ietf.org/license-info) in effect on the date of - publication of this document. Please review these documents - carefully, as they describe your rights and restrictions with respect - to this document. Code Components extracted from this document must - include Simplified BSD License text as described in Section 4.e of - the Trust Legal Provisions and are provided without warranty as - described in the Simplified BSD License. -*/ - /************************* sha224-256.c ************************/ /***************** See RFC 6234 for details. *******************/ /* Copyright (c) 2011 IETF Trust and the persons identified as */ diff --git a/transaction.c b/transaction.c new file mode 100644 index 00000000..ad705728 --- /dev/null +++ b/transaction.c @@ -0,0 +1,185 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License v2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 021110-1307, USA. + */ + +#include "kerncompat.h" +#include "disk-io.h" +#include "transaction.h" + +#include "messages.h" + +struct btrfs_trans_handle* btrfs_start_transaction(struct btrfs_root *root, + int num_blocks) +{ + struct btrfs_fs_info *fs_info = root->fs_info; + struct btrfs_trans_handle *h = kzalloc(sizeof(*h), GFP_NOFS); + + if (fs_info->transaction_aborted) + return ERR_PTR(-EROFS); + + if (!h) + return ERR_PTR(-ENOMEM); + if (root->commit_root) { + error("commit_root aleady set when starting transaction"); + kfree(h); + return ERR_PTR(-EINVAL); + } + if (fs_info->running_transaction) { + error("attempt to start transaction over already running one"); + kfree(h); + return ERR_PTR(-EINVAL); + } + h->fs_info = fs_info; + fs_info->running_transaction = h; + fs_info->generation++; + h->transid = fs_info->generation; + h->blocks_reserved = num_blocks; + root->last_trans = h->transid; + root->commit_root = root->node; + extent_buffer_get(root->node); + + return h; +} + +static int update_cowonly_root(struct btrfs_trans_handle *trans, + struct btrfs_root *root) +{ + int ret; + u64 old_root_bytenr; + struct btrfs_root *tree_root = root->fs_info->tree_root; + + btrfs_write_dirty_block_groups(trans, root); + while(1) { + old_root_bytenr = btrfs_root_bytenr(&root->root_item); + if (old_root_bytenr == root->node->start) + break; + btrfs_set_root_bytenr(&root->root_item, + root->node->start); + btrfs_set_root_generation(&root->root_item, + trans->transid); + root->root_item.level = btrfs_header_level(root->node); + ret = btrfs_update_root(trans, tree_root, + &root->root_key, + &root->root_item); + BUG_ON(ret); + btrfs_write_dirty_block_groups(trans, root); + } + return 0; +} + +int commit_tree_roots(struct btrfs_trans_handle *trans, + struct btrfs_fs_info *fs_info) +{ + struct btrfs_root *root; + struct list_head *next; + struct extent_buffer *eb; + int ret; + + if (fs_info->readonly) + return 0; + + eb = fs_info->tree_root->node; + extent_buffer_get(eb); + ret = btrfs_cow_block(trans, fs_info->tree_root, eb, NULL, 0, &eb); + free_extent_buffer(eb); + if (ret) + return ret; + + while(!list_empty(&fs_info->dirty_cowonly_roots)) { + next = fs_info->dirty_cowonly_roots.next; + list_del_init(next); + root = list_entry(next, struct btrfs_root, dirty_list); + update_cowonly_root(trans, root); + free_extent_buffer(root->commit_root); + root->commit_root = NULL; + } + + return 0; +} + +int __commit_transaction(struct btrfs_trans_handle *trans, + struct btrfs_root *root) +{ + u64 start; + u64 end; + struct btrfs_fs_info *fs_info = root->fs_info; + struct extent_buffer *eb; + struct extent_io_tree *tree = &fs_info->extent_cache; + int ret; + + while(1) { + ret = find_first_extent_bit(tree, 0, &start, &end, + EXTENT_DIRTY); + if (ret) + break; + while(start <= end) { + eb = find_first_extent_buffer(tree, start); + BUG_ON(!eb || eb->start != start); + ret = write_tree_block(trans, fs_info, eb); + BUG_ON(ret); + start += eb->len; + clear_extent_buffer_dirty(eb); + free_extent_buffer(eb); + } + } + return 0; +} + +int btrfs_commit_transaction(struct btrfs_trans_handle *trans, + struct btrfs_root *root) +{ + u64 transid = trans->transid; + int ret = 0; + struct btrfs_fs_info *fs_info = root->fs_info; + + if (trans->fs_info->transaction_aborted) + return -EROFS; + + if (root->commit_root == root->node) + goto commit_tree; + if (root == root->fs_info->tree_root) + goto commit_tree; + if (root == root->fs_info->chunk_root) + goto commit_tree; + + free_extent_buffer(root->commit_root); + root->commit_root = NULL; + + btrfs_set_root_bytenr(&root->root_item, root->node->start); + btrfs_set_root_generation(&root->root_item, trans->transid); + root->root_item.level = btrfs_header_level(root->node); + ret = btrfs_update_root(trans, root->fs_info->tree_root, + &root->root_key, &root->root_item); + BUG_ON(ret); +commit_tree: + ret = commit_tree_roots(trans, fs_info); + BUG_ON(ret); + ret = __commit_transaction(trans, root); + BUG_ON(ret); + write_ctree_super(trans, fs_info); + btrfs_finish_extent_commit(trans, fs_info->extent_root, + &fs_info->pinned_extents); + kfree(trans); + free_extent_buffer(root->commit_root); + root->commit_root = NULL; + fs_info->running_transaction = NULL; + fs_info->last_trans_committed = transid; + return 0; +} + +void btrfs_abort_transaction(struct btrfs_trans_handle *trans, int error) +{ + trans->fs_info->transaction_aborted = error; +} diff --git a/transaction.h b/transaction.h index 0c41af51..470ee3de 100644 --- a/transaction.h +++ b/transaction.h @@ -23,6 +23,7 @@ #include "ctree.h" struct btrfs_trans_handle { + struct btrfs_fs_info *fs_info; u64 transid; u64 alloc_exclude_start; u64 alloc_exclude_nr; @@ -31,27 +32,14 @@ struct btrfs_trans_handle { struct btrfs_block_group_cache *block_group; }; -static inline struct btrfs_trans_handle * -btrfs_start_transaction(struct btrfs_root *root, int num_blocks) -{ - struct btrfs_fs_info *fs_info = root->fs_info; - struct btrfs_trans_handle *h = malloc(sizeof(*h)); - - BUG_ON(!h); - BUG_ON(root->commit_root); - BUG_ON(fs_info->running_transaction); - fs_info->running_transaction = h; - fs_info->generation++; - h->transid = fs_info->generation; - h->alloc_exclude_start = 0; - h->alloc_exclude_nr = 0; - h->blocks_reserved = num_blocks; - h->blocks_used = 0; - h->block_group = NULL; - root->last_trans = h->transid; - root->commit_root = root->node; - extent_buffer_get(root->node); - return h; -} +struct btrfs_trans_handle* btrfs_start_transaction(struct btrfs_root *root, + int num_blocks); +int __commit_transaction(struct btrfs_trans_handle *trans, + struct btrfs_root *root); +int commit_tree_roots(struct btrfs_trans_handle *trans, + struct btrfs_fs_info *fs_info); +int btrfs_commit_transaction(struct btrfs_trans_handle *trans, + struct btrfs_root *root); +void btrfs_abort_transaction(struct btrfs_trans_handle *trans, int error); #endif diff --git a/travis/should-run-test b/travis/should-run-test new file mode 100755 index 00000000..f711615c --- /dev/null +++ b/travis/should-run-test @@ -0,0 +1,24 @@ +#!/bin/sh + +if [ -z "$TRAVIS_BRANCH" ] ; then + # no branch? run anyway + exit 0 +fi + +# no tests +if [ "$TRAVIS_BRANCH" = 'coverity_scan' ]; then + exit 1 +fi + +# quick tests +if [ "$TRAVIS_BRANCH" = 'devel' -o "$TRAVIS_BRANCH" = 'master' ]; then + exit 0 +fi + +# all tests +if [ "$TRAVIS_BRANCH" = 'release-test' ]; then + exit 0 +fi + +# branch not recognized +exit 1 diff --git a/utils.c b/utils.c index bb049133..524f463d 100644 --- a/utils.c +++ b/utils.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -568,9 +569,9 @@ int open_path_or_dev_mnt(const char *path, DIR **dirstream, int verbose) /* * Do the following checks before calling open_file_or_dir(): * 1: path is in a btrfs filesystem - * 2: path is a directory + * 2: path is a directory if dir_only is 1 */ -int btrfs_open_dir(const char *path, DIR **dirstream, int verbose) +int btrfs_open(const char *path, DIR **dirstream, int verbose, int dir_only) { struct statfs stfs; struct stat st; @@ -593,7 +594,7 @@ int btrfs_open_dir(const char *path, DIR **dirstream, int verbose) return -1; } - if (!S_ISDIR(st.st_mode)) { + if (dir_only && !S_ISDIR(st.st_mode)) { error_on(verbose, "not a directory: %s", path); return -3; } @@ -607,6 +608,16 @@ int btrfs_open_dir(const char *path, DIR **dirstream, int verbose) return ret; } +int btrfs_open_dir(const char *path, DIR **dirstream, int verbose) +{ + return btrfs_open(path, dirstream, verbose, 1); +} + +int btrfs_open_file_or_dir(const char *path, DIR **dirstream, int verbose) +{ + return btrfs_open(path, dirstream, verbose, 0); +} + /* checks if a device is a loop device */ static int is_loop_device (const char* device) { struct stat statbuf; @@ -1229,6 +1240,7 @@ static int set_label_unmounted(const char *dev, const char *label) return -1; trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); __strncpy_null(root->fs_info->super_copy->label, label, BTRFS_LABEL_SIZE - 1); btrfs_commit_transaction(trans, root); @@ -1747,6 +1759,109 @@ out: return ret; } +int get_fsid(const char *path, u8 *fsid, int silent) +{ + int ret; + int fd; + struct btrfs_ioctl_fs_info_args args; + + fd = open(path, O_RDONLY); + if (fd < 0) { + ret = -errno; + if (!silent) + error("failed to open %s: %s", path, + strerror(-ret)); + goto out; + } + + ret = ioctl(fd, BTRFS_IOC_FS_INFO, &args); + if (ret < 0) { + ret = -errno; + goto out; + } + + memcpy(fsid, args.fsid, BTRFS_FSID_SIZE); + ret = 0; + +out: + if (fd != -1) + close(fd); + return ret; +} + +int is_seen_fsid(u8 *fsid, struct seen_fsid *seen_fsid_hash[]) +{ + u8 hash = fsid[0]; + int slot = hash % SEEN_FSID_HASH_SIZE; + struct seen_fsid *seen = seen_fsid_hash[slot]; + + while (seen) { + if (memcmp(seen->fsid, fsid, BTRFS_FSID_SIZE) == 0) + return 1; + + seen = seen->next; + } + + return 0; +} + +int add_seen_fsid(u8 *fsid, struct seen_fsid *seen_fsid_hash[], + int fd, DIR *dirstream) +{ + u8 hash = fsid[0]; + int slot = hash % SEEN_FSID_HASH_SIZE; + struct seen_fsid *seen = seen_fsid_hash[slot]; + struct seen_fsid *alloc; + + if (!seen) + goto insert; + + while (1) { + if (memcmp(seen->fsid, fsid, BTRFS_FSID_SIZE) == 0) + return -EEXIST; + + if (!seen->next) + break; + + seen = seen->next; + } + +insert: + alloc = malloc(sizeof(*alloc)); + if (!alloc) + return -ENOMEM; + + alloc->next = NULL; + memcpy(alloc->fsid, fsid, BTRFS_FSID_SIZE); + alloc->fd = fd; + alloc->dirstream = dirstream; + + if (seen) + seen->next = alloc; + else + seen_fsid_hash[slot] = alloc; + + return 0; +} + +void free_seen_fsid(struct seen_fsid *seen_fsid_hash[]) +{ + int slot; + struct seen_fsid *seen; + struct seen_fsid *next; + + for (slot = 0; slot < SEEN_FSID_HASH_SIZE; slot++) { + seen = seen_fsid_hash[slot]; + while (seen) { + next = seen->next; + close_file_or_dir(seen->fd, seen->dirstream); + free(seen); + seen = next; + } + seen_fsid_hash[slot] = NULL; + } +} + static int group_profile_devs_min(u64 flag) { switch (flag & BTRFS_BLOCK_GROUP_PROFILE_MASK) { @@ -2574,3 +2689,15 @@ u8 rand_u8(void) void btrfs_config_init(void) { } + +/* Returns total size of main memory in bytes, -1UL if error. */ +unsigned long total_memory(void) +{ + struct sysinfo si; + + if (sysinfo(&si) < 0) { + error("can't determine memory size"); + return -1UL; + } + return si.totalram * si.mem_unit; /* bytes */ +} diff --git a/utils.h b/utils.h index 091f8fab..a82d46f6 100644 --- a/utils.h +++ b/utils.h @@ -28,6 +28,7 @@ #include "btrfs-list.h" #include "sizes.h" #include "messages.h" +#include "ioctl.h" #define BTRFS_SCAN_MOUNTED (1ULL << 0) #define BTRFS_SCAN_LBLKID (1ULL << 1) @@ -68,6 +69,14 @@ void units_set_base(unsigned *units, unsigned base); #define PREP_DEVICE_DISCARD (1U << 1) #define PREP_DEVICE_VERBOSE (1U << 2) +#define SEEN_FSID_HASH_SIZE 256 +struct seen_fsid { + u8 fsid[BTRFS_FSID_SIZE]; + struct seen_fsid *next; + DIR *dirstream; + int fd; +}; + int btrfs_make_root_dir(struct btrfs_trans_handle *trans, struct btrfs_root *root, u64 objectid); int btrfs_prepare_device(int fd, const char *file, u64 *block_count_ret, @@ -100,6 +109,13 @@ int open_file_or_dir3(const char *fname, DIR **dirstream, int open_flags); void close_file_or_dir(int fd, DIR *dirstream); int get_fs_info(const char *path, struct btrfs_ioctl_fs_info_args *fi_args, struct btrfs_ioctl_dev_info_args **di_ret); +int get_fsid(const char *path, u8 *fsid, int silent); + +int is_seen_fsid(u8 *fsid, struct seen_fsid *seen_fsid_hash[]); +int add_seen_fsid(u8 *fsid, struct seen_fsid *seen_fsid_hash[], + int fd, DIR *dirstream); +void free_seen_fsid(struct seen_fsid *seen_fsid_hash[]); + int get_label(const char *btrfs_dev, char *label); int set_label(const char *btrfs_dev, const char *label); @@ -108,7 +124,9 @@ int is_block_device(const char *file); int is_mount_point(const char *file); int check_arg_type(const char *input); int open_path_or_dev_mnt(const char *path, DIR **dirstream, int verbose); +int btrfs_open(const char *path, DIR **dirstream, int verbose, int dir_only); int btrfs_open_dir(const char *path, DIR **dirstream, int verbose); +int btrfs_open_file_or_dir(const char *path, DIR **dirstream, int verbose); u64 btrfs_device_size(int fd, struct stat *st); /* Helper to always get proper size of the destination string */ #define strncpy_null(dest, src) __strncpy_null(dest, src, sizeof(dest)) @@ -151,6 +169,8 @@ unsigned int get_unit_mode_from_arg(int *argc, char *argv[], int df_mode); int string_is_numerical(const char *str); int prefixcmp(const char *str, const char *prefix); +unsigned long total_memory(void); + /* * Global program state, configurable by command line and available to * functions without extra context passing. diff --git a/version.sh b/version.sh index 7bb6be80..884c9e2b 100755 --- a/version.sh +++ b/version.sh @@ -6,7 +6,7 @@ # Copyright 2008, Oracle # Released under the GNU GPLv2 -v="v4.12" +v="v4.13.3" opt=$1 diff --git a/volumes.c b/volumes.c index 2f3943dc..2209e5a9 100644 --- a/volumes.c +++ b/volumes.c @@ -505,8 +505,9 @@ err: return ret; } -static int find_next_chunk(struct btrfs_root *root, u64 objectid, u64 *offset) +static int find_next_chunk(struct btrfs_fs_info *fs_info, u64 *offset) { + struct btrfs_root *root = fs_info->chunk_root; struct btrfs_path *path; int ret; struct btrfs_key key; @@ -517,7 +518,7 @@ static int find_next_chunk(struct btrfs_root *root, u64 objectid, u64 *offset) if (!path) return -ENOMEM; - key.objectid = objectid; + key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID; key.offset = (u64)-1; key.type = BTRFS_CHUNK_ITEM_KEY; @@ -533,7 +534,7 @@ static int find_next_chunk(struct btrfs_root *root, u64 objectid, u64 *offset) } else { btrfs_item_key_to_cpu(path->nodes[0], &found_key, path->slots[0]); - if (found_key.objectid != objectid) + if (found_key.objectid != BTRFS_FIRST_CHUNK_TREE_OBJECTID) *offset = 0; else { chunk = btrfs_item_ptr(path->nodes[0], path->slots[0], @@ -868,10 +869,7 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans, return -ENOSPC; } - if (type & (BTRFS_BLOCK_GROUP_RAID0 | BTRFS_BLOCK_GROUP_RAID1 | - BTRFS_BLOCK_GROUP_RAID5 | BTRFS_BLOCK_GROUP_RAID6 | - BTRFS_BLOCK_GROUP_RAID10 | - BTRFS_BLOCK_GROUP_DUP)) { + if (type & BTRFS_BLOCK_GROUP_PROFILE_MASK) { if (type & BTRFS_BLOCK_GROUP_SYSTEM) { calc_size = SZ_8M; max_chunk_size = calc_size * 2; @@ -998,8 +996,7 @@ again: } return -ENOSPC; } - ret = find_next_chunk(chunk_root, BTRFS_FIRST_CHUNK_TREE_OBJECTID, - &offset); + ret = find_next_chunk(info, &offset); if (ret) return ret; key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID; @@ -1132,9 +1129,7 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans, } else { u64 tmp; - ret = find_next_chunk(chunk_root, - BTRFS_FIRST_CHUNK_TREE_OBJECTID, - &tmp); + ret = find_next_chunk(info, &tmp); key.offset = tmp; if (ret) return ret; @@ -1966,9 +1961,12 @@ int btrfs_read_sys_array(struct btrfs_fs_info *fs_info) u32 cur_offset; struct btrfs_key key; - sb = btrfs_find_create_tree_block(fs_info, - BTRFS_SUPER_INFO_OFFSET, - BTRFS_SUPER_INFO_SIZE); + if (fs_info->nodesize < BTRFS_SUPER_INFO_SIZE) { + printf("ERROR: nodesize %u too small to read superblock\n", + fs_info->nodesize); + return -EINVAL; + } + sb = btrfs_find_create_tree_block(fs_info, BTRFS_SUPER_INFO_OFFSET); if (!sb) return -ENOMEM; btrfs_set_buffer_uptodate(sb); -- cgit v1.2.3